@cqa-lib/cqa-ui 1.1.466 → 1.1.467
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/compare-runs/compare-runs.component.mjs +1 -1
- package/esm2020/lib/execution-screen/db-query-execution-item/db-query-execution-item.component.mjs +1 -1
- package/esm2020/lib/execution-screen/db-verification-step/db-verification-step.component.mjs +1 -1
- package/esm2020/lib/filters/dynamic-filter/dynamic-filter.component.mjs +6 -2
- package/esm2020/lib/iterations-loop/iterations-loop.component.mjs +1 -1
- package/esm2020/lib/table/dynamic-table/dynamic-cell-container.directive.mjs +5 -3
- package/esm2020/lib/table/dynamic-table/dynamic-table.component.mjs +24 -6
- package/esm2020/lib/templates/table-template.component.mjs +5 -3
- package/fesm2015/cqa-lib-cqa-ui.mjs +42 -14
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +40 -14
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/filters/dynamic-filter/dynamic-filter.component.d.ts +4 -2
- package/lib/table/dynamic-table/dynamic-table.component.d.ts +3 -1
- package/lib/templates/table-template.component.d.ts +2 -1
- package/package.json +1 -1
|
@@ -47,6 +47,9 @@ export class DynamicFilterComponent {
|
|
|
47
47
|
this.buildForm();
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
|
+
ngOnDestroy() {
|
|
51
|
+
this.formValueChangesSub?.unsubscribe();
|
|
52
|
+
}
|
|
50
53
|
onDateChange(event, key) {
|
|
51
54
|
this.invokeDateRangeChange(key, event);
|
|
52
55
|
}
|
|
@@ -70,6 +73,7 @@ export class DynamicFilterComponent {
|
|
|
70
73
|
}
|
|
71
74
|
}
|
|
72
75
|
buildForm() {
|
|
76
|
+
this.formValueChangesSub?.unsubscribe();
|
|
73
77
|
const ctrls = {};
|
|
74
78
|
(this.config || []).forEach(c => {
|
|
75
79
|
if (c.hidden)
|
|
@@ -102,7 +106,7 @@ export class DynamicFilterComponent {
|
|
|
102
106
|
this.hasSelectedFilters = Object.keys(this.serialize()).length > 0;
|
|
103
107
|
// build common ranges for ngx datepicker
|
|
104
108
|
this.ngxRanges = this.buildNgxRanges();
|
|
105
|
-
this.form.valueChanges.subscribe(() => {
|
|
109
|
+
this.formValueChangesSub = this.form.valueChanges.subscribe(() => {
|
|
106
110
|
const serialized = this.serialize();
|
|
107
111
|
this.hasSelectedFilters = Object.keys(serialized).length > 0;
|
|
108
112
|
this.filtersChanged.emit(serialized);
|
|
@@ -431,4 +435,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
431
435
|
type: ViewChildren,
|
|
432
436
|
args: [DynamicSelectFieldComponent]
|
|
433
437
|
}] } });
|
|
434
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9maWx0ZXJzL2R5bmFtaWMtZmlsdGVyL2R5bmFtaWMtZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZmlsdGVycy9keW5hbWljLWZpbHRlci9keW5hbWljLWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFpQixZQUFZLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDbkosT0FBTyxFQUFlLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdyRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQzs7Ozs7Ozs7QUFzRGxHLE1BQU0sT0FBTyxzQkFBc0I7SUFrQmpDLFlBQTZCLEVBQWU7UUFBZixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBakJuQyxXQUFNLEdBQXdCLEVBQUUsQ0FBQztRQUNqQyxVQUFLLEdBQXdCLEVBQUUsQ0FBQztRQUNoQyxvQkFBZSxHQUFZLElBQUksQ0FBQztRQUNoQyxpQkFBWSxHQUFnQyxRQUFRLENBQUM7UUFDcEQsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQztRQUN6RCxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUF1QixDQUFDO1FBQ3pELGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUN2Qyx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQztRQUM3RCx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRXhELFNBQUksR0FBYyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwQyxZQUFPLEdB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QztJQUNkLENBQUM7O21IQWhaVSxzQkFBc0I7dUdBQXRCLHNCQUFzQix5YkFnQm5CLDJCQUEyQixxRUMxRTNDLDJpUUE4SU07MkZEcEZPLHNCQUFzQjtrQkFQbEMsU0FBUzsrQkFDRSxvQkFBb0IsbUJBR2IsdUJBQXVCLENBQUMsTUFBTSxRQUN6QyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7a0dBR3JCLE1BQU07c0JBQWQsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNJLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBT29DLGdCQUFnQjtzQkFBMUQsWUFBWTt1QkFBQywyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkcmVuLCBRdWVyeUxpc3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0RGF0ZXBpY2tlcklucHV0RXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcbmltcG9ydCB7IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB9IGZyb20gJy4uLy4uL2R5bmFtaWMtc2VsZWN0L2R5bmFtaWMtc2VsZWN0LWZpZWxkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEeW5hbWljU2VsZWN0RmllbGRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9keW5hbWljLXNlbGVjdC9keW5hbWljLXNlbGVjdC1maWVsZC5jb21wb25lbnQnO1xuXG50eXBlIEZpbHRlclR5cGUgPSAnc2VsZWN0JyB8ICdkYXRlLXJhbmdlLXBpY2tlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHluYW1pY0ZpbHRlck9wdGlvbiB7XG4gIGlkPzogbnVtYmVyIHwgc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICB2YWx1ZT86IGFueTtcbiAgbGFiZWw/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHluYW1pY0ZpbHRlckl0ZW0ge1xuICBsYWJlbDogc3RyaW5nO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgdHlwZTogRmlsdGVyVHlwZTtcbiAga2V5OiBzdHJpbmc7XG4gIG9wZW5zPzogJ2xlZnQnIHwgJ3JpZ2h0JyB8ICdjZW50ZXInO1xuICBkcm9wcz86ICdkb3duJyB8ICd1cCcgfCAnYXV0byc7XG4gIG9wdGlvbnM/OiBEeW5hbWljRmlsdGVyT3B0aW9uW107XG4gIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBoaWRkZW4/OiBib29sZWFuO1xuICBzZWFyY2hhYmxlPzogYm9vbGVhbjtcbiAgb3B0aW9uU3R5bGU/OiAnY2hlY2ttYXJrJyB8ICdjaGVja2JveCc7XG4gIHNob3dTZWxlY3RBbGw/OiBib29sZWFuO1xuICBzZWxlY3RBbGxMYWJlbD86IHN0cmluZztcbiAgc2VsZWN0ZWRWYWx1ZT86IGFueSB8IGFueVtdO1xuICAvLyBTZXJ2ZXItZHJpdmVuIHNlbGVjdCBzdXBwb3J0IChwYXNzdGhyb3VnaCB0byBjcWEtZHluYW1pYy1zZWxlY3QpXG4gIHNlcnZlclNlYXJjaD86IGJvb2xlYW47XG4gIC8qKiBNb3JlIHJlc3VsdHMgYXZhaWxhYmxlIHNlcnZlci1zaWRlIGZvciBpbmZpbml0ZSBzY3JvbGwgKi9cbiAgaGFzTW9yZT86IGJvb2xlYW47XG4gIC8qKiBFeHRlcm5hbCBsb2FkaW5nIHN0YXRlIGZvciBhc3luYyBmZXRjaGluZyAqL1xuICBpc0xvYWRpbmc/OiBib29sZWFuO1xuICAvKiogQ2FsbGJhY2sgd2hlbiBzZWFyY2ggdGV4dCBjaGFuZ2VzIChzZXJ2ZXIgbW9kZSkgKi9cbiAgb25TZWFyY2g/OiAocXVlcnk6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqIENhbGxiYWNrIHdoZW4gbW9yZSBkYXRhIGlzIHJlcXVlc3RlZCAoaW5maW5pdGUgc2Nyb2xsKSAqL1xuICBvbkxvYWRNb3JlPzogKHF1ZXJ5Pzogc3RyaW5nKSA9PiB2b2lkO1xuICBzZWxlY3RlZFN0YXJ0RGF0ZT86IERhdGUgfCBzdHJpbmc7XG4gIHNlbGVjdGVkRW5kRGF0ZT86IERhdGUgfCBzdHJpbmc7XG4gIG9uRGF0ZUNoYW5nZT86ICh2YWx1ZTogeyBzdGFydDogRGF0ZSB8IG51bGw7IGVuZDogRGF0ZSB8IG51bGwgfSwgZXZlbnQ/OiBNYXREYXRlcGlja2VySW5wdXRFdmVudDxEYXRlPiB8IEV2ZW50KSA9PiB2b2lkO1xuICBwYXJlbnRFbD86IHN0cmluZyB8IEhUTUxFbGVtZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIER5bmFtaWNGaWx0ZXJWYWx1ZXMge1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1keW5hbWljLWZpbHRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9keW5hbWljLWZpbHRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH1cbn0pXG5leHBvcnQgY2xhc3MgRHluYW1pY0ZpbHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIGNvbmZpZzogRHluYW1pY0ZpbHRlckl0ZW1bXSA9IFtdO1xuICBASW5wdXQoKSBtb2RlbDogRHluYW1pY0ZpbHRlclZhbHVlcyA9IHt9O1xuICBASW5wdXQoKSBzaG93RmlsdGVyUGFuZWw6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBidXR0b25MYXlvdXQ6ICdsZWZ0JyB8ICdyaWdodCcgfCAnYm90dG9tJyA9ICdib3R0b20nO1xuICBAT3V0cHV0KCkgZmlsdGVyc0FwcGxpZWQgPSBuZXcgRXZlbnRFbWl0dGVyPER5bmFtaWNGaWx0ZXJWYWx1ZXM+KCk7XG4gIEBPdXRwdXQoKSBmaWx0ZXJzQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RHluYW1pY0ZpbHRlclZhbHVlcz4oKTtcbiAgQE91dHB1dCgpIHJlc2V0QWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgb25BcHBseUZpbHRlckNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxEeW5hbWljRmlsdGVyVmFsdWVzPigpO1xuICBAT3V0cHV0KCkgb25SZXNldEZpbHRlckNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIGZvcm06IEZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe30pO1xuICBtYXhEYXRlID0gbmV3IERhdGUoKTtcbiAgc2VhcmNoVGV4dEJ5S2V5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIHByaXZhdGUgc2VsZWN0T3V0c2lkZUNsZWFudXAgPSBuZXcgTWFwPGFueSwgKCkgPT4gdm9pZD4oKTtcbiAgaGFzU2VsZWN0ZWRGaWx0ZXJzID0gZmFsc2U7XG4gIEBWaWV3Q2hpbGRyZW4oRHluYW1pY1NlbGVjdEZpZWxkQ29tcG9uZW50KSBzZWxlY3RDb21wb25lbnRzPzogUXVlcnlMaXN0PER5bmFtaWNTZWxlY3RGaWVsZENvbXBvbmVudD47XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBmYjogRm9ybUJ1aWxkZXIpIHtcbiAgICAvLyBFbnN1cmUgbWF4RGF0ZSBpcyB0aGUgZW5kIG9mIHRvZGF5LCBzbyBhbnkgZnV0dXJlIGRhdGVzIGFyZSBkaXNhbGxvd2VkXG4gICAgdGhpcy5tYXhEYXRlID0gdGhpcy5lbmRPZkRheShuZXcgRGF0ZSgpKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snY29uZmlnJ10gfHwgY2hhbmdlc1snbW9kZWwnXSkge1xuICAgICAgdGhpcy5idWlsZEZvcm0oKTtcbiAgICB9XG4gIH1cblxuICBvbkRhdGVDaGFuZ2UoZXZlbnQ6IE1hdERhdGVwaWNrZXJJbnB1dEV2ZW50PERhdGU+IHwgRXZlbnQsIGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5pbnZva2VEYXRlUmFuZ2VDaGFuZ2Uoa2V5LCBldmVudCk7XG4gIH1cblxuICAvLyBOR1ggRGF0ZVJhbmdlUGlja2VyIGludGVncmF0aW9uXG4gIG5neERhdGVSYW5nZUJ5S2V5OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gIG5neFJhbmdlczogYW55ID0ge307IC8vIFVzaW5nICdhbnknIHRvIGF2b2lkIERheWpzIHR5cGUgbWlzbWF0Y2ggLSBsaWJyYXJ5IGFjY2VwdHMgRGF0ZSBvYmplY3RzIGF0IHJ1bnRpbWVcbiAgbmd4TG9jYWxlID0geyBjdXN0b21SYW5nZUxhYmVsOiAnQ3VzdG9tIHJhbmdlJyB9O1xuICAvLyBEaXNhYmxlIGFsbCBkYXRlcyBhZnRlciB0b2RheSBpbiB0aGUgbmd4IGRhdGVwaWNrZXJcbiAgZGlzYWJsZUZ1dHVyZURhdGVzID0gKG06IGFueSk6IGJvb2xlYW4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkOiBEYXRlID0gbSAmJiB0eXBlb2YgbS50b0RhdGUgPT09ICdmdW5jdGlvbicgPyBtLnRvRGF0ZSgpIDogbmV3IERhdGUobSk7XG4gICAgICByZXR1cm4gZC5nZXRUaW1lKCkgPiB0aGlzLm1heERhdGUuZ2V0VGltZSgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfTtcbiAgb25OZ3hEYXRlc1VwZGF0ZWQoZTogYW55LCBrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGdyb3VwID0gdGhpcy5nZXREYXRlR3JvdXAoa2V5KTtcbiAgICBpZiAoIWdyb3VwKSByZXR1cm47XG4gICAgY29uc3QgY2xhbXAgPSAoZDogRGF0ZSB8IG51bGwpID0+IChkICYmIGQuZ2V0VGltZSgpID4gdGhpcy5tYXhEYXRlLmdldFRpbWUoKSA/IHRoaXMubWF4RGF0ZSA6IGQpO1xuICAgIGNvbnN0IHN0YXJ0UmF3ID0gZT8uc3RhcnREYXRlID8gKHR5cGVvZiBlLnN0YXJ0RGF0ZS50b0RhdGUgPT09ICdmdW5jdGlvbicgPyBlLnN0YXJ0RGF0ZS50b0RhdGUoKSA6IG5ldyBEYXRlKGUuc3RhcnREYXRlKSkgOiBudWxsO1xuICAgIGNvbnN0IGVuZFJhdyA9IGU/LmVuZERhdGUgPyAodHlwZW9mIGUuZW5kRGF0ZS50b0RhdGUgPT09ICdmdW5jdGlvbicgPyBlLmVuZERhdGUudG9EYXRlKCkgOiBuZXcgRGF0ZShlLmVuZERhdGUpKSA6IG51bGw7XG4gICAgY29uc3Qgc3RhcnQgPSBjbGFtcChzdGFydFJhdyk7XG4gICAgY29uc3QgZW5kID0gY2xhbXAoZW5kUmF3KTtcbiAgICBncm91cC5wYXRjaFZhbHVlKHsgc3RhcnQsIGVuZCB9LCB7IGVtaXRFdmVudDogdHJ1ZSB9KTtcbiAgICBjb25zdCBzZXJpYWxpemVkID0gdGhpcy5zZXJpYWxpemUoKTtcbiAgICB0aGlzLmhhc1NlbGVjdGVkRmlsdGVycyA9IE9iamVjdC5rZXlzKHNlcmlhbGl6ZWQpLmxlbmd0aCA+IDA7XG4gICAgaWYgKHN0YXJ0ICYmIGVuZCAmJiBncm91cC52YWxpZCkge1xuICAgICAgdGhpcy5hcHBseSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlcnNDaGFuZ2VkLmVtaXQoc2VyaWFsaXplZCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZvcm0oKTogdm9pZCB7XG4gICAgY29uc3QgY3RybHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICAodGhpcy5jb25maWcgfHwgW10pLmZvckVhY2goYyA9PiB7XG4gICAgICBpZiAoYy5oaWRkZW4pIHJldHVybjtcbiAgICAgIGlmIChjLnR5cGUgPT09ICdkYXRlLXJhbmdlLXBpY2tlcicpIHtcbiAgICAgICAgY29uc3QgaW5pdGlhbFJhbmdlID0gdGhpcy5nZXRJbml0aWFsRGF0ZVJhbmdlVmFsdWUoYyk7XG4gICAgICAgIGN0cmxzW2Mua2V5XSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICAgIHN0YXJ0OiBuZXcgRm9ybUNvbnRyb2woaW5pdGlhbFJhbmdlLnN0YXJ0KSxcbiAgICAgICAgICBlbmQ6IG5ldyBGb3JtQ29udHJvbChpbml0aWFsUmFuZ2UuZW5kKSxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGluaXRpYWxpemUgbmd4IG1vZGVsIGRpc3BsYXlcbiAgICAgICAgdGhpcy5uZ3hEYXRlUmFuZ2VCeUtleVtjLmtleV0gPSB7XG4gICAgICAgICAgc3RhcnREYXRlOiBpbml0aWFsUmFuZ2Uuc3RhcnQgfHwgbnVsbCxcbiAgICAgICAgICBlbmREYXRlOiBpbml0aWFsUmFuZ2UuZW5kIHx8IG51bGxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGluaXRpYWwgPSB0aGlzLnJlc29sdmVJbml0aWFsU2VsZWN0VmFsdWUoYyk7XG4gICAgICAgIGlmIChjLm11bHRpcGxlKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBBcnJheS5pc0FycmF5KGluaXRpYWwpID8gaW5pdGlhbCA6IChpbml0aWFsICE9IG51bGwgPyBbaW5pdGlhbF0gOiBbXSk7XG4gICAgICAgICAgY3RybHNbYy5rZXldID0gbmV3IEZvcm1Db250cm9sKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdHJsc1tjLmtleV0gPSBuZXcgRm9ybUNvbnRyb2wodGhpcy5jb2VyY2VUb1NpbmdsZVZhbHVlKGluaXRpYWwpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoY3RybHMpO1xuICAgIC8vIGluaXRpYWxpemUgYXBwbHkgYnV0dG9uIHN0YXRlIGJhc2VkIG9uIGluaXRpYWwgdmFsdWVzXG4gICAgdGhpcy5oYXNTZWxlY3RlZEZpbHRlcnMgPSBPYmplY3Qua2V5cyh0aGlzLnNlcmlhbGl6ZSgpKS5sZW5ndGggPiAwO1xuICAgIC8vIGJ1aWxkIGNvbW1vbiByYW5nZXMgZm9yIG5neCBkYXRlcGlja2VyXG4gICAgdGhpcy5uZ3hSYW5nZXMgPSB0aGlzLmJ1aWxkTmd4UmFuZ2VzKCk7XG4gICAgdGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IHRoaXMuc2VyaWFsaXplKCk7XG4gICAgICB0aGlzLmhhc1NlbGVjdGVkRmlsdGVycyA9IE9iamVjdC5rZXlzKHNlcmlhbGl6ZWQpLmxlbmd0aCA+IDA7XG4gICAgICB0aGlzLmZpbHRlcnNDaGFuZ2VkLmVtaXQoc2VyaWFsaXplZCk7XG4gICAgfSk7XG4gIH1cblxuICBvblNlbGVjdE9wZW5lZENoYW5nZShvcGVuZWQ6IGJvb2xlYW4sIHNlbGVjdDogYW55KTogdm9pZCB7XG4gICAgaWYgKG9wZW5lZCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IG9uRG9jRG93biA9IChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY2RrLW92ZXJsYXktcGFuZSAubWF0LXNlbGVjdC1wYW5lbCcpIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICAgICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBOb2RlIHwgbnVsbDtcbiAgICAgICAgICBjb25zdCBvcmlnaW5FbCA9IChzZWxlY3Q/Ll9lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KSB8fCBudWxsO1xuICAgICAgICAgIGNvbnN0IGluc2lkZVBhbmVsID0gISEocGFuZWwgJiYgdGFyZ2V0ICYmIHBhbmVsLmNvbnRhaW5zKHRhcmdldCkpO1xuICAgICAgICAgIGNvbnN0IGluc2lkZU9yaWdpbiA9ICEhKG9yaWdpbkVsICYmIHRhcmdldCAmJiBvcmlnaW5FbC5jb250YWlucyh0YXJnZXQpKTtcbiAgICAgICAgICBpZiAoIWluc2lkZVBhbmVsICYmICFpbnNpZGVPcmlnaW4pIHtcbiAgICAgICAgICAgIHNlbGVjdC5jbG9zZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgb25Eb2NEb3duLCB0cnVlKTtcbiAgICAgICAgdGhpcy5zZWxlY3RPdXRzaWRlQ2xlYW51cC5zZXQoc2VsZWN0LCAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBvbkRvY0Rvd24sIHRydWUpKTtcbiAgICAgIH0sIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjbGVhbnVwID0gdGhpcy5zZWxlY3RPdXRzaWRlQ2xlYW51cC5nZXQoc2VsZWN0KTtcbiAgICAgIGlmIChjbGVhbnVwKSBjbGVhbnVwKCk7XG4gICAgICB0aGlzLnNlbGVjdE91dHNpZGVDbGVhbnVwLmRlbGV0ZShzZWxlY3QpO1xuICAgIH1cbiAgfVxuXG4gIG9uU2VhcmNoKGtleTogc3RyaW5nLCB0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaFRleHRCeUtleVtrZXldID0gKHRleHQgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICBmaWx0ZXJlZE9wdGlvbnMoaXRlbTogRHluYW1pY0ZpbHRlckl0ZW0pOiBEeW5hbWljRmlsdGVyT3B0aW9uW10ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBpdGVtPy5vcHRpb25zIHx8IFtdO1xuICAgIGNvbnN0IHEgPSAodGhpcy5zZWFyY2hUZXh0QnlLZXlbaXRlbS5rZXldIHx8ICcnKS50cmltKCk7XG4gICAgaWYgKCFxKSByZXR1cm4gb3B0aW9ucztcbiAgICByZXR1cm4gb3B0aW9ucy5maWx0ZXIob3B0ID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSAob3B0Lm5hbWUgPz8gb3B0LmxhYmVsID8/IFN0cmluZyhvcHQudmFsdWUgPz8gJycpKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIG5hbWUuaW5jbHVkZXMocSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXREYXRlR3JvdXAoa2V5OiBzdHJpbmcpOiBGb3JtR3JvdXAge1xuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KGtleSkgYXMgRm9ybUdyb3VwO1xuICB9XG5cbiAgZ2V0U2VsZWN0Q29uZmlnKGl0ZW06IER5bmFtaWNGaWx0ZXJJdGVtKTogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAga2V5OiBpdGVtLmtleSxcbiAgICAgIGxhYmVsOiBpdGVtLmxhYmVsLFxuICAgICAgcGxhY2Vob2xkZXI6IGl0ZW0ucGxhY2Vob2xkZXIsXG4gICAgICBkaXNhYmxlZDogaXRlbS5kaXNhYmxlZCxcbiAgICAgIG11bHRpcGxlOiBpdGVtLm11bHRpcGxlLFxuICAgICAgc2VhcmNoYWJsZTogaXRlbS5zZWFyY2hhYmxlLFxuICAgICAgb3B0aW9uU3R5bGU6IGl0ZW0ub3B0aW9uU3R5bGUsXG4gICAgICBzaG93U2VsZWN0QWxsOiBpdGVtLnNob3dTZWxlY3RBbGwsXG4gICAgICBzZWxlY3RBbGxMYWJlbDogaXRlbS5zZWxlY3RBbGxMYWJlbCxcbiAgICAgIHNlbGVjdGVkVmFsdWU6IGl0ZW0uc2VsZWN0ZWRWYWx1ZSxcbiAgICAgIHNlcnZlclNlYXJjaDogaXRlbS5zZXJ2ZXJTZWFyY2gsXG4gICAgICBoYXNNb3JlOiBpdGVtLmhhc01vcmUsXG4gICAgICBpc0xvYWRpbmc6IGl0ZW0uaXNMb2FkaW5nLFxuICAgICAgb25TZWFyY2g6IGl0ZW0ub25TZWFyY2gsXG4gICAgICBvbkxvYWRNb3JlOiBpdGVtLm9uTG9hZE1vcmUsXG4gICAgICBvcHRpb25zOiBpdGVtLm9wdGlvbnMgfHwgW11cbiAgICB9O1xuICB9XG5cbiAgYXBwbHkoKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZUFsbE9wZW5TZWxlY3RzKCk7XG4gICAgY29uc3QgZmlsdGVyVmFsdWVzID0gdGhpcy5zZXJpYWxpemUoKTtcbiAgICB0aGlzLmZpbHRlcnNBcHBsaWVkLmVtaXQoZmlsdGVyVmFsdWVzKTtcbiAgICB0aGlzLm9uQXBwbHlGaWx0ZXJDbGljay5lbWl0KGZpbHRlclZhbHVlcyk7XG4gIH1cblxuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlQWxsT3BlblNlbGVjdHMoKTtcbiAgICBPYmplY3Qua2V5cyh0aGlzLmZvcm0uY29udHJvbHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGNvbnN0IGN0cmwgPSB0aGlzLmZvcm0uZ2V0KGtleSk7XG4gICAgICBpZiAoY3RybCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgICAgICBjdHJsLmdldCgnc3RhcnQnKT8uc2V0VmFsdWUodW5kZWZpbmVkKTtcbiAgICAgICAgY3RybC5nZXQoJ2VuZCcpPy5zZXRWYWx1ZSh1bmRlZmluZWQpO1xuICAgICAgICAvLyBDbGVhciB0aGUgZGF0ZSByYW5nZSBwaWNrZXIgZGlzcGxheSBtb2RlbFxuICAgICAgICBpZiAodGhpcy5uZ3hEYXRlUmFuZ2VCeUtleVtrZXldKSB7XG4gICAgICAgICAgdGhpcy5uZ3hEYXRlUmFuZ2VCeUtleVtrZXldID0ge1xuICAgICAgICAgICAgc3RhcnREYXRlOiBudWxsLFxuICAgICAgICAgICAgZW5kRGF0ZTogbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnZva2VEYXRlUmFuZ2VDaGFuZ2Uoa2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN0cmw/LnNldFZhbHVlKHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5yZXNldEFjdGlvbi5lbWl0KCk7XG4gICAgdGhpcy5vblJlc2V0RmlsdGVyQ2xpY2suZW1pdCgpO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSB0aGlzLnNlcmlhbGl6ZSgpO1xuICAgIHRoaXMuaGFzU2VsZWN0ZWRGaWx0ZXJzID0gT2JqZWN0LmtleXMoc2VyaWFsaXplZCkubGVuZ3RoID4gMDtcbiAgICB0aGlzLmZpbHRlcnNDaGFuZ2VkLmVtaXQoc2VyaWFsaXplZCk7XG4gIH1cblxuICAvKiogQ2xvc2UgYW55IG9wZW4gTWF0U2VsZWN0IHBhbmVscyBiZWZvcmUgcHJpbWFyeSBhY3Rpb25zIHRvIGF2b2lkIGRvdWJsZS1jbGljayBpc3N1ZXMgKi9cbiAgcHJlcGFyZVByaW1hcnlBY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZUFsbE9wZW5TZWxlY3RzKCk7XG4gIH1cblxuICBwcml2YXRlIGNsb3NlQWxsT3BlblNlbGVjdHMoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50cz8uZm9yRWFjaChjID0+IGMuY2xvc2VQYW5lbCgpKTtcbiAgICB9IGNhdGNoIHt9XG4gIH1cblxuICBwcml2YXRlIHNlcmlhbGl6ZSgpOiBEeW5hbWljRmlsdGVyVmFsdWVzIHtcbiAgICBjb25zdCByZXN1bHQ6IER5bmFtaWNGaWx0ZXJWYWx1ZXMgPSB7fTtcbiAgICAodGhpcy5jb25maWcgfHwgW10pLmZvckVhY2goYyA9PiB7XG4gICAgICBjb25zdCBjdHJsID0gdGhpcy5mb3JtLmdldChjLmtleSk7XG4gICAgICBpZiAoIWN0cmwpIHJldHVybjtcbiAgICAgIGxldCB2YWw6IGFueSA9IGN0cmwgaW5zdGFuY2VvZiBGb3JtR3JvdXAgPyAoY3RybCBhcyBGb3JtR3JvdXApLmdldFJhd1ZhbHVlKCkgOiBjdHJsLnZhbHVlO1xuICAgICAgaWYgKGMudHlwZSA9PT0gJ2RhdGUtcmFuZ2UtcGlja2VyJykge1xuICAgICAgICBjb25zdCBzdGFydCA9IHZhbD8uc3RhcnQ7IGNvbnN0IGVuZCA9IHZhbD8uZW5kO1xuICAgICAgICBpZiAoc3RhcnQgfHwgZW5kKSByZXN1bHRbYy5rZXldID0geyBzdGFydCwgZW5kIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQgJiYgdmFsICE9PSBudWxsICYmIChBcnJheS5pc0FycmF5KHZhbCkgPyB2YWwubGVuZ3RoID4gMCA6IHZhbCAhPT0gJycpKSB7XG4gICAgICAgICAgcmVzdWx0W2Mua2V5XSA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVJbml0aWFsU2VsZWN0VmFsdWUoaXRlbTogRHluYW1pY0ZpbHRlckl0ZW0pOiBhbnkge1xuICAgIGlmICh0aGlzLm1vZGVsICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLm1vZGVsLCBpdGVtLmtleSkpIHtcbiAgICAgIHJldHVybiB0aGlzLm1vZGVsW2l0ZW0ua2V5XTtcbiAgICB9XG4gICAgaWYgKGl0ZW0uc2VsZWN0ZWRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gaXRlbS5zZWxlY3RlZFZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBjb2VyY2VUb1NpbmdsZVZhbHVlKHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLmxlbmd0aCA/IHZhbHVlWzBdIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGdldEluaXRpYWxEYXRlUmFuZ2VWYWx1ZShpdGVtOiBEeW5hbWljRmlsdGVySXRlbSk6IHsgc3RhcnQ6IERhdGUgfCBudWxsOyBlbmQ6IERhdGUgfCBudWxsIH0ge1xuICAgIGNvbnN0IG1vZGVsVmFsdWUgPSB0aGlzLm1vZGVsPy5baXRlbS5rZXldO1xuICAgIGNvbnN0IHN0YXJ0U291cmNlID0gbW9kZWxWYWx1ZT8uc3RhcnQgPz8gaXRlbS5zZWxlY3RlZFN0YXJ0RGF0ZSA/PyBudWxsO1xuICAgIGNvbnN0IGVuZFNvdXJjZSA9IG1vZGVsVmFsdWU/LmVuZCA/PyBpdGVtLnNlbGVjdGVkRW5kRGF0ZSA/PyBudWxsO1xuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5ub3JtYWxpemVEYXRlVmFsdWUoc3RhcnRTb3VyY2UpO1xuICAgIGNvbnN0IGVuZCA9IHRoaXMubm9ybWFsaXplRGF0ZVZhbHVlKGVuZFNvdXJjZSk7XG4gICAgY29uc3QgY2xhbXAgPSAoZDogRGF0ZSB8IG51bGwpID0+IChkICYmIGQuZ2V0VGltZSgpID4gdGhpcy5tYXhEYXRlLmdldFRpbWUoKSA/IHRoaXMubWF4RGF0ZSA6IGQpO1xuICAgIHJldHVybiB7IHN0YXJ0OiBjbGFtcChzdGFydCksIGVuZDogY2xhbXAoZW5kKSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVEYXRlVmFsdWUodmFsdWU6IGFueSk6IERhdGUgfCBudWxsIHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTih2YWx1ZS5nZXRUaW1lKCkpKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGNvbnN0IHBhcnNlZCA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICByZXR1cm4gaXNOYU4ocGFyc2VkLmdldFRpbWUoKSkgPyBudWxsIDogcGFyc2VkO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnZva2VEYXRlUmFuZ2VDaGFuZ2Uoa2V5OiBzdHJpbmcsIGV2ZW50PzogTWF0RGF0ZXBpY2tlcklucHV0RXZlbnQ8RGF0ZT4gfCBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGl0ZW0gPSAodGhpcy5jb25maWcgfHwgW10pLmZpbmQoY2ZnID0+IGNmZy5rZXkgPT09IGtleSk7XG4gICAgaWYgKCFpdGVtPy5vbkRhdGVDaGFuZ2UpIHJldHVybjtcbiAgICBjb25zdCBkYXRlR3JvdXAgPSB0aGlzLmdldERhdGVHcm91cChrZXkpO1xuICAgIGlmICghZGF0ZUdyb3VwKSByZXR1cm47XG4gICAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSBkYXRlR3JvdXAuZ2V0UmF3VmFsdWUoKSB8fCB7fTtcbiAgICBpdGVtLm9uRGF0ZUNoYW5nZShcbiAgICAgIHtcbiAgICAgICAgc3RhcnQ6IHRoaXMubm9ybWFsaXplRGF0ZVZhbHVlKHN0YXJ0KSxcbiAgICAgICAgZW5kOiB0aGlzLm5vcm1hbGl6ZURhdGVWYWx1ZShlbmQpLFxuICAgICAgfSxcbiAgICAgIGV2ZW50XG4gICAgKTtcbiAgfVxuXG4gIC8vIE1hdCBkYXRlIHJhbmdlIHBpY2tlciBvdmVybGF5IHByZXNldCBoZWxwZXJzXG4gIGFwcGx5UHJlc2V0VG9Hcm91cChrZXk6IHN0cmluZywgcHJlc2V0S2V5OiAndG9kYXknIHwgJ2xhc3Q3ZGF5cycgfCAnbGFzdDMwZGF5cycgfCAnbGFzdDkwZGF5cycgfCAndGhpc21vbnRoJyB8ICdsYXN0bW9udGgnKTogdm9pZCB7XG4gICAgY29uc3QgZGF0ZUdyb3VwID0gdGhpcy5nZXREYXRlR3JvdXAoa2V5KTtcbiAgICBpZiAoIWRhdGVHcm91cCkgcmV0dXJuO1xuICAgIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gdGhpcy5nZXRQcmVzZXREYXRlcyhwcmVzZXRLZXkpO1xuICAgIGRhdGVHcm91cC5wYXRjaFZhbHVlKHsgc3RhcnQsIGVuZCB9KTtcbiAgICB0aGlzLmZpbHRlcnNDaGFuZ2VkLmVtaXQodGhpcy5zZXJpYWxpemUoKSk7XG4gICAgdGhpcy5pbnZva2VEYXRlUmFuZ2VDaGFuZ2Uoa2V5KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UHJlc2V0RGF0ZXMocHJlc2V0S2V5OiAndG9kYXknIHwgJ2xhc3Q3ZGF5cycgfCAnbGFzdDMwZGF5cycgfCAnbGFzdDkwZGF5cycgfCAndGhpc21vbnRoJyB8ICdsYXN0bW9udGgnKTogeyBzdGFydDogRGF0ZTsgZW5kOiBEYXRlIH0ge1xuICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBjbGFtcFRvRW5kT2ZUb2RheSA9IChkOiBEYXRlKSA9PiB7IGNvbnN0IG5kID0gbmV3IERhdGUoZCk7IG5kLnNldEhvdXJzKDIzLDU5LDU5LDk5OSk7IHJldHVybiBuZDsgfTtcbiAgICBzd2l0Y2ggKHByZXNldEtleSkge1xuICAgICAgY2FzZSAndG9kYXknOlxuICAgICAgICByZXR1cm4geyBzdGFydDogdG9kYXksIGVuZDogdG9kYXkgfTtcbiAgICAgIGNhc2UgJ2xhc3Q3ZGF5cyc6IHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSgpOyBzdGFydC5zZXREYXRlKHN0YXJ0LmdldERhdGUoKSAtIDYpO1xuICAgICAgICByZXR1cm4geyBzdGFydCwgZW5kOiB0b2RheSB9O1xuICAgICAgfVxuICAgICAgY2FzZSAnbGFzdDMwZGF5cyc6IHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSgpOyBzdGFydC5zZXREYXRlKHN0YXJ0LmdldERhdGUoKSAtIDI5KTtcbiAgICAgICAgcmV0dXJuIHsgc3RhcnQsIGVuZDogdG9kYXkgfTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2xhc3Q5MGRheXMnOiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUoKTsgc3RhcnQuc2V0RGF0ZShzdGFydC5nZXREYXRlKCkgLSA4OSk7XG4gICAgICAgIHJldHVybiB7IHN0YXJ0LCBlbmQ6IHRvZGF5IH07XG4gICAgICB9XG4gICAgICBjYXNlICd0aGlzbW9udGgnOiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUodG9kYXkuZ2V0RnVsbFllYXIoKSwgdG9kYXkuZ2V0TW9udGgoKSwgMSk7XG4gICAgICAgIHJldHVybiB7IHN0YXJ0LCBlbmQ6IHRvZGF5IH07XG4gICAgICB9XG4gICAgICBjYXNlICdsYXN0bW9udGgnOiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUodG9kYXkuZ2V0RnVsbFllYXIoKSwgdG9kYXkuZ2V0TW9udGgoKSAtIDEsIDEpO1xuICAgICAgICBjb25zdCBlbmQgPSBuZXcgRGF0ZSh0b2RheS5nZXRGdWxsWWVhcigpLCB0b2RheS5nZXRNb250aCgpLCAwKTtcbiAgICAgICAgcmV0dXJuIHsgc3RhcnQsIGVuZDogY2xhbXBUb0VuZE9mVG9kYXkoZW5kKSB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIHN0YXJ0T2ZEYXkoZDogRGF0ZSk6IERhdGUgeyBjb25zdCBuZCA9IG5ldyBEYXRlKGQpOyBuZC5zZXRIb3VycygwLDAsMCwwKTsgcmV0dXJuIG5kOyB9XG4gIHByaXZhdGUgZW5kT2ZEYXkoZDogRGF0ZSk6IERhdGUgeyBjb25zdCBuZCA9IG5ldyBEYXRlKGQpOyBuZC5zZXRIb3VycygyMyw1OSw1OSw5OTkpOyByZXR1cm4gbmQ7IH1cbiAgcHJpdmF0ZSBzdGFydE9mTW9udGgoeWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyKTogRGF0ZSB7IHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSwgMCwwLDAsMCk7IH1cbiAgcHJpdmF0ZSBlbmRPZk1vbnRoKHllYXI6IG51bWJlciwgbW9udGg6IG51bWJlcik6IERhdGUgeyByZXR1cm4gbmV3IERhdGUoeWVhciwgbW9udGggKyAxLCAwLCAyMyw1OSw1OSw5OTkpOyB9XG4gIHByaXZhdGUgYnVpbGROZ3hSYW5nZXMoKTogUmVjb3JkPHN0cmluZywgW0RhdGUsIERhdGVdPiB7XG4gICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IGxhc3Q3U3RhcnQgPSBuZXcgRGF0ZSgpOyBsYXN0N1N0YXJ0LnNldERhdGUobGFzdDdTdGFydC5nZXREYXRlKCkgLSA2KTtcbiAgICBjb25zdCBsYXN0MzBTdGFydCA9IG5ldyBEYXRlKCk7IGxhc3QzMFN0YXJ0LnNldERhdGUobGFzdDMwU3RhcnQuZ2V0RGF0ZSgpIC0gMjkpO1xuICAgIGNvbnN0IGxhc3Q5MFN0YXJ0ID0gbmV3IERhdGUoKTsgbGFzdDkwU3RhcnQuc2V0RGF0ZShsYXN0OTBTdGFydC5nZXREYXRlKCkgLSA4OSk7XG4gICAgY29uc3QgdGhpc01vbnRoU3RhcnQgPSB0aGlzLnN0YXJ0T2ZNb250aCh0b2RheS5nZXRGdWxsWWVhcigpLCB0b2RheS5nZXRNb250aCgpKTtcbiAgICBjb25zdCBsYXN0TW9udGhTdGFydCA9IHRoaXMuc3RhcnRPZk1vbnRoKHRvZGF5LmdldEZ1bGxZZWFyKCksIHRvZGF5LmdldE1vbnRoKCkgLSAxKTtcbiAgICBjb25zdCBsYXN0TW9udGhFbmQgPSB0aGlzLmVuZE9mTW9udGgodG9kYXkuZ2V0RnVsbFllYXIoKSwgdG9kYXkuZ2V0TW9udGgoKSAtIDEpO1xuICAgIHJldHVybiB7XG4gICAgICAnVG9kYXknOiBbdGhpcy5zdGFydE9mRGF5KHRvZGF5KSwgdGhpcy5lbmRPZkRheSh0b2RheSldLFxuICAgICAgJ0xhc3QgNyBEYXlzJzogW3RoaXMuc3RhcnRPZkRheShsYXN0N1N0YXJ0KSwgdGhpcy5lbmRPZkRheSh0b2RheSldLFxuICAgICAgJ0xhc3QgMzAgRGF5cyc6IFt0aGlzLnN0YXJ0T2ZEYXkobGFzdDMwU3RhcnQpLCB0aGlzLmVuZE9mRGF5KHRvZGF5KV0sXG4gICAgICAnTGFzdCA5MCBEYXlzJzogW3RoaXMuc3RhcnRPZkRheShsYXN0OTBTdGFydCksIHRoaXMuZW5kT2ZEYXkodG9kYXkpXSxcbiAgICAgICdUaGlzIE1vbnRoJzogW3RoaXMuc3RhcnRPZkRheSh0aGlzTW9udGhTdGFydCksIHRoaXMuZW5kT2ZEYXkodG9kYXkpXSxcbiAgICAgICdMYXN0IE1vbnRoJzogW3RoaXMuc3RhcnRPZkRheShsYXN0TW9udGhTdGFydCksIHRoaXMuZW5kT2ZEYXkobGFzdE1vbnRoRW5kKV0sXG4gICAgfTtcbiAgfVxuICBvbkRhdGVyYW5nZXBpY2tlckNoYW5nZShldmVudDogeyBzdGFydERhdGU6IERhdGUgfCBudWxsOyBlbmREYXRlOiBEYXRlIHwgbnVsbCB9LCBrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGdyb3VwID0gdGhpcy5nZXREYXRlR3JvdXAoa2V5KTtcbiAgICBpZiAoIWdyb3VwKSByZXR1cm47XG4gICAgXG4gICAgZ3JvdXAucGF0Y2hWYWx1ZSh7XG4gICAgICBzdGFydDogZXZlbnQuc3RhcnREYXRlLFxuICAgICAgZW5kOiBldmVudC5lbmREYXRlXG4gICAgfSwgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gICAgXG4gICAgY29uc3Qgc2VyaWFsaXplZCA9IHRoaXMuc2VyaWFsaXplKCk7XG4gICAgdGhpcy5oYXNTZWxlY3RlZEZpbHRlcnMgPSBPYmplY3Qua2V5cyhzZXJpYWxpemVkKS5sZW5ndGggPiAwO1xuICAgIHRoaXMuZmlsdGVyc0NoYW5nZWQuZW1pdChzZXJpYWxpemVkKTtcbiAgICB0aGlzLmludm9rZURhdGVSYW5nZUNoYW5nZShrZXkpO1xuICB9XG5cbiAgb25EYXRlcmFuZ2VwaWNrZXJBcHBseShldmVudDogeyBzdGFydERhdGU6IERhdGUgfCBudWxsOyBlbmREYXRlOiBEYXRlIHwgbnVsbCB9LCBrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMub25EYXRlcmFuZ2VwaWNrZXJDaGFuZ2UoZXZlbnQsIGtleSk7XG4gICAgLy8gT3B0aW9uYWxseSB0cmlnZ2VyIGFwcGx5IGFjdGlvblxuICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSB0aGlzLnNlcmlhbGl6ZSgpO1xuICAgIGlmIChldmVudC5zdGFydERhdGUgJiYgZXZlbnQuZW5kRGF0ZSkge1xuICAgICAgLy8gRG9uJ3QgYXV0by1hcHBseSwgbGV0IHVzZXIgY2xpY2sgQXBwbHkgRmlsdGVyIGJ1dHRvblxuICAgIH1cbiAgfVxuXG4gIGdldERhdGVyYW5nZXBpY2tlclJhbmdlcygpOiBhbnkge1xuICAgIC8vIFVzZSB0aGUgZXhpc3RpbmcgZ2V0UHJlc2V0RGF0ZXMgbG9naWMgdG8gZW5zdXJlIGNvbnNpc3RlbmN5XG4gICAgY29uc3QgdG9kYXlQcmVzZXQgPSB0aGlzLmdldFByZXNldERhdGVzKCd0b2RheScpO1xuICAgIGNvbnN0IGxhc3Q3UHJlc2V0ID0gdGhpcy5nZXRQcmVzZXREYXRlcygnbGFzdDdkYXlzJyk7XG4gICAgY29uc3QgbGFzdDMwUHJlc2V0ID0gdGhpcy5nZXRQcmVzZXREYXRlcygnbGFzdDMwZGF5cycpO1xuICAgIGNvbnN0IGxhc3Q5MFByZXNldCA9IHRoaXMuZ2V0UHJlc2V0RGF0ZXMoJ2xhc3Q5MGRheXMnKTtcbiAgICBjb25zdCB0aGlzTW9udGhQcmVzZXQgPSB0aGlzLmdldFByZXNldERhdGVzKCd0aGlzbW9udGgnKTtcbiAgICBjb25zdCBsYXN0TW9udGhQcmVzZXQgPSB0aGlzLmdldFByZXNldERhdGVzKCdsYXN0bW9udGgnKTtcbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgJ1RvZGF5JzogW3RvZGF5UHJlc2V0LnN0YXJ0LCB0aGlzLmVuZE9mRGF5KHRvZGF5UHJlc2V0LmVuZCldLFxuICAgICAgJ0xhc3QgNyBEYXlzJzogW2xhc3Q3UHJlc2V0LnN0YXJ0LCB0aGlzLmVuZE9mRGF5KGxhc3Q3UHJlc2V0LmVuZCldLFxuICAgICAgJ0xhc3QgMzAgRGF5cyc6IFtsYXN0MzBQcmVzZXQuc3RhcnQsIHRoaXMuZW5kT2ZEYXkobGFzdDMwUHJlc2V0LmVuZCldLFxuICAgICAgJ0xhc3QgOTAgRGF5cyc6IFtsYXN0OTBQcmVzZXQuc3RhcnQsIHRoaXMuZW5kT2ZEYXkobGFzdDkwUHJlc2V0LmVuZCldLFxuICAgICAgJ1RoaXMgTW9udGgnOiBbdGhpc01vbnRoUHJlc2V0LnN0YXJ0LCB0aGlzLmVuZE9mRGF5KHRoaXNNb250aFByZXNldC5lbmQpXSxcbiAgICAgICdMYXN0IE1vbnRoJzogW2xhc3RNb250aFByZXNldC5zdGFydCwgdGhpcy5lbmRPZkRheShsYXN0TW9udGhQcmVzZXQuZW5kKV1cbiAgICB9O1xuICB9XG5cbiAgZ2V0RGF0ZVZhbGlkYXRpb25FcnJvcihrZXk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGRhdGVHcm91cCA9IHRoaXMuZ2V0RGF0ZUdyb3VwKGtleSk7XG4gICAgaWYgKCFkYXRlR3JvdXApIHJldHVybiBudWxsO1xuXG4gICAgY29uc3Qgc3RhcnRDdHJsID0gZGF0ZUdyb3VwLmNvbnRyb2xzWydzdGFydCddO1xuICAgIGNvbnN0IGVuZEN0cmwgPSBkYXRlR3JvdXAuY29udHJvbHNbJ2VuZCddO1xuICAgIGNvbnN0IHN0YXJ0VmFsID0gc3RhcnRDdHJsPy52YWx1ZTtcbiAgICBjb25zdCBlbmRWYWwgPSBlbmRDdHJsPy52YWx1ZTtcblxuICAgIGlmICghc3RhcnRWYWwgJiYgIWVuZFZhbCkgcmV0dXJuIG51bGw7XG5cbiAgICBpZiAoc3RhcnRWYWwgJiYgIWVuZFZhbCkgcmV0dXJuIGBQbGVhc2Ugc2VsZWN0IGFuIGVuZCBkYXRlYDtcbiAgICBpZiAoIXN0YXJ0VmFsICYmIGVuZFZhbCkgcmV0dXJuIGBQbGVhc2Ugc2VsZWN0IGEgc3RhcnQgZGF0ZWA7XG5cbiAgICBpZiAoZGF0ZUdyb3VwLmludmFsaWQpIHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnPy5maW5kKGMgPT4gYy5rZXkgPT09IGtleSk7XG4gICAgICByZXR1cm4gY29uZmlnID8gYCR7Y29uZmlnLmxhYmVsfSBpcyBpbnZhbGlkYCA6ICdEYXRlIHJhbmdlIGlzIGludmFsaWQnO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gRHluYW1pYyBEYXRlIFBpY2tlciBJbnRlZ3JhdGlvbiBNZXRob2RzIHJlbW92ZWQgKGNvbXBvbmVudCBubyBsb25nZXIgdXNlZClcbn1cblxuXG4iLCI8ZGl2IGNsYXNzPVwiY3FhLXVpLXJvb3QgY3FhLXVpLWRhdGVyYW5nZS1waWNrZXJcIj5cbiAgPGRpdiBjbGFzcz1cImNxYS1maWx0ZXIgY3FhLW1iLVsyOHB4XVwiICpuZ0lmPVwic2hvd0ZpbHRlclBhbmVsXCIgc3R5bGU9XCJoZWlnaHQ6IGF1dG87XCI+XG4gICAgPCEtLSBCb3R0b20gTGF5b3V0OiBDdXJyZW50IGRlc2lnbiB3aXRoIHNlbGVjdG9ycyBpbiBncmlkIGFuZCBidXR0b25zIGJlbG93IC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJidXR0b25MYXlvdXQgPT09ICdib3R0b20nXCI+XG4gICAgICA8Zm9ybSBjbGFzcz1cInRzLWZvcm0gY3FhLWdyaWQgbGc6Y3FhLWdyaWQtY29scy00IG1kOmNxYS1ncmlkLWNvbHMtMiBjcWEtZ2FwLTQgY3FhLXJlbGF0aXZlXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiKGZhbHNlKVwiIG5vdmFsaWRhdGU9XCJub3ZhbGlkYXRlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGMgb2YgY29uZmlnXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjLmhpZGRlblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgY3VzLXJhbmdlLXNlbGVjdCBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yIGNxYS1mbGV4LXNocmluay0wIGZpbHRlci1zZWxlY3Rvci13aWR0aCBjcWEtdy1mdWxsXCI+XG4gICAgICAgICAgICAgIDwhLS0gU2VsZWN0IC0tPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYy50eXBlID09PSAnc2VsZWN0J1wiPlxuICAgICAgICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3QgW2Zvcm1dPVwiZm9ybVwiIFtjb25maWddPVwiZ2V0U2VsZWN0Q29uZmlnKGMpXCI+PC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgIDwhLS0gRGF0ZSBSYW5nZSBQaWNrZXIgLS0+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjLnR5cGUgPT09ICdkYXRlLXJhbmdlLXBpY2tlcidcIj5cbiAgICAgICAgICAgICAgICA8Y3FhLWRhdGVyYW5nZXBpY2tlclxuICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImMubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImMucGxhY2Vob2xkZXIgfHwgJ1N0YXJ0IERhdGUgLSBFbmQgRGF0ZSdcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImMuZGlzYWJsZWQgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgW3N0YXJ0RGF0ZV09XCJnZXREYXRlR3JvdXAoYy5rZXkpPy5nZXQoJ3N0YXJ0Jyk/LnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgIFtlbmREYXRlXT1cImdldERhdGVHcm91cChjLmtleSk/LmdldCgnZW5kJyk/LnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgIFttaW5EYXRlXT1cInVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgICBbbWF4RGF0ZV09XCJtYXhEYXRlXCJcbiAgICAgICAgICAgICAgICAgIFtyYW5nZXNdPVwiZ2V0RGF0ZXJhbmdlcGlja2VyUmFuZ2VzKClcIlxuICAgICAgICAgICAgICAgICAgW2F1dG9BcHBseV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFthbHdheXNTaG93Q2FsZW5kYXJzXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW29wZW5zXT1cImMub3BlbnMgfHwgJ2NlbnRlcidcIlxuICAgICAgICAgICAgICAgICAgW2Ryb3BzXT1cImMuZHJvcHMgfHwgJ2F1dG8nXCJcbiAgICAgICAgICAgICAgICAgIFtwYXJlbnRFbF09XCJjLnBhcmVudEVsXCJcbiAgICAgICAgICAgICAgICAgIChkYXRlc1VwZGF0ZWQpPVwib25EYXRlcmFuZ2VwaWNrZXJDaGFuZ2UoJGV2ZW50LCBjLmtleSlcIlxuICAgICAgICAgICAgICAgICAgKGFwcGx5Q2xpY2tlZCk9XCJvbkRhdGVyYW5nZXBpY2tlckFwcGx5KCRldmVudCwgYy5rZXkpXCI+XG4gICAgICAgICAgICAgICAgPC9jcWEtZGF0ZXJhbmdlcGlja2VyPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJnZXREYXRlR3JvdXAoYy5rZXkpPy5pbnZhbGlkICYmIGdldERhdGVHcm91cChjLmtleSk/LnRvdWNoZWRcIj5cbiAgICAgICAgICAgICAgICAgIHt7IGdldERhdGVWYWxpZGF0aW9uRXJyb3IoYy5rZXkpIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9mb3JtPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWp1c3RpZnktZW5kIGNxYS1pdGVtcy1zdHJldGNoIGNxYS1nYXAtMiBjcWEtbXQtNFwiPlxuICAgICAgICA8Y3FhLWJ1dHRvbiB2YXJpYW50PVwiZmlsbGVkXCIgKG1vdXNlZG93bik9XCJwcmVwYXJlUHJpbWFyeUFjdGlvbigpXCIgKGNsaWNrZWQpPVwiYXBwbHkoKVwiIFtkaXNhYmxlZF09XCIhaGFzU2VsZWN0ZWRGaWx0ZXJzXCI+QXBwbHkgRmlsdGVyPC9jcWEtYnV0dG9uPlxuICAgICAgICA8Y3FhLWJ1dHRvbiB2YXJpYW50PVwib3V0bGluZWRcIiAobW91c2Vkb3duKT1cInByZXBhcmVQcmltYXJ5QWN0aW9uKClcIiAoY2xpY2tlZCk9XCJyZXNldCgpXCIgW2Rpc2FibGVkXT1cIiFoYXNTZWxlY3RlZEZpbHRlcnNcIj5SZXNldDwvY3FhLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSBSaWdodCBMYXlvdXQ6IEJ1dHRvbnMgb24gbGVmdG1vc3Qgc2lkZSwgc2VsZWN0b3JzIG9uIHJpZ2h0bW9zdCBzaWRlIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJidXR0b25MYXlvdXQgPT09ICdyaWdodCdcIj5cbiAgICAgIDxmb3JtIGNsYXNzPVwidHMtZm9ybSBjcWEtZmxleCBjcWEtZmxleC13cmFwIGNxYS1pdGVtcy1lbmQgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtZ2FwLTQgY3FhLXVpLWRhdGVyYW5nZS1waWNrZXIgY3FhLXJlbGF0aXZlXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiKGZhbHNlKVwiIG5vdmFsaWRhdGU9XCJub3ZhbGlkYXRlXCIgc3R5bGU9XCJoZWlnaHQ6IGF1dG87XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtc3RyZXRjaCBjcWEtZ2FwLTIgY3FhLWZsZXgtc2hyaW5rLTAgY3FhLW9yZGVyLWZpcnN0IGNxYS1tci1hdXRvXCI+XG4gICAgICAgICAgPGNxYS1idXR0b24gdmFyaWFudD1cImZpbGxlZFwiIChjbGlja2VkKT1cImFwcGx5KClcIiBbZGlzYWJsZWRdPVwiIWhhc1NlbGVjdGVkRmlsdGVyc1wiPkFwcGx5IEZpbHRlcjwvY3FhLWJ1dHRvbj5cbiAgICAgICAgICA8Y3FhLWJ1dHRvbiB2YXJpYW50PVwib3V0bGluZWRcIiAoY2xpY2tlZCk9XCJyZXNldCgpXCIgW2Rpc2FibGVkXT1cIiFoYXNTZWxlY3RlZEZpbHRlcnNcIj5SZXNldDwvY3FhLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC13cmFwIGNxYS1pdGVtcy1lbmQgY3FhLWdhcC00IGNxYS1mbGV4LTEgY3FhLWp1c3RpZnktZW5kIGNxYS1vcmRlci1sYXN0IGNxYS1tbC1hdXRvXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYyBvZiBjb25maWdcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWMuaGlkZGVuXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yIGNxYS1mbGV4LXNocmluay0wIGZpbHRlci1zZWxlY3Rvci13aWR0aFwiPlxuICAgICAgICAgICAgICA8IS0tIFNlbGVjdCAtLT5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImMudHlwZSA9PT0gJ3NlbGVjdCdcIj5cbiAgICAgICAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0IFtmb3JtXT1cImZvcm1cIiBbY29uZmlnXT1cImdldFNlbGVjdENvbmZpZyhjKVwiPjwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICA8IS0tIERhdGUgUmFuZ2UgKERhdGVyYW5nZXBpY2tlcikgLS0+IFxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYy50eXBlID09PSAnZGF0ZS1yYW5nZS1waWNrZXInXCI+XG4gICAgICAgICAgICAgICAgPGNxYS1kYXRlcmFuZ2VwaWNrZXJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjLnBsYWNlaG9sZGVyIHx8ICdTdGFydCBEYXRlIC0gRW5kIERhdGUnXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjLmRpc2FibGVkIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIFtzdGFydERhdGVdPVwiZ2V0RGF0ZUdyb3VwKGMua2V5KT8uZ2V0KCdzdGFydCcpPy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICBbZW5kRGF0ZV09XCJnZXREYXRlR3JvdXAoYy5rZXkpPy5nZXQoJ2VuZCcpPy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICBbbWluRGF0ZV09XCJ1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgW21heERhdGVdPVwibWF4RGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbcmFuZ2VzXT1cImdldERhdGVyYW5nZXBpY2tlclJhbmdlcygpXCJcbiAgICAgICAgICAgICAgICAgIFthdXRvQXBwbHldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbYWx3YXlzU2hvd0NhbGVuZGFyc109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtvcGVuc109XCJjLm9wZW5zIHx8ICdjZW50ZXInXCJcbiAgICAgICAgICAgICAgICAgIFtkcm9wc109XCJjLmRyb3BzIHx8ICdhdXRvJ1wiXG4gICAgICAgICAgICAgICAgICBbcGFyZW50RWxdPVwiYy5wYXJlbnRFbFwiXG4gICAgICAgICAgICAgICAgICAoZGF0ZXNVcGRhdGVkKT1cIm9uRGF0ZXJhbmdlcGlja2VyQ2hhbmdlKCRldmVudCwgYy5rZXkpXCJcbiAgICAgICAgICAgICAgICAgIChhcHBseUNsaWNrZWQpPVwib25EYXRlcmFuZ2VwaWNrZXJBcHBseSgkZXZlbnQsIGMua2V5KVwiPlxuICAgICAgICAgICAgICAgIDwvY3FhLWRhdGVyYW5nZXBpY2tlcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiZ2V0RGF0ZUdyb3VwKGMua2V5KT8uaW52YWxpZCAmJiBnZXREYXRlR3JvdXAoYy5rZXkpPy50b3VjaGVkXCI+XG4gICAgICAgICAgICAgICAgICB7eyBnZXREYXRlVmFsaWRhdGlvbkVycm9yKGMua2V5KSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Zvcm0+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIExlZnQgTGF5b3V0OiBTZWxlY3RvcnMgb24gbGVmdG1vc3Qgc2lkZSwgYnV0dG9ucyBvbiByaWdodG1vc3Qgc2lkZSAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYnV0dG9uTGF5b3V0ID09PSAnbGVmdCdcIj5cbiAgICAgIDxmb3JtIGNsYXNzPVwidHMtZm9ybSBjcWEtZmxleCBjcWEtZmxleC13cmFwIGNxYS1pdGVtcy1lbmQgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtZ2FwLTQgY3FhLXVpLWRhdGVyYW5nZS1waWNrZXIgY3FhLXJlbGF0aXZlXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiKGZhbHNlKVwiIG5vdmFsaWRhdGU9XCJub3ZhbGlkYXRlXCIgc3R5bGU9XCJoZWlnaHQ6IGF1dG87XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC13cmFwIGNxYS1pdGVtcy1lbmQgY3FhLWdhcC00IGNxYS1mbGV4LTEgY3FhLW9yZGVyLWZpcnN0IGNxYS1tci1hdXRvXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYyBvZiBjb25maWdcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWMuaGlkZGVuXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yIGNxYS1mbGV4LXNocmluay0wIGZpbHRlci1zZWxlY3Rvci13aWR0aFwiPlxuICAgICAgICAgICAgICA8IS0tIFNlbGVjdCAtLT5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImMudHlwZSA9PT0gJ3NlbGVjdCdcIj5cbiAgICAgICAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0IFtmb3JtXT1cImZvcm1cIiBbY29uZmlnXT1cImdldFNlbGVjdENvbmZpZyhjKVwiPjwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICA8IS0tIERhdGUgUmFuZ2UgKERhdGVyYW5nZXBpY2tlcikgLS0+IFxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYy50eXBlID09PSAnZGF0ZS1yYW5nZS1waWNrZXInXCI+XG4gICAgICAgICAgICAgICAgPGNxYS1kYXRlcmFuZ2VwaWNrZXJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjLnBsYWNlaG9sZGVyIHx8ICdTdGFydCBEYXRlIC0gRW5kIERhdGUnXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjLmRpc2FibGVkIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIFtzdGFydERhdGVdPVwiZ2V0RGF0ZUdyb3VwKGMua2V5KT8uZ2V0KCdzdGFydCcpPy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICBbZW5kRGF0ZV09XCJnZXREYXRlR3JvdXAoYy5rZXkpPy5nZXQoJ2VuZCcpPy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICBbbWluRGF0ZV09XCJ1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgW21heERhdGVdPVwibWF4RGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbcmFuZ2VzXT1cImdldERhdGVyYW5nZXBpY2tlclJhbmdlcygpXCJcbiAgICAgICAgICAgICAgICAgIFthdXRvQXBwbHldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbYWx3YXlzU2hvd0NhbGVuZGFyc109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtvcGVuc109XCJjLm9wZW5zIHx8ICdjZW50ZXInXCJcbiAgICAgICAgICAgICAgICAgIFtkcm9wc109XCJjLmRyb3BzIHx8ICdhdXRvJ1wiXG4gICAgICAgICAgICAgICAgICBbcGFyZW50RWxdPVwiYy5wYXJlbnRFbFwiXG4gICAgICAgICAgICAgICAgICAoZGF0ZXNVcGRhdGVkKT1cIm9uRGF0ZXJhbmdlcGlja2VyQ2hhbmdlKCRldmVudCwgYy5rZXkpXCJcbiAgICAgICAgICAgICAgICAgIChhcHBseUNsaWNrZWQpPVwib25EYXRlcmFuZ2VwaWNrZXJBcHBseSgkZXZlbnQsIGMua2V5KVwiPlxuICAgICAgICAgICAgICAgIDwvY3FhLWRhdGVyYW5nZXBpY2tlcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiZ2V0RGF0ZUdyb3VwKGMua2V5KT8uaW52YWxpZCAmJiBnZXREYXRlR3JvdXAoYy5rZXkpPy50b3VjaGVkXCI+XG4gICAgICAgICAgICAgICAgICB7eyBnZXREYXRlVmFsaWRhdGlvbkVycm9yKGMua2V5KSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtc3RyZXRjaCBjcWEtZ2FwLTIgY3FhLWZsZXgtc2hyaW5rLTAgY3FhLW9yZGVyLWxhc3QgY3FhLW1sLWF1dG9cIj5cbiAgICAgICAgICA8Y3FhLWJ1dHRvbiB2YXJpYW50PVwiZmlsbGVkXCIgKG1vdXNlZG93bik9XCJwcmVwYXJlUHJpbWFyeUFjdGlvbigpXCIgKGNsaWNrZWQpPVwiYXBwbHkoKVwiIFtkaXNhYmxlZF09XCIhaGFzU2VsZWN0ZWRGaWx0ZXJzXCI+QXBwbHkgRmlsdGVyPC9jcWEtYnV0dG9uPlxuICAgICAgICAgIDxjcWEtYnV0dG9uIHZhcmlhbnQ9XCJvdXRsaW5lZFwiICAobW91c2Vkb3duKT1cInByZXBhcmVQcmltYXJ5QWN0aW9uKClcIiAoY2xpY2tlZCk9XCJyZXNldCgpXCIgW2Rpc2FibGVkXT1cIiFoYXNTZWxlY3RlZEZpbHRlcnNcIj5SZXNldDwvY3FhLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Zvcm0+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+Il19
|
|
438
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9maWx0ZXJzL2R5bmFtaWMtZmlsdGVyL2R5bmFtaWMtZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZmlsdGVycy9keW5hbWljLWZpbHRlci9keW5hbWljLWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXdCLE1BQU0sRUFBaUIsWUFBWSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzlKLE9BQU8sRUFBZSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJckUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0scURBQXFELENBQUM7Ozs7Ozs7O0FBc0RsRyxNQUFNLE9BQU8sc0JBQXNCO0lBbUJqQyxZQUE2QixFQUFlO1FBQWYsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQWxCbkMsV0FBTSxHQUF3QixFQUFFLENBQUM7UUFDakMsVUFBSyxHQUF3QixFQUFFLENBQUM7UUFDaEMsb0JBQWUsR0FBWSxJQUFJLENBQUM7UUFDaEMsaUJBQVksR0FBZ0MsUUFBUSxDQUFDO1FBQ3BELG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQXVCLENBQUM7UUFDekQsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQztRQUN6RCxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDdkMsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQXVCLENBQUM7UUFDN0QsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUV4RCxTQUFJLEdBQWMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEMsWUFBTyxH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RyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ3JELE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLGFBQWEsQ0FBQyxDQUFDLENBQUMsdUJBQXVCLENBQUM7U0FDeEU7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7O21IQXRaVSxzQkFBc0I7dUdBQXRCLHNCQUFzQix5YkFnQm5CLDJCQUEyQixxRUMzRTNDLDJpUUE4SU07MkZEbkZPLHNCQUFzQjtrQkFQbEMsU0FBUzsrQkFDRSxvQkFBb0IsbUJBR2IsdUJBQXVCLENBQUMsTUFBTSxRQUN6QyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7a0dBR3JCLE1BQU07c0JBQWQsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNJLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBT29DLGdCQUFnQjtzQkFBMUQsWUFBWTt1QkFBQywyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGRyZW4sIFF1ZXJ5TGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE1hdERhdGVwaWNrZXJJbnB1dEV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgfSBmcm9tICcuLi8uLi9keW5hbWljLXNlbGVjdC9keW5hbWljLXNlbGVjdC1maWVsZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHluYW1pY1NlbGVjdEZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZHluYW1pYy1zZWxlY3QvZHluYW1pYy1zZWxlY3QtZmllbGQuY29tcG9uZW50JztcblxudHlwZSBGaWx0ZXJUeXBlID0gJ3NlbGVjdCcgfCAnZGF0ZS1yYW5nZS1waWNrZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIER5bmFtaWNGaWx0ZXJPcHRpb24ge1xuICBpZD86IG51bWJlciB8IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgdmFsdWU/OiBhbnk7XG4gIGxhYmVsPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIER5bmFtaWNGaWx0ZXJJdGVtIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIHR5cGU6IEZpbHRlclR5cGU7XG4gIGtleTogc3RyaW5nO1xuICBvcGVucz86ICdsZWZ0JyB8ICdyaWdodCcgfCAnY2VudGVyJztcbiAgZHJvcHM/OiAnZG93bicgfCAndXAnIHwgJ2F1dG8nO1xuICBvcHRpb25zPzogRHluYW1pY0ZpbHRlck9wdGlvbltdO1xuICBtdWx0aXBsZT86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgaGlkZGVuPzogYm9vbGVhbjtcbiAgc2VhcmNoYWJsZT86IGJvb2xlYW47XG4gIG9wdGlvblN0eWxlPzogJ2NoZWNrbWFyaycgfCAnY2hlY2tib3gnO1xuICBzaG93U2VsZWN0QWxsPzogYm9vbGVhbjtcbiAgc2VsZWN0QWxsTGFiZWw/OiBzdHJpbmc7XG4gIHNlbGVjdGVkVmFsdWU/OiBhbnkgfCBhbnlbXTtcbiAgLy8gU2VydmVyLWRyaXZlbiBzZWxlY3Qgc3VwcG9ydCAocGFzc3Rocm91Z2ggdG8gY3FhLWR5bmFtaWMtc2VsZWN0KVxuICBzZXJ2ZXJTZWFyY2g/OiBib29sZWFuO1xuICAvKiogTW9yZSByZXN1bHRzIGF2YWlsYWJsZSBzZXJ2ZXItc2lkZSBmb3IgaW5maW5pdGUgc2Nyb2xsICovXG4gIGhhc01vcmU/OiBib29sZWFuO1xuICAvKiogRXh0ZXJuYWwgbG9hZGluZyBzdGF0ZSBmb3IgYXN5bmMgZmV0Y2hpbmcgKi9cbiAgaXNMb2FkaW5nPzogYm9vbGVhbjtcbiAgLyoqIENhbGxiYWNrIHdoZW4gc2VhcmNoIHRleHQgY2hhbmdlcyAoc2VydmVyIG1vZGUpICovXG4gIG9uU2VhcmNoPzogKHF1ZXJ5OiBzdHJpbmcpID0+IHZvaWQ7XG4gIC8qKiBDYWxsYmFjayB3aGVuIG1vcmUgZGF0YSBpcyByZXF1ZXN0ZWQgKGluZmluaXRlIHNjcm9sbCkgKi9cbiAgb25Mb2FkTW9yZT86IChxdWVyeT86IHN0cmluZykgPT4gdm9pZDtcbiAgc2VsZWN0ZWRTdGFydERhdGU/OiBEYXRlIHwgc3RyaW5nO1xuICBzZWxlY3RlZEVuZERhdGU/OiBEYXRlIHwgc3RyaW5nO1xuICBvbkRhdGVDaGFuZ2U/OiAodmFsdWU6IHsgc3RhcnQ6IERhdGUgfCBudWxsOyBlbmQ6IERhdGUgfCBudWxsIH0sIGV2ZW50PzogTWF0RGF0ZXBpY2tlcklucHV0RXZlbnQ8RGF0ZT4gfCBFdmVudCkgPT4gdm9pZDtcbiAgcGFyZW50RWw/OiBzdHJpbmcgfCBIVE1MRWxlbWVudDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEeW5hbWljRmlsdGVyVmFsdWVzIHtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtZHluYW1pYy1maWx0ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZHluYW1pYy1maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9XG59KVxuZXhwb3J0IGNsYXNzIER5bmFtaWNGaWx0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGNvbmZpZzogRHluYW1pY0ZpbHRlckl0ZW1bXSA9IFtdO1xuICBASW5wdXQoKSBtb2RlbDogRHluYW1pY0ZpbHRlclZhbHVlcyA9IHt9O1xuICBASW5wdXQoKSBzaG93RmlsdGVyUGFuZWw6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBidXR0b25MYXlvdXQ6ICdsZWZ0JyB8ICdyaWdodCcgfCAnYm90dG9tJyA9ICdib3R0b20nO1xuICBAT3V0cHV0KCkgZmlsdGVyc0FwcGxpZWQgPSBuZXcgRXZlbnRFbWl0dGVyPER5bmFtaWNGaWx0ZXJWYWx1ZXM+KCk7XG4gIEBPdXRwdXQoKSBmaWx0ZXJzQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RHluYW1pY0ZpbHRlclZhbHVlcz4oKTtcbiAgQE91dHB1dCgpIHJlc2V0QWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgb25BcHBseUZpbHRlckNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxEeW5hbWljRmlsdGVyVmFsdWVzPigpO1xuICBAT3V0cHV0KCkgb25SZXNldEZpbHRlckNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIGZvcm06IEZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe30pO1xuICBtYXhEYXRlID0gbmV3IERhdGUoKTtcbiAgc2VhcmNoVGV4dEJ5S2V5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIHByaXZhdGUgc2VsZWN0T3V0c2lkZUNsZWFudXAgPSBuZXcgTWFwPGFueSwgKCkgPT4gdm9pZD4oKTtcbiAgaGFzU2VsZWN0ZWRGaWx0ZXJzID0gZmFsc2U7XG4gIEBWaWV3Q2hpbGRyZW4oRHluYW1pY1NlbGVjdEZpZWxkQ29tcG9uZW50KSBzZWxlY3RDb21wb25lbnRzPzogUXVlcnlMaXN0PER5bmFtaWNTZWxlY3RGaWVsZENvbXBvbmVudD47XG4gIHByaXZhdGUgZm9ybVZhbHVlQ2hhbmdlc1N1Yj86IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGZiOiBGb3JtQnVpbGRlcikge1xuICAgIC8vIEVuc3VyZSBtYXhEYXRlIGlzIHRoZSBlbmQgb2YgdG9kYXksIHNvIGFueSBmdXR1cmUgZGF0ZXMgYXJlIGRpc2FsbG93ZWRcbiAgICB0aGlzLm1heERhdGUgPSB0aGlzLmVuZE9mRGF5KG5ldyBEYXRlKCkpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydjb25maWcnXSB8fCBjaGFuZ2VzWydtb2RlbCddKSB7XG4gICAgICB0aGlzLmJ1aWxkRm9ybSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybVZhbHVlQ2hhbmdlc1N1Yj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG9uRGF0ZUNoYW5nZShldmVudDogTWF0RGF0ZXBpY2tlcklucHV0RXZlbnQ8RGF0ZT4gfCBFdmVudCwga2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmludm9rZURhdGVSYW5nZUNoYW5nZShrZXksIGV2ZW50KTtcbiAgfVxuXG4gIC8vIE5HWCBEYXRlUmFuZ2VQaWNrZXIgaW50ZWdyYXRpb25cbiAgbmd4RGF0ZVJhbmdlQnlLZXk6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgbmd4UmFuZ2VzOiBhbnkgPSB7fTsgLy8gVXNpbmcgJ2FueScgdG8gYXZvaWQgRGF5anMgdHlwZSBtaXNtYXRjaCAtIGxpYnJhcnkgYWNjZXB0cyBEYXRlIG9iamVjdHMgYXQgcnVudGltZVxuICBuZ3hMb2NhbGUgPSB7IGN1c3RvbVJhbmdlTGFiZWw6ICdDdXN0b20gcmFuZ2UnIH07XG4gIC8vIERpc2FibGUgYWxsIGRhdGVzIGFmdGVyIHRvZGF5IGluIHRoZSBuZ3ggZGF0ZXBpY2tlclxuICBkaXNhYmxlRnV0dXJlRGF0ZXMgPSAobTogYW55KTogYm9vbGVhbiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGQ6IERhdGUgPSBtICYmIHR5cGVvZiBtLnRvRGF0ZSA9PT0gJ2Z1bmN0aW9uJyA/IG0udG9EYXRlKCkgOiBuZXcgRGF0ZShtKTtcbiAgICAgIHJldHVybiBkLmdldFRpbWUoKSA+IHRoaXMubWF4RGF0ZS5nZXRUaW1lKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9O1xuICBvbk5neERhdGVzVXBkYXRlZChlOiBhbnksIGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdldERhdGVHcm91cChrZXkpO1xuICAgIGlmICghZ3JvdXApIHJldHVybjtcbiAgICBjb25zdCBjbGFtcCA9IChkOiBEYXRlIHwgbnVsbCkgPT4gKGQgJiYgZC5nZXRUaW1lKCkgPiB0aGlzLm1heERhdGUuZ2V0VGltZSgpID8gdGhpcy5tYXhEYXRlIDogZCk7XG4gICAgY29uc3Qgc3RhcnRSYXcgPSBlPy5zdGFydERhdGUgPyAodHlwZW9mIGUuc3RhcnREYXRlLnRvRGF0ZSA9PT0gJ2Z1bmN0aW9uJyA/IGUuc3RhcnREYXRlLnRvRGF0ZSgpIDogbmV3IERhdGUoZS5zdGFydERhdGUpKSA6IG51bGw7XG4gICAgY29uc3QgZW5kUmF3ID0gZT8uZW5kRGF0ZSA/ICh0eXBlb2YgZS5lbmREYXRlLnRvRGF0ZSA9PT0gJ2Z1bmN0aW9uJyA/IGUuZW5kRGF0ZS50b0RhdGUoKSA6IG5ldyBEYXRlKGUuZW5kRGF0ZSkpIDogbnVsbDtcbiAgICBjb25zdCBzdGFydCA9IGNsYW1wKHN0YXJ0UmF3KTtcbiAgICBjb25zdCBlbmQgPSBjbGFtcChlbmRSYXcpO1xuICAgIGdyb3VwLnBhdGNoVmFsdWUoeyBzdGFydCwgZW5kIH0sIHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSB0aGlzLnNlcmlhbGl6ZSgpO1xuICAgIHRoaXMuaGFzU2VsZWN0ZWRGaWx0ZXJzID0gT2JqZWN0LmtleXMoc2VyaWFsaXplZCkubGVuZ3RoID4gMDtcbiAgICBpZiAoc3RhcnQgJiYgZW5kICYmIGdyb3VwLnZhbGlkKSB7XG4gICAgICB0aGlzLmFwcGx5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyc0NoYW5nZWQuZW1pdChzZXJpYWxpemVkKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRm9ybSgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1WYWx1ZUNoYW5nZXNTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgY29uc3QgY3RybHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICAodGhpcy5jb25maWcgfHwgW10pLmZvckVhY2goYyA9PiB7XG4gICAgICBpZiAoYy5oaWRkZW4pIHJldHVybjtcbiAgICAgIGlmIChjLnR5cGUgPT09ICdkYXRlLXJhbmdlLXBpY2tlcicpIHtcbiAgICAgICAgY29uc3QgaW5pdGlhbFJhbmdlID0gdGhpcy5nZXRJbml0aWFsRGF0ZVJhbmdlVmFsdWUoYyk7XG4gICAgICAgIGN0cmxzW2Mua2V5XSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICAgIHN0YXJ0OiBuZXcgRm9ybUNvbnRyb2woaW5pdGlhbFJhbmdlLnN0YXJ0KSxcbiAgICAgICAgICBlbmQ6IG5ldyBGb3JtQ29udHJvbChpbml0aWFsUmFuZ2UuZW5kKSxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGluaXRpYWxpemUgbmd4IG1vZGVsIGRpc3BsYXlcbiAgICAgICAgdGhpcy5uZ3hEYXRlUmFuZ2VCeUtleVtjLmtleV0gPSB7XG4gICAgICAgICAgc3RhcnREYXRlOiBpbml0aWFsUmFuZ2Uuc3RhcnQgfHwgbnVsbCxcbiAgICAgICAgICBlbmREYXRlOiBpbml0aWFsUmFuZ2UuZW5kIHx8IG51bGxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGluaXRpYWwgPSB0aGlzLnJlc29sdmVJbml0aWFsU2VsZWN0VmFsdWUoYyk7XG4gICAgICAgIGlmIChjLm11bHRpcGxlKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBBcnJheS5pc0FycmF5KGluaXRpYWwpID8gaW5pdGlhbCA6IChpbml0aWFsICE9IG51bGwgPyBbaW5pdGlhbF0gOiBbXSk7XG4gICAgICAgICAgY3RybHNbYy5rZXldID0gbmV3IEZvcm1Db250cm9sKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdHJsc1tjLmtleV0gPSBuZXcgRm9ybUNvbnRyb2wodGhpcy5jb2VyY2VUb1NpbmdsZVZhbHVlKGluaXRpYWwpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoY3RybHMpO1xuICAgIC8vIGluaXRpYWxpemUgYXBwbHkgYnV0dG9uIHN0YXRlIGJhc2VkIG9uIGluaXRpYWwgdmFsdWVzXG4gICAgdGhpcy5oYXNTZWxlY3RlZEZpbHRlcnMgPSBPYmplY3Qua2V5cyh0aGlzLnNlcmlhbGl6ZSgpKS5sZW5ndGggPiAwO1xuICAgIC8vIGJ1aWxkIGNvbW1vbiByYW5nZXMgZm9yIG5neCBkYXRlcGlja2VyXG4gICAgdGhpcy5uZ3hSYW5nZXMgPSB0aGlzLmJ1aWxkTmd4UmFuZ2VzKCk7XG4gICAgdGhpcy5mb3JtVmFsdWVDaGFuZ2VzU3ViID0gdGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IHRoaXMuc2VyaWFsaXplKCk7XG4gICAgICB0aGlzLmhhc1NlbGVjdGVkRmlsdGVycyA9IE9iamVjdC5rZXlzKHNlcmlhbGl6ZWQpLmxlbmd0aCA+IDA7XG4gICAgICB0aGlzLmZpbHRlcnNDaGFuZ2VkLmVtaXQoc2VyaWFsaXplZCk7XG4gICAgfSk7XG4gIH1cblxuICBvblNlbGVjdE9wZW5lZENoYW5nZShvcGVuZWQ6IGJvb2xlYW4sIHNlbGVjdDogYW55KTogdm9pZCB7XG4gICAgaWYgKG9wZW5lZCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IG9uRG9jRG93biA9IChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY2RrLW92ZXJsYXktcGFuZSAubWF0LXNlbGVjdC1wYW5lbCcpIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICAgICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBOb2RlIHwgbnVsbDtcbiAgICAgICAgICBjb25zdCBvcmlnaW5FbCA9IChzZWxlY3Q/Ll9lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KSB8fCBudWxsO1xuICAgICAgICAgIGNvbnN0IGluc2lkZVBhbmVsID0gISEocGFuZWwgJiYgdGFyZ2V0ICYmIHBhbmVsLmNvbnRhaW5zKHRhcmdldCkpO1xuICAgICAgICAgIGNvbnN0IGluc2lkZU9yaWdpbiA9ICEhKG9yaWdpbkVsICYmIHRhcmdldCAmJiBvcmlnaW5FbC5jb250YWlucyh0YXJnZXQpKTtcbiAgICAgICAgICBpZiAoIWluc2lkZVBhbmVsICYmICFpbnNpZGVPcmlnaW4pIHtcbiAgICAgICAgICAgIHNlbGVjdC5jbG9zZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgb25Eb2NEb3duLCB0cnVlKTtcbiAgICAgICAgdGhpcy5zZWxlY3RPdXRzaWRlQ2xlYW51cC5zZXQoc2VsZWN0LCAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBvbkRvY0Rvd24sIHRydWUpKTtcbiAgICAgIH0sIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjbGVhbnVwID0gdGhpcy5zZWxlY3RPdXRzaWRlQ2xlYW51cC5nZXQoc2VsZWN0KTtcbiAgICAgIGlmIChjbGVhbnVwKSBjbGVhbnVwKCk7XG4gICAgICB0aGlzLnNlbGVjdE91dHNpZGVDbGVhbnVwLmRlbGV0ZShzZWxlY3QpO1xuICAgIH1cbiAgfVxuXG4gIG9uU2VhcmNoKGtleTogc3RyaW5nLCB0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaFRleHRCeUtleVtrZXldID0gKHRleHQgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICBmaWx0ZXJlZE9wdGlvbnMoaXRlbTogRHluYW1pY0ZpbHRlckl0ZW0pOiBEeW5hbWljRmlsdGVyT3B0aW9uW10ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBpdGVtPy5vcHRpb25zIHx8IFtdO1xuICAgIGNvbnN0IHEgPSAodGhpcy5zZWFyY2hUZXh0QnlLZXlbaXRlbS5rZXldIHx8ICcnKS50cmltKCk7XG4gICAgaWYgKCFxKSByZXR1cm4gb3B0aW9ucztcbiAgICByZXR1cm4gb3B0aW9ucy5maWx0ZXIob3B0ID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSAob3B0Lm5hbWUgPz8gb3B0LmxhYmVsID8/IFN0cmluZyhvcHQudmFsdWUgPz8gJycpKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIG5hbWUuaW5jbHVkZXMocSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXREYXRlR3JvdXAoa2V5OiBzdHJpbmcpOiBGb3JtR3JvdXAge1xuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KGtleSkgYXMgRm9ybUdyb3VwO1xuICB9XG5cbiAgZ2V0U2VsZWN0Q29uZmlnKGl0ZW06IER5bmFtaWNGaWx0ZXJJdGVtKTogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAga2V5OiBpdGVtLmtleSxcbiAgICAgIGxhYmVsOiBpdGVtLmxhYmVsLFxuICAgICAgcGxhY2Vob2xkZXI6IGl0ZW0ucGxhY2Vob2xkZXIsXG4gICAgICBkaXNhYmxlZDogaXRlbS5kaXNhYmxlZCxcbiAgICAgIG11bHRpcGxlOiBpdGVtLm11bHRpcGxlLFxuICAgICAgc2VhcmNoYWJsZTogaXRlbS5zZWFyY2hhYmxlLFxuICAgICAgb3B0aW9uU3R5bGU6IGl0ZW0ub3B0aW9uU3R5bGUsXG4gICAgICBzaG93U2VsZWN0QWxsOiBpdGVtLnNob3dTZWxlY3RBbGwsXG4gICAgICBzZWxlY3RBbGxMYWJlbDogaXRlbS5zZWxlY3RBbGxMYWJlbCxcbiAgICAgIHNlbGVjdGVkVmFsdWU6IGl0ZW0uc2VsZWN0ZWRWYWx1ZSxcbiAgICAgIHNlcnZlclNlYXJjaDogaXRlbS5zZXJ2ZXJTZWFyY2gsXG4gICAgICBoYXNNb3JlOiBpdGVtLmhhc01vcmUsXG4gICAgICBpc0xvYWRpbmc6IGl0ZW0uaXNMb2FkaW5nLFxuICAgICAgb25TZWFyY2g6IGl0ZW0ub25TZWFyY2gsXG4gICAgICBvbkxvYWRNb3JlOiBpdGVtLm9uTG9hZE1vcmUsXG4gICAgICBvcHRpb25zOiBpdGVtLm9wdGlvbnMgfHwgW11cbiAgICB9O1xuICB9XG5cbiAgYXBwbHkoKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZUFsbE9wZW5TZWxlY3RzKCk7XG4gICAgY29uc3QgZmlsdGVyVmFsdWVzID0gdGhpcy5zZXJpYWxpemUoKTtcbiAgICB0aGlzLmZpbHRlcnNBcHBsaWVkLmVtaXQoZmlsdGVyVmFsdWVzKTtcbiAgICB0aGlzLm9uQXBwbHlGaWx0ZXJDbGljay5lbWl0KGZpbHRlclZhbHVlcyk7XG4gIH1cblxuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlQWxsT3BlblNlbGVjdHMoKTtcbiAgICBPYmplY3Qua2V5cyh0aGlzLmZvcm0uY29udHJvbHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGNvbnN0IGN0cmwgPSB0aGlzLmZvcm0uZ2V0KGtleSk7XG4gICAgICBpZiAoY3RybCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgICAgICBjdHJsLmdldCgnc3RhcnQnKT8uc2V0VmFsdWUodW5kZWZpbmVkKTtcbiAgICAgICAgY3RybC5nZXQoJ2VuZCcpPy5zZXRWYWx1ZSh1bmRlZmluZWQpO1xuICAgICAgICAvLyBDbGVhciB0aGUgZGF0ZSByYW5nZSBwaWNrZXIgZGlzcGxheSBtb2RlbFxuICAgICAgICBpZiAodGhpcy5uZ3hEYXRlUmFuZ2VCeUtleVtrZXldKSB7XG4gICAgICAgICAgdGhpcy5uZ3hEYXRlUmFuZ2VCeUtleVtrZXldID0ge1xuICAgICAgICAgICAgc3RhcnREYXRlOiBudWxsLFxuICAgICAgICAgICAgZW5kRGF0ZTogbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnZva2VEYXRlUmFuZ2VDaGFuZ2Uoa2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN0cmw/LnNldFZhbHVlKHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5yZXNldEFjdGlvbi5lbWl0KCk7XG4gICAgdGhpcy5vblJlc2V0RmlsdGVyQ2xpY2suZW1pdCgpO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSB0aGlzLnNlcmlhbGl6ZSgpO1xuICAgIHRoaXMuaGFzU2VsZWN0ZWRGaWx0ZXJzID0gT2JqZWN0LmtleXMoc2VyaWFsaXplZCkubGVuZ3RoID4gMDtcbiAgICB0aGlzLmZpbHRlcnNDaGFuZ2VkLmVtaXQoc2VyaWFsaXplZCk7XG4gIH1cblxuICAvKiogQ2xvc2UgYW55IG9wZW4gTWF0U2VsZWN0IHBhbmVscyBiZWZvcmUgcHJpbWFyeSBhY3Rpb25zIHRvIGF2b2lkIGRvdWJsZS1jbGljayBpc3N1ZXMgKi9cbiAgcHJlcGFyZVByaW1hcnlBY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZUFsbE9wZW5TZWxlY3RzKCk7XG4gIH1cblxuICBwcml2YXRlIGNsb3NlQWxsT3BlblNlbGVjdHMoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50cz8uZm9yRWFjaChjID0+IGMuY2xvc2VQYW5lbCgpKTtcbiAgICB9IGNhdGNoIHt9XG4gIH1cblxuICBwcml2YXRlIHNlcmlhbGl6ZSgpOiBEeW5hbWljRmlsdGVyVmFsdWVzIHtcbiAgICBjb25zdCByZXN1bHQ6IER5bmFtaWNGaWx0ZXJWYWx1ZXMgPSB7fTtcbiAgICAodGhpcy5jb25maWcgfHwgW10pLmZvckVhY2goYyA9PiB7XG4gICAgICBjb25zdCBjdHJsID0gdGhpcy5mb3JtLmdldChjLmtleSk7XG4gICAgICBpZiAoIWN0cmwpIHJldHVybjtcbiAgICAgIGxldCB2YWw6IGFueSA9IGN0cmwgaW5zdGFuY2VvZiBGb3JtR3JvdXAgPyAoY3RybCBhcyBGb3JtR3JvdXApLmdldFJhd1ZhbHVlKCkgOiBjdHJsLnZhbHVlO1xuICAgICAgaWYgKGMudHlwZSA9PT0gJ2RhdGUtcmFuZ2UtcGlja2VyJykge1xuICAgICAgICBjb25zdCBzdGFydCA9IHZhbD8uc3RhcnQ7IGNvbnN0IGVuZCA9IHZhbD8uZW5kO1xuICAgICAgICBpZiAoc3RhcnQgfHwgZW5kKSByZXN1bHRbYy5rZXldID0geyBzdGFydCwgZW5kIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQgJiYgdmFsICE9PSBudWxsICYmIChBcnJheS5pc0FycmF5KHZhbCkgPyB2YWwubGVuZ3RoID4gMCA6IHZhbCAhPT0gJycpKSB7XG4gICAgICAgICAgcmVzdWx0W2Mua2V5XSA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVJbml0aWFsU2VsZWN0VmFsdWUoaXRlbTogRHluYW1pY0ZpbHRlckl0ZW0pOiBhbnkge1xuICAgIGlmICh0aGlzLm1vZGVsICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLm1vZGVsLCBpdGVtLmtleSkpIHtcbiAgICAgIHJldHVybiB0aGlzLm1vZGVsW2l0ZW0ua2V5XTtcbiAgICB9XG4gICAgaWYgKGl0ZW0uc2VsZWN0ZWRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gaXRlbS5zZWxlY3RlZFZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBjb2VyY2VUb1NpbmdsZVZhbHVlKHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLmxlbmd0aCA/IHZhbHVlWzBdIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGdldEluaXRpYWxEYXRlUmFuZ2VWYWx1ZShpdGVtOiBEeW5hbWljRmlsdGVySXRlbSk6IHsgc3RhcnQ6IERhdGUgfCBudWxsOyBlbmQ6IERhdGUgfCBudWxsIH0ge1xuICAgIGNvbnN0IG1vZGVsVmFsdWUgPSB0aGlzLm1vZGVsPy5baXRlbS5rZXldO1xuICAgIGNvbnN0IHN0YXJ0U291cmNlID0gbW9kZWxWYWx1ZT8uc3RhcnQgPz8gaXRlbS5zZWxlY3RlZFN0YXJ0RGF0ZSA/PyBudWxsO1xuICAgIGNvbnN0IGVuZFNvdXJjZSA9IG1vZGVsVmFsdWU/LmVuZCA/PyBpdGVtLnNlbGVjdGVkRW5kRGF0ZSA/PyBudWxsO1xuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5ub3JtYWxpemVEYXRlVmFsdWUoc3RhcnRTb3VyY2UpO1xuICAgIGNvbnN0IGVuZCA9IHRoaXMubm9ybWFsaXplRGF0ZVZhbHVlKGVuZFNvdXJjZSk7XG4gICAgY29uc3QgY2xhbXAgPSAoZDogRGF0ZSB8IG51bGwpID0+IChkICYmIGQuZ2V0VGltZSgpID4gdGhpcy5tYXhEYXRlLmdldFRpbWUoKSA/IHRoaXMubWF4RGF0ZSA6IGQpO1xuICAgIHJldHVybiB7IHN0YXJ0OiBjbGFtcChzdGFydCksIGVuZDogY2xhbXAoZW5kKSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVEYXRlVmFsdWUodmFsdWU6IGFueSk6IERhdGUgfCBudWxsIHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTih2YWx1ZS5nZXRUaW1lKCkpKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGNvbnN0IHBhcnNlZCA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICByZXR1cm4gaXNOYU4ocGFyc2VkLmdldFRpbWUoKSkgPyBudWxsIDogcGFyc2VkO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnZva2VEYXRlUmFuZ2VDaGFuZ2Uoa2V5OiBzdHJpbmcsIGV2ZW50PzogTWF0RGF0ZXBpY2tlcklucHV0RXZlbnQ8RGF0ZT4gfCBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGl0ZW0gPSAodGhpcy5jb25maWcgfHwgW10pLmZpbmQoY2ZnID0+IGNmZy5rZXkgPT09IGtleSk7XG4gICAgaWYgKCFpdGVtPy5vbkRhdGVDaGFuZ2UpIHJldHVybjtcbiAgICBjb25zdCBkYXRlR3JvdXAgPSB0aGlzLmdldERhdGVHcm91cChrZXkpO1xuICAgIGlmICghZGF0ZUdyb3VwKSByZXR1cm47XG4gICAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSBkYXRlR3JvdXAuZ2V0UmF3VmFsdWUoKSB8fCB7fTtcbiAgICBpdGVtLm9uRGF0ZUNoYW5nZShcbiAgICAgIHtcbiAgICAgICAgc3RhcnQ6IHRoaXMubm9ybWFsaXplRGF0ZVZhbHVlKHN0YXJ0KSxcbiAgICAgICAgZW5kOiB0aGlzLm5vcm1hbGl6ZURhdGVWYWx1ZShlbmQpLFxuICAgICAgfSxcbiAgICAgIGV2ZW50XG4gICAgKTtcbiAgfVxuXG4gIC8vIE1hdCBkYXRlIHJhbmdlIHBpY2tlciBvdmVybGF5IHByZXNldCBoZWxwZXJzXG4gIGFwcGx5UHJlc2V0VG9Hcm91cChrZXk6IHN0cmluZywgcHJlc2V0S2V5OiAndG9kYXknIHwgJ2xhc3Q3ZGF5cycgfCAnbGFzdDMwZGF5cycgfCAnbGFzdDkwZGF5cycgfCAndGhpc21vbnRoJyB8ICdsYXN0bW9udGgnKTogdm9pZCB7XG4gICAgY29uc3QgZGF0ZUdyb3VwID0gdGhpcy5nZXREYXRlR3JvdXAoa2V5KTtcbiAgICBpZiAoIWRhdGVHcm91cCkgcmV0dXJuO1xuICAgIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gdGhpcy5nZXRQcmVzZXREYXRlcyhwcmVzZXRLZXkpO1xuICAgIGRhdGVHcm91cC5wYXRjaFZhbHVlKHsgc3RhcnQsIGVuZCB9KTtcbiAgICB0aGlzLmZpbHRlcnNDaGFuZ2VkLmVtaXQodGhpcy5zZXJpYWxpemUoKSk7XG4gICAgdGhpcy5pbnZva2VEYXRlUmFuZ2VDaGFuZ2Uoa2V5KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UHJlc2V0RGF0ZXMocHJlc2V0S2V5OiAndG9kYXknIHwgJ2xhc3Q3ZGF5cycgfCAnbGFzdDMwZGF5cycgfCAnbGFzdDkwZGF5cycgfCAndGhpc21vbnRoJyB8ICdsYXN0bW9udGgnKTogeyBzdGFydDogRGF0ZTsgZW5kOiBEYXRlIH0ge1xuICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBjbGFtcFRvRW5kT2ZUb2RheSA9IChkOiBEYXRlKSA9PiB7IGNvbnN0IG5kID0gbmV3IERhdGUoZCk7IG5kLnNldEhvdXJzKDIzLDU5LDU5LDk5OSk7IHJldHVybiBuZDsgfTtcbiAgICBzd2l0Y2ggKHByZXNldEtleSkge1xuICAgICAgY2FzZSAndG9kYXknOlxuICAgICAgICByZXR1cm4geyBzdGFydDogdG9kYXksIGVuZDogdG9kYXkgfTtcbiAgICAgIGNhc2UgJ2xhc3Q3ZGF5cyc6IHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSgpOyBzdGFydC5zZXREYXRlKHN0YXJ0LmdldERhdGUoKSAtIDYpO1xuICAgICAgICByZXR1cm4geyBzdGFydCwgZW5kOiB0b2RheSB9O1xuICAgICAgfVxuICAgICAgY2FzZSAnbGFzdDMwZGF5cyc6IHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSgpOyBzdGFydC5zZXREYXRlKHN0YXJ0LmdldERhdGUoKSAtIDI5KTtcbiAgICAgICAgcmV0dXJuIHsgc3RhcnQsIGVuZDogdG9kYXkgfTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2xhc3Q5MGRheXMnOiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUoKTsgc3RhcnQuc2V0RGF0ZShzdGFydC5nZXREYXRlKCkgLSA4OSk7XG4gICAgICAgIHJldHVybiB7IHN0YXJ0LCBlbmQ6IHRvZGF5IH07XG4gICAgICB9XG4gICAgICBjYXNlICd0aGlzbW9udGgnOiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUodG9kYXkuZ2V0RnVsbFllYXIoKSwgdG9kYXkuZ2V0TW9udGgoKSwgMSk7XG4gICAgICAgIHJldHVybiB7IHN0YXJ0LCBlbmQ6IHRvZGF5IH07XG4gICAgICB9XG4gICAgICBjYXNlICdsYXN0bW9udGgnOiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUodG9kYXkuZ2V0RnVsbFllYXIoKSwgdG9kYXkuZ2V0TW9udGgoKSAtIDEsIDEpO1xuICAgICAgICBjb25zdCBlbmQgPSBuZXcgRGF0ZSh0b2RheS5nZXRGdWxsWWVhcigpLCB0b2RheS5nZXRNb250aCgpLCAwKTtcbiAgICAgICAgcmV0dXJuIHsgc3RhcnQsIGVuZDogY2xhbXBUb0VuZE9mVG9kYXkoZW5kKSB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIHN0YXJ0T2ZEYXkoZDogRGF0ZSk6IERhdGUgeyBjb25zdCBuZCA9IG5ldyBEYXRlKGQpOyBuZC5zZXRIb3VycygwLDAsMCwwKTsgcmV0dXJuIG5kOyB9XG4gIHByaXZhdGUgZW5kT2ZEYXkoZDogRGF0ZSk6IERhdGUgeyBjb25zdCBuZCA9IG5ldyBEYXRlKGQpOyBuZC5zZXRIb3VycygyMyw1OSw1OSw5OTkpOyByZXR1cm4gbmQ7IH1cbiAgcHJpdmF0ZSBzdGFydE9mTW9udGgoeWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyKTogRGF0ZSB7IHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSwgMCwwLDAsMCk7IH1cbiAgcHJpdmF0ZSBlbmRPZk1vbnRoKHllYXI6IG51bWJlciwgbW9udGg6IG51bWJlcik6IERhdGUgeyByZXR1cm4gbmV3IERhdGUoeWVhciwgbW9udGggKyAxLCAwLCAyMyw1OSw1OSw5OTkpOyB9XG4gIHByaXZhdGUgYnVpbGROZ3hSYW5nZXMoKTogUmVjb3JkPHN0cmluZywgW0RhdGUsIERhdGVdPiB7XG4gICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IGxhc3Q3U3RhcnQgPSBuZXcgRGF0ZSgpOyBsYXN0N1N0YXJ0LnNldERhdGUobGFzdDdTdGFydC5nZXREYXRlKCkgLSA2KTtcbiAgICBjb25zdCBsYXN0MzBTdGFydCA9IG5ldyBEYXRlKCk7IGxhc3QzMFN0YXJ0LnNldERhdGUobGFzdDMwU3RhcnQuZ2V0RGF0ZSgpIC0gMjkpO1xuICAgIGNvbnN0IGxhc3Q5MFN0YXJ0ID0gbmV3IERhdGUoKTsgbGFzdDkwU3RhcnQuc2V0RGF0ZShsYXN0OTBTdGFydC5nZXREYXRlKCkgLSA4OSk7XG4gICAgY29uc3QgdGhpc01vbnRoU3RhcnQgPSB0aGlzLnN0YXJ0T2ZNb250aCh0b2RheS5nZXRGdWxsWWVhcigpLCB0b2RheS5nZXRNb250aCgpKTtcbiAgICBjb25zdCBsYXN0TW9udGhTdGFydCA9IHRoaXMuc3RhcnRPZk1vbnRoKHRvZGF5LmdldEZ1bGxZZWFyKCksIHRvZGF5LmdldE1vbnRoKCkgLSAxKTtcbiAgICBjb25zdCBsYXN0TW9udGhFbmQgPSB0aGlzLmVuZE9mTW9udGgodG9kYXkuZ2V0RnVsbFllYXIoKSwgdG9kYXkuZ2V0TW9udGgoKSAtIDEpO1xuICAgIHJldHVybiB7XG4gICAgICAnVG9kYXknOiBbdGhpcy5zdGFydE9mRGF5KHRvZGF5KSwgdGhpcy5lbmRPZkRheSh0b2RheSldLFxuICAgICAgJ0xhc3QgNyBEYXlzJzogW3RoaXMuc3RhcnRPZkRheShsYXN0N1N0YXJ0KSwgdGhpcy5lbmRPZkRheSh0b2RheSldLFxuICAgICAgJ0xhc3QgMzAgRGF5cyc6IFt0aGlzLnN0YXJ0T2ZEYXkobGFzdDMwU3RhcnQpLCB0aGlzLmVuZE9mRGF5KHRvZGF5KV0sXG4gICAgICAnTGFzdCA5MCBEYXlzJzogW3RoaXMuc3RhcnRPZkRheShsYXN0OTBTdGFydCksIHRoaXMuZW5kT2ZEYXkodG9kYXkpXSxcbiAgICAgICdUaGlzIE1vbnRoJzogW3RoaXMuc3RhcnRPZkRheSh0aGlzTW9udGhTdGFydCksIHRoaXMuZW5kT2ZEYXkodG9kYXkpXSxcbiAgICAgICdMYXN0IE1vbnRoJzogW3RoaXMuc3RhcnRPZkRheShsYXN0TW9udGhTdGFydCksIHRoaXMuZW5kT2ZEYXkobGFzdE1vbnRoRW5kKV0sXG4gICAgfTtcbiAgfVxuICBvbkRhdGVyYW5nZXBpY2tlckNoYW5nZShldmVudDogeyBzdGFydERhdGU6IERhdGUgfCBudWxsOyBlbmREYXRlOiBEYXRlIHwgbnVsbCB9LCBrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGdyb3VwID0gdGhpcy5nZXREYXRlR3JvdXAoa2V5KTtcbiAgICBpZiAoIWdyb3VwKSByZXR1cm47XG4gICAgXG4gICAgZ3JvdXAucGF0Y2hWYWx1ZSh7XG4gICAgICBzdGFydDogZXZlbnQuc3RhcnREYXRlLFxuICAgICAgZW5kOiBldmVudC5lbmREYXRlXG4gICAgfSwgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gICAgXG4gICAgY29uc3Qgc2VyaWFsaXplZCA9IHRoaXMuc2VyaWFsaXplKCk7XG4gICAgdGhpcy5oYXNTZWxlY3RlZEZpbHRlcnMgPSBPYmplY3Qua2V5cyhzZXJpYWxpemVkKS5sZW5ndGggPiAwO1xuICAgIHRoaXMuZmlsdGVyc0NoYW5nZWQuZW1pdChzZXJpYWxpemVkKTtcbiAgICB0aGlzLmludm9rZURhdGVSYW5nZUNoYW5nZShrZXkpO1xuICB9XG5cbiAgb25EYXRlcmFuZ2VwaWNrZXJBcHBseShldmVudDogeyBzdGFydERhdGU6IERhdGUgfCBudWxsOyBlbmREYXRlOiBEYXRlIHwgbnVsbCB9LCBrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMub25EYXRlcmFuZ2VwaWNrZXJDaGFuZ2UoZXZlbnQsIGtleSk7XG4gICAgLy8gT3B0aW9uYWxseSB0cmlnZ2VyIGFwcGx5IGFjdGlvblxuICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSB0aGlzLnNlcmlhbGl6ZSgpO1xuICAgIGlmIChldmVudC5zdGFydERhdGUgJiYgZXZlbnQuZW5kRGF0ZSkge1xuICAgICAgLy8gRG9uJ3QgYXV0by1hcHBseSwgbGV0IHVzZXIgY2xpY2sgQXBwbHkgRmlsdGVyIGJ1dHRvblxuICAgIH1cbiAgfVxuXG4gIGdldERhdGVyYW5nZXBpY2tlclJhbmdlcygpOiBhbnkge1xuICAgIC8vIFVzZSB0aGUgZXhpc3RpbmcgZ2V0UHJlc2V0RGF0ZXMgbG9naWMgdG8gZW5zdXJlIGNvbnNpc3RlbmN5XG4gICAgY29uc3QgdG9kYXlQcmVzZXQgPSB0aGlzLmdldFByZXNldERhdGVzKCd0b2RheScpO1xuICAgIGNvbnN0IGxhc3Q3UHJlc2V0ID0gdGhpcy5nZXRQcmVzZXREYXRlcygnbGFzdDdkYXlzJyk7XG4gICAgY29uc3QgbGFzdDMwUHJlc2V0ID0gdGhpcy5nZXRQcmVzZXREYXRlcygnbGFzdDMwZGF5cycpO1xuICAgIGNvbnN0IGxhc3Q5MFByZXNldCA9IHRoaXMuZ2V0UHJlc2V0RGF0ZXMoJ2xhc3Q5MGRheXMnKTtcbiAgICBjb25zdCB0aGlzTW9udGhQcmVzZXQgPSB0aGlzLmdldFByZXNldERhdGVzKCd0aGlzbW9udGgnKTtcbiAgICBjb25zdCBsYXN0TW9udGhQcmVzZXQgPSB0aGlzLmdldFByZXNldERhdGVzKCdsYXN0bW9udGgnKTtcbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgJ1RvZGF5JzogW3RvZGF5UHJlc2V0LnN0YXJ0LCB0aGlzLmVuZE9mRGF5KHRvZGF5UHJlc2V0LmVuZCldLFxuICAgICAgJ0xhc3QgNyBEYXlzJzogW2xhc3Q3UHJlc2V0LnN0YXJ0LCB0aGlzLmVuZE9mRGF5KGxhc3Q3UHJlc2V0LmVuZCldLFxuICAgICAgJ0xhc3QgMzAgRGF5cyc6IFtsYXN0MzBQcmVzZXQuc3RhcnQsIHRoaXMuZW5kT2ZEYXkobGFzdDMwUHJlc2V0LmVuZCldLFxuICAgICAgJ0xhc3QgOTAgRGF5cyc6IFtsYXN0OTBQcmVzZXQuc3RhcnQsIHRoaXMuZW5kT2ZEYXkobGFzdDkwUHJlc2V0LmVuZCldLFxuICAgICAgJ1RoaXMgTW9udGgnOiBbdGhpc01vbnRoUHJlc2V0LnN0YXJ0LCB0aGlzLmVuZE9mRGF5KHRoaXNNb250aFByZXNldC5lbmQpXSxcbiAgICAgICdMYXN0IE1vbnRoJzogW2xhc3RNb250aFByZXNldC5zdGFydCwgdGhpcy5lbmRPZkRheShsYXN0TW9udGhQcmVzZXQuZW5kKV1cbiAgICB9O1xuICB9XG5cbiAgZ2V0RGF0ZVZhbGlkYXRpb25FcnJvcihrZXk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGRhdGVHcm91cCA9IHRoaXMuZ2V0RGF0ZUdyb3VwKGtleSk7XG4gICAgaWYgKCFkYXRlR3JvdXApIHJldHVybiBudWxsO1xuXG4gICAgY29uc3Qgc3RhcnRDdHJsID0gZGF0ZUdyb3VwLmNvbnRyb2xzWydzdGFydCddO1xuICAgIGNvbnN0IGVuZEN0cmwgPSBkYXRlR3JvdXAuY29udHJvbHNbJ2VuZCddO1xuICAgIGNvbnN0IHN0YXJ0VmFsID0gc3RhcnRDdHJsPy52YWx1ZTtcbiAgICBjb25zdCBlbmRWYWwgPSBlbmRDdHJsPy52YWx1ZTtcblxuICAgIGlmICghc3RhcnRWYWwgJiYgIWVuZFZhbCkgcmV0dXJuIG51bGw7XG5cbiAgICBpZiAoc3RhcnRWYWwgJiYgIWVuZFZhbCkgcmV0dXJuIGBQbGVhc2Ugc2VsZWN0IGFuIGVuZCBkYXRlYDtcbiAgICBpZiAoIXN0YXJ0VmFsICYmIGVuZFZhbCkgcmV0dXJuIGBQbGVhc2Ugc2VsZWN0IGEgc3RhcnQgZGF0ZWA7XG5cbiAgICBpZiAoZGF0ZUdyb3VwLmludmFsaWQpIHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnPy5maW5kKGMgPT4gYy5rZXkgPT09IGtleSk7XG4gICAgICByZXR1cm4gY29uZmlnID8gYCR7Y29uZmlnLmxhYmVsfSBpcyBpbnZhbGlkYCA6ICdEYXRlIHJhbmdlIGlzIGludmFsaWQnO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gRHluYW1pYyBEYXRlIFBpY2tlciBJbnRlZ3JhdGlvbiBNZXRob2RzIHJlbW92ZWQgKGNvbXBvbmVudCBubyBsb25nZXIgdXNlZClcbn1cblxuXG4iLCI8ZGl2IGNsYXNzPVwiY3FhLXVpLXJvb3QgY3FhLXVpLWRhdGVyYW5nZS1waWNrZXJcIj5cbiAgPGRpdiBjbGFzcz1cImNxYS1maWx0ZXIgY3FhLW1iLVsyOHB4XVwiICpuZ0lmPVwic2hvd0ZpbHRlclBhbmVsXCIgc3R5bGU9XCJoZWlnaHQ6IGF1dG87XCI+XG4gICAgPCEtLSBCb3R0b20gTGF5b3V0OiBDdXJyZW50IGRlc2lnbiB3aXRoIHNlbGVjdG9ycyBpbiBncmlkIGFuZCBidXR0b25zIGJlbG93IC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJidXR0b25MYXlvdXQgPT09ICdib3R0b20nXCI+XG4gICAgICA8Zm9ybSBjbGFzcz1cInRzLWZvcm0gY3FhLWdyaWQgbGc6Y3FhLWdyaWQtY29scy00IG1kOmNxYS1ncmlkLWNvbHMtMiBjcWEtZ2FwLTQgY3FhLXJlbGF0aXZlXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiKGZhbHNlKVwiIG5vdmFsaWRhdGU9XCJub3ZhbGlkYXRlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGMgb2YgY29uZmlnXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjLmhpZGRlblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgY3VzLXJhbmdlLXNlbGVjdCBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yIGNxYS1mbGV4LXNocmluay0wIGZpbHRlci1zZWxlY3Rvci13aWR0aCBjcWEtdy1mdWxsXCI+XG4gICAgICAgICAgICAgIDwhLS0gU2VsZWN0IC0tPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYy50eXBlID09PSAnc2VsZWN0J1wiPlxuICAgICAgICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3QgW2Zvcm1dPVwiZm9ybVwiIFtjb25maWddPVwiZ2V0U2VsZWN0Q29uZmlnKGMpXCI+PC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgIDwhLS0gRGF0ZSBSYW5nZSBQaWNrZXIgLS0+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjLnR5cGUgPT09ICdkYXRlLXJhbmdlLXBpY2tlcidcIj5cbiAgICAgICAgICAgICAgICA8Y3FhLWRhdGVyYW5nZXBpY2tlclxuICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImMubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImMucGxhY2Vob2xkZXIgfHwgJ1N0YXJ0IERhdGUgLSBFbmQgRGF0ZSdcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImMuZGlzYWJsZWQgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgW3N0YXJ0RGF0ZV09XCJnZXREYXRlR3JvdXAoYy5rZXkpPy5nZXQoJ3N0YXJ0Jyk/LnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgIFtlbmREYXRlXT1cImdldERhdGVHcm91cChjLmtleSk/LmdldCgnZW5kJyk/LnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgIFttaW5EYXRlXT1cInVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgICBbbWF4RGF0ZV09XCJtYXhEYXRlXCJcbiAgICAgICAgICAgICAgICAgIFtyYW5nZXNdPVwiZ2V0RGF0ZXJhbmdlcGlja2VyUmFuZ2VzKClcIlxuICAgICAgICAgICAgICAgICAgW2F1dG9BcHBseV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFthbHdheXNTaG93Q2FsZW5kYXJzXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW29wZW5zXT1cImMub3BlbnMgfHwgJ2NlbnRlcidcIlxuICAgICAgICAgICAgICAgICAgW2Ryb3BzXT1cImMuZHJvcHMgfHwgJ2F1dG8nXCJcbiAgICAgICAgICAgICAgICAgIFtwYXJlbnRFbF09XCJjLnBhcmVudEVsXCJcbiAgICAgICAgICAgICAgICAgIChkYXRlc1VwZGF0ZWQpPVwib25EYXRlcmFuZ2VwaWNrZXJDaGFuZ2UoJGV2ZW50LCBjLmtleSlcIlxuICAgICAgICAgICAgICAgICAgKGFwcGx5Q2xpY2tlZCk9XCJvbkRhdGVyYW5nZXBpY2tlckFwcGx5KCRldmVudCwgYy5rZXkpXCI+XG4gICAgICAgICAgICAgICAgPC9jcWEtZGF0ZXJhbmdlcGlja2VyPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJnZXREYXRlR3JvdXAoYy5rZXkpPy5pbnZhbGlkICYmIGdldERhdGVHcm91cChjLmtleSk/LnRvdWNoZWRcIj5cbiAgICAgICAgICAgICAgICAgIHt7IGdldERhdGVWYWxpZGF0aW9uRXJyb3IoYy5rZXkpIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9mb3JtPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWp1c3RpZnktZW5kIGNxYS1pdGVtcy1zdHJldGNoIGNxYS1nYXAtMiBjcWEtbXQtNFwiPlxuICAgICAgICA8Y3FhLWJ1dHRvbiB2YXJpYW50PVwiZmlsbGVkXCIgKG1vdXNlZG93bik9XCJwcmVwYXJlUHJpbWFyeUFjdGlvbigpXCIgKGNsaWNrZWQpPVwiYXBwbHkoKVwiIFtkaXNhYmxlZF09XCIhaGFzU2VsZWN0ZWRGaWx0ZXJzXCI+QXBwbHkgRmlsdGVyPC9jcWEtYnV0dG9uPlxuICAgICAgICA8Y3FhLWJ1dHRvbiB2YXJpYW50PVwib3V0bGluZWRcIiAobW91c2Vkb3duKT1cInByZXBhcmVQcmltYXJ5QWN0aW9uKClcIiAoY2xpY2tlZCk9XCJyZXNldCgpXCIgW2Rpc2FibGVkXT1cIiFoYXNTZWxlY3RlZEZpbHRlcnNcIj5SZXNldDwvY3FhLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSBSaWdodCBMYXlvdXQ6IEJ1dHRvbnMgb24gbGVmdG1vc3Qgc2lkZSwgc2VsZWN0b3JzIG9uIHJpZ2h0bW9zdCBzaWRlIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJidXR0b25MYXlvdXQgPT09ICdyaWdodCdcIj5cbiAgICAgIDxmb3JtIGNsYXNzPVwidHMtZm9ybSBjcWEtZmxleCBjcWEtZmxleC13cmFwIGNxYS1pdGVtcy1lbmQgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtZ2FwLTQgY3FhLXVpLWRhdGVyYW5nZS1waWNrZXIgY3FhLXJlbGF0aXZlXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiKGZhbHNlKVwiIG5vdmFsaWRhdGU9XCJub3ZhbGlkYXRlXCIgc3R5bGU9XCJoZWlnaHQ6IGF1dG87XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtc3RyZXRjaCBjcWEtZ2FwLTIgY3FhLWZsZXgtc2hyaW5rLTAgY3FhLW9yZGVyLWZpcnN0IGNxYS1tci1hdXRvXCI+XG4gICAgICAgICAgPGNxYS1idXR0b24gdmFyaWFudD1cImZpbGxlZFwiIChjbGlja2VkKT1cImFwcGx5KClcIiBbZGlzYWJsZWRdPVwiIWhhc1NlbGVjdGVkRmlsdGVyc1wiPkFwcGx5IEZpbHRlcjwvY3FhLWJ1dHRvbj5cbiAgICAgICAgICA8Y3FhLWJ1dHRvbiB2YXJpYW50PVwib3V0bGluZWRcIiAoY2xpY2tlZCk9XCJyZXNldCgpXCIgW2Rpc2FibGVkXT1cIiFoYXNTZWxlY3RlZEZpbHRlcnNcIj5SZXNldDwvY3FhLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC13cmFwIGNxYS1pdGVtcy1lbmQgY3FhLWdhcC00IGNxYS1mbGV4LTEgY3FhLWp1c3RpZnktZW5kIGNxYS1vcmRlci1sYXN0IGNxYS1tbC1hdXRvXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYyBvZiBjb25maWdcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWMuaGlkZGVuXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yIGNxYS1mbGV4LXNocmluay0wIGZpbHRlci1zZWxlY3Rvci13aWR0aFwiPlxuICAgICAgICAgICAgICA8IS0tIFNlbGVjdCAtLT5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImMudHlwZSA9PT0gJ3NlbGVjdCdcIj5cbiAgICAgICAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0IFtmb3JtXT1cImZvcm1cIiBbY29uZmlnXT1cImdldFNlbGVjdENvbmZpZyhjKVwiPjwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICA8IS0tIERhdGUgUmFuZ2UgKERhdGVyYW5nZXBpY2tlcikgLS0+IFxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYy50eXBlID09PSAnZGF0ZS1yYW5nZS1waWNrZXInXCI+XG4gICAgICAgICAgICAgICAgPGNxYS1kYXRlcmFuZ2VwaWNrZXJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjLnBsYWNlaG9sZGVyIHx8ICdTdGFydCBEYXRlIC0gRW5kIERhdGUnXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjLmRpc2FibGVkIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIFtzdGFydERhdGVdPVwiZ2V0RGF0ZUdyb3VwKGMua2V5KT8uZ2V0KCdzdGFydCcpPy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICBbZW5kRGF0ZV09XCJnZXREYXRlR3JvdXAoYy5rZXkpPy5nZXQoJ2VuZCcpPy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICBbbWluRGF0ZV09XCJ1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgW21heERhdGVdPVwibWF4RGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbcmFuZ2VzXT1cImdldERhdGVyYW5nZXBpY2tlclJhbmdlcygpXCJcbiAgICAgICAgICAgICAgICAgIFthdXRvQXBwbHldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbYWx3YXlzU2hvd0NhbGVuZGFyc109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtvcGVuc109XCJjLm9wZW5zIHx8ICdjZW50ZXInXCJcbiAgICAgICAgICAgICAgICAgIFtkcm9wc109XCJjLmRyb3BzIHx8ICdhdXRvJ1wiXG4gICAgICAgICAgICAgICAgICBbcGFyZW50RWxdPVwiYy5wYXJlbnRFbFwiXG4gICAgICAgICAgICAgICAgICAoZGF0ZXNVcGRhdGVkKT1cIm9uRGF0ZXJhbmdlcGlja2VyQ2hhbmdlKCRldmVudCwgYy5rZXkpXCJcbiAgICAgICAgICAgICAgICAgIChhcHBseUNsaWNrZWQpPVwib25EYXRlcmFuZ2VwaWNrZXJBcHBseSgkZXZlbnQsIGMua2V5KVwiPlxuICAgICAgICAgICAgICAgIDwvY3FhLWRhdGVyYW5nZXBpY2tlcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiZ2V0RGF0ZUdyb3VwKGMua2V5KT8uaW52YWxpZCAmJiBnZXREYXRlR3JvdXAoYy5rZXkpPy50b3VjaGVkXCI+XG4gICAgICAgICAgICAgICAgICB7eyBnZXREYXRlVmFsaWRhdGlvbkVycm9yKGMua2V5KSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Zvcm0+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIExlZnQgTGF5b3V0OiBTZWxlY3RvcnMgb24gbGVmdG1vc3Qgc2lkZSwgYnV0dG9ucyBvbiByaWdodG1vc3Qgc2lkZSAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYnV0dG9uTGF5b3V0ID09PSAnbGVmdCdcIj5cbiAgICAgIDxmb3JtIGNsYXNzPVwidHMtZm9ybSBjcWEtZmxleCBjcWEtZmxleC13cmFwIGNxYS1pdGVtcy1lbmQgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtZ2FwLTQgY3FhLXVpLWRhdGVyYW5nZS1waWNrZXIgY3FhLXJlbGF0aXZlXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiKGZhbHNlKVwiIG5vdmFsaWRhdGU9XCJub3ZhbGlkYXRlXCIgc3R5bGU9XCJoZWlnaHQ6IGF1dG87XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC13cmFwIGNxYS1pdGVtcy1lbmQgY3FhLWdhcC00IGNxYS1mbGV4LTEgY3FhLW9yZGVyLWZpcnN0IGNxYS1tci1hdXRvXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYyBvZiBjb25maWdcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWMuaGlkZGVuXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yIGNxYS1mbGV4LXNocmluay0wIGZpbHRlci1zZWxlY3Rvci13aWR0aFwiPlxuICAgICAgICAgICAgICA8IS0tIFNlbGVjdCAtLT5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImMudHlwZSA9PT0gJ3NlbGVjdCdcIj5cbiAgICAgICAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0IFtmb3JtXT1cImZvcm1cIiBbY29uZmlnXT1cImdldFNlbGVjdENvbmZpZyhjKVwiPjwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICA8IS0tIERhdGUgUmFuZ2UgKERhdGVyYW5nZXBpY2tlcikgLS0+IFxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYy50eXBlID09PSAnZGF0ZS1yYW5nZS1waWNrZXInXCI+XG4gICAgICAgICAgICAgICAgPGNxYS1kYXRlcmFuZ2VwaWNrZXJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjLnBsYWNlaG9sZGVyIHx8ICdTdGFydCBEYXRlIC0gRW5kIERhdGUnXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjLmRpc2FibGVkIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIFtzdGFydERhdGVdPVwiZ2V0RGF0ZUdyb3VwKGMua2V5KT8uZ2V0KCdzdGFydCcpPy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICBbZW5kRGF0ZV09XCJnZXREYXRlR3JvdXAoYy5rZXkpPy5nZXQoJ2VuZCcpPy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICBbbWluRGF0ZV09XCJ1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgW21heERhdGVdPVwibWF4RGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbcmFuZ2VzXT1cImdldERhdGVyYW5nZXBpY2tlclJhbmdlcygpXCJcbiAgICAgICAgICAgICAgICAgIFthdXRvQXBwbHldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbYWx3YXlzU2hvd0NhbGVuZGFyc109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtvcGVuc109XCJjLm9wZW5zIHx8ICdjZW50ZXInXCJcbiAgICAgICAgICAgICAgICAgIFtkcm9wc109XCJjLmRyb3BzIHx8ICdhdXRvJ1wiXG4gICAgICAgICAgICAgICAgICBbcGFyZW50RWxdPVwiYy5wYXJlbnRFbFwiXG4gICAgICAgICAgICAgICAgICAoZGF0ZXNVcGRhdGVkKT1cIm9uRGF0ZXJhbmdlcGlja2VyQ2hhbmdlKCRldmVudCwgYy5rZXkpXCJcbiAgICAgICAgICAgICAgICAgIChhcHBseUNsaWNrZWQpPVwib25EYXRlcmFuZ2VwaWNrZXJBcHBseSgkZXZlbnQsIGMua2V5KVwiPlxuICAgICAgICAgICAgICAgIDwvY3FhLWRhdGVyYW5nZXBpY2tlcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiZ2V0RGF0ZUdyb3VwKGMua2V5KT8uaW52YWxpZCAmJiBnZXREYXRlR3JvdXAoYy5rZXkpPy50b3VjaGVkXCI+XG4gICAgICAgICAgICAgICAgICB7eyBnZXREYXRlVmFsaWRhdGlvbkVycm9yKGMua2V5KSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtc3RyZXRjaCBjcWEtZ2FwLTIgY3FhLWZsZXgtc2hyaW5rLTAgY3FhLW9yZGVyLWxhc3QgY3FhLW1sLWF1dG9cIj5cbiAgICAgICAgICA8Y3FhLWJ1dHRvbiB2YXJpYW50PVwiZmlsbGVkXCIgKG1vdXNlZG93bik9XCJwcmVwYXJlUHJpbWFyeUFjdGlvbigpXCIgKGNsaWNrZWQpPVwiYXBwbHkoKVwiIFtkaXNhYmxlZF09XCIhaGFzU2VsZWN0ZWRGaWx0ZXJzXCI+QXBwbHkgRmlsdGVyPC9jcWEtYnV0dG9uPlxuICAgICAgICAgIDxjcWEtYnV0dG9uIHZhcmlhbnQ9XCJvdXRsaW5lZFwiICAobW91c2Vkb3duKT1cInByZXBhcmVQcmltYXJ5QWN0aW9uKClcIiAoY2xpY2tlZCk9XCJyZXNldCgpXCIgW2Rpc2FibGVkXT1cIiFoYXNTZWxlY3RlZEZpbHRlcnNcIj5SZXNldDwvY3FhLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Zvcm0+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+Il19
|
|
@@ -171,7 +171,7 @@ export class IterationsLoopComponent {
|
|
|
171
171
|
}
|
|
172
172
|
}
|
|
173
173
|
IterationsLoopComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: IterationsLoopComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
174
|
-
IterationsLoopComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: IterationsLoopComponent, selector: "cqa-iterations-loop", inputs: { iterations: "iterations", summary: "summary", isTableDataLoading: "isTableDataLoading" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-ui-root\" style=\"display: block; width: 100%;\">\n <div class=\"cqa-flex cqa-flex-col\">\n <div class=\"cqa-bg-white\">\n <cqa-table-template\n [columns]=\"tableColumns\"\n [data]=\"iterations\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [isEmptyState]=\"isEmptyState\"\n [emptyStateConfig]=\"emptyStateConfig\"\n [isTableDataLoading]=\"isTableDataLoading\"\n [showSearchBar]=\"false\"\n [showFilterButton]=\"false\"\n [showSettingsButton]=\"false\"\n [showAutoRefreshButton]=\"false\"\n [showOtherButton]=\"false\"\n [showFilterPanel]=\"false\"\n [serverSidePagination]=\"false\"\n (pageChange)=\"onPageChange($event)\">\n </cqa-table-template>\n </div>\n\n <div *ngIf=\"!isEmptyState\" class=\"cqa-p-[17px] cqa-mt-6 cqa-bg-[#FBFCFF] cqa-rounded-[5px]\" style=\"border: 1px solid #E5E5E5;\">\n <h4 class=\"cqa-text-[16px] cqa-text-[#111827] cqa-mb-3\">Summary</h4>\n <div class=\"cqa-grid cqa-grid-cols-3 cqa-gap-4\">\n <div class=\"cqa-flex cqa-flex-col\">\n <span class=\"cqa-text-sm cqa-text-[#4A5565] cqa-mb-1\">Total Iterations</span>\n <span class=\"cqa-text-[22px] cqa-leading-[28px] cqa-font-semibold cqa-text-[#0B0B0B]\">{{ computedSummary.totalIterations }}</span>\n </div>\n <div class=\"cqa-flex cqa-flex-col\">\n <span class=\"cqa-text-sm cqa-text-[#4A5565] cqa-mb-1\">Passed</span>\n <span class=\"cqa-text-[22px] cqa-leading-[28px] cqa-font-semibold cqa-text-[#00C950]\">{{ computedSummary.passed }}</span>\n </div>\n <div class=\"cqa-flex cqa-flex-col\">\n <span class=\"cqa-text-sm cqa-text-[#4A5565] cqa-mb-1\">Failed</span>\n <span class=\"cqa-text-[22px] cqa-leading-[28px] cqa-font-semibold cqa-text-[#FB2C36]\">{{ computedSummary.failed }}</span>\n </div>\n </div>\n </div>\n </div>\n</div>\n\n", components: [{ type: i1.TableTemplateComponent, selector: "cqa-table-template", inputs: ["searchPlaceholder", "searchValue", "showClear", "showSearchBar", "showExportButton", "isExporting", "filterConfig", "showFilterPanel", "showFilterButton", "otherButtons", "otherDropDownButtons", "otherSelectDropDownButtons", "otherButtonLabel", "otherButtonVariant", "showOtherButton", "showActionButton", "showSettingsButton", "showAutoRefreshButton", "data", "isEmptyState", "emptyStateConfig", "actions", "chips", "filterApplied", "columns", "selectedAutoRefreshInterval", "pageIndex", "pageSize", "pageSizeOptions", "serverSidePagination", "totalElements", "isTableLoading", "isTableDataLoading", "cellJsonPathGetter", "onJsonPathCopiedHandler", "selectedItems"], outputs: ["onSearchChange", "onExportClick", "onApplyFilterClick", "onResetFilterClick", "onClearAll", "removeChip", "pageChange", "onReload", "onAutoRefreshClick"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
174
|
+
IterationsLoopComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: IterationsLoopComponent, selector: "cqa-iterations-loop", inputs: { iterations: "iterations", summary: "summary", isTableDataLoading: "isTableDataLoading" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-ui-root\" style=\"display: block; width: 100%;\">\n <div class=\"cqa-flex cqa-flex-col\">\n <div class=\"cqa-bg-white\">\n <cqa-table-template\n [columns]=\"tableColumns\"\n [data]=\"iterations\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [isEmptyState]=\"isEmptyState\"\n [emptyStateConfig]=\"emptyStateConfig\"\n [isTableDataLoading]=\"isTableDataLoading\"\n [showSearchBar]=\"false\"\n [showFilterButton]=\"false\"\n [showSettingsButton]=\"false\"\n [showAutoRefreshButton]=\"false\"\n [showOtherButton]=\"false\"\n [showFilterPanel]=\"false\"\n [serverSidePagination]=\"false\"\n (pageChange)=\"onPageChange($event)\">\n </cqa-table-template>\n </div>\n\n <div *ngIf=\"!isEmptyState\" class=\"cqa-p-[17px] cqa-mt-6 cqa-bg-[#FBFCFF] cqa-rounded-[5px]\" style=\"border: 1px solid #E5E5E5;\">\n <h4 class=\"cqa-text-[16px] cqa-text-[#111827] cqa-mb-3\">Summary</h4>\n <div class=\"cqa-grid cqa-grid-cols-3 cqa-gap-4\">\n <div class=\"cqa-flex cqa-flex-col\">\n <span class=\"cqa-text-sm cqa-text-[#4A5565] cqa-mb-1\">Total Iterations</span>\n <span class=\"cqa-text-[22px] cqa-leading-[28px] cqa-font-semibold cqa-text-[#0B0B0B]\">{{ computedSummary.totalIterations }}</span>\n </div>\n <div class=\"cqa-flex cqa-flex-col\">\n <span class=\"cqa-text-sm cqa-text-[#4A5565] cqa-mb-1\">Passed</span>\n <span class=\"cqa-text-[22px] cqa-leading-[28px] cqa-font-semibold cqa-text-[#00C950]\">{{ computedSummary.passed }}</span>\n </div>\n <div class=\"cqa-flex cqa-flex-col\">\n <span class=\"cqa-text-sm cqa-text-[#4A5565] cqa-mb-1\">Failed</span>\n <span class=\"cqa-text-[22px] cqa-leading-[28px] cqa-font-semibold cqa-text-[#FB2C36]\">{{ computedSummary.failed }}</span>\n </div>\n </div>\n </div>\n </div>\n</div>\n\n", components: [{ type: i1.TableTemplateComponent, selector: "cqa-table-template", inputs: ["searchPlaceholder", "searchValue", "showClear", "showSearchBar", "showExportButton", "isExporting", "filterConfig", "showFilterPanel", "showFilterButton", "otherButtons", "otherDropDownButtons", "otherSelectDropDownButtons", "otherButtonLabel", "otherButtonVariant", "showOtherButton", "showActionButton", "showSettingsButton", "showAutoRefreshButton", "data", "isEmptyState", "emptyStateConfig", "actions", "chips", "filterApplied", "columns", "rowSelectable", "selectedAutoRefreshInterval", "pageIndex", "pageSize", "pageSizeOptions", "serverSidePagination", "totalElements", "isTableLoading", "isTableDataLoading", "cellJsonPathGetter", "onJsonPathCopiedHandler", "selectedItems"], outputs: ["onSearchChange", "onExportClick", "onApplyFilterClick", "onResetFilterClick", "onClearAll", "removeChip", "pageChange", "onReload", "onAutoRefreshClick"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
175
175
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: IterationsLoopComponent, decorators: [{
|
|
176
176
|
type: Component,
|
|
177
177
|
args: [{ selector: 'cqa-iterations-loop', template: "<div class=\"cqa-ui-root\" style=\"display: block; width: 100%;\">\n <div class=\"cqa-flex cqa-flex-col\">\n <div class=\"cqa-bg-white\">\n <cqa-table-template\n [columns]=\"tableColumns\"\n [data]=\"iterations\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [isEmptyState]=\"isEmptyState\"\n [emptyStateConfig]=\"emptyStateConfig\"\n [isTableDataLoading]=\"isTableDataLoading\"\n [showSearchBar]=\"false\"\n [showFilterButton]=\"false\"\n [showSettingsButton]=\"false\"\n [showAutoRefreshButton]=\"false\"\n [showOtherButton]=\"false\"\n [showFilterPanel]=\"false\"\n [serverSidePagination]=\"false\"\n (pageChange)=\"onPageChange($event)\">\n </cqa-table-template>\n </div>\n\n <div *ngIf=\"!isEmptyState\" class=\"cqa-p-[17px] cqa-mt-6 cqa-bg-[#FBFCFF] cqa-rounded-[5px]\" style=\"border: 1px solid #E5E5E5;\">\n <h4 class=\"cqa-text-[16px] cqa-text-[#111827] cqa-mb-3\">Summary</h4>\n <div class=\"cqa-grid cqa-grid-cols-3 cqa-gap-4\">\n <div class=\"cqa-flex cqa-flex-col\">\n <span class=\"cqa-text-sm cqa-text-[#4A5565] cqa-mb-1\">Total Iterations</span>\n <span class=\"cqa-text-[22px] cqa-leading-[28px] cqa-font-semibold cqa-text-[#0B0B0B]\">{{ computedSummary.totalIterations }}</span>\n </div>\n <div class=\"cqa-flex cqa-flex-col\">\n <span class=\"cqa-text-sm cqa-text-[#4A5565] cqa-mb-1\">Passed</span>\n <span class=\"cqa-text-[22px] cqa-leading-[28px] cqa-font-semibold cqa-text-[#00C950]\">{{ computedSummary.passed }}</span>\n </div>\n <div class=\"cqa-flex cqa-flex-col\">\n <span class=\"cqa-text-sm cqa-text-[#4A5565] cqa-mb-1\">Failed</span>\n <span class=\"cqa-text-[22px] cqa-leading-[28px] cqa-font-semibold cqa-text-[#FB2C36]\">{{ computedSummary.failed }}</span>\n </div>\n </div>\n </div>\n </div>\n</div>\n\n", styles: [] }]
|
|
@@ -13,8 +13,10 @@ export class DynamicCellContainerDirective {
|
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
15
|
ngOnChanges(changes) {
|
|
16
|
-
if (this.componentRef &&
|
|
17
|
-
|
|
16
|
+
if (this.componentRef &&
|
|
17
|
+
this.componentConfig &&
|
|
18
|
+
(changes['componentConfig'] || changes['row'] || changes['column'] || changes['rowIndex'] || changes['colId'])) {
|
|
19
|
+
// Refresh component inputs when config or row context changes.
|
|
18
20
|
const inputs = this.getComponentInputs(this.componentConfig);
|
|
19
21
|
Object.keys(inputs).forEach(inputKey => {
|
|
20
22
|
if (this.componentRef?.instance && inputKey in this.componentRef.instance) {
|
|
@@ -115,4 +117,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
115
117
|
}], colId: [{
|
|
116
118
|
type: Input
|
|
117
119
|
}] } });
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1jZWxsLWNvbnRhaW5lci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3RhYmxlL2R5bmFtaWMtdGFibGUvZHluYW1pYy1jZWxsLWNvbnRhaW5lci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBb0IsS0FBSyxFQUFzRixNQUFNLGVBQWUsQ0FBQzs7QUFPdkosTUFBTSxPQUFPLDZCQUE2QjtJQVV4QyxZQUNTLGdCQUFrQyxFQUNqQyxHQUFzQjtRQUR2QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2pDLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBSnhCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO0lBS3pCLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUM3QyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7U0FDekI7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxPQUFPLENBQUMsaUJBQWlCLENBQUMsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQzNFLDRDQUE0QztZQUM1QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQzdELE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUNyQyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsUUFBUSxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRTtvQkFDeEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxR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QUNqRTtJQUNILENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxLQUF3QztRQUNoRSxJQUFJLE9BQU8sS0FBSyxLQUFLLFVBQVUsRUFBRTtZQUMvQixPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRTtZQUNoRCxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUM7U0FDeEI7UUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVPLGtCQUFrQixDQUFDLEtBQXdDO1FBQ2pFLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDN0MsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDO1NBQ3JCO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRU8sbUJBQW1CLENBQUMsS0FBd0M7UUFDbEUsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUM5QyxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUM7U0FDdEI7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7OzBIQS9HVSw2QkFBNkI7OEdBQTdCLDZCQUE2QjsyRkFBN0IsNkJBQTZCO2tCQUp6QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFFBQVEsRUFBRSxrQkFBa0I7aUJBQzdCO3VJQUVVLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgVmlld0NvbnRhaW5lclJlZiwgSW5wdXQsIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIENvbXBvbmVudFJlZiwgVHlwZSwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbXBvbmVudFJlbmRlckNvbmZpZyB9IGZyb20gJy4vY29tcG9uZW50LXJlbmRlci1jb25maWcuaW50ZXJmYWNlJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2NxYUNlbGxDb250YWluZXJdJyxcbiAgZXhwb3J0QXM6ICdjcWFDZWxsQ29udGFpbmVyJ1xufSlcbmV4cG9ydCBjbGFzcyBEeW5hbWljQ2VsbENvbnRhaW5lckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBjb21wb25lbnRDb25maWc/OiBUeXBlPGFueT4gfCBDb21wb25lbnRSZW5kZXJDb25maWc7XG4gIEBJbnB1dCgpIHJvdz86IGFueTtcbiAgQElucHV0KCkgY29sdW1uPzogYW55O1xuICBASW5wdXQoKSByb3dJbmRleD86IG51bWJlcjtcbiAgQElucHV0KCkgY29sSWQ/OiBzdHJpbmc7XG4gIFxuICBwcml2YXRlIGNvbXBvbmVudFJlZj86IENvbXBvbmVudFJlZjxhbnk+O1xuICBwcml2YXRlIGluaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb21wb25lbnRDb25maWcgJiYgIXRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgIHRoaXMuY3JlYXRlQ29tcG9uZW50KCk7XG4gICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29tcG9uZW50UmVmICYmIGNoYW5nZXNbJ2NvbXBvbmVudENvbmZpZyddICYmIHRoaXMuY29tcG9uZW50Q29uZmlnKSB7XG4gICAgICAvLyBVcGRhdGUgY29tcG9uZW50IGlucHV0cyBpZiBjb25maWcgY2hhbmdlZFxuICAgICAgY29uc3QgaW5wdXRzID0gdGhpcy5nZXRDb21wb25lbnRJbnB1dHModGhpcy5jb21wb25lbnRDb25maWcpO1xuICAgICAgT2JqZWN0LmtleXMoaW5wdXRzKS5mb3JFYWNoKGlucHV0S2V5ID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY29tcG9uZW50UmVmPy5pbnN0YW5jZSAmJiBpbnB1dEtleSBpbiB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSkge1xuICAgICAgICAgICh0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBhbnkpW2lucHV0S2V5XSA9IGlucHV0c1tpbnB1dEtleV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgLy8gVXNlIGRldGVjdENoYW5nZXMgdG8gZW5zdXJlIHN0eWxlcyBhcmUgdXBkYXRlZCBpbW1lZGlhdGVseVxuICAgICAgdGhpcy5jb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0gZWxzZSBpZiAoY2hhbmdlc1snY29tcG9uZW50Q29uZmlnJ10gJiYgdGhpcy5jb21wb25lbnRDb25maWcgJiYgIXRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgIC8vIENyZWF0ZSBjb21wb25lbnQgaWYgaXQgd2Fzbid0IGNyZWF0ZWQgeWV0XG4gICAgICB0aGlzLmNyZWF0ZUNvbXBvbmVudCgpO1xuICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29tcG9uZW50UmVmKSB7XG4gICAgICB0aGlzLmNvbXBvbmVudFJlZi5kZXN0cm95KCk7XG4gICAgICB0aGlzLmNvbXBvbmVudFJlZiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvbXBvbmVudCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29tcG9uZW50Q29uZmlnIHx8ICF0aGlzLnZpZXdDb250YWluZXJSZWYpIHJldHVybjtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb21wb25lbnRDbGFzcyA9IHRoaXMuZ2V0Q29tcG9uZW50Q2xhc3ModGhpcy5jb21wb25lbnRDb25maWcpO1xuICAgICAgY29uc3QgaW5wdXRzID0gdGhpcy5nZXRDb21wb25lbnRJbnB1dHModGhpcy5jb21wb25lbnRDb25maWcpO1xuICAgICAgY29uc3Qgb3V0cHV0cyA9IHRoaXMuZ2V0Q29tcG9uZW50T3V0cHV0cyh0aGlzLmNvbXBvbmVudENvbmZpZyk7XG5cbiAgICAgIC8vIENsZWFyIGFueSBleGlzdGluZyBjb250ZW50XG4gICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcblxuICAgICAgLy8gQ3JlYXRlIHRoZSBjb21wb25lbnRcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRDbGFzcyk7XG4gICAgICBcbiAgICAgIC8vIFNldCBpbnB1dHMgaW1tZWRpYXRlbHkgYWZ0ZXIgY3JlYXRpb24sIGJlZm9yZSBhbnkgY2hhbmdlIGRldGVjdGlvblxuICAgICAgLy8gVXNlIE9iamVjdC5hc3NpZ24gdG8gc2V0IGFsbCBpbnB1dHMgYXQgb25jZVxuICAgICAgaWYgKHRoaXMuY29tcG9uZW50UmVmPy5pbnN0YW5jZSAmJiBPYmplY3Qua2V5cyhpbnB1dHMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSwgaW5wdXRzKTtcbiAgICAgIH1cblxuICAgICAgLy8gU3Vic2NyaWJlIHRvIG91dHB1dHNcbiAgICAgIE9iamVjdC5rZXlzKG91dHB1dHMpLmZvckVhY2gob3V0cHV0S2V5ID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY29tcG9uZW50UmVmPy5pbnN0YW5jZSAmJiBvdXRwdXRLZXkgaW4gdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UpIHtcbiAgICAgICAgICBjb25zdCBvdXRwdXQgPSAodGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgYW55KVtvdXRwdXRLZXldO1xuICAgICAgICAgIGlmIChvdXRwdXQgJiYgdHlwZW9mIG91dHB1dC5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG91dHB1dC5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IG91dHB1dHNbb3V0cHV0S2V5XTtcbiAgICAgICAgICAgICAgaWYgKGhhbmRsZXIpIGhhbmRsZXIoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gTWFyayBmb3IgY2hhbmdlIGRldGVjdGlvbiAtIHVzZSBkZXRlY3RDaGFuZ2VzIHRvIGVuc3VyZSBzdHlsZXMgYXJlIGFwcGxpZWRcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBjcmVhdGUgY29tcG9uZW50IGluIHRhYmxlIGNlbGw6JywgZXJyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldENvbXBvbmVudENsYXNzKHZhbHVlOiBUeXBlPGFueT4gfCBDb21wb25lbnRSZW5kZXJDb25maWcpOiBUeXBlPGFueT4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUuY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4gdmFsdWUuY29tcG9uZW50O1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29tcG9uZW50IHZhbHVlJyk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbXBvbmVudElucHV0cyh2YWx1ZTogVHlwZTxhbnk+IHwgQ29tcG9uZW50UmVuZGVyQ29uZmlnKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUuaW5wdXRzKSB7XG4gICAgICByZXR1cm4gdmFsdWUuaW5wdXRzO1xuICAgIH1cbiAgICByZXR1cm4ge307XG4gIH1cblxuICBwcml2YXRlIGdldENvbXBvbmVudE91dHB1dHModmFsdWU6IFR5cGU8YW55PiB8IENvbXBvbmVudFJlbmRlckNvbmZpZyk6IHsgW2tleTogc3RyaW5nXTogKGV2ZW50OiBhbnkpID0+IHZvaWQgfSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUub3V0cHV0cykge1xuICAgICAgcmV0dXJuIHZhbHVlLm91dHB1dHM7XG4gICAgfVxuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG4iXX0=
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1jZWxsLWNvbnRhaW5lci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3RhYmxlL2R5bmFtaWMtdGFibGUvZHluYW1pYy1jZWxsLWNvbnRhaW5lci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBb0IsS0FBSyxFQUFzRixNQUFNLGVBQWUsQ0FBQzs7QUFPdkosTUFBTSxPQUFPLDZCQUE2QjtJQVV4QyxZQUNTLGdCQUFrQyxFQUNqQyxHQUFzQjtRQUR2QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2pDLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBSnhCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO0lBS3pCLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUM3QyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7U0FDekI7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQ0UsSUFBSSxDQUFDLFlBQVk7WUFDakIsSUFBSSxDQUFDLGVBQWU7WUFDcEIsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsRUFDOUc7WUFDQSwrREFBK0Q7WUFDL0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUM3RCxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFB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cnQgeyBEaXJlY3RpdmUsIFZpZXdDb250YWluZXJSZWYsIElucHV0LCBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBDb21wb25lbnRSZWYsIFR5cGUsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnRSZW5kZXJDb25maWcgfSBmcm9tICcuL2NvbXBvbmVudC1yZW5kZXItY29uZmlnLmludGVyZmFjZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tjcWFDZWxsQ29udGFpbmVyXScsXG4gIGV4cG9ydEFzOiAnY3FhQ2VsbENvbnRhaW5lcidcbn0pXG5leHBvcnQgY2xhc3MgRHluYW1pY0NlbGxDb250YWluZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgQElucHV0KCkgY29tcG9uZW50Q29uZmlnPzogVHlwZTxhbnk+IHwgQ29tcG9uZW50UmVuZGVyQ29uZmlnO1xuICBASW5wdXQoKSByb3c/OiBhbnk7XG4gIEBJbnB1dCgpIGNvbHVtbj86IGFueTtcbiAgQElucHV0KCkgcm93SW5kZXg/OiBudW1iZXI7XG4gIEBJbnB1dCgpIGNvbElkPzogc3RyaW5nO1xuICBcbiAgcHJpdmF0ZSBjb21wb25lbnRSZWY/OiBDb21wb25lbnRSZWY8YW55PjtcbiAgcHJpdmF0ZSBpbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29tcG9uZW50Q29uZmlnICYmICF0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICB0aGlzLmNyZWF0ZUNvbXBvbmVudCgpO1xuICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmICYmXG4gICAgICB0aGlzLmNvbXBvbmVudENvbmZpZyAmJlxuICAgICAgKGNoYW5nZXNbJ2NvbXBvbmVudENvbmZpZyddIHx8IGNoYW5nZXNbJ3JvdyddIHx8IGNoYW5nZXNbJ2NvbHVtbiddIHx8IGNoYW5nZXNbJ3Jvd0luZGV4J10gfHwgY2hhbmdlc1snY29sSWQnXSlcbiAgICApIHtcbiAgICAgIC8vIFJlZnJlc2ggY29tcG9uZW50IGlucHV0cyB3aGVuIGNvbmZpZyBvciByb3cgY29udGV4dCBjaGFuZ2VzLlxuICAgICAgY29uc3QgaW5wdXRzID0gdGhpcy5nZXRDb21wb25lbnRJbnB1dHModGhpcy5jb21wb25lbnRDb25maWcpO1xuICAgICAgT2JqZWN0LmtleXMoaW5wdXRzKS5mb3JFYWNoKGlucHV0S2V5ID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY29tcG9uZW50UmVmPy5pbnN0YW5jZSAmJiBpbnB1dEtleSBpbiB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSkge1xuICAgICAgICAgICh0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBhbnkpW2lucHV0S2V5XSA9IGlucHV0c1tpbnB1dEtleV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgLy8gVXNlIGRldGVjdENoYW5nZXMgdG8gZW5zdXJlIHN0eWxlcyBhcmUgdXBkYXRlZCBpbW1lZGlhdGVseVxuICAgICAgdGhpcy5jb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0gZWxzZSBpZiAoY2hhbmdlc1snY29tcG9uZW50Q29uZmlnJ10gJiYgdGhpcy5jb21wb25lbnRDb25maWcgJiYgIXRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgIC8vIENyZWF0ZSBjb21wb25lbnQgaWYgaXQgd2Fzbid0IGNyZWF0ZWQgeWV0XG4gICAgICB0aGlzLmNyZWF0ZUNvbXBvbmVudCgpO1xuICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29tcG9uZW50UmVmKSB7XG4gICAgICB0aGlzLmNvbXBvbmVudFJlZi5kZXN0cm95KCk7XG4gICAgICB0aGlzLmNvbXBvbmVudFJlZiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvbXBvbmVudCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29tcG9uZW50Q29uZmlnIHx8ICF0aGlzLnZpZXdDb250YWluZXJSZWYpIHJldHVybjtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb21wb25lbnRDbGFzcyA9IHRoaXMuZ2V0Q29tcG9uZW50Q2xhc3ModGhpcy5jb21wb25lbnRDb25maWcpO1xuICAgICAgY29uc3QgaW5wdXRzID0gdGhpcy5nZXRDb21wb25lbnRJbnB1dHModGhpcy5jb21wb25lbnRDb25maWcpO1xuICAgICAgY29uc3Qgb3V0cHV0cyA9IHRoaXMuZ2V0Q29tcG9uZW50T3V0cHV0cyh0aGlzLmNvbXBvbmVudENvbmZpZyk7XG5cbiAgICAgIC8vIENsZWFyIGFueSBleGlzdGluZyBjb250ZW50XG4gICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcblxuICAgICAgLy8gQ3JlYXRlIHRoZSBjb21wb25lbnRcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRDbGFzcyk7XG4gICAgICBcbiAgICAgIC8vIFNldCBpbnB1dHMgaW1tZWRpYXRlbHkgYWZ0ZXIgY3JlYXRpb24sIGJlZm9yZSBhbnkgY2hhbmdlIGRldGVjdGlvblxuICAgICAgLy8gVXNlIE9iamVjdC5hc3NpZ24gdG8gc2V0IGFsbCBpbnB1dHMgYXQgb25jZVxuICAgICAgaWYgKHRoaXMuY29tcG9uZW50UmVmPy5pbnN0YW5jZSAmJiBPYmplY3Qua2V5cyhpbnB1dHMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSwgaW5wdXRzKTtcbiAgICAgIH1cblxuICAgICAgLy8gU3Vic2NyaWJlIHRvIG91dHB1dHNcbiAgICAgIE9iamVjdC5rZXlzKG91dHB1dHMpLmZvckVhY2gob3V0cHV0S2V5ID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY29tcG9uZW50UmVmPy5pbnN0YW5jZSAmJiBvdXRwdXRLZXkgaW4gdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UpIHtcbiAgICAgICAgICBjb25zdCBvdXRwdXQgPSAodGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgYW55KVtvdXRwdXRLZXldO1xuICAgICAgICAgIGlmIChvdXRwdXQgJiYgdHlwZW9mIG91dHB1dC5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG91dHB1dC5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IG91dHB1dHNbb3V0cHV0S2V5XTtcbiAgICAgICAgICAgICAgaWYgKGhhbmRsZXIpIGhhbmRsZXIoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gTWFyayBmb3IgY2hhbmdlIGRldGVjdGlvbiAtIHVzZSBkZXRlY3RDaGFuZ2VzIHRvIGVuc3VyZSBzdHlsZXMgYXJlIGFwcGxpZWRcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBjcmVhdGUgY29tcG9uZW50IGluIHRhYmxlIGNlbGw6JywgZXJyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldENvbXBvbmVudENsYXNzKHZhbHVlOiBUeXBlPGFueT4gfCBDb21wb25lbnRSZW5kZXJDb25maWcpOiBUeXBlPGFueT4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUuY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4gdmFsdWUuY29tcG9uZW50O1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29tcG9uZW50IHZhbHVlJyk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbXBvbmVudElucHV0cyh2YWx1ZTogVHlwZTxhbnk+IHwgQ29tcG9uZW50UmVuZGVyQ29uZmlnKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUuaW5wdXRzKSB7XG4gICAgICByZXR1cm4gdmFsdWUuaW5wdXRzO1xuICAgIH1cbiAgICByZXR1cm4ge307XG4gIH1cblxuICBwcml2YXRlIGdldENvbXBvbmVudE91dHB1dHModmFsdWU6IFR5cGU8YW55PiB8IENvbXBvbmVudFJlbmRlckNvbmZpZyk6IHsgW2tleTogc3RyaW5nXTogKGV2ZW50OiBhbnkpID0+IHZvaWQgfSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUub3V0cHV0cykge1xuICAgICAgcmV0dXJuIHZhbHVlLm91dHB1dHM7XG4gICAgfVxuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG4iXX0=
|