@churchillliving/se-ui-toolkit 6.55.201 → 6.55.203
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.
|
@@ -3339,10 +3339,20 @@ export class GridComponent {
|
|
|
3339
3339
|
// Normalize rows before comparison to remove display-only properties
|
|
3340
3340
|
const normalizedCurrent = this.saveRecordArray.map(r => this.gridService.getAllowSaveRowlist([r], this.columns)[0]);
|
|
3341
3341
|
const normalizedOriginal = this.originalRows.map(r => this.gridService.getAllowSaveRowlist([r], this.columns)[0]);
|
|
3342
|
+
// Log first row to see what's different
|
|
3343
|
+
console.log('[GridComponent] First normalized current row:', normalizedCurrent[0]);
|
|
3344
|
+
console.log('[GridComponent] First normalized original row:', normalizedOriginal[0]);
|
|
3342
3345
|
dirtyRows = getChangedRows(normalizedCurrent, normalizedOriginal, this.columns, this.dataKey, true);
|
|
3343
|
-
// Map back to original rows with all properties
|
|
3344
|
-
dirtyRows = dirtyRows.map(normalizedRow => this.saveRecordArray.find(r => r[this.dataKey] === normalizedRow[this.dataKey]));
|
|
3345
3346
|
console.log('[GridComponent] After getChangedRows, dirtyRows length:', dirtyRows.length);
|
|
3347
|
+
// Log a row that's marked as dirty to see what's different
|
|
3348
|
+
if (dirtyRows.length > 0) {
|
|
3349
|
+
const firstDirtyKey = dirtyRows[0][this.dataKey];
|
|
3350
|
+
const origRow = this.originalRows.find(r => r[this.dataKey] === firstDirtyKey);
|
|
3351
|
+
const currRow = this.saveRecordArray.find(r => r[this.dataKey] === firstDirtyKey);
|
|
3352
|
+
console.log('[GridComponent] First dirty row changes:', { orig: origRow, current: currRow });
|
|
3353
|
+
}
|
|
3354
|
+
// Map back to original rows with all properties
|
|
3355
|
+
dirtyRows = dirtyRows.map(normalizedRow => this.saveRecordArray.find(r => r[this.dataKey] === normalizedRow[this.dataKey])).filter(r => r); // Remove any undefined from map
|
|
3346
3356
|
}
|
|
3347
3357
|
if (dirtyRows.length > 0) {
|
|
3348
3358
|
dirtyRows.forEach(row => delete row[this.dataKey]); // remove temp_id before emitting — it's only used for dirty-row comparison
|
|
@@ -4142,4 +4152,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
4142
4152
|
type: HostListener,
|
|
4143
4153
|
args: ['window:beforeunload', ['$event']]
|
|
4144
4154
|
}] } });
|
|
4145
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2dyaWQvZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2dyaWQvZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUdaLFFBQVEsRUFFUixZQUFZLEVBR1osU0FBUyxFQUNULFlBQVksRUFFWixnQkFBZ0IsR0FLakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBUXJFLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUxQixPQUFPLEVBU0wsa0JBQWtCLEVBQ2xCLGVBQWUsRUFDZixrQkFBa0IsRUFFbEIsY0FBYyxFQUNkLGVBQWUsRUFFZixjQUFjLEVBQ2QscUJBQXFCLEVBRXJCLFVBQVUsRUFDVixnQkFBZ0IsRUFFaEIsU0FBUyxFQUNULGNBQWMsR0FDZixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxlQUFlLEVBQWUsTUFBTSxpQ0FBaUMsQ0FBQztBQUcvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLHdDQUF3QyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFJNU8sT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1B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LENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7WUFDdEwsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1lBQ25MLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtZQUN0TCxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsR0FBRyxD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XG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgT25DaGFuZ2VzLFxuICBPcHRpb25hbCxcbiAgRWxlbWVudFJlZixcbiAgVmlld0NoaWxkcmVuLFxuICBRdWVyeUxpc3QsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgSG9zdExpc3RlbmVyLFxuICBPbkRlc3Ryb3ksXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIE5nWm9uZSxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgUmVuZGVyZXIyLFxuICBBcHBsaWNhdGlvblJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBnZXRDaGFuZ2VkUm93cyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdGllcy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQge1xuICBEeW5hbWljRGlhbG9nUmVmLFxuICBEeW5hbWljRGlhbG9nQ29uZmlnLFxuICBEaWFsb2dTZXJ2aWNlLFxuICBEeW5hbWljRGlhbG9nQ29tcG9uZW50LFxufSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xuaW1wb3J0IGpzUERGIGZyb20gJ2pzcGRmJztcbmltcG9ydCB7IEdyaWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZ3JpZC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIElHcmlkQ29sdW1uLFxuICBJR3JpZFNvcnQsXG4gIElHcmlkU2VydmVyU2lkZUV2ZW50LFxuICBJR3JpZFBhZ2luYXRpb25FdmVudCxcbiAgSUdsb2JhbEZpbHRlcixcbiAgSUdyaWRGaWx0ZXIsXG4gIElHcmlkQ29sdW1uQWN0aW9uLFxuICBJR3JpZFJvd0FjdGlvbixcbiAgRUdyaWRTZWxlY3Rpb25UeXBlLFxuICBFR3JpZENvbHVtblR5cGUsXG4gIEVHcmlkU29ydERpcmVjdGlvbixcbiAgSUdyaWREYXRhRXhwb3J0LFxuICBFR3JpZEFnZ3JlZ2F0ZSxcbiAgRUdyaWRGb3JtYXRUeXBlLFxuICBJR3JpZEZpbHRlckluZm8sXG4gIEVHcmlkVmFsaWRhdG9yLFxuICBHcmlkRmlsdGVyQ29udHJvbFR5cGUsXG4gIHVzZXJTZXR0aW5nLFxuICBFR3JpZEV4Y2VsLFxuICBFR3JpZFJvd1Byb3BOYW1lLFxuICBJR3JpZFJlcG9ydEJ0bixcbiAgRUdyaWRsaW5rLFxuICBFR3JpZEZvcm1hdHRlcixcbn0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dyaWQubW9kZWwnO1xuaW1wb3J0IHsgRVBlcm1pc3Npb25UeXBlLCBJUGVybWlzc2lvbiB9IGZyb20gJy4uLy4uLy4uL21vZGVscy91c2VyLWluZm8ubW9kZWwnO1xuaW1wb3J0IHsgQXV0aGVudGljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aGVudGljYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hbGVydC5zZXJ2aWNlJztcbmltcG9ydCB7IElmcmFtZUNvbXBvbmVudCB9IGZyb20gJy4uL2lmcmFtZS9pZnJhbWUuY29tcG9uZW50JztcbmltcG9ydCB7IERhdGVQaXBlLCBEZWNpbWFsUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBhdXRvU2V0TG9va3VwRGF0YSwgY2hhbmdlQ29sdW1uc1N0YXRlLCBjdXJyZW50VXJsLCBkcmFnZ2FibGVEaWFsb2csIG9iakNvbnZlcnRUb0xvd2VyLCBzZXREaWFsb2dSZXNwb25zZSwgc2V0TWludXRlc0ludGVydmFsLCBzZXRUaW1lSW5EYXRlLCBvbkdsb2JhbEZpbHRlckNvbnRyb2xSaWdodEJ0blN0YXRlQ2hhbmdlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0aWVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGFibGUgfSBmcm9tICdwcmltZW5nL3RhYmxlJztcbmltcG9ydCB7IE1lbnUgfSBmcm9tICdwcmltZW5nL21lbnUnO1xuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBFRm9ybWF0VHlwZSwgRU1hdGNoTW9kZSwgRU9wZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2Zvcm0ubW9kZWwnO1xuaW1wb3J0IHsgUGFnZUxvZ2dlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wYWdlLWxvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgaW50ZXJ2YWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBIeXBlcmxpbmtTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaHlwZXJsaW5rLnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9mb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHsgZGVsYXksIHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFJlcXVlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vbGliL3NlcnZpY2VzL3JlcXVlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBSZXF1ZXN0RHRvIH0gZnJvbSAncHJvamVjdHMvc2UtdWktdG9vbGtpdC9zcmMvbGliL21vZGVscy9yZXF1ZXN0Lm1vZGVsJztcbmltcG9ydCB7IFN5c3RlbUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zeXN0ZW0tY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgRW1haWxGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuLi9lbWFpbC9lbWFpbC1maWx0ZXIvZW1haWwtZmlsdGVyLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NlLWdyaWQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZ3JpZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2dyaWQuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgR3JpZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICBAVmlld0NoaWxkKCd2aWV3Q29udGFpbmVyUmVmJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgcHVibGljIHBhbmVsT3ZlcmxheVZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWZcblxuICBAVmlld0NoaWxkcmVuKCdncmlkUm93JykgZ3JpZFJvdzogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICBAT3V0cHV0KCkgaW5saW5lUm93Q2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBncmlkU2V0dGluZzogYW55O1xuICBzZWFyY2hidG5JZCA9ICdzZWFyY2hHbG9iYWxGaWx0ZXJCdG4nO1xuICBjdXJyZW50UGFnZTogbnVtYmVyID0gMDtcbiAgUGFnZUNoYW5nZTogYm9vbGVhbjtcbiAgdGVtcFNhdmVkUm93OiBhbnlbXSA9IFtdO1xuICBzb3J0RGF0YTogSUdyaWRTb3J0ID0ge307XG4gIEBJbnB1dCgpIHNldCBhY3RpdmVUZXN0TW9kZSh2YWw6IGFueSkge1xuICAgIGlmICh2YWwgPT09IHRydWUpIHtcbiAgICAgIGRlYnVnZ2VyO1xuICAgIH1cbiAgfVxuICBzZXJ2ZXJGaWx0ZXJzOiBJR3JpZFNlcnZlclNpZGVFdmVudCA9IHt9O1xuICByb3dzRGF0YTogYW55W10gPSBbXTtcbiAgb3JpZ2luYWxSb3dzOiBhbnlbXSA9IFtdO1xuICBncmlkSWQ6IHN0cmluZyA9ICcnO1xuICByb3dzRGF0YUNvcHk6IGFueVtdID0gW107XG4gIG51bWVyaWNWYWx1ZTogYW55ID0ge31cbiAgcm9sZXM6IHN0cmluZ1tdID0gW107XG4gIGlzQ29sdW1uSGlkZGVuOiBib29sZWFuID0gZmFsc2U7XG4gIHJvd0NsaWNrRGF0YTogSUdyaWRDb2x1bW47XG4gIGNvbXBvbmVudFRhYmxlUmVmOiBhbnk7XG4gIGxvb2t1cEZpbHRlck9iajogYW55O1xuICBjaGVja2xpc3Q6IGFueVtdID0gW11cbiAgbG9va3VwQmx1cjogYm9vbGVhbiA9IHRydWU7XG4gIGdsb2JhbEZpbHRlcnNBcnJheTogYW55W10gPSBbXTtcbiAgY2hlY2tBY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgY2FsZW5kYXJQcmV2aW91c1ZhbHVlOiBzdHJpbmcgPSAnJztcbiAgZ3JpZEZpbHRlck9iajogSUdyaWRGaWx0ZXJJbmZvO1xuICBkZWZhdWx0RGF0ZTogYW55O1xuICBvdmVybGF5UGFuZWxTdHlsZToge307XG4gIC8vIEhvbGRzIHRoZSBpdGVtcyB0byBkaXNwbGF5IGluIHRoZSBwZXItcm93IFwiTW9yZVwiIG1lbnUgKFByaW1lTkcgTWVudSBtb2RlbClcbiAgY3VycmVudE1vcmVNZW51OiBNZW51SXRlbVtdID0gW107XG4gIGdyaWRmaWx0ZXI6IGFueTtcbiAgZHJvcERvd25GaWx0ZXI6IGFueSA9IHt9O1xuICBkcm9wZG93bklucHV0OiBib29sZWFuID0gZmFsc2U7XG4gIHNhdmVBbGxSZWNvcmQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZ2VuZXJhdGVSb3dzRGF0YUNvcHk6IGJvb2xlYW4gPSB0cnVlO1xuICBlZGl0QWxsUmVjb3JkOiBib29sZWFuID0gZmFsc2U7XG4gIGNhbmNlbEFsbFJlY29yZHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgYWRkTmV3Um93Q2hlY2s6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaW5FZGl0TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICBzYXZlUmVjb3JkQXJyYXk6IGFueVtdID0gW107XG4gIGRpc2FibGVkU2F2ZUJ0bjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNTZWxlY3RlZEFsbFJvd3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQ2hlY2tlZDogYm9vbGVhbiA9IHRydWVcbiAgdW5DaGVja2VkOiBib29sZWFuID0gZmFsc2VcbiAgZWRpdE1vZGVDaGVja2VkOiBib29sZWFuID0gdHJ1ZTtcbiAgZWRpdE1vZGV1bkNrZWNrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY2FsZW5kYXJGb3JtYXQ6IHN0cmluZyA9IFwibW0vZGQveXlcIlxuICBzZXREcm9wZG93bkZpbHRlcjogYm9vbGVhbiA9IHRydWU7XG4gIHJlbG9hZFBhZ2U6IFN1YnNjcmlwdGlvbjtcbiAgc2V0RHJvcGRvd25kYXRhVmFsdWU6IGJvb2xlYW4gPSB0cnVlO1xuICBzaG93RmlsdGVyYnRuOiBib29sZWFuID0gZmFsc2U7XG5cbiAgdG9vZ2xlU29ydE9yZGVyOiBib29sZWFuID0gZmFsc2U7XG4gIGRpYWxvZ1JlZjogYW55XG4gIHVzZXJTZXR0aW5nOiB1c2VyU2V0dGluZyA9IHt9O1xuICByb3dVcGRhdGVDaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNTZXJ2ZXJTaWRlRXZlbnRJbml0YWxUcmlnZ2VyZWQgPSBuZXcgU3ViamVjdCgpXG5cbiAgLy9hcHBseSBBZGQvRGVsZXRlL0VkaXQgcHJvcCBmb3IgdGhlIGdyaWQgcGVybWlzc2lvblxuICBhZGRSb3dQZXJtaXNzaW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgZGVsZXRlUm93UGVybWlzc2lvbjogYm9vbGVhbiA9IHRydWU7XG4gIGVkaXRSb3dQZXJtaXNzaW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgZWRpdGluZ0NlbGw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIC8vIEFwcGx5IHByb3Agc2V0QWdncmVnYXRlRm9vdGVyIG9uIEZvb3RlciBvZiB0aGUgVGFibGUgZm9yIGFnZ3JlZ2F0ZS5cbiAgc2V0QWdncmVnYXRlRm9vdGVyOiBzdHJpbmcgPSAnJztcblxuICBwcml2YXRlIGNsaWNrVGltZW91dDogYm9vbGVhbiA9IGZhbHNlO1xuICAvLyBCb29sZWFuIHByb3AgdG8gYWxsb3cgSGlkZSBBZ2dyZWdhdGUgRm9vdGVyIFdoZW4gQWdncmVnYXRlIG5vdCBBcHBseSBvbiBUYWJsZS5cbiAgYWdncmVnYXRlRm9vdGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gTWFpbnRhaW5zIHByZXZpb3VzIHN0YXRlIG9mIHJvd3MgYmVpbmcgZWRpdGVkXG4gIGVkaXRSb3dzUmVjb3JkczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAvLyBNYWludGFpbnMgcmVjb3JkIG9mIHJvd3MgYmVpbmcgZWRpdGVkXG4gIGVkaXRpbmdSb3dLZXlzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gIGN1cnJlbnRVcmw6IHN0cmluZyA9IGN1cnJlbnRVcmwoKTtcbiAgb25DbGlja0V2ZW50VHJpZ2dlcmVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcmVtYWluaW5nUm93c0RhdGE6IGFueVtdID0gW107XG5cbiAgQFZpZXdDaGlsZCgnZHQnKSB0YWJsZTogVGFibGU7XG4gIEBWaWV3Q2hpbGQoJ21vcmVNZW51JykgbW9yZU1lbnU6IE1lbnU7XG5cbiAgLy8gU2VsZWN0cyBpdGVtcyBpbiB0aGUgZ3JpZCBiYXNlZCBvbiBwYXNzZWQgb24gZGF0YVxuICBASW5wdXQoKSBzZWxlY3RlZFJvd3M6IGFueSA9IFtdO1xuXG4gIEBJbnB1dCgpIHNldEdyaWRSZWZyZXNoVGltZTogbnVtYmVyID0gMDtcblxuICBASW5wdXQoKSBhZGREYXRhS2V5VmFsdWUgPSBmYWxzZTtcblxuICBASW5wdXQoKSBzdG9wRGlhbG9nQ2xvc2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgYXV0b0NoZWNrTmV3Um93OiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBnbG9iYWxEYXRhOiBJR3JpZEZpbHRlcltdID0gW107XG5cbiAgc29ydERpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgc29ydEljb25IaWRkZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgZWRpdEFsbHJvd3NBdE9uZVRpbWU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBzaG93UmVmcmVzaEJ0bjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBoaWRlUmVmcmVzaEJ0bjogYm9vbGVhbiA9IHRydWU7XG5cbiAgLy8gU3RvcmVzIHNlbGVjdGVkIGNvbHVtbnNcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRDb2x1bW5zOiBJR3JpZENvbHVtbltdID0gW107XG4gIHNlbGVjdGVkVG9nZ2xlQ29sdW1uczogSUdyaWRDb2x1bW5bXSA9IFtdO1xuXG4gIHZpc2libGVDb2x1bW5zOiBJR3JpZENvbHVtbltdID0gW107XG4gIC8vIEJvb2xlYW4gcHJvcCB0byBhbGxvdyBob3Jpem9udGFsIFNjcm9sbCBvbiBUYWJsZS5cbiAgQElucHV0KCkgaG9yaXpvbnRhbFNjcm9sbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBoaWRlIHRoZSBkZWxldGUgcm93IGJ1dHRvbi5cbiAgQElucHV0KCkgaGlkZURlbGV0ZUJ0biA9IGZhbHNlO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBoaWRlIHRoZSBlZGl0IHJvdyBidXR0b24uXG4gIEBJbnB1dCgpIGhpZGVFZGl0QnRuID0gZmFsc2U7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGhpZGUgdGhlIGFkZCByb3cgYnV0dG9uLlxuICBASW5wdXQoKSBoaWRlQWRkQnRuID0gZmFsc2U7XG5cbiAgLy8gUHJvcCB0byBoYW5kbGUgbG9hZGVyIG9mIGdyaWRcbiAgQElucHV0KCkgcHVibGljIGxvYWRpbmcgPSBmYWxzZTtcblxuICAvL3RoaXMgcHJvcGVydHkgaXMgdXNlZCB0byBoYW5kbGUgc2VydmVyIHNpZGUgZXZlbnQgYnkgZGVmYXVsdCBpdCBpcyB0cnVlIHdoZW4gaXQgZmFsc2Ugc2VydmVyIHNpZGUgZXZlbnQgd2lsbCBub3QgYmUgY2FsbGVkXG4gIEBJbnB1dCgpIGF1dG9Mb2FkRGF0YTogYm9vbGVhbiA9IHRydWU7XG5cblxuICAvL3RhYmxlIHJvdyBzdHlsZXNcbiAgQElucHV0KCkgcm93U3R5bGU6IHN0cmluZztcblxuICAvLyBCb29sZWFuIHByb3AgdG8gY2hlY2sgd2hlcmUgc2VsZWN0ZWQgaXMgYWxsb3dlZCBvciBub3QuXG4gIEBJbnB1dCgpIGFsbG93U2VsZWN0aW9uID0gZmFsc2U7XG5cbiAgLy8gU2V0IGNvbHVtbiB3aWR0aCBvZiBzZWxlY3RlZCByb3cuXG4gIEBJbnB1dCgpIHNlbGVjdGlvbkNvbHVtbldpZHRoOiBzdHJpbmcgPSAnODBweCc7XG5cbiAgLy8gc2V0IHNlbGVjdGlvbiBjaGVja0JveCBoZWFkZXJcbiAgQElucHV0KCkgYWxsb3dTZWxlY3Rpb25IZWFkZXI6IHN0cmluZyA9ICcnO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBoaWRlIHRoZSBzYXZlIGJ1dHRvbiBvbiB0b3Agb2YgZ3JpZC5cbiAgQElucHV0KCkgaGlkZUdyaWRTYXZlQnV0dG9uID0gZmFsc2U7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGhpZGUgdGhlIHNhdmUgYnV0dG9uIG9uIHRvcCBvZiBncmlkLlxuICBASW5wdXQoKSBoaWRlR3JpZENhbmNlbEJ1dHRvbiA9IGZhbHNlO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBhbGxvdyBleHBvcnQgdG8gcGRmLlxuICBASW5wdXQoKSBhbGxvd0V4cG9ydFRvUGRmID0gZmFsc2U7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGFsbG93IGV4cG9ydCB0byBleGNlbC5cbiAgQElucHV0KCkgYWxsb3dFeHBvcnRUb0V4Y2VsID0gZmFsc2U7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIHNldCB0aGUgYWN0aW9uIGNvbHVtbiBhcyBmaXJzdCBjb2x1bW4uXG4gIEBJbnB1dCgpIHNldEFjdGlvbkNvbHVtbkFzRmlyc3QgPSBmYWxzZTtcblxuICAvLyBJZiB0cnVlLCBlbmFibGVzIG9wdGlvbnMgdG8gcGVyZm9ybSBDUlVEIHVzaW5nIGlubGluZSByb3cgZnVuY3Rpb25hbGl0eVxuICBASW5wdXQoKSB1c2VJbmxpbmVDUlVEID0gZmFsc2U7XG4gIC8vIGlmIHRydWUsIGl0IHdvbnQgYWRkIGEgbmV3IHJvdyB3aGVuIGNsaWNrIGFkZFxuICBASW5wdXQoKSBwcmV2ZW50TmV3Um93ID0gZmFsc2U7XG5cbiAgLy8gQXJyYXkgb2Ygcm93IGFjdGlvbnNcbiAgQElucHV0KCkgcm93QWN0aW9uczogSUdyaWRSb3dBY3Rpb25bXSA9IFtdO1xuXG4gIC8vIFNldHMgc2VsZWN0aW9uIHR5cGUgaS5lOiBzaW5nbGUvbXVsdGlwbGUgc2VsZWN0aW9uXG4gIEBJbnB1dCgpIHNlbGVjdGlvblR5cGU6IEVHcmlkU2VsZWN0aW9uVHlwZSA9IEVHcmlkU2VsZWN0aW9uVHlwZS5TSU5HTEU7XG5cbiAgLy8gVW5pcXVlIGtleSByZXF1aXJlcyBmb3IgYnVpbHQtaW4gcm93IHNlbGVjdGlvbiBvZiBwcmltZU5nIGdyaWRcbiAgQElucHV0KCkgZGF0YUtleTogc3RyaW5nID0gJ3RlbXBfaWQnO1xuXG4gIC8vIEZsYWcgZm9yIGNsZWFyIGZpbHRlciB2YWx1ZXMgYnV0dG9uXG4gIEBJbnB1dCgpIGNsZWFyR3JpZEZpbHRlciA9IHRydWU7XG5cbiAgLy8gRmxhZyBmb3Igc2VhcmNoIGZpbHRlciB2YWx1ZXMgYnV0dG9uXG4gIEBJbnB1dCgpIHNlYXJjaEdyaWRGaWx0ZXIgPSB0cnVlO1xuXG4gIC8vIEZsYWcgaW4gY2FzZSB0YWJsZSBpcyBzY3JvbGxhYmxlXG4gIEBJbnB1dCgpIHNjcm9sbGFibGUgPSB0cnVlO1xuXG4gIC8vIFNldHMgc2Nyb2xsIGhlaWdodCBmb3IgdGhlIHRhYmxlXG4gIEBJbnB1dCgpIHNjcm9sbEhlaWdodCA9ICc4MHZoJztcblxuICAvLyBUYWJsZSBzdHlsZVxuICBASW5wdXQoKSB0YWJsZVN0eWxlID0gJyc7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGFsbG93IHRvIHdyYXAgb3IgdW5XcmFwIHRoZSBncmlkLlxuICBASW5wdXQoKSB3b3JkV3JhcDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGVsbGlwc2lzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgbmV3R3JpZFJvdzogYW55ID0ge307XG5cbiAgQElucHV0KCkgZmlsdGVyaW5nID0gdHJ1ZTtcblxuICBASW5wdXQoKSByZXBvcnRCdXR0b25zOiBhbnlbXSA9IFtdO1xuXG4gIEBJbnB1dCgpIHJvd0hvdmVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgaGlkZUZpbHRlck9wdGlvbnM6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpIGF1dG9Db21wbGV0ZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgLy8gU2V0cyBwYWdlbmF0aW9uIGZvciB0aGUgdGFibGUgRGF0YS5cbiAgQElucHV0KCkgc2V0UGFnaW5hdGlvbkxlbmd0aDogYW55W10gPSBbNSwgMTAsIDE1LCB7IHNob3dBbGw6ICdBbGwnIH1dO1xuXG4gIC8vIHNldCB0aGUgY2hhbmdlIGluIHRoZSByb3dEYXRhXG4gIEBPdXRwdXQoKSByb3dzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLyoqXG4gICAqIFN0b3BzIHRoZSBsb2FkZXIgYW5kIHNldHMgdGhlIGRhdGEgdG8gZ3JpZFxuICAgKiBDbGVhcnMgdGhlIGVkaXRpbmcgc3RhY2tcbiAgICogU2Nyb2xscyB0byBzZWxlY3RlZCBlbGVtZW50IGlmIHNlbGVjdGlvbiBmb3VuZFxuICAgKi9cbiAgQElucHV0KCkgc2V0IHJvd3MoZGF0YTogYW55W10pIHtcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnJlbWFpbmluZ1Jvd3NEYXRhID0gW107XG4gICAgaWYgKCF0aGlzLnJvd1VwZGF0ZUNoYW5nZSkge1xuICAgICAgaWYgKCF0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCkge1xuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpZiAoIXRoaXMuZGF0YUtleSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhS2V5ID0gJ3RlbXBfaWQnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByb3dzRGF0YSA9IHRoaXMuZ3JpZFNlcnZpY2Uuc2V0RGF0YUZpZWxkcyhkYXRhLCB0aGlzLmRhdGFLZXkpO1xuICAgICAgICAgIHRoaXMub3JpZ2luYWxSb3dzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyb3dzRGF0YSkpO1xuICAgICAgICAgIGlmIChkYXRhPy5sZW5ndGggPiA0MCAmJiAhdGhpcy5ncmlkU2VydmljZT8ucm93VXBkYXRlKSB7XG4gICAgICAgICAgICBjb25zdCBpbml0aWFsaXplRGF0YSA9IFsuLi5yb3dzRGF0YV07XG4gICAgICAgICAgICB0aGlzLnJvd3NEYXRhID0gaW5pdGlhbGl6ZURhdGEuc3BsaWNlKDAsIDQwKTtcbiAgICAgICAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAgICAgICAgIC5waXBlKHRha2UoMSkpIC8vIEVtaXQgb25seSBvbmNlIHdoZW4gdGhlIHpvbmUgYmVjb21lcyBzdGFibGVcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1haW5pbmdSb3dzRGF0YSA9IHJvd3NEYXRhLnNwbGljZSg0MCwgcm93c0RhdGEubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb2x1bW5zICYmIHRoaXMuY29sdW1ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5zPy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbj8uYWdncmVnYXRlPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBZ2dyZWdhdGVUZXh0KGNvbHVtbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yb3dzRGF0YSA9IHJvd3NEYXRhO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmVkaXRSb3dzUmVjb3JkcyA9IHt9O1xuXG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dzICYmIHRoaXMuZ3JpZFJvdz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50UmVmID0gdGhpcy5ncmlkUm93LmZpbmQoXG4gICAgICAgICAgICAgICh4KSA9PiB4Lm5hdGl2ZUVsZW1lbnQuaWQgPT09IHRoaXMuc2VsZWN0ZWRSb3dzW3RoaXMuZGF0YUtleV1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBzZWxlY3RlZEVsZW1lbnRSZWYgJiZcbiAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxUYWJsZVJvd0VsZW1lbnRcbiAgICAgICAgICAgICAgKS5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvL21hbmlwdWxhdGUgY2hlY2tib3ggc3RyaW5nIHZhbHVlIHRvIHRydWUgYW5kIGZhbHNlLlxuICAgICAgICAgIHRoaXMuY2hhbmdlQ2hlY2tib3hTdHJpbmdWYWx1ZSgpO1xuICAgICAgICAgIHRoaXMuc2V0TnVtZXJpY1ZhbHVlcygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucm93c0RhdGEgPSBbXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEdsb2JhbCBmaWx0ZXIgc2VydmVyIHJlcXVlc3RcbiAgQElucHV0KCkgc2V0IGdsb2JhbEZpbHRlckRhdGEoZ2xvYmFsRmlsdGVyczogSUdsb2JhbEZpbHRlcltdKSB7XG4gICAgdGhpcy5nbG9iYWxEYXRhID0gdGhpcy5ncmlkU2VydmljZVxuICAgICAgLnByZXBhcmVHbG9iYWxGaWx0ZXJzKGdsb2JhbEZpbHRlcnMpXG4gICAgICA/LmZpbHRlcigoeCkgPT4geD8udmFsdWUgIT09IGZhbHNlKTtcblxuICAgIGlmICh0aGlzLmVuYWJsZUNsaWVudFNpZGVGaWx0ZXJpbmcpIHtcbiAgICAgIGNvbnN0IGdsb2JhbFNlYXJjaFZhbHVlID0gZ2xvYmFsRmlsdGVycz8uZmluZCh4ID0+IHguZmllbGQgPT09ICdnbG9iYWxTZWFyY2gnKT8udmFsdWU7XG4gICAgICBpZiAoZ2xvYmFsU2VhcmNoVmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnRhYmxlKSB7XG4gICAgICAgIHRoaXMudGFibGUuZmlsdGVyR2xvYmFsKGdsb2JhbFNlYXJjaFZhbHVlLCAnY29udGFpbnMnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzZXJ2ZXJGaWx0ZXJWYWx1ZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuc2VydmVyRmlsdGVycykpO1xuICAgIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzID0gdGhpcy5zZXJ2ZXJGaWx0ZXJzLmZpbHRlcnNcbiAgICAgID8gdGhpcy5zZXJ2ZXJGaWx0ZXJzLmZpbHRlcnMuY29uY2F0KHRoaXMuZ2xvYmFsRGF0YSlcbiAgICAgIDogdGhpcy5nbG9iYWxEYXRhO1xuXG4gICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhcHBseUZpbHRlcicpID09PSAnZmFsc2UnKSB7XG4gICAgICB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheSA9IHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5Py5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkuY29uY2F0KFsuLi5zZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVyc10pXG4gICAgICAgIDogdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXk7XG4gICAgfVxuICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXBwbHlGaWx0ZXInKSA9PT0gJ3RydWUnKSB7XG4gICAgICBnbG9iYWxGaWx0ZXJzLmZvckVhY2goKGdsb2JhbEZpbHRlcikgPT4ge1xuICAgICAgICB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheS5mb3JFYWNoKChmaWx0ZXJBcnJheSkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGZpbHRlckFycmF5LmZpZWxkID09PSBnbG9iYWxGaWx0ZXIuZmllbGQgJiZcbiAgICAgICAgICAgIGdsb2JhbEZpbHRlci52YWx1ZSAmJlxuICAgICAgICAgICAgZmlsdGVyQXJyYXkudmFsdWUgIT09IGdsb2JhbEZpbHRlci52YWx1ZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZmlsdGVyQXJyYXkudmFsdWUgPSBnbG9iYWxGaWx0ZXIudmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5LmZpbmRJbmRleChcbiAgICAgICAgICAgIChpbmRleCkgPT4gaW5kZXguZmllbGQgPT09IGdsb2JhbEZpbHRlci5maWVsZCAmJiAhZ2xvYmFsRmlsdGVyLnZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoZmluZEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkuc3BsaWNlKGZpbmRJbmRleCwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlLy90aGlzLmF1dG9Mb2FkRGF0YTtcbiAgICAgIGlmICh0aGlzLmdyaWRTZXJ2aWNlLmFwcGx5RmlsdGVyRXZlbnQgfHwgdGhpcy5hdXRvTG9hZERhdGEpIHtcbiAgICAgICAgdGhpcy5vbkFwcGx5RmlsdGVyLmVtaXQoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmdsb2JhbEZpbHRlcnNBcnJheSAmJiB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzID0gc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMuY29uY2F0KFxuICAgICAgICAgIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycyA9IEFycmF5LmZyb20oXG4gICAgICAgIG5ldyBTZXQoXG4gICAgICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnNcbiAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAgIC5tYXAoKGZpbHRlcjogYW55KSA9PiBmaWx0ZXIuZmllbGQpXG4gICAgICAgIClcbiAgICAgICkubWFwKChmaWVsZCkgPT4ge1xuICAgICAgICByZXR1cm4gc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMuZmluZCgoeDogYW55KSA9PiB4LmZpZWxkID09PSBmaWVsZCk7XG4gICAgICB9KTtcbiAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzID0gc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMuZmlsdGVyKFxuICAgICAgICAob2JqOiBhbnkpID0+XG4gICAgICAgICAgb2JqPy52YWx1ZSAmJiBvYmoudmFsdWU/LnRvU3RyaW5nKCk/Lmxlbmd0aCA+IDAgJiYgb2JqLmZpZWxkXG4gICAgICApO1xuICAgICAgdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmxdID0gc2VydmVyRmlsdGVyVmFsdWVzO1xuICAgICAgaWYgKHRoaXMuZ3JpZFNlcnZpY2UuYXBwbHlGaWx0ZXJFdmVudCB8fCB0aGlzLmF1dG9Mb2FkRGF0YSA9PT0gdHJ1ZSkge1xuICAgICAgICAvLyBzZXR0aW5nIHBhZ2luYXRpb24gcGFnZSBhcyBmaXJzdFxuICAgICAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMucGFnZSA9IDE7XG4gICAgICAgIHRoaXMuYXV0b0xvYWREYXRhID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdFJvd3MgJiYgdGhpcy5wYWdpbmF0aW9uKSB7XG4gICAgICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLnBhZ2VTaXplID0gdGhpcy5kZWZhdWx0Um93cztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ncmlkU2VydmljZS5hcHBseUZpbHRlckV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5zZXR1cEVudGVyTGlzdGVuZXIoKVxuICAgICAgICAgIHRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5vblNlcnZlclNpZGVFdmVudENoYW5nZS5lbWl0KHNlcnZlckZpbHRlclZhbHVlcyk7XG4gICAgICAgICAgdGhpcy5lZGl0aW5nUm93S2V5cyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdhcHBseUZpbHRlcicpO1xuICAgICAgICAvLyBzZXR0aW5nIHBhZ2luYXRpb24gcGFnZSBudW1iZXIgVUlcbiAgICAgICAgdGhpcy50YWJsZS5fZmlyc3QgPSAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBzZXR1cEVudGVyTGlzdGVuZXIoKSB7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLmhhbmRsZUtleVVwKTtcbiAgfVxuICBoYW5kbGVLZXlVcCA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgIGNvbnN0IGZvY3VzZWRFbGVtZW50ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgIGlmIChmb2N1c2VkRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgJiYgZm9jdXNlZEVsZW1lbnQudHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2VsZWN0Um9vdEVsZW1lbnQoZm9jdXNlZEVsZW1lbnQpLmJsdXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLy8gSW5wdXQgZGVjb3JhdG9yIHRvIHJlY2VpdmUgY29sdW1ucyB0byBiZSBkaXNwbGF5ZWQgaW4gaGVhZGVyXG4gIEBJbnB1dCgpIGNvbHVtbnM6IElHcmlkQ29sdW1uW10gPSBbXTtcblxuICBASW5wdXQoKSBwZXJtaXNzaW9uczogSVBlcm1pc3Npb25bXSA9IFtdO1xuXG4gIC8vIE9wdGlvbmFsIHByb3AgdG8gaGFuZGxlIHRvZ2dsaW5nIG9mIGNvbHVtbnNcbiAgQElucHV0KCkgYWxsb3dDb2x1bW5Ub2dnbGUgPSBmYWxzZTtcblxuICAvLyBPcHRpb25hbCBwcm9wIHRvIGhpZGUgZmlsdGVyaW5nIG9mIGNvbHVtbnNcbiAgQElucHV0KCkgaGlkZUZpbHRlciA9IGZhbHNlO1xuXG4gIC8vIE9wdGlvbmFsIHByb3AgdG8gaGFuZGxlIGxvb2t1cCBmaWx0ZXJzXG4gIEBJbnB1dCgpIGxvb2t1cEZpbHRlcnMgPSBmYWxzZTtcblxuICAvLyBPcHRpb25hbCBwcm9wIHRvIGhhbmRsZSBwYWdpbmF0aW9uXG4gIEBJbnB1dCgpIHBhZ2luYXRpb24gPSBmYWxzZTtcblxuICAvLyBPcHRpb25hbCBwcm9wIHRvIGhhbmRsZSBzaG93IEN1cnJlbnRQYWdlIFJlcG9ydFxuICBASW5wdXQoKSBzaG93Q3VycmVudFBhZ2VSZXBvcnQgPSBmYWxzZTtcblxuICAvLyBEaXNwbGF5cyB0b3RhbCBudW1iZXIgb2YgcmVjb3Jkc1xuICBASW5wdXQoKSB0b3RhbFJlY29yZHMgPSAwO1xuXG4gIC8vIERpc3BsYXlzIGFnZ3JlZ2F0ZSB0aGF0IGZldGNoIGZyb20gcmVjb3Jkc1xuICBASW5wdXQoKSBhZ2dyZWdhdGVkUmVzdWx0OiBhbnlbXSA9IFtdO1xuXG4gIEBJbnB1dCgpIHNob3djb25maXJtRGlhbG9nOiBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoKSBzYXZlQWxsRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIFNldHMgbnVtYmVyIG9mIHJvd3MgdG8gYmUgc2hvd24gdGhlIGdyaWRcbiAgQElucHV0KCkgZGVmYXVsdFJvd3M6IG51bWJlciA9IDA7XG5cbiAgQElucHV0KCkgY29sdW1uQWN0aW9uczogSUdyaWRDb2x1bW5BY3Rpb25bXSA9IFtdO1xuXG4gIC8vIERlY2lkZXMgdGhlIGdyaWQncyBiZWhhdmlvciBlaXRoZXIgZm9yIGNsaWVudCBzaWRlIG9yIHNlcnZlciBzaWRlIGV2ZW50c1xuICBASW5wdXQoKSB1c2VTZXJ2ZXJTaWRlRXZlbnRzID0gZmFsc2U7XG4gIEBJbnB1dCgpIGVuYWJsZUNsaWVudFNpZGVGaWx0ZXJpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZ2xvYmFsRmlsdGVyRmllbGRzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgQElucHV0KCkgc2V0IGdsb2JhbEZpbHRlckZpZWxkcyhmaWVsZHM6IHN0cmluZ1tdKSB7XG4gICAgaWYgKGZpZWxkcyAmJiBmaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5fZ2xvYmFsRmlsdGVyRmllbGRzID0gZmllbGRzLm1hcChmID0+IGYudG9Mb3dlckNhc2UoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2dsb2JhbEZpbHRlckZpZWxkcyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgZ2V0IGdsb2JhbEZpbHRlckZpZWxkcygpOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2dsb2JhbEZpbHRlckZpZWxkcztcbiAgfVxuXG4gIC8vIE91dHB1dCBldmVudCB0byBoYW5kbGUgcm93IGNsaWNrXG4gIEBPdXRwdXQoKSBvblJvd0NsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBPdXRwdXQgZXZlbnQgZW1pdCB3aGVuIGNsaWNrIG9uIGdyaWQgY2hlY2tib3ggZmlsdGVyXG4gIEBPdXRwdXQoKSBvbkNoZWNrQm94RmlsdGVyQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIE91dHB1dCBldmVudCB0byBoYW5kbGUgcm93IENoZWNrQm94XG4gIEBPdXRwdXQoKSBvblJvd0NoZWNrQm94OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBPdXRwdXQgZXZlbnQgdG8gdHJpZ2dlciBvbiBzb3J0IGNoYW5nZVxuICBAT3V0cHV0KCkgb25Tb3J0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8SUdyaWRTb3J0PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBPdXRwdXQgZXZlbnQgdG8gdHJpZ2dlciBvbiBmaWx0ZXIgY2hhbmdlXG4gIEBPdXRwdXQoKSBvbkZpbHRlckNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gT3V0cHV0IGV2ZW50IHRvIGludm9rZSB0aGUgbXVsdGlTZWxlY3Rpb24gY2xpY2sgZXZlbnRcbiAgQE91dHB1dCgpIG9uTXVsdGlTZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIENhbGxzIHdoZW5ldmVyIGEgZ3JpZCBhbmQgZ2xvYmFsRmlsdGVycyBjYWxsZWRcbiAgQE91dHB1dCgpIG9uQXBwbHlGaWx0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vc2V0IGhlYWRlciBjaGVja2JveCB2YWx1ZSBmb3IgZ2V0dGluZyBhbGwgY29sdW1ucyBvbiBzdGF5IGFkbWluXG4gIEBPdXRwdXQoKSBpc0luY2x1ZGVkQWxsQ29sdW1uczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gQ2FsbHMgd2hlbmV2ZXIgYSBsYXp5IGV2ZW50IGlzIGRpc3BhdGNoZWRcbiAgQE91dHB1dCgpXG4gIG9uU2VydmVyU2lkZUV2ZW50Q2hhbmdlOiBFdmVudEVtaXR0ZXI8SUdyaWRTZXJ2ZXJTaWRlRXZlbnQ+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gT3V0cHV0IGV2ZW50IHRvIHRyaWdnZXIgb24gcGFnaW5hdGlvblxuICBAT3V0cHV0KClcbiAgb25QYWdlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8SUdyaWRQYWdpbmF0aW9uRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIERpc3BhdGNoIG91dHB1dCBldmVudCB0cmlnZ2VyIG9uIGVkaXQgcm93XG4gIEBPdXRwdXQoKSBvblJvd1VwZGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KCkgb25Sb3dPcmRlckNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gRGlzcGF0Y2ggb3V0cHV0IGV2ZW50IHRyaWdnZXIgY2FuY2VsIGFsbCByb3dzXG4gIEBPdXRwdXQoKSBvbkNhbmNlbEFsbFJvd3MgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gRGlzcGF0Y2ggb3V0cHV0IGV2ZW50IHRyaWdnZXIgb24gZGVsZXRlIHJvd1xuICBAT3V0cHV0KCkgb25Sb3dEZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy9EaXNwYXRjaCBvdXRwdXQgZXZlbnQgdHJpZ2dlciBvbiBhZGQgcm93XG4gIEBPdXRwdXQoKSBvblJvd0FkZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvL0Rpc3BhdGNoIG91dHB1dCBldmVudCB0cmlnZ2VyIG9uIGFkZCwgdXBkYXRlIGFuZCBkZWxldGUgcm93XG4gIEBPdXRwdXQoKSBvbkdyaWRSb3dBY3Rpb25zID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIHNldCBwcm9wZXJ0eSBhbGxvd0NhY2hpbmcgZm9yIExvY2FsU3RvcmFnZVxuICBASW5wdXQoKSBhbGxvd0NhY2hpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvL3NldCBNdWx0aXNlbGVjdCBUb2dnbGUgQ29sdW1uc1xuICBASW5wdXQoKSBhbGxvd1BlcnNpc3RlbmNlOiBib29sZWFuID0gdHJ1ZTtcblxuICAvLyBzZXQgcHJvcGVydHkgc29mdENhY2hpbmcgZm9yIHNldHRpbmcgdGhlIHZhbHVlcyBvZiBncmlkRmlsdGVyXG4gIEBJbnB1dCgpIHNvZnRDYWNoaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgZWRpdEFsbFJvd3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8gc2V0IHRoZSByb3cgV2hlbiBFZGl0IHRoZSByb3cgb24gR3JpZFxuICBAT3V0cHV0KCkgb25HcmlkUm93RWRpdCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBzZXQgdGhlIHJvdyBXaGVuIGFkZGluZyB0aGUgbmV3IFJvdyBvbiBHcmlkXG4gIEBPdXRwdXQoKSBvbkdyaWRSb3dBZGQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQElucHV0KCkgZ3JpZE5hbWU6IHN0cmluZyA9ICcnO1xuICBpc0dyaWRIaWRkZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgYXV0b1Jlc2l6ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBhbGxvd1RleHRDb3B5OiBib29sZWFuID0gZmFsc2U7XG5cblxuICByb3dzUGVyUGFnZU9wdGlvbnM6IGFueVtdID0gWzUsIDEwLCAxNSwgeyBzaG93QWxsOiAnQWxsJyB9XTtcbiAgY3VzdG9tV2lkdGhDb2x1bW5zOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge307XG4gIHNlbGVjdGVkUm93UmVjb3JkOiBhbnk7XG4gIHNjcm9sbFBvc2l0aW9uWTogbnVtYmVyID0gMDtcbiAgc2Nyb2xsUG9zaXRpb25YOiBudW1iZXIgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IFN5c3RlbUNvbmZpZ1NlcnZpY2UsXG4gICAgcHVibGljIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3JtU2VydmljZTogRm9ybVNlcnZpY2UsXG4gICAgcHVibGljIGdyaWRTZXJ2aWNlOiBHcmlkU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhlbnRpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHVibGljIGRlY2ltYWxQaXBlOiBEZWNpbWFsUGlwZSxcbiAgICBwcml2YXRlIHBhZ2VMb2dnZXJTZXJ2aWNlOiBQYWdlTG9nZ2VyU2VydmljZSxcbiAgICBwcml2YXRlIGh5cGVybGlua1NlcnZpY2U6IEh5cGVybGlua1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSxcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgIHB1YmxpYyBjb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgcmVxdWVzdFNlcnZpY2U6IFJlcXVlc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwUmVmOiBBcHBsaWNhdGlvblJlZixcbiAgICBAT3B0aW9uYWwoKSBwdWJsaWMgY29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnLFxuICAgIEBPcHRpb25hbCgpIHB1YmxpYyByZWY6IER5bmFtaWNEaWFsb2dSZWZcbiAgKSB7IH1cblxuICBjb25zb2xlTG9nKG1lc3NhZ2U6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKG1lc3NhZ2UpO1xuICB9XG5cbiAgIG1vdXNlTGVhdmVFdmVudChvdmVybGF5UGFuZWwpIHtcbiAgICBvdmVybGF5UGFuZWwuaGlkZSgpO1xuICB9XG4gIG9uQ29sdW1uUmVzaXplKGV2ZW50OiBhbnksIGR0KSB7XG4gICAgaWYgKGR0Py5lbD8ubmF0aXZlRWxlbWVudD8uaWQpIHtcbiAgICAgIHRoaXMuZ3JpZElkID0gZHQuZWwubmF0aXZlRWxlbWVudC5pZDtcbiAgICB9XG4gICAgY29uc3QgbmV3V2lkdGggPSBldmVudC5lbGVtZW50LmNsaWVudFdpZHRoICsgMjtcbiAgICBsZXQgY29sdW1uSGVhZGVyID0gZXZlbnQ/LmVsZW1lbnQ/LmlkPy50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChjb2x1bW5IZWFkZXIpIHtcbiAgICAgIGxldCBpbmRleDogYW55ID0gdGhpcy5zZWxlY3RlZENvbHVtbnMuZmluZEluZGV4KChjb2x1bW4pID0+IGNvbHVtbi5oZWFkZXI/LnRvTG93ZXJDYXNlKCkgPT0gY29sdW1uSGVhZGVyKTtcbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIGlmIChuZXdXaWR0aCkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zW2luZGV4XVsnY3VzdG9tV2lkdGgnXSA9IHBhcnNlSW50KG5ld1dpZHRoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNhdmVDb2x1bW5XaWR0aHMoKTtcbiAgfVxuICBzYXZlQ29sdW1uV2lkdGhzKHRvZ2dsZUNvbHVtbnM6IGFueVtdID0gW10pIHtcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgIGlmIChjb2x1bW4uZmllbGQgJiYgY29sdW1uLmN1c3RvbVdpZHRoKSB7XG4gICAgICAgIHRoaXMuY3VzdG9tV2lkdGhDb2x1bW5zW2NvbHVtbi5maWVsZF0gPSBjb2x1bW4uY3VzdG9tV2lkdGg7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3Qgc2VsZWN0ZWRGaWVsZHMgPSB0b2dnbGVDb2x1bW5zPy5sZW5ndGggPiAwID8gdG9nZ2xlQ29sdW1ucyA6IHRoaXMuX3NlbGVjdGVkQ29sdW1ucy5tYXAoKHgpID0+IHguZmllbGQpO1xuICAgIHRoaXMuc2V0TXVsdGlTZWxlY3RUb2dnbGVDb2x1bW4oc2VsZWN0ZWRGaWVsZHMpO1xuICB9XG4gIGxvYWRDb2x1bW5XaWR0aHMoKSB7XG4gICAgbGV0IGN1cnJlbnRVc2VySW5mbyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0N1cnJlbnRVc2VySW5mbycpKTtcbiAgICBpZiAoY3VycmVudFVzZXJJbmZvICYmIGN1cnJlbnRVc2VySW5mby5wYWdlU2V0dGluZykge1xuICAgICAgbGV0IHBhZ2VTZXR0aW5ncyA9IEpTT04ucGFyc2UoY3VycmVudFVzZXJJbmZvLnBhZ2VTZXR0aW5nKVxuICAgICAgcGFnZVNldHRpbmdzLnBhZ2VTZXR0aW5ncy5tYXAocGFnZSA9PiB7XG4gICAgICAgIGlmIChwYWdlLnVybCA9PT0gdGhpcy5yb3V0ZXIudXJsKSB7XG4gICAgICAgICAgcGFnZS5ncmlkU2V0dGluZ3MubWFwKGdyaWRTZXR0aW5nID0+IHtcbiAgICAgICAgICAgIGlmIChncmlkU2V0dGluZy5ncmlkSWQgPT09IHRoaXMuZ3JpZElkICYmIGdyaWRTZXR0aW5nPy5jdXN0b21Db2x1bW5zV2lkdGgpIHtcbiAgICAgICAgICAgICAgY29uc3QgY29sdW1uc1dpZHRoS2V5cyA9IE9iamVjdC5rZXlzKGdyaWRTZXR0aW5nPy5jdXN0b21Db2x1bW5zV2lkdGgpO1xuICAgICAgICAgICAgICBjb2x1bW5zV2lkdGhLZXlzLmZvckVhY2goKGNvbHVtbktleTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmNvbHVtbnMuZmluZEluZGV4KChzZWxlY3RlZENvbHVtbikgPT4gc2VsZWN0ZWRDb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGNvbHVtbktleT8udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uc1tpbmRleF1bJ2N1c3RvbVdpZHRoJ10gPSBncmlkU2V0dGluZz8uY3VzdG9tQ29sdW1uc1dpZHRoW2NvbHVtbktleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHByb2Nlc3NIb3ZlckRhdGEoaG92ZXJEYXRhOiBhbnksIHJvdzogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB7IC4uLmhvdmVyRGF0YT8uZGF0YSB9O1xuICAgICAgY29uc3QgZGF0YUtleXMgPSBPYmplY3Qua2V5cyhkYXRhKTtcbiAgICAgIGNvbnN0IHJvd0tleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgICAgaWYgKGRhdGFLZXlzPy5sZW5ndGggPiAwICYmIHJvd0tleXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgZGF0YUtleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IGRhdGFba2V5XTtcbiAgICAgICAgICBpZiAodmFsdWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3snKSAmJiB2YWx1ZT8udG9TdHJpbmcoKS5pbmNsdWRlcygnfScpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoXCJ7XCIsIFwiXCIpLnJlcGxhY2UoXCJ9XCIsIFwiXCIpO1xuICAgICAgICAgICAgbGV0IHJvd0tleSA9IHJvd0tleXM/LmZpbmQoKHgpID0+IHg/LnRvTG93ZXJDYXNlKCkgPT09IHZhbHVlPy50b1N0cmluZygpPy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgIHZhciBjb3JyZWN0VmFsdWUgPSByb3dbcm93S2V5XTtcbiAgICAgICAgICAgIGRhdGFba2V5XSA9IGNvcnJlY3RWYWx1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hLZXkgPSByb3dLZXlzPy5maW5kKCh4KSA9PiB4Py50b0xvd2VyQ2FzZSgpID09PSBrZXk/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgaWYgKG1hdGNoS2V5ICYmICFkYXRhW2tleV0pIHtcbiAgICAgICAgICAgICAgZGF0YVtrZXldID0gcm93W21hdGNoS2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGhvdmVyRGF0YT8uc3R5bGUgPyB0aGlzLm92ZXJsYXlQYW5lbFN0eWxlID0gaG92ZXJEYXRhPy5zdHlsZSA6IFwiXCI7XG4gICAgICB0aGlzLnBhbmVsT3ZlcmxheVZpZXdDb250YWluZXIuY2xlYXIoKTtcbiAgICAgIGlmICh0aGlzLnBhbmVsT3ZlcmxheVZpZXdDb250YWluZXIgJiYgaG92ZXJEYXRhPy5jb21wb25lbnQpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50UmVmOiBhbnkgPSB0aGlzLnBhbmVsT3ZlcmxheVZpZXdDb250YWluZXI/LmNyZWF0ZUNvbXBvbmVudChob3ZlckRhdGE/LmNvbXBvbmVudCk7XG4gICAgICAgIGlmIChob3ZlckRhdGEuZGF0YSkge1xuICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5jb25maWcgPSBbXTtcbiAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuY29uZmlnLmRhdGEgPSBkYXRhO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBhZGREeW5hbWljUGFuZWxPdmVybGF5Q29tcG9uZW50KGhvdmVyRGF0YTogYW55LCBvdmVybGF5UGFuZWw6IGFueSwgZXZlbnQ6IGFueSwgcm93OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnByb2Nlc3NIb3ZlckRhdGEoaG92ZXJEYXRhLCByb3cpO1xuICAgIG92ZXJsYXlQYW5lbC5zaG93KGV2ZW50KTtcbiAgfVxuXG4gIGdldCBzZWxlY3RlZENvbHVtbnMoKTogSUdyaWRDb2x1bW5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkQ29sdW1ucztcbiAgfVxuXG4gIHNldCBzZWxlY3RlZENvbHVtbnModmFsOiBJR3JpZENvbHVtbltdKSB7XG4gICAgLy8gUmVzcGVjdCBgc2hvd0luTW9yZWA6IGRvIG5vdCBhbGxvdyBzZWxlY3RpbmcgY29sdW1ucyB0aGF0IGFyZSBpbnRlbmRlZCBmb3IgTW9yZSBtZW51XG4gICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zPy5maWx0ZXIoKGNvbCkgPT5cbiAgICAgICFjb2wuc2hvd0luTW9yZSAmJiB2YWw/LnNvbWUoKHYpID0+IHYuZmllbGQgPT09IGNvbC5maWVsZCAmJiB2LmhlYWRlciA9PT0gY29sLmhlYWRlcilcbiAgICApO1xuXG4gICAgaWYgKHRoaXMuYWxsb3dQZXJzaXN0ZW5jZSAmJiB0aGlzLmFsbG93Q29sdW1uVG9nZ2xlKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZEZpZWxkcyA9IHRoaXMuX3NlbGVjdGVkQ29sdW1ucy5tYXAoKHgpID0+IHguZmllbGQpO1xuICAgICAgdGhpcy5zYXZlQ29sdW1uV2lkdGhzKHNlbGVjdGVkRmllbGRzKTtcbiAgICB9XG4gIH1cbiAgLy8gdGhpcy5fc2VsZWN0ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zPy5maWx0ZXIoKGNvbCkgPT4gdmFsLmluY2x1ZGVzKGNvbCkpO1xuICAvLyBpZiAodGhpcy5hbGxvd1BlcnNpc3RlbmNlICYmIHRoaXMuYWxsb3dDb2x1bW5Ub2dnbGUpIHtcbiAgLy8gICBjb25zdCBzZWxlY3RlZEZpZWxkcyA9IHZhbC5tYXAoKHgpID0+IHguZmllbGQpO1xuICAvLyAgIHRoaXMuc2F2ZUNvbHVtbldpZHRocyhzZWxlY3RlZEZpZWxkcyk7XG4gIC8vIH1cbiAgLy8gdW5hYmxlIHRvIGFsbG93IHVzZXIgdG8gY29weSB0ZXh0IGZyb20gZ3JpZCB3aGVuIHRoaXMuYWxsb3dUZXh0Q29weSBpcyBzZXQgdG8gZmFsc2UuXG4gIEBIb3N0TGlzdGVuZXIoJ2NvcHknLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCdjdXQnLCBbJyRldmVudCddKVxuICBoYW5kbGVDb3B5T3JDdXQoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSB7XG4gICAgY29uc3Qgc2VsZWN0aW9uOiBhbnkgPSB3aW5kb3c/LmdldFNlbGVjdGlvbigpPy50b1N0cmluZygpIHx8ICcnO1xuICAgIGNvbnN0IGlzTXVsdGlDZWxsU2VsZWN0aW9uID0gc2VsZWN0aW9uLnNwbGl0KC9bXFxuXFx0XSsvKT8uZmlsdGVyKCh4KSA9PiB4ICE9PSAnJyk7XG5cbiAgICBpZiAoIXRoaXMuYWxsb3dUZXh0Q29weSAmJiBpc011bHRpQ2VsbFNlbGVjdGlvbj8ubGVuZ3RoID4gMSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQudGFyZ2V0J10pIG9uQ2xpY2soZXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuZWRpdEFsbFJvd3MgJiYgIXRoaXMuaW5FZGl0TW9kZSAmJiB0aGlzLnNlbGVjdGVkUm93UmVjb3JkKSB7XG4gICAgICB0aGlzLmhhbmRsZVJvd0NsaWNrKHRoaXMuc2VsZWN0ZWRSb3dSZWNvcmQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGJyb3dzZXIgY2xvc2UgZXZlbnRcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmJlZm9yZXVubG9hZCcsIFsnJGV2ZW50J10pXG4gIGJlZm9yZXVubG9hZEhhbmRsZXIoZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFzc2lnbm1lbnQgb2Ygc2VsZWN0ZWQgY29sdW1ucyBvbiBwYWdlIGxvYWRcbiAgICovXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZ3JpZFNlcnZpY2UuaW5jcmVtZW50Q2FsbHMoKTtcbiAgICBpZiAodGhpcy5ncmlkU2VydmljZS5nZXROdW1iZXJPZkNhbGxzKCkgPT09IDEpIHtcbiAgICAgIHRoaXMuc2VhcmNoYnRuSWQgPSAnc2VhcmNoR2xvYmFsRmlsdGVyQnRuJztcbiAgICAgIGlmICh0aGlzLnRhYmxlKVxuICAgICAgICB0aGlzLnRhYmxlLmlkID0gJ0dyaWRDb21wb25lbnRUYWJsZS0nO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlYXJjaGJ0bklkID0gYEZpbHRlcl8ke2N1cnJlbnRVcmwoKX1fJHt0aGlzLmdyaWRTZXJ2aWNlLmdldE51bWJlck9mQ2FsbHMoKX1gO1xuICAgICAgaWYgKHRoaXMudGFibGUpXG4gICAgICAgIHRoaXMudGFibGUuaWQgPSAnR3JpZENvbXBvbmVudF8nICsgdGhpcy5ncmlkU2VydmljZS5nZXROdW1iZXJPZkNhbGxzKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNldEdyaWRSZWZyZXNoVGltZSkge1xuICAgICAgdGhpcy5yZWZyZXNoR3JpZCgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9uUm93VXBkYXRlPy5vYnNlcnZlcnM/Lmxlbmd0aCA9PSAwKSB7XG4gICAgICB0aGlzLmhpZGVFZGl0QnRuID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5lZGl0QWxsUm93cyAmJiB0aGlzLm9uUm93RGVsZXRlLm9ic2VydmVycy5sZW5ndGggPT0gMCkge1xuICAgICAgdGhpcy5kaXNhYmxlZFNhdmVCdG4gPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuY29tcG9uZW50VGFibGVSZWYgPSB0aGlzLnRhYmxlO1xuICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5yb3dzQ2hhbmdlLmVtaXQodGhpcy5yb3dzRGF0YSk7XG4gICAgICB9KTtcbiAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgIHRoaXMuc2V0TnVtZXJpY1ZhbHVlcygpO1xuICAgIC8vIH0sIDUwMCk7XG4gICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICBpZiAodGhpcy5yb3dzQ2hhbmdlLm9ic2VydmVycz8ubGVuZ3RoKSB7XG4gICAgLy8gICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICAgIC8vICAgfVxuICAgIC8vIH0sIDIwMDApO1xuICB9XG4gIC8vIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgLy8gICBvbkdsb2JhbEZpbHRlckNvbnRyb2xSaWdodEJ0blN0YXRlQ2hhbmdlKCkuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAvLyAgICAgdGhpcy5jaGVja2xpc3QgPSByZXNwb25zZTtcbiAgLy8gICB9KVxuICAvLyAgIC8vIHRoaXMuYWRkRHluYW1pY1BhbmVsT3ZlcmxheUNvbXBvbmVudCgpXG4gIC8vICAgdGhpcy5jb21wb25lbnRUYWJsZVJlZiA9IHRoaXMudGFibGU7XG4gIC8vICAgY29uc3QgbG9va3VwTW9kYWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubG9va3VwLW1vZGVsJyk7XG4gIC8vICAgaWYgKGxvb2t1cE1vZGFsKSB7XG4gIC8vICAgICBjb25zdCBmb3JtQ29udGFpbmVyID0gbG9va3VwTW9kYWwucXVlcnlTZWxlY3RvcignLmZvcm0tY29udGFpbmVyJyk7IFxuICAvLyAgICAgaWYgKCFmb3JtQ29udGFpbmVyKSB7XG4gIC8vICAgICB0aGlzLnNldEZvY3VzT3V0VG9maWx0ZXJzKGxvb2t1cE1vZGFsKTtcbiAgLy8gICAgIH1cbiAgLy8gICB9XG4gIC8vICAgZWxzZXtcbiAgLy8gICAgIHRoaXMuc2V0Rm9jdXNPdXRUb2ZpbHRlcnMoKTtcbiAgLy8gICB9XG4gIC8vICAgdGhpcy5pc0FwaUVycm9yT2NjdXJlZCgpO1xuICAvLyAgIHRoaXMubmdab25lLm9uU3RhYmxlLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgLy8gICAgIGNvbnN0IGtleSA9IHRoaXMudGFibGU/LmlkICsgdGhpcy5jdXJyZW50VXJsO1xuICAvLyAgICAgY29uc3QgY2FjaGVkID0gdGhpcy5zb2Z0Q2FjaGluZ1xuICAvLyAgICAgICA/IHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW2tleV1cbiAgLy8gICAgICAgOiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdTZXRGaWx0ZXJzLScgKyBrZXkpIHx8ICdudWxsJyk7XG4gIC8vICAgICBpZiAoIWNhY2hlZD8uZmlsdGVycz8ubGVuZ3RoKSByZXR1cm47XG4gIC8vICAgICBpZiAodGhpcy51c2VTZXJ2ZXJTaWRlRXZlbnRzKSB7XG4gIC8vICAgICAgIHRoaXMudGFibGUgJiYgKHRoaXMudGFibGUuX2ZpcnN0ID0gMCk7XG4gIC8vICAgICAgIHRoaXMub25TZXJ2ZXJTaWRlRXZlbnRDaGFuZ2UuZW1pdChjYWNoZWQpO1xuICAvLyAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgY2FjaGVkLmZpbHRlcnMuZm9yRWFjaCgoZjogYW55KSA9PiB0aGlzLnRhYmxlPy5maWx0ZXI/LihmLnZhbHVlLCBmLmZpZWxkLCBmLm1hdGNoTW9kZSB8fCAnc3RhcnRzV2l0aCcpKTtcbiAgLy8gICAgIH1cbiAgLy8gICB9KTtcbiAgLy8gfVxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgb25HbG9iYWxGaWx0ZXJDb250cm9sUmlnaHRCdG5TdGF0ZUNoYW5nZSgpLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgIHRoaXMuY2hlY2tsaXN0ID0gcmVzcG9uc2U7XG4gICAgfSlcbiAgICAvLyB0aGlzLmFkZER5bmFtaWNQYW5lbE92ZXJsYXlDb21wb25lbnQoKVxuICAgIHRoaXMuY29tcG9uZW50VGFibGVSZWYgPSB0aGlzLnRhYmxlO1xuICAgIGNvbnN0IGxvb2t1cE1vZGFsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmxvb2t1cC1tb2RlbCcpO1xuICAgIGlmIChsb29rdXBNb2RhbCkge1xuICAgICAgY29uc3QgZm9ybUNvbnRhaW5lciA9IGxvb2t1cE1vZGFsLnF1ZXJ5U2VsZWN0b3IoJy5mb3JtLWNvbnRhaW5lcicpO1xuICAgICAgaWYgKCFmb3JtQ29udGFpbmVyKSB7XG4gICAgICAgIHRoaXMuc2V0Rm9jdXNPdXRUb2ZpbHRlcnMobG9va3VwTW9kYWwpO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuc2V0Rm9jdXNPdXRUb2ZpbHRlcnMoKTtcbiAgICB9XG4gICAgdGhpcy5pc0FwaUVycm9yT2NjdXJlZCgpO1xuICAgIHRoaXMubmdab25lLm9uU3RhYmxlLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMudGFibGU/LmlkICsgdGhpcy5jdXJyZW50VXJsO1xuICAgICAgaWYgKCF0aGlzLmFsbG93Q2FjaGluZyAmJiAhdGhpcy5zb2Z0Q2FjaGluZykge1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnU2V0RmlsdGVycy0nICsga2V5KTtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW2tleV0pIHtcbiAgICAgICAgICBkZWxldGUgdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYWxsb3dDYWNoaW5nIHx8IHRoaXMuc29mdENhY2hpbmcpIHtcbiAgICAgICAgY29uc3QgY2FjaGVkID0gdGhpcy5zb2Z0Q2FjaGluZ1xuICAgICAgICAgID8gdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNba2V5XVxuICAgICAgICAgIDogSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnU2V0RmlsdGVycy0nICsga2V5KSB8fCAnbnVsbCcpO1xuXG4gICAgICAgIGlmIChjYWNoZWQ/LmZpbHRlcnM/Lmxlbmd0aCkge1xuICAgICAgICAgIGNhY2hlZC5maWx0ZXJzLmZvckVhY2goKGY6IGFueSkgPT4gdGhpcy50YWJsZT8uZmlsdGVyPy4oZi52YWx1ZSwgZi5maWVsZCwgZi5tYXRjaE1vZGUgfHwgJ3N0YXJ0c1dpdGgnKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICBjb25zdCB0ZXh0YXJlYXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCcucHJpbWUtdGV4dGFyZWEnKTtcbiAgICB0ZXh0YXJlYXMuZm9yRWFjaCh0ID0+IHRoaXMuYXV0b0dyb3codCkpO1xuICB9XG5cbiAgaXNBcGlFcnJvck9jY3VyZWQoKSB7XG4gICAgdGhpcy5yZXF1ZXN0U2VydmljZS5pc0Vycm9yT2NjdXJlZCgpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgaWYgKHRoaXMudGVtcFNhdmVkUm93Py5sZW5ndGggPiAwICYmIHRoaXMucm93c0RhdGE/Lmxlbmd0aCA+IDAgJiYgIXRoaXMuZWRpdEFsbFJvd3MpIHtcbiAgICAgICAgdGhpcy5lZGl0aW5nUm93S2V5c1t0aGlzLnJvd3NEYXRhW3RoaXMudGVtcFNhdmVkUm93WzBdXVt0aGlzLmRhdGFLZXldXSA9IHJlcztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBzZXRGb2N1c091dFRvZmlsdGVycyhsb29rdXBNb2RhbD8pIHtcbiAgICBsZXQgZmlsdGVycyA9IDgwMDtcbiAgICBsZXQgZmlsdGVyOiBTdWJzY3JpcHRpb24gPSBpbnRlcnZhbChmaWx0ZXJzKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgZmlsdGVycyA9IDA7XG4gICAgICBmaWx0ZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgIGNvbnN0IGZpbHRlckNvbHVtbiA9IHRoaXMuY29sdW1ucz8uZmluZCgoY29sdW1uKSA9PiAhdGhpcy5oaWRlRmlsdGVyICYmICFjb2x1bW4/LmhpZGRlbiAmJiBjb2x1bW4/LmZpbHRlciAmJiAoY29sdW1uPy5maWx0ZXJpbmcgPT09IHRydWUgfHwgY29sdW1uPy5maWx0ZXJpbmcgPT09IHVuZGVmaW5lZCkpO1xuICAgICAgY29uc3QgZmlsdGVyRmllbGQ6IGFueSA9IGxvb2t1cE1vZGFsPy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGZpbHRlckNvbHVtbj8uZmllbGQ/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgY29uc3QgZmlsdGVyRmllbGRzOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGZpbHRlckNvbHVtbj8uZmllbGQ/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGZpbHRlckZpZWxkIHx8IGZpbHRlckZpZWxkcykge1xuICAgICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgaWYgKGZpbHRlckZpZWxkPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmaWx0ZXJGaWVsZFswXT8uZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZmlsdGVyRmllbGRzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbHRlckZpZWxkcz8ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgZmlsdGVyRmllbGRzW2ldPy5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5yZWZyZXNoR3JpZFRlcm1pbmF0b3IoKTtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnJlc2V0Q2FsbHMoKTtcbiAgfVxuXG4gIC8vIHNldCBNdWx0aXNlbGVjdCBUb2dnbGUgQ29sdW1uIC8vXG4gIHNldE11bHRpU2VsZWN0VG9nZ2xlQ29sdW1uKHNlbGVjdGVkRmllbGRzOiBhbnlbXSA9IFtdKSB7XG4gICAgaWYgKHRoaXMudXNlclNldHRpbmc/LnBhZ2VTZXR0aW5ncz8ubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbWF0Y2hVcmwgPSB0aGlzLnVzZXJTZXR0aW5nPy5wYWdlU2V0dGluZ3M/LmZpbmRJbmRleCgocGFnZSkgPT4gcGFnZT8udXJsID09PSB0aGlzLnJvdXRlci51cmwpXG4gICAgICBpZiAobWF0Y2hVcmwgPiAtMSkge1xuICAgICAgICBjb25zdCBtYXRjaEdyaWQgPSB0aGlzLnVzZXJTZXR0aW5nPy5wYWdlU2V0dGluZ3NbbWF0Y2hVcmxdPy5ncmlkU2V0dGluZ3M/LmZpbmRJbmRleCgoZ3JpZFNldHRpbmcpID0+IGdyaWRTZXR0aW5nPy5ncmlkSWQgPT09IHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKTtcbiAgICAgICAgaWYgKG1hdGNoR3JpZCA+IC0xKSB7XG4gICAgICAgICAgdGhpcy51c2VyU2V0dGluZz8ucGFnZVNldHRpbmdzW21hdGNoVXJsXT8uZ3JpZFNldHRpbmdzLnNwbGljZShtYXRjaEdyaWQsIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnNldGdyaWRTZXR0aW5ncyhzZWxlY3RlZEZpZWxkcywgbWF0Y2hVcmwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVzZXJTZXR0aW5nLnBhZ2VTZXR0aW5ncyA9IFtdO1xuICAgICAgdGhpcy5zZXRncmlkU2V0dGluZ3Moc2VsZWN0ZWRGaWVsZHMpO1xuICAgIH1cbiAgfVxuXG4gIGdldFNlbGVjdGVkQ29sRnJvbUxvY2FsU3Ryb3JhZ2Uoc2VsZWN0ZWRDb2x1bW4pIHtcbiAgICBsZXQgYXJyID0gW107XG4gICAgaWYgKHNlbGVjdGVkQ29sdW1uICYmIHNlbGVjdGVkQ29sdW1uPy5wYWdlU2V0dGluZ3M/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG1hdGNoVXJsID0gc2VsZWN0ZWRDb2x1bW4/LnBhZ2VTZXR0aW5ncz8uZmluZEluZGV4KChwYWdlKSA9PiBwYWdlPy51cmwgPT09IHRoaXMucm91dGVyLnVybClcbiAgICAgIGlmIChtYXRjaFVybCA+IC0xKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoR3JpZCA9IHNlbGVjdGVkQ29sdW1uPy5wYWdlU2V0dGluZ3NbbWF0Y2hVcmxdPy5ncmlkU2V0dGluZ3M/LmZpbmQoKGdyaWRTZXR0aW5nKSA9PiBncmlkU2V0dGluZz8uZ3JpZElkID09PSB0aGlzLmdyaWRJZCk7XG4gICAgICAgIGlmIChtYXRjaEdyaWQgJiYgbWF0Y2hHcmlkLnNlbGVjdGVkQ29sdW1ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIGlmIChtYXRjaEdyaWQuc2VsZWN0ZWRDb2x1bW5zLnNvbWUoKGZpZWxkTmFtZSkgPT4gZmllbGROYW1lPy50b0xvd2VyQ2FzZSgpID09PSBjb2x1bW4/LmZpZWxkPy50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgICAgICBhcnIucHVzaChjb2x1bW4pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYXJyPy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gYXJyO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgc2V0Z3JpZFNldHRpbmdzKHNlbGVjdGVkRmllbGRzOiBhbnksIG1hdGNoVXJsPzogYW55KSB7XG4gICAgaWYgKHNlbGVjdGVkRmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCBncmlkU2V0dGluZ3M6IGFueVtdID0gW107XG4gICAgICBncmlkU2V0dGluZ3MucHVzaCh7XG4gICAgICAgIGdyaWRJZDogdGhpcy5ncmlkSWQsXG4gICAgICAgIHNlbGVjdGVkQ29sdW1uczogc2VsZWN0ZWRGaWVsZHMsXG4gICAgICAgIGN1c3RvbUNvbHVtbnNXaWR0aDogdGhpcy5jdXN0b21XaWR0aENvbHVtbnMsXG4gICAgICB9KVxuICAgICAgY29uc3QgcGFnZVNldHRpbmcgPSB7XG4gICAgICAgIHVybDogdGhpcy5yb3V0ZXIudXJsLFxuICAgICAgICBncmlkU2V0dGluZ3M6IGdyaWRTZXR0aW5ncyxcbiAgICAgICAgbGFzdFVwZGF0ZWQ6IG5ldyBEYXRlKClcbiAgICAgIH1cbiAgICAgIHRoaXMudXNlclNldHRpbmcubGFzdFVwZGF0ZWQgPSBuZXcgRGF0ZSgpO1xuICAgICAgaWYgKG1hdGNoVXJsID4gLTEpIHtcbiAgICAgICAgdGhpcy51c2VyU2V0dGluZy5wYWdlU2V0dGluZ3NbbWF0Y2hVcmxdID0gcGFnZVNldHRpbmc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnVzZXJTZXR0aW5nLnBhZ2VTZXR0aW5ncy5wdXNoKHBhZ2VTZXR0aW5nKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhZ2VJbmZvID0gSlNPTi5zdHJpbmdpZnkodGhpcy51c2VyU2V0dGluZyk7XG4gICAgICBjaGFuZ2VDb2x1bW5zU3RhdGUoeyBwYWdlU2V0dGluZzogcGFnZUluZm8gfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gYXBwbHkgdXNlciByb2xlIHBlcm1pc3Npb25zIG9uIGdyaWQgY29sdW1uc1xuICBhcHBseUNvbHVtbnNQZXJtaXNzaW9ucygpIHtcbiAgICBpZiAodGhpcy5jb2x1bW5zKSB7XG4gICAgICBsZXQgdG90YWxGaWVsZHM6IG51bWJlciA9IDA7XG4gICAgICBsZXQgaGlkZGVuRmllbGRzOiBudW1iZXIgPSAwO1xuXG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBJR3JpZENvbHVtbikgPT4ge1xuICAgICAgICBsZXQgcGVybWlzc2lvbnM6IElQZXJtaXNzaW9uW10gPSBjb2x1bW4ucGVybWlzc2lvbnM7XG4gICAgICAgIGxldCBoYXNWYWxpZEVkaXRQZXJtaXNzaW9uID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHBlcm1pc3Npb25zICYmIHBlcm1pc3Npb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBwZXJtaXNzaW9ucy5mb3JFYWNoKChwZXJtaXNzaW9uKSA9PiB7XG4gICAgICAgICAgICBsZXQgaXNWYWxpZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHBlcm1pc3Npb24ucm9sZXMgJiYgcGVybWlzc2lvbi5yb2xlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHBlcm1pc3Npb24ucm9sZXMuZm9yRWFjaCgocm9sZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZCAmJiB0aGlzLnJvbGVzICYmIHRoaXMucm9sZXMuaW5jbHVkZXMocm9sZSkpIHtcbiAgICAgICAgICAgICAgICAgIGlzVmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5WSUVXICYmXG4gICAgICAgICAgICAgICAgIWhhc1ZhbGlkRWRpdFBlcm1pc3Npb25cbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5oaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5FRElUKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgIGhhc1ZhbGlkRWRpdFBlcm1pc3Npb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgY29sdW1uLmhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgY29sdW1uLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdG90YWxGaWVsZHMrKztcbiAgICAgICAgaWYgKGNvbHVtbi5oaWRkZW4pIHtcbiAgICAgICAgICBoaWRkZW5GaWVsZHMrKztcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuaXNDb2x1bW5IaWRkZW4gPSB0b3RhbEZpZWxkcyA+IDAgJiYgdG90YWxGaWVsZHMgPT09IGhpZGRlbkZpZWxkcztcbiAgICB9XG4gIH1cblxuICAvLyBhcHBseSBnbG9iYWwgcGVybWlzc2lvbnMgb24gZW50aXJlIGdyaWRcbiAgYXBwbHlHcmlkUGVybWlzc2lvbnMoKSB7XG4gICAgaWYgKHRoaXMucGVybWlzc2lvbnMgJiYgdGhpcy5wZXJtaXNzaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgaGFzVmFsaWRFZGl0UGVybWlzc2lvbiA9IGZhbHNlO1xuXG4gICAgICAvLyBjaGVjayBpZiBhbnkgY29sdW1uIGhhcyBhbnkgcGVybWlzc2lvblxuICAgICAgbGV0IGhhc0NvbHVtblBlcm1pc3Npb25zID0gdGhpcy5jb2x1bW5zPy5zb21lKFxuICAgICAgICAoeCkgPT4geD8ucGVybWlzc2lvbnMgJiYgeC5wZXJtaXNzaW9ucy5sZW5ndGggPiAwXG4gICAgICApO1xuXG4gICAgICB0aGlzLnBlcm1pc3Npb25zLmZvckVhY2goKHBlcm1pc3Npb24pID0+IHtcbiAgICAgICAgbGV0IGlzVmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgICAgICBwZXJtaXNzaW9uLnJvbGVzLmZvckVhY2goKHJvbGUpID0+IHtcbiAgICAgICAgICBpZiAoIWlzVmFsaWQgJiYgdGhpcy5yb2xlcyAmJiB0aGlzLnJvbGVzLmluY2x1ZGVzKHJvbGUpKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5DUlVEICYmICFpc1ZhbGlkKSB7XG4gICAgICAgICAgdGhpcy51c2VJbmxpbmVDUlVEID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgcGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuVklFVyAmJlxuICAgICAgICAgICFoYXNWYWxpZEVkaXRQZXJtaXNzaW9uXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMudXNlSW5saW5lQ1JVRCA9IHRydWU7XG4gICAgICAgICAgaWYgKCFpc1ZhbGlkICYmICFoYXNDb2x1bW5QZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgdGhpcy5pc0dyaWRIaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy51c2VJbmxpbmVDUlVEID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLkVESVQgJiYgIWlzVmFsaWQpIHtcbiAgICAgICAgICB0aGlzLmlzR3JpZEhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgIGhhc1ZhbGlkRWRpdFBlcm1pc3Npb24gPSB0cnVlO1xuICAgICAgICAgIHRoaXMuZWRpdFJvd1Blcm1pc3Npb24gPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5ERUxFVEUgJiYgIWlzVmFsaWQpIHtcbiAgICAgICAgICB0aGlzLmRlbGV0ZVJvd1Blcm1pc3Npb24gPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5BRERST1cgJiYgIWlzVmFsaWQpIHtcbiAgICAgICAgICB0aGlzLmFkZFJvd1Blcm1pc3Npb24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9uUm93QWRkLm9ic2VydmVycy5sZW5ndGggPT0gMCkgdGhpcy5hZGRSb3dQZXJtaXNzaW9uID0gZmFsc2U7XG4gICAgaWYgKHRoaXMub25Sb3dEZWxldGUub2JzZXJ2ZXJzLmxlbmd0aCA9PSAwKSB0aGlzLmRlbGV0ZVJvd1Blcm1pc3Npb24gPSBmYWxzZTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZTogU2ltcGxlQ2hhbmdlcykge1xuICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnJlbWFpbmluZ1Jvd3NEYXRhPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5yb3dzRGF0YSA9IFsuLi50aGlzLnJvd3NEYXRhLCAuLi50aGlzLnJlbWFpbmluZ1Jvd3NEYXRhXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgaWYgKCF0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCAmJiAhdGhpcy5ncmlkU2VydmljZS5yb3dVcGRhdGUpIHtcbiAgICAgIHRoaXMuc2V0R3JpZElkKClcbiAgICAgIHRoaXMuY29tcG9uZW50VGFibGVSZWYgPSB0aGlzLnRhYmxlO1xuICAgICAgbGV0IGdldFNlbGVjdGVkQ29sID0gW11cbiAgICAgIGlmICh0aGlzLmFsbG93Q2FjaGluZyAhPT0gZmFsc2UgJiYgdGhpcy5wYWdpbmF0aW9uKSB7XG4gICAgICAgIHRoaXMuYWxsb3dDYWNoaW5nID0gdGhpcy5wYWdpbmF0aW9uO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCkge1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnU2V0RmlsdGVycy0nICsgdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmwpO1xuICAgICAgfVxuICAgICAgLy8gYWRkIGRlZmF1bHRSb3cgaW4gcGFnaW5hdGlvbiBhcnJheVxuICAgICAgaWYgKCF0aGlzLnNldFBhZ2luYXRpb25MZW5ndGguaW5jbHVkZXModGhpcy5kZWZhdWx0Um93cykpIHtcbiAgICAgICAgdGhpcy5zZXRQYWdpbmF0aW9uTGVuZ3RoLnVuc2hpZnQodGhpcy5kZWZhdWx0Um93cyk7XG4gICAgICB9XG4gICAgICBjb25zdCBoYXNDb2x1bW5zOiBib29sZWFuID0gdGhpcy5jb2x1bW5zICYmIHRoaXMuY29sdW1ucy5sZW5ndGggPiAwO1xuICAgICAgaWYgKGhhc0NvbHVtbnMpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5ncmlkU2VydmljZS5zZXRDb2x1bW5GaWVsZHModGhpcy5jb2x1bW5zKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRvZ2dsZUNvbHVtbnMgPSB0aGlzLmNvbHVtbnM/LmZpbHRlcigoeCkgPT4gIXguaGlkZGVuICYmICF4LnNob3dJbk1vcmUpO1xuICAgICAgICBjb25zdCBjdXJyZW50VXNlckluZm8gPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdDdXJyZW50VXNlckluZm8nKSk7XG4gICAgICAgIC8vc2V0IGdldFNlbGVjdGVkQ29sIGNvbHVtbnMgZm9yIHRvZ2dsZUNvdWxtbiBcbiAgICAgICAgaWYgKHRoaXMuYWxsb3dQZXJzaXN0ZW5jZSAmJiB0aGlzLmFsbG93Q29sdW1uVG9nZ2xlKSB7XG4gICAgICAgICAgaWYgKGN1cnJlbnRVc2VySW5mbyAmJiBjdXJyZW50VXNlckluZm8ucGFnZVNldHRpbmcpIHtcbiAgICAgICAgICAgIGdldFNlbGVjdGVkQ29sID0gdGhpcy5nZXRTZWxlY3RlZENvbEZyb21Mb2NhbFN0cm9yYWdlKEpTT04ucGFyc2UoY3VycmVudFVzZXJJbmZvLnBhZ2VTZXR0aW5nKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucm9sZXMgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJSb2xlcygpO1xuXG4gICAgICAgIC8vIGFwcGx5IHVzZXIgcm9sZSBwZXJtaXNzaW9ucyBvbiBncmlkIGNvbHVtbnNcbiAgICAgICAgdGhpcy5hcHBseUNvbHVtbnNQZXJtaXNzaW9ucygpO1xuXG4gICAgICAgIC8vIGFwcGx5IGdsb2JhbCBwZXJtaXNzaW9ucyBvbiBlbnRpcmUgZ3JpZFxuICAgICAgICB0aGlzLmFwcGx5R3JpZFBlcm1pc3Npb25zKCk7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucz8uZmlsdGVyKCh4KSA9PiAoeC5zaG93ID09PSB0cnVlIHx8IHguc2hvdyA9PT0gdW5kZWZpbmVkKSAmJiAheC5oaWRkZW4gJiYgIXguc2hvd0luTW9yZSk7XG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAvL2xvYWQgY29sdW1uIHdpdGR0aCBvbiBwYWdlIHJlbG9hZFxuICAgICAgICB0aGlzLmxvYWRDb2x1bW5XaWR0aHMoKTtcbiAgICAgICAgaWYgKHRoaXMucm93c0RhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuZm9ybVNlcnZpY2Uuc2V0VG9vbHRpcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2hlY2tpbmcgZmlsdGVyIGV4aXN0IG9yIG5vdFxuICAgICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLl9zZWxlY3RlZENvbHVtbnMuc29tZShcbiAgICAgICAgICAoY29sdW1uKSA9PiBjb2x1bW4uZmlsdGVyaW5nID09PSB1bmRlZmluZWQgfHwgY29sdW1uLmZpbHRlcmluZyA9PT0gdHJ1ZVxuICAgICAgICApO1xuICAgICAgICBpZiAoZmlsdGVyID09PSBmYWxzZSkge1xuICAgICAgICAgIHRoaXMuaGlkZUZpbHRlciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGZpbHRlckZvY3VzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xuICAgICAgICAgIC8vIHNldCBpc1JlcXVpcmVkIHRydWUgZm9yIHJlcXVpcmVkIGNvbHVtbiB0byBzaG93IGFzdHJpYyBpbiBjb2x1bW4gaGVhZGVyXG4gICAgICAgICAgaWYgKGNvbHVtbi52YWxpZGF0aW9ucz8uZmluZCh2YWxpZGF0aW9uID0+IHZhbGlkYXRpb24udHlwZSA9PSBFR3JpZFZhbGlkYXRvci5SRVFVSVJFRCkpIHtcbiAgICAgICAgICAgIGNvbHVtbi5pc1JlcXVpcmVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gc2V0IG51bWVyaWMgbnVsbCBvciB1bmRlZmluZSBkYXRhIGRlZmF1bHQgdmFsdWVcbiAgICAgICAgICBpZiAoKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTlVNRVJJQyB8fCBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4gfHwgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5URVhUIHx8IGNvbHVtbi50eXBlID09PSB1bmRlZmluZWQgfHwgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFIHx8IGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04pICYmIGNvbHVtbi52YWx1ZSAmJiB0aGlzLnJvd3NEYXRhPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnJvd3NEYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgICAgICBpZiAoY29sdW1uLnZhbHVlICYmIChyb3dbY29sdW1uLmZpZWxkXSA9PT0gbnVsbCB8fCByb3dbY29sdW1uLmZpZWxkXSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnZhbHVlID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnZhbHVlIDogY29sdW1uLnZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgICAvL3NldCB0ZXh0VHlwZSBmb3IgYSBjb2x1bW4gdGhhdCBpcyBmb3JtYXR0ZWQgdG8gYmUgYSBwYXNzd29yZFxuICAgICAgICAgIGlmIChjb2x1bW4uZm9ybWF0ID09ICdwYXNzd29yZCcgJiYgKCFjb2x1bW4udGV4dFR5cGUgfHwgY29sdW1uLnRleHRUeXBlICE9PSAndGV4dCcpKSB7XG4gICAgICAgICAgICBjb2x1bW4udGV4dFR5cGUgPSAncGFzc3dvcmQnO1xuICAgICAgICAgIH0gZWxzZSBjb2x1bW4udGV4dFR5cGUgPSAndGV4dCc7XG4gICAgICAgICAgLy8gY29udmVydCBzdHJpbmcgdGltZSBpbnRvIHRoZSBkYXRlXG4gICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSkge1xuICAgICAgICAgICAgaWYgKGNvbHVtbi50aW1lT25seSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICB0aGlzLnJvd3NEYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdICYmXG4gICAgICAgICAgICAgICAgICAocm93W2NvbHVtbi5maWVsZF0udG9TdHJpbmcoKS5pbmNsdWRlcygnUE0nKSB8fFxuICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXS50b1N0cmluZygpLmluY2x1ZGVzKCdBTScpKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBzZXRUaW1lSW5EYXRlKHJvd1tjb2x1bW4uZmllbGRdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghY29sdW1uLm1pbnV0ZXNJbnRlcnZhbCkge1xuICAgICAgICAgICAgICB0aGlzLnJvd3NEYXRhLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJvd1tjb2x1bW4uZmllbGRdICYmIHR5cGVvZiByb3dbY29sdW1uLmZpZWxkXSA9PT0gJ3N0cmluZycgJiYgIXJvd1tjb2x1bW4uZmllbGRdLmluY2x1ZGVzKCdUJykpIHtcbiAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gbmV3IERhdGUocm93W2NvbHVtbi5maWVsZF0gYXMgc3RyaW5nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXRoaXMuaGlkZUZpbHRlciAmJiBjb2x1bW4uZmlsdGVyVmFsdWUgJiYgY29sdW1uLmZpbHRlciAmJiBjb2x1bW4uZmlsdGVyaW5nICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgLy8gc2V0IGZpbHRlciB2YWx1ZVxuICAgICAgICAgICAgdGhpcy5zZXRGaWx0ZXJGb2N1c091dChjb2x1bW4pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIHNldCBEaXNwbGF5VGV4dCB3aGVuIHZhbHVlIGlzIGluIGN1cmx5IGJyYWNrZXRzLlxuICAgICAgICAgIHRoaXMuc2V0RGlzcGxheVRleHRWYWx1ZShjb2x1bW4pO1xuICAgICAgICAgIHRoaXMuc2V0RGlzcGxheUZpZWxkVmFsdWUoY29sdW1uKTtcblxuICAgICAgICAgIC8vQWdncmVnYXRlIHNjZW5hcmlvXG4gICAgICAgICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgJiYgY29sdW1uLmFnZ3JlZ2F0ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmFnZ3JlZ2F0ZUZvb3RlciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNldEFnZ3JlZ2F0ZVRleHQoY29sdW1uKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgc2VhcmNoRmlsdGVycztcbiAgICAgICAgICBpZiAoIXRoaXMuc29mdENhY2hpbmcgJiYgdGhpcy50YWJsZT8uaWQpIHtcbiAgICAgICAgICAgIHNlYXJjaEZpbHRlcnMgPSBKU09OLnBhcnNlKFxuICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnU2V0RmlsdGVycy0nICsgdGhpcy50YWJsZT8uaWQgKyB0aGlzLmN1cnJlbnRVcmwpIGFzIGFueVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudGFibGU/LmlkKSB7XG4gICAgICAgICAgICBzZWFyY2hGaWx0ZXJzID0gdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdGhpcy50YWJsZT8uaWQgKyB0aGlzLmN1cnJlbnRVcmxdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5oaWRlRmlsdGVyICYmXG4gICAgICAgICAgICBzZWFyY2hGaWx0ZXJzICYmXG4gICAgICAgICAgICBzZWFyY2hGaWx0ZXJzLmZpbHRlcnMgJiZcbiAgICAgICAgICAgIHNlYXJjaEZpbHRlcnMuZmlsdGVycz8ubGVuZ3RoID4gMFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgc2VhcmNoRmlsdGVycy5maWx0ZXJzLmZvckVhY2goKHg6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoeC5maWVsZCA9PT0gY29sdW1uLmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbj8uZmlsdGVyPy50eXBlID09PSAnY2FsZW5kYXInICYmIHgudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVTdHJpbmcgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh4LnZhbHVlLCAnTU0tZGQteXl5eScpO1xuICAgICAgICAgICAgICAgICAgY29sdW1uLmZpbHRlclZhbHVlID0gbmV3IERhdGUoZGF0ZVN0cmluZyBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5NVUxUSVNFTEVDVCAmJiAhQXJyYXkuaXNBcnJheSh4LnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgY29sdW1uLmZpbHRlclZhbHVlID0geC52YWx1ZT8uc3BsaXQoJywnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHgudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5maWx0ZXJWYWx1ZSA9IGNvbHVtbi50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQgJiYgY29sdW1uLmhhc093blByb3BlcnR5KCdmaWx0ZXJWYWx1ZV9vYmonKSA/IGNvbHVtblsnZmlsdGVyVmFsdWVfb2JqJ10/LnRleHQgOiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGNvbnZlcnRpbmcgZGlzcGxheUZpZWxkIHRvTG93ZXJjYXNlXG4gICAgICAgICAgaWYgKGNvbHVtbi5kaXNwbGF5RmllbGQpIHtcbiAgICAgICAgICAgIGNvbHVtbi5kaXNwbGF5RmllbGQgPSBjb2x1bW4uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHNldCBBdXRvQ29tcGxldGUgRGF0YVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQVVUT0NPTVBMRVRFICYmXG4gICAgICAgICAgICB0aGlzLnJvd3NEYXRhICYmXG4gICAgICAgICAgICB0aGlzLnJvd3NEYXRhPy5sZW5ndGggPiAwXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnJvd3NEYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgICAgICAvLyBjb252ZXJ0IHN0cmluZyB0aGF0IGNvbnRhaW5zIGNvbW1hIGludG8gYXJyYXlzXG4gICAgICAgICAgICAgIGlmIChyb3dbY29sdW1uLmZpZWxkXT8udG9TdHJpbmcoKS5pbmNsdWRlcygnOycpKSB7XG4gICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXVxuICAgICAgICAgICAgICAgICAgPy50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAuc3BsaXQoJzsnKVxuICAgICAgICAgICAgICAgICAgPy5tYXAoKHZhbHVlOiBhbnkpID0+ICh7IFtjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXTogcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdLCBbY29sdW1uLm9wdGlvbkxhYmVsPy50b0xvd2VyQ2FzZSgpXTogdmFsdWUsIFtjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldOiB2YWx1ZSB9KSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qga2V5OiBhbnkgPSBPYmplY3Qua2V5cyhyb3cpLmZpbmQoKHgpID0+IHggPT09IGNvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgLy8gY29udmVydCBzaW1wbGUgc3RyaW5nIGludG8gYXJyYXlcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJvd1trZXldKSAmJiByb3dba2V5XSkge1xuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4uZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICByb3dba2V5XSA9IFt7IFtjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXTogcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdLCBbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXTogcm93W2tleV0gfV07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW4ub3B0aW9uTGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcm93W2tleV0gPSBbeyBbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXTogcm93W2tleV0sIFtjb2x1bW4ub3B0aW9uTGFiZWw/LnRvTG93ZXJDYXNlKCldOiByb3dba2V5XSB9XTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd1trZXldID0gW3sgW2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV06IHJvd1trZXldIH1dO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy93aGVuIHdlIGFkZCBhIG5ldyByb3csIGl0IHNldCB0aGUgZGVmYXVsdCB2YWx1ZVxuICAgICAgICAgIGlmIChjb2x1bW4udmFsdWUpIHtcbiAgICAgICAgICAgIGxldCBrZXkgPSBPYmplY3Qua2V5cyh0aGlzLm5ld0dyaWRSb3cpLmZpbmQoKHgpID0+IHg/LnRvTG93ZXJDYXNlKCkgPT09IGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgIGlmICgha2V5KSB7XG4gICAgICAgICAgICAgIHRoaXMubmV3R3JpZFJvd1tjb2x1bW4uZmllbGRdID0gY29sdW1uLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxJTkspIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TGlua1RhYlNldHRpbmdzKGNvbHVtbik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5hbGxvd1BlcnNpc3RlbmNlICYmIGdldFNlbGVjdGVkQ29sPy5sZW5ndGggPiAwICYmIHRoaXMuYWxsb3dDb2x1bW5Ub2dnbGUpIHtcbiAgICAgICAgICB0aGlzLnNldFNlbGVjdENvbHVtbnMoZ2V0U2VsZWN0ZWRDb2wpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2V0U2VsZWN0Q29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGdsb2JhbEZpbHRlckJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuc2VhcmNoYnRuSWQpO1xuICAgICAgICBpZiAoZ2xvYmFsRmlsdGVyQnRuKSB7XG4gICAgICAgICAgdGhpcy5zaG93RmlsdGVyYnRuID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlLnJvd3MpIHtcbiAgICAgICAgICBjb25zdCBjbGFzc0VsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdoaWdobGlnaHRlZC1yb3cnKTtcbiAgICAgICAgICBpZiAoY2xhc3NFbGVtZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNsYXNzRWxlbWVudFswXS5zY3JvbGxJbnRvVmlldygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoISh0aGlzLnBhZ2luYXRpb24gJiYgdGhpcy5lZGl0QWxsUm93cykgJiYgdGhpcy5yb3dzRGF0YT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5zb3J0SWNvbkhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVDdXN0b21Tb3J0aW5nKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLmVkaXRBbGxSb3dzICYmIHRoaXMucm93c0RhdGE/Lmxlbmd0aCA+IDAgJiYgdGhpcy5jb2x1bW5zPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0QWxsUm93c0F0T25jZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5zZXREcm9wZG93bmRhdGFWYWx1ZSA9IHRydWU7XG4gICAgICBjb25zdCBnbG9iYWxTZWFyY2hidG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2xvYmFsU2VhcmNoYnRuJyk7XG4gICAgICBpZiAoZ2xvYmFsU2VhcmNoYnRuKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoR3JpZEZpbHRlciA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucm93c0RhdGE/Lmxlbmd0aCA+IDAgJiYgdGhpcy5nZW5lcmF0ZVJvd3NEYXRhQ29weSkge1xuICAgICAgICB0aGlzLnJvd3NEYXRhQ29weSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5yb3dzRGF0YSkpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLnN0b3BEaWFsb2dDbG9zZSkge1xuICAgICAgICB0aGlzLmRlZmF1bHRSb3dDbGljaygpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnJvd1VwZGF0ZUNoYW5nZSA9IGZhbHNlO1xuICAgIHRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkID0gZmFsc2U7XG5cbiAgfVxuXG4gIGhhbmRsZUN1c3RvbVNvcnRpbmcoKSB7XG4gICAgdGhpcy5QYWdlQ2hhbmdlID0gZmFsc2U7XG4gICAgY29uc3QgeyBmaWVsZCwgZGlyZWN0aW9uIH0gPSB0aGlzLnNvcnREYXRhO1xuICAgIGlmICghZmllbGQpIHJldHVybjtcblxuICAgIGNvbnN0IEFTQyA9IGRpcmVjdGlvbiA9PT0gRUdyaWRTb3J0RGlyZWN0aW9uLkFTQztcbiAgICBjb25zdCBzb3J0ZWQgPSBbLi4udGhpcy5yb3dzRGF0YV0uc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3Qgbm9ybWFsaXplID0gKHZhbDogYW55KSA9PlxuICAgICAgICB2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQgPyAnJyA6IFN0cmluZyh2YWwpLnRyaW0oKTtcblxuICAgICAgY29uc3QgYVZhbCA9IG5vcm1hbGl6ZShhW2ZpZWxkXSk7XG4gICAgICBjb25zdCBiVmFsID0gbm9ybWFsaXplKGJbZmllbGRdKTtcblxuICAgICAgY29uc3QgYUVtcHR5ID0gYVZhbCA9PT0gJyc7XG4gICAgICBjb25zdCBiRW1wdHkgPSBiVmFsID09PSAnJztcblxuICAgICAgaWYgKGFFbXB0eSAmJiBiRW1wdHkpIHJldHVybiAwO1xuICAgICAgaWYgKGFFbXB0eSkgcmV0dXJuIEFTQyA/IC0xIDogMTtcbiAgICAgIGlmIChiRW1wdHkpIHJldHVybiBBU0MgPyAxIDogLTE7XG5cbiAgICAgIGNvbnN0IGFOdW0gPSBwYXJzZUZsb2F0KGFWYWwpO1xuICAgICAgY29uc3QgYk51bSA9IHBhcnNlRmxvYXQoYlZhbCk7XG4gICAgICBpZiAoIWlzTmFOKGFOdW0pICYmICFpc05hTihiTnVtKSkgcmV0dXJuIEFTQyA/IGFOdW0gLSBiTnVtIDogYk51bSAtIGFOdW07XG5cbiAgICAgIHJldHVybiBBU0MgPyBhVmFsLmxvY2FsZUNvbXBhcmUoYlZhbCkgOiBiVmFsLmxvY2FsZUNvbXBhcmUoYVZhbCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJvd3NEYXRhID0gc29ydGVkO1xuICAgIHRoaXMudGFibGUuc29ydEZpZWxkID0gZmllbGQ7XG4gICAgdGhpcy50YWJsZS5zb3J0T3JkZXIgPSBBU0MgPyAxIDogLTE7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgc2V0TGlua1RhYlNldHRpbmdzKGNvbHVtbjogSUdyaWRDb2x1bW4pIHtcbiAgICBjb25zdCB1c2VyU2V0dGluZyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiVXNlclNldHRpbmdcIik7XG4gICAgaWYgKHVzZXJTZXR0aW5nKSB7XG4gICAgICBjb25zdCBwYXJzZWRTZXR0aW5nID0gSlNPTi5wYXJzZSh1c2VyU2V0dGluZyk7XG4gICAgICBpZiAoY29sdW1uPy50YXJnZXRVc2VVc2VyUHJlZikge1xuICAgICAgICBjb2x1bW4udGFyZ2V0ID0gcGFyc2VkU2V0dGluZz8udmFsdWUgPT09IFwib3BlbkxpbmtJbkN1cnJlbnRUYWJcIiA/IEVHcmlkbGluay5TRUxGIDogRUdyaWRsaW5rLkJMQU5LO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldEdyaWRJZCgpIHtcbiAgICBsZXQgY291bnRlciA9IDA7XG4gICAgbGV0IHRhYmxlcyA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3AtdGFibGUnKTtcbiAgICBpZiAodGFibGVzPy5sZW5ndGggPiAwKSB7XG4gICAgICB0YWJsZXMuZm9yRWFjaCgodGFibGUsIGluZGV4KSA9PiB7XG4gICAgICAgIHRhYmxlLnNldEF0dHJpYnV0ZSgnaWQnLCB0aGlzLmN1cnJlbnRVcmwgKyBjb3VudGVyKyspO1xuICAgICAgfSlcbiAgICB9XG4gIH1cbiAgc2V0U2VsZWN0Q29sdW1ucyhjb2x1bW5zKSB7XG4gICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5zID0gW107XG4gICAgY29sdW1ucz8uZm9yRWFjaCgoeCwgaSkgPT4ge1xuICAgICAgaWYgKCh4LnNob3cgPT09IHRydWUgfHwgeC5zaG93ID09PSB1bmRlZmluZWQpICYmICF4LmhpZGRlbiAmJiAheC5zaG93SW5Nb3JlKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29sdW1uc1tpXSkge1xuICAgICAgICAgIHgudmFsdWUgPSB0aGlzLnNlbGVjdGVkQ29sdW1uc1tpXS52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zZWxlY3RlZENvbHVtbnMucHVzaCh4KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGF1dG9Db21wbGV0ZVNlbGVjdGVkVmFsdWUocm93OiBhbnksIGNvbHVtbjogSUdyaWRDb2x1bW4sIHZhbHVlKSB7XG4gICAgaWYgKGNvbHVtbi5vcHRpb25MYWJlbCkge1xuICAgICAgY29uc3QgdmFsdWVLZXkgPSBjb2x1bW4ub3B0aW9uVmFsdWUgPyBjb2x1bW4ub3B0aW9uVmFsdWUgOiBjb2x1bW4uZmllbGQ7XG4gICAgICByb3dbY29sdW1uLmZpZWxkXSA9IFsuLi5yb3dbY29sdW1uLmZpZWxkXSwge1xuICAgICAgICBbY29sdW1uLm9wdGlvbkxhYmVsPy50b0xvd2VyQ2FzZSgpXTogdmFsdWVbY29sdW1uLm9wdGlvbkxhYmVsPy50b0xvd2VyQ2FzZSgpXSwgW3ZhbHVlS2V5Py50b0xvd2VyQ2FzZSgpXTogdmFsdWVbdmFsdWVLZXk/LnRvTG93ZXJDYXNlKCldLFxuICAgICAgICBbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXTogdmFsdWVbdmFsdWVLZXk/LnRvTG93ZXJDYXNlKCldXG4gICAgICB9XTtcbiAgICAgIGNvbnN0IGluZGV4ID0gcm93W2NvbHVtbi5maWVsZF0/LmZpbmRJbmRleCgoeCkgPT4gSlNPTi5zdHJpbmdpZnkoeCkgPT09IEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgICByb3dbY29sdW1uLmZpZWxkXS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNldCBEaXNwbGF5VGV4dCB3aGVuIHZhbHVlIGlzIGluIGN1cmx5IGJyYWNrZXRzLlxuICBzZXREaXNwbGF5VGV4dFZhbHVlKGNvbHVtbjogSUdyaWRDb2x1bW4pIHtcbiAgICB0aGlzLnJvd3NEYXRhPy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MSU5LIHx8XG4gICAgICAgIEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgfHxcbiAgICAgICAgRUdyaWRDb2x1bW5UeXBlLklGUkFNRVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ107XG4gICAgICAgIGlmIChjb2x1bW4uZGlzcGxheVRleHQgJiYgY29sdW1uLmRpc3BsYXlUZXh0LmluY2x1ZGVzKCd7JykpIHtcbiAgICAgICAgICBjb25zdCBkaXNwbGF5VGV4dCA9IGNvbHVtbi5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgLnJlcGxhY2UoJ3snLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKCd9JywgJycpO1xuICAgICAgICAgIGlmIChkaXNwbGF5VGV4dCAmJiBmaWVsZCkge1xuICAgICAgICAgICAgZmllbGQuZGlzcGxheVRleHQgPSByb3dbZGlzcGxheVRleHQudG9Mb3dlckNhc2UoKV07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5kaXNwbGF5VGV4dCAmJiBmaWVsZCkge1xuICAgICAgICAgIGZpZWxkLmRpc3BsYXlUZXh0ID0gY29sdW1uLmRpc3BsYXlUZXh0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZXREaXNwbGF5RmllbGRWYWx1ZShjb2x1bW46IElHcmlkQ29sdW1uKSB7XG4gICAgdGhpcy5yb3dzRGF0YT8uZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MSU5LKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ107XG4gICAgICAgIGlmIChjb2x1bW4uZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgY29uc3QgZGlzcGxheUZpZWxkID0gY29sdW1uLmRpc3BsYXlGaWVsZDtcbiAgICAgICAgICBpZiAoZGlzcGxheUZpZWxkICYmIGZpZWxkKSB7XG4gICAgICAgICAgICBmaWVsZC5kaXNwbGF5RmllbGQgPSByb3dbZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKCldO1xuXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5kaXNwbGF5RmllbGQgJiYgZmllbGQpIHtcbiAgICAgICAgICBmaWVsZC5kaXNwbGF5RmllbGQgPSBjb2x1bW4uZGlzcGxheUZpZWxkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvblRleHRhcmVhQmx1cihjb2x1bW46IElHcmlkQ29sdW1uLCByb3c6IGFueSkge1xuICAgIGNvbnN0IGlkID0gY29sdW1uLmZpZWxkICsgJy0nICsgcm93W3RoaXMuZGF0YUtleV07XG4gICAgY29uc3QgdGV4dGFyZWEgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGB0ZXh0YXJlYVtkYXRhLWNlbGw9XCIke2lkfVwiXWApIGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQ7XG5cbiAgICBpZiAodGV4dGFyZWEpIHtcbiAgICAgIHRleHRhcmVhLnN0eWxlLmhlaWdodCA9ICcnO1xuICAgICAgdGV4dGFyZWEuc3R5bGUud2lkdGggPSAnJztcbiAgICB9XG4gICAgdGhpcy5lZGl0aW5nQ2VsbCA9IG51bGw7XG4gICAgdGhpcy5vbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpO1xuICB9XG5cbiAgb25UZXh0YXJlYUVudGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBjb2x1bW46IElHcmlkQ29sdW1uLCByb3c6IGFueSkge1xuICAgIGlmIChldmVudC5jdHJsS2V5ICYmIGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMub25UZXh0YXJlYUJsdXIoY29sdW1uLCByb3cpO1xuICAgIH1cbiAgfVxuICBvbklucHV0Rm9jdXMoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnkpIHtcbiAgICBpZiAodGhpcy5lZGl0aW5nQ2VsbCAmJiAhdGhpcy5lZGl0aW5nQ2VsbC5zdGFydHNXaXRoKGNvbHVtbi5maWVsZCkpIHtcbiAgICAgIHRoaXMuZWRpdGluZ0NlbGwgPSBudWxsO1xuICAgIH1cbiAgfVxuICBzZXROdW1lcmljTWluRnJhY3Rpb24oY29sdW1uOiBhbnkpIHtcbiAgICBsZXQgbWluRnJhY3Rpb25EaWdpdHMgPSAyO1xuICAgIGlmIChjb2x1bW4/LmZvcm1hdD8udHlwZSA9PT0gJ3BlcmNlbnQnICYmICFjb2x1bW4/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5taW5GcmFjdGlvbkRpZ2l0cyAmJiAhY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbykge1xuICAgICAgbWluRnJhY3Rpb25EaWdpdHMgPSAwO1xuICAgIH0gZWxzZSBpZiAoY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8ubWluRnJhY3Rpb25EaWdpdHMgIT0gbnVsbCkge1xuICAgICAgbWluRnJhY3Rpb25EaWdpdHMgPSBjb2x1bW4uZm9ybWF0LmZvcm1hdFBhcmFtcy5taW5GcmFjdGlvbkRpZ2l0cztcbiAgICB9IGVsc2UgaWYgKGNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm8pIHtcbiAgICAgIG1pbkZyYWN0aW9uRGlnaXRzID0gTnVtYmVyKGNvbHVtbi5mb3JtYXQuZm9ybWF0UGFyYW1zLmRpZ2l0c0luZm8pO1xuICAgIH1cbiAgICByZXR1cm4gbWluRnJhY3Rpb25EaWdpdHM7XG4gIH1cblxuICBzZXROdW1lcmljTWF4RnJhY3Rpb24oY29sdW1uOiBhbnkpIHtcbiAgICBsZXQgbWF4RnJhY3Rpb25EaWdpdHMgPSAyO1xuICAgIGlmIChjb2x1bW4/LmZvcm1hdD8udHlwZSA9PT0gJ3BlcmNlbnQnICYmICFjb2x1bW4/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5tYXhGcmFjdGlvbkRpZ2l0cyAmJiAhY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbykge1xuICAgICAgbWF4RnJhY3Rpb25EaWdpdHMgPSAwO1xuICAgIH0gZWxzZSBpZiAoY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8ubWF4RnJhY3Rpb25EaWdpdHMgIT0gbnVsbCkge1xuICAgICAgbWF4RnJhY3Rpb25EaWdpdHMgPSBjb2x1bW4uZm9ybWF0LmZvcm1hdFBhcmFtcy5tYXhGcmFjdGlvbkRpZ2l0cztcbiAgICB9IGVsc2UgaWYgKGNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm8pIHtcbiAgICAgIG1heEZyYWN0aW9uRGlnaXRzID0gTnVtYmVyKGNvbHVtbi5mb3JtYXQuZm9ybWF0UGFyYW1zLmRpZ2l0c0luZm8pO1xuICAgIH1cbiAgICByZXR1cm4gbWF4RnJhY3Rpb25EaWdpdHM7XG4gIH1cblxuICAvLyBzZXQgdGhlIGZvcm1hdCBvZiBjdXJyZW5jeSAmJiBudW1iZXIgJiYgZGVjaW1hbCAmJiBwZXJjZW50XG4gIHNldE51bWVyaWNGb3JtYXQoY29sdW1uOiBhbnksIHJvdzogYW55KSB7XG4gICAgcm93ID0gb2JqQ29udmVydFRvTG93ZXIocm93KTtcbiAgICBsZXQgdmFsdWU6IGFueSA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxuICAgICAgPyByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHRcbiAgICAgIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKVxuICAgICAgICA/IHJvd1tyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXVxuICAgICAgICA6IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXVxuICAgICAgICAgID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICA6IChyb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8udGV4dCB8fCByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8udGV4dCA9PT0gMCB8fCByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8udGV4dCA9PT0gbnVsbClcbiAgICAgICAgICAgID8gcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/LnRleHQgOiByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXTtcbiAgICBpZiAodGhpcy50eXBlT2YodmFsdWUpID09PSAnbnVtYmVyJyAmJiB2YWx1ZSA9PT0gMCkge1xuICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgIH1cbiAgICBsZXQgZm9ybWF0UGFyYW1zID0gY29sdW1uLmZvcm1hdD8uZm9ybWF0UGFyYW1zO1xuICAgIGlmIChjb2x1bW4uZm9ybWF0ICYmIHZhbHVlICE9IG51bGwpIHtcbiAgICAgIHN3aXRjaCAoY29sdW1uLmZvcm1hdD8udHlwZSkge1xuICAgICAgICBjYXNlIEVHcmlkRm9ybWF0VHlwZS5DVVJSRU5DWTpcbiAgICAgICAgICB2YWx1ZSA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChcbiAgICAgICAgICAgIGZvcm1hdFBhcmFtcz8ubG9jYWxlID8gZm9ybWF0UGFyYW1zLmxvY2FsZSA6ICdlbi1VUycsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN0eWxlOiAnY3VycmVuY3knLFxuICAgICAgICAgICAgICBjdXJyZW5jeTogZm9ybWF0UGFyYW1zPy5jdXJyZW5jeSA/IGZvcm1hdFBhcmFtcy5jdXJyZW5jeSA6ICdVU0QnLFxuICAgICAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IHRoaXMuc2V0TnVtZXJpY01pbkZyYWN0aW9uKGNvbHVtbiksXG4gICAgICAgICAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0czogdGhpcy5zZXROdW1lcmljTWF4RnJhY3Rpb24oY29sdW1uKSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApPy5mb3JtYXQodmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVHcmlkRm9ybWF0VHlwZS5ERUNJTUFMOlxuICAgICAgICAgIHZhbHVlID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KFxuICAgICAgICAgICAgZm9ybWF0UGFyYW1zPy5sb2NhbGUgPyBmb3JtYXRQYXJhbXMubG9jYWxlIDogJ2VuLVVTJyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3R5bGU6ICdkZWNpbWFsJyxcbiAgICAgICAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiB0aGlzLnNldE51bWVyaWNNaW5GcmFjdGlvbihjb2x1bW4pLFxuICAgICAgICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IHRoaXMuc2V0TnVtZXJpY01heEZyYWN0aW9uKGNvbHVtbiksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKT8uZm9ybWF0KHZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuUEVSQ0VOVDpcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlICsgJyUnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvL0NoYW5nZSBkcm9wZG93biB2bHVlIGJhc2VkIG9uIG9wdGlvbiBsYWJlbCBhbmQgb3B0aW9udmFsdWVcbiAgc2V0RHJvcGRvd25WYWx1ZShjb2x1bW46IElHcmlkQ29sdW1uLCBzZWxlY3RlZFJvdz86IGFueSwgY2hhbmdlPzogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLnJvd3NEYXRhICYmIHRoaXMucm93c0RhdGEubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHJvdyk/LmZpbmQoKGtleSkgPT4ga2V5ID09PSBjb2x1bW4uZmllbGQpKSB7XG4gICAgICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAgICAgY29sdW1uLm9wdGlvbkxhYmVsID0gY29sdW1uLm9wdGlvbkxhYmVsXG4gICAgICAgICAgICAgID8gY29sdW1uLm9wdGlvbkxhYmVsXG4gICAgICAgICAgICAgIDogJ2xhYmVsJztcbiAgICAgICAgICAgIGNvbHVtbi5vcHRpb25WYWx1ZSA9IGNvbHVtbi5vcHRpb25WYWx1ZVxuICAgICAgICAgICAgICA/IGNvbHVtbi5vcHRpb25WYWx1ZVxuICAgICAgICAgICAgICA6ICd2YWx1ZSc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHZhbHVlID0gY29sdW1uLmRhdGE/LmZpbmQoXG4gICAgICAgICAgICAocmVjb3JkOiBhbnkpID0+XG4gICAgICAgICAgICAgIHJlY29yZFtjb2x1bW4ub3B0aW9uVmFsdWVdPy50b1N0cmluZygpID09PVxuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXT8udG9TdHJpbmcoKVxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgZWRpdGVkUm93ID0gc2VsZWN0ZWRSb3cgJiYgT2JqZWN0LmtleXMoc2VsZWN0ZWRSb3cpLmxlbmd0aCA+IDAgPyBzZWxlY3RlZFJvd1t0aGlzLmRhdGFLZXldID09PSByb3dbdGhpcy5kYXRhS2V5XSA6IGZhbHNlO1xuICAgICAgICAgIGlmICh2YWx1ZSAmJiBlZGl0ZWRSb3cpIHtcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gdmFsdWVbY29sdW1uLm9wdGlvblZhbHVlXTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlICYmIGNoYW5nZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gdmFsdWVbY29sdW1uLm9wdGlvbkxhYmVsXTtcbiAgICAgICAgICAgIGlmIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSkge1xuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXVsnb3B0aW9uVmFsdWUnXSA9IHZhbHVlW2NvbHVtbi5vcHRpb25WYWx1ZV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSA9IHsgb3B0aW9uVmFsdWU6IHZhbHVlW2NvbHVtbi5vcHRpb25WYWx1ZV0gfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vbWFuaXB1bGF0ZSBjaGVja2JveCBzdHJpbmcgdmFsdWUgdG8gdHJ1ZSBhbmQgZmFsc2UuXG4gIGNoYW5nZUNoZWNrYm94U3RyaW5nVmFsdWUoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5jb2x1bW5zICYmXG4gICAgICB0aGlzLnJvd3NEYXRhICYmXG4gICAgICB0aGlzLnJvd3NEYXRhLmxlbmd0aCA+IDAgJiZcbiAgICAgIHRoaXMuY29sdW1ucy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04gJiYgdGhpcy5zZXREcm9wZG93bmRhdGFWYWx1ZSkge1xuICAgICAgICAgIHRoaXMuc2V0RHJvcGRvd25WYWx1ZShjb2x1bW4sIHt9LCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4pIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKHR5cGVvZiAocm93W2NvbHVtbi5maWVsZF0gPT09ICdzdHJpbmcnKSAmJlxuICAgICAgICAgICAgICAgIChyb3dbY29sdW1uLmZpZWxkXSA9PT0gJzEnIHx8IHJvd1tjb2x1bW4uZmllbGRdID09PSAnMCcpKSB8fFxuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9PT0gJ1knIHx8XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID09PSAnTidcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9XG4gICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPT09ICcxJyB8fCByb3dbY29sdW1uLmZpZWxkXSA9PT0gJ1knXG4gICAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICAgIDogZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcm93RGF0YVxuICAgKiBQYXNzZXMgZGF0YSBvZiBjbGlja2VkIHJvdyB0byBwYXJlbnRcbiAgICovXG4gIGhhbmRsZVJvd0NsaWNrKHJvd0RhdGE6IGFueSkge1xuICAgIHRoaXMucm93Q2xpY2tEYXRhID0gcm93RGF0YTtcbiAgICBpZiAoIXRoaXMuZWRpdEFsbFJvd3MpIHtcbiAgICAgIHRoaXMub25Sb3dDbGljay5lbWl0KHJvd0RhdGEpO1xuICAgICAgdGhpcy5zZWxlY3RlZFJvd1JlY29yZCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvLyBpbnZva2Ugb25Sb3dDbGljayBldmVudCB3aGVuIG9ubHkgb25lIHJlY29yZCBleGlzdDtcbiAgZGVmYXVsdFJvd0NsaWNrKCkge1xuICAgIGxldCBkaWFsb2dFeGlzdDogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncC1kaWFsb2cnKTtcbiAgICBpZiAodGhpcy5jb2x1bW5zPy5sZW5ndGggPiAwICYmIHRoaXMucm93c0RhdGEgJiYgdGhpcy5yb3dzRGF0YS5sZW5ndGggPT09IDEgJiYgdGhpcy5vblJvd0NsaWNrLm9ic2VydmVycz8ubGVuZ3RoICYmIHRoaXMuZ3JpZFNlcnZpY2UudXNlclNlYXJjaGVkICYmIGRpYWxvZ0V4aXN0Lmxlbmd0aCkge1xuICAgICAgdGhpcy5ncmlkU2VydmljZS51c2VyU2VhcmNoZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlLnBpcGUodGFrZSgzKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVSb3dDbGljayh0aGlzLnJvd3NEYXRhWzBdKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gY29sdW1uRGF0YVxuICAgKiBQYXNzZXMgc29ydGluZyBpbmZvcm1hdGlvbiB0byBwYXJlbnQgb24gc29ydCBjaGFuZ2VcbiAgICovXG4gIGhhbmRsZVNvcnRDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIGxldCBzb3J0RGlyZWN0aW9uID0gbnVsbDtcbiAgICBsZXQgc29ydEZpZWxkOiBzdHJpbmcgPSAnJztcbiAgICBpZiAoZXZlbnQubXVsdGlzb3J0bWV0YSAmJiBldmVudC5tdWx0aXNvcnRtZXRhWzBdLm9yZGVyICE9IG51bGwpIHtcbiAgICAgIHNvcnREaXJlY3Rpb24gPVxuICAgICAgICBldmVudC5tdWx0aXNvcnRtZXRhWzBdLm9yZGVyID09IDFcbiAgICAgICAgICA/IEVHcmlkU29ydERpcmVjdGlvbi5BU0NcbiAgICAgICAgICA6IEVHcmlkU29ydERpcmVjdGlvbi5ERVNDO1xuICAgICAgc29ydEZpZWxkID0gZXZlbnQubXVsdGlzb3J0bWV0YVswXS5maWVsZDtcbiAgICB9XG4gICAgbGV0IHNvcnRzOiBJR3JpZFNvcnQgPSB7XG4gICAgICBmaWVsZDogc29ydEZpZWxkLFxuICAgICAgZGlyZWN0aW9uOiBzb3J0RGlyZWN0aW9uIGFzIEVHcmlkU29ydERpcmVjdGlvbixcbiAgICAgIHByaW9yaXR5OiAwLFxuICAgIH07XG5cbiAgICBpZiAoIXRoaXMucGFnaW5hdGlvbiB8fCAodGhpcy5wYWdpbmF0aW9uICYmICF0aGlzLmVkaXRBbGxSb3dzKSkge1xuICAgICAgdGhpcy5zb3J0RGF0YSA9IHNvcnRzO1xuICAgICAgdGhpcy5oYW5kbGVDdXN0b21Tb3J0aW5nKCk7XG4gICAgfVxuICAgIHRoaXMub25Tb3J0Q2hhbmdlLmVtaXQoc29ydHMpO1xuICB9XG5cbiAgc2hvdWxkUnVuU2VydmVyU2lkZShldmVudDogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKChldmVudC5zb3J0RmllbGQgJiYgISh0aGlzLnBhZ2luYXRpb24gJiYgdGhpcy5lZGl0QWxsUm93cykgJiYgIXRoaXMuUGFnZUNoYW5nZSkgfHwgKGV2ZW50Lm11bHRpU29ydE1ldGEgJiYgZXZlbnQubXVsdGlTb3J0TWV0YS5sZW5ndGggJiYgISh0aGlzLnBhZ2luYXRpb24gJiYgdGhpcy5lZGl0QWxsUm93cykgJiYgIXRoaXMuUGFnZUNoYW5nZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoKGV2ZW50LnNvcnRGaWVsZCAmJiAodGhpcy5wYWdpbmF0aW9uICYmICF0aGlzLmVkaXRBbGxSb3dzKSAmJiB0aGlzLlBhZ2VDaGFuZ2UpIHx8IChldmVudC5tdWx0aVNvcnRNZXRhICYmIGV2ZW50Lm11bHRpU29ydE1ldGEubGVuZ3RoICYmICh0aGlzLnBhZ2luYXRpb24gJiYgIXRoaXMuZWRpdEFsbFJvd3MpICYmIHRoaXMuUGFnZUNoYW5nZSkpIHtcbiAgICAgIHRoaXMuaGFuZGxlU2VydmVyU2lkZUV2ZW50cyhldmVudCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXV0b0xvYWREYXRhICYmIHRoaXMudXNlU2VydmVyU2lkZUV2ZW50cztcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICogUGFzc2VzIGFwcGxpZWQgZmlsdGVycyB0byBwYXJlbnQgb24gZmlsdGVyIGNoYW5nZVxuICAgKi9cbiAgaGFuZGxlRmlsdGVyQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoZmlsdGVyOiBhbnkpID0+IHtcbiAgICAgIGlmICghZXZlbnQuZmlsdGVyc1tmaWx0ZXIuZmllbGRdPy52YWx1ZSAmJiAhZmlsdGVyLnZhbHVlKSB7XG4gICAgICAgIGZpbHRlci52YWx1ZSA9ICcnO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMub25GaWx0ZXJDaGFuZ2UuZW1pdChldmVudCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IDogRXZlbnRcbiAgICogQHBhcmFtIGNvbHVtbkFjdGlvbiA6IElHcmlkQ29sdW1uQWN0aW9uXG4gICAqIEBwYXJhbSByb3cgOiBhbnlcbiAgICogU3RvcCB0aGUgY2xpY2sgZXZlbnQgcHJvcGFnYXRpb24gdG8gcGFyZW50XG4gICAqIENhbGxiYWNrcyB0aGUgcm93IGRhdGEgdG8gcGFyZW50XG4gICAqL1xuXG4gIC8qKlxuICAgKiBpbnZva2Ugb25DbGljayBldmVudCAmIG9wZW4gSWZyYW1lIGluIGdyaWRcbiAgICovXG4gIGdyaWRJRnJhbWUoY29sdW1uOiBhbnksIHJvd3M6IGFueSwgcm93OiBhbnkpIHtcbiAgICB0aGlzLm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdyk7XG4gICAgY29uc3QgcmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oSWZyYW1lQ29tcG9uZW50LCB7XG4gICAgICBoZWFkZXI6IGNvbHVtbi5oZWFkZXIsXG4gICAgICB3aWR0aDogJzgwJScsXG4gICAgICBoZWlnaHQ6ICc4MCUnLFxuICAgICAgY2xvc2FibGU6IHRydWUsXG4gICAgICBmb2N1c09uU2hvdzogZmFsc2UsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHZhbHVlOiByb3dzLFxuICAgICAgICBpRnJhbWVJZDogY29sdW1uLmRpc3BsYXlUZXh0ID8gY29sdW1uLmRpc3BsYXlUZXh0IDogY29sdW1uLmZpZWxkLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLnNldER5bmFtaWNEaWFsb2dSZWYocmVmKTtcbiAgICBjb25zdCBjb21wb25lbnROYW1lID0gY29sdW1uLmNvbXBvbmVudD8ubmFtZTtcbiAgICBpZiAoY29tcG9uZW50TmFtZSkge1xuICAgICAgdGhpcy5wYWdlTG9nZ2VyU2VydmljZS5zYXZlUGFnZUxvZ2dlckluZm8odGhpcy5yb3V0ZXIudXJsPy5zdWJzdHJpbmcoMSksIGNvbXBvbmVudE5hbWUpO1xuICAgIH1cbiAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgLnBpcGUodGFrZSgxKSkgLy8gRW1pdCBvbmx5IG9uY2Ugd2hlbiB0aGUgem9uZSBiZWNvbWVzIHN0YWJsZVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGRyYWdnYWJsZURpYWxvZyhjb2x1bW4/LmZpZWxkID8gY29sdW1uPy5maWVsZCA6IGNvbHVtbj8uaGVhZGVyKVxuICAgICAgfSk7XG4gICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgIGlmIChyZXMgJiYgY29sdW1uLm9uUmV0dXJuKSB7XG4gICAgICAgIGNvbHVtbi5vblJldHVybihyZXMpO1xuICAgICAgfSBlbHNlIGlmIChyZXMgJiYgY29sdW1uLm9uQ2hhbmdlKSB7XG4gICAgICAgIGNvbHVtbi5vbkNoYW5nZShyZXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYWRkTmV3Um93KHJvdzogYW55LCBhZGRSb3c6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHRoaXMucmVmcmVzaEdyaWRUZXJtaW5hdG9yKCk7XG4gICAgdGhpcy5jb21wb25lbnRUYWJsZVJlZiA9IHRoaXMudGFibGU7XG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goY29sID0+IHtcbiAgICAgIGlmIChjb2wuZmlsdGVyPy50eXBlID09PSAnY2FsZW5kYXInICYmIGNvbC5jb21wb25lbnQpIHtcbiAgICAgICAgKGFkZFJvdyA/IHRoaXMucm93c0RhdGFbMF0gOiByb3cpW2NvbC5maWVsZCArICdfc2Vjb25kVHlwZSddID0gRUdyaWRDb2x1bW5UeXBlLkRBVEU7XG4gICAgICB9XG4gICAgICBpZiAoY29sLmFnZ3JlZ2F0ZT8ubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuYWdncmVnYXRlRm9vdGVyID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZXRBZ2dyZWdhdGVUZXh0KGNvbCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5zZWxlY3Rpb25UeXBlID09PSBFR3JpZFNlbGVjdGlvblR5cGUuTVVMVElQTEUgJiYgdGhpcy5hdXRvQ2hlY2tOZXdSb3cpIHtcbiAgICAgIGNvbnN0IGFkZGVkUm93ID0gdGhpcy5yb3dzRGF0YSAmJiB0aGlzLnJvd3NEYXRhWzBdO1xuICAgICAgaWYgKGFkZGVkUm93ICYmICFhZGRlZFJvdy5faXNFZGl0ZWQpIHtcbiAgICAgICAgYWRkZWRSb3cuX2lzRWRpdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5zZWxlY3RlZFJvd3MpIHRoaXMuc2VsZWN0ZWRSb3dzID0gW107XG5cbiAgICAgIGlmIChhZGRlZFJvdyAmJiAhdGhpcy5zZWxlY3RlZFJvd3Muc29tZShyID0+IHJbdGhpcy5kYXRhS2V5XSA9PT0gYWRkZWRSb3dbdGhpcy5kYXRhS2V5XSkpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MgPSBbLi4udGhpcy5zZWxlY3RlZFJvd3MsIGFkZGVkUm93XTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2hlY2tsaXN0ID0gWy4uLnRoaXMuc2VsZWN0ZWRSb3dzXTtcbiAgICAgIHRoaXMucm93Q2xpY2tEYXRhID0gYWRkZWRSb3c7XG4gICAgICB0aGlzLmFkZE5ld1Jvd0NoZWNrID0gdHJ1ZTtcbiAgICAgIHRoaXMuZHJvcGRvd25JbnB1dCA9IGZhbHNlO1xuICAgICAgdGhpcy5zb3J0RGlzYWJsZWQgPSB0cnVlO1xuICAgICAgdGhpcy5vbk11bHRpU2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpXG4gICAgICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgICAgIHRoaXMub25HcmlkUm93QWRkLmVtaXQoYWRkZWRSb3cpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm93Q2xpY2tEYXRhID0gcm93O1xuICAgICAgdGhpcy5hZGROZXdSb3dDaGVjayA9IHRydWU7XG4gICAgICB0aGlzLmRyb3Bkb3duSW5wdXQgPSBmYWxzZTtcbiAgICAgIHRoaXMuc29ydERpc2FibGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICAgICAgdGhpcy5vbkdyaWRSb3dBZGQuZW1pdChyb3cpO1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqIG9wZW4gRGlhbG9nIGluIGdyaWRcbiAgICovXG4gIG9wZW5HcmlkRGlhbG9nKGNvbHVtbjogSUdyaWRDb2x1bW4gfCBhbnksIHJvdzogYW55LCBldmVudD86IGFueSkge1xuICAgIGNvbnN0IGRhdGFQYXJhbXMgPSBjb2x1bW4uZGF0YT8uZGF0YSA/IGNvbHVtbi5kYXRhPy5kYXRhIDoge307XG4gICAgaWYgKChldmVudCAmJiBldmVudC5jdHJsS2V5KSB8fCBjb2x1bW4ub3BlbkluTmV3VGFiKSB7XG4gICAgICB0aGlzLmh5cGVybGlua1NlcnZpY2Uub3BlbkRpYWxvZ0luTmV3VGFiKGNvbHVtbi5jb21wb25lbnQsIGRhdGFQYXJhbXMsIHJvdyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5vcGVuQ29tcG9uZW50SW5EaWFsb2coY29sdW1uLCByb3cpO1xuICAgIH1cbiAgfVxuXG4gIG9wZW5Db21wb25lbnRJbkRpYWxvZyhjb2x1bW46IElHcmlkQ29sdW1uIHwgYW55LCByb3c6IGFueSkge1xuICAgIHZhciBpc0Rpc2FibGVkID0gY29sdW1uLmRpc2FibGVkXG4gICAgICA/IHRydWVcbiAgICAgIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc2FibGVkXG4gICAgICAgID8gdHJ1ZVxuICAgICAgICA6IGZhbHNlO1xuICAgIHRoaXMub25DbGlja0V2ZW50KGNvbHVtbiwgcm93KTtcbiAgICBsZXQgZGF0YTogYW55ID0ge307XG4gICAgZGF0YSA9IHsgLi4uY29sdW1uPy5kYXRhIH07XG4gICAgdGhpcy5yb3dDbGlja0RhdGEgPSByb3c7XG4gICAgaWYgKGRhdGEgJiYgZGF0YS5kYXRhICYmIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddICYmIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5tYXRjaERhdGEpIHtcbiAgICAgIGRhdGEuZGF0YSA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaWFsb2dEYXRhPy5kYXRhID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpYWxvZ0RhdGEuZGF0YSA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaWFsb2dEYXRhO1xuICAgIH1cblxuICAgIGlmIChjb2x1bW4uY29tcG9uZW50ICYmIHRoaXMucm93Q2xpY2tEYXRhICYmICFpc0Rpc2FibGVkKSB7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBkYXRhLmRhdGEgPSBhdXRvU2V0TG9va3VwRGF0YShcbiAgICAgICAgICBkYXRhLmRhdGEsXG4gICAgICAgICAgdGhpcy5yb3dDbGlja0RhdGFcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGRhdGEgPSB7IC4uLmRhdGEsIGhlaWdodDogZGF0YS5oZWlnaHQgPyBkYXRhLmhlaWdodCA6ICc5MHZoJywgY2xvc2FibGU6IHRydWUsIGZvY3VzT25TaG93OiBmYWxzZSB9XG4gICAgICBjb25zdCBvYmpGaWVsZCA9IGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArIFwiX29ialwiO1xuICAgICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3Blbihyb3dbb2JqRmllbGRdICYmIHJvd1tvYmpGaWVsZF0/LmNvbXBvbmVudCA/IHJvd1tvYmpGaWVsZF0/LmNvbXBvbmVudCA6IGNvbHVtbi5jb21wb25lbnQsIGRhdGEpO1xuXG4gICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGlhbG9nUmVmWydkaWFsb2dDbG9zZSddID0gdGhpcy5kaWFsb2dSZWYuY2xvc2U7XG4gICAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UgPSB0aGlzLmludGVyY2VwdERpYWxvZ0Nsb3NlLmJpbmQodGhpcywgdGhpcy5kaWFsb2dSZWYpO1xuICAgICAgICB9KTtcblxuICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyAgIHRoaXMuZGlhbG9nUmVmWydkaWFsb2dDbG9zZSddID0gdGhpcy5kaWFsb2dSZWYuY2xvc2U7XG4gICAgICAvLyAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlID0gdGhpcy5pbnRlcmNlcHREaWFsb2dDbG9zZS5iaW5kKHRoaXMpO1xuICAgICAgLy8gfSwgODAwKTtcblxuICAgICAgdGhpcy5zZXREeW5hbWljRGlhbG9nUmVmKHRoaXMuZGlhbG9nUmVmKTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBjb2x1bW4uY29tcG9uZW50Py5uYW1lO1xuICAgICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgICAgdGhpcy5wYWdlTG9nZ2VyU2VydmljZS5zYXZlUGFnZUxvZ2dlckluZm8odGhpcy5yb3V0ZXIudXJsPy5zdWJzdHJpbmcoMSksIGNvbXBvbmVudE5hbWUpO1xuICAgICAgfVxuICAgICAgaWYgKGNvbHVtbi5kcmFnZ2FibGUgfHwgY29sdW1uLmRyYWdnYWJsZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBkcmFnZ2FibGVEaWFsb2coY29sdW1uPy5maWVsZCA/IGNvbHVtbj8uZmllbGQgOiBjb2x1bW4/LmhlYWRlcilcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGlhbG9nUmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGRhdGEgJiYgY29sdW1uLm9uUmV0dXJuKSB7XG4gICAgICAgICAgY29sdW1uLm9uUmV0dXJuKGRhdGEsIHRoaXMucm93Q2xpY2tEYXRhKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhKSB7XG4gICAgICAgICAgdGhpcy5icm93c2VyQ2xvc2VFdmVudCh0cnVlKTtcbiAgICAgICAgICBpZiAoY29sdW1uLm9uQ2hhbmdlKSB7XG4gICAgICAgICAgICBjb2x1bW4ub25DaGFuZ2UoZGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBicm93c2VyQ2xvc2VFdmVudChldmVudDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgdGhpcy5ncmlkU2VydmljZS5jb2x1bW5Gb2N1c2VkT3V0ID0gZXZlbnQ7XG4gIH1cblxuICBzZXRNdWx0aVNlbGVjdERhdGEoY29sdW1uOiBJR3JpZENvbHVtbiwgc2VsZWN0ZWRWYWx1ZTogYW55KSB7XG4gICAgaWYgKHNlbGVjdGVkVmFsdWUgJiYgY29sdW1uLnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLk1VTFRJU0VMRUNUKSB7XG4gICAgICBpZiAoc2VsZWN0ZWRWYWx1ZSAmJiBzZWxlY3RlZFZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnLCcpKSB7XG4gICAgICAgIHNlbGVjdGVkVmFsdWUgPSBzZWxlY3RlZFZhbHVlPy50b1N0cmluZygpPy5zcGxpdCgnLCcpPy5tYXAoKHZhbHVlKSA9PiBjb2x1bW4uZGF0YT8uZmluZCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWU/LnRvU3RyaW5nKCkgPT09IHZhbHVlPy50b1N0cmluZygpKT8ubGFiZWwpPy50b1N0cmluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZWN0ZWRWYWx1ZSA9IGNvbHVtbi5kYXRhPy5maW5kKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZT8udG9TdHJpbmcoKSA9PT0gc2VsZWN0ZWRWYWx1ZT8udG9TdHJpbmcoKSk/LmxhYmVsO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2VsZWN0ZWRWYWx1ZTtcbiAgfVxuICBhdXRvR3JvdyhldmVudDogRXZlbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50KSB7XG4gICAgY29uc3QgdGV4dGFyZWEgPSBldmVudCBpbnN0YW5jZW9mIEV2ZW50ID8gZXZlbnQudGFyZ2V0IGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQgOiBldmVudDtcbiAgICBpZiAodGV4dGFyZWEpIHtcbiAgICAgIHRleHRhcmVhLnN0eWxlLmhlaWdodCA9ICdhdXRvJztcbiAgICAgIHRleHRhcmVhLnN0eWxlLmhlaWdodCA9IHRleHRhcmVhLnNjcm9sbEhlaWdodCArICdweCc7XG4gICAgfVxuICB9XG5cblxuICBzZXRUZXh0Qm94UmVhZE9ubHlWYWx1ZShyb3c6IGFueSwgY29sdW1uOiBhbnkpIHtcbiAgICBsZXQgdmFsdWU6IGFueTtcbiAgICBpZiAoY29sdW1uLmRpc3BsYXlUZXh0KSB7XG4gICAgICB2YWx1ZSA9IGNvbHVtbi5kaXNwbGF5VGV4dDtcbiAgICB9IGVsc2UgaWYgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dCkge1xuICAgICAgdmFsdWUgPSByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHQ7XG4gICAgfSBlbHNlIGlmIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkKSB7XG4gICAgICB2YWx1ZSA9IHJvd1tyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXTtcbiAgICB9IGVsc2UgaWYgKGNvbHVtbi5kaXNwbGF5RmllbGQpIHtcbiAgICAgIHZhbHVlID0gcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogcmV0dXJuIGNvbmRpdGlvbmFsIGJhc2UgdmFsdWUgYW5kIHRpdGxlXG4gICAqL1xuICBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgZGVsZXRlIHJvd1sndW5kZWZpbmVkJ107XG4gICAgbGV0IHZhbHVlOiBhbnk7XG4gICAgaWYgKGNvbHVtbi50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5EQVRFKSB7XG4gICAgICBsZXQgbmV3VmFsdWU6IGFueTtcbiAgICAgIGlmICh0eXBlb2YgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddKSA9PT0gXCJvYmplY3RcIiAmJiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSkge1xuICAgICAgICBuZXdWYWx1ZSA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxuICAgICAgICAgID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlUZXh0XG4gICAgICAgICAgOiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICA/IHJvd1tyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXVxuICAgICAgICAgICAgOiByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8udGV4dFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3VmFsdWUgPSByb3dbY29sdW1uLmZpZWxkXTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmIChjb2x1bW4udGltZU9ubHkpIHtcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMuc2V0VGltZUZvcm1hdChuZXdWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IGZvcm1hdCA9IHRoaXMuc2V0Rm9ybWF0KGNvbHVtbik7XG4gICAgICAgICAgdmFsdWUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShuZXdWYWx1ZT8udG9TdHJpbmcoKSA9PT0gXCJJbnZhbGlkIERhdGVcIiA/IG51bGwgOiBuZXdWYWx1ZSwgZm9ybWF0ID8gZm9ybWF0IDogY29sdW1uLnNob3dUaW1lID8gXCJNTS9kZC9ZWVlZLCBoOm1tIGFcIiA6IFwiTU0vZGQveXl5eVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9XG4gICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxuICAgICAgICAgID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmZvcm1hdCA/IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0LCB0aGlzLnNldEZvcm1hdChjb2x1bW4pKSA6XG4gICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHRcbiAgICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgID8gcm93W3Jvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldICE9IHVuZGVmaW5lZCA/IHJvd1tyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkXSA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGRcbiAgICAgICAgICAgIDogcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgICAgID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgICAgIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gJiZcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dCA9PT0gbnVsbCAmJiBjb2x1bW4udHlwZSAhPT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPR1xuICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgY29sdW1uPy5maWx0ZXI/LnR5cGUgPT09ICdjYWxlbmRhcicgJiYgY29sdW1uLnRpbWVPbmx5ICYmIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRElBTE9HID9cbiAgICAgICAgICAgICAgICAgICAgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ0FNJykgfHwgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQudG9TdHJpbmcoKS5pbmNsdWRlcygnUE0nKSkgP1xuICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0IDogdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQsICdoaDptbSBhJylcbiAgICAgICAgICAgICAgICAgICAgOiBjb2x1bW4uZm9ybWF0ID8gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQsIHRoaXMuc2V0Rm9ybWF0KGNvbHVtbikpIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICAgIDogY29sdW1uLmZvcm1hdCA/IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJvd1tjb2x1bW4uZmllbGRdLCB0aGlzLnNldEZvcm1hdChjb2x1bW4pKVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgICAgID8gY29sdW1uLmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgOiBjb2x1bW4uaWNvbiA/IGNvbHVtbi5oZWFkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBzZXRGb3JtYXQoY29sdW1uKSB7XG4gICAgbGV0IGZvcm1hdCA9ICcnO1xuICAgIGlmIChjb2x1bW4/LmZvcm1hdCkge1xuICAgICAgY29sdW1uLmZvcm1hdCA9IGNvbHVtbi5mb3JtYXQ/LnR5cGUgPyBjb2x1bW4uZm9ybWF0LnR5cGUgOiBjb2x1bW4uZm9ybWF0O1xuICAgICAgc3dpdGNoIChjb2x1bW4uZm9ybWF0KSB7XG4gICAgICAgIGNhc2UgRUdyaWRGb3JtYXRUeXBlLlNNQUxMREFURToge1xuICAgICAgICAgIGZvcm1hdCA9ICdNTS9kZC95eSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuU0hPUlREQVRFOiB7XG4gICAgICAgICAgZm9ybWF0ID0gJ01NL2RkL3l5eXknO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgRUdyaWRGb3JtYXRUeXBlLk1FRElVTURBVEU6IHtcbiAgICAgICAgICBmb3JtYXQgPSAnTSBkLCB5eSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuTE9OR0RBVEU6IHtcbiAgICAgICAgICBmb3JtYXQgPSAnTU0vZGQveXksIGg6bW0gYSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuUEVSSU9EOiB7XG4gICAgICAgICAgZm9ybWF0ID0gJ01NL3l5JztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgZm9ybWF0ID0gY29sdW1uLmZvcm1hdDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZm9ybWF0XG4gIH1cblxuICBzZXREcm9wZHdvblJlYWRPbmx5VmFsdWUocm93OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgZGVsZXRlIHJvd1sndW5kZWZpbmVkJ107XG4gICAgY29uc3QgdmFsdWUgPSByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF1cbiAgICAgID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdXG4gICAgICA6IGNvbHVtbi5kYXRhPy5maW5kKGRyb3Bkb3duVmFsID0+IGRyb3Bkb3duVmFsPy52YWx1ZSA9PSByb3dbY29sdW1uLmZpZWxkXSlcbiAgICAgICAgPyBjb2x1bW4uZGF0YT8uZmluZChkcm9wZG93blZhbCA9PiBkcm9wZG93blZhbD8udmFsdWUgPT0gcm93W2NvbHVtbi5maWVsZF0pPy5sYWJlbFxuICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIG9uUm93UmVvcmRlcihldmVudCkge1xuICAgIHRoaXMub25Sb3dPcmRlckNoYW5nZWQuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBvcGVuIERlbGV0ZSBDb25maXJtYXRpb24gZGlhbG9nIHdoZW4gY2xpY2sgb24gZGVsZXRlIGljb24gaW4gQWN0aW9uIGNvbHVtblxuICAgKi9cbiAgaGFuZGxlQWN0aW9uQ2xpY2soZXZlbnQ6IEV2ZW50LCBjb2x1bW5BY3Rpb246IElHcmlkQ29sdW1uQWN0aW9uLCByb3c6IGFueSkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHZhciBtZXNzYWdlOiBzdHJpbmc7XG4gICAgaWYgKHJvdy5jaGlsZGZvbGRlcmNvdW50ID4gMCkge1xuICAgICAgbWVzc2FnZSA9IGBEZWxldGluZyB0aGlzIGZvbGRlciB3aWxsIGFsc28gZGVsZXRlICR7cm93LmNoaWxkZm9sZGVyY291bnR9IGNoaWxkIGZvbGRlciR7cm93LmNoaWxkZm9sZGVyY291bnQgPiAxID8gJ3MnIDogJyd9IGFsb25nIHdpdGggYWxsIGFzc29jaWF0ZWQgZG9jdW1lbnRzLiBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcHJvY2VlZD9gO1xuICAgIH1cbiAgICBpZiAoY29sdW1uQWN0aW9uLnRvb2x0aXAudG9Mb3dlckNhc2UoKSA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgIGlmIChjb2x1bW5BY3Rpb24uY29uZmlybURpYWxvZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgY29sdW1uQWN0aW9uLm9uQ2xpY2socm93KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlID8/ICdBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyByZWNvcmQ/JyxcbiAgICAgICAgICBoZWFkZXI6ICdEZWxldGUgQ29uZmlybWF0aW9uJyxcbiAgICAgICAgICBpY29uOiAncGkgcGktZXhjbGFtYXRpb24tdHJpYW5nbGUnLFxuICAgICAgICAgIGtleTogJ2hhbmRsZWNvbHVtbkFjdGlvbnMnLFxuICAgICAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICAgICAgY29sdW1uQWN0aW9uLm9uQ2xpY2socm93KTtcbiAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jbG9zZSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVqZWN0OiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY2xvc2UoKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29sdW1uQWN0aW9uLm9uQ2xpY2socm93KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IDogTGF6eUxvYWRFdmVudFxuICAgKiBUcmlnZ2VycyBldmVyeXRpbWUgYSBzZXJ2ZXIgc2lkZSBmaWx0ZXIgaXMgdHJpZ2dlclxuICAgKi9cbiAgaGFuZGxlU2VydmVyU2lkZUV2ZW50cyhldmVudDogYW55LCBkdDogYW55ID0gJycpIHtcbiAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuaXNTZXJ2ZXJTaWRlRXZlbnRJbml0YWxUcmlnZ2VyZWQpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbnM/Lmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldEdyaWRJZCgpO1xuICAgICAgICAgICAgdGhpcy5ncmlkZmlsdGVyID0gZXZlbnQ7XG5cbiAgICAgICAgICAgIGlmIChkdD8uZWw/Lm5hdGl2ZUVsZW1lbnQ/LmlkKSB7XG4gICAgICAgICAgICAgIHRoaXMuZ3JpZElkID0gZHQuZWwubmF0aXZlRWxlbWVudC5pZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zICYmIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuZm9yRWFjaCgoeDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50Py5maWx0ZXJzW3guZmllbGRdKSB7XG4gICAgICAgICAgICAgICAgICBldmVudC5maWx0ZXJzW3guZmllbGRdLnZhbHVlID0geC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTVVMVElTRUxFQ1QgPyB4LmZpbHRlclZhbHVlPy50b1N0cmluZygpIDogeC50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQgJiYgeC5oYXNPd25Qcm9wZXJ0eSgnZmlsdGVyVmFsdWVfb2JqJykgPyB4WydmaWx0ZXJWYWx1ZV9vYmonXT8udmFsdWUgOiB4LmZpbHRlclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRoaXMuYXV0b0xvYWREYXRhO1xuICAgICAgICAgICAgdGhpcy5zZXJ2ZXJGaWx0ZXJzID0ge1xuICAgICAgICAgICAgICBmaWx0ZXJzOiB0aGlzLmxvb2t1cEZpbHRlcnNcbiAgICAgICAgICAgICAgICA/IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0R3JpZEZpbHRlcnMoZXZlbnQsIHRoaXMuc2VsZWN0ZWRDb2x1bW5zKVxuICAgICAgICAgICAgICAgIDogdGhpcy5ncmlkU2VydmljZS5wcmVwYXJlQmFzaWNGaWx0ZXJzKGV2ZW50LCB0aGlzLnNlbGVjdGVkQ29sdW1ucyksXG4gICAgICAgICAgICAgIHNvcnRzOiB0aGlzLmdyaWRTZXJ2aWNlLmdldEdyaWRTb3J0cyhldmVudCwgdGhpcy5zZWxlY3RlZENvbHVtbnMpLFxuICAgICAgICAgICAgICAuLi4odGhpcy5wYWdpbmF0aW9uICYmIHtcbiAgICAgICAgICAgICAgICBwYWdlOiB0aGlzLmdyaWRTZXJ2aWNlLmdldEdyaWRQYWdpbmF0aW9uKGV2ZW50KSxcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZTogZXZlbnQucm93cyB8fCAxMCxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHRoaXMuc2VydmVyRmlsdGVycz8uZmlsdGVycyAmJlxuICAgICAgICAgICAgICB0aGlzLnNlcnZlckZpbHRlcnM/LmZpbHRlcnMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAodGhpcy5hbGxvd0NhY2hpbmcgfHwgdGhpcy5zb2Z0Q2FjaGluZylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpZiAoIXRoaXMuc29mdENhY2hpbmcgJiYgdGhpcy50YWJsZT8uaWQpIHtcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnU2V0RmlsdGVycy0nICsgdGhpcy50YWJsZT8uaWQgKyB0aGlzLmN1cnJlbnRVcmwsIEpTT04uc3RyaW5naWZ5KHRoaXMuc2VydmVyRmlsdGVycykpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmxdID0gdGhpcy5zZXJ2ZXJGaWx0ZXJzO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLnNvZnRDYWNoaW5nRmlsdGVyc1t0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHRoaXMuY3VycmVudFVybF0gPSB7fTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc2VydmVyRmlsdGVyVmFsdWVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnNlcnZlckZpbHRlcnMpKTtcbiAgICAgICAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzID0gKHRoaXMuc2VydmVyRmlsdGVycy5maWx0ZXJzIHx8IFtdKS5jb25jYXQodGhpcy5nbG9iYWxEYXRhKTtcblxuICAgICAgICAgICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uucm93VXBkYXRlID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGxldCBjb250YWluc0VtcHR5RmllbGQgPSB0cnVlO1xuICAgICAgICAgICAgd2hpbGUgKGNvbnRhaW5zRW1wdHlGaWVsZCkge1xuICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzLmZpbmRJbmRleCgoZmlsdGVyKSA9PiAhZmlsdGVyLmZpZWxkKTtcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5zRW1wdHlGaWVsZCA9IGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMub25TZXJ2ZXJTaWRlRXZlbnRDaGFuZ2UuZW1pdChzZXJ2ZXJGaWx0ZXJWYWx1ZXMpO1xuICAgICAgICAgICAgdGhpcy5pc1NlcnZlclNpZGVFdmVudEluaXRhbFRyaWdnZXJlZC5uZXh0KCcnKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuXG5cbiAgLy9zZXQgZ3JpZCBpZCBvbiBwYWdlIGxvYWQgZm9yIGxvYWQgY29sdW1uIHdpZHRoc1xuICBzZXRDbGFzc2FBbmRJZChkdDogYW55KSB7XG4gICAgaWYgKGR0Py5lbD8ubmF0aXZlRWxlbWVudD8uaWQpIHtcbiAgICAgIHRoaXMuZ3JpZElkID0gZHQuZWwubmF0aXZlRWxlbWVudC5pZDtcbiAgICB9XG4gICAgaWYgKHRoaXMuaG9yaXpvbnRhbFNjcm9sbCkge1xuICAgICAgcmV0dXJuIHsgJ2hvcml6b250YWwtc2Nyb2xsJzogdHJ1ZSB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7ICdob3Jpem9udGFsLXNjcm9sbCc6IGZhbHNlIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIFBhc3NlcyBhcHBsaWVkIHBhZ2luYXRpb24gdG8gcGFyZW50IG9uIHBhZ2UgY2hhbmdlXG4gICAqL1xuICBoYW5kbGVTZXJ2ZXJTaWRlUGFnaW5hdGlvbihldmVudDogSUdyaWRQYWdpbmF0aW9uRXZlbnQpIHtcbiAgICB0aGlzLmVkaXRpbmdSb3dLZXlzID0ge307XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IGV2ZW50LmZpcnN0O1xuICAgIHRoaXMuUGFnZUNoYW5nZSA9IHRydWU7XG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbiAmJiB0aGlzLnJlbWFpbmluZ1Jvd3NEYXRhPy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnJlbWFpbmluZ1Jvd3NEYXRhID0gW107XG4gICAgfVxuICAgIHRoaXMub25QYWdlQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnVzZVNlcnZlclNpZGVFdmVudHMgJiYgdGhpcy5wYWdpbmF0aW9uICYmIHRoaXMuZGVmYXVsdFJvd3MgJiYgdGhpcy5lZGl0QWxsUm93cyAmJiB0aGlzLnJvd3NEYXRhPy5sZW5ndGggPiAwICYmIHRoaXMuY29sdW1ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuZWRpdEFsbFJvd3NBdE9uY2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBzZWxlY3RlZFJvdyhyb3c6IGFueSkge1xuICAgIHRoaXMub25Sb3dDaGVja0JveC5lbWl0KHJvdyk7XG4gIH1cblxuICAvLyBzZXQgdGltZSBmb3JtYXRcbiAgc2V0VGltZUZvcm1hdChkYXRlOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgZGF0ZSA9PT0gJ251bWJlcicgfHwgKHR5cGVvZiBkYXRlID09PSAnc3RyaW5nJyAmJiAhaXNOYU4oTnVtYmVyKGRhdGUpKSkpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBkYXRlU3RyaW5nID0gZGF0ZT8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBpc1RpbWVJbkFNID0gdGhpcy5jaGVja1RpbWVGb3JtYXQoZGF0ZSwgJ2FtJyk7XG4gICAgY29uc3QgaXNUaW1lSW5QTSA9IHRoaXMuY2hlY2tUaW1lRm9ybWF0KGRhdGUsICdwbScpO1xuICAgIGNvbnN0IGlzVEluY2x1ZGUgPSB0aGlzLmNoZWNrVGltZUZvcm1hdChkYXRlLCAndCcpO1xuXG4gICAgaWYgKChpc1RpbWVJbkFNIHx8IGlzVGltZUluUE0pICYmICghaXNUSW5jbHVkZSkpIHtcbiAgICAgIHJldHVybiBkYXRlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jaGVja1RpbWVGb3JtYXQoZGF0ZSwgJzonKSAmJiAoIWlzVGltZUluQU0gJiYgIWlzVGltZUluUE0gJiYgIWlzVEluY2x1ZGUpKSB7XG4gICAgICBjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gZGF0ZVN0cmluZz8uc3BsaXQoJzonKT8ubWFwKE51bWJlcik7XG4gICAgICBjb25zdCBwZXJpb2QgPSBob3VycyA+PSAxMiA/ICdQTScgOiAnQU0nO1xuICAgICAgY29uc3QgZm9ybWF0dGVkSG91cnMgPSBob3VycyAlIDEyIHx8IDEyO1xuICAgICAgcmV0dXJuIGAke2Zvcm1hdHRlZEhvdXJzfToke1N0cmluZyhtaW51dGVzKS5wYWRTdGFydCgyLCAnMCcpfSAke3BlcmlvZH1gO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRlLCAnaGg6bW0gYScpIHx8ICcnO1xuICB9XG5cbiAgY2hlY2tUaW1lRm9ybWF0KGRhdGUsIGlzSW5jbHVkZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGRhdGU/LnRvU3RyaW5nKCk/LnRvTG93ZXJDYXNlKCk/LmluY2x1ZGVzKGlzSW5jbHVkZSk7XG4gIH1cblxuICAvL29wZW4gaHlwZXJsaW5rIGluIGVkaXQgY2FzZVxuICBvcGVuTGluayh1cmw6IGFueSkge1xuICAgIGlmICh1cmwpIHtcbiAgICAgIGNvbnN0IGxpbms6IGFueSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgIGxpbmsuaHJlZiA9IHVybDtcbiAgICAgIGxpbmsudGFyZ2V0ID0gJ19ibGFuayc7XG4gICAgICBsaW5rLmNsaWNrKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSByb3dcbiAgICogU2V0cyB2YWx1ZXMgdG8gZWRpdGFibGUgcm93XG4gICAqIFJvdydzIGRhdGEgaXMgcHJlc2V2ZWQgdG8gcHJldmVudCBtdXRhdGlvblxuICAgKiBSb3cgZGF0YUtleSBpcyBwcmVzZXJ2ZWQgdG8ga2VlcCB0aGUgcm93IHVuaXF1ZSBhbmQgaW4gZWRpdGFibGUgc3RhdGUgYXMgbG9uZyBhcyBub3Qgc2F2ZWRcbiAgICovXG5cbiAgcmVmcmVzaEdyaWRUZXJtaW5hdG9yKCkge1xuICAgIGlmICh0aGlzLnNldEdyaWRSZWZyZXNoVGltZSkge1xuICAgICAgdGhpcy5yZWxvYWRQYWdlPy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0T3JpZ2luYWxSb3dzKCkge1xuICAgIHRoaXMub3JpZ2luYWxSb3dzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnJvd3NEYXRhKSk7XG4gIH1cblxuICBvblJvd0VkaXRJbml0KHJvdzogYW55KSB7XG4gICAgdGhpcy5yZWZyZXNoR3JpZFRlcm1pbmF0b3IoKVxuICAgIGxldCBzZWxlY3RlZFJvdyA9IHsgLi4ucm93IH07XG4gICAgT2JqZWN0LmVudHJpZXMoc2VsZWN0ZWRSb3cpLmZvckVhY2goKFtrZXksIHZhbHVlXTogYW55KSA9PiB7XG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuc2V0RHJvcGRvd25GaWx0ZXIpIHtcbiAgICAgICAgICB0aGlzLnNldERyb3Bkb3duRmlsdGVyVmFsdWUoY29sLCByb3csIGtleSk7XG4gICAgICAgICAgdGhpcy5zZXREcm9wZG93bkZpbHRlciA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNldCB0aGUgYXV0b0NvbXBsZXRlIFZhbHVlIGluIGVkaXQgbW9kZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5BVVRPQ09NUExFVEUgJiZcbiAgICAgICAgICBjb2wuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGtleT8udG9Mb3dlckNhc2UoKSAmJlxuICAgICAgICAgIHZhbHVlICYmXG4gICAgICAgICAgdmFsdWUubGVuZ3RoID4gMFxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoY29sLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sLmZpZWxkXS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgcm93W2NvbC5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfdGVtcCddID0gcm93W2NvbC5kaXNwbGF5RmllbGRdO1xuICAgICAgICAgICAgICByb3dbY29sLmRpc3BsYXlGaWVsZF0gPSByb3dbY29sLmZpZWxkXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgbmV3VmFsdWUgPSB2YWx1ZS5tYXAoKHg6IGFueSkgPT4geFtjb2wuZGlzcGxheUZpZWxkXSk7XG4gICAgICAgICAgaWYgKG5ld1ZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnOycpKSB7XG4gICAgICAgICAgICByb3dbY29sLmZpZWxkXSA9IG5ld1ZhbHVlXG4gICAgICAgICAgICAgID8udG9TdHJpbmcoKVxuICAgICAgICAgICAgICA/LnJlcGxhY2VBbGwoJzsnLCAnLCcpXG4gICAgICAgICAgICAgID8uc3BsaXQoJywnKVxuICAgICAgICAgICAgICA/Lm1hcCgoeDogYW55KSA9PiAoeyBbY29sLmRpc3BsYXlGaWVsZCA/IGNvbC5kaXNwbGF5RmllbGQgOiBjb2wuZmllbGRdOiB4LCBbY29sLmZpZWxkICsgJ190ZW1wJ106IHZhbHVlWzBdW2NvbC5maWVsZF0gfSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOKSB7XG4gICAgICAgICAgbGV0IG9wdGlvbiA9IGNvbD8uZGF0YT8uZmluZChcbiAgICAgICAgICAgICh4OiBhbnkpID0+IHgubGFiZWwgPT09IHJvd1tjb2wuZmllbGRdPy50b1N0cmluZygpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgICByb3dbY29sLmZpZWxkXSA9IG9wdGlvbi52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTVVMVElTRUxFQ1QpIHtcbiAgICAgICAgICByb3dbY29sLmZpZWxkXSA9IHRoaXMuc2V0TXVsdGlTZWxlY3RWYWx1ZShjb2wsIHJvdylcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBrZXk/LnRvTG93ZXJDYXNlKCkgJiZcbiAgICAgICAgICBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEVcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKHJvd1tjb2wuZmllbGRdICE9PSBudWxsICYmIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAocm93W2tleSArICdfb2JqJ10gJiYgT2JqZWN0LmtleXMocm93W2tleSArICdfb2JqJ10pPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHJvd1trZXkgKyAnX29iaiddLnRleHQgPSBuZXcgRGF0ZSh2YWx1ZSBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcm93W2tleV0gPSBuZXcgRGF0ZSh2YWx1ZSBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGNoZWNrIHRoZSBNaW51dGVzIHBhdHRlcm5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoY29sLnNob3dUaW1lIHx8IGNvbC50aW1lT25seSkgJiZcbiAgICAgICAgICAgIGNvbC5taW51dGVzSW50ZXJ2YWwgJiZcbiAgICAgICAgICAgIHJvd1trZXldXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByb3dba2V5XSA9IG5ldyBEYXRlKHNldE1pbnV0ZXNJbnRlcnZhbChyb3dba2V5XSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgJiZcbiAgICAgICAgICBjb2wuZmlsdGVyPy50eXBlID09PSAnY2FsZW5kYXInICYmXG4gICAgICAgICAgY29sLmZpZWxkLnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgcm93W2NvbC5maWVsZF0gPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxJTksgJiZcbiAgICAgICAgICBjb2wuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGtleT8udG9Mb3dlckNhc2UoKSAmJlxuICAgICAgICAgIChjb2wuYWxsb3dTYXZlID09PSB0cnVlIHx8IGNvbC5hbGxvd1NhdmUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKGNvbC5lZGl0TGluayA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcm93W2NvbC5maWVsZCArICdfb2JqJ10uaHlwZXJsaW5rID0gcm93W2NvbC5maWVsZCArICdfb2JqJ10/Lmh5cGVybGluaztcbiAgICAgICAgICAgIHJvd1tjb2wuZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0ID0gJyc7XG4gICAgICAgICAgfSBlbHNlIGlmIChjb2wuZWRpdExpbmsgPT09IGZhbHNlIHx8IGNvbC5lZGl0TGluayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByb3dba2V5XSA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmVkaXRSb3dzUmVjb3Jkc1tyb3dbdGhpcy5kYXRhS2V5XV0gPSB7IC4uLnJvdyB9O1xuICAgIHRoaXMuZWRpdGluZ1Jvd0tleXNbcm93W3RoaXMuZGF0YUtleV1dID0gdHJ1ZTtcbiAgICB0aGlzLmNoZWNrQWN0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLmRyb3Bkb3duSW5wdXQgPSB0cnVlO1xuICAgIHRoaXMucm93Q2xpY2tEYXRhID0gcm93O1xuICAgIHRoaXMuaW5FZGl0TW9kZSA9IHRydWU7XG4gICAgdGhpcy5yb3dVcGRhdGVDaGFuZ2UgPSBmYWxzZTtcbiAgICB0aGlzLmNhbmNlbEFsbFJlY29yZHMgPSBmYWxzZTtcbiAgICB0aGlzLnNhdmVBbGxSZWNvcmQgPSBmYWxzZTtcbiAgICB0aGlzLnNvcnREaXNhYmxlZCA9IHRydWU7XG4gICAgdGhpcy5ncmlkU2VydmljZS5yb3dVcGRhdGUgPSBmYWxzZTtcbiAgICB0aGlzLm9uR3JpZFJvd0VkaXQuZW1pdChyb3cpO1xuICB9XG5cbiAgdHlwZU9mKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIHNldCBkcm9wZG93biBmaWx0ZXIgdmFsdWVcbiAgICovXG4gIHNldERyb3Bkb3duRmlsdGVyVmFsdWUoY29sOiBhbnksIHJvdzogYW55LCBrZXk6IHN0cmluZykge1xuICAgIGlmIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOICYmIGNvbC5kcm9wRG93blByb3ApIHtcbiAgICAgIGlmIChPYmplY3QudmFsdWVzKGNvbCkuc29tZSgodmFsdWUpID0+IHZhbHVlID09IGtleSkpIHtcbiAgICAgICAgbGV0IG9iaiA9IGNvbC5kcm9wRG93blByb3A7XG4gICAgICAgIGxldCBuZXdGaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICAgICAgaWYgKG9iai5maWx0ZXJzICYmIG9iai5maWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBvYmouZmlsdGVycy5mb3JFYWNoKChmaWx0ZXI6IGFueSkgPT4ge1xuICAgICAgICAgICAgbGV0IG5ld0ZpbHRlciA9IHsgLi4uZmlsdGVyIH07XG4gICAgICAgICAgICBsZXQgZmlsdGVyS2V5ID0gT2JqZWN0LmtleXMocm93KS5maW5kKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgbGV0IG1hdGNoS2V5OiBzdHJpbmcgPSAnJztcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZT8uaW5jbHVkZXMoJ3snKSAmJlxuICAgICAgICAgICAgICAgIGtleS50b0xvd2VyQ2FzZSgpID09PVxuICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZVxuICAgICAgICAgICAgICAgICAgPy50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICA/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCd7JywgJycpXG4gICAgICAgICAgICAgICAgICAucmVwbGFjZSgnfScsICcnKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBtYXRjaEtleSA9IGtleTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hLZXk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJLZXkpIHtcbiAgICAgICAgICAgICAgbmV3RmlsdGVyLnZhbHVlID0gcm93W2ZpbHRlcktleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXdGaWx0ZXJzLnB1c2gobmV3RmlsdGVyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc2V0RHJvcGRvd25EYXRhKFxuICAgICAgICAgIGNvbCxcbiAgICAgICAgICBvYmoudW5pcXVlS2V5LFxuICAgICAgICAgIG9iai52YWx1ZVByb3AsXG4gICAgICAgICAgb2JqLmxhYmVsUHJvcCxcbiAgICAgICAgICBuZXdGaWx0ZXJzLFxuICAgICAgICAgIHJvd1xuICAgICAgICApO1xuXG4gICAgICAgIGxldCBvcHRpb24gPSBjb2wuZGF0YS5maW5kKFxuICAgICAgICAgICh4OiBhbnkpID0+IHgubGFiZWwgPT09IHJvd1tjb2wuZmllbGRdPy50b1N0cmluZygpXG4gICAgICAgICk7XG4gICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICByb3dbY29sLmZpZWxkXSA9IG9wdGlvbi52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcm93XG4gICAqIFBhc3NlcyB0aGUgZWRpdGVkIG9yIG5ld2x5IGNyZWF0ZWQgZGF0YSB0byBwYXJlbnRcbiAgICogSW4gY2FzZSBvZiBuZXdseSBjcmVhdGVkIGRhdGEsIGRhdGFLZXkgYW5kIGlzTmV3IHByb3AgaXMgcmVtb3ZlZFxuICAgKi9cbiAgb25Sb3dFZGl0U2F2ZShzZWxlY3RlZFJvdzogYW55KSB7XG4gICAgdGhpcy50ZW1wU2F2ZWRSb3cgPSBbXTtcbiAgICBsZXQgYXV0b21Db21wbGV0ZVRlbXBEYXRhID0gW107XG4gICAgbGV0IGxvb2t1cEluZm86IGFueSA9IHt9O1xuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICBkZWxldGUgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkICsgJy1kYXRhJ107XG4gICAgICBkZWxldGUgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkICsgJ19zZWNvbmRUeXBlJ107XG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUICYmXG4gICAgICAgIChjb2x1bW4uYWxsb3dTYXZlID09PSB0cnVlIHx8IGNvbHVtbi5hbGxvd1NhdmUgPT09IHVuZGVmaW5lZClcbiAgICAgICkge1xuICAgICAgICBpZiAodHlwZW9mIChzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXT8udmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnRleHQpIHtcbiAgICAgICAgICBsb29rdXBJbmZvW2NvbHVtbi5maWVsZF0gPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLnRleHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXIpIHtcbiAgICAgICAgbGV0IHZhbHVlOiBhbnkgPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdO1xuICAgICAgICBpZiAoY29sdW1uLmZvcm1hdHRlciA9PT0gJ2NoYXInKSB7XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZSA9PT0gdHJ1ZSA/ICdZJyA6ICdOJztcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZm9ybWF0dGVyID09PSAnbnVtZXJpYycpIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlID09PSB0cnVlID8gJzEnIDogJzAnO1xuICAgICAgICB9XG4gICAgICAgIHNlbGVjdGVkUm93ID0geyAuLi5zZWxlY3RlZFJvdywgW2NvbHVtbi5maWVsZF06IHZhbHVlIH07XG4gICAgICB9XG5cbiAgICAgIC8vY29udmVydCBkcm9wRG93biBvcHRpb25MYWJlbCBpbnRvIG9wdGlvblZhbHVlXG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04gJiYgY29sdW1uLmRhdGE/Lmxlbmd0aCA+IDAgJiYgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXVxuICAgICAgKSB7XG4gICAgICAgIGxldCBvcHRpb25MYWJlbDtcbiAgICAgICAgaWYgKGlzTmFOKE51bWJlcihzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdKSkpIHtcbiAgICAgICAgICBvcHRpb25MYWJlbCA9IGNvbHVtbi5kYXRhLmZpbmQoKHJlY29yZCkgPT4gcmVjb3JkWydsYWJlbCddPy50b0xvd2VyQ2FzZSgpID09PSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdPy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvcHRpb25MYWJlbCA9IGNvbHVtbi5kYXRhLmZpbmQoKHJlY29yZCkgPT4gcmVjb3JkWydsYWJlbCddID09PSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9uTGFiZWw/LnZhbHVlKSB7XG4gICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IG9wdGlvbkxhYmVsLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vY29udmVydCBkYXRlIGludG8gdGltZSBmb3JtYXRcbiAgICAgIGlmIChcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFXG4gICAgICApIHtcbiAgICAgICAgaWYgKGNvbHVtbi50aW1lT25seSAmJiBjb2x1bW4uc2F2ZUFzU3RyaW5nICYmIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0pIHtcbiAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSwgJ2hoOm1tIGEnKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udGltZU9ubHkgJiYgIWNvbHVtbi5zYXZlQXNTdHJpbmcgJiYgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSkge1xuICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdLCAneXl5eS1NTS1kZCBISDptbTpzcycpO1xuICAgICAgICB9IGVsc2UgaWYgKCFjb2x1bW4udGltZU9ubHkgJiYgKGNvbHVtbi5zaG93VGltZSB8fCBjb2x1bW4uZm9ybWF0ID09PSBFR3JpZEZvcm1hdFR5cGUuTE9OR0RBVEUpKSB7XG4gICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0sICd5eXl5LU1NLWRkIEhIOm1tOnNzJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSAmJiAhY29sdW1uLnRpbWVPbmx5KSB7XG4gICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IG5ldyBEYXRlKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0pPy50b0xvY2FsZURhdGVTdHJpbmcoXCJlbi1VU1wiKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBpZiBhbGxvd0NhbGN1bGF0ZT10cnVlLCBkaXZpZGUgdGhlIHBlcmNlbnQgYnkgMTAwXG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5OVU1FUklDKSB7XG4gICAgICAgIGlmICh0aGlzLm51bWVyaWNWYWx1ZSkge1xuICAgICAgICAgIHRoaXMubnVtZXJpY1ZhbHVlID0ge31cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaWdpdHNJbmZvID0gY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbztcbiAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXQ/LnR5cGUgPT09ICdwZXJjZW50Jykge1xuICAgICAgICAgIGlmIChjb2x1bW4uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmFsbG93Q2FsY3VsYXRlKSB7XG4gICAgICAgICAgICBjb25zdCBjYWxjdWxhdGVkVmFsdWUgPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdPy50b1N0cmluZygpPy5pbmNsdWRlcygnLicpID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IGNhbGN1bGF0ZWRWYWx1ZSA/IHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gOiBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdIC8gMTAwO1xuICAgICAgICAgICAgaWYgKGRpZ2l0c0luZm8pIHtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHBhcnNlRmxvYXQoKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gLyAxMDApPy50b1N0cmluZygpKS50b0ZpeGVkKGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vY29udmVydCBtdWx0aXNlbGVjdCBhcnJheSBpbnRvIHN0cmluZ1xuICAgICAgaWYgKFxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk1VTFRJU0VMRUNUICYmIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF1cbiAgICAgICkge1xuICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXT8udG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2F2aW5nIEF1dG9Db21wbGV0ZSBEYXRhXG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQVVUT0NPTVBMRVRFICYmXG4gICAgICAgIGNvbHVtbi5kaXNwbGF5RmllbGQgJiZcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXT8ubGVuZ3RoID4gMFxuICAgICAgKSB7XG4gICAgICAgIGF1dG9tQ29tcGxldGVUZW1wRGF0YSA9IFsuLi5zZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdXTtcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0/Lm1hcCgocm93KSA9PiBjb2x1bW4/Lm9wdGlvblZhbHVlICYmIHJvd1tjb2x1bW4ub3B0aW9uVmFsdWU/LnRvTG93ZXJDYXNlKCldID9cbiAgICAgICAgICByb3dbY29sdW1uLm9wdGlvblZhbHVlPy50b0xvd2VyQ2FzZSgpXSA6IHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldKT8udG9TdHJpbmcoKT8ucmVwbGFjZUFsbCgnLCcsICc7Jyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBsZXQgcm93OiBhbnkgPSB7IC4uLnNlbGVjdGVkUm93IH07XG4gICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAoa2V5LmluY2x1ZGVzKCdfb2JqJykpIHtcbiAgICAgICAgbGV0IG9iajogYW55ID0gcm93W2tleV1cbiAgICAgICAgaWYgKHRoaXMuY2hlY2tBY3Rpb24gPT09IGZhbHNlICYmIG9iaj8udHlwZSAmJiAob2JqLnR5cGUgPT09ICdsaW5rJyB8fCBvYmoudHlwZSA9PT0gJ2lmcmFtZScgfHwgb2JqLnR5cGUgPT09ICdkaWFsb2cnKSkge1xuICAgICAgICAgIHJvdyA9IHsgLi4ucm93LCBba2V5LnNwbGl0KCdfJylbMF1dOiByb3dba2V5XS5kaXNwbGF5VGV4dCB9O1xuICAgICAgICAgIHRoaXMuY2hlY2tBY3Rpb24gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvYmogJiYgKG9iai50eXBlID09PSAnbGluaycgfHwgb2JqLnR5cGUgPT09ICdpZnJhbWUnIHx8IG9iai50eXBlID09PSAnZGlhbG9nJykpIHtcbiAgICAgICAgICBpZiAoIW9iai5kaXNwbGF5VGV4dCAmJiBvYmouZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT0ga2V5LnNwbGl0KCdfJylbMF0/LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIG9iai5kaXNwbGF5VGV4dCA9IHJvd1trZXkuc3BsaXQoJ18nKVswXV1cbiAgICAgICAgICB9XG4gICAgICAgICAgcm93ID0geyAuLi5yb3csIFtrZXkuc3BsaXQoJ18nKVswXV06IHJvd1trZXldLmRpc3BsYXlUZXh0IH07XG4gICAgICAgICAgZGVsZXRlIHJvd1trZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgLyoqXG4gICAgICoganVzdCBlbWl0IHRob3NlIGZpZWxkcyB3aG8gZXhpc3QgaW4gdGhlIHRhYmxlXG4gICAgICovXG4gICAgcm93ID0gdGhpcy5ncmlkU2VydmljZS5zZXRSb3dWYWx1ZShyb3cpO1xuICAgIC8vb25zb2xlLmxvZygncm93IGluIHNhdmUnLCByb3cpXG4gICAgbGV0IG9iajogYW55ID0ge307XG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIChjb2x1bW4uYWxsb3dTYXZlID09PSB0cnVlIHx8IGNvbHVtbi5hbGxvd1NhdmUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnNhdmVBbGxEYXRhKVxuICAgICAgKSB7XG4gICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF07XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRyAmJlxuICAgICAgICAgIGNvbHVtbi5maWx0ZXI/LnR5cGUgPT09ICdjYWxlbmRhcidcbiAgICAgICAgKSB7XG4gICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShcbiAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdLFxuICAgICAgICAgICAgJ3l5eXktTU0tZGRUMDA6MDA6MDAuMDAwWidcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9TZXQgRGVjaW1hbCBGcmFjdGlvbiBWYWx1ZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sdW1uLmZvcm1hdCAmJlxuICAgICAgICAgIGNvbHVtbi5mb3JtYXQudHlwZSA9PT0gRUZvcm1hdFR5cGUuREVDSU1BTCAmJlxuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdICYmXG4gICAgICAgICAgIXJvd1tjb2x1bW4uZmllbGRdLnRvU3RyaW5nKCkuaW5jbHVkZXMoJy4nKVxuICAgICAgICApIHtcbiAgICAgICAgICBsZXQgZGlnaXRzSW5mbyA9ICcuMDAnO1xuICAgICAgICAgIGxldCB6ZXJvID0gJzAnO1xuICAgICAgICAgIGNvbnN0IGZvcm1hdFBhcmFtcyA9IGNvbHVtbi5mb3JtYXQ/LmZvcm1hdFBhcmFtcztcbiAgICAgICAgICBjb25zdCBmcmFjRGlnaXRzID0gY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbztcbiAgICAgICAgICBpZiAoZnJhY0RpZ2l0cykge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBmcmFjRGlnaXRzOyBpKyspIHtcbiAgICAgICAgICAgICAgemVybyA9IHplcm8gKyAnMCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkaWdpdHNJbmZvID0gJy4nICsgemVybztcbiAgICAgICAgICB9XG4gICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXSArIGRpZ2l0c0luZm87XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHJvdy5pc05ldyB8fCByb3cuaXNuZXcgJiZcbiAgICAgICAgKGNvbHVtbi5hbGxvd1NhdmUgPT09IGZhbHNlIHx8IGNvbHVtbi5lZGl0YWJsZSA9PT0gZmFsc2UgfHwgIXRoaXMuc2F2ZUFsbERhdGEpXG4gICAgICApIHtcbiAgICAgICAgZGVsZXRlIHJvd1tjb2x1bW4uZmllbGRdO1xuICAgICAgfVxuICAgICAgY29sdW1uLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgICAgY29uc3Qgb2JqS2V5ID0gY29sdW1uPy5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJztcbiAgICAgIGlmIChyb3dbb2JqS2V5XT8uZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgIGRlbGV0ZSByb3dbb2JqS2V5XS5lcnJvck1lc3NhZ2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZGVsZXRlIHNlbGVjdGVkUm93Wyd1bmRlZmluZWQnXTtcbiAgICBvYmpbdGhpcy5kYXRhS2V5XSA9IHJvd1t0aGlzLmRhdGFLZXldOyAvLyBlbnN1cmUgZGF0YUtleSAodGVtcF9pZCkgaXMgYXZhaWxhYmxlIGZvciBkaXJ0eS1yb3cgY29tcGFyaXNvblxuICAgIHRoaXMuZ3JpZFNlcnZpY2UuY2hlY2tWYWxpZGl0eSh0aGlzLmNvbHVtbnMsIHJvdyk7XG4gICAgY29uc3QgaXNWYWxpZCA9IHRoaXMuZ3JpZFZhbGlkYXRpb24odGhpcy5jb2x1bW5zLCByb3cpO1xuXG4gICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgIC8vIHNldCB0aGUgZ3JpZCB1cGRhdGVkL2luc2VydGVkIGRhdGFcbiAgICAgIHRoaXMucm93QWN0aW9uRXZlbnRzKHNlbGVjdGVkUm93KTtcbiAgICAgIHRoaXMuYnJvd3NlckNsb3NlRXZlbnQoZmFsc2UpO1xuICAgICAgaWYgKHJvdy5pc05ldyB8fCByb3cuaXNuZXcpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnJvd3NEYXRhLmZpbmRJbmRleCgoeCkgPT4geC50ZW1wX2lkID09IHJvdy50ZW1wX2lkKTtcbiAgICAgICAgdGhpcy50ZW1wU2F2ZWRSb3cucHVzaChpbmRleCk7XG4gICAgICAgIGxldCB7IGlzTmV3LCBpc25ldywgLi4ubmV3Um93T2JqIH0gPSByb3c7XG4gICAgICAgIG5ld1Jvd09iaiA9IHRoaXMuZ3JpZFNlcnZpY2UucmVtb3ZlRXh0cmFOZXdSb3dPYmoobmV3Um93T2JqLCB0aGlzLmNvbHVtbnMpO1xuICAgICAgICBpZiAoIXRoaXMuYWRkRGF0YUtleVZhbHVlKSB7XG4gICAgICAgICAgZGVsZXRlIG5ld1Jvd09ialt0aGlzLmRhdGFLZXldO1xuICAgICAgICB9XG4gICAgICAgIG5ld1Jvd09iaiA9IHRoaXMuc2V0Um93c0RhdGEobmV3Um93T2JqKTtcbiAgICAgICAgaWYgKHRoaXMuc2F2ZUFsbFJlY29yZCkge1xuICAgICAgICAgIHRoaXMuc2F2ZVJlY29yZEFycmF5LnB1c2gobmV3Um93T2JqKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9uUm93QWRkLmVtaXQobmV3Um93T2JqKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnJvd3NEYXRhLmZpbmRJbmRleCgoeCkgPT4geC50ZW1wX2lkID09IHNlbGVjdGVkUm93LnRlbXBfaWQpO1xuICAgICAgICB0aGlzLnRlbXBTYXZlZFJvdy5wdXNoKGluZGV4KTtcbiAgICAgICAgaWYgKHRoaXMuc2F2ZUFsbFJlY29yZCkge1xuICAgICAgICAgIHRoaXMuc2F2ZVJlY29yZEFycmF5LnB1c2gob2JqKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5jaGVja2xpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgY2hlY2tsaXN0Um93cyA9IHRoaXMuc2V0Um93c0RhdGEodGhpcy5jaGVja2xpc3QpO1xuICAgICAgICAgICAgY2hlY2tsaXN0Um93cy5mb3JFYWNoKHJvdyA9PiBkZWxldGUgcm93W3RoaXMuZGF0YUtleV0pO1xuICAgICAgICAgICAgaWYgKHRoaXMub3JpZ2luYWxSb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRSb3dzID0gZ2V0Q2hhbmdlZFJvd3MoY2hlY2tsaXN0Um93cywgdGhpcy5vcmlnaW5hbFJvd3MsIHRoaXMuY29sdW1ucywgdGhpcy5kYXRhS2V5KTtcbiAgICAgICAgICAgICAgdGhpcy5vblJvd1VwZGF0ZS5lbWl0KHRoaXMucHJlcGFyZVJvd3NGb3JFbWl0KGZpbHRlcmVkUm93cykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5vblJvd1VwZGF0ZS5lbWl0KHRoaXMucHJlcGFyZVJvd3NGb3JFbWl0KGNoZWNrbGlzdFJvd3MpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkZWxldGUgb2JqW3RoaXMuZGF0YUtleV07IC8vIHJlbW92ZSB0ZW1wX2lkIGJlZm9yZSBlbWl0dGluZ1xuICAgICAgICAgICAgaWYgKHRoaXMub3JpZ2luYWxSb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgY29uc3Qgc2luZ2xlUm93QXJyYXkgPSBbb2JqXTtcbiAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRSb3dzID0gZ2V0Q2hhbmdlZFJvd3Moc2luZ2xlUm93QXJyYXksIHRoaXMub3JpZ2luYWxSb3dzLCB0aGlzLmNvbHVtbnMsIHRoaXMuZGF0YUtleSk7XG4gICAgICAgICAgICAgIHRoaXMub25Sb3dVcGRhdGUuZW1pdCh0aGlzLnByZXBhcmVSb3dzRm9yRW1pdChmaWx0ZXJlZFJvd3MubGVuZ3RoID4gMCA/IGZpbHRlcmVkUm93c1swXSA6IG51bGwpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMub25Sb3dVcGRhdGUuZW1pdCh0aGlzLnByZXBhcmVSb3dzRm9yRW1pdChvYmopKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuZWRpdGluZ1Jvd0tleXNbcm93W3RoaXMuZGF0YUtleV1dID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgICAgIGlmIChjb2x1bW4uZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgaWYgKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpICsgJ19vYmonXSkge1xuICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkgKyAnX29iaiddID0geyAuLi5zZWxlY3RlZFJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLCBlcnJvck1lc3NhZ2U6IGNvbHVtbi5lcnJvck1lc3NhZ2UgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkgKyAnX29iaiddID0geyBlcnJvck1lc3NhZ2U6IGNvbHVtbi5lcnJvck1lc3NhZ2UgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICB0aGlzLmVkaXRpbmdSb3dLZXlzW3Jvd1t0aGlzLmRhdGFLZXldXSA9IHRydWU7XG4gICAgfVxuICAgIC8vIGlmIGFsbCByb3dzIGluIHJlYWQgb25seSBtb2RlIHRoZW4gc2hvdyBlZGl0QWxsUm93cyBidXR0b24uICAgIFxuICAgIGlmIChPYmplY3QudmFsdWVzKHRoaXMuZWRpdGluZ1Jvd0tleXMpLmV2ZXJ5KCh2YWx1ZSkgPT4gIXZhbHVlKSkge1xuICAgICAgdGhpcy5pbkVkaXRNb2RlID0gZmFsc2U7XG4gICAgICB0aGlzLnNvcnREaXNhYmxlZCA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xuICAgICAgLy8gY29udmVydCBkYXRlIGludG8gdGltZVxuICAgICAgaWYgKFxuICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdICYmXG4gICAgICAgIChzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdPy50b1N0cmluZygpPy5pbmNsdWRlcygnUE0nKSB8fFxuICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCdBTScpKVxuICAgICAgKSB7XG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBzZXRUaW1lSW5EYXRlKHJvd1tjb2x1bW4uZmllbGRdKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTlVNRVJJQykge1xuICAgICAgICBjb25zdCBkaWdpdHNJbmZvID0gY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbztcbiAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXQ/LnR5cGUgPT09ICdwZXJjZW50Jykge1xuICAgICAgICAgIGlmIChjb2x1bW4uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmFsbG93Q2FsY3VsYXRlKSB7XG4gICAgICAgICAgICBpZiAoZGlnaXRzSW5mbykge1xuICAgICAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gcGFyc2VGbG9hdCgoc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSAqIDEwMCk/LnRvU3RyaW5nKCkpLnRvRml4ZWQoZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSAqIDEwMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQVVUT0NPTVBMRVRFICYmXG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF1cbiAgICAgICkge1xuICAgICAgICAvLyBzZXQgYXV0b2NvbXBlbGV0IGFycmF5IGRhdGEgYWZ0ZXIgc2F2ZSByb3dcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IGF1dG9tQ29tcGxldGVUZW1wRGF0YTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUICYmXG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gJiYgKGNvbHVtbi5hbGxvd1NhdmUgPT09IHRydWUgfHwgY29sdW1uLmFsbG93U2F2ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgKSB7XG4gICAgICAgIC8vIHNldCBMT09LVVBfSU5QVVQgZGF0YSBhZnRlciBzYXZlIHJvd1xuICAgICAgICBpZiAobG9va3VwSW5mb1tjb2x1bW4uZmllbGRdKSB7XG4gICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IGxvb2t1cEluZm9bY29sdW1uLmZpZWxkXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTiAmJlxuICAgICAgICBjb2x1bW4ub3B0aW9uTGFiZWwgJiZcbiAgICAgICAgY29sdW1uLm9wdGlvblZhbHVlXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5zZXREcm9wZG93blZhbHVlKGNvbHVtbiwgc2VsZWN0ZWRSb3cpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuYWRkTmV3Um93Q2hlY2sgPSBmYWxzZTtcbiAgICBpZiAoT2JqZWN0LnZhbHVlcyh0aGlzLmVkaXRpbmdSb3dLZXlzKS5ldmVyeSgodmFsdWUpID0+ICF2YWx1ZSkgJiYgdGhpcy5zZXRHcmlkUmVmcmVzaFRpbWUpIHtcbiAgICAgIHRoaXMucmVmcmVzaEdyaWQoKTtcbiAgICB9XG4gICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnJvd1VwZGF0ZSA9IGZhbHNlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8vIGNoZWNrIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSBmaWVsZFxuICBncmlkVmFsaWRhdGlvbihjb2x1bW5zOiBhbnksIHJvdzogYW55LCBzaW5nbGVDZWxsOiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuIHtcbiAgICBpZiAoc2luZ2xlQ2VsbCA9PSB0cnVlKSB7XG4gICAgICBjb2x1bW5zID0gW3sgLi4uY29sdW1ucyB9XVxuICAgIH1cbiAgICBpZiAoIXRoaXMuZ3JpZFNlcnZpY2UuY2hlY2tWYWxpZGl0eShjb2x1bW5zLCByb3csIHNpbmdsZUNlbGwpKSB7XG4gICAgICBsZXQgZXJyb3JNZXNzYWdlRGV0YWlsczogc3RyaW5nID0gJyc7XG4gICAgICBjb2x1bW5zPy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbi5lcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICBlcnJvck1lc3NhZ2VEZXRhaWxzID0gZXJyb3JNZXNzYWdlRGV0YWlscyA/IGVycm9yTWVzc2FnZURldGFpbHMgKyAnICwgJyArIGNvbHVtbi5lcnJvck1lc3NhZ2UgOiBjb2x1bW4uZXJyb3JNZXNzYWdlO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgbGV0IGlzUmVxdWlyZWQgPSBjb2x1bW5zLnNvbWUoXG4gICAgICAgIChjb2x1bW46IGFueSkgPT4gY29sdW1uLmVycm9yTWVzc2FnZSAmJiAocm93W2NvbHVtbi5maWVsZF0gPT09IG51bGwgfHwgcm93W2NvbHVtbi5maWVsZF0gPT09IHVuZGVmaW5lZCB8fCByb3dbY29sdW1uLmZpZWxkXSA9PT0gJycpXG4gICAgICApO1xuICAgICAgaWYgKGlzUmVxdWlyZWQgJiYgIXNpbmdsZUNlbGwpIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXG4gICAgICAgICAgZXJyb3JNZXNzYWdlRGV0YWlscyxcbiAgICAgICAgICA1MDAwLFxuICAgICAgICAgICdSRVFVSVJFRCBGSUVMRCdcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKGVycm9yTWVzc2FnZURldGFpbHMsIDUwMDAsICdJTlZBTElEIEZJRUxEJyk7XG4gICAgICAgIGlmIChzaW5nbGVDZWxsKSB7XG4gICAgICAgICAgdGhpcy5zZXRFcnJvckNlbGwoY29sdW1uc1swXSwgcm93KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzaW5nbGVDZWxsKSB7XG4gICAgICAgIHRoaXMuc2V0RXJyb3JDZWxsKGNvbHVtbnNbMF0sIHJvdylcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICBzZXRFcnJvckNlbGwoY29sdW1uLCByb3cpIHtcbiAgICBpZiAoY29sdW1uLmVycm9yTWVzc2FnZSkge1xuICAgICAgaWYgKHJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSArICdfb2JqJ10pIHtcbiAgICAgICAgcm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpICsgJ19vYmonXSA9IHsgLi4ucm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10sIGVycm9yTWVzc2FnZTogY29sdW1uLmVycm9yTWVzc2FnZSB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpICsgJ19vYmonXSA9IHsgZXJyb3JNZXNzYWdlOiBjb2x1bW4uZXJyb3JNZXNzYWdlIH07XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYgKHJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSArICdfb2JqJ10pIHtcbiAgICAgICAgZGVsZXRlIHJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSArICdfb2JqJ10uZXJyb3JNZXNzYWdlXG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcm93IDogYW55XG4gICAqIEBwYXJhbSBpbmRleCA6IG51bWJlclxuICAgKiBDbGVhcnMgb3V0IHRoZSBlZGl0IHJvdyBhbmQgcmVwbGFjZSB3aXRoIHJlYWRhYmxlIG9uZVxuICAgKi9cbiAgb25Sb3dFZGl0Q2FuY2VsKHJvdzogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgbGV0IHJvd0luRWRpdE1vZGU6IGJvb2xlYW4gPSBPYmplY3QudmFsdWVzKHRoaXMuZWRpdGluZ1Jvd0tleXMpLmV2ZXJ5KCh2YWx1ZSkgPT4gIXZhbHVlKTtcbiAgICBpZiAocm93Py5pc05ldykge1xuICAgICAgdGhpcy5yb3dzRGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvd3NEYXRhW2luZGV4XSA9IHRoaXMuZWRpdFJvd3NSZWNvcmRzW3Jvd1t0aGlzLmRhdGFLZXldXTtcbiAgICAgIGRlbGV0ZSB0aGlzLmVkaXRSb3dzUmVjb3Jkc1tyb3dbdGhpcy5kYXRhS2V5XV07XG4gICAgfVxuICAgIGRlbGV0ZSB0aGlzLmVkaXRpbmdSb3dLZXlzW3Jvd1t0aGlzLmRhdGFLZXldXTtcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTikge1xuICAgICAgICB0aGlzLnNldERyb3Bkb3duVmFsdWUoY29sdW1uLCByb3cpO1xuICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCAmJiBjb2x1bW4uZGlzcGxheUZpZWxkKSB7XG4gICAgICAgIHRoaXMucm93c0RhdGFbaW5kZXhdW2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXT8udmFsdWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5pbkVkaXRNb2RlID0gZmFsc2U7XG4gICAgaWYgKHJvd0luRWRpdE1vZGUpIHtcbiAgICAgIHRoaXMuc29ydERpc2FibGVkID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuYWRkTmV3Um93Q2hlY2sgPSBmYWxzZTtcbiAgICB0aGlzLnJvd1VwZGF0ZUNoYW5nZSA9IGZhbHNlO1xuICAgIHRoaXMuaW5saW5lUm93Q2FuY2VsLmVtaXQocm93KTtcbiAgICBpZiAocm93SW5FZGl0TW9kZSAmJiB0aGlzLnNldEdyaWRSZWZyZXNoVGltZSkge1xuICAgICAgdGhpcy5yZWZyZXNoR3JpZCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBcbiAgICpcbiAgICpcbiAgICogQHBhcmFtIHJvd1xuICAgKiBTZW5kcyB0aGUgcm93IHBheWxvYWQgdG8gcGFyZW50IGZvciBkZWxldGlvbnNcbiAgICovXG5cbiAgLyoqXG4gICpzZXQgdGhlIGdyaWREYXRhIG9uIHJvdyBhY3Rpb25zIGV2ZW50c1xuICAqL1xuICByb3dBY3Rpb25FdmVudHMocm93SW5mbywgZGVsZXRlUm93OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBsZXQgYWN0aW9uOiBzdHJpbmcgPSAnJztcbiAgICBsZXQgZ3JpZFJvd3NEYXRhOiBhbnlbXSA9IFsuLi50aGlzLnJvd3NEYXRhXTtcbiAgICBjb25zdCBpbmRleCA9IGdyaWRSb3dzRGF0YS5maW5kSW5kZXgoKHJvd0RhdGEpID0+IHJvd0luZm9bdGhpcy5kYXRhS2V5XSA9PT0gcm93RGF0YVt0aGlzLmRhdGFLZXldKTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgaWYgKGRlbGV0ZVJvdykge1xuICAgICAgICBncmlkUm93c0RhdGEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgdGhpcy5yb3dzRGF0YSA9IFsuLi5ncmlkUm93c0RhdGFdO1xuICAgICAgICBhY3Rpb24gPSAnZGVsZXRlJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmFkZE5ld1Jvd0NoZWNrKSB7XG4gICAgICAgICAgYWN0aW9uID0gJ2luc2VydCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWN0aW9uID0gJ3VwZGF0ZSc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub25HcmlkUm93QWN0aW9ucy5vYnNlcnZlcnMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgcm93SW5mb1sncm93QWN0aW9uJ10gPSBhY3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgZ3JpZFJvd3NEYXRhW2luZGV4XSA9IHJvd0luZm87XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZ2VuZXJhdGVSb3dzRGF0YUNvcHkgPSBmYWxzZTtcbiAgICB0aGlzLnJvd1VwZGF0ZUNoYW5nZSA9IGZhbHNlO1xuICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICAgIHRoaXMub25HcmlkUm93QWN0aW9ucy5lbWl0KGdyaWRSb3dzRGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogb3BlbiBEZWxldGUgY29uZmlybWF0aW9uIGRpYWxvZyB3aGVuIHRyeWluZyB0byBkZWxldGUgcm93XG4gICAqL1xuICBkZWxldGVSZWNvcmQocm93OiBhbnkpIHtcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICBtZXNzYWdlOiAnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgcmVjb3JkPycsXG4gICAgICBoZWFkZXI6ICdEZWxldGUgQ29uZmlybWF0aW9uJyxcbiAgICAgIGljb246ICdwaSBwaS1leGNsYW1hdGlvbi10cmlhbmdsZScsXG4gICAgICBrZXk6ICdoYW5kbGVJbmxpbmVDUlVEJyxcbiAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy51c2VTZXJ2ZXJTaWRlRXZlbnRzKSB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzZXQgdGhlIGdyaWQgZGVsZXRlZCBkYXRhIFxuICAgICAgICB0aGlzLnJvd0FjdGlvbkV2ZW50cyhyb3csIHRydWUpO1xuICAgICAgICB0aGlzLm9uUm93RGVsZXRlLmVtaXQocm93KTtcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNsb3NlKCk7XG4gICAgICAgIHRoaXMuaW5FZGl0TW9kZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICByZWplY3Q6ICgpID0+IHtcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNsb3NlKCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvIHNldCBkaXNhYmxlZCB0aGUgY29udHJvbFxuICAgKi9cbiAgYWxsb3dEaXNhYmxlZChjb2x1bW46IGFueSwgcm93OiBhbnkpOiBib29sZWFuIHtcbiAgICBsZXQgdmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBpZiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gJiYgdHlwZW9mIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSkgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIE9iamVjdC5rZXlzKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddKT8uaW5jbHVkZXMoJ2Rpc2FibGVkJykgJiYgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc2FibGVkID09PSB0cnVlXG4gICAgICApIHtcbiAgICAgICAgdmFsdWUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoXG4gICAgICAgIE9iamVjdC5rZXlzKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddKT8uaW5jbHVkZXMoJ3Jvd0Rpc2FibGVkJykgJiYgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnJvd0Rpc2FibGVkID09PSB0cnVlXG4gICAgICApIHtcbiAgICAgICAgdmFsdWUgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29sdW1uLmRpc2FibGVkKSB7XG4gICAgICB2YWx1ZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUbyBzZXQgYWdncmVnYXRlIGluIGdyaWQgZm9vdGVyXG4gICAqL1xuICBzZXRBZ2dyZWdhdGVUZXh0KGNvbHVtbjogSUdyaWRDb2x1bW4pIHtcbiAgICBpZiAoY29sdW1uPy5hZ2dyZWdhdGUpIHtcbiAgICAgIGNvbHVtbi5hZ2dyZWdhdGUuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHRoaXMucm93c0RhdGEgJiYgdGhpcy5yb3dzRGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbGV0IGNvbHVtblR5cGU6IEVHcmlkQWdncmVnYXRlID0gY29sLnR5cGU7XG4gICAgICAgICAgaWYgKGNvbHVtblR5cGUgPT09IEVHcmlkQWdncmVnYXRlLkNPVU5UKSB7XG4gICAgICAgICAgICBsZXQgY291bnQgPSB0aGlzLnJvd3NEYXRhLmxlbmd0aDtcbiAgICAgICAgICAgIGNvdW50ID0gdGhpcy5zZXRGZXRjaEFnZ3JlZ2F0ZWRWYWx1ZShjb2x1bW4sIGNvdW50LCAxKTtcbiAgICAgICAgICAgIGNvbC5hZ2dyVmFsdWUgPSB0aGlzLnNldEFnZ3JlZ2F0ZUZvb3RlclRleHQoY29sLCBjb3VudCwgJ0NvdW50Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29sdW1uVHlwZSA9PT0gRUdyaWRBZ2dyZWdhdGUuU1VNIHx8XG4gICAgICAgICAgICBjb2x1bW5UeXBlID09PSBFR3JpZEFnZ3JlZ2F0ZS5BVkVSQUdFXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBjb2xWYWx1ZXM6IG51bWJlcltdID0gdGhpcy5nZXRDb2x1bW5WYWx1ZXMoY29sdW1uKTtcbiAgICAgICAgICAgIGlmIChjb2xWYWx1ZXMgJiYgY29sVmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgbGV0IHN1bSA9IGNvbFZhbHVlcy5yZWR1Y2UoKGFjYywgY3VyKSA9PiBhY2MgKyBjdXIsIDApO1xuICAgICAgICAgICAgICBpZiAoY29sdW1uVHlwZSA9PT0gRUdyaWRBZ2dyZWdhdGUuU1VNKSB7XG4gICAgICAgICAgICAgICAgc3VtID0gdGhpcy5zZXRGZXRjaEFnZ3JlZ2F0ZWRWYWx1ZShjb2x1bW4sIHN1bSwgMik7XG4gICAgICAgICAgICAgICAgY29sLmFnZ3JWYWx1ZSA9IHRoaXMuc2V0QWdncmVnYXRlRm9vdGVyVGV4dChjb2wsIHN1bSwgJ1N1bScpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChjb2x1bW5UeXBlID09PSBFR3JpZEFnZ3JlZ2F0ZS5BVkVSQUdFKSB7XG4gICAgICAgICAgICAgICAgbGV0IGF2ZXJhZ2UgPSBzdW0gLyBjb2xWYWx1ZXMubGVuZ3RoIHx8IDA7XG4gICAgICAgICAgICAgICAgYXZlcmFnZSA9IHRoaXMuc2V0RmV0Y2hBZ2dyZWdhdGVkVmFsdWUoY29sdW1uLCBhdmVyYWdlLCAzKTtcbiAgICAgICAgICAgICAgICBjb2wuYWdnclZhbHVlID0gdGhpcy5zZXRBZ2dyZWdhdGVGb290ZXJUZXh0KFxuICAgICAgICAgICAgICAgICAgY29sLFxuICAgICAgICAgICAgICAgICAgYXZlcmFnZSxcbiAgICAgICAgICAgICAgICAgICdBdmcnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2wuYWdnclZhbHVlID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNldCB0aGUgYWdncmVnYXRhaW9uIHZhbHVlIHRoYXQgY29taW5nIGZyb20gZmV0Y2hcbiAgc2V0RmV0Y2hBZ2dyZWdhdGVkVmFsdWUoY29sdW1uLCBhZ2dyZWdhdGVWYWx1ZSwgYWdncmVnYXRlQWN0aW9uKSB7XG4gICAgaWYgKHRoaXMuYWdncmVnYXRlZFJlc3VsdD8ubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgYWdncmVnYXRlZENvbHVtbiA9IHRoaXMuYWdncmVnYXRlZFJlc3VsdC5maW5kKChhZ2dyZWdhdGUpID0+IGFnZ3JlZ2F0ZS5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICYmIGFnZ3JlZ2F0ZS5hZ2dyZWdhdGlvbk9wZXJhdGlvbiA9PT0gYWdncmVnYXRlQWN0aW9uKTtcbiAgICAgIGlmIChhZ2dyZWdhdGVkQ29sdW1uKSB7XG4gICAgICAgIGFnZ3JlZ2F0ZVZhbHVlID0gYWdncmVnYXRlZENvbHVtbj8udmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIGFnZ3JlZ2F0ZVZhbHVlID0gaXNOYU4oTnVtYmVyKGFnZ3JlZ2F0ZVZhbHVlKSkgPyAwIDogTnVtYmVyKGFnZ3JlZ2F0ZVZhbHVlKTtcbiAgICByZXR1cm4gYWdncmVnYXRlVmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogc2V0IGdyaWQgQWdncmVnYXRlIHZhbHVlc1xuICAgKi9cbiAgc2V0QWdncmVnYXRlRm9vdGVyVGV4dChjb2x1bW46IGFueSwgdmFsdWU6IG51bWJlciwgZGVmYXVsdENhcHRpb246IHN0cmluZykge1xuICAgIGNvbnN0IGlzRGVjaW1hbCA9IGNvbHVtbi5mb3JtYXQ/LnR5cGUgPT09ICdkZWNpbWFsJztcbiAgICBjb25zdCBmb3JtYXRQYXJhbXMgPSBjb2x1bW4uZm9ybWF0Py5mb3JtYXRQYXJhbXM7XG4gICAgY29uc3QgZGlnaXRzSW5mbyA9IGNvbHVtbi5mb3JtYXQ/LmRpZ2l0c0luZm87XG4gICAgY29uc3QgbWluRnJhY3Rpb25EaWdpdHMgPSBmb3JtYXRQYXJhbXM/Lm1pbkZyYWN0aW9uRGlnaXRzID8/IGRpZ2l0c0luZm8gPz8gMjtcbiAgICBjb25zdCBtYXhGcmFjdGlvbkRpZ2l0cyA9IGZvcm1hdFBhcmFtcz8ubWF4RnJhY3Rpb25EaWdpdHMgPz8gZGlnaXRzSW5mbyA/PyAyO1xuICAgIGNvbnN0IGNhcHRpb24gPSBjb2x1bW4uY2FwdGlvbj8ubGVuZ3RoID4gMCA/IGNvbHVtbi5jYXB0aW9uIDogZGVmYXVsdENhcHRpb247XG5cbiAgICBpZiAoIWlzRGVjaW1hbCkgcmV0dXJuIGAke2NhcHRpb259ICR7dmFsdWU/LnRvRml4ZWQoMCk/LnJlcGxhY2UoL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2csICcsJyl9IDwvYnI+YDtcbiAgICBjb25zdCBkZWNpbWFsUG9pbnQgPSAoKCkgPT4ge1xuICAgICAgY29uc3QgZmFjdG9yID0gMTAgKiogbWF4RnJhY3Rpb25EaWdpdHM7XG4gICAgICBjb25zdCBbaW50UGFydCwgZGVjUGFydCA9ICcnXSA9IChNYXRoLnRydW5jKHZhbHVlICogZmFjdG9yKSAvIGZhY3Rvcik/LnRvU3RyaW5nKCk/LnNwbGl0KCcuJyk7XG4gICAgICByZXR1cm4gaW50UGFydC5yZXBsYWNlKC9cXEIoPz0oXFxkezN9KSsoPyFcXGQpKS9nLCAnLCcpICsgJy4nICsgZGVjUGFydD8ucGFkRW5kKG1pbkZyYWN0aW9uRGlnaXRzLCAnMCcpO1xuICAgIH0pKCk7XG4gICAgcmV0dXJuIGAke2NhcHRpb259ICR7ZGVjaW1hbFBvaW50fSA8L2JyPmA7XG4gIH1cblxuICAvKipcbiAgICogc2V0IGRlY2ltYXQgYW5kIG51bWVyaWMgdmFsdWVzXG4gICAqL1xuICBhbGxvd0xlYWRpbmdEb3QoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50Py50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBpZiAoZXZlbnQ/LmtleSA9PT0gJy4nICYmIGlucHV0Py5zZWxlY3Rpb25TdGFydCA9PT0gMCkge1xuICAgICAgaW5wdXQudmFsdWUgPSAnMC4nO1xuICAgICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cbiAgc2V0TnVtZXJpY1ZhbHVlcygpIHtcbiAgICBpZiAodGhpcy5jb2x1bW5zPy5sZW5ndGggPiAwICYmIHRoaXMucm93c0RhdGE/Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xuICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5OVU1FUklDKSB7XG4gICAgICAgICAgY29uc3QgZGlnaXRzSW5mbyA9IGNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm87XG4gICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgIGlmIChjb2x1bW4/LmZvcm1hdD8udHlwZSA9PT0gJ3BlcmNlbnQnICYmIHJvd1tjb2x1bW4uZmllbGRdKSB7XG4gICAgICAgICAgICAgIGlmIChjb2x1bW4uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmFsbG93Q2FsY3VsYXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRpZ2l0c0luZm8pIHtcbiAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcGFyc2VGbG9hdCgocm93W2NvbHVtbi5maWVsZF0gKiAxMDApPy50b1N0cmluZygpKS50b0ZpeGVkKGRpZ2l0c0luZm8pOyAgICAgICAgIC8vVEhFU0UgQ09NTUVOVEVEIE9VVCBMSU5FUyBTSE9VTEQgUlVOIE9OIFNBVkVcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXSAqIDEwMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGlnaXRzSW5mbykge1xuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcGFyc2VGbG9hdChyb3dbY29sdW1uLmZpZWxkXSkudG9GaXhlZChkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4/LmZvcm1hdD8udHlwZSA9PT0gJ2RlY2ltYWwnICYmIHJvd1tjb2x1bW4uZmllbGRdKSB7XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcGFyc2VGbG9hdChyb3dbY29sdW1uLmZpZWxkXSkudG9GaXhlZCgzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogZ2V0IGNvbHVtbiB2YWx1ZSBiYXNlZCBvbiBjb2x1bW4gZmllbGRcbiAgICovXG4gIGdldENvbHVtblZhbHVlcyhjb2x1bW46IElHcmlkQ29sdW1uKTogbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLnJvd3NEYXRhXG4gICAgICAubWFwKChyb3cpID0+IHtcbiAgICAgICAgY29uc3Qgb2JqVGV4dCA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy50ZXh0O1xuICAgICAgICBsZXQgdmFsdWUgPSBvYmpUZXh0ICE9IG51bGwgPyBvYmpUZXh0IDogcm93W2NvbHVtbi5maWVsZF07XG4gICAgICAgIHJldHVybiBpc05hTihOdW1iZXIodmFsdWUpKSA/IDAgOiBOdW1iZXIodmFsdWUpO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKHZhbCkgPT4gdmFsICE9IG51bGwpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEV4cG9ydCB0byBQREZcbiAgICovXG4gIGV4cG9ydFBkZigpIHtcbiAgICB2YXIgZXhwb3J0RGF0YSA9IHRoaXMuc2V0RXhwb3J0RGF0YShbLi4udGhpcy5yb3dzRGF0YV0sIHRydWUpO1xuICAgIGxldCBkb2MgPSBuZXcganNQREYoJ3AnLCAncHQnKTtcbiAgICBkb2MudGFibGUoMSwgMSwgZXhwb3J0RGF0YS5yb3dzLCBleHBvcnREYXRhLmhlYWRpbmdzLCB7IGF1dG9TaXplOiB0cnVlIH0pO1xuICAgIGRvYy5zYXZlKCdFeHBvcnQucGRmJyk7XG4gIH1cblxuICAvKipcbiAgICogIFN1Yi1mdW5jdGlvbiB0byBzZXQgcm93cyBmb3IgZXhwb3J0IHRvIFBkZiwgYW5kIEV4Y2VsXG4gICAqIEByb3dzIHBhcmFtIGZvciByb3dzXG4gICAqIEBpc0V4Y2VsIHBhcmFtIGZvciBleHBvcnQgdG8gZXhjZWwgaW5kaWNhdGlvblxuICAgKi9cbiAgc2V0RXhwb3J0RGF0YShyb3dzOiBhbnlbXSA9IFtdLCBpc1BkZjogYm9vbGVhbiA9IGZhbHNlKTogSUdyaWREYXRhRXhwb3J0IHtcbiAgICBjb25zdCBoZWFkaW5nczogYW55ID0gdGhpcy5jb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4uZmllbGQpO1xuICAgIHJvd3MuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICBmb3IgKHZhciBwcm9wIGluIHJvdykge1xuICAgICAgICBpZiAoIWhlYWRpbmdzLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgZGVsZXRlIHJvd1twcm9wXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQZGYpIHtcbiAgICAgICAgICByb3dbcHJvcF0gPVxuICAgICAgICAgICAgIXJvd1twcm9wXSAmJiB0eXBlb2Ygcm93W3Byb3BdICE9PSAnYm9vbGVhbidcbiAgICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgICA6IHJvd1twcm9wXS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHsgcm93cywgaGVhZGluZ3MgfTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBFeHBvcnQgdG8gRXhjZWxcbiAgICovXG4gIGV4cG9ydEV4Y2VsKCkge1xuICAgIGlmICh0aGlzLmNvbmZpZ1NlcnZpY2UuZXhwb3J0VG9FeGNlbD8udW5pcXVlS2V5KSB7XG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5nZXRVc2Vyc0RhdGEoKS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGxldCByb3dzID0gdGhpcy5ncmlkU2VydmljZS5zZXREYXRhRmllbGRzKHJlc3BvbnNlPy5yZWNvcmRzKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZXhwb3J0RmlsZShyb3dzKTtcbiAgICAgIH0sXG4gICAgICAgICh7IGVycm9yIH0pID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hcGlFcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZXhwb3J0RmlsZSh0aGlzLnJvd3NEYXRhKTtcbiAgICB9XG4gIH1cblxuICBleHBvcnRGaWxlKHJlY29yZHMpIHtcbiAgICBsZXQgYXJyOiBhbnkgPSBbXTtcbiAgICByZWNvcmRzLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICBsZXQgb2JqOiBhbnkgPSB7fTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGdyaWRIZWFkZXIgPSBjb2x1bW4uaGVhZGVyO1xuICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MSU5LKSB7XG4gICAgICAgICAgY29uc3QgbGlua09iaiA9IHJvd1tjb2x1bW4uZGlzcGxheVRleHQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddO1xuICAgICAgICAgIG9ialtncmlkSGVhZGVyXSA9IHJvd1tjb2x1bW4uZmllbGRdICsgJ3wnICsgbGlua09iaj8uaHlwZXJsaW5rO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9ialtncmlkSGVhZGVyXSA9IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGFyci5wdXNoKG9iaik7XG4gICAgfSk7XG4gICAgdGhpcy5ncmlkU2VydmljZS5leHBvcnRFeGNlbChhcnIsIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLCBFR3JpZEV4Y2VsLkVYUE9SVCk7XG4gIH1cbiAgZ2V0VXNlcnNEYXRhKCkge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RTZXJ2aWNlLmdldDxhbnlbXSwgUmVxdWVzdER0bz4oJy9EYXRhL0ZldGNoJywge1xuICAgICAgdW5pcXVlS2V5OiB0aGlzLmNvbmZpZ1NlcnZpY2UuZXhwb3J0VG9FeGNlbD8udW5pcXVlS2V5LFxuICAgICAgZmlsdGVyczogdGhpcy5jb25maWdTZXJ2aWNlLmV4cG9ydFRvRXhjZWw/LmZpbHRlcnMsXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqc2V0IGNvbmZpZyBkYXRhIG9mIGxvb2t1cCBjb250cm9sIGRpYWxvZ1xuICAgKi9cbiAgc2V0TG9va3VwRGlhbG9nQ29uZmlnKHJvdzogYW55LCBjb2x1bW46IGFueSwgZGF0YTogYW55KSB7XG4gICAgbGV0IHNlbGVjdGlvbjogc3RyaW5nID0gJyc7XG4gICAgaWYgKHJvd1tjb2x1bW4uZmllbGRdICYmIHR5cGVvZiByb3dbY29sdW1uLmZpZWxkXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHNlbGVjdGlvbiA9IHJvd1tjb2x1bW4uZmllbGRdLnRleHQ7XG4gICAgfSBlbHNlIGlmIChjb2x1bW4uZGlzcGxheUZpZWxkICYmIHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXSkge1xuICAgICAgc2VsZWN0aW9uID0gcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWxlY3Rpb24gPSByb3dbY29sdW1uLmZpZWxkXTtcbiAgICB9XG5cbiAgICBpZiAoY29sdW1uLmZpZWxkICYmIHR5cGVvZiByb3dbY29sdW1uLmZpZWxkXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnN0IG5ld1JvdyA9IHsgLi4ucm93IH07XG4gICAgICBuZXdSb3dbY29sdW1uLmZpZWxkXSA9IG5ld1Jvd1tjb2x1bW4uZmllbGRdPy52YWx1ZTtcbiAgICAgIHJvdyA9IHsgLi4ubmV3Um93IH07XG4gICAgfVxuXG4gICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUICYmIGRhdGEpIHtcbiAgICAgIGxldCBvYmogPSBhdXRvU2V0TG9va3VwRGF0YShkYXRhLCByb3cpO1xuICAgICAgcm93W2NvbHVtbi5maWVsZCArICctZGF0YSddID0gb2JqO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgcm93RGF0YTogcm93W2NvbHVtbi5maWVsZCArICctZGF0YSddLFxuICAgICAgc2VsZWN0aW9uOiBzZWxlY3Rpb24sXG4gICAgICBjb2x1bW46IGNvbHVtbixcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIG9wZW4gbGluayBvbiBsb29rdXBDb250cm9sIGNvbnRyb2wgaW4gcmVhZCBvbmx5IG1vZGUgd2hlbiBlZGl0TGluayBzZXQgdHJ1ZVxuICAgKi9cbiAgb3Blbkxvb2t1cEh5cGVybGluayhjb2x1bW46IElHcmlkQ29sdW1uLCByb3c6IGFueSkge1xuICAgIGNvbnN0IGxvb2t1cEluZm8gPSBjb2x1bW4ubG9va3VwQ29udHJvbDtcbiAgICBpZiAoY29sdW1uLmVkaXRMaW5rID09PSB0cnVlICYmIGxvb2t1cEluZm8uY29tcG9uZW50KSB7XG4gICAgICBjb25zdCBkYXRhID0gbG9va3VwSW5mby5kYXRhID8gbG9va3VwSW5mby5kYXRhIDogbG9va3VwSW5mby5kYXRhLmRhdGE7XG4gICAgICBsZXQgb2JqOiBhbnkgPSB0aGlzLnNldExvb2t1cERpYWxvZ0NvbmZpZyhyb3csIGNvbHVtbiwgZGF0YSk7XG4gICAgICBvYmpbJ2NvbXBvbmVudCddID0gbG9va3VwSW5mby5jb21wb25lbnQ7XG4gICAgICBjb25zdCByZWYgPSB0aGlzLm9wZW5Mb29rdXBEaWFsb2cob2JqKTtcbiAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAgIC5waXBlKHRha2UoMSkpIC8vIEVtaXQgb25seSBvbmNlIHdoZW4gdGhlIHpvbmUgYmVjb21lcyBzdGFibGVcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgZHJhZ2dhYmxlRGlhbG9nKGNvbHVtbj8uZmllbGQgPyBjb2x1bW4/LmZpZWxkIDogY29sdW1uPy5oZWFkZXIpXG4gICAgICAgIH0pO1xuICAgICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgaWYgKHJlcyAmJiBjb2x1bW4ub25SZXR1cm4pIHtcbiAgICAgICAgICBjb2x1bW4ub25SZXR1cm4ocmVzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIG9wZW4gbG9va3VwIERpYWxvZ1xuICAgKi9cbiAgb3Blbkxvb2t1cERpYWxvZyhjb2x1bW4/OiBhbnksIHJvdzogYW55ID0ge30pIHtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQgPSBmYWxzZTtcbiAgICB0aGlzLmZvcm1TZXJ2aWNlLmZpZWxkRm9jdXNlZE91dCA9IGZhbHNlO1xuICAgIGNvbnN0IGNvbHVtbkRhdGEgPSBjb2x1bW4uY29sdW1uPy5sb29rdXBDb250cm9sPy5kYXRhID8gY29sdW1uLmNvbHVtbi5sb29rdXBDb250cm9sLmRhdGEgOiBjb2x1bW4uY29sdW1uLmRhdGE7XG4gICAgaWYgKHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbCkge1xuICAgICAgcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy5oZWFkZXIgPyBjb2x1bW5EYXRhLmhlYWRlciA9IHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8uaGVhZGVyIDogJydcbiAgICAgIHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8ud2lkdGggPyBjb2x1bW5EYXRhLndpZHRoID0gcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy53aWR0aCA6ICcnXG4gICAgICByb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmhlaWdodCA/IGNvbHVtbkRhdGEuaGVpZ2h0ID0gcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy5oZWlnaHQgOiAnJ1xuICAgICAgcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy52YWx1ZVByb3AgPyBjb2x1bW5EYXRhLnZhbHVlUHJvcCA9IHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8udmFsdWVQcm9wIDogXCJcIlxuICAgICAgcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy5sYWJlbFByb3AgPyBjb2x1bW5EYXRhLmxhYmVsUHJvcCA9IHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8ubGFiZWxQcm9wIDogXCJcIlxuICAgICAgcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy5kYXRhID8gY29sdW1uRGF0YS5kYXRhID0gcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy5kYXRhIDogJydcbiAgICB9XG5cbiAgICB0aGlzLmRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKGNvbHVtbi5jb21wb25lbnQsIHtcbiAgICAgIC4uLmNvbHVtbkRhdGEsXG4gICAgICBzdHlsZUNsYXNzOiAnbG9va3VwLW1vZGVsJyxcbiAgICAgIGhlaWdodDogY29sdW1uRGF0YT8uaGVpZ2h0ID8gY29sdW1uRGF0YT8uaGVpZ2h0IDogJzkwdmgnLFxuICAgICAgZGF0YToge1xuICAgICAgICBzZWxlY3Rpb246IGNvbHVtbi5zZWxlY3Rpb24sXG4gICAgICAgIGZpZWxkOiBjb2x1bW4uY29sdW1uLmZpZWxkLFxuICAgICAgICBsYWJlbFByb3A6IGNvbHVtbi5jb2x1bW4ubG9va3VwQ29udHJvbD8uZGF0YT8ubGFiZWxQcm9wLFxuICAgICAgICAuLi5jb2x1bW4ucm93RGF0YSxcbiAgICAgIH0sXG4gICAgICBjbG9zYWJsZTogdHJ1ZSxcbiAgICAgIGZvY3VzT25TaG93OiBmYWxzZVxuICAgIH0pO1xuICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWZbJ2RpYWxvZ0Nsb3NlJ10gPSB0aGlzLmRpYWxvZ1JlZi5jbG9zZTtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UgPSB0aGlzLmludGVyY2VwdERpYWxvZ0Nsb3NlLmJpbmQodGhpcywgdGhpcy5kaWFsb2dSZWYpO1xuICAgICAgfSk7XG5cbiAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgIHRoaXMuZGlhbG9nUmVmWydkaWFsb2dDbG9zZSddID0gdGhpcy5kaWFsb2dSZWYuY2xvc2U7XG4gICAgLy8gICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSA9IHRoaXMuaW50ZXJjZXB0RGlhbG9nQ2xvc2UuYmluZCh0aGlzKTtcbiAgICAvLyB9LCA4MDApO1xuXG4gICAgdGhpcy5zZXREeW5hbWljRGlhbG9nUmVmKHRoaXMuZGlhbG9nUmVmKTtcbiAgICBjb25zdCBjb21wb25lbnROYW1lID0gcm93W2NvbHVtbi5jb2x1bW4uZmllbGRdPy5uYW1lO1xuICAgIGlmIChjb21wb25lbnROYW1lKSB7XG4gICAgICB0aGlzLnBhZ2VMb2dnZXJTZXJ2aWNlLnNhdmVQYWdlTG9nZ2VySW5mbyh0aGlzLnJvdXRlci51cmw/LnN1YnN0cmluZygxKSwgY29tcG9uZW50TmFtZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRpYWxvZ1JlZjtcbiAgfVxuXG4gIGludGVyY2VwdERpYWxvZ0Nsb3NlKGRpYWxvZ1JlZjogYW55LCBldmVudDogYW55KSB7XG4gICAgY29uc3QgZGlhbG9nRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdwLWRpYWxvZycpO1xuICAgIGlmICghZGlhbG9nRWwpIHtcbiAgICAgIGRpYWxvZ1JlZj8uZGlhbG9nQ2xvc2UoZXZlbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmb3JtU2F2ZUJ1dHRvbiA9IGRpYWxvZ0VsWzBdPy5xdWVyeVNlbGVjdG9yKCcuZm9ybS1zYXZlLWJ1dHRvbicpO1xuICAgIGNvbnN0IGdyaWRTYXZlQWxsQnV0dG9uID0gZGlhbG9nRWxbMF0/LnF1ZXJ5U2VsZWN0b3IoJy5zYXZlLWFsbC1ncmlkJyk7XG4gICAgY29uc3QgaGFzVW5zYXZlZCA9IChmb3JtU2F2ZUJ1dHRvbiB8fCBncmlkU2F2ZUFsbEJ1dHRvbikgJiYgKHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCB8fCB0aGlzLmZvcm1TZXJ2aWNlLmZpZWxkRm9jdXNlZE91dCk7XG4gICAgaWYgKGhhc1Vuc2F2ZWQpIHtcbiAgICAgIGlmIChjb25maXJtKFwiWW91IHdpbGwgbG9zZSBjaGFuZ2VzIG5vdCBzYXZlZCBvbiBwYWdlLiBXb3VsZCB5b3UgbGlrZSB0byBjb250aW51ZT9cIikpIHtcbiAgICAgICAgZGlhbG9nUmVmPy5kaWFsb2dDbG9zZShldmVudCk7XG4gICAgICAgIHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkaWFsb2dSZWY/LmRpYWxvZ0Nsb3NlKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICAvLyBzZXQgZGlhbG9nIHJlZiB3aGVuIHBvcHVwIG9wZW5cbiAgc2V0RHluYW1pY0RpYWxvZ1JlZihyZWYpIHtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2UuZGlhbG9nQ29tcG9uZW50UmVmTWFwLmdldChyZWYpO1xuICAgIGNvbnN0IGR5bmFtaWNDb21wb25lbnQgPSBkaWFsb2dSZWY/Lmluc3RhbmNlIGFzIER5bmFtaWNEaWFsb2dDb21wb25lbnQ7XG4gICAgY29uc3QgYXJpYUxhYmVsbGVkQnkgPSBkeW5hbWljQ29tcG9uZW50LmdldEFyaWFMYWJlbGxlZEJ5KCk7XG4gICAgZHluYW1pY0NvbXBvbmVudC5nZXRBcmlhTGFiZWxsZWRCeSA9ICgpID0+IGFyaWFMYWJlbGxlZEJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIG9wZW4gZGlhbG9nIG9uIGxvb2t1cENvbnRyb2wgZmllbGRcbiAgICovXG4gIHNlbGVjdExvb2t1cEZpZWxkKGNvbHVtbjogYW55LCByb3c/OiBhbnkpIHtcbiAgICB0aGlzLm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdyk7XG4gICAgbGV0IG9iajogYW55ID0gdGhpcy5zZXRMb29rdXBEaWFsb2dDb25maWcoXG4gICAgICByb3csXG4gICAgICBjb2x1bW4sXG4gICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8uZGF0YVxuICAgICAgICA/IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy5kYXRhIDogY29sdW1uPy5sb29rdXBDb250cm9sPy5kYXRhPy5kYXRhXG4gICAgKTtcblxuICAgIG9ialsnY29tcG9uZW50J10gPSByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uY29tcG9uZW50ID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmNvbXBvbmVudCA6IGNvbHVtbi5sb29rdXBDb250cm9sPy5jb21wb25lbnQ7XG4gICAgY29uc3QgcmVmID0gdGhpcy5vcGVuTG9va3VwRGlhbG9nKG9iaiwgcm93KTtcbiAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgLnBpcGUodGFrZSgxKSkgLy8gRW1pdCBvbmx5IG9uY2Ugd2hlbiB0aGUgem9uZSBiZWNvbWVzIHN0YWJsZVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGRyYWdnYWJsZURpYWxvZyhjb2x1bW4/LmZpZWxkID8gY29sdW1uPy5maWVsZCA6IGNvbHVtbj8uaGVhZGVyKVxuICAgICAgfSk7XG4gICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKFxuICAgICAgKHJlcykgPT4ge1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgaWYgKCFyb3cuX2lzRWRpdGVkKSB7XG4gICAgICAgICAgICByb3cuX2lzRWRpdGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcm93Ll9pc0VkaXRlZCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5ncmlkU2VydmljZS51c2VyU2VhcmNoZWQgPSBmYWxzZTtcbiAgICAgICAgICBsZXQgdmFsdWUgPSBzZXREaWFsb2dSZXNwb25zZShcbiAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICAgIGNvbHVtbi5sb29rdXBDb250cm9sLFxuICAgICAgICAgICAgcmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXMgPSBvYmpDb252ZXJ0VG9Mb3dlcihyZXMpO1xuICAgICAgICAgIGxldCBsYWJlbFByb3AgPSBjb2x1bW4/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmxhYmVsUHJvcD8udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBsZXQgdmFsdWVQcm9wID0gY29sdW1uPy5sb29rdXBDb250cm9sPy5kYXRhPy52YWx1ZVByb3A/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgbGV0IGNvbHVtbkZpZWxkID0gY29sdW1uPy5maWVsZD8udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBpZiAoY29sdW1uLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgICAgaWYgKHJvdz8uaGFzT3duUHJvcGVydHkoY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbkZpZWxkXSA9IHJlc1t2YWx1ZVByb3AgPyB2YWx1ZVByb3AgOiBjb2x1bW5GaWVsZF07XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXSA9IHJlc1tsYWJlbFByb3AgPyBsYWJlbFByb3AgOiBjb2x1bW4uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbkZpZWxkXSA9IHtcbiAgICAgICAgICAgICAgICB0ZXh0OiByZXNbbGFiZWxQcm9wID8gbGFiZWxQcm9wIDogY29sdW1uLmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogcmVzW3ZhbHVlUHJvcCA/IHZhbHVlUHJvcCA6IGNvbHVtbkZpZWxkXSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgJiYgdmFsdWUudmFsdWUpIHtcbiAgICAgICAgICAgIHZhbHVlWydmaWVsZCddID0gY29sdW1uRmllbGQ7XG4gICAgICAgICAgICBpZiAobGFiZWxQcm9wIHx8IHZhbHVlUHJvcCkge1xuICAgICAgICAgICAgICByb3dbY29sdW1uRmllbGRdID0ge1xuICAgICAgICAgICAgICAgIHRleHQ6IHJlc1tsYWJlbFByb3AgPyBsYWJlbFByb3AgOiByZXNbbGFiZWxQcm9wXV0sXG4gICAgICAgICAgICAgICAgdmFsdWU6IHJlc1t2YWx1ZVByb3AgPyB2YWx1ZVByb3AgOiByZXNbbGFiZWxQcm9wXV0sXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByb3dbY29sdW1uRmllbGRdID0gdmFsdWUudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChsYWJlbFByb3AgfHwgdmFsdWVQcm9wKSB7XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW5GaWVsZF0gPSB7XG4gICAgICAgICAgICAgICAgdGV4dDogcmVzW2xhYmVsUHJvcCA/IGxhYmVsUHJvcCA6IHZhbHVlUHJvcCA/IHZhbHVlUHJvcCA6IHJlc1tjb2x1bW5GaWVsZF1dLFxuICAgICAgICAgICAgICAgIHZhbHVlOiByZXNbdmFsdWVQcm9wID8gdmFsdWVQcm9wIDogcmVzW2NvbHVtbkZpZWxkXV0sXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByb3dbY29sdW1uRmllbGRdID0gcmVzW2NvbHVtbkZpZWxkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiAocm93W2NvbHVtbi5maWVsZF0pID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gPSB7IC4uLnJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLCB0ZXh0OiByb3dbY29sdW1uLmZpZWxkXSB9O1xuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF0/LnZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5kaXNwbGF5RmllbGQpIHtcbiAgICAgICAgICBpZiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10pIHtcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddID0geyAuLi5yb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSwgdGV4dDogeyB0ZXh0OiByb3dbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV0sIHZhbHVlOiByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXSB9IH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddID0geyB0ZXh0OiB7IHRleHQ6IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXSwgdmFsdWU6IHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldIH0gfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocmVzKSB7XG4gICAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gPSB7IC4uLnJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLCB0ZXh0OiB7IHRleHQ6IHJlc1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldLCB2YWx1ZTogcmVzW2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0gfSB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2x1bW4ub25SZXR1cm4pIHtcbiAgICAgICAgICBjb2x1bW4ub25SZXR1cm4ocmVzLCByb3cpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3dbY29sdW1uLmZpZWxkXSAhPT0gb2JqLnNlbGVjdGlvbikge1xuICAgICAgICAgIHRoaXMuYnJvd3NlckNsb3NlRXZlbnQodHJ1ZSk7XG4gICAgICAgICAgaWYgKGNvbHVtbi5vbkNoYW5nZSkge1xuICAgICAgICAgICAgY29sdW1uLm9uQ2hhbmdlKHJvdyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKHsgZXJyb3IgfSkgPT4ge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hcGlFcnJvcihlcnJvcik7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHNldEZpbHRlckxvb2t1cChjb2x1bW46IGFueSkge1xuICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc2V0TG9va1VwRmlsdGVyKGNvbHVtbiwgdGhpcy5kaWFsb2dTZXJ2aWNlKTtcbiAgfVxuXG4gIC8vIHNldCBsb29rdXAgdmFsdWUgdGhhdCBkaXNwbGF5IGluIHJlYWRPbmx5TW9kZVxuICBzZXRMb29rdXBSZWFkT25seVZhbHVlKHJvdywgY29sdW1uKSB7XG4gICAgbGV0IHZhbHVlID0gJyc7XG4gICAgaWYgKHR5cGVvZiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnRleHQpID09PSBcIm9iamVjdFwiICYmIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy50ZXh0ICYmIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8udGV4dCk/Lmhhc093blByb3BlcnR5KCd0ZXh0JykpIHtcbiAgICAgIHZhbHVlID0gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnRleHQudGV4dDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSByb3dbY29sdW1uLmZpZWxkXTtcbiAgICAgIGlmIChjb2x1bW4uZGlzcGxheUZpZWxkKSB7XG4gICAgICAgIHZhbHVlID0gcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSByb3dbY29sdW1uLmZpZWxkXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLy8gQ2hlY2sgY2FsZW5kYXIgdmFsdWUgaXMgY2hhbmdlZCBvciBub3RcbiAgY2FsZW5kYXJDaGFuZ2VFdmVudChjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcbiAgICBsZXQgdmFsdWVDaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBpZiAoXG4gICAgICBjb2x1bW4udGltZU9ubHkgJiZcbiAgICAgIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJvd1tjb2x1bW4uZmllbGRdLCAnaGg6bW0gYScpICE9PVxuICAgICAgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5jYWxlbmRhclByZXZpb3VzVmFsdWUsICdoaDptbSBhJylcbiAgICApIHtcbiAgICAgIHZhbHVlQ2hhbmdlID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgY29sdW1uLnNob3dUaW1lICYmXG4gICAgICB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyb3dbY29sdW1uLmZpZWxkXSwgJ3l5eXktTU0tZGQgaGg6bW0nKSAhPT1cbiAgICAgIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuY2FsZW5kYXJQcmV2aW91c1ZhbHVlLCAneXl5eS1NTS1kZCBoaDptbScpXG4gICAgKSB7XG4gICAgICB2YWx1ZUNoYW5nZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJvd1tjb2x1bW4uZmllbGRdLCAneXl5eS1NTS1kZCcpICE9PVxuICAgICAgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5jYWxlbmRhclByZXZpb3VzVmFsdWUsICd5eXl5LU1NLWRkJylcbiAgICApIHtcbiAgICAgIHZhbHVlQ2hhbmdlID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHZhbHVlQ2hhbmdlKSB7XG4gICAgICB0aGlzLmJyb3dzZXJDbG9zZUV2ZW50KHRydWUpO1xuICAgICAgdGhpcy5nZW5lcmF0ZVJvd3NEYXRhQ29weSA9IGZhbHNlO1xuICAgICAgdGhpcy5yb3dVcGRhdGVDaGFuZ2UgPSB0cnVlO1xuXG4gICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICAgICAgICB9KTtcbiAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgICAgIC8vIH0sIDI1MCk7XG4gICAgICBpZiAoY29sdW1uLm9uQ2hhbmdlKSB7XG4gICAgICAgIGNvbHVtbi5vbkNoYW5nZShyb3cpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNhbGVuZGFyUHJldmlvdXNWYWx1ZSA9ICcnO1xuICB9XG5cbiAgc2V0QXV0b0NvbXBsZXRldmFsdWVPblR5cGUoY29sdW1uOiBhbnksIHJvdzogYW55LCBldmVudDogYW55ID0gW10pIHtcbiAgICBsZXQgdmFsdWUgPSBldmVudD8udGFyZ2V0Py52YWx1ZTtcbiAgICBsZXQgZmllbGQgPSBjb2x1bW4/LmZpZWxkPy50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkFVVE9DT01QTEVURSAmJiB2YWx1ZSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IHZhbHVlS2V5ID0gY29sdW1uLm9wdGlvblZhbHVlID8gY29sdW1uLm9wdGlvblZhbHVlIDogZmllbGQ7XG4gICAgICBjb25zdCBsYWJlbEtleSA9IGNvbHVtbi5vcHRpb25MYWJlbCA/IGNvbHVtbi5vcHRpb25MYWJlbCA6IGNvbHVtbi5kaXNwbGF5RmllbGQgPyBjb2x1bW4uZGlzcGxheUZpZWxkIDogZmllbGQ7XG4gICAgICBpZiAocm93W2ZpZWxkXT8ubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBhbHJlYWR5RXhpc3QgPSByb3dbZmllbGRdPy5maW5kKChyb3dJbmZvKSA9PiByb3dJbmZvW2ZpZWxkXSA9PT0gdmFsdWUpO1xuICAgICAgICBpZiAoIWFscmVhZHlFeGlzdCkge1xuICAgICAgICAgIHJvd1tmaWVsZF0gPSBbLi4ucm93W2ZpZWxkXSwgeyBbbGFiZWxLZXk/LnRvTG93ZXJDYXNlKCldOiB2YWx1ZSwgW3ZhbHVlS2V5Py50b0xvd2VyQ2FzZSgpXTogdmFsdWUsIFtmaWVsZD8udG9Mb3dlckNhc2UoKV06IHZhbHVlIH1dO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByb3dbZmllbGRdID0gW3sgW2xhYmVsS2V5Py50b0xvd2VyQ2FzZSgpXTogdmFsdWUsIFt2YWx1ZUtleT8udG9Mb3dlckNhc2UoKV06IHZhbHVlLCBbZmllbGQ/LnRvTG93ZXJDYXNlKCldOiB2YWx1ZSB9XTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGV2ZW50Py50YXJnZXQ/LnZhbHVlKSB7XG4gICAgICBldmVudC50YXJnZXQudmFsdWUgPSAnJztcbiAgICB9XG5cbiAgfVxuXG4gIG9uQXV0b0NvbXBsZXRlS2V5RW50ZXJFdmVudChlLCBjb2x1bW4sIHJvdykge1xuICAgIGlmIChjb2x1bW4udHlwZSA9PSBFR3JpZENvbHVtblR5cGUuQVVUT0NPTVBMRVRFKSB7XG4gICAgICBpZiAoY29sdW1uLmFsbG93QXV0b0NvbXBsZXRlU2F2ZSAmJiBlLnRhcmdldC52YWx1ZSAmJiAhY29sdW1uLmRhdGE/Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLnNldEF1dG9Db21wbGV0ZXZhbHVlT25UeXBlKGNvbHVtbiwgcm93LCBlKTtcbiAgICAgICAgLy8vY2hlY2sgdGhlIGNvcnJlY3QgZm9ybWF0IGlmIGRhdGEuY29udGFpbnMgY3V6IGl0cyBhbiBhcnJheSBvZiBhcnJheXMgd2l0aCBvYmplY3RzLlxuICAgICAgICBpZiAoY29uZmlybShgRG8geW91IHdhbnQgdG8gYWRkICR7ZS50YXJnZXQudmFsdWV9IHRvIHRoZSBzZWxlY3Rpb24/YCkpIHtcbiAgICAgICAgICBpZiAoY29sdW1uLnVuaXF1ZUtleSkge1xuICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSB0aGlzLmdyaWRTZXJ2aWNlXG4gICAgICAgICAgICAgIC5hZGRBdXRvQ29tcGxldGVWYWx1ZShjb2x1bW4udW5pcXVlS2V5LCBlLnRhcmdldC52YWx1ZSwgY29sdW1uLCByb3cpXG4gICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4ub25SZXR1cm4pIHtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5vblJldHVybihlLnRhcmdldC52YWx1ZSwgY29sdW1uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBvbkZvY3VzRXZlbnQoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnkpIHtcbiAgICB0aGlzLm51bWVyaWNWYWx1ZVtjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF1cbiAgfVxuXG4gIG9uRm9jdXNPdXRFdmVudChjb2x1bW46IElHcmlkQ29sdW1uLCByb3c6IGFueSwgZXZlbnQ6IGFueSA9ICcnKSB7XG4gICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTlVNRVJJQyAmJiB0aGlzLm51bWVyaWNWYWx1ZVtjb2x1bW4uZmllbGRdICE9PSByb3dbY29sdW1uLmZpZWxkXSkge1xuICAgICAgdGhpcy5vbkNoYW5nZUV2ZW50KGNvbHVtbiwgcm93KVxuICAgIH1cbiAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQgJiYgdGhpcy5pc0xvb2t1cElucHV0RWRpdGFibGUoY29sdW1uLCByb3cpKSB7XG4gICAgICB0aGlzLnJlc29sdmVMb29rdXBJbnB1dFZhbHVlKGNvbHVtbiwgcm93KTtcbiAgICB9XG4gICAgaWYgKGNvbHVtbi50eXBlICE9PSBFR3JpZENvbHVtblR5cGUuQVVUT0NPTVBMRVRFIHx8ICghY29sdW1uLmFsbG93QXV0b0NvbXBsZXRlU2F2ZSkpIHtcbiAgICAgIHRoaXMuZ3JpZFNlcnZpY2UuY2hlY2tWYWxpZGl0eShbY29sdW1uXSwgcm93KTtcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUpIHtcbiAgICAgICAgdGhpcy5jYWxlbmRhckNoYW5nZUV2ZW50KGNvbHVtbiwgcm93KTtcbiAgICAgIH1cbiAgICAgIGlmIChjb2x1bW4ub25Gb2N1c091dCkge1xuICAgICAgICBjb2x1bW4ub25Gb2N1c091dChyb3cpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgY29sdW1uLm9uUmV0dXJuICYmXG4gICAgICAgIGNvbHVtbi50eXBlICE9PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUXG4gICAgICApIHtcbiAgICAgICAgY29sdW1uLm9uUmV0dXJuKHJvdyk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkID0gZmFsc2U7XG4gICAgdGhpcy5ncmlkU2VydmljZS5yb3dVcGRhdGUgPSBmYWxzZTtcbiAgfVxuXG4gIHNldFJlcG9ydE5hbWUoY29sdW1uOiBJR3JpZFJlcG9ydEJ0biwgcm93OiBhbnkpIHtcbiAgICBsZXQgcmVwb3J0OiBhbnkgPSAnJztcbiAgICBpZiAoY29sdW1uLnJlcG9ydElkKSB7XG4gICAgICByZXBvcnQgPSBjb2x1bW4ucmVwb3J0SWQ7XG4gICAgfSBlbHNlIGlmIChyb3dbY29sdW1uPy5sYWJlbD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10gJiYgcm93W2NvbHVtbj8ubGFiZWw/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5yZXBvcnRVbmlxdWVLZXkpIHtcbiAgICAgIHJlcG9ydCA9IHJvd1tjb2x1bW4/LmxhYmVsPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ucmVwb3J0VW5pcXVlS2V5O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXBvcnQgPSBjb2x1bW4ucmVwb3J0VW5pcXVlS2V5O1xuICAgIH1cbiAgICByZXR1cm4gcmVwb3J0O1xuICB9XG5cbiAgc2V0UmVwb3J0UGFyYW1zKGNvbHVtbjogSUdyaWRSZXBvcnRCdG4sIHJvdzogYW55KSB7XG4gICAgbGV0IHJlcG9ydFBhcmFtczogYW55W10gPSBbXTtcbiAgICBpZiAocm93W2NvbHVtbj8ubGFiZWw/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddICYmIHJvd1tjb2x1bW4/LmxhYmVsPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ucmVwb3J0UGFyYW0pIHtcbiAgICAgIHJlcG9ydFBhcmFtcyA9IHJvd1tjb2x1bW4/LmxhYmVsPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ucmVwb3J0UGFyYW07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcG9ydFBhcmFtcyA9IGNvbHVtbi5wYXJhbXM7XG4gICAgfVxuICAgIHJldHVybiByZXBvcnRQYXJhbXM7XG4gIH1cblxuICBzZXRGaWx0ZXJGb2N1c091dChjb2w6IGFueSwgZmlsdGVyPzogYW55LCBldmVudD86IGFueSkge1xuICAgIHRoaXMuc2V0R3JpZEZpbHRlcihjb2wsIGZpbHRlciwgZXZlbnQpO1xuICB9XG5cbiAgbG9va3VwRmlsdGVySW5wdXROZ01vZGVsKGNvbHVtbjogYW55KTogYW55IHtcbiAgICByZXR1cm4gdHlwZW9mIGNvbHVtblsnZmlsdGVyVmFsdWVfb2JqJ10gPT09ICdvYmplY3QnICYmIGNvbHVtblsnZmlsdGVyVmFsdWVfb2JqJ10/LnRleHQgIT0gdW5kZWZpbmVkID8gY29sdW1uWydmaWx0ZXJWYWx1ZV9vYmonXS50ZXh0IDogY29sdW1uLmZpbHRlclZhbHVlO1xuICB9XG5cbiAgc2V0R3JpZEZpbHRlcihjb2w6IElHcmlkQ29sdW1uLCBmaWx0ZXI/OiBhbnksIGV2ZW50PzogYW55KSB7XG4gICAgdGhpcy5ncmlkRmlsdGVyT2JqID0geyBjb2x1bW46IGNvbCwgZmlsdGVyOiBmaWx0ZXIsIGV2ZW50OiBldmVudCB9O1xuICAgIGNvbnN0IG5ld0NvbHVtbjogYW55ID0geyAuLi5jb2wgfTtcbiAgICAvL2NoYW5nZSBmaWx0ZXIgY2FsZW5kYXIgZm9ybWF0XG4gICAgaWYgKG5ld0NvbHVtbi50eXBlID09PSAnZGF0ZScgJiYgbmV3Q29sdW1uLmZpbHRlclZhbHVlICYmIG5ld0NvbHVtbi5maWx0ZXI/LnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUikge1xuICAgICAgbmV3Q29sdW1uLmZpbHRlclZhbHVlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oY29sLmZpbHRlclZhbHVlLnRvU3RyaW5nKCkudHJpbSgpLCAneXl5eS1NTS1kZCcpO1xuICAgIH1cbiAgICBpZiAobmV3Q29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOICYmIG5ld0NvbHVtbi5maWx0ZXJWYWx1ZSAmJiBuZXdDb2x1bW4uZmlsdGVyPy50eXBlID09PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0hFQ0tCT1gpIHtcbiAgICAgIGxldCB2YWx1ZSA9IG5ld0NvbHVtbi5maWx0ZXJWYWx1ZTtcbiAgICAgIGlmIChuZXdDb2x1bW4uZm9ybWF0dGVyID09PSBFR3JpZEZvcm1hdHRlci5DSEFSKSB7XG4gICAgICAgIG5ld0NvbHVtbi5maWx0ZXJWYWx1ZSA9IHZhbHVlID09PSB0cnVlIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnWScgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICcxJyA/ICdZJyA6ICdOJztcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5maWx0ZXJPYmoobmV3Q29sdW1uKTtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYXBwbHlGaWx0ZXInLCBKU09OLnN0cmluZ2lmeShmYWxzZSkpO1xuICB9XG5cbiAgZmlsdGVyT2JqKGNvbDogYW55KSB7XG4gICAgY29uc3Qgb2JqID0ge1xuICAgICAgZmllbGQ6IGNvbC5maWVsZCxcbiAgICAgIG1hdGNoTW9kZTogY29sLm1hdGNoTW9kZSA/IGNvbC5tYXRjaE1vZGUgOiBjb2wudHlwZSA9PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUID8gRU1hdGNoTW9kZS5FUVVBTFMgOiAnc3RhcnRzV2l0aCcsXG4gICAgICBvcGVyYXRvcjogY29sLm9wZXJhdG9yID8gY29sLm9wZXJhdG9yIDogJ2FuZCcsXG4gICAgICB0YWJsZUFsaWFzOiBjb2wudGFibGVBbGlhcyA/IGNvbC50YWJsZUFsaWFzIDogJycsXG4gICAgICB2YWx1ZTogY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5NVUxUSVNFTEVDVCA/IGNvbC5maWx0ZXJWYWx1ZS50b1N0cmluZygpIDogY29sLnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCAmJiBjb2wuaGFzT3duUHJvcGVydHkoJ2ZpbHRlclZhbHVlX29iaicpID8gY29sWydmaWx0ZXJWYWx1ZV9vYmonXT8udmFsdWUgOiBjb2wuZmlsdGVyVmFsdWUsXG4gICAgfTtcbiAgICB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheS5wdXNoKG9iaik7XG4gIH1cblxuICBhcHBseUVudGVyRXZlbnQoZmlsdGVyOiBhbnksIGV2ZW50OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgdGhpcy5ncmlkU2VydmljZS51c2VyU2VhcmNoZWQgPSB0cnVlO1xuICAgIHRoaXMuZ3JpZFNlcnZpY2UuYXBwbHlGaWx0ZXJFdmVudCA9IHRydWU7XG4gICAgdGhpcy5yb3dVcGRhdGVDaGFuZ2UgPSBmYWxzZTtcbiAgICB0aGlzLmF1dG9Mb2FkRGF0YSA9IHRydWU7XG4gICAgLy90aGlzLmxvYWRpbmc9dHJ1ZTtcbiAgICB0aGlzLm9uQXBwbHlGaWx0ZXIuZW1pdCgpO1xuICAgIHRoaXMuZmlsdGVyT2JqKGNvbHVtbik7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2FwcGx5RmlsdGVyJywgSlNPTi5zdHJpbmdpZnkodHJ1ZSkpO1xuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk1VTFRJU0VMRUNUKSB7XG4gICAgICBmaWx0ZXIoY29sdW1uPy5maWx0ZXJWYWx1ZT8udG9TdHJpbmcoKSlcbiAgICB9IGVsc2UgaWYgKGNvbHVtbj8uZmlsdGVyPy50eXBlID09PSB0aGlzLmRyb3BEb3duRmlsdGVyPy5jb2x1bW4/LmZpbHRlcj8udHlwZSkge1xuICAgICAgdGhpcy5kcm9wRG93bkZpbHRlci5maWx0ZXIodGhpcy5kcm9wRG93bkZpbHRlci5ldmVudC50YXJnZXQpO1xuICAgIH0gZWxzZSBpZiAoZmlsdGVyICYmIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQk9PTEVBTiAmJiBjb2x1bW4/LmZpbHRlcj8udHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNIRUNLQk9YICYmIGNvbHVtbi5maWx0ZXJpbmcgIT09IGZhbHNlKSB7XG4gICAgICBpZiAoY29sdW1uLmZvcm1hdHRlciA9PT0gRUdyaWRGb3JtYXR0ZXIuQ0hBUikge1xuICAgICAgICBsZXQgdmFsdWUgPSBjb2x1bW4uZmlsdGVyVmFsdWU7XG4gICAgICAgIGNvbHVtbi5maWx0ZXJWYWx1ZSA9IHZhbHVlID09PSB0cnVlIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnWScgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICcxJyA/ICdZJyA6ICdOJztcbiAgICAgICAgZmlsdGVyKGNvbHVtbi5maWx0ZXJWYWx1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgZmlsdGVyKGV2ZW50Py5jaGVja2VkKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGZpbHRlcikge1xuICAgICAgZmlsdGVyKGV2ZW50Py50YXJnZXQ/LnZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZ2xvYmFsRGF0YT8ubGVuZ3RoID09IDApIHtcbiAgICAgIHRoaXMuaGFuZGxlU2VydmVyU2lkZUV2ZW50cyh0aGlzLmdyaWRmaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZU51bGxDYWxlbmRhcihjb2x1bW46IElHcmlkQ29sdW1uLCBmaWx0ZXI6IGFueSwgZXZlbnQ6IGFueSkge1xuICAgIGlmIChjb2x1bW4uZmlsdGVyVmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHRoaXMucmVtb3ZlTnVsbEZpbHRlcnMoY29sdW1uKTtcbiAgICAgIHRoaXMuc2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uLCBmaWx0ZXIsIGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBiYWNrc3BhY2VFdmVudChldmVudDogYW55LCBjb2x1bW46IGFueSkge1xuICAgIGlmIChcbiAgICAgIGV2ZW50LmtleSA9PT0gJ0JhY2tzcGFjZScgJiZcbiAgICAgIChjb2x1bW4uZmlsdGVyVmFsdWU/LnRvU3RyaW5nKCkubGVuZ3RoID09PSAxIHx8XG4gICAgICAgIGNvbHVtbi5maWx0ZXJWYWx1ZT8udG9TdHJpbmcoKSA9PT0gJycgfHxcbiAgICAgICAgY29sdW1uLmZpbHRlclZhbHVlID09PSBudWxsKVxuICAgICkge1xuICAgICAgdGhpcy5yZW1vdmVOdWxsRmlsdGVycyhjb2x1bW4pO1xuICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFICYmIGNvbHVtbi5maWx0ZXJWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5yZW1vdmVOdWxsRmlsdGVycyhjb2x1bW4pO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZU51bGxGaWx0ZXJzKGNvbHVtbjogYW55KSB7XG4gICAgaWYgKHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5ICYmIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5Lmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCBhcnIgPSBbLi4udGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXldO1xuICAgICAgbGV0IGluZGV4ID0gYXJyLmZpbmRJbmRleCgoaSkgPT4gaS5maWVsZCA9PT0gY29sdW1uLmZpZWxkKTtcbiAgICAgIGFyci5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkgPSBhcnI7XG4gICAgfVxuICAgIGxldCBpbmRleCA9IHRoaXMuc2VydmVyRmlsdGVycz8uZmlsdGVycz8uZmluZEluZGV4KChpKSA9PiB7IGkuZmllbGQgPT09IGNvbHVtbi5maWVsZCB9KVxuICAgIHRoaXMuc2VydmVyRmlsdGVycz8uZmlsdGVycz8uc3BsaWNlKGluZGV4LCAxKVxuICB9XG5cbiAgLy8gUmVtb3ZpbmcgSGVhZGVyIEZpbHRlciBWYWx1ZSB1c2luZyBCYWNrc3BhY2Uga2V5IEV2ZW50IG9yIERlbGV0ZSBrZXkgRXZlbnQuXG4gIHJlbW92aW5nRmlsdGVycyhldmVudDogYW55LCBjb2x1bW46IElHcmlkQ29sdW1uKSB7XG4gICAgaWYgKFxuICAgICAgKGV2ZW50LmtleSA9PT0gJ0JhY2tzcGFjZScgfHwgZXZlbnQua2V5ID09PSAnRGVsZXRlJykgJiZcbiAgICAgIGNvbHVtbi5maWx0ZXJWYWx1ZT8udG9TdHJpbmcoKS5sZW5ndGggPT09IDBcbiAgICApIHtcbiAgICAgIGxldCBzZWFyY2hGaWx0ZXJzO1xuICAgICAgaWYgKCF0aGlzLnNvZnRDYWNoaW5nICYmIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgIHNlYXJjaEZpbHRlcnMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdTZXRGaWx0ZXJzLScgKyB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHRoaXMuY3VycmVudFVybCkgYXMgYW55KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQpIHtcbiAgICAgICAgc2VhcmNoRmlsdGVycyA9IHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW3RoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdGhpcy5jdXJyZW50VXJsXTtcbiAgICAgIH1cbiAgICAgIGlmIChzZWFyY2hGaWx0ZXJzICYmIHNlYXJjaEZpbHRlcnMuZmlsdGVycykge1xuICAgICAgICBpZiAoc2VhcmNoRmlsdGVycy5maWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBsZXQgaW5kZXggPSBzZWFyY2hGaWx0ZXJzLmZpbHRlcnMuZmluZEluZGV4KFxuICAgICAgICAgICAgKHg6IGFueSkgPT4geC5maWVsZCA9PT0gY29sdW1uLmZpZWxkXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgaWYgKHNlYXJjaEZpbHRlcnMuZmlsdGVycy5sZW5ndGggPT09IDEgJiYgdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmxdID0gW107XG4gICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdTZXRGaWx0ZXJzLScgKyB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHRoaXMuY3VycmVudFVybCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzZWFyY2hGaWx0ZXJzLmZpbHRlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLnNvZnRDYWNoaW5nICYmIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ1NldEZpbHRlcnMtJyArIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdGhpcy5jdXJyZW50VXJsLCBKU09OLnN0cmluZ2lmeShzZWFyY2hGaWx0ZXJzKSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLnNvZnRDYWNoaW5nRmlsdGVyc1t0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHRoaXMuY3VycmVudFVybF0gPSBzZWFyY2hGaWx0ZXJzO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIENsaWNrIEJ1dHRvbiBFdmVudCBvbiBHcmlkLlxuICBvbkNsaWNrQnV0dG9uKGNvbHVtbjogYW55LCByb3c6IGFueSkge1xuICAgIHRoaXMub3BlbkdyaWREaWFsb2coY29sdW1uLCByb3cpO1xuICB9XG5cbiAgLy8gSW52b2tlIG9uQ2xpY2sgRXZlbnQuXG4gIG9uQ2xpY2tFdmVudChjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcbiAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MSU5LICYmIChjb2x1bW4uZWRpdExpbmsgPT09IGZhbHNlIHx8IGNvbHVtbi5lZGl0TGluayA9PT0gdW5kZWZpbmVkKSAmJiBjb2x1bW4uZWRpdGFibGUgIT09IHRydWUgJiYgY29sdW1uLmRpc2FibGVkICE9PSB0cnVlKSB7XG4gICAgICB0aGlzLm9uQ2xpY2tFdmVudFRyaWdnZXJlZCA9IHRydWU7XG4gICAgfVxuICAgIC8vIGlmKGNvbHVtbi50eXBlPT09RUdyaWRDb2x1bW5UeXBlLkRJQUxPRyAmJiByb3dbY29sdW1uLmZpZWxkXSl7XG4gICAgLy8gICB0aGlzLm9wZW5HcmlkRGlhbG9nKGNvbHVtbixyb3cpXG4gICAgLy8gfVxuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUgJiYgcm93W2NvbHVtbi5maWVsZF0pIHtcbiAgICAgIHRoaXMuY2FsZW5kYXJQcmV2aW91c1ZhbHVlID0gcm93W2NvbHVtbi5maWVsZF07XG4gICAgfSBlbHNlIGlmIChcbiAgICAgICFyb3dbY29sdW1uLmZpZWxkXSAmJlxuICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFICYmXG4gICAgICAoY29sdW1uLnNob3dUaW1lIHx8IGNvbHVtbi50aW1lT25seSkgJiZcbiAgICAgIGNvbHVtbi5taW51dGVzSW50ZXJ2YWxcbiAgICApIHtcbiAgICAgIHRoaXMuZGVmYXVsdERhdGUgPSBuZXcgRGF0ZShzZXRNaW51dGVzSW50ZXJ2YWwobmV3IERhdGUoKSkpO1xuICAgIH1cbiAgICBpZiAoY29sdW1uICYmIGNvbHVtbi5vbkNsaWNrICYmIGNvbHVtbi5kaXNhYmxlZCAhPT0gdHJ1ZSAmJiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmFjdGlvbj8uZGlzYWJsZWQgIT09IHRydWUgfHwgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc2FibGVkICE9PSB0cnVlICYmIGNvbHVtbi50eXBlICE9PSBFR3JpZENvbHVtblR5cGUuQk9PTEVBTikpIHtcbiAgICAgIGNvbHVtbi5vbkNsaWNrKHJvdyk7XG4gICAgfVxuICB9XG5cbiAgc2V0TXVsdGlTZWxlY3RWYWx1ZShjb2x1bW4sIHJvdykge1xuICAgIGlmIChyb3dbY29sdW1uLmZpZWxkXSAmJiAhQXJyYXkuaXNBcnJheShyb3dbY29sdW1uLmZpZWxkXSkpIHtcbiAgICAgIGlmICh0eXBlb2YgKHJvd1tjb2x1bW4uZmllbGRdKSA9PT0gXCJzdHJpbmdcIiAmJiAhcm93W2NvbHVtbi5maWVsZF0/LmluY2x1ZGVzKCcsJykpIHtcbiAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBbcm93W2NvbHVtbi5maWVsZF1dO1xuICAgICAgfSBlbHNlIGlmIChyb3dbY29sdW1uLmZpZWxkXT8udG9TdHJpbmcoKT8uaW5jbHVkZXMoJywnKSkge1xuICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHJvd1tjb2x1bW4uZmllbGRdPy5zcGxpdCgnLCcpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcm93W2NvbHVtbi5maWVsZF07XG4gIH1cblxuICAvLyBzZXQgdGhlIHNlbGVjdCB2YWx1ZSBvZiBtdWx0aS1zZWxlY3RcbiAgc2hvd09wdGlvbihjb2x1bW4sIHJvdykge1xuICAgIHJvd1tjb2x1bW4uZmllbGRdID0gdGhpcy5zZXRNdWx0aVNlbGVjdFZhbHVlKGNvbHVtbiwgcm93KTtcbiAgfVxuXG4gIG9uQ2xlYXJWYWx1ZShjb2x1bW4sIHJvdykge1xuICAgIGlmIChjb2x1bW4/LnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTiAmJiAhcm93W2NvbHVtbi5maWVsZF0pIHtcbiAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvLyBJbnZva2Ugb25DaGFuZ2UgRXZlbnRcbiAgb25DaGFuZ2VFdmVudChjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcbiAgICBpZiAoIXJvdy5faXNFZGl0ZWQpIHtcbiAgICAgIHJvdy5faXNFZGl0ZWQgPSB0cnVlO1xuICAgIH1cbiAgICAvLyBzZXQgZHJvcGRvd24gZGlzcGxheUZpZWxkIHZhbHVlIGJhc2Ugb24gb3B0aW9uTGFiZWwgJiBvcHRpb25WYWx1ZS5cbiAgICB0aGlzLmdyaWRWYWxpZGF0aW9uKGNvbHVtbiwgcm93LCB0cnVlKVxuICAgIHRoaXMuZGlzcGxheUZpZWxkRHJvcGRvd25WYWx1ZShjb2x1bW4sIHJvdyk7XG4gICAgdGhpcy5vbkNsZWFyVmFsdWUoY29sdW1uLCByb3cpO1xuICAgIHRoaXMuYnJvd3NlckNsb3NlRXZlbnQodHJ1ZSk7XG4gICAgdGhpcy5yb3dVcGRhdGVDaGFuZ2UgPSB0cnVlO1xuICAgIGlmIChjb2x1bW4ub25DaGFuZ2UpIHtcbiAgICAgIGNvbHVtbi5vbkNoYW5nZShyb3cpO1xuICAgIH1cbiAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5vbkNsaWNrRXZlbnRUcmlnZ2VyZWQgPT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHRoaXMuc2V0RHJvcGRvd25kYXRhVmFsdWUgPSBmYWxzZVxuICAgIHRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkID0gZmFsc2U7XG4gICAgdGhpcy5ncmlkU2VydmljZS5yb3dVcGRhdGUgPSBmYWxzZTtcbiAgICB0aGlzLmdlbmVyYXRlUm93c0RhdGFDb3B5ID0gZmFsc2VcbiAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSAmJiBjb2x1bW4uYWdncmVnYXRlLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuYWdncmVnYXRlRm9vdGVyID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0QWdncmVnYXRlVGV4dChjb2x1bW4pO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrQm94Q2hhbmdlRXZlbnQoZXZlbnQ6IGFueSwgY29sdW1uOiBJR3JpZENvbHVtbiwgcm93KSB7XG4gICAgaWYgKCFyb3cuX2lzRWRpdGVkKSB7XG4gICAgICByb3cuX2lzRWRpdGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcm93Ll9pc0VkaXRlZCA9IHRydWU7XG4gICAgcm93W2NvbHVtbi5maWVsZF0gPSBldmVudDtcbiAgICBpZiAodGhpcy5yb3dzQ2hhbmdlLm9ic2VydmVycz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuZ3JpZFNlcnZpY2Uucm93VXBkYXRlID0gZmFsc2U7XG4gICAgdGhpcy5nZW5lcmF0ZVJvd3NEYXRhQ29weSA9IGZhbHNlXG4gICAgdGhpcy5yb3dVcGRhdGVDaGFuZ2UgPSB0cnVlO1xuICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICAgIGlmIChjb2x1bW4ub25DbGljaykge1xuICAgICAgY29sdW1uLm9uQ2xpY2socm93KTtcbiAgICB9XG4gICAgaWYgKGNvbHVtbi5vbkNoYW5nZSkge1xuICAgICAgY29sdW1uLm9uQ2hhbmdlKHJvdyk7XG4gICAgfVxuICB9XG5cbiAgLy8gc2V0IGRyb3Bkb3duIGRpc3BsYXlGaWVsZCB2YWx1ZSBiYXNlIG9uIG9wdGlvbkxhYmVsICYgb3B0aW9uVmFsdWUuXG4gIGRpc3BsYXlGaWVsZERyb3Bkb3duVmFsdWUoY29sdW1uOiBhbnksIHJvdzogYW55KSB7XG4gICAgaWYgKFxuICAgICAgY29sdW1uPy50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04gJiZcbiAgICAgIGNvbHVtbi5kaXNwbGF5RmllbGQgJiZcbiAgICAgIGNvbHVtbi5kaXNwbGF5RmllbGQ/Lmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIGNvbnN0IGtleTogYW55ID0gT2JqZWN0LmtleXMocm93KT8uZmluZChcbiAgICAgICAgKHJvd0luZm8pID0+XG4gICAgICAgICAgcm93SW5mbz8udG9Mb3dlckNhc2UoKSA9PT0gY29sdW1uLmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXG4gICAgICApO1xuICAgICAgY29uc3QgZGlzcGxheUZpZWxkVmFsdWUgPSBjb2x1bW4uZGF0YS5maW5kKFxuICAgICAgICAocmVjb3JkOiBhbnkpID0+XG4gICAgICAgICAgcmVjb3JkW2NvbHVtbi5vcHRpb25WYWx1ZV0/LnRvU3RyaW5nKCkgPT09XG4gICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKClcbiAgICAgICk7XG4gICAgICBpZiAoa2V5ICYmIGRpc3BsYXlGaWVsZFZhbHVlKSB7XG4gICAgICAgIHJvd1trZXldID0gZGlzcGxheUZpZWxkVmFsdWVbY29sdW1uLm9wdGlvbkxhYmVsXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBZGQgYXV0b1NlYXJjaCBvbiBHcmlkLlxuICBhdXRvU2VhcmNoKGV2ZW50OiBhbnksIGNvbHVtbjogYW55LCByb3c6IGFueSkge1xuICAgIGlmIChldmVudCAmJiBjb2x1bW4gJiYgcm93KSB7XG4gICAgICBjb2x1bW4ub25SZXR1cm4oZXZlbnQucXVlcnksIGNvbHVtbiwgcm93KTtcbiAgICB9XG4gIH1cblxuICAvLyBSZWZyZXNoIGdyaWRcbiAgcmVmcmVzaEdyaWQoKSB7XG4gICAgdGhpcy5yZWxvYWRQYWdlID0gaW50ZXJ2YWwodGhpcy5zZXRHcmlkUmVmcmVzaFRpbWUpLnN1YnNjcmliZSgoeCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZ3JpZGZpbHRlciA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5ncmlkZmlsdGVyID0geyBmaWx0ZXJzOiBbXSwgc29ydHM6IFtdIH07XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zZXRHcmlkUmVmcmVzaFRpbWUpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVTZXJ2ZXJTaWRlRXZlbnRzKHRoaXMuZ3JpZGZpbHRlcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBSZW1vdmUgRmlsdGVyVmFsdWVzXG4gIGNsZWFyZ3JpZEZpbHRlcnNWYWx1ZSgpIHtcbiAgICBjb25zdCBnbG9iYWxGaWx0ZXJDbGVhclZhbHVlQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXG4gICAgICAnY2xlYXJHbG9iYWxGaWx0ZXJCdG4nXG4gICAgKTtcbiAgICBpZiAoZ2xvYmFsRmlsdGVyQ2xlYXJWYWx1ZUJ0bikge1xuICAgICAgZ2xvYmFsRmlsdGVyQ2xlYXJWYWx1ZUJ0bi5jbGljaygpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnMgJiYgdGhpcy5zZWxlY3RlZENvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zZXJ2ZXJGaWx0ZXJzLmZpbHRlcnMgPSBbXTtcbiAgICAgIGxldCBzZWFyY2hGaWx0ZXJzID0gdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmxdO1xuICAgICAgc2VhcmNoRmlsdGVycz8uZmlsdGVycz8uZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICAgIGNvbC52YWx1ZSA9IG51bGw7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgICBjb2wuZmlsdGVyVmFsdWUgPSBudWxsO1xuICAgICAgICB0aGlzLmZpbHRlck9iaihjb2wpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZWRpdEFsbFJvd3NBdE9uY2UoKSB7XG4gICAgaWYgKHRoaXMuZWRpdFJvd1Blcm1pc3Npb24pIHtcbiAgICAgIGlmICh0aGlzLmdldENsYXNzRm9yRWRpdEFsbFJvd3MoJ2VkaXRSb3cnKSkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnMuc29tZSgoY29sdW1uKSA9PiBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4gJiYgKGNvbHVtbi5maWx0ZXJpbmcgPT09IHRydWUgfHwgY29sdW1uLmZpbHRlcmluZyA9PT0gdW5kZWZpbmVkKSkpIHtcbiAgICAgICAgICB0aGlzLmVkaXRBbGxSZWNvcmQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBhZ2luYXRpb24gJiYgdGhpcy5lZGl0QWxsUmVjb3JkKSB7XG4gICAgICAgICAgdGhpcy5zb3J0RGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHRoaXMuc29ydERpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzYXZlQWxsUm93c0F0T25jZSgpIHtcbiAgICB0aGlzLmdldENsYXNzRm9yRWRpdEFsbFJvd3MoJ3NhdmVSb3cnKTtcbiAgfVxuXG4gIC8vIHJlc2V0IHRoZSBncmlkIHJvd3NWYWx1ZSB0byBvcmlnbmFsIHZhbHVlc1xuICBjYW5jZWxBbGxSb3dzQXRPbmNlKCkge1xuICAgIHRoaXMucm93c0RhdGEgPSBbLi4udGhpcy5yb3dzRGF0YUNvcHldO1xuICAgIHRoaXMucm93c0RhdGFDb3B5ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnJvd3NEYXRhKSk7XG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnM/LmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSkge1xuICAgICAgICB0aGlzLnJvd3NEYXRhPy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICBpZiAocm93W2NvbHVtbi5maWVsZF0pIHtcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gbmV3IERhdGUocm93W2NvbHVtbi5maWVsZF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgIH0pO1xuICAgIGlmICh0aGlzLmNvbHVtbnM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSAmJiBjb2x1bW4uYWdncmVnYXRlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLmFnZ3JlZ2F0ZUZvb3RlciA9IHRydWU7XG4gICAgICAgICAgdGhpcy5zZXRBZ2dyZWdhdGVUZXh0KGNvbHVtbik7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIHRoaXMub25DYW5jZWxBbGxSb3dzLmVtaXQodGhpcy5yb3dzRGF0YSk7XG4gIH1cbiAgZ2V0Q2xhc3NGb3JFZGl0QWxsUm93cyhjbGFzc05hbWU6IHN0cmluZyA9ICcnKSB7XG4gICAgbGV0IHN1Y2Nlc3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBpZiAoY2xhc3NOYW1lID09PSAnZWRpdFJvdycpIHtcbiAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICB0aGlzLm9uUm93RWRpdEluaXQocm93KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGdldEJ0bnM6IGFueSA9IHRoaXMuZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudD8uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc05hbWUpO1xuICAgIGlmIChnZXRCdG5zICYmIGdldEJ0bnMubGVuZ3RoID4gMCkge1xuICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICBpZiAoY2xhc3NOYW1lID09PSAnc2F2ZVJvdycpIHtcbiAgICAgICAgdGhpcy5lZGl0QWxsUmVjb3JkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2F2ZUFsbFJlY29yZCA9IHRydWU7XG4gICAgICAgIGNvbnN0IHJlY29yZHMkID0gW107XG4gICAgICAgIGNvbnN0IGFsbEJ0bnMgPSBBcnJheS5mcm9tKGdldEJ0bnMpO1xuXG4gICAgICAgIGFsbEJ0bnMuZm9yRWFjaCgoaXRlbTogYW55LCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMucm93c0RhdGFbaW5kZXhdO1xuICAgICAgICAgIGlmIChyb3cpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd1NhdmUgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgICBpdGVtLmNsaWNrKCk7XG4gICAgICAgICAgICAgIHJlc29sdmUoaXRlbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlY29yZHMkLnB1c2gocm93U2F2ZSk7XG4gICAgICAgICAgICByb3cuX2lzRWRpdGVkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBQcm9taXNlLmFsbChyZWNvcmRzJCkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5ncmlkU2VydmljZS5pc0dyaWRWYWxpZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2hlY2tsaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgY29uc3QgY2hlY2tsaXN0Um93cyA9IHRoaXMuc2V0Um93c0RhdGEodGhpcy5jaGVja2xpc3QpO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImNoZWNrbGlzdFwiLCB0aGlzLmNoZWNrbGlzdCk7XG4gICAgICAgICAgICAgIGNoZWNrbGlzdFJvd3MuZm9yRWFjaChyb3cgPT4gZGVsZXRlIHJvd1t0aGlzLmRhdGFLZXldKTtcbiAgICAgICAgICAgICAgaWYgKHRoaXMub3JpZ2luYWxSb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZFJvd3MgPSBnZXRDaGFuZ2VkUm93cyhjaGVja2xpc3RSb3dzLCB0aGlzLm9yaWdpbmFsUm93cywgdGhpcy5jb2x1bW5zLCB0aGlzLmRhdGFLZXkpO1xuICAgICAgICAgICAgICAgIHRoaXMub25Sb3dVcGRhdGUuZW1pdCh0aGlzLnByZXBhcmVSb3dzRm9yRW1pdChmaWx0ZXJlZFJvd3MpKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uUm93VXBkYXRlLmVtaXQodGhpcy5wcmVwYXJlUm93c0ZvckVtaXQoY2hlY2tsaXN0Um93cykpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlUm93c0RhdGFDb3B5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2F2ZVJlY29yZEFycmF5Py5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplVmFsID0gKHY6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHYgPT0gbnVsbCB8fCB2ID09PSAnJykgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICBpZiAodiBpbnN0YW5jZW9mIERhdGUpIHJldHVybiB2LnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXTtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycgJiYgL15cXGR7NH0tXFxkezJ9LVxcZHsyfVQvLnRlc3QodikpIHJldHVybiB2LnNwbGl0KCdUJylbMF07XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0kLy50ZXN0KHYpKSByZXR1cm4gdjtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycgJiYgL15cXGR7MSwyfVxcL1xcZHsxLDJ9XFwvXFxkezR9JC8udGVzdCh2KSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBbbSwgZCwgeV0gPSB2LnNwbGl0KCcvJyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHt5fS0ke20ucGFkU3RhcnQoMiwgJzAnKX0tJHtkLnBhZFN0YXJ0KDIsICcwJyl9YDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgZWRpdGFibGVGaWVsZHMgPSB0aGlzLmNvbHVtbnNcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIoYyA9PiBjLmVkaXRhYmxlICE9PSBmYWxzZSAmJiBjLmFsbG93U2F2ZSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAubWFwKGMgPT4gYy5maWVsZD8udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICAgICAgbGV0IGRpcnR5Um93cyA9IHRoaXMuc2F2ZVJlY29yZEFycmF5O1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbR3JpZENvbXBvbmVudF0gc2F2ZVJlY29yZEFycmF5IGxlbmd0aDonLCB0aGlzLnNhdmVSZWNvcmRBcnJheS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbR3JpZENvbXBvbmVudF0gb3JpZ2luYWxSb3dzIGxlbmd0aDonLCB0aGlzLm9yaWdpbmFsUm93cy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9yaWdpbmFsUm93cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAvLyBOb3JtYWxpemUgcm93cyBiZWZvcmUgY29tcGFyaXNvbiB0byByZW1vdmUgZGlzcGxheS1vbmx5IHByb3BlcnRpZXNcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRDdXJyZW50ID0gdGhpcy5zYXZlUmVjb3JkQXJyYXkubWFwKHIgPT4gdGhpcy5ncmlkU2VydmljZS5nZXRBbGxvd1NhdmVSb3dsaXN0KFtyXSwgdGhpcy5jb2x1bW5zKVswXSk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBub3JtYWxpemVkT3JpZ2luYWwgPSB0aGlzLm9yaWdpbmFsUm93cy5tYXAociA9PiB0aGlzLmdyaWRTZXJ2aWNlLmdldEFsbG93U2F2ZVJvd2xpc3QoW3JdLCB0aGlzLmNvbHVtbnMpWzBdKTtcbiAgICAgICAgICAgICAgICAgIGRpcnR5Um93cyA9IGdldENoYW5nZWRSb3dzKG5vcm1hbGl6ZWRDdXJyZW50LCBub3JtYWxpemVkT3JpZ2luYWwsIHRoaXMuY29sdW1ucywgdGhpcy5kYXRhS2V5LCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgIC8vIE1hcCBiYWNrIHRvIG9yaWdpbmFsIHJvd3Mgd2l0aCBhbGwgcHJvcGVydGllc1xuICAgICAgICAgICAgICAgICAgZGlydHlSb3dzID0gZGlydHlSb3dzLm1hcChub3JtYWxpemVkUm93ID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2F2ZVJlY29yZEFycmF5LmZpbmQociA9PiByW3RoaXMuZGF0YUtleV0gPT09IG5vcm1hbGl6ZWRSb3dbdGhpcy5kYXRhS2V5XSlcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW0dyaWRDb21wb25lbnRdIEFmdGVyIGdldENoYW5nZWRSb3dzLCBkaXJ0eVJvd3MgbGVuZ3RoOicsIGRpcnR5Um93cy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZGlydHlSb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIGRpcnR5Um93cy5mb3JFYWNoKHJvdyA9PiBkZWxldGUgcm93W3RoaXMuZGF0YUtleV0pOyAvLyByZW1vdmUgdGVtcF9pZCBiZWZvcmUgZW1pdHRpbmcg4oCUIGl0J3Mgb25seSB1c2VkIGZvciBkaXJ0eS1yb3cgY29tcGFyaXNvblxuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1tHcmlkQ29tcG9uZW50XSBFbWl0dGluZyBkaXJ0eVJvd3MgY291bnQ6JywgZGlydHlSb3dzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLm9uUm93VXBkYXRlLmVtaXQodGhpcy5wcmVwYXJlUm93c0ZvckVtaXQoZGlydHlSb3dzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc2F2ZVJlY29yZEFycmF5ID0gW107XG4gICAgICAgICAgdGhpcy5lZGl0QWxsUm93c0F0T25jZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2F2ZUFsbFJlY29yZCA9IGZhbHNlO1xuICAgICAgICBpZiAoY2xhc3NOYW1lID09ICdjYW5jZWxSb3cnKSB7XG4gICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBnZXRCdG5zKSB7XG4gICAgICAgICAgICBpdGVtLmNsaWNrKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdWNjZXNzO1xuICB9XG4gIC8vRm9jdXNlZCBjYWxlbmRhciBpbnB1dCBvbiBzZWxlY3QgZGF0ZVxuICBzZWxlY3REYXRlKGNvbHVtbjogYW55KSB7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29sdW1uLmZpZWxkKT8uZm9jdXMoKTtcbiAgfVxuXG4gIC8vYXBwbHkgZmlsdGVyIG9uIGdyaWQgd2hlbiBzZWFyY2ggYnRuIGNsaWNrZWRcbiAgYXBwbHlHcmlkRmlsdGVyQnRuKCkge1xuICAgIHRoaXMuZ3JpZFNlcnZpY2UudXNlclNlYXJjaGVkID0gdHJ1ZTtcbiAgICB0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuZ3JpZFNlcnZpY2Uucm93VXBkYXRlID0gZmFsc2U7XG4gICAgdGhpcy5yb3dVcGRhdGVDaGFuZ2UgPSBmYWxzZTtcblxuICAgIGxldCBmaWx0ZXJJbkRpYWxvZzogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncC1kaWFsb2cnKTtcbiAgICBsZXQgZ2xvYmFsRmlsdGVyQXBwbHlCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnNlYXJjaGJ0bklkKTtcbiAgICBpZiAoZmlsdGVySW5EaWFsb2cgJiYgZmlsdGVySW5EaWFsb2cubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZ2xvYmFsU2VhcmNoQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5zZWFyY2hidG5JZCk7XG4gICAgICBpZiAoZ2xvYmFsU2VhcmNoQnRuKSB7XG4gICAgICAgIGdsb2JhbFNlYXJjaEJ0bi5jbGljaygpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZ2xvYmFsRmlsdGVyQXBwbHlCdG4pIHtcbiAgICAgIGdsb2JhbEZpbHRlckFwcGx5QnRuLmNsaWNrKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZ3JpZEZpbHRlck9iaiAmJiBPYmplY3Qua2V5cyh0aGlzLmdyaWRGaWx0ZXJPYmopPy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmFwcGx5RW50ZXJFdmVudChcbiAgICAgICAgdGhpcy5ncmlkRmlsdGVyT2JqLmZpbHRlcixcbiAgICAgICAgdGhpcy5ncmlkRmlsdGVyT2JqLmV2ZW50LFxuICAgICAgICB0aGlzLmdyaWRGaWx0ZXJPYmouY29sdW1uXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuY2hlY2tsaXN0ID0gW107XG4gICAgdGhpcy5zZWxlY3RlZFJvd3MgPSBbXTtcbiAgfVxuXG4gIGhhbmRsZUhlYWRlckNoZWNrYm94Q2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBpc0NoZWNrZWQgPSBldmVudC5jaGVja2VkO1xuICAgIGNvbnN0IGRhdGFUb1NlbGVjdCA9IHRoaXMudGFibGU/LnZhbHVlIHx8IHRoaXMucm93c0RhdGEgfHwgW107XG5cbiAgICBpZiAoaXNDaGVja2VkKSB7XG4gICAgICB0aGlzLmNoZWNrbGlzdCA9IFsuLi5kYXRhVG9TZWxlY3RdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNoZWNrbGlzdCA9IFtdO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkUm93cyA9IFsuLi50aGlzLmNoZWNrbGlzdF07XG4gICAgY29uc29sZS5sb2coJ3NlbGVjdEFsbENsaWNrIC0gc2VsZWN0ZWRSb3dzOicsIHRoaXMuc2VsZWN0ZWRSb3dzKTtcbiAgICB0aGlzLmFwcFJlZi50aWNrKCk7XG4gICAgdGhpcy5vbk11bHRpU2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xuICB9XG5cbiAgb25UYWJsZVNlbGVjdGlvbkNoYW5nZShldmVudDogYW55KSB7XG4gICAgdGhpcy5zZWxlY3RlZFJvd3MgPSBldmVudCB8fCBbXTtcbiAgICB0aGlzLmNoZWNrbGlzdCA9IFsuLi50aGlzLnNlbGVjdGVkUm93c107XG4gICAgdGhpcy5vbk11bHRpU2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xuICB9XG5cbiAgLy8gaW52b2tlIG11bHRpU2VsZWN0aW9uIGNsaWNrIGV2ZW50XG4gIG11bHRpQ2hlY2tCb3hPbmNsaWNrKHJvd0luZm86IGFueSwgZXZlbnQ6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKCdtdWx0aUNoZWNrQm94T25jbGljayBjYWxsZWQgd2l0aCByb3dJbmZvOicsIHJvd0luZm8sICdpc0NoZWNrZWQ6JywgZXZlbnQuY2hlY2tlZCk7XG4gICAgY29uc3QgaXNDaGVja2VkID0gZXZlbnQuY2hlY2tlZDtcblxuICAgIGlmICh0aGlzLnNlbGVjdGlvblR5cGUgPT09IEVHcmlkU2VsZWN0aW9uVHlwZS5NVUxUSVBMRSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocm93SW5mbykgJiYgcm93SW5mbz8ubGVuZ3RoID4gMCAmJiBpc0NoZWNrZWQpIHtcbiAgICAgICAgdGhpcy5jaGVja2xpc3QgPSBbLi4ucm93SW5mb107XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJvd0luZm8pICYmICFpc0NoZWNrZWQpIHtcbiAgICAgICAgdGhpcy5jaGVja2xpc3QgPSBbXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFscmVhZHlFeGlzdCA9IHRoaXMuY2hlY2tsaXN0LnNvbWUoKHJvdykgPT4gcm93W3RoaXMuZGF0YUtleV0gPT0gcm93SW5mb1t0aGlzLmRhdGFLZXldKTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShyb3dJbmZvKSAmJiBpc0NoZWNrZWQgJiYgIWFscmVhZHlFeGlzdCkge1xuICAgICAgICB0aGlzLmNoZWNrbGlzdC5wdXNoKHJvd0luZm8pO1xuICAgICAgfSBlbHNlIGlmIChhbHJlYWR5RXhpc3QgJiYgIWlzQ2hlY2tlZCkge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuY2hlY2tsaXN0LmZpbmRJbmRleCgocm93KSA9PiByb3dbdGhpcy5kYXRhS2V5XSA9PSByb3dJbmZvW3RoaXMuZGF0YUtleV0pO1xuICAgICAgICB0aGlzLmNoZWNrbGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5jaGVja2xpc3QgPSBbcm93SW5mb11cbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZFJvd3MgPSBbLi4udGhpcy5jaGVja2xpc3RdO1xuICAgIGNvbnNvbGUubG9nKCdzZWxlY3RlZFJvd3M6JywgdGhpcy5zZWxlY3RlZFJvd3MpO1xuICAgIHRoaXMuYXBwUmVmLnRpY2soKTtcbiAgICB0aGlzLm9uTXVsdGlTZWxlY3Rpb25DaGFuZ2UuZW1pdCgodGhpcy5zZWxlY3RlZFJvd3MpKTtcbiAgfVxuXG4gIHNldFJvd3NEYXRhKHJvd3NEYXRhKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocm93c0RhdGEpKSB7XG4gICAgICByb3dzRGF0YS5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICByb3cgPSB0aGlzLnJlbW92ZVJvd09iaihyb3cpO1xuICAgICAgICByb3cgPSB0aGlzLmdyaWRTZXJ2aWNlLnNldFJvd1ZhbHVlKHJvdyk7XG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICByb3dzRGF0YSA9IHRoaXMucmVtb3ZlUm93T2JqKHJvd3NEYXRhKTtcbiAgICAgIHJvd3NEYXRhID0gdGhpcy5ncmlkU2VydmljZS5zZXRSb3dWYWx1ZShyb3dzRGF0YSk7XG4gICAgfVxuICAgIHJldHVybiByb3dzRGF0YTtcbiAgfVxuXG4gIHJlbW92ZVJvd09iaihyb3c6IGFueSkge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgIGlmIChrZXlzPy5sZW5ndGggPiAwKSB7XG4gICAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKCdfb2JqJykpIHtcbiAgICAgICAgICBkZWxldGUgcm93W2tleV07XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiByb3c7XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVSb3dzRm9yRW1pdChyb3dzOiBhbnkgfCBhbnlbXSk6IGFueSB8IGFueVtdIHtcbiAgICBpZiAoIXJvd3MpIHJldHVybiByb3dzO1xuICAgIGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KHJvd3MpO1xuICAgIGNvbnN0IHJvd3NUb0ZpbHRlciA9IGlzQXJyYXkgPyByb3dzIDogW3Jvd3NdO1xuICAgIGNvbnNvbGUubG9nKCdbR3JpZENvbXBvbmVudF0gcHJlcGFyZVJvd3NGb3JFbWl0IC0gSW5wdXQgcm93cyBjb3VudDonLCByb3dzVG9GaWx0ZXIubGVuZ3RoKTtcblxuICAgIC8vIEZpbHRlciB0byBvbmx5IHJvd3MgdGhhdCB3ZXJlIGFjdHVhbGx5IGVkaXRlZCAoY2hlY2sgX2lzRWRpdGVkIGZsYWcgb3IgbG9va3VwIG9iamVjdCBjaGFuZ2VzKVxuICAgIGNvbnN0IGVkaXRlZFJvd3MgPSByb3dzVG9GaWx0ZXIuZmlsdGVyKChyb3c6IGFueSkgPT4ge1xuICAgICAgaWYgKCFyb3cpIHJldHVybiBmYWxzZTsgLy8gU2tpcCBudWxsL3VuZGVmaW5lZCByb3dzXG4gICAgICBpZiAocm93Py5faXNFZGl0ZWQpIHJldHVybiB0cnVlO1xuICAgICAgLy8gQ2hlY2sgaWYgcm93IGhhcyBsb29rdXAgZmllbGRzIHdpdGggb2JqZWN0IHZhbHVlcyAoaW5kaWNhdGluZyBhIGNoYW5nZSlcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHJvdykuc29tZSgodmFsOiBhbnkpID0+XG4gICAgICAgIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmIHZhbCAhPT0gbnVsbCAmJiAndmFsdWUnIGluIHZhbCAmJiAndGV4dCcgaW4gdmFsXG4gICAgICApO1xuICAgIH0pO1xuICAgIGNvbnNvbGUubG9nKCdbR3JpZENvbXBvbmVudF0gcHJlcGFyZVJvd3NGb3JFbWl0IC0gRWRpdGVkIHJvd3MgY291bnQ6JywgZWRpdGVkUm93cy5sZW5ndGgpO1xuXG4gICAgLy8gSWYgbm8gcm93cyBtYXJrZWQgYXMgZWRpdGVkLCB1c2UgYWxsIHJvd3MgKGluIGNhc2UgZ2V0Q2hhbmdlZFJvd3MgYWxyZWFkeSBmaWx0ZXJlZCB0aGVtKVxuICAgIGNvbnN0IHJvd3NUb1Byb2Nlc3MgPSBlZGl0ZWRSb3dzLmxlbmd0aCA+IDAgPyBlZGl0ZWRSb3dzIDogcm93c1RvRmlsdGVyO1xuICAgIGxldCBmaWx0ZXJlZCA9IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0QWxsb3dTYXZlUm93bGlzdChyb3dzVG9Qcm9jZXNzLCB0aGlzLmNvbHVtbnMpO1xuXG4gICAgLy8gRW5zdXJlIGZpbHRlcmVkIGlzIGFuIGFycmF5XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGZpbHRlcmVkKSkge1xuICAgICAgZmlsdGVyZWQgPSBmaWx0ZXJlZCA/IFtmaWx0ZXJlZF0gOiBbXTtcbiAgICB9XG5cbiAgICAvLyBFeHRyYWN0IHNjYWxhciB2YWx1ZXMgZnJvbSBsb29rdXAgb2JqZWN0cyBhbmQgcmVtb3ZlIGludGVybmFsIGZsYWdzXG4gICAgZmlsdGVyZWQgPSBmaWx0ZXJlZFxuICAgICAgLmZpbHRlcigocm93OiBhbnkpID0+IHJvdykgLy8gUmVtb3ZlIG51bGwvdW5kZWZpbmVkIGJlZm9yZSBwcm9jZXNzaW5nXG4gICAgICAubWFwKChyb3c6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkID0geyAuLi5yb3cgfTtcbiAgICAgICAgT2JqZWN0LmtleXMobm9ybWFsaXplZCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIC8vIEV4dHJhY3Qgc2NhbGFyIHZhbHVlIGZyb20gbG9va3VwIG9iamVjdHNcbiAgICAgICAgICBpZiAodHlwZW9mIG5vcm1hbGl6ZWRba2V5XSA9PT0gJ29iamVjdCcgJiYgbm9ybWFsaXplZFtrZXldPy52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBub3JtYWxpemVkW2tleV0gPSBub3JtYWxpemVkW2tleV0udmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFJlbW92ZSBpbnRlcm5hbCBmbGFnc1xuICAgICAgICAgIGlmIChrZXkuc3RhcnRzV2l0aCgnXycpIHx8IGtleS5lbmRzV2l0aCgnX29iaicpIHx8IGtleS5lbmRzV2l0aCgnLWRhdGEnKSkge1xuICAgICAgICAgICAgZGVsZXRlIG5vcm1hbGl6ZWRba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbm9ybWFsaXplZDtcbiAgICAgIH0pO1xuXG4gICAgY29uc29sZS5sb2coJ1tHcmlkQ29tcG9uZW50XSBwcmVwYXJlUm93c0ZvckVtaXQgLSBPdXRwdXQgcm93cyBjb3VudDonLCBmaWx0ZXJlZC5sZW5ndGgpO1xuICAgIHJldHVybiBpc0FycmF5ID8gZmlsdGVyZWQgOiAoZmlsdGVyZWQubGVuZ3RoID4gMCA/IGZpbHRlcmVkWzBdIDogbnVsbCk7XG4gIH1cblxuICBhcHBseURyb3Bkb3duRmlsdGVyKGZpbHRlcjogYW55LCBldmVudDogYW55KSB7XG4gICAgZmlsdGVyKGV2ZW50LnRhcmdldCk7XG4gIH1cblxuICBzZWFyY2hEcm9wZG93bkZpbHRlcihmaWx0ZXI6IGFueSwgZXZlbnQ6IGFueSwgY29sdW1uOiBhbnkpIHtcbiAgICB0aGlzLnNldEZpbHRlckZvY3VzT3V0KGNvbHVtbiwgZmlsdGVyLCBldmVudCk7XG4gICAgdGhpcy5kcm9wRG93bkZpbHRlciA9IHsgZmlsdGVyOiBmaWx0ZXIsIGV2ZW50OiBldmVudCwgY29sdW1uOiBjb2x1bW4gfTtcbiAgICAvLyBpZiAoY29sdW1uLmFsbG93U2VhcmNoICE9PSB0cnVlKSB7XG4gICAgLy8gICB0aGlzLmFwcGx5RHJvcGRvd25GaWx0ZXIoZmlsdGVyLCBldmVudCk7XG4gICAgLy8gfVxuICB9XG5cbiAgbG9va3VwQ2xlYXJWYWx1ZShjb2x1bW46IElHcmlkQ29sdW1uLCByb3c/OiBhbnkpIHtcbiAgICBpZiAocm93KSB7XG4gICAgICBjb2x1bW4uZGlzcGxheUZpZWxkID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldID0gJycgOiAnJ1xuICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnRleHQgPyByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS50ZXh0ID0gJycgOiAnJ1xuICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSAnJztcbiAgICAgIGlmICghcm93Ll9pc0VkaXRlZCkge1xuICAgICAgICByb3cuX2lzRWRpdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29sdW1uLmZpbHRlclZhbHVlID0gJyc7XG4gICAgICBkZWxldGUgY29sdW1uWydmaWx0ZXJWYWx1ZV9vYmonXTtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jb2x1bW5zLmZpbmRJbmRleCgoY29sKSA9PiBjb2wuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSk7XG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICB0aGlzLmNvbHVtbnNbaW5kZXhdLmZpbHRlclZhbHVlID0gJyc7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmNvbHVtbnNbaW5kZXhdWydmaWx0ZXJWYWx1ZV9vYmonXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uKTtcbiAgICB9XG4gICAgdGhpcy5icm93c2VyQ2xvc2VFdmVudCh0cnVlKTtcbiAgICBpZiAoY29sdW1uLm9uQ2hhbmdlKSB7XG4gICAgICBjb2x1bW4ub25DaGFuZ2Uocm93KTtcbiAgICB9XG4gIH1cblxuICBvbkNhbGVuZGFyTW9kZWxDaGFuZ2UodmFsdWU6IGFueSwgcm93OiBhbnksIGNvbHVtbjogSUdyaWRDb2x1bW4pOiB2b2lkIHtcbiAgICBpZiAoIXJvdy5faXNFZGl0ZWQpIHtcbiAgICAgIHJvdy5faXNFZGl0ZWQgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5RmllbGQgPSB2YWx1ZTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlICYmIGNvbHVtbi5mb3JtYXQgPT0gRUdyaWRGb3JtYXRUeXBlLlNIT1JUREFURSkge1xuICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh2YWx1ZSwgJ01NL2RkL3l5eXknKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIC8vIGludm9rZSB3aGVuIGNsaWNrIGhlYWRlciBjaGVja2JveCBmaWx0ZXJcbiAgY2xpY2tDaGVja0JveEZpbHRlcihjb2x1bW46IElHcmlkQ29sdW1uLCBldmVudCkge1xuICAgIGNvbHVtbi5maWx0ZXJWYWx1ZSA9IGV2ZW50O1xuICAgIGlmIChjb2x1bW4uYWxsb3dTZWxlY3RBbGwpIHtcbiAgICAgIGlmIChcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOXG4gICAgICAgICYmXG4gICAgICAgIGNvbHVtbj8uZmlsdGVyPy50eXBlID09PSAnY2hlY2tib3gnICYmIGNvbHVtbi5maWx0ZXJpbmcgIT0gZmFsc2VcbiAgICAgICkge1xuICAgICAgICB0aGlzLnJvd3NEYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgIGlmIChyb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8uZGlzYWJsZWQgIT09IHRydWUgJiYgIWNvbHVtbi5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcm93Ll9pc0VkaXRlZCA9IHRydWU7XG4gICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXSA9IGNvbHVtbi5maWx0ZXJWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucm93c0NoYW5nZS5vYnNlcnZlcnM/Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9uQ2hlY2tCb3hGaWx0ZXJDbGljay5lbWl0KGNvbHVtbik7XG4gIH1cbiAgLy9zZXQgaGVhZGVyIGNoZWNrYm94IHZhbHVlIGZvciBnZXR0aW5nIGFsbCBjb2x1bW5zIG9uIHN0YXkgYWRtaW5cbiAgc2V0SGVhZGVyQ2hlY2tCb3hWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5pc0luY2x1ZGVkQWxsQ29sdW1ucy5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIC8vIHNldCBjYWxlbmRhciAyIE9yIDQgZGlnaXQgeWVhciBmb3JtYXRcbiAgY2FsZW5kYXJJbnB1dFZhbHVlKGNvbHVtbjogYW55LCByb3c6IGFueSwgaXNGaWx0ZXJJbnB1dCA9IGZhbHNlKSB7XG4gICAgaWYgKCFyb3cuX2lzRWRpdGVkKSB7XG4gICAgICByb3cuX2lzRWRpdGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFjb2x1bW4udGltZU9ubHkpIHtcbiAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IGlzRmlsdGVySW5wdXQgPyBjb2x1bW4uZmllbGQgKyAnLWZpbHRlci1pbnB1dCcgOiBjb2x1bW4uZmllbGQgKyByb3dbdGhpcy5kYXRhS2V5XTtcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lKVswXT8uYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCAodmFsOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKCF2YWw/LnRhcmdldD8udmFsdWU/LmluY2x1ZGVzKCcvJykpIHtcbiAgICAgICAgICBpZiAodmFsPy50YXJnZXQ/LnZhbHVlPy5sZW5ndGggPT0gOCB8fCBjb2x1bW4/LmZvcm1hdD8udHlwZSA9PT0gRUdyaWRGb3JtYXRUeXBlLlNIT1JUREFURSkge1xuICAgICAgICAgICAgdmFsLnRhcmdldC52YWx1ZSA9IHZhbD8udGFyZ2V0Py52YWx1ZT8ucmVwbGFjZSgvKFxcZHsyfSkoXFxkezJ9KShcXGR7NH0pLywgJyQxLyQyLyQzJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKHZhbD8udGFyZ2V0Py52YWx1ZT8ubGVuZ3RoID09IDYpIHtcbiAgICAgICAgICAgIHZhbC50YXJnZXQudmFsdWUgPSB2YWw/LnRhcmdldD8udmFsdWU/LnJlcGxhY2UoLyhcXGR7Mn0pKD89XFxkKS9nLCAnJDEvJyk7XG4gICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHZhbC50YXJnZXQudmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHllYXIgPSB2YWw/LnRhcmdldD8udmFsdWU/LnRvU3RyaW5nKCk/LnNwbGl0KCcvJylbMl07XG4gICAgICAgIGlmICh5ZWFyICYmIHllYXIubGVuZ3RoID09IDQpIHtcbiAgICAgICAgICBpZiAoaXNGaWx0ZXJJbnB1dCkge1xuICAgICAgICAgICAgY29sdW1uLmZpbHRlclZhbHVlID0gbmV3IERhdGUodmFsPy50YXJnZXQ/LnZhbHVlKT8udG9Mb2NhbGVEYXRlU3RyaW5nKFwiZW4tVVNcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY2FsZW5kYXJGb3JtYXQgPSAnbW0vZGQveXknO1xuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gbmV3IERhdGUodmFsPy50YXJnZXQ/LnZhbHVlKT8udG9Mb2NhbGVEYXRlU3RyaW5nKFwiZW4tVVNcIik7XG4gICAgICAgIH0gZWxzZSBpZiAoeWVhciAmJiB5ZWFyLmxlbmd0aCA9PSAyKSB7XG4gICAgICAgICAgaWYgKGlzRmlsdGVySW5wdXQpIHtcbiAgICAgICAgICAgIGNvbHVtbi5maWx0ZXJWYWx1ZSA9IG5ldyBEYXRlKHZhbD8udGFyZ2V0Py52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY2FsZW5kYXJGb3JtYXQgPSAnbW0vZGQveSc7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICB9XG4gIGNoYW5nZVBhc3N3b3JkVHlwZShjb2x1bW4sIHJvdykge1xuICAgIHZhciB0ZXh0VHlwZSA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddID8gKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLnRleHRUeXBlID09ICdwYXNzd29yZCcgPyAndGV4dCcgOiAncGFzc3dvcmQnKSA6IGNvbHVtbi50ZXh0VHlwZSA9PSAncGFzc3dvcmQnID8gJ3RleHQnIDogJ3Bhc3N3b3JkJztcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnNldEdyaWRSb3dQcm9wVmFsdWUocm93LCBbeyBwcm9wTmFtZTogRUdyaWRSb3dQcm9wTmFtZS5URVhUVFlQRSwgcHJvcFZhbHVlOiB0ZXh0VHlwZSwgZmllbGQ6IGNvbHVtbi5maWVsZCB9XSk7XG5cbiAgfVxuXG4gIHNob3dDb25maXJtYXRpb24oZXZlbnQ6IElHcmlkUGFnaW5hdGlvbkV2ZW50KSB7XG4gICAgY29uc3QgdGFibGVXcmFwcGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5wLWRhdGF0YWJsZS13cmFwcGVyXCIpO1xuICAgIGNvbnN0IHRhYmxlV3JhcHBlclNjcm9sbFRvcCA9IHRhYmxlV3JhcHBlcj8uc2Nyb2xsVG9wO1xuICAgIGNvbnN0IHRhYmxlV3JhcHBlclNjcm9sbExlZnQgPSB0YWJsZVdyYXBwZXI/LnNjcm9sbExlZnQ7XG4gICAgaWYgKHRhYmxlV3JhcHBlclNjcm9sbFRvcCkge1xuICAgICAgdGhpcy5zY3JvbGxQb3NpdGlvblkgPSB0YWJsZVdyYXBwZXJTY3JvbGxUb3A7XG4gICAgICB0aGlzLnNjcm9sbFBvc2l0aW9uWCA9IHRhYmxlV3JhcHBlclNjcm9sbExlZnQ7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLlBhZ2VDaGFuZ2UpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBldmVudC5maXJzdCAvIGV2ZW50LnJvd3M7XG4gICAgfVxuICAgIGlmIChjb25maXJtKFwiWW91IHdpbGwgbG9zZSBjaGFuZ2VzIG5vdCBzYXZlZCBvbiBwYWdlLiBXb3VsZCB5b3UgbGlrZSB0byBjb250aW51ZT9cIikgPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5hdXRvTG9hZERhdGEgPSB0cnVlO1xuICAgICAgdGhpcy5yb3dzQ2hhbmdlLmVtaXQodGhpcy5yb3dzRGF0YSlcbiAgICAgIHRoaXMuaGFuZGxlU2VydmVyU2lkZVBhZ2luYXRpb24oZXZlbnQpO1xuICAgICAgdGhpcy5ncmlkU2VydmljZS5jb2x1bW5Gb2N1c2VkT3V0ID0gZmFsc2U7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuUGFnZUNoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy50YWJsZS5maXJzdCA9IHRoaXMuY3VycmVudFBhZ2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50YWJsZS5maXJzdCA9IE1hdGguZmxvb3IodGhpcy5jdXJyZW50UGFnZSAvIGV2ZW50LnJvd3MpO1xuICAgICAgICAgICAgdGhpcy50YWJsZS5yb3dzID0gZXZlbnQucm93cztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRhYmxlV3JhcHBlclNjcm9sbFRvcCA9PT0gMCkge1xuICAgICAgICAgICAgdGFibGVXcmFwcGVyLnNjcm9sbFRvKHRoaXMuc2Nyb2xsUG9zaXRpb25YLCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0YWJsZVdyYXBwZXIuc2Nyb2xsVG8odGhpcy5zY3JvbGxQb3NpdGlvblgsIHRoaXMuc2Nyb2xsUG9zaXRpb25ZKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgdGhpcy5hdXRvTG9hZERhdGEgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBsb29rdXBJbnB1dE5nTW9kZWwocm93OiBhbnksIGNvbHVtbjogYW55KTogYW55IHtcbiAgICBpZiAocm93Py5pc05ldyB8fCByb3c/LmlzbmV3KSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddID09PSAnb2JqZWN0JyAmJiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8udGV4dD8udGV4dCAhPSB1bmRlZmluZWQgPyByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8udGV4dD8udGV4dCA6IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgIH1cblxuICAgIGlmIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkKSB7XG4gICAgICByZXR1cm4gcm93W3Jvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnRleHQgPT09ICdvYmplY3QnICYmIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy50ZXh0Py50ZXh0ICE9IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy50ZXh0Py50ZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBjb2x1bW4uZGlzcGxheUZpZWxkID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldIDogcm93W2NvbHVtbi5maWVsZF07XG4gIH1cblxuICBnZXRMb29rdXBDb250cm9sRGF0YShjb2x1bW46IElHcmlkQ29sdW1uLCByb3c6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIHJvdz8uW2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGEgfHwgY29sdW1uPy5sb29rdXBDb250cm9sPy5kYXRhIHx8IHt9O1xuICB9XG5cbiAgaXNMb29rdXBJbnB1dEVkaXRhYmxlKGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdzogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgbG9va3VwRGF0YSA9IHRoaXMuZ2V0TG9va3VwQ29udHJvbERhdGEoY29sdW1uLCByb3cpO1xuICAgIHJldHVybiBsb29rdXBEYXRhPy5hbGxvd0lucHV0ID09PSB0cnVlO1xuICB9XG5cbiAgZ2V0TG9va3VwQ29uZmlnRGF0YShjb2x1bW46IElHcmlkQ29sdW1uLCByb3c6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9va3VwQ29udHJvbERhdGEoY29sdW1uLCByb3cpPy5kYXRhIHx8IHt9O1xuICB9XG5cbiAgbm9ybWFsaXplTG9va3VwSW5wdXRWYWx1ZSh2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gKHZhbHVlID8/ICcnKS50b1N0cmluZygpLnJlcGxhY2UoL1xccj9cXG58XFxyL2csICcgJykudHJpbSgpO1xuICB9XG5cbiAgc2V0TG9va3VwSW5wdXRWYWx1ZShyb3c6IGFueSwgY29sdW1uOiBJR3JpZENvbHVtbiwgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IHRoaXMubm9ybWFsaXplTG9va3VwSW5wdXRWYWx1ZSh2YWx1ZSk7XG4gICAgY29uc3QgZGlzcGxheUZpZWxkS2V5ID0gY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCByb3dPYmpLZXkgPSBjb2x1bW4uZmllbGQgKyAnX29iaic7XG4gICAgY29uc3QgY3VycmVudE9iaiA9IHJvd1tyb3dPYmpLZXldIHx8IHt9O1xuXG4gICAgcm93W2NvbHVtbi5maWVsZF0gPSBub3JtYWxpemVkVmFsdWU7XG4gICAgaWYgKGRpc3BsYXlGaWVsZEtleSkge1xuICAgICAgcm93W2Rpc3BsYXlGaWVsZEtleV0gPSBub3JtYWxpemVkVmFsdWU7XG4gICAgfVxuICAgIHJvd1tyb3dPYmpLZXldID0ge1xuICAgICAgLi4uY3VycmVudE9iaixcbiAgICAgIHRleHQ6IG5vcm1hbGl6ZWRWYWx1ZSA/IHsgdGV4dDogbm9ybWFsaXplZFZhbHVlLCB2YWx1ZTogbm9ybWFsaXplZFZhbHVlIH0gOiAnJyxcbiAgICB9O1xuICB9XG5cbiAgYnVpbGRMb29rdXBSZXNvbHV0aW9uRmlsdGVycyhjb2x1bW46IElHcmlkQ29sdW1uLCByb3c6IGFueSwgZmllbGROYW1lOiBzdHJpbmcsIGZpZWxkVmFsdWU6IHN0cmluZyk6IGFueVtdIHtcbiAgICBjb25zdCBsb29rdXBDb25maWdEYXRhID0gdGhpcy5nZXRMb29rdXBDb25maWdEYXRhKGNvbHVtbiwgcm93KTtcbiAgICBjb25zdCBmaWx0ZXJzID0gQXJyYXkuaXNBcnJheShsb29rdXBDb25maWdEYXRhPy5maWx0ZXJzKSA/IFsuLi5sb29rdXBDb25maWdEYXRhLmZpbHRlcnNdIDogW107XG4gICAgY29uc3QgbGFiZWxQcm9wID0gdGhpcy5nZXRMb29rdXBDb250cm9sRGF0YShjb2x1bW4sIHJvdyk/LmxhYmVsUHJvcD8udG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCB2YWx1ZVByb3AgPSB0aGlzLmdldExvb2t1cENvbnRyb2xEYXRhKGNvbHVtbiwgcm93KT8udmFsdWVQcm9wPy50b0xvd2VyQ2FzZSgpO1xuXG4gICAgT2JqZWN0LmVudHJpZXMobG9va3VwQ29uZmlnRGF0YSB8fCB7fSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGtleT8udG9Mb3dlckNhc2UoKSAhPT0gJ3VuaXF1ZWtleScgJiZcbiAgICAgICAga2V5Py50b0xvd2VyQ2FzZSgpICE9PSAnZmlsdGVycycgJiZcbiAgICAgICAga2V5Py50b0xvd2VyQ2FzZSgpICE9PSBsYWJlbFByb3AgJiZcbiAgICAgICAga2V5Py50b0xvd2VyQ2FzZSgpICE9PSB2YWx1ZVByb3AgJiZcbiAgICAgICAgdmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgICB2YWx1ZSAhPT0gJycgJiZcbiAgICAgICAgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0J1xuICAgICAgKSB7XG4gICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgZmllbGQ6IGtleSxcbiAgICAgICAgICBtYXRjaE1vZGU6IEVNYXRjaE1vZGUuRVFVQUxTLFxuICAgICAgICAgIG9wZXJhdG9yOiBFT3BlcmF0b3IuQU5ELFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICBmaWVsZDogZmllbGROYW1lLFxuICAgICAgbWF0Y2hNb2RlOiBFTWF0Y2hNb2RlLkVRVUFMUyxcbiAgICAgIG9wZXJhdG9yOiBFT3BlcmF0b3IuQU5ELFxuICAgICAgdmFsdWU6IGZpZWxkVmFsdWUsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmlsdGVycztcbiAgfVxuXG4gIGFzeW5jIGZldGNoTG9va3VwUmVzb2x1dGlvblJlY29yZChjb2x1bW46IElHcmlkQ29sdW1uLCByb3c6IGFueSwgZmllbGROYW1lOiBzdHJpbmcsIGZpZWxkVmFsdWU6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgbG9va3VwQ29uZmlnRGF0YSA9IHRoaXMuZ2V0TG9va3VwQ29uZmlnRGF0YShjb2x1bW4sIHJvdyk7XG4gICAgY29uc3QgdW5pcXVlS2V5ID0gbG9va3VwQ29uZmlnRGF0YT8udW5pcXVlS2V5O1xuXG4gICAgaWYgKCF1bmlxdWVLZXkgfHwgIWZpZWxkTmFtZSB8fCAhZmllbGRWYWx1ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2U6IGFueSA9IGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLnJlcXVlc3RTZXJ2aWNlLmdldDxhbnlbXSwgYW55PignL0RhdGEvRmV0Y2gnLCB7XG4gICAgICAgIHVuaXF1ZUtleSxcbiAgICAgICAgZmlsdGVyczogdGhpcy5idWlsZExvb2t1cFJlc29sdXRpb25GaWx0ZXJzKGNvbHVtbiwgcm93LCBmaWVsZE5hbWUsIGZpZWxkVmFsdWUpLFxuICAgICAgICBwYWdlU2l6ZTogMSxcbiAgICAgICAgcGFnZTogMSxcbiAgICAgIH0pLnN1YnNjcmliZShcbiAgICAgICAgKHJlcykgPT4gcmVzb2x2ZShyZXMpLFxuICAgICAgICAoKSA9PiByZXNvbHZlKG51bGwpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaWYgKCFyZXNwb25zZT8ucmVjb3Jkcz8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5ncmlkU2VydmljZS5zZXREYXRhRmllbGRzKHJlc3BvbnNlLnJlY29yZHMpPy5bMF0gfHwgbnVsbDtcbiAgfVxuXG4gIGFwcGx5UmVzb2x2ZWRMb29rdXBSZWNvcmQocm93OiBhbnksIGNvbHVtbjogSUdyaWRDb2x1bW4sIHJlc29sdmVkUmVjb3JkOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIXJlc29sdmVkUmVjb3JkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgbGFiZWxQcm9wID0gdGhpcy5nZXRMb29rdXBDb250cm9sRGF0YShjb2x1bW4sIHJvdyk/LmxhYmVsUHJvcD8udG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCB2YWx1ZVByb3AgPSB0aGlzLmdldExvb2t1cENvbnRyb2xEYXRhKGNvbHVtbiwgcm93KT8udmFsdWVQcm9wPy50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHJlc29sdmVkVmFsdWUgPSByZXNvbHZlZFJlY29yZFt2YWx1ZVByb3AgfHwgY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXTtcbiAgICBjb25zdCByZXNvbHZlZFRleHQgPSByZXNvbHZlZFJlY29yZFtsYWJlbFByb3AgfHwgY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKSB8fCBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldO1xuXG4gICAgaWYgKHJlc29sdmVkVmFsdWUgPT09IHVuZGVmaW5lZCB8fCByZXNvbHZlZFRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcmVzb2x2ZWRWYWx1ZTtcbiAgICBpZiAoY29sdW1uLmRpc3BsYXlGaWVsZCkge1xuICAgICAgcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldID0gcmVzb2x2ZWRUZXh0O1xuICAgIH1cbiAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSA9IHtcbiAgICAgIC4uLihyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSB8fCB7fSksXG4gICAgICB0ZXh0OiB7IHRleHQ6IHJlc29sdmVkVGV4dCwgdmFsdWU6IHJlc29sdmVkVmFsdWUgfSxcbiAgICB9O1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgcmVzb2x2ZUxvb2t1cElucHV0VmFsdWUoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXRoaXMuaXNMb29rdXBJbnB1dEVkaXRhYmxlKGNvbHVtbiwgcm93KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGVkVmFsdWUgPSB0aGlzLm5vcm1hbGl6ZUxvb2t1cElucHV0VmFsdWUodGhpcy5sb29rdXBJbnB1dE5nTW9kZWwocm93LCBjb2x1bW4pKTtcbiAgICBjb25zdCBzZWFyY2hGaWVsZCA9IHRoaXMuZ2V0TG9va3VwQ29udHJvbERhdGEoY29sdW1uLCByb3cpPy5zZWFyY2hGaWVsZDtcbiAgICBjb25zdCBsYWJlbFByb3AgPSB0aGlzLmdldExvb2t1cENvbnRyb2xEYXRhKGNvbHVtbiwgcm93KT8ubGFiZWxQcm9wO1xuICAgIGNvbnN0IHZhbHVlUHJvcCA9IHRoaXMuZ2V0TG9va3VwQ29udHJvbERhdGEoY29sdW1uLCByb3cpPy52YWx1ZVByb3A7XG5cbiAgICBpZiAoIXR5cGVkVmFsdWUgfHwgKCFsYWJlbFByb3AgJiYgIXZhbHVlUHJvcCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBzZWFyY2hNYXRjaCA9IHNlYXJjaEZpZWxkXG4gICAgICA/IGF3YWl0IHRoaXMuZmV0Y2hMb29rdXBSZXNvbHV0aW9uUmVjb3JkKGNvbHVtbiwgcm93LCBzZWFyY2hGaWVsZCwgdHlwZWRWYWx1ZSlcbiAgICAgIDogbnVsbDtcblxuICAgIGlmICh0aGlzLmFwcGx5UmVzb2x2ZWRMb29rdXBSZWNvcmQocm93LCBjb2x1bW4sIHNlYXJjaE1hdGNoKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgbGFiZWxNYXRjaCA9IGxhYmVsUHJvcFxuICAgICAgPyBhd2FpdCB0aGlzLmZldGNoTG9va3VwUmVzb2x1dGlvblJlY29yZChjb2x1bW4sIHJvdywgbGFiZWxQcm9wLCB0eXBlZFZhbHVlKVxuICAgICAgOiBudWxsO1xuXG4gICAgaWYgKHRoaXMuYXBwbHlSZXNvbHZlZExvb2t1cFJlY29yZChyb3csIGNvbHVtbiwgbGFiZWxNYXRjaCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlTWF0Y2ggPVxuICAgICAgdmFsdWVQcm9wICYmIHZhbHVlUHJvcD8udG9Mb3dlckNhc2UoKSAhPT0gbGFiZWxQcm9wPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgID8gYXdhaXQgdGhpcy5mZXRjaExvb2t1cFJlc29sdXRpb25SZWNvcmQoY29sdW1uLCByb3csIHZhbHVlUHJvcCwgdHlwZWRWYWx1ZSlcbiAgICAgICAgOiBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBwbHlSZXNvbHZlZExvb2t1cFJlY29yZChyb3csIGNvbHVtbiwgdmFsdWVNYXRjaCk7XG4gIH1cblxuICAvLyBDYWxsIHRoaXMgZnVuY3Rpb24gd2hlbiBzZXR0aW5nIHRoZSBuZ01vZGVsIHZhbHVlXG4gIGNoYW5nZUxvb2t1cElucHV0TmdNb2RlbChyb3c6IGFueSwgY29sdW1uOiBhbnksIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXJvdy5faXNFZGl0ZWQpIHtcbiAgICAgIHJvdy5faXNFZGl0ZWQgPSB0cnVlO1xuICAgIH1cbiAgICByb3cuX2lzRWRpdGVkID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5pc0xvb2t1cElucHV0RWRpdGFibGUoY29sdW1uLCByb3cpKSB7XG4gICAgICB0aGlzLnNldExvb2t1cElucHV0VmFsdWUocm93LCBjb2x1bW4sIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBvbkxvb2t1cElucHV0UGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50LCBjb2x1bW46IElHcmlkQ29sdW1uLCByb3c6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5pc0xvb2t1cElucHV0RWRpdGFibGUoY29sdW1uLCByb3cpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFzdGVkVmFsdWUgPSB0aGlzLm5vcm1hbGl6ZUxvb2t1cElucHV0VmFsdWUoZXZlbnQuY2xpcGJvYXJkRGF0YT8uZ2V0RGF0YSgndGV4dCcpKTtcbiAgICBpZiAoIXBhc3RlZFZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnNldExvb2t1cElucHV0VmFsdWUocm93LCBjb2x1bW4sIHBhc3RlZFZhbHVlKTtcbiAgICBhd2FpdCB0aGlzLnJlc29sdmVMb29rdXBJbnB1dFZhbHVlKGNvbHVtbiwgcm93KTtcbiAgICB0aGlzLm9uQ2hhbmdlRXZlbnQoY29sdW1uLCByb3cpO1xuICB9XG5cbiAgYXN5bmMgb25Mb29rdXBJbnB1dEVudGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBjb2x1bW46IElHcmlkQ29sdW1uLCByb3c6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGNvbnN0IHR5cGVkVmFsdWUgPSB0aGlzLm5vcm1hbGl6ZUxvb2t1cElucHV0VmFsdWUodGFyZ2V0Py52YWx1ZSk7XG5cbiAgICBpZiAoIXRoaXMuaXNMb29rdXBJbnB1dEVkaXRhYmxlKGNvbHVtbiwgcm93KSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuc2VsZWN0TG9va3VwRmllbGQoY29sdW1uLCByb3cpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0TG9va3VwSW5wdXRWYWx1ZShyb3csIGNvbHVtbiwgdHlwZWRWYWx1ZSk7XG4gICAgY29uc3QgaXNSZXNvbHZlZCA9IGF3YWl0IHRoaXMucmVzb2x2ZUxvb2t1cElucHV0VmFsdWUoY29sdW1uLCByb3cpO1xuICAgIHRoaXMub25DaGFuZ2VFdmVudChjb2x1bW4sIHJvdyk7XG5cbiAgICBpZiAoXG4gICAgICB0eXBlZFZhbHVlICYmXG4gICAgICAhaXNSZXNvbHZlZCAmJlxuICAgICAgdGhpcy5pc0xvb2t1cElucHV0RWRpdGFibGUoY29sdW1uLCByb3cpICYmXG4gICAgICBjb2x1bW4uYWxsb3dBdXRvQ29tcGxldGVTYXZlICYmXG4gICAgICBjb2x1bW4udW5pcXVlS2V5XG4gICAgKSB7XG4gICAgICBpZiAoY29uZmlybShgRG8geW91IHdhbnQgdG8gYWRkICR7dHlwZWRWYWx1ZX0gdG8gdGhlIGxvb2t1cD9gKSkge1xuICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLmFkZEF1dG9Db21wbGV0ZVZhbHVlKGNvbHVtbi51bmlxdWVLZXksIHR5cGVkVmFsdWUsIGNvbHVtbiwgcm93KS50aGVuKCgpID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uLm9uUmV0dXJuKSB7XG4gICAgICAgICAgICBjb2x1bW4ub25SZXR1cm4odHlwZWRWYWx1ZSwgY29sdW1uLCByb3cpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICBnZXRBdXRvQ29tcGxldGVOZ01vZGVsKHJvdzogYW55LCBjb2x1bW46IGFueSk6IGFueSB7XG4gICAgaWYgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQpIHtcbiAgICAgIHJldHVybiByb3dbcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHJvd1tjb2x1bW4uZmllbGRdID09PSAnb2JqZWN0JyAmJiByb3dbY29sdW1uLmZpZWxkXT8udGV4dCkge1xuICAgICAgcmV0dXJuIHJvd1tjb2x1bW4uZmllbGRdPy50ZXh0O1xuICAgIH1cblxuICAgIHJldHVybiByb3dbY29sdW1uLmZpZWxkXTtcbiAgfVxuXG4gIC8vIEZ1bmN0aW9uIHRvIHNldCBuZ01vZGVsIHZhbHVlXG4gIGNoYW5nZUF1dG9Db21wbGV0ZU5nTW9kZWwocm93OiBhbnksIGNvbHVtbjogYW55LCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgY29uc3QgZmllbGQgPSBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCk7XG4gICAgcm93W2ZpZWxkXSA9IHZhbHVlO1xuICB9XG5cbiAgc2V0SW5wdXROZ01vZGVsKHJvdzogYW55LCBjb2x1bW46IGFueSk6IGFueSB7XG4gICAgaWYgKHJvdy51bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAnJzsgIC8vIElmICdyb3cudW5kZWZpbmVkJyBpcyB0cnVlLCByZXR1cm4gZW1wdHkgc3RyaW5nXG4gICAgfVxuXG4gICAgLy8gRXZhbHVhdGUgb3RoZXIgY29uZGl0aW9ucyBiYXNlZCBvbiByb3cgYW5kIGNvbHVtbiBkYXRhXG4gICAgaWYgKHRoaXMuYWxsb3dEaXNhYmxlZChjb2x1bW4sIHJvdykgJiYgcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdKSB7XG4gICAgICByZXR1cm4gcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdO1xuICAgIH1cblxuICAgIGlmIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSAmJiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS52YWx1ZSkge1xuICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS52YWx1ZTtcbiAgICAgIHJldHVybiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS52YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcm93W2NvbHVtbi5maWVsZF07ICAvLyBGYWxsYmFjayB0byAncm93W2NvbHVtbi5maWVsZF0nXG4gIH1cblxuICAvLyBGdW5jdGlvbiB0byBzZXQgdGhlIHZhbHVlICh3aGVuIG5nTW9kZWwgY2hhbmdlcylcbiAgY2hhbmdlSW5wdXROZ01vZGVsKHJvdzogYW55LCBjb2x1bW46IGFueSwgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgIC8vIFlvdSBjYW4gdXNlIHRoaXMgZnVuY3Rpb24gdG8gdXBkYXRlIHlvdXIgZGF0YSBtb2RlbCBiYXNlZCBvbiB0aGUgdmFsdWVcbiAgICBpZiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10pIHtcbiAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gdmFsdWU7XG4gICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS52YWx1ZSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICBvbklucHV0Q2hhbmdlKHZhbHVlOiBhbnksIHJvdzogYW55LCBjb2x1bW46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuY2hhbmdlSW5wdXROZ01vZGVsKHJvdywgY29sdW1uLCB2YWx1ZSk7XG4gIH1cblxuICBnZXRDaGVja2JveFZhbHVlKHJvdzogYW55LCBjb2x1bW46IElHcmlkQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgaWYgKCFyb3dbY29sdW1uLmZpZWxkXSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgdmFsdWUgPSByb3dbY29sdW1uLmZpZWxkXTtcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLnRleHQpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ2hlY2tlZCh2YWx1ZS50ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5pc0NoZWNrZWQodmFsdWUpO1xuICB9XG5cbiAgaXNDaGVja2VkKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCBtYXRjaFZhbHVlID0gWycxJywgJ3RydWUnLCAneSddO1xuICAgIHJldHVybiBtYXRjaFZhbHVlLmluY2x1ZGVzKHZhbHVlPy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpO1xuICB9XG4gIGdldE1vcmVDb2x1bW5zKCk6IElHcmlkQ29sdW1uW10ge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbnM/LmZpbHRlcihjb2x1bW4gPT4gY29sdW1uPy5zaG93SW5Nb3JlKSA/PyBbXTtcbiAgfVxuXG4gIGJ1aWxkTW9yZUl0ZW1zRm9yUm93KHJvdzogYW55KTogTWVudUl0ZW1bXSB7XG4gICAgY29uc3QgaXRlbXM6IE1lbnVJdGVtW10gPSBbXTtcbiAgICBjb25zdCBtb3JlQ29sdW1ucyA9IHRoaXMuZ2V0TW9yZUNvbHVtbnMoKTtcblxuICAgIGZvciAoY29uc3QgY29sIG9mIG1vcmVDb2x1bW5zKSB7XG4gICAgICBjb25zdCBsYWJlbCA9IGNvbC5oZWFkZXIgfHwgY29sLmRpc3BsYXlUZXh0IHx8IGNvbC5maWVsZDtcbiAgICAgIGNvbnN0IGh5cGVybGluayA9IHJvdz8uW2Ake2NvbC5maWVsZH1fb2JqYF0/Lmh5cGVybGluayB8fCByb3c/Lltjb2wuZmllbGRdO1xuXG4gICAgICBpZiAoY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MSU5LKSB7XG4gICAgICAgIGl0ZW1zLnB1c2goaHlwZXJsaW5rID8ge1xuICAgICAgICAgIGxhYmVsLCBpY29uOiBjb2wuaWNvbiwgdXJsOiBoeXBlcmxpbmssXG4gICAgICAgICAgdGFyZ2V0OiBjb2wub3BlbkluTmV3VGFiIHx8IGNvbC50YXJnZXQgPT09IEVHcmlkbGluay5CTEFOSyA/IEVHcmlkbGluay5CTEFOSyA6IEVHcmlkbGluay5TRUxGXG4gICAgICAgIH0gOiB7IGxhYmVsLCBpY29uOiBjb2wuaWNvbiwgY29tbWFuZDogKCkgPT4gY29sLm9uQ2xpY2s/Lihyb3cpIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRElBTE9HKSB7XG4gICAgICAgIGl0ZW1zLnB1c2goeyBsYWJlbCwgaWNvbjogY29sLmljb24sIGNvbW1hbmQ6ICgpID0+IHRoaXMub3BlbkdyaWREaWFsb2coY29sLCByb3cpIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChjb2wub25DbGljaykge1xuICAgICAgICBpdGVtcy5wdXNoKHsgbGFiZWwsIGljb246IGNvbC5pY29uLCBjb21tYW5kOiAoKSA9PiBjb2wub25DbGljayEocm93KSB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG5cbiAgaGFzTW9yZUNvbHVtbnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TW9yZUNvbHVtbnMoKT8ubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGhhc01vcmVJdGVtcyhyb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkTW9yZUl0ZW1zRm9yUm93KHJvdyk/Lmxlbmd0aCA+IDA7XG4gIH1cblxuICBzaG93TW9yZShldmVudDogYW55LCByb3c6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudE1vcmVNZW51ID0gdGhpcy5idWlsZE1vcmVJdGVtc0ZvclJvdyhyb3cpO1xuICAgIHRoaXMubW9yZU1lbnU/LnRvZ2dsZShldmVudCk7XG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cImdyaWQtY29tcG9uZW50LXdyYXBwZXJcIj5cbiAgPHAtY29uZmlybURpYWxvZyBbc3R5bGVdPVwieyB3aWR0aDogJzUwdncnIH1cIiAqbmdJZj1cInVzZUlubGluZUNSVURcIiBrZXk9XCJoYW5kbGVJbmxpbmVDUlVEXCI+PC9wLWNvbmZpcm1EaWFsb2c+XG4gIDxwLWNvbmZpcm1EaWFsb2cgY2xhc3M9XCJncmlkLWNvbXBvbmVudC1jb25maXJtLWRpYWxvZ1wiICpuZ0lmPVwiY29sdW1uQWN0aW9ucy5sZW5ndGggPiAwXCJcbiAgICBrZXk9XCJoYW5kbGVjb2x1bW5BY3Rpb25zXCI+PC9wLWNvbmZpcm1EaWFsb2c+XG4gIDxkaXYgY2xhc3M9XCJnbG9iYWwtZmlsdGVyLWJ1dHRvbnMtd3JhcHBlciBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuXG4gICAgPCEtLSBidXR0b24gZm9yIGFwcGx5IHZhbHVlIG9uIEdyaWQgLS0+XG4gICAgPGJ1dHRvbiAqbmdJZj1cIigoZmlsdGVyaW5nICYmICFoaWRlRmlsdGVyICkgfHwgc2hvd0ZpbHRlcmJ0bilcIiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktc2VhcmNoXCJcbiAgICAgIChjbGljayk9XCJhcHBseUdyaWRGaWx0ZXJCdG4oKVwiIFtjbGFzc109XCJcbiAgc2VhcmNoR3JpZEZpbHRlciA/ICdwLWJ1dHRvbi1zdWNjZXNzIGFwcGx5LWZpbHRlci1idG4gZmlsdGVyLWJ0bicgOiAnaGlkZS1jbGVhci1maWx0ZXItYnV0dG9uIGFwcGx5LWZpbHRlci1idG4gZmlsdGVyLWJ0bidcbiAgXCI+PC9idXR0b24+XG5cbiAgICA8IS0tIGJ1dHRvbiBmb3IgY2xlYXIgdmFsdWUgb24gR3JpZCAtLT5cbiAgICA8YnV0dG9uICpuZ0lmPVwiKChmaWx0ZXJpbmcgJiYgIWhpZGVGaWx0ZXIgKXx8IHNob3dGaWx0ZXJidG4pXCIgcEJ1dHRvbiBpZD1cImNsZWFyR3JpZEZpbHRlclZhbHVlc0J1dHRvblwiIHR5cGU9XCJidXR0b25cIlxuICAgICAgaWNvbj1cInBpIHBpLXJlcGxheVwiIChjbGljayk9XCJjbGVhcmdyaWRGaWx0ZXJzVmFsdWUoKVwiIFtjbGFzc109XCJcbiAgICAgIGNsZWFyR3JpZEZpbHRlciA/ICdmaWx0ZXItYnRuJyA6ICdoaWRlLWNsZWFyLWZpbHRlci1idXR0b24gZmlsdGVyLWJ0bidcbiAgICAgIFwiIGNsYXNzPSdnbG9iYWwtcmVmcmVzaCBnbG9iYWwtYnRuJz48L2J1dHRvbj5cblxuICAgIDwhLS0gYnV0dG9uIGZvciBzYXZlIGFsbCBncmlkIGF0IG9uY2UgLS0+XG4gICAgPGJ1dHRvbiBwQnV0dG9uICpuZ0lmPVwiZWRpdEFsbFJvd3MgJiYgZWRpdFJvd1Blcm1pc3Npb25cIiBpZD1cInNhdmVBbGxHcmlkVmFsdWVzXCIgaWNvbj1cInBpIHBpLWNoZWNrXCIgW2xhYmVsXT1cIidTYXZlJ1wiXG4gICAgICBbY2xhc3NdPVwiaGlkZUdyaWRTYXZlQnV0dG9uID8gJ2hpZGUtY2xlYXItZmlsdGVyLWJ1dHRvbiBzYXZlLWFsbC1ncmlkJyA6ICd1aS1idXR0b24taW5mbyBzYXZlLWFsbC1ncmlkJ1wiXG4gICAgICB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInNhdmVBbGxSb3dzQXRPbmNlKClcIj48L2J1dHRvbj5cblxuICAgIDwhLS0gYnV0dG9uIGZvciBjYW5jZWwgYWxsIGdyaWQgYXQgb25jZSAtLT5cbiAgICA8YnV0dG9uIHBCdXR0b24gKm5nSWY9XCJlZGl0QWxsUm93cyAmJiAhaGlkZUdyaWRDYW5jZWxCdXR0b25cIiBpZD1cImVkaXRCdG5HbG9iYWx2YWx1ZXNcIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIFtsYWJlbF09XCInQ2FuY2VsJ1wiIGljb249XCJwaSBwaS10aW1lc1wiIGNsYXNzPVwidWktYnV0dG9uLWluZm9cIiAoY2xpY2spPVwiY2FuY2VsQWxsUm93c0F0T25jZSgpXCI+PC9idXR0b24+XG5cbiAgICA8IS0tIGhlYWRlciBCdXR0b24gZm9yIG11bHRpU2VsZWN0IG9uIEdyaWQgLS0+XG4gICAgPHNwYW4gKm5nSWY9XCJhbGxvd0NvbHVtblRvZ2dsZVwiPlxuICAgICAgPHAtbXVsdGlTZWxlY3QgW3Nob3dUb2dnbGVBbGxdPVwiZmFsc2VcIiBvcHRpb25EaXNhYmxlZD1cImZhbHNlXCIgW29wdGlvbnNdPVwic2VsZWN0ZWRUb2dnbGVDb2x1bW5zXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZENvbHVtbnNcIiBvcHRpb25MYWJlbD1cImhlYWRlclwiIHNlbGVjdGVkSXRlbXNMYWJlbD1cInswfSBjb2x1bW5zIHNlbGVjdGVkXCJcbiAgICAgICAgY2xhc3M9XCJncmlkLWNvbXBvbmVudC1tdWx0aXNlbGVjdC1oZWFkZXItYnV0dG9uXCIgcGxhY2Vob2xkZXI9XCJDaG9vc2UgQ29sdW1uc1wiPlxuICAgICAgPC9wLW11bHRpU2VsZWN0PlxuICAgIDwvc3Bhbj5cblxuICAgIDwhLS0gaGVhZGVyIEJ1dHRvbiBmb3IgQWRkaW5nIG5ldyBSb3cgb24gR3JpZCAtLT5cbiAgICA8YnV0dG9uIHBCdXR0b24gKm5nSWY9XCJ1c2VJbmxpbmVDUlVEICYmIGFkZFJvd1Blcm1pc3Npb24gJiYgIWhpZGVBZGRCdG5cIiB0eXBlPVwiYnV0dG9uXCIgW2xhYmVsXT1cIidBZGQnXCIgcEFkZFJvd1xuICAgICAgW3RhYmxlXT1cImNvbXBvbmVudFRhYmxlUmVmXCIgW3ByZXZlbnROZXdSb3ddPVwicHJldmVudE5ld1Jvd1wiIFtuZXdSb3ddPVwibmV3R3JpZFJvd1wiIFtpZF09XCJkYXRhS2V5XCJcbiAgICAgIHBUb29sdGlwPVwiQWRkIE5ldyBSb3dcIiB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIiBpY29uPVwicGkgcGktcGx1c1wiXG4gICAgICBbY2xhc3NdPVwiJ3VpLWJ1dHRvbi1pbmZvIGdsb2JhbC1hZGQtYnRuJytncmlkTmFtZVwiIChjbGljayk9XCJhZGROZXdSb3cobmV3R3JpZFJvdywgdHJ1ZSlcIiBwUmlwcGxlPjwvYnV0dG9uPlxuXG5cbiAgICA8IS0tIGhlYWRlciBCdXR0b24gZm9yIEV4Y2VsIEZpbGUgb24gR3JpZCAtLT5cbiAgICA8YnV0dG9uICpuZ0lmPVwiYWxsb3dFeHBvcnRUb0V4Y2VsXCIgdHlwZT1cImJ1dHRvblwiIHBCdXR0b24gaWNvbj1cInBpIHBpLWZpbGUtZXhjZWxcIiAoY2xpY2spPVwiZXhwb3J0RXhjZWwoKVwiXG4gICAgICBjbGFzcz1cInAtYnV0dG9uLXN1Y2Nlc3NcIiBwVG9vbHRpcD1cIkV4cG9ydCB0byBFeGNlbFwiIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiIHBSaXBwbGU+PC9idXR0b24+XG5cbiAgICA8IS0tIGhlYWRlciBCdXR0b24gZm9yIFBERiBGaWxlIG9uIEdyaWQgLS0+XG4gICAgPGJ1dHRvbiAqbmdJZj1cImFsbG93RXhwb3J0VG9QZGZcIiB0eXBlPVwiYnV0dG9uXCIgcEJ1dHRvbiBpY29uPVwicGkgcGktZmlsZS1wZGZcIiAoY2xpY2spPVwiZXhwb3J0UGRmKClcIlxuICAgICAgY2xhc3M9XCJwLWJ1dHRvbi13YXJuaW5nIG1yLTIgbWwtMlwiIHBUb29sdGlwPVwiRXhwb3J0IHRvIFBkZlwiIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiIHBSaXBwbGU+PC9idXR0b24+XG5cbiAgICA8IS0tIDxkaXYgKm5nRm9yPVwibGV0IHJlcG9ydEJ1dHRvbiBvZiByZXBvcnRCdXR0b25zXCIgY2xhc3M9XCJ1aS1idXR0b24taW5mbyBtci0yIG1sLTJcIj5cbiAgICA8c2UtZ2VuZXJhdGUtcmVwb3J0LWJ0biAqbmdJZiA9XCIhcmVwb3J0QnV0dG9uLmhpZGRlblwiW3JlcElkXT1cInJlcG9ydEJ1dHRvbi5yZXBvcnRJZFwiIFtsYWJlbF09XCJyZXBvcnRCdXR0b24ubGFiZWxcIiBbcGFyYW1zXT1cInJlcG9ydEJ1dHRvbi5wYXJhbXNcIlxuICAgICAgW3Nob3dEaWFsb2ddPVwicmVwb3J0QnV0dG9uLnNob3dEaWFsb2dcIj48L3NlLWdlbmVyYXRlLXJlcG9ydC1idG4+XG4gIDwvZGl2PiAtLT5cblxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cblxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJlcG9ydEJ1dHRvbiBvZiByZXBvcnRCdXR0b25zXCI+XG4gICAgICA8c2UtZ2VuZXJhdGUtcmVwb3J0LWJ0biAqbmdJZj1cIiFyZXBvcnRCdXR0b24uaGlkZGVuXCIgW3JlcEluZm9dPVwicmVwb3J0QnV0dG9uXCIgW2xhYmVsXT1cInJlcG9ydEJ1dHRvbi5sYWJlbFwiXG4gICAgICAgIFtwYXJhbXNdPVwicmVwb3J0QnV0dG9uLnBhcmFtc1wiIFtpY29uXT1cInJlcG9ydEJ1dHRvbi5pY29uXCIgW2NsYXNzXT1cInJlcG9ydEJ1dHRvbi5jbGFzc1wiXG4gICAgICAgIFtzaG93RGlhbG9nXT1cInJlcG9ydEJ1dHRvbi5zaG93RGlhbG9nXCIgW3JlcG9ydFR5cGVdPVwiIHJlcG9ydEJ1dHRvbi5yZXBvcnRUeXBlXCJcbiAgICAgICAgW3JlcG9ydEhlYWRlcl09XCJyZXBvcnRCdXR0b24ucmVwb3J0SGVhZGVyXCIgW3JlcG9ydEZvb3Rlcl09XCJyZXBvcnRCdXR0b24ucmVwb3J0Rm9vdGVyXCI+PC9zZS1nZW5lcmF0ZS1yZXBvcnQtYnRuPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gIDwvZGl2PlxuXG4gIDxwLXRhYmxlICpuZ0lmPVwiIWlzR3JpZEhpZGRlblwiIGlkPVwibXktdGFibGVcIiBbdmFsdWVdPVwicm93c0RhdGFcIiBbY29sdW1uc109XCJzZWxlY3RlZENvbHVtbnNcIiBzb3J0TW9kZT1cIm11bHRpcGxlXCJcbiAgICBbbGF6eV09XCJ1c2VTZXJ2ZXJTaWRlRXZlbnRzIHx8IHBhZ2luYXRpb25cIiBbcGFnaW5hdG9yXT1cInBhZ2luYXRpb25cIlxuICAgIFthbHdheXNTaG93UGFnaW5hdG9yXT1cInBhZ2luYXRpb24gJiYgdG90YWxSZWNvcmRzID4gMFwiIFtnbG9iYWxGaWx0ZXJGaWVsZHNdPVwiZ2xvYmFsRmlsdGVyRmllbGRzXCJcbiAgICBbY2xhc3NdPVwiJyBncmlkLWNvbXBvbmVudC1tYWluLXRhYmxlICcgKyAocGFnaW5hdGlvbiB8fCAhcm93c0RhdGEubGVuZ3RoID8gJyBwYWdpbmF0aW9uICcgOiAnJykgKyAodGFibGVTdHlsZS5pbmNsdWRlcygnd2lkdGgnKSA/ICcgaGFzVGFibGVXaWR0aFN0eWxlICcgOiAnJykgKyAoYXV0b1Jlc2l6ZSA/ICcnIDogJ3RhYmxlLWxheW91dC1hdXRvJykgXCJcbiAgICAob25Db2xSZXNpemUpPVwib25Db2x1bW5SZXNpemUoJGV2ZW50LGR0KVwiIFtyZXNpemFibGVDb2x1bW5zXT1cInRydWVcIiByZXNwb25zaXZlTGF5b3V0PVwic2Nyb2xsXCJcbiAgICBjb2x1bW5SZXNpemVNb2RlPVwiZXhwYW5kXCIgW3Jvd3NdPVwiZGVmYXVsdFJvd3NcIiBbdG90YWxSZWNvcmRzXT1cInRvdGFsUmVjb3Jkc1wiXG4gICAgW3Jvd3NQZXJQYWdlT3B0aW9uc109XCJzZXRQYWdpbmF0aW9uTGVuZ3RoXCIgW3Nob3dDdXJyZW50UGFnZVJlcG9ydF09XCJzaG93Q3VycmVudFBhZ2VSZXBvcnRcIlxuICAgIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGU9XCJTaG93aW5nIHtmaXJzdH0gdG8ge2xhc3R9IG9mIHt7XG4gICAgICB0b3RhbFJlY29yZHNcbiAgICB9fSBlbnRyaWVzXCIgW2xvYWRpbmddPVwiIXNldEdyaWRSZWZyZXNoVGltZSA/IGxvYWRpbmcgOiBmYWxzZVwiXG4gICAgKG9uU29ydCk9XCJzb3J0RGlzYWJsZWQgPyAnJyA6IGhhbmRsZVNvcnRDaGFuZ2UoJGV2ZW50KVwiIChvbkZpbHRlcik9XCJoYW5kbGVGaWx0ZXJDaGFuZ2UoJGV2ZW50KVwiXG4gICAgKG9uTGF6eUxvYWQpPVwic2hvdWxkUnVuU2VydmVyU2lkZSgkZXZlbnQpID8gaGFuZGxlU2VydmVyU2lkZUV2ZW50cygkZXZlbnQsIGR0KSA6IG51bGxcIlxuICAgIChvblBhZ2UpPVwiZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCA/IHNob3dDb25maXJtYXRpb24oJGV2ZW50KSA6IGhhbmRsZVNlcnZlclNpZGVQYWdpbmF0aW9uKCRldmVudClcIiAjZHRcbiAgICBbZGF0YUtleV09XCJkYXRhS2V5XCIgW3NlbGVjdGlvbl09XCJzZWxlY3RlZFJvd3NcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uVGFibGVTZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiIHNlbGVjdGlvbk1vZGU9XCJtdWx0aXBsZVwiIFtzY3JvbGxhYmxlXT1cInNjcm9sbGFibGVcIlxuICAgIFt0YWJsZVN0eWxlXT1cInRhYmxlU3R5bGVcIiBbc2Nyb2xsSGVpZ2h0XT1cInNjcm9sbEhlaWdodFwiIGVkaXRNb2RlPVwicm93XCIgW2VkaXRpbmdSb3dLZXlzXT1cImVkaXRpbmdSb3dLZXlzXCJcbiAgICBbcm93SG92ZXJdPVwicm93SG92ZXJcIiBbbmdDbGFzc109XCJzZXRDbGFzc2FBbmRJZChkdClcIiAob25Sb3dSZW9yZGVyKT1cIm9uUm93UmVvcmRlcigkZXZlbnQpXCI+XG5cbiAgICA8ZGl2ICpuZ0lmPVwicm93QWN0aW9ucy5sZW5ndGggPiAwICYmIHJvd0FjdGlvbnMubGVuZ3RoID4gMFwiIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XG4gICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgcm93QWN0aW9uIG9mIHJvd0FjdGlvbnNcIj5cbiAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBbbGFiZWxdPVwicm93QWN0aW9uLnRpdGxlXCIgW2NsYXNzXT1cInJvd0FjdGlvbi5jbGFzc1wiXG4gICAgICAgICAgKGNsaWNrKT1cInJvd0FjdGlvbi5vbkNsaWNrKHNlbGVjdGVkUm93cylcIj48L2J1dHRvbj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gaGVhZGVyIGNvbHVtbnMgb24gR3JpZCAtLT5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCIgbGV0LWNvbHM+XG4gICAgICA8dHI+XG4gICAgICAgIDx0aCBwUmVzaXphYmxlQ29sdW1uICpuZ0lmPVwiYWxsb3dTZWxlY3Rpb24gJiYgc2VsZWN0aW9uVHlwZSA9PT0gJ211bHRpcGxlJ1wiIGNsYXNzPVwiZ3JpZC1jb21wb25lbnQtc2VsZWN0aW9uXCJcbiAgICAgICAgICBpZD1cInt7YWxsb3dTZWxlY3Rpb25IZWFkZXJ9fVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGgtY29udGVudC13cmFwcGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZC1jb21wb25lbnQtdGFibGUtaGVhZGVyLWlubmVyLWRpdi0yXG4gICAgICAgICAgICAgICAgICB0YWJsZS1oZWFkZXItaW5uZXItZGl2IGRpdi1sYXN0LWlubmVyLWh0bWwtaXMtaWNvblwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZsZXgtZ3Jvdy0xXCI+IHt7YWxsb3dTZWxlY3Rpb25IZWFkZXJ9fSA8L3NwYW4+XG4gICAgICAgICAgICAgIDxwLXRhYmxlSGVhZGVyQ2hlY2tib3ggKm5nSWY9XCJzZWxlY3Rpb25UeXBlID09PSAnbXVsdGlwbGUnXCIgYmluYXJ5PVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cImhhbmRsZUhlYWRlckNoZWNrYm94Q2hhbmdlKCRldmVudClcIj48L3AtdGFibGVIZWFkZXJDaGVja2JveD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoIHBSZXNpemFibGVDb2x1bW4gKm5nSWY9XCJhbGxvd1NlbGVjdGlvbiAmJiBzZWxlY3Rpb25UeXBlID09PSAnc2luZ2xlJ1wiIGlkPVwiU2VsZWN0XCIgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiXG4gICAgICAgICAgY2xhc3M9XCJncmlkLWNvbXBvbmVudC1zZWxlY3Rpb25cIj5cbiAgICAgICAgICBTZWxlY3RcbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoIHBSZXNpemFibGVDb2x1bW4gaWQ9XCJBY3Rpb25zXCJcbiAgICAgICAgICAqbmdJZj1cInNldEFjdGlvbkNvbHVtbkFzRmlyc3QgJiYgIWRpc2FibGVkU2F2ZUJ0biAmJiBjb2x1bW5zPy5sZW5ndGggPiAwICYmIChjb2x1bW5BY3Rpb25zLmxlbmd0aCA+IDAgfHwgKHVzZUlubGluZUNSVUQgJiYgKGRlbGV0ZVJvd1Blcm1pc3Npb24gfHwgZWRpdFJvd1Blcm1pc3Npb24pKSlcIlxuICAgICAgICAgIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJyBcIiBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCI+XG4gICAgICAgICAgQWN0aW9uc1xuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggcFJlc2l6YWJsZUNvbHVtbiAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHNcIlxuICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJjb2x1bW4/LmNvbHVtbldpZHRoID8gY29sdW1uPy5jb2x1bW5XaWR0aCsncHgnIDogY29sdW1uPy5jdXN0b21XaWR0aCsncHgnXCJcbiAgICAgICAgICBpZD1cInt7Y29sdW1uLmhlYWRlcn19XCIgW2F0dHIuZGF0YS1jb2x1bW4taGVhZGVyXT1cImNvbHVtbj8uaGVhZGVyXCIgW3BTb3J0YWJsZUNvbHVtbl09XCJjb2x1bW4uZmllbGRcIlxuICAgICAgICAgIFtjbGFzc109XCJjb2x1bW4udHlwZSA9PT0gJ2Jvb2xlYW4nID8gJ2NoZWNrYm94LXRoJyA6ICcnXCJcbiAgICAgICAgICBbcFNvcnRhYmxlQ29sdW1uRGlzYWJsZWRdPVwic29ydERpc2FibGVkICYmIHVzZVNlcnZlclNpZGVFdmVudHMgPyB0cnVlIDogY29sdW1uLnNvcnRpbmcgPT09IGZhbHNlXCJcbiAgICAgICAgICBjbGFzcz1cImNvbHVtbj8udHlwZSA9PT0gJ211bHRpcGxlJyA/ICdncmlkLWNvbXBvbmVudC1zZWxlY3QtdGgtY29sdW1uLXR5cGUtbXVsdGlwbGUnIDogJydcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRoLWNvbnRlbnQtd3JhcHBlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQtY29tcG9uZW50LXRhYmxlLWhlYWRlci1pbm5lci1kaXYtMSB0YWJsZS1oZWFkZXItaW5uZXItZGl2IGRpdi1sYXN0LWlubmVyLWh0bWwtaXMtaWNvblwiPlxuICAgICAgICAgICAgICA8c3BhbiBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiJ3NlbGYnXCIgW2NsYXNzXT1cIidmbGV4LWdyb3ctMSdcIj57eyBjb2x1bW4uaGVhZGVyIH19XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4uaXNSZXF1aXJlZFwiIGNsYXNzPVwiZ3JpZC1jb21wb25lbnQgcmVxdWlyZWQtc3RhclwiPio8L3NwYW4+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHAtc29ydEljb25cbiAgICAgICAgICAgICAgICAqbmdJZj1cImNvbHVtbi5zb3J0aW5nICE9PSBmYWxzZSAmJiBjb2x1bW4/LnR5cGUgIT09ICdtdWx0aXBsZScgJiYgKCEoZWRpdEFsbFJvd3MgJiYgcGFnaW5hdGlvbikgfHwgc29ydEljb25IaWRkZW4pXCJcbiAgICAgICAgICAgICAgICBbZmllbGRdPVwiY29sdW1uLmZpZWxkXCIgKGNsaWNrKT1cImhhbmRsZUN1c3RvbVNvcnRpbmcoKVwiPjwvcC1zb3J0SWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoICpuZ0lmPVwiaGFzTW9yZUNvbHVtbnMoKVwiIHBSZXNpemFibGVDb2x1bW4gaWQ9XCJNb3JlQWN0aW9uc1wiIGNsYXNzPVwibW9yZS1hY3Rpb25zLXRoXCI+TW9yZTwvdGg+XG4gICAgICAgIDx0aCBwUmVzaXphYmxlQ29sdW1uIGlkPVwiQWN0aW9uc1wiXG4gICAgICAgICAgKm5nSWY9XCIhc2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiAhZGlzYWJsZWRTYXZlQnRuICYmIGNvbHVtbnM/Lmxlbmd0aCA+IDAgJiYgKGNvbHVtbkFjdGlvbnMubGVuZ3RoID4gMCB8fCAodXNlSW5saW5lQ1JVRCAmJiAoZGVsZXRlUm93UGVybWlzc2lvbiB8fCBlZGl0Um93UGVybWlzc2lvbikpKVwiXG4gICAgICAgICAgW2NsYXNzXT1cImluRWRpdE1vZGUgPyAndGhyZWUtYWN0aW9uLWJ0bicgOiAndHdvLWFjdGlvbi1idG4nXCIgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiPkFjdGlvbnM8L3RoPlxuICAgICAgPC90cj5cbiAgICAgIDx0ciAqbmdJZj1cImZpbHRlcmluZyAmJiAhaGlkZUZpbHRlclwiPlxuICAgICAgICA8dGggcFJlc2l6YWJsZUNvbHVtbiAqbmdJZj1cImFsbG93U2VsZWN0aW9uXCIgW2NsYXNzXT1cImluRWRpdE1vZGUgPyAndGhyZWUtYWN0aW9uLWJ0bicgOiAndHdvLWFjdGlvbi1idG4nXCI+PC90aD5cbiAgICAgICAgPHRoIHBSZXNpemFibGVDb2x1bW4gKm5nSWY9XCJzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmICFkaXNhYmxlZFNhdmVCdG4gJiYgdXNlSW5saW5lQ1JVRFwiXG4gICAgICAgICAgW2NsYXNzXT1cImluRWRpdE1vZGUgPyAndGhyZWUtYWN0aW9uLWJ0bicgOiAndHdvLWFjdGlvbi1idG4nXCI+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aCBwUmVzaXphYmxlQ29sdW1uICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sc1wiXG4gICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbHVtbj8uY29sdW1uV2lkdGggPyBjb2x1bW4/LmNvbHVtbldpZHRoKydweCcgOiBjb2x1bW4/LmN1c3RvbVdpZHRoKydweCdcIlxuICAgICAgICAgIGlkPVwie3tjb2x1bW4uaGVhZGVyfX1cIiBbbmdTd2l0Y2hdPVwiY29sdW1uPy5maWx0ZXI/LnR5cGVcIlxuICAgICAgICAgIFtjbGFzc109XCJoaWRlRmlsdGVyT3B0aW9ucyA/ICdoaWRlLXRhYmxlLWZpbHRlciB0ZW1wJyA6ICd0ZW1wJ1wiPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uLmZpbHRlcmluZyAhPT0gZmFsc2VcIiBbY2xhc3NdPVwiY29sdW1uLmZpbHRlcj8uc2hvd0ZpbHRlciA/ICcnIDogJ2hpZGUtZmlsdGVyLWljb24nXCI+XG4gICAgICAgICAgICA8IS0tIFRleHQgaW5wdXQgb24gSGVhZGVyIEZvciBGaWx0ZXItLT5cbiAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlciBjbGFzcz1cIm5vLWZpbHRlci1pY29uXCIgW3R5cGVdPVwiJ3RleHQnXCIgW2ZpZWxkXT1cImNvbHVtbi5maWVsZFwiICpuZ1N3aXRjaENhc2U9XCInaW5wdXQnXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmaWx0ZXJcIiBsZXQtdmFsdWUgbGV0LWZpbHRlcj1cImZpbHRlckNhbGxiYWNrXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJjb2x1bW4uZmlsdGVyVmFsdWVcIiBbY2xhc3NdPVwiY29sdW1uPy5maWVsZD8udG9Mb3dlckNhc2UoKVwiXG4gICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiYXBwbHlFbnRlckV2ZW50KGZpbHRlciwgJGV2ZW50LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgIChibHVyKT1cInNldEZpbHRlckZvY3VzT3V0KGNvbHVtbiwgZmlsdGVyLCAkZXZlbnQpXCIgW25hbWVdPVwiY29sdW1uLmZpZWxkXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmF1dG9jb21wbGV0ZV09XCIoY29sdW1uLmF1dG9Db21wbGV0ZSA9PT0gZmFsc2UgfHwgY29sdW1uLmZpbHRlckF1dG9Db21wbGV0ZSA9PT0gZmFsc2UgfHwgYXV0b0NvbXBsZXRlID09PSBmYWxzZSkgPyAnb2ZmJyA6ICdvbidcIlxuICAgICAgICAgICAgICAgICAgKGtleXVwKT1cInJlbW92aW5nRmlsdGVycygkZXZlbnQsIGNvbHVtbik7YmFja3NwYWNlRXZlbnQoJGV2ZW50LCBjb2x1bW4pXCIgcElucHV0VGV4dCAvPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9wLWNvbHVtbkZpbHRlcj5cblxuICAgICAgICAgICAgPCEtLSBOdW1lcmljIGlucHV0IG9uIEhlYWRlciBGb3IgRmlsdGVyLS0+XG4gICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgY2xhc3M9XCJuby1maWx0ZXItaWNvblwiIFt0eXBlXT1cIidudW1lcmljJ1wiIFtmaWVsZF09XCJjb2x1bW4uZmllbGRcIlxuICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ251bWVyaWNfaW5wdXQnXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmaWx0ZXJcIiBsZXQtdmFsdWUgbGV0LWZpbHRlcj1cImZpbHRlckNhbGxiYWNrXCI+XG4gICAgICAgICAgICAgICAgPHAtaW5wdXROdW1iZXIgWyhuZ01vZGVsKV09XCJjb2x1bW4uZmlsdGVyVmFsdWVcIiBbY2xhc3NdPVwiY29sdW1uPy5maWVsZD8udG9Mb3dlckNhc2UoKVwiXG4gICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiYXBwbHlFbnRlckV2ZW50KGZpbHRlciwgJGV2ZW50LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgIChvbkJsdXIpPVwic2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uLCBmaWx0ZXIsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgKGtleXVwKT1cInJlbW92aW5nRmlsdGVycygkZXZlbnQsIGNvbHVtbik7YmFja3NwYWNlRXZlbnQoJGV2ZW50LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmF1dG9jb21wbGV0ZV09XCJjb2x1bW4uZmlsdGVyQXV0b0NvbXBsZXRlID09PSB0cnVlID8gJ29uJyA6ICdvZmYnXCI+PC9wLWlucHV0TnVtYmVyPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9wLWNvbHVtbkZpbHRlcj5cblxuICAgICAgICAgICAgPCEtLSBsb29rdXAgaW5wdXQgb24gSGVhZGVyIEZvciBGaWx0ZXItLT5cbiAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlciBjbGFzcz1cIm5vLWZpbHRlci1pY29uXCIgW3R5cGVdPVwiJ3RleHQnXCIgW2ZpZWxkXT1cImNvbHVtbi5maWVsZFwiIG1hdGNoTW9kZT1cImVxdWFsc1wiXG4gICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInbG9va3VwX2lucHV0J1wiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZmlsdGVyXCIgbGV0LXZhbHVlIGxldC1maWx0ZXI9XCJmaWx0ZXJDYWxsYmFja1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbG9zZS1pY29uLXdyYXBwZXIgZ3JpZC1jb21wb25lbnQgbG9va3VwLWZpbHRlci13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9va3VwLWZpbHRlci1pbnB1dC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbaWRdPVwiY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19maWx0ZXInXCIgY2xhc3M9XCJncmlkLWNvbXBvbmVudCBsb29rdXAtZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hdXRvY29tcGxldGVdPVwiKGNvbHVtbi5hdXRvQ29tcGxldGUgPT09IGZhbHNlIHx8IGNvbHVtbi5maWx0ZXJBdXRvQ29tcGxldGUgPT09IGZhbHNlIHx8IGF1dG9Db21wbGV0ZSA9PT0gZmFsc2UpID8gJ29mZicgOiAnb24nXCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiIFtuZ01vZGVsXT1cImxvb2t1cEZpbHRlcklucHV0TmdNb2RlbChjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VMb29rdXBJbnB1dE5nTW9kZWwoJ2xvb2t1cEZpbHRlcicsIGNvbHVtbiwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNldEZpbHRlckxvb2t1cChjb2x1bW4pXCIgKGtleXVwLmVudGVyKT1cImFwcGx5RW50ZXJFdmVudChmaWx0ZXIsICRldmVudCwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwic2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uLCBmaWx0ZXIsICRldmVudClcIiBbbmFtZV09XCJjb2x1bW4uZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgIChrZXl1cCk9XCJyZW1vdmluZ0ZpbHRlcnMoJGV2ZW50LCBjb2x1bW4pO2JhY2tzcGFjZUV2ZW50KCRldmVudCwgY29sdW1uKVwiIHBJbnB1dFRleHQgLz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpcmVjdC13cmFwcGVyLWNsb3NlLWljb24tbG9va3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJjb2x1bW4uZmlsdGVyVmFsdWVcIiBpY29uPVwicGkgcGktdGltZXNcIiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJsb29rdXBDbGVhclZhbHVlKGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvcC1jb2x1bW5GaWx0ZXI+XG5cbiAgICAgICAgICAgIDwhLS0gY2hlY2tib3ggb24gSGVhZGVyIEZvciBGaWx0ZXItLT5cbiAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlciBjbGFzcz1cIm5vLWZpbHRlci1pY29uXCIgdHlwZT1cImJvb2xlYW5cIiBbZmllbGRdPVwiY29sdW1uLmZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIidjaGVja2JveCdcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZpbHRlclwiIGxldC12YWx1ZSBsZXQtZmlsdGVyPVwiZmlsdGVyQ2FsbGJhY2tcIj5cbiAgICAgICAgICAgICAgICA8cC1jaGVja2JveCBbYmluYXJ5XT1cInRydWVcIiBbZGlzYWJsZWRdPVwiY29sdW1uLmRpc2FibGVkXCIgW25nTW9kZWxdPVwiY29sdW1uLmZpbHRlclZhbHVlXCJcbiAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJhcHBseUVudGVyRXZlbnQoZmlsdGVyLCAkZXZlbnQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cInNldEZpbHRlckZvY3VzT3V0KGNvbHVtbiwgZmlsdGVyLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNsaWNrQ2hlY2tCb3hGaWx0ZXIoY29sdW1uLCAkZXZlbnQpXCIgKGtleWRvd24pPVwiYmFja3NwYWNlRXZlbnQoJGV2ZW50LCBjb2x1bW4pXCI+XG4gICAgICAgICAgICAgICAgPC9wLWNoZWNrYm94PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9wLWNvbHVtbkZpbHRlcj5cblxuICAgICAgICAgICAgPCEtLSBtdWx0aVNlbGVjdCBvbiBIZWFkZXIgRm9yIEZpbHRlci0tPlxuICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyIGNsYXNzPVwibm8tZmlsdGVyLWljb25cIiBbZmllbGRdPVwiY29sdW1uLmZpZWxkXCIgbWF0Y2hNb2RlPVwiaW5cIiBbc2hvd01lbnVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ211bHRpLXNlbGVjdCdcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZpbHRlclwiIGxldC12YWx1ZSBsZXQtZmlsdGVyPVwiZmlsdGVyQ2FsbGJhY2tcIj5cbiAgICAgICAgICAgICAgICA8cC1tdWx0aVNlbGVjdCBbKG5nTW9kZWwpXT1cImNvbHVtbi5maWx0ZXJWYWx1ZVwiIFtvcHRpb25zXT1cImNvbHVtbi5maWx0ZXIuZGF0YSB8fCBbXVwiIFthcHBlbmRUb109XCInYm9keSdcIlxuICAgICAgICAgICAgICAgICAgW25hbWVdPVwiY29sdW1uLmZpZWxkXCIgKGtleXVwLmVudGVyKT1cImFwcGx5RW50ZXJFdmVudChmaWx0ZXIsICRldmVudCwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICBbb3B0aW9uVmFsdWVdPVwiY29sdW1uLm9wdGlvblZhbHVlXCIgW29wdGlvbkxhYmVsXT1cImNvbHVtbi5vcHRpb25MYWJlbFwiXG4gICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwic2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uLCBmaWx0ZXIsICRldmVudClcIiAoa2V5ZG93bik9XCJiYWNrc3BhY2VFdmVudCgkZXZlbnQsIGNvbHVtbilcIj5cblxuICAgICAgICAgICAgICAgIDwvcC1tdWx0aVNlbGVjdD5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvcC1jb2x1bW5GaWx0ZXI+XG5cbiAgICAgICAgICAgIDwhLS0gZHJvcGRvd24gb24gSGVhZGVyIEZvciBGaWx0ZXItLT5cbiAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlciBjbGFzcz1cIm5vLWZpbHRlci1pY29uXCIgW2ZpZWxkXT1cImNvbHVtbi5maWVsZFwiIG1hdGNoTW9kZT1cImluXCIgW3Nob3dNZW51XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidkcm9wZG93bidcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZpbHRlclwiIGxldC12YWx1ZSBsZXQtZmlsdGVyPVwiZmlsdGVyQ2FsbGJhY2tcIj5cbiAgICAgICAgICAgICAgICA8cC1kcm9wZG93biBbc2hvd0NsZWFyXT1cInRydWVcIiBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCdcIiBbZmlsdGVyXT1cImNvbHVtbi5hbGxvd1NlYXJjaFwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbHVtbi5maWx0ZXJWYWx1ZVwiIChrZXl1cC5lbnRlcik9XCJhcHBseURyb3Bkb3duRmlsdGVyKGZpbHRlciwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJjb2x1bW4uZmlsdGVyLmRhdGEgfHwgW11cIiAob25DaGFuZ2UpPVwic2VhcmNoRHJvcGRvd25GaWx0ZXIoZmlsdGVyLCAkZXZlbnQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgW2FwcGVuZFRvXT1cIidib2R5J1wiIGZpbHRlck1hdGNoTW9kZT1cInN0YXJ0c1dpdGhcIj48L3AtZHJvcGRvd24+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3AtY29sdW1uRmlsdGVyPlxuXG4gICAgICAgICAgICA8IS0tIGNhbGVuZGFyIG9uIEhlYWRlciBGb3IgRmlsdGVyLS0+XG4gICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgY2xhc3M9XCJuby1maWx0ZXItaWNvblwiIFtmaWVsZF09XCJjb2x1bW4uZmllbGRcIiBtYXRjaE1vZGU9XCJpblwiIFtzaG93TWVudV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInY2FsZW5kYXInXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmaWx0ZXJcIiBsZXQtdmFsdWUgbGV0LWZpbHRlcj1cImZpbHRlckNhbGxiYWNrXCI+XG4gICAgICAgICAgICAgICAgPHAtZGF0ZXBpY2tlciBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdC1EYXRlJ1wiIFsobmdNb2RlbCldPVwiY29sdW1uLmZpbHRlclZhbHVlXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJjb2x1bW4uZmllbGQgKyAnLWZpbHRlci1pbnB1dCdcIiAoa2V5dXAuZW50ZXIpPVwiYXBwbHlFbnRlckV2ZW50KGZpbHRlciwgJGV2ZW50LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgIGFwcGVuZFRvPVwiYm9keVwiIChvblNlbGVjdCk9XCJzZWxlY3REYXRlKGNvbHVtbilcIiBbaW5wdXRJZF09XCJjb2x1bW4uZmllbGRcIiBob3VyRm9ybWF0PVwiMTJcIlxuICAgICAgICAgICAgICAgICAgKGtleXVwLmJhY2tzcGFjZSk9XCJyZW1vdmVOdWxsQ2FsZW5kYXIoY29sdW1uLCBmaWx0ZXIsICRldmVudClcIiBbc2hvd0J1dHRvbkJhcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIChvbkNsb3NlKT1cInNldEZpbHRlckZvY3VzT3V0KGNvbHVtbiwgZmlsdGVyLCAkZXZlbnQpXCIgW2RhdGVGb3JtYXRdPVwiY2FsZW5kYXJGb3JtYXRcIlxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2FsZW5kYXJJbnB1dFZhbHVlKGNvbHVtbiwge30sIHRydWUpXCIgKG9uQ2xlYXJDbGljayk9XCJiYWNrc3BhY2VFdmVudCgkZXZlbnQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwic2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uLCBmaWx0ZXIsICRldmVudClcIj5cbiAgICAgICAgICAgICAgICA8L3AtZGF0ZXBpY2tlcj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvcC1jb2x1bW5GaWx0ZXI+XG5cbiAgICAgICAgICAgIDwhLS0gRGVmYXVsdCBGaWx0ZXIgRm9yIEhlYWRlciAgLS0+XG4gICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgY2xhc3M9XCJuby1maWx0ZXItaWNvblwiIFt0eXBlXT1cIlxuICAgICAgICAgICAgICAgIGNvbHVtbi50eXBlICYmIGNvbHVtbi50eXBlICE9PSAnbGluaycgPyBjb2x1bW4udHlwZSA6ICd0ZXh0J1xuICAgICAgICAgICAgICBcIiBbZmllbGRdPVwiY29sdW1uLmZpZWxkXCIgZGlzcGxheT1cIm1lbnVcIiAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgICAgICAgPC9wLWNvbHVtbkZpbHRlcj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aCAqbmdJZj1cImhhc01vcmVDb2x1bW5zKClcIiBwUmVzaXphYmxlQ29sdW1uIGNsYXNzPVwibW9yZS1hY3Rpb25zLXRoXCI+PC90aD5cbiAgICAgICAgPHRoIHBSZXNpemFibGVDb2x1bW5cbiAgICAgICAgICAqbmdJZj1cIiFzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmICFkaXNhYmxlZFNhdmVCdG4gJiYgY29sdW1ucz8ubGVuZ3RoID4gMCAmJiAoY29sdW1uQWN0aW9ucy5sZW5ndGggPiAwIHx8ICh1c2VJbmxpbmVDUlVEICYmIChkZWxldGVSb3dQZXJtaXNzaW9uIHx8IGVkaXRSb3dQZXJtaXNzaW9uKSkpXCJcbiAgICAgICAgICBbY2xhc3NdPVwiaW5FZGl0TW9kZSA/ICd0aHJlZS1hY3Rpb24tYnRuJyA6ICd0d28tYWN0aW9uLWJ0bidcIj48L3RoPlxuICAgICAgPC90cj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPCEtLSBCb2R5IGNvbHVtbnMgb24gR3JpZCAtLT5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC1yb3cgbGV0LWVkaXRpbmc9XCJlZGl0aW5nXCIgbGV0LXJpPVwicm93SW5kZXhcIj5cbiAgICAgIDx0ciBbc3R5bGVdPVwicm93U3R5bGVcIiBbbmdDbGFzc109XCJ7XG4gICAgICAgICdoaWdobGlnaHRlZC1yb3cnOiByb3c/LmhpZ2hsaWdodHJvdyxcbiAgICAgICAgJ2VsbGlwc2lzLXRydWUnOiBlbGxpcHNpcyxcbiAgICAgICAgJ3Atc2VsZWN0YWJsZS1yb3cgd29yZFdyYXBUcnVlJzogd29yZFdyYXAsXG4gICAgICAgICd3b3JkV3JhcEZhbHNlIHAtc2VsZWN0YWJsZS1yb3cnOiAhd29yZFdyYXBcbiAgICAgIH1cIiAoY2xpY2spPVwic2VsZWN0ZWRSb3dSZWNvcmQgPSByb3dcIiBbcEVkaXRhYmxlUm93XT1cInJvd1wiIFtwUmVvcmRlcmFibGVSb3ddPVwicmlcIiAjZ3JpZFJvdyBbaWRdPVwicm93W2RhdGFLZXldXCI+XG4gICAgICAgIDx0ZCAqbmdJZj1cImFsbG93U2VsZWN0aW9uXCIgY2xhc3M9XCJncmlkLWNvbXBvbmVudC1zZWxlY3Rpb25cIiBwUmVvcmRlcmFibGVSb3dIYW5kbGU+XG4gICAgICAgICAgPHAtdGFibGVSYWRpb0J1dHRvbiBbdmFsdWVdPVwicm93XCIgKm5nSWY9XCJzZWxlY3Rpb25UeXBlID09PSAnc2luZ2xlJ1wiPjwvcC10YWJsZVJhZGlvQnV0dG9uPlxuICAgICAgICAgIDxwLXRhYmxlQ2hlY2tib3ggW3ZhbHVlXT1cInJvd1wiICpuZ0lmPVwic2VsZWN0aW9uVHlwZSA9PT0gJ211bHRpcGxlJ1wiPjwvcC10YWJsZUNoZWNrYm94PlxuICAgICAgICA8L3RkPlxuXG4gICAgICAgIDwhLS0gZmlyc3QgYWN0aW9ucyBjb2x1bW4gLS0+XG4gICAgICAgIDwhLS0gPHRkICpuZ0lmPVwic2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiBjb2x1bW5BY3Rpb25zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImFjdGlvbi1idG5cIiAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGNvbHVtbkFjdGlvbnNcIj5cbiAgICAgICAgICAgIDxpIFt0aXRsZV09XCJhY3Rpb24udG9vbHRpcFwiIFtjbGFzc109XCJhY3Rpb24uaWNvblwiIChjbGljayk9XCJoYW5kbGVBY3Rpb25DbGljaygkZXZlbnQsIGFjdGlvbiwgcm93KVwiPjwvaT5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGQ+IC0tPlxuICAgICAgICA8dGQgKm5nSWY9XCJzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmIGNvbHVtbkFjdGlvbnMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjb2x1bW5BY3Rpb25zXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFjdGlvbi1idG5cIiAqbmdJZj1cImFjdGlvbi52aXNpYmxlID8gYWN0aW9uLnZpc2libGUocm93KSA6IHRydWVcIj5cbiAgICAgICAgICAgICAgPGkgW3RpdGxlXT1cImFjdGlvbi50b29sdGlwXCIgW2NsYXNzXT1cImFjdGlvbi5pY29uXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aW9uLWJ0bi1kaXNhYmxlZF09XCJhY3Rpb24uZGlzYWJsZWQgPyBhY3Rpb24uZGlzYWJsZWQocm93KSA6IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiKGFjdGlvbi5kaXNhYmxlZCAmJiBhY3Rpb24uZGlzYWJsZWQocm93KSkgPyBudWxsIDogaGFuZGxlQWN0aW9uQ2xpY2soJGV2ZW50LCBhY3Rpb24sIHJvdylcIj48L2k+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZCAqbmdJZj1cInNldEFjdGlvbkNvbHVtbkFzRmlyc3QgJiYgdXNlSW5saW5lQ1JVRCAmJiAoZGVsZXRlUm93UGVybWlzc2lvbiB8fCBlZGl0Um93UGVybWlzc2lvbilcIlxuICAgICAgICAgIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiZGlzYWJsZWRTYXZlQnRuID8gJ2hpZGUtY2xlYXItZmlsdGVyLWJ1dHRvbicgOiAnJ1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2V0QWN0aW9uQ29sdW1uV2lkdGhcIj5cbiAgICAgICAgICAgIDxzZS1ncmlkLXJvdy1hY3Rpb25zIFtlZGl0aW5nXT1cImVkaXRpbmdcIiBbZWRpdFJvd1Blcm1pc3Npb25dPVwiZWRpdFJvd1Blcm1pc3Npb25cIlxuICAgICAgICAgICAgICBbZGVsZXRlUm93UGVybWlzc2lvbl09XCJkZWxldGVSb3dQZXJtaXNzaW9uXCIgW2hpZGVEZWxldGVCdG5dPVwiaGlkZURlbGV0ZUJ0blwiIFtoaWRlRWRpdEJ0bl09XCJoaWRlRWRpdEJ0blwiXG4gICAgICAgICAgICAgIFtyb3ddPVwicm93XCIgKG9uUm93RWRpdEluaXRCdG4pPVwib25Sb3dFZGl0SW5pdCgkZXZlbnQpXCIgKGRlbGV0ZVJlY29yZEJ0bik9XCJkZWxldGVSZWNvcmQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChvblJvd0VkaXRTYXZlQnRuKT1cIm9uUm93RWRpdFNhdmUoJGV2ZW50KVwiIChvblJvd0VkaXRDYW5jZWxCdG4pPVwib25Sb3dFZGl0Q2FuY2VsKCRldmVudCwgcmkpXCJcbiAgICAgICAgICAgICAgW2VkaXRBbGxSb3dzXT1cImVkaXRBbGxSb3dzXCI+XG4gICAgICAgICAgICA8L3NlLWdyaWQtcm93LWFjdGlvbnM+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3RkPlxuXG4gICAgICAgIDwhLS0gR3JpZCBSb3dzIERhdGEgQmluZGluZ3MgU3RhcnQgLS0+XG4gICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHNlbGVjdGVkQ29sdW1uc1wiIFtuZ1N3aXRjaF09XCJjb2x1bW4udHlwZVwiIFtzdHlsZV09XCJjb2x1bW4uc3R5bGVcIlxuICAgICAgICAgIFtjbGFzc109XCJjb2x1bW4uc3R5bGUgPyAnJyA6ICd3LXN0YXRpYy1jb2wnXCIgW2F0dHIuZGF0YS1jb2x1bW4tZmllbGRdPVwiY29sdW1uPy5maWVsZFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uLmhvdmVyRGF0YSAmJiAhY29sdW1uLmlzVGV4dGFyZWEgPyAndGQtb3ZlcmxheScgOiAnJ1wiIHBSZW9yZGVyYWJsZVJvd0hhbmRsZT5cbiAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJjb2x1bW4uaG92ZXJEYXRhICYmICFjb2x1bW4uaXNUZXh0YXJlYSA/ICd0ZC13cmFwcGVyJyA6ICcnXCJcbiAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIihjb2x1bW4uaG92ZXJEYXRhICYmIGNvbHVtbi5ob3ZlckRhdGEuY29tcG9uZW50ICYmICFjb2x1bW4uaXNUZXh0YXJlYSkgPyBhZGREeW5hbWljUGFuZWxPdmVybGF5Q29tcG9uZW50KGNvbHVtbi5ob3ZlckRhdGEsIG92ZXJsYXlQYW5lbCwgJGV2ZW50LCByb3cpIDogJydcIlxuICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwiKGNvbHVtbi5ob3ZlckRhdGEgJiYgY29sdW1uLmhvdmVyRGF0YS5jb21wb25lbnQgJiYgIWNvbHVtbi5pc1RleHRhcmVhKSA/ICBtb3VzZUxlYXZlRXZlbnQob3ZlcmxheVBhbmVsKSA6ICcnXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRkLWNvbnRlbnQtd3JhcHBlclwiIFtzdHlsZV09XCJjb2x1bW4uc3R5bGVcIj5cblxuICAgICAgICAgICAgICA8IS0tIEJvb2xlYW4gY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInYm9vbGVhbidcIj5cbiAgICAgICAgPHRkICpuZ0lmPVwiIWVkaXRpbmcgJiYgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnNob3cgIT0gZmFsc2VcIj5cbiAgICAgICAgICA8cC1jaGVja2JveCBbbmdDbGFzc109XCJ7J2Rpc2FibGVkLWNoZWNrYm94JzogY29sdW1uLmRpc2FibGVkfVwiIFtiaW5hcnldPVwidHJ1ZVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGVja0JveENoYW5nZUV2ZW50KCRldmVudCwgY29sdW1uLCByb3cpXCIgKGNoYW5nZSk9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cImdldENoZWNrYm94VmFsdWUocm93LCBjb2x1bW4pXCI+XG4gICAgICAgICAgPC9wLWNoZWNrYm94PlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgKm5nSWY9XCJlZGl0aW5nXCI+XG4gICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpbnB1dFwiPlxuICAgICAgICAgICAgICA8IS0tIGZvciBlZGl0IGNoZWNrQm94IC0tPlxuICAgICAgICAgICAgICA8cC1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJjaGVja0JveENoYW5nZUV2ZW50KCRldmVudCwgY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiIFtiaW5hcnldPVwidHJ1ZVwiIFtuZ01vZGVsXT1cImdldENoZWNrYm94VmFsdWUocm93LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIj48L3AtY2hlY2tib3g+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICB7eyByb3dbY29sdW1uLmZpZWxkXSB9fVxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDwhLS0gbGluayBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgPHNwYW4gW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ2EsaW5wdXQnXCIgKm5nU3dpdGNoQ2FzZT1cIidsaW5rJ1wiPlxuICAgICAgICAgIDwhLS0gbGluayBjb2x1bW4gZm9yIEh5cGVyTGluayBDYXNlIC0tPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uLmFsbG93U2F2ZSA9PT0gZmFsc2VcIj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uLnRhcmdldCAhPT0gJ19zZWxmJ1wiIFtzdHlsZV09XCJjb2x1bW4uc3R5bGVcIlxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnYSdcIiBjbGFzcz1cImN1c3RvbS1saW5rXCJcbiAgICAgICAgICAgICAgW2NsYXNzXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnZGlzYWJsZWQtbGluaycgOiAnJ1wiIHBSZW9yZGVyYWJsZVJvd0hhbmRsZT5cblxuICAgICAgICAgICAgICA8YSBjbGFzcz1cImQtaW5saW5lXCIgW2hyZWZdPVwiY29sdW1uLmRpc2FibGVkPycnOnJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5oeXBlcmxpbmtcIiB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgIHBSZW9yZGVyYWJsZVJvd0hhbmRsZT5cbiAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImNvbHVtbi5pY29uICYmIXJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWU7IGVsc2Ugbm9JY29uXCIgW2NsYXNzXT1cImNvbHVtbi5pY29uXCJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJjb2x1bW4uaGVhZGVyXCI+PC9pPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9JY29uPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cImNvbHVtbj8ub25DbGljayA/IG9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdykgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlPycnOlxuICAgICAgICAgICAgICAgICAgICBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LCBjb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9hPlxuXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbHVtbi50YXJnZXQgPT09ICdfc2VsZidcIiBbc3R5bGVdPVwiY29sdW1uLnN0eWxlXCJcbiAgICAgICAgICAgICAgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ2EnXCIgY2xhc3M9XCJjdXN0b20tbGlua1wiXG4gICAgICAgICAgICAgIFtjbGFzc109XCIgYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdkaXNhYmxlZC1saW5rJyA6ICcnXCIgcFJlb3JkZXJhYmxlUm93SGFuZGxlPlxuXG4gICAgICAgICAgICAgIDxhIGNsYXNzPVwiZC1pbmxpbmVcIiBbaHJlZl09XCJjb2x1bW4uZGlzYWJsZWQ/Jyc6cm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmh5cGVybGlua1wiXG4gICAgICAgICAgICAgICAgW3RhcmdldF09J2NvbHVtbi50YXJnZXQnIHBSZW9yZGVyYWJsZVJvd0hhbmRsZT5cbiAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImNvbHVtbi5pY29uICYmIXJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWU7IGVsc2Ugbm9JY29uXCIgW2NsYXNzXT1cImNvbHVtbi5pY29uXCJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJjb2x1bW4uaGVhZGVyXCI+PC9pPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9JY29uPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cImNvbHVtbj8ub25DbGljayA/IG9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdykgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlPycnOlxuICAgICAgICAgICAgICAgICAgICBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LCBjb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9hPlxuXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwhLS0gbGluayBjb2x1bW4gZm9yIEVkaXQgQ2FzZSAtLT5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbHVtbi5hbGxvd1NhdmUgfHwgY29sdW1uLmFsbG93U2F2ZSA9PT0gdW5kZWZpbmVkXCI+XG4gICAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIiBwUmVvcmRlcmFibGVSb3dIYW5kbGU+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIoY29sdW1uLmVkaXRhYmxlID09PSB0cnVlICkgJiYgKGNvbHVtbi5lZGl0TGluayA9PT0gdHJ1ZSApXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgKm5nSWY9XCIhcm93LmlzTmV3XCIgcElucHV0VGV4dFxuICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkIHx8IHJvd1tjb2x1bW4uZmllbGRdIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZCA/IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlGaWVsZCA9ICRldmVudCA6IHJvd1tjb2x1bW4uZmllbGRdID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbHVtbj8ub25DbGljayA/IG9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdykgOiAnJ1wiIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSsnX29iaiddPy5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eScgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIiBbYXR0ci5hdXRvY29tcGxldGVdPVwiKGNvbHVtbi5hdXRvQ29tcGxldGUgPT09IGZhbHNlIHx8IGF1dG9Db21wbGV0ZSA9PT0gZmFsc2UpID8gJ29mZicgOiAnb24nXCIgKGNoYW5nZSk9XCJvbkNoYW5nZUV2ZW50KGNvbHVtbiwgcm93KVwiIC8+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgcElucHV0VGV4dCAqbmdJZj1cInJvdy5pc05ld1wiIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbHVtbj8ub25DbGljayA/IG9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdykgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHknIDogJydcIlxuICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZCA/IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkIDogcm93W2NvbHVtbi5maWVsZF1cIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZCA6IHJvd1tjb2x1bW4uZmllbGRdID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiIFthdHRyLmF1dG9jb21wbGV0ZV09XCIoY29sdW1uLmF1dG9Db21wbGV0ZSA9PT0gZmFsc2UgfHwgYXV0b0NvbXBsZXRlID09PSBmYWxzZSkgPyAnb2ZmJyA6ICdvbidcIiAoY2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoY29sdW1uLCByb3cpXCIgLz5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPCEtLSA8c3BhbiAqbmdJZj1cImNvbHVtbi5lZGl0YWJsZSA9PT0gZmFsc2V8fCBjb2x1bW4uZWRpdGFibGUgPT09IHVuZGVmaW5lZFwiID5cbiAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImN1c3RvbS1saW5rXCIgKGNsaWNrKT1cIm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdylcIiBbaHJlZl09XCJyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uaHlwZXJsaW5rXCIgW3RhcmdldF09J2NvbHVtbi50YXJnZXQnXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdkaXNhYmxlZC1saW5rJyA6ICcnXCI+XG4gICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImNvbHVtbi5pY29uICYmICFyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlOyBlbHNlIG5vSWNvblwiW2NsYXNzXT1cImNvbHVtbi5pY29uXCIgW3RpdGxlXT1cImNvbHVtbi5oZWFkZXJcIj48L2k+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vSWNvbj5cbiAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWU/Jyc6XG4gICAgICAgICAgICAgICAgICAgIHNldENvbmRpdGlvbkJhc2VWYWx1ZShyb3csIGNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj4gLS0+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKGNvbHVtbi5lZGl0TGluayA9PT0gZmFsc2V8fCBjb2x1bW4uZWRpdExpbmsgPT09IHVuZGVmaW5lZCkmJihjb2x1bW4uZWRpdGFibGUgPT09IGZhbHNlfHwgY29sdW1uLmVkaXRhYmxlID09PSB1bmRlZmluZWQpXCI+XG4gICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImQtaW5saW5lXCIgW2hyZWZdPVwicm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmh5cGVybGlua1wiXG4gICAgICAgICAgICAgICAgICAgIFt0YXJnZXRdPVwiY29sdW1uLnRhcmdldCA/IGNvbHVtbi50YXJnZXQgOiAnX2JsYW5rJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJjb2x1bW4uZWRpdGFibGUgPT09IGZhbHNlID8gJycgOiBhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2Rpc2FibGVkLWxpbmsnIDogJydcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjb2x1bW4uaWNvbiAmJiAhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZTsgZWxzZSBub0ljb25cIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJjb2x1bW4uaWNvblwiIFt0aXRsZV09XCJjb2x1bW4uaGVhZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29sdW1uPy5vbkNsaWNrID8gb25DbGlja0V2ZW50KGNvbHVtbiwgcm93KSA6ICcnXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vSWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwiY29sdW1uPy5vbkNsaWNrID8gb25DbGlja0V2ZW50KGNvbHVtbiwgcm93KSA6ICcnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZT8nJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbmRpdGlvbkJhc2VWYWx1ZShyb3csIGNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gW3N0eWxlXT1cImNvbHVtbi5zdHlsZVwiIGNsYXNzPVwiY3VzdG9tLWxpbmtcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNvbHVtbi5lZGl0YWJsZSA9PT0gZmFsc2UgfHwgYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdkaXNhYmxlZC1saW5rJyA6ICcnXCI+XG4gICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImQtaW5saW5lXCIgW2hyZWZdPVwiY29sdW1uLmRpc2FibGVkPycnOnJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5oeXBlcmxpbmtcIlxuICAgICAgICAgICAgICAgICAgICBbdGFyZ2V0XT1cImNvbHVtbi50YXJnZXQgPyBjb2x1bW4udGFyZ2V0IDogJ19ibGFuaydcIiBwUmVvcmRlcmFibGVSb3dIYW5kbGU+XG4gICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiY29sdW1uLmljb24mJiAhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZTsgZWxzZSBub0ljb25cIlxuICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJjb2x1bW4uaGVhZGVyXCIgW2NsYXNzXT1cImNvbHVtbi5pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29sdW1uPy5vbkNsaWNrID8gb25DbGlja0V2ZW50KGNvbHVtbiwgcm93KSA6ICcnXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vSWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwiY29sdW1uPy5vbkNsaWNrID8gb25DbGlja0V2ZW50KGNvbHVtbiwgcm93KSA6ICcnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZT8nJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbmRpdGlvbkJhc2VWYWx1ZShyb3csIGNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgPC9hPlxuXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPCEtLSBJZnJhbWUgY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInaWZyYW1lJ1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWxpbmtcIiAoY2xpY2spPVwiZ3JpZElGcmFtZShjb2x1bW4sIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5oeXBlcmxpbmssIHJvdylcIiBbdGl0bGVdPVwiXG4gICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gJiZcbiAgICAgICAgICAgICAgICAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQgPT09IG51bGwgfHwgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQgPT09ICcnKVxuICAgICAgICAgICAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkXSA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgOiBjb2x1bW4uZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICAgID8gY29sdW1uLmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGRdXG5cbiAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY3VzdG9tLWljb24tYnRuXCIgKm5nSWY9XCJjb2x1bW4uaWNvbjsgZWxzZSBub0ljb25cIiBbZGlzYWJsZWRdPVwiY29sdW1uLmRpc2FibGVkXCI+XG4gICAgICAgICAgICAgIDxpIFtjbGFzc109XCJjb2x1bW4uaWNvblwiIFt0aXRsZV09XCJjb2x1bW4uaGVhZGVyXCI+PC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vSWNvbj5cbiAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gJiZcbiAgICAgICAgICAgICAgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0ID09PSBudWxsIHx8IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0ID09PSAnJylcbiAgICAgICAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkXSA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICA/IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgIDogY29sdW1uLmRpc3BsYXlUZXh0ID8gY29sdW1uLmRpc3BsYXlUZXh0IDogcm93W2NvbHVtbi5maWVsZF1cbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPCEtLSBkaWFsb2cgY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInZGlhbG9nJ1wiPlxuICAgICAgICAgIDxwLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4/LmZpbHRlcj8udHlwZSAhPT0gJ2NhbGVuZGFyJyAmJiAhcm93Py5oaWRlZ3JpZGJ0blwiPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uLmVkaXRhYmxlID09PSB0cnVlICYmICFyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlXCJcbiAgICAgICAgICAgICAgICAgIHBSZW9yZGVyYWJsZVJvd0hhbmRsZT5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnc2VsZidcIiByZWFkb25seVxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKydfb2JqJ10/LmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5JyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnaGlkZS1ib3JkZXInIDogJydcIiB0eXBlPVwidGV4dFwiIHBJbnB1dFRleHRcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdExvb2t1cEZpZWxkKGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkID8gcm93W3Jvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXSA6IHJvd1tjb2x1bW4uZmllbGRdXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZCA/IHJvd1tyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXSA6IHJvd1tjb2x1bW4uZmllbGRdID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwicm93W2NvbHVtbi5maWVsZF1cIiBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiXG4gICAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIiAvPlxuXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdzZWxmJ1wiICpuZ0lmPVwiY29sdW1uLmVkaXRhYmxlID09PSBmYWxzZSB8fCBjb2x1bW4uZWRpdGFibGUgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICBcIiBjbGFzcz1cImN1c3RvbS1saW5rXCIgW3N0eWxlXT1cImNvbHVtbi5zdHlsZVwiIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdkaXNhYmxlZC1saW5rJyA6ICcnXG4gICAgICAgICAgICAgICAgICAgIFwiIChjbGljayk9XCJvcGVuR3JpZERpYWxvZyhjb2x1bW4sIHJvdywgJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCIoY29sdW1uLmljb24gfHwgcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5pY29uKSAmJiAhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZSA7IGVsc2Ugbm9JY29uXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbiA/IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbiA6IGNvbHVtbi5pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cImNvbHVtbi5oZWFkZXJcIj48L2k+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vSWNvbj57eyAoIWNvbHVtbi5kaXNwbGF5VGV4dCAmJiByb3cuaXNOZXcgKSB8fFxuICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlID8gJycgOiBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LCBjb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgIH19PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4/LmZpbHRlcj8udHlwZSA9PT0gJ2NhbGVuZGFyJyAmJiBjb2x1bW4uZWRpdGFibGUgPT09IHRydWVcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdpbnB1dCdcIj5cbiAgICAgICAgICAgICAgICA8cC1kYXRlcGlja2VyXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKydfb2JqJ10/LmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5JyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgIFtpZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2hpZGUtYm9yZGVyJyA6ICcnXCIgKG9uQ2xvc2UpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgICBbbWluRGF0ZV09XCJjb2x1bW4ubWluRGF0ZVwiIFttYXhEYXRlXT1cImNvbHVtbi5tYXhEYXRlXCIgW2FwcGVuZFRvXT1cIidib2R5J1wiIGhvdXJGb3JtYXQ9XCIxMlwiXG4gICAgICAgICAgICAgICAgICBbc2hvd1RpbWVdPVwiY29sdW1uLnNob3dUaW1lXCIgKGNsaWNrKT1cIm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdylcIiBbdGltZU9ubHldPVwiY29sdW1uLnRpbWVPbmx5XCJcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkID8gcm93W3Jvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKCldIDogcm93W2NvbHVtbi5maWVsZF1cIlxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZCA/XG4gICAgICAgICAgICAgICAgICByb3dbcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXSA6IHJvd1tjb2x1bW4uZmllbGRdID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCI+PC9wLWRhdGVwaWNrZXI+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4/LmZpbHRlcj8udHlwZSA9PT0gJ2NhbGVuZGFyJyAmJiAhY29sdW1uLmVkaXRhYmxlXCIgY2xhc3M9XCJjdXN0b20tbGlua1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvdy5kaXNhYmxlZCAgIHx8IGFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnZGlzYWJsZWQtbGluaycgOiAnJ1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5HcmlkRGlhbG9nKGNvbHVtbiwgcm93LCAkZXZlbnQpXCI+e3sgcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZSA/ICcnIDpcbiAgICAgICAgICAgICAgICBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LCBjb2x1bW4pIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWxpbmtcIiBbc3R5bGVdPVwiY29sdW1uLnN0eWxlXCIgcFJlb3JkZXJhYmxlUm93SGFuZGxlXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvdy5kaXNhYmxlZCAgIHx8IGFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnZGlzYWJsZWQtbGluaycgOiAnJ1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5HcmlkRGlhbG9nKGNvbHVtbiwgcm93LCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnc2VsZidcIj5cbiAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIihjb2x1bW4uaWNvbiB8fCByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24pICYmICFyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlIDsgZWxzZSBub0ljb25cIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cImNvbHVtbi5ob3ZlckRhdGEgPyAnJyA6IGNvbHVtbi5oZWFkZXJcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbiA/IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbiA6IGNvbHVtbi5pY29uXCI+PC9pPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9JY29uPnt7IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWUgPyAnJyA6IHNldENvbmRpdGlvbkJhc2VWYWx1ZShyb3csXG4gICAgICAgICAgICAgICAgICBjb2x1bW4pIH19PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8IS0tIHt7IHNldENvbmRpdGlvbkJhc2VWYWx1ZShyb3csIGNvbHVtbikgfX1cbiAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFyb3dbY29sdW1uLmZpZWxkICsgJ19zZWNvbmRUeXBlJ10gJiYgIXJvdy5oaWRlZ3JpZGJ0blwiIC0tPlxuXG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8IS0tIHRlc3QgLS0+XG4gICAgICAgIDwhLS0gbG9va3VwIElucHV0IGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2xvb2t1cF9pbnB1dCdcIj5cbiAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbG9zZS1pY29uLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ3NlbGYnXCJcbiAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhaXNMb29rdXBJbnB1dEVkaXRhYmxlKGNvbHVtbiwgcm93KVwiIHR5cGU9XCJ0ZXh0XCIgW25nTW9kZWxdPVwibG9va3VwSW5wdXROZ01vZGVsKHJvdywgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VMb29rdXBJbnB1dE5nTW9kZWwocm93LCBjb2x1bW4sICRldmVudClcIiBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaXNMb29rdXBJbnB1dEVkaXRhYmxlKGNvbHVtbiwgcm93KSA/IG9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdykgOiBzZWxlY3RMb29rdXBGaWVsZChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkNoYW5nZUV2ZW50KGNvbHVtbiwgcm93KVwiIChrZXlkb3duLmVudGVyKT1cIm9uTG9va3VwSW5wdXRFbnRlcigkZXZlbnQsIGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgICAocGFzdGUpPVwib25Mb29rdXBJbnB1dFBhc3RlKCRldmVudCwgY29sdW1uLCByb3cpXCIgW2lkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnaGlkZS1ib3JkZXInIDogJydcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSsnX29iaiddPy5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eScgOiAncHJpbWUtaW5wdXQnXCJcbiAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIiBbYXR0ci5hdXRvY29tcGxldGVdPVwiKGNvbHVtbi5hdXRvQ29tcGxldGUgPT09IGZhbHNlIHx8IGF1dG9Db21wbGV0ZSA9PT0gZmFsc2UpID8gJ29mZicgOiAnb24nXCIgLz5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc0xvb2t1cElucHV0RWRpdGFibGUoY29sdW1uLCByb3cpICYmIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uY29tcG9uZW50IHx8IGNvbHVtbi5sb29rdXBDb250cm9sPy5jb21wb25lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXNlYXJjaFwiIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJzZWxlY3RMb29rdXBGaWVsZChjb2x1bW4sIHJvdylcIj48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJyb3dbY29sdW1uLmZpZWxkXSAmJiB0eXBlT2Yocm93W2NvbHVtbi5maWVsZF0pID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICA/IHJvd1tjb2x1bW4uZmllbGRdLnRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiByb3dbY29sdW1uLmZpZWxkXSAmJiAhY29sdW1uLmRpc2FibGVkXCIgaWNvbj1cInBpIHBpLXRpbWVzXCIgcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImxvb2t1cENsZWFyVmFsdWUoY29sdW1uLHJvdylcIj48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbHVtbi5saW5rSWRcIj5cbiAgICAgICAgICAgICAgICA8YSBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnc2VsZidcIiBbaHJlZl09XCJyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uaHlwZXJsaW5rXCJcbiAgICAgICAgICAgICAgICAgIFt0YXJnZXRdPVwiY29sdW1uLnRhcmdldCA9PT0gJ19zZWxmJyA/ICcnIDogICdfYmxhbmsnXCI+XG4gICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgc2V0TG9va3VwUmVhZE9ubHlWYWx1ZShyb3csIGNvbHVtbilcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdzZWxmJ1wiICpuZ0lmPVwiIWNvbHVtbi5saW5rSWRcIiBbc3R5bGVdPVwiY29sdW1uLnN0eWxlXCJcbiAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY29sdW1uLmxvb2t1cENvbnRyb2w/LmNvbXBvbmVudCAmJiBjb2x1bW4uZWRpdExpbmsgPT09IHRydWUgPyAnY3VzdG9tLWxpbmsnIDogJydcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuTG9va3VwSHlwZXJsaW5rKGNvbHVtbiwgcm93KVwiPlxuICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgc2V0TG9va3VwUmVhZE9ubHlWYWx1ZShyb3csIGNvbHVtbilcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPCEtLSBOdW1lcmljIElucHV0IGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ251bWVyaWMnXCI+XG4gICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpbnB1dFwiPlxuICAgICAgICAgICAgICA8IS0tIGZvciBDdXJyZW5jeSAmJiBEZWNpbWFsICYmIFBlcmNlbnQgLS0+XG4gICAgICAgICAgICAgIDxzcGFuIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdpbnB1dCdcIiBjbGFzcz1cImlucHV0LW51bWJlclwiXG4gICAgICAgICAgICAgICAgcFJlb3JkZXJhYmxlUm93SGFuZGxlPlxuICAgICAgICAgICAgICAgIDxwLWlucHV0TnVtYmVyIFtpZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2hpZGUtYm9yZGVyJyA6ICcnXCIgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSsnX29iaiddPy5lcnJvck1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ25nLWludmFsaWQgbmctZGlydHknXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICdmb3JtLWNvbnRyb2wnXG4gICAgICAgICAgICAgICAgICAgIFwiIFtzaG93QnV0dG9uc109XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZCA/IHJvd1tyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV0gOiByb3dbY29sdW1uLmZpZWxkXVwiXG4gICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkID8gcm93W3Jvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldIDogcm93W2NvbHVtbi5maWVsZF0gPSAkZXZlbnRcIlxuICAgICAgICAgICAgICAgICAgW25hbWVdPVwiY29sdW1uLmZpZWxkXCIgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIiAob25Gb2N1cyk9XCJvbkZvY3VzRXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgIChvbkJsdXIpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChrZXlkb3duKT1cImFsbG93TGVhZGluZ0RvdCgkZXZlbnQpXCIgW21vZGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdCAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQudHlwZSA9PT0gJ2N1cnJlbmN5J1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAnY3VycmVuY3knXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICdkZWNpbWFsJ1xuICAgICAgICAgICAgICAgICAgICBcIiBbY3VycmVuY3ldPVwiXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdCAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQudHlwZSA9PT0gJ2N1cnJlbmN5JyAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQuZm9ybWF0UGFyYW1zICYmXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdC5mb3JtYXRQYXJhbXMuY3VycmVuY3lcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY29sdW1uLmZvcm1hdC5mb3JtYXRQYXJhbXMuY3VycmVuY3lcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ1VTRCdcbiAgICAgICAgICAgICAgICAgICAgXCIgW2xvY2FsZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdC50eXBlID09PSAnY3VycmVuY3knICYmXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdC5mb3JtYXRQYXJhbXMgJiZcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0LmZvcm1hdFBhcmFtcy5sb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY29sdW1uLmZvcm1hdC5mb3JtYXRQYXJhbXMubG9jYWxlXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICdlbi1VUydcbiAgICAgICAgICAgICAgICAgICAgXCIgW21pbkZyYWN0aW9uRGlnaXRzXT1cImNvbHVtbi5mb3JtYXQgPyBzZXROdW1lcmljTWluRnJhY3Rpb24oY29sdW1uKSA6ICcwJ1wiXG4gICAgICAgICAgICAgICAgICBbbWF4RnJhY3Rpb25EaWdpdHNdPVwiY29sdW1uLmZvcm1hdCA/IHNldE51bWVyaWNNYXhGcmFjdGlvbihjb2x1bW4pIDogJzAnXCIgW3N1ZmZpeF09XCJcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdC50eXBlID09PSAncGVyY2VudCcgJiYgXG4gICAgICAgICAgICAgICAgICAgICAgICAnJSdcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICA8L3AtaW5wdXROdW1iZXI+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsb2NrZWRfZmllbGQ+PHNwYW4gKm5nSWY9XCIhcm93LmlzTmV3XCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdzZWxmJ1wiPlxuICAgICAgICAgICAgICAgICAge3sgcm93W2NvbHVtbi5maWVsZF0gfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sYXlvdXQtZml4ZWRcIiBwUmVvcmRlcmFibGVSb3dIYW5kbGU+XG4gICAgICAgICAgICAgICAgPHNwYW4gW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ3NlbGYnXCI+XG4gICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgc2V0TnVtZXJpY0Zvcm1hdChjb2x1bW4sIHJvdylcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPCEtLSBCdXR0b24gY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInYWRkX2J1dHRvbidcIj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFyb3cuaGlkZWdyaWRidG5cIiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBbaWNvbl09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24gPyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24gOiBjb2x1bW4uaWNvblwiXG4gICAgICAgICAgICAgIFtuYW1lXT1cImNvbHVtbi5oZWFkZXJcIiBjbGFzcz1cIm1lcmdlLWJ0blwiIFtkaXNhYmxlZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheVRleHQgPyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlUZXh0IDogY29sdW1uLnZhbHVlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJncmlkLWNvbXBvbmVudC1ncmlkLWFkZC1idG5cIiAoY2xpY2spPVwib25DbGlja0J1dHRvbihjb2x1bW4sIHJvdylcIj48L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDwhLS0gR2VuZXJhdGUgRmlsZSBCdXR0b24gY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInZ2VuZXJhdGVfZmlsZV9idXR0b24nXCI+XG4gICAgICAgICAgPHNlLWdlbmVyYXRlLWltcG9ydC1maWxlXG4gICAgICAgICAgICBbbGFiZWxdPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5VGV4dCA/IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheVRleHQgOiBjb2x1bW4udmFsdWVcIlxuICAgICAgICAgICAgW2ljb25dPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5pY29uID8gcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5pY29uIDogY29sdW1uLmljb25cIlxuICAgICAgICAgICAgW2RpYWxvZ0RhdGFdPVwiY29sdW1uLmRhdGFcIiBbc2VsZWN0ZWRSb3ddPVwicm93XCI+PC9zZS1nZW5lcmF0ZS1pbXBvcnQtZmlsZT5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDwhLS0gU2VuZCBlbWFpbCBCdXR0b24gY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInc2VuZF9lbWFpbF9idXR0b24nXCI+XG4gICAgICAgICAgPHNlLWVtYWlsLWdlbmVyYXRlLWJ0blxuICAgICAgICAgICAgW2xhYmVsXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheVRleHQgPyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlUZXh0IDogY29sdW1uLnZhbHVlXCJcbiAgICAgICAgICAgIFtpY29uXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbiA/IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbiA6IGNvbHVtbi5pY29uXCIgW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICAgICAgW3NlbGVjdGVkUm93XT1cInJvd1wiPjwvc2UtZW1haWwtZ2VuZXJhdGUtYnRuPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPCEtLSBEYXRlIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICA8IS0tIGNhbGVuZGFyIHNlbGVjdG9yIC0tPlxuICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGUnXCJcbiAgICAgICAgICBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YT8gbnVsbDogZWRpdEFsbFJvd3MgPyAnaW5wdXQnIDogJ3NlbGYnIFwiPlxuICAgICAgICAgIDxwLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIiBwUmVvcmRlcmFibGVSb3dIYW5kbGU+XG4gICAgICAgICAgICAgIDxwLWRhdGVwaWNrZXIgW21pbkRhdGVdPVwiY29sdW1uLm1pbkRhdGVcIiBbbWF4RGF0ZV09XCJjb2x1bW4ubWF4RGF0ZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSsnX29iaiddPy5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eSAnICsgY29sdW1uLmZpZWxkICsgcm93W2RhdGFLZXldIDogY29sdW1uLmZpZWxkICsgcm93W2RhdGFLZXldXCJcbiAgICAgICAgICAgICAgICBbaWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdoaWRlLWJvcmRlcicgOiAnJ1wiIChvbkNsb3NlKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgIFthcHBlbmRUb109XCInYm9keSdcIiBob3VyRm9ybWF0PVwiMTJcIiBbZGVmYXVsdERhdGVdPVwiZGVmYXVsdERhdGVcIlxuICAgICAgICAgICAgICAgIFtzdGVwTWludXRlXT1cImNvbHVtbi5taW51dGVzSW50ZXJ2YWwgPyBjb2x1bW4ubWludXRlc0ludGVydmFsIDogMVwiIFtzaG93VGltZV09XCJjb2x1bW4uc2hvd1RpbWVcIlxuICAgICAgICAgICAgICAgIFt0aW1lT25seV09XCJjb2x1bW4udGltZU9ubHlcIiBbZGF0ZUZvcm1hdF09XCJjb2x1bW4uZm9ybWF0ID8gY29sdW1uLmZvcm1hdC50eXBlIDogY2FsZW5kYXJGb3JtYXRcIlxuICAgICAgICAgICAgICAgIChrZXl1cCk9XCJjYWxlbmRhcklucHV0VmFsdWUoY29sdW1uLCByb3cpXCIgKG9uU2hvdyk9XCJvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZCA/IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkIDogcm93W2NvbHVtbi5maWVsZF1cIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2FsZW5kYXJNb2RlbENoYW5nZSgkZXZlbnQsIHJvdywgY29sdW1uKVwiIFtkaXNhYmxlZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCJcbiAgICAgICAgICAgICAgICBbc2hvd0J1dHRvbkJhcl09XCIhY29sdW1uLnRpbWVPbmx5XCI+PC9wLWRhdGVwaWNrZXI+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbGF5b3V0LWZpeGVkIHdoaXRlLXNwYWNlLW5vd3JhcCB0ZXh0LWNlbnRlciBib3JkZXItcmVhZG9ubHlcIj5cbiAgICAgICAgICAgICAgICB7eyBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LGNvbHVtbikgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cbiAgICAgICAgPC9zcGFuPlxuXG5cbiAgICAgICAgPHNwYW4gKm5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgICA8c3BhbiBbbmdTd2l0Y2hdPVwiY29sdW1uLnR5cGVcIj5cbiAgICAgICAgICAgIDwhLS0gRHJvcGRvd24gY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2Ryb3Bkb3duJ1wiIFtjbGFzc109XCJkcm9wZG93bklucHV0ID8gJycgOiAnb3V0cHV0LWRyb3Bkb3duJ1wiXG4gICAgICAgICAgICAgIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCIgY29sdW1uLmhvdmVyRGF0YT8gbnVsbDogZWRpdEFsbFJvd3MgPyAnLnAtZHJvcGRvd24tbGFiZWwnIDogJ3NlbGYnXCI+XG4gICAgICAgICAgICAgIDxwLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XG4gICAgICAgICAgICAgICAgICA8cC1kcm9wZG93biAqbmdJZj1cIiFyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGRlblwiIFtvcHRpb25zXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSsnX2RhdGEnXVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkrJ19kYXRhJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjb2x1bW4uZGF0YVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpID8gcm93W3Jvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKCldIDogcm93W2NvbHVtbi5maWVsZF1cIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpID8gcm93W3Jvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKV0gOiByb3dbY29sdW1uLmZpZWxkXSA9ICRldmVudFwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCIgW3BsYWNlaG9sZGVyXT1cInJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXVxuICAgICAgICAgICAgICAgICAgICAgID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdXG4gICAgICAgICAgICAgICAgICAgICAgOiByb3dbY29sdW1uLmZpZWxkXSA/IHJvd1tjb2x1bW4uZmllbGRdIDogJ1NlbGVjdCdcIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd0NsZWFyXT1cInJvd1tjb2x1bW4uZmllbGRdID8gdHJ1ZSA6IGZhbHNlXCIgW29wdGlvbkxhYmVsXT1cImNvbHVtbi5vcHRpb25MYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpXCIgW29wdGlvblZhbHVlXT1cImNvbHVtbi5vcHRpb25WYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHknIDogJydcIlxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdoaWRlLWJvcmRlcicgOiAnJ1wiIChibHVyKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25DaGFuZ2VFdmVudChjb2x1bW4sIHJvdylcIiBbYXBwZW5kVG9dPVwiJ2JvZHknXCIgW2ZpbHRlcl09XCJjb2x1bW4uYWxsb3dTZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJNYXRjaE1vZGU9XCJzdGFydHNXaXRoXCI+PC9wLWRyb3Bkb3duPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxheW91dC1maXhlZCBib3JkZXItcmVhZG9ubHlcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxhICpuZ0lmPVwiY29sdW1uLmRpc3BsYXlBc0xpbmtcIiBjbGFzcz1cImN1c3RvbS1saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cImNvbHVtbi5kaXNhYmxlZD8nJzpyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uaHlwZXJsaW5rXCIgW3RhcmdldF09J2NvbHVtbi50YXJnZXQnPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgc2V0RHJvcGR3b25SZWFkT25seVZhbHVlKHJvdywgY29sdW1uKSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFjb2x1bW4uZGlzcGxheUFzTGlua1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgc2V0RHJvcGR3b25SZWFkT25seVZhbHVlKHJvdywgY29sdW1uKSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIDwhLS0gTXVsdGlTZWxlY3QgY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgICAgICA8IS0tIFsobmdNb2RlbCldPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCkgPyByb3dbcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKV0gOlxuICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF1cIiAtLT5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInbXVsdGktc2VsZWN0J1wiXG4gICAgICAgICAgICAgIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICcucC1tdWx0aXNlbGVjdC1sYWJlbCdcIj5cbiAgICAgICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHknIDogJydcIlxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdoaWRlLWJvcmRlcicgOiAnJ1wiIHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmZpZWxkXVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwicm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpICsgJ19kYXRhJ10gPyByb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkgKyAnX2RhdGEnXSA6IGNvbHVtbi5kYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgW29wdGlvbkxhYmVsXT1cImNvbHVtbi5vcHRpb25MYWJlbFwiIFtvcHRpb25WYWx1ZV09XCJjb2x1bW4ub3B0aW9uVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25DaGFuZ2VFdmVudChjb2x1bW4sIHJvdylcIiAob25QYW5lbFNob3cpPVwic2hvd09wdGlvbihjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja0V2ZW50KGNvbHVtbiwgcm93KVwiIFthcHBlbmRUb109XCInYm9keSdcIiAoYmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCI+XG4gICAgICAgICAgICAgICAgICA8L3AtbXVsdGlTZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnc2VsZidcIj5cbiAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdXG4gICAgICAgICAgICAgICAgICAgID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdIDpcbiAgICAgICAgICAgICAgICAgICAgc2V0TXVsdGlTZWxlY3REYXRhKGNvbHVtbiwgcm93W2NvbHVtbi5maWVsZF0pXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIDwhLS0gQXV0b0NvbXBsZXRlIFNlYXJjaCAtLT5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInQXV0b0NvbXBsZXRlJ1wiPlxuICAgICAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgPHAtYXV0b0NvbXBsZXRlXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHknIDogJydcIlxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdoaWRlLWJvcmRlcicgOiAnJ1wiIFtuYW1lXT1cImNvbHVtbi5oZWFkZXJcIlxuICAgICAgICAgICAgICAgICAgICBbc3VnZ2VzdGlvbnNdPVwiY29sdW1uLmRhdGFcIiAob25TZWxlY3QpPVwiYXV0b0NvbXBsZXRlU2VsZWN0ZWRWYWx1ZShyb3csIGNvbHVtbiwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtmaWVsZF09XCJjb2x1bW4ub3B0aW9uTGFiZWwgPyBjb2x1bW4ub3B0aW9uTGFiZWw/LnRvTG93ZXJDYXNlKCkgOiBjb2x1bW4uZGlzcGxheUZpZWxkID8gY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKSA6IGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImdldEF1dG9Db21wbGV0ZU5nTW9kZWwocm93LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQXV0b0NvbXBsZXRlTmdNb2RlbChyb3csIGNvbHVtbiwgJGV2ZW50KVwiIFtkcm9wZG93bl09XCJjb2x1bW4uc2hvd09wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoY29sdW1uLCByb3cpXCIgKGNsaWNrKT1cIm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAoY29tcGxldGVNZXRob2QpPVwiYXV0b1NlYXJjaCgkZXZlbnQsIGNvbHVtbiwgcm93KVwiIChvbkJsdXIpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93LCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIiBbYXBwZW5kVG9dPVwiJ2JvZHknXCIgW211bHRpcGxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJvbkF1dG9Db21wbGV0ZUtleUVudGVyRXZlbnQoJGV2ZW50LCBjb2x1bW4sIHJvdylcIj5cbiAgICAgICAgICAgICAgICAgIDwvcC1hdXRvQ29tcGxldGU+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInJvd1tjb2x1bW4uZmllbGRdICYmIHJvd1tjb2x1bW4uZmllbGRdWzBdICYmICByb3dbY29sdW1uLmZpZWxkXVswXVtjb2x1bW4uZGlzcGxheUZpZWxkXVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgdmFsdWUgb2Ygcm93W2NvbHVtbi5maWVsZF07IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyByb3dbY29sdW1uLmZpZWxkXSAmJiByb3dbY29sdW1uLmZpZWxkXS5sZW5ndGggPiAxID8gcm93W2NvbHVtbi5maWVsZF0ubGVuZ3RoIC0xID09PSBpID9cbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVtjb2x1bW4uZGlzcGxheUZpZWxkXSA6IHZhbHVlW2NvbHVtbi5kaXNwbGF5RmllbGRdICsgJzsnIDogdmFsdWVbY29sdW1uLmRpc3BsYXlGaWVsZF0gfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJyb3dbY29sdW1uLmZpZWxkXSAmJiByb3dbY29sdW1uLmZpZWxkXVswXSAmJiAgcm93W2NvbHVtbi5maWVsZF1bMF1bY29sdW1uLmZpZWxkXSAmJiAhY29sdW1uLmRpc3BsYXlGaWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgdmFsdWUgb2Ygcm93W2NvbHVtbi5maWVsZF07IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyByb3dbY29sdW1uLmZpZWxkXSAmJiByb3dbY29sdW1uLmZpZWxkXS5sZW5ndGggPiAxID8gcm93W2NvbHVtbi5maWVsZF0ubGVuZ3RoIC0xID09PSBpID9cbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVtjb2x1bW4uZmllbGRdIDogdmFsdWVbY29sdW1uLmZpZWxkXSArICc7JyA6IHZhbHVlW2NvbHVtbi5maWVsZF0gfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPCEtLSBBZGQgR2VuZXJhdGUgUmVwb3J0IEJ1dHRvbiAtLT5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCIncmVwb3J0J1wiPlxuICAgICAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxzZS1nZW5lcmF0ZS1yZXBvcnQtYnRuIFtyZXBJbmZvXT1cInNldFJlcG9ydE5hbWUoY29sdW1uLCByb3cpXCIgW2xhYmVsXT1cImNvbHVtbi5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIFtwYXJhbXNdPVwic2V0UmVwb3J0UGFyYW1zKGNvbHVtbiwgcm93KVwiIFtjbGFzc109XCJjb2x1bW4uY2xhc3NcIiBbc2hvd0RpYWxvZ109XCJjb2x1bW4uc2hvd0RpYWxvZ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpY29uXT1cImNvbHVtbi5pY29uXCIgW3JlcG9ydFR5cGVdPVwiY29sdW1uLnJlcG9ydFR5cGVcIj48L3NlLWdlbmVyYXRlLXJlcG9ydC1idG4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxzZS1nZW5lcmF0ZS1yZXBvcnQtYnRuIFtyZXBJbmZvXT1cInNldFJlcG9ydE5hbWUoY29sdW1uLCByb3cpXCIgW2xhYmVsXT1cImNvbHVtbi5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIFtwYXJhbXNdPVwic2V0UmVwb3J0UGFyYW1zKGNvbHVtbiwgcm93KVwiIFtpY29uXT1cImNvbHVtbi5pY29uXCIgW2NsYXNzXT1cImNvbHVtbi5jbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgIFtzaG93RGlhbG9nXT1cImNvbHVtbi5zaG93RGlhbG9nXCIgW3JlcG9ydFR5cGVdPVwiY29sdW1uLnJlcG9ydFR5cGVcIj48L3NlLWdlbmVyYXRlLXJlcG9ydC1idG4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ2lucHV0J1wiPlxuICAgICAgICAgICAgICA8IS0tIElucHV0IGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gW3N0eWxlXT1cImNvbHVtbi5zdHlsZSA/IGNvbHVtbi5zdHlsZSA6ICdkaXNwbGF5OmZsZXgnXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhICpuZ0lmPVwiY29sdW1uLmlzVGV4dGFyZWEgJiYgKGVkaXRBbGxSb3dzIHx8IGVkaXRpbmdSb3dLZXlzW3Jvd1tkYXRhS2V5XV0pXCJcbiAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4uZmllbGRdXCIgW2F0dHIuZGF0YS1jZWxsXT1cImNvbHVtbi5maWVsZCArICctJyArIHJvd1tkYXRhS2V5XVwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwcmltZS10ZXh0YXJlYVwiXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJyZXNpemU6IG5vbmU7IG1pbi13aWR0aDogMjAwcHg7IG1pbi1oZWlnaHQ6IDQwcHg7IHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7IHRleHQtYWxpZ246IGp1c3RpZnk7IG92ZXJmbG93OiBoaWRkZW47XCJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiIChibHVyKT1cIm9uVGV4dGFyZWFCbHVyKGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25UZXh0YXJlYUVudGVyKCRldmVudCwgY29sdW1uLCByb3cpXCIgYXV0b2ZvY3VzPjwvdGV4dGFyZWE+XG5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhY29sdW1uLmlzVGV4dGFyZWEgJiYgKGVkaXRBbGxSb3dzIHx8IGVkaXRpbmdSb3dLZXlzW3Jvd1tkYXRhS2V5XV0pICYmICBjb2x1bW4uZmllbGQgIT09IGRhdGFLZXlcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8udGV4dFR5cGU/cm93W2NvbHVtbi5maWVsZCsnX29iaiddPy50ZXh0VHlwZTpjb2x1bW4udGV4dFR5cGU/Y29sdW1uLnRleHRUeXBlOid0ZXh0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSsnX29iaiddPy5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eScgOiAncHJpbWUtaW5wdXQnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdoaWRlLWJvcmRlcicgOiAnJ1wiIFtuZ01vZGVsXT1cInNldElucHV0TmdNb2RlbChyb3csIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uSW5wdXRDaGFuZ2UoJGV2ZW50LCByb3csIGNvbHVtbilcIiBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiIChjaGFuZ2UpPVwib25DaGFuZ2VFdmVudChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrQnV0dG9uKGNvbHVtbiwgcm93KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIShlZGl0QWxsUm93cyB8fCBlZGl0aW5nUm93S2V5c1tyb3dbZGF0YUtleV1dKVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IHJvd1tjb2x1bW4uZmllbGRdIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImZsb2F0OnJpZ2h0XCIgKm5nSWY9XCJjb2x1bW4uZm9ybWF0PT0ncGFzc3dvcmQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8ocm93W2NvbHVtbi5maWVsZCsnX29iaiddLnRleHRUeXBlPT0ncGFzc3dvcmQnPydwaSBwaS1leWUnOidwaSBwaS1leWUtc2xhc2gnKTpjb2x1bW4udGV4dFR5cGU9PSdwYXNzd29yZCc/J3BpIHBpLWV5ZSc6J3BpIHBpLWV5ZS1zbGFzaCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5nZVBhc3N3b3JkVHlwZShjb2x1bW4sIHJvdylcIiBbdGl0bGVdPVwiY29sdW1uLmhlYWRlclwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsb2NrZWRfZmllbGQ+PHNwYW4gKm5nSWY9XCIhcm93LmlzTmV3XCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnc2VsZidcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyByb3dbY29sdW1uLmZpZWxkXSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sYXlvdXQtZml4ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW3N0eWxlXT1cImNvbHVtbi5zdHlsZSA/IGNvbHVtbi5zdHlsZSA6ICdkaXNwbGF5OmZsZXgnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cIm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ3NlbGYnIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy50ZXh0VHlwZSA/KHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8udGV4dFR5cGU9PSdwYXNzd29yZCcgID8ncGFzc3dvcmQnOicnKSA6Y29sdW1uLnRleHRUeXBlPT0ncGFzc3dvcmQnPydwYXNzd29yZCc6JydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHNldFRleHRCb3hSZWFkT25seVZhbHVlKHJvdywgY29sdW1uKSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImZsb2F0OnJpZ2h0XCIgKm5nSWY9XCJjb2x1bW4uZm9ybWF0PT0ncGFzc3dvcmQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPyhyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10udGV4dFR5cGU9PSdwYXNzd29yZCc/J3BpIHBpLWV5ZSc6J3BpIHBpLWV5ZS1zbGFzaCcpOmNvbHVtbi50ZXh0VHlwZT09J3Bhc3N3b3JkJz8ncGkgcGktZXllJzoncGkgcGktZXllLXNsYXNoJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJjb2x1bW4uaGVhZGVyXCIgKGNsaWNrKT1cImNoYW5nZVBhc3N3b3JkVHlwZShjb2x1bW4sIHJvdylcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPCEtLSBHcmlkIFJvd3MgRGF0YSBCaW5kaW5ncyBFbmQgLS0+XG5cbiAgICAgICAgPCEtLSBNb3JlIGFjdGlvbnMgY29sdW1uIChlbGxpcHNpcykgLS0+XG4gICAgICAgIDx0ZCAqbmdJZj1cImhhc01vcmVJdGVtcyhyb3cpXCIgY2xhc3M9XCJmb3ItbW9yZS1hY3Rpb25zXCI+XG4gICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktZWxsaXBzaXMtdlwiIGNsYXNzPVwicC1idXR0b24tdGV4dFwiIChjbGljayk9XCJzaG93TW9yZSgkZXZlbnQsIHJvdylcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIk1vcmUgYWN0aW9uc1wiPjwvYnV0dG9uPlxuICAgICAgICA8L3RkPlxuXG4gICAgICAgIDwhLS0gQWN0aW9uIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICA8IS0tIDx0ZCAqbmdJZj1cIiFzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmIGNvbHVtbnM/Lmxlbmd0aCA+IDAgJiYgY29sdW1uQWN0aW9ucy5sZW5ndGggPiAwXCJcbiAgICAgICAgICBjbGFzcz1cImZvci1idXR0b25zXCJcbiAgICAgICAgICBbY2xhc3NdPVwiaW5FZGl0TW9kZSA/ICd0aHJlZS1hY3Rpb24tYnRuJyA6ICd0d28tYWN0aW9uLWJ0bidcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImFjdGlvbi1idG5cIiAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGNvbHVtbkFjdGlvbnNcIj5cbiAgICAgICAgICAgIDxpIFt0aXRsZV09XCJhY3Rpb24udG9vbHRpcFwiIFtjbGFzc109XCJhY3Rpb24uaWNvblwiIChjbGljayk9XCJoYW5kbGVBY3Rpb25DbGljaygkZXZlbnQsIGFjdGlvbiwgcm93KVwiPjwvaT5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGQ+IC0tPlxuICAgICAgICA8dGQgKm5nSWY9XCIhc2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiBjb2x1bW5zPy5sZW5ndGggPiAwICYmIGNvbHVtbkFjdGlvbnMubGVuZ3RoID4gMFwiIGNsYXNzPVwiZm9yLWJ1dHRvbnNcIlxuICAgICAgICAgIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjb2x1bW5BY3Rpb25zXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFjdGlvbi1idG5cIiAqbmdJZj1cImFjdGlvbi52aXNpYmxlID8gYWN0aW9uLnZpc2libGUocm93KSA6IHRydWVcIj5cbiAgICAgICAgICAgICAgPGkgW3RpdGxlXT1cImFjdGlvbi50b29sdGlwXCIgW2NsYXNzXT1cImFjdGlvbi5pY29uXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aW9uLWJ0bi1kaXNhYmxlZF09XCJhY3Rpb24uZGlzYWJsZWQgPyBhY3Rpb24uZGlzYWJsZWQocm93KSA6IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiKGFjdGlvbi5kaXNhYmxlZCAmJiBhY3Rpb24uZGlzYWJsZWQocm93KSkgPyBudWxsIDogaGFuZGxlQWN0aW9uQ2xpY2soJGV2ZW50LCBhY3Rpb24sIHJvdylcIj48L2k+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZFxuICAgICAgICAgICpuZ0lmPVwiIXNldEFjdGlvbkNvbHVtbkFzRmlyc3QgJiYgY29sdW1ucz8ubGVuZ3RoID4gMCAmJiB1c2VJbmxpbmVDUlVEICYmIChkZWxldGVSb3dQZXJtaXNzaW9uIHx8IGVkaXRSb3dQZXJtaXNzaW9uKVwiXG4gICAgICAgICAgW2NsYXNzXT1cImluRWRpdE1vZGUgPyAndGhyZWUtYWN0aW9uLWJ0bicgOiAndHdvLWFjdGlvbi1idG4nXCIgY2xhc3M9XCJmb3ItYnV0dG9uc1wiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiZGlzYWJsZWRTYXZlQnRuID8gJ2hpZGUtY2xlYXItZmlsdGVyLWJ1dHRvbicgOiAnJ1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSdzZXRBY3Rpb25Db2x1bW5XaWR0aCc+XG4gICAgICAgICAgICA8c2UtZ3JpZC1yb3ctYWN0aW9ucyBbZWRpdGluZ109XCJlZGl0aW5nXCIgW2VkaXRSb3dQZXJtaXNzaW9uXT1cImVkaXRSb3dQZXJtaXNzaW9uXCJcbiAgICAgICAgICAgICAgW2RlbGV0ZVJvd1Blcm1pc3Npb25dPVwiZGVsZXRlUm93UGVybWlzc2lvblwiIFtoaWRlRGVsZXRlQnRuXT1cImhpZGVEZWxldGVCdG5cIiBbaGlkZUVkaXRCdG5dPVwiaGlkZUVkaXRCdG5cIlxuICAgICAgICAgICAgICBbcm93XT1cInJvd1wiIChvblJvd0VkaXRJbml0QnRuKT1cIm9uUm93RWRpdEluaXQoJGV2ZW50KVwiIChkZWxldGVSZWNvcmRCdG4pPVwiZGVsZXRlUmVjb3JkKCRldmVudClcIlxuICAgICAgICAgICAgICAob25Sb3dFZGl0U2F2ZUJ0bik9XCJvblJvd0VkaXRTYXZlKCRldmVudClcIiAob25Sb3dFZGl0Q2FuY2VsQnRuKT1cIm9uUm93RWRpdENhbmNlbCgkZXZlbnQsIHJpKVwiXG4gICAgICAgICAgICAgIFtlZGl0QWxsUm93c109XCJlZGl0QWxsUm93c1wiPlxuICAgICAgICAgICAgPC9zZS1ncmlkLXJvdy1hY3Rpb25zPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDwhLS0gRm9vdGVyIGNvbHVtbnMgb24gR3JpZCAtLT5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZm9vdGVyXCI+XG4gICAgICA8dHIgKm5nSWY9XCJhZ2dyZWdhdGVGb290ZXJcIj5cbiAgICAgICAgPHRkXG4gICAgICAgICAgKm5nSWY9XCJzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmIChjb2x1bW5BY3Rpb25zLmxlbmd0aCA+IDAgfHwgKHVzZUlubGluZUNSVUQgJiYgKGRlbGV0ZVJvd1Blcm1pc3Npb24gfHwgZWRpdFJvd1Blcm1pc3Npb24pKSlcIlxuICAgICAgICAgIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiPjwvdGQ+XG4gICAgICAgIDx0ZCAqbmdJZj1cImFsbG93U2VsZWN0aW9uXCIgW2NsYXNzXT1cImluRWRpdE1vZGUgPyAndGhyZWUtYWN0aW9uLWJ0bicgOiAndHdvLWFjdGlvbi1idG4nXCI+PC90ZD5cbiAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBvdXRlckNvbHVtbiBvZiBzZWxlY3RlZENvbHVtbnNcIiBjbGFzcz1cImdyaWQtY29tcG9uZW50LW91dGVyLWNvbHVtblwiIFtzdHlsZV09XCJvdXRlckNvbHVtbi5zdHlsZVwiPlxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGlubmVyQ29sdW1uIG9mIHNlbGVjdGVkQ29sdW1uc1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYWdnciBvZiBpbm5lckNvbHVtbj8uYWdncmVnYXRlXCI+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhZ2dyLmFnZ3JWYWx1ZT8ubGVuZ3RoICYmICgoIWFnZ3IuZGlzcGxheUZpZWxkICYmIGlubmVyQ29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBvdXRlckNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgICAgICAgICAgICAgIGFnZ3IuZGlzcGxheUZpZWxkICYmIGFnZ3IuZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBvdXRlckNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSlcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IFtpbm5lckhUTUxdPVwiYWdnci5hZ2dyVmFsdWVcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkXG4gICAgICAgICAgKm5nSWY9XCIhc2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiBjb2x1bW5zPy5sZW5ndGggPiAwICYmIHVzZUlubGluZUNSVUQgJiYgKGRlbGV0ZVJvd1Blcm1pc3Npb24gfHwgZWRpdFJvd1Blcm1pc3Npb24pXCJcbiAgICAgICAgICBbY2xhc3NdPVwiaW5FZGl0TW9kZSA/ICd0aHJlZS1hY3Rpb24tYnRuJyA6ICd0d28tYWN0aW9uLWJ0bidcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImRpc2FibGVkU2F2ZUJ0biA/ICdoaWRlLWNsZWFyLWZpbHRlci1idXR0b24nIDogJydcIj48L3RkPlxuICAgICAgPC90cj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPCEtLSBGb290ZXIgZm9yIEVtcHR5IE1lc3NhZ2UgY29sdW1ucyBvbiBHcmlkIC0tPlxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJlbXB0eW1lc3NhZ2VcIj5cbiAgICAgIDx0ciBjbGFzcz1cImdyaWQtY29tcG9uZW50IG5vLXJlY29yZHMtZm91bmRcIj5cbiAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwic2VsZWN0ZWRDb2x1bW5zPy5sZW5ndGggKyAxXCI+e3t0b3RhbFJlY29yZHM9PTA/ICdObyByZWNvcmRzIGZvdW5kJzonJ319PC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9wLXRhYmxlPlxuICA8cC1vdmVybGF5UGFuZWwgW3N0eWxlXT1cIm92ZXJsYXlQYW5lbFN0eWxlXCIgI292ZXJsYXlQYW5lbD5cbiAgICA8bmctY29udGFpbmVyICN2aWV3Q29udGFpbmVyUmVmPjwvbmctY29udGFpbmVyPlxuICA8L3Atb3ZlcmxheVBhbmVsPlxuICA8cC1tZW51ICNtb3JlTWVudSBbcG9wdXBdPVwidHJ1ZVwiIFttb2RlbF09XCJjdXJyZW50TW9yZU1lbnVcIiBhcHBlbmRUbz1cImJvZHlcIiBzdHlsZUNsYXNzPVwiZ3JpZC1tb3JlLW1lbnVcIj48L3AtbWVudT5cbjwvZGl2PlxuIl19
|
|
4155
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2dyaWQvZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2dyaWQvZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUdaLFFBQVEsRUFFUixZQUFZLEVBR1osU0FBUyxFQUNULFlBQVksRUFFWixnQkFBZ0IsR0FLakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBUXJFLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUxQixPQUFPLEVBU0wsa0JBQWtCLEVBQ2xCLGVBQWUsRUFDZixrQkFBa0IsRUFFbEIsY0FBYyxFQUNkLGVBQWUsRUFFZixjQUFjLEVBQ2QscUJBQXFCLEVBRXJCLFVBQVUsRUFDVixnQkFBZ0IsRUFFaEIsU0FBUyxFQUNULGNBQWMsR0FDZixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxlQUFlLEVBQWUsTUFBTSxpQ0FBaUMsQ0FBQztBQUcvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLHdDQUF3QyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFJNU8sT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1B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LENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7WUFDdEwsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1lBQ25MLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtZQUN0TCxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsR0FBRyxD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QkFHRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBSVAsdUJBQXVCO3NCQUR0QixNQUFNO2dCQU1QLFlBQVk7c0JBRFgsTUFBTTtnQkFJRyxXQUFXO3NCQUFwQixNQUFNO2dCQUVHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFHRyxlQUFlO3NCQUF4QixNQUFNO2dCQUdHLFdBQVc7c0JBQXBCLE1BQU07Z0JBR0csUUFBUTtzQkFBakIsTUFBTTtnQkFHRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBR0UsWUFBWTtzQkFBcEIsS0FBSztnQkFHRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBR0csV0FBVztzQkFBbkIsS0FBSztnQkFFRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVJLGFBQWE7c0JBQXRCLE1BQU07Z0JBR0csWUFBWTtzQkFBckIsTUFBTTtnQkFFRSxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkF3Sk4sZUFBZTtzQkFGZCxZQUFZO3VCQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQzs7c0JBQy9CLFlBQVk7dUJBQUMsS0FBSyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVdXLE9BQU87c0JBQWhELFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsZUFBZSxDQUFDO2dCQVF4QyxtQkFBbUI7c0JBRGxCLFlBQVk7dUJBQUMscUJBQXFCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgT25DaGFuZ2VzLFxuICBPcHRpb25hbCxcbiAgRWxlbWVudFJlZixcbiAgVmlld0NoaWxkcmVuLFxuICBRdWVyeUxpc3QsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgSG9zdExpc3RlbmVyLFxuICBPbkRlc3Ryb3ksXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIE5nWm9uZSxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgUmVuZGVyZXIyLFxuICBBcHBsaWNhdGlvblJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBnZXRDaGFuZ2VkUm93cyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdGllcy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQge1xuICBEeW5hbWljRGlhbG9nUmVmLFxuICBEeW5hbWljRGlhbG9nQ29uZmlnLFxuICBEaWFsb2dTZXJ2aWNlLFxuICBEeW5hbWljRGlhbG9nQ29tcG9uZW50LFxufSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xuaW1wb3J0IGpzUERGIGZyb20gJ2pzcGRmJztcbmltcG9ydCB7IEdyaWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZ3JpZC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIElHcmlkQ29sdW1uLFxuICBJR3JpZFNvcnQsXG4gIElHcmlkU2VydmVyU2lkZUV2ZW50LFxuICBJR3JpZFBhZ2luYXRpb25FdmVudCxcbiAgSUdsb2JhbEZpbHRlcixcbiAgSUdyaWRGaWx0ZXIsXG4gIElHcmlkQ29sdW1uQWN0aW9uLFxuICBJR3JpZFJvd0FjdGlvbixcbiAgRUdyaWRTZWxlY3Rpb25UeXBlLFxuICBFR3JpZENvbHVtblR5cGUsXG4gIEVHcmlkU29ydERpcmVjdGlvbixcbiAgSUdyaWREYXRhRXhwb3J0LFxuICBFR3JpZEFnZ3JlZ2F0ZSxcbiAgRUdyaWRGb3JtYXRUeXBlLFxuICBJR3JpZEZpbHRlckluZm8sXG4gIEVHcmlkVmFsaWRhdG9yLFxuICBHcmlkRmlsdGVyQ29udHJvbFR5cGUsXG4gIHVzZXJTZXR0aW5nLFxuICBFR3JpZEV4Y2VsLFxuICBFR3JpZFJvd1Byb3BOYW1lLFxuICBJR3JpZFJlcG9ydEJ0bixcbiAgRUdyaWRsaW5rLFxuICBFR3JpZEZvcm1hdHRlcixcbn0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dyaWQubW9kZWwnO1xuaW1wb3J0IHsgRVBlcm1pc3Npb25UeXBlLCBJUGVybWlzc2lvbiB9IGZyb20gJy4uLy4uLy4uL21vZGVscy91c2VyLWluZm8ubW9kZWwnO1xuaW1wb3J0IHsgQXV0aGVudGljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aGVudGljYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hbGVydC5zZXJ2aWNlJztcbmltcG9ydCB7IElmcmFtZUNvbXBvbmVudCB9IGZyb20gJy4uL2lmcmFtZS9pZnJhbWUuY29tcG9uZW50JztcbmltcG9ydCB7IERhdGVQaXBlLCBEZWNpbWFsUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBhdXRvU2V0TG9va3VwRGF0YSwgY2hhbmdlQ29sdW1uc1N0YXRlLCBjdXJyZW50VXJsLCBkcmFnZ2FibGVEaWFsb2csIG9iakNvbnZlcnRUb0xvd2VyLCBzZXREaWFsb2dSZXNwb25zZSwgc2V0TWludXRlc0ludGVydmFsLCBzZXRUaW1lSW5EYXRlLCBvbkdsb2JhbEZpbHRlckNvbnRyb2xSaWdodEJ0blN0YXRlQ2hhbmdlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0aWVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGFibGUgfSBmcm9tICdwcmltZW5nL3RhYmxlJztcbmltcG9ydCB7IE1lbnUgfSBmcm9tICdwcmltZW5nL21lbnUnO1xuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBFRm9ybWF0VHlwZSwgRU1hdGNoTW9kZSwgRU9wZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2Zvcm0ubW9kZWwnO1xuaW1wb3J0IHsgUGFnZUxvZ2dlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wYWdlLWxvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgaW50ZXJ2YWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBIeXBlcmxpbmtTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaHlwZXJsaW5rLnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9mb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHsgZGVsYXksIHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFJlcXVlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vbGliL3NlcnZpY2VzL3JlcXVlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBSZXF1ZXN0RHRvIH0gZnJvbSAncHJvamVjdHMvc2UtdWktdG9vbGtpdC9zcmMvbGliL21vZGVscy9yZXF1ZXN0Lm1vZGVsJztcbmltcG9ydCB7IFN5c3RlbUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zeXN0ZW0tY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgRW1haWxGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuLi9lbWFpbC9lbWFpbC1maWx0ZXIvZW1haWwtZmlsdGVyLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NlLWdyaWQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZ3JpZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2dyaWQuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgR3JpZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICBAVmlld0NoaWxkKCd2aWV3Q29udGFpbmVyUmVmJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgcHVibGljIHBhbmVsT3ZlcmxheVZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWZcblxuICBAVmlld0NoaWxkcmVuKCdncmlkUm93JykgZ3JpZFJvdzogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICBAT3V0cHV0KCkgaW5saW5lUm93Q2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBncmlkU2V0dGluZzogYW55O1xuICBzZWFyY2hidG5JZCA9ICdzZWFyY2hHbG9iYWxGaWx0ZXJCdG4nO1xuICBjdXJyZW50UGFnZTogbnVtYmVyID0gMDtcbiAgUGFnZUNoYW5nZTogYm9vbGVhbjtcbiAgdGVtcFNhdmVkUm93OiBhbnlbXSA9IFtdO1xuICBzb3J0RGF0YTogSUdyaWRTb3J0ID0ge307XG4gIEBJbnB1dCgpIHNldCBhY3RpdmVUZXN0TW9kZSh2YWw6IGFueSkge1xuICAgIGlmICh2YWwgPT09IHRydWUpIHtcbiAgICAgIGRlYnVnZ2VyO1xuICAgIH1cbiAgfVxuICBzZXJ2ZXJGaWx0ZXJzOiBJR3JpZFNlcnZlclNpZGVFdmVudCA9IHt9O1xuICByb3dzRGF0YTogYW55W10gPSBbXTtcbiAgb3JpZ2luYWxSb3dzOiBhbnlbXSA9IFtdO1xuICBncmlkSWQ6IHN0cmluZyA9ICcnO1xuICByb3dzRGF0YUNvcHk6IGFueVtdID0gW107XG4gIG51bWVyaWNWYWx1ZTogYW55ID0ge31cbiAgcm9sZXM6IHN0cmluZ1tdID0gW107XG4gIGlzQ29sdW1uSGlkZGVuOiBib29sZWFuID0gZmFsc2U7XG4gIHJvd0NsaWNrRGF0YTogSUdyaWRDb2x1bW47XG4gIGNvbXBvbmVudFRhYmxlUmVmOiBhbnk7XG4gIGxvb2t1cEZpbHRlck9iajogYW55O1xuICBjaGVja2xpc3Q6IGFueVtdID0gW11cbiAgbG9va3VwQmx1cjogYm9vbGVhbiA9IHRydWU7XG4gIGdsb2JhbEZpbHRlcnNBcnJheTogYW55W10gPSBbXTtcbiAgY2hlY2tBY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgY2FsZW5kYXJQcmV2aW91c1ZhbHVlOiBzdHJpbmcgPSAnJztcbiAgZ3JpZEZpbHRlck9iajogSUdyaWRGaWx0ZXJJbmZvO1xuICBkZWZhdWx0RGF0ZTogYW55O1xuICBvdmVybGF5UGFuZWxTdHlsZToge307XG4gIC8vIEhvbGRzIHRoZSBpdGVtcyB0byBkaXNwbGF5IGluIHRoZSBwZXItcm93IFwiTW9yZVwiIG1lbnUgKFByaW1lTkcgTWVudSBtb2RlbClcbiAgY3VycmVudE1vcmVNZW51OiBNZW51SXRlbVtdID0gW107XG4gIGdyaWRmaWx0ZXI6IGFueTtcbiAgZHJvcERvd25GaWx0ZXI6IGFueSA9IHt9O1xuICBkcm9wZG93bklucHV0OiBib29sZWFuID0gZmFsc2U7XG4gIHNhdmVBbGxSZWNvcmQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZ2VuZXJhdGVSb3dzRGF0YUNvcHk6IGJvb2xlYW4gPSB0cnVlO1xuICBlZGl0QWxsUmVjb3JkOiBib29sZWFuID0gZmFsc2U7XG4gIGNhbmNlbEFsbFJlY29yZHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgYWRkTmV3Um93Q2hlY2s6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaW5FZGl0TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICBzYXZlUmVjb3JkQXJyYXk6IGFueVtdID0gW107XG4gIGRpc2FibGVkU2F2ZUJ0bjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNTZWxlY3RlZEFsbFJvd3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQ2hlY2tlZDogYm9vbGVhbiA9IHRydWVcbiAgdW5DaGVja2VkOiBib29sZWFuID0gZmFsc2VcbiAgZWRpdE1vZGVDaGVja2VkOiBib29sZWFuID0gdHJ1ZTtcbiAgZWRpdE1vZGV1bkNrZWNrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY2FsZW5kYXJGb3JtYXQ6IHN0cmluZyA9IFwibW0vZGQveXlcIlxuICBzZXREcm9wZG93bkZpbHRlcjogYm9vbGVhbiA9IHRydWU7XG4gIHJlbG9hZFBhZ2U6IFN1YnNjcmlwdGlvbjtcbiAgc2V0RHJvcGRvd25kYXRhVmFsdWU6IGJvb2xlYW4gPSB0cnVlO1xuICBzaG93RmlsdGVyYnRuOiBib29sZWFuID0gZmFsc2U7XG5cbiAgdG9vZ2xlU29ydE9yZGVyOiBib29sZWFuID0gZmFsc2U7XG4gIGRpYWxvZ1JlZjogYW55XG4gIHVzZXJTZXR0aW5nOiB1c2VyU2V0dGluZyA9IHt9O1xuICByb3dVcGRhdGVDaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNTZXJ2ZXJTaWRlRXZlbnRJbml0YWxUcmlnZ2VyZWQgPSBuZXcgU3ViamVjdCgpXG5cbiAgLy9hcHBseSBBZGQvRGVsZXRlL0VkaXQgcHJvcCBmb3IgdGhlIGdyaWQgcGVybWlzc2lvblxuICBhZGRSb3dQZXJtaXNzaW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgZGVsZXRlUm93UGVybWlzc2lvbjogYm9vbGVhbiA9IHRydWU7XG4gIGVkaXRSb3dQZXJtaXNzaW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgZWRpdGluZ0NlbGw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIC8vIEFwcGx5IHByb3Agc2V0QWdncmVnYXRlRm9vdGVyIG9uIEZvb3RlciBvZiB0aGUgVGFibGUgZm9yIGFnZ3JlZ2F0ZS5cbiAgc2V0QWdncmVnYXRlRm9vdGVyOiBzdHJpbmcgPSAnJztcblxuICBwcml2YXRlIGNsaWNrVGltZW91dDogYm9vbGVhbiA9IGZhbHNlO1xuICAvLyBCb29sZWFuIHByb3AgdG8gYWxsb3cgSGlkZSBBZ2dyZWdhdGUgRm9vdGVyIFdoZW4gQWdncmVnYXRlIG5vdCBBcHBseSBvbiBUYWJsZS5cbiAgYWdncmVnYXRlRm9vdGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gTWFpbnRhaW5zIHByZXZpb3VzIHN0YXRlIG9mIHJvd3MgYmVpbmcgZWRpdGVkXG4gIGVkaXRSb3dzUmVjb3JkczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAvLyBNYWludGFpbnMgcmVjb3JkIG9mIHJvd3MgYmVpbmcgZWRpdGVkXG4gIGVkaXRpbmdSb3dLZXlzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gIGN1cnJlbnRVcmw6IHN0cmluZyA9IGN1cnJlbnRVcmwoKTtcbiAgb25DbGlja0V2ZW50VHJpZ2dlcmVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcmVtYWluaW5nUm93c0RhdGE6IGFueVtdID0gW107XG5cbiAgQFZpZXdDaGlsZCgnZHQnKSB0YWJsZTogVGFibGU7XG4gIEBWaWV3Q2hpbGQoJ21vcmVNZW51JykgbW9yZU1lbnU6IE1lbnU7XG5cbiAgLy8gU2VsZWN0cyBpdGVtcyBpbiB0aGUgZ3JpZCBiYXNlZCBvbiBwYXNzZWQgb24gZGF0YVxuICBASW5wdXQoKSBzZWxlY3RlZFJvd3M6IGFueSA9IFtdO1xuXG4gIEBJbnB1dCgpIHNldEdyaWRSZWZyZXNoVGltZTogbnVtYmVyID0gMDtcblxuICBASW5wdXQoKSBhZGREYXRhS2V5VmFsdWUgPSBmYWxzZTtcblxuICBASW5wdXQoKSBzdG9wRGlhbG9nQ2xvc2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgYXV0b0NoZWNrTmV3Um93OiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBnbG9iYWxEYXRhOiBJR3JpZEZpbHRlcltdID0gW107XG5cbiAgc29ydERpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgc29ydEljb25IaWRkZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgZWRpdEFsbHJvd3NBdE9uZVRpbWU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBzaG93UmVmcmVzaEJ0bjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBoaWRlUmVmcmVzaEJ0bjogYm9vbGVhbiA9IHRydWU7XG5cbiAgLy8gU3RvcmVzIHNlbGVjdGVkIGNvbHVtbnNcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRDb2x1bW5zOiBJR3JpZENvbHVtbltdID0gW107XG4gIHNlbGVjdGVkVG9nZ2xlQ29sdW1uczogSUdyaWRDb2x1bW5bXSA9IFtdO1xuXG4gIHZpc2libGVDb2x1bW5zOiBJR3JpZENvbHVtbltdID0gW107XG4gIC8vIEJvb2xlYW4gcHJvcCB0byBhbGxvdyBob3Jpem9udGFsIFNjcm9sbCBvbiBUYWJsZS5cbiAgQElucHV0KCkgaG9yaXpvbnRhbFNjcm9sbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBoaWRlIHRoZSBkZWxldGUgcm93IGJ1dHRvbi5cbiAgQElucHV0KCkgaGlkZURlbGV0ZUJ0biA9IGZhbHNlO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBoaWRlIHRoZSBlZGl0IHJvdyBidXR0b24uXG4gIEBJbnB1dCgpIGhpZGVFZGl0QnRuID0gZmFsc2U7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGhpZGUgdGhlIGFkZCByb3cgYnV0dG9uLlxuICBASW5wdXQoKSBoaWRlQWRkQnRuID0gZmFsc2U7XG5cbiAgLy8gUHJvcCB0byBoYW5kbGUgbG9hZGVyIG9mIGdyaWRcbiAgQElucHV0KCkgcHVibGljIGxvYWRpbmcgPSBmYWxzZTtcblxuICAvL3RoaXMgcHJvcGVydHkgaXMgdXNlZCB0byBoYW5kbGUgc2VydmVyIHNpZGUgZXZlbnQgYnkgZGVmYXVsdCBpdCBpcyB0cnVlIHdoZW4gaXQgZmFsc2Ugc2VydmVyIHNpZGUgZXZlbnQgd2lsbCBub3QgYmUgY2FsbGVkXG4gIEBJbnB1dCgpIGF1dG9Mb2FkRGF0YTogYm9vbGVhbiA9IHRydWU7XG5cblxuICAvL3RhYmxlIHJvdyBzdHlsZXNcbiAgQElucHV0KCkgcm93U3R5bGU6IHN0cmluZztcblxuICAvLyBCb29sZWFuIHByb3AgdG8gY2hlY2sgd2hlcmUgc2VsZWN0ZWQgaXMgYWxsb3dlZCBvciBub3QuXG4gIEBJbnB1dCgpIGFsbG93U2VsZWN0aW9uID0gZmFsc2U7XG5cbiAgLy8gU2V0IGNvbHVtbiB3aWR0aCBvZiBzZWxlY3RlZCByb3cuXG4gIEBJbnB1dCgpIHNlbGVjdGlvbkNvbHVtbldpZHRoOiBzdHJpbmcgPSAnODBweCc7XG5cbiAgLy8gc2V0IHNlbGVjdGlvbiBjaGVja0JveCBoZWFkZXJcbiAgQElucHV0KCkgYWxsb3dTZWxlY3Rpb25IZWFkZXI6IHN0cmluZyA9ICcnO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBoaWRlIHRoZSBzYXZlIGJ1dHRvbiBvbiB0b3Agb2YgZ3JpZC5cbiAgQElucHV0KCkgaGlkZUdyaWRTYXZlQnV0dG9uID0gZmFsc2U7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGhpZGUgdGhlIHNhdmUgYnV0dG9uIG9uIHRvcCBvZiBncmlkLlxuICBASW5wdXQoKSBoaWRlR3JpZENhbmNlbEJ1dHRvbiA9IGZhbHNlO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBhbGxvdyBleHBvcnQgdG8gcGRmLlxuICBASW5wdXQoKSBhbGxvd0V4cG9ydFRvUGRmID0gZmFsc2U7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGFsbG93IGV4cG9ydCB0byBleGNlbC5cbiAgQElucHV0KCkgYWxsb3dFeHBvcnRUb0V4Y2VsID0gZmFsc2U7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIHNldCB0aGUgYWN0aW9uIGNvbHVtbiBhcyBmaXJzdCBjb2x1bW4uXG4gIEBJbnB1dCgpIHNldEFjdGlvbkNvbHVtbkFzRmlyc3QgPSBmYWxzZTtcblxuICAvLyBJZiB0cnVlLCBlbmFibGVzIG9wdGlvbnMgdG8gcGVyZm9ybSBDUlVEIHVzaW5nIGlubGluZSByb3cgZnVuY3Rpb25hbGl0eVxuICBASW5wdXQoKSB1c2VJbmxpbmVDUlVEID0gZmFsc2U7XG4gIC8vIGlmIHRydWUsIGl0IHdvbnQgYWRkIGEgbmV3IHJvdyB3aGVuIGNsaWNrIGFkZFxuICBASW5wdXQoKSBwcmV2ZW50TmV3Um93ID0gZmFsc2U7XG5cbiAgLy8gQXJyYXkgb2Ygcm93IGFjdGlvbnNcbiAgQElucHV0KCkgcm93QWN0aW9uczogSUdyaWRSb3dBY3Rpb25bXSA9IFtdO1xuXG4gIC8vIFNldHMgc2VsZWN0aW9uIHR5cGUgaS5lOiBzaW5nbGUvbXVsdGlwbGUgc2VsZWN0aW9uXG4gIEBJbnB1dCgpIHNlbGVjdGlvblR5cGU6IEVHcmlkU2VsZWN0aW9uVHlwZSA9IEVHcmlkU2VsZWN0aW9uVHlwZS5TSU5HTEU7XG5cbiAgLy8gVW5pcXVlIGtleSByZXF1aXJlcyBmb3IgYnVpbHQtaW4gcm93IHNlbGVjdGlvbiBvZiBwcmltZU5nIGdyaWRcbiAgQElucHV0KCkgZGF0YUtleTogc3RyaW5nID0gJ3RlbXBfaWQnO1xuXG4gIC8vIEZsYWcgZm9yIGNsZWFyIGZpbHRlciB2YWx1ZXMgYnV0dG9uXG4gIEBJbnB1dCgpIGNsZWFyR3JpZEZpbHRlciA9IHRydWU7XG5cbiAgLy8gRmxhZyBmb3Igc2VhcmNoIGZpbHRlciB2YWx1ZXMgYnV0dG9uXG4gIEBJbnB1dCgpIHNlYXJjaEdyaWRGaWx0ZXIgPSB0cnVlO1xuXG4gIC8vIEZsYWcgaW4gY2FzZSB0YWJsZSBpcyBzY3JvbGxhYmxlXG4gIEBJbnB1dCgpIHNjcm9sbGFibGUgPSB0cnVlO1xuXG4gIC8vIFNldHMgc2Nyb2xsIGhlaWdodCBmb3IgdGhlIHRhYmxlXG4gIEBJbnB1dCgpIHNjcm9sbEhlaWdodCA9ICc4MHZoJztcblxuICAvLyBUYWJsZSBzdHlsZVxuICBASW5wdXQoKSB0YWJsZVN0eWxlID0gJyc7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGFsbG93IHRvIHdyYXAgb3IgdW5XcmFwIHRoZSBncmlkLlxuICBASW5wdXQoKSB3b3JkV3JhcDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGVsbGlwc2lzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgbmV3R3JpZFJvdzogYW55ID0ge307XG5cbiAgQElucHV0KCkgZmlsdGVyaW5nID0gdHJ1ZTtcblxuICBASW5wdXQoKSByZXBvcnRCdXR0b25zOiBhbnlbXSA9IFtdO1xuXG4gIEBJbnB1dCgpIHJvd0hvdmVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgaGlkZUZpbHRlck9wdGlvbnM6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpIGF1dG9Db21wbGV0ZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgLy8gU2V0cyBwYWdlbmF0aW9uIGZvciB0aGUgdGFibGUgRGF0YS5cbiAgQElucHV0KCkgc2V0UGFnaW5hdGlvbkxlbmd0aDogYW55W10gPSBbNSwgMTAsIDE1LCB7IHNob3dBbGw6ICdBbGwnIH1dO1xuXG4gIC8vIHNldCB0aGUgY2hhbmdlIGluIHRoZSByb3dEYXRhXG4gIEBPdXRwdXQoKSByb3dzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLyoqXG4gICAqIFN0b3BzIHRoZSBsb2FkZXIgYW5kIHNldHMgdGhlIGRhdGEgdG8gZ3JpZFxuICAgKiBDbGVhcnMgdGhlIGVkaXRpbmcgc3RhY2tcbiAgICogU2Nyb2xscyB0byBzZWxlY3RlZCBlbGVtZW50IGlmIHNlbGVjdGlvbiBmb3VuZFxuICAgKi9cbiAgQElucHV0KCkgc2V0IHJvd3MoZGF0YTogYW55W10pIHtcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnJlbWFpbmluZ1Jvd3NEYXRhID0gW107XG4gICAgaWYgKCF0aGlzLnJvd1VwZGF0ZUNoYW5nZSkge1xuICAgICAgaWYgKCF0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCkge1xuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpZiAoIXRoaXMuZGF0YUtleSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhS2V5ID0gJ3RlbXBfaWQnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByb3dzRGF0YSA9IHRoaXMuZ3JpZFNlcnZpY2Uuc2V0RGF0YUZpZWxkcyhkYXRhLCB0aGlzLmRhdGFLZXkpO1xuICAgICAgICAgIHRoaXMub3JpZ2luYWxSb3dzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyb3dzRGF0YSkpO1xuICAgICAgICAgIGlmIChkYXRhPy5sZW5ndGggPiA0MCAmJiAhdGhpcy5ncmlkU2VydmljZT8ucm93VXBkYXRlKSB7XG4gICAgICAgICAgICBjb25zdCBpbml0aWFsaXplRGF0YSA9IFsuLi5yb3dzRGF0YV07XG4gICAgICAgICAgICB0aGlzLnJvd3NEYXRhID0gaW5pdGlhbGl6ZURhdGEuc3BsaWNlKDAsIDQwKTtcbiAgICAgICAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAgICAgICAgIC5waXBlKHRha2UoMSkpIC8vIEVtaXQgb25seSBvbmNlIHdoZW4gdGhlIHpvbmUgYmVjb21lcyBzdGFibGVcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1haW5pbmdSb3dzRGF0YSA9IHJvd3NEYXRhLnNwbGljZSg0MCwgcm93c0RhdGEubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb2x1bW5zICYmIHRoaXMuY29sdW1ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5zPy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbj8uYWdncmVnYXRlPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBZ2dyZWdhdGVUZXh0KGNvbHVtbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yb3dzRGF0YSA9IHJvd3NEYXRhO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmVkaXRSb3dzUmVjb3JkcyA9IHt9O1xuXG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dzICYmIHRoaXMuZ3JpZFJvdz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50UmVmID0gdGhpcy5ncmlkUm93LmZpbmQoXG4gICAgICAgICAgICAgICh4KSA9PiB4Lm5hdGl2ZUVsZW1lbnQuaWQgPT09IHRoaXMuc2VsZWN0ZWRSb3dzW3RoaXMuZGF0YUtleV1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBzZWxlY3RlZEVsZW1lbnRSZWYgJiZcbiAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxUYWJsZVJvd0VsZW1lbnRcbiAgICAgICAgICAgICAgKS5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvL21hbmlwdWxhdGUgY2hlY2tib3ggc3RyaW5nIHZhbHVlIHRvIHRydWUgYW5kIGZhbHNlLlxuICAgICAgICAgIHRoaXMuY2hhbmdlQ2hlY2tib3hTdHJpbmdWYWx1ZSgpO1xuICAgICAgICAgIHRoaXMuc2V0TnVtZXJpY1ZhbHVlcygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucm93c0RhdGEgPSBbXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEdsb2JhbCBmaWx0ZXIgc2VydmVyIHJlcXVlc3RcbiAgQElucHV0KCkgc2V0IGdsb2JhbEZpbHRlckRhdGEoZ2xvYmFsRmlsdGVyczogSUdsb2JhbEZpbHRlcltdKSB7XG4gICAgdGhpcy5nbG9iYWxEYXRhID0gdGhpcy5ncmlkU2VydmljZVxuICAgICAgLnByZXBhcmVHbG9iYWxGaWx0ZXJzKGdsb2JhbEZpbHRlcnMpXG4gICAgICA/LmZpbHRlcigoeCkgPT4geD8udmFsdWUgIT09IGZhbHNlKTtcblxuICAgIGlmICh0aGlzLmVuYWJsZUNsaWVudFNpZGVGaWx0ZXJpbmcpIHtcbiAgICAgIGNvbnN0IGdsb2JhbFNlYXJjaFZhbHVlID0gZ2xvYmFsRmlsdGVycz8uZmluZCh4ID0+IHguZmllbGQgPT09ICdnbG9iYWxTZWFyY2gnKT8udmFsdWU7XG4gICAgICBpZiAoZ2xvYmFsU2VhcmNoVmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnRhYmxlKSB7XG4gICAgICAgIHRoaXMudGFibGUuZmlsdGVyR2xvYmFsKGdsb2JhbFNlYXJjaFZhbHVlLCAnY29udGFpbnMnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzZXJ2ZXJGaWx0ZXJWYWx1ZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuc2VydmVyRmlsdGVycykpO1xuICAgIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzID0gdGhpcy5zZXJ2ZXJGaWx0ZXJzLmZpbHRlcnNcbiAgICAgID8gdGhpcy5zZXJ2ZXJGaWx0ZXJzLmZpbHRlcnMuY29uY2F0KHRoaXMuZ2xvYmFsRGF0YSlcbiAgICAgIDogdGhpcy5nbG9iYWxEYXRhO1xuXG4gICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhcHBseUZpbHRlcicpID09PSAnZmFsc2UnKSB7XG4gICAgICB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheSA9IHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5Py5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkuY29uY2F0KFsuLi5zZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVyc10pXG4gICAgICAgIDogdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXk7XG4gICAgfVxuICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXBwbHlGaWx0ZXInKSA9PT0gJ3RydWUnKSB7XG4gICAgICBnbG9iYWxGaWx0ZXJzLmZvckVhY2goKGdsb2JhbEZpbHRlcikgPT4ge1xuICAgICAgICB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheS5mb3JFYWNoKChmaWx0ZXJBcnJheSkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGZpbHRlckFycmF5LmZpZWxkID09PSBnbG9iYWxGaWx0ZXIuZmllbGQgJiZcbiAgICAgICAgICAgIGdsb2JhbEZpbHRlci52YWx1ZSAmJlxuICAgICAgICAgICAgZmlsdGVyQXJyYXkudmFsdWUgIT09IGdsb2JhbEZpbHRlci52YWx1ZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZmlsdGVyQXJyYXkudmFsdWUgPSBnbG9iYWxGaWx0ZXIudmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5LmZpbmRJbmRleChcbiAgICAgICAgICAgIChpbmRleCkgPT4gaW5kZXguZmllbGQgPT09IGdsb2JhbEZpbHRlci5maWVsZCAmJiAhZ2xvYmFsRmlsdGVyLnZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoZmluZEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkuc3BsaWNlKGZpbmRJbmRleCwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlLy90aGlzLmF1dG9Mb2FkRGF0YTtcbiAgICAgIGlmICh0aGlzLmdyaWRTZXJ2aWNlLmFwcGx5RmlsdGVyRXZlbnQgfHwgdGhpcy5hdXRvTG9hZERhdGEpIHtcbiAgICAgICAgdGhpcy5vbkFwcGx5RmlsdGVyLmVtaXQoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmdsb2JhbEZpbHRlcnNBcnJheSAmJiB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzID0gc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMuY29uY2F0KFxuICAgICAgICAgIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycyA9IEFycmF5LmZyb20oXG4gICAgICAgIG5ldyBTZXQoXG4gICAgICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnNcbiAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAgIC5tYXAoKGZpbHRlcjogYW55KSA9PiBmaWx0ZXIuZmllbGQpXG4gICAgICAgIClcbiAgICAgICkubWFwKChmaWVsZCkgPT4ge1xuICAgICAgICByZXR1cm4gc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMuZmluZCgoeDogYW55KSA9PiB4LmZpZWxkID09PSBmaWVsZCk7XG4gICAgICB9KTtcbiAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzID0gc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMuZmlsdGVyKFxuICAgICAgICAob2JqOiBhbnkpID0+XG4gICAgICAgICAgb2JqPy52YWx1ZSAmJiBvYmoudmFsdWU/LnRvU3RyaW5nKCk/Lmxlbmd0aCA+IDAgJiYgb2JqLmZpZWxkXG4gICAgICApO1xuICAgICAgdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmxdID0gc2VydmVyRmlsdGVyVmFsdWVzO1xuICAgICAgaWYgKHRoaXMuZ3JpZFNlcnZpY2UuYXBwbHlGaWx0ZXJFdmVudCB8fCB0aGlzLmF1dG9Mb2FkRGF0YSA9PT0gdHJ1ZSkge1xuICAgICAgICAvLyBzZXR0aW5nIHBhZ2luYXRpb24gcGFnZSBhcyBmaXJzdFxuICAgICAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMucGFnZSA9IDE7XG4gICAgICAgIHRoaXMuYXV0b0xvYWREYXRhID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdFJvd3MgJiYgdGhpcy5wYWdpbmF0aW9uKSB7XG4gICAgICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLnBhZ2VTaXplID0gdGhpcy5kZWZhdWx0Um93cztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ncmlkU2VydmljZS5hcHBseUZpbHRlckV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5zZXR1cEVudGVyTGlzdGVuZXIoKVxuICAgICAgICAgIHRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5vblNlcnZlclNpZGVFdmVudENoYW5nZS5lbWl0KHNlcnZlckZpbHRlclZhbHVlcyk7XG4gICAgICAgICAgdGhpcy5lZGl0aW5nUm93S2V5cyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdhcHBseUZpbHRlcicpO1xuICAgICAgICAvLyBzZXR0aW5nIHBhZ2luYXRpb24gcGFnZSBudW1iZXIgVUlcbiAgICAgICAgdGhpcy50YWJsZS5fZmlyc3QgPSAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBzZXR1cEVudGVyTGlzdGVuZXIoKSB7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLmhhbmRsZUtleVVwKTtcbiAgfVxuICBoYW5kbGVLZXlVcCA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgIGNvbnN0IGZvY3VzZWRFbGVtZW50ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgIGlmIChmb2N1c2VkRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgJiYgZm9jdXNlZEVsZW1lbnQudHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2VsZWN0Um9vdEVsZW1lbnQoZm9jdXNlZEVsZW1lbnQpLmJsdXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLy8gSW5wdXQgZGVjb3JhdG9yIHRvIHJlY2VpdmUgY29sdW1ucyB0byBiZSBkaXNwbGF5ZWQgaW4gaGVhZGVyXG4gIEBJbnB1dCgpIGNvbHVtbnM6IElHcmlkQ29sdW1uW10gPSBbXTtcblxuICBASW5wdXQoKSBwZXJtaXNzaW9uczogSVBlcm1pc3Npb25bXSA9IFtdO1xuXG4gIC8vIE9wdGlvbmFsIHByb3AgdG8gaGFuZGxlIHRvZ2dsaW5nIG9mIGNvbHVtbnNcbiAgQElucHV0KCkgYWxsb3dDb2x1bW5Ub2dnbGUgPSBmYWxzZTtcblxuICAvLyBPcHRpb25hbCBwcm9wIHRvIGhpZGUgZmlsdGVyaW5nIG9mIGNvbHVtbnNcbiAgQElucHV0KCkgaGlkZUZpbHRlciA9IGZhbHNlO1xuXG4gIC8vIE9wdGlvbmFsIHByb3AgdG8gaGFuZGxlIGxvb2t1cCBmaWx0ZXJzXG4gIEBJbnB1dCgpIGxvb2t1cEZpbHRlcnMgPSBmYWxzZTtcblxuICAvLyBPcHRpb25hbCBwcm9wIHRvIGhhbmRsZSBwYWdpbmF0aW9uXG4gIEBJbnB1dCgpIHBhZ2luYXRpb24gPSBmYWxzZTtcblxuICAvLyBPcHRpb25hbCBwcm9wIHRvIGhhbmRsZSBzaG93IEN1cnJlbnRQYWdlIFJlcG9ydFxuICBASW5wdXQoKSBzaG93Q3VycmVudFBhZ2VSZXBvcnQgPSBmYWxzZTtcblxuICAvLyBEaXNwbGF5cyB0b3RhbCBudW1iZXIgb2YgcmVjb3Jkc1xuICBASW5wdXQoKSB0b3RhbFJlY29yZHMgPSAwO1xuXG4gIC8vIERpc3BsYXlzIGFnZ3JlZ2F0ZSB0aGF0IGZldGNoIGZyb20gcmVjb3Jkc1xuICBASW5wdXQoKSBhZ2dyZWdhdGVkUmVzdWx0OiBhbnlbXSA9IFtdO1xuXG4gIEBJbnB1dCgpIHNob3djb25maXJtRGlhbG9nOiBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoKSBzYXZlQWxsRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIFNldHMgbnVtYmVyIG9mIHJvd3MgdG8gYmUgc2hvd24gdGhlIGdyaWRcbiAgQElucHV0KCkgZGVmYXVsdFJvd3M6IG51bWJlciA9IDA7XG5cbiAgQElucHV0KCkgY29sdW1uQWN0aW9uczogSUdyaWRDb2x1bW5BY3Rpb25bXSA9IFtdO1xuXG4gIC8vIERlY2lkZXMgdGhlIGdyaWQncyBiZWhhdmlvciBlaXRoZXIgZm9yIGNsaWVudCBzaWRlIG9yIHNlcnZlciBzaWRlIGV2ZW50c1xuICBASW5wdXQoKSB1c2VTZXJ2ZXJTaWRlRXZlbnRzID0gZmFsc2U7XG4gIEBJbnB1dCgpIGVuYWJsZUNsaWVudFNpZGVGaWx0ZXJpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZ2xvYmFsRmlsdGVyRmllbGRzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgQElucHV0KCkgc2V0IGdsb2JhbEZpbHRlckZpZWxkcyhmaWVsZHM6IHN0cmluZ1tdKSB7XG4gICAgaWYgKGZpZWxkcyAmJiBmaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5fZ2xvYmFsRmlsdGVyRmllbGRzID0gZmllbGRzLm1hcChmID0+IGYudG9Mb3dlckNhc2UoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2dsb2JhbEZpbHRlckZpZWxkcyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgZ2V0IGdsb2JhbEZpbHRlckZpZWxkcygpOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2dsb2JhbEZpbHRlckZpZWxkcztcbiAgfVxuXG4gIC8vIE91dHB1dCBldmVudCB0byBoYW5kbGUgcm93IGNsaWNrXG4gIEBPdXRwdXQoKSBvblJvd0NsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBPdXRwdXQgZXZlbnQgZW1pdCB3aGVuIGNsaWNrIG9uIGdyaWQgY2hlY2tib3ggZmlsdGVyXG4gIEBPdXRwdXQoKSBvbkNoZWNrQm94RmlsdGVyQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIE91dHB1dCBldmVudCB0byBoYW5kbGUgcm93IENoZWNrQm94XG4gIEBPdXRwdXQoKSBvblJvd0NoZWNrQm94OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBPdXRwdXQgZXZlbnQgdG8gdHJpZ2dlciBvbiBzb3J0IGNoYW5nZVxuICBAT3V0cHV0KCkgb25Tb3J0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8SUdyaWRTb3J0PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBPdXRwdXQgZXZlbnQgdG8gdHJpZ2dlciBvbiBmaWx0ZXIgY2hhbmdlXG4gIEBPdXRwdXQoKSBvbkZpbHRlckNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gT3V0cHV0IGV2ZW50IHRvIGludm9rZSB0aGUgbXVsdGlTZWxlY3Rpb24gY2xpY2sgZXZlbnRcbiAgQE91dHB1dCgpIG9uTXVsdGlTZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIENhbGxzIHdoZW5ldmVyIGEgZ3JpZCBhbmQgZ2xvYmFsRmlsdGVycyBjYWxsZWRcbiAgQE91dHB1dCgpIG9uQXBwbHlGaWx0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vc2V0IGhlYWRlciBjaGVja2JveCB2YWx1ZSBmb3IgZ2V0dGluZyBhbGwgY29sdW1ucyBvbiBzdGF5IGFkbWluXG4gIEBPdXRwdXQoKSBpc0luY2x1ZGVkQWxsQ29sdW1uczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gQ2FsbHMgd2hlbmV2ZXIgYSBsYXp5IGV2ZW50IGlzIGRpc3BhdGNoZWRcbiAgQE91dHB1dCgpXG4gIG9uU2VydmVyU2lkZUV2ZW50Q2hhbmdlOiBFdmVudEVtaXR0ZXI8SUdyaWRTZXJ2ZXJTaWRlRXZlbnQ+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gT3V0cHV0IGV2ZW50IHRvIHRyaWdnZXIgb24gcGFnaW5hdGlvblxuICBAT3V0cHV0KClcbiAgb25QYWdlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8SUdyaWRQYWdpbmF0aW9uRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIERpc3BhdGNoIG91dHB1dCBldmVudCB0cmlnZ2VyIG9uIGVkaXQgcm93XG4gIEBPdXRwdXQoKSBvblJvd1VwZGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KCkgb25Sb3dPcmRlckNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gRGlzcGF0Y2ggb3V0cHV0IGV2ZW50IHRyaWdnZXIgY2FuY2VsIGFsbCByb3dzXG4gIEBPdXRwdXQoKSBvbkNhbmNlbEFsbFJvd3MgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gRGlzcGF0Y2ggb3V0cHV0IGV2ZW50IHRyaWdnZXIgb24gZGVsZXRlIHJvd1xuICBAT3V0cHV0KCkgb25Sb3dEZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy9EaXNwYXRjaCBvdXRwdXQgZXZlbnQgdHJpZ2dlciBvbiBhZGQgcm93XG4gIEBPdXRwdXQoKSBvblJvd0FkZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvL0Rpc3BhdGNoIG91dHB1dCBldmVudCB0cmlnZ2VyIG9uIGFkZCwgdXBkYXRlIGFuZCBkZWxldGUgcm93XG4gIEBPdXRwdXQoKSBvbkdyaWRSb3dBY3Rpb25zID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIHNldCBwcm9wZXJ0eSBhbGxvd0NhY2hpbmcgZm9yIExvY2FsU3RvcmFnZVxuICBASW5wdXQoKSBhbGxvd0NhY2hpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvL3NldCBNdWx0aXNlbGVjdCBUb2dnbGUgQ29sdW1uc1xuICBASW5wdXQoKSBhbGxvd1BlcnNpc3RlbmNlOiBib29sZWFuID0gdHJ1ZTtcblxuICAvLyBzZXQgcHJvcGVydHkgc29mdENhY2hpbmcgZm9yIHNldHRpbmcgdGhlIHZhbHVlcyBvZiBncmlkRmlsdGVyXG4gIEBJbnB1dCgpIHNvZnRDYWNoaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgZWRpdEFsbFJvd3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8gc2V0IHRoZSByb3cgV2hlbiBFZGl0IHRoZSByb3cgb24gR3JpZFxuICBAT3V0cHV0KCkgb25HcmlkUm93RWRpdCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBzZXQgdGhlIHJvdyBXaGVuIGFkZGluZyB0aGUgbmV3IFJvdyBvbiBHcmlkXG4gIEBPdXRwdXQoKSBvbkdyaWRSb3dBZGQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQElucHV0KCkgZ3JpZE5hbWU6IHN0cmluZyA9ICcnO1xuICBpc0dyaWRIaWRkZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgYXV0b1Jlc2l6ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBhbGxvd1RleHRDb3B5OiBib29sZWFuID0gZmFsc2U7XG5cblxuICByb3dzUGVyUGFnZU9wdGlvbnM6IGFueVtdID0gWzUsIDEwLCAxNSwgeyBzaG93QWxsOiAnQWxsJyB9XTtcbiAgY3VzdG9tV2lkdGhDb2x1bW5zOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge307XG4gIHNlbGVjdGVkUm93UmVjb3JkOiBhbnk7XG4gIHNjcm9sbFBvc2l0aW9uWTogbnVtYmVyID0gMDtcbiAgc2Nyb2xsUG9zaXRpb25YOiBudW1iZXIgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IFN5c3RlbUNvbmZpZ1NlcnZpY2UsXG4gICAgcHVibGljIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3JtU2VydmljZTogRm9ybVNlcnZpY2UsXG4gICAgcHVibGljIGdyaWRTZXJ2aWNlOiBHcmlkU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhlbnRpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHVibGljIGRlY2ltYWxQaXBlOiBEZWNpbWFsUGlwZSxcbiAgICBwcml2YXRlIHBhZ2VMb2dnZXJTZXJ2aWNlOiBQYWdlTG9nZ2VyU2VydmljZSxcbiAgICBwcml2YXRlIGh5cGVybGlua1NlcnZpY2U6IEh5cGVybGlua1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSxcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgIHB1YmxpYyBjb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgcmVxdWVzdFNlcnZpY2U6IFJlcXVlc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwUmVmOiBBcHBsaWNhdGlvblJlZixcbiAgICBAT3B0aW9uYWwoKSBwdWJsaWMgY29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnLFxuICAgIEBPcHRpb25hbCgpIHB1YmxpYyByZWY6IER5bmFtaWNEaWFsb2dSZWZcbiAgKSB7IH1cblxuICBjb25zb2xlTG9nKG1lc3NhZ2U6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKG1lc3NhZ2UpO1xuICB9XG5cbiAgIG1vdXNlTGVhdmVFdmVudChvdmVybGF5UGFuZWwpIHtcbiAgICBvdmVybGF5UGFuZWwuaGlkZSgpO1xuICB9XG4gIG9uQ29sdW1uUmVzaXplKGV2ZW50OiBhbnksIGR0KSB7XG4gICAgaWYgKGR0Py5lbD8ubmF0aXZlRWxlbWVudD8uaWQpIHtcbiAgICAgIHRoaXMuZ3JpZElkID0gZHQuZWwubmF0aXZlRWxlbWVudC5pZDtcbiAgICB9XG4gICAgY29uc3QgbmV3V2lkdGggPSBldmVudC5lbGVtZW50LmNsaWVudFdpZHRoICsgMjtcbiAgICBsZXQgY29sdW1uSGVhZGVyID0gZXZlbnQ/LmVsZW1lbnQ/LmlkPy50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChjb2x1bW5IZWFkZXIpIHtcbiAgICAgIGxldCBpbmRleDogYW55ID0gdGhpcy5zZWxlY3RlZENvbHVtbnMuZmluZEluZGV4KChjb2x1bW4pID0+IGNvbHVtbi5oZWFkZXI/LnRvTG93ZXJDYXNlKCkgPT0gY29sdW1uSGVhZGVyKTtcbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIGlmIChuZXdXaWR0aCkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zW2luZGV4XVsnY3VzdG9tV2lkdGgnXSA9IHBhcnNlSW50KG5ld1dpZHRoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNhdmVDb2x1bW5XaWR0aHMoKTtcbiAgfVxuICBzYXZlQ29sdW1uV2lkdGhzKHRvZ2dsZUNvbHVtbnM6IGFueVtdID0gW10pIHtcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgIGlmIChjb2x1bW4uZmllbGQgJiYgY29sdW1uLmN1c3RvbVdpZHRoKSB7XG4gICAgICAgIHRoaXMuY3VzdG9tV2lkdGhDb2x1bW5zW2NvbHVtbi5maWVsZF0gPSBjb2x1bW4uY3VzdG9tV2lkdGg7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3Qgc2VsZWN0ZWRGaWVsZHMgPSB0b2dnbGVDb2x1bW5zPy5sZW5ndGggPiAwID8gdG9nZ2xlQ29sdW1ucyA6IHRoaXMuX3NlbGVjdGVkQ29sdW1ucy5tYXAoKHgpID0+IHguZmllbGQpO1xuICAgIHRoaXMuc2V0TXVsdGlTZWxlY3RUb2dnbGVDb2x1bW4oc2VsZWN0ZWRGaWVsZHMpO1xuICB9XG4gIGxvYWRDb2x1bW5XaWR0aHMoKSB7XG4gICAgbGV0IGN1cnJlbnRVc2VySW5mbyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0N1cnJlbnRVc2VySW5mbycpKTtcbiAgICBpZiAoY3VycmVudFVzZXJJbmZvICYmIGN1cnJlbnRVc2VySW5mby5wYWdlU2V0dGluZykge1xuICAgICAgbGV0IHBhZ2VTZXR0aW5ncyA9IEpTT04ucGFyc2UoY3VycmVudFVzZXJJbmZvLnBhZ2VTZXR0aW5nKVxuICAgICAgcGFnZVNldHRpbmdzLnBhZ2VTZXR0aW5ncy5tYXAocGFnZSA9PiB7XG4gICAgICAgIGlmIChwYWdlLnVybCA9PT0gdGhpcy5yb3V0ZXIudXJsKSB7XG4gICAgICAgICAgcGFnZS5ncmlkU2V0dGluZ3MubWFwKGdyaWRTZXR0aW5nID0+IHtcbiAgICAgICAgICAgIGlmIChncmlkU2V0dGluZy5ncmlkSWQgPT09IHRoaXMuZ3JpZElkICYmIGdyaWRTZXR0aW5nPy5jdXN0b21Db2x1bW5zV2lkdGgpIHtcbiAgICAgICAgICAgICAgY29uc3QgY29sdW1uc1dpZHRoS2V5cyA9IE9iamVjdC5rZXlzKGdyaWRTZXR0aW5nPy5jdXN0b21Db2x1bW5zV2lkdGgpO1xuICAgICAgICAgICAgICBjb2x1bW5zV2lkdGhLZXlzLmZvckVhY2goKGNvbHVtbktleTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmNvbHVtbnMuZmluZEluZGV4KChzZWxlY3RlZENvbHVtbikgPT4gc2VsZWN0ZWRDb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGNvbHVtbktleT8udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uc1tpbmRleF1bJ2N1c3RvbVdpZHRoJ10gPSBncmlkU2V0dGluZz8uY3VzdG9tQ29sdW1uc1dpZHRoW2NvbHVtbktleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHByb2Nlc3NIb3ZlckRhdGEoaG92ZXJEYXRhOiBhbnksIHJvdzogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB7IC4uLmhvdmVyRGF0YT8uZGF0YSB9O1xuICAgICAgY29uc3QgZGF0YUtleXMgPSBPYmplY3Qua2V5cyhkYXRhKTtcbiAgICAgIGNvbnN0IHJvd0tleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgICAgaWYgKGRhdGFLZXlzPy5sZW5ndGggPiAwICYmIHJvd0tleXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgZGF0YUtleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IGRhdGFba2V5XTtcbiAgICAgICAgICBpZiAodmFsdWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3snKSAmJiB2YWx1ZT8udG9TdHJpbmcoKS5pbmNsdWRlcygnfScpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoXCJ7XCIsIFwiXCIpLnJlcGxhY2UoXCJ9XCIsIFwiXCIpO1xuICAgICAgICAgICAgbGV0IHJvd0tleSA9IHJvd0tleXM/LmZpbmQoKHgpID0+IHg/LnRvTG93ZXJDYXNlKCkgPT09IHZhbHVlPy50b1N0cmluZygpPy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgIHZhciBjb3JyZWN0VmFsdWUgPSByb3dbcm93S2V5XTtcbiAgICAgICAgICAgIGRhdGFba2V5XSA9IGNvcnJlY3RWYWx1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hLZXkgPSByb3dLZXlzPy5maW5kKCh4KSA9PiB4Py50b0xvd2VyQ2FzZSgpID09PSBrZXk/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgaWYgKG1hdGNoS2V5ICYmICFkYXRhW2tleV0pIHtcbiAgICAgICAgICAgICAgZGF0YVtrZXldID0gcm93W21hdGNoS2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGhvdmVyRGF0YT8uc3R5bGUgPyB0aGlzLm92ZXJsYXlQYW5lbFN0eWxlID0gaG92ZXJEYXRhPy5zdHlsZSA6IFwiXCI7XG4gICAgICB0aGlzLnBhbmVsT3ZlcmxheVZpZXdDb250YWluZXIuY2xlYXIoKTtcbiAgICAgIGlmICh0aGlzLnBhbmVsT3ZlcmxheVZpZXdDb250YWluZXIgJiYgaG92ZXJEYXRhPy5jb21wb25lbnQpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50UmVmOiBhbnkgPSB0aGlzLnBhbmVsT3ZlcmxheVZpZXdDb250YWluZXI/LmNyZWF0ZUNvbXBvbmVudChob3ZlckRhdGE/LmNvbXBvbmVudCk7XG4gICAgICAgIGlmIChob3ZlckRhdGEuZGF0YSkge1xuICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5jb25maWcgPSBbXTtcbiAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuY29uZmlnLmRhdGEgPSBkYXRhO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBhZGREeW5hbWljUGFuZWxPdmVybGF5Q29tcG9uZW50KGhvdmVyRGF0YTogYW55LCBvdmVybGF5UGFuZWw6IGFueSwgZXZlbnQ6IGFueSwgcm93OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnByb2Nlc3NIb3ZlckRhdGEoaG92ZXJEYXRhLCByb3cpO1xuICAgIG92ZXJsYXlQYW5lbC5zaG93KGV2ZW50KTtcbiAgfVxuXG4gIGdldCBzZWxlY3RlZENvbHVtbnMoKTogSUdyaWRDb2x1bW5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkQ29sdW1ucztcbiAgfVxuXG4gIHNldCBzZWxlY3RlZENvbHVtbnModmFsOiBJR3JpZENvbHVtbltdKSB7XG4gICAgLy8gUmVzcGVjdCBgc2hvd0luTW9yZWA6IGRvIG5vdCBhbGxvdyBzZWxlY3RpbmcgY29sdW1ucyB0aGF0IGFyZSBpbnRlbmRlZCBmb3IgTW9yZSBtZW51XG4gICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zPy5maWx0ZXIoKGNvbCkgPT5cbiAgICAgICFjb2wuc2hvd0luTW9yZSAmJiB2YWw/LnNvbWUoKHYpID0+IHYuZmllbGQgPT09IGNvbC5maWVsZCAmJiB2LmhlYWRlciA9PT0gY29sLmhlYWRlcilcbiAgICApO1xuXG4gICAgaWYgKHRoaXMuYWxsb3dQZXJzaXN0ZW5jZSAmJiB0aGlzLmFsbG93Q29sdW1uVG9nZ2xlKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZEZpZWxkcyA9IHRoaXMuX3NlbGVjdGVkQ29sdW1ucy5tYXAoKHgpID0+IHguZmllbGQpO1xuICAgICAgdGhpcy5zYXZlQ29sdW1uV2lkdGhzKHNlbGVjdGVkRmllbGRzKTtcbiAgICB9XG4gIH1cbiAgLy8gdGhpcy5fc2VsZWN0ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zPy5maWx0ZXIoKGNvbCkgPT4gdmFsLmluY2x1ZGVzKGNvbCkpO1xuICAvLyBpZiAodGhpcy5hbGxvd1BlcnNpc3RlbmNlICYmIHRoaXMuYWxsb3dDb2x1bW5Ub2dnbGUpIHtcbiAgLy8gICBjb25zdCBzZWxlY3RlZEZpZWxkcyA9IHZhbC5tYXAoKHgpID0+IHguZmllbGQpO1xuICAvLyAgIHRoaXMuc2F2ZUNvbHVtbldpZHRocyhzZWxlY3RlZEZpZWxkcyk7XG4gIC8vIH1cbiAgLy8gdW5hYmxlIHRvIGFsbG93IHVzZXIgdG8gY29weSB0ZXh0IGZyb20gZ3JpZCB3aGVuIHRoaXMuYWxsb3dUZXh0Q29weSBpcyBzZXQgdG8gZmFsc2UuXG4gIEBIb3N0TGlzdGVuZXIoJ2NvcHknLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCdjdXQnLCBbJyRldmVudCddKVxuICBoYW5kbGVDb3B5T3JDdXQoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSB7XG4gICAgY29uc3Qgc2VsZWN0aW9uOiBhbnkgPSB3aW5kb3c/LmdldFNlbGVjdGlvbigpPy50b1N0cmluZygpIHx8ICcnO1xuICAgIGNvbnN0IGlzTXVsdGlDZWxsU2VsZWN0aW9uID0gc2VsZWN0aW9uLnNwbGl0KC9bXFxuXFx0XSsvKT8uZmlsdGVyKCh4KSA9PiB4ICE9PSAnJyk7XG5cbiAgICBpZiAoIXRoaXMuYWxsb3dUZXh0Q29weSAmJiBpc011bHRpQ2VsbFNlbGVjdGlvbj8ubGVuZ3RoID4gMSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQudGFyZ2V0J10pIG9uQ2xpY2soZXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuZWRpdEFsbFJvd3MgJiYgIXRoaXMuaW5FZGl0TW9kZSAmJiB0aGlzLnNlbGVjdGVkUm93UmVjb3JkKSB7XG4gICAgICB0aGlzLmhhbmRsZVJvd0NsaWNrKHRoaXMuc2VsZWN0ZWRSb3dSZWNvcmQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGJyb3dzZXIgY2xvc2UgZXZlbnRcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmJlZm9yZXVubG9hZCcsIFsnJGV2ZW50J10pXG4gIGJlZm9yZXVubG9hZEhhbmRsZXIoZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFzc2lnbm1lbnQgb2Ygc2VsZWN0ZWQgY29sdW1ucyBvbiBwYWdlIGxvYWRcbiAgICovXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZ3JpZFNlcnZpY2UuaW5jcmVtZW50Q2FsbHMoKTtcbiAgICBpZiAodGhpcy5ncmlkU2VydmljZS5nZXROdW1iZXJPZkNhbGxzKCkgPT09IDEpIHtcbiAgICAgIHRoaXMuc2VhcmNoYnRuSWQgPSAnc2VhcmNoR2xvYmFsRmlsdGVyQnRuJztcbiAgICAgIGlmICh0aGlzLnRhYmxlKVxuICAgICAgICB0aGlzLnRhYmxlLmlkID0gJ0dyaWRDb21wb25lbnRUYWJsZS0nO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlYXJjaGJ0bklkID0gYEZpbHRlcl8ke2N1cnJlbnRVcmwoKX1fJHt0aGlzLmdyaWRTZXJ2aWNlLmdldE51bWJlck9mQ2FsbHMoKX1gO1xuICAgICAgaWYgKHRoaXMudGFibGUpXG4gICAgICAgIHRoaXMudGFibGUuaWQgPSAnR3JpZENvbXBvbmVudF8nICsgdGhpcy5ncmlkU2VydmljZS5nZXROdW1iZXJPZkNhbGxzKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNldEdyaWRSZWZyZXNoVGltZSkge1xuICAgICAgdGhpcy5yZWZyZXNoR3JpZCgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9uUm93VXBkYXRlPy5vYnNlcnZlcnM/Lmxlbmd0aCA9PSAwKSB7XG4gICAgICB0aGlzLmhpZGVFZGl0QnRuID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5lZGl0QWxsUm93cyAmJiB0aGlzLm9uUm93RGVsZXRlLm9ic2VydmVycy5sZW5ndGggPT0gMCkge1xuICAgICAgdGhpcy5kaXNhYmxlZFNhdmVCdG4gPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuY29tcG9uZW50VGFibGVSZWYgPSB0aGlzLnRhYmxlO1xuICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5yb3dzQ2hhbmdlLmVtaXQodGhpcy5yb3dzRGF0YSk7XG4gICAgICB9KTtcbiAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgIHRoaXMuc2V0TnVtZXJpY1ZhbHVlcygpO1xuICAgIC8vIH0sIDUwMCk7XG4gICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICBpZiAodGhpcy5yb3dzQ2hhbmdlLm9ic2VydmVycz8ubGVuZ3RoKSB7XG4gICAgLy8gICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICAgIC8vICAgfVxuICAgIC8vIH0sIDIwMDApO1xuICB9XG4gIC8vIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgLy8gICBvbkdsb2JhbEZpbHRlckNvbnRyb2xSaWdodEJ0blN0YXRlQ2hhbmdlKCkuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAvLyAgICAgdGhpcy5jaGVja2xpc3QgPSByZXNwb25zZTtcbiAgLy8gICB9KVxuICAvLyAgIC8vIHRoaXMuYWRkRHluYW1pY1BhbmVsT3ZlcmxheUNvbXBvbmVudCgpXG4gIC8vICAgdGhpcy5jb21wb25lbnRUYWJsZVJlZiA9IHRoaXMudGFibGU7XG4gIC8vICAgY29uc3QgbG9va3VwTW9kYWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubG9va3VwLW1vZGVsJyk7XG4gIC8vICAgaWYgKGxvb2t1cE1vZGFsKSB7XG4gIC8vICAgICBjb25zdCBmb3JtQ29udGFpbmVyID0gbG9va3VwTW9kYWwucXVlcnlTZWxlY3RvcignLmZvcm0tY29udGFpbmVyJyk7IFxuICAvLyAgICAgaWYgKCFmb3JtQ29udGFpbmVyKSB7XG4gIC8vICAgICB0aGlzLnNldEZvY3VzT3V0VG9maWx0ZXJzKGxvb2t1cE1vZGFsKTtcbiAgLy8gICAgIH1cbiAgLy8gICB9XG4gIC8vICAgZWxzZXtcbiAgLy8gICAgIHRoaXMuc2V0Rm9jdXNPdXRUb2ZpbHRlcnMoKTtcbiAgLy8gICB9XG4gIC8vICAgdGhpcy5pc0FwaUVycm9yT2NjdXJlZCgpO1xuICAvLyAgIHRoaXMubmdab25lLm9uU3RhYmxlLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgLy8gICAgIGNvbnN0IGtleSA9IHRoaXMudGFibGU/LmlkICsgdGhpcy5jdXJyZW50VXJsO1xuICAvLyAgICAgY29uc3QgY2FjaGVkID0gdGhpcy5zb2Z0Q2FjaGluZ1xuICAvLyAgICAgICA/IHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW2tleV1cbiAgLy8gICAgICAgOiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdTZXRGaWx0ZXJzLScgKyBrZXkpIHx8ICdudWxsJyk7XG4gIC8vICAgICBpZiAoIWNhY2hlZD8uZmlsdGVycz8ubGVuZ3RoKSByZXR1cm47XG4gIC8vICAgICBpZiAodGhpcy51c2VTZXJ2ZXJTaWRlRXZlbnRzKSB7XG4gIC8vICAgICAgIHRoaXMudGFibGUgJiYgKHRoaXMudGFibGUuX2ZpcnN0ID0gMCk7XG4gIC8vICAgICAgIHRoaXMub25TZXJ2ZXJTaWRlRXZlbnRDaGFuZ2UuZW1pdChjYWNoZWQpO1xuICAvLyAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgY2FjaGVkLmZpbHRlcnMuZm9yRWFjaCgoZjogYW55KSA9PiB0aGlzLnRhYmxlPy5maWx0ZXI/LihmLnZhbHVlLCBmLmZpZWxkLCBmLm1hdGNoTW9kZSB8fCAnc3RhcnRzV2l0aCcpKTtcbiAgLy8gICAgIH1cbiAgLy8gICB9KTtcbiAgLy8gfVxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgb25HbG9iYWxGaWx0ZXJDb250cm9sUmlnaHRCdG5TdGF0ZUNoYW5nZSgpLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgIHRoaXMuY2hlY2tsaXN0ID0gcmVzcG9uc2U7XG4gICAgfSlcbiAgICAvLyB0aGlzLmFkZER5bmFtaWNQYW5lbE92ZXJsYXlDb21wb25lbnQoKVxuICAgIHRoaXMuY29tcG9uZW50VGFibGVSZWYgPSB0aGlzLnRhYmxlO1xuICAgIGNvbnN0IGxvb2t1cE1vZGFsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmxvb2t1cC1tb2RlbCcpO1xuICAgIGlmIChsb29rdXBNb2RhbCkge1xuICAgICAgY29uc3QgZm9ybUNvbnRhaW5lciA9IGxvb2t1cE1vZGFsLnF1ZXJ5U2VsZWN0b3IoJy5mb3JtLWNvbnRhaW5lcicpO1xuICAgICAgaWYgKCFmb3JtQ29udGFpbmVyKSB7XG4gICAgICAgIHRoaXMuc2V0Rm9jdXNPdXRUb2ZpbHRlcnMobG9va3VwTW9kYWwpO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuc2V0Rm9jdXNPdXRUb2ZpbHRlcnMoKTtcbiAgICB9XG4gICAgdGhpcy5pc0FwaUVycm9yT2NjdXJlZCgpO1xuICAgIHRoaXMubmdab25lLm9uU3RhYmxlLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMudGFibGU/LmlkICsgdGhpcy5jdXJyZW50VXJsO1xuICAgICAgaWYgKCF0aGlzLmFsbG93Q2FjaGluZyAmJiAhdGhpcy5zb2Z0Q2FjaGluZykge1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnU2V0RmlsdGVycy0nICsga2V5KTtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW2tleV0pIHtcbiAgICAgICAgICBkZWxldGUgdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYWxsb3dDYWNoaW5nIHx8IHRoaXMuc29mdENhY2hpbmcpIHtcbiAgICAgICAgY29uc3QgY2FjaGVkID0gdGhpcy5zb2Z0Q2FjaGluZ1xuICAgICAgICAgID8gdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNba2V5XVxuICAgICAgICAgIDogSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnU2V0RmlsdGVycy0nICsga2V5KSB8fCAnbnVsbCcpO1xuXG4gICAgICAgIGlmIChjYWNoZWQ/LmZpbHRlcnM/Lmxlbmd0aCkge1xuICAgICAgICAgIGNhY2hlZC5maWx0ZXJzLmZvckVhY2goKGY6IGFueSkgPT4gdGhpcy50YWJsZT8uZmlsdGVyPy4oZi52YWx1ZSwgZi5maWVsZCwgZi5tYXRjaE1vZGUgfHwgJ3N0YXJ0c1dpdGgnKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICBjb25zdCB0ZXh0YXJlYXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCcucHJpbWUtdGV4dGFyZWEnKTtcbiAgICB0ZXh0YXJlYXMuZm9yRWFjaCh0ID0+IHRoaXMuYXV0b0dyb3codCkpO1xuICB9XG5cbiAgaXNBcGlFcnJvck9jY3VyZWQoKSB7XG4gICAgdGhpcy5yZXF1ZXN0U2VydmljZS5pc0Vycm9yT2NjdXJlZCgpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgaWYgKHRoaXMudGVtcFNhdmVkUm93Py5sZW5ndGggPiAwICYmIHRoaXMucm93c0RhdGE/Lmxlbmd0aCA+IDAgJiYgIXRoaXMuZWRpdEFsbFJvd3MpIHtcbiAgICAgICAgdGhpcy5lZGl0aW5nUm93S2V5c1t0aGlzLnJvd3NEYXRhW3RoaXMudGVtcFNhdmVkUm93WzBdXVt0aGlzLmRhdGFLZXldXSA9IHJlcztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBzZXRGb2N1c091dFRvZmlsdGVycyhsb29rdXBNb2RhbD8pIHtcbiAgICBsZXQgZmlsdGVycyA9IDgwMDtcbiAgICBsZXQgZmlsdGVyOiBTdWJzY3JpcHRpb24gPSBpbnRlcnZhbChmaWx0ZXJzKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgZmlsdGVycyA9IDA7XG4gICAgICBmaWx0ZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgIGNvbnN0IGZpbHRlckNvbHVtbiA9IHRoaXMuY29sdW1ucz8uZmluZCgoY29sdW1uKSA9PiAhdGhpcy5oaWRlRmlsdGVyICYmICFjb2x1bW4/LmhpZGRlbiAmJiBjb2x1bW4/LmZpbHRlciAmJiAoY29sdW1uPy5maWx0ZXJpbmcgPT09IHRydWUgfHwgY29sdW1uPy5maWx0ZXJpbmcgPT09IHVuZGVmaW5lZCkpO1xuICAgICAgY29uc3QgZmlsdGVyRmllbGQ6IGFueSA9IGxvb2t1cE1vZGFsPy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGZpbHRlckNvbHVtbj8uZmllbGQ/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgY29uc3QgZmlsdGVyRmllbGRzOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGZpbHRlckNvbHVtbj8uZmllbGQ/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGZpbHRlckZpZWxkIHx8IGZpbHRlckZpZWxkcykge1xuICAgICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgaWYgKGZpbHRlckZpZWxkPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmaWx0ZXJGaWVsZFswXT8uZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZmlsdGVyRmllbGRzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbHRlckZpZWxkcz8ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgZmlsdGVyRmllbGRzW2ldPy5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5yZWZyZXNoR3JpZFRlcm1pbmF0b3IoKTtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnJlc2V0Q2FsbHMoKTtcbiAgfVxuXG4gIC8vIHNldCBNdWx0aXNlbGVjdCBUb2dnbGUgQ29sdW1uIC8vXG4gIHNldE11bHRpU2VsZWN0VG9nZ2xlQ29sdW1uKHNlbGVjdGVkRmllbGRzOiBhbnlbXSA9IFtdKSB7XG4gICAgaWYgKHRoaXMudXNlclNldHRpbmc/LnBhZ2VTZXR0aW5ncz8ubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbWF0Y2hVcmwgPSB0aGlzLnVzZXJTZXR0aW5nPy5wYWdlU2V0dGluZ3M/LmZpbmRJbmRleCgocGFnZSkgPT4gcGFnZT8udXJsID09PSB0aGlzLnJvdXRlci51cmwpXG4gICAgICBpZiAobWF0Y2hVcmwgPiAtMSkge1xuICAgICAgICBjb25zdCBtYXRjaEdyaWQgPSB0aGlzLnVzZXJTZXR0aW5nPy5wYWdlU2V0dGluZ3NbbWF0Y2hVcmxdPy5ncmlkU2V0dGluZ3M/LmZpbmRJbmRleCgoZ3JpZFNldHRpbmcpID0+IGdyaWRTZXR0aW5nPy5ncmlkSWQgPT09IHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKTtcbiAgICAgICAgaWYgKG1hdGNoR3JpZCA+IC0xKSB7XG4gICAgICAgICAgdGhpcy51c2VyU2V0dGluZz8ucGFnZVNldHRpbmdzW21hdGNoVXJsXT8uZ3JpZFNldHRpbmdzLnNwbGljZShtYXRjaEdyaWQsIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnNldGdyaWRTZXR0aW5ncyhzZWxlY3RlZEZpZWxkcywgbWF0Y2hVcmwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVzZXJTZXR0aW5nLnBhZ2VTZXR0aW5ncyA9IFtdO1xuICAgICAgdGhpcy5zZXRncmlkU2V0dGluZ3Moc2VsZWN0ZWRGaWVsZHMpO1xuICAgIH1cbiAgfVxuXG4gIGdldFNlbGVjdGVkQ29sRnJvbUxvY2FsU3Ryb3JhZ2Uoc2VsZWN0ZWRDb2x1bW4pIHtcbiAgICBsZXQgYXJyID0gW107XG4gICAgaWYgKHNlbGVjdGVkQ29sdW1uICYmIHNlbGVjdGVkQ29sdW1uPy5wYWdlU2V0dGluZ3M/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG1hdGNoVXJsID0gc2VsZWN0ZWRDb2x1bW4/LnBhZ2VTZXR0aW5ncz8uZmluZEluZGV4KChwYWdlKSA9PiBwYWdlPy51cmwgPT09IHRoaXMucm91dGVyLnVybClcbiAgICAgIGlmIChtYXRjaFVybCA+IC0xKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoR3JpZCA9IHNlbGVjdGVkQ29sdW1uPy5wYWdlU2V0dGluZ3NbbWF0Y2hVcmxdPy5ncmlkU2V0dGluZ3M/LmZpbmQoKGdyaWRTZXR0aW5nKSA9PiBncmlkU2V0dGluZz8uZ3JpZElkID09PSB0aGlzLmdyaWRJZCk7XG4gICAgICAgIGlmIChtYXRjaEdyaWQgJiYgbWF0Y2hHcmlkLnNlbGVjdGVkQ29sdW1ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIGlmIChtYXRjaEdyaWQuc2VsZWN0ZWRDb2x1bW5zLnNvbWUoKGZpZWxkTmFtZSkgPT4gZmllbGROYW1lPy50b0xvd2VyQ2FzZSgpID09PSBjb2x1bW4/LmZpZWxkPy50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgICAgICBhcnIucHVzaChjb2x1bW4pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYXJyPy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gYXJyO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgc2V0Z3JpZFNldHRpbmdzKHNlbGVjdGVkRmllbGRzOiBhbnksIG1hdGNoVXJsPzogYW55KSB7XG4gICAgaWYgKHNlbGVjdGVkRmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCBncmlkU2V0dGluZ3M6IGFueVtdID0gW107XG4gICAgICBncmlkU2V0dGluZ3MucHVzaCh7XG4gICAgICAgIGdyaWRJZDogdGhpcy5ncmlkSWQsXG4gICAgICAgIHNlbGVjdGVkQ29sdW1uczogc2VsZWN0ZWRGaWVsZHMsXG4gICAgICAgIGN1c3RvbUNvbHVtbnNXaWR0aDogdGhpcy5jdXN0b21XaWR0aENvbHVtbnMsXG4gICAgICB9KVxuICAgICAgY29uc3QgcGFnZVNldHRpbmcgPSB7XG4gICAgICAgIHVybDogdGhpcy5yb3V0ZXIudXJsLFxuICAgICAgICBncmlkU2V0dGluZ3M6IGdyaWRTZXR0aW5ncyxcbiAgICAgICAgbGFzdFVwZGF0ZWQ6IG5ldyBEYXRlKClcbiAgICAgIH1cbiAgICAgIHRoaXMudXNlclNldHRpbmcubGFzdFVwZGF0ZWQgPSBuZXcgRGF0ZSgpO1xuICAgICAgaWYgKG1hdGNoVXJsID4gLTEpIHtcbiAgICAgICAgdGhpcy51c2VyU2V0dGluZy5wYWdlU2V0dGluZ3NbbWF0Y2hVcmxdID0gcGFnZVNldHRpbmc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnVzZXJTZXR0aW5nLnBhZ2VTZXR0aW5ncy5wdXNoKHBhZ2VTZXR0aW5nKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhZ2VJbmZvID0gSlNPTi5zdHJpbmdpZnkodGhpcy51c2VyU2V0dGluZyk7XG4gICAgICBjaGFuZ2VDb2x1bW5zU3RhdGUoeyBwYWdlU2V0dGluZzogcGFnZUluZm8gfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gYXBwbHkgdXNlciByb2xlIHBlcm1pc3Npb25zIG9uIGdyaWQgY29sdW1uc1xuICBhcHBseUNvbHVtbnNQZXJtaXNzaW9ucygpIHtcbiAgICBpZiAodGhpcy5jb2x1bW5zKSB7XG4gICAgICBsZXQgdG90YWxGaWVsZHM6IG51bWJlciA9IDA7XG4gICAgICBsZXQgaGlkZGVuRmllbGRzOiBudW1iZXIgPSAwO1xuXG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBJR3JpZENvbHVtbikgPT4ge1xuICAgICAgICBsZXQgcGVybWlzc2lvbnM6IElQZXJtaXNzaW9uW10gPSBjb2x1bW4ucGVybWlzc2lvbnM7XG4gICAgICAgIGxldCBoYXNWYWxpZEVkaXRQZXJtaXNzaW9uID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHBlcm1pc3Npb25zICYmIHBlcm1pc3Npb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBwZXJtaXNzaW9ucy5mb3JFYWNoKChwZXJtaXNzaW9uKSA9PiB7XG4gICAgICAgICAgICBsZXQgaXNWYWxpZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHBlcm1pc3Npb24ucm9sZXMgJiYgcGVybWlzc2lvbi5yb2xlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHBlcm1pc3Npb24ucm9sZXMuZm9yRWFjaCgocm9sZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZCAmJiB0aGlzLnJvbGVzICYmIHRoaXMucm9sZXMuaW5jbHVkZXMocm9sZSkpIHtcbiAgICAgICAgICAgICAgICAgIGlzVmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5WSUVXICYmXG4gICAgICAgICAgICAgICAgIWhhc1ZhbGlkRWRpdFBlcm1pc3Npb25cbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5oaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5FRElUKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgIGhhc1ZhbGlkRWRpdFBlcm1pc3Npb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgY29sdW1uLmhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgY29sdW1uLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdG90YWxGaWVsZHMrKztcbiAgICAgICAgaWYgKGNvbHVtbi5oaWRkZW4pIHtcbiAgICAgICAgICBoaWRkZW5GaWVsZHMrKztcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuaXNDb2x1bW5IaWRkZW4gPSB0b3RhbEZpZWxkcyA+IDAgJiYgdG90YWxGaWVsZHMgPT09IGhpZGRlbkZpZWxkcztcbiAgICB9XG4gIH1cblxuICAvLyBhcHBseSBnbG9iYWwgcGVybWlzc2lvbnMgb24gZW50aXJlIGdyaWRcbiAgYXBwbHlHcmlkUGVybWlzc2lvbnMoKSB7XG4gICAgaWYgKHRoaXMucGVybWlzc2lvbnMgJiYgdGhpcy5wZXJtaXNzaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgaGFzVmFsaWRFZGl0UGVybWlzc2lvbiA9IGZhbHNlO1xuXG4gICAgICAvLyBjaGVjayBpZiBhbnkgY29sdW1uIGhhcyBhbnkgcGVybWlzc2lvblxuICAgICAgbGV0IGhhc0NvbHVtblBlcm1pc3Npb25zID0gdGhpcy5jb2x1bW5zPy5zb21lKFxuICAgICAgICAoeCkgPT4geD8ucGVybWlzc2lvbnMgJiYgeC5wZXJtaXNzaW9ucy5sZW5ndGggPiAwXG4gICAgICApO1xuXG4gICAgICB0aGlzLnBlcm1pc3Npb25zLmZvckVhY2goKHBlcm1pc3Npb24pID0+IHtcbiAgICAgICAgbGV0IGlzVmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgICAgICBwZXJtaXNzaW9uLnJvbGVzLmZvckVhY2goKHJvbGUpID0+IHtcbiAgICAgICAgICBpZiAoIWlzVmFsaWQgJiYgdGhpcy5yb2xlcyAmJiB0aGlzLnJvbGVzLmluY2x1ZGVzKHJvbGUpKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5DUlVEICYmICFpc1ZhbGlkKSB7XG4gICAgICAgICAgdGhpcy51c2VJbmxpbmVDUlVEID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgcGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuVklFVyAmJlxuICAgICAgICAgICFoYXNWYWxpZEVkaXRQZXJtaXNzaW9uXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMudXNlSW5saW5lQ1JVRCA9IHRydWU7XG4gICAgICAgICAgaWYgKCFpc1ZhbGlkICYmICFoYXNDb2x1bW5QZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgdGhpcy5pc0dyaWRIaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy51c2VJbmxpbmVDUlVEID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLkVESVQgJiYgIWlzVmFsaWQpIHtcbiAgICAgICAgICB0aGlzLmlzR3JpZEhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgIGhhc1ZhbGlkRWRpdFBlcm1pc3Npb24gPSB0cnVlO1xuICAgICAgICAgIHRoaXMuZWRpdFJvd1Blcm1pc3Npb24gPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5ERUxFVEUgJiYgIWlzVmFsaWQpIHtcbiAgICAgICAgICB0aGlzLmRlbGV0ZVJvd1Blcm1pc3Npb24gPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5BRERST1cgJiYgIWlzVmFsaWQpIHtcbiAgICAgICAgICB0aGlzLmFkZFJvd1Blcm1pc3Npb24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9uUm93QWRkLm9ic2VydmVycy5sZW5ndGggPT0gMCkgdGhpcy5hZGRSb3dQZXJtaXNzaW9uID0gZmFsc2U7XG4gICAgaWYgKHRoaXMub25Sb3dEZWxldGUub2JzZXJ2ZXJzLmxlbmd0aCA9PSAwKSB0aGlzLmRlbGV0ZVJvd1Blcm1pc3Npb24gPSBmYWxzZTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZTogU2ltcGxlQ2hhbmdlcykge1xuICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnJlbWFpbmluZ1Jvd3NEYXRhPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5yb3dzRGF0YSA9IFsuLi50aGlzLnJvd3NEYXRhLCAuLi50aGlzLnJlbWFpbmluZ1Jvd3NEYXRhXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgaWYgKCF0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCAmJiAhdGhpcy5ncmlkU2VydmljZS5yb3dVcGRhdGUpIHtcbiAgICAgIHRoaXMuc2V0R3JpZElkKClcbiAgICAgIHRoaXMuY29tcG9uZW50VGFibGVSZWYgPSB0aGlzLnRhYmxlO1xuICAgICAgbGV0IGdldFNlbGVjdGVkQ29sID0gW11cbiAgICAgIGlmICh0aGlzLmFsbG93Q2FjaGluZyAhPT0gZmFsc2UgJiYgdGhpcy5wYWdpbmF0aW9uKSB7XG4gICAgICAgIHRoaXMuYWxsb3dDYWNoaW5nID0gdGhpcy5wYWdpbmF0aW9uO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCkge1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnU2V0RmlsdGVycy0nICsgdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmwpO1xuICAgICAgfVxuICAgICAgLy8gYWRkIGRlZmF1bHRSb3cgaW4gcGFnaW5hdGlvbiBhcnJheVxuICAgICAgaWYgKCF0aGlzLnNldFBhZ2luYXRpb25MZW5ndGguaW5jbHVkZXModGhpcy5kZWZhdWx0Um93cykpIHtcbiAgICAgICAgdGhpcy5zZXRQYWdpbmF0aW9uTGVuZ3RoLnVuc2hpZnQodGhpcy5kZWZhdWx0Um93cyk7XG4gICAgICB9XG4gICAgICBjb25zdCBoYXNDb2x1bW5zOiBib29sZWFuID0gdGhpcy5jb2x1bW5zICYmIHRoaXMuY29sdW1ucy5sZW5ndGggPiAwO1xuICAgICAgaWYgKGhhc0NvbHVtbnMpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5ncmlkU2VydmljZS5zZXRDb2x1bW5GaWVsZHModGhpcy5jb2x1bW5zKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRvZ2dsZUNvbHVtbnMgPSB0aGlzLmNvbHVtbnM/LmZpbHRlcigoeCkgPT4gIXguaGlkZGVuICYmICF4LnNob3dJbk1vcmUpO1xuICAgICAgICBjb25zdCBjdXJyZW50VXNlckluZm8gPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdDdXJyZW50VXNlckluZm8nKSk7XG4gICAgICAgIC8vc2V0IGdldFNlbGVjdGVkQ29sIGNvbHVtbnMgZm9yIHRvZ2dsZUNvdWxtbiBcbiAgICAgICAgaWYgKHRoaXMuYWxsb3dQZXJzaXN0ZW5jZSAmJiB0aGlzLmFsbG93Q29sdW1uVG9nZ2xlKSB7XG4gICAgICAgICAgaWYgKGN1cnJlbnRVc2VySW5mbyAmJiBjdXJyZW50VXNlckluZm8ucGFnZVNldHRpbmcpIHtcbiAgICAgICAgICAgIGdldFNlbGVjdGVkQ29sID0gdGhpcy5nZXRTZWxlY3RlZENvbEZyb21Mb2NhbFN0cm9yYWdlKEpTT04ucGFyc2UoY3VycmVudFVzZXJJbmZvLnBhZ2VTZXR0aW5nKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucm9sZXMgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJSb2xlcygpO1xuXG4gICAgICAgIC8vIGFwcGx5IHVzZXIgcm9sZSBwZXJtaXNzaW9ucyBvbiBncmlkIGNvbHVtbnNcbiAgICAgICAgdGhpcy5hcHBseUNvbHVtbnNQZXJtaXNzaW9ucygpO1xuXG4gICAgICAgIC8vIGFwcGx5IGdsb2JhbCBwZXJtaXNzaW9ucyBvbiBlbnRpcmUgZ3JpZFxuICAgICAgICB0aGlzLmFwcGx5R3JpZFBlcm1pc3Npb25zKCk7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucz8uZmlsdGVyKCh4KSA9PiAoeC5zaG93ID09PSB0cnVlIHx8IHguc2hvdyA9PT0gdW5kZWZpbmVkKSAmJiAheC5oaWRkZW4gJiYgIXguc2hvd0luTW9yZSk7XG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAvL2xvYWQgY29sdW1uIHdpdGR0aCBvbiBwYWdlIHJlbG9hZFxuICAgICAgICB0aGlzLmxvYWRDb2x1bW5XaWR0aHMoKTtcbiAgICAgICAgaWYgKHRoaXMucm93c0RhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuZm9ybVNlcnZpY2Uuc2V0VG9vbHRpcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2hlY2tpbmcgZmlsdGVyIGV4aXN0IG9yIG5vdFxuICAgICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLl9zZWxlY3RlZENvbHVtbnMuc29tZShcbiAgICAgICAgICAoY29sdW1uKSA9PiBjb2x1bW4uZmlsdGVyaW5nID09PSB1bmRlZmluZWQgfHwgY29sdW1uLmZpbHRlcmluZyA9PT0gdHJ1ZVxuICAgICAgICApO1xuICAgICAgICBpZiAoZmlsdGVyID09PSBmYWxzZSkge1xuICAgICAgICAgIHRoaXMuaGlkZUZpbHRlciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGZpbHRlckZvY3VzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xuICAgICAgICAgIC8vIHNldCBpc1JlcXVpcmVkIHRydWUgZm9yIHJlcXVpcmVkIGNvbHVtbiB0byBzaG93IGFzdHJpYyBpbiBjb2x1bW4gaGVhZGVyXG4gICAgICAgICAgaWYgKGNvbHVtbi52YWxpZGF0aW9ucz8uZmluZCh2YWxpZGF0aW9uID0+IHZhbGlkYXRpb24udHlwZSA9PSBFR3JpZFZhbGlkYXRvci5SRVFVSVJFRCkpIHtcbiAgICAgICAgICAgIGNvbHVtbi5pc1JlcXVpcmVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gc2V0IG51bWVyaWMgbnVsbCBvciB1bmRlZmluZSBkYXRhIGRlZmF1bHQgdmFsdWVcbiAgICAgICAgICBpZiAoKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTlVNRVJJQyB8fCBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4gfHwgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5URVhUIHx8IGNvbHVtbi50eXBlID09PSB1bmRlZmluZWQgfHwgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFIHx8IGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04pICYmIGNvbHVtbi52YWx1ZSAmJiB0aGlzLnJvd3NEYXRhPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnJvd3NEYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgICAgICBpZiAoY29sdW1uLnZhbHVlICYmIChyb3dbY29sdW1uLmZpZWxkXSA9PT0gbnVsbCB8fCByb3dbY29sdW1uLmZpZWxkXSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnZhbHVlID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnZhbHVlIDogY29sdW1uLnZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgICAvL3NldCB0ZXh0VHlwZSBmb3IgYSBjb2x1bW4gdGhhdCBpcyBmb3JtYXR0ZWQgdG8gYmUgYSBwYXNzd29yZFxuICAgICAgICAgIGlmIChjb2x1bW4uZm9ybWF0ID09ICdwYXNzd29yZCcgJiYgKCFjb2x1bW4udGV4dFR5cGUgfHwgY29sdW1uLnRleHRUeXBlICE9PSAndGV4dCcpKSB7XG4gICAgICAgICAgICBjb2x1bW4udGV4dFR5cGUgPSAncGFzc3dvcmQnO1xuICAgICAgICAgIH0gZWxzZSBjb2x1bW4udGV4dFR5cGUgPSAndGV4dCc7XG4gICAgICAgICAgLy8gY29udmVydCBzdHJpbmcgdGltZSBpbnRvIHRoZSBkYXRlXG4gICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSkge1xuICAgICAgICAgICAgaWYgKGNvbHVtbi50aW1lT25seSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICB0aGlzLnJvd3NEYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdICYmXG4gICAgICAgICAgICAgICAgICAocm93W2NvbHVtbi5maWVsZF0udG9TdHJpbmcoKS5pbmNsdWRlcygnUE0nKSB8fFxuICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXS50b1N0cmluZygpLmluY2x1ZGVzKCdBTScpKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBzZXRUaW1lSW5EYXRlKHJvd1tjb2x1bW4uZmllbGRdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghY29sdW1uLm1pbnV0ZXNJbnRlcnZhbCkge1xuICAgICAgICAgICAgICB0aGlzLnJvd3NEYXRhLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJvd1tjb2x1bW4uZmllbGRdICYmIHR5cGVvZiByb3dbY29sdW1uLmZpZWxkXSA9PT0gJ3N0cmluZycgJiYgIXJvd1tjb2x1bW4uZmllbGRdLmluY2x1ZGVzKCdUJykpIHtcbiAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gbmV3IERhdGUocm93W2NvbHVtbi5maWVsZF0gYXMgc3RyaW5nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXRoaXMuaGlkZUZpbHRlciAmJiBjb2x1bW4uZmlsdGVyVmFsdWUgJiYgY29sdW1uLmZpbHRlciAmJiBjb2x1bW4uZmlsdGVyaW5nICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgLy8gc2V0IGZpbHRlciB2YWx1ZVxuICAgICAgICAgICAgdGhpcy5zZXRGaWx0ZXJGb2N1c091dChjb2x1bW4pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIHNldCBEaXNwbGF5VGV4dCB3aGVuIHZhbHVlIGlzIGluIGN1cmx5IGJyYWNrZXRzLlxuICAgICAgICAgIHRoaXMuc2V0RGlzcGxheVRleHRWYWx1ZShjb2x1bW4pO1xuICAgICAgICAgIHRoaXMuc2V0RGlzcGxheUZpZWxkVmFsdWUoY29sdW1uKTtcblxuICAgICAgICAgIC8vQWdncmVnYXRlIHNjZW5hcmlvXG4gICAgICAgICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgJiYgY29sdW1uLmFnZ3JlZ2F0ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmFnZ3JlZ2F0ZUZvb3RlciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNldEFnZ3JlZ2F0ZVRleHQoY29sdW1uKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgc2VhcmNoRmlsdGVycztcbiAgICAgICAgICBpZiAoIXRoaXMuc29mdENhY2hpbmcgJiYgdGhpcy50YWJsZT8uaWQpIHtcbiAgICAgICAgICAgIHNlYXJjaEZpbHRlcnMgPSBKU09OLnBhcnNlKFxuICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnU2V0RmlsdGVycy0nICsgdGhpcy50YWJsZT8uaWQgKyB0aGlzLmN1cnJlbnRVcmwpIGFzIGFueVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudGFibGU/LmlkKSB7XG4gICAgICAgICAgICBzZWFyY2hGaWx0ZXJzID0gdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdGhpcy50YWJsZT8uaWQgKyB0aGlzLmN1cnJlbnRVcmxdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5oaWRlRmlsdGVyICYmXG4gICAgICAgICAgICBzZWFyY2hGaWx0ZXJzICYmXG4gICAgICAgICAgICBzZWFyY2hGaWx0ZXJzLmZpbHRlcnMgJiZcbiAgICAgICAgICAgIHNlYXJjaEZpbHRlcnMuZmlsdGVycz8ubGVuZ3RoID4gMFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgc2VhcmNoRmlsdGVycy5maWx0ZXJzLmZvckVhY2goKHg6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoeC5maWVsZCA9PT0gY29sdW1uLmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbj8uZmlsdGVyPy50eXBlID09PSAnY2FsZW5kYXInICYmIHgudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVTdHJpbmcgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh4LnZhbHVlLCAnTU0tZGQteXl5eScpO1xuICAgICAgICAgICAgICAgICAgY29sdW1uLmZpbHRlclZhbHVlID0gbmV3IERhdGUoZGF0ZVN0cmluZyBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5NVUxUSVNFTEVDVCAmJiAhQXJyYXkuaXNBcnJheSh4LnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgY29sdW1uLmZpbHRlclZhbHVlID0geC52YWx1ZT8uc3BsaXQoJywnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHgudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5maWx0ZXJWYWx1ZSA9IGNvbHVtbi50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQgJiYgY29sdW1uLmhhc093blByb3BlcnR5KCdmaWx0ZXJWYWx1ZV9vYmonKSA/IGNvbHVtblsnZmlsdGVyVmFsdWVfb2JqJ10/LnRleHQgOiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGNvbnZlcnRpbmcgZGlzcGxheUZpZWxkIHRvTG93ZXJjYXNlXG4gICAgICAgICAgaWYgKGNvbHVtbi5kaXNwbGF5RmllbGQpIHtcbiAgICAgICAgICAgIGNvbHVtbi5kaXNwbGF5RmllbGQgPSBjb2x1bW4uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHNldCBBdXRvQ29tcGxldGUgRGF0YVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQVVUT0NPTVBMRVRFICYmXG4gICAgICAgICAgICB0aGlzLnJvd3NEYXRhICYmXG4gICAgICAgICAgICB0aGlzLnJvd3NEYXRhPy5sZW5ndGggPiAwXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnJvd3NEYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgICAgICAvLyBjb252ZXJ0IHN0cmluZyB0aGF0IGNvbnRhaW5zIGNvbW1hIGludG8gYXJyYXlzXG4gICAgICAgICAgICAgIGlmIChyb3dbY29sdW1uLmZpZWxkXT8udG9TdHJpbmcoKS5pbmNsdWRlcygnOycpKSB7XG4gICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXVxuICAgICAgICAgICAgICAgICAgPy50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAuc3BsaXQoJzsnKVxuICAgICAgICAgICAgICAgICAgPy5tYXAoKHZhbHVlOiBhbnkpID0+ICh7IFtjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXTogcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdLCBbY29sdW1uLm9wdGlvbkxhYmVsPy50b0xvd2VyQ2FzZSgpXTogdmFsdWUsIFtjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldOiB2YWx1ZSB9KSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qga2V5OiBhbnkgPSBPYmplY3Qua2V5cyhyb3cpLmZpbmQoKHgpID0+IHggPT09IGNvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgLy8gY29udmVydCBzaW1wbGUgc3RyaW5nIGludG8gYXJyYXlcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJvd1trZXldKSAmJiByb3dba2V5XSkge1xuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4uZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICByb3dba2V5XSA9IFt7IFtjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXTogcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdLCBbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXTogcm93W2tleV0gfV07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW4ub3B0aW9uTGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcm93W2tleV0gPSBbeyBbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXTogcm93W2tleV0sIFtjb2x1bW4ub3B0aW9uTGFiZWw/LnRvTG93ZXJDYXNlKCldOiByb3dba2V5XSB9XTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd1trZXldID0gW3sgW2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV06IHJvd1trZXldIH1dO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy93aGVuIHdlIGFkZCBhIG5ldyByb3csIGl0IHNldCB0aGUgZGVmYXVsdCB2YWx1ZVxuICAgICAgICAgIGlmIChjb2x1bW4udmFsdWUpIHtcbiAgICAgICAgICAgIGxldCBrZXkgPSBPYmplY3Qua2V5cyh0aGlzLm5ld0dyaWRSb3cpLmZpbmQoKHgpID0+IHg/LnRvTG93ZXJDYXNlKCkgPT09IGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgIGlmICgha2V5KSB7XG4gICAgICAgICAgICAgIHRoaXMubmV3R3JpZFJvd1tjb2x1bW4uZmllbGRdID0gY29sdW1uLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxJTkspIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TGlua1RhYlNldHRpbmdzKGNvbHVtbik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5hbGxvd1BlcnNpc3RlbmNlICYmIGdldFNlbGVjdGVkQ29sPy5sZW5ndGggPiAwICYmIHRoaXMuYWxsb3dDb2x1bW5Ub2dnbGUpIHtcbiAgICAgICAgICB0aGlzLnNldFNlbGVjdENvbHVtbnMoZ2V0U2VsZWN0ZWRDb2wpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2V0U2VsZWN0Q29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGdsb2JhbEZpbHRlckJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuc2VhcmNoYnRuSWQpO1xuICAgICAgICBpZiAoZ2xvYmFsRmlsdGVyQnRuKSB7XG4gICAgICAgICAgdGhpcy5zaG93RmlsdGVyYnRuID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlLnJvd3MpIHtcbiAgICAgICAgICBjb25zdCBjbGFzc0VsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdoaWdobGlnaHRlZC1yb3cnKTtcbiAgICAgICAgICBpZiAoY2xhc3NFbGVtZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNsYXNzRWxlbWVudFswXS5zY3JvbGxJbnRvVmlldygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoISh0aGlzLnBhZ2luYXRpb24gJiYgdGhpcy5lZGl0QWxsUm93cykgJiYgdGhpcy5yb3dzRGF0YT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5zb3J0SWNvbkhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVDdXN0b21Tb3J0aW5nKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLmVkaXRBbGxSb3dzICYmIHRoaXMucm93c0RhdGE/Lmxlbmd0aCA+IDAgJiYgdGhpcy5jb2x1bW5zPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0QWxsUm93c0F0T25jZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5zZXREcm9wZG93bmRhdGFWYWx1ZSA9IHRydWU7XG4gICAgICBjb25zdCBnbG9iYWxTZWFyY2hidG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2xvYmFsU2VhcmNoYnRuJyk7XG4gICAgICBpZiAoZ2xvYmFsU2VhcmNoYnRuKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoR3JpZEZpbHRlciA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucm93c0RhdGE/Lmxlbmd0aCA+IDAgJiYgdGhpcy5nZW5lcmF0ZVJvd3NEYXRhQ29weSkge1xuICAgICAgICB0aGlzLnJvd3NEYXRhQ29weSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5yb3dzRGF0YSkpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLnN0b3BEaWFsb2dDbG9zZSkge1xuICAgICAgICB0aGlzLmRlZmF1bHRSb3dDbGljaygpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnJvd1VwZGF0ZUNoYW5nZSA9IGZhbHNlO1xuICAgIHRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkID0gZmFsc2U7XG5cbiAgfVxuXG4gIGhhbmRsZUN1c3RvbVNvcnRpbmcoKSB7XG4gICAgdGhpcy5QYWdlQ2hhbmdlID0gZmFsc2U7XG4gICAgY29uc3QgeyBmaWVsZCwgZGlyZWN0aW9uIH0gPSB0aGlzLnNvcnREYXRhO1xuICAgIGlmICghZmllbGQpIHJldHVybjtcblxuICAgIGNvbnN0IEFTQyA9IGRpcmVjdGlvbiA9PT0gRUdyaWRTb3J0RGlyZWN0aW9uLkFTQztcbiAgICBjb25zdCBzb3J0ZWQgPSBbLi4udGhpcy5yb3dzRGF0YV0uc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3Qgbm9ybWFsaXplID0gKHZhbDogYW55KSA9PlxuICAgICAgICB2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQgPyAnJyA6IFN0cmluZyh2YWwpLnRyaW0oKTtcblxuICAgICAgY29uc3QgYVZhbCA9IG5vcm1hbGl6ZShhW2ZpZWxkXSk7XG4gICAgICBjb25zdCBiVmFsID0gbm9ybWFsaXplKGJbZmllbGRdKTtcblxuICAgICAgY29uc3QgYUVtcHR5ID0gYVZhbCA9PT0gJyc7XG4gICAgICBjb25zdCBiRW1wdHkgPSBiVmFsID09PSAnJztcblxuICAgICAgaWYgKGFFbXB0eSAmJiBiRW1wdHkpIHJldHVybiAwO1xuICAgICAgaWYgKGFFbXB0eSkgcmV0dXJuIEFTQyA/IC0xIDogMTtcbiAgICAgIGlmIChiRW1wdHkpIHJldHVybiBBU0MgPyAxIDogLTE7XG5cbiAgICAgIGNvbnN0IGFOdW0gPSBwYXJzZUZsb2F0KGFWYWwpO1xuICAgICAgY29uc3QgYk51bSA9IHBhcnNlRmxvYXQoYlZhbCk7XG4gICAgICBpZiAoIWlzTmFOKGFOdW0pICYmICFpc05hTihiTnVtKSkgcmV0dXJuIEFTQyA/IGFOdW0gLSBiTnVtIDogYk51bSAtIGFOdW07XG5cbiAgICAgIHJldHVybiBBU0MgPyBhVmFsLmxvY2FsZUNvbXBhcmUoYlZhbCkgOiBiVmFsLmxvY2FsZUNvbXBhcmUoYVZhbCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJvd3NEYXRhID0gc29ydGVkO1xuICAgIHRoaXMudGFibGUuc29ydEZpZWxkID0gZmllbGQ7XG4gICAgdGhpcy50YWJsZS5zb3J0T3JkZXIgPSBBU0MgPyAxIDogLTE7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgc2V0TGlua1RhYlNldHRpbmdzKGNvbHVtbjogSUdyaWRDb2x1bW4pIHtcbiAgICBjb25zdCB1c2VyU2V0dGluZyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiVXNlclNldHRpbmdcIik7XG4gICAgaWYgKHVzZXJTZXR0aW5nKSB7XG4gICAgICBjb25zdCBwYXJzZWRTZXR0aW5nID0gSlNPTi5wYXJzZSh1c2VyU2V0dGluZyk7XG4gICAgICBpZiAoY29sdW1uPy50YXJnZXRVc2VVc2VyUHJlZikge1xuICAgICAgICBjb2x1bW4udGFyZ2V0ID0gcGFyc2VkU2V0dGluZz8udmFsdWUgPT09IFwib3BlbkxpbmtJbkN1cnJlbnRUYWJcIiA/IEVHcmlkbGluay5TRUxGIDogRUdyaWRsaW5rLkJMQU5LO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldEdyaWRJZCgpIHtcbiAgICBsZXQgY291bnRlciA9IDA7XG4gICAgbGV0IHRhYmxlcyA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3AtdGFibGUnKTtcbiAgICBpZiAodGFibGVzPy5sZW5ndGggPiAwKSB7XG4gICAgICB0YWJsZXMuZm9yRWFjaCgodGFibGUsIGluZGV4KSA9PiB7XG4gICAgICAgIHRhYmxlLnNldEF0dHJpYnV0ZSgnaWQnLCB0aGlzLmN1cnJlbnRVcmwgKyBjb3VudGVyKyspO1xuICAgICAgfSlcbiAgICB9XG4gIH1cbiAgc2V0U2VsZWN0Q29sdW1ucyhjb2x1bW5zKSB7XG4gICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5zID0gW107XG4gICAgY29sdW1ucz8uZm9yRWFjaCgoeCwgaSkgPT4ge1xuICAgICAgaWYgKCh4LnNob3cgPT09IHRydWUgfHwgeC5zaG93ID09PSB1bmRlZmluZWQpICYmICF4LmhpZGRlbiAmJiAheC5zaG93SW5Nb3JlKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29sdW1uc1tpXSkge1xuICAgICAgICAgIHgudmFsdWUgPSB0aGlzLnNlbGVjdGVkQ29sdW1uc1tpXS52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zZWxlY3RlZENvbHVtbnMucHVzaCh4KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGF1dG9Db21wbGV0ZVNlbGVjdGVkVmFsdWUocm93OiBhbnksIGNvbHVtbjogSUdyaWRDb2x1bW4sIHZhbHVlKSB7XG4gICAgaWYgKGNvbHVtbi5vcHRpb25MYWJlbCkge1xuICAgICAgY29uc3QgdmFsdWVLZXkgPSBjb2x1bW4ub3B0aW9uVmFsdWUgPyBjb2x1bW4ub3B0aW9uVmFsdWUgOiBjb2x1bW4uZmllbGQ7XG4gICAgICByb3dbY29sdW1uLmZpZWxkXSA9IFsuLi5yb3dbY29sdW1uLmZpZWxkXSwge1xuICAgICAgICBbY29sdW1uLm9wdGlvbkxhYmVsPy50b0xvd2VyQ2FzZSgpXTogdmFsdWVbY29sdW1uLm9wdGlvbkxhYmVsPy50b0xvd2VyQ2FzZSgpXSwgW3ZhbHVlS2V5Py50b0xvd2VyQ2FzZSgpXTogdmFsdWVbdmFsdWVLZXk/LnRvTG93ZXJDYXNlKCldLFxuICAgICAgICBbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXTogdmFsdWVbdmFsdWVLZXk/LnRvTG93ZXJDYXNlKCldXG4gICAgICB9XTtcbiAgICAgIGNvbnN0IGluZGV4ID0gcm93W2NvbHVtbi5maWVsZF0/LmZpbmRJbmRleCgoeCkgPT4gSlNPTi5zdHJpbmdpZnkoeCkgPT09IEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgICByb3dbY29sdW1uLmZpZWxkXS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNldCBEaXNwbGF5VGV4dCB3aGVuIHZhbHVlIGlzIGluIGN1cmx5IGJyYWNrZXRzLlxuICBzZXREaXNwbGF5VGV4dFZhbHVlKGNvbHVtbjogSUdyaWRDb2x1bW4pIHtcbiAgICB0aGlzLnJvd3NEYXRhPy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MSU5LIHx8XG4gICAgICAgIEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgfHxcbiAgICAgICAgRUdyaWRDb2x1bW5UeXBlLklGUkFNRVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ107XG4gICAgICAgIGlmIChjb2x1bW4uZGlzcGxheVRleHQgJiYgY29sdW1uLmRpc3BsYXlUZXh0LmluY2x1ZGVzKCd7JykpIHtcbiAgICAgICAgICBjb25zdCBkaXNwbGF5VGV4dCA9IGNvbHVtbi5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgLnJlcGxhY2UoJ3snLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKCd9JywgJycpO1xuICAgICAgICAgIGlmIChkaXNwbGF5VGV4dCAmJiBmaWVsZCkge1xuICAgICAgICAgICAgZmllbGQuZGlzcGxheVRleHQgPSByb3dbZGlzcGxheVRleHQudG9Mb3dlckNhc2UoKV07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5kaXNwbGF5VGV4dCAmJiBmaWVsZCkge1xuICAgICAgICAgIGZpZWxkLmRpc3BsYXlUZXh0ID0gY29sdW1uLmRpc3BsYXlUZXh0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZXREaXNwbGF5RmllbGRWYWx1ZShjb2x1bW46IElHcmlkQ29sdW1uKSB7XG4gICAgdGhpcy5yb3dzRGF0YT8uZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MSU5LKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ107XG4gICAgICAgIGlmIChjb2x1bW4uZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgY29uc3QgZGlzcGxheUZpZWxkID0gY29sdW1uLmRpc3BsYXlGaWVsZDtcbiAgICAgICAgICBpZiAoZGlzcGxheUZpZWxkICYmIGZpZWxkKSB7XG4gICAgICAgICAgICBmaWVsZC5kaXNwbGF5RmllbGQgPSByb3dbZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKCldO1xuXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5kaXNwbGF5RmllbGQgJiYgZmllbGQpIHtcbiAgICAgICAgICBmaWVsZC5kaXNwbGF5RmllbGQgPSBjb2x1bW4uZGlzcGxheUZpZWxkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvblRleHRhcmVhQmx1cihjb2x1bW46IElHcmlkQ29sdW1uLCByb3c6IGFueSkge1xuICAgIGNvbnN0IGlkID0gY29sdW1uLmZpZWxkICsgJy0nICsgcm93W3RoaXMuZGF0YUtleV07XG4gICAgY29uc3QgdGV4dGFyZWEgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGB0ZXh0YXJlYVtkYXRhLWNlbGw9XCIke2lkfVwiXWApIGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQ7XG5cbiAgICBpZiAodGV4dGFyZWEpIHtcbiAgICAgIHRleHRhcmVhLnN0eWxlLmhlaWdodCA9ICcnO1xuICAgICAgdGV4dGFyZWEuc3R5bGUud2lkdGggPSAnJztcbiAgICB9XG4gICAgdGhpcy5lZGl0aW5nQ2VsbCA9IG51bGw7XG4gICAgdGhpcy5vbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpO1xuICB9XG5cbiAgb25UZXh0YXJlYUVudGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBjb2x1bW46IElHcmlkQ29sdW1uLCByb3c6IGFueSkge1xuICAgIGlmIChldmVudC5jdHJsS2V5ICYmIGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMub25UZXh0YXJlYUJsdXIoY29sdW1uLCByb3cpO1xuICAgIH1cbiAgfVxuICBvbklucHV0Rm9jdXMoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnkpIHtcbiAgICBpZiAodGhpcy5lZGl0aW5nQ2VsbCAmJiAhdGhpcy5lZGl0aW5nQ2VsbC5zdGFydHNXaXRoKGNvbHVtbi5maWVsZCkpIHtcbiAgICAgIHRoaXMuZWRpdGluZ0NlbGwgPSBudWxsO1xuICAgIH1cbiAgfVxuICBzZXROdW1lcmljTWluRnJhY3Rpb24oY29sdW1uOiBhbnkpIHtcbiAgICBsZXQgbWluRnJhY3Rpb25EaWdpdHMgPSAyO1xuICAgIGlmIChjb2x1bW4/LmZvcm1hdD8udHlwZSA9PT0gJ3BlcmNlbnQnICYmICFjb2x1bW4/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5taW5GcmFjdGlvbkRpZ2l0cyAmJiAhY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbykge1xuICAgICAgbWluRnJhY3Rpb25EaWdpdHMgPSAwO1xuICAgIH0gZWxzZSBpZiAoY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8ubWluRnJhY3Rpb25EaWdpdHMgIT0gbnVsbCkge1xuICAgICAgbWluRnJhY3Rpb25EaWdpdHMgPSBjb2x1bW4uZm9ybWF0LmZvcm1hdFBhcmFtcy5taW5GcmFjdGlvbkRpZ2l0cztcbiAgICB9IGVsc2UgaWYgKGNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm8pIHtcbiAgICAgIG1pbkZyYWN0aW9uRGlnaXRzID0gTnVtYmVyKGNvbHVtbi5mb3JtYXQuZm9ybWF0UGFyYW1zLmRpZ2l0c0luZm8pO1xuICAgIH1cbiAgICByZXR1cm4gbWluRnJhY3Rpb25EaWdpdHM7XG4gIH1cblxuICBzZXROdW1lcmljTWF4RnJhY3Rpb24oY29sdW1uOiBhbnkpIHtcbiAgICBsZXQgbWF4RnJhY3Rpb25EaWdpdHMgPSAyO1xuICAgIGlmIChjb2x1bW4/LmZvcm1hdD8udHlwZSA9PT0gJ3BlcmNlbnQnICYmICFjb2x1bW4/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5tYXhGcmFjdGlvbkRpZ2l0cyAmJiAhY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbykge1xuICAgICAgbWF4RnJhY3Rpb25EaWdpdHMgPSAwO1xuICAgIH0gZWxzZSBpZiAoY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8ubWF4RnJhY3Rpb25EaWdpdHMgIT0gbnVsbCkge1xuICAgICAgbWF4RnJhY3Rpb25EaWdpdHMgPSBjb2x1bW4uZm9ybWF0LmZvcm1hdFBhcmFtcy5tYXhGcmFjdGlvbkRpZ2l0cztcbiAgICB9IGVsc2UgaWYgKGNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm8pIHtcbiAgICAgIG1heEZyYWN0aW9uRGlnaXRzID0gTnVtYmVyKGNvbHVtbi5mb3JtYXQuZm9ybWF0UGFyYW1zLmRpZ2l0c0luZm8pO1xuICAgIH1cbiAgICByZXR1cm4gbWF4RnJhY3Rpb25EaWdpdHM7XG4gIH1cblxuICAvLyBzZXQgdGhlIGZvcm1hdCBvZiBjdXJyZW5jeSAmJiBudW1iZXIgJiYgZGVjaW1hbCAmJiBwZXJjZW50XG4gIHNldE51bWVyaWNGb3JtYXQoY29sdW1uOiBhbnksIHJvdzogYW55KSB7XG4gICAgcm93ID0gb2JqQ29udmVydFRvTG93ZXIocm93KTtcbiAgICBsZXQgdmFsdWU6IGFueSA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxuICAgICAgPyByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHRcbiAgICAgIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKVxuICAgICAgICA/IHJvd1tyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXVxuICAgICAgICA6IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXVxuICAgICAgICAgID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICA6IChyb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8udGV4dCB8fCByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8udGV4dCA9PT0gMCB8fCByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8udGV4dCA9PT0gbnVsbClcbiAgICAgICAgICAgID8gcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/LnRleHQgOiByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXTtcbiAgICBpZiAodGhpcy50eXBlT2YodmFsdWUpID09PSAnbnVtYmVyJyAmJiB2YWx1ZSA9PT0gMCkge1xuICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgIH1cbiAgICBsZXQgZm9ybWF0UGFyYW1zID0gY29sdW1uLmZvcm1hdD8uZm9ybWF0UGFyYW1zO1xuICAgIGlmIChjb2x1bW4uZm9ybWF0ICYmIHZhbHVlICE9IG51bGwpIHtcbiAgICAgIHN3aXRjaCAoY29sdW1uLmZvcm1hdD8udHlwZSkge1xuICAgICAgICBjYXNlIEVHcmlkRm9ybWF0VHlwZS5DVVJSRU5DWTpcbiAgICAgICAgICB2YWx1ZSA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChcbiAgICAgICAgICAgIGZvcm1hdFBhcmFtcz8ubG9jYWxlID8gZm9ybWF0UGFyYW1zLmxvY2FsZSA6ICdlbi1VUycsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN0eWxlOiAnY3VycmVuY3knLFxuICAgICAgICAgICAgICBjdXJyZW5jeTogZm9ybWF0UGFyYW1zPy5jdXJyZW5jeSA/IGZvcm1hdFBhcmFtcy5jdXJyZW5jeSA6ICdVU0QnLFxuICAgICAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IHRoaXMuc2V0TnVtZXJpY01pbkZyYWN0aW9uKGNvbHVtbiksXG4gICAgICAgICAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0czogdGhpcy5zZXROdW1lcmljTWF4RnJhY3Rpb24oY29sdW1uKSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApPy5mb3JtYXQodmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVHcmlkRm9ybWF0VHlwZS5ERUNJTUFMOlxuICAgICAgICAgIHZhbHVlID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KFxuICAgICAgICAgICAgZm9ybWF0UGFyYW1zPy5sb2NhbGUgPyBmb3JtYXRQYXJhbXMubG9jYWxlIDogJ2VuLVVTJyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3R5bGU6ICdkZWNpbWFsJyxcbiAgICAgICAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiB0aGlzLnNldE51bWVyaWNNaW5GcmFjdGlvbihjb2x1bW4pLFxuICAgICAgICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IHRoaXMuc2V0TnVtZXJpY01heEZyYWN0aW9uKGNvbHVtbiksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKT8uZm9ybWF0KHZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuUEVSQ0VOVDpcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlICsgJyUnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvL0NoYW5nZSBkcm9wZG93biB2bHVlIGJhc2VkIG9uIG9wdGlvbiBsYWJlbCBhbmQgb3B0aW9udmFsdWVcbiAgc2V0RHJvcGRvd25WYWx1ZShjb2x1bW46IElHcmlkQ29sdW1uLCBzZWxlY3RlZFJvdz86IGFueSwgY2hhbmdlPzogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLnJvd3NEYXRhICYmIHRoaXMucm93c0RhdGEubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHJvdyk/LmZpbmQoKGtleSkgPT4ga2V5ID09PSBjb2x1bW4uZmllbGQpKSB7XG4gICAgICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAgICAgY29sdW1uLm9wdGlvbkxhYmVsID0gY29sdW1uLm9wdGlvbkxhYmVsXG4gICAgICAgICAgICAgID8gY29sdW1uLm9wdGlvbkxhYmVsXG4gICAgICAgICAgICAgIDogJ2xhYmVsJztcbiAgICAgICAgICAgIGNvbHVtbi5vcHRpb25WYWx1ZSA9IGNvbHVtbi5vcHRpb25WYWx1ZVxuICAgICAgICAgICAgICA/IGNvbHVtbi5vcHRpb25WYWx1ZVxuICAgICAgICAgICAgICA6ICd2YWx1ZSc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHZhbHVlID0gY29sdW1uLmRhdGE/LmZpbmQoXG4gICAgICAgICAgICAocmVjb3JkOiBhbnkpID0+XG4gICAgICAgICAgICAgIHJlY29yZFtjb2x1bW4ub3B0aW9uVmFsdWVdPy50b1N0cmluZygpID09PVxuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXT8udG9TdHJpbmcoKVxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgZWRpdGVkUm93ID0gc2VsZWN0ZWRSb3cgJiYgT2JqZWN0LmtleXMoc2VsZWN0ZWRSb3cpLmxlbmd0aCA+IDAgPyBzZWxlY3RlZFJvd1t0aGlzLmRhdGFLZXldID09PSByb3dbdGhpcy5kYXRhS2V5XSA6IGZhbHNlO1xuICAgICAgICAgIGlmICh2YWx1ZSAmJiBlZGl0ZWRSb3cpIHtcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gdmFsdWVbY29sdW1uLm9wdGlvblZhbHVlXTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlICYmIGNoYW5nZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gdmFsdWVbY29sdW1uLm9wdGlvbkxhYmVsXTtcbiAgICAgICAgICAgIGlmIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSkge1xuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXVsnb3B0aW9uVmFsdWUnXSA9IHZhbHVlW2NvbHVtbi5vcHRpb25WYWx1ZV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSA9IHsgb3B0aW9uVmFsdWU6IHZhbHVlW2NvbHVtbi5vcHRpb25WYWx1ZV0gfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vbWFuaXB1bGF0ZSBjaGVja2JveCBzdHJpbmcgdmFsdWUgdG8gdHJ1ZSBhbmQgZmFsc2UuXG4gIGNoYW5nZUNoZWNrYm94U3RyaW5nVmFsdWUoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5jb2x1bW5zICYmXG4gICAgICB0aGlzLnJvd3NEYXRhICYmXG4gICAgICB0aGlzLnJvd3NEYXRhLmxlbmd0aCA+IDAgJiZcbiAgICAgIHRoaXMuY29sdW1ucy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04gJiYgdGhpcy5zZXREcm9wZG93bmRhdGFWYWx1ZSkge1xuICAgICAgICAgIHRoaXMuc2V0RHJvcGRvd25WYWx1ZShjb2x1bW4sIHt9LCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4pIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKHR5cGVvZiAocm93W2NvbHVtbi5maWVsZF0gPT09ICdzdHJpbmcnKSAmJlxuICAgICAgICAgICAgICAgIChyb3dbY29sdW1uLmZpZWxkXSA9PT0gJzEnIHx8IHJvd1tjb2x1bW4uZmllbGRdID09PSAnMCcpKSB8fFxuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9PT0gJ1knIHx8XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID09PSAnTidcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9XG4gICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPT09ICcxJyB8fCByb3dbY29sdW1uLmZpZWxkXSA9PT0gJ1knXG4gICAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICAgIDogZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcm93RGF0YVxuICAgKiBQYXNzZXMgZGF0YSBvZiBjbGlja2VkIHJvdyB0byBwYXJlbnRcbiAgICovXG4gIGhhbmRsZVJvd0NsaWNrKHJvd0RhdGE6IGFueSkge1xuICAgIHRoaXMucm93Q2xpY2tEYXRhID0gcm93RGF0YTtcbiAgICBpZiAoIXRoaXMuZWRpdEFsbFJvd3MpIHtcbiAgICAgIHRoaXMub25Sb3dDbGljay5lbWl0KHJvd0RhdGEpO1xuICAgICAgdGhpcy5zZWxlY3RlZFJvd1JlY29yZCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvLyBpbnZva2Ugb25Sb3dDbGljayBldmVudCB3aGVuIG9ubHkgb25lIHJlY29yZCBleGlzdDtcbiAgZGVmYXVsdFJvd0NsaWNrKCkge1xuICAgIGxldCBkaWFsb2dFeGlzdDogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncC1kaWFsb2cnKTtcbiAgICBpZiAodGhpcy5jb2x1bW5zPy5sZW5ndGggPiAwICYmIHRoaXMucm93c0RhdGEgJiYgdGhpcy5yb3dzRGF0YS5sZW5ndGggPT09IDEgJiYgdGhpcy5vblJvd0NsaWNrLm9ic2VydmVycz8ubGVuZ3RoICYmIHRoaXMuZ3JpZFNlcnZpY2UudXNlclNlYXJjaGVkICYmIGRpYWxvZ0V4aXN0Lmxlbmd0aCkge1xuICAgICAgdGhpcy5ncmlkU2VydmljZS51c2VyU2VhcmNoZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlLnBpcGUodGFrZSgzKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVSb3dDbGljayh0aGlzLnJvd3NEYXRhWzBdKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gY29sdW1uRGF0YVxuICAgKiBQYXNzZXMgc29ydGluZyBpbmZvcm1hdGlvbiB0byBwYXJlbnQgb24gc29ydCBjaGFuZ2VcbiAgICovXG4gIGhhbmRsZVNvcnRDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIGxldCBzb3J0RGlyZWN0aW9uID0gbnVsbDtcbiAgICBsZXQgc29ydEZpZWxkOiBzdHJpbmcgPSAnJztcbiAgICBpZiAoZXZlbnQubXVsdGlzb3J0bWV0YSAmJiBldmVudC5tdWx0aXNvcnRtZXRhWzBdLm9yZGVyICE9IG51bGwpIHtcbiAgICAgIHNvcnREaXJlY3Rpb24gPVxuICAgICAgICBldmVudC5tdWx0aXNvcnRtZXRhWzBdLm9yZGVyID09IDFcbiAgICAgICAgICA/IEVHcmlkU29ydERpcmVjdGlvbi5BU0NcbiAgICAgICAgICA6IEVHcmlkU29ydERpcmVjdGlvbi5ERVNDO1xuICAgICAgc29ydEZpZWxkID0gZXZlbnQubXVsdGlzb3J0bWV0YVswXS5maWVsZDtcbiAgICB9XG4gICAgbGV0IHNvcnRzOiBJR3JpZFNvcnQgPSB7XG4gICAgICBmaWVsZDogc29ydEZpZWxkLFxuICAgICAgZGlyZWN0aW9uOiBzb3J0RGlyZWN0aW9uIGFzIEVHcmlkU29ydERpcmVjdGlvbixcbiAgICAgIHByaW9yaXR5OiAwLFxuICAgIH07XG5cbiAgICBpZiAoIXRoaXMucGFnaW5hdGlvbiB8fCAodGhpcy5wYWdpbmF0aW9uICYmICF0aGlzLmVkaXRBbGxSb3dzKSkge1xuICAgICAgdGhpcy5zb3J0RGF0YSA9IHNvcnRzO1xuICAgICAgdGhpcy5oYW5kbGVDdXN0b21Tb3J0aW5nKCk7XG4gICAgfVxuICAgIHRoaXMub25Tb3J0Q2hhbmdlLmVtaXQoc29ydHMpO1xuICB9XG5cbiAgc2hvdWxkUnVuU2VydmVyU2lkZShldmVudDogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKChldmVudC5zb3J0RmllbGQgJiYgISh0aGlzLnBhZ2luYXRpb24gJiYgdGhpcy5lZGl0QWxsUm93cykgJiYgIXRoaXMuUGFnZUNoYW5nZSkgfHwgKGV2ZW50Lm11bHRpU29ydE1ldGEgJiYgZXZlbnQubXVsdGlTb3J0TWV0YS5sZW5ndGggJiYgISh0aGlzLnBhZ2luYXRpb24gJiYgdGhpcy5lZGl0QWxsUm93cykgJiYgIXRoaXMuUGFnZUNoYW5nZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoKGV2ZW50LnNvcnRGaWVsZCAmJiAodGhpcy5wYWdpbmF0aW9uICYmICF0aGlzLmVkaXRBbGxSb3dzKSAmJiB0aGlzLlBhZ2VDaGFuZ2UpIHx8IChldmVudC5tdWx0aVNvcnRNZXRhICYmIGV2ZW50Lm11bHRpU29ydE1ldGEubGVuZ3RoICYmICh0aGlzLnBhZ2luYXRpb24gJiYgIXRoaXMuZWRpdEFsbFJvd3MpICYmIHRoaXMuUGFnZUNoYW5nZSkpIHtcbiAgICAgIHRoaXMuaGFuZGxlU2VydmVyU2lkZUV2ZW50cyhldmVudCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXV0b0xvYWREYXRhICYmIHRoaXMudXNlU2VydmVyU2lkZUV2ZW50cztcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICogUGFzc2VzIGFwcGxpZWQgZmlsdGVycyB0byBwYXJlbnQgb24gZmlsdGVyIGNoYW5nZVxuICAgKi9cbiAgaGFuZGxlRmlsdGVyQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoZmlsdGVyOiBhbnkpID0+IHtcbiAgICAgIGlmICghZXZlbnQuZmlsdGVyc1tmaWx0ZXIuZmllbGRdPy52YWx1ZSAmJiAhZmlsdGVyLnZhbHVlKSB7XG4gICAgICAgIGZpbHRlci52YWx1ZSA9ICcnO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMub25GaWx0ZXJDaGFuZ2UuZW1pdChldmVudCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IDogRXZlbnRcbiAgICogQHBhcmFtIGNvbHVtbkFjdGlvbiA6IElHcmlkQ29sdW1uQWN0aW9uXG4gICAqIEBwYXJhbSByb3cgOiBhbnlcbiAgICogU3RvcCB0aGUgY2xpY2sgZXZlbnQgcHJvcGFnYXRpb24gdG8gcGFyZW50XG4gICAqIENhbGxiYWNrcyB0aGUgcm93IGRhdGEgdG8gcGFyZW50XG4gICAqL1xuXG4gIC8qKlxuICAgKiBpbnZva2Ugb25DbGljayBldmVudCAmIG9wZW4gSWZyYW1lIGluIGdyaWRcbiAgICovXG4gIGdyaWRJRnJhbWUoY29sdW1uOiBhbnksIHJvd3M6IGFueSwgcm93OiBhbnkpIHtcbiAgICB0aGlzLm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdyk7XG4gICAgY29uc3QgcmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oSWZyYW1lQ29tcG9uZW50LCB7XG4gICAgICBoZWFkZXI6IGNvbHVtbi5oZWFkZXIsXG4gICAgICB3aWR0aDogJzgwJScsXG4gICAgICBoZWlnaHQ6ICc4MCUnLFxuICAgICAgY2xvc2FibGU6IHRydWUsXG4gICAgICBmb2N1c09uU2hvdzogZmFsc2UsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHZhbHVlOiByb3dzLFxuICAgICAgICBpRnJhbWVJZDogY29sdW1uLmRpc3BsYXlUZXh0ID8gY29sdW1uLmRpc3BsYXlUZXh0IDogY29sdW1uLmZpZWxkLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLnNldER5bmFtaWNEaWFsb2dSZWYocmVmKTtcbiAgICBjb25zdCBjb21wb25lbnROYW1lID0gY29sdW1uLmNvbXBvbmVudD8ubmFtZTtcbiAgICBpZiAoY29tcG9uZW50TmFtZSkge1xuICAgICAgdGhpcy5wYWdlTG9nZ2VyU2VydmljZS5zYXZlUGFnZUxvZ2dlckluZm8odGhpcy5yb3V0ZXIudXJsPy5zdWJzdHJpbmcoMSksIGNvbXBvbmVudE5hbWUpO1xuICAgIH1cbiAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgLnBpcGUodGFrZSgxKSkgLy8gRW1pdCBvbmx5IG9uY2Ugd2hlbiB0aGUgem9uZSBiZWNvbWVzIHN0YWJsZVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGRyYWdnYWJsZURpYWxvZyhjb2x1bW4/LmZpZWxkID8gY29sdW1uPy5maWVsZCA6IGNvbHVtbj8uaGVhZGVyKVxuICAgICAgfSk7XG4gICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgIGlmIChyZXMgJiYgY29sdW1uLm9uUmV0dXJuKSB7XG4gICAgICAgIGNvbHVtbi5vblJldHVybihyZXMpO1xuICAgICAgfSBlbHNlIGlmIChyZXMgJiYgY29sdW1uLm9uQ2hhbmdlKSB7XG4gICAgICAgIGNvbHVtbi5vbkNoYW5nZShyZXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYWRkTmV3Um93KHJvdzogYW55LCBhZGRSb3c6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHRoaXMucmVmcmVzaEdyaWRUZXJtaW5hdG9yKCk7XG4gICAgdGhpcy5jb21wb25lbnRUYWJsZVJlZiA9IHRoaXMudGFibGU7XG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goY29sID0+IHtcbiAgICAgIGlmIChjb2wuZmlsdGVyPy50eXBlID09PSAnY2FsZW5kYXInICYmIGNvbC5jb21wb25lbnQpIHtcbiAgICAgICAgKGFkZFJvdyA/IHRoaXMucm93c0RhdGFbMF0gOiByb3cpW2NvbC5maWVsZCArICdfc2Vjb25kVHlwZSddID0gRUdyaWRDb2x1bW5UeXBlLkRBVEU7XG4gICAgICB9XG4gICAgICBpZiAoY29sLmFnZ3JlZ2F0ZT8ubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuYWdncmVnYXRlRm9vdGVyID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZXRBZ2dyZWdhdGVUZXh0KGNvbCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5zZWxlY3Rpb25UeXBlID09PSBFR3JpZFNlbGVjdGlvblR5cGUuTVVMVElQTEUgJiYgdGhpcy5hdXRvQ2hlY2tOZXdSb3cpIHtcbiAgICAgIGNvbnN0IGFkZGVkUm93ID0gdGhpcy5yb3dzRGF0YSAmJiB0aGlzLnJvd3NEYXRhWzBdO1xuICAgICAgaWYgKGFkZGVkUm93ICYmICFhZGRlZFJvdy5faXNFZGl0ZWQpIHtcbiAgICAgICAgYWRkZWRSb3cuX2lzRWRpdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5zZWxlY3RlZFJvd3MpIHRoaXMuc2VsZWN0ZWRSb3dzID0gW107XG5cbiAgICAgIGlmIChhZGRlZFJvdyAmJiAhdGhpcy5zZWxlY3RlZFJvd3Muc29tZShyID0+IHJbdGhpcy5kYXRhS2V5XSA9PT0gYWRkZWRSb3dbdGhpcy5kYXRhS2V5XSkpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MgPSBbLi4udGhpcy5zZWxlY3RlZFJvd3MsIGFkZGVkUm93XTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2hlY2tsaXN0ID0gWy4uLnRoaXMuc2VsZWN0ZWRSb3dzXTtcbiAgICAgIHRoaXMucm93Q2xpY2tEYXRhID0gYWRkZWRSb3c7XG4gICAgICB0aGlzLmFkZE5ld1Jvd0NoZWNrID0gdHJ1ZTtcbiAgICAgIHRoaXMuZHJvcGRvd25JbnB1dCA9IGZhbHNlO1xuICAgICAgdGhpcy5zb3J0RGlzYWJsZWQgPSB0cnVlO1xuICAgICAgdGhpcy5vbk11bHRpU2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpXG4gICAgICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgICAgIHRoaXMub25HcmlkUm93QWRkLmVtaXQoYWRkZWRSb3cpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm93Q2xpY2tEYXRhID0gcm93O1xuICAgICAgdGhpcy5hZGROZXdSb3dDaGVjayA9IHRydWU7XG4gICAgICB0aGlzLmRyb3Bkb3duSW5wdXQgPSBmYWxzZTtcbiAgICAgIHRoaXMuc29ydERpc2FibGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICAgICAgdGhpcy5vbkdyaWRSb3dBZGQuZW1pdChyb3cpO1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqIG9wZW4gRGlhbG9nIGluIGdyaWRcbiAgICovXG4gIG9wZW5HcmlkRGlhbG9nKGNvbHVtbjogSUdyaWRDb2x1bW4gfCBhbnksIHJvdzogYW55LCBldmVudD86IGFueSkge1xuICAgIGNvbnN0IGRhdGFQYXJhbXMgPSBjb2x1bW4uZGF0YT8uZGF0YSA/IGNvbHVtbi5kYXRhPy5kYXRhIDoge307XG4gICAgaWYgKChldmVudCAmJiBldmVudC5jdHJsS2V5KSB8fCBjb2x1bW4ub3BlbkluTmV3VGFiKSB7XG4gICAgICB0aGlzLmh5cGVybGlua1NlcnZpY2Uub3BlbkRpYWxvZ0luTmV3VGFiKGNvbHVtbi5jb21wb25lbnQsIGRhdGFQYXJhbXMsIHJvdyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5vcGVuQ29tcG9uZW50SW5EaWFsb2coY29sdW1uLCByb3cpO1xuICAgIH1cbiAgfVxuXG4gIG9wZW5Db21wb25lbnRJbkRpYWxvZyhjb2x1bW46IElHcmlkQ29sdW1uIHwgYW55LCByb3c6IGFueSkge1xuICAgIHZhciBpc0Rpc2FibGVkID0gY29sdW1uLmRpc2FibGVkXG4gICAgICA/IHRydWVcbiAgICAgIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc2FibGVkXG4gICAgICAgID8gdHJ1ZVxuICAgICAgICA6IGZhbHNlO1xuICAgIHRoaXMub25DbGlja0V2ZW50KGNvbHVtbiwgcm93KTtcbiAgICBsZXQgZGF0YTogYW55ID0ge307XG4gICAgZGF0YSA9IHsgLi4uY29sdW1uPy5kYXRhIH07XG4gICAgdGhpcy5yb3dDbGlja0RhdGEgPSByb3c7XG4gICAgaWYgKGRhdGEgJiYgZGF0YS5kYXRhICYmIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddICYmIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5tYXRjaERhdGEpIHtcbiAgICAgIGRhdGEuZGF0YSA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaWFsb2dEYXRhPy5kYXRhID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpYWxvZ0RhdGEuZGF0YSA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaWFsb2dEYXRhO1xuICAgIH1cblxuICAgIGlmIChjb2x1bW4uY29tcG9uZW50ICYmIHRoaXMucm93Q2xpY2tEYXRhICYmICFpc0Rpc2FibGVkKSB7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBkYXRhLmRhdGEgPSBhdXRvU2V0TG9va3VwRGF0YShcbiAgICAgICAgICBkYXRhLmRhdGEsXG4gICAgICAgICAgdGhpcy5yb3dDbGlja0RhdGFcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGRhdGEgPSB7IC4uLmRhdGEsIGhlaWdodDogZGF0YS5oZWlnaHQgPyBkYXRhLmhlaWdodCA6ICc5MHZoJywgY2xvc2FibGU6IHRydWUsIGZvY3VzT25TaG93OiBmYWxzZSB9XG4gICAgICBjb25zdCBvYmpGaWVsZCA9IGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArIFwiX29ialwiO1xuICAgICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3Blbihyb3dbb2JqRmllbGRdICYmIHJvd1tvYmpGaWVsZF0/LmNvbXBvbmVudCA/IHJvd1tvYmpGaWVsZF0/LmNvbXBvbmVudCA6IGNvbHVtbi5jb21wb25lbnQsIGRhdGEpO1xuXG4gICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGlhbG9nUmVmWydkaWFsb2dDbG9zZSddID0gdGhpcy5kaWFsb2dSZWYuY2xvc2U7XG4gICAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UgPSB0aGlzLmludGVyY2VwdERpYWxvZ0Nsb3NlLmJpbmQodGhpcywgdGhpcy5kaWFsb2dSZWYpO1xuICAgICAgICB9KTtcblxuICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyAgIHRoaXMuZGlhbG9nUmVmWydkaWFsb2dDbG9zZSddID0gdGhpcy5kaWFsb2dSZWYuY2xvc2U7XG4gICAgICAvLyAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlID0gdGhpcy5pbnRlcmNlcHREaWFsb2dDbG9zZS5iaW5kKHRoaXMpO1xuICAgICAgLy8gfSwgODAwKTtcblxuICAgICAgdGhpcy5zZXREeW5hbWljRGlhbG9nUmVmKHRoaXMuZGlhbG9nUmVmKTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBjb2x1bW4uY29tcG9uZW50Py5uYW1lO1xuICAgICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgICAgdGhpcy5wYWdlTG9nZ2VyU2VydmljZS5zYXZlUGFnZUxvZ2dlckluZm8odGhpcy5yb3V0ZXIudXJsPy5zdWJzdHJpbmcoMSksIGNvbXBvbmVudE5hbWUpO1xuICAgICAgfVxuICAgICAgaWYgKGNvbHVtbi5kcmFnZ2FibGUgfHwgY29sdW1uLmRyYWdnYWJsZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBkcmFnZ2FibGVEaWFsb2coY29sdW1uPy5maWVsZCA/IGNvbHVtbj8uZmllbGQgOiBjb2x1bW4/LmhlYWRlcilcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGlhbG9nUmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGRhdGEgJiYgY29sdW1uLm9uUmV0dXJuKSB7XG4gICAgICAgICAgY29sdW1uLm9uUmV0dXJuKGRhdGEsIHRoaXMucm93Q2xpY2tEYXRhKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhKSB7XG4gICAgICAgICAgdGhpcy5icm93c2VyQ2xvc2VFdmVudCh0cnVlKTtcbiAgICAgICAgICBpZiAoY29sdW1uLm9uQ2hhbmdlKSB7XG4gICAgICAgICAgICBjb2x1bW4ub25DaGFuZ2UoZGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBicm93c2VyQ2xvc2VFdmVudChldmVudDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgdGhpcy5ncmlkU2VydmljZS5jb2x1bW5Gb2N1c2VkT3V0ID0gZXZlbnQ7XG4gIH1cblxuICBzZXRNdWx0aVNlbGVjdERhdGEoY29sdW1uOiBJR3JpZENvbHVtbiwgc2VsZWN0ZWRWYWx1ZTogYW55KSB7XG4gICAgaWYgKHNlbGVjdGVkVmFsdWUgJiYgY29sdW1uLnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLk1VTFRJU0VMRUNUKSB7XG4gICAgICBpZiAoc2VsZWN0ZWRWYWx1ZSAmJiBzZWxlY3RlZFZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnLCcpKSB7XG4gICAgICAgIHNlbGVjdGVkVmFsdWUgPSBzZWxlY3RlZFZhbHVlPy50b1N0cmluZygpPy5zcGxpdCgnLCcpPy5tYXAoKHZhbHVlKSA9PiBjb2x1bW4uZGF0YT8uZmluZCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWU/LnRvU3RyaW5nKCkgPT09IHZhbHVlPy50b1N0cmluZygpKT8ubGFiZWwpPy50b1N0cmluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZWN0ZWRWYWx1ZSA9IGNvbHVtbi5kYXRhPy5maW5kKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZT8udG9TdHJpbmcoKSA9PT0gc2VsZWN0ZWRWYWx1ZT8udG9TdHJpbmcoKSk/LmxhYmVsO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2VsZWN0ZWRWYWx1ZTtcbiAgfVxuICBhdXRvR3JvdyhldmVudDogRXZlbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50KSB7XG4gICAgY29uc3QgdGV4dGFyZWEgPSBldmVudCBpbnN0YW5jZW9mIEV2ZW50ID8gZXZlbnQudGFyZ2V0IGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQgOiBldmVudDtcbiAgICBpZiAodGV4dGFyZWEpIHtcbiAgICAgIHRleHRhcmVhLnN0eWxlLmhlaWdodCA9ICdhdXRvJztcbiAgICAgIHRleHRhcmVhLnN0eWxlLmhlaWdodCA9IHRleHRhcmVhLnNjcm9sbEhlaWdodCArICdweCc7XG4gICAgfVxuICB9XG5cblxuICBzZXRUZXh0Qm94UmVhZE9ubHlWYWx1ZShyb3c6IGFueSwgY29sdW1uOiBhbnkpIHtcbiAgICBsZXQgdmFsdWU6IGFueTtcbiAgICBpZiAoY29sdW1uLmRpc3BsYXlUZXh0KSB7XG4gICAgICB2YWx1ZSA9IGNvbHVtbi5kaXNwbGF5VGV4dDtcbiAgICB9IGVsc2UgaWYgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dCkge1xuICAgICAgdmFsdWUgPSByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHQ7XG4gICAgfSBlbHNlIGlmIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkKSB7XG4gICAgICB2YWx1ZSA9IHJvd1tyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXTtcbiAgICB9IGVsc2UgaWYgKGNvbHVtbi5kaXNwbGF5RmllbGQpIHtcbiAgICAgIHZhbHVlID0gcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogcmV0dXJuIGNvbmRpdGlvbmFsIGJhc2UgdmFsdWUgYW5kIHRpdGxlXG4gICAqL1xuICBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgZGVsZXRlIHJvd1sndW5kZWZpbmVkJ107XG4gICAgbGV0IHZhbHVlOiBhbnk7XG4gICAgaWYgKGNvbHVtbi50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5EQVRFKSB7XG4gICAgICBsZXQgbmV3VmFsdWU6IGFueTtcbiAgICAgIGlmICh0eXBlb2YgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddKSA9PT0gXCJvYmplY3RcIiAmJiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSkge1xuICAgICAgICBuZXdWYWx1ZSA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxuICAgICAgICAgID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlUZXh0XG4gICAgICAgICAgOiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICA/IHJvd1tyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXVxuICAgICAgICAgICAgOiByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8udGV4dFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3VmFsdWUgPSByb3dbY29sdW1uLmZpZWxkXTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmIChjb2x1bW4udGltZU9ubHkpIHtcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMuc2V0VGltZUZvcm1hdChuZXdWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IGZvcm1hdCA9IHRoaXMuc2V0Rm9ybWF0KGNvbHVtbik7XG4gICAgICAgICAgdmFsdWUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShuZXdWYWx1ZT8udG9TdHJpbmcoKSA9PT0gXCJJbnZhbGlkIERhdGVcIiA/IG51bGwgOiBuZXdWYWx1ZSwgZm9ybWF0ID8gZm9ybWF0IDogY29sdW1uLnNob3dUaW1lID8gXCJNTS9kZC9ZWVlZLCBoOm1tIGFcIiA6IFwiTU0vZGQveXl5eVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9XG4gICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxuICAgICAgICAgID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmZvcm1hdCA/IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0LCB0aGlzLnNldEZvcm1hdChjb2x1bW4pKSA6XG4gICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHRcbiAgICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgID8gcm93W3Jvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldICE9IHVuZGVmaW5lZCA/IHJvd1tyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkXSA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGRcbiAgICAgICAgICAgIDogcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgICAgID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgICAgIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gJiZcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dCA9PT0gbnVsbCAmJiBjb2x1bW4udHlwZSAhPT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPR1xuICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgY29sdW1uPy5maWx0ZXI/LnR5cGUgPT09ICdjYWxlbmRhcicgJiYgY29sdW1uLnRpbWVPbmx5ICYmIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRElBTE9HID9cbiAgICAgICAgICAgICAgICAgICAgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ0FNJykgfHwgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQudG9TdHJpbmcoKS5pbmNsdWRlcygnUE0nKSkgP1xuICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0IDogdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQsICdoaDptbSBhJylcbiAgICAgICAgICAgICAgICAgICAgOiBjb2x1bW4uZm9ybWF0ID8gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQsIHRoaXMuc2V0Rm9ybWF0KGNvbHVtbikpIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICAgIDogY29sdW1uLmZvcm1hdCA/IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJvd1tjb2x1bW4uZmllbGRdLCB0aGlzLnNldEZvcm1hdChjb2x1bW4pKVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgICAgID8gY29sdW1uLmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgOiBjb2x1bW4uaWNvbiA/IGNvbHVtbi5oZWFkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBzZXRGb3JtYXQoY29sdW1uKSB7XG4gICAgbGV0IGZvcm1hdCA9ICcnO1xuICAgIGlmIChjb2x1bW4/LmZvcm1hdCkge1xuICAgICAgY29sdW1uLmZvcm1hdCA9IGNvbHVtbi5mb3JtYXQ/LnR5cGUgPyBjb2x1bW4uZm9ybWF0LnR5cGUgOiBjb2x1bW4uZm9ybWF0O1xuICAgICAgc3dpdGNoIChjb2x1bW4uZm9ybWF0KSB7XG4gICAgICAgIGNhc2UgRUdyaWRGb3JtYXRUeXBlLlNNQUxMREFURToge1xuICAgICAgICAgIGZvcm1hdCA9ICdNTS9kZC95eSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuU0hPUlREQVRFOiB7XG4gICAgICAgICAgZm9ybWF0ID0gJ01NL2RkL3l5eXknO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgRUdyaWRGb3JtYXRUeXBlLk1FRElVTURBVEU6IHtcbiAgICAgICAgICBmb3JtYXQgPSAnTSBkLCB5eSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuTE9OR0RBVEU6IHtcbiAgICAgICAgICBmb3JtYXQgPSAnTU0vZGQveXksIGg6bW0gYSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuUEVSSU9EOiB7XG4gICAgICAgICAgZm9ybWF0ID0gJ01NL3l5JztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgZm9ybWF0ID0gY29sdW1uLmZvcm1hdDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZm9ybWF0XG4gIH1cblxuICBzZXREcm9wZHdvblJlYWRPbmx5VmFsdWUocm93OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgZGVsZXRlIHJvd1sndW5kZWZpbmVkJ107XG4gICAgY29uc3QgdmFsdWUgPSByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF1cbiAgICAgID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdXG4gICAgICA6IGNvbHVtbi5kYXRhPy5maW5kKGRyb3Bkb3duVmFsID0+IGRyb3Bkb3duVmFsPy52YWx1ZSA9PSByb3dbY29sdW1uLmZpZWxkXSlcbiAgICAgICAgPyBjb2x1bW4uZGF0YT8uZmluZChkcm9wZG93blZhbCA9PiBkcm9wZG93blZhbD8udmFsdWUgPT0gcm93W2NvbHVtbi5maWVsZF0pPy5sYWJlbFxuICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIG9uUm93UmVvcmRlcihldmVudCkge1xuICAgIHRoaXMub25Sb3dPcmRlckNoYW5nZWQuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBvcGVuIERlbGV0ZSBDb25maXJtYXRpb24gZGlhbG9nIHdoZW4gY2xpY2sgb24gZGVsZXRlIGljb24gaW4gQWN0aW9uIGNvbHVtblxuICAgKi9cbiAgaGFuZGxlQWN0aW9uQ2xpY2soZXZlbnQ6IEV2ZW50LCBjb2x1bW5BY3Rpb246IElHcmlkQ29sdW1uQWN0aW9uLCByb3c6IGFueSkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHZhciBtZXNzYWdlOiBzdHJpbmc7XG4gICAgaWYgKHJvdy5jaGlsZGZvbGRlcmNvdW50ID4gMCkge1xuICAgICAgbWVzc2FnZSA9IGBEZWxldGluZyB0aGlzIGZvbGRlciB3aWxsIGFsc28gZGVsZXRlICR7cm93LmNoaWxkZm9sZGVyY291bnR9IGNoaWxkIGZvbGRlciR7cm93LmNoaWxkZm9sZGVyY291bnQgPiAxID8gJ3MnIDogJyd9IGFsb25nIHdpdGggYWxsIGFzc29jaWF0ZWQgZG9jdW1lbnRzLiBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcHJvY2VlZD9gO1xuICAgIH1cbiAgICBpZiAoY29sdW1uQWN0aW9uLnRvb2x0aXAudG9Mb3dlckNhc2UoKSA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgIGlmIChjb2x1bW5BY3Rpb24uY29uZmlybURpYWxvZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgY29sdW1uQWN0aW9uLm9uQ2xpY2socm93KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlID8/ICdBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyByZWNvcmQ/JyxcbiAgICAgICAgICBoZWFkZXI6ICdEZWxldGUgQ29uZmlybWF0aW9uJyxcbiAgICAgICAgICBpY29uOiAncGkgcGktZXhjbGFtYXRpb24tdHJpYW5nbGUnLFxuICAgICAgICAgIGtleTogJ2hhbmRsZWNvbHVtbkFjdGlvbnMnLFxuICAgICAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICAgICAgY29sdW1uQWN0aW9uLm9uQ2xpY2socm93KTtcbiAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jbG9zZSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVqZWN0OiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY2xvc2UoKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29sdW1uQWN0aW9uLm9uQ2xpY2socm93KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IDogTGF6eUxvYWRFdmVudFxuICAgKiBUcmlnZ2VycyBldmVyeXRpbWUgYSBzZXJ2ZXIgc2lkZSBmaWx0ZXIgaXMgdHJpZ2dlclxuICAgKi9cbiAgaGFuZGxlU2VydmVyU2lkZUV2ZW50cyhldmVudDogYW55LCBkdDogYW55ID0gJycpIHtcbiAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuaXNTZXJ2ZXJTaWRlRXZlbnRJbml0YWxUcmlnZ2VyZWQpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbnM/Lmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldEdyaWRJZCgpO1xuICAgICAgICAgICAgdGhpcy5ncmlkZmlsdGVyID0gZXZlbnQ7XG5cbiAgICAgICAgICAgIGlmIChkdD8uZWw/Lm5hdGl2ZUVsZW1lbnQ/LmlkKSB7XG4gICAgICAgICAgICAgIHRoaXMuZ3JpZElkID0gZHQuZWwubmF0aXZlRWxlbWVudC5pZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zICYmIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuZm9yRWFjaCgoeDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50Py5maWx0ZXJzW3guZmllbGRdKSB7XG4gICAgICAgICAgICAgICAgICBldmVudC5maWx0ZXJzW3guZmllbGRdLnZhbHVlID0geC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTVVMVElTRUxFQ1QgPyB4LmZpbHRlclZhbHVlPy50b1N0cmluZygpIDogeC50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQgJiYgeC5oYXNPd25Qcm9wZXJ0eSgnZmlsdGVyVmFsdWVfb2JqJykgPyB4WydmaWx0ZXJWYWx1ZV9vYmonXT8udmFsdWUgOiB4LmZpbHRlclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRoaXMuYXV0b0xvYWREYXRhO1xuICAgICAgICAgICAgdGhpcy5zZXJ2ZXJGaWx0ZXJzID0ge1xuICAgICAgICAgICAgICBmaWx0ZXJzOiB0aGlzLmxvb2t1cEZpbHRlcnNcbiAgICAgICAgICAgICAgICA/IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0R3JpZEZpbHRlcnMoZXZlbnQsIHRoaXMuc2VsZWN0ZWRDb2x1bW5zKVxuICAgICAgICAgICAgICAgIDogdGhpcy5ncmlkU2VydmljZS5wcmVwYXJlQmFzaWNGaWx0ZXJzKGV2ZW50LCB0aGlzLnNlbGVjdGVkQ29sdW1ucyksXG4gICAgICAgICAgICAgIHNvcnRzOiB0aGlzLmdyaWRTZXJ2aWNlLmdldEdyaWRTb3J0cyhldmVudCwgdGhpcy5zZWxlY3RlZENvbHVtbnMpLFxuICAgICAgICAgICAgICAuLi4odGhpcy5wYWdpbmF0aW9uICYmIHtcbiAgICAgICAgICAgICAgICBwYWdlOiB0aGlzLmdyaWRTZXJ2aWNlLmdldEdyaWRQYWdpbmF0aW9uKGV2ZW50KSxcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZTogZXZlbnQucm93cyB8fCAxMCxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHRoaXMuc2VydmVyRmlsdGVycz8uZmlsdGVycyAmJlxuICAgICAgICAgICAgICB0aGlzLnNlcnZlckZpbHRlcnM/LmZpbHRlcnMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAodGhpcy5hbGxvd0NhY2hpbmcgfHwgdGhpcy5zb2Z0Q2FjaGluZylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpZiAoIXRoaXMuc29mdENhY2hpbmcgJiYgdGhpcy50YWJsZT8uaWQpIHtcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnU2V0RmlsdGVycy0nICsgdGhpcy50YWJsZT8uaWQgKyB0aGlzLmN1cnJlbnRVcmwsIEpTT04uc3RyaW5naWZ5KHRoaXMuc2VydmVyRmlsdGVycykpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmxdID0gdGhpcy5zZXJ2ZXJGaWx0ZXJzO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLnNvZnRDYWNoaW5nRmlsdGVyc1t0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHRoaXMuY3VycmVudFVybF0gPSB7fTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc2VydmVyRmlsdGVyVmFsdWVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnNlcnZlckZpbHRlcnMpKTtcbiAgICAgICAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzID0gKHRoaXMuc2VydmVyRmlsdGVycy5maWx0ZXJzIHx8IFtdKS5jb25jYXQodGhpcy5nbG9iYWxEYXRhKTtcblxuICAgICAgICAgICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uucm93VXBkYXRlID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGxldCBjb250YWluc0VtcHR5RmllbGQgPSB0cnVlO1xuICAgICAgICAgICAgd2hpbGUgKGNvbnRhaW5zRW1wdHlGaWVsZCkge1xuICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzLmZpbmRJbmRleCgoZmlsdGVyKSA9PiAhZmlsdGVyLmZpZWxkKTtcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5zRW1wdHlGaWVsZCA9IGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMub25TZXJ2ZXJTaWRlRXZlbnRDaGFuZ2UuZW1pdChzZXJ2ZXJGaWx0ZXJWYWx1ZXMpO1xuICAgICAgICAgICAgdGhpcy5pc1NlcnZlclNpZGVFdmVudEluaXRhbFRyaWdnZXJlZC5uZXh0KCcnKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuXG5cbiAgLy9zZXQgZ3JpZCBpZCBvbiBwYWdlIGxvYWQgZm9yIGxvYWQgY29sdW1uIHdpZHRoc1xuICBzZXRDbGFzc2FBbmRJZChkdDogYW55KSB7XG4gICAgaWYgKGR0Py5lbD8ubmF0aXZlRWxlbWVudD8uaWQpIHtcbiAgICAgIHRoaXMuZ3JpZElkID0gZHQuZWwubmF0aXZlRWxlbWVudC5pZDtcbiAgICB9XG4gICAgaWYgKHRoaXMuaG9yaXpvbnRhbFNjcm9sbCkge1xuICAgICAgcmV0dXJuIHsgJ2hvcml6b250YWwtc2Nyb2xsJzogdHJ1ZSB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7ICdob3Jpem9udGFsLXNjcm9sbCc6IGZhbHNlIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIFBhc3NlcyBhcHBsaWVkIHBhZ2luYXRpb24gdG8gcGFyZW50IG9uIHBhZ2UgY2hhbmdlXG4gICAqL1xuICBoYW5kbGVTZXJ2ZXJTaWRlUGFnaW5hdGlvbihldmVudDogSUdyaWRQYWdpbmF0aW9uRXZlbnQpIHtcbiAgICB0aGlzLmVkaXRpbmdSb3dLZXlzID0ge307XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IGV2ZW50LmZpcnN0O1xuICAgIHRoaXMuUGFnZUNoYW5nZSA9IHRydWU7XG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbiAmJiB0aGlzLnJlbWFpbmluZ1Jvd3NEYXRhPy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnJlbWFpbmluZ1Jvd3NEYXRhID0gW107XG4gICAgfVxuICAgIHRoaXMub25QYWdlQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnVzZVNlcnZlclNpZGVFdmVudHMgJiYgdGhpcy5wYWdpbmF0aW9uICYmIHRoaXMuZGVmYXVsdFJvd3MgJiYgdGhpcy5lZGl0QWxsUm93cyAmJiB0aGlzLnJvd3NEYXRhPy5sZW5ndGggPiAwICYmIHRoaXMuY29sdW1ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuZWRpdEFsbFJvd3NBdE9uY2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBzZWxlY3RlZFJvdyhyb3c6IGFueSkge1xuICAgIHRoaXMub25Sb3dDaGVja0JveC5lbWl0KHJvdyk7XG4gIH1cblxuICAvLyBzZXQgdGltZSBmb3JtYXRcbiAgc2V0VGltZUZvcm1hdChkYXRlOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgZGF0ZSA9PT0gJ251bWJlcicgfHwgKHR5cGVvZiBkYXRlID09PSAnc3RyaW5nJyAmJiAhaXNOYU4oTnVtYmVyKGRhdGUpKSkpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBkYXRlU3RyaW5nID0gZGF0ZT8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBpc1RpbWVJbkFNID0gdGhpcy5jaGVja1RpbWVGb3JtYXQoZGF0ZSwgJ2FtJyk7XG4gICAgY29uc3QgaXNUaW1lSW5QTSA9IHRoaXMuY2hlY2tUaW1lRm9ybWF0KGRhdGUsICdwbScpO1xuICAgIGNvbnN0IGlzVEluY2x1ZGUgPSB0aGlzLmNoZWNrVGltZUZvcm1hdChkYXRlLCAndCcpO1xuXG4gICAgaWYgKChpc1RpbWVJbkFNIHx8IGlzVGltZUluUE0pICYmICghaXNUSW5jbHVkZSkpIHtcbiAgICAgIHJldHVybiBkYXRlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jaGVja1RpbWVGb3JtYXQoZGF0ZSwgJzonKSAmJiAoIWlzVGltZUluQU0gJiYgIWlzVGltZUluUE0gJiYgIWlzVEluY2x1ZGUpKSB7XG4gICAgICBjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gZGF0ZVN0cmluZz8uc3BsaXQoJzonKT8ubWFwKE51bWJlcik7XG4gICAgICBjb25zdCBwZXJpb2QgPSBob3VycyA+PSAxMiA/ICdQTScgOiAnQU0nO1xuICAgICAgY29uc3QgZm9ybWF0dGVkSG91cnMgPSBob3VycyAlIDEyIHx8IDEyO1xuICAgICAgcmV0dXJuIGAke2Zvcm1hdHRlZEhvdXJzfToke1N0cmluZyhtaW51dGVzKS5wYWRTdGFydCgyLCAnMCcpfSAke3BlcmlvZH1gO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRlLCAnaGg6bW0gYScpIHx8ICcnO1xuICB9XG5cbiAgY2hlY2tUaW1lRm9ybWF0KGRhdGUsIGlzSW5jbHVkZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGRhdGU/LnRvU3RyaW5nKCk/LnRvTG93ZXJDYXNlKCk/LmluY2x1ZGVzKGlzSW5jbHVkZSk7XG4gIH1cblxuICAvL29wZW4gaHlwZXJsaW5rIGluIGVkaXQgY2FzZVxuICBvcGVuTGluayh1cmw6IGFueSkge1xuICAgIGlmICh1cmwpIHtcbiAgICAgIGNvbnN0IGxpbms6IGFueSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgIGxpbmsuaHJlZiA9IHVybDtcbiAgICAgIGxpbmsudGFyZ2V0ID0gJ19ibGFuayc7XG4gICAgICBsaW5rLmNsaWNrKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSByb3dcbiAgICogU2V0cyB2YWx1ZXMgdG8gZWRpdGFibGUgcm93XG4gICAqIFJvdydzIGRhdGEgaXMgcHJlc2V2ZWQgdG8gcHJldmVudCBtdXRhdGlvblxuICAgKiBSb3cgZGF0YUtleSBpcyBwcmVzZXJ2ZWQgdG8ga2VlcCB0aGUgcm93IHVuaXF1ZSBhbmQgaW4gZWRpdGFibGUgc3RhdGUgYXMgbG9uZyBhcyBub3Qgc2F2ZWRcbiAgICovXG5cbiAgcmVmcmVzaEdyaWRUZXJtaW5hdG9yKCkge1xuICAgIGlmICh0aGlzLnNldEdyaWRSZWZyZXNoVGltZSkge1xuICAgICAgdGhpcy5yZWxvYWRQYWdlPy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0T3JpZ2luYWxSb3dzKCkge1xuICAgIHRoaXMub3JpZ2luYWxSb3dzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnJvd3NEYXRhKSk7XG4gIH1cblxuICBvblJvd0VkaXRJbml0KHJvdzogYW55KSB7XG4gICAgdGhpcy5yZWZyZXNoR3JpZFRlcm1pbmF0b3IoKVxuICAgIGxldCBzZWxlY3RlZFJvdyA9IHsgLi4ucm93IH07XG4gICAgT2JqZWN0LmVudHJpZXMoc2VsZWN0ZWRSb3cpLmZvckVhY2goKFtrZXksIHZhbHVlXTogYW55KSA9PiB7XG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuc2V0RHJvcGRvd25GaWx0ZXIpIHtcbiAgICAgICAgICB0aGlzLnNldERyb3Bkb3duRmlsdGVyVmFsdWUoY29sLCByb3csIGtleSk7XG4gICAgICAgICAgdGhpcy5zZXREcm9wZG93bkZpbHRlciA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNldCB0aGUgYXV0b0NvbXBsZXRlIFZhbHVlIGluIGVkaXQgbW9kZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5BVVRPQ09NUExFVEUgJiZcbiAgICAgICAgICBjb2wuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGtleT8udG9Mb3dlckNhc2UoKSAmJlxuICAgICAgICAgIHZhbHVlICYmXG4gICAgICAgICAgdmFsdWUubGVuZ3RoID4gMFxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoY29sLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sLmZpZWxkXS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgcm93W2NvbC5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfdGVtcCddID0gcm93W2NvbC5kaXNwbGF5RmllbGRdO1xuICAgICAgICAgICAgICByb3dbY29sLmRpc3BsYXlGaWVsZF0gPSByb3dbY29sLmZpZWxkXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgbmV3VmFsdWUgPSB2YWx1ZS5tYXAoKHg6IGFueSkgPT4geFtjb2wuZGlzcGxheUZpZWxkXSk7XG4gICAgICAgICAgaWYgKG5ld1ZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnOycpKSB7XG4gICAgICAgICAgICByb3dbY29sLmZpZWxkXSA9IG5ld1ZhbHVlXG4gICAgICAgICAgICAgID8udG9TdHJpbmcoKVxuICAgICAgICAgICAgICA/LnJlcGxhY2VBbGwoJzsnLCAnLCcpXG4gICAgICAgICAgICAgID8uc3BsaXQoJywnKVxuICAgICAgICAgICAgICA/Lm1hcCgoeDogYW55KSA9PiAoeyBbY29sLmRpc3BsYXlGaWVsZCA/IGNvbC5kaXNwbGF5RmllbGQgOiBjb2wuZmllbGRdOiB4LCBbY29sLmZpZWxkICsgJ190ZW1wJ106IHZhbHVlWzBdW2NvbC5maWVsZF0gfSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOKSB7XG4gICAgICAgICAgbGV0IG9wdGlvbiA9IGNvbD8uZGF0YT8uZmluZChcbiAgICAgICAgICAgICh4OiBhbnkpID0+IHgubGFiZWwgPT09IHJvd1tjb2wuZmllbGRdPy50b1N0cmluZygpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgICByb3dbY29sLmZpZWxkXSA9IG9wdGlvbi52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTVVMVElTRUxFQ1QpIHtcbiAgICAgICAgICByb3dbY29sLmZpZWxkXSA9IHRoaXMuc2V0TXVsdGlTZWxlY3RWYWx1ZShjb2wsIHJvdylcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBrZXk/LnRvTG93ZXJDYXNlKCkgJiZcbiAgICAgICAgICBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEVcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKHJvd1tjb2wuZmllbGRdICE9PSBudWxsICYmIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAocm93W2tleSArICdfb2JqJ10gJiYgT2JqZWN0LmtleXMocm93W2tleSArICdfb2JqJ10pPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHJvd1trZXkgKyAnX29iaiddLnRleHQgPSBuZXcgRGF0ZSh2YWx1ZSBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcm93W2tleV0gPSBuZXcgRGF0ZSh2YWx1ZSBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGNoZWNrIHRoZSBNaW51dGVzIHBhdHRlcm5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoY29sLnNob3dUaW1lIHx8IGNvbC50aW1lT25seSkgJiZcbiAgICAgICAgICAgIGNvbC5taW51dGVzSW50ZXJ2YWwgJiZcbiAgICAgICAgICAgIHJvd1trZXldXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByb3dba2V5XSA9IG5ldyBEYXRlKHNldE1pbnV0ZXNJbnRlcnZhbChyb3dba2V5XSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgJiZcbiAgICAgICAgICBjb2wuZmlsdGVyPy50eXBlID09PSAnY2FsZW5kYXInICYmXG4gICAgICAgICAgY29sLmZpZWxkLnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgcm93W2NvbC5maWVsZF0gPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxJTksgJiZcbiAgICAgICAgICBjb2wuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGtleT8udG9Mb3dlckNhc2UoKSAmJlxuICAgICAgICAgIChjb2wuYWxsb3dTYXZlID09PSB0cnVlIHx8IGNvbC5hbGxvd1NhdmUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKGNvbC5lZGl0TGluayA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcm93W2NvbC5maWVsZCArICdfb2JqJ10uaHlwZXJsaW5rID0gcm93W2NvbC5maWVsZCArICdfb2JqJ10/Lmh5cGVybGluaztcbiAgICAgICAgICAgIHJvd1tjb2wuZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0ID0gJyc7XG4gICAgICAgICAgfSBlbHNlIGlmIChjb2wuZWRpdExpbmsgPT09IGZhbHNlIHx8IGNvbC5lZGl0TGluayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByb3dba2V5XSA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmVkaXRSb3dzUmVjb3Jkc1tyb3dbdGhpcy5kYXRhS2V5XV0gPSB7IC4uLnJvdyB9O1xuICAgIHRoaXMuZWRpdGluZ1Jvd0tleXNbcm93W3RoaXMuZGF0YUtleV1dID0gdHJ1ZTtcbiAgICB0aGlzLmNoZWNrQWN0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLmRyb3Bkb3duSW5wdXQgPSB0cnVlO1xuICAgIHRoaXMucm93Q2xpY2tEYXRhID0gcm93O1xuICAgIHRoaXMuaW5FZGl0TW9kZSA9IHRydWU7XG4gICAgdGhpcy5yb3dVcGRhdGVDaGFuZ2UgPSBmYWxzZTtcbiAgICB0aGlzLmNhbmNlbEFsbFJlY29yZHMgPSBmYWxzZTtcbiAgICB0aGlzLnNhdmVBbGxSZWNvcmQgPSBmYWxzZTtcbiAgICB0aGlzLnNvcnREaXNhYmxlZCA9IHRydWU7XG4gICAgdGhpcy5ncmlkU2VydmljZS5yb3dVcGRhdGUgPSBmYWxzZTtcbiAgICB0aGlzLm9uR3JpZFJvd0VkaXQuZW1pdChyb3cpO1xuICB9XG5cbiAgdHlwZU9mKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIHNldCBkcm9wZG93biBmaWx0ZXIgdmFsdWVcbiAgICovXG4gIHNldERyb3Bkb3duRmlsdGVyVmFsdWUoY29sOiBhbnksIHJvdzogYW55LCBrZXk6IHN0cmluZykge1xuICAgIGlmIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOICYmIGNvbC5kcm9wRG93blByb3ApIHtcbiAgICAgIGlmIChPYmplY3QudmFsdWVzKGNvbCkuc29tZSgodmFsdWUpID0+IHZhbHVlID09IGtleSkpIHtcbiAgICAgICAgbGV0IG9iaiA9IGNvbC5kcm9wRG93blByb3A7XG4gICAgICAgIGxldCBuZXdGaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICAgICAgaWYgKG9iai5maWx0ZXJzICYmIG9iai5maWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBvYmouZmlsdGVycy5mb3JFYWNoKChmaWx0ZXI6IGFueSkgPT4ge1xuICAgICAgICAgICAgbGV0IG5ld0ZpbHRlciA9IHsgLi4uZmlsdGVyIH07XG4gICAgICAgICAgICBsZXQgZmlsdGVyS2V5ID0gT2JqZWN0LmtleXMocm93KS5maW5kKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgbGV0IG1hdGNoS2V5OiBzdHJpbmcgPSAnJztcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZT8uaW5jbHVkZXMoJ3snKSAmJlxuICAgICAgICAgICAgICAgIGtleS50b0xvd2VyQ2FzZSgpID09PVxuICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZVxuICAgICAgICAgICAgICAgICAgPy50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICA/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCd7JywgJycpXG4gICAgICAgICAgICAgICAgICAucmVwbGFjZSgnfScsICcnKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBtYXRjaEtleSA9IGtleTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hLZXk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJLZXkpIHtcbiAgICAgICAgICAgICAgbmV3RmlsdGVyLnZhbHVlID0gcm93W2ZpbHRlcktleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXdGaWx0ZXJzLnB1c2gobmV3RmlsdGVyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc2V0RHJvcGRvd25EYXRhKFxuICAgICAgICAgIGNvbCxcbiAgICAgICAgICBvYmoudW5pcXVlS2V5LFxuICAgICAgICAgIG9iai52YWx1ZVByb3AsXG4gICAgICAgICAgb2JqLmxhYmVsUHJvcCxcbiAgICAgICAgICBuZXdGaWx0ZXJzLFxuICAgICAgICAgIHJvd1xuICAgICAgICApO1xuXG4gICAgICAgIGxldCBvcHRpb24gPSBjb2wuZGF0YS5maW5kKFxuICAgICAgICAgICh4OiBhbnkpID0+IHgubGFiZWwgPT09IHJvd1tjb2wuZmllbGRdPy50b1N0cmluZygpXG4gICAgICAgICk7XG4gICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICByb3dbY29sLmZpZWxkXSA9IG9wdGlvbi52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcm93XG4gICAqIFBhc3NlcyB0aGUgZWRpdGVkIG9yIG5ld2x5IGNyZWF0ZWQgZGF0YSB0byBwYXJlbnRcbiAgICogSW4gY2FzZSBvZiBuZXdseSBjcmVhdGVkIGRhdGEsIGRhdGFLZXkgYW5kIGlzTmV3IHByb3AgaXMgcmVtb3ZlZFxuICAgKi9cbiAgb25Sb3dFZGl0U2F2ZShzZWxlY3RlZFJvdzogYW55KSB7XG4gICAgdGhpcy50ZW1wU2F2ZWRSb3cgPSBbXTtcbiAgICBsZXQgYXV0b21Db21wbGV0ZVRlbXBEYXRhID0gW107XG4gICAgbGV0IGxvb2t1cEluZm86IGFueSA9IHt9O1xuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICBkZWxldGUgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkICsgJy1kYXRhJ107XG4gICAgICBkZWxldGUgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkICsgJ19zZWNvbmRUeXBlJ107XG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUICYmXG4gICAgICAgIChjb2x1bW4uYWxsb3dTYXZlID09PSB0cnVlIHx8IGNvbHVtbi5hbGxvd1NhdmUgPT09IHVuZGVmaW5lZClcbiAgICAgICkge1xuICAgICAgICBpZiAodHlwZW9mIChzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXT8udmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnRleHQpIHtcbiAgICAgICAgICBsb29rdXBJbmZvW2NvbHVtbi5maWVsZF0gPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLnRleHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXIpIHtcbiAgICAgICAgbGV0IHZhbHVlOiBhbnkgPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdO1xuICAgICAgICBpZiAoY29sdW1uLmZvcm1hdHRlciA9PT0gJ2NoYXInKSB7XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZSA9PT0gdHJ1ZSA/ICdZJyA6ICdOJztcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZm9ybWF0dGVyID09PSAnbnVtZXJpYycpIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlID09PSB0cnVlID8gJzEnIDogJzAnO1xuICAgICAgICB9XG4gICAgICAgIHNlbGVjdGVkUm93ID0geyAuLi5zZWxlY3RlZFJvdywgW2NvbHVtbi5maWVsZF06IHZhbHVlIH07XG4gICAgICB9XG5cbiAgICAgIC8vY29udmVydCBkcm9wRG93biBvcHRpb25MYWJlbCBpbnRvIG9wdGlvblZhbHVlXG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04gJiYgY29sdW1uLmRhdGE/Lmxlbmd0aCA+IDAgJiYgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXVxuICAgICAgKSB7XG4gICAgICAgIGxldCBvcHRpb25MYWJlbDtcbiAgICAgICAgaWYgKGlzTmFOKE51bWJlcihzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdKSkpIHtcbiAgICAgICAgICBvcHRpb25MYWJlbCA9IGNvbHVtbi5kYXRhLmZpbmQoKHJlY29yZCkgPT4gcmVjb3JkWydsYWJlbCddPy50b0xvd2VyQ2FzZSgpID09PSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdPy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvcHRpb25MYWJlbCA9IGNvbHVtbi5kYXRhLmZpbmQoKHJlY29yZCkgPT4gcmVjb3JkWydsYWJlbCddID09PSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9uTGFiZWw/LnZhbHVlKSB7XG4gICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IG9wdGlvbkxhYmVsLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vY29udmVydCBkYXRlIGludG8gdGltZSBmb3JtYXRcbiAgICAgIGlmIChcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFXG4gICAgICApIHtcbiAgICAgICAgaWYgKGNvbHVtbi50aW1lT25seSAmJiBjb2x1bW4uc2F2ZUFzU3RyaW5nICYmIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0pIHtcbiAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSwgJ2hoOm1tIGEnKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udGltZU9ubHkgJiYgIWNvbHVtbi5zYXZlQXNTdHJpbmcgJiYgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSkge1xuICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdLCAneXl5eS1NTS1kZCBISDptbTpzcycpO1xuICAgICAgICB9IGVsc2UgaWYgKCFjb2x1bW4udGltZU9ubHkgJiYgKGNvbHVtbi5zaG93VGltZSB8fCBjb2x1bW4uZm9ybWF0ID09PSBFR3JpZEZvcm1hdFR5cGUuTE9OR0RBVEUpKSB7XG4gICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0sICd5eXl5LU1NLWRkIEhIOm1tOnNzJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSAmJiAhY29sdW1uLnRpbWVPbmx5KSB7XG4gICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IG5ldyBEYXRlKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0pPy50b0xvY2FsZURhdGVTdHJpbmcoXCJlbi1VU1wiKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBpZiBhbGxvd0NhbGN1bGF0ZT10cnVlLCBkaXZpZGUgdGhlIHBlcmNlbnQgYnkgMTAwXG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5OVU1FUklDKSB7XG4gICAgICAgIGlmICh0aGlzLm51bWVyaWNWYWx1ZSkge1xuICAgICAgICAgIHRoaXMubnVtZXJpY1ZhbHVlID0ge31cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaWdpdHNJbmZvID0gY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbztcbiAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXQ/LnR5cGUgPT09ICdwZXJjZW50Jykge1xuICAgICAgICAgIGlmIChjb2x1bW4uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmFsbG93Q2FsY3VsYXRlKSB7XG4gICAgICAgICAgICBjb25zdCBjYWxjdWxhdGVkVmFsdWUgPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdPy50b1N0cmluZygpPy5pbmNsdWRlcygnLicpID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IGNhbGN1bGF0ZWRWYWx1ZSA/IHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gOiBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdIC8gMTAwO1xuICAgICAgICAgICAgaWYgKGRpZ2l0c0luZm8pIHtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHBhcnNlRmxvYXQoKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gLyAxMDApPy50b1N0cmluZygpKS50b0ZpeGVkKGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vY29udmVydCBtdWx0aXNlbGVjdCBhcnJheSBpbnRvIHN0cmluZ1xuICAgICAgaWYgKFxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk1VTFRJU0VMRUNUICYmIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF1cbiAgICAgICkge1xuICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXT8udG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2F2aW5nIEF1dG9Db21wbGV0ZSBEYXRhXG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQVVUT0NPTVBMRVRFICYmXG4gICAgICAgIGNvbHVtbi5kaXNwbGF5RmllbGQgJiZcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXT8ubGVuZ3RoID4gMFxuICAgICAgKSB7XG4gICAgICAgIGF1dG9tQ29tcGxldGVUZW1wRGF0YSA9IFsuLi5zZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdXTtcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0/Lm1hcCgocm93KSA9PiBjb2x1bW4/Lm9wdGlvblZhbHVlICYmIHJvd1tjb2x1bW4ub3B0aW9uVmFsdWU/LnRvTG93ZXJDYXNlKCldID9cbiAgICAgICAgICByb3dbY29sdW1uLm9wdGlvblZhbHVlPy50b0xvd2VyQ2FzZSgpXSA6IHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldKT8udG9TdHJpbmcoKT8ucmVwbGFjZUFsbCgnLCcsICc7Jyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBsZXQgcm93OiBhbnkgPSB7IC4uLnNlbGVjdGVkUm93IH07XG4gICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAoa2V5LmluY2x1ZGVzKCdfb2JqJykpIHtcbiAgICAgICAgbGV0IG9iajogYW55ID0gcm93W2tleV1cbiAgICAgICAgaWYgKHRoaXMuY2hlY2tBY3Rpb24gPT09IGZhbHNlICYmIG9iaj8udHlwZSAmJiAob2JqLnR5cGUgPT09ICdsaW5rJyB8fCBvYmoudHlwZSA9PT0gJ2lmcmFtZScgfHwgb2JqLnR5cGUgPT09ICdkaWFsb2cnKSkge1xuICAgICAgICAgIHJvdyA9IHsgLi4ucm93LCBba2V5LnNwbGl0KCdfJylbMF1dOiByb3dba2V5XS5kaXNwbGF5VGV4dCB9O1xuICAgICAgICAgIHRoaXMuY2hlY2tBY3Rpb24gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvYmogJiYgKG9iai50eXBlID09PSAnbGluaycgfHwgb2JqLnR5cGUgPT09ICdpZnJhbWUnIHx8IG9iai50eXBlID09PSAnZGlhbG9nJykpIHtcbiAgICAgICAgICBpZiAoIW9iai5kaXNwbGF5VGV4dCAmJiBvYmouZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT0ga2V5LnNwbGl0KCdfJylbMF0/LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIG9iai5kaXNwbGF5VGV4dCA9IHJvd1trZXkuc3BsaXQoJ18nKVswXV1cbiAgICAgICAgICB9XG4gICAgICAgICAgcm93ID0geyAuLi5yb3csIFtrZXkuc3BsaXQoJ18nKVswXV06IHJvd1trZXldLmRpc3BsYXlUZXh0IH07XG4gICAgICAgICAgZGVsZXRlIHJvd1trZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgLyoqXG4gICAgICoganVzdCBlbWl0IHRob3NlIGZpZWxkcyB3aG8gZXhpc3QgaW4gdGhlIHRhYmxlXG4gICAgICovXG4gICAgcm93ID0gdGhpcy5ncmlkU2VydmljZS5zZXRSb3dWYWx1ZShyb3cpO1xuICAgIC8vb25zb2xlLmxvZygncm93IGluIHNhdmUnLCByb3cpXG4gICAgbGV0IG9iajogYW55ID0ge307XG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIChjb2x1bW4uYWxsb3dTYXZlID09PSB0cnVlIHx8IGNvbHVtbi5hbGxvd1NhdmUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnNhdmVBbGxEYXRhKVxuICAgICAgKSB7XG4gICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF07XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRyAmJlxuICAgICAgICAgIGNvbHVtbi5maWx0ZXI/LnR5cGUgPT09ICdjYWxlbmRhcidcbiAgICAgICAgKSB7XG4gICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShcbiAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdLFxuICAgICAgICAgICAgJ3l5eXktTU0tZGRUMDA6MDA6MDAuMDAwWidcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9TZXQgRGVjaW1hbCBGcmFjdGlvbiBWYWx1ZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sdW1uLmZvcm1hdCAmJlxuICAgICAgICAgIGNvbHVtbi5mb3JtYXQudHlwZSA9PT0gRUZvcm1hdFR5cGUuREVDSU1BTCAmJlxuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdICYmXG4gICAgICAgICAgIXJvd1tjb2x1bW4uZmllbGRdLnRvU3RyaW5nKCkuaW5jbHVkZXMoJy4nKVxuICAgICAgICApIHtcbiAgICAgICAgICBsZXQgZGlnaXRzSW5mbyA9ICcuMDAnO1xuICAgICAgICAgIGxldCB6ZXJvID0gJzAnO1xuICAgICAgICAgIGNvbnN0IGZvcm1hdFBhcmFtcyA9IGNvbHVtbi5mb3JtYXQ/LmZvcm1hdFBhcmFtcztcbiAgICAgICAgICBjb25zdCBmcmFjRGlnaXRzID0gY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbztcbiAgICAgICAgICBpZiAoZnJhY0RpZ2l0cykge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBmcmFjRGlnaXRzOyBpKyspIHtcbiAgICAgICAgICAgICAgemVybyA9IHplcm8gKyAnMCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkaWdpdHNJbmZvID0gJy4nICsgemVybztcbiAgICAgICAgICB9XG4gICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXSArIGRpZ2l0c0luZm87XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHJvdy5pc05ldyB8fCByb3cuaXNuZXcgJiZcbiAgICAgICAgKGNvbHVtbi5hbGxvd1NhdmUgPT09IGZhbHNlIHx8IGNvbHVtbi5lZGl0YWJsZSA9PT0gZmFsc2UgfHwgIXRoaXMuc2F2ZUFsbERhdGEpXG4gICAgICApIHtcbiAgICAgICAgZGVsZXRlIHJvd1tjb2x1bW4uZmllbGRdO1xuICAgICAgfVxuICAgICAgY29sdW1uLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgICAgY29uc3Qgb2JqS2V5ID0gY29sdW1uPy5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJztcbiAgICAgIGlmIChyb3dbb2JqS2V5XT8uZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgIGRlbGV0ZSByb3dbb2JqS2V5XS5lcnJvck1lc3NhZ2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZGVsZXRlIHNlbGVjdGVkUm93Wyd1bmRlZmluZWQnXTtcbiAgICBvYmpbdGhpcy5kYXRhS2V5XSA9IHJvd1t0aGlzLmRhdGFLZXldOyAvLyBlbnN1cmUgZGF0YUtleSAodGVtcF9pZCkgaXMgYXZhaWxhYmxlIGZvciBkaXJ0eS1yb3cgY29tcGFyaXNvblxuICAgIHRoaXMuZ3JpZFNlcnZpY2UuY2hlY2tWYWxpZGl0eSh0aGlzLmNvbHVtbnMsIHJvdyk7XG4gICAgY29uc3QgaXNWYWxpZCA9IHRoaXMuZ3JpZFZhbGlkYXRpb24odGhpcy5jb2x1bW5zLCByb3cpO1xuXG4gICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgIC8vIHNldCB0aGUgZ3JpZCB1cGRhdGVkL2luc2VydGVkIGRhdGFcbiAgICAgIHRoaXMucm93QWN0aW9uRXZlbnRzKHNlbGVjdGVkUm93KTtcbiAgICAgIHRoaXMuYnJvd3NlckNsb3NlRXZlbnQoZmFsc2UpO1xuICAgICAgaWYgKHJvdy5pc05ldyB8fCByb3cuaXNuZXcpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnJvd3NEYXRhLmZpbmRJbmRleCgoeCkgPT4geC50ZW1wX2lkID09IHJvdy50ZW1wX2lkKTtcbiAgICAgICAgdGhpcy50ZW1wU2F2ZWRSb3cucHVzaChpbmRleCk7XG4gICAgICAgIGxldCB7IGlzTmV3LCBpc25ldywgLi4ubmV3Um93T2JqIH0gPSByb3c7XG4gICAgICAgIG5ld1Jvd09iaiA9IHRoaXMuZ3JpZFNlcnZpY2UucmVtb3ZlRXh0cmFOZXdSb3dPYmoobmV3Um93T2JqLCB0aGlzLmNvbHVtbnMpO1xuICAgICAgICBpZiAoIXRoaXMuYWRkRGF0YUtleVZhbHVlKSB7XG4gICAgICAgICAgZGVsZXRlIG5ld1Jvd09ialt0aGlzLmRhdGFLZXldO1xuICAgICAgICB9XG4gICAgICAgIG5ld1Jvd09iaiA9IHRoaXMuc2V0Um93c0RhdGEobmV3Um93T2JqKTtcbiAgICAgICAgaWYgKHRoaXMuc2F2ZUFsbFJlY29yZCkge1xuICAgICAgICAgIHRoaXMuc2F2ZVJlY29yZEFycmF5LnB1c2gobmV3Um93T2JqKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9uUm93QWRkLmVtaXQobmV3Um93T2JqKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnJvd3NEYXRhLmZpbmRJbmRleCgoeCkgPT4geC50ZW1wX2lkID09IHNlbGVjdGVkUm93LnRlbXBfaWQpO1xuICAgICAgICB0aGlzLnRlbXBTYXZlZFJvdy5wdXNoKGluZGV4KTtcbiAgICAgICAgaWYgKHRoaXMuc2F2ZUFsbFJlY29yZCkge1xuICAgICAgICAgIHRoaXMuc2F2ZVJlY29yZEFycmF5LnB1c2gob2JqKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5jaGVja2xpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgY2hlY2tsaXN0Um93cyA9IHRoaXMuc2V0Um93c0RhdGEodGhpcy5jaGVja2xpc3QpO1xuICAgICAgICAgICAgY2hlY2tsaXN0Um93cy5mb3JFYWNoKHJvdyA9PiBkZWxldGUgcm93W3RoaXMuZGF0YUtleV0pO1xuICAgICAgICAgICAgaWYgKHRoaXMub3JpZ2luYWxSb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRSb3dzID0gZ2V0Q2hhbmdlZFJvd3MoY2hlY2tsaXN0Um93cywgdGhpcy5vcmlnaW5hbFJvd3MsIHRoaXMuY29sdW1ucywgdGhpcy5kYXRhS2V5KTtcbiAgICAgICAgICAgICAgdGhpcy5vblJvd1VwZGF0ZS5lbWl0KHRoaXMucHJlcGFyZVJvd3NGb3JFbWl0KGZpbHRlcmVkUm93cykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5vblJvd1VwZGF0ZS5lbWl0KHRoaXMucHJlcGFyZVJvd3NGb3JFbWl0KGNoZWNrbGlzdFJvd3MpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkZWxldGUgb2JqW3RoaXMuZGF0YUtleV07IC8vIHJlbW92ZSB0ZW1wX2lkIGJlZm9yZSBlbWl0dGluZ1xuICAgICAgICAgICAgaWYgKHRoaXMub3JpZ2luYWxSb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgY29uc3Qgc2luZ2xlUm93QXJyYXkgPSBbb2JqXTtcbiAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRSb3dzID0gZ2V0Q2hhbmdlZFJvd3Moc2luZ2xlUm93QXJyYXksIHRoaXMub3JpZ2luYWxSb3dzLCB0aGlzLmNvbHVtbnMsIHRoaXMuZGF0YUtleSk7XG4gICAgICAgICAgICAgIHRoaXMub25Sb3dVcGRhdGUuZW1pdCh0aGlzLnByZXBhcmVSb3dzRm9yRW1pdChmaWx0ZXJlZFJvd3MubGVuZ3RoID4gMCA/IGZpbHRlcmVkUm93c1swXSA6IG51bGwpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMub25Sb3dVcGRhdGUuZW1pdCh0aGlzLnByZXBhcmVSb3dzRm9yRW1pdChvYmopKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuZWRpdGluZ1Jvd0tleXNbcm93W3RoaXMuZGF0YUtleV1dID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgICAgIGlmIChjb2x1bW4uZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgaWYgKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpICsgJ19vYmonXSkge1xuICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkgKyAnX29iaiddID0geyAuLi5zZWxlY3RlZFJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLCBlcnJvck1lc3NhZ2U6IGNvbHVtbi5lcnJvck1lc3NhZ2UgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkgKyAnX29iaiddID0geyBlcnJvck1lc3NhZ2U6IGNvbHVtbi5lcnJvck1lc3NhZ2UgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICB0aGlzLmVkaXRpbmdSb3dLZXlzW3Jvd1t0aGlzLmRhdGFLZXldXSA9IHRydWU7XG4gICAgfVxuICAgIC8vIGlmIGFsbCByb3dzIGluIHJlYWQgb25seSBtb2RlIHRoZW4gc2hvdyBlZGl0QWxsUm93cyBidXR0b24uICAgIFxuICAgIGlmIChPYmplY3QudmFsdWVzKHRoaXMuZWRpdGluZ1Jvd0tleXMpLmV2ZXJ5KCh2YWx1ZSkgPT4gIXZhbHVlKSkge1xuICAgICAgdGhpcy5pbkVkaXRNb2RlID0gZmFsc2U7XG4gICAgICB0aGlzLnNvcnREaXNhYmxlZCA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xuICAgICAgLy8gY29udmVydCBkYXRlIGludG8gdGltZVxuICAgICAgaWYgKFxuICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdICYmXG4gICAgICAgIChzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdPy50b1N0cmluZygpPy5pbmNsdWRlcygnUE0nKSB8fFxuICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCdBTScpKVxuICAgICAgKSB7XG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBzZXRUaW1lSW5EYXRlKHJvd1tjb2x1bW4uZmllbGRdKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTlVNRVJJQykge1xuICAgICAgICBjb25zdCBkaWdpdHNJbmZvID0gY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbztcbiAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXQ/LnR5cGUgPT09ICdwZXJjZW50Jykge1xuICAgICAgICAgIGlmIChjb2x1bW4uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmFsbG93Q2FsY3VsYXRlKSB7XG4gICAgICAgICAgICBpZiAoZGlnaXRzSW5mbykge1xuICAgICAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gcGFyc2VGbG9hdCgoc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSAqIDEwMCk/LnRvU3RyaW5nKCkpLnRvRml4ZWQoZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSAqIDEwMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQVVUT0NPTVBMRVRFICYmXG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF1cbiAgICAgICkge1xuICAgICAgICAvLyBzZXQgYXV0b2NvbXBlbGV0IGFycmF5IGRhdGEgYWZ0ZXIgc2F2ZSByb3dcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IGF1dG9tQ29tcGxldGVUZW1wRGF0YTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUICYmXG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gJiYgKGNvbHVtbi5hbGxvd1NhdmUgPT09IHRydWUgfHwgY29sdW1uLmFsbG93U2F2ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgKSB7XG4gICAgICAgIC8vIHNldCBMT09LVVBfSU5QVVQgZGF0YSBhZnRlciBzYXZlIHJvd1xuICAgICAgICBpZiAobG9va3VwSW5mb1tjb2x1bW4uZmllbGRdKSB7XG4gICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IGxvb2t1cEluZm9bY29sdW1uLmZpZWxkXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTiAmJlxuICAgICAgICBjb2x1bW4ub3B0aW9uTGFiZWwgJiZcbiAgICAgICAgY29sdW1uLm9wdGlvblZhbHVlXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5zZXREcm9wZG93blZhbHVlKGNvbHVtbiwgc2VsZWN0ZWRSb3cpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuYWRkTmV3Um93Q2hlY2sgPSBmYWxzZTtcbiAgICBpZiAoT2JqZWN0LnZhbHVlcyh0aGlzLmVkaXRpbmdSb3dLZXlzKS5ldmVyeSgodmFsdWUpID0+ICF2YWx1ZSkgJiYgdGhpcy5zZXRHcmlkUmVmcmVzaFRpbWUpIHtcbiAgICAgIHRoaXMucmVmcmVzaEdyaWQoKTtcbiAgICB9XG4gICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnJvd1VwZGF0ZSA9IGZhbHNlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8vIGNoZWNrIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSBmaWVsZFxuICBncmlkVmFsaWRhdGlvbihjb2x1bW5zOiBhbnksIHJvdzogYW55LCBzaW5nbGVDZWxsOiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuIHtcbiAgICBpZiAoc2luZ2xlQ2VsbCA9PSB0cnVlKSB7XG4gICAgICBjb2x1bW5zID0gW3sgLi4uY29sdW1ucyB9XVxuICAgIH1cbiAgICBpZiAoIXRoaXMuZ3JpZFNlcnZpY2UuY2hlY2tWYWxpZGl0eShjb2x1bW5zLCByb3csIHNpbmdsZUNlbGwpKSB7XG4gICAgICBsZXQgZXJyb3JNZXNzYWdlRGV0YWlsczogc3RyaW5nID0gJyc7XG4gICAgICBjb2x1bW5zPy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbi5lcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICBlcnJvck1lc3NhZ2VEZXRhaWxzID0gZXJyb3JNZXNzYWdlRGV0YWlscyA/IGVycm9yTWVzc2FnZURldGFpbHMgKyAnICwgJyArIGNvbHVtbi5lcnJvck1lc3NhZ2UgOiBjb2x1bW4uZXJyb3JNZXNzYWdlO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgbGV0IGlzUmVxdWlyZWQgPSBjb2x1bW5zLnNvbWUoXG4gICAgICAgIChjb2x1bW46IGFueSkgPT4gY29sdW1uLmVycm9yTWVzc2FnZSAmJiAocm93W2NvbHVtbi5maWVsZF0gPT09IG51bGwgfHwgcm93W2NvbHVtbi5maWVsZF0gPT09IHVuZGVmaW5lZCB8fCByb3dbY29sdW1uLmZpZWxkXSA9PT0gJycpXG4gICAgICApO1xuICAgICAgaWYgKGlzUmVxdWlyZWQgJiYgIXNpbmdsZUNlbGwpIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXG4gICAgICAgICAgZXJyb3JNZXNzYWdlRGV0YWlscyxcbiAgICAgICAgICA1MDAwLFxuICAgICAgICAgICdSRVFVSVJFRCBGSUVMRCdcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKGVycm9yTWVzc2FnZURldGFpbHMsIDUwMDAsICdJTlZBTElEIEZJRUxEJyk7XG4gICAgICAgIGlmIChzaW5nbGVDZWxsKSB7XG4gICAgICAgICAgdGhpcy5zZXRFcnJvckNlbGwoY29sdW1uc1swXSwgcm93KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzaW5nbGVDZWxsKSB7XG4gICAgICAgIHRoaXMuc2V0RXJyb3JDZWxsKGNvbHVtbnNbMF0sIHJvdylcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICBzZXRFcnJvckNlbGwoY29sdW1uLCByb3cpIHtcbiAgICBpZiAoY29sdW1uLmVycm9yTWVzc2FnZSkge1xuICAgICAgaWYgKHJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSArICdfb2JqJ10pIHtcbiAgICAgICAgcm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpICsgJ19vYmonXSA9IHsgLi4ucm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10sIGVycm9yTWVzc2FnZTogY29sdW1uLmVycm9yTWVzc2FnZSB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpICsgJ19vYmonXSA9IHsgZXJyb3JNZXNzYWdlOiBjb2x1bW4uZXJyb3JNZXNzYWdlIH07XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYgKHJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSArICdfb2JqJ10pIHtcbiAgICAgICAgZGVsZXRlIHJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSArICdfb2JqJ10uZXJyb3JNZXNzYWdlXG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcm93IDogYW55XG4gICAqIEBwYXJhbSBpbmRleCA6IG51bWJlclxuICAgKiBDbGVhcnMgb3V0IHRoZSBlZGl0IHJvdyBhbmQgcmVwbGFjZSB3aXRoIHJlYWRhYmxlIG9uZVxuICAgKi9cbiAgb25Sb3dFZGl0Q2FuY2VsKHJvdzogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgbGV0IHJvd0luRWRpdE1vZGU6IGJvb2xlYW4gPSBPYmplY3QudmFsdWVzKHRoaXMuZWRpdGluZ1Jvd0tleXMpLmV2ZXJ5KCh2YWx1ZSkgPT4gIXZhbHVlKTtcbiAgICBpZiAocm93Py5pc05ldykge1xuICAgICAgdGhpcy5yb3dzRGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvd3NEYXRhW2luZGV4XSA9IHRoaXMuZWRpdFJvd3NSZWNvcmRzW3Jvd1t0aGlzLmRhdGFLZXldXTtcbiAgICAgIGRlbGV0ZSB0aGlzLmVkaXRSb3dzUmVjb3Jkc1tyb3dbdGhpcy5kYXRhS2V5XV07XG4gICAgfVxuICAgIGRlbGV0ZSB0aGlzLmVkaXRpbmdSb3dLZXlzW3Jvd1t0aGlzLmRhdGFLZXldXTtcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTikge1xuICAgICAgICB0aGlzLnNldERyb3Bkb3duVmFsdWUoY29sdW1uLCByb3cpO1xuICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCAmJiBjb2x1bW4uZGlzcGxheUZpZWxkKSB7XG4gICAgICAgIHRoaXMucm93c0RhdGFbaW5kZXhdW2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXT8udmFsdWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5pbkVkaXRNb2RlID0gZmFsc2U7XG4gICAgaWYgKHJvd0luRWRpdE1vZGUpIHtcbiAgICAgIHRoaXMuc29ydERpc2FibGVkID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuYWRkTmV3Um93Q2hlY2sgPSBmYWxzZTtcbiAgICB0aGlzLnJvd1VwZGF0ZUNoYW5nZSA9IGZhbHNlO1xuICAgIHRoaXMuaW5saW5lUm93Q2FuY2VsLmVtaXQocm93KTtcbiAgICBpZiAocm93SW5FZGl0TW9kZSAmJiB0aGlzLnNldEdyaWRSZWZyZXNoVGltZSkge1xuICAgICAgdGhpcy5yZWZyZXNoR3JpZCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBcbiAgICpcbiAgICpcbiAgICogQHBhcmFtIHJvd1xuICAgKiBTZW5kcyB0aGUgcm93IHBheWxvYWQgdG8gcGFyZW50IGZvciBkZWxldGlvbnNcbiAgICovXG5cbiAgLyoqXG4gICpzZXQgdGhlIGdyaWREYXRhIG9uIHJvdyBhY3Rpb25zIGV2ZW50c1xuICAqL1xuICByb3dBY3Rpb25FdmVudHMocm93SW5mbywgZGVsZXRlUm93OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBsZXQgYWN0aW9uOiBzdHJpbmcgPSAnJztcbiAgICBsZXQgZ3JpZFJvd3NEYXRhOiBhbnlbXSA9IFsuLi50aGlzLnJvd3NEYXRhXTtcbiAgICBjb25zdCBpbmRleCA9IGdyaWRSb3dzRGF0YS5maW5kSW5kZXgoKHJvd0RhdGEpID0+IHJvd0luZm9bdGhpcy5kYXRhS2V5XSA9PT0gcm93RGF0YVt0aGlzLmRhdGFLZXldKTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgaWYgKGRlbGV0ZVJvdykge1xuICAgICAgICBncmlkUm93c0RhdGEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgdGhpcy5yb3dzRGF0YSA9IFsuLi5ncmlkUm93c0RhdGFdO1xuICAgICAgICBhY3Rpb24gPSAnZGVsZXRlJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmFkZE5ld1Jvd0NoZWNrKSB7XG4gICAgICAgICAgYWN0aW9uID0gJ2luc2VydCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWN0aW9uID0gJ3VwZGF0ZSc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub25HcmlkUm93QWN0aW9ucy5vYnNlcnZlcnMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgcm93SW5mb1sncm93QWN0aW9uJ10gPSBhY3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgZ3JpZFJvd3NEYXRhW2luZGV4XSA9IHJvd0luZm87XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZ2VuZXJhdGVSb3dzRGF0YUNvcHkgPSBmYWxzZTtcbiAgICB0aGlzLnJvd1VwZGF0ZUNoYW5nZSA9IGZhbHNlO1xuICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICAgIHRoaXMub25HcmlkUm93QWN0aW9ucy5lbWl0KGdyaWRSb3dzRGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogb3BlbiBEZWxldGUgY29uZmlybWF0aW9uIGRpYWxvZyB3aGVuIHRyeWluZyB0byBkZWxldGUgcm93XG4gICAqL1xuICBkZWxldGVSZWNvcmQocm93OiBhbnkpIHtcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICBtZXNzYWdlOiAnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgcmVjb3JkPycsXG4gICAgICBoZWFkZXI6ICdEZWxldGUgQ29uZmlybWF0aW9uJyxcbiAgICAgIGljb246ICdwaSBwaS1leGNsYW1hdGlvbi10cmlhbmdsZScsXG4gICAgICBrZXk6ICdoYW5kbGVJbmxpbmVDUlVEJyxcbiAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy51c2VTZXJ2ZXJTaWRlRXZlbnRzKSB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzZXQgdGhlIGdyaWQgZGVsZXRlZCBkYXRhIFxuICAgICAgICB0aGlzLnJvd0FjdGlvbkV2ZW50cyhyb3csIHRydWUpO1xuICAgICAgICB0aGlzLm9uUm93RGVsZXRlLmVtaXQocm93KTtcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNsb3NlKCk7XG4gICAgICAgIHRoaXMuaW5FZGl0TW9kZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICByZWplY3Q6ICgpID0+IHtcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNsb3NlKCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvIHNldCBkaXNhYmxlZCB0aGUgY29udHJvbFxuICAgKi9cbiAgYWxsb3dEaXNhYmxlZChjb2x1bW46IGFueSwgcm93OiBhbnkpOiBib29sZWFuIHtcbiAgICBsZXQgdmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBpZiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gJiYgdHlwZW9mIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSkgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIE9iamVjdC5rZXlzKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddKT8uaW5jbHVkZXMoJ2Rpc2FibGVkJykgJiYgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc2FibGVkID09PSB0cnVlXG4gICAgICApIHtcbiAgICAgICAgdmFsdWUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoXG4gICAgICAgIE9iamVjdC5rZXlzKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddKT8uaW5jbHVkZXMoJ3Jvd0Rpc2FibGVkJykgJiYgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnJvd0Rpc2FibGVkID09PSB0cnVlXG4gICAgICApIHtcbiAgICAgICAgdmFsdWUgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29sdW1uLmRpc2FibGVkKSB7XG4gICAgICB2YWx1ZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUbyBzZXQgYWdncmVnYXRlIGluIGdyaWQgZm9vdGVyXG4gICAqL1xuICBzZXRBZ2dyZWdhdGVUZXh0KGNvbHVtbjogSUdyaWRDb2x1bW4pIHtcbiAgICBpZiAoY29sdW1uPy5hZ2dyZWdhdGUpIHtcbiAgICAgIGNvbHVtbi5hZ2dyZWdhdGUuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHRoaXMucm93c0RhdGEgJiYgdGhpcy5yb3dzRGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbGV0IGNvbHVtblR5cGU6IEVHcmlkQWdncmVnYXRlID0gY29sLnR5cGU7XG4gICAgICAgICAgaWYgKGNvbHVtblR5cGUgPT09IEVHcmlkQWdncmVnYXRlLkNPVU5UKSB7XG4gICAgICAgICAgICBsZXQgY291bnQgPSB0aGlzLnJvd3NEYXRhLmxlbmd0aDtcbiAgICAgICAgICAgIGNvdW50ID0gdGhpcy5zZXRGZXRjaEFnZ3JlZ2F0ZWRWYWx1ZShjb2x1bW4sIGNvdW50LCAxKTtcbiAgICAgICAgICAgIGNvbC5hZ2dyVmFsdWUgPSB0aGlzLnNldEFnZ3JlZ2F0ZUZvb3RlclRleHQoY29sLCBjb3VudCwgJ0NvdW50Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29sdW1uVHlwZSA9PT0gRUdyaWRBZ2dyZWdhdGUuU1VNIHx8XG4gICAgICAgICAgICBjb2x1bW5UeXBlID09PSBFR3JpZEFnZ3JlZ2F0ZS5BVkVSQUdFXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBjb2xWYWx1ZXM6IG51bWJlcltdID0gdGhpcy5nZXRDb2x1bW5WYWx1ZXMoY29sdW1uKTtcbiAgICAgICAgICAgIGlmIChjb2xWYWx1ZXMgJiYgY29sVmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgbGV0IHN1bSA9IGNvbFZhbHVlcy5yZWR1Y2UoKGFjYywgY3VyKSA9PiBhY2MgKyBjdXIsIDApO1xuICAgICAgICAgICAgICBpZiAoY29sdW1uVHlwZSA9PT0gRUdyaWRBZ2dyZWdhdGUuU1VNKSB7XG4gICAgICAgICAgICAgICAgc3VtID0gdGhpcy5zZXRGZXRjaEFnZ3JlZ2F0ZWRWYWx1ZShjb2x1bW4sIHN1bSwgMik7XG4gICAgICAgICAgICAgICAgY29sLmFnZ3JWYWx1ZSA9IHRoaXMuc2V0QWdncmVnYXRlRm9vdGVyVGV4dChjb2wsIHN1bSwgJ1N1bScpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChjb2x1bW5UeXBlID09PSBFR3JpZEFnZ3JlZ2F0ZS5BVkVSQUdFKSB7XG4gICAgICAgICAgICAgICAgbGV0IGF2ZXJhZ2UgPSBzdW0gLyBjb2xWYWx1ZXMubGVuZ3RoIHx8IDA7XG4gICAgICAgICAgICAgICAgYXZlcmFnZSA9IHRoaXMuc2V0RmV0Y2hBZ2dyZWdhdGVkVmFsdWUoY29sdW1uLCBhdmVyYWdlLCAzKTtcbiAgICAgICAgICAgICAgICBjb2wuYWdnclZhbHVlID0gdGhpcy5zZXRBZ2dyZWdhdGVGb290ZXJUZXh0KFxuICAgICAgICAgICAgICAgICAgY29sLFxuICAgICAgICAgICAgICAgICAgYXZlcmFnZSxcbiAgICAgICAgICAgICAgICAgICdBdmcnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2wuYWdnclZhbHVlID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNldCB0aGUgYWdncmVnYXRhaW9uIHZhbHVlIHRoYXQgY29taW5nIGZyb20gZmV0Y2hcbiAgc2V0RmV0Y2hBZ2dyZWdhdGVkVmFsdWUoY29sdW1uLCBhZ2dyZWdhdGVWYWx1ZSwgYWdncmVnYXRlQWN0aW9uKSB7XG4gICAgaWYgKHRoaXMuYWdncmVnYXRlZFJlc3VsdD8ubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgYWdncmVnYXRlZENvbHVtbiA9IHRoaXMuYWdncmVnYXRlZFJlc3VsdC5maW5kKChhZ2dyZWdhdGUpID0+IGFnZ3JlZ2F0ZS5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICYmIGFnZ3JlZ2F0ZS5hZ2dyZWdhdGlvbk9wZXJhdGlvbiA9PT0gYWdncmVnYXRlQWN0aW9uKTtcbiAgICAgIGlmIChhZ2dyZWdhdGVkQ29sdW1uKSB7XG4gICAgICAgIGFnZ3JlZ2F0ZVZhbHVlID0gYWdncmVnYXRlZENvbHVtbj8udmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIGFnZ3JlZ2F0ZVZhbHVlID0gaXNOYU4oTnVtYmVyKGFnZ3JlZ2F0ZVZhbHVlKSkgPyAwIDogTnVtYmVyKGFnZ3JlZ2F0ZVZhbHVlKTtcbiAgICByZXR1cm4gYWdncmVnYXRlVmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogc2V0IGdyaWQgQWdncmVnYXRlIHZhbHVlc1xuICAgKi9cbiAgc2V0QWdncmVnYXRlRm9vdGVyVGV4dChjb2x1bW46IGFueSwgdmFsdWU6IG51bWJlciwgZGVmYXVsdENhcHRpb246IHN0cmluZykge1xuICAgIGNvbnN0IGlzRGVjaW1hbCA9IGNvbHVtbi5mb3JtYXQ/LnR5cGUgPT09ICdkZWNpbWFsJztcbiAgICBjb25zdCBmb3JtYXRQYXJhbXMgPSBjb2x1bW4uZm9ybWF0Py5mb3JtYXRQYXJhbXM7XG4gICAgY29uc3QgZGlnaXRzSW5mbyA9IGNvbHVtbi5mb3JtYXQ/LmRpZ2l0c0luZm87XG4gICAgY29uc3QgbWluRnJhY3Rpb25EaWdpdHMgPSBmb3JtYXRQYXJhbXM/Lm1pbkZyYWN0aW9uRGlnaXRzID8/IGRpZ2l0c0luZm8gPz8gMjtcbiAgICBjb25zdCBtYXhGcmFjdGlvbkRpZ2l0cyA9IGZvcm1hdFBhcmFtcz8ubWF4RnJhY3Rpb25EaWdpdHMgPz8gZGlnaXRzSW5mbyA/PyAyO1xuICAgIGNvbnN0IGNhcHRpb24gPSBjb2x1bW4uY2FwdGlvbj8ubGVuZ3RoID4gMCA/IGNvbHVtbi5jYXB0aW9uIDogZGVmYXVsdENhcHRpb247XG5cbiAgICBpZiAoIWlzRGVjaW1hbCkgcmV0dXJuIGAke2NhcHRpb259ICR7dmFsdWU/LnRvRml4ZWQoMCk/LnJlcGxhY2UoL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2csICcsJyl9IDwvYnI+YDtcbiAgICBjb25zdCBkZWNpbWFsUG9pbnQgPSAoKCkgPT4ge1xuICAgICAgY29uc3QgZmFjdG9yID0gMTAgKiogbWF4RnJhY3Rpb25EaWdpdHM7XG4gICAgICBjb25zdCBbaW50UGFydCwgZGVjUGFydCA9ICcnXSA9IChNYXRoLnRydW5jKHZhbHVlICogZmFjdG9yKSAvIGZhY3Rvcik/LnRvU3RyaW5nKCk/LnNwbGl0KCcuJyk7XG4gICAgICByZXR1cm4gaW50UGFydC5yZXBsYWNlKC9cXEIoPz0oXFxkezN9KSsoPyFcXGQpKS9nLCAnLCcpICsgJy4nICsgZGVjUGFydD8ucGFkRW5kKG1pbkZyYWN0aW9uRGlnaXRzLCAnMCcpO1xuICAgIH0pKCk7XG4gICAgcmV0dXJuIGAke2NhcHRpb259ICR7ZGVjaW1hbFBvaW50fSA8L2JyPmA7XG4gIH1cblxuICAvKipcbiAgICogc2V0IGRlY2ltYXQgYW5kIG51bWVyaWMgdmFsdWVzXG4gICAqL1xuICBhbGxvd0xlYWRpbmdEb3QoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50Py50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBpZiAoZXZlbnQ/LmtleSA9PT0gJy4nICYmIGlucHV0Py5zZWxlY3Rpb25TdGFydCA9PT0gMCkge1xuICAgICAgaW5wdXQudmFsdWUgPSAnMC4nO1xuICAgICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cbiAgc2V0TnVtZXJpY1ZhbHVlcygpIHtcbiAgICBpZiAodGhpcy5jb2x1bW5zPy5sZW5ndGggPiAwICYmIHRoaXMucm93c0RhdGE/Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xuICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5OVU1FUklDKSB7XG4gICAgICAgICAgY29uc3QgZGlnaXRzSW5mbyA9IGNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm87XG4gICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgIGlmIChjb2x1bW4/LmZvcm1hdD8udHlwZSA9PT0gJ3BlcmNlbnQnICYmIHJvd1tjb2x1bW4uZmllbGRdKSB7XG4gICAgICAgICAgICAgIGlmIChjb2x1bW4uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmFsbG93Q2FsY3VsYXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRpZ2l0c0luZm8pIHtcbiAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcGFyc2VGbG9hdCgocm93W2NvbHVtbi5maWVsZF0gKiAxMDApPy50b1N0cmluZygpKS50b0ZpeGVkKGRpZ2l0c0luZm8pOyAgICAgICAgIC8vVEhFU0UgQ09NTUVOVEVEIE9VVCBMSU5FUyBTSE9VTEQgUlVOIE9OIFNBVkVcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXSAqIDEwMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGlnaXRzSW5mbykge1xuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcGFyc2VGbG9hdChyb3dbY29sdW1uLmZpZWxkXSkudG9GaXhlZChkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4/LmZvcm1hdD8udHlwZSA9PT0gJ2RlY2ltYWwnICYmIHJvd1tjb2x1bW4uZmllbGRdKSB7XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcGFyc2VGbG9hdChyb3dbY29sdW1uLmZpZWxkXSkudG9GaXhlZCgzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogZ2V0IGNvbHVtbiB2YWx1ZSBiYXNlZCBvbiBjb2x1bW4gZmllbGRcbiAgICovXG4gIGdldENvbHVtblZhbHVlcyhjb2x1bW46IElHcmlkQ29sdW1uKTogbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLnJvd3NEYXRhXG4gICAgICAubWFwKChyb3cpID0+IHtcbiAgICAgICAgY29uc3Qgb2JqVGV4dCA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy50ZXh0O1xuICAgICAgICBsZXQgdmFsdWUgPSBvYmpUZXh0ICE9IG51bGwgPyBvYmpUZXh0IDogcm93W2NvbHVtbi5maWVsZF07XG4gICAgICAgIHJldHVybiBpc05hTihOdW1iZXIodmFsdWUpKSA/IDAgOiBOdW1iZXIodmFsdWUpO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKHZhbCkgPT4gdmFsICE9IG51bGwpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEV4cG9ydCB0byBQREZcbiAgICovXG4gIGV4cG9ydFBkZigpIHtcbiAgICB2YXIgZXhwb3J0RGF0YSA9IHRoaXMuc2V0RXhwb3J0RGF0YShbLi4udGhpcy5yb3dzRGF0YV0sIHRydWUpO1xuICAgIGxldCBkb2MgPSBuZXcganNQREYoJ3AnLCAncHQnKTtcbiAgICBkb2MudGFibGUoMSwgMSwgZXhwb3J0RGF0YS5yb3dzLCBleHBvcnREYXRhLmhlYWRpbmdzLCB7IGF1dG9TaXplOiB0cnVlIH0pO1xuICAgIGRvYy5zYXZlKCdFeHBvcnQucGRmJyk7XG4gIH1cblxuICAvKipcbiAgICogIFN1Yi1mdW5jdGlvbiB0byBzZXQgcm93cyBmb3IgZXhwb3J0IHRvIFBkZiwgYW5kIEV4Y2VsXG4gICAqIEByb3dzIHBhcmFtIGZvciByb3dzXG4gICAqIEBpc0V4Y2VsIHBhcmFtIGZvciBleHBvcnQgdG8gZXhjZWwgaW5kaWNhdGlvblxuICAgKi9cbiAgc2V0RXhwb3J0RGF0YShyb3dzOiBhbnlbXSA9IFtdLCBpc1BkZjogYm9vbGVhbiA9IGZhbHNlKTogSUdyaWREYXRhRXhwb3J0IHtcbiAgICBjb25zdCBoZWFkaW5nczogYW55ID0gdGhpcy5jb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4uZmllbGQpO1xuICAgIHJvd3MuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICBmb3IgKHZhciBwcm9wIGluIHJvdykge1xuICAgICAgICBpZiAoIWhlYWRpbmdzLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgZGVsZXRlIHJvd1twcm9wXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQZGYpIHtcbiAgICAgICAgICByb3dbcHJvcF0gPVxuICAgICAgICAgICAgIXJvd1twcm9wXSAmJiB0eXBlb2Ygcm93W3Byb3BdICE9PSAnYm9vbGVhbidcbiAgICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgICA6IHJvd1twcm9wXS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHsgcm93cywgaGVhZGluZ3MgfTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBFeHBvcnQgdG8gRXhjZWxcbiAgICovXG4gIGV4cG9ydEV4Y2VsKCkge1xuICAgIGlmICh0aGlzLmNvbmZpZ1NlcnZpY2UuZXhwb3J0VG9FeGNlbD8udW5pcXVlS2V5KSB7XG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5nZXRVc2Vyc0RhdGEoKS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGxldCByb3dzID0gdGhpcy5ncmlkU2VydmljZS5zZXREYXRhRmllbGRzKHJlc3BvbnNlPy5yZWNvcmRzKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZXhwb3J0RmlsZShyb3dzKTtcbiAgICAgIH0sXG4gICAgICAgICh7IGVycm9yIH0pID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hcGlFcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZXhwb3J0RmlsZSh0aGlzLnJvd3NEYXRhKTtcbiAgICB9XG4gIH1cblxuICBleHBvcnRGaWxlKHJlY29yZHMpIHtcbiAgICBsZXQgYXJyOiBhbnkgPSBbXTtcbiAgICByZWNvcmRzLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICBsZXQgb2JqOiBhbnkgPSB7fTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGdyaWRIZWFkZXIgPSBjb2x1bW4uaGVhZGVyO1xuICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MSU5LKSB7XG4gICAgICAgICAgY29uc3QgbGlua09iaiA9IHJvd1tjb2x1bW4uZGlzcGxheVRleHQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddO1xuICAgICAgICAgIG9ialtncmlkSGVhZGVyXSA9IHJvd1tjb2x1bW4uZmllbGRdICsgJ3wnICsgbGlua09iaj8uaHlwZXJsaW5rO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9ialtncmlkSGVhZGVyXSA9IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGFyci5wdXNoKG9iaik7XG4gICAgfSk7XG4gICAgdGhpcy5ncmlkU2VydmljZS5leHBvcnRFeGNlbChhcnIsIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLCBFR3JpZEV4Y2VsLkVYUE9SVCk7XG4gIH1cbiAgZ2V0VXNlcnNEYXRhKCkge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RTZXJ2aWNlLmdldDxhbnlbXSwgUmVxdWVzdER0bz4oJy9EYXRhL0ZldGNoJywge1xuICAgICAgdW5pcXVlS2V5OiB0aGlzLmNvbmZpZ1NlcnZpY2UuZXhwb3J0VG9FeGNlbD8udW5pcXVlS2V5LFxuICAgICAgZmlsdGVyczogdGhpcy5jb25maWdTZXJ2aWNlLmV4cG9ydFRvRXhjZWw/LmZpbHRlcnMsXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqc2V0IGNvbmZpZyBkYXRhIG9mIGxvb2t1cCBjb250cm9sIGRpYWxvZ1xuICAgKi9cbiAgc2V0TG9va3VwRGlhbG9nQ29uZmlnKHJvdzogYW55LCBjb2x1bW46IGFueSwgZGF0YTogYW55KSB7XG4gICAgbGV0IHNlbGVjdGlvbjogc3RyaW5nID0gJyc7XG4gICAgaWYgKHJvd1tjb2x1bW4uZmllbGRdICYmIHR5cGVvZiByb3dbY29sdW1uLmZpZWxkXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHNlbGVjdGlvbiA9IHJvd1tjb2x1bW4uZmllbGRdLnRleHQ7XG4gICAgfSBlbHNlIGlmIChjb2x1bW4uZGlzcGxheUZpZWxkICYmIHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXSkge1xuICAgICAgc2VsZWN0aW9uID0gcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWxlY3Rpb24gPSByb3dbY29sdW1uLmZpZWxkXTtcbiAgICB9XG5cbiAgICBpZiAoY29sdW1uLmZpZWxkICYmIHR5cGVvZiByb3dbY29sdW1uLmZpZWxkXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnN0IG5ld1JvdyA9IHsgLi4ucm93IH07XG4gICAgICBuZXdSb3dbY29sdW1uLmZpZWxkXSA9IG5ld1Jvd1tjb2x1bW4uZmllbGRdPy52YWx1ZTtcbiAgICAgIHJvdyA9IHsgLi4ubmV3Um93IH07XG4gICAgfVxuXG4gICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUICYmIGRhdGEpIHtcbiAgICAgIGxldCBvYmogPSBhdXRvU2V0TG9va3VwRGF0YShkYXRhLCByb3cpO1xuICAgICAgcm93W2NvbHVtbi5maWVsZCArICctZGF0YSddID0gb2JqO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgcm93RGF0YTogcm93W2NvbHVtbi5maWVsZCArICctZGF0YSddLFxuICAgICAgc2VsZWN0aW9uOiBzZWxlY3Rpb24sXG4gICAgICBjb2x1bW46IGNvbHVtbixcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIG9wZW4gbGluayBvbiBsb29rdXBDb250cm9sIGNvbnRyb2wgaW4gcmVhZCBvbmx5IG1vZGUgd2hlbiBlZGl0TGluayBzZXQgdHJ1ZVxuICAgKi9cbiAgb3Blbkxvb2t1cEh5cGVybGluayhjb2x1bW46IElHcmlkQ29sdW1uLCByb3c6IGFueSkge1xuICAgIGNvbnN0IGxvb2t1cEluZm8gPSBjb2x1bW4ubG9va3VwQ29udHJvbDtcbiAgICBpZiAoY29sdW1uLmVkaXRMaW5rID09PSB0cnVlICYmIGxvb2t1cEluZm8uY29tcG9uZW50KSB7XG4gICAgICBjb25zdCBkYXRhID0gbG9va3VwSW5mby5kYXRhID8gbG9va3VwSW5mby5kYXRhIDogbG9va3VwSW5mby5kYXRhLmRhdGE7XG4gICAgICBsZXQgb2JqOiBhbnkgPSB0aGlzLnNldExvb2t1cERpYWxvZ0NvbmZpZyhyb3csIGNvbHVtbiwgZGF0YSk7XG4gICAgICBvYmpbJ2NvbXBvbmVudCddID0gbG9va3VwSW5mby5jb21wb25lbnQ7XG4gICAgICBjb25zdCByZWYgPSB0aGlzLm9wZW5Mb29rdXBEaWFsb2cob2JqKTtcbiAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAgIC5waXBlKHRha2UoMSkpIC8vIEVtaXQgb25seSBvbmNlIHdoZW4gdGhlIHpvbmUgYmVjb21lcyBzdGFibGVcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgZHJhZ2dhYmxlRGlhbG9nKGNvbHVtbj8uZmllbGQgPyBjb2x1bW4/LmZpZWxkIDogY29sdW1uPy5oZWFkZXIpXG4gICAgICAgIH0pO1xuICAgICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgaWYgKHJlcyAmJiBjb2x1bW4ub25SZXR1cm4pIHtcbiAgICAgICAgICBjb2x1bW4ub25SZXR1cm4ocmVzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIG9wZW4gbG9va3VwIERpYWxvZ1xuICAgKi9cbiAgb3Blbkxvb2t1cERpYWxvZyhjb2x1bW4/OiBhbnksIHJvdzogYW55ID0ge30pIHtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQgPSBmYWxzZTtcbiAgICB0aGlzLmZvcm1TZXJ2aWNlLmZpZWxkRm9jdXNlZE91dCA9IGZhbHNlO1xuICAgIGNvbnN0IGNvbHVtbkRhdGEgPSBjb2x1bW4uY29sdW1uPy5sb29rdXBDb250cm9sPy5kYXRhID8gY29sdW1uLmNvbHVtbi5sb29rdXBDb250cm9sLmRhdGEgOiBjb2x1bW4uY29sdW1uLmRhdGE7XG4gICAgaWYgKHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbCkge1xuICAgICAgcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy5oZWFkZXIgPyBjb2x1bW5EYXRhLmhlYWRlciA9IHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8uaGVhZGVyIDogJydcbiAgICAgIHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8ud2lkdGggPyBjb2x1bW5EYXRhLndpZHRoID0gcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy53aWR0aCA6ICcnXG4gICAgICByb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmhlaWdodCA/IGNvbHVtbkRhdGEuaGVpZ2h0ID0gcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy5oZWlnaHQgOiAnJ1xuICAgICAgcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy52YWx1ZVByb3AgPyBjb2x1bW5EYXRhLnZhbHVlUHJvcCA9IHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8udmFsdWVQcm9wIDogXCJcIlxuICAgICAgcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy5sYWJlbFByb3AgPyBjb2x1bW5EYXRhLmxhYmVsUHJvcCA9IHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8ubGFiZWxQcm9wIDogXCJcIlxuICAgICAgcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy5kYXRhID8gY29sdW1uRGF0YS5kYXRhID0gcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy5kYXRhIDogJydcbiAgICB9XG5cbiAgICB0aGlzLmRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKGNvbHVtbi5jb21wb25lbnQsIHtcbiAgICAgIC4uLmNvbHVtbkRhdGEsXG4gICAgICBzdHlsZUNsYXNzOiAnbG9va3VwLW1vZGVsJyxcbiAgICAgIGhlaWdodDogY29sdW1uRGF0YT8uaGVpZ2h0ID8gY29sdW1uRGF0YT8uaGVpZ2h0IDogJzkwdmgnLFxuICAgICAgZGF0YToge1xuICAgICAgICBzZWxlY3Rpb246IGNvbHVtbi5zZWxlY3Rpb24sXG4gICAgICAgIGZpZWxkOiBjb2x1bW4uY29sdW1uLmZpZWxkLFxuICAgICAgICBsYWJlbFByb3A6IGNvbHVtbi5jb2x1bW4ubG9va3VwQ29udHJvbD8uZGF0YT8ubGFiZWxQcm9wLFxuICAgICAgICAuLi5jb2x1bW4ucm93RGF0YSxcbiAgICAgIH0sXG4gICAgICBjbG9zYWJsZTogdHJ1ZSxcbiAgICAgIGZvY3VzT25TaG93OiBmYWxzZVxuICAgIH0pO1xuICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWZbJ2RpYWxvZ0Nsb3NlJ10gPSB0aGlzLmRpYWxvZ1JlZi5jbG9zZTtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UgPSB0aGlzLmludGVyY2VwdERpYWxvZ0Nsb3NlLmJpbmQodGhpcywgdGhpcy5kaWFsb2dSZWYpO1xuICAgICAgfSk7XG5cbiAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgIHRoaXMuZGlhbG9nUmVmWydkaWFsb2dDbG9zZSddID0gdGhpcy5kaWFsb2dSZWYuY2xvc2U7XG4gICAgLy8gICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSA9IHRoaXMuaW50ZXJjZXB0RGlhbG9nQ2xvc2UuYmluZCh0aGlzKTtcbiAgICAvLyB9LCA4MDApO1xuXG4gICAgdGhpcy5zZXREeW5hbWljRGlhbG9nUmVmKHRoaXMuZGlhbG9nUmVmKTtcbiAgICBjb25zdCBjb21wb25lbnROYW1lID0gcm93W2NvbHVtbi5jb2x1bW4uZmllbGRdPy5uYW1lO1xuICAgIGlmIChjb21wb25lbnROYW1lKSB7XG4gICAgICB0aGlzLnBhZ2VMb2dnZXJTZXJ2aWNlLnNhdmVQYWdlTG9nZ2VySW5mbyh0aGlzLnJvdXRlci51cmw/LnN1YnN0cmluZygxKSwgY29tcG9uZW50TmFtZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRpYWxvZ1JlZjtcbiAgfVxuXG4gIGludGVyY2VwdERpYWxvZ0Nsb3NlKGRpYWxvZ1JlZjogYW55LCBldmVudDogYW55KSB7XG4gICAgY29uc3QgZGlhbG9nRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdwLWRpYWxvZycpO1xuICAgIGlmICghZGlhbG9nRWwpIHtcbiAgICAgIGRpYWxvZ1JlZj8uZGlhbG9nQ2xvc2UoZXZlbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmb3JtU2F2ZUJ1dHRvbiA9IGRpYWxvZ0VsWzBdPy5xdWVyeVNlbGVjdG9yKCcuZm9ybS1zYXZlLWJ1dHRvbicpO1xuICAgIGNvbnN0IGdyaWRTYXZlQWxsQnV0dG9uID0gZGlhbG9nRWxbMF0/LnF1ZXJ5U2VsZWN0b3IoJy5zYXZlLWFsbC1ncmlkJyk7XG4gICAgY29uc3QgaGFzVW5zYXZlZCA9IChmb3JtU2F2ZUJ1dHRvbiB8fCBncmlkU2F2ZUFsbEJ1dHRvbikgJiYgKHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCB8fCB0aGlzLmZvcm1TZXJ2aWNlLmZpZWxkRm9jdXNlZE91dCk7XG4gICAgaWYgKGhhc1Vuc2F2ZWQpIHtcbiAgICAgIGlmIChjb25maXJtKFwiWW91IHdpbGwgbG9zZSBjaGFuZ2VzIG5vdCBzYXZlZCBvbiBwYWdlLiBXb3VsZCB5b3UgbGlrZSB0byBjb250aW51ZT9cIikpIHtcbiAgICAgICAgZGlhbG9nUmVmPy5kaWFsb2dDbG9zZShldmVudCk7XG4gICAgICAgIHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkaWFsb2dSZWY/LmRpYWxvZ0Nsb3NlKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICAvLyBzZXQgZGlhbG9nIHJlZiB3aGVuIHBvcHVwIG9wZW5cbiAgc2V0RHluYW1pY0RpYWxvZ1JlZihyZWYpIHtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2UuZGlhbG9nQ29tcG9uZW50UmVmTWFwLmdldChyZWYpO1xuICAgIGNvbnN0IGR5bmFtaWNDb21wb25lbnQgPSBkaWFsb2dSZWY/Lmluc3RhbmNlIGFzIER5bmFtaWNEaWFsb2dDb21wb25lbnQ7XG4gICAgY29uc3QgYXJpYUxhYmVsbGVkQnkgPSBkeW5hbWljQ29tcG9uZW50LmdldEFyaWFMYWJlbGxlZEJ5KCk7XG4gICAgZHluYW1pY0NvbXBvbmVudC5nZXRBcmlhTGFiZWxsZWRCeSA9ICgpID0+IGFyaWFMYWJlbGxlZEJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIG9wZW4gZGlhbG9nIG9uIGxvb2t1cENvbnRyb2wgZmllbGRcbiAgICovXG4gIHNlbGVjdExvb2t1cEZpZWxkKGNvbHVtbjogYW55LCByb3c/OiBhbnkpIHtcbiAgICB0aGlzLm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdyk7XG4gICAgbGV0IG9iajogYW55ID0gdGhpcy5zZXRMb29rdXBEaWFsb2dDb25maWcoXG4gICAgICByb3csXG4gICAgICBjb2x1bW4sXG4gICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8uZGF0YVxuICAgICAgICA/IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy5kYXRhIDogY29sdW1uPy5sb29rdXBDb250cm9sPy5kYXRhPy5kYXRhXG4gICAgKTtcblxuICAgIG9ialsnY29tcG9uZW50J10gPSByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uY29tcG9uZW50ID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmNvbXBvbmVudCA6IGNvbHVtbi5sb29rdXBDb250cm9sPy5jb21wb25lbnQ7XG4gICAgY29uc3QgcmVmID0gdGhpcy5vcGVuTG9va3VwRGlhbG9nKG9iaiwgcm93KTtcbiAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgLnBpcGUodGFrZSgxKSkgLy8gRW1pdCBvbmx5IG9uY2Ugd2hlbiB0aGUgem9uZSBiZWNvbWVzIHN0YWJsZVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGRyYWdnYWJsZURpYWxvZyhjb2x1bW4/LmZpZWxkID8gY29sdW1uPy5maWVsZCA6IGNvbHVtbj8uaGVhZGVyKVxuICAgICAgfSk7XG4gICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKFxuICAgICAgKHJlcykgPT4ge1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgaWYgKCFyb3cuX2lzRWRpdGVkKSB7XG4gICAgICAgICAgICByb3cuX2lzRWRpdGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcm93Ll9pc0VkaXRlZCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5ncmlkU2VydmljZS51c2VyU2VhcmNoZWQgPSBmYWxzZTtcbiAgICAgICAgICBsZXQgdmFsdWUgPSBzZXREaWFsb2dSZXNwb25zZShcbiAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICAgIGNvbHVtbi5sb29rdXBDb250cm9sLFxuICAgICAgICAgICAgcmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXMgPSBvYmpDb252ZXJ0VG9Mb3dlcihyZXMpO1xuICAgICAgICAgIGxldCBsYWJlbFByb3AgPSBjb2x1bW4/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmxhYmVsUHJvcD8udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBsZXQgdmFsdWVQcm9wID0gY29sdW1uPy5sb29rdXBDb250cm9sPy5kYXRhPy52YWx1ZVByb3A/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgbGV0IGNvbHVtbkZpZWxkID0gY29sdW1uPy5maWVsZD8udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBpZiAoY29sdW1uLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgICAgaWYgKHJvdz8uaGFzT3duUHJvcGVydHkoY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbkZpZWxkXSA9IHJlc1t2YWx1ZVByb3AgPyB2YWx1ZVByb3AgOiBjb2x1bW5GaWVsZF07XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXSA9IHJlc1tsYWJlbFByb3AgPyBsYWJlbFByb3AgOiBjb2x1bW4uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbkZpZWxkXSA9IHtcbiAgICAgICAgICAgICAgICB0ZXh0OiByZXNbbGFiZWxQcm9wID8gbGFiZWxQcm9wIDogY29sdW1uLmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogcmVzW3ZhbHVlUHJvcCA/IHZhbHVlUHJvcCA6IGNvbHVtbkZpZWxkXSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgJiYgdmFsdWUudmFsdWUpIHtcbiAgICAgICAgICAgIHZhbHVlWydmaWVsZCddID0gY29sdW1uRmllbGQ7XG4gICAgICAgICAgICBpZiAobGFiZWxQcm9wIHx8IHZhbHVlUHJvcCkge1xuICAgICAgICAgICAgICByb3dbY29sdW1uRmllbGRdID0ge1xuICAgICAgICAgICAgICAgIHRleHQ6IHJlc1tsYWJlbFByb3AgPyBsYWJlbFByb3AgOiByZXNbbGFiZWxQcm9wXV0sXG4gICAgICAgICAgICAgICAgdmFsdWU6IHJlc1t2YWx1ZVByb3AgPyB2YWx1ZVByb3AgOiByZXNbbGFiZWxQcm9wXV0sXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByb3dbY29sdW1uRmllbGRdID0gdmFsdWUudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChsYWJlbFByb3AgfHwgdmFsdWVQcm9wKSB7XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW5GaWVsZF0gPSB7XG4gICAgICAgICAgICAgICAgdGV4dDogcmVzW2xhYmVsUHJvcCA/IGxhYmVsUHJvcCA6IHZhbHVlUHJvcCA/IHZhbHVlUHJvcCA6IHJlc1tjb2x1bW5GaWVsZF1dLFxuICAgICAgICAgICAgICAgIHZhbHVlOiByZXNbdmFsdWVQcm9wID8gdmFsdWVQcm9wIDogcmVzW2NvbHVtbkZpZWxkXV0sXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByb3dbY29sdW1uRmllbGRdID0gcmVzW2NvbHVtbkZpZWxkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiAocm93W2NvbHVtbi5maWVsZF0pID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gPSB7IC4uLnJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLCB0ZXh0OiByb3dbY29sdW1uLmZpZWxkXSB9O1xuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF0/LnZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5kaXNwbGF5RmllbGQpIHtcbiAgICAgICAgICBpZiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10pIHtcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddID0geyAuLi5yb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSwgdGV4dDogeyB0ZXh0OiByb3dbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV0sIHZhbHVlOiByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXSB9IH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddID0geyB0ZXh0OiB7IHRleHQ6IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXSwgdmFsdWU6IHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldIH0gfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocmVzKSB7XG4gICAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gPSB7IC4uLnJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLCB0ZXh0OiB7IHRleHQ6IHJlc1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldLCB2YWx1ZTogcmVzW2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0gfSB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2x1bW4ub25SZXR1cm4pIHtcbiAgICAgICAgICBjb2x1bW4ub25SZXR1cm4ocmVzLCByb3cpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3dbY29sdW1uLmZpZWxkXSAhPT0gb2JqLnNlbGVjdGlvbikge1xuICAgICAgICAgIHRoaXMuYnJvd3NlckNsb3NlRXZlbnQodHJ1ZSk7XG4gICAgICAgICAgaWYgKGNvbHVtbi5vbkNoYW5nZSkge1xuICAgICAgICAgICAgY29sdW1uLm9uQ2hhbmdlKHJvdyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKHsgZXJyb3IgfSkgPT4ge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hcGlFcnJvcihlcnJvcik7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHNldEZpbHRlckxvb2t1cChjb2x1bW46IGFueSkge1xuICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc2V0TG9va1VwRmlsdGVyKGNvbHVtbiwgdGhpcy5kaWFsb2dTZXJ2aWNlKTtcbiAgfVxuXG4gIC8vIHNldCBsb29rdXAgdmFsdWUgdGhhdCBkaXNwbGF5IGluIHJlYWRPbmx5TW9kZVxuICBzZXRMb29rdXBSZWFkT25seVZhbHVlKHJvdywgY29sdW1uKSB7XG4gICAgbGV0IHZhbHVlID0gJyc7XG4gICAgaWYgKHR5cGVvZiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnRleHQpID09PSBcIm9iamVjdFwiICYmIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy50ZXh0ICYmIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8udGV4dCk/Lmhhc093blByb3BlcnR5KCd0ZXh0JykpIHtcbiAgICAgIHZhbHVlID0gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnRleHQudGV4dDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSByb3dbY29sdW1uLmZpZWxkXTtcbiAgICAgIGlmIChjb2x1bW4uZGlzcGxheUZpZWxkKSB7XG4gICAgICAgIHZhbHVlID0gcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSByb3dbY29sdW1uLmZpZWxkXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLy8gQ2hlY2sgY2FsZW5kYXIgdmFsdWUgaXMgY2hhbmdlZCBvciBub3RcbiAgY2FsZW5kYXJDaGFuZ2VFdmVudChjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcbiAgICBsZXQgdmFsdWVDaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBpZiAoXG4gICAgICBjb2x1bW4udGltZU9ubHkgJiZcbiAgICAgIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJvd1tjb2x1bW4uZmllbGRdLCAnaGg6bW0gYScpICE9PVxuICAgICAgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5jYWxlbmRhclByZXZpb3VzVmFsdWUsICdoaDptbSBhJylcbiAgICApIHtcbiAgICAgIHZhbHVlQ2hhbmdlID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgY29sdW1uLnNob3dUaW1lICYmXG4gICAgICB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyb3dbY29sdW1uLmZpZWxkXSwgJ3l5eXktTU0tZGQgaGg6bW0nKSAhPT1cbiAgICAgIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuY2FsZW5kYXJQcmV2aW91c1ZhbHVlLCAneXl5eS1NTS1kZCBoaDptbScpXG4gICAgKSB7XG4gICAgICB2YWx1ZUNoYW5nZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJvd1tjb2x1bW4uZmllbGRdLCAneXl5eS1NTS1kZCcpICE9PVxuICAgICAgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5jYWxlbmRhclByZXZpb3VzVmFsdWUsICd5eXl5LU1NLWRkJylcbiAgICApIHtcbiAgICAgIHZhbHVlQ2hhbmdlID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHZhbHVlQ2hhbmdlKSB7XG4gICAgICB0aGlzLmJyb3dzZXJDbG9zZUV2ZW50KHRydWUpO1xuICAgICAgdGhpcy5nZW5lcmF0ZVJvd3NEYXRhQ29weSA9IGZhbHNlO1xuICAgICAgdGhpcy5yb3dVcGRhdGVDaGFuZ2UgPSB0cnVlO1xuXG4gICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICAgICAgICB9KTtcbiAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgICAgIC8vIH0sIDI1MCk7XG4gICAgICBpZiAoY29sdW1uLm9uQ2hhbmdlKSB7XG4gICAgICAgIGNvbHVtbi5vbkNoYW5nZShyb3cpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNhbGVuZGFyUHJldmlvdXNWYWx1ZSA9ICcnO1xuICB9XG5cbiAgc2V0QXV0b0NvbXBsZXRldmFsdWVPblR5cGUoY29sdW1uOiBhbnksIHJvdzogYW55LCBldmVudDogYW55ID0gW10pIHtcbiAgICBsZXQgdmFsdWUgPSBldmVudD8udGFyZ2V0Py52YWx1ZTtcbiAgICBsZXQgZmllbGQgPSBjb2x1bW4/LmZpZWxkPy50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkFVVE9DT01QTEVURSAmJiB2YWx1ZSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IHZhbHVlS2V5ID0gY29sdW1uLm9wdGlvblZhbHVlID8gY29sdW1uLm9wdGlvblZhbHVlIDogZmllbGQ7XG4gICAgICBjb25zdCBsYWJlbEtleSA9IGNvbHVtbi5vcHRpb25MYWJlbCA/IGNvbHVtbi5vcHRpb25MYWJlbCA6IGNvbHVtbi5kaXNwbGF5RmllbGQgPyBjb2x1bW4uZGlzcGxheUZpZWxkIDogZmllbGQ7XG4gICAgICBpZiAocm93W2ZpZWxkXT8ubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBhbHJlYWR5RXhpc3QgPSByb3dbZmllbGRdPy5maW5kKChyb3dJbmZvKSA9PiByb3dJbmZvW2ZpZWxkXSA9PT0gdmFsdWUpO1xuICAgICAgICBpZiAoIWFscmVhZHlFeGlzdCkge1xuICAgICAgICAgIHJvd1tmaWVsZF0gPSBbLi4ucm93W2ZpZWxkXSwgeyBbbGFiZWxLZXk/LnRvTG93ZXJDYXNlKCldOiB2YWx1ZSwgW3ZhbHVlS2V5Py50b0xvd2VyQ2FzZSgpXTogdmFsdWUsIFtmaWVsZD8udG9Mb3dlckNhc2UoKV06IHZhbHVlIH1dO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByb3dbZmllbGRdID0gW3sgW2xhYmVsS2V5Py50b0xvd2VyQ2FzZSgpXTogdmFsdWUsIFt2YWx1ZUtleT8udG9Mb3dlckNhc2UoKV06IHZhbHVlLCBbZmllbGQ/LnRvTG93ZXJDYXNlKCldOiB2YWx1ZSB9XTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGV2ZW50Py50YXJnZXQ/LnZhbHVlKSB7XG4gICAgICBldmVudC50YXJnZXQudmFsdWUgPSAnJztcbiAgICB9XG5cbiAgfVxuXG4gIG9uQXV0b0NvbXBsZXRlS2V5RW50ZXJFdmVudChlLCBjb2x1bW4sIHJvdykge1xuICAgIGlmIChjb2x1bW4udHlwZSA9PSBFR3JpZENvbHVtblR5cGUuQVVUT0NPTVBMRVRFKSB7XG4gICAgICBpZiAoY29sdW1uLmFsbG93QXV0b0NvbXBsZXRlU2F2ZSAmJiBlLnRhcmdldC52YWx1ZSAmJiAhY29sdW1uLmRhdGE/Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLnNldEF1dG9Db21wbGV0ZXZhbHVlT25UeXBlKGNvbHVtbiwgcm93LCBlKTtcbiAgICAgICAgLy8vY2hlY2sgdGhlIGNvcnJlY3QgZm9ybWF0IGlmIGRhdGEuY29udGFpbnMgY3V6IGl0cyBhbiBhcnJheSBvZiBhcnJheXMgd2l0aCBvYmplY3RzLlxuICAgICAgICBpZiAoY29uZmlybShgRG8geW91IHdhbnQgdG8gYWRkICR7ZS50YXJnZXQudmFsdWV9IHRvIHRoZSBzZWxlY3Rpb24/YCkpIHtcbiAgICAgICAgICBpZiAoY29sdW1uLnVuaXF1ZUtleSkge1xuICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSB0aGlzLmdyaWRTZXJ2aWNlXG4gICAgICAgICAgICAgIC5hZGRBdXRvQ29tcGxldGVWYWx1ZShjb2x1bW4udW5pcXVlS2V5LCBlLnRhcmdldC52YWx1ZSwgY29sdW1uLCByb3cpXG4gICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4ub25SZXR1cm4pIHtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5vblJldHVybihlLnRhcmdldC52YWx1ZSwgY29sdW1uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBvbkZvY3VzRXZlbnQoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnkpIHtcbiAgICB0aGlzLm51bWVyaWNWYWx1ZVtjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF1cbiAgfVxuXG4gIG9uRm9jdXNPdXRFdmVudChjb2x1bW46IElHcmlkQ29sdW1uLCByb3c6IGFueSwgZXZlbnQ6IGFueSA9ICcnKSB7XG4gICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTlVNRVJJQyAmJiB0aGlzLm51bWVyaWNWYWx1ZVtjb2x1bW4uZmllbGRdICE9PSByb3dbY29sdW1uLmZpZWxkXSkge1xuICAgICAgdGhpcy5vbkNoYW5nZUV2ZW50KGNvbHVtbiwgcm93KVxuICAgIH1cbiAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQgJiYgdGhpcy5pc0xvb2t1cElucHV0RWRpdGFibGUoY29sdW1uLCByb3cpKSB7XG4gICAgICB0aGlzLnJlc29sdmVMb29rdXBJbnB1dFZhbHVlKGNvbHVtbiwgcm93KTtcbiAgICB9XG4gICAgaWYgKGNvbHVtbi50eXBlICE9PSBFR3JpZENvbHVtblR5cGUuQVVUT0NPTVBMRVRFIHx8ICghY29sdW1uLmFsbG93QXV0b0NvbXBsZXRlU2F2ZSkpIHtcbiAgICAgIHRoaXMuZ3JpZFNlcnZpY2UuY2hlY2tWYWxpZGl0eShbY29sdW1uXSwgcm93KTtcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUpIHtcbiAgICAgICAgdGhpcy5jYWxlbmRhckNoYW5nZUV2ZW50KGNvbHVtbiwgcm93KTtcbiAgICAgIH1cbiAgICAgIGlmIChjb2x1bW4ub25Gb2N1c091dCkge1xuICAgICAgICBjb2x1bW4ub25Gb2N1c091dChyb3cpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgY29sdW1uLm9uUmV0dXJuICYmXG4gICAgICAgIGNvbHVtbi50eXBlICE9PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUXG4gICAgICApIHtcbiAgICAgICAgY29sdW1uLm9uUmV0dXJuKHJvdyk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkID0gZmFsc2U7XG4gICAgdGhpcy5ncmlkU2VydmljZS5yb3dVcGRhdGUgPSBmYWxzZTtcbiAgfVxuXG4gIHNldFJlcG9ydE5hbWUoY29sdW1uOiBJR3JpZFJlcG9ydEJ0biwgcm93OiBhbnkpIHtcbiAgICBsZXQgcmVwb3J0OiBhbnkgPSAnJztcbiAgICBpZiAoY29sdW1uLnJlcG9ydElkKSB7XG4gICAgICByZXBvcnQgPSBjb2x1bW4ucmVwb3J0SWQ7XG4gICAgfSBlbHNlIGlmIChyb3dbY29sdW1uPy5sYWJlbD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10gJiYgcm93W2NvbHVtbj8ubGFiZWw/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5yZXBvcnRVbmlxdWVLZXkpIHtcbiAgICAgIHJlcG9ydCA9IHJvd1tjb2x1bW4/LmxhYmVsPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ucmVwb3J0VW5pcXVlS2V5O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXBvcnQgPSBjb2x1bW4ucmVwb3J0VW5pcXVlS2V5O1xuICAgIH1cbiAgICByZXR1cm4gcmVwb3J0O1xuICB9XG5cbiAgc2V0UmVwb3J0UGFyYW1zKGNvbHVtbjogSUdyaWRSZXBvcnRCdG4sIHJvdzogYW55KSB7XG4gICAgbGV0IHJlcG9ydFBhcmFtczogYW55W10gPSBbXTtcbiAgICBpZiAocm93W2NvbHVtbj8ubGFiZWw/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddICYmIHJvd1tjb2x1bW4/LmxhYmVsPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ucmVwb3J0UGFyYW0pIHtcbiAgICAgIHJlcG9ydFBhcmFtcyA9IHJvd1tjb2x1bW4/LmxhYmVsPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ucmVwb3J0UGFyYW07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcG9ydFBhcmFtcyA9IGNvbHVtbi5wYXJhbXM7XG4gICAgfVxuICAgIHJldHVybiByZXBvcnRQYXJhbXM7XG4gIH1cblxuICBzZXRGaWx0ZXJGb2N1c091dChjb2w6IGFueSwgZmlsdGVyPzogYW55LCBldmVudD86IGFueSkge1xuICAgIHRoaXMuc2V0R3JpZEZpbHRlcihjb2wsIGZpbHRlciwgZXZlbnQpO1xuICB9XG5cbiAgbG9va3VwRmlsdGVySW5wdXROZ01vZGVsKGNvbHVtbjogYW55KTogYW55IHtcbiAgICByZXR1cm4gdHlwZW9mIGNvbHVtblsnZmlsdGVyVmFsdWVfb2JqJ10gPT09ICdvYmplY3QnICYmIGNvbHVtblsnZmlsdGVyVmFsdWVfb2JqJ10/LnRleHQgIT0gdW5kZWZpbmVkID8gY29sdW1uWydmaWx0ZXJWYWx1ZV9vYmonXS50ZXh0IDogY29sdW1uLmZpbHRlclZhbHVlO1xuICB9XG5cbiAgc2V0R3JpZEZpbHRlcihjb2w6IElHcmlkQ29sdW1uLCBmaWx0ZXI/OiBhbnksIGV2ZW50PzogYW55KSB7XG4gICAgdGhpcy5ncmlkRmlsdGVyT2JqID0geyBjb2x1bW46IGNvbCwgZmlsdGVyOiBmaWx0ZXIsIGV2ZW50OiBldmVudCB9O1xuICAgIGNvbnN0IG5ld0NvbHVtbjogYW55ID0geyAuLi5jb2wgfTtcbiAgICAvL2NoYW5nZSBmaWx0ZXIgY2FsZW5kYXIgZm9ybWF0XG4gICAgaWYgKG5ld0NvbHVtbi50eXBlID09PSAnZGF0ZScgJiYgbmV3Q29sdW1uLmZpbHRlclZhbHVlICYmIG5ld0NvbHVtbi5maWx0ZXI/LnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUikge1xuICAgICAgbmV3Q29sdW1uLmZpbHRlclZhbHVlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oY29sLmZpbHRlclZhbHVlLnRvU3RyaW5nKCkudHJpbSgpLCAneXl5eS1NTS1kZCcpO1xuICAgIH1cbiAgICBpZiAobmV3Q29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOICYmIG5ld0NvbHVtbi5maWx0ZXJWYWx1ZSAmJiBuZXdDb2x1bW4uZmlsdGVyPy50eXBlID09PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0hFQ0tCT1gpIHtcbiAgICAgIGxldCB2YWx1ZSA9IG5ld0NvbHVtbi5maWx0ZXJWYWx1ZTtcbiAgICAgIGlmIChuZXdDb2x1bW4uZm9ybWF0dGVyID09PSBFR3JpZEZvcm1hdHRlci5DSEFSKSB7XG4gICAgICAgIG5ld0NvbHVtbi5maWx0ZXJWYWx1ZSA9IHZhbHVlID09PSB0cnVlIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnWScgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICcxJyA/ICdZJyA6ICdOJztcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5maWx0ZXJPYmoobmV3Q29sdW1uKTtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYXBwbHlGaWx0ZXInLCBKU09OLnN0cmluZ2lmeShmYWxzZSkpO1xuICB9XG5cbiAgZmlsdGVyT2JqKGNvbDogYW55KSB7XG4gICAgY29uc3Qgb2JqID0ge1xuICAgICAgZmllbGQ6IGNvbC5maWVsZCxcbiAgICAgIG1hdGNoTW9kZTogY29sLm1hdGNoTW9kZSA/IGNvbC5tYXRjaE1vZGUgOiBjb2wudHlwZSA9PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUID8gRU1hdGNoTW9kZS5FUVVBTFMgOiAnc3RhcnRzV2l0aCcsXG4gICAgICBvcGVyYXRvcjogY29sLm9wZXJhdG9yID8gY29sLm9wZXJhdG9yIDogJ2FuZCcsXG4gICAgICB0YWJsZUFsaWFzOiBjb2wudGFibGVBbGlhcyA/IGNvbC50YWJsZUFsaWFzIDogJycsXG4gICAgICB2YWx1ZTogY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5NVUxUSVNFTEVDVCA/IGNvbC5maWx0ZXJWYWx1ZS50b1N0cmluZygpIDogY29sLnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCAmJiBjb2wuaGFzT3duUHJvcGVydHkoJ2ZpbHRlclZhbHVlX29iaicpID8gY29sWydmaWx0ZXJWYWx1ZV9vYmonXT8udmFsdWUgOiBjb2wuZmlsdGVyVmFsdWUsXG4gICAgfTtcbiAgICB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheS5wdXNoKG9iaik7XG4gIH1cblxuICBhcHBseUVudGVyRXZlbnQoZmlsdGVyOiBhbnksIGV2ZW50OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgdGhpcy5ncmlkU2VydmljZS51c2VyU2VhcmNoZWQgPSB0cnVlO1xuICAgIHRoaXMuZ3JpZFNlcnZpY2UuYXBwbHlGaWx0ZXJFdmVudCA9IHRydWU7XG4gICAgdGhpcy5yb3dVcGRhdGVDaGFuZ2UgPSBmYWxzZTtcbiAgICB0aGlzLmF1dG9Mb2FkRGF0YSA9IHRydWU7XG4gICAgLy90aGlzLmxvYWRpbmc9dHJ1ZTtcbiAgICB0aGlzLm9uQXBwbHlGaWx0ZXIuZW1pdCgpO1xuICAgIHRoaXMuZmlsdGVyT2JqKGNvbHVtbik7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2FwcGx5RmlsdGVyJywgSlNPTi5zdHJpbmdpZnkodHJ1ZSkpO1xuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk1VTFRJU0VMRUNUKSB7XG4gICAgICBmaWx0ZXIoY29sdW1uPy5maWx0ZXJWYWx1ZT8udG9TdHJpbmcoKSlcbiAgICB9IGVsc2UgaWYgKGNvbHVtbj8uZmlsdGVyPy50eXBlID09PSB0aGlzLmRyb3BEb3duRmlsdGVyPy5jb2x1bW4/LmZpbHRlcj8udHlwZSkge1xuICAgICAgdGhpcy5kcm9wRG93bkZpbHRlci5maWx0ZXIodGhpcy5kcm9wRG93bkZpbHRlci5ldmVudC50YXJnZXQpO1xuICAgIH0gZWxzZSBpZiAoZmlsdGVyICYmIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQk9PTEVBTiAmJiBjb2x1bW4/LmZpbHRlcj8udHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNIRUNLQk9YICYmIGNvbHVtbi5maWx0ZXJpbmcgIT09IGZhbHNlKSB7XG4gICAgICBpZiAoY29sdW1uLmZvcm1hdHRlciA9PT0gRUdyaWRGb3JtYXR0ZXIuQ0hBUikge1xuICAgICAgICBsZXQgdmFsdWUgPSBjb2x1bW4uZmlsdGVyVmFsdWU7XG4gICAgICAgIGNvbHVtbi5maWx0ZXJWYWx1ZSA9IHZhbHVlID09PSB0cnVlIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnWScgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICcxJyA/ICdZJyA6ICdOJztcbiAgICAgICAgZmlsdGVyKGNvbHVtbi5maWx0ZXJWYWx1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgZmlsdGVyKGV2ZW50Py5jaGVja2VkKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGZpbHRlcikge1xuICAgICAgZmlsdGVyKGV2ZW50Py50YXJnZXQ/LnZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZ2xvYmFsRGF0YT8ubGVuZ3RoID09IDApIHtcbiAgICAgIHRoaXMuaGFuZGxlU2VydmVyU2lkZUV2ZW50cyh0aGlzLmdyaWRmaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZU51bGxDYWxlbmRhcihjb2x1bW46IElHcmlkQ29sdW1uLCBmaWx0ZXI6IGFueSwgZXZlbnQ6IGFueSkge1xuICAgIGlmIChjb2x1bW4uZmlsdGVyVmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHRoaXMucmVtb3ZlTnVsbEZpbHRlcnMoY29sdW1uKTtcbiAgICAgIHRoaXMuc2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uLCBmaWx0ZXIsIGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBiYWNrc3BhY2VFdmVudChldmVudDogYW55LCBjb2x1bW46IGFueSkge1xuICAgIGlmIChcbiAgICAgIGV2ZW50LmtleSA9PT0gJ0JhY2tzcGFjZScgJiZcbiAgICAgIChjb2x1bW4uZmlsdGVyVmFsdWU/LnRvU3RyaW5nKCkubGVuZ3RoID09PSAxIHx8XG4gICAgICAgIGNvbHVtbi5maWx0ZXJWYWx1ZT8udG9TdHJpbmcoKSA9PT0gJycgfHxcbiAgICAgICAgY29sdW1uLmZpbHRlclZhbHVlID09PSBudWxsKVxuICAgICkge1xuICAgICAgdGhpcy5yZW1vdmVOdWxsRmlsdGVycyhjb2x1bW4pO1xuICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFICYmIGNvbHVtbi5maWx0ZXJWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5yZW1vdmVOdWxsRmlsdGVycyhjb2x1bW4pO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZU51bGxGaWx0ZXJzKGNvbHVtbjogYW55KSB7XG4gICAgaWYgKHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5ICYmIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5Lmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCBhcnIgPSBbLi4udGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXldO1xuICAgICAgbGV0IGluZGV4ID0gYXJyLmZpbmRJbmRleCgoaSkgPT4gaS5maWVsZCA9PT0gY29sdW1uLmZpZWxkKTtcbiAgICAgIGFyci5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkgPSBhcnI7XG4gICAgfVxuICAgIGxldCBpbmRleCA9IHRoaXMuc2VydmVyRmlsdGVycz8uZmlsdGVycz8uZmluZEluZGV4KChpKSA9PiB7IGkuZmllbGQgPT09IGNvbHVtbi5maWVsZCB9KVxuICAgIHRoaXMuc2VydmVyRmlsdGVycz8uZmlsdGVycz8uc3BsaWNlKGluZGV4LCAxKVxuICB9XG5cbiAgLy8gUmVtb3ZpbmcgSGVhZGVyIEZpbHRlciBWYWx1ZSB1c2luZyBCYWNrc3BhY2Uga2V5IEV2ZW50IG9yIERlbGV0ZSBrZXkgRXZlbnQuXG4gIHJlbW92aW5nRmlsdGVycyhldmVudDogYW55LCBjb2x1bW46IElHcmlkQ29sdW1uKSB7XG4gICAgaWYgKFxuICAgICAgKGV2ZW50LmtleSA9PT0gJ0JhY2tzcGFjZScgfHwgZXZlbnQua2V5ID09PSAnRGVsZXRlJykgJiZcbiAgICAgIGNvbHVtbi5maWx0ZXJWYWx1ZT8udG9TdHJpbmcoKS5sZW5ndGggPT09IDBcbiAgICApIHtcbiAgICAgIGxldCBzZWFyY2hGaWx0ZXJzO1xuICAgICAgaWYgKCF0aGlzLnNvZnRDYWNoaW5nICYmIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgIHNlYXJjaEZpbHRlcnMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdTZXRGaWx0ZXJzLScgKyB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHRoaXMuY3VycmVudFVybCkgYXMgYW55KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQpIHtcbiAgICAgICAgc2VhcmNoRmlsdGVycyA9IHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW3RoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdGhpcy5jdXJyZW50VXJsXTtcbiAgICAgIH1cbiAgICAgIGlmIChzZWFyY2hGaWx0ZXJzICYmIHNlYXJjaEZpbHRlcnMuZmlsdGVycykge1xuICAgICAgICBpZiAoc2VhcmNoRmlsdGVycy5maWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBsZXQgaW5kZXggPSBzZWFyY2hGaWx0ZXJzLmZpbHRlcnMuZmluZEluZGV4KFxuICAgICAgICAgICAgKHg6IGFueSkgPT4geC5maWVsZCA9PT0gY29sdW1uLmZpZWxkXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgaWYgKHNlYXJjaEZpbHRlcnMuZmlsdGVycy5sZW5ndGggPT09IDEgJiYgdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmxdID0gW107XG4gICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdTZXRGaWx0ZXJzLScgKyB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHRoaXMuY3VycmVudFVybCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzZWFyY2hGaWx0ZXJzLmZpbHRlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLnNvZnRDYWNoaW5nICYmIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ1NldEZpbHRlcnMtJyArIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdGhpcy5jdXJyZW50VXJsLCBKU09OLnN0cmluZ2lmeShzZWFyY2hGaWx0ZXJzKSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLnNvZnRDYWNoaW5nRmlsdGVyc1t0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHRoaXMuY3VycmVudFVybF0gPSBzZWFyY2hGaWx0ZXJzO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIENsaWNrIEJ1dHRvbiBFdmVudCBvbiBHcmlkLlxuICBvbkNsaWNrQnV0dG9uKGNvbHVtbjogYW55LCByb3c6IGFueSkge1xuICAgIHRoaXMub3BlbkdyaWREaWFsb2coY29sdW1uLCByb3cpO1xuICB9XG5cbiAgLy8gSW52b2tlIG9uQ2xpY2sgRXZlbnQuXG4gIG9uQ2xpY2tFdmVudChjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcbiAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MSU5LICYmIChjb2x1bW4uZWRpdExpbmsgPT09IGZhbHNlIHx8IGNvbHVtbi5lZGl0TGluayA9PT0gdW5kZWZpbmVkKSAmJiBjb2x1bW4uZWRpdGFibGUgIT09IHRydWUgJiYgY29sdW1uLmRpc2FibGVkICE9PSB0cnVlKSB7XG4gICAgICB0aGlzLm9uQ2xpY2tFdmVudFRyaWdnZXJlZCA9IHRydWU7XG4gICAgfVxuICAgIC8vIGlmKGNvbHVtbi50eXBlPT09RUdyaWRDb2x1bW5UeXBlLkRJQUxPRyAmJiByb3dbY29sdW1uLmZpZWxkXSl7XG4gICAgLy8gICB0aGlzLm9wZW5HcmlkRGlhbG9nKGNvbHVtbixyb3cpXG4gICAgLy8gfVxuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUgJiYgcm93W2NvbHVtbi5maWVsZF0pIHtcbiAgICAgIHRoaXMuY2FsZW5kYXJQcmV2aW91c1ZhbHVlID0gcm93W2NvbHVtbi5maWVsZF07XG4gICAgfSBlbHNlIGlmIChcbiAgICAgICFyb3dbY29sdW1uLmZpZWxkXSAmJlxuICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFICYmXG4gICAgICAoY29sdW1uLnNob3dUaW1lIHx8IGNvbHVtbi50aW1lT25seSkgJiZcbiAgICAgIGNvbHVtbi5taW51dGVzSW50ZXJ2YWxcbiAgICApIHtcbiAgICAgIHRoaXMuZGVmYXVsdERhdGUgPSBuZXcgRGF0ZShzZXRNaW51dGVzSW50ZXJ2YWwobmV3IERhdGUoKSkpO1xuICAgIH1cbiAgICBpZiAoY29sdW1uICYmIGNvbHVtbi5vbkNsaWNrICYmIGNvbHVtbi5kaXNhYmxlZCAhPT0gdHJ1ZSAmJiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmFjdGlvbj8uZGlzYWJsZWQgIT09IHRydWUgfHwgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc2FibGVkICE9PSB0cnVlICYmIGNvbHVtbi50eXBlICE9PSBFR3JpZENvbHVtblR5cGUuQk9PTEVBTikpIHtcbiAgICAgIGNvbHVtbi5vbkNsaWNrKHJvdyk7XG4gICAgfVxuICB9XG5cbiAgc2V0TXVsdGlTZWxlY3RWYWx1ZShjb2x1bW4sIHJvdykge1xuICAgIGlmIChyb3dbY29sdW1uLmZpZWxkXSAmJiAhQXJyYXkuaXNBcnJheShyb3dbY29sdW1uLmZpZWxkXSkpIHtcbiAgICAgIGlmICh0eXBlb2YgKHJvd1tjb2x1bW4uZmllbGRdKSA9PT0gXCJzdHJpbmdcIiAmJiAhcm93W2NvbHVtbi5maWVsZF0/LmluY2x1ZGVzKCcsJykpIHtcbiAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBbcm93W2NvbHVtbi5maWVsZF1dO1xuICAgICAgfSBlbHNlIGlmIChyb3dbY29sdW1uLmZpZWxkXT8udG9TdHJpbmcoKT8uaW5jbHVkZXMoJywnKSkge1xuICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHJvd1tjb2x1bW4uZmllbGRdPy5zcGxpdCgnLCcpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcm93W2NvbHVtbi5maWVsZF07XG4gIH1cblxuICAvLyBzZXQgdGhlIHNlbGVjdCB2YWx1ZSBvZiBtdWx0aS1zZWxlY3RcbiAgc2hvd09wdGlvbihjb2x1bW4sIHJvdykge1xuICAgIHJvd1tjb2x1bW4uZmllbGRdID0gdGhpcy5zZXRNdWx0aVNlbGVjdFZhbHVlKGNvbHVtbiwgcm93KTtcbiAgfVxuXG4gIG9uQ2xlYXJWYWx1ZShjb2x1bW4sIHJvdykge1xuICAgIGlmIChjb2x1bW4/LnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTiAmJiAhcm93W2NvbHVtbi5maWVsZF0pIHtcbiAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvLyBJbnZva2Ugb25DaGFuZ2UgRXZlbnRcbiAgb25DaGFuZ2VFdmVudChjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcbiAgICBpZiAoIXJvdy5faXNFZGl0ZWQpIHtcbiAgICAgIHJvdy5faXNFZGl0ZWQgPSB0cnVlO1xuICAgIH1cbiAgICAvLyBzZXQgZHJvcGRvd24gZGlzcGxheUZpZWxkIHZhbHVlIGJhc2Ugb24gb3B0aW9uTGFiZWwgJiBvcHRpb25WYWx1ZS5cbiAgICB0aGlzLmdyaWRWYWxpZGF0aW9uKGNvbHVtbiwgcm93LCB0cnVlKVxuICAgIHRoaXMuZGlzcGxheUZpZWxkRHJvcGRvd25WYWx1ZShjb2x1bW4sIHJvdyk7XG4gICAgdGhpcy5vbkNsZWFyVmFsdWUoY29sdW1uLCByb3cpO1xuICAgIHRoaXMuYnJvd3NlckNsb3NlRXZlbnQodHJ1ZSk7XG4gICAgdGhpcy5yb3dVcGRhdGVDaGFuZ2UgPSB0cnVlO1xuICAgIGlmIChjb2x1bW4ub25DaGFuZ2UpIHtcbiAgICAgIGNvbHVtbi5vbkNoYW5nZShyb3cpO1xuICAgIH1cbiAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5vbkNsaWNrRXZlbnRUcmlnZ2VyZWQgPT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHRoaXMuc2V0RHJvcGRvd25kYXRhVmFsdWUgPSBmYWxzZVxuICAgIHRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkID0gZmFsc2U7XG4gICAgdGhpcy5ncmlkU2VydmljZS5yb3dVcGRhdGUgPSBmYWxzZTtcbiAgICB0aGlzLmdlbmVyYXRlUm93c0RhdGFDb3B5ID0gZmFsc2VcbiAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSAmJiBjb2x1bW4uYWdncmVnYXRlLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuYWdncmVnYXRlRm9vdGVyID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0QWdncmVnYXRlVGV4dChjb2x1bW4pO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrQm94Q2hhbmdlRXZlbnQoZXZlbnQ6IGFueSwgY29sdW1uOiBJR3JpZENvbHVtbiwgcm93KSB7XG4gICAgaWYgKCFyb3cuX2lzRWRpdGVkKSB7XG4gICAgICByb3cuX2lzRWRpdGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcm93Ll9pc0VkaXRlZCA9IHRydWU7XG4gICAgcm93W2NvbHVtbi5maWVsZF0gPSBldmVudDtcbiAgICBpZiAodGhpcy5yb3dzQ2hhbmdlLm9ic2VydmVycz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuZ3JpZFNlcnZpY2Uucm93VXBkYXRlID0gZmFsc2U7XG4gICAgdGhpcy5nZW5lcmF0ZVJvd3NEYXRhQ29weSA9IGZhbHNlXG4gICAgdGhpcy5yb3dVcGRhdGVDaGFuZ2UgPSB0cnVlO1xuICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICAgIGlmIChjb2x1bW4ub25DbGljaykge1xuICAgICAgY29sdW1uLm9uQ2xpY2socm93KTtcbiAgICB9XG4gICAgaWYgKGNvbHVtbi5vbkNoYW5nZSkge1xuICAgICAgY29sdW1uLm9uQ2hhbmdlKHJvdyk7XG4gICAgfVxuICB9XG5cbiAgLy8gc2V0IGRyb3Bkb3duIGRpc3BsYXlGaWVsZCB2YWx1ZSBiYXNlIG9uIG9wdGlvbkxhYmVsICYgb3B0aW9uVmFsdWUuXG4gIGRpc3BsYXlGaWVsZERyb3Bkb3duVmFsdWUoY29sdW1uOiBhbnksIHJvdzogYW55KSB7XG4gICAgaWYgKFxuICAgICAgY29sdW1uPy50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04gJiZcbiAgICAgIGNvbHVtbi5kaXNwbGF5RmllbGQgJiZcbiAgICAgIGNvbHVtbi5kaXNwbGF5RmllbGQ/Lmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIGNvbnN0IGtleTogYW55ID0gT2JqZWN0LmtleXMocm93KT8uZmluZChcbiAgICAgICAgKHJvd0luZm8pID0+XG4gICAgICAgICAgcm93SW5mbz8udG9Mb3dlckNhc2UoKSA9PT0gY29sdW1uLmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXG4gICAgICApO1xuICAgICAgY29uc3QgZGlzcGxheUZpZWxkVmFsdWUgPSBjb2x1bW4uZGF0YS5maW5kKFxuICAgICAgICAocmVjb3JkOiBhbnkpID0+XG4gICAgICAgICAgcmVjb3JkW2NvbHVtbi5vcHRpb25WYWx1ZV0/LnRvU3RyaW5nKCkgPT09XG4gICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKClcbiAgICAgICk7XG4gICAgICBpZiAoa2V5ICYmIGRpc3BsYXlGaWVsZFZhbHVlKSB7XG4gICAgICAgIHJvd1trZXldID0gZGlzcGxheUZpZWxkVmFsdWVbY29sdW1uLm9wdGlvbkxhYmVsXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBZGQgYXV0b1NlYXJjaCBvbiBHcmlkLlxuICBhdXRvU2VhcmNoKGV2ZW50OiBhbnksIGNvbHVtbjogYW55LCByb3c6IGFueSkge1xuICAgIGlmIChldmVudCAmJiBjb2x1bW4gJiYgcm93KSB7XG4gICAgICBjb2x1bW4ub25SZXR1cm4oZXZlbnQucXVlcnksIGNvbHVtbiwgcm93KTtcbiAgICB9XG4gIH1cblxuICAvLyBSZWZyZXNoIGdyaWRcbiAgcmVmcmVzaEdyaWQoKSB7XG4gICAgdGhpcy5yZWxvYWRQYWdlID0gaW50ZXJ2YWwodGhpcy5zZXRHcmlkUmVmcmVzaFRpbWUpLnN1YnNjcmliZSgoeCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZ3JpZGZpbHRlciA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5ncmlkZmlsdGVyID0geyBmaWx0ZXJzOiBbXSwgc29ydHM6IFtdIH07XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zZXRHcmlkUmVmcmVzaFRpbWUpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVTZXJ2ZXJTaWRlRXZlbnRzKHRoaXMuZ3JpZGZpbHRlcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBSZW1vdmUgRmlsdGVyVmFsdWVzXG4gIGNsZWFyZ3JpZEZpbHRlcnNWYWx1ZSgpIHtcbiAgICBjb25zdCBnbG9iYWxGaWx0ZXJDbGVhclZhbHVlQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXG4gICAgICAnY2xlYXJHbG9iYWxGaWx0ZXJCdG4nXG4gICAgKTtcbiAgICBpZiAoZ2xvYmFsRmlsdGVyQ2xlYXJWYWx1ZUJ0bikge1xuICAgICAgZ2xvYmFsRmlsdGVyQ2xlYXJWYWx1ZUJ0bi5jbGljaygpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnMgJiYgdGhpcy5zZWxlY3RlZENvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zZXJ2ZXJGaWx0ZXJzLmZpbHRlcnMgPSBbXTtcbiAgICAgIGxldCBzZWFyY2hGaWx0ZXJzID0gdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmxdO1xuICAgICAgc2VhcmNoRmlsdGVycz8uZmlsdGVycz8uZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICAgIGNvbC52YWx1ZSA9IG51bGw7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgICBjb2wuZmlsdGVyVmFsdWUgPSBudWxsO1xuICAgICAgICB0aGlzLmZpbHRlck9iaihjb2wpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZWRpdEFsbFJvd3NBdE9uY2UoKSB7XG4gICAgaWYgKHRoaXMuZWRpdFJvd1Blcm1pc3Npb24pIHtcbiAgICAgIGlmICh0aGlzLmdldENsYXNzRm9yRWRpdEFsbFJvd3MoJ2VkaXRSb3cnKSkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnMuc29tZSgoY29sdW1uKSA9PiBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4gJiYgKGNvbHVtbi5maWx0ZXJpbmcgPT09IHRydWUgfHwgY29sdW1uLmZpbHRlcmluZyA9PT0gdW5kZWZpbmVkKSkpIHtcbiAgICAgICAgICB0aGlzLmVkaXRBbGxSZWNvcmQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBhZ2luYXRpb24gJiYgdGhpcy5lZGl0QWxsUmVjb3JkKSB7XG4gICAgICAgICAgdGhpcy5zb3J0RGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHRoaXMuc29ydERpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzYXZlQWxsUm93c0F0T25jZSgpIHtcbiAgICB0aGlzLmdldENsYXNzRm9yRWRpdEFsbFJvd3MoJ3NhdmVSb3cnKTtcbiAgfVxuXG4gIC8vIHJlc2V0IHRoZSBncmlkIHJvd3NWYWx1ZSB0byBvcmlnbmFsIHZhbHVlc1xuICBjYW5jZWxBbGxSb3dzQXRPbmNlKCkge1xuICAgIHRoaXMucm93c0RhdGEgPSBbLi4udGhpcy5yb3dzRGF0YUNvcHldO1xuICAgIHRoaXMucm93c0RhdGFDb3B5ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnJvd3NEYXRhKSk7XG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnM/LmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSkge1xuICAgICAgICB0aGlzLnJvd3NEYXRhPy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICBpZiAocm93W2NvbHVtbi5maWVsZF0pIHtcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gbmV3IERhdGUocm93W2NvbHVtbi5maWVsZF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgIH0pO1xuICAgIGlmICh0aGlzLmNvbHVtbnM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSAmJiBjb2x1bW4uYWdncmVnYXRlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLmFnZ3JlZ2F0ZUZvb3RlciA9IHRydWU7XG4gICAgICAgICAgdGhpcy5zZXRBZ2dyZWdhdGVUZXh0KGNvbHVtbik7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIHRoaXMub25DYW5jZWxBbGxSb3dzLmVtaXQodGhpcy5yb3dzRGF0YSk7XG4gIH1cbiAgZ2V0Q2xhc3NGb3JFZGl0QWxsUm93cyhjbGFzc05hbWU6IHN0cmluZyA9ICcnKSB7XG4gICAgbGV0IHN1Y2Nlc3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBpZiAoY2xhc3NOYW1lID09PSAnZWRpdFJvdycpIHtcbiAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICB0aGlzLm9uUm93RWRpdEluaXQocm93KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGdldEJ0bnM6IGFueSA9IHRoaXMuZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudD8uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc05hbWUpO1xuICAgIGlmIChnZXRCdG5zICYmIGdldEJ0bnMubGVuZ3RoID4gMCkge1xuICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICBpZiAoY2xhc3NOYW1lID09PSAnc2F2ZVJvdycpIHtcbiAgICAgICAgdGhpcy5lZGl0QWxsUmVjb3JkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2F2ZUFsbFJlY29yZCA9IHRydWU7XG4gICAgICAgIGNvbnN0IHJlY29yZHMkID0gW107XG4gICAgICAgIGNvbnN0IGFsbEJ0bnMgPSBBcnJheS5mcm9tKGdldEJ0bnMpO1xuXG4gICAgICAgIGFsbEJ0bnMuZm9yRWFjaCgoaXRlbTogYW55LCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMucm93c0RhdGFbaW5kZXhdO1xuICAgICAgICAgIGlmIChyb3cpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd1NhdmUgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgICBpdGVtLmNsaWNrKCk7XG4gICAgICAgICAgICAgIHJlc29sdmUoaXRlbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlY29yZHMkLnB1c2gocm93U2F2ZSk7XG4gICAgICAgICAgICByb3cuX2lzRWRpdGVkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBQcm9taXNlLmFsbChyZWNvcmRzJCkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5ncmlkU2VydmljZS5pc0dyaWRWYWxpZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2hlY2tsaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgY29uc3QgY2hlY2tsaXN0Um93cyA9IHRoaXMuc2V0Um93c0RhdGEodGhpcy5jaGVja2xpc3QpO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImNoZWNrbGlzdFwiLCB0aGlzLmNoZWNrbGlzdCk7XG4gICAgICAgICAgICAgIGNoZWNrbGlzdFJvd3MuZm9yRWFjaChyb3cgPT4gZGVsZXRlIHJvd1t0aGlzLmRhdGFLZXldKTtcbiAgICAgICAgICAgICAgaWYgKHRoaXMub3JpZ2luYWxSb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZFJvd3MgPSBnZXRDaGFuZ2VkUm93cyhjaGVja2xpc3RSb3dzLCB0aGlzLm9yaWdpbmFsUm93cywgdGhpcy5jb2x1bW5zLCB0aGlzLmRhdGFLZXkpO1xuICAgICAgICAgICAgICAgIHRoaXMub25Sb3dVcGRhdGUuZW1pdCh0aGlzLnByZXBhcmVSb3dzRm9yRW1pdChmaWx0ZXJlZFJvd3MpKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uUm93VXBkYXRlLmVtaXQodGhpcy5wcmVwYXJlUm93c0ZvckVtaXQoY2hlY2tsaXN0Um93cykpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlUm93c0RhdGFDb3B5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2F2ZVJlY29yZEFycmF5Py5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplVmFsID0gKHY6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHYgPT0gbnVsbCB8fCB2ID09PSAnJykgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICBpZiAodiBpbnN0YW5jZW9mIERhdGUpIHJldHVybiB2LnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXTtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycgJiYgL15cXGR7NH0tXFxkezJ9LVxcZHsyfVQvLnRlc3QodikpIHJldHVybiB2LnNwbGl0KCdUJylbMF07XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0kLy50ZXN0KHYpKSByZXR1cm4gdjtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycgJiYgL15cXGR7MSwyfVxcL1xcZHsxLDJ9XFwvXFxkezR9JC8udGVzdCh2KSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBbbSwgZCwgeV0gPSB2LnNwbGl0KCcvJyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHt5fS0ke20ucGFkU3RhcnQoMiwgJzAnKX0tJHtkLnBhZFN0YXJ0KDIsICcwJyl9YDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgZWRpdGFibGVGaWVsZHMgPSB0aGlzLmNvbHVtbnNcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIoYyA9PiBjLmVkaXRhYmxlICE9PSBmYWxzZSAmJiBjLmFsbG93U2F2ZSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAubWFwKGMgPT4gYy5maWVsZD8udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICAgICAgbGV0IGRpcnR5Um93cyA9IHRoaXMuc2F2ZVJlY29yZEFycmF5O1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbR3JpZENvbXBvbmVudF0gc2F2ZVJlY29yZEFycmF5IGxlbmd0aDonLCB0aGlzLnNhdmVSZWNvcmRBcnJheS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbR3JpZENvbXBvbmVudF0gb3JpZ2luYWxSb3dzIGxlbmd0aDonLCB0aGlzLm9yaWdpbmFsUm93cy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9yaWdpbmFsUm93cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAvLyBOb3JtYWxpemUgcm93cyBiZWZvcmUgY29tcGFyaXNvbiB0byByZW1vdmUgZGlzcGxheS1vbmx5IHByb3BlcnRpZXNcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRDdXJyZW50ID0gdGhpcy5zYXZlUmVjb3JkQXJyYXkubWFwKHIgPT4gdGhpcy5ncmlkU2VydmljZS5nZXRBbGxvd1NhdmVSb3dsaXN0KFtyXSwgdGhpcy5jb2x1bW5zKVswXSk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBub3JtYWxpemVkT3JpZ2luYWwgPSB0aGlzLm9yaWdpbmFsUm93cy5tYXAociA9PiB0aGlzLmdyaWRTZXJ2aWNlLmdldEFsbG93U2F2ZVJvd2xpc3QoW3JdLCB0aGlzLmNvbHVtbnMpWzBdKTtcblxuICAgICAgICAgICAgICAgICAgLy8gTG9nIGZpcnN0IHJvdyB0byBzZWUgd2hhdCdzIGRpZmZlcmVudFxuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1tHcmlkQ29tcG9uZW50XSBGaXJzdCBub3JtYWxpemVkIGN1cnJlbnQgcm93OicsIG5vcm1hbGl6ZWRDdXJyZW50WzBdKTtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbR3JpZENvbXBvbmVudF0gRmlyc3Qgbm9ybWFsaXplZCBvcmlnaW5hbCByb3c6Jywgbm9ybWFsaXplZE9yaWdpbmFsWzBdKTtcblxuICAgICAgICAgICAgICAgICAgZGlydHlSb3dzID0gZ2V0Q2hhbmdlZFJvd3Mobm9ybWFsaXplZEN1cnJlbnQsIG5vcm1hbGl6ZWRPcmlnaW5hbCwgdGhpcy5jb2x1bW5zLCB0aGlzLmRhdGFLZXksIHRydWUpO1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1tHcmlkQ29tcG9uZW50XSBBZnRlciBnZXRDaGFuZ2VkUm93cywgZGlydHlSb3dzIGxlbmd0aDonLCBkaXJ0eVJvd3MubGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgLy8gTG9nIGEgcm93IHRoYXQncyBtYXJrZWQgYXMgZGlydHkgdG8gc2VlIHdoYXQncyBkaWZmZXJlbnRcbiAgICAgICAgICAgICAgICAgIGlmIChkaXJ0eVJvd3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXJzdERpcnR5S2V5ID0gZGlydHlSb3dzWzBdW3RoaXMuZGF0YUtleV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdSb3cgPSB0aGlzLm9yaWdpbmFsUm93cy5maW5kKHIgPT4gclt0aGlzLmRhdGFLZXldID09PSBmaXJzdERpcnR5S2V5KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VyclJvdyA9IHRoaXMuc2F2ZVJlY29yZEFycmF5LmZpbmQociA9PiByW3RoaXMuZGF0YUtleV0gPT09IGZpcnN0RGlydHlLZXkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW0dyaWRDb21wb25lbnRdIEZpcnN0IGRpcnR5IHJvdyBjaGFuZ2VzOicsIHsgb3JpZzogb3JpZ1JvdywgY3VycmVudDogY3VyclJvdyB9KTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgLy8gTWFwIGJhY2sgdG8gb3JpZ2luYWwgcm93cyB3aXRoIGFsbCBwcm9wZXJ0aWVzXG4gICAgICAgICAgICAgICAgICBkaXJ0eVJvd3MgPSBkaXJ0eVJvd3MubWFwKG5vcm1hbGl6ZWRSb3cgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zYXZlUmVjb3JkQXJyYXkuZmluZChyID0+IHJbdGhpcy5kYXRhS2V5XSA9PT0gbm9ybWFsaXplZFJvd1t0aGlzLmRhdGFLZXldKVxuICAgICAgICAgICAgICAgICAgKS5maWx0ZXIociA9PiByKTsgLy8gUmVtb3ZlIGFueSB1bmRlZmluZWQgZnJvbSBtYXBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGRpcnR5Um93cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICBkaXJ0eVJvd3MuZm9yRWFjaChyb3cgPT4gZGVsZXRlIHJvd1t0aGlzLmRhdGFLZXldKTsgLy8gcmVtb3ZlIHRlbXBfaWQgYmVmb3JlIGVtaXR0aW5nIOKAlCBpdCdzIG9ubHkgdXNlZCBmb3IgZGlydHktcm93IGNvbXBhcmlzb25cbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbR3JpZENvbXBvbmVudF0gRW1pdHRpbmcgZGlydHlSb3dzIGNvdW50OicsIGRpcnR5Um93cy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5vblJvd1VwZGF0ZS5lbWl0KHRoaXMucHJlcGFyZVJvd3NGb3JFbWl0KGRpcnR5Um93cykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnNhdmVSZWNvcmRBcnJheSA9IFtdO1xuICAgICAgICAgIHRoaXMuZWRpdEFsbFJvd3NBdE9uY2UoKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNhdmVBbGxSZWNvcmQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGNsYXNzTmFtZSA9PSAnY2FuY2VsUm93Jykge1xuICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgZ2V0QnRucykge1xuICAgICAgICAgICAgaXRlbS5jbGljaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3VjY2VzcztcbiAgfVxuICAvL0ZvY3VzZWQgY2FsZW5kYXIgaW5wdXQgb24gc2VsZWN0IGRhdGVcbiAgc2VsZWN0RGF0ZShjb2x1bW46IGFueSkge1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNvbHVtbi5maWVsZCk/LmZvY3VzKCk7XG4gIH1cblxuICAvL2FwcGx5IGZpbHRlciBvbiBncmlkIHdoZW4gc2VhcmNoIGJ0biBjbGlja2VkXG4gIGFwcGx5R3JpZEZpbHRlckJ0bigpIHtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnVzZXJTZWFyY2hlZCA9IHRydWU7XG4gICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnJvd1VwZGF0ZSA9IGZhbHNlO1xuICAgIHRoaXMucm93VXBkYXRlQ2hhbmdlID0gZmFsc2U7XG5cbiAgICBsZXQgZmlsdGVySW5EaWFsb2c6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3AtZGlhbG9nJyk7XG4gICAgbGV0IGdsb2JhbEZpbHRlckFwcGx5QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5zZWFyY2hidG5JZCk7XG4gICAgaWYgKGZpbHRlckluRGlhbG9nICYmIGZpbHRlckluRGlhbG9nLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGdsb2JhbFNlYXJjaEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuc2VhcmNoYnRuSWQpO1xuICAgICAgaWYgKGdsb2JhbFNlYXJjaEJ0bikge1xuICAgICAgICBnbG9iYWxTZWFyY2hCdG4uY2xpY2soKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGdsb2JhbEZpbHRlckFwcGx5QnRuKSB7XG4gICAgICBnbG9iYWxGaWx0ZXJBcHBseUJ0bi5jbGljaygpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmdyaWRGaWx0ZXJPYmogJiYgT2JqZWN0LmtleXModGhpcy5ncmlkRmlsdGVyT2JqKT8ubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5hcHBseUVudGVyRXZlbnQoXG4gICAgICAgIHRoaXMuZ3JpZEZpbHRlck9iai5maWx0ZXIsXG4gICAgICAgIHRoaXMuZ3JpZEZpbHRlck9iai5ldmVudCxcbiAgICAgICAgdGhpcy5ncmlkRmlsdGVyT2JqLmNvbHVtblxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmNoZWNrbGlzdCA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gW107XG4gIH1cblxuICBoYW5kbGVIZWFkZXJDaGVja2JveENoYW5nZShldmVudDogYW55KSB7XG4gICAgY29uc3QgaXNDaGVja2VkID0gZXZlbnQuY2hlY2tlZDtcbiAgICBjb25zdCBkYXRhVG9TZWxlY3QgPSB0aGlzLnRhYmxlPy52YWx1ZSB8fCB0aGlzLnJvd3NEYXRhIHx8IFtdO1xuXG4gICAgaWYgKGlzQ2hlY2tlZCkge1xuICAgICAgdGhpcy5jaGVja2xpc3QgPSBbLi4uZGF0YVRvU2VsZWN0XTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jaGVja2xpc3QgPSBbXTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZFJvd3MgPSBbLi4udGhpcy5jaGVja2xpc3RdO1xuICAgIGNvbnNvbGUubG9nKCdzZWxlY3RBbGxDbGljayAtIHNlbGVjdGVkUm93czonLCB0aGlzLnNlbGVjdGVkUm93cyk7XG4gICAgdGhpcy5hcHBSZWYudGljaygpO1xuICAgIHRoaXMub25NdWx0aVNlbGVjdGlvbkNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcbiAgfVxuXG4gIG9uVGFibGVTZWxlY3Rpb25DaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gZXZlbnQgfHwgW107XG4gICAgdGhpcy5jaGVja2xpc3QgPSBbLi4udGhpcy5zZWxlY3RlZFJvd3NdO1xuICAgIHRoaXMub25NdWx0aVNlbGVjdGlvbkNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcbiAgfVxuXG4gIC8vIGludm9rZSBtdWx0aVNlbGVjdGlvbiBjbGljayBldmVudFxuICBtdWx0aUNoZWNrQm94T25jbGljayhyb3dJbmZvOiBhbnksIGV2ZW50OiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZygnbXVsdGlDaGVja0JveE9uY2xpY2sgY2FsbGVkIHdpdGggcm93SW5mbzonLCByb3dJbmZvLCAnaXNDaGVja2VkOicsIGV2ZW50LmNoZWNrZWQpO1xuICAgIGNvbnN0IGlzQ2hlY2tlZCA9IGV2ZW50LmNoZWNrZWQ7XG5cbiAgICBpZiAodGhpcy5zZWxlY3Rpb25UeXBlID09PSBFR3JpZFNlbGVjdGlvblR5cGUuTVVMVElQTEUpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJvd0luZm8pICYmIHJvd0luZm8/Lmxlbmd0aCA+IDAgJiYgaXNDaGVja2VkKSB7XG4gICAgICAgIHRoaXMuY2hlY2tsaXN0ID0gWy4uLnJvd0luZm9dO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyb3dJbmZvKSAmJiAhaXNDaGVja2VkKSB7XG4gICAgICAgIHRoaXMuY2hlY2tsaXN0ID0gW107XG4gICAgICB9XG4gICAgICBjb25zdCBhbHJlYWR5RXhpc3QgPSB0aGlzLmNoZWNrbGlzdC5zb21lKChyb3cpID0+IHJvd1t0aGlzLmRhdGFLZXldID09IHJvd0luZm9bdGhpcy5kYXRhS2V5XSk7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocm93SW5mbykgJiYgaXNDaGVja2VkICYmICFhbHJlYWR5RXhpc3QpIHtcbiAgICAgICAgdGhpcy5jaGVja2xpc3QucHVzaChyb3dJbmZvKTtcbiAgICAgIH0gZWxzZSBpZiAoYWxyZWFkeUV4aXN0ICYmICFpc0NoZWNrZWQpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmNoZWNrbGlzdC5maW5kSW5kZXgoKHJvdykgPT4gcm93W3RoaXMuZGF0YUtleV0gPT0gcm93SW5mb1t0aGlzLmRhdGFLZXldKTtcbiAgICAgICAgdGhpcy5jaGVja2xpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuY2hlY2tsaXN0ID0gW3Jvd0luZm9dXG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gWy4uLnRoaXMuY2hlY2tsaXN0XTtcbiAgICBjb25zb2xlLmxvZygnc2VsZWN0ZWRSb3dzOicsIHRoaXMuc2VsZWN0ZWRSb3dzKTtcbiAgICB0aGlzLmFwcFJlZi50aWNrKCk7XG4gICAgdGhpcy5vbk11bHRpU2VsZWN0aW9uQ2hhbmdlLmVtaXQoKHRoaXMuc2VsZWN0ZWRSb3dzKSk7XG4gIH1cblxuICBzZXRSb3dzRGF0YShyb3dzRGF0YSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJvd3NEYXRhKSkge1xuICAgICAgcm93c0RhdGEuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgcm93ID0gdGhpcy5yZW1vdmVSb3dPYmoocm93KTtcbiAgICAgICAgcm93ID0gdGhpcy5ncmlkU2VydmljZS5zZXRSb3dWYWx1ZShyb3cpO1xuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgcm93c0RhdGEgPSB0aGlzLnJlbW92ZVJvd09iaihyb3dzRGF0YSk7XG4gICAgICByb3dzRGF0YSA9IHRoaXMuZ3JpZFNlcnZpY2Uuc2V0Um93VmFsdWUocm93c0RhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gcm93c0RhdGE7XG4gIH1cblxuICByZW1vdmVSb3dPYmoocm93OiBhbnkpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocm93KTtcbiAgICBpZiAoa2V5cz8ubGVuZ3RoID4gMCkge1xuICAgICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgaWYgKGtleS5pbmNsdWRlcygnX29iaicpKSB7XG4gICAgICAgICAgZGVsZXRlIHJvd1trZXldO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gcm93O1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlUm93c0ZvckVtaXQocm93czogYW55IHwgYW55W10pOiBhbnkgfCBhbnlbXSB7XG4gICAgaWYgKCFyb3dzKSByZXR1cm4gcm93cztcbiAgICBjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShyb3dzKTtcbiAgICBjb25zdCByb3dzVG9GaWx0ZXIgPSBpc0FycmF5ID8gcm93cyA6IFtyb3dzXTtcbiAgICBjb25zb2xlLmxvZygnW0dyaWRDb21wb25lbnRdIHByZXBhcmVSb3dzRm9yRW1pdCAtIElucHV0IHJvd3MgY291bnQ6Jywgcm93c1RvRmlsdGVyLmxlbmd0aCk7XG5cbiAgICAvLyBGaWx0ZXIgdG8gb25seSByb3dzIHRoYXQgd2VyZSBhY3R1YWxseSBlZGl0ZWQgKGNoZWNrIF9pc0VkaXRlZCBmbGFnIG9yIGxvb2t1cCBvYmplY3QgY2hhbmdlcylcbiAgICBjb25zdCBlZGl0ZWRSb3dzID0gcm93c1RvRmlsdGVyLmZpbHRlcigocm93OiBhbnkpID0+IHtcbiAgICAgIGlmICghcm93KSByZXR1cm4gZmFsc2U7IC8vIFNraXAgbnVsbC91bmRlZmluZWQgcm93c1xuICAgICAgaWYgKHJvdz8uX2lzRWRpdGVkKSByZXR1cm4gdHJ1ZTtcbiAgICAgIC8vIENoZWNrIGlmIHJvdyBoYXMgbG9va3VwIGZpZWxkcyB3aXRoIG9iamVjdCB2YWx1ZXMgKGluZGljYXRpbmcgYSBjaGFuZ2UpXG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhyb3cpLnNvbWUoKHZhbDogYW55KSA9PlxuICAgICAgICB0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiB2YWwgIT09IG51bGwgJiYgJ3ZhbHVlJyBpbiB2YWwgJiYgJ3RleHQnIGluIHZhbFxuICAgICAgKTtcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZygnW0dyaWRDb21wb25lbnRdIHByZXBhcmVSb3dzRm9yRW1pdCAtIEVkaXRlZCByb3dzIGNvdW50OicsIGVkaXRlZFJvd3MubGVuZ3RoKTtcblxuICAgIC8vIElmIG5vIHJvd3MgbWFya2VkIGFzIGVkaXRlZCwgdXNlIGFsbCByb3dzIChpbiBjYXNlIGdldENoYW5nZWRSb3dzIGFscmVhZHkgZmlsdGVyZWQgdGhlbSlcbiAgICBjb25zdCByb3dzVG9Qcm9jZXNzID0gZWRpdGVkUm93cy5sZW5ndGggPiAwID8gZWRpdGVkUm93cyA6IHJvd3NUb0ZpbHRlcjtcbiAgICBsZXQgZmlsdGVyZWQgPSB0aGlzLmdyaWRTZXJ2aWNlLmdldEFsbG93U2F2ZVJvd2xpc3Qocm93c1RvUHJvY2VzcywgdGhpcy5jb2x1bW5zKTtcblxuICAgIC8vIEVuc3VyZSBmaWx0ZXJlZCBpcyBhbiBhcnJheVxuICAgIGlmICghQXJyYXkuaXNBcnJheShmaWx0ZXJlZCkpIHtcbiAgICAgIGZpbHRlcmVkID0gZmlsdGVyZWQgPyBbZmlsdGVyZWRdIDogW107XG4gICAgfVxuXG4gICAgLy8gRXh0cmFjdCBzY2FsYXIgdmFsdWVzIGZyb20gbG9va3VwIG9iamVjdHMgYW5kIHJlbW92ZSBpbnRlcm5hbCBmbGFnc1xuICAgIGZpbHRlcmVkID0gZmlsdGVyZWRcbiAgICAgIC5maWx0ZXIoKHJvdzogYW55KSA9PiByb3cpIC8vIFJlbW92ZSBudWxsL3VuZGVmaW5lZCBiZWZvcmUgcHJvY2Vzc2luZ1xuICAgICAgLm1hcCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IHsgLi4ucm93IH07XG4gICAgICAgIE9iamVjdC5rZXlzKG5vcm1hbGl6ZWQpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAvLyBFeHRyYWN0IHNjYWxhciB2YWx1ZSBmcm9tIGxvb2t1cCBvYmplY3RzXG4gICAgICAgICAgaWYgKHR5cGVvZiBub3JtYWxpemVkW2tleV0gPT09ICdvYmplY3QnICYmIG5vcm1hbGl6ZWRba2V5XT8udmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbm9ybWFsaXplZFtrZXldID0gbm9ybWFsaXplZFtrZXldLnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBSZW1vdmUgaW50ZXJuYWwgZmxhZ3NcbiAgICAgICAgICBpZiAoa2V5LnN0YXJ0c1dpdGgoJ18nKSB8fCBrZXkuZW5kc1dpdGgoJ19vYmonKSB8fCBrZXkuZW5kc1dpdGgoJy1kYXRhJykpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBub3JtYWxpemVkW2tleV07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG4gICAgICB9KTtcblxuICAgIGNvbnNvbGUubG9nKCdbR3JpZENvbXBvbmVudF0gcHJlcGFyZVJvd3NGb3JFbWl0IC0gT3V0cHV0IHJvd3MgY291bnQ6JywgZmlsdGVyZWQubGVuZ3RoKTtcbiAgICByZXR1cm4gaXNBcnJheSA/IGZpbHRlcmVkIDogKGZpbHRlcmVkLmxlbmd0aCA+IDAgPyBmaWx0ZXJlZFswXSA6IG51bGwpO1xuICB9XG5cbiAgYXBwbHlEcm9wZG93bkZpbHRlcihmaWx0ZXI6IGFueSwgZXZlbnQ6IGFueSkge1xuICAgIGZpbHRlcihldmVudC50YXJnZXQpO1xuICB9XG5cbiAgc2VhcmNoRHJvcGRvd25GaWx0ZXIoZmlsdGVyOiBhbnksIGV2ZW50OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgdGhpcy5zZXRGaWx0ZXJGb2N1c091dChjb2x1bW4sIGZpbHRlciwgZXZlbnQpO1xuICAgIHRoaXMuZHJvcERvd25GaWx0ZXIgPSB7IGZpbHRlcjogZmlsdGVyLCBldmVudDogZXZlbnQsIGNvbHVtbjogY29sdW1uIH07XG4gICAgLy8gaWYgKGNvbHVtbi5hbGxvd1NlYXJjaCAhPT0gdHJ1ZSkge1xuICAgIC8vICAgdGhpcy5hcHBseURyb3Bkb3duRmlsdGVyKGZpbHRlciwgZXZlbnQpO1xuICAgIC8vIH1cbiAgfVxuXG4gIGxvb2t1cENsZWFyVmFsdWUoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93PzogYW55KSB7XG4gICAgaWYgKHJvdykge1xuICAgICAgY29sdW1uLmRpc3BsYXlGaWVsZCA/IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXSA9ICcnIDogJydcbiAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy50ZXh0ID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10udGV4dCA9ICcnIDogJydcbiAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gJyc7XG4gICAgICBpZiAoIXJvdy5faXNFZGl0ZWQpIHtcbiAgICAgICAgcm93Ll9pc0VkaXRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbHVtbi5maWx0ZXJWYWx1ZSA9ICcnO1xuICAgICAgZGVsZXRlIGNvbHVtblsnZmlsdGVyVmFsdWVfb2JqJ107XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuY29sdW1ucy5maW5kSW5kZXgoKGNvbCkgPT4gY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zW2luZGV4XS5maWx0ZXJWYWx1ZSA9ICcnO1xuICAgICAgICBkZWxldGUgdGhpcy5jb2x1bW5zW2luZGV4XVsnZmlsdGVyVmFsdWVfb2JqJ107XG4gICAgICB9XG4gICAgICB0aGlzLnNldEZpbHRlckZvY3VzT3V0KGNvbHVtbik7XG4gICAgfVxuICAgIHRoaXMuYnJvd3NlckNsb3NlRXZlbnQodHJ1ZSk7XG4gICAgaWYgKGNvbHVtbi5vbkNoYW5nZSkge1xuICAgICAgY29sdW1uLm9uQ2hhbmdlKHJvdyk7XG4gICAgfVxuICB9XG5cbiAgb25DYWxlbmRhck1vZGVsQ2hhbmdlKHZhbHVlOiBhbnksIHJvdzogYW55LCBjb2x1bW46IElHcmlkQ29sdW1uKTogdm9pZCB7XG4gICAgaWYgKCFyb3cuX2lzRWRpdGVkKSB7XG4gICAgICByb3cuX2lzRWRpdGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheUZpZWxkID0gdmFsdWU7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSAmJiBjb2x1bW4uZm9ybWF0ID09IEVHcmlkRm9ybWF0VHlwZS5TSE9SVERBVEUpIHtcbiAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odmFsdWUsICdNTS9kZC95eXl5Jyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICAvLyBpbnZva2Ugd2hlbiBjbGljayBoZWFkZXIgY2hlY2tib3ggZmlsdGVyXG4gIGNsaWNrQ2hlY2tCb3hGaWx0ZXIoY29sdW1uOiBJR3JpZENvbHVtbiwgZXZlbnQpIHtcbiAgICBjb2x1bW4uZmlsdGVyVmFsdWUgPSBldmVudDtcbiAgICBpZiAoY29sdW1uLmFsbG93U2VsZWN0QWxsKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQk9PTEVBTlxuICAgICAgICAmJlxuICAgICAgICBjb2x1bW4/LmZpbHRlcj8udHlwZSA9PT0gJ2NoZWNrYm94JyAmJiBjb2x1bW4uZmlsdGVyaW5nICE9IGZhbHNlXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICBpZiAocm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/LmRpc2FibGVkICE9PSB0cnVlICYmICFjb2x1bW4uZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJvdy5faXNFZGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0gPSBjb2x1bW4uZmlsdGVyVmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnJvd3NDaGFuZ2Uub2JzZXJ2ZXJzPy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5vbkNoZWNrQm94RmlsdGVyQ2xpY2suZW1pdChjb2x1bW4pO1xuICB9XG4gIC8vc2V0IGhlYWRlciBjaGVja2JveCB2YWx1ZSBmb3IgZ2V0dGluZyBhbGwgY29sdW1ucyBvbiBzdGF5IGFkbWluXG4gIHNldEhlYWRlckNoZWNrQm94VmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMuaXNJbmNsdWRlZEFsbENvbHVtbnMuZW1pdCh2YWx1ZSk7XG4gIH1cblxuICAvLyBzZXQgY2FsZW5kYXIgMiBPciA0IGRpZ2l0IHllYXIgZm9ybWF0XG4gIGNhbGVuZGFySW5wdXRWYWx1ZShjb2x1bW46IGFueSwgcm93OiBhbnksIGlzRmlsdGVySW5wdXQgPSBmYWxzZSkge1xuICAgIGlmICghcm93Ll9pc0VkaXRlZCkge1xuICAgICAgcm93Ll9pc0VkaXRlZCA9IHRydWU7XG4gICAgfVxuICAgIGlmICghY29sdW1uLnRpbWVPbmx5KSB7XG4gICAgICBjb25zdCBjbGFzc05hbWUgPSBpc0ZpbHRlcklucHV0ID8gY29sdW1uLmZpZWxkICsgJy1maWx0ZXItaW5wdXQnIDogY29sdW1uLmZpZWxkICsgcm93W3RoaXMuZGF0YUtleV07XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZSlbMF0/LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgKHZhbDogYW55KSA9PiB7XG4gICAgICAgIGlmICghdmFsPy50YXJnZXQ/LnZhbHVlPy5pbmNsdWRlcygnLycpKSB7XG4gICAgICAgICAgaWYgKHZhbD8udGFyZ2V0Py52YWx1ZT8ubGVuZ3RoID09IDggfHwgY29sdW1uPy5mb3JtYXQ/LnR5cGUgPT09IEVHcmlkRm9ybWF0VHlwZS5TSE9SVERBVEUpIHtcbiAgICAgICAgICAgIHZhbC50YXJnZXQudmFsdWUgPSB2YWw/LnRhcmdldD8udmFsdWU/LnJlcGxhY2UoLyhcXGR7Mn0pKFxcZHsyfSkoXFxkezR9KS8sICckMS8kMi8kMycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmICh2YWw/LnRhcmdldD8udmFsdWU/Lmxlbmd0aCA9PSA2KSB7XG4gICAgICAgICAgICB2YWwudGFyZ2V0LnZhbHVlID0gdmFsPy50YXJnZXQ/LnZhbHVlPy5yZXBsYWNlKC8oXFxkezJ9KSg/PVxcZCkvZywgJyQxLycpO1xuICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSB2YWwudGFyZ2V0LnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCB5ZWFyID0gdmFsPy50YXJnZXQ/LnZhbHVlPy50b1N0cmluZygpPy5zcGxpdCgnLycpWzJdO1xuICAgICAgICBpZiAoeWVhciAmJiB5ZWFyLmxlbmd0aCA9PSA0KSB7XG4gICAgICAgICAgaWYgKGlzRmlsdGVySW5wdXQpIHtcbiAgICAgICAgICAgIGNvbHVtbi5maWx0ZXJWYWx1ZSA9IG5ldyBEYXRlKHZhbD8udGFyZ2V0Py52YWx1ZSk/LnRvTG9jYWxlRGF0ZVN0cmluZyhcImVuLVVTXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmNhbGVuZGFyRm9ybWF0ID0gJ21tL2RkL3l5JztcbiAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IG5ldyBEYXRlKHZhbD8udGFyZ2V0Py52YWx1ZSk/LnRvTG9jYWxlRGF0ZVN0cmluZyhcImVuLVVTXCIpO1xuICAgICAgICB9IGVsc2UgaWYgKHllYXIgJiYgeWVhci5sZW5ndGggPT0gMikge1xuICAgICAgICAgIGlmIChpc0ZpbHRlcklucHV0KSB7XG4gICAgICAgICAgICBjb2x1bW4uZmlsdGVyVmFsdWUgPSBuZXcgRGF0ZSh2YWw/LnRhcmdldD8udmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmNhbGVuZGFyRm9ybWF0ID0gJ21tL2RkL3knO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgfVxuICBjaGFuZ2VQYXNzd29yZFR5cGUoY29sdW1uLCByb3cpIHtcbiAgICB2YXIgdGV4dFR5cGUgPSByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSA/IChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS50ZXh0VHlwZSA9PSAncGFzc3dvcmQnID8gJ3RleHQnIDogJ3Bhc3N3b3JkJykgOiBjb2x1bW4udGV4dFR5cGUgPT0gJ3Bhc3N3b3JkJyA/ICd0ZXh0JyA6ICdwYXNzd29yZCc7XG4gICAgdGhpcy5ncmlkU2VydmljZS5zZXRHcmlkUm93UHJvcFZhbHVlKHJvdywgW3sgcHJvcE5hbWU6IEVHcmlkUm93UHJvcE5hbWUuVEVYVFRZUEUsIHByb3BWYWx1ZTogdGV4dFR5cGUsIGZpZWxkOiBjb2x1bW4uZmllbGQgfV0pO1xuXG4gIH1cblxuICBzaG93Q29uZmlybWF0aW9uKGV2ZW50OiBJR3JpZFBhZ2luYXRpb25FdmVudCkge1xuICAgIGNvbnN0IHRhYmxlV3JhcHBlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIucC1kYXRhdGFibGUtd3JhcHBlclwiKTtcbiAgICBjb25zdCB0YWJsZVdyYXBwZXJTY3JvbGxUb3AgPSB0YWJsZVdyYXBwZXI/LnNjcm9sbFRvcDtcbiAgICBjb25zdCB0YWJsZVdyYXBwZXJTY3JvbGxMZWZ0ID0gdGFibGVXcmFwcGVyPy5zY3JvbGxMZWZ0O1xuICAgIGlmICh0YWJsZVdyYXBwZXJTY3JvbGxUb3ApIHtcbiAgICAgIHRoaXMuc2Nyb2xsUG9zaXRpb25ZID0gdGFibGVXcmFwcGVyU2Nyb2xsVG9wO1xuICAgICAgdGhpcy5zY3JvbGxQb3NpdGlvblggPSB0YWJsZVdyYXBwZXJTY3JvbGxMZWZ0O1xuICAgIH1cblxuICAgIGlmICghdGhpcy5QYWdlQ2hhbmdlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gZXZlbnQuZmlyc3QgLyBldmVudC5yb3dzO1xuICAgIH1cbiAgICBpZiAoY29uZmlybShcIllvdSB3aWxsIGxvc2UgY2hhbmdlcyBub3Qgc2F2ZWQgb24gcGFnZS4gV291bGQgeW91IGxpa2UgdG8gY29udGludWU/XCIpID09IHRydWUpIHtcbiAgICAgIHRoaXMuYXV0b0xvYWREYXRhID0gdHJ1ZTtcbiAgICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpXG4gICAgICB0aGlzLmhhbmRsZVNlcnZlclNpZGVQYWdpbmF0aW9uKGV2ZW50KTtcbiAgICAgIHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCA9IGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLlBhZ2VDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMudGFibGUuZmlyc3QgPSB0aGlzLmN1cnJlbnRQYWdlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudGFibGUuZmlyc3QgPSBNYXRoLmZsb29yKHRoaXMuY3VycmVudFBhZ2UgLyBldmVudC5yb3dzKTtcbiAgICAgICAgICAgIHRoaXMudGFibGUucm93cyA9IGV2ZW50LnJvd3M7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0YWJsZVdyYXBwZXJTY3JvbGxUb3AgPT09IDApIHtcbiAgICAgICAgICAgIHRhYmxlV3JhcHBlci5zY3JvbGxUbyh0aGlzLnNjcm9sbFBvc2l0aW9uWCwgMCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGFibGVXcmFwcGVyLnNjcm9sbFRvKHRoaXMuc2Nyb2xsUG9zaXRpb25YLCB0aGlzLnNjcm9sbFBvc2l0aW9uWSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIHRoaXMuYXV0b0xvYWREYXRhID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgbG9va3VwSW5wdXROZ01vZGVsKHJvdzogYW55LCBjb2x1bW46IGFueSk6IGFueSB7XG4gICAgaWYgKHJvdz8uaXNOZXcgfHwgcm93Py5pc25ldykge1xuICAgICAgcmV0dXJuIHR5cGVvZiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSA9PT0gJ29iamVjdCcgJiYgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnRleHQ/LnRleHQgIT0gdW5kZWZpbmVkID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnRleHQ/LnRleHQgOiByb3dbY29sdW1uLmZpZWxkXTtcbiAgICB9XG5cbiAgICBpZiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZCkge1xuICAgICAgcmV0dXJuIHJvd1tyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy50ZXh0ID09PSAnb2JqZWN0JyAmJiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8udGV4dD8udGV4dCAhPSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8udGV4dD8udGV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gY29sdW1uLmRpc3BsYXlGaWVsZCA/IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXSA6IHJvd1tjb2x1bW4uZmllbGRdO1xuICB9XG5cbiAgZ2V0TG9va3VwQ29udHJvbERhdGEoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnkpOiBhbnkge1xuICAgIHJldHVybiByb3c/Lltjb2x1bW4uZmllbGQgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhIHx8IGNvbHVtbj8ubG9va3VwQ29udHJvbD8uZGF0YSB8fCB7fTtcbiAgfVxuXG4gIGlzTG9va3VwSW5wdXRFZGl0YWJsZShjb2x1bW46IElHcmlkQ29sdW1uLCByb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGxvb2t1cERhdGEgPSB0aGlzLmdldExvb2t1cENvbnRyb2xEYXRhKGNvbHVtbiwgcm93KTtcbiAgICByZXR1cm4gbG9va3VwRGF0YT8uYWxsb3dJbnB1dCA9PT0gdHJ1ZTtcbiAgfVxuXG4gIGdldExvb2t1cENvbmZpZ0RhdGEoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldExvb2t1cENvbnRyb2xEYXRhKGNvbHVtbiwgcm93KT8uZGF0YSB8fCB7fTtcbiAgfVxuXG4gIG5vcm1hbGl6ZUxvb2t1cElucHV0VmFsdWUodmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh2YWx1ZSA/PyAnJykudG9TdHJpbmcoKS5yZXBsYWNlKC9cXHI/XFxufFxcci9nLCAnICcpLnRyaW0oKTtcbiAgfVxuXG4gIHNldExvb2t1cElucHV0VmFsdWUocm93OiBhbnksIGNvbHVtbjogSUdyaWRDb2x1bW4sIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBub3JtYWxpemVkVmFsdWUgPSB0aGlzLm5vcm1hbGl6ZUxvb2t1cElucHV0VmFsdWUodmFsdWUpO1xuICAgIGNvbnN0IGRpc3BsYXlGaWVsZEtleSA9IGNvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3Qgcm93T2JqS2V5ID0gY29sdW1uLmZpZWxkICsgJ19vYmonO1xuICAgIGNvbnN0IGN1cnJlbnRPYmogPSByb3dbcm93T2JqS2V5XSB8fCB7fTtcblxuICAgIHJvd1tjb2x1bW4uZmllbGRdID0gbm9ybWFsaXplZFZhbHVlO1xuICAgIGlmIChkaXNwbGF5RmllbGRLZXkpIHtcbiAgICAgIHJvd1tkaXNwbGF5RmllbGRLZXldID0gbm9ybWFsaXplZFZhbHVlO1xuICAgIH1cbiAgICByb3dbcm93T2JqS2V5XSA9IHtcbiAgICAgIC4uLmN1cnJlbnRPYmosXG4gICAgICB0ZXh0OiBub3JtYWxpemVkVmFsdWUgPyB7IHRleHQ6IG5vcm1hbGl6ZWRWYWx1ZSwgdmFsdWU6IG5vcm1hbGl6ZWRWYWx1ZSB9IDogJycsXG4gICAgfTtcbiAgfVxuXG4gIGJ1aWxkTG9va3VwUmVzb2x1dGlvbkZpbHRlcnMoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnksIGZpZWxkTmFtZTogc3RyaW5nLCBmaWVsZFZhbHVlOiBzdHJpbmcpOiBhbnlbXSB7XG4gICAgY29uc3QgbG9va3VwQ29uZmlnRGF0YSA9IHRoaXMuZ2V0TG9va3VwQ29uZmlnRGF0YShjb2x1bW4sIHJvdyk7XG4gICAgY29uc3QgZmlsdGVycyA9IEFycmF5LmlzQXJyYXkobG9va3VwQ29uZmlnRGF0YT8uZmlsdGVycykgPyBbLi4ubG9va3VwQ29uZmlnRGF0YS5maWx0ZXJzXSA6IFtdO1xuICAgIGNvbnN0IGxhYmVsUHJvcCA9IHRoaXMuZ2V0TG9va3VwQ29udHJvbERhdGEoY29sdW1uLCByb3cpPy5sYWJlbFByb3A/LnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgdmFsdWVQcm9wID0gdGhpcy5nZXRMb29rdXBDb250cm9sRGF0YShjb2x1bW4sIHJvdyk/LnZhbHVlUHJvcD8udG9Mb3dlckNhc2UoKTtcblxuICAgIE9iamVjdC5lbnRyaWVzKGxvb2t1cENvbmZpZ0RhdGEgfHwge30pLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBrZXk/LnRvTG93ZXJDYXNlKCkgIT09ICd1bmlxdWVrZXknICYmXG4gICAgICAgIGtleT8udG9Mb3dlckNhc2UoKSAhPT0gJ2ZpbHRlcnMnICYmXG4gICAgICAgIGtleT8udG9Mb3dlckNhc2UoKSAhPT0gbGFiZWxQcm9wICYmXG4gICAgICAgIGtleT8udG9Mb3dlckNhc2UoKSAhPT0gdmFsdWVQcm9wICYmXG4gICAgICAgIHZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICAgICAgdmFsdWUgIT09ICcnICYmXG4gICAgICAgIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCdcbiAgICAgICkge1xuICAgICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICAgIGZpZWxkOiBrZXksXG4gICAgICAgICAgbWF0Y2hNb2RlOiBFTWF0Y2hNb2RlLkVRVUFMUyxcbiAgICAgICAgICBvcGVyYXRvcjogRU9wZXJhdG9yLkFORCxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgZmllbGQ6IGZpZWxkTmFtZSxcbiAgICAgIG1hdGNoTW9kZTogRU1hdGNoTW9kZS5FUVVBTFMsXG4gICAgICBvcGVyYXRvcjogRU9wZXJhdG9yLkFORCxcbiAgICAgIHZhbHVlOiBmaWVsZFZhbHVlLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZpbHRlcnM7XG4gIH1cblxuICBhc3luYyBmZXRjaExvb2t1cFJlc29sdXRpb25SZWNvcmQoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnksIGZpZWxkTmFtZTogc3RyaW5nLCBmaWVsZFZhbHVlOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IGxvb2t1cENvbmZpZ0RhdGEgPSB0aGlzLmdldExvb2t1cENvbmZpZ0RhdGEoY29sdW1uLCByb3cpO1xuICAgIGNvbnN0IHVuaXF1ZUtleSA9IGxvb2t1cENvbmZpZ0RhdGE/LnVuaXF1ZUtleTtcblxuICAgIGlmICghdW5pcXVlS2V5IHx8ICFmaWVsZE5hbWUgfHwgIWZpZWxkVmFsdWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlOiBhbnkgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5yZXF1ZXN0U2VydmljZS5nZXQ8YW55W10sIGFueT4oJy9EYXRhL0ZldGNoJywge1xuICAgICAgICB1bmlxdWVLZXksXG4gICAgICAgIGZpbHRlcnM6IHRoaXMuYnVpbGRMb29rdXBSZXNvbHV0aW9uRmlsdGVycyhjb2x1bW4sIHJvdywgZmllbGROYW1lLCBmaWVsZFZhbHVlKSxcbiAgICAgICAgcGFnZVNpemU6IDEsXG4gICAgICAgIHBhZ2U6IDEsXG4gICAgICB9KS5zdWJzY3JpYmUoXG4gICAgICAgIChyZXMpID0+IHJlc29sdmUocmVzKSxcbiAgICAgICAgKCkgPT4gcmVzb2x2ZShudWxsKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGlmICghcmVzcG9uc2U/LnJlY29yZHM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ3JpZFNlcnZpY2Uuc2V0RGF0YUZpZWxkcyhyZXNwb25zZS5yZWNvcmRzKT8uWzBdIHx8IG51bGw7XG4gIH1cblxuICBhcHBseVJlc29sdmVkTG9va3VwUmVjb3JkKHJvdzogYW55LCBjb2x1bW46IElHcmlkQ29sdW1uLCByZXNvbHZlZFJlY29yZDogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCFyZXNvbHZlZFJlY29yZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGxhYmVsUHJvcCA9IHRoaXMuZ2V0TG9va3VwQ29udHJvbERhdGEoY29sdW1uLCByb3cpPy5sYWJlbFByb3A/LnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgdmFsdWVQcm9wID0gdGhpcy5nZXRMb29rdXBDb250cm9sRGF0YShjb2x1bW4sIHJvdyk/LnZhbHVlUHJvcD8udG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCByZXNvbHZlZFZhbHVlID0gcmVzb2x2ZWRSZWNvcmRbdmFsdWVQcm9wIHx8IGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV07XG4gICAgY29uc3QgcmVzb2x2ZWRUZXh0ID0gcmVzb2x2ZWRSZWNvcmRbbGFiZWxQcm9wIHx8IGNvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCkgfHwgY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXTtcblxuICAgIGlmIChyZXNvbHZlZFZhbHVlID09PSB1bmRlZmluZWQgfHwgcmVzb2x2ZWRUZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByb3dbY29sdW1uLmZpZWxkXSA9IHJlc29sdmVkVmFsdWU7XG4gICAgaWYgKGNvbHVtbi5kaXNwbGF5RmllbGQpIHtcbiAgICAgIHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXSA9IHJlc29sdmVkVGV4dDtcbiAgICB9XG4gICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gPSB7XG4gICAgICAuLi4ocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gfHwge30pLFxuICAgICAgdGV4dDogeyB0ZXh0OiByZXNvbHZlZFRleHQsIHZhbHVlOiByZXNvbHZlZFZhbHVlIH0sXG4gICAgfTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHJlc29sdmVMb29rdXBJbnB1dFZhbHVlKGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdzogYW55KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLmlzTG9va3VwSW5wdXRFZGl0YWJsZShjb2x1bW4sIHJvdykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlZFZhbHVlID0gdGhpcy5ub3JtYWxpemVMb29rdXBJbnB1dFZhbHVlKHRoaXMubG9va3VwSW5wdXROZ01vZGVsKHJvdywgY29sdW1uKSk7XG4gICAgY29uc3Qgc2VhcmNoRmllbGQgPSB0aGlzLmdldExvb2t1cENvbnRyb2xEYXRhKGNvbHVtbiwgcm93KT8uc2VhcmNoRmllbGQ7XG4gICAgY29uc3QgbGFiZWxQcm9wID0gdGhpcy5nZXRMb29rdXBDb250cm9sRGF0YShjb2x1bW4sIHJvdyk/LmxhYmVsUHJvcDtcbiAgICBjb25zdCB2YWx1ZVByb3AgPSB0aGlzLmdldExvb2t1cENvbnRyb2xEYXRhKGNvbHVtbiwgcm93KT8udmFsdWVQcm9wO1xuXG4gICAgaWYgKCF0eXBlZFZhbHVlIHx8ICghbGFiZWxQcm9wICYmICF2YWx1ZVByb3ApKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VhcmNoTWF0Y2ggPSBzZWFyY2hGaWVsZFxuICAgICAgPyBhd2FpdCB0aGlzLmZldGNoTG9va3VwUmVzb2x1dGlvblJlY29yZChjb2x1bW4sIHJvdywgc2VhcmNoRmllbGQsIHR5cGVkVmFsdWUpXG4gICAgICA6IG51bGw7XG5cbiAgICBpZiAodGhpcy5hcHBseVJlc29sdmVkTG9va3VwUmVjb3JkKHJvdywgY29sdW1uLCBzZWFyY2hNYXRjaCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGxhYmVsTWF0Y2ggPSBsYWJlbFByb3BcbiAgICAgID8gYXdhaXQgdGhpcy5mZXRjaExvb2t1cFJlc29sdXRpb25SZWNvcmQoY29sdW1uLCByb3csIGxhYmVsUHJvcCwgdHlwZWRWYWx1ZSlcbiAgICAgIDogbnVsbDtcblxuICAgIGlmICh0aGlzLmFwcGx5UmVzb2x2ZWRMb29rdXBSZWNvcmQocm93LCBjb2x1bW4sIGxhYmVsTWF0Y2gpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZU1hdGNoID1cbiAgICAgIHZhbHVlUHJvcCAmJiB2YWx1ZVByb3A/LnRvTG93ZXJDYXNlKCkgIT09IGxhYmVsUHJvcD8udG9Mb3dlckNhc2UoKVxuICAgICAgICA/IGF3YWl0IHRoaXMuZmV0Y2hMb29rdXBSZXNvbHV0aW9uUmVjb3JkKGNvbHVtbiwgcm93LCB2YWx1ZVByb3AsIHR5cGVkVmFsdWUpXG4gICAgICAgIDogbnVsbDtcblxuICAgIHJldHVybiB0aGlzLmFwcGx5UmVzb2x2ZWRMb29rdXBSZWNvcmQocm93LCBjb2x1bW4sIHZhbHVlTWF0Y2gpO1xuICB9XG5cbiAgLy8gQ2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4gc2V0dGluZyB0aGUgbmdNb2RlbCB2YWx1ZVxuICBjaGFuZ2VMb29rdXBJbnB1dE5nTW9kZWwocm93OiBhbnksIGNvbHVtbjogYW55LCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgaWYgKCFyb3cuX2lzRWRpdGVkKSB7XG4gICAgICByb3cuX2lzRWRpdGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcm93Ll9pc0VkaXRlZCA9IHRydWU7XG4gICAgaWYgKHRoaXMuaXNMb29rdXBJbnB1dEVkaXRhYmxlKGNvbHVtbiwgcm93KSkge1xuICAgICAgdGhpcy5zZXRMb29rdXBJbnB1dFZhbHVlKHJvdywgY29sdW1uLCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgb25Mb29rdXBJbnB1dFBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCwgY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuaXNMb29rdXBJbnB1dEVkaXRhYmxlKGNvbHVtbiwgcm93KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhc3RlZFZhbHVlID0gdGhpcy5ub3JtYWxpemVMb29rdXBJbnB1dFZhbHVlKGV2ZW50LmNsaXBib2FyZERhdGE/LmdldERhdGEoJ3RleHQnKSk7XG4gICAgaWYgKCFwYXN0ZWRWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5zZXRMb29rdXBJbnB1dFZhbHVlKHJvdywgY29sdW1uLCBwYXN0ZWRWYWx1ZSk7XG4gICAgYXdhaXQgdGhpcy5yZXNvbHZlTG9va3VwSW5wdXRWYWx1ZShjb2x1bW4sIHJvdyk7XG4gICAgdGhpcy5vbkNoYW5nZUV2ZW50KGNvbHVtbiwgcm93KTtcbiAgfVxuXG4gIGFzeW5jIG9uTG9va3VwSW5wdXRFbnRlcihldmVudDogS2V5Ym9hcmRFdmVudCwgY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBjb25zdCB0eXBlZFZhbHVlID0gdGhpcy5ub3JtYWxpemVMb29rdXBJbnB1dFZhbHVlKHRhcmdldD8udmFsdWUpO1xuXG4gICAgaWYgKCF0aGlzLmlzTG9va3VwSW5wdXRFZGl0YWJsZShjb2x1bW4sIHJvdykpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnNlbGVjdExvb2t1cEZpZWxkKGNvbHVtbiwgcm93KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNldExvb2t1cElucHV0VmFsdWUocm93LCBjb2x1bW4sIHR5cGVkVmFsdWUpO1xuICAgIGNvbnN0IGlzUmVzb2x2ZWQgPSBhd2FpdCB0aGlzLnJlc29sdmVMb29rdXBJbnB1dFZhbHVlKGNvbHVtbiwgcm93KTtcbiAgICB0aGlzLm9uQ2hhbmdlRXZlbnQoY29sdW1uLCByb3cpO1xuXG4gICAgaWYgKFxuICAgICAgdHlwZWRWYWx1ZSAmJlxuICAgICAgIWlzUmVzb2x2ZWQgJiZcbiAgICAgIHRoaXMuaXNMb29rdXBJbnB1dEVkaXRhYmxlKGNvbHVtbiwgcm93KSAmJlxuICAgICAgY29sdW1uLmFsbG93QXV0b0NvbXBsZXRlU2F2ZSAmJlxuICAgICAgY29sdW1uLnVuaXF1ZUtleVxuICAgICkge1xuICAgICAgaWYgKGNvbmZpcm0oYERvIHlvdSB3YW50IHRvIGFkZCAke3R5cGVkVmFsdWV9IHRvIHRoZSBsb29rdXA/YCkpIHtcbiAgICAgICAgdGhpcy5ncmlkU2VydmljZS5hZGRBdXRvQ29tcGxldGVWYWx1ZShjb2x1bW4udW5pcXVlS2V5LCB0eXBlZFZhbHVlLCBjb2x1bW4sIHJvdykudGhlbigoKSA9PiB7XG4gICAgICAgICAgaWYgKGNvbHVtbi5vblJldHVybikge1xuICAgICAgICAgICAgY29sdW1uLm9uUmV0dXJuKHR5cGVkVmFsdWUsIGNvbHVtbiwgcm93KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiAgZ2V0QXV0b0NvbXBsZXRlTmdNb2RlbChyb3c6IGFueSwgY29sdW1uOiBhbnkpOiBhbnkge1xuICAgIGlmIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkKSB7XG4gICAgICByZXR1cm4gcm93W3Jvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKV07XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiByb3dbY29sdW1uLmZpZWxkXSA9PT0gJ29iamVjdCcgJiYgcm93W2NvbHVtbi5maWVsZF0/LnRleHQpIHtcbiAgICAgIHJldHVybiByb3dbY29sdW1uLmZpZWxkXT8udGV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gcm93W2NvbHVtbi5maWVsZF07XG4gIH1cblxuICAvLyBGdW5jdGlvbiB0byBzZXQgbmdNb2RlbCB2YWx1ZVxuICBjaGFuZ2VBdXRvQ29tcGxldGVOZ01vZGVsKHJvdzogYW55LCBjb2x1bW46IGFueSwgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGZpZWxkID0gY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpO1xuICAgIHJvd1tmaWVsZF0gPSB2YWx1ZTtcbiAgfVxuXG4gIHNldElucHV0TmdNb2RlbChyb3c6IGFueSwgY29sdW1uOiBhbnkpOiBhbnkge1xuICAgIGlmIChyb3cudW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gJyc7ICAvLyBJZiAncm93LnVuZGVmaW5lZCcgaXMgdHJ1ZSwgcmV0dXJuIGVtcHR5IHN0cmluZ1xuICAgIH1cblxuICAgIC8vIEV2YWx1YXRlIG90aGVyIGNvbmRpdGlvbnMgYmFzZWQgb24gcm93IGFuZCBjb2x1bW4gZGF0YVxuICAgIGlmICh0aGlzLmFsbG93RGlzYWJsZWQoY29sdW1uLCByb3cpICYmIHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXSkge1xuICAgICAgcmV0dXJuIHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXTtcbiAgICB9XG5cbiAgICBpZiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gJiYgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10udmFsdWUpIHtcbiAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10udmFsdWU7XG4gICAgICByZXR1cm4gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10udmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJvd1tjb2x1bW4uZmllbGRdOyAgLy8gRmFsbGJhY2sgdG8gJ3Jvd1tjb2x1bW4uZmllbGRdJ1xuICB9XG5cbiAgLy8gRnVuY3Rpb24gdG8gc2V0IHRoZSB2YWx1ZSAod2hlbiBuZ01vZGVsIGNoYW5nZXMpXG4gIGNoYW5nZUlucHV0TmdNb2RlbChyb3c6IGFueSwgY29sdW1uOiBhbnksIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAvLyBZb3UgY2FuIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIHVwZGF0ZSB5b3VyIGRhdGEgbW9kZWwgYmFzZWQgb24gdGhlIHZhbHVlXG4gICAgaWYgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddKSB7XG4gICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHZhbHVlO1xuICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10udmFsdWUgPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgb25JbnB1dENoYW5nZSh2YWx1ZTogYW55LCByb3c6IGFueSwgY29sdW1uOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmNoYW5nZUlucHV0TmdNb2RlbChyb3csIGNvbHVtbiwgdmFsdWUpO1xuICB9XG5cbiAgZ2V0Q2hlY2tib3hWYWx1ZShyb3c6IGFueSwgY29sdW1uOiBJR3JpZENvbHVtbik6IGJvb2xlYW4ge1xuICAgIGlmICghcm93W2NvbHVtbi5maWVsZF0pIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IHZhbHVlID0gcm93W2NvbHVtbi5maWVsZF07XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS50ZXh0KSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0NoZWNrZWQodmFsdWUudGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaXNDaGVja2VkKHZhbHVlKTtcbiAgfVxuXG4gIGlzQ2hlY2tlZCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgbWF0Y2hWYWx1ZSA9IFsnMScsICd0cnVlJywgJ3knXTtcbiAgICByZXR1cm4gbWF0Y2hWYWx1ZS5pbmNsdWRlcyh2YWx1ZT8udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuICBnZXRNb3JlQ29sdW1ucygpOiBJR3JpZENvbHVtbltdIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zPy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbj8uc2hvd0luTW9yZSkgPz8gW107XG4gIH1cblxuICBidWlsZE1vcmVJdGVtc0ZvclJvdyhyb3c6IGFueSk6IE1lbnVJdGVtW10ge1xuICAgIGNvbnN0IGl0ZW1zOiBNZW51SXRlbVtdID0gW107XG4gICAgY29uc3QgbW9yZUNvbHVtbnMgPSB0aGlzLmdldE1vcmVDb2x1bW5zKCk7XG5cbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBtb3JlQ29sdW1ucykge1xuICAgICAgY29uc3QgbGFiZWwgPSBjb2wuaGVhZGVyIHx8IGNvbC5kaXNwbGF5VGV4dCB8fCBjb2wuZmllbGQ7XG4gICAgICBjb25zdCBoeXBlcmxpbmsgPSByb3c/LltgJHtjb2wuZmllbGR9X29iamBdPy5oeXBlcmxpbmsgfHwgcm93Py5bY29sLmZpZWxkXTtcblxuICAgICAgaWYgKGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSykge1xuICAgICAgICBpdGVtcy5wdXNoKGh5cGVybGluayA/IHtcbiAgICAgICAgICBsYWJlbCwgaWNvbjogY29sLmljb24sIHVybDogaHlwZXJsaW5rLFxuICAgICAgICAgIHRhcmdldDogY29sLm9wZW5Jbk5ld1RhYiB8fCBjb2wudGFyZ2V0ID09PSBFR3JpZGxpbmsuQkxBTksgPyBFR3JpZGxpbmsuQkxBTksgOiBFR3JpZGxpbmsuU0VMRlxuICAgICAgICB9IDogeyBsYWJlbCwgaWNvbjogY29sLmljb24sIGNvbW1hbmQ6ICgpID0+IGNvbC5vbkNsaWNrPy4ocm93KSB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRykge1xuICAgICAgICBpdGVtcy5wdXNoKHsgbGFiZWwsIGljb246IGNvbC5pY29uLCBjb21tYW5kOiAoKSA9PiB0aGlzLm9wZW5HcmlkRGlhbG9nKGNvbCwgcm93KSB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoY29sLm9uQ2xpY2spIHtcbiAgICAgICAgaXRlbXMucHVzaCh7IGxhYmVsLCBpY29uOiBjb2wuaWNvbiwgY29tbWFuZDogKCkgPT4gY29sLm9uQ2xpY2shKHJvdykgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpdGVtcztcbiAgfVxuXG4gIGhhc01vcmVDb2x1bW5zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldE1vcmVDb2x1bW5zKCk/Lmxlbmd0aCA+IDA7XG4gIH1cblxuICBoYXNNb3JlSXRlbXMocm93OiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5idWlsZE1vcmVJdGVtc0ZvclJvdyhyb3cpPy5sZW5ndGggPiAwO1xuICB9XG5cbiAgc2hvd01vcmUoZXZlbnQ6IGFueSwgcm93OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRNb3JlTWVudSA9IHRoaXMuYnVpbGRNb3JlSXRlbXNGb3JSb3cocm93KTtcbiAgICB0aGlzLm1vcmVNZW51Py50b2dnbGUoZXZlbnQpO1xuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJncmlkLWNvbXBvbmVudC13cmFwcGVyXCI+XG4gIDxwLWNvbmZpcm1EaWFsb2cgW3N0eWxlXT1cInsgd2lkdGg6ICc1MHZ3JyB9XCIgKm5nSWY9XCJ1c2VJbmxpbmVDUlVEXCIga2V5PVwiaGFuZGxlSW5saW5lQ1JVRFwiPjwvcC1jb25maXJtRGlhbG9nPlxuICA8cC1jb25maXJtRGlhbG9nIGNsYXNzPVwiZ3JpZC1jb21wb25lbnQtY29uZmlybS1kaWFsb2dcIiAqbmdJZj1cImNvbHVtbkFjdGlvbnMubGVuZ3RoID4gMFwiXG4gICAga2V5PVwiaGFuZGxlY29sdW1uQWN0aW9uc1wiPjwvcC1jb25maXJtRGlhbG9nPlxuICA8ZGl2IGNsYXNzPVwiZ2xvYmFsLWZpbHRlci1idXR0b25zLXdyYXBwZXIgZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cblxuICAgIDwhLS0gYnV0dG9uIGZvciBhcHBseSB2YWx1ZSBvbiBHcmlkIC0tPlxuICAgIDxidXR0b24gKm5nSWY9XCIoKGZpbHRlcmluZyAmJiAhaGlkZUZpbHRlciApIHx8IHNob3dGaWx0ZXJidG4pXCIgcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLXNlYXJjaFwiXG4gICAgICAoY2xpY2spPVwiYXBwbHlHcmlkRmlsdGVyQnRuKClcIiBbY2xhc3NdPVwiXG4gIHNlYXJjaEdyaWRGaWx0ZXIgPyAncC1idXR0b24tc3VjY2VzcyBhcHBseS1maWx0ZXItYnRuIGZpbHRlci1idG4nIDogJ2hpZGUtY2xlYXItZmlsdGVyLWJ1dHRvbiBhcHBseS1maWx0ZXItYnRuIGZpbHRlci1idG4nXG4gIFwiPjwvYnV0dG9uPlxuXG4gICAgPCEtLSBidXR0b24gZm9yIGNsZWFyIHZhbHVlIG9uIEdyaWQgLS0+XG4gICAgPGJ1dHRvbiAqbmdJZj1cIigoZmlsdGVyaW5nICYmICFoaWRlRmlsdGVyICl8fCBzaG93RmlsdGVyYnRuKVwiIHBCdXR0b24gaWQ9XCJjbGVhckdyaWRGaWx0ZXJWYWx1ZXNCdXR0b25cIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGljb249XCJwaSBwaS1yZXBsYXlcIiAoY2xpY2spPVwiY2xlYXJncmlkRmlsdGVyc1ZhbHVlKClcIiBbY2xhc3NdPVwiXG4gICAgICBjbGVhckdyaWRGaWx0ZXIgPyAnZmlsdGVyLWJ0bicgOiAnaGlkZS1jbGVhci1maWx0ZXItYnV0dG9uIGZpbHRlci1idG4nXG4gICAgICBcIiBjbGFzcz0nZ2xvYmFsLXJlZnJlc2ggZ2xvYmFsLWJ0bic+PC9idXR0b24+XG5cbiAgICA8IS0tIGJ1dHRvbiBmb3Igc2F2ZSBhbGwgZ3JpZCBhdCBvbmNlIC0tPlxuICAgIDxidXR0b24gcEJ1dHRvbiAqbmdJZj1cImVkaXRBbGxSb3dzICYmIGVkaXRSb3dQZXJtaXNzaW9uXCIgaWQ9XCJzYXZlQWxsR3JpZFZhbHVlc1wiIGljb249XCJwaSBwaS1jaGVja1wiIFtsYWJlbF09XCInU2F2ZSdcIlxuICAgICAgW2NsYXNzXT1cImhpZGVHcmlkU2F2ZUJ1dHRvbiA/ICdoaWRlLWNsZWFyLWZpbHRlci1idXR0b24gc2F2ZS1hbGwtZ3JpZCcgOiAndWktYnV0dG9uLWluZm8gc2F2ZS1hbGwtZ3JpZCdcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJzYXZlQWxsUm93c0F0T25jZSgpXCI+PC9idXR0b24+XG5cbiAgICA8IS0tIGJ1dHRvbiBmb3IgY2FuY2VsIGFsbCBncmlkIGF0IG9uY2UgLS0+XG4gICAgPGJ1dHRvbiBwQnV0dG9uICpuZ0lmPVwiZWRpdEFsbFJvd3MgJiYgIWhpZGVHcmlkQ2FuY2VsQnV0dG9uXCIgaWQ9XCJlZGl0QnRuR2xvYmFsdmFsdWVzXCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICBbbGFiZWxdPVwiJ0NhbmNlbCdcIiBpY29uPVwicGkgcGktdGltZXNcIiBjbGFzcz1cInVpLWJ1dHRvbi1pbmZvXCIgKGNsaWNrKT1cImNhbmNlbEFsbFJvd3NBdE9uY2UoKVwiPjwvYnV0dG9uPlxuXG4gICAgPCEtLSBoZWFkZXIgQnV0dG9uIGZvciBtdWx0aVNlbGVjdCBvbiBHcmlkIC0tPlxuICAgIDxzcGFuICpuZ0lmPVwiYWxsb3dDb2x1bW5Ub2dnbGVcIj5cbiAgICAgIDxwLW11bHRpU2VsZWN0IFtzaG93VG9nZ2xlQWxsXT1cImZhbHNlXCIgb3B0aW9uRGlzYWJsZWQ9XCJmYWxzZVwiIFtvcHRpb25zXT1cInNlbGVjdGVkVG9nZ2xlQ29sdW1uc1wiXG4gICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRDb2x1bW5zXCIgb3B0aW9uTGFiZWw9XCJoZWFkZXJcIiBzZWxlY3RlZEl0ZW1zTGFiZWw9XCJ7MH0gY29sdW1ucyBzZWxlY3RlZFwiXG4gICAgICAgIGNsYXNzPVwiZ3JpZC1jb21wb25lbnQtbXVsdGlzZWxlY3QtaGVhZGVyLWJ1dHRvblwiIHBsYWNlaG9sZGVyPVwiQ2hvb3NlIENvbHVtbnNcIj5cbiAgICAgIDwvcC1tdWx0aVNlbGVjdD5cbiAgICA8L3NwYW4+XG5cbiAgICA8IS0tIGhlYWRlciBCdXR0b24gZm9yIEFkZGluZyBuZXcgUm93IG9uIEdyaWQgLS0+XG4gICAgPGJ1dHRvbiBwQnV0dG9uICpuZ0lmPVwidXNlSW5saW5lQ1JVRCAmJiBhZGRSb3dQZXJtaXNzaW9uICYmICFoaWRlQWRkQnRuXCIgdHlwZT1cImJ1dHRvblwiIFtsYWJlbF09XCInQWRkJ1wiIHBBZGRSb3dcbiAgICAgIFt0YWJsZV09XCJjb21wb25lbnRUYWJsZVJlZlwiIFtwcmV2ZW50TmV3Um93XT1cInByZXZlbnROZXdSb3dcIiBbbmV3Um93XT1cIm5ld0dyaWRSb3dcIiBbaWRdPVwiZGF0YUtleVwiXG4gICAgICBwVG9vbHRpcD1cIkFkZCBOZXcgUm93XCIgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCIgaWNvbj1cInBpIHBpLXBsdXNcIlxuICAgICAgW2NsYXNzXT1cIid1aS1idXR0b24taW5mbyBnbG9iYWwtYWRkLWJ0bicrZ3JpZE5hbWVcIiAoY2xpY2spPVwiYWRkTmV3Um93KG5ld0dyaWRSb3csIHRydWUpXCIgcFJpcHBsZT48L2J1dHRvbj5cblxuXG4gICAgPCEtLSBoZWFkZXIgQnV0dG9uIGZvciBFeGNlbCBGaWxlIG9uIEdyaWQgLS0+XG4gICAgPGJ1dHRvbiAqbmdJZj1cImFsbG93RXhwb3J0VG9FeGNlbFwiIHR5cGU9XCJidXR0b25cIiBwQnV0dG9uIGljb249XCJwaSBwaS1maWxlLWV4Y2VsXCIgKGNsaWNrKT1cImV4cG9ydEV4Y2VsKClcIlxuICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1zdWNjZXNzXCIgcFRvb2x0aXA9XCJFeHBvcnQgdG8gRXhjZWxcIiB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIiBwUmlwcGxlPjwvYnV0dG9uPlxuXG4gICAgPCEtLSBoZWFkZXIgQnV0dG9uIGZvciBQREYgRmlsZSBvbiBHcmlkIC0tPlxuICAgIDxidXR0b24gKm5nSWY9XCJhbGxvd0V4cG9ydFRvUGRmXCIgdHlwZT1cImJ1dHRvblwiIHBCdXR0b24gaWNvbj1cInBpIHBpLWZpbGUtcGRmXCIgKGNsaWNrKT1cImV4cG9ydFBkZigpXCJcbiAgICAgIGNsYXNzPVwicC1idXR0b24td2FybmluZyBtci0yIG1sLTJcIiBwVG9vbHRpcD1cIkV4cG9ydCB0byBQZGZcIiB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIiBwUmlwcGxlPjwvYnV0dG9uPlxuXG4gICAgPCEtLSA8ZGl2ICpuZ0Zvcj1cImxldCByZXBvcnRCdXR0b24gb2YgcmVwb3J0QnV0dG9uc1wiIGNsYXNzPVwidWktYnV0dG9uLWluZm8gbXItMiBtbC0yXCI+XG4gICAgPHNlLWdlbmVyYXRlLXJlcG9ydC1idG4gKm5nSWYgPVwiIXJlcG9ydEJ1dHRvbi5oaWRkZW5cIltyZXBJZF09XCJyZXBvcnRCdXR0b24ucmVwb3J0SWRcIiBbbGFiZWxdPVwicmVwb3J0QnV0dG9uLmxhYmVsXCIgW3BhcmFtc109XCJyZXBvcnRCdXR0b24ucGFyYW1zXCJcbiAgICAgIFtzaG93RGlhbG9nXT1cInJlcG9ydEJ1dHRvbi5zaG93RGlhbG9nXCI+PC9zZS1nZW5lcmF0ZS1yZXBvcnQtYnRuPlxuICA8L2Rpdj4gLS0+XG5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByZXBvcnRCdXR0b24gb2YgcmVwb3J0QnV0dG9uc1wiPlxuICAgICAgPHNlLWdlbmVyYXRlLXJlcG9ydC1idG4gKm5nSWY9XCIhcmVwb3J0QnV0dG9uLmhpZGRlblwiIFtyZXBJbmZvXT1cInJlcG9ydEJ1dHRvblwiIFtsYWJlbF09XCJyZXBvcnRCdXR0b24ubGFiZWxcIlxuICAgICAgICBbcGFyYW1zXT1cInJlcG9ydEJ1dHRvbi5wYXJhbXNcIiBbaWNvbl09XCJyZXBvcnRCdXR0b24uaWNvblwiIFtjbGFzc109XCJyZXBvcnRCdXR0b24uY2xhc3NcIlxuICAgICAgICBbc2hvd0RpYWxvZ109XCJyZXBvcnRCdXR0b24uc2hvd0RpYWxvZ1wiIFtyZXBvcnRUeXBlXT1cIiByZXBvcnRCdXR0b24ucmVwb3J0VHlwZVwiXG4gICAgICAgIFtyZXBvcnRIZWFkZXJdPVwicmVwb3J0QnV0dG9uLnJlcG9ydEhlYWRlclwiIFtyZXBvcnRGb290ZXJdPVwicmVwb3J0QnV0dG9uLnJlcG9ydEZvb3RlclwiPjwvc2UtZ2VuZXJhdGUtcmVwb3J0LWJ0bj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICA8L2Rpdj5cblxuICA8cC10YWJsZSAqbmdJZj1cIiFpc0dyaWRIaWRkZW5cIiBpZD1cIm15LXRhYmxlXCIgW3ZhbHVlXT1cInJvd3NEYXRhXCIgW2NvbHVtbnNdPVwic2VsZWN0ZWRDb2x1bW5zXCIgc29ydE1vZGU9XCJtdWx0aXBsZVwiXG4gICAgW2xhenldPVwidXNlU2VydmVyU2lkZUV2ZW50cyB8fCBwYWdpbmF0aW9uXCIgW3BhZ2luYXRvcl09XCJwYWdpbmF0aW9uXCJcbiAgICBbYWx3YXlzU2hvd1BhZ2luYXRvcl09XCJwYWdpbmF0aW9uICYmIHRvdGFsUmVjb3JkcyA+IDBcIiBbZ2xvYmFsRmlsdGVyRmllbGRzXT1cImdsb2JhbEZpbHRlckZpZWxkc1wiXG4gICAgW2NsYXNzXT1cIicgZ3JpZC1jb21wb25lbnQtbWFpbi10YWJsZSAnICsgKHBhZ2luYXRpb24gfHwgIXJvd3NEYXRhLmxlbmd0aCA/ICcgcGFnaW5hdGlvbiAnIDogJycpICsgKHRhYmxlU3R5bGUuaW5jbHVkZXMoJ3dpZHRoJykgPyAnIGhhc1RhYmxlV2lkdGhTdHlsZSAnIDogJycpICsgKGF1dG9SZXNpemUgPyAnJyA6ICd0YWJsZS1sYXlvdXQtYXV0bycpIFwiXG4gICAgKG9uQ29sUmVzaXplKT1cIm9uQ29sdW1uUmVzaXplKCRldmVudCxkdClcIiBbcmVzaXphYmxlQ29sdW1uc109XCJ0cnVlXCIgcmVzcG9uc2l2ZUxheW91dD1cInNjcm9sbFwiXG4gICAgY29sdW1uUmVzaXplTW9kZT1cImV4cGFuZFwiIFtyb3dzXT1cImRlZmF1bHRSb3dzXCIgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxuICAgIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwic2V0UGFnaW5hdGlvbkxlbmd0aFwiIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwic2hvd0N1cnJlbnRQYWdlUmVwb3J0XCJcbiAgICBjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlPVwiU2hvd2luZyB7Zmlyc3R9IHRvIHtsYXN0fSBvZiB7e1xuICAgICAgdG90YWxSZWNvcmRzXG4gICAgfX0gZW50cmllc1wiIFtsb2FkaW5nXT1cIiFzZXRHcmlkUmVmcmVzaFRpbWUgPyBsb2FkaW5nIDogZmFsc2VcIlxuICAgIChvblNvcnQpPVwic29ydERpc2FibGVkID8gJycgOiBoYW5kbGVTb3J0Q2hhbmdlKCRldmVudClcIiAob25GaWx0ZXIpPVwiaGFuZGxlRmlsdGVyQ2hhbmdlKCRldmVudClcIlxuICAgIChvbkxhenlMb2FkKT1cInNob3VsZFJ1blNlcnZlclNpZGUoJGV2ZW50KSA/IGhhbmRsZVNlcnZlclNpZGVFdmVudHMoJGV2ZW50LCBkdCkgOiBudWxsXCJcbiAgICAob25QYWdlKT1cImdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQgPyBzaG93Q29uZmlybWF0aW9uKCRldmVudCkgOiBoYW5kbGVTZXJ2ZXJTaWRlUGFnaW5hdGlvbigkZXZlbnQpXCIgI2R0XG4gICAgW2RhdGFLZXldPVwiZGF0YUtleVwiIFtzZWxlY3Rpb25dPVwic2VsZWN0ZWRSb3dzXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblRhYmxlU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIiBzZWxlY3Rpb25Nb2RlPVwibXVsdGlwbGVcIiBbc2Nyb2xsYWJsZV09XCJzY3JvbGxhYmxlXCJcbiAgICBbdGFibGVTdHlsZV09XCJ0YWJsZVN0eWxlXCIgW3Njcm9sbEhlaWdodF09XCJzY3JvbGxIZWlnaHRcIiBlZGl0TW9kZT1cInJvd1wiIFtlZGl0aW5nUm93S2V5c109XCJlZGl0aW5nUm93S2V5c1wiXG4gICAgW3Jvd0hvdmVyXT1cInJvd0hvdmVyXCIgW25nQ2xhc3NdPVwic2V0Q2xhc3NhQW5kSWQoZHQpXCIgKG9uUm93UmVvcmRlcik9XCJvblJvd1Jlb3JkZXIoJGV2ZW50KVwiPlxuXG4gICAgPGRpdiAqbmdJZj1cInJvd0FjdGlvbnMubGVuZ3RoID4gMCAmJiByb3dBY3Rpb25zLmxlbmd0aCA+IDBcIiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxuICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IHJvd0FjdGlvbiBvZiByb3dBY3Rpb25zXCI+XG4gICAgICAgIDxidXR0b24gcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgW2xhYmVsXT1cInJvd0FjdGlvbi50aXRsZVwiIFtjbGFzc109XCJyb3dBY3Rpb24uY2xhc3NcIlxuICAgICAgICAgIChjbGljayk9XCJyb3dBY3Rpb24ub25DbGljayhzZWxlY3RlZFJvd3MpXCI+PC9idXR0b24+XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIGhlYWRlciBjb2x1bW5zIG9uIEdyaWQgLS0+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiIGxldC1jb2xzPlxuICAgICAgPHRyPlxuICAgICAgICA8dGggcFJlc2l6YWJsZUNvbHVtbiAqbmdJZj1cImFsbG93U2VsZWN0aW9uICYmIHNlbGVjdGlvblR5cGUgPT09ICdtdWx0aXBsZSdcIiBjbGFzcz1cImdyaWQtY29tcG9uZW50LXNlbGVjdGlvblwiXG4gICAgICAgICAgaWQ9XCJ7e2FsbG93U2VsZWN0aW9uSGVhZGVyfX1cIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRoLWNvbnRlbnQtd3JhcHBlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQtY29tcG9uZW50LXRhYmxlLWhlYWRlci1pbm5lci1kaXYtMlxuICAgICAgICAgICAgICAgICAgdGFibGUtaGVhZGVyLWlubmVyLWRpdiBkaXYtbGFzdC1pbm5lci1odG1sLWlzLWljb25cIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmbGV4LWdyb3ctMVwiPiB7e2FsbG93U2VsZWN0aW9uSGVhZGVyfX0gPC9zcGFuPlxuICAgICAgICAgICAgICA8cC10YWJsZUhlYWRlckNoZWNrYm94ICpuZ0lmPVwic2VsZWN0aW9uVHlwZSA9PT0gJ211bHRpcGxlJ1wiIGJpbmFyeT1cInRydWVcIlxuICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJoYW5kbGVIZWFkZXJDaGVja2JveENoYW5nZSgkZXZlbnQpXCI+PC9wLXRhYmxlSGVhZGVyQ2hlY2tib3g+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aCBwUmVzaXphYmxlQ29sdW1uICpuZ0lmPVwiYWxsb3dTZWxlY3Rpb24gJiYgc2VsZWN0aW9uVHlwZSA9PT0gJ3NpbmdsZSdcIiBpZD1cIlNlbGVjdFwiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIlxuICAgICAgICAgIGNsYXNzPVwiZ3JpZC1jb21wb25lbnQtc2VsZWN0aW9uXCI+XG4gICAgICAgICAgU2VsZWN0XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aCBwUmVzaXphYmxlQ29sdW1uIGlkPVwiQWN0aW9uc1wiXG4gICAgICAgICAgKm5nSWY9XCJzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmICFkaXNhYmxlZFNhdmVCdG4gJiYgY29sdW1ucz8ubGVuZ3RoID4gMCAmJiAoY29sdW1uQWN0aW9ucy5sZW5ndGggPiAwIHx8ICh1c2VJbmxpbmVDUlVEICYmIChkZWxldGVSb3dQZXJtaXNzaW9uIHx8IGVkaXRSb3dQZXJtaXNzaW9uKSkpXCJcbiAgICAgICAgICBbY2xhc3NdPVwiaW5FZGl0TW9kZSA/ICd0aHJlZS1hY3Rpb24tYnRuJyA6ICd0d28tYWN0aW9uLWJ0bicgXCIgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiPlxuICAgICAgICAgIEFjdGlvbnNcbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoIHBSZXNpemFibGVDb2x1bW4gKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2xzXCJcbiAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiY29sdW1uPy5jb2x1bW5XaWR0aCA/IGNvbHVtbj8uY29sdW1uV2lkdGgrJ3B4JyA6IGNvbHVtbj8uY3VzdG9tV2lkdGgrJ3B4J1wiXG4gICAgICAgICAgaWQ9XCJ7e2NvbHVtbi5oZWFkZXJ9fVwiIFthdHRyLmRhdGEtY29sdW1uLWhlYWRlcl09XCJjb2x1bW4/LmhlYWRlclwiIFtwU29ydGFibGVDb2x1bW5dPVwiY29sdW1uLmZpZWxkXCJcbiAgICAgICAgICBbY2xhc3NdPVwiY29sdW1uLnR5cGUgPT09ICdib29sZWFuJyA/ICdjaGVja2JveC10aCcgOiAnJ1wiXG4gICAgICAgICAgW3BTb3J0YWJsZUNvbHVtbkRpc2FibGVkXT1cInNvcnREaXNhYmxlZCAmJiB1c2VTZXJ2ZXJTaWRlRXZlbnRzID8gdHJ1ZSA6IGNvbHVtbi5zb3J0aW5nID09PSBmYWxzZVwiXG4gICAgICAgICAgY2xhc3M9XCJjb2x1bW4/LnR5cGUgPT09ICdtdWx0aXBsZScgPyAnZ3JpZC1jb21wb25lbnQtc2VsZWN0LXRoLWNvbHVtbi10eXBlLW11bHRpcGxlJyA6ICcnXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aC1jb250ZW50LXdyYXBwZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkLWNvbXBvbmVudC10YWJsZS1oZWFkZXItaW5uZXItZGl2LTEgdGFibGUtaGVhZGVyLWlubmVyLWRpdiBkaXYtbGFzdC1pbm5lci1odG1sLWlzLWljb25cIj5cbiAgICAgICAgICAgICAgPHNwYW4gW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cIidzZWxmJ1wiIFtjbGFzc109XCInZmxleC1ncm93LTEnXCI+e3sgY29sdW1uLmhlYWRlciB9fVxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uLmlzUmVxdWlyZWRcIiBjbGFzcz1cImdyaWQtY29tcG9uZW50IHJlcXVpcmVkLXN0YXJcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxwLXNvcnRJY29uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4uc29ydGluZyAhPT0gZmFsc2UgJiYgY29sdW1uPy50eXBlICE9PSAnbXVsdGlwbGUnICYmICghKGVkaXRBbGxSb3dzICYmIHBhZ2luYXRpb24pIHx8IHNvcnRJY29uSGlkZGVuKVwiXG4gICAgICAgICAgICAgICAgW2ZpZWxkXT1cImNvbHVtbi5maWVsZFwiIChjbGljayk9XCJoYW5kbGVDdXN0b21Tb3J0aW5nKClcIj48L3Atc29ydEljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aCAqbmdJZj1cImhhc01vcmVDb2x1bW5zKClcIiBwUmVzaXphYmxlQ29sdW1uIGlkPVwiTW9yZUFjdGlvbnNcIiBjbGFzcz1cIm1vcmUtYWN0aW9ucy10aFwiPk1vcmU8L3RoPlxuICAgICAgICA8dGggcFJlc2l6YWJsZUNvbHVtbiBpZD1cIkFjdGlvbnNcIlxuICAgICAgICAgICpuZ0lmPVwiIXNldEFjdGlvbkNvbHVtbkFzRmlyc3QgJiYgIWRpc2FibGVkU2F2ZUJ0biAmJiBjb2x1bW5zPy5sZW5ndGggPiAwICYmIChjb2x1bW5BY3Rpb25zLmxlbmd0aCA+IDAgfHwgKHVzZUlubGluZUNSVUQgJiYgKGRlbGV0ZVJvd1Blcm1pc3Npb24gfHwgZWRpdFJvd1Blcm1pc3Npb24pKSlcIlxuICAgICAgICAgIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj5BY3Rpb25zPC90aD5cbiAgICAgIDwvdHI+XG4gICAgICA8dHIgKm5nSWY9XCJmaWx0ZXJpbmcgJiYgIWhpZGVGaWx0ZXJcIj5cbiAgICAgICAgPHRoIHBSZXNpemFibGVDb2x1bW4gKm5nSWY9XCJhbGxvd1NlbGVjdGlvblwiIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiPjwvdGg+XG4gICAgICAgIDx0aCBwUmVzaXphYmxlQ29sdW1uICpuZ0lmPVwic2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiAhZGlzYWJsZWRTYXZlQnRuICYmIHVzZUlubGluZUNSVURcIlxuICAgICAgICAgIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggcFJlc2l6YWJsZUNvbHVtbiAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHNcIlxuICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJjb2x1bW4/LmNvbHVtbldpZHRoID8gY29sdW1uPy5jb2x1bW5XaWR0aCsncHgnIDogY29sdW1uPy5jdXN0b21XaWR0aCsncHgnXCJcbiAgICAgICAgICBpZD1cInt7Y29sdW1uLmhlYWRlcn19XCIgW25nU3dpdGNoXT1cImNvbHVtbj8uZmlsdGVyPy50eXBlXCJcbiAgICAgICAgICBbY2xhc3NdPVwiaGlkZUZpbHRlck9wdGlvbnMgPyAnaGlkZS10YWJsZS1maWx0ZXIgdGVtcCcgOiAndGVtcCdcIj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbHVtbi5maWx0ZXJpbmcgIT09IGZhbHNlXCIgW2NsYXNzXT1cImNvbHVtbi5maWx0ZXI/LnNob3dGaWx0ZXIgPyAnJyA6ICdoaWRlLWZpbHRlci1pY29uJ1wiPlxuICAgICAgICAgICAgPCEtLSBUZXh0IGlucHV0IG9uIEhlYWRlciBGb3IgRmlsdGVyLS0+XG4gICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgY2xhc3M9XCJuby1maWx0ZXItaWNvblwiIFt0eXBlXT1cIid0ZXh0J1wiIFtmaWVsZF09XCJjb2x1bW4uZmllbGRcIiAqbmdTd2l0Y2hDYXNlPVwiJ2lucHV0J1wiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZmlsdGVyXCIgbGV0LXZhbHVlIGxldC1maWx0ZXI9XCJmaWx0ZXJDYWxsYmFja1wiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwiY29sdW1uLmZpbHRlclZhbHVlXCIgW2NsYXNzXT1cImNvbHVtbj8uZmllbGQ/LnRvTG93ZXJDYXNlKClcIlxuICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImFwcGx5RW50ZXJFdmVudChmaWx0ZXIsICRldmVudCwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAoYmx1cik9XCJzZXRGaWx0ZXJGb2N1c091dChjb2x1bW4sIGZpbHRlciwgJGV2ZW50KVwiIFtuYW1lXT1cImNvbHVtbi5maWVsZFwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hdXRvY29tcGxldGVdPVwiKGNvbHVtbi5hdXRvQ29tcGxldGUgPT09IGZhbHNlIHx8IGNvbHVtbi5maWx0ZXJBdXRvQ29tcGxldGUgPT09IGZhbHNlIHx8IGF1dG9Db21wbGV0ZSA9PT0gZmFsc2UpID8gJ29mZicgOiAnb24nXCJcbiAgICAgICAgICAgICAgICAgIChrZXl1cCk9XCJyZW1vdmluZ0ZpbHRlcnMoJGV2ZW50LCBjb2x1bW4pO2JhY2tzcGFjZUV2ZW50KCRldmVudCwgY29sdW1uKVwiIHBJbnB1dFRleHQgLz5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvcC1jb2x1bW5GaWx0ZXI+XG5cbiAgICAgICAgICAgIDwhLS0gTnVtZXJpYyBpbnB1dCBvbiBIZWFkZXIgRm9yIEZpbHRlci0tPlxuICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyIGNsYXNzPVwibm8tZmlsdGVyLWljb25cIiBbdHlwZV09XCInbnVtZXJpYydcIiBbZmllbGRdPVwiY29sdW1uLmZpZWxkXCJcbiAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidudW1lcmljX2lucHV0J1wiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZmlsdGVyXCIgbGV0LXZhbHVlIGxldC1maWx0ZXI9XCJmaWx0ZXJDYWxsYmFja1wiPlxuICAgICAgICAgICAgICAgIDxwLWlucHV0TnVtYmVyIFsobmdNb2RlbCldPVwiY29sdW1uLmZpbHRlclZhbHVlXCIgW2NsYXNzXT1cImNvbHVtbj8uZmllbGQ/LnRvTG93ZXJDYXNlKClcIlxuICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImFwcGx5RW50ZXJFdmVudChmaWx0ZXIsICRldmVudCwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAob25CbHVyKT1cInNldEZpbHRlckZvY3VzT3V0KGNvbHVtbiwgZmlsdGVyLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIChrZXl1cCk9XCJyZW1vdmluZ0ZpbHRlcnMoJGV2ZW50LCBjb2x1bW4pO2JhY2tzcGFjZUV2ZW50KCRldmVudCwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hdXRvY29tcGxldGVdPVwiY29sdW1uLmZpbHRlckF1dG9Db21wbGV0ZSA9PT0gdHJ1ZSA/ICdvbicgOiAnb2ZmJ1wiPjwvcC1pbnB1dE51bWJlcj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvcC1jb2x1bW5GaWx0ZXI+XG5cbiAgICAgICAgICAgIDwhLS0gbG9va3VwIGlucHV0IG9uIEhlYWRlciBGb3IgRmlsdGVyLS0+XG4gICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgY2xhc3M9XCJuby1maWx0ZXItaWNvblwiIFt0eXBlXT1cIid0ZXh0J1wiIFtmaWVsZF09XCJjb2x1bW4uZmllbGRcIiBtYXRjaE1vZGU9XCJlcXVhbHNcIlxuICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2xvb2t1cF9pbnB1dCdcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZpbHRlclwiIGxldC12YWx1ZSBsZXQtZmlsdGVyPVwiZmlsdGVyQ2FsbGJhY2tcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xvc2UtaWNvbi13cmFwcGVyIGdyaWQtY29tcG9uZW50IGxvb2t1cC1maWx0ZXItd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvb2t1cC1maWx0ZXItaW5wdXQtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW2lkXT1cImNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfZmlsdGVyJ1wiIGNsYXNzPVwiZ3JpZC1jb21wb25lbnQgbG9va3VwLWZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXV0b2NvbXBsZXRlXT1cIihjb2x1bW4uYXV0b0NvbXBsZXRlID09PSBmYWxzZSB8fCBjb2x1bW4uZmlsdGVyQXV0b0NvbXBsZXRlID09PSBmYWxzZSB8fCBhdXRvQ29tcGxldGUgPT09IGZhbHNlKSA/ICdvZmYnIDogJ29uJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIiBbbmdNb2RlbF09XCJsb29rdXBGaWx0ZXJJbnB1dE5nTW9kZWwoY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlTG9va3VwSW5wdXROZ01vZGVsKCdsb29rdXBGaWx0ZXInLCBjb2x1bW4sICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXRGaWx0ZXJMb29rdXAoY29sdW1uKVwiIChrZXl1cC5lbnRlcik9XCJhcHBseUVudGVyRXZlbnQoZmlsdGVyLCAkZXZlbnQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cInNldEZpbHRlckZvY3VzT3V0KGNvbHVtbiwgZmlsdGVyLCAkZXZlbnQpXCIgW25hbWVdPVwiY29sdW1uLmZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwicmVtb3ZpbmdGaWx0ZXJzKCRldmVudCwgY29sdW1uKTtiYWNrc3BhY2VFdmVudCgkZXZlbnQsIGNvbHVtbilcIiBwSW5wdXRUZXh0IC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXJlY3Qtd3JhcHBlci1jbG9zZS1pY29uLWxvb2t1cFwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiY29sdW1uLmZpbHRlclZhbHVlXCIgaWNvbj1cInBpIHBpLXRpbWVzXCIgcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibG9va3VwQ2xlYXJWYWx1ZShjb2x1bW4pXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3AtY29sdW1uRmlsdGVyPlxuXG4gICAgICAgICAgICA8IS0tIGNoZWNrYm94IG9uIEhlYWRlciBGb3IgRmlsdGVyLS0+XG4gICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgY2xhc3M9XCJuby1maWx0ZXItaWNvblwiIHR5cGU9XCJib29sZWFuXCIgW2ZpZWxkXT1cImNvbHVtbi5maWVsZFwiICpuZ1N3aXRjaENhc2U9XCInY2hlY2tib3gnXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmaWx0ZXJcIiBsZXQtdmFsdWUgbGV0LWZpbHRlcj1cImZpbHRlckNhbGxiYWNrXCI+XG4gICAgICAgICAgICAgICAgPHAtY2hlY2tib3ggW2JpbmFyeV09XCJ0cnVlXCIgW2Rpc2FibGVkXT1cImNvbHVtbi5kaXNhYmxlZFwiIFtuZ01vZGVsXT1cImNvbHVtbi5maWx0ZXJWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiYXBwbHlFbnRlckV2ZW50KGZpbHRlciwgJGV2ZW50LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJzZXRGaWx0ZXJGb2N1c091dChjb2x1bW4sIGZpbHRlciwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjbGlja0NoZWNrQm94RmlsdGVyKGNvbHVtbiwgJGV2ZW50KVwiIChrZXlkb3duKT1cImJhY2tzcGFjZUV2ZW50KCRldmVudCwgY29sdW1uKVwiPlxuICAgICAgICAgICAgICAgIDwvcC1jaGVja2JveD5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvcC1jb2x1bW5GaWx0ZXI+XG5cbiAgICAgICAgICAgIDwhLS0gbXVsdGlTZWxlY3Qgb24gSGVhZGVyIEZvciBGaWx0ZXItLT5cbiAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlciBjbGFzcz1cIm5vLWZpbHRlci1pY29uXCIgW2ZpZWxkXT1cImNvbHVtbi5maWVsZFwiIG1hdGNoTW9kZT1cImluXCIgW3Nob3dNZW51XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidtdWx0aS1zZWxlY3QnXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmaWx0ZXJcIiBsZXQtdmFsdWUgbGV0LWZpbHRlcj1cImZpbHRlckNhbGxiYWNrXCI+XG4gICAgICAgICAgICAgICAgPHAtbXVsdGlTZWxlY3QgWyhuZ01vZGVsKV09XCJjb2x1bW4uZmlsdGVyVmFsdWVcIiBbb3B0aW9uc109XCJjb2x1bW4uZmlsdGVyLmRhdGEgfHwgW11cIiBbYXBwZW5kVG9dPVwiJ2JvZHknXCJcbiAgICAgICAgICAgICAgICAgIFtuYW1lXT1cImNvbHVtbi5maWVsZFwiIChrZXl1cC5lbnRlcik9XCJhcHBseUVudGVyRXZlbnQoZmlsdGVyLCAkZXZlbnQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgW29wdGlvblZhbHVlXT1cImNvbHVtbi5vcHRpb25WYWx1ZVwiIFtvcHRpb25MYWJlbF09XCJjb2x1bW4ub3B0aW9uTGFiZWxcIlxuICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cInNldEZpbHRlckZvY3VzT3V0KGNvbHVtbiwgZmlsdGVyLCAkZXZlbnQpXCIgKGtleWRvd24pPVwiYmFja3NwYWNlRXZlbnQoJGV2ZW50LCBjb2x1bW4pXCI+XG5cbiAgICAgICAgICAgICAgICA8L3AtbXVsdGlTZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3AtY29sdW1uRmlsdGVyPlxuXG4gICAgICAgICAgICA8IS0tIGRyb3Bkb3duIG9uIEhlYWRlciBGb3IgRmlsdGVyLS0+XG4gICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgY2xhc3M9XCJuby1maWx0ZXItaWNvblwiIFtmaWVsZF09XCJjb2x1bW4uZmllbGRcIiBtYXRjaE1vZGU9XCJpblwiIFtzaG93TWVudV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInZHJvcGRvd24nXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmaWx0ZXJcIiBsZXQtdmFsdWUgbGV0LWZpbHRlcj1cImZpbHRlckNhbGxiYWNrXCI+XG4gICAgICAgICAgICAgICAgPHAtZHJvcGRvd24gW3Nob3dDbGVhcl09XCJ0cnVlXCIgW3BsYWNlaG9sZGVyXT1cIidTZWxlY3QnXCIgW2ZpbHRlcl09XCJjb2x1bW4uYWxsb3dTZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb2x1bW4uZmlsdGVyVmFsdWVcIiAoa2V5dXAuZW50ZXIpPVwiYXBwbHlEcm9wZG93bkZpbHRlcihmaWx0ZXIsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiY29sdW1uLmZpbHRlci5kYXRhIHx8IFtdXCIgKG9uQ2hhbmdlKT1cInNlYXJjaERyb3Bkb3duRmlsdGVyKGZpbHRlciwgJGV2ZW50LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgIFthcHBlbmRUb109XCInYm9keSdcIiBmaWx0ZXJNYXRjaE1vZGU9XCJzdGFydHNXaXRoXCI+PC9wLWRyb3Bkb3duPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9wLWNvbHVtbkZpbHRlcj5cblxuICAgICAgICAgICAgPCEtLSBjYWxlbmRhciBvbiBIZWFkZXIgRm9yIEZpbHRlci0tPlxuICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyIGNsYXNzPVwibm8tZmlsdGVyLWljb25cIiBbZmllbGRdPVwiY29sdW1uLmZpZWxkXCIgbWF0Y2hNb2RlPVwiaW5cIiBbc2hvd01lbnVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2NhbGVuZGFyJ1wiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZmlsdGVyXCIgbGV0LXZhbHVlIGxldC1maWx0ZXI9XCJmaWx0ZXJDYWxsYmFja1wiPlxuICAgICAgICAgICAgICAgIDxwLWRhdGVwaWNrZXIgW3BsYWNlaG9sZGVyXT1cIidTZWxlY3QtRGF0ZSdcIiBbKG5nTW9kZWwpXT1cImNvbHVtbi5maWx0ZXJWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY29sdW1uLmZpZWxkICsgJy1maWx0ZXItaW5wdXQnXCIgKGtleXVwLmVudGVyKT1cImFwcGx5RW50ZXJFdmVudChmaWx0ZXIsICRldmVudCwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICBhcHBlbmRUbz1cImJvZHlcIiAob25TZWxlY3QpPVwic2VsZWN0RGF0ZShjb2x1bW4pXCIgW2lucHV0SWRdPVwiY29sdW1uLmZpZWxkXCIgaG91ckZvcm1hdD1cIjEyXCJcbiAgICAgICAgICAgICAgICAgIChrZXl1cC5iYWNrc3BhY2UpPVwicmVtb3ZlTnVsbENhbGVuZGFyKGNvbHVtbiwgZmlsdGVyLCAkZXZlbnQpXCIgW3Nob3dCdXR0b25CYXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAob25DbG9zZSk9XCJzZXRGaWx0ZXJGb2N1c091dChjb2x1bW4sIGZpbHRlciwgJGV2ZW50KVwiIFtkYXRlRm9ybWF0XT1cImNhbGVuZGFyRm9ybWF0XCJcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNhbGVuZGFySW5wdXRWYWx1ZShjb2x1bW4sIHt9LCB0cnVlKVwiIChvbkNsZWFyQ2xpY2spPVwiYmFja3NwYWNlRXZlbnQoJGV2ZW50LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cInNldEZpbHRlckZvY3VzT3V0KGNvbHVtbiwgZmlsdGVyLCAkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPC9wLWRhdGVwaWNrZXI+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3AtY29sdW1uRmlsdGVyPlxuXG4gICAgICAgICAgICA8IS0tIERlZmF1bHQgRmlsdGVyIEZvciBIZWFkZXIgIC0tPlxuICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyIGNsYXNzPVwibm8tZmlsdGVyLWljb25cIiBbdHlwZV09XCJcbiAgICAgICAgICAgICAgICBjb2x1bW4udHlwZSAmJiBjb2x1bW4udHlwZSAhPT0gJ2xpbmsnID8gY29sdW1uLnR5cGUgOiAndGV4dCdcbiAgICAgICAgICAgICAgXCIgW2ZpZWxkXT1cImNvbHVtbi5maWVsZFwiIGRpc3BsYXk9XCJtZW51XCIgKm5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgICAgIDwvcC1jb2x1bW5GaWx0ZXI+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggKm5nSWY9XCJoYXNNb3JlQ29sdW1ucygpXCIgcFJlc2l6YWJsZUNvbHVtbiBjbGFzcz1cIm1vcmUtYWN0aW9ucy10aFwiPjwvdGg+XG4gICAgICAgIDx0aCBwUmVzaXphYmxlQ29sdW1uXG4gICAgICAgICAgKm5nSWY9XCIhc2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiAhZGlzYWJsZWRTYXZlQnRuICYmIGNvbHVtbnM/Lmxlbmd0aCA+IDAgJiYgKGNvbHVtbkFjdGlvbnMubGVuZ3RoID4gMCB8fCAodXNlSW5saW5lQ1JVRCAmJiAoZGVsZXRlUm93UGVybWlzc2lvbiB8fCBlZGl0Um93UGVybWlzc2lvbikpKVwiXG4gICAgICAgICAgW2NsYXNzXT1cImluRWRpdE1vZGUgPyAndGhyZWUtYWN0aW9uLWJ0bicgOiAndHdvLWFjdGlvbi1idG4nXCI+PC90aD5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDwhLS0gQm9keSBjb2x1bW5zIG9uIEdyaWQgLS0+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtcm93IGxldC1lZGl0aW5nPVwiZWRpdGluZ1wiIGxldC1yaT1cInJvd0luZGV4XCI+XG4gICAgICA8dHIgW3N0eWxlXT1cInJvd1N0eWxlXCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAnaGlnaGxpZ2h0ZWQtcm93Jzogcm93Py5oaWdobGlnaHRyb3csXG4gICAgICAgICdlbGxpcHNpcy10cnVlJzogZWxsaXBzaXMsXG4gICAgICAgICdwLXNlbGVjdGFibGUtcm93IHdvcmRXcmFwVHJ1ZSc6IHdvcmRXcmFwLFxuICAgICAgICAnd29yZFdyYXBGYWxzZSBwLXNlbGVjdGFibGUtcm93JzogIXdvcmRXcmFwXG4gICAgICB9XCIgKGNsaWNrKT1cInNlbGVjdGVkUm93UmVjb3JkID0gcm93XCIgW3BFZGl0YWJsZVJvd109XCJyb3dcIiBbcFJlb3JkZXJhYmxlUm93XT1cInJpXCIgI2dyaWRSb3cgW2lkXT1cInJvd1tkYXRhS2V5XVwiPlxuICAgICAgICA8dGQgKm5nSWY9XCJhbGxvd1NlbGVjdGlvblwiIGNsYXNzPVwiZ3JpZC1jb21wb25lbnQtc2VsZWN0aW9uXCIgcFJlb3JkZXJhYmxlUm93SGFuZGxlPlxuICAgICAgICAgIDxwLXRhYmxlUmFkaW9CdXR0b24gW3ZhbHVlXT1cInJvd1wiICpuZ0lmPVwic2VsZWN0aW9uVHlwZSA9PT0gJ3NpbmdsZSdcIj48L3AtdGFibGVSYWRpb0J1dHRvbj5cbiAgICAgICAgICA8cC10YWJsZUNoZWNrYm94IFt2YWx1ZV09XCJyb3dcIiAqbmdJZj1cInNlbGVjdGlvblR5cGUgPT09ICdtdWx0aXBsZSdcIj48L3AtdGFibGVDaGVja2JveD5cbiAgICAgICAgPC90ZD5cblxuICAgICAgICA8IS0tIGZpcnN0IGFjdGlvbnMgY29sdW1uIC0tPlxuICAgICAgICA8IS0tIDx0ZCAqbmdJZj1cInNldEFjdGlvbkNvbHVtbkFzRmlyc3QgJiYgY29sdW1uQWN0aW9ucy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJhY3Rpb24tYnRuXCIgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjb2x1bW5BY3Rpb25zXCI+XG4gICAgICAgICAgICA8aSBbdGl0bGVdPVwiYWN0aW9uLnRvb2x0aXBcIiBbY2xhc3NdPVwiYWN0aW9uLmljb25cIiAoY2xpY2spPVwiaGFuZGxlQWN0aW9uQ2xpY2soJGV2ZW50LCBhY3Rpb24sIHJvdylcIj48L2k+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3RkPiAtLT5cbiAgICAgICAgPHRkICpuZ0lmPVwic2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiBjb2x1bW5BY3Rpb25zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgY29sdW1uQWN0aW9uc1wiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhY3Rpb24tYnRuXCIgKm5nSWY9XCJhY3Rpb24udmlzaWJsZSA/IGFjdGlvbi52aXNpYmxlKHJvdykgOiB0cnVlXCI+XG4gICAgICAgICAgICAgIDxpIFt0aXRsZV09XCJhY3Rpb24udG9vbHRpcFwiIFtjbGFzc109XCJhY3Rpb24uaWNvblwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmFjdGlvbi1idG4tZGlzYWJsZWRdPVwiYWN0aW9uLmRpc2FibGVkID8gYWN0aW9uLmRpc2FibGVkKHJvdykgOiBmYWxzZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIihhY3Rpb24uZGlzYWJsZWQgJiYgYWN0aW9uLmRpc2FibGVkKHJvdykpID8gbnVsbCA6IGhhbmRsZUFjdGlvbkNsaWNrKCRldmVudCwgYWN0aW9uLCByb3cpXCI+PC9pPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgKm5nSWY9XCJzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmIHVzZUlubGluZUNSVUQgJiYgKGRlbGV0ZVJvd1Blcm1pc3Npb24gfHwgZWRpdFJvd1Blcm1pc3Npb24pXCJcbiAgICAgICAgICBbY2xhc3NdPVwiaW5FZGl0TW9kZSA/ICd0aHJlZS1hY3Rpb24tYnRuJyA6ICd0d28tYWN0aW9uLWJ0bidcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImRpc2FibGVkU2F2ZUJ0biA/ICdoaWRlLWNsZWFyLWZpbHRlci1idXR0b24nIDogJydcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNldEFjdGlvbkNvbHVtbldpZHRoXCI+XG4gICAgICAgICAgICA8c2UtZ3JpZC1yb3ctYWN0aW9ucyBbZWRpdGluZ109XCJlZGl0aW5nXCIgW2VkaXRSb3dQZXJtaXNzaW9uXT1cImVkaXRSb3dQZXJtaXNzaW9uXCJcbiAgICAgICAgICAgICAgW2RlbGV0ZVJvd1Blcm1pc3Npb25dPVwiZGVsZXRlUm93UGVybWlzc2lvblwiIFtoaWRlRGVsZXRlQnRuXT1cImhpZGVEZWxldGVCdG5cIiBbaGlkZUVkaXRCdG5dPVwiaGlkZUVkaXRCdG5cIlxuICAgICAgICAgICAgICBbcm93XT1cInJvd1wiIChvblJvd0VkaXRJbml0QnRuKT1cIm9uUm93RWRpdEluaXQoJGV2ZW50KVwiIChkZWxldGVSZWNvcmRCdG4pPVwiZGVsZXRlUmVjb3JkKCRldmVudClcIlxuICAgICAgICAgICAgICAob25Sb3dFZGl0U2F2ZUJ0bik9XCJvblJvd0VkaXRTYXZlKCRldmVudClcIiAob25Sb3dFZGl0Q2FuY2VsQnRuKT1cIm9uUm93RWRpdENhbmNlbCgkZXZlbnQsIHJpKVwiXG4gICAgICAgICAgICAgIFtlZGl0QWxsUm93c109XCJlZGl0QWxsUm93c1wiPlxuICAgICAgICAgICAgPC9zZS1ncmlkLXJvdy1hY3Rpb25zPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC90ZD5cblxuICAgICAgICA8IS0tIEdyaWQgUm93cyBEYXRhIEJpbmRpbmdzIFN0YXJ0IC0tPlxuICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBzZWxlY3RlZENvbHVtbnNcIiBbbmdTd2l0Y2hdPVwiY29sdW1uLnR5cGVcIiBbc3R5bGVdPVwiY29sdW1uLnN0eWxlXCJcbiAgICAgICAgICBbY2xhc3NdPVwiY29sdW1uLnN0eWxlID8gJycgOiAndy1zdGF0aWMtY29sJ1wiIFthdHRyLmRhdGEtY29sdW1uLWZpZWxkXT1cImNvbHVtbj8uZmllbGRcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbi5ob3ZlckRhdGEgJiYgIWNvbHVtbi5pc1RleHRhcmVhID8gJ3RkLW92ZXJsYXknIDogJydcIiBwUmVvcmRlcmFibGVSb3dIYW5kbGU+XG4gICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwiY29sdW1uLmhvdmVyRGF0YSAmJiAhY29sdW1uLmlzVGV4dGFyZWEgPyAndGQtd3JhcHBlcicgOiAnJ1wiXG4gICAgICAgICAgICAobW91c2VlbnRlcik9XCIoY29sdW1uLmhvdmVyRGF0YSAmJiBjb2x1bW4uaG92ZXJEYXRhLmNvbXBvbmVudCAmJiAhY29sdW1uLmlzVGV4dGFyZWEpID8gYWRkRHluYW1pY1BhbmVsT3ZlcmxheUNvbXBvbmVudChjb2x1bW4uaG92ZXJEYXRhLCBvdmVybGF5UGFuZWwsICRldmVudCwgcm93KSA6ICcnXCJcbiAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cIihjb2x1bW4uaG92ZXJEYXRhICYmIGNvbHVtbi5ob3ZlckRhdGEuY29tcG9uZW50ICYmICFjb2x1bW4uaXNUZXh0YXJlYSkgPyAgbW91c2VMZWF2ZUV2ZW50KG92ZXJsYXlQYW5lbCkgOiAnJ1wiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZC1jb250ZW50LXdyYXBwZXJcIiBbc3R5bGVdPVwiY29sdW1uLnN0eWxlXCI+XG5cbiAgICAgICAgICAgICAgPCEtLSBCb29sZWFuIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2Jvb2xlYW4nXCI+XG4gICAgICAgIDx0ZCAqbmdJZj1cIiFlZGl0aW5nICYmIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5zaG93ICE9IGZhbHNlXCI+XG4gICAgICAgICAgPHAtY2hlY2tib3ggW25nQ2xhc3NdPVwieydkaXNhYmxlZC1jaGVja2JveCc6IGNvbHVtbi5kaXNhYmxlZH1cIiBbYmluYXJ5XT1cInRydWVcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hlY2tCb3hDaGFuZ2VFdmVudCgkZXZlbnQsIGNvbHVtbiwgcm93KVwiIChjaGFuZ2UpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJnZXRDaGVja2JveFZhbHVlKHJvdywgY29sdW1uKVwiPlxuICAgICAgICAgIDwvcC1jaGVja2JveD5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkICpuZ0lmPVwiZWRpdGluZ1wiPlxuICAgICAgICAgIDxwLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgPCEtLSBmb3IgZWRpdCBjaGVja0JveCAtLT5cbiAgICAgICAgICAgICAgPHAtY2hlY2tib3ggKG5nTW9kZWxDaGFuZ2UpPVwiY2hlY2tCb3hDaGFuZ2VFdmVudCgkZXZlbnQsIGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIiBbYmluYXJ5XT1cInRydWVcIiBbbmdNb2RlbF09XCJnZXRDaGVja2JveFZhbHVlKHJvdywgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCI+PC9wLWNoZWNrYm94PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cbiAgICAgICAgICAgICAge3sgcm93W2NvbHVtbi5maWVsZF0gfX1cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8IS0tIGxpbmsgY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgIDxzcGFuIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdhLGlucHV0J1wiICpuZ1N3aXRjaENhc2U9XCInbGluaydcIj5cbiAgICAgICAgICA8IS0tIGxpbmsgY29sdW1uIGZvciBIeXBlckxpbmsgQ2FzZSAtLT5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbHVtbi5hbGxvd1NhdmUgPT09IGZhbHNlXCI+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbHVtbi50YXJnZXQgIT09ICdfc2VsZidcIiBbc3R5bGVdPVwiY29sdW1uLnN0eWxlXCJcbiAgICAgICAgICAgICAgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ2EnXCIgY2xhc3M9XCJjdXN0b20tbGlua1wiXG4gICAgICAgICAgICAgIFtjbGFzc109XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2Rpc2FibGVkLWxpbmsnIDogJydcIiBwUmVvcmRlcmFibGVSb3dIYW5kbGU+XG5cbiAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkLWlubGluZVwiIFtocmVmXT1cImNvbHVtbi5kaXNhYmxlZD8nJzpyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uaHlwZXJsaW5rXCIgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICBwUmVvcmRlcmFibGVSb3dIYW5kbGU+XG4gICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjb2x1bW4uaWNvbiAmJiFyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlOyBlbHNlIG5vSWNvblwiIFtjbGFzc109XCJjb2x1bW4uaWNvblwiXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiY29sdW1uLmhlYWRlclwiPjwvaT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vSWNvbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJjb2x1bW4/Lm9uQ2xpY2sgPyBvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpIDogJydcIj5cbiAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZT8nJzpcbiAgICAgICAgICAgICAgICAgICAgc2V0Q29uZGl0aW9uQmFzZVZhbHVlKHJvdywgY29sdW1uKVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvYT5cblxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4udGFyZ2V0ID09PSAnX3NlbGYnXCIgW3N0eWxlXT1cImNvbHVtbi5zdHlsZVwiXG4gICAgICAgICAgICAgIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdhJ1wiIGNsYXNzPVwiY3VzdG9tLWxpbmtcIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiIGFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnZGlzYWJsZWQtbGluaycgOiAnJ1wiIHBSZW9yZGVyYWJsZVJvd0hhbmRsZT5cblxuICAgICAgICAgICAgICA8YSBjbGFzcz1cImQtaW5saW5lXCIgW2hyZWZdPVwiY29sdW1uLmRpc2FibGVkPycnOnJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5oeXBlcmxpbmtcIlxuICAgICAgICAgICAgICAgIFt0YXJnZXRdPSdjb2x1bW4udGFyZ2V0JyBwUmVvcmRlcmFibGVSb3dIYW5kbGU+XG4gICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjb2x1bW4uaWNvbiAmJiFyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlOyBlbHNlIG5vSWNvblwiIFtjbGFzc109XCJjb2x1bW4uaWNvblwiXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiY29sdW1uLmhlYWRlclwiPjwvaT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vSWNvbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJjb2x1bW4/Lm9uQ2xpY2sgPyBvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpIDogJydcIj5cbiAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZT8nJzpcbiAgICAgICAgICAgICAgICAgICAgc2V0Q29uZGl0aW9uQmFzZVZhbHVlKHJvdywgY29sdW1uKVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvYT5cblxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8IS0tIGxpbmsgY29sdW1uIGZvciBFZGl0IENhc2UgLS0+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4uYWxsb3dTYXZlIHx8IGNvbHVtbi5hbGxvd1NhdmUgPT09IHVuZGVmaW5lZFwiPlxuICAgICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCIgcFJlb3JkZXJhYmxlUm93SGFuZGxlPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiKGNvbHVtbi5lZGl0YWJsZSA9PT0gdHJ1ZSApICYmIChjb2x1bW4uZWRpdExpbmsgPT09IHRydWUgKVwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVwiIXJvdy5pc05ld1wiIHBJbnB1dFRleHRcbiAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwicm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZCB8fCByb3dbY29sdW1uLmZpZWxkXSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQgPyByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5RmllbGQgPSAkZXZlbnQgOiByb3dbY29sdW1uLmZpZWxkXSA9ICRldmVudFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjb2x1bW4/Lm9uQ2xpY2sgPyBvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpIDogJydcIiB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHknIDogJydcIlxuICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCIgW2F0dHIuYXV0b2NvbXBsZXRlXT1cIihjb2x1bW4uYXV0b0NvbXBsZXRlID09PSBmYWxzZSB8fCBhdXRvQ29tcGxldGUgPT09IGZhbHNlKSA/ICdvZmYnIDogJ29uJ1wiIChjaGFuZ2UpPVwib25DaGFuZ2VFdmVudChjb2x1bW4sIHJvdylcIiAvPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IHBJbnB1dFRleHQgKm5nSWY9XCJyb3cuaXNOZXdcIiB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjb2x1bW4/Lm9uQ2xpY2sgPyBvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpIDogJydcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKydfb2JqJ10/LmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5JyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQgPyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZCA6IHJvd1tjb2x1bW4uZmllbGRdXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZCA/IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQgOiByb3dbY29sdW1uLmZpZWxkXSA9ICRldmVudFwiXG4gICAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIiBbYXR0ci5hdXRvY29tcGxldGVdPVwiKGNvbHVtbi5hdXRvQ29tcGxldGUgPT09IGZhbHNlIHx8IGF1dG9Db21wbGV0ZSA9PT0gZmFsc2UpID8gJ29mZicgOiAnb24nXCIgKGNoYW5nZSk9XCJvbkNoYW5nZUV2ZW50KGNvbHVtbiwgcm93KVwiIC8+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwhLS0gPHNwYW4gKm5nSWY9XCJjb2x1bW4uZWRpdGFibGUgPT09IGZhbHNlfHwgY29sdW1uLmVkaXRhYmxlID09PSB1bmRlZmluZWRcIiA+XG4gICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJjdXN0b20tbGlua1wiIChjbGljayk9XCJvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpXCIgW2hyZWZdPVwicm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmh5cGVybGlua1wiIFt0YXJnZXRdPSdjb2x1bW4udGFyZ2V0J1xuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnZGlzYWJsZWQtbGluaycgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjb2x1bW4uaWNvbiAmJiAhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZTsgZWxzZSBub0ljb25cIltjbGFzc109XCJjb2x1bW4uaWNvblwiIFt0aXRsZV09XCJjb2x1bW4uaGVhZGVyXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0ljb24+XG4gICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlPycnOlxuICAgICAgICAgICAgICAgICAgICBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LCBjb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8L3NwYW4+IC0tPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIihjb2x1bW4uZWRpdExpbmsgPT09IGZhbHNlfHwgY29sdW1uLmVkaXRMaW5rID09PSB1bmRlZmluZWQpJiYoY29sdW1uLmVkaXRhYmxlID09PSBmYWxzZXx8IGNvbHVtbi5lZGl0YWJsZSA9PT0gdW5kZWZpbmVkKVwiPlxuICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkLWlubGluZVwiIFtocmVmXT1cInJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5oeXBlcmxpbmtcIlxuICAgICAgICAgICAgICAgICAgICBbdGFyZ2V0XT1cImNvbHVtbi50YXJnZXQgPyBjb2x1bW4udGFyZ2V0IDogJ19ibGFuaydcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY29sdW1uLmVkaXRhYmxlID09PSBmYWxzZSA/ICcnIDogYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdkaXNhYmxlZC1saW5rJyA6ICcnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiY29sdW1uLmljb24gJiYgIXJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWU7IGVsc2Ugbm9JY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY29sdW1uLmljb25cIiBbdGl0bGVdPVwiY29sdW1uLmhlYWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbHVtbj8ub25DbGljayA/IG9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdykgOiAnJ1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0ljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cImNvbHVtbj8ub25DbGljayA/IG9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdykgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWU/Jyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LCBjb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIFtzdHlsZV09XCJjb2x1bW4uc3R5bGVcIiBjbGFzcz1cImN1c3RvbS1saW5rXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJjb2x1bW4uZWRpdGFibGUgPT09IGZhbHNlIHx8IGFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnZGlzYWJsZWQtbGluaycgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkLWlubGluZVwiIFtocmVmXT1cImNvbHVtbi5kaXNhYmxlZD8nJzpyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uaHlwZXJsaW5rXCJcbiAgICAgICAgICAgICAgICAgICAgW3RhcmdldF09XCJjb2x1bW4udGFyZ2V0ID8gY29sdW1uLnRhcmdldCA6ICdfYmxhbmsnXCIgcFJlb3JkZXJhYmxlUm93SGFuZGxlPlxuICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImNvbHVtbi5pY29uJiYgIXJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWU7IGVsc2Ugbm9JY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiY29sdW1uLmhlYWRlclwiIFtjbGFzc109XCJjb2x1bW4uaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbHVtbj8ub25DbGljayA/IG9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdykgOiAnJ1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0ljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cImNvbHVtbj8ub25DbGljayA/IG9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdykgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWU/Jyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LCBjb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgIDwvYT5cblxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDwhLS0gSWZyYW1lIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2lmcmFtZSdcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1saW5rXCIgKGNsaWNrKT1cImdyaWRJRnJhbWUoY29sdW1uLCByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uaHlwZXJsaW5rLCByb3cpXCIgW3RpdGxlXT1cIlxuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddICYmXG4gICAgICAgICAgICAgICAgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0ID09PSBudWxsIHx8IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0ID09PSAnJylcbiAgICAgICAgICAgICAgICAgID8gcm93W2NvbHVtbi5maWVsZF0gOiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICAgID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICAgIDogY29sdW1uLmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgICAgICA/IGNvbHVtbi5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgOiByb3dbY29sdW1uLmZpZWxkXVxuXG4gICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImN1c3RvbS1pY29uLWJ0blwiICpuZ0lmPVwiY29sdW1uLmljb247IGVsc2Ugbm9JY29uXCIgW2Rpc2FibGVkXT1cImNvbHVtbi5kaXNhYmxlZFwiPlxuICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiY29sdW1uLmljb25cIiBbdGl0bGVdPVwiY29sdW1uLmhlYWRlclwiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0ljb24+XG4gICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddICYmXG4gICAgICAgICAgICAgIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dCA9PT0gbnVsbCB8fCByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dCA9PT0gJycpXG4gICAgICAgICAgICAgID8gcm93W2NvbHVtbi5maWVsZF0gOiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICA6IGNvbHVtbi5kaXNwbGF5VGV4dCA/IGNvbHVtbi5kaXNwbGF5VGV4dCA6IHJvd1tjb2x1bW4uZmllbGRdXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDwhLS0gZGlhbG9nIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2RpYWxvZydcIj5cbiAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uPy5maWx0ZXI/LnR5cGUgIT09ICdjYWxlbmRhcicgJiYgIXJvdz8uaGlkZWdyaWRidG5cIj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbHVtbi5lZGl0YWJsZSA9PT0gdHJ1ZSAmJiAhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICBwUmVvcmRlcmFibGVSb3dIYW5kbGU+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ3NlbGYnXCIgcmVhZG9ubHlcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSsnX29iaiddPy5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eScgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2hpZGUtYm9yZGVyJyA6ICcnXCIgdHlwZT1cInRleHRcIiBwSW5wdXRUZXh0XG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RMb29rdXBGaWVsZChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZCA/IHJvd1tyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV0gOiByb3dbY29sdW1uLmZpZWxkXVwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQgPyByb3dbcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV0gOiByb3dbY29sdW1uLmZpZWxkXSA9ICRldmVudFwiXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cInJvd1tjb2x1bW4uZmllbGRdXCIgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCIgLz5cblxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnc2VsZidcIiAqbmdJZj1cImNvbHVtbi5lZGl0YWJsZSA9PT0gZmFsc2UgfHwgY29sdW1uLmVkaXRhYmxlID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgXCIgY2xhc3M9XCJjdXN0b20tbGlua1wiIFtzdHlsZV09XCJjb2x1bW4uc3R5bGVcIiBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgIGFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnZGlzYWJsZWQtbGluaycgOiAnJ1xuICAgICAgICAgICAgICAgICAgICBcIiAoY2xpY2spPVwib3BlbkdyaWREaWFsb2coY29sdW1uLCByb3csICRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiKGNvbHVtbi5pY29uIHx8IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbikgJiYgIXJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWUgOyBlbHNlIG5vSWNvblwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24gPyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24gOiBjb2x1bW4uaWNvblwiXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJjb2x1bW4uaGVhZGVyXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0ljb24+e3sgKCFjb2x1bW4uZGlzcGxheVRleHQgJiYgcm93LmlzTmV3ICkgfHxcbiAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZSA/ICcnIDogc2V0Q29uZGl0aW9uQmFzZVZhbHVlKHJvdywgY29sdW1uKVxuICAgICAgICAgICAgICAgICAgICB9fTwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uPy5maWx0ZXI/LnR5cGUgPT09ICdjYWxlbmRhcicgJiYgY29sdW1uLmVkaXRhYmxlID09PSB0cnVlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnaW5wdXQnXCI+XG4gICAgICAgICAgICAgICAgPHAtZGF0ZXBpY2tlclxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSsnX29iaiddPy5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eScgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICBbaWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdoaWRlLWJvcmRlcicgOiAnJ1wiIChvbkNsb3NlKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgW21pbkRhdGVdPVwiY29sdW1uLm1pbkRhdGVcIiBbbWF4RGF0ZV09XCJjb2x1bW4ubWF4RGF0ZVwiIFthcHBlbmRUb109XCInYm9keSdcIiBob3VyRm9ybWF0PVwiMTJcIlxuICAgICAgICAgICAgICAgICAgW3Nob3dUaW1lXT1cImNvbHVtbi5zaG93VGltZVwiIChjbGljayk9XCJvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpXCIgW3RpbWVPbmx5XT1cImNvbHVtbi50aW1lT25seVwiXG4gICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZCA/IHJvd1tyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXSA6IHJvd1tjb2x1bW4uZmllbGRdXCJcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQgP1xuICAgICAgICAgICAgICAgICAgcm93W3Jvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKV0gOiByb3dbY29sdW1uLmZpZWxkXSA9ICRldmVudFwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiPjwvcC1kYXRlcGlja2VyPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uPy5maWx0ZXI/LnR5cGUgPT09ICdjYWxlbmRhcicgJiYgIWNvbHVtbi5lZGl0YWJsZVwiIGNsYXNzPVwiY3VzdG9tLWxpbmtcIlxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3cuZGlzYWJsZWQgICB8fCBhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2Rpc2FibGVkLWxpbmsnIDogJydcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuR3JpZERpYWxvZyhjb2x1bW4sIHJvdywgJGV2ZW50KVwiPnt7IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWUgPyAnJyA6XG4gICAgICAgICAgICAgICAgc2V0Q29uZGl0aW9uQmFzZVZhbHVlKHJvdywgY29sdW1uKSB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1saW5rXCIgW3N0eWxlXT1cImNvbHVtbi5zdHlsZVwiIHBSZW9yZGVyYWJsZVJvd0hhbmRsZVxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3cuZGlzYWJsZWQgICB8fCBhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2Rpc2FibGVkLWxpbmsnIDogJydcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuR3JpZERpYWxvZyhjb2x1bW4sIHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ3NlbGYnXCI+XG4gICAgICAgICAgICAgICAgPGkgKm5nSWY9XCIoY29sdW1uLmljb24gfHwgcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5pY29uKSAmJiAhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZSA7IGVsc2Ugbm9JY29uXCJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJjb2x1bW4uaG92ZXJEYXRhID8gJycgOiBjb2x1bW4uaGVhZGVyXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24gPyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24gOiBjb2x1bW4uaWNvblwiPjwvaT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vSWNvbj57eyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlID8gJycgOiBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LFxuICAgICAgICAgICAgICAgICAgY29sdW1uKSB9fTwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPCEtLSB7eyBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LCBjb2x1bW4pIH19XG4gICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhcm93W2NvbHVtbi5maWVsZCArICdfc2Vjb25kVHlwZSddICYmICFyb3cuaGlkZWdyaWRidG5cIiAtLT5cblxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPCEtLSB0ZXN0IC0tPlxuICAgICAgICA8IS0tIGxvb2t1cCBJbnB1dCBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidsb29rdXBfaW5wdXQnXCI+XG4gICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpbnB1dFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xvc2UtaWNvbi13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdzZWxmJ1wiXG4gICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiIWlzTG9va3VwSW5wdXRFZGl0YWJsZShjb2x1bW4sIHJvdylcIiB0eXBlPVwidGV4dFwiIFtuZ01vZGVsXT1cImxvb2t1cElucHV0TmdNb2RlbChyb3csIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlTG9va3VwSW5wdXROZ01vZGVsKHJvdywgY29sdW1uLCAkZXZlbnQpXCIgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImlzTG9va3VwSW5wdXRFZGl0YWJsZShjb2x1bW4sIHJvdykgPyBvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpIDogc2VsZWN0TG9va3VwRmllbGQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2VFdmVudChjb2x1bW4sIHJvdylcIiAoa2V5ZG93bi5lbnRlcik9XCJvbkxvb2t1cElucHV0RW50ZXIoJGV2ZW50LCBjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgKHBhc3RlKT1cIm9uTG9va3VwSW5wdXRQYXN0ZSgkZXZlbnQsIGNvbHVtbiwgcm93KVwiIFtpZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2hpZGUtYm9yZGVyJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHknIDogJ3ByaW1lLWlucHV0J1wiXG4gICAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCIgW2F0dHIuYXV0b2NvbXBsZXRlXT1cIihjb2x1bW4uYXV0b0NvbXBsZXRlID09PSBmYWxzZSB8fCBhdXRvQ29tcGxldGUgPT09IGZhbHNlKSA/ICdvZmYnIDogJ29uJ1wiIC8+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCI+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNMb29rdXBJbnB1dEVkaXRhYmxlKGNvbHVtbiwgcm93KSAmJiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmNvbXBvbmVudCB8fCBjb2x1bW4ubG9va3VwQ29udHJvbD8uY29tcG9uZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS1zZWFyY2hcIiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwic2VsZWN0TG9va3VwRmllbGQoY29sdW1uLCByb3cpXCI+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicm93W2NvbHVtbi5maWVsZF0gJiYgdHlwZU9mKHJvd1tjb2x1bW4uZmllbGRdKSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkXS50ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogcm93W2NvbHVtbi5maWVsZF0gJiYgIWNvbHVtbi5kaXNhYmxlZFwiIGljb249XCJwaSBwaS10aW1lc1wiIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJsb29rdXBDbGVhclZhbHVlKGNvbHVtbixyb3cpXCI+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4ubGlua0lkXCI+XG4gICAgICAgICAgICAgICAgPGEgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ3NlbGYnXCIgW2hyZWZdPVwicm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmh5cGVybGlua1wiXG4gICAgICAgICAgICAgICAgICBbdGFyZ2V0XT1cImNvbHVtbi50YXJnZXQgPT09ICdfc2VsZicgPyAnJyA6ICAnX2JsYW5rJ1wiPlxuICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgIHNldExvb2t1cFJlYWRPbmx5VmFsdWUocm93LCBjb2x1bW4pXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnc2VsZidcIiAqbmdJZj1cIiFjb2x1bW4ubGlua0lkXCIgW3N0eWxlXT1cImNvbHVtbi5zdHlsZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cImNvbHVtbi5sb29rdXBDb250cm9sPy5jb21wb25lbnQgJiYgY29sdW1uLmVkaXRMaW5rID09PSB0cnVlID8gJ2N1c3RvbS1saW5rJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3Blbkxvb2t1cEh5cGVybGluayhjb2x1bW4sIHJvdylcIj5cbiAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgIHNldExvb2t1cFJlYWRPbmx5VmFsdWUocm93LCBjb2x1bW4pXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDwhLS0gTnVtZXJpYyBJbnB1dCBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidudW1lcmljJ1wiPlxuICAgICAgICAgIDxwLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgPCEtLSBmb3IgQ3VycmVuY3kgJiYgRGVjaW1hbCAmJiBQZXJjZW50IC0tPlxuICAgICAgICAgICAgICA8c3BhbiBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnaW5wdXQnXCIgY2xhc3M9XCJpbnB1dC1udW1iZXJcIlxuICAgICAgICAgICAgICAgIHBSZW9yZGVyYWJsZVJvd0hhbmRsZT5cbiAgICAgICAgICAgICAgICA8cC1pbnB1dE51bWJlciBbaWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdoaWRlLWJvcmRlcicgOiAnJ1wiIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICduZy1pbnZhbGlkIG5nLWRpcnR5J1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAnZm9ybS1jb250cm9sJ1xuICAgICAgICAgICAgICAgICAgICBcIiBbc2hvd0J1dHRvbnNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQgPyByb3dbcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldIDogcm93W2NvbHVtbi5maWVsZF1cIlxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZCA/IHJvd1tyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXSA6IHJvd1tjb2x1bW4uZmllbGRdID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgICAgIFtuYW1lXT1cImNvbHVtbi5maWVsZFwiIFtkaXNhYmxlZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCIgKG9uRm9jdXMpPVwib25Gb2N1c0V2ZW50KGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgICAob25CbHVyKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIiBhdXRvY29tcGxldGU9XCJvZmZcIiAoa2V5ZG93bik9XCJhbGxvd0xlYWRpbmdEb3QoJGV2ZW50KVwiIFttb2RlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0LnR5cGUgPT09ICdjdXJyZW5jeSdcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ2N1cnJlbmN5J1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAnZGVjaW1hbCdcbiAgICAgICAgICAgICAgICAgICAgXCIgW2N1cnJlbmN5XT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0LnR5cGUgPT09ICdjdXJyZW5jeScgJiZcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0LmZvcm1hdFBhcmFtcyAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQuZm9ybWF0UGFyYW1zLmN1cnJlbmN5XG4gICAgICAgICAgICAgICAgICAgICAgICA/IGNvbHVtbi5mb3JtYXQuZm9ybWF0UGFyYW1zLmN1cnJlbmN5XG4gICAgICAgICAgICAgICAgICAgICAgICA6ICdVU0QnXG4gICAgICAgICAgICAgICAgICAgIFwiIFtsb2NhbGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdCAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQudHlwZSA9PT0gJ2N1cnJlbmN5JyAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQuZm9ybWF0UGFyYW1zICYmXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdC5mb3JtYXRQYXJhbXMubG9jYWxlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGNvbHVtbi5mb3JtYXQuZm9ybWF0UGFyYW1zLmxvY2FsZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnZW4tVVMnXG4gICAgICAgICAgICAgICAgICAgIFwiIFttaW5GcmFjdGlvbkRpZ2l0c109XCJjb2x1bW4uZm9ybWF0ID8gc2V0TnVtZXJpY01pbkZyYWN0aW9uKGNvbHVtbikgOiAnMCdcIlxuICAgICAgICAgICAgICAgICAgW21heEZyYWN0aW9uRGlnaXRzXT1cImNvbHVtbi5mb3JtYXQgPyBzZXROdW1lcmljTWF4RnJhY3Rpb24oY29sdW1uKSA6ICcwJ1wiIFtzdWZmaXhdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdCAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQudHlwZSA9PT0gJ3BlcmNlbnQnICYmIFxuICAgICAgICAgICAgICAgICAgICAgICAgJyUnXG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgPC9wLWlucHV0TnVtYmVyPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbG9ja2VkX2ZpZWxkPjxzcGFuICpuZ0lmPVwiIXJvdy5pc05ld1wiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnc2VsZidcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHJvd1tjb2x1bW4uZmllbGRdIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbGF5b3V0LWZpeGVkXCIgcFJlb3JkZXJhYmxlUm93SGFuZGxlPlxuICAgICAgICAgICAgICAgIDxzcGFuIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdzZWxmJ1wiPlxuICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgIHNldE51bWVyaWNGb3JtYXQoY29sdW1uLCByb3cpXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDwhLS0gQnV0dG9uIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2FkZF9idXR0b24nXCI+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhcm93LmhpZGVncmlkYnRuXCIgcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgW2ljb25dPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5pY29uID8gcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5pY29uIDogY29sdW1uLmljb25cIlxuICAgICAgICAgICAgICBbbmFtZV09XCJjb2x1bW4uaGVhZGVyXCIgY2xhc3M9XCJtZXJnZS1idG5cIiBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlUZXh0ID8gcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5VGV4dCA6IGNvbHVtbi52YWx1ZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZ3JpZC1jb21wb25lbnQtZ3JpZC1hZGQtYnRuXCIgKGNsaWNrKT1cIm9uQ2xpY2tCdXR0b24oY29sdW1uLCByb3cpXCI+PC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8IS0tIEdlbmVyYXRlIEZpbGUgQnV0dG9uIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2dlbmVyYXRlX2ZpbGVfYnV0dG9uJ1wiPlxuICAgICAgICAgIDxzZS1nZW5lcmF0ZS1pbXBvcnQtZmlsZVxuICAgICAgICAgICAgW2xhYmVsXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheVRleHQgPyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlUZXh0IDogY29sdW1uLnZhbHVlXCJcbiAgICAgICAgICAgIFtpY29uXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbiA/IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbiA6IGNvbHVtbi5pY29uXCJcbiAgICAgICAgICAgIFtkaWFsb2dEYXRhXT1cImNvbHVtbi5kYXRhXCIgW3NlbGVjdGVkUm93XT1cInJvd1wiPjwvc2UtZ2VuZXJhdGUtaW1wb3J0LWZpbGU+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8IS0tIFNlbmQgZW1haWwgQnV0dG9uIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3NlbmRfZW1haWxfYnV0dG9uJ1wiPlxuICAgICAgICAgIDxzZS1lbWFpbC1nZW5lcmF0ZS1idG5cbiAgICAgICAgICAgIFtsYWJlbF09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlUZXh0ID8gcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5VGV4dCA6IGNvbHVtbi52YWx1ZVwiXG4gICAgICAgICAgICBbaWNvbl09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24gPyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24gOiBjb2x1bW4uaWNvblwiIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgICAgIFtzZWxlY3RlZFJvd109XCJyb3dcIj48L3NlLWVtYWlsLWdlbmVyYXRlLWJ0bj5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDwhLS0gRGF0ZSBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgPCEtLSBjYWxlbmRhciBzZWxlY3RvciAtLT5cbiAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiXG4gICAgICAgICAgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGE/IG51bGw6IGVkaXRBbGxSb3dzID8gJ2lucHV0JyA6ICdzZWxmJyBcIj5cbiAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCIgcFJlb3JkZXJhYmxlUm93SGFuZGxlPlxuICAgICAgICAgICAgICA8cC1kYXRlcGlja2VyIFttaW5EYXRlXT1cImNvbHVtbi5taW5EYXRlXCIgW21heERhdGVdPVwiY29sdW1uLm1heERhdGVcIlxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHkgJyArIGNvbHVtbi5maWVsZCArIHJvd1tkYXRhS2V5XSA6IGNvbHVtbi5maWVsZCArIHJvd1tkYXRhS2V5XVwiXG4gICAgICAgICAgICAgICAgW2lkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnaGlkZS1ib3JkZXInIDogJydcIiAob25DbG9zZSk9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICBbYXBwZW5kVG9dPVwiJ2JvZHknXCIgaG91ckZvcm1hdD1cIjEyXCIgW2RlZmF1bHREYXRlXT1cImRlZmF1bHREYXRlXCJcbiAgICAgICAgICAgICAgICBbc3RlcE1pbnV0ZV09XCJjb2x1bW4ubWludXRlc0ludGVydmFsID8gY29sdW1uLm1pbnV0ZXNJbnRlcnZhbCA6IDFcIiBbc2hvd1RpbWVdPVwiY29sdW1uLnNob3dUaW1lXCJcbiAgICAgICAgICAgICAgICBbdGltZU9ubHldPVwiY29sdW1uLnRpbWVPbmx5XCIgW2RhdGVGb3JtYXRdPVwiY29sdW1uLmZvcm1hdCA/IGNvbHVtbi5mb3JtYXQudHlwZSA6IGNhbGVuZGFyRm9ybWF0XCJcbiAgICAgICAgICAgICAgICAoa2V5dXApPVwiY2FsZW5kYXJJbnB1dFZhbHVlKGNvbHVtbiwgcm93KVwiIChvblNob3cpPVwib25DbGlja0V2ZW50KGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQgPyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZCA6IHJvd1tjb2x1bW4uZmllbGRdXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNhbGVuZGFyTW9kZWxDaGFuZ2UoJGV2ZW50LCByb3csIGNvbHVtbilcIiBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiXG4gICAgICAgICAgICAgICAgW3Nob3dCdXR0b25CYXJdPVwiIWNvbHVtbi50aW1lT25seVwiPjwvcC1kYXRlcGlja2VyPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxheW91dC1maXhlZCB3aGl0ZS1zcGFjZS1ub3dyYXAgdGV4dC1jZW50ZXIgYm9yZGVyLXJlYWRvbmx5XCI+XG4gICAgICAgICAgICAgICAge3sgc2V0Q29uZGl0aW9uQmFzZVZhbHVlKHJvdyxjb2x1bW4pIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgIDwvc3Bhbj5cblxuXG4gICAgICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQ+XG4gICAgICAgICAgPHNwYW4gW25nU3dpdGNoXT1cImNvbHVtbi50eXBlXCI+XG4gICAgICAgICAgICA8IS0tIERyb3Bkb3duIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidkcm9wZG93bidcIiBbY2xhc3NdPVwiZHJvcGRvd25JbnB1dCA/ICcnIDogJ291dHB1dC1kcm9wZG93bidcIlxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiIGNvbHVtbi5ob3ZlckRhdGE/IG51bGw6IGVkaXRBbGxSb3dzID8gJy5wLWRyb3Bkb3duLWxhYmVsJyA6ICdzZWxmJ1wiPlxuICAgICAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgPHAtZHJvcGRvd24gKm5nSWY9XCIhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRkZW5cIiBbb3B0aW9uc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkrJ19kYXRhJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpKydfZGF0YSddXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogY29sdW1uLmRhdGFcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKSA/IHJvd1tyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXSA6IHJvd1tjb2x1bW4uZmllbGRdXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKSA/IHJvd1tyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKCldIDogcm93W2NvbHVtbi5maWVsZF0gPSAkZXZlbnRcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiIFtwbGFjZWhvbGRlcl09XCJyb3dbY29sdW1uLmRpc3BsYXlGaWVsZF1cbiAgICAgICAgICAgICAgICAgICAgICA/IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXVxuICAgICAgICAgICAgICAgICAgICAgIDogcm93W2NvbHVtbi5maWVsZF0gPyByb3dbY29sdW1uLmZpZWxkXSA6ICdTZWxlY3QnXCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dDbGVhcl09XCJyb3dbY29sdW1uLmZpZWxkXSA/IHRydWUgOiBmYWxzZVwiIFtvcHRpb25MYWJlbF09XCJjb2x1bW4ub3B0aW9uTGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja0V2ZW50KGNvbHVtbiwgcm93KVwiIFtvcHRpb25WYWx1ZV09XCJjb2x1bW4ub3B0aW9uVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKydfb2JqJ10/LmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5JyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnaGlkZS1ib3JkZXInIDogJydcIiAoYmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoY29sdW1uLCByb3cpXCIgW2FwcGVuZFRvXT1cIidib2R5J1wiIFtmaWx0ZXJdPVwiY29sdW1uLmFsbG93U2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyTWF0Y2hNb2RlPVwic3RhcnRzV2l0aFwiPjwvcC1kcm9wZG93bj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sYXlvdXQtZml4ZWQgYm9yZGVyLXJlYWRvbmx5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8YSAqbmdJZj1cImNvbHVtbi5kaXNwbGF5QXNMaW5rXCIgY2xhc3M9XCJjdXN0b20tbGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJjb2x1bW4uZGlzYWJsZWQ/Jyc6cm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmh5cGVybGlua1wiIFt0YXJnZXRdPSdjb2x1bW4udGFyZ2V0Jz5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHNldERyb3Bkd29uUmVhZE9ubHlWYWx1ZShyb3csIGNvbHVtbikgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhY29sdW1uLmRpc3BsYXlBc0xpbmtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHNldERyb3Bkd29uUmVhZE9ubHlWYWx1ZShyb3csIGNvbHVtbikgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8IS0tIE11bHRpU2VsZWN0IGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICAgICAgPCEtLSBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpID8gcm93W3Jvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKCldIDpcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdXCIgLS0+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ211bHRpLXNlbGVjdCdcIlxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnLnAtbXVsdGlzZWxlY3QtbGFiZWwnXCI+XG4gICAgICAgICAgICAgIDxwLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XG4gICAgICAgICAgICAgICAgICA8cC1tdWx0aVNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKydfb2JqJ10/LmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5JyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnaGlkZS1ib3JkZXInIDogJydcIiB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwicm93W2NvbHVtbi5maWVsZF1cIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiXG4gICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSArICdfZGF0YSddID8gcm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpICsgJ19kYXRhJ10gOiBjb2x1bW4uZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgIFtvcHRpb25MYWJlbF09XCJjb2x1bW4ub3B0aW9uTGFiZWxcIiBbb3B0aW9uVmFsdWVdPVwiY29sdW1uLm9wdGlvblZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoY29sdW1uLCByb3cpXCIgKG9uUGFuZWxTaG93KT1cInNob3dPcHRpb24oY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdylcIiBbYXBwZW5kVG9dPVwiJ2JvZHknXCIgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiPlxuICAgICAgICAgICAgICAgICAgPC9wLW11bHRpU2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ3NlbGYnXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXVxuICAgICAgICAgICAgICAgICAgICA/IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXSA6XG4gICAgICAgICAgICAgICAgICAgIHNldE11bHRpU2VsZWN0RGF0YShjb2x1bW4sIHJvd1tjb2x1bW4uZmllbGRdKVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8IS0tIEF1dG9Db21wbGV0ZSBTZWFyY2ggLS0+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ0F1dG9Db21wbGV0ZSdcIj5cbiAgICAgICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxwLWF1dG9Db21wbGV0ZVxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKydfb2JqJ10/LmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5JyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnaGlkZS1ib3JkZXInIDogJydcIiBbbmFtZV09XCJjb2x1bW4uaGVhZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgW3N1Z2dlc3Rpb25zXT1cImNvbHVtbi5kYXRhXCIgKG9uU2VsZWN0KT1cImF1dG9Db21wbGV0ZVNlbGVjdGVkVmFsdWUocm93LCBjb2x1bW4sICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbZmllbGRdPVwiY29sdW1uLm9wdGlvbkxhYmVsID8gY29sdW1uLm9wdGlvbkxhYmVsPy50b0xvd2VyQ2FzZSgpIDogY29sdW1uLmRpc3BsYXlGaWVsZCA/IGNvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCkgOiBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKClcIlxuICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJnZXRBdXRvQ29tcGxldGVOZ01vZGVsKHJvdywgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUF1dG9Db21wbGV0ZU5nTW9kZWwocm93LCBjb2x1bW4sICRldmVudClcIiBbZHJvcGRvd25dPVwiY29sdW1uLnNob3dPcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZUV2ZW50KGNvbHVtbiwgcm93KVwiIChjbGljayk9XCJvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNvbXBsZXRlTWV0aG9kKT1cImF1dG9TZWFyY2goJGV2ZW50LCBjb2x1bW4sIHJvdylcIiAob25CbHVyKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCIgW2FwcGVuZFRvXT1cIidib2R5J1wiIFttdWx0aXBsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25BdXRvQ29tcGxldGVLZXlFbnRlckV2ZW50KCRldmVudCwgY29sdW1uLCByb3cpXCI+XG4gICAgICAgICAgICAgICAgICA8L3AtYXV0b0NvbXBsZXRlPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyb3dbY29sdW1uLmZpZWxkXSAmJiByb3dbY29sdW1uLmZpZWxkXVswXSAmJiAgcm93W2NvbHVtbi5maWVsZF1bMF1bY29sdW1uLmRpc3BsYXlGaWVsZF1cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IHZhbHVlIG9mIHJvd1tjb2x1bW4uZmllbGRdOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgcm93W2NvbHVtbi5maWVsZF0gJiYgcm93W2NvbHVtbi5maWVsZF0ubGVuZ3RoID4gMSA/IHJvd1tjb2x1bW4uZmllbGRdLmxlbmd0aCAtMSA9PT0gaSA/XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWVbY29sdW1uLmRpc3BsYXlGaWVsZF0gOiB2YWx1ZVtjb2x1bW4uZGlzcGxheUZpZWxkXSArICc7JyA6IHZhbHVlW2NvbHVtbi5kaXNwbGF5RmllbGRdIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicm93W2NvbHVtbi5maWVsZF0gJiYgcm93W2NvbHVtbi5maWVsZF1bMF0gJiYgIHJvd1tjb2x1bW4uZmllbGRdWzBdW2NvbHVtbi5maWVsZF0gJiYgIWNvbHVtbi5kaXNwbGF5RmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IHZhbHVlIG9mIHJvd1tjb2x1bW4uZmllbGRdOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgcm93W2NvbHVtbi5maWVsZF0gJiYgcm93W2NvbHVtbi5maWVsZF0ubGVuZ3RoID4gMSA/IHJvd1tjb2x1bW4uZmllbGRdLmxlbmd0aCAtMSA9PT0gaSA/XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWVbY29sdW1uLmZpZWxkXSA6IHZhbHVlW2NvbHVtbi5maWVsZF0gKyAnOycgOiB2YWx1ZVtjb2x1bW4uZmllbGRdIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwhLS0gQWRkIEdlbmVyYXRlIFJlcG9ydCBCdXR0b24gLS0+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3JlcG9ydCdcIj5cbiAgICAgICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XG4gICAgICAgICAgICAgICAgICA8c2UtZ2VuZXJhdGUtcmVwb3J0LWJ0biBbcmVwSW5mb109XCJzZXRSZXBvcnROYW1lKGNvbHVtbiwgcm93KVwiIFtsYWJlbF09XCJjb2x1bW4ubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICBbcGFyYW1zXT1cInNldFJlcG9ydFBhcmFtcyhjb2x1bW4sIHJvdylcIiBbY2xhc3NdPVwiY29sdW1uLmNsYXNzXCIgW3Nob3dEaWFsb2ddPVwiY29sdW1uLnNob3dEaWFsb2dcIlxuICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJjb2x1bW4uaWNvblwiIFtyZXBvcnRUeXBlXT1cImNvbHVtbi5yZXBvcnRUeXBlXCI+PC9zZS1nZW5lcmF0ZS1yZXBvcnQtYnRuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XG4gICAgICAgICAgICAgICAgICA8c2UtZ2VuZXJhdGUtcmVwb3J0LWJ0biBbcmVwSW5mb109XCJzZXRSZXBvcnROYW1lKGNvbHVtbiwgcm93KVwiIFtsYWJlbF09XCJjb2x1bW4ubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICBbcGFyYW1zXT1cInNldFJlcG9ydFBhcmFtcyhjb2x1bW4sIHJvdylcIiBbaWNvbl09XCJjb2x1bW4uaWNvblwiIFtjbGFzc109XCJjb2x1bW4uY2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd0RpYWxvZ109XCJjb2x1bW4uc2hvd0RpYWxvZ1wiIFtyZXBvcnRUeXBlXT1cImNvbHVtbi5yZXBvcnRUeXBlXCI+PC9zZS1nZW5lcmF0ZS1yZXBvcnQtYnRuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hEZWZhdWx0IFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdpbnB1dCdcIj5cbiAgICAgICAgICAgICAgPCEtLSBJbnB1dCBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIFtzdHlsZV09XCJjb2x1bW4uc3R5bGUgPyBjb2x1bW4uc3R5bGUgOiAnZGlzcGxheTpmbGV4J1wiPlxuXG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSAqbmdJZj1cImNvbHVtbi5pc1RleHRhcmVhICYmIChlZGl0QWxsUm93cyB8fCBlZGl0aW5nUm93S2V5c1tyb3dbZGF0YUtleV1dKVwiXG4gICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmZpZWxkXVwiIFthdHRyLmRhdGEtY2VsbF09XCJjb2x1bW4uZmllbGQgKyAnLScgKyByb3dbZGF0YUtleV1cIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHJpbWUtdGV4dGFyZWFcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicmVzaXplOiBub25lOyBtaW4td2lkdGg6IDIwMHB4OyBtaW4taGVpZ2h0OiA0MHB4OyB3b3JkLWJyZWFrOiBicmVhay13b3JkOyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyBvdmVyZmxvdzogaGlkZGVuO1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIiAoYmx1cik9XCJvblRleHRhcmVhQmx1cihjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm9uVGV4dGFyZWFFbnRlcigkZXZlbnQsIGNvbHVtbiwgcm93KVwiIGF1dG9mb2N1cz48L3RleHRhcmVhPlxuXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNvbHVtbi5pc1RleHRhcmVhICYmIChlZGl0QWxsUm93cyB8fCBlZGl0aW5nUm93S2V5c1tyb3dbZGF0YUtleV1dKSAmJiAgY29sdW1uLmZpZWxkICE9PSBkYXRhS2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LnRleHRUeXBlP3Jvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8udGV4dFR5cGU6Y29sdW1uLnRleHRUeXBlP2NvbHVtbi50ZXh0VHlwZTondGV4dCdcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHknIDogJ3ByaW1lLWlucHV0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnaGlkZS1ib3JkZXInIDogJydcIiBbbmdNb2RlbF09XCJzZXRJbnB1dE5nTW9kZWwocm93LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbklucHV0Q2hhbmdlKCRldmVudCwgcm93LCBjb2x1bW4pXCIgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIiAoY2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja0J1dHRvbihjb2x1bW4sIHJvdylcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiEoZWRpdEFsbFJvd3MgfHwgZWRpdGluZ1Jvd0tleXNbcm93W2RhdGFLZXldXSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyByb3dbY29sdW1uLmZpZWxkXSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJmbG9hdDpyaWdodFwiICpuZ0lmPVwiY29sdW1uLmZvcm1hdD09J3Bhc3N3b3JkJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/KHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXS50ZXh0VHlwZT09J3Bhc3N3b3JkJz8ncGkgcGktZXllJzoncGkgcGktZXllLXNsYXNoJyk6Y29sdW1uLnRleHRUeXBlPT0ncGFzc3dvcmQnPydwaSBwaS1leWUnOidwaSBwaS1leWUtc2xhc2gnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VQYXNzd29yZFR5cGUoY29sdW1uLCByb3cpXCIgW3RpdGxlXT1cImNvbHVtbi5oZWFkZXJcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbG9ja2VkX2ZpZWxkPjxzcGFuICpuZ0lmPVwiIXJvdy5pc05ld1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ3NlbGYnXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgcm93W2NvbHVtbi5maWVsZF0gfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbGF5b3V0LWZpeGVkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFtzdHlsZV09XCJjb2x1bW4uc3R5bGUgPyBjb2x1bW4uc3R5bGUgOiAnZGlzcGxheTpmbGV4J1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdzZWxmJyBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8udGV4dFR5cGUgPyhyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LnRleHRUeXBlPT0ncGFzc3dvcmQnICA/J3Bhc3N3b3JkJzonJykgOmNvbHVtbi50ZXh0VHlwZT09J3Bhc3N3b3JkJz8ncGFzc3dvcmQnOicnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBzZXRUZXh0Qm94UmVhZE9ubHlWYWx1ZShyb3csIGNvbHVtbikgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJmbG9hdDpyaWdodFwiICpuZ0lmPVwiY29sdW1uLmZvcm1hdD09J3Bhc3N3b3JkJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8ocm93W2NvbHVtbi5maWVsZCsnX29iaiddLnRleHRUeXBlPT0ncGFzc3dvcmQnPydwaSBwaS1leWUnOidwaSBwaS1leWUtc2xhc2gnKTpjb2x1bW4udGV4dFR5cGU9PSdwYXNzd29yZCc/J3BpIHBpLWV5ZSc6J3BpIHBpLWV5ZS1zbGFzaCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiY29sdW1uLmhlYWRlclwiIChjbGljayk9XCJjaGFuZ2VQYXNzd29yZFR5cGUoY29sdW1uLCByb3cpXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDwhLS0gR3JpZCBSb3dzIERhdGEgQmluZGluZ3MgRW5kIC0tPlxuXG4gICAgICAgIDwhLS0gTW9yZSBhY3Rpb25zIGNvbHVtbiAoZWxsaXBzaXMpIC0tPlxuICAgICAgICA8dGQgKm5nSWY9XCJoYXNNb3JlSXRlbXMocm93KVwiIGNsYXNzPVwiZm9yLW1vcmUtYWN0aW9uc1wiPlxuICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLWVsbGlwc2lzLXZcIiBjbGFzcz1cInAtYnV0dG9uLXRleHRcIiAoY2xpY2spPVwic2hvd01vcmUoJGV2ZW50LCByb3cpXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJNb3JlIGFjdGlvbnNcIj48L2J1dHRvbj5cbiAgICAgICAgPC90ZD5cblxuICAgICAgICA8IS0tIEFjdGlvbiBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgPCEtLSA8dGQgKm5nSWY9XCIhc2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiBjb2x1bW5zPy5sZW5ndGggPiAwICYmIGNvbHVtbkFjdGlvbnMubGVuZ3RoID4gMFwiXG4gICAgICAgICAgY2xhc3M9XCJmb3ItYnV0dG9uc1wiXG4gICAgICAgICAgW2NsYXNzXT1cImluRWRpdE1vZGUgPyAndGhyZWUtYWN0aW9uLWJ0bicgOiAndHdvLWFjdGlvbi1idG4nXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJhY3Rpb24tYnRuXCIgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjb2x1bW5BY3Rpb25zXCI+XG4gICAgICAgICAgICA8aSBbdGl0bGVdPVwiYWN0aW9uLnRvb2x0aXBcIiBbY2xhc3NdPVwiYWN0aW9uLmljb25cIiAoY2xpY2spPVwiaGFuZGxlQWN0aW9uQ2xpY2soJGV2ZW50LCBhY3Rpb24sIHJvdylcIj48L2k+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3RkPiAtLT5cbiAgICAgICAgPHRkICpuZ0lmPVwiIXNldEFjdGlvbkNvbHVtbkFzRmlyc3QgJiYgY29sdW1ucz8ubGVuZ3RoID4gMCAmJiBjb2x1bW5BY3Rpb25zLmxlbmd0aCA+IDBcIiBjbGFzcz1cImZvci1idXR0b25zXCJcbiAgICAgICAgICBbY2xhc3NdPVwiaW5FZGl0TW9kZSA/ICd0aHJlZS1hY3Rpb24tYnRuJyA6ICd0d28tYWN0aW9uLWJ0bidcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgY29sdW1uQWN0aW9uc1wiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhY3Rpb24tYnRuXCIgKm5nSWY9XCJhY3Rpb24udmlzaWJsZSA/IGFjdGlvbi52aXNpYmxlKHJvdykgOiB0cnVlXCI+XG4gICAgICAgICAgICAgIDxpIFt0aXRsZV09XCJhY3Rpb24udG9vbHRpcFwiIFtjbGFzc109XCJhY3Rpb24uaWNvblwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmFjdGlvbi1idG4tZGlzYWJsZWRdPVwiYWN0aW9uLmRpc2FibGVkID8gYWN0aW9uLmRpc2FibGVkKHJvdykgOiBmYWxzZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIihhY3Rpb24uZGlzYWJsZWQgJiYgYWN0aW9uLmRpc2FibGVkKHJvdykpID8gbnVsbCA6IGhhbmRsZUFjdGlvbkNsaWNrKCRldmVudCwgYWN0aW9uLCByb3cpXCI+PC9pPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGRcbiAgICAgICAgICAqbmdJZj1cIiFzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmIGNvbHVtbnM/Lmxlbmd0aCA+IDAgJiYgdXNlSW5saW5lQ1JVRCAmJiAoZGVsZXRlUm93UGVybWlzc2lvbiB8fCBlZGl0Um93UGVybWlzc2lvbilcIlxuICAgICAgICAgIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiIGNsYXNzPVwiZm9yLWJ1dHRvbnNcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImRpc2FibGVkU2F2ZUJ0biA/ICdoaWRlLWNsZWFyLWZpbHRlci1idXR0b24nIDogJydcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz0nc2V0QWN0aW9uQ29sdW1uV2lkdGgnPlxuICAgICAgICAgICAgPHNlLWdyaWQtcm93LWFjdGlvbnMgW2VkaXRpbmddPVwiZWRpdGluZ1wiIFtlZGl0Um93UGVybWlzc2lvbl09XCJlZGl0Um93UGVybWlzc2lvblwiXG4gICAgICAgICAgICAgIFtkZWxldGVSb3dQZXJtaXNzaW9uXT1cImRlbGV0ZVJvd1Blcm1pc3Npb25cIiBbaGlkZURlbGV0ZUJ0bl09XCJoaWRlRGVsZXRlQnRuXCIgW2hpZGVFZGl0QnRuXT1cImhpZGVFZGl0QnRuXCJcbiAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIiAob25Sb3dFZGl0SW5pdEJ0bik9XCJvblJvd0VkaXRJbml0KCRldmVudClcIiAoZGVsZXRlUmVjb3JkQnRuKT1cImRlbGV0ZVJlY29yZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKG9uUm93RWRpdFNhdmVCdG4pPVwib25Sb3dFZGl0U2F2ZSgkZXZlbnQpXCIgKG9uUm93RWRpdENhbmNlbEJ0bik9XCJvblJvd0VkaXRDYW5jZWwoJGV2ZW50LCByaSlcIlxuICAgICAgICAgICAgICBbZWRpdEFsbFJvd3NdPVwiZWRpdEFsbFJvd3NcIj5cbiAgICAgICAgICAgIDwvc2UtZ3JpZC1yb3ctYWN0aW9ucz5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8IS0tIEZvb3RlciBjb2x1bW5zIG9uIEdyaWQgLS0+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZvb3RlclwiPlxuICAgICAgPHRyICpuZ0lmPVwiYWdncmVnYXRlRm9vdGVyXCI+XG4gICAgICAgIDx0ZFxuICAgICAgICAgICpuZ0lmPVwic2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiAoY29sdW1uQWN0aW9ucy5sZW5ndGggPiAwIHx8ICh1c2VJbmxpbmVDUlVEICYmIChkZWxldGVSb3dQZXJtaXNzaW9uIHx8IGVkaXRSb3dQZXJtaXNzaW9uKSkpXCJcbiAgICAgICAgICBbY2xhc3NdPVwiaW5FZGl0TW9kZSA/ICd0aHJlZS1hY3Rpb24tYnRuJyA6ICd0d28tYWN0aW9uLWJ0bidcIj48L3RkPlxuICAgICAgICA8dGQgKm5nSWY9XCJhbGxvd1NlbGVjdGlvblwiIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiPjwvdGQ+XG4gICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgb3V0ZXJDb2x1bW4gb2Ygc2VsZWN0ZWRDb2x1bW5zXCIgY2xhc3M9XCJncmlkLWNvbXBvbmVudC1vdXRlci1jb2x1bW5cIiBbc3R5bGVdPVwib3V0ZXJDb2x1bW4uc3R5bGVcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpbm5lckNvbHVtbiBvZiBzZWxlY3RlZENvbHVtbnNcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGFnZ3Igb2YgaW5uZXJDb2x1bW4/LmFnZ3JlZ2F0ZVwiPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWdnci5hZ2dyVmFsdWU/Lmxlbmd0aCAmJiAoKCFhZ2dyLmRpc3BsYXlGaWVsZCAmJiBpbm5lckNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gb3V0ZXJDb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICAgICAgICAgICAgICBhZ2dyLmRpc3BsYXlGaWVsZCAmJiBhZ2dyLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gb3V0ZXJDb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkpXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cImFnZ3IuYWdnclZhbHVlXCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZFxuICAgICAgICAgICpuZ0lmPVwiIXNldEFjdGlvbkNvbHVtbkFzRmlyc3QgJiYgY29sdW1ucz8ubGVuZ3RoID4gMCAmJiB1c2VJbmxpbmVDUlVEICYmIChkZWxldGVSb3dQZXJtaXNzaW9uIHx8IGVkaXRSb3dQZXJtaXNzaW9uKVwiXG4gICAgICAgICAgW2NsYXNzXT1cImluRWRpdE1vZGUgPyAndGhyZWUtYWN0aW9uLWJ0bicgOiAndHdvLWFjdGlvbi1idG4nXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJkaXNhYmxlZFNhdmVCdG4gPyAnaGlkZS1jbGVhci1maWx0ZXItYnV0dG9uJyA6ICcnXCI+PC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDwhLS0gRm9vdGVyIGZvciBFbXB0eSBNZXNzYWdlIGNvbHVtbnMgb24gR3JpZCAtLT5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XG4gICAgICA8dHIgY2xhc3M9XCJncmlkLWNvbXBvbmVudCBuby1yZWNvcmRzLWZvdW5kXCI+XG4gICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cInNlbGVjdGVkQ29sdW1ucz8ubGVuZ3RoICsgMVwiPnt7dG90YWxSZWNvcmRzPT0wPyAnTm8gcmVjb3JkcyBmb3VuZCc6Jyd9fTwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvcC10YWJsZT5cbiAgPHAtb3ZlcmxheVBhbmVsIFtzdHlsZV09XCJvdmVybGF5UGFuZWxTdHlsZVwiICNvdmVybGF5UGFuZWw+XG4gICAgPG5nLWNvbnRhaW5lciAjdmlld0NvbnRhaW5lclJlZj48L25nLWNvbnRhaW5lcj5cbiAgPC9wLW92ZXJsYXlQYW5lbD5cbiAgPHAtbWVudSAjbW9yZU1lbnUgW3BvcHVwXT1cInRydWVcIiBbbW9kZWxdPVwiY3VycmVudE1vcmVNZW51XCIgYXBwZW5kVG89XCJib2R5XCIgc3R5bGVDbGFzcz1cImdyaWQtbW9yZS1tZW51XCI+PC9wLW1lbnU+XG48L2Rpdj5cbiJdfQ==
|