@skyux/grids 8.0.3 → 8.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/documentation.json +1 -1
- package/esm2020/lib/modules/grid/grid-column.component.mjs +6 -5
- package/esm2020/lib/modules/grid/grid.component.mjs +4 -4
- package/fesm2015/skyux-grids.mjs +8 -7
- package/fesm2015/skyux-grids.mjs.map +1 -1
- package/fesm2020/skyux-grids.mjs +8 -7
- package/fesm2020/skyux-grids.mjs.map +1 -1
- package/package.json +8 -8
|
@@ -201,7 +201,7 @@ export class SkyGridComponent {
|
|
|
201
201
|
this.checkUserColumnWidthsForScroll();
|
|
202
202
|
}
|
|
203
203
|
ngOnChanges(changes) {
|
|
204
|
-
if (changes
|
|
204
|
+
if (changes['columns'] && this.columns) {
|
|
205
205
|
if (this.selectedColumnIds) {
|
|
206
206
|
this.selectedColumnIds = this.selectedColumnIds.filter((columnId) => {
|
|
207
207
|
return this.columns.find((column) => column.id === columnId);
|
|
@@ -209,7 +209,7 @@ export class SkyGridComponent {
|
|
|
209
209
|
}
|
|
210
210
|
this.setDisplayedColumns(true);
|
|
211
211
|
}
|
|
212
|
-
if (changes
|
|
212
|
+
if (changes['data'] && this.data) {
|
|
213
213
|
this.transformData();
|
|
214
214
|
// This set timeout is necessary to ensure the data has rendered in the grid
|
|
215
215
|
setTimeout(() => {
|
|
@@ -235,7 +235,7 @@ export class SkyGridComponent {
|
|
|
235
235
|
this.checkUserColumnWidthsForScroll();
|
|
236
236
|
});
|
|
237
237
|
}
|
|
238
|
-
if (changes
|
|
238
|
+
if (changes['sortField']) {
|
|
239
239
|
this.setSortHeaders();
|
|
240
240
|
}
|
|
241
241
|
}
|
|
@@ -1031,4 +1031,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
1031
1031
|
type: HostListener,
|
|
1032
1032
|
args: ['window:resize']
|
|
1033
1033
|
}] } });
|
|
1034
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZ3JpZHMvc3JjL2xpYi9tb2R1bGVzL2dyaWQvZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZ3JpZHMvc3JjL2xpYi9tb2R1bGVzL2dyaWQvZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxlQUFlLEVBRWYsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUdOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxzQkFBc0IsR0FNdkIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUNMLGFBQWEsR0FFZCxNQUFNLDRCQUE0QixDQUFDO0FBRXBDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0MsT0FBTyxFQUNMLGVBQWUsRUFFZixPQUFPLEVBRVAsU0FBUyxFQUNULEtBQUssR0FDTixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsR0FBRyxFQUNILElBQUksRUFDSixTQUFTLEVBQ1QsU0FBUyxHQUNWLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFNekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFNL0QsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sbUNB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Uzt1QkFBQyx5QkFBeUIsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBR25ELHdCQUF3QjtzQkFEL0IsU0FBUzt1QkFBQyxlQUFlO2dCQUdsQixlQUFlO3NCQUR0QixTQUFTO3VCQUFDLFdBQVc7Z0JBR2QsNEJBQTRCO3NCQURuQyxTQUFTO3VCQUFDLG9CQUFvQjtnQkFHdkIsU0FBUztzQkFEaEIsU0FBUzt1QkFBQyxXQUFXO2dCQTRJZixjQUFjO3NCQURwQixZQUFZO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgU2t5QWZmaXhBdXRvRml0Q29udGV4dCxcbiAgU2t5QWZmaXhTZXJ2aWNlLFxuICBTa3lBcHBXaW5kb3dSZWYsXG4gIFNreUxvZ1NlcnZpY2UsXG4gIFNreU92ZXJsYXlTZXJ2aWNlLFxuICBTa3lVSUNvbmZpZ1NlcnZpY2UsXG59IGZyb20gJ0Bza3l1eC9jb3JlJztcbmltcG9ydCB7XG4gIExpc3RJdGVtTW9kZWwsXG4gIExpc3RTb3J0RmllbGRTZWxlY3Rvck1vZGVsLFxufSBmcm9tICdAc2t5dXgvbGlzdC1idWlsZGVyLWNvbW1vbic7XG5cbmltcG9ydCB7IERyYWd1bGFTZXJ2aWNlIH0gZnJvbSAnbmcyLWRyYWd1bGEnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBPYnNlcnZhYmxlLFxuICBTdWJqZWN0LFxuICBTdWJzY3JpcHRpb24sXG4gIGZyb21FdmVudCxcbiAgbWVyZ2UsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIG1hcCxcbiAgdGFrZSxcbiAgdGFrZVVudGlsLFxuICB0YWtlV2hpbGUsXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgU2t5R3JpZEFkYXB0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9ncmlkLWFkYXB0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTa3lHcmlkQ29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi9ncmlkLWNvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5R3JpZENvbHVtbk1vZGVsIH0gZnJvbSAnLi9ncmlkLWNvbHVtbi5tb2RlbCc7XG5pbXBvcnQgeyBTa3lHcmlkQ29sdW1uRGVzY3JpcHRpb25Nb2RlbENoYW5nZSB9IGZyb20gJy4vdHlwZXMvZ3JpZC1jb2x1bW4tZGVzY3JpcHRpb24tbW9kZWwtY2hhbmdlJztcbmltcG9ydCB7IFNreUdyaWRDb2x1bW5IZWFkaW5nTW9kZWxDaGFuZ2UgfSBmcm9tICcuL3R5cGVzL2dyaWQtY29sdW1uLWhlYWRpbmctbW9kZWwtY2hhbmdlJztcbmltcG9ydCB7IFNreUdyaWRDb2x1bW5JbmxpbmVIZWxwUG9wb3Zlck1vZGVsQ2hhbmdlIH0gZnJvbSAnLi90eXBlcy9ncmlkLWNvbHVtbi1pbmxpbmUtaGVscC1wb3BvdmVyLW1vZGVsLWNoYW5nZSc7XG5pbXBvcnQgeyBTa3lHcmlkQ29sdW1uV2lkdGhNb2RlbENoYW5nZSB9IGZyb20gJy4vdHlwZXMvZ3JpZC1jb2x1bW4td2lkdGgtbW9kZWwtY2hhbmdlJztcbmltcG9ydCB7IFNreUdyaWRNZXNzYWdlIH0gZnJvbSAnLi90eXBlcy9ncmlkLW1lc3NhZ2UnO1xuaW1wb3J0IHsgU2t5R3JpZE1lc3NhZ2VUeXBlIH0gZnJvbSAnLi90eXBlcy9ncmlkLW1lc3NhZ2UtdHlwZSc7XG5pbXBvcnQgeyBTa3lHcmlkUm93RGVsZXRlQ2FuY2VsQXJncyB9IGZyb20gJy4vdHlwZXMvZ3JpZC1yb3ctZGVsZXRlLWNhbmNlbC1hcmdzJztcbmltcG9ydCB7IFNreUdyaWRSb3dEZWxldGVDb25maWcgfSBmcm9tICcuL3R5cGVzL2dyaWQtcm93LWRlbGV0ZS1jb25maWcnO1xuaW1wb3J0IHsgU2t5R3JpZFJvd0RlbGV0ZUNvbmZpcm1BcmdzIH0gZnJvbSAnLi90eXBlcy9ncmlkLXJvdy1kZWxldGUtY29uZmlybS1hcmdzJztcbmltcG9ydCB7IFNreUdyaWRSb3dEZWxldGVDb250ZW50cyB9IGZyb20gJy4vdHlwZXMvZ3JpZC1yb3ctZGVsZXRlLWNvbnRlbnRzJztcbmltcG9ydCB7IFNreUdyaWRTZWxlY3RlZFJvd3NNb2RlbENoYW5nZSB9IGZyb20gJy4vdHlwZXMvZ3JpZC1zZWxlY3RlZC1yb3dzLW1vZGVsLWNoYW5nZSc7XG5pbXBvcnQgeyBTa3lHcmlkU2VsZWN0ZWRSb3dzU291cmNlIH0gZnJvbSAnLi90eXBlcy9ncmlkLXNlbGVjdGVkLXJvd3Mtc291cmNlJztcbmltcG9ydCB7IFNreUdyaWRVSUNvbmZpZyB9IGZyb20gJy4vdHlwZXMvZ3JpZC11aS1jb25maWcnO1xuXG5sZXQgbmV4dElkID0gMDtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBgU2t5R3JpZENvbXBvbmVudGAgYW5kIGl0cyBmZWF0dXJlcyBhcmUgZGVwcmVjYXRlZC4gV2UgcmVjb21tZW5kIHVzaW5nIHRoZSBkYXRhIGdyaWQgaW5zdGVhZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvZGF0YS1ncmlkXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS1ncmlkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dyaWQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ncmlkLmNvbXBvbmVudC5zY3NzJ10sXG4gIHZpZXdQcm92aWRlcnM6IFtEcmFndWxhU2VydmljZV0sXG4gIHByb3ZpZGVyczogW1NreUdyaWRBZGFwdGVyU2VydmljZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lHcmlkQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveVxue1xuICAvKipcbiAgICogQ29sdW1ucyBhbmQgY29sdW1uIHByb3BlcnRpZXMgZm9yIHRoZSBncmlkLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBjb2x1bW5zKG5ld0NvbHVtbnM6IEFycmF5PFNreUdyaWRDb2x1bW5Nb2RlbD4pIHtcbiAgICBjb25zdCBvbGRDb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuICAgIHRoaXMuX2NvbHVtbnMgPSBuZXdDb2x1bW5zO1xuICAgIGlmIChvbGRDb2x1bW5zKSB7XG4gICAgICB0aGlzLnRyYW5zZmVyQ29sdW1uV2lkdGhzKG9sZENvbHVtbnMsIHRoaXMuY29sdW1ucyk7XG4gICAgICB0aGlzLmlzUmVzaXplZCA9IGZhbHNlO1xuICAgICAgdGhpcy5zZXREaXNwbGF5ZWRDb2x1bW5zKHRydWUpO1xuICAgIH1cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHVibGljIGdldCBjb2x1bW5zKCk6IEFycmF5PFNreUdyaWRDb2x1bW5Nb2RlbD4ge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5zO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRhIGZvciB0aGUgZ3JpZC4gRWFjaCBpdGVtIHJlcXVpcmVzIGFuIGBpZGAgYW5kIGEgcHJvcGVydHkgdGhhdCBtYXBzXG4gICAqIHRvIHRoZSBgZmllbGRgIG9yIGBpZGAgcHJvcGVydHkgb2YgZWFjaCBjb2x1bW4gaW4gdGhlIGdyaWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZGF0YTogQXJyYXk8YW55PjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBlbmFibGUgdGhlIG11bHRpc2VsZWN0IGZlYXR1cmUgdG8gZGlzcGxheSBhIGNvbHVtbiBvZlxuICAgKiBjaGVja2JveGVzIG9uIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIGdyaWQuIFlvdSBjYW4gc3BlY2lmeSBhIHVuaXF1ZSBJRCB3aXRoXG4gICAqIHRoZSBgbXVsdGlzZWxlY3RSb3dJZGAgcHJvcGVydHksIGJ1dCBtdWx0aXNlbGVjdCBkZWZhdWx0cyB0byB0aGUgYGlkYCBwcm9wZXJ0eSBvblxuICAgKiB0aGUgYGRhdGFgIG9iamVjdC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBlbmFibGVNdWx0aXNlbGVjdCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBIb3cgdGhlIGdyaWQgZml0cyB0byBpdHMgcGFyZW50LiBUaGUgdmFsaWQgb3B0aW9ucyBhcmUgYHdpZHRoYCxcbiAgICogd2hpY2ggZml0cyB0aGUgZ3JpZCB0byB0aGUgcGFyZW50J3MgZnVsbCB3aWR0aCwgYW5kIGBzY3JvbGxgLCB3aGljaCBhbGxvd3MgdGhlIGdyaWRcbiAgICogdG8gZXhjZWVkIHRoZSBwYXJlbnQncyB3aWR0aC4gSWYgdGhlIGdyaWQgZG9lcyBub3QgaGF2ZSBlbm91Z2ggY29sdW1ucyB0byBmaWxsXG4gICAqIHRoZSBwYXJlbnQncyB3aWR0aCwgaXQgYWx3YXlzIHN0cmV0Y2hlcyB0byB0aGUgcGFyZW50J3MgZnVsbCB3aWR0aC5cbiAgICogQGRlZmF1bHQgXCJ3aWR0aFwiXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZml0ID0gJ3dpZHRoJztcblxuICAvKipcbiAgICogV2hldGhlciB0byBkaXNwbGF5IGEgdG9vbGJhciB3aXRoIHRoZSBncmlkLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGhhc1Rvb2xiYXIgPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIGhlaWdodCBvZiB0aGUgZ3JpZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoZWlnaHQ6IG51bWJlcjtcblxuICAvKipcbiAgICogVGV4dCB0byBoaWdobGlnaHQgd2l0aGluIHRoZSBncmlkLlxuICAgKiBUeXBpY2FsbHksIHRoaXMgcHJvcGVydHkgaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHNlYXJjaC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoaWdobGlnaHRUZXh0OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvYnNlcnZhYmxlIHRvIHNlbmQgY29tbWFuZHMgdG8gdGhlIGdyaWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgbWVzc2FnZVN0cmVhbSA9IG5ldyBTdWJqZWN0PFNreUdyaWRNZXNzYWdlPigpO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIElEIHRoYXQgbWF0Y2hlcyBhIHByb3BlcnR5IG9uIHRoZSBgZGF0YWAgb2JqZWN0LlxuICAgKiBCeSBkZWZhdWx0LCB0aGlzIHByb3BlcnR5IHVzZXMgdGhlIGBpZGAgcHJvcGVydHkuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgbXVsdGlzZWxlY3RSb3dJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdyB0byBoaWdobGlnaHQuIFRoZSBJRCBtYXRjaGVzIHRoZSBgaWRgIHByb3BlcnR5XG4gICAqIG9mIHRoZSBgZGF0YWAgb2JqZWN0LiBUeXBpY2FsbHksIHRoaXMgcHJvcGVydHkgaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoXG4gICAqIHRoZSBmbHlvdXQgY29tcG9uZW50IHRvIGluZGljYXRlIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcm93LlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHJvd0hpZ2hsaWdodGVkSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNvbHVtbnMgdG8gZGlzcGxheSBpbiB0aGUgZ3JpZCBiYXNlZCBvbiB0aGUgYGlkYCBvciBgZmllbGRgIHByb3BlcnRpZXNcbiAgICogb2YgdGhlIGNvbHVtbnMuIElmIG5vIGNvbHVtbnMgYXJlIHNwZWNpZmllZCwgdGhlbiB0aGUgZ3JpZCBkaXNwbGF5cyBhbGwgY29sdW1ucy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc2VsZWN0ZWRDb2x1bW5JZHModmFsdWU6IEFycmF5PHN0cmluZz4pIHtcbiAgICBjb25zdCBjdXJyZW50SWRzID0gdGhpcy5fc2VsZWN0ZWRDb2x1bW5JZHM7XG4gICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5JZHMgPSB2YWx1ZTtcblxuICAgIGlmICh0aGlzLmNvbHVtbnMpIHtcbiAgICAgIHRoaXMuc2V0RGlzcGxheWVkQ29sdW1ucygpO1xuICAgIH1cblxuICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBpZHMgaGF2ZSBjaGFuZ2VkLlxuICAgIGlmICghY3VycmVudElkcyB8fCAhdmFsdWUgfHwgIXRoaXMuYXJyYXlzRXF1YWwodmFsdWUsIGN1cnJlbnRJZHMpKSB7XG4gICAgICAvLyBUaGlzIHZhcmlhYmxlIGVuc3VyZXMgdGhhdCB3ZSBkbyBub3Qgc2V0IHVzZXIgY29uZmlnIG9wdGlvbnMgb3IgZmlyZSB0aGUgY2hhbmdlIGV2ZW50XG4gICAgICAvLyBvbiB0aGUgZmlyc3QgdGltZSB0aGF0IHRoZSBjb2x1bW5zIGFyZSBzZXQgdXBcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29sdW1uSWRzU2V0KSB7XG4gICAgICAgIHRoaXMuc2V0VXNlckNvbmZpZyh7XG4gICAgICAgICAgc2VsZWN0ZWRDb2x1bW5JZHM6IHZhbHVlLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1uSWRzQ2hhbmdlLmVtaXQodGhpcy5fc2VsZWN0ZWRDb2x1bW5JZHMpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzUmVzaXplZCkge1xuICAgICAgICAgIHRoaXMucmVzZXRUYWJsZVdpZHRoKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1uSWRzU2V0ID0gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRDb2x1bW5JZHMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkQ29sdW1uSWRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzZXQgb2YgSURzIGZvciB0aGUgcm93cyB0byBzZWxlY3QgaW4gYSBtdWx0aXNlbGVjdCBncmlkLlxuICAgKiBUaGUgSURzIG1hdGNoIHRoZSBgaWRgIHByb3BlcnRpZXMgb2YgdGhlIGBkYXRhYCBvYmplY3RzLlxuICAgKiBSb3dzIHdpdGggSURzIHRoYXQgYXJlIG5vdCBpbmNsdWRlZCBhcmUgZGUtc2VsZWN0ZWQgaW4gdGhlIGdyaWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHNlbGVjdGVkUm93SWRzKHZhbHVlOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl9zZWxlY3RlZFJvd0lkcyA9IHZhbHVlO1xuICAgICAgdGhpcy5hcHBseVNlbGVjdGVkUm93cygpO1xuICAgICAgdGhpcy5lbWl0U2VsZWN0ZWRSb3dzKFNreUdyaWRTZWxlY3RlZFJvd3NTb3VyY2UuU2VsZWN0ZWRSb3dJZHNDaGFuZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRSb3dJZHMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkUm93SWRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUga2V5IGZvciB0aGUgVUkgQ29uZmlnIFNlcnZpY2UgdG8gcmV0cmlldmUgc3RvcmVkIHNldHRpbmdzIGZyb20gYSBkYXRhYmFzZS5cbiAgICogVGhlIFVJIENvbmZpZyBTZXJ2aWNlIHNhdmVzIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIHVzZXJzIGFuZCByZXR1cm5zXG4gICAqIGBzZWxlY3RlZENvbHVtbklkc2AgdG8gcHJlc2VydmUgdGhlIGNvbHVtbnMgdG8gZGlzcGxheSBhbmQgdGhlIHByZWZlcnJlZCBjb2x1bW4gb3JkZXIuIFlvdSAgbXVzdCBwcm92aWRlIGBpZGAgdmFsdWVzIGZvciB5b3VyIGBza3ktZ3JpZC1jb2x1bW5gIGVsZW1lbnRzIGJlY2F1c2UgdGhlIFVJIENvbmZpZyBTZXJ2aWNlIGRlcGVuZHMgb24gdGhvc2UgdmFsdWVzIHRvIG9yZ2FuaXplIGNvbHVtbnMgYmFzZWQgb24gdXNlciBzZXR0aW5ncy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIFVJIENvbmZpZyBTZXJ2aWNlLCBzZWUgW3RoZSBzdGlja3kgc2V0dGluZ3MgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9sZWFybi9nZXQtc3RhcnRlZC9zdGlja3ktc2V0dGluZ3MpLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldHRpbmdzS2V5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERpc3BsYXlzIGEgY2FyZXQgaW4gdGhlIGNvbHVtbiB0aGF0IHdhcyB1c2VkIHRvIHNvcnQgdGhlIGdyaWQuIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bFxuICAgKiB3aGVuIHlvdSBwcm9ncmFtbWF0aWNhbGx5IHNvcnQgZGF0YSBhbmQgd2FudCB0byB2aXN1YWxseSBpbmRpY2F0ZSBob3cgdGhlIGdyaWQgd2FzIHNvcnRlZC5cbiAgICogVGhpcyBwcm9wZXJ0eSBhY2NlcHRzIGEgYExpc3RTb3J0RmllbGRTZWxlY3Rvck1vZGVsYCB2YWx1ZSB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICogLSBgZmllbGRTZWxlY3RvcmAgUmVwcmVzZW50cyB0aGUgY3VycmVudCBzb3J0IGZpZWxkLiBUaGlzIHByb3BlcnR5IGFjY2VwdHMgYHN0cmluZ2AgdmFsdWVzLlxuICAgKiAtIGBkZXNjZW5kaW5nYCBJbmRpY2F0ZXMgd2hldGhlciB0byBzb3J0IGluIGRlc2NlbmRpbmcgb3JkZXIuIFRoZSBjYXJldCB0aGF0IHZpc3VhbGx5XG4gICAqIGluZGljYXRlcyB0aGUgc29ydCBvcmRlciBwb2ludHMgZG93biBmb3IgZGVzY2VuZGluZyBvcmRlciBhbmQgdXAgZm9yIGFzY2VuZGluZyBvcmRlci5cbiAgICogVGhpcyBwcm9wZXJ0eSBhY2NlcHRzIGBib29sZWFuYCB2YWx1ZXMuIERlZmF1bHQgaXMgYGZhbHNlYC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzb3J0RmllbGQ6IExpc3RTb3J0RmllbGRTZWxlY3Rvck1vZGVsO1xuXG4gIC8qKlxuICAgKiBUaGUgd2lkdGggb2YgdGhlIGdyaWQgaW4gcGl4ZWxzLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHdpZHRoOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIHdpZHRoIG9mIGEgY29sdW1uIGNoYW5nZXMuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIGNvbHVtbldpZHRoQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxcbiAgICBBcnJheTxTa3lHcmlkQ29sdW1uV2lkdGhNb2RlbENoYW5nZT5cbiAgPigpO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSBzZWxlY3Rpb24gb2YgbXVsdGlzZWxlY3QgY2hlY2tib3hlcyBjaGFuZ2VzLlxuICAgKiBFbWl0cyBhbiBhcnJheSBvZiBJRHMgZm9yIHRoZSBzZWxlY3RlZCByb3dzIGJhc2VkIG9uIHRoZSBgbXVsdGlzZWxlY3RSb3dJZGAgcHJvcGVydHlcbiAgICogdGhhdCB0aGUgY29uc3VtZXIgcHJvdmlkZXMuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIG11bHRpc2VsZWN0U2VsZWN0aW9uQ2hhbmdlID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPFNreUdyaWRTZWxlY3RlZFJvd3NNb2RlbENoYW5nZT4oKTtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHJvd0RlbGV0ZUNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8U2t5R3JpZFJvd0RlbGV0ZUNhbmNlbEFyZ3M+KCk7XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyByb3dEZWxldGVDb25maXJtID0gbmV3IEV2ZW50RW1pdHRlcjxTa3lHcmlkUm93RGVsZXRlQ29uZmlybUFyZ3M+KCk7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIGNvbHVtbnMgdG8gZGlzcGxheSBpbiB0aGUgZ3JpZCBjaGFuZ2Ugb3Igd2hlbiB0aGUgb3JkZXIgb2YgdGhlIGNvbHVtbnMgY2hhbmdlcy5cbiAgICogVGhlIGV2ZW50IGVtaXRzIGFuIGFycmF5IG9mIElEcyBmb3IgdGhlIGRpc3BsYXllZCBjb2x1bW5zIHRoYXQgcmVmbGVjdHMgdGhlIGNvbHVtbiBvcmRlci5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgc2VsZWN0ZWRDb2x1bW5JZHNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PHN0cmluZz4+KCk7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIGFjdGl2ZSBzb3J0IGZpZWxkIGNoYW5nZXMuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHNvcnRGaWVsZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TGlzdFNvcnRGaWVsZFNlbGVjdG9yTW9kZWw+KCk7XG5cbiAgcHVibGljIGNvbHVtblJlc2l6ZVN0ZXAgPSAxMDtcbiAgcHVibGljIGN1cnJlbnRTb3J0RmllbGQ6IEJlaGF2aW9yU3ViamVjdDxMaXN0U29ydEZpZWxkU2VsZWN0b3JNb2RlbD47XG4gIHB1YmxpYyBkaXNwbGF5ZWRDb2x1bW5zOiBBcnJheTxTa3lHcmlkQ29sdW1uTW9kZWw+O1xuICBwdWJsaWMgZHJhZ3VsYUdyb3VwTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgZ3JpZElkOiBudW1iZXIgPSArK25leHRJZDtcbiAgcHVibGljIHJvd0RlbGV0ZUNvbmZpZ3M6IFNreUdyaWRSb3dEZWxldGVDb25maWdbXSA9IFtdO1xuICBwdWJsaWMgaXRlbXM6IEFycmF5PGFueT47XG4gIHB1YmxpYyBtYXhDb2xXaWR0aCA9IDk5OTk7IC8vIFRoaXMgaXMgYW4gYXJiaXRyYXJ5IG51bWJlciwgYXMgdGhlIGlucHV0IHJhbmdlIHBpY2tlciB3b24ndCB3b3JrIHdpdGhvdXQgYSB2YWx1ZS5cbiAgcHVibGljIG1pbkNvbFdpZHRoID0gNTA7XG4gIHB1YmxpYyBzaG93UmVzaXplQmFyID0gZmFsc2U7XG4gIHB1YmxpYyBzaG93VG9wU2Nyb2xsID0gZmFsc2U7XG5cbiAgcHVibGljIGdldCB0YWJsZVdpZHRoKCkge1xuICAgIHJldHVybiB0aGlzLnRhYmxlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICB9XG5cbiAgQENvbnRlbnRDaGlsZHJlbihTa3lHcmlkQ29sdW1uQ29tcG9uZW50KVxuICBwcml2YXRlIGNvbHVtbkNvbXBvbmVudHM6IFF1ZXJ5TGlzdDxTa3lHcmlkQ29sdW1uQ29tcG9uZW50PjtcblxuICBAVmlld0NoaWxkcmVuKCdncmlkQ29sJylcbiAgcHJpdmF0ZSBjb2x1bW5FbGVtZW50UmVmczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICBAVmlld0NoaWxkcmVuKCdjb2xTaXplUmFuZ2UnKVxuICBwcml2YXRlIGNvbHVtblJhbmdlSW5wdXRFbGVtZW50UmVmczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICBAVmlld0NoaWxkcmVuKCdpbmxpbmVEZWxldGVSZWYnKVxuICBwcml2YXRlIGlubGluZURlbGV0ZVJlZnM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcbiAgQFZpZXdDaGlsZCgnaW5saW5lRGVsZXRlVGVtcGxhdGVSZWYnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIHByaXZhdGUgaW5saW5lRGVsZXRlVGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPHVua25vd24+O1xuICBAVmlld0NoaWxkKCdncmlkQ29udGFpbmVyJylcbiAgcHJpdmF0ZSB0YWJsZUNvbnRhaW5lckVsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2dyaWRUYWJsZScpXG4gIHByaXZhdGUgdGFibGVFbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd0b3BTY3JvbGxDb250YWluZXInKVxuICBwcml2YXRlIHRvcFNjcm9sbENvbnRhaW5lckVsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3Jlc2l6ZUJhcicpXG4gIHByaXZhdGUgcmVzaXplQmFyOiBFbGVtZW50UmVmO1xuXG4gIHByaXZhdGUgYWN0aXZlUmVzaXplQ29sdW1uSW5kZXg6IHN0cmluZztcbiAgcHJpdmF0ZSBpc0RyYWdnaW5nUmVzaXplSGFuZGxlID0gZmFsc2U7XG4gIHByaXZhdGUgaXNSZXNpemVkID0gZmFsc2U7XG4gIHByaXZhdGUgbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgcm93RGVsZXRlQ29udGVudHM6IHsgW2lkOiBzdHJpbmddOiBTa3lHcmlkUm93RGVsZXRlQ29udGVudHMgfSA9IHt9O1xuICBwcml2YXRlIHN0YXJ0Q29sdW1uV2lkdGg6IG51bWJlcjtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICBwcml2YXRlIHNjcm9sbFRyaWdnZXJlZCA9IGZhbHNlO1xuICBwcml2YXRlIHNlbGVjdGVkQ29sdW1uSWRzU2V0ID0gZmFsc2U7XG4gIHByaXZhdGUgeFBvc1N0YXJ0OiBudW1iZXI7XG5cbiAgcHJpdmF0ZSBfY29sdW1uczogQXJyYXk8U2t5R3JpZENvbHVtbk1vZGVsPjtcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRDb2x1bW5JZHM6IEFycmF5PHN0cmluZz47XG4gIHByaXZhdGUgX3NlbGVjdGVkUm93SWRzOiBBcnJheTxzdHJpbmc+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWZmaXhTZXJ2aWNlOiBTa3lBZmZpeFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBkcmFndWxhU2VydmljZTogRHJhZ3VsYVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBncmlkQWRhcHRlcjogU2t5R3JpZEFkYXB0ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgb3ZlcmxheVNlcnZpY2U6IFNreU92ZXJsYXlTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2t5V2luZG93OiBTa3lBcHBXaW5kb3dSZWYsXG4gICAgcHJpdmF0ZSB1aUNvbmZpZ1NlcnZpY2U6IFNreVVJQ29uZmlnU2VydmljZSxcbiAgICBsb2dnZXI6IFNreUxvZ1NlcnZpY2VcbiAgKSB7XG4gICAgbG9nZ2VyLmRlcHJlY2F0ZWQoJ1NreUdyaWRDb21wb25lbnQnLCB7XG4gICAgICBkZXByZWNhdGlvbk1ham9yVmVyc2lvbjogNixcbiAgICAgIG1vcmVJbmZvVXJsOiAnaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9jb21wb25lbnRzL2RhdGEtZ3JpZCcsXG4gICAgICByZXBsYWNlbWVudFJlY29tbWVuZGF0aW9uOiAnVXNlIGRhdGEgZ3JpZCBpbnN0ZWFkLicsXG4gICAgfSk7XG5cbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSBuZXcgQXJyYXk8U2t5R3JpZENvbHVtbk1vZGVsPigpO1xuICAgIHRoaXMuaXRlbXMgPSBuZXcgQXJyYXk8YW55PigpO1xuICAgIHRoaXMuY3VycmVudFNvcnRGaWVsZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TGlzdFNvcnRGaWVsZFNlbGVjdG9yTW9kZWw+KHtcbiAgICAgIGZpZWxkU2VsZWN0b3I6ICcnLFxuICAgICAgZGVzY2VuZGluZzogZmFsc2UsXG4gICAgfSk7XG4gICAgdGhpcy5kcmFndWxhR3JvdXBOYW1lID0gYHNreS1ncmlkcy1ncm91cC0ke3RoaXMuZ3JpZElkfWA7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5tZXNzYWdlU3RyZWFtXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKG1lc3NhZ2U6IFNreUdyaWRNZXNzYWdlKSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhtZXNzYWdlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICBpZiAodGhpcy5zZXR0aW5nc0tleSkge1xuICAgICAgdGhpcy5hcHBseVVzZXJDb25maWcoKS50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5pbml0Q29sdW1ucygpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5pdENvbHVtbnMoKTtcbiAgICB9XG5cbiAgICAvLyBTZXR1cCBjb2x1bW4gZHJhZy1hbmQtZHJvcC5cbiAgICB0aGlzLmdyaWRBZGFwdGVyLmluaXRpYWxpemVEcmFnQW5kRHJvcChcbiAgICAgIHRoaXMuZHJhZ3VsYUdyb3VwTmFtZSxcbiAgICAgIHRoaXMuZHJhZ3VsYVNlcnZpY2UsXG4gICAgICAoc2VsZWN0ZWRDb2x1bW5JZHM6IEFycmF5PHN0cmluZz4pID0+IHtcbiAgICAgICAgdGhpcy5vbkhlYWRlckRyb3Aoc2VsZWN0ZWRDb2x1bW5JZHMpO1xuICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLmFwcGx5U2VsZWN0ZWRSb3dzKCk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuY2hlY2tVc2VyQ29sdW1uV2lkdGhzRm9yU2Nyb2xsKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzLmNvbHVtbnMgJiYgdGhpcy5jb2x1bW5zKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbklkcykge1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1uSWRzID0gdGhpcy5zZWxlY3RlZENvbHVtbklkcy5maWx0ZXIoKGNvbHVtbklkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maW5kKChjb2x1bW4pID0+IGNvbHVtbi5pZCA9PT0gY29sdW1uSWQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0RGlzcGxheWVkQ29sdW1ucyh0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlcy5kYXRhICYmIHRoaXMuZGF0YSkge1xuICAgICAgdGhpcy50cmFuc2Zvcm1EYXRhKCk7XG5cbiAgICAgIC8vIFRoaXMgc2V0IHRpbWVvdXQgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgZGF0YSBoYXMgcmVuZGVyZWQgaW4gdGhlIGdyaWRcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAvLyBUaGlzIGNsZWFucyB1cCBhbnkgbGluZ2VyaW5nIHJvdyBkZWxldGVzIGZvciBpdGVtcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkLlxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnJvd0RlbGV0ZUNvbnRlbnRzKS5mb3JFYWNoKChpZCkgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5kYXRhLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IGlkKSkge1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95Um93RGVsZXRlKGlkKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVGhlIHJvd3MgcmUtcmVuZGVyIHRodXMgbWVzc2luZyB1cCB0aGUgYWZmaXhlcnMuIFdlIG11c3QgcmVhZmZpeCB0aGVtIHNvIHRoYXQgdGhpbmdzXG4gICAgICAgICAgICAvLyBjb250aW51ZSB0byByZW5kZXIgY29ycmVjdGx5LlxuICAgICAgICAgICAgY29uc3Qgcm93RWxlbWVudDogSFRNTEVsZW1lbnQgPVxuICAgICAgICAgICAgICB0aGlzLnRhYmxlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICAgICAgJ1tza3ktY21wLWlkPVwiJyArIGlkICsgJ1wiXSdcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdGhpcy5yb3dEZWxldGVDb250ZW50c1tpZF0uYWZmaXhlci5hZmZpeFRvKHJvd0VsZW1lbnQsIHtcbiAgICAgICAgICAgICAgYXV0b0ZpdENvbnRleHQ6IFNreUFmZml4QXV0b0ZpdENvbnRleHQuVmlld3BvcnQsXG4gICAgICAgICAgICAgIGlzU3RpY2t5OiB0cnVlLFxuICAgICAgICAgICAgICBwbGFjZW1lbnQ6ICdhYm92ZScsXG4gICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ25tZW50OiAndG9wJyxcbiAgICAgICAgICAgICAgaG9yaXpvbnRhbEFsaWdubWVudDogJ2xlZnQnLFxuICAgICAgICAgICAgICBlbmFibGVBdXRvRml0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jaGVja1VzZXJDb2x1bW5XaWR0aHNGb3JTY3JvbGwoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLnNvcnRGaWVsZCkge1xuICAgICAgdGhpcy5zZXRTb3J0SGVhZGVycygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24pID0+IHtcbiAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH0pO1xuICAgIHRoaXMubXVsdGlzZWxlY3RTZWxlY3Rpb25DaGFuZ2UuY29tcGxldGUoKTtcblxuICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG5cbiAgICBPYmplY3Qua2V5cyh0aGlzLnJvd0RlbGV0ZUNvbnRlbnRzKS5mb3JFYWNoKChpZCkgPT4ge1xuICAgICAgdGhpcy5kZXN0cm95Um93RGVsZXRlKGlkKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZHJhZ3VsYVNlcnZpY2UuZGVzdHJveSh0aGlzLmRyYWd1bGFHcm91cE5hbWUpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXG4gIHB1YmxpYyBvbldpbmRvd1Jlc2l6ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNoZWNrVXNlckNvbHVtbldpZHRoc0ZvclNjcm9sbCgpO1xuICB9XG5cbiAgcHVibGljIGdldFRvcFNjcm9sbFdpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gIH1cblxuICBwdWJsaWMgZ2V0VGFibGVDbGFzc05hbWVzKCkge1xuICAgIGNvbnN0IGNsYXNzTmFtZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAodGhpcy5maXQgIT09ICdzY3JvbGwnKSB7XG4gICAgICBjbGFzc05hbWVzLnB1c2goJ3NreS1ncmlkLWZpdCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhhc1Rvb2xiYXIpIHtcbiAgICAgIGNsYXNzTmFtZXMucHVzaCgnc2t5LWdyaWQtaGFzLXRvb2xiYXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hZGREZWxpbWl0ZXIoY2xhc3NOYW1lcywgJyAnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRUYWJsZUhlYWRlckNsYXNzTmFtZXMoY29sdW1uOiBTa3lHcmlkQ29sdW1uTW9kZWwpIHtcbiAgICBjb25zdCBjbGFzc05hbWVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4ubG9ja2VkKSB7XG4gICAgICBjbGFzc05hbWVzLnB1c2goJ3NreS1ncmlkLWhlYWRlci1sb2NrZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hZGREZWxpbWl0ZXIoY2xhc3NOYW1lcywgJyAnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDYXJldEljb25OYW1lcyhjb2x1bW46IFNreUdyaWRDb2x1bW5Nb2RlbCkge1xuICAgIGNvbnN0IGljb25OYW1lczogc3RyaW5nW10gPSBbXTtcblxuICAgIHRoaXMuZ2V0U29ydERpcmVjdGlvbihjb2x1bW4uZmllbGQpLnN1YnNjcmliZSgoc29ydERpcikgPT4ge1xuICAgICAgaWYgKHNvcnREaXIgPT09ICdhc2MnKSB7XG4gICAgICAgIGljb25OYW1lcy5wdXNoKCdjYXJldC11cCcpO1xuICAgICAgfVxuICAgICAgaWYgKHNvcnREaXIgPT09ICdkZXNjJykge1xuICAgICAgICBpY29uTmFtZXMucHVzaCgnY2FyZXQtZG93bicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuYWRkRGVsaW1pdGVyKGljb25OYW1lcywgJyAnKTtcbiAgfVxuXG4gIHB1YmxpYyBvbktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGNvbHVtbjogU2t5R3JpZENvbHVtbk1vZGVsKSB7XG4gICAgY29uc3Qga2V5ID0gZXZlbnQua2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGtleSA9PT0gJ2VudGVyJyB8fCBrZXkgPT09ICcgJykge1xuICAgICAgdGhpcy5zb3J0QnlDb2x1bW4oY29sdW1uKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc29ydEJ5Q29sdW1uKGNvbHVtbjogU2t5R3JpZENvbHVtbk1vZGVsKSB7XG4gICAgaWYgKCF0aGlzLmlzRHJhZ2dpbmdSZXNpemVIYW5kbGUgJiYgY29sdW1uLmlzU29ydGFibGUpIHtcbiAgICAgIHRoaXMuY3VycmVudFNvcnRGaWVsZFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgIG1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgIGxldCBzZWxlY3RvciA9IHtcbiAgICAgICAgICAgICAgZmllbGRTZWxlY3RvcjogY29sdW1uLmZpZWxkLFxuICAgICAgICAgICAgICBkZXNjZW5kaW5nOiB0cnVlLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmaWVsZCAmJlxuICAgICAgICAgICAgICBmaWVsZC5maWVsZFNlbGVjdG9yID09PSBjb2x1bW4uZmllbGQgJiZcbiAgICAgICAgICAgICAgZmllbGQuZGVzY2VuZGluZ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHNlbGVjdG9yID0ge1xuICAgICAgICAgICAgICAgIGZpZWxkU2VsZWN0b3I6IGNvbHVtbi5maWVsZCxcbiAgICAgICAgICAgICAgICBkZXNjZW5kaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc29ydEZpZWxkQ2hhbmdlLmVtaXQoc2VsZWN0b3IpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50U29ydEZpZWxkLm5leHQoc2VsZWN0b3IpO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRTb3J0RGlyZWN0aW9uKGNvbHVtbkZpZWxkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRTb3J0RmllbGQucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBtYXAoKGZpZWxkKSA9PiB7XG4gICAgICAgIHJldHVybiBmaWVsZC5maWVsZFNlbGVjdG9yID09PSBjb2x1bW5GaWVsZFxuICAgICAgICAgID8gZmllbGQuZGVzY2VuZGluZ1xuICAgICAgICAgICAgPyAnZGVzYydcbiAgICAgICAgICAgIDogJ2FzYydcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBcmlhU29ydERpcmVjdGlvbihjb2x1bW46IFNreUdyaWRDb2x1bW5Nb2RlbCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFNvcnRGaWVsZC5waXBlKFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIG1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpZWxkLmZpZWxkU2VsZWN0b3IgPT09IGNvbHVtbi5maWVsZFxuICAgICAgICAgID8gZmllbGQuZGVzY2VuZGluZ1xuICAgICAgICAgICAgPyAnZGVzY2VuZGluZydcbiAgICAgICAgICAgIDogJ2FzY2VuZGluZydcbiAgICAgICAgICA6IGNvbHVtbi5pc1NvcnRhYmxlXG4gICAgICAgICAgPyAnbm9uZSdcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDYXJldFZpc2liaWxpdHkoY29sdW1uRmllbGQ6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFNvcnRGaWVsZC5waXBlKFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIG1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpZWxkLmZpZWxkU2VsZWN0b3IgPT09IGNvbHVtbkZpZWxkID8gJ3Zpc2libGUnIDogJ2hpZGRlbic7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0SGVscElubGluZUNsYXNzKGNvbHVtbkZpZWxkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRDYXJldFZpc2liaWxpdHkoY29sdW1uRmllbGQpLnBpcGUoXG4gICAgICBtYXAoKHZpc2liaWxpdHk6IHN0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4gdmlzaWJpbGl0eSA9PT0gJ2hpZGRlbic7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgb25NdWx0aXNlbGVjdENoZWNrYm94Q2hhbmdlKCkge1xuICAgIHRoaXMuZW1pdFNlbGVjdGVkUm93cyhTa3lHcmlkU2VsZWN0ZWRSb3dzU291cmNlLkNoZWNrYm94Q2hhbmdlKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVDb2x1bW5IZWFkaW5nKGNoYW5nZTogU2t5R3JpZENvbHVtbkhlYWRpbmdNb2RlbENoYW5nZSkge1xuICAgIGNvbnN0IGZvdW5kQ29sdW1uTW9kZWwgPSB0aGlzLmNvbHVtbnMuZmluZCgoY29sdW1uOiBTa3lHcmlkQ29sdW1uTW9kZWwpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIChjaGFuZ2UuaWQgIT09IHVuZGVmaW5lZCAmJiBjaGFuZ2UuaWQgPT09IGNvbHVtbi5pZCkgfHxcbiAgICAgICAgKGNoYW5nZS5maWVsZCAhPT0gdW5kZWZpbmVkICYmIGNoYW5nZS5maWVsZCA9PT0gY29sdW1uLmZpZWxkKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGZvdW5kQ29sdW1uTW9kZWwpIHtcbiAgICAgIGZvdW5kQ29sdW1uTW9kZWwuaGVhZGluZyA9IGNoYW5nZS52YWx1ZTtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHVwZGF0ZUlubGluZUhlbHBQb3BvdmVyKFxuICAgIGNoYW5nZTogU2t5R3JpZENvbHVtbklubGluZUhlbHBQb3BvdmVyTW9kZWxDaGFuZ2VcbiAgKSB7XG4gICAgY29uc3QgZm91bmRDb2x1bW5Nb2RlbCA9IHRoaXMuY29sdW1ucy5maW5kKChjb2x1bW46IFNreUdyaWRDb2x1bW5Nb2RlbCkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKGNoYW5nZS5pZCAhPT0gdW5kZWZpbmVkICYmIGNoYW5nZS5pZCA9PT0gY29sdW1uLmlkKSB8fFxuICAgICAgICAoY2hhbmdlLmZpZWxkICE9PSB1bmRlZmluZWQgJiYgY2hhbmdlLmZpZWxkID09PSBjb2x1bW4uZmllbGQpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoZm91bmRDb2x1bW5Nb2RlbCkge1xuICAgICAgZm91bmRDb2x1bW5Nb2RlbC5pbmxpbmVIZWxwUG9wb3ZlciA9IGNoYW5nZS52YWx1ZTtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHVwZGF0ZUNvbHVtbkRlc2NyaXB0aW9uKGNoYW5nZTogU2t5R3JpZENvbHVtbkRlc2NyaXB0aW9uTW9kZWxDaGFuZ2UpIHtcbiAgICBjb25zdCBmb3VuZENvbHVtbk1vZGVsID0gdGhpcy5jb2x1bW5zLmZpbmQoKGNvbHVtbjogU2t5R3JpZENvbHVtbk1vZGVsKSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAoY2hhbmdlLmlkICE9PSB1bmRlZmluZWQgJiYgY2hhbmdlLmlkID09PSBjb2x1bW4uaWQpIHx8XG4gICAgICAgIChjaGFuZ2UuZmllbGQgIT09IHVuZGVmaW5lZCAmJiBjaGFuZ2UuZmllbGQgPT09IGNvbHVtbi5maWVsZClcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChmb3VuZENvbHVtbk1vZGVsKSB7XG4gICAgICBmb3VuZENvbHVtbk1vZGVsLmRlc2NyaXB0aW9uID0gY2hhbmdlLnZhbHVlO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25SZXNpemVDb2x1bW5TdGFydChldmVudDoge1xuICAgIHN0b3BQcm9wYWdhdGlvbjogKCkgPT4gdm9pZDtcbiAgICBwcmV2ZW50RGVmYXVsdDogKCkgPT4gdm9pZDtcbiAgICBwYWdlWD86IG51bWJlcjtcbiAgfSk6IHZvaWQge1xuICAgIC8vIElmIHRoaXMgdGFibGUgaGFzbid0IGJlZW4gcmVzaXplZCwgaW5pdGlhbGl6ZSBhbGwgdGhlIHJlc2l6ZSB3aWR0aHMuXG4gICAgaWYgKCF0aGlzLmlzUmVzaXplZCkge1xuICAgICAgdGhpcy5pbml0Q29sdW1uV2lkdGhzKCk7XG4gICAgICB0aGlzLmlzUmVzaXplZCA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5pbml0aWFsaXplUmVzaXplQ29sdW1uKGV2ZW50KTtcblxuICAgIHRoaXMuaXNEcmFnZ2luZ1Jlc2l6ZUhhbmRsZSA9IHRydWU7XG4gICAgdGhpcy54UG9zU3RhcnQgPSBldmVudC5wYWdlWDtcbiAgICB0aGlzLnNob3dSZXNpemVCYXIgPSB0cnVlO1xuXG4gICAgLy8gU2hvdyB2aXN1YWwgaW5kaWNhdG9yIG9mIHdoZXJlIG1vdXNlIGlzIGRyYWdnaW5nIChyZXNpemVCYXIpLlxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuc2V0UmVzaXplQmFyUG9zaXRpb24oZXZlbnQucGFnZVgpO1xuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGNvbnN0IG1vdXNlTW92ZUV2ZW50ID0gZnJvbUV2ZW50KGRvY3VtZW50LCAnbW91c2Vtb3ZlJyk7XG4gICAgY29uc3QgdG91Y2hNb3ZlRXZlbnQgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICd0b3VjaG1vdmUnKTtcblxuICAgIG1lcmdlKG1vdXNlTW92ZUV2ZW50LCB0b3VjaE1vdmVFdmVudClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlV2hpbGUoKCkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlzRHJhZ2dpbmdSZXNpemVIYW5kbGU7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChtb3ZlRXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLm9uUmVzaXplSGFuZGxlTW92ZShtb3ZlRXZlbnQpO1xuICAgICAgfSk7XG5cbiAgICBjb25zdCBtb3VzZVVwRXZlbnQgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdtb3VzZXVwJyk7XG4gICAgY29uc3QgdG91Y2hFbmRFdmVudCA9IGZyb21FdmVudChkb2N1bWVudCwgJ3RvdWNoZW5kJyk7XG5cbiAgICBtZXJnZShtb3VzZVVwRXZlbnQsIHRvdWNoRW5kRXZlbnQpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVdoaWxlKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pc0RyYWdnaW5nUmVzaXplSGFuZGxlO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoZW5kRXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLm9uUmVzaXplSGFuZGxlUmVsZWFzZShlbmRFdmVudCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvbktleWRvd25SZXNpemVDb2woZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAvLyBJZiB0aGlzIHRhYmxlIGhhc24ndCBiZWVuIHJlc2l6ZWQsIGluaXRpYWxpemUgYWxsIHRoZSByZXNpemUgd2lkdGhzLlxuICAgIGlmICghdGhpcy5pc1Jlc2l6ZWQpIHtcbiAgICAgIHRoaXMuaW5pdENvbHVtbldpZHRocygpO1xuICAgICAgdGhpcy5pc1Jlc2l6ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdGlhbGl6ZVJlc2l6ZUNvbHVtbihldmVudCk7XG4gIH1cblxuICBwdWJsaWMgb25JbnB1dENoYW5nZVJlc2l6ZUNvbChldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gTnVtYmVyKGlucHV0LnZhbHVlKTtcbiAgICBjb25zdCBkZWx0YVggPSBuZXdWYWx1ZSAtIHRoaXMuc3RhcnRDb2x1bW5XaWR0aDtcbiAgICB0aGlzLnJlc2l6ZUNvbHVtbkJ5SW5kZXgodGhpcy5hY3RpdmVSZXNpemVDb2x1bW5JbmRleCwgbmV3VmFsdWUsIGRlbHRhWCk7XG4gICAgY29uc3QgbGVmdCA9IGlucHV0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG4gICAgdGhpcy5zZXRSZXNpemVCYXJQb3NpdGlvbihsZWZ0KTtcbiAgfVxuXG4gIHB1YmxpYyBvblJlc2l6ZUhhbmRsZU1vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBjb25zdCBkZWx0YVggPSBldmVudC5wYWdlWCAtIHRoaXMueFBvc1N0YXJ0O1xuICAgIGNvbnN0IG5ld0NvbFdpZHRoID0gdGhpcy5zdGFydENvbHVtbldpZHRoICsgZGVsdGFYO1xuXG4gICAgaWYgKG5ld0NvbFdpZHRoIDw9IHRoaXMubWluQ29sV2lkdGgpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1heCA9IHRoaXMuZ2V0TWF4UmFuZ2VCeUluZGV4KHRoaXMuYWN0aXZlUmVzaXplQ29sdW1uSW5kZXgpO1xuICAgIGlmICh0aGlzLmZpdCA9PT0gJ3dpZHRoJyAmJiBuZXdDb2xXaWR0aCA+IG1heCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZXRSZXNpemVCYXJQb3NpdGlvbihldmVudC5wYWdlWCk7XG4gIH1cblxuICBwdWJsaWMgb25SZXNpemVIYW5kbGVCbHVyKCkge1xuICAgIHRoaXMuc2hvd1Jlc2l6ZUJhciA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIG9uUmVzaXplSGFuZGxlRm9jdXMoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICB0aGlzLnNob3dSZXNpemVCYXIgPSB0cnVlO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IGxlZnQgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICB0aGlzLnNldFJlc2l6ZUJhclBvc2l0aW9uKGxlZnQpO1xuICB9XG5cbiAgcHVibGljIG9uUmVzaXplSGFuZGxlUmVsZWFzZShldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuc2hvd1Jlc2l6ZUJhciA9IGZhbHNlO1xuICAgIGNvbnN0IGRlbHRhWCA9IGV2ZW50LnBhZ2VYIC0gdGhpcy54UG9zU3RhcnQ7XG4gICAgY29uc3QgbmV3Q29sV2lkdGggPSB0aGlzLnN0YXJ0Q29sdW1uV2lkdGggKyBkZWx0YVg7XG4gICAgdGhpcy5yZXNpemVDb2x1bW5CeUluZGV4KHRoaXMuYWN0aXZlUmVzaXplQ29sdW1uSW5kZXgsIG5ld0NvbFdpZHRoLCBkZWx0YVgpO1xuICAgIHRoaXMuaXNEcmFnZ2luZ1Jlc2l6ZUhhbmRsZSA9IGZhbHNlO1xuICAgIHRoaXMuYWN0aXZlUmVzaXplQ29sdW1uSW5kZXggPSB1bmRlZmluZWQ7XG5cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHVibGljIG9uUm93Q2xpY2soZXZlbnQ6IGFueSwgc2VsZWN0ZWRJdGVtOiBMaXN0SXRlbU1vZGVsKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy5lbmFibGVNdWx0aXNlbGVjdCkge1xuICAgICAgaWYgKFxuICAgICAgICBldmVudC50YXJnZXQgPT09IGV2ZW50LmN1cnJlbnRUYXJnZXQgfHxcbiAgICAgICAgIXRoaXMuaXNJbnRlcmFjdGl2ZUVsZW1lbnQoZXZlbnQpXG4gICAgICApIHtcbiAgICAgICAgc2VsZWN0ZWRJdGVtLmlzU2VsZWN0ZWQgPSAhc2VsZWN0ZWRJdGVtLmlzU2VsZWN0ZWQ7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHRoaXMuZW1pdFNlbGVjdGVkUm93cyhTa3lHcmlkU2VsZWN0ZWRSb3dzU291cmNlLlJvd0NsaWNrKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNSb3dIaWdobGlnaHRlZChpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMucm93SGlnaGxpZ2h0ZWRJZCkge1xuICAgICAgcmV0dXJuIGlkID09PSB0aGlzLnJvd0hpZ2hsaWdodGVkSWQ7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSb3dIZWlnaHQoaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ3JpZEFkYXB0ZXIuZ2V0Um93SGVpZ2h0KHRoaXMudGFibGVFbGVtZW50UmVmLCBpbmRleCk7XG4gIH1cblxuICBwdWJsaWMgY2FuY2VsUm93RGVsZXRlKGlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLnJvd0RlbGV0ZUNvbmZpZ3MgPSB0aGlzLnJvd0RlbGV0ZUNvbmZpZ3MuZmlsdGVyKFxuICAgICAgKGNvbmZpZykgPT4gY29uZmlnLmlkICE9PSBpZFxuICAgICk7XG4gICAgdGhpcy5yb3dEZWxldGVDYW5jZWwuZW1pdCh7IGlkOiBpZCB9KTtcblxuICAgIHRoaXMuZGVzdHJveVJvd0RlbGV0ZShpZCk7XG4gIH1cblxuICBwdWJsaWMgY29uZmlybVJvd0RlbGV0ZShpZDogc3RyaW5nKSB7XG4gICAgdGhpcy5yb3dEZWxldGVDb25maWdzLmZpbmQoKGNvbmZpZykgPT4gY29uZmlnLmlkID09PSBpZCkucGVuZGluZyA9IHRydWU7XG4gICAgdGhpcy5yb3dEZWxldGVDb25maXJtLmVtaXQoeyBpZDogaWQgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Um93RGVsZXRlSXRlbShpZDogc3RyaW5nKTogU2t5R3JpZFJvd0RlbGV0ZUNvbmZpZyB7XG4gICAgcmV0dXJuIHRoaXMucm93RGVsZXRlQ29uZmlncy5maW5kKChyb3dEZWxldGUpID0+IHJvd0RlbGV0ZS5pZCA9PT0gaWQpO1xuICB9XG5cbiAgLy8gUHJldmVudCB0b3VjaCBkZXZpY2VzIGZyb20gaW5hZHZlcnRlbnRseSBzY3JvbGxpbmcgZ3JpZCB3aGlsZSBkcmFnZ2luZyBjb2x1bW5zLlxuICBwdWJsaWMgb25Ub3VjaE1vdmUoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICBwdWJsaWMgb25Ub3BTY3JvbGwoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMudGFibGVDb250YWluZXJFbGVtZW50UmVmKSB7XG4gICAgICBpZiAodGhpcy5zY3JvbGxUcmlnZ2VyZWQpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxUcmlnZ2VyZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50YWJsZUNvbnRhaW5lckVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID1cbiAgICAgICAgICB0aGlzLnRvcFNjcm9sbENvbnRhaW5lckVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zY3JvbGxUcmlnZ2VyZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkdyaWRTY3JvbGwoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMudG9wU2Nyb2xsQ29udGFpbmVyRWxlbWVudFJlZikge1xuICAgICAgaWYgKHRoaXMuc2Nyb2xsVHJpZ2dlcmVkKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsVHJpZ2dlcmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMudG9wU2Nyb2xsQ29udGFpbmVyRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPVxuICAgICAgICAgIHRoaXMudGFibGVDb250YWluZXJFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsVHJpZ2dlcmVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoZWNrVXNlckNvbHVtbldpZHRoc0ZvclNjcm9sbCgpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5zaG93VG9wU2Nyb2xsICYmXG4gICAgICB0aGlzLmNvbHVtbkVsZW1lbnRSZWZzICYmXG4gICAgICB0aGlzLmNvbHVtbkVsZW1lbnRSZWZzLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIGxldCBjb2x1bW5zV2lkdGhUb3RhbCA9IDA7XG4gICAgICBjb25zdCB3aW5kb3dTaXplID0gdGhpcy5za3lXaW5kb3cubmF0aXZlV2luZG93LmlubmVyV2lkdGg7XG4gICAgICB0aGlzLmNvbHVtbkVsZW1lbnRSZWZzLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuc2hvd1RvcFNjcm9sbCkge1xuICAgICAgICAgIGNvbnN0IGNvbXB1dGVkV2lkdGggPSBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgd2luZG93LmdldENvbXB1dGVkU3R5bGUoY29sLm5hdGl2ZUVsZW1lbnQpLndpZHRoXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBvZmZzZXRXaWR0aCA9IGNvbC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgICAgIGNvbnN0IHdpZHRoID0gTWF0aC5tYXgoXG4gICAgICAgICAgICBjb21wdXRlZFdpZHRoIHx8IG9mZnNldFdpZHRoLFxuICAgICAgICAgICAgdGhpcy5taW5Db2xXaWR0aFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29sdW1uc1dpZHRoVG90YWwgPSBjb2x1bW5zV2lkdGhUb3RhbCArIHdpZHRoO1xuICAgICAgICAgIGlmIChjb2x1bW5zV2lkdGhUb3RhbCA+IHdpbmRvd1NpemUpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1RvcFNjcm9sbCA9IHRydWU7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtdWx0aXNlbGVjdFNlbGVjdEFsbCgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuaXRlbXNbaV0uaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgdGhpcy5lbWl0U2VsZWN0ZWRSb3dzKFNreUdyaWRTZWxlY3RlZFJvd3NTb3VyY2UuU2VsZWN0QWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgbXVsdGlzZWxlY3RDbGVhckFsbCgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuaXRlbXNbaV0uaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIHRoaXMuZW1pdFNlbGVjdGVkUm93cyhTa3lHcmlkU2VsZWN0ZWRSb3dzU291cmNlLkNsZWFyQWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhtZXNzYWdlOiBTa3lHcmlkTWVzc2FnZSkge1xuICAgIHN3aXRjaCAobWVzc2FnZS50eXBlKSB7XG4gICAgICBjYXNlIFNreUdyaWRNZXNzYWdlVHlwZS5TZWxlY3RBbGw6XG4gICAgICAgIHRoaXMubXVsdGlzZWxlY3RTZWxlY3RBbGwoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU2t5R3JpZE1lc3NhZ2VUeXBlLkNsZWFyQWxsOlxuICAgICAgICB0aGlzLm11bHRpc2VsZWN0Q2xlYXJBbGwoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFNreUdyaWRNZXNzYWdlVHlwZS5Qcm9tcHREZWxldGVSb3c6XG4gICAgICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAobWVzc2FnZS5kYXRhICYmIG1lc3NhZ2UuZGF0YS5wcm9tcHREZWxldGVSb3cpIHtcbiAgICAgICAgICBjb25zdCBleGlzdGluZ0NvbmZpZyA9IHRoaXMucm93RGVsZXRlQ29uZmlncy5maW5kKFxuICAgICAgICAgICAgKGNvbmZpZykgPT4gY29uZmlnLmlkID09PSBtZXNzYWdlLmRhdGEucHJvbXB0RGVsZXRlUm93LmlkXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoZXhpc3RpbmdDb25maWcpIHtcbiAgICAgICAgICAgIGV4aXN0aW5nQ29uZmlnLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yb3dEZWxldGVDb25maWdzLnB1c2goe1xuICAgICAgICAgICAgICBpZDogbWVzc2FnZS5kYXRhLnByb21wdERlbGV0ZVJvdy5pZCxcbiAgICAgICAgICAgICAgcGVuZGluZzogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IG92ZXJsYXkgPSB0aGlzLm92ZXJsYXlTZXJ2aWNlLmNyZWF0ZSh7XG4gICAgICAgICAgICAgIGVuYWJsZVNjcm9sbDogdHJ1ZSxcbiAgICAgICAgICAgICAgc2hvd0JhY2tkcm9wOiBmYWxzZSxcbiAgICAgICAgICAgICAgY2xvc2VPbk5hdmlnYXRpb246IHRydWUsXG4gICAgICAgICAgICAgIGVuYWJsZUNsb3NlOiBmYWxzZSxcbiAgICAgICAgICAgICAgZW5hYmxlUG9pbnRlckV2ZW50czogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBvdmVybGF5LmF0dGFjaFRlbXBsYXRlKHRoaXMuaW5saW5lRGVsZXRlVGVtcGxhdGVSZWYsIHtcbiAgICAgICAgICAgICAgJGltcGxpY2l0OiB0aGlzLmRhdGEuZmluZChcbiAgICAgICAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5pZCA9PT0gbWVzc2FnZS5kYXRhLnByb21wdERlbGV0ZVJvdy5pZFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogV2UgYXJlIG1hbnVhbGx5IHNldHRpbmcgdGhlIHotaW5kZXggaGVyZSBiZWNhdXNlIG92ZXJsYXlzIHdpbGwgYWx3YXlzIGJlIG9uIHRvcCBvZlxuICAgICAgICAgICAgICogdGhlIG9tbmliYXIuIFRoaXMgbWFudWFsIHNldHRpbmcgaXMgMSBsZXNzIHRoYW4gdGhlIG9tbmliYXIncyB6LWluZGV4IG9mIDEwMDAuIFdlXG4gICAgICAgICAgICAgKiBkaXNjdXNzZWQgY2hhbmdpbmcgdGhlIG92ZXJsYXkgc2VydmljZSB0byBhbGxvdyBmb3IgdGhpcyBidXQgZGVjaWRlZCBhZ2FpbnN0IHRoYXRcbiAgICAgICAgICAgICAqIGNoYW5nZSBhdCB0aGlzIHRpbWUgZHVlIHRvIGl0cyBuaWNoZSBuYXR1cmUuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIG92ZXJsYXkuY29tcG9uZW50UmVmLmluc3RhbmNlLnpJbmRleCA9ICc5OTknO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaW5saW5lRGVsZXRlUmVmID0gdGhpcy5pbmxpbmVEZWxldGVSZWZzXG4gICAgICAgICAgICAgICAgLnRvQXJyYXkoKVxuICAgICAgICAgICAgICAgIC5maW5kKChlbFJlZikgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgZWxSZWYubmF0aXZlRWxlbWVudC5pZCA9PT1cbiAgICAgICAgICAgICAgICAgICAgJ3Jvdy1kZWxldGUtcmVmLScgKyBtZXNzYWdlLmRhdGEucHJvbXB0RGVsZXRlUm93LmlkXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjb25zdCBhZmZpeGVyID0gdGhpcy5hZmZpeFNlcnZpY2UuY3JlYXRlQWZmaXhlcihpbmxpbmVEZWxldGVSZWYpO1xuXG4gICAgICAgICAgICAgIGNvbnN0IHJvd0VsZW1lbnQ6IEhUTUxFbGVtZW50ID1cbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICAgICAgICAnW3NreS1jbXAtaWQ9XCInICsgbWVzc2FnZS5kYXRhLnByb21wdERlbGV0ZVJvdy5pZCArICdcIl0nXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBhZmZpeGVyLmFmZml4VG8ocm93RWxlbWVudCwge1xuICAgICAgICAgICAgICAgIGF1dG9GaXRDb250ZXh0OiBTa3lBZmZpeEF1dG9GaXRDb250ZXh0LlZpZXdwb3J0LFxuICAgICAgICAgICAgICAgIGlzU3RpY2t5OiB0cnVlLFxuICAgICAgICAgICAgICAgIHBsYWNlbWVudDogJ2Fib3ZlJyxcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWdubWVudDogJ3RvcCcsXG4gICAgICAgICAgICAgICAgaG9yaXpvbnRhbEFsaWdubWVudDogJ2xlZnQnLFxuICAgICAgICAgICAgICAgIGVuYWJsZUF1dG9GaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICB0aGlzLnJvd0RlbGV0ZUNvbnRlbnRzW21lc3NhZ2UuZGF0YS5wcm9tcHREZWxldGVSb3cuaWRdID0ge1xuICAgICAgICAgICAgICAgIGFmZml4ZXI6IGFmZml4ZXIsXG4gICAgICAgICAgICAgICAgb3ZlcmxheTogb3ZlcmxheSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU2t5R3JpZE1lc3NhZ2VUeXBlLkFib3J0RGVsZXRlUm93OlxuICAgICAgICAvKiBzYW5pdHkgY2hlY2sgKi9cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UuZGF0YSAmJiBtZXNzYWdlLmRhdGEuYWJvcnREZWxldGVSb3cpIHtcbiAgICAgICAgICB0aGlzLnJvd0RlbGV0ZUNvbmZpZ3MgPSB0aGlzLnJvd0RlbGV0ZUNvbmZpZ3MuZmlsdGVyKFxuICAgICAgICAgICAgKGNvbmZpZykgPT4gY29uZmlnLmlkICE9PSBtZXNzYWdlLmRhdGEuYWJvcnREZWxldGVSb3cuaWRcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy5kZXN0cm95Um93RGVsZXRlKG1lc3NhZ2UuZGF0YS5hYm9ydERlbGV0ZVJvdy5pZCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIG9uSGVhZGVyRHJvcChuZXdDb2x1bW5JZHM6IEFycmF5PHN0cmluZz4pIHtcbiAgICAvLyB1cGRhdGUgc2VsZWN0ZWQgY29sdW1uSWRzXG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbklkc1NldCA9IHRydWU7XG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbklkcyA9IG5ld0NvbHVtbklkcztcblxuICAgIC8vIG1hcmsgZm9yIGNoZWNrIGJlY2F1c2Ugd2UgYXJlIHVzaW5nIENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lm9uUHVzaFxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIHNldERpc3BsYXllZENvbHVtbnMocmVzcGVjdEhpZGRlbjogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgLyogc2FuaXR5IGNoZWNrICovXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy5jb2x1bW5zKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbklkcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIHNldHVwIGRpc3BsYXllZCBjb2x1bW5zXG4gICAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5JZHNcbiAgICAgICAgICAuZmlsdGVyKChjb2x1bW5JZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maW5kKChjb2x1bW4pID0+IGNvbHVtbi5pZCA9PT0gY29sdW1uSWQpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLm1hcCgoY29sdW1uSWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnMuZmlsdGVyKChjb2x1bW4pID0+IGNvbHVtbi5pZCA9PT0gY29sdW1uSWQpWzBdO1xuICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChyZXNwZWN0SGlkZGVuKSB7XG4gICAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoKGNvbHVtbikgPT4ge1xuICAgICAgICAgIHJldHVybiAhY29sdW1uLmhpZGRlbjtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1EYXRhKCkge1xuICAgIC8vIFRyYW5zZm9ybSBkYXRhIGludG8gb2JqZWN0IHdpdGggaWQgYW5kIGRhdGEgcHJvcGVydGllc1xuICAgIGlmIChcbiAgICAgIHRoaXMuZGF0YSAmJlxuICAgICAgdGhpcy5kYXRhLmxlbmd0aCA+IDAgJiZcbiAgICAgIHRoaXMuZGF0YVswXS5pZCAmJlxuICAgICAgIXRoaXMuZGF0YVswXS5kYXRhXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5tdWx0aXNlbGVjdFJvd0lkKSB7XG4gICAgICAgIHRoaXMuaXRlbXMgPSB0aGlzLmdldEdyaWREYXRhV2l0aFNlbGVjdGVkUm93cygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuZGF0YS5tYXAoKGl0ZW0pID0+IG5ldyBMaXN0SXRlbU1vZGVsKGl0ZW0uaWQsIGl0ZW0pKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuZGF0YTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEdyaWREYXRhV2l0aFNlbGVjdGVkUm93cygpIHtcbiAgICBjb25zdCBzZWxlY3RlZFJvd3MgPSB0aGlzLmdldFNlbGVjdGVkUm93cygpO1xuICAgIHJldHVybiB0aGlzLmRhdGEubWFwKChpdGVtKSA9PiB7XG4gICAgICBsZXQgY2hlY2tlZDtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaXRlbSwgdGhpcy5tdWx0aXNlbGVjdFJvd0lkKSkge1xuICAgICAgICBjaGVja2VkID0gc2VsZWN0ZWRSb3dzLmluZGV4T2YoaXRlbVt0aGlzLm11bHRpc2VsZWN0Um93SWRdKSA+IC0xO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hlY2tlZCA9IHNlbGVjdGVkUm93cy5pbmRleE9mKGl0ZW0uaWQpID4gLTE7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IExpc3RJdGVtTW9kZWwoaXRlbS5pZCwgaXRlbSwgY2hlY2tlZCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5U2VsZWN0ZWRSb3dzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLml0ZW1zICYmIHRoaXMuaXRlbXMubGVuZ3RoID4gMCAmJiB0aGlzLnNlbGVjdGVkUm93SWRzKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy5pdGVtc1tpXS5pc1NlbGVjdGVkID1cbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93SWRzLmluZGV4T2YodGhpcy5pdGVtc1tpXS5pZCkgPiAtMTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRTb3J0SGVhZGVycygpIHtcbiAgICB0aGlzLmN1cnJlbnRTb3J0RmllbGQubmV4dChcbiAgICAgIHRoaXMuc29ydEZpZWxkIHx8IHsgZmllbGRTZWxlY3RvcjogJycsIGRlc2NlbmRpbmc6IGZhbHNlIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2x1bW5zRnJvbUNvbXBvbmVudCgpIHtcbiAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbkNvbXBvbmVudHMubWFwKChjb2x1bW5Db21wb25lbnQpID0+IHtcbiAgICAgIHJldHVybiBuZXcgU2t5R3JpZENvbHVtbk1vZGVsKGNvbHVtbkNvbXBvbmVudC50ZW1wbGF0ZSwgY29sdW1uQ29tcG9uZW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ29sdW1ucygpIHtcbiAgICB0aGlzLmdldENvbHVtbnNGcm9tQ29tcG9uZW50KCk7XG5cbiAgICAvLyBUaGlzIHNldCB0aW1lb3V0IGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIGNvbHVtbnMgaGF2ZSByZW5kZXJlZCBpbiB0aGUgZ3JpZFxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jaGVja1VzZXJDb2x1bW5XaWR0aHNGb3JTY3JvbGwoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzaXplQ29sdW1uQnlJbmRleChcbiAgICBjb2x1bW5JbmRleDogc3RyaW5nLFxuICAgIG5ld0NvbFdpZHRoOiBudW1iZXIsXG4gICAgZGVsdGFYOiBudW1iZXJcbiAgKSB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5nZXRDb2x1bW5Nb2RlbEJ5SW5kZXgoY29sdW1uSW5kZXgpO1xuXG4gICAgLy8gUHJldmVudCBhY2NpZGVudGFsIHNocmlua2FnZSBiZWxvdyBtaW5pbXVtIHdpZHRoLlxuICAgIGlmIChuZXdDb2xXaWR0aCA8PSB0aGlzLm1pbkNvbFdpZHRoKSB7XG4gICAgICBkZWx0YVggPSBkZWx0YVggKyB0aGlzLm1pbkNvbFdpZHRoIC0gbmV3Q29sV2lkdGg7XG4gICAgICBuZXdDb2xXaWR0aCA9IHRoaXMubWluQ29sV2lkdGg7XG4gICAgfVxuXG4gICAgLy8gZml0PXdpZHRoIGFkZHMvcmVtb3ZlcyB3aWR0aCBmcm9tIHRoZSBsYXN0IGNvbHVtblxuICAgIC8vIGZpdD1zY3JvbGwgYWRkcy9yZW1vdmVzIHdpZHRoIGZyb20gdGhlIHRhYmxlXG4gICAgaWYgKHRoaXMuZml0ID09PSAnd2lkdGgnKSB7XG4gICAgICBjb25zdCBsYXN0Q29sdW1uID0gdGhpcy5nZXRMYXN0RGlzcGxheWVkQ29sdW1uKCk7XG5cbiAgICAgIC8vIFByZXZlbnQgYWNjaWRlbnRhbCBncm93dGggdGhhdCB3b3VsZCBidW1wIGxhc3QgY29sdW1uIG9mZiBzY3JlZW4uXG4gICAgICBjb25zdCBtYXggPSB0aGlzLmdldE1heFJhbmdlQnlJbmRleChjb2x1bW5JbmRleCk7XG4gICAgICBpZiAobmV3Q29sV2lkdGggPiBtYXgpIHtcbiAgICAgICAgbmV3Q29sV2lkdGggPSBtYXg7XG4gICAgICAgIGRlbHRhWCA9IG1heCAtIHRoaXMuc3RhcnRDb2x1bW5XaWR0aDtcbiAgICAgIH1cbiAgICAgIGNvbHVtbi53aWR0aCA9IG5ld0NvbFdpZHRoO1xuICAgICAgbGFzdENvbHVtbi53aWR0aCA9IGxhc3RDb2x1bW4ud2lkdGggLSBkZWx0YVg7XG4gICAgICB0aGlzLnVwZGF0ZU1heFJhbmdlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ3JpZEFkYXB0ZXIuc2V0U3R5bGUoXG4gICAgICAgIHRoaXMudGFibGVFbGVtZW50UmVmLFxuICAgICAgICAnd2lkdGgnLFxuICAgICAgICBgJHt0aGlzLnRhYmxlV2lkdGggKyBkZWx0YVh9cHhgXG4gICAgICApO1xuICAgICAgY29sdW1uLndpZHRoID0gbmV3Q29sV2lkdGg7XG4gICAgfVxuXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5jb2x1bW5XaWR0aENoYW5nZS5lbWl0KHRoaXMuZ2V0Q29sdW1uV2lkdGhNb2RlbENoYW5nZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdENvbHVtbldpZHRocygpIHtcbiAgICAvLyBFc3RhYmxpc2ggdGFibGUgd2lkdGguXG4gICAgdGhpcy5zaG93VG9wU2Nyb2xsID0gdHJ1ZTtcblxuICAgIC8vIFNldCBjb2x1bW4gd2lkdGhzIGJhc2VkIG9uIHRoZSB3aWR0aCBpbml0aWFsbHkgZ2l2ZW4gYnkgdGhlIGJyb3dzZXIuXG4gICAgLy8gY29tcHV0ZWRXaWR0aCBwcmV2ZW50cyBhY2NpZGVudGFsIG92ZXJmbG93IGZvciBicm93c2VycyB3aXRoIHN1Yi1waXhlbCB3aWR0aHMuXG4gICAgdGhpcy5jb2x1bW5FbGVtZW50UmVmcy5mb3JFYWNoKChjb2wsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBjb21wdXRlZFdpZHRoID0gcGFyc2VGbG9hdChcbiAgICAgICAgd2luZG93LmdldENvbXB1dGVkU3R5bGUoY29sLm5hdGl2ZUVsZW1lbnQpLndpZHRoXG4gICAgICApO1xuICAgICAgY29uc3Qgb2Zmc2V0V2lkdGggPSBjb2wubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICB0aGlzLmdldENvbHVtbk1vZGVsQnlJbmRleChpbmRleCkud2lkdGggPSBNYXRoLm1heChcbiAgICAgICAgY29tcHV0ZWRXaWR0aCB8fCBvZmZzZXRXaWR0aCxcbiAgICAgICAgdGhpcy5taW5Db2xXaWR0aFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIC8vICdzY3JvbGwnIHRhYmxlcyBzaG91bGQgYmUgYWxsb3dlZCB0byBleHBhbmQgb3V0c2lkZSBvZiB0aGVpciBjb25zdHJhaW50cy5cbiAgICBpZiAodGhpcy5maXQgPT09ICdzY3JvbGwnKSB7XG4gICAgICB0aGlzLmdyaWRBZGFwdGVyLnNldFN0eWxlKHRoaXMudGFibGVFbGVtZW50UmVmLCAnbWluLXdpZHRoJywgJ2F1dG8nKTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgbWF4IGxpbWl0cyBmb3IgaW5wdXQgcmFuZ2VzLlxuICAgIGlmICh0aGlzLmZpdCA9PT0gJ3dpZHRoJykge1xuICAgICAgdGhpcy51cGRhdGVNYXhSYW5nZSgpO1xuICAgIH1cblxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2ZlckNvbHVtbldpZHRocyhcbiAgICBvbGRDb2x1bW5zOiBTa3lHcmlkQ29sdW1uTW9kZWxbXSxcbiAgICBuZXdDb2x1bW5zOiBTa3lHcmlkQ29sdW1uTW9kZWxbXVxuICApIHtcbiAgICAvKiBzYW5pdHkgY2hlY2sgKi9cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChvbGRDb2x1bW5zICYmIG5ld0NvbHVtbnMpIHtcbiAgICAgIGZvciAoY29uc3Qgb2xkQ29sdW1uIG9mIG9sZENvbHVtbnMpIHtcbiAgICAgICAgaWYgKG9sZENvbHVtbi53aWR0aCkge1xuICAgICAgICAgIGNvbnN0IG1hdGNoaW5nQ29sdW1uID0gbmV3Q29sdW1ucy5maW5kKFxuICAgICAgICAgICAgKG5ld0NvbHVtbikgPT4gb2xkQ29sdW1uLmlkID09PSBuZXdDb2x1bW4uaWRcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChtYXRjaGluZ0NvbHVtbiAmJiAhbWF0Y2hpbmdDb2x1bW4ud2lkdGgpIHtcbiAgICAgICAgICAgIG1hdGNoaW5nQ29sdW1uLndpZHRoID0gb2xkQ29sdW1uLndpZHRoO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2x1bW5XaWR0aE1vZGVsQ2hhbmdlKCkge1xuICAgIGNvbnN0IGNvbHVtbldpZHRoTW9kZWxDaGFuZ2UgPSBuZXcgQXJyYXk8U2t5R3JpZENvbHVtbldpZHRoTW9kZWxDaGFuZ2U+KCk7XG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgY29sdW1uV2lkdGhNb2RlbENoYW5nZS5wdXNoKHtcbiAgICAgICAgaWQ6IGNvbHVtbi5pZCxcbiAgICAgICAgZmllbGQ6IGNvbHVtbi5maWVsZCxcbiAgICAgICAgd2lkdGg6IGNvbHVtbi53aWR0aCxcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBjb2x1bW5XaWR0aE1vZGVsQ2hhbmdlO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNYXhSYW5nZSgpIHtcbiAgICBjb25zdCBsZWZ0b3ZlcldpZHRoID1cbiAgICAgIHRoaXMuZ2V0TGFzdERpc3BsYXllZENvbHVtbigpLndpZHRoIC0gdGhpcy5taW5Db2xXaWR0aDtcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMuZm9yRWFjaCgoY29sdW1uLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbmV3TWF4UmFuZ2UgPSBjb2x1bW4ud2lkdGggKyBsZWZ0b3ZlcldpZHRoO1xuICAgICAgY29uc3QgcmFuZ2VJbnB1dCA9IHRoaXMuZ2V0UmFuZ2VJbnB1dEJ5SW5kZXgoaW5kZXgpO1xuICAgICAgcmFuZ2VJbnB1dC5uYXRpdmVFbGVtZW50Lm1heCA9IG5ld01heFJhbmdlO1xuICAgICAgcmFuZ2VJbnB1dC5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS12YWx1ZW1heCcsIG5ld01heFJhbmdlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVJlc2l6ZUNvbHVtbihldmVudDogYW55KSB7XG4gICAgY29uc3QgY2xpY2tUYXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgdGhpcy5hY3RpdmVSZXNpemVDb2x1bW5JbmRleCA9IGNsaWNrVGFyZ2V0LmdldEF0dHJpYnV0ZSgnc2t5LWNtcC1pbmRleCcpO1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuZ2V0Q29sdW1uTW9kZWxCeUluZGV4KHRoaXMuYWN0aXZlUmVzaXplQ29sdW1uSW5kZXgpO1xuICAgIHRoaXMuc3RhcnRDb2x1bW5XaWR0aCA9IGNvbHVtbi53aWR0aDtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRUYWJsZVdpZHRoKCkge1xuICAgIHRoaXMuc2t5V2luZG93Lm5hdGl2ZVdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZ3JpZEFkYXB0ZXIuc2V0U3R5bGUodGhpcy50YWJsZUVsZW1lbnRSZWYsICd3aWR0aCcsIGBhdXRvYCk7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIHRoaXMuZ3JpZEFkYXB0ZXIuc2V0U3R5bGUoXG4gICAgICAgIHRoaXMudGFibGVFbGVtZW50UmVmLFxuICAgICAgICAnd2lkdGgnLFxuICAgICAgICBgJHt0aGlzLnRhYmxlV2lkdGh9cHhgXG4gICAgICApO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldFJhbmdlSW5wdXRCeUluZGV4KGluZGV4OiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5SYW5nZUlucHV0RWxlbWVudFJlZnMuZmluZChcbiAgICAgIChpbnB1dCkgPT5cbiAgICAgICAgaW5wdXQubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3NreS1jbXAtaW5kZXgnKSA9PT0gaW5kZXgudG9TdHJpbmcoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbHVtbk1vZGVsQnlJbmRleChpbmRleDogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheWVkQ29sdW1uc1tOdW1iZXIoaW5kZXgpXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWF4UmFuZ2VCeUluZGV4KGluZGV4OiBzdHJpbmcpIHtcbiAgICBjb25zdCBjb2x1bW5FbGVtZW50UmVmID0gdGhpcy5jb2x1bW5FbGVtZW50UmVmcy5maW5kKFxuICAgICAgKHRoKSA9PiB0aC5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnc2t5LWNtcC1pbmRleCcpID09PSBpbmRleFxuICAgICk7XG4gICAgY29uc3QgcmFuZ2VJbnB1dCA9IGNvbHVtbkVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgJy5za3ktZ3JpZC1jb2x1bW4taW5wdXQtYXJpYS1vbmx5J1xuICAgICk7XG4gICAgcmV0dXJuIE51bWJlcihyYW5nZUlucHV0Lm1heCk7XG4gIH1cblxuICBwcml2YXRlIGdldExhc3REaXNwbGF5ZWRDb2x1bW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q29sdW1uTW9kZWxCeUluZGV4KHRoaXMuZGlzcGxheWVkQ29sdW1ucy5sZW5ndGggLSAxKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkRGVsaW1pdGVyKHRleHQ6IHN0cmluZ1tdLCBkZWxpbWl0ZXI6IHN0cmluZykge1xuICAgIHJldHVybiB0ZXh0LmZpbHRlcigodmFsKSA9PiB2YWwpLmpvaW4oZGVsaW1pdGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVzdHJveVJvd0RlbGV0ZShpZDogc3RyaW5nKSB7XG4gICAgY29uc3Qgcm93RGVsZXRlQ29udGVudHMgPSB0aGlzLnJvd0RlbGV0ZUNvbnRlbnRzW2lkXTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChyb3dEZWxldGVDb250ZW50cykge1xuICAgICAgcm93RGVsZXRlQ29udGVudHMuYWZmaXhlci5kZXN0cm95KCk7XG4gICAgICB0aGlzLm92ZXJsYXlTZXJ2aWNlLmNsb3NlKHJvd0RlbGV0ZUNvbnRlbnRzLm92ZXJsYXkpO1xuICAgICAgZGVsZXRlIHRoaXMucm93RGVsZXRlQ29udGVudHNbaWRdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZW1pdFNlbGVjdGVkUm93cyhzb3VyY2U6IFNreUdyaWRTZWxlY3RlZFJvd3NTb3VyY2UpIHtcbiAgICBjb25zdCBzZWxlY3RlZFJvd3M6IFNreUdyaWRTZWxlY3RlZFJvd3NNb2RlbENoYW5nZSA9IHtcbiAgICAgIHNlbGVjdGVkUm93SWRzOiB0aGlzLmdldFNlbGVjdGVkUm93cygpLFxuICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgfTtcbiAgICB0aGlzLm11bHRpc2VsZWN0U2VsZWN0aW9uQ2hhbmdlLmVtaXQoc2VsZWN0ZWRSb3dzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VsZWN0ZWRSb3dzKCkge1xuICAgIHJldHVybiB0aGlzLml0ZW1zXG4gICAgICAuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiBpdGVtLmlzU2VsZWN0ZWQ7XG4gICAgICB9KVxuICAgICAgLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGl0ZW0uZGF0YSwgdGhpcy5tdWx0aXNlbGVjdFJvd0lkKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gaXRlbS5kYXRhW3RoaXMubXVsdGlzZWxlY3RSb3dJZF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW0uaWQ7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaXNJbnRlcmFjdGl2ZUVsZW1lbnQoZXZlbnQ6IGFueSk6IGFueSB7XG4gICAgY29uc3QgaW50ZXJhY3RpdmVFbFNlbGVjdG9ycyA9IGBcbiAgICAgIGEsXG4gICAgICBidXR0b24sXG4gICAgICBpbnB1dCxcbiAgICAgIGxhYmVsLFxuICAgICAgb3B0aW9uLFxuICAgICAgc2VsZWN0LFxuICAgICAgdGV4dGFyZWEsXG4gICAgICBkZXRhaWxzLFxuICAgICAgZGlhbG9nLFxuICAgICAgbWVudSxcbiAgICAgIG1lbnVpdGVtLFxuICAgICAgc3VtbWFyeWA7XG4gICAgcmV0dXJuIGV2ZW50LnRhcmdldC5jbG9zZXN0KGludGVyYWN0aXZlRWxTZWxlY3RvcnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRSZXNpemVCYXJQb3NpdGlvbih4UG9zaXRpb246IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHBhcmVudFNjcm9sbCA9IHRoaXMudGFibGVDb250YWluZXJFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICBjb25zdCByZXNpemVCYXJYID1cbiAgICAgIHhQb3NpdGlvbiAtXG4gICAgICB0aGlzLnRhYmxlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLVxuICAgICAgcGFyZW50U2Nyb2xsO1xuICAgIHRoaXMuZ3JpZEFkYXB0ZXIuc2V0U3R5bGUodGhpcy5yZXNpemVCYXIsICdsZWZ0JywgcmVzaXplQmFyWCArICdweCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVVzZXJDb25maWcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLnVpQ29uZmlnU2VydmljZVxuICAgICAgICAuZ2V0Q29uZmlnKHRoaXMuc2V0dGluZ3NLZXkpXG4gICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgKGNvbmZpZzogU2t5R3JpZFVJQ29uZmlnKSA9PiB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcuc2VsZWN0ZWRDb2x1bW5JZHMpIHtcbiAgICAgICAgICAgICAgLy8gUmVtb3ZlIGFueSBjb2x1bW5JZHMgdGhhdCBkb24ndCBleGlzdCBpbiB0aGUgY3VycmVudCBkYXRhIHNldC5cbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbklkcyA9IGNvbmZpZy5zZWxlY3RlZENvbHVtbklkcy5maWx0ZXIoKGlkKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuY29sdW1ucy5maW5kKChjb2x1bW4pID0+IGNvbHVtbi5pZCA9PT0gaWQpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldFVzZXJDb25maWcoY29uZmlnOiBTa3lHcmlkVUlDb25maWcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2V0dGluZ3NLZXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnVpQ29uZmlnU2VydmljZVxuICAgICAgLnNldENvbmZpZyh0aGlzLnNldHRpbmdzS2V5LCBjb25maWcpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgICAgICAgKCkgPT4ge30sXG4gICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0NvdWxkIG5vdCBzYXZlIGdyaWQgc2V0dGluZ3MuJyk7XG4gICAgICAgICAgY29uc29sZS53YXJuKGVycik7XG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGluaXRDb2x1bW5zKCk6IHZvaWQge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMuY29sdW1uQ29tcG9uZW50cy5sZW5ndGggIT09IDAgfHwgdGhpcy5jb2x1bW5zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAvKiBzYW5pdHkgY2hlY2sgKi9cbiAgICAgIGlmICh0aGlzLmNvbHVtbkNvbXBvbmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmdldENvbHVtbnNGcm9tQ29tcG9uZW50KCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudHJhbnNmb3JtRGF0YSgpO1xuICAgICAgdGhpcy5zZXREaXNwbGF5ZWRDb2x1bW5zKHRydWUpO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvLyBXYXRjaCBmb3IgYWRkZWQvcmVtb3ZlZCBjb2x1bW5zOlxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jb2x1bW5Db21wb25lbnRzLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBkYXRlQ29sdW1ucygpKVxuICAgICk7XG5cbiAgICAvLyBXYXRjaCBmb3IgY29sdW1uIGhlYWRpbmcgY2hhbmdlczpcbiAgICB0aGlzLmNvbHVtbkNvbXBvbmVudHMuZm9yRWFjaCgoY29tcDogU2t5R3JpZENvbHVtbkNvbXBvbmVudCkgPT4ge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgIGNvbXAuaGVhZGluZ01vZGVsQ2hhbmdlcy5zdWJzY3JpYmUoXG4gICAgICAgICAgKGNoYW5nZTogU2t5R3JpZENvbHVtbkhlYWRpbmdNb2RlbENoYW5nZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5IZWFkaW5nKGNoYW5nZSk7XG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgIGNvbXAuZGVzY3JpcHRpb25Nb2RlbENoYW5nZXMuc3Vic2NyaWJlKFxuICAgICAgICAgIChjaGFuZ2U6IFNreUdyaWRDb2x1bW5EZXNjcmlwdGlvbk1vZGVsQ2hhbmdlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbkRlc2NyaXB0aW9uKGNoYW5nZSk7XG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgIGNvbXAuaW5saW5lSGVscFBvcG92ZXJNb2RlbENoYW5nZXMuc3Vic2NyaWJlKFxuICAgICAgICAgIChjaGFuZ2U6IFNreUdyaWRDb2x1bW5JbmxpbmVIZWxwUG9wb3Zlck1vZGVsQ2hhbmdlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUlubGluZUhlbHBQb3BvdmVyKGNoYW5nZSk7XG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhcnJheXNFcXVhbChhcnJheUE6IGFueVtdLCBhcnJheUI6IGFueVtdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGFycmF5QS5sZW5ndGggPT09IGFycmF5Qi5sZW5ndGggJiZcbiAgICAgIGFycmF5QS5ldmVyeSgodmFsdWUsIGluZGV4KSA9PiB2YWx1ZSA9PT0gYXJyYXlCW2luZGV4XSlcbiAgICApO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic2t5LWdyaWRcIj5cbiAgPGRpdlxuICAgICpuZ0lmPVwic2hvd1RvcFNjcm9sbFwiXG4gICAgY2xhc3M9XCJza3ktZ3JpZC10b3Atc2Nyb2xsLWNvbnRhaW5lclwiXG4gICAgKHNjcm9sbCk9XCJvblRvcFNjcm9sbCgkZXZlbnQpXCJcbiAgICAjdG9wU2Nyb2xsQ29udGFpbmVyXG4gID5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInNreS1ncmlkLXRvcC1zY3JvbGxcIlxuICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImdldFRvcFNjcm9sbFdpZHRoKClcIlxuICAgID48L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICBjbGFzcz1cInNreS1ncmlkLXRhYmxlLWNvbnRhaW5lclwiXG4gICAgW3N0eWxlLmhlaWdodC5weF09XCJoZWlnaHRcIlxuICAgIFtzdHlsZS53aWR0aC5weF09XCJ3aWR0aFwiXG4gICAgKHNjcm9sbCk9XCJvbkdyaWRTY3JvbGwoJGV2ZW50KVwiXG4gICAgI2dyaWRDb250YWluZXJcbiAgPlxuICAgIDx0YWJsZSBjbGFzcz1cInNreS1ncmlkLXRhYmxlXCIgW25nQ2xhc3NdPVwiZ2V0VGFibGVDbGFzc05hbWVzKClcIiAjZ3JpZFRhYmxlPlxuICAgICAgPHRoZWFkPlxuICAgICAgICA8dHIgW2RyYWd1bGFdPVwiZHJhZ3VsYUdyb3VwTmFtZVwiPlxuICAgICAgICAgIDx0aFxuICAgICAgICAgICAgKm5nSWY9XCJlbmFibGVNdWx0aXNlbGVjdFwiXG4gICAgICAgICAgICBjbGFzcz1cInNreS1ncmlkLWhlYWRpbmcgc2t5LWdyaWQtbXVsdGlzZWxlY3QtY2VsbCBza3ktZ3JpZC1oZWFkZXItbG9ja2VkXCJcbiAgICAgICAgICAgIHNjb3BlPVwiY29sXCJcbiAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGgucHhdPVwibWluQ29sV2lkdGhcIlxuICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cIm1pbkNvbFdpZHRoXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNjcmVlbi1yZWFkZXItb25seVwiPlxuICAgICAgICAgICAgICB7eyAnc2t5dXhfZ3JpZF9tdWx0aXNlbGVjdF9zZWxlY3Rfcm93JyB8IHNreUxpYlJlc291cmNlcyB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPHRoXG4gICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgbGV0IGNvbHVtbiBvZiBkaXNwbGF5ZWRDb2x1bW5zO1xuICAgICAgICAgICAgICBsZXQgbGFzdCA9IGxhc3Q7XG4gICAgICAgICAgICAgIGxldCBpID0gaW5kZXhcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cInNreS1ncmlkLWhlYWRpbmcgc2t5LWZpZWxkLWxhYmVsXCJcbiAgICAgICAgICAgIHNjb3BlPVwiY29sXCJcbiAgICAgICAgICAgIFthdHRyLnNreS1jbXAtaW5kZXhdPVwiaVwiXG4gICAgICAgICAgICBbYXR0ci5za3ktY21wLWlkXT1cImNvbHVtbi5pZCB8fCBjb2x1bW4uZmllbGRcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1zb3J0XT1cImdldEFyaWFTb3J0RGlyZWN0aW9uKGNvbHVtbikgfCBhc3luY1wiXG4gICAgICAgICAgICBbaWRdPVwiJ3NreS1ncmlkLScgKyBncmlkSWQgKyAnLWNvbHVtbi0nICsgaVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCInc2t5LWdyaWQtY29sdW1uLWFsaWdubWVudC0nICsgY29sdW1uLmFsaWdubWVudFwiXG4gICAgICAgICAgICBbc3R5bGUubWF4LXdpZHRoLnB4XT1cImNvbHVtbi53aWR0aFwiXG4gICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgICAgIFt0YWJJbmRleF09XCJjb2x1bW4uaXNTb3J0YWJsZSA/IDAgOiAtMVwiXG4gICAgICAgICAgICAobW91c2V1cCk9XCJzb3J0QnlDb2x1bW4oY29sdW1uKVwiXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJvbktleWRvd24oJGV2ZW50LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICh0b3VjaG1vdmUpPVwib25Ub3VjaE1vdmUoJGV2ZW50KVwiXG4gICAgICAgICAgICAjZ3JpZENvbFxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJvdmVyZmxvd1wiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldFRhYmxlSGVhZGVyQ2xhc3NOYW1lcyhjb2x1bW4pXCJcbiAgICAgICAgICAgICAgW3N0eWxlLm1heC13aWR0aC5weF09XCJjb2x1bW4ud2lkdGggLSAxXCJcbiAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImNvbHVtbi53aWR0aCAtIDFcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiKGdldENhcmV0VmlzaWJpbGl0eShjb2x1bW4uZmllbGQpIHwgYXN5bmMpID09PSAnaGlkZGVuJ1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJza3ktZ3JpZC1oZWFkZXItY2FyZXQtaGlkZGVuLXNwYWNpbmdcIlxuICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICA8IS0tIFRoZSBubyBzcGFjaW5nIGhlcmUgaXMgaW50ZW50aW9uYWwgdG8gYXZvaWQgZXh0cmEgc3BhY2VzIGR1ZSB0byB0aGVzZSBiZWluZyBpbmxpbmUgZWxlbWVudHMgLS0+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2t5LWdyaWQtaGVhZGVyLXRleHRcIj57e1xuICAgICAgICAgICAgICAgIGNvbHVtbi5oZWFkaW5nPy50cmltKClcbiAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxza3ktaWNvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2t5LWdyaWQtaGVhZGluZy1zb3J0XCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICdza3ktZ3JpZC1oZWFkaW5nLXNvcnQtJyArXG4gICAgICAgICAgICAgICAgICAoZ2V0Q2FyZXRWaXNpYmlsaXR5KGNvbHVtbi5maWVsZCkgfCBhc3luYylcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFtpY29uXT1cImdldENhcmV0SWNvbk5hbWVzKGNvbHVtbilcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvc2t5LWljb24+XG4gICAgICAgICAgICAgIDxza3ktaGVscC1pbmxpbmVcbiAgICAgICAgICAgICAgICAqbmdJZj1cImNvbHVtbi5pbmxpbmVIZWxwUG9wb3ZlclwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgJ3NreS1ncmlkLWhlbHAtaW5saW5lLXNvcnQtaGlkZGVuJzpcbiAgICAgICAgICAgICAgICAgICAgZ2V0SGVscElubGluZUNsYXNzKGNvbHVtbi5maWVsZCkgfCBhc3luY1xuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIFtza3lQb3BvdmVyXT1cImNvbHVtbi5pbmxpbmVIZWxwUG9wb3ZlclwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAobW91c2V1cCk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvc2t5LWhlbHAtaW5saW5lPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAqbmdJZj1cIihmaXQgPT09ICd3aWR0aCcgJiYgIWxhc3QpIHx8IGZpdCA9PT0gJ3Njcm9sbCdcIlxuICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICBjbGFzcz1cInNreS1ncmlkLXJlc2l6ZS1oYW5kbGVcIlxuICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgW2F0dHIuc2t5LWNtcC1pbmRleF09XCJpXCJcbiAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJvblJlc2l6ZUNvbHVtblN0YXJ0KCRldmVudClcIlxuICAgICAgICAgICAgICAodG91Y2hzdGFydCk9XCJvblJlc2l6ZUNvbHVtblN0YXJ0KCRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJXaWR0aCBvZiBjb2x1bW5cIlxuICAgICAgICAgICAgICBjbGFzcz1cInNreS1ncmlkLWNvbHVtbi1pbnB1dC1hcmlhLW9ubHlcIlxuICAgICAgICAgICAgICByb2xlPVwic2xpZGVyXCJcbiAgICAgICAgICAgICAgdHlwZT1cInJhbmdlXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCInc2t5LWdyaWQtJyArIGdyaWRJZCArICctY29sdW1uLScgKyBpXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW1pbl09XCJtaW5Db2xXaWR0aFwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVtYXhdPVwibWF4Q29sV2lkdGhcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbm93XT1cImNvbHVtbi53aWR0aFwiXG4gICAgICAgICAgICAgIFthdHRyLnNreS1jbXAtaW5kZXhdPVwiaVwiXG4gICAgICAgICAgICAgIFttaW5dPVwibWluQ29sV2lkdGhcIlxuICAgICAgICAgICAgICBbbWF4XT1cIm1heENvbFdpZHRoXCJcbiAgICAgICAgICAgICAgW3N0ZXBdPVwiY29sdW1uUmVzaXplU3RlcFwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgICAgICAgKGJsdXIpPVwib25SZXNpemVIYW5kbGVCbHVyKClcIlxuICAgICAgICAgICAgICAoZm9jdXMpPVwib25SZXNpemVIYW5kbGVGb2N1cygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGtleWRvd24pPVwib25LZXlkb3duUmVzaXplQ29sKCRldmVudClcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uSW5wdXRDaGFuZ2VSZXNpemVDb2woJGV2ZW50KVwiXG4gICAgICAgICAgICAgICNjb2xTaXplUmFuZ2VcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGhlYWQ+XG4gICAgICA8dGJvZHkgY2xhc3M9XCJza3ktZ3JpZC10Ym9keVwiPlxuICAgICAgICA8dHJcbiAgICAgICAgICBjbGFzcz1cInNreS1ncmlkLXJvd1wiXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgIFthdHRyLmFyaWEtY3VycmVudF09XCJpc1Jvd0hpZ2hsaWdodGVkKGl0ZW0uaWQpID8gdHJ1ZSA6IG51bGxcIlxuICAgICAgICAgIFthdHRyLnNreS1jbXAtaWRdPVwiaXRlbS5pZFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ3NreS1ncmlkLW11bHRpc2VsZWN0LXNlbGVjdGVkLXJvdyc6IGl0ZW0uaXNTZWxlY3RlZCxcbiAgICAgICAgICAgICdza3ktZ3JpZC1tdWx0aXNlbGVjdC1yb3cnOiBlbmFibGVNdWx0aXNlbGVjdCxcbiAgICAgICAgICAgICdza3ktZ3JpZC1yb3ctaGlnaGxpZ2h0JzogaXNSb3dIaWdobGlnaHRlZChpdGVtLmlkKVxuICAgICAgICAgIH1cIlxuICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKCRldmVudCwgaXRlbSlcIlxuICAgICAgICA+XG4gICAgICAgICAgPHRkXG4gICAgICAgICAgICAqbmdJZj1cImVuYWJsZU11bHRpc2VsZWN0XCJcbiAgICAgICAgICAgIGNsYXNzPVwic2t5LWdyaWQtbXVsdGlzZWxlY3QtY2VsbCBza3ktZ3JpZC1oZWFkZXItbG9ja2VkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGgucHhdPVwibWluQ29sV2lkdGhcIlxuICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwibWluQ29sV2lkdGhcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c2t5LWNoZWNrYm94XG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidza3l1eF9ncmlkX211bHRpc2VsZWN0X3NlbGVjdF9yb3cnIHwgc2t5TGliUmVzb3VyY2VzXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uTXVsdGlzZWxlY3RDaGVja2JveENoYW5nZSgpXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIml0ZW0uaXNTZWxlY3RlZFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9za3ktY2hlY2tib3g+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgIGxldCBjb2x1bW4gb2YgZGlzcGxheWVkQ29sdW1ucztcbiAgICAgICAgICAgICAgbGV0IGxhc3QgPSBsYXN0O1xuICAgICAgICAgICAgICBsZXQgaSA9IGluZGV4XG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJza3ktZ3JpZC1jZWxsXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIidza3ktZ3JpZC1jb2x1bW4tYWxpZ25tZW50LScgKyBjb2x1bW4uYWxpZ25tZW50XCJcbiAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGgucHhdPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxza3ktZ3JpZC1jZWxsXG4gICAgICAgICAgICAgIFtza3lIaWdobGlnaHRdPVwiXG4gICAgICAgICAgICAgICAgIWNvbHVtbi5leGNsdWRlRnJvbUhpZ2hsaWdodGluZyA/IGhpZ2hsaWdodFRleHQgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW3RlbXBsYXRlXT1cImNvbHVtbi50ZW1wbGF0ZSB8fCBkZWZhdWx0Q2VsbFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW2ZpZWxkU2VsZWN0b3JdPVwiY29sdW1uLmZpZWxkXCJcbiAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICAgIFtjb2x1bW5JZF09XCJjb2x1bW4uaWRcIlxuICAgICAgICAgICAgICBbYXR0ci5za3ktY21wLWlkXT1cImNvbHVtbi5pZCB8fCBjb2x1bW4uZmllbGRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9za3ktZ3JpZC1jZWxsPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3Rib2R5PlxuICAgIDwvdGFibGU+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJzaG93UmVzaXplQmFyXCJcbiAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICBpZD1cInNreS1ncmlkLXJlc2l6ZS1iYXJcIlxuICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAjcmVzaXplQmFyXG4gICAgPjwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRDZWxsVGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiIGxldC12YWx1ZT1cInZhbHVlXCI+e3tcbiAgdmFsdWVcbn19PC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlIGxldC1pdGVtICNpbmxpbmVEZWxldGVUZW1wbGF0ZVJlZj5cbiAgPGRpdlxuICAgIFtpZF09XCIncm93LWRlbGV0ZS1yZWYtJyArIGl0ZW0uaWRcIlxuICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgIGhlaWdodDogZ2V0Um93SGVpZ2h0KDApLFxuICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICB3aWR0aDogdGFibGVXaWR0aCArICdweCdcbiAgICB9XCJcbiAgICAjaW5saW5lRGVsZXRlUmVmXG4gID5cbiAgICA8c2t5LWlubGluZS1kZWxldGVcbiAgICAgIFtwZW5kaW5nXT1cImdldFJvd0RlbGV0ZUl0ZW0oaXRlbS5pZCkucGVuZGluZ1wiXG4gICAgICAoY2FuY2VsVHJpZ2dlcmVkKT1cImNhbmNlbFJvd0RlbGV0ZShpdGVtLmlkKVwiXG4gICAgICAoZGVsZXRlVHJpZ2dlcmVkKT1cImNvbmZpcm1Sb3dEZWxldGUoaXRlbS5pZClcIlxuICAgID48L3NreS1pbmxpbmUtZGVsZXRlPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
1034
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZ3JpZHMvc3JjL2xpYi9tb2R1bGVzL2dyaWQvZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZ3JpZHMvc3JjL2xpYi9tb2R1bGVzL2dyaWQvZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxlQUFlLEVBRWYsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUdOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxzQkFBc0IsR0FNdkIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUNMLGFBQWEsR0FFZCxNQUFNLDRCQUE0QixDQUFDO0FBRXBDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0MsT0FBTyxFQUNMLGVBQWUsRUFFZixPQUFPLEVBRVAsU0FBUyxFQUNULEtBQUssR0FDTixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsR0FBRyxFQUNILElBQUksRUFDSixTQUFTLEVBQ1QsU0FBUyxHQUNWLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFNekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFNL0QsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sbUNB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QUF1QjtzQkFEOUIsU0FBUzt1QkFBQyx5QkFBeUIsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBR25ELHdCQUF3QjtzQkFEL0IsU0FBUzt1QkFBQyxlQUFlO2dCQUdsQixlQUFlO3NCQUR0QixTQUFTO3VCQUFDLFdBQVc7Z0JBR2QsNEJBQTRCO3NCQURuQyxTQUFTO3VCQUFDLG9CQUFvQjtnQkFHdkIsU0FBUztzQkFEaEIsU0FBUzt1QkFBQyxXQUFXO2dCQTRJZixjQUFjO3NCQURwQixZQUFZO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgU2t5QWZmaXhBdXRvRml0Q29udGV4dCxcbiAgU2t5QWZmaXhTZXJ2aWNlLFxuICBTa3lBcHBXaW5kb3dSZWYsXG4gIFNreUxvZ1NlcnZpY2UsXG4gIFNreU92ZXJsYXlTZXJ2aWNlLFxuICBTa3lVSUNvbmZpZ1NlcnZpY2UsXG59IGZyb20gJ0Bza3l1eC9jb3JlJztcbmltcG9ydCB7XG4gIExpc3RJdGVtTW9kZWwsXG4gIExpc3RTb3J0RmllbGRTZWxlY3Rvck1vZGVsLFxufSBmcm9tICdAc2t5dXgvbGlzdC1idWlsZGVyLWNvbW1vbic7XG5cbmltcG9ydCB7IERyYWd1bGFTZXJ2aWNlIH0gZnJvbSAnbmcyLWRyYWd1bGEnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBPYnNlcnZhYmxlLFxuICBTdWJqZWN0LFxuICBTdWJzY3JpcHRpb24sXG4gIGZyb21FdmVudCxcbiAgbWVyZ2UsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIG1hcCxcbiAgdGFrZSxcbiAgdGFrZVVudGlsLFxuICB0YWtlV2hpbGUsXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgU2t5R3JpZEFkYXB0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9ncmlkLWFkYXB0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTa3lHcmlkQ29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi9ncmlkLWNvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5R3JpZENvbHVtbk1vZGVsIH0gZnJvbSAnLi9ncmlkLWNvbHVtbi5tb2RlbCc7XG5pbXBvcnQgeyBTa3lHcmlkQ29sdW1uRGVzY3JpcHRpb25Nb2RlbENoYW5nZSB9IGZyb20gJy4vdHlwZXMvZ3JpZC1jb2x1bW4tZGVzY3JpcHRpb24tbW9kZWwtY2hhbmdlJztcbmltcG9ydCB7IFNreUdyaWRDb2x1bW5IZWFkaW5nTW9kZWxDaGFuZ2UgfSBmcm9tICcuL3R5cGVzL2dyaWQtY29sdW1uLWhlYWRpbmctbW9kZWwtY2hhbmdlJztcbmltcG9ydCB7IFNreUdyaWRDb2x1bW5JbmxpbmVIZWxwUG9wb3Zlck1vZGVsQ2hhbmdlIH0gZnJvbSAnLi90eXBlcy9ncmlkLWNvbHVtbi1pbmxpbmUtaGVscC1wb3BvdmVyLW1vZGVsLWNoYW5nZSc7XG5pbXBvcnQgeyBTa3lHcmlkQ29sdW1uV2lkdGhNb2RlbENoYW5nZSB9IGZyb20gJy4vdHlwZXMvZ3JpZC1jb2x1bW4td2lkdGgtbW9kZWwtY2hhbmdlJztcbmltcG9ydCB7IFNreUdyaWRNZXNzYWdlIH0gZnJvbSAnLi90eXBlcy9ncmlkLW1lc3NhZ2UnO1xuaW1wb3J0IHsgU2t5R3JpZE1lc3NhZ2VUeXBlIH0gZnJvbSAnLi90eXBlcy9ncmlkLW1lc3NhZ2UtdHlwZSc7XG5pbXBvcnQgeyBTa3lHcmlkUm93RGVsZXRlQ2FuY2VsQXJncyB9IGZyb20gJy4vdHlwZXMvZ3JpZC1yb3ctZGVsZXRlLWNhbmNlbC1hcmdzJztcbmltcG9ydCB7IFNreUdyaWRSb3dEZWxldGVDb25maWcgfSBmcm9tICcuL3R5cGVzL2dyaWQtcm93LWRlbGV0ZS1jb25maWcnO1xuaW1wb3J0IHsgU2t5R3JpZFJvd0RlbGV0ZUNvbmZpcm1BcmdzIH0gZnJvbSAnLi90eXBlcy9ncmlkLXJvdy1kZWxldGUtY29uZmlybS1hcmdzJztcbmltcG9ydCB7IFNreUdyaWRSb3dEZWxldGVDb250ZW50cyB9IGZyb20gJy4vdHlwZXMvZ3JpZC1yb3ctZGVsZXRlLWNvbnRlbnRzJztcbmltcG9ydCB7IFNreUdyaWRTZWxlY3RlZFJvd3NNb2RlbENoYW5nZSB9IGZyb20gJy4vdHlwZXMvZ3JpZC1zZWxlY3RlZC1yb3dzLW1vZGVsLWNoYW5nZSc7XG5pbXBvcnQgeyBTa3lHcmlkU2VsZWN0ZWRSb3dzU291cmNlIH0gZnJvbSAnLi90eXBlcy9ncmlkLXNlbGVjdGVkLXJvd3Mtc291cmNlJztcbmltcG9ydCB7IFNreUdyaWRVSUNvbmZpZyB9IGZyb20gJy4vdHlwZXMvZ3JpZC11aS1jb25maWcnO1xuXG5sZXQgbmV4dElkID0gMDtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBgU2t5R3JpZENvbXBvbmVudGAgYW5kIGl0cyBmZWF0dXJlcyBhcmUgZGVwcmVjYXRlZC4gV2UgcmVjb21tZW5kIHVzaW5nIHRoZSBkYXRhIGdyaWQgaW5zdGVhZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvZGF0YS1ncmlkXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS1ncmlkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dyaWQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ncmlkLmNvbXBvbmVudC5zY3NzJ10sXG4gIHZpZXdQcm92aWRlcnM6IFtEcmFndWxhU2VydmljZV0sXG4gIHByb3ZpZGVyczogW1NreUdyaWRBZGFwdGVyU2VydmljZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lHcmlkQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveVxue1xuICAvKipcbiAgICogQ29sdW1ucyBhbmQgY29sdW1uIHByb3BlcnRpZXMgZm9yIHRoZSBncmlkLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBjb2x1bW5zKG5ld0NvbHVtbnM6IEFycmF5PFNreUdyaWRDb2x1bW5Nb2RlbD4pIHtcbiAgICBjb25zdCBvbGRDb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuICAgIHRoaXMuX2NvbHVtbnMgPSBuZXdDb2x1bW5zO1xuICAgIGlmIChvbGRDb2x1bW5zKSB7XG4gICAgICB0aGlzLnRyYW5zZmVyQ29sdW1uV2lkdGhzKG9sZENvbHVtbnMsIHRoaXMuY29sdW1ucyk7XG4gICAgICB0aGlzLmlzUmVzaXplZCA9IGZhbHNlO1xuICAgICAgdGhpcy5zZXREaXNwbGF5ZWRDb2x1bW5zKHRydWUpO1xuICAgIH1cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHVibGljIGdldCBjb2x1bW5zKCk6IEFycmF5PFNreUdyaWRDb2x1bW5Nb2RlbD4ge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5zO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRhIGZvciB0aGUgZ3JpZC4gRWFjaCBpdGVtIHJlcXVpcmVzIGFuIGBpZGAgYW5kIGEgcHJvcGVydHkgdGhhdCBtYXBzXG4gICAqIHRvIHRoZSBgZmllbGRgIG9yIGBpZGAgcHJvcGVydHkgb2YgZWFjaCBjb2x1bW4gaW4gdGhlIGdyaWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZGF0YTogQXJyYXk8YW55PjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBlbmFibGUgdGhlIG11bHRpc2VsZWN0IGZlYXR1cmUgdG8gZGlzcGxheSBhIGNvbHVtbiBvZlxuICAgKiBjaGVja2JveGVzIG9uIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIGdyaWQuIFlvdSBjYW4gc3BlY2lmeSBhIHVuaXF1ZSBJRCB3aXRoXG4gICAqIHRoZSBgbXVsdGlzZWxlY3RSb3dJZGAgcHJvcGVydHksIGJ1dCBtdWx0aXNlbGVjdCBkZWZhdWx0cyB0byB0aGUgYGlkYCBwcm9wZXJ0eSBvblxuICAgKiB0aGUgYGRhdGFgIG9iamVjdC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBlbmFibGVNdWx0aXNlbGVjdCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBIb3cgdGhlIGdyaWQgZml0cyB0byBpdHMgcGFyZW50LiBUaGUgdmFsaWQgb3B0aW9ucyBhcmUgYHdpZHRoYCxcbiAgICogd2hpY2ggZml0cyB0aGUgZ3JpZCB0byB0aGUgcGFyZW50J3MgZnVsbCB3aWR0aCwgYW5kIGBzY3JvbGxgLCB3aGljaCBhbGxvd3MgdGhlIGdyaWRcbiAgICogdG8gZXhjZWVkIHRoZSBwYXJlbnQncyB3aWR0aC4gSWYgdGhlIGdyaWQgZG9lcyBub3QgaGF2ZSBlbm91Z2ggY29sdW1ucyB0byBmaWxsXG4gICAqIHRoZSBwYXJlbnQncyB3aWR0aCwgaXQgYWx3YXlzIHN0cmV0Y2hlcyB0byB0aGUgcGFyZW50J3MgZnVsbCB3aWR0aC5cbiAgICogQGRlZmF1bHQgXCJ3aWR0aFwiXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZml0ID0gJ3dpZHRoJztcblxuICAvKipcbiAgICogV2hldGhlciB0byBkaXNwbGF5IGEgdG9vbGJhciB3aXRoIHRoZSBncmlkLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGhhc1Rvb2xiYXIgPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIGhlaWdodCBvZiB0aGUgZ3JpZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoZWlnaHQ6IG51bWJlcjtcblxuICAvKipcbiAgICogVGV4dCB0byBoaWdobGlnaHQgd2l0aGluIHRoZSBncmlkLlxuICAgKiBUeXBpY2FsbHksIHRoaXMgcHJvcGVydHkgaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHNlYXJjaC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoaWdobGlnaHRUZXh0OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvYnNlcnZhYmxlIHRvIHNlbmQgY29tbWFuZHMgdG8gdGhlIGdyaWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgbWVzc2FnZVN0cmVhbSA9IG5ldyBTdWJqZWN0PFNreUdyaWRNZXNzYWdlPigpO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIElEIHRoYXQgbWF0Y2hlcyBhIHByb3BlcnR5IG9uIHRoZSBgZGF0YWAgb2JqZWN0LlxuICAgKiBCeSBkZWZhdWx0LCB0aGlzIHByb3BlcnR5IHVzZXMgdGhlIGBpZGAgcHJvcGVydHkuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgbXVsdGlzZWxlY3RSb3dJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdyB0byBoaWdobGlnaHQuIFRoZSBJRCBtYXRjaGVzIHRoZSBgaWRgIHByb3BlcnR5XG4gICAqIG9mIHRoZSBgZGF0YWAgb2JqZWN0LiBUeXBpY2FsbHksIHRoaXMgcHJvcGVydHkgaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoXG4gICAqIHRoZSBmbHlvdXQgY29tcG9uZW50IHRvIGluZGljYXRlIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcm93LlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHJvd0hpZ2hsaWdodGVkSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNvbHVtbnMgdG8gZGlzcGxheSBpbiB0aGUgZ3JpZCBiYXNlZCBvbiB0aGUgYGlkYCBvciBgZmllbGRgIHByb3BlcnRpZXNcbiAgICogb2YgdGhlIGNvbHVtbnMuIElmIG5vIGNvbHVtbnMgYXJlIHNwZWNpZmllZCwgdGhlbiB0aGUgZ3JpZCBkaXNwbGF5cyBhbGwgY29sdW1ucy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc2VsZWN0ZWRDb2x1bW5JZHModmFsdWU6IEFycmF5PHN0cmluZz4pIHtcbiAgICBjb25zdCBjdXJyZW50SWRzID0gdGhpcy5fc2VsZWN0ZWRDb2x1bW5JZHM7XG4gICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5JZHMgPSB2YWx1ZTtcblxuICAgIGlmICh0aGlzLmNvbHVtbnMpIHtcbiAgICAgIHRoaXMuc2V0RGlzcGxheWVkQ29sdW1ucygpO1xuICAgIH1cblxuICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBpZHMgaGF2ZSBjaGFuZ2VkLlxuICAgIGlmICghY3VycmVudElkcyB8fCAhdmFsdWUgfHwgIXRoaXMuYXJyYXlzRXF1YWwodmFsdWUsIGN1cnJlbnRJZHMpKSB7XG4gICAgICAvLyBUaGlzIHZhcmlhYmxlIGVuc3VyZXMgdGhhdCB3ZSBkbyBub3Qgc2V0IHVzZXIgY29uZmlnIG9wdGlvbnMgb3IgZmlyZSB0aGUgY2hhbmdlIGV2ZW50XG4gICAgICAvLyBvbiB0aGUgZmlyc3QgdGltZSB0aGF0IHRoZSBjb2x1bW5zIGFyZSBzZXQgdXBcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29sdW1uSWRzU2V0KSB7XG4gICAgICAgIHRoaXMuc2V0VXNlckNvbmZpZyh7XG4gICAgICAgICAgc2VsZWN0ZWRDb2x1bW5JZHM6IHZhbHVlLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1uSWRzQ2hhbmdlLmVtaXQodGhpcy5fc2VsZWN0ZWRDb2x1bW5JZHMpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzUmVzaXplZCkge1xuICAgICAgICAgIHRoaXMucmVzZXRUYWJsZVdpZHRoKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1uSWRzU2V0ID0gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRDb2x1bW5JZHMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkQ29sdW1uSWRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzZXQgb2YgSURzIGZvciB0aGUgcm93cyB0byBzZWxlY3QgaW4gYSBtdWx0aXNlbGVjdCBncmlkLlxuICAgKiBUaGUgSURzIG1hdGNoIHRoZSBgaWRgIHByb3BlcnRpZXMgb2YgdGhlIGBkYXRhYCBvYmplY3RzLlxuICAgKiBSb3dzIHdpdGggSURzIHRoYXQgYXJlIG5vdCBpbmNsdWRlZCBhcmUgZGUtc2VsZWN0ZWQgaW4gdGhlIGdyaWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHNlbGVjdGVkUm93SWRzKHZhbHVlOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl9zZWxlY3RlZFJvd0lkcyA9IHZhbHVlO1xuICAgICAgdGhpcy5hcHBseVNlbGVjdGVkUm93cygpO1xuICAgICAgdGhpcy5lbWl0U2VsZWN0ZWRSb3dzKFNreUdyaWRTZWxlY3RlZFJvd3NTb3VyY2UuU2VsZWN0ZWRSb3dJZHNDaGFuZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRSb3dJZHMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkUm93SWRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUga2V5IGZvciB0aGUgVUkgQ29uZmlnIFNlcnZpY2UgdG8gcmV0cmlldmUgc3RvcmVkIHNldHRpbmdzIGZyb20gYSBkYXRhYmFzZS5cbiAgICogVGhlIFVJIENvbmZpZyBTZXJ2aWNlIHNhdmVzIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIHVzZXJzIGFuZCByZXR1cm5zXG4gICAqIGBzZWxlY3RlZENvbHVtbklkc2AgdG8gcHJlc2VydmUgdGhlIGNvbHVtbnMgdG8gZGlzcGxheSBhbmQgdGhlIHByZWZlcnJlZCBjb2x1bW4gb3JkZXIuIFlvdSAgbXVzdCBwcm92aWRlIGBpZGAgdmFsdWVzIGZvciB5b3VyIGBza3ktZ3JpZC1jb2x1bW5gIGVsZW1lbnRzIGJlY2F1c2UgdGhlIFVJIENvbmZpZyBTZXJ2aWNlIGRlcGVuZHMgb24gdGhvc2UgdmFsdWVzIHRvIG9yZ2FuaXplIGNvbHVtbnMgYmFzZWQgb24gdXNlciBzZXR0aW5ncy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIFVJIENvbmZpZyBTZXJ2aWNlLCBzZWUgW3RoZSBzdGlja3kgc2V0dGluZ3MgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9sZWFybi9nZXQtc3RhcnRlZC9zdGlja3ktc2V0dGluZ3MpLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldHRpbmdzS2V5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERpc3BsYXlzIGEgY2FyZXQgaW4gdGhlIGNvbHVtbiB0aGF0IHdhcyB1c2VkIHRvIHNvcnQgdGhlIGdyaWQuIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bFxuICAgKiB3aGVuIHlvdSBwcm9ncmFtbWF0aWNhbGx5IHNvcnQgZGF0YSBhbmQgd2FudCB0byB2aXN1YWxseSBpbmRpY2F0ZSBob3cgdGhlIGdyaWQgd2FzIHNvcnRlZC5cbiAgICogVGhpcyBwcm9wZXJ0eSBhY2NlcHRzIGEgYExpc3RTb3J0RmllbGRTZWxlY3Rvck1vZGVsYCB2YWx1ZSB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICogLSBgZmllbGRTZWxlY3RvcmAgUmVwcmVzZW50cyB0aGUgY3VycmVudCBzb3J0IGZpZWxkLiBUaGlzIHByb3BlcnR5IGFjY2VwdHMgYHN0cmluZ2AgdmFsdWVzLlxuICAgKiAtIGBkZXNjZW5kaW5nYCBJbmRpY2F0ZXMgd2hldGhlciB0byBzb3J0IGluIGRlc2NlbmRpbmcgb3JkZXIuIFRoZSBjYXJldCB0aGF0IHZpc3VhbGx5XG4gICAqIGluZGljYXRlcyB0aGUgc29ydCBvcmRlciBwb2ludHMgZG93biBmb3IgZGVzY2VuZGluZyBvcmRlciBhbmQgdXAgZm9yIGFzY2VuZGluZyBvcmRlci5cbiAgICogVGhpcyBwcm9wZXJ0eSBhY2NlcHRzIGBib29sZWFuYCB2YWx1ZXMuIERlZmF1bHQgaXMgYGZhbHNlYC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzb3J0RmllbGQ6IExpc3RTb3J0RmllbGRTZWxlY3Rvck1vZGVsO1xuXG4gIC8qKlxuICAgKiBUaGUgd2lkdGggb2YgdGhlIGdyaWQgaW4gcGl4ZWxzLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHdpZHRoOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIHdpZHRoIG9mIGEgY29sdW1uIGNoYW5nZXMuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIGNvbHVtbldpZHRoQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxcbiAgICBBcnJheTxTa3lHcmlkQ29sdW1uV2lkdGhNb2RlbENoYW5nZT5cbiAgPigpO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSBzZWxlY3Rpb24gb2YgbXVsdGlzZWxlY3QgY2hlY2tib3hlcyBjaGFuZ2VzLlxuICAgKiBFbWl0cyBhbiBhcnJheSBvZiBJRHMgZm9yIHRoZSBzZWxlY3RlZCByb3dzIGJhc2VkIG9uIHRoZSBgbXVsdGlzZWxlY3RSb3dJZGAgcHJvcGVydHlcbiAgICogdGhhdCB0aGUgY29uc3VtZXIgcHJvdmlkZXMuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIG11bHRpc2VsZWN0U2VsZWN0aW9uQ2hhbmdlID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPFNreUdyaWRTZWxlY3RlZFJvd3NNb2RlbENoYW5nZT4oKTtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHJvd0RlbGV0ZUNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8U2t5R3JpZFJvd0RlbGV0ZUNhbmNlbEFyZ3M+KCk7XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyByb3dEZWxldGVDb25maXJtID0gbmV3IEV2ZW50RW1pdHRlcjxTa3lHcmlkUm93RGVsZXRlQ29uZmlybUFyZ3M+KCk7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIGNvbHVtbnMgdG8gZGlzcGxheSBpbiB0aGUgZ3JpZCBjaGFuZ2Ugb3Igd2hlbiB0aGUgb3JkZXIgb2YgdGhlIGNvbHVtbnMgY2hhbmdlcy5cbiAgICogVGhlIGV2ZW50IGVtaXRzIGFuIGFycmF5IG9mIElEcyBmb3IgdGhlIGRpc3BsYXllZCBjb2x1bW5zIHRoYXQgcmVmbGVjdHMgdGhlIGNvbHVtbiBvcmRlci5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgc2VsZWN0ZWRDb2x1bW5JZHNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PHN0cmluZz4+KCk7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIGFjdGl2ZSBzb3J0IGZpZWxkIGNoYW5nZXMuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHNvcnRGaWVsZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TGlzdFNvcnRGaWVsZFNlbGVjdG9yTW9kZWw+KCk7XG5cbiAgcHVibGljIGNvbHVtblJlc2l6ZVN0ZXAgPSAxMDtcbiAgcHVibGljIGN1cnJlbnRTb3J0RmllbGQ6IEJlaGF2aW9yU3ViamVjdDxMaXN0U29ydEZpZWxkU2VsZWN0b3JNb2RlbD47XG4gIHB1YmxpYyBkaXNwbGF5ZWRDb2x1bW5zOiBBcnJheTxTa3lHcmlkQ29sdW1uTW9kZWw+O1xuICBwdWJsaWMgZHJhZ3VsYUdyb3VwTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgZ3JpZElkOiBudW1iZXIgPSArK25leHRJZDtcbiAgcHVibGljIHJvd0RlbGV0ZUNvbmZpZ3M6IFNreUdyaWRSb3dEZWxldGVDb25maWdbXSA9IFtdO1xuICBwdWJsaWMgaXRlbXM6IEFycmF5PGFueT47XG4gIHB1YmxpYyBtYXhDb2xXaWR0aCA9IDk5OTk7IC8vIFRoaXMgaXMgYW4gYXJiaXRyYXJ5IG51bWJlciwgYXMgdGhlIGlucHV0IHJhbmdlIHBpY2tlciB3b24ndCB3b3JrIHdpdGhvdXQgYSB2YWx1ZS5cbiAgcHVibGljIG1pbkNvbFdpZHRoID0gNTA7XG4gIHB1YmxpYyBzaG93UmVzaXplQmFyID0gZmFsc2U7XG4gIHB1YmxpYyBzaG93VG9wU2Nyb2xsID0gZmFsc2U7XG5cbiAgcHVibGljIGdldCB0YWJsZVdpZHRoKCkge1xuICAgIHJldHVybiB0aGlzLnRhYmxlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICB9XG5cbiAgQENvbnRlbnRDaGlsZHJlbihTa3lHcmlkQ29sdW1uQ29tcG9uZW50KVxuICBwcml2YXRlIGNvbHVtbkNvbXBvbmVudHM6IFF1ZXJ5TGlzdDxTa3lHcmlkQ29sdW1uQ29tcG9uZW50PjtcblxuICBAVmlld0NoaWxkcmVuKCdncmlkQ29sJylcbiAgcHJpdmF0ZSBjb2x1bW5FbGVtZW50UmVmczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICBAVmlld0NoaWxkcmVuKCdjb2xTaXplUmFuZ2UnKVxuICBwcml2YXRlIGNvbHVtblJhbmdlSW5wdXRFbGVtZW50UmVmczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICBAVmlld0NoaWxkcmVuKCdpbmxpbmVEZWxldGVSZWYnKVxuICBwcml2YXRlIGlubGluZURlbGV0ZVJlZnM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcbiAgQFZpZXdDaGlsZCgnaW5saW5lRGVsZXRlVGVtcGxhdGVSZWYnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIHByaXZhdGUgaW5saW5lRGVsZXRlVGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPHVua25vd24+O1xuICBAVmlld0NoaWxkKCdncmlkQ29udGFpbmVyJylcbiAgcHJpdmF0ZSB0YWJsZUNvbnRhaW5lckVsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2dyaWRUYWJsZScpXG4gIHByaXZhdGUgdGFibGVFbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd0b3BTY3JvbGxDb250YWluZXInKVxuICBwcml2YXRlIHRvcFNjcm9sbENvbnRhaW5lckVsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3Jlc2l6ZUJhcicpXG4gIHByaXZhdGUgcmVzaXplQmFyOiBFbGVtZW50UmVmO1xuXG4gIHByaXZhdGUgYWN0aXZlUmVzaXplQ29sdW1uSW5kZXg6IHN0cmluZztcbiAgcHJpdmF0ZSBpc0RyYWdnaW5nUmVzaXplSGFuZGxlID0gZmFsc2U7XG4gIHByaXZhdGUgaXNSZXNpemVkID0gZmFsc2U7XG4gIHByaXZhdGUgbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgcm93RGVsZXRlQ29udGVudHM6IHsgW2lkOiBzdHJpbmddOiBTa3lHcmlkUm93RGVsZXRlQ29udGVudHMgfSA9IHt9O1xuICBwcml2YXRlIHN0YXJ0Q29sdW1uV2lkdGg6IG51bWJlcjtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICBwcml2YXRlIHNjcm9sbFRyaWdnZXJlZCA9IGZhbHNlO1xuICBwcml2YXRlIHNlbGVjdGVkQ29sdW1uSWRzU2V0ID0gZmFsc2U7XG4gIHByaXZhdGUgeFBvc1N0YXJ0OiBudW1iZXI7XG5cbiAgcHJpdmF0ZSBfY29sdW1uczogQXJyYXk8U2t5R3JpZENvbHVtbk1vZGVsPjtcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRDb2x1bW5JZHM6IEFycmF5PHN0cmluZz47XG4gIHByaXZhdGUgX3NlbGVjdGVkUm93SWRzOiBBcnJheTxzdHJpbmc+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWZmaXhTZXJ2aWNlOiBTa3lBZmZpeFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBkcmFndWxhU2VydmljZTogRHJhZ3VsYVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBncmlkQWRhcHRlcjogU2t5R3JpZEFkYXB0ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgb3ZlcmxheVNlcnZpY2U6IFNreU92ZXJsYXlTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2t5V2luZG93OiBTa3lBcHBXaW5kb3dSZWYsXG4gICAgcHJpdmF0ZSB1aUNvbmZpZ1NlcnZpY2U6IFNreVVJQ29uZmlnU2VydmljZSxcbiAgICBsb2dnZXI6IFNreUxvZ1NlcnZpY2VcbiAgKSB7XG4gICAgbG9nZ2VyLmRlcHJlY2F0ZWQoJ1NreUdyaWRDb21wb25lbnQnLCB7XG4gICAgICBkZXByZWNhdGlvbk1ham9yVmVyc2lvbjogNixcbiAgICAgIG1vcmVJbmZvVXJsOiAnaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9jb21wb25lbnRzL2RhdGEtZ3JpZCcsXG4gICAgICByZXBsYWNlbWVudFJlY29tbWVuZGF0aW9uOiAnVXNlIGRhdGEgZ3JpZCBpbnN0ZWFkLicsXG4gICAgfSk7XG5cbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSBuZXcgQXJyYXk8U2t5R3JpZENvbHVtbk1vZGVsPigpO1xuICAgIHRoaXMuaXRlbXMgPSBuZXcgQXJyYXk8YW55PigpO1xuICAgIHRoaXMuY3VycmVudFNvcnRGaWVsZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TGlzdFNvcnRGaWVsZFNlbGVjdG9yTW9kZWw+KHtcbiAgICAgIGZpZWxkU2VsZWN0b3I6ICcnLFxuICAgICAgZGVzY2VuZGluZzogZmFsc2UsXG4gICAgfSk7XG4gICAgdGhpcy5kcmFndWxhR3JvdXBOYW1lID0gYHNreS1ncmlkcy1ncm91cC0ke3RoaXMuZ3JpZElkfWA7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5tZXNzYWdlU3RyZWFtXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKG1lc3NhZ2U6IFNreUdyaWRNZXNzYWdlKSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhtZXNzYWdlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICBpZiAodGhpcy5zZXR0aW5nc0tleSkge1xuICAgICAgdGhpcy5hcHBseVVzZXJDb25maWcoKS50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5pbml0Q29sdW1ucygpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5pdENvbHVtbnMoKTtcbiAgICB9XG5cbiAgICAvLyBTZXR1cCBjb2x1bW4gZHJhZy1hbmQtZHJvcC5cbiAgICB0aGlzLmdyaWRBZGFwdGVyLmluaXRpYWxpemVEcmFnQW5kRHJvcChcbiAgICAgIHRoaXMuZHJhZ3VsYUdyb3VwTmFtZSxcbiAgICAgIHRoaXMuZHJhZ3VsYVNlcnZpY2UsXG4gICAgICAoc2VsZWN0ZWRDb2x1bW5JZHM6IEFycmF5PHN0cmluZz4pID0+IHtcbiAgICAgICAgdGhpcy5vbkhlYWRlckRyb3Aoc2VsZWN0ZWRDb2x1bW5JZHMpO1xuICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLmFwcGx5U2VsZWN0ZWRSb3dzKCk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuY2hlY2tVc2VyQ29sdW1uV2lkdGhzRm9yU2Nyb2xsKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzWydjb2x1bW5zJ10gJiYgdGhpcy5jb2x1bW5zKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbklkcykge1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1uSWRzID0gdGhpcy5zZWxlY3RlZENvbHVtbklkcy5maWx0ZXIoKGNvbHVtbklkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maW5kKChjb2x1bW4pID0+IGNvbHVtbi5pZCA9PT0gY29sdW1uSWQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0RGlzcGxheWVkQ29sdW1ucyh0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1snZGF0YSddICYmIHRoaXMuZGF0YSkge1xuICAgICAgdGhpcy50cmFuc2Zvcm1EYXRhKCk7XG5cbiAgICAgIC8vIFRoaXMgc2V0IHRpbWVvdXQgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgZGF0YSBoYXMgcmVuZGVyZWQgaW4gdGhlIGdyaWRcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAvLyBUaGlzIGNsZWFucyB1cCBhbnkgbGluZ2VyaW5nIHJvdyBkZWxldGVzIGZvciBpdGVtcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkLlxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnJvd0RlbGV0ZUNvbnRlbnRzKS5mb3JFYWNoKChpZCkgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5kYXRhLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IGlkKSkge1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95Um93RGVsZXRlKGlkKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVGhlIHJvd3MgcmUtcmVuZGVyIHRodXMgbWVzc2luZyB1cCB0aGUgYWZmaXhlcnMuIFdlIG11c3QgcmVhZmZpeCB0aGVtIHNvIHRoYXQgdGhpbmdzXG4gICAgICAgICAgICAvLyBjb250aW51ZSB0byByZW5kZXIgY29ycmVjdGx5LlxuICAgICAgICAgICAgY29uc3Qgcm93RWxlbWVudDogSFRNTEVsZW1lbnQgPVxuICAgICAgICAgICAgICB0aGlzLnRhYmxlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICAgICAgJ1tza3ktY21wLWlkPVwiJyArIGlkICsgJ1wiXSdcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdGhpcy5yb3dEZWxldGVDb250ZW50c1tpZF0uYWZmaXhlci5hZmZpeFRvKHJvd0VsZW1lbnQsIHtcbiAgICAgICAgICAgICAgYXV0b0ZpdENvbnRleHQ6IFNreUFmZml4QXV0b0ZpdENvbnRleHQuVmlld3BvcnQsXG4gICAgICAgICAgICAgIGlzU3RpY2t5OiB0cnVlLFxuICAgICAgICAgICAgICBwbGFjZW1lbnQ6ICdhYm92ZScsXG4gICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ25tZW50OiAndG9wJyxcbiAgICAgICAgICAgICAgaG9yaXpvbnRhbEFsaWdubWVudDogJ2xlZnQnLFxuICAgICAgICAgICAgICBlbmFibGVBdXRvRml0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jaGVja1VzZXJDb2x1bW5XaWR0aHNGb3JTY3JvbGwoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzWydzb3J0RmllbGQnXSkge1xuICAgICAgdGhpcy5zZXRTb3J0SGVhZGVycygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24pID0+IHtcbiAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH0pO1xuICAgIHRoaXMubXVsdGlzZWxlY3RTZWxlY3Rpb25DaGFuZ2UuY29tcGxldGUoKTtcblxuICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG5cbiAgICBPYmplY3Qua2V5cyh0aGlzLnJvd0RlbGV0ZUNvbnRlbnRzKS5mb3JFYWNoKChpZCkgPT4ge1xuICAgICAgdGhpcy5kZXN0cm95Um93RGVsZXRlKGlkKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZHJhZ3VsYVNlcnZpY2UuZGVzdHJveSh0aGlzLmRyYWd1bGFHcm91cE5hbWUpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXG4gIHB1YmxpYyBvbldpbmRvd1Jlc2l6ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNoZWNrVXNlckNvbHVtbldpZHRoc0ZvclNjcm9sbCgpO1xuICB9XG5cbiAgcHVibGljIGdldFRvcFNjcm9sbFdpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gIH1cblxuICBwdWJsaWMgZ2V0VGFibGVDbGFzc05hbWVzKCkge1xuICAgIGNvbnN0IGNsYXNzTmFtZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAodGhpcy5maXQgIT09ICdzY3JvbGwnKSB7XG4gICAgICBjbGFzc05hbWVzLnB1c2goJ3NreS1ncmlkLWZpdCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhhc1Rvb2xiYXIpIHtcbiAgICAgIGNsYXNzTmFtZXMucHVzaCgnc2t5LWdyaWQtaGFzLXRvb2xiYXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hZGREZWxpbWl0ZXIoY2xhc3NOYW1lcywgJyAnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRUYWJsZUhlYWRlckNsYXNzTmFtZXMoY29sdW1uOiBTa3lHcmlkQ29sdW1uTW9kZWwpIHtcbiAgICBjb25zdCBjbGFzc05hbWVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4ubG9ja2VkKSB7XG4gICAgICBjbGFzc05hbWVzLnB1c2goJ3NreS1ncmlkLWhlYWRlci1sb2NrZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hZGREZWxpbWl0ZXIoY2xhc3NOYW1lcywgJyAnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDYXJldEljb25OYW1lcyhjb2x1bW46IFNreUdyaWRDb2x1bW5Nb2RlbCkge1xuICAgIGNvbnN0IGljb25OYW1lczogc3RyaW5nW10gPSBbXTtcblxuICAgIHRoaXMuZ2V0U29ydERpcmVjdGlvbihjb2x1bW4uZmllbGQpLnN1YnNjcmliZSgoc29ydERpcikgPT4ge1xuICAgICAgaWYgKHNvcnREaXIgPT09ICdhc2MnKSB7XG4gICAgICAgIGljb25OYW1lcy5wdXNoKCdjYXJldC11cCcpO1xuICAgICAgfVxuICAgICAgaWYgKHNvcnREaXIgPT09ICdkZXNjJykge1xuICAgICAgICBpY29uTmFtZXMucHVzaCgnY2FyZXQtZG93bicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuYWRkRGVsaW1pdGVyKGljb25OYW1lcywgJyAnKTtcbiAgfVxuXG4gIHB1YmxpYyBvbktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGNvbHVtbjogU2t5R3JpZENvbHVtbk1vZGVsKSB7XG4gICAgY29uc3Qga2V5ID0gZXZlbnQua2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGtleSA9PT0gJ2VudGVyJyB8fCBrZXkgPT09ICcgJykge1xuICAgICAgdGhpcy5zb3J0QnlDb2x1bW4oY29sdW1uKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc29ydEJ5Q29sdW1uKGNvbHVtbjogU2t5R3JpZENvbHVtbk1vZGVsKSB7XG4gICAgaWYgKCF0aGlzLmlzRHJhZ2dpbmdSZXNpemVIYW5kbGUgJiYgY29sdW1uLmlzU29ydGFibGUpIHtcbiAgICAgIHRoaXMuY3VycmVudFNvcnRGaWVsZFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgIG1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgIGxldCBzZWxlY3RvciA9IHtcbiAgICAgICAgICAgICAgZmllbGRTZWxlY3RvcjogY29sdW1uLmZpZWxkLFxuICAgICAgICAgICAgICBkZXNjZW5kaW5nOiB0cnVlLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmaWVsZCAmJlxuICAgICAgICAgICAgICBmaWVsZC5maWVsZFNlbGVjdG9yID09PSBjb2x1bW4uZmllbGQgJiZcbiAgICAgICAgICAgICAgZmllbGQuZGVzY2VuZGluZ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHNlbGVjdG9yID0ge1xuICAgICAgICAgICAgICAgIGZpZWxkU2VsZWN0b3I6IGNvbHVtbi5maWVsZCxcbiAgICAgICAgICAgICAgICBkZXNjZW5kaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc29ydEZpZWxkQ2hhbmdlLmVtaXQoc2VsZWN0b3IpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50U29ydEZpZWxkLm5leHQoc2VsZWN0b3IpO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRTb3J0RGlyZWN0aW9uKGNvbHVtbkZpZWxkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRTb3J0RmllbGQucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBtYXAoKGZpZWxkKSA9PiB7XG4gICAgICAgIHJldHVybiBmaWVsZC5maWVsZFNlbGVjdG9yID09PSBjb2x1bW5GaWVsZFxuICAgICAgICAgID8gZmllbGQuZGVzY2VuZGluZ1xuICAgICAgICAgICAgPyAnZGVzYydcbiAgICAgICAgICAgIDogJ2FzYydcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBcmlhU29ydERpcmVjdGlvbihjb2x1bW46IFNreUdyaWRDb2x1bW5Nb2RlbCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFNvcnRGaWVsZC5waXBlKFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIG1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpZWxkLmZpZWxkU2VsZWN0b3IgPT09IGNvbHVtbi5maWVsZFxuICAgICAgICAgID8gZmllbGQuZGVzY2VuZGluZ1xuICAgICAgICAgICAgPyAnZGVzY2VuZGluZydcbiAgICAgICAgICAgIDogJ2FzY2VuZGluZydcbiAgICAgICAgICA6IGNvbHVtbi5pc1NvcnRhYmxlXG4gICAgICAgICAgPyAnbm9uZSdcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDYXJldFZpc2liaWxpdHkoY29sdW1uRmllbGQ6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFNvcnRGaWVsZC5waXBlKFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIG1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpZWxkLmZpZWxkU2VsZWN0b3IgPT09IGNvbHVtbkZpZWxkID8gJ3Zpc2libGUnIDogJ2hpZGRlbic7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0SGVscElubGluZUNsYXNzKGNvbHVtbkZpZWxkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRDYXJldFZpc2liaWxpdHkoY29sdW1uRmllbGQpLnBpcGUoXG4gICAgICBtYXAoKHZpc2liaWxpdHk6IHN0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4gdmlzaWJpbGl0eSA9PT0gJ2hpZGRlbic7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgb25NdWx0aXNlbGVjdENoZWNrYm94Q2hhbmdlKCkge1xuICAgIHRoaXMuZW1pdFNlbGVjdGVkUm93cyhTa3lHcmlkU2VsZWN0ZWRSb3dzU291cmNlLkNoZWNrYm94Q2hhbmdlKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVDb2x1bW5IZWFkaW5nKGNoYW5nZTogU2t5R3JpZENvbHVtbkhlYWRpbmdNb2RlbENoYW5nZSkge1xuICAgIGNvbnN0IGZvdW5kQ29sdW1uTW9kZWwgPSB0aGlzLmNvbHVtbnMuZmluZCgoY29sdW1uOiBTa3lHcmlkQ29sdW1uTW9kZWwpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIChjaGFuZ2UuaWQgIT09IHVuZGVmaW5lZCAmJiBjaGFuZ2UuaWQgPT09IGNvbHVtbi5pZCkgfHxcbiAgICAgICAgKGNoYW5nZS5maWVsZCAhPT0gdW5kZWZpbmVkICYmIGNoYW5nZS5maWVsZCA9PT0gY29sdW1uLmZpZWxkKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGZvdW5kQ29sdW1uTW9kZWwpIHtcbiAgICAgIGZvdW5kQ29sdW1uTW9kZWwuaGVhZGluZyA9IGNoYW5nZS52YWx1ZTtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHVwZGF0ZUlubGluZUhlbHBQb3BvdmVyKFxuICAgIGNoYW5nZTogU2t5R3JpZENvbHVtbklubGluZUhlbHBQb3BvdmVyTW9kZWxDaGFuZ2VcbiAgKSB7XG4gICAgY29uc3QgZm91bmRDb2x1bW5Nb2RlbCA9IHRoaXMuY29sdW1ucy5maW5kKChjb2x1bW46IFNreUdyaWRDb2x1bW5Nb2RlbCkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKGNoYW5nZS5pZCAhPT0gdW5kZWZpbmVkICYmIGNoYW5nZS5pZCA9PT0gY29sdW1uLmlkKSB8fFxuICAgICAgICAoY2hhbmdlLmZpZWxkICE9PSB1bmRlZmluZWQgJiYgY2hhbmdlLmZpZWxkID09PSBjb2x1bW4uZmllbGQpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoZm91bmRDb2x1bW5Nb2RlbCkge1xuICAgICAgZm91bmRDb2x1bW5Nb2RlbC5pbmxpbmVIZWxwUG9wb3ZlciA9IGNoYW5nZS52YWx1ZTtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHVwZGF0ZUNvbHVtbkRlc2NyaXB0aW9uKGNoYW5nZTogU2t5R3JpZENvbHVtbkRlc2NyaXB0aW9uTW9kZWxDaGFuZ2UpIHtcbiAgICBjb25zdCBmb3VuZENvbHVtbk1vZGVsID0gdGhpcy5jb2x1bW5zLmZpbmQoKGNvbHVtbjogU2t5R3JpZENvbHVtbk1vZGVsKSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAoY2hhbmdlLmlkICE9PSB1bmRlZmluZWQgJiYgY2hhbmdlLmlkID09PSBjb2x1bW4uaWQpIHx8XG4gICAgICAgIChjaGFuZ2UuZmllbGQgIT09IHVuZGVmaW5lZCAmJiBjaGFuZ2UuZmllbGQgPT09IGNvbHVtbi5maWVsZClcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChmb3VuZENvbHVtbk1vZGVsKSB7XG4gICAgICBmb3VuZENvbHVtbk1vZGVsLmRlc2NyaXB0aW9uID0gY2hhbmdlLnZhbHVlO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25SZXNpemVDb2x1bW5TdGFydChldmVudDoge1xuICAgIHN0b3BQcm9wYWdhdGlvbjogKCkgPT4gdm9pZDtcbiAgICBwcmV2ZW50RGVmYXVsdDogKCkgPT4gdm9pZDtcbiAgICBwYWdlWD86IG51bWJlcjtcbiAgfSk6IHZvaWQge1xuICAgIC8vIElmIHRoaXMgdGFibGUgaGFzbid0IGJlZW4gcmVzaXplZCwgaW5pdGlhbGl6ZSBhbGwgdGhlIHJlc2l6ZSB3aWR0aHMuXG4gICAgaWYgKCF0aGlzLmlzUmVzaXplZCkge1xuICAgICAgdGhpcy5pbml0Q29sdW1uV2lkdGhzKCk7XG4gICAgICB0aGlzLmlzUmVzaXplZCA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5pbml0aWFsaXplUmVzaXplQ29sdW1uKGV2ZW50KTtcblxuICAgIHRoaXMuaXNEcmFnZ2luZ1Jlc2l6ZUhhbmRsZSA9IHRydWU7XG4gICAgdGhpcy54UG9zU3RhcnQgPSBldmVudC5wYWdlWDtcbiAgICB0aGlzLnNob3dSZXNpemVCYXIgPSB0cnVlO1xuXG4gICAgLy8gU2hvdyB2aXN1YWwgaW5kaWNhdG9yIG9mIHdoZXJlIG1vdXNlIGlzIGRyYWdnaW5nIChyZXNpemVCYXIpLlxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuc2V0UmVzaXplQmFyUG9zaXRpb24oZXZlbnQucGFnZVgpO1xuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGNvbnN0IG1vdXNlTW92ZUV2ZW50ID0gZnJvbUV2ZW50KGRvY3VtZW50LCAnbW91c2Vtb3ZlJyk7XG4gICAgY29uc3QgdG91Y2hNb3ZlRXZlbnQgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICd0b3VjaG1vdmUnKTtcblxuICAgIG1lcmdlKG1vdXNlTW92ZUV2ZW50LCB0b3VjaE1vdmVFdmVudClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlV2hpbGUoKCkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlzRHJhZ2dpbmdSZXNpemVIYW5kbGU7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChtb3ZlRXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLm9uUmVzaXplSGFuZGxlTW92ZShtb3ZlRXZlbnQpO1xuICAgICAgfSk7XG5cbiAgICBjb25zdCBtb3VzZVVwRXZlbnQgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdtb3VzZXVwJyk7XG4gICAgY29uc3QgdG91Y2hFbmRFdmVudCA9IGZyb21FdmVudChkb2N1bWVudCwgJ3RvdWNoZW5kJyk7XG5cbiAgICBtZXJnZShtb3VzZVVwRXZlbnQsIHRvdWNoRW5kRXZlbnQpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVdoaWxlKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pc0RyYWdnaW5nUmVzaXplSGFuZGxlO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoZW5kRXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLm9uUmVzaXplSGFuZGxlUmVsZWFzZShlbmRFdmVudCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvbktleWRvd25SZXNpemVDb2woZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAvLyBJZiB0aGlzIHRhYmxlIGhhc24ndCBiZWVuIHJlc2l6ZWQsIGluaXRpYWxpemUgYWxsIHRoZSByZXNpemUgd2lkdGhzLlxuICAgIGlmICghdGhpcy5pc1Jlc2l6ZWQpIHtcbiAgICAgIHRoaXMuaW5pdENvbHVtbldpZHRocygpO1xuICAgICAgdGhpcy5pc1Jlc2l6ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdGlhbGl6ZVJlc2l6ZUNvbHVtbihldmVudCk7XG4gIH1cblxuICBwdWJsaWMgb25JbnB1dENoYW5nZVJlc2l6ZUNvbChldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gTnVtYmVyKGlucHV0LnZhbHVlKTtcbiAgICBjb25zdCBkZWx0YVggPSBuZXdWYWx1ZSAtIHRoaXMuc3RhcnRDb2x1bW5XaWR0aDtcbiAgICB0aGlzLnJlc2l6ZUNvbHVtbkJ5SW5kZXgodGhpcy5hY3RpdmVSZXNpemVDb2x1bW5JbmRleCwgbmV3VmFsdWUsIGRlbHRhWCk7XG4gICAgY29uc3QgbGVmdCA9IGlucHV0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG4gICAgdGhpcy5zZXRSZXNpemVCYXJQb3NpdGlvbihsZWZ0KTtcbiAgfVxuXG4gIHB1YmxpYyBvblJlc2l6ZUhhbmRsZU1vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBjb25zdCBkZWx0YVggPSBldmVudC5wYWdlWCAtIHRoaXMueFBvc1N0YXJ0O1xuICAgIGNvbnN0IG5ld0NvbFdpZHRoID0gdGhpcy5zdGFydENvbHVtbldpZHRoICsgZGVsdGFYO1xuXG4gICAgaWYgKG5ld0NvbFdpZHRoIDw9IHRoaXMubWluQ29sV2lkdGgpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1heCA9IHRoaXMuZ2V0TWF4UmFuZ2VCeUluZGV4KHRoaXMuYWN0aXZlUmVzaXplQ29sdW1uSW5kZXgpO1xuICAgIGlmICh0aGlzLmZpdCA9PT0gJ3dpZHRoJyAmJiBuZXdDb2xXaWR0aCA+IG1heCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZXRSZXNpemVCYXJQb3NpdGlvbihldmVudC5wYWdlWCk7XG4gIH1cblxuICBwdWJsaWMgb25SZXNpemVIYW5kbGVCbHVyKCkge1xuICAgIHRoaXMuc2hvd1Jlc2l6ZUJhciA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIG9uUmVzaXplSGFuZGxlRm9jdXMoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICB0aGlzLnNob3dSZXNpemVCYXIgPSB0cnVlO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IGxlZnQgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICB0aGlzLnNldFJlc2l6ZUJhclBvc2l0aW9uKGxlZnQpO1xuICB9XG5cbiAgcHVibGljIG9uUmVzaXplSGFuZGxlUmVsZWFzZShldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuc2hvd1Jlc2l6ZUJhciA9IGZhbHNlO1xuICAgIGNvbnN0IGRlbHRhWCA9IGV2ZW50LnBhZ2VYIC0gdGhpcy54UG9zU3RhcnQ7XG4gICAgY29uc3QgbmV3Q29sV2lkdGggPSB0aGlzLnN0YXJ0Q29sdW1uV2lkdGggKyBkZWx0YVg7XG4gICAgdGhpcy5yZXNpemVDb2x1bW5CeUluZGV4KHRoaXMuYWN0aXZlUmVzaXplQ29sdW1uSW5kZXgsIG5ld0NvbFdpZHRoLCBkZWx0YVgpO1xuICAgIHRoaXMuaXNEcmFnZ2luZ1Jlc2l6ZUhhbmRsZSA9IGZhbHNlO1xuICAgIHRoaXMuYWN0aXZlUmVzaXplQ29sdW1uSW5kZXggPSB1bmRlZmluZWQ7XG5cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHVibGljIG9uUm93Q2xpY2soZXZlbnQ6IGFueSwgc2VsZWN0ZWRJdGVtOiBMaXN0SXRlbU1vZGVsKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy5lbmFibGVNdWx0aXNlbGVjdCkge1xuICAgICAgaWYgKFxuICAgICAgICBldmVudC50YXJnZXQgPT09IGV2ZW50LmN1cnJlbnRUYXJnZXQgfHxcbiAgICAgICAgIXRoaXMuaXNJbnRlcmFjdGl2ZUVsZW1lbnQoZXZlbnQpXG4gICAgICApIHtcbiAgICAgICAgc2VsZWN0ZWRJdGVtLmlzU2VsZWN0ZWQgPSAhc2VsZWN0ZWRJdGVtLmlzU2VsZWN0ZWQ7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHRoaXMuZW1pdFNlbGVjdGVkUm93cyhTa3lHcmlkU2VsZWN0ZWRSb3dzU291cmNlLlJvd0NsaWNrKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNSb3dIaWdobGlnaHRlZChpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMucm93SGlnaGxpZ2h0ZWRJZCkge1xuICAgICAgcmV0dXJuIGlkID09PSB0aGlzLnJvd0hpZ2hsaWdodGVkSWQ7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSb3dIZWlnaHQoaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ3JpZEFkYXB0ZXIuZ2V0Um93SGVpZ2h0KHRoaXMudGFibGVFbGVtZW50UmVmLCBpbmRleCk7XG4gIH1cblxuICBwdWJsaWMgY2FuY2VsUm93RGVsZXRlKGlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLnJvd0RlbGV0ZUNvbmZpZ3MgPSB0aGlzLnJvd0RlbGV0ZUNvbmZpZ3MuZmlsdGVyKFxuICAgICAgKGNvbmZpZykgPT4gY29uZmlnLmlkICE9PSBpZFxuICAgICk7XG4gICAgdGhpcy5yb3dEZWxldGVDYW5jZWwuZW1pdCh7IGlkOiBpZCB9KTtcblxuICAgIHRoaXMuZGVzdHJveVJvd0RlbGV0ZShpZCk7XG4gIH1cblxuICBwdWJsaWMgY29uZmlybVJvd0RlbGV0ZShpZDogc3RyaW5nKSB7XG4gICAgdGhpcy5yb3dEZWxldGVDb25maWdzLmZpbmQoKGNvbmZpZykgPT4gY29uZmlnLmlkID09PSBpZCkucGVuZGluZyA9IHRydWU7XG4gICAgdGhpcy5yb3dEZWxldGVDb25maXJtLmVtaXQoeyBpZDogaWQgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Um93RGVsZXRlSXRlbShpZDogc3RyaW5nKTogU2t5R3JpZFJvd0RlbGV0ZUNvbmZpZyB7XG4gICAgcmV0dXJuIHRoaXMucm93RGVsZXRlQ29uZmlncy5maW5kKChyb3dEZWxldGUpID0+IHJvd0RlbGV0ZS5pZCA9PT0gaWQpO1xuICB9XG5cbiAgLy8gUHJldmVudCB0b3VjaCBkZXZpY2VzIGZyb20gaW5hZHZlcnRlbnRseSBzY3JvbGxpbmcgZ3JpZCB3aGlsZSBkcmFnZ2luZyBjb2x1bW5zLlxuICBwdWJsaWMgb25Ub3VjaE1vdmUoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICBwdWJsaWMgb25Ub3BTY3JvbGwoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMudGFibGVDb250YWluZXJFbGVtZW50UmVmKSB7XG4gICAgICBpZiAodGhpcy5zY3JvbGxUcmlnZ2VyZWQpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxUcmlnZ2VyZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50YWJsZUNvbnRhaW5lckVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID1cbiAgICAgICAgICB0aGlzLnRvcFNjcm9sbENvbnRhaW5lckVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zY3JvbGxUcmlnZ2VyZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkdyaWRTY3JvbGwoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMudG9wU2Nyb2xsQ29udGFpbmVyRWxlbWVudFJlZikge1xuICAgICAgaWYgKHRoaXMuc2Nyb2xsVHJpZ2dlcmVkKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsVHJpZ2dlcmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMudG9wU2Nyb2xsQ29udGFpbmVyRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPVxuICAgICAgICAgIHRoaXMudGFibGVDb250YWluZXJFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsVHJpZ2dlcmVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoZWNrVXNlckNvbHVtbldpZHRoc0ZvclNjcm9sbCgpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5zaG93VG9wU2Nyb2xsICYmXG4gICAgICB0aGlzLmNvbHVtbkVsZW1lbnRSZWZzICYmXG4gICAgICB0aGlzLmNvbHVtbkVsZW1lbnRSZWZzLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIGxldCBjb2x1bW5zV2lkdGhUb3RhbCA9IDA7XG4gICAgICBjb25zdCB3aW5kb3dTaXplID0gdGhpcy5za3lXaW5kb3cubmF0aXZlV2luZG93LmlubmVyV2lkdGg7XG4gICAgICB0aGlzLmNvbHVtbkVsZW1lbnRSZWZzLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuc2hvd1RvcFNjcm9sbCkge1xuICAgICAgICAgIGNvbnN0IGNvbXB1dGVkV2lkdGggPSBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgd2luZG93LmdldENvbXB1dGVkU3R5bGUoY29sLm5hdGl2ZUVsZW1lbnQpLndpZHRoXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBvZmZzZXRXaWR0aCA9IGNvbC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgICAgIGNvbnN0IHdpZHRoID0gTWF0aC5tYXgoXG4gICAgICAgICAgICBjb21wdXRlZFdpZHRoIHx8IG9mZnNldFdpZHRoLFxuICAgICAgICAgICAgdGhpcy5taW5Db2xXaWR0aFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29sdW1uc1dpZHRoVG90YWwgPSBjb2x1bW5zV2lkdGhUb3RhbCArIHdpZHRoO1xuICAgICAgICAgIGlmIChjb2x1bW5zV2lkdGhUb3RhbCA+IHdpbmRvd1NpemUpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1RvcFNjcm9sbCA9IHRydWU7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtdWx0aXNlbGVjdFNlbGVjdEFsbCgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuaXRlbXNbaV0uaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgdGhpcy5lbWl0U2VsZWN0ZWRSb3dzKFNreUdyaWRTZWxlY3RlZFJvd3NTb3VyY2UuU2VsZWN0QWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgbXVsdGlzZWxlY3RDbGVhckFsbCgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuaXRlbXNbaV0uaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIHRoaXMuZW1pdFNlbGVjdGVkUm93cyhTa3lHcmlkU2VsZWN0ZWRSb3dzU291cmNlLkNsZWFyQWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhtZXNzYWdlOiBTa3lHcmlkTWVzc2FnZSkge1xuICAgIHN3aXRjaCAobWVzc2FnZS50eXBlKSB7XG4gICAgICBjYXNlIFNreUdyaWRNZXNzYWdlVHlwZS5TZWxlY3RBbGw6XG4gICAgICAgIHRoaXMubXVsdGlzZWxlY3RTZWxlY3RBbGwoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU2t5R3JpZE1lc3NhZ2VUeXBlLkNsZWFyQWxsOlxuICAgICAgICB0aGlzLm11bHRpc2VsZWN0Q2xlYXJBbGwoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFNreUdyaWRNZXNzYWdlVHlwZS5Qcm9tcHREZWxldGVSb3c6XG4gICAgICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAobWVzc2FnZS5kYXRhICYmIG1lc3NhZ2UuZGF0YS5wcm9tcHREZWxldGVSb3cpIHtcbiAgICAgICAgICBjb25zdCBleGlzdGluZ0NvbmZpZyA9IHRoaXMucm93RGVsZXRlQ29uZmlncy5maW5kKFxuICAgICAgICAgICAgKGNvbmZpZykgPT4gY29uZmlnLmlkID09PSBtZXNzYWdlLmRhdGEucHJvbXB0RGVsZXRlUm93LmlkXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoZXhpc3RpbmdDb25maWcpIHtcbiAgICAgICAgICAgIGV4aXN0aW5nQ29uZmlnLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yb3dEZWxldGVDb25maWdzLnB1c2goe1xuICAgICAgICAgICAgICBpZDogbWVzc2FnZS5kYXRhLnByb21wdERlbGV0ZVJvdy5pZCxcbiAgICAgICAgICAgICAgcGVuZGluZzogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IG92ZXJsYXkgPSB0aGlzLm92ZXJsYXlTZXJ2aWNlLmNyZWF0ZSh7XG4gICAgICAgICAgICAgIGVuYWJsZVNjcm9sbDogdHJ1ZSxcbiAgICAgICAgICAgICAgc2hvd0JhY2tkcm9wOiBmYWxzZSxcbiAgICAgICAgICAgICAgY2xvc2VPbk5hdmlnYXRpb246IHRydWUsXG4gICAgICAgICAgICAgIGVuYWJsZUNsb3NlOiBmYWxzZSxcbiAgICAgICAgICAgICAgZW5hYmxlUG9pbnRlckV2ZW50czogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBvdmVybGF5LmF0dGFjaFRlbXBsYXRlKHRoaXMuaW5saW5lRGVsZXRlVGVtcGxhdGVSZWYsIHtcbiAgICAgICAgICAgICAgJGltcGxpY2l0OiB0aGlzLmRhdGEuZmluZChcbiAgICAgICAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5pZCA9PT0gbWVzc2FnZS5kYXRhLnByb21wdERlbGV0ZVJvdy5pZFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogV2UgYXJlIG1hbnVhbGx5IHNldHRpbmcgdGhlIHotaW5kZXggaGVyZSBiZWNhdXNlIG92ZXJsYXlzIHdpbGwgYWx3YXlzIGJlIG9uIHRvcCBvZlxuICAgICAgICAgICAgICogdGhlIG9tbmliYXIuIFRoaXMgbWFudWFsIHNldHRpbmcgaXMgMSBsZXNzIHRoYW4gdGhlIG9tbmliYXIncyB6LWluZGV4IG9mIDEwMDAuIFdlXG4gICAgICAgICAgICAgKiBkaXNjdXNzZWQgY2hhbmdpbmcgdGhlIG92ZXJsYXkgc2VydmljZSB0byBhbGxvdyBmb3IgdGhpcyBidXQgZGVjaWRlZCBhZ2FpbnN0IHRoYXRcbiAgICAgICAgICAgICAqIGNoYW5nZSBhdCB0aGlzIHRpbWUgZHVlIHRvIGl0cyBuaWNoZSBuYXR1cmUuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIG92ZXJsYXkuY29tcG9uZW50UmVmLmluc3RhbmNlLnpJbmRleCA9ICc5OTknO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaW5saW5lRGVsZXRlUmVmID0gdGhpcy5pbmxpbmVEZWxldGVSZWZzXG4gICAgICAgICAgICAgICAgLnRvQXJyYXkoKVxuICAgICAgICAgICAgICAgIC5maW5kKChlbFJlZikgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgZWxSZWYubmF0aXZlRWxlbWVudC5pZCA9PT1cbiAgICAgICAgICAgICAgICAgICAgJ3Jvdy1kZWxldGUtcmVmLScgKyBtZXNzYWdlLmRhdGEucHJvbXB0RGVsZXRlUm93LmlkXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjb25zdCBhZmZpeGVyID0gdGhpcy5hZmZpeFNlcnZpY2UuY3JlYXRlQWZmaXhlcihpbmxpbmVEZWxldGVSZWYpO1xuXG4gICAgICAgICAgICAgIGNvbnN0IHJvd0VsZW1lbnQ6IEhUTUxFbGVtZW50ID1cbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICAgICAgICAnW3NreS1jbXAtaWQ9XCInICsgbWVzc2FnZS5kYXRhLnByb21wdERlbGV0ZVJvdy5pZCArICdcIl0nXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBhZmZpeGVyLmFmZml4VG8ocm93RWxlbWVudCwge1xuICAgICAgICAgICAgICAgIGF1dG9GaXRDb250ZXh0OiBTa3lBZmZpeEF1dG9GaXRDb250ZXh0LlZpZXdwb3J0LFxuICAgICAgICAgICAgICAgIGlzU3RpY2t5OiB0cnVlLFxuICAgICAgICAgICAgICAgIHBsYWNlbWVudDogJ2Fib3ZlJyxcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWdubWVudDogJ3RvcCcsXG4gICAgICAgICAgICAgICAgaG9yaXpvbnRhbEFsaWdubWVudDogJ2xlZnQnLFxuICAgICAgICAgICAgICAgIGVuYWJsZUF1dG9GaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICB0aGlzLnJvd0RlbGV0ZUNvbnRlbnRzW21lc3NhZ2UuZGF0YS5wcm9tcHREZWxldGVSb3cuaWRdID0ge1xuICAgICAgICAgICAgICAgIGFmZml4ZXI6IGFmZml4ZXIsXG4gICAgICAgICAgICAgICAgb3ZlcmxheTogb3ZlcmxheSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU2t5R3JpZE1lc3NhZ2VUeXBlLkFib3J0RGVsZXRlUm93OlxuICAgICAgICAvKiBzYW5pdHkgY2hlY2sgKi9cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UuZGF0YSAmJiBtZXNzYWdlLmRhdGEuYWJvcnREZWxldGVSb3cpIHtcbiAgICAgICAgICB0aGlzLnJvd0RlbGV0ZUNvbmZpZ3MgPSB0aGlzLnJvd0RlbGV0ZUNvbmZpZ3MuZmlsdGVyKFxuICAgICAgICAgICAgKGNvbmZpZykgPT4gY29uZmlnLmlkICE9PSBtZXNzYWdlLmRhdGEuYWJvcnREZWxldGVSb3cuaWRcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy5kZXN0cm95Um93RGVsZXRlKG1lc3NhZ2UuZGF0YS5hYm9ydERlbGV0ZVJvdy5pZCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIG9uSGVhZGVyRHJvcChuZXdDb2x1bW5JZHM6IEFycmF5PHN0cmluZz4pIHtcbiAgICAvLyB1cGRhdGUgc2VsZWN0ZWQgY29sdW1uSWRzXG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbklkc1NldCA9IHRydWU7XG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbklkcyA9IG5ld0NvbHVtbklkcztcblxuICAgIC8vIG1hcmsgZm9yIGNoZWNrIGJlY2F1c2Ugd2UgYXJlIHVzaW5nIENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lm9uUHVzaFxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIHNldERpc3BsYXllZENvbHVtbnMocmVzcGVjdEhpZGRlbjogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgLyogc2FuaXR5IGNoZWNrICovXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy5jb2x1bW5zKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbklkcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIHNldHVwIGRpc3BsYXllZCBjb2x1bW5zXG4gICAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5JZHNcbiAgICAgICAgICAuZmlsdGVyKChjb2x1bW5JZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maW5kKChjb2x1bW4pID0+IGNvbHVtbi5pZCA9PT0gY29sdW1uSWQpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLm1hcCgoY29sdW1uSWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnMuZmlsdGVyKChjb2x1bW4pID0+IGNvbHVtbi5pZCA9PT0gY29sdW1uSWQpWzBdO1xuICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChyZXNwZWN0SGlkZGVuKSB7XG4gICAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoKGNvbHVtbikgPT4ge1xuICAgICAgICAgIHJldHVybiAhY29sdW1uLmhpZGRlbjtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1EYXRhKCkge1xuICAgIC8vIFRyYW5zZm9ybSBkYXRhIGludG8gb2JqZWN0IHdpdGggaWQgYW5kIGRhdGEgcHJvcGVydGllc1xuICAgIGlmIChcbiAgICAgIHRoaXMuZGF0YSAmJlxuICAgICAgdGhpcy5kYXRhLmxlbmd0aCA+IDAgJiZcbiAgICAgIHRoaXMuZGF0YVswXS5pZCAmJlxuICAgICAgIXRoaXMuZGF0YVswXS5kYXRhXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5tdWx0aXNlbGVjdFJvd0lkKSB7XG4gICAgICAgIHRoaXMuaXRlbXMgPSB0aGlzLmdldEdyaWREYXRhV2l0aFNlbGVjdGVkUm93cygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuZGF0YS5tYXAoKGl0ZW0pID0+IG5ldyBMaXN0SXRlbU1vZGVsKGl0ZW0uaWQsIGl0ZW0pKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuZGF0YTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEdyaWREYXRhV2l0aFNlbGVjdGVkUm93cygpIHtcbiAgICBjb25zdCBzZWxlY3RlZFJvd3MgPSB0aGlzLmdldFNlbGVjdGVkUm93cygpO1xuICAgIHJldHVybiB0aGlzLmRhdGEubWFwKChpdGVtKSA9PiB7XG4gICAgICBsZXQgY2hlY2tlZDtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaXRlbSwgdGhpcy5tdWx0aXNlbGVjdFJvd0lkKSkge1xuICAgICAgICBjaGVja2VkID0gc2VsZWN0ZWRSb3dzLmluZGV4T2YoaXRlbVt0aGlzLm11bHRpc2VsZWN0Um93SWRdKSA+IC0xO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hlY2tlZCA9IHNlbGVjdGVkUm93cy5pbmRleE9mKGl0ZW0uaWQpID4gLTE7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IExpc3RJdGVtTW9kZWwoaXRlbS5pZCwgaXRlbSwgY2hlY2tlZCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5U2VsZWN0ZWRSb3dzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLml0ZW1zICYmIHRoaXMuaXRlbXMubGVuZ3RoID4gMCAmJiB0aGlzLnNlbGVjdGVkUm93SWRzKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy5pdGVtc1tpXS5pc1NlbGVjdGVkID1cbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93SWRzLmluZGV4T2YodGhpcy5pdGVtc1tpXS5pZCkgPiAtMTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRTb3J0SGVhZGVycygpIHtcbiAgICB0aGlzLmN1cnJlbnRTb3J0RmllbGQubmV4dChcbiAgICAgIHRoaXMuc29ydEZpZWxkIHx8IHsgZmllbGRTZWxlY3RvcjogJycsIGRlc2NlbmRpbmc6IGZhbHNlIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2x1bW5zRnJvbUNvbXBvbmVudCgpIHtcbiAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbkNvbXBvbmVudHMubWFwKChjb2x1bW5Db21wb25lbnQpID0+IHtcbiAgICAgIHJldHVybiBuZXcgU2t5R3JpZENvbHVtbk1vZGVsKGNvbHVtbkNvbXBvbmVudC50ZW1wbGF0ZSwgY29sdW1uQ29tcG9uZW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ29sdW1ucygpIHtcbiAgICB0aGlzLmdldENvbHVtbnNGcm9tQ29tcG9uZW50KCk7XG5cbiAgICAvLyBUaGlzIHNldCB0aW1lb3V0IGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIGNvbHVtbnMgaGF2ZSByZW5kZXJlZCBpbiB0aGUgZ3JpZFxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jaGVja1VzZXJDb2x1bW5XaWR0aHNGb3JTY3JvbGwoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzaXplQ29sdW1uQnlJbmRleChcbiAgICBjb2x1bW5JbmRleDogc3RyaW5nLFxuICAgIG5ld0NvbFdpZHRoOiBudW1iZXIsXG4gICAgZGVsdGFYOiBudW1iZXJcbiAgKSB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5nZXRDb2x1bW5Nb2RlbEJ5SW5kZXgoY29sdW1uSW5kZXgpO1xuXG4gICAgLy8gUHJldmVudCBhY2NpZGVudGFsIHNocmlua2FnZSBiZWxvdyBtaW5pbXVtIHdpZHRoLlxuICAgIGlmIChuZXdDb2xXaWR0aCA8PSB0aGlzLm1pbkNvbFdpZHRoKSB7XG4gICAgICBkZWx0YVggPSBkZWx0YVggKyB0aGlzLm1pbkNvbFdpZHRoIC0gbmV3Q29sV2lkdGg7XG4gICAgICBuZXdDb2xXaWR0aCA9IHRoaXMubWluQ29sV2lkdGg7XG4gICAgfVxuXG4gICAgLy8gZml0PXdpZHRoIGFkZHMvcmVtb3ZlcyB3aWR0aCBmcm9tIHRoZSBsYXN0IGNvbHVtblxuICAgIC8vIGZpdD1zY3JvbGwgYWRkcy9yZW1vdmVzIHdpZHRoIGZyb20gdGhlIHRhYmxlXG4gICAgaWYgKHRoaXMuZml0ID09PSAnd2lkdGgnKSB7XG4gICAgICBjb25zdCBsYXN0Q29sdW1uID0gdGhpcy5nZXRMYXN0RGlzcGxheWVkQ29sdW1uKCk7XG5cbiAgICAgIC8vIFByZXZlbnQgYWNjaWRlbnRhbCBncm93dGggdGhhdCB3b3VsZCBidW1wIGxhc3QgY29sdW1uIG9mZiBzY3JlZW4uXG4gICAgICBjb25zdCBtYXggPSB0aGlzLmdldE1heFJhbmdlQnlJbmRleChjb2x1bW5JbmRleCk7XG4gICAgICBpZiAobmV3Q29sV2lkdGggPiBtYXgpIHtcbiAgICAgICAgbmV3Q29sV2lkdGggPSBtYXg7XG4gICAgICAgIGRlbHRhWCA9IG1heCAtIHRoaXMuc3RhcnRDb2x1bW5XaWR0aDtcbiAgICAgIH1cbiAgICAgIGNvbHVtbi53aWR0aCA9IG5ld0NvbFdpZHRoO1xuICAgICAgbGFzdENvbHVtbi53aWR0aCA9IGxhc3RDb2x1bW4ud2lkdGggLSBkZWx0YVg7XG4gICAgICB0aGlzLnVwZGF0ZU1heFJhbmdlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ3JpZEFkYXB0ZXIuc2V0U3R5bGUoXG4gICAgICAgIHRoaXMudGFibGVFbGVtZW50UmVmLFxuICAgICAgICAnd2lkdGgnLFxuICAgICAgICBgJHt0aGlzLnRhYmxlV2lkdGggKyBkZWx0YVh9cHhgXG4gICAgICApO1xuICAgICAgY29sdW1uLndpZHRoID0gbmV3Q29sV2lkdGg7XG4gICAgfVxuXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5jb2x1bW5XaWR0aENoYW5nZS5lbWl0KHRoaXMuZ2V0Q29sdW1uV2lkdGhNb2RlbENoYW5nZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdENvbHVtbldpZHRocygpIHtcbiAgICAvLyBFc3RhYmxpc2ggdGFibGUgd2lkdGguXG4gICAgdGhpcy5zaG93VG9wU2Nyb2xsID0gdHJ1ZTtcblxuICAgIC8vIFNldCBjb2x1bW4gd2lkdGhzIGJhc2VkIG9uIHRoZSB3aWR0aCBpbml0aWFsbHkgZ2l2ZW4gYnkgdGhlIGJyb3dzZXIuXG4gICAgLy8gY29tcHV0ZWRXaWR0aCBwcmV2ZW50cyBhY2NpZGVudGFsIG92ZXJmbG93IGZvciBicm93c2VycyB3aXRoIHN1Yi1waXhlbCB3aWR0aHMuXG4gICAgdGhpcy5jb2x1bW5FbGVtZW50UmVmcy5mb3JFYWNoKChjb2wsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBjb21wdXRlZFdpZHRoID0gcGFyc2VGbG9hdChcbiAgICAgICAgd2luZG93LmdldENvbXB1dGVkU3R5bGUoY29sLm5hdGl2ZUVsZW1lbnQpLndpZHRoXG4gICAgICApO1xuICAgICAgY29uc3Qgb2Zmc2V0V2lkdGggPSBjb2wubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICB0aGlzLmdldENvbHVtbk1vZGVsQnlJbmRleChpbmRleCkud2lkdGggPSBNYXRoLm1heChcbiAgICAgICAgY29tcHV0ZWRXaWR0aCB8fCBvZmZzZXRXaWR0aCxcbiAgICAgICAgdGhpcy5taW5Db2xXaWR0aFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIC8vICdzY3JvbGwnIHRhYmxlcyBzaG91bGQgYmUgYWxsb3dlZCB0byBleHBhbmQgb3V0c2lkZSBvZiB0aGVpciBjb25zdHJhaW50cy5cbiAgICBpZiAodGhpcy5maXQgPT09ICdzY3JvbGwnKSB7XG4gICAgICB0aGlzLmdyaWRBZGFwdGVyLnNldFN0eWxlKHRoaXMudGFibGVFbGVtZW50UmVmLCAnbWluLXdpZHRoJywgJ2F1dG8nKTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgbWF4IGxpbWl0cyBmb3IgaW5wdXQgcmFuZ2VzLlxuICAgIGlmICh0aGlzLmZpdCA9PT0gJ3dpZHRoJykge1xuICAgICAgdGhpcy51cGRhdGVNYXhSYW5nZSgpO1xuICAgIH1cblxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2ZlckNvbHVtbldpZHRocyhcbiAgICBvbGRDb2x1bW5zOiBTa3lHcmlkQ29sdW1uTW9kZWxbXSxcbiAgICBuZXdDb2x1bW5zOiBTa3lHcmlkQ29sdW1uTW9kZWxbXVxuICApIHtcbiAgICAvKiBzYW5pdHkgY2hlY2sgKi9cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChvbGRDb2x1bW5zICYmIG5ld0NvbHVtbnMpIHtcbiAgICAgIGZvciAoY29uc3Qgb2xkQ29sdW1uIG9mIG9sZENvbHVtbnMpIHtcbiAgICAgICAgaWYgKG9sZENvbHVtbi53aWR0aCkge1xuICAgICAgICAgIGNvbnN0IG1hdGNoaW5nQ29sdW1uID0gbmV3Q29sdW1ucy5maW5kKFxuICAgICAgICAgICAgKG5ld0NvbHVtbikgPT4gb2xkQ29sdW1uLmlkID09PSBuZXdDb2x1bW4uaWRcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChtYXRjaGluZ0NvbHVtbiAmJiAhbWF0Y2hpbmdDb2x1bW4ud2lkdGgpIHtcbiAgICAgICAgICAgIG1hdGNoaW5nQ29sdW1uLndpZHRoID0gb2xkQ29sdW1uLndpZHRoO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2x1bW5XaWR0aE1vZGVsQ2hhbmdlKCkge1xuICAgIGNvbnN0IGNvbHVtbldpZHRoTW9kZWxDaGFuZ2UgPSBuZXcgQXJyYXk8U2t5R3JpZENvbHVtbldpZHRoTW9kZWxDaGFuZ2U+KCk7XG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgY29sdW1uV2lkdGhNb2RlbENoYW5nZS5wdXNoKHtcbiAgICAgICAgaWQ6IGNvbHVtbi5pZCxcbiAgICAgICAgZmllbGQ6IGNvbHVtbi5maWVsZCxcbiAgICAgICAgd2lkdGg6IGNvbHVtbi53aWR0aCxcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBjb2x1bW5XaWR0aE1vZGVsQ2hhbmdlO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNYXhSYW5nZSgpIHtcbiAgICBjb25zdCBsZWZ0b3ZlcldpZHRoID1cbiAgICAgIHRoaXMuZ2V0TGFzdERpc3BsYXllZENvbHVtbigpLndpZHRoIC0gdGhpcy5taW5Db2xXaWR0aDtcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMuZm9yRWFjaCgoY29sdW1uLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbmV3TWF4UmFuZ2UgPSBjb2x1bW4ud2lkdGggKyBsZWZ0b3ZlcldpZHRoO1xuICAgICAgY29uc3QgcmFuZ2VJbnB1dCA9IHRoaXMuZ2V0UmFuZ2VJbnB1dEJ5SW5kZXgoaW5kZXgpO1xuICAgICAgcmFuZ2VJbnB1dC5uYXRpdmVFbGVtZW50Lm1heCA9IG5ld01heFJhbmdlO1xuICAgICAgcmFuZ2VJbnB1dC5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS12YWx1ZW1heCcsIG5ld01heFJhbmdlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVJlc2l6ZUNvbHVtbihldmVudDogYW55KSB7XG4gICAgY29uc3QgY2xpY2tUYXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgdGhpcy5hY3RpdmVSZXNpemVDb2x1bW5JbmRleCA9IGNsaWNrVGFyZ2V0LmdldEF0dHJpYnV0ZSgnc2t5LWNtcC1pbmRleCcpO1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuZ2V0Q29sdW1uTW9kZWxCeUluZGV4KHRoaXMuYWN0aXZlUmVzaXplQ29sdW1uSW5kZXgpO1xuICAgIHRoaXMuc3RhcnRDb2x1bW5XaWR0aCA9IGNvbHVtbi53aWR0aDtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRUYWJsZVdpZHRoKCkge1xuICAgIHRoaXMuc2t5V2luZG93Lm5hdGl2ZVdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZ3JpZEFkYXB0ZXIuc2V0U3R5bGUodGhpcy50YWJsZUVsZW1lbnRSZWYsICd3aWR0aCcsIGBhdXRvYCk7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIHRoaXMuZ3JpZEFkYXB0ZXIuc2V0U3R5bGUoXG4gICAgICAgIHRoaXMudGFibGVFbGVtZW50UmVmLFxuICAgICAgICAnd2lkdGgnLFxuICAgICAgICBgJHt0aGlzLnRhYmxlV2lkdGh9cHhgXG4gICAgICApO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldFJhbmdlSW5wdXRCeUluZGV4KGluZGV4OiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5SYW5nZUlucHV0RWxlbWVudFJlZnMuZmluZChcbiAgICAgIChpbnB1dCkgPT5cbiAgICAgICAgaW5wdXQubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3NreS1jbXAtaW5kZXgnKSA9PT0gaW5kZXgudG9TdHJpbmcoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbHVtbk1vZGVsQnlJbmRleChpbmRleDogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheWVkQ29sdW1uc1tOdW1iZXIoaW5kZXgpXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWF4UmFuZ2VCeUluZGV4KGluZGV4OiBzdHJpbmcpIHtcbiAgICBjb25zdCBjb2x1bW5FbGVtZW50UmVmID0gdGhpcy5jb2x1bW5FbGVtZW50UmVmcy5maW5kKFxuICAgICAgKHRoKSA9PiB0aC5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnc2t5LWNtcC1pbmRleCcpID09PSBpbmRleFxuICAgICk7XG4gICAgY29uc3QgcmFuZ2VJbnB1dCA9IGNvbHVtbkVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgJy5za3ktZ3JpZC1jb2x1bW4taW5wdXQtYXJpYS1vbmx5J1xuICAgICk7XG4gICAgcmV0dXJuIE51bWJlcihyYW5nZUlucHV0Lm1heCk7XG4gIH1cblxuICBwcml2YXRlIGdldExhc3REaXNwbGF5ZWRDb2x1bW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q29sdW1uTW9kZWxCeUluZGV4KHRoaXMuZGlzcGxheWVkQ29sdW1ucy5sZW5ndGggLSAxKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkRGVsaW1pdGVyKHRleHQ6IHN0cmluZ1tdLCBkZWxpbWl0ZXI6IHN0cmluZykge1xuICAgIHJldHVybiB0ZXh0LmZpbHRlcigodmFsKSA9PiB2YWwpLmpvaW4oZGVsaW1pdGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVzdHJveVJvd0RlbGV0ZShpZDogc3RyaW5nKSB7XG4gICAgY29uc3Qgcm93RGVsZXRlQ29udGVudHMgPSB0aGlzLnJvd0RlbGV0ZUNvbnRlbnRzW2lkXTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChyb3dEZWxldGVDb250ZW50cykge1xuICAgICAgcm93RGVsZXRlQ29udGVudHMuYWZmaXhlci5kZXN0cm95KCk7XG4gICAgICB0aGlzLm92ZXJsYXlTZXJ2aWNlLmNsb3NlKHJvd0RlbGV0ZUNvbnRlbnRzLm92ZXJsYXkpO1xuICAgICAgZGVsZXRlIHRoaXMucm93RGVsZXRlQ29udGVudHNbaWRdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZW1pdFNlbGVjdGVkUm93cyhzb3VyY2U6IFNreUdyaWRTZWxlY3RlZFJvd3NTb3VyY2UpIHtcbiAgICBjb25zdCBzZWxlY3RlZFJvd3M6IFNreUdyaWRTZWxlY3RlZFJvd3NNb2RlbENoYW5nZSA9IHtcbiAgICAgIHNlbGVjdGVkUm93SWRzOiB0aGlzLmdldFNlbGVjdGVkUm93cygpLFxuICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgfTtcbiAgICB0aGlzLm11bHRpc2VsZWN0U2VsZWN0aW9uQ2hhbmdlLmVtaXQoc2VsZWN0ZWRSb3dzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VsZWN0ZWRSb3dzKCkge1xuICAgIHJldHVybiB0aGlzLml0ZW1zXG4gICAgICAuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiBpdGVtLmlzU2VsZWN0ZWQ7XG4gICAgICB9KVxuICAgICAgLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGl0ZW0uZGF0YSwgdGhpcy5tdWx0aXNlbGVjdFJvd0lkKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gaXRlbS5kYXRhW3RoaXMubXVsdGlzZWxlY3RSb3dJZF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW0uaWQ7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaXNJbnRlcmFjdGl2ZUVsZW1lbnQoZXZlbnQ6IGFueSk6IGFueSB7XG4gICAgY29uc3QgaW50ZXJhY3RpdmVFbFNlbGVjdG9ycyA9IGBcbiAgICAgIGEsXG4gICAgICBidXR0b24sXG4gICAgICBpbnB1dCxcbiAgICAgIGxhYmVsLFxuICAgICAgb3B0aW9uLFxuICAgICAgc2VsZWN0LFxuICAgICAgdGV4dGFyZWEsXG4gICAgICBkZXRhaWxzLFxuICAgICAgZGlhbG9nLFxuICAgICAgbWVudSxcbiAgICAgIG1lbnVpdGVtLFxuICAgICAgc3VtbWFyeWA7XG4gICAgcmV0dXJuIGV2ZW50LnRhcmdldC5jbG9zZXN0KGludGVyYWN0aXZlRWxTZWxlY3RvcnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRSZXNpemVCYXJQb3NpdGlvbih4UG9zaXRpb246IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHBhcmVudFNjcm9sbCA9IHRoaXMudGFibGVDb250YWluZXJFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICBjb25zdCByZXNpemVCYXJYID1cbiAgICAgIHhQb3NpdGlvbiAtXG4gICAgICB0aGlzLnRhYmxlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLVxuICAgICAgcGFyZW50U2Nyb2xsO1xuICAgIHRoaXMuZ3JpZEFkYXB0ZXIuc2V0U3R5bGUodGhpcy5yZXNpemVCYXIsICdsZWZ0JywgcmVzaXplQmFyWCArICdweCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVVzZXJDb25maWcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLnVpQ29uZmlnU2VydmljZVxuICAgICAgICAuZ2V0Q29uZmlnKHRoaXMuc2V0dGluZ3NLZXkpXG4gICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgKGNvbmZpZzogU2t5R3JpZFVJQ29uZmlnKSA9PiB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcuc2VsZWN0ZWRDb2x1bW5JZHMpIHtcbiAgICAgICAgICAgICAgLy8gUmVtb3ZlIGFueSBjb2x1bW5JZHMgdGhhdCBkb24ndCBleGlzdCBpbiB0aGUgY3VycmVudCBkYXRhIHNldC5cbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbklkcyA9IGNvbmZpZy5zZWxlY3RlZENvbHVtbklkcy5maWx0ZXIoKGlkKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuY29sdW1ucy5maW5kKChjb2x1bW4pID0+IGNvbHVtbi5pZCA9PT0gaWQpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldFVzZXJDb25maWcoY29uZmlnOiBTa3lHcmlkVUlDb25maWcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2V0dGluZ3NLZXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnVpQ29uZmlnU2VydmljZVxuICAgICAgLnNldENvbmZpZyh0aGlzLnNldHRpbmdzS2V5LCBjb25maWcpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgICAgICAgKCkgPT4ge30sXG4gICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0NvdWxkIG5vdCBzYXZlIGdyaWQgc2V0dGluZ3MuJyk7XG4gICAgICAgICAgY29uc29sZS53YXJuKGVycik7XG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGluaXRDb2x1bW5zKCk6IHZvaWQge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMuY29sdW1uQ29tcG9uZW50cy5sZW5ndGggIT09IDAgfHwgdGhpcy5jb2x1bW5zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAvKiBzYW5pdHkgY2hlY2sgKi9cbiAgICAgIGlmICh0aGlzLmNvbHVtbkNvbXBvbmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmdldENvbHVtbnNGcm9tQ29tcG9uZW50KCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudHJhbnNmb3JtRGF0YSgpO1xuICAgICAgdGhpcy5zZXREaXNwbGF5ZWRDb2x1bW5zKHRydWUpO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvLyBXYXRjaCBmb3IgYWRkZWQvcmVtb3ZlZCBjb2x1bW5zOlxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jb2x1bW5Db21wb25lbnRzLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBkYXRlQ29sdW1ucygpKVxuICAgICk7XG5cbiAgICAvLyBXYXRjaCBmb3IgY29sdW1uIGhlYWRpbmcgY2hhbmdlczpcbiAgICB0aGlzLmNvbHVtbkNvbXBvbmVudHMuZm9yRWFjaCgoY29tcDogU2t5R3JpZENvbHVtbkNvbXBvbmVudCkgPT4ge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgIGNvbXAuaGVhZGluZ01vZGVsQ2hhbmdlcy5zdWJzY3JpYmUoXG4gICAgICAgICAgKGNoYW5nZTogU2t5R3JpZENvbHVtbkhlYWRpbmdNb2RlbENoYW5nZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5IZWFkaW5nKGNoYW5nZSk7XG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgIGNvbXAuZGVzY3JpcHRpb25Nb2RlbENoYW5nZXMuc3Vic2NyaWJlKFxuICAgICAgICAgIChjaGFuZ2U6IFNreUdyaWRDb2x1bW5EZXNjcmlwdGlvbk1vZGVsQ2hhbmdlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbkRlc2NyaXB0aW9uKGNoYW5nZSk7XG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgIGNvbXAuaW5saW5lSGVscFBvcG92ZXJNb2RlbENoYW5nZXMuc3Vic2NyaWJlKFxuICAgICAgICAgIChjaGFuZ2U6IFNreUdyaWRDb2x1bW5JbmxpbmVIZWxwUG9wb3Zlck1vZGVsQ2hhbmdlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUlubGluZUhlbHBQb3BvdmVyKGNoYW5nZSk7XG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhcnJheXNFcXVhbChhcnJheUE6IGFueVtdLCBhcnJheUI6IGFueVtdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGFycmF5QS5sZW5ndGggPT09IGFycmF5Qi5sZW5ndGggJiZcbiAgICAgIGFycmF5QS5ldmVyeSgodmFsdWUsIGluZGV4KSA9PiB2YWx1ZSA9PT0gYXJyYXlCW2luZGV4XSlcbiAgICApO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic2t5LWdyaWRcIj5cbiAgPGRpdlxuICAgICpuZ0lmPVwic2hvd1RvcFNjcm9sbFwiXG4gICAgY2xhc3M9XCJza3ktZ3JpZC10b3Atc2Nyb2xsLWNvbnRhaW5lclwiXG4gICAgKHNjcm9sbCk9XCJvblRvcFNjcm9sbCgkZXZlbnQpXCJcbiAgICAjdG9wU2Nyb2xsQ29udGFpbmVyXG4gID5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInNreS1ncmlkLXRvcC1zY3JvbGxcIlxuICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImdldFRvcFNjcm9sbFdpZHRoKClcIlxuICAgID48L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICBjbGFzcz1cInNreS1ncmlkLXRhYmxlLWNvbnRhaW5lclwiXG4gICAgW3N0eWxlLmhlaWdodC5weF09XCJoZWlnaHRcIlxuICAgIFtzdHlsZS53aWR0aC5weF09XCJ3aWR0aFwiXG4gICAgKHNjcm9sbCk9XCJvbkdyaWRTY3JvbGwoJGV2ZW50KVwiXG4gICAgI2dyaWRDb250YWluZXJcbiAgPlxuICAgIDx0YWJsZSBjbGFzcz1cInNreS1ncmlkLXRhYmxlXCIgW25nQ2xhc3NdPVwiZ2V0VGFibGVDbGFzc05hbWVzKClcIiAjZ3JpZFRhYmxlPlxuICAgICAgPHRoZWFkPlxuICAgICAgICA8dHIgW2RyYWd1bGFdPVwiZHJhZ3VsYUdyb3VwTmFtZVwiPlxuICAgICAgICAgIDx0aFxuICAgICAgICAgICAgKm5nSWY9XCJlbmFibGVNdWx0aXNlbGVjdFwiXG4gICAgICAgICAgICBjbGFzcz1cInNreS1ncmlkLWhlYWRpbmcgc2t5LWdyaWQtbXVsdGlzZWxlY3QtY2VsbCBza3ktZ3JpZC1oZWFkZXItbG9ja2VkXCJcbiAgICAgICAgICAgIHNjb3BlPVwiY29sXCJcbiAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGgucHhdPVwibWluQ29sV2lkdGhcIlxuICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cIm1pbkNvbFdpZHRoXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNjcmVlbi1yZWFkZXItb25seVwiPlxuICAgICAgICAgICAgICB7eyAnc2t5dXhfZ3JpZF9tdWx0aXNlbGVjdF9zZWxlY3Rfcm93JyB8IHNreUxpYlJlc291cmNlcyB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPHRoXG4gICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgbGV0IGNvbHVtbiBvZiBkaXNwbGF5ZWRDb2x1bW5zO1xuICAgICAgICAgICAgICBsZXQgbGFzdCA9IGxhc3Q7XG4gICAgICAgICAgICAgIGxldCBpID0gaW5kZXhcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cInNreS1ncmlkLWhlYWRpbmcgc2t5LWZpZWxkLWxhYmVsXCJcbiAgICAgICAgICAgIHNjb3BlPVwiY29sXCJcbiAgICAgICAgICAgIFthdHRyLnNreS1jbXAtaW5kZXhdPVwiaVwiXG4gICAgICAgICAgICBbYXR0ci5za3ktY21wLWlkXT1cImNvbHVtbi5pZCB8fCBjb2x1bW4uZmllbGRcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1zb3J0XT1cImdldEFyaWFTb3J0RGlyZWN0aW9uKGNvbHVtbikgfCBhc3luY1wiXG4gICAgICAgICAgICBbaWRdPVwiJ3NreS1ncmlkLScgKyBncmlkSWQgKyAnLWNvbHVtbi0nICsgaVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCInc2t5LWdyaWQtY29sdW1uLWFsaWdubWVudC0nICsgY29sdW1uLmFsaWdubWVudFwiXG4gICAgICAgICAgICBbc3R5bGUubWF4LXdpZHRoLnB4XT1cImNvbHVtbi53aWR0aFwiXG4gICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgICAgIFt0YWJJbmRleF09XCJjb2x1bW4uaXNTb3J0YWJsZSA/IDAgOiAtMVwiXG4gICAgICAgICAgICAobW91c2V1cCk9XCJzb3J0QnlDb2x1bW4oY29sdW1uKVwiXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJvbktleWRvd24oJGV2ZW50LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICh0b3VjaG1vdmUpPVwib25Ub3VjaE1vdmUoJGV2ZW50KVwiXG4gICAgICAgICAgICAjZ3JpZENvbFxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJvdmVyZmxvd1wiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldFRhYmxlSGVhZGVyQ2xhc3NOYW1lcyhjb2x1bW4pXCJcbiAgICAgICAgICAgICAgW3N0eWxlLm1heC13aWR0aC5weF09XCJjb2x1bW4ud2lkdGggLSAxXCJcbiAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImNvbHVtbi53aWR0aCAtIDFcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiKGdldENhcmV0VmlzaWJpbGl0eShjb2x1bW4uZmllbGQpIHwgYXN5bmMpID09PSAnaGlkZGVuJ1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJza3ktZ3JpZC1oZWFkZXItY2FyZXQtaGlkZGVuLXNwYWNpbmdcIlxuICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICA8IS0tIFRoZSBubyBzcGFjaW5nIGhlcmUgaXMgaW50ZW50aW9uYWwgdG8gYXZvaWQgZXh0cmEgc3BhY2VzIGR1ZSB0byB0aGVzZSBiZWluZyBpbmxpbmUgZWxlbWVudHMgLS0+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2t5LWdyaWQtaGVhZGVyLXRleHRcIj57e1xuICAgICAgICAgICAgICAgIGNvbHVtbi5oZWFkaW5nPy50cmltKClcbiAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxza3ktaWNvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2t5LWdyaWQtaGVhZGluZy1zb3J0XCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICdza3ktZ3JpZC1oZWFkaW5nLXNvcnQtJyArXG4gICAgICAgICAgICAgICAgICAoZ2V0Q2FyZXRWaXNpYmlsaXR5KGNvbHVtbi5maWVsZCkgfCBhc3luYylcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFtpY29uXT1cImdldENhcmV0SWNvbk5hbWVzKGNvbHVtbilcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvc2t5LWljb24+XG4gICAgICAgICAgICAgIDxza3ktaGVscC1pbmxpbmVcbiAgICAgICAgICAgICAgICAqbmdJZj1cImNvbHVtbi5pbmxpbmVIZWxwUG9wb3ZlclwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgJ3NreS1ncmlkLWhlbHAtaW5saW5lLXNvcnQtaGlkZGVuJzpcbiAgICAgICAgICAgICAgICAgICAgZ2V0SGVscElubGluZUNsYXNzKGNvbHVtbi5maWVsZCkgfCBhc3luY1xuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIFtza3lQb3BvdmVyXT1cImNvbHVtbi5pbmxpbmVIZWxwUG9wb3ZlclwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAobW91c2V1cCk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvc2t5LWhlbHAtaW5saW5lPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAqbmdJZj1cIihmaXQgPT09ICd3aWR0aCcgJiYgIWxhc3QpIHx8IGZpdCA9PT0gJ3Njcm9sbCdcIlxuICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICBjbGFzcz1cInNreS1ncmlkLXJlc2l6ZS1oYW5kbGVcIlxuICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgW2F0dHIuc2t5LWNtcC1pbmRleF09XCJpXCJcbiAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJvblJlc2l6ZUNvbHVtblN0YXJ0KCRldmVudClcIlxuICAgICAgICAgICAgICAodG91Y2hzdGFydCk9XCJvblJlc2l6ZUNvbHVtblN0YXJ0KCRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJXaWR0aCBvZiBjb2x1bW5cIlxuICAgICAgICAgICAgICBjbGFzcz1cInNreS1ncmlkLWNvbHVtbi1pbnB1dC1hcmlhLW9ubHlcIlxuICAgICAgICAgICAgICByb2xlPVwic2xpZGVyXCJcbiAgICAgICAgICAgICAgdHlwZT1cInJhbmdlXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCInc2t5LWdyaWQtJyArIGdyaWRJZCArICctY29sdW1uLScgKyBpXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW1pbl09XCJtaW5Db2xXaWR0aFwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVtYXhdPVwibWF4Q29sV2lkdGhcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbm93XT1cImNvbHVtbi53aWR0aFwiXG4gICAgICAgICAgICAgIFthdHRyLnNreS1jbXAtaW5kZXhdPVwiaVwiXG4gICAgICAgICAgICAgIFttaW5dPVwibWluQ29sV2lkdGhcIlxuICAgICAgICAgICAgICBbbWF4XT1cIm1heENvbFdpZHRoXCJcbiAgICAgICAgICAgICAgW3N0ZXBdPVwiY29sdW1uUmVzaXplU3RlcFwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgICAgICAgKGJsdXIpPVwib25SZXNpemVIYW5kbGVCbHVyKClcIlxuICAgICAgICAgICAgICAoZm9jdXMpPVwib25SZXNpemVIYW5kbGVGb2N1cygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGtleWRvd24pPVwib25LZXlkb3duUmVzaXplQ29sKCRldmVudClcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uSW5wdXRDaGFuZ2VSZXNpemVDb2woJGV2ZW50KVwiXG4gICAgICAgICAgICAgICNjb2xTaXplUmFuZ2VcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGhlYWQ+XG4gICAgICA8dGJvZHkgY2xhc3M9XCJza3ktZ3JpZC10Ym9keVwiPlxuICAgICAgICA8dHJcbiAgICAgICAgICBjbGFzcz1cInNreS1ncmlkLXJvd1wiXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgIFthdHRyLmFyaWEtY3VycmVudF09XCJpc1Jvd0hpZ2hsaWdodGVkKGl0ZW0uaWQpID8gdHJ1ZSA6IG51bGxcIlxuICAgICAgICAgIFthdHRyLnNreS1jbXAtaWRdPVwiaXRlbS5pZFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ3NreS1ncmlkLW11bHRpc2VsZWN0LXNlbGVjdGVkLXJvdyc6IGl0ZW0uaXNTZWxlY3RlZCxcbiAgICAgICAgICAgICdza3ktZ3JpZC1tdWx0aXNlbGVjdC1yb3cnOiBlbmFibGVNdWx0aXNlbGVjdCxcbiAgICAgICAgICAgICdza3ktZ3JpZC1yb3ctaGlnaGxpZ2h0JzogaXNSb3dIaWdobGlnaHRlZChpdGVtLmlkKVxuICAgICAgICAgIH1cIlxuICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKCRldmVudCwgaXRlbSlcIlxuICAgICAgICA+XG4gICAgICAgICAgPHRkXG4gICAgICAgICAgICAqbmdJZj1cImVuYWJsZU11bHRpc2VsZWN0XCJcbiAgICAgICAgICAgIGNsYXNzPVwic2t5LWdyaWQtbXVsdGlzZWxlY3QtY2VsbCBza3ktZ3JpZC1oZWFkZXItbG9ja2VkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGgucHhdPVwibWluQ29sV2lkdGhcIlxuICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwibWluQ29sV2lkdGhcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c2t5LWNoZWNrYm94XG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidza3l1eF9ncmlkX211bHRpc2VsZWN0X3NlbGVjdF9yb3cnIHwgc2t5TGliUmVzb3VyY2VzXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uTXVsdGlzZWxlY3RDaGVja2JveENoYW5nZSgpXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIml0ZW0uaXNTZWxlY3RlZFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9za3ktY2hlY2tib3g+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgIGxldCBjb2x1bW4gb2YgZGlzcGxheWVkQ29sdW1ucztcbiAgICAgICAgICAgICAgbGV0IGxhc3QgPSBsYXN0O1xuICAgICAgICAgICAgICBsZXQgaSA9IGluZGV4XG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJza3ktZ3JpZC1jZWxsXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIidza3ktZ3JpZC1jb2x1bW4tYWxpZ25tZW50LScgKyBjb2x1bW4uYWxpZ25tZW50XCJcbiAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGgucHhdPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxza3ktZ3JpZC1jZWxsXG4gICAgICAgICAgICAgIFtza3lIaWdobGlnaHRdPVwiXG4gICAgICAgICAgICAgICAgIWNvbHVtbi5leGNsdWRlRnJvbUhpZ2hsaWdodGluZyA/IGhpZ2hsaWdodFRleHQgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW3RlbXBsYXRlXT1cImNvbHVtbi50ZW1wbGF0ZSB8fCBkZWZhdWx0Q2VsbFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW2ZpZWxkU2VsZWN0b3JdPVwiY29sdW1uLmZpZWxkXCJcbiAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICAgIFtjb2x1bW5JZF09XCJjb2x1bW4uaWRcIlxuICAgICAgICAgICAgICBbYXR0ci5za3ktY21wLWlkXT1cImNvbHVtbi5pZCB8fCBjb2x1bW4uZmllbGRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9za3ktZ3JpZC1jZWxsPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3Rib2R5PlxuICAgIDwvdGFibGU+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJzaG93UmVzaXplQmFyXCJcbiAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICBpZD1cInNreS1ncmlkLXJlc2l6ZS1iYXJcIlxuICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAjcmVzaXplQmFyXG4gICAgPjwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRDZWxsVGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiIGxldC12YWx1ZT1cInZhbHVlXCI+e3tcbiAgdmFsdWVcbn19PC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlIGxldC1pdGVtICNpbmxpbmVEZWxldGVUZW1wbGF0ZVJlZj5cbiAgPGRpdlxuICAgIFtpZF09XCIncm93LWRlbGV0ZS1yZWYtJyArIGl0ZW0uaWRcIlxuICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgIGhlaWdodDogZ2V0Um93SGVpZ2h0KDApLFxuICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICB3aWR0aDogdGFibGVXaWR0aCArICdweCdcbiAgICB9XCJcbiAgICAjaW5saW5lRGVsZXRlUmVmXG4gID5cbiAgICA8c2t5LWlubGluZS1kZWxldGVcbiAgICAgIFtwZW5kaW5nXT1cImdldFJvd0RlbGV0ZUl0ZW0oaXRlbS5pZCkucGVuZGluZ1wiXG4gICAgICAoY2FuY2VsVHJpZ2dlcmVkKT1cImNhbmNlbFJvd0RlbGV0ZShpdGVtLmlkKVwiXG4gICAgICAoZGVsZXRlVHJpZ2dlcmVkKT1cImNvbmZpcm1Sb3dEZWxldGUoaXRlbS5pZClcIlxuICAgID48L3NreS1pbmxpbmUtZGVsZXRlPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
package/fesm2015/skyux-grids.mjs
CHANGED
|
@@ -134,7 +134,7 @@ class SkyGridColumnComponent {
|
|
|
134
134
|
this.inlineHelpPopoverModelChanges = new EventEmitter();
|
|
135
135
|
}
|
|
136
136
|
ngOnChanges(changes) {
|
|
137
|
-
if (changes
|
|
137
|
+
if (changes['heading'] && changes['heading'].firstChange === false) {
|
|
138
138
|
this.headingChanges.emit(this.heading);
|
|
139
139
|
this.headingModelChanges.emit({
|
|
140
140
|
value: this.heading,
|
|
@@ -142,7 +142,8 @@ class SkyGridColumnComponent {
|
|
|
142
142
|
field: this.field,
|
|
143
143
|
});
|
|
144
144
|
}
|
|
145
|
-
if (changes
|
|
145
|
+
if (changes['description'] &&
|
|
146
|
+
changes['description'].firstChange === false) {
|
|
146
147
|
this.descriptionChanges.emit(this.description);
|
|
147
148
|
this.descriptionModelChanges.emit({
|
|
148
149
|
value: this.description,
|
|
@@ -150,8 +151,8 @@ class SkyGridColumnComponent {
|
|
|
150
151
|
field: this.field,
|
|
151
152
|
});
|
|
152
153
|
}
|
|
153
|
-
if (changes
|
|
154
|
-
changes
|
|
154
|
+
if (changes['inlineHelpPopover'] &&
|
|
155
|
+
changes['inlineHelpPopover'].firstChange === false) {
|
|
155
156
|
this.inlineHelpPopoverModelChanges.emit({
|
|
156
157
|
value: this.inlineHelpPopover,
|
|
157
158
|
id: this.id,
|
|
@@ -544,7 +545,7 @@ class SkyGridComponent {
|
|
|
544
545
|
this.checkUserColumnWidthsForScroll();
|
|
545
546
|
}
|
|
546
547
|
ngOnChanges(changes) {
|
|
547
|
-
if (changes
|
|
548
|
+
if (changes['columns'] && this.columns) {
|
|
548
549
|
if (this.selectedColumnIds) {
|
|
549
550
|
this.selectedColumnIds = this.selectedColumnIds.filter((columnId) => {
|
|
550
551
|
return this.columns.find((column) => column.id === columnId);
|
|
@@ -552,7 +553,7 @@ class SkyGridComponent {
|
|
|
552
553
|
}
|
|
553
554
|
this.setDisplayedColumns(true);
|
|
554
555
|
}
|
|
555
|
-
if (changes
|
|
556
|
+
if (changes['data'] && this.data) {
|
|
556
557
|
this.transformData();
|
|
557
558
|
// This set timeout is necessary to ensure the data has rendered in the grid
|
|
558
559
|
setTimeout(() => {
|
|
@@ -578,7 +579,7 @@ class SkyGridComponent {
|
|
|
578
579
|
this.checkUserColumnWidthsForScroll();
|
|
579
580
|
});
|
|
580
581
|
}
|
|
581
|
-
if (changes
|
|
582
|
+
if (changes['sortField']) {
|
|
582
583
|
this.setSortHeaders();
|
|
583
584
|
}
|
|
584
585
|
}
|