tnx-shared 5.3.325 → 5.3.327
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/bundles/tnx-shared.umd.js +21 -7
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +1 -1
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/classes/base/list-base.d.ts +2 -2
- package/classes/base/list-base.d.ts.map +1 -1
- package/classes/form-schema.d.ts +1 -0
- package/classes/form-schema.d.ts.map +1 -1
- package/components/autocomplete-picker/autocomplete-picker.component.d.ts.map +1 -1
- package/esm2015/classes/base/list-base.js +5 -3
- package/esm2015/classes/form-schema.js +2 -1
- package/esm2015/components/autocomplete-picker/autocomplete-picker.component.js +3 -2
- package/esm2015/services/canbo-hoso.service.js +7 -5
- package/esm2015/services/common.service.js +7 -1
- package/esm2015/tnx-shared.module.js +2 -1
- package/fesm2015/tnx-shared.js +20 -7
- package/fesm2015/tnx-shared.js.map +1 -1
- package/package.json +2 -2
- package/services/canbo-hoso.service.d.ts.map +1 -1
- package/services/common.service.d.ts +1 -0
- package/services/common.service.d.ts.map +1 -1
- package/tnx-shared.metadata.json +1 -1
- package/tnx-shared.module.d.ts.map +1 -1
|
@@ -160,7 +160,8 @@ export class AutoCompletePickerComponent extends ComponentBase {
|
|
|
160
160
|
valueField: this.control.valueField,
|
|
161
161
|
fieldPlus: this.control.fieldPlus,
|
|
162
162
|
funcGetLabel: this.control.funcGetLabel,
|
|
163
|
-
plusUrl: this.control.plusUrl
|
|
163
|
+
plusUrl: this.control.plusUrl,
|
|
164
|
+
sorts: this.control.sorts,
|
|
164
165
|
});
|
|
165
166
|
if (pageSize) {
|
|
166
167
|
result.pageSize = pageSize;
|
|
@@ -557,4 +558,4 @@ AutoCompletePickerComponent.propDecorators = {
|
|
|
557
558
|
onBlur: [{ type: Output }],
|
|
558
559
|
onReady: [{ type: Output }]
|
|
559
560
|
};
|
|
560
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvY29tcG9uZW50cy9hdXRvY29tcGxldGUtcGlja2VyL2F1dG9jb21wbGV0ZS1waWNrZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUgsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsUUFBUSxFQUNSLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUd2RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN0RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFDSCwrQkFBK0IsRUFDL0IsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixlQUFlLEVBQ2YsVUFBVSxFQUNWLFFBQVEsRUFDUixTQUFTLEVBQ1osTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDcEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFN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QUFNO3FCQUNOLE1BQU07c0JBQ04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBTZWxlY3RJdGVtIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvYXBpJztcblxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Jhc2UvY29tcG9uZW50LWJhc2UnO1xuaW1wb3J0IHsgaXNMaXRlcmFsT2JqZWN0IH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9lbnZpcm9ubWVudC1zY2hlbWEnO1xuaW1wb3J0IHtcbiAgICBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hLFxuICAgIENvbHVtblNjaGVtYUJhc2UsXG4gICAgQ3J1ZExpc3RTZXR0aW5nLFxuICAgIERyb3Bkb3duT3B0aW9ucyxcbiAgICBIZWlnaHRUeXBlLFxuICAgIE9wZXJhdG9yLFxuICAgIFBvcHVwU2l6ZVxufSBmcm9tICcuLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcbmltcG9ydCB7IEZpbHRlciB9IGZyb20gJy4uLy4uL21vZGVscy9ncmlkLWluZm8nO1xuaW1wb3J0IHsgQ2FuQm9Ib1NvU2VydmljZSB9IGZyb20gJy4uLy4uL3B1YmxpYy1hcGknO1xuaW1wb3J0IHsgRW50aXR5TWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZW50aXR5LW1ldGFkYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgYXBwZW5kRGVmYXVsdEZpbHRlciB9IGZyb20gJy4uLy4uL3V0aWxzL2NvbW1vbic7XG5pbXBvcnQgeyBDb250cm9sVHJlZU5vZGUgfSBmcm9tICcuLi9jcnVkL2NydWQtZm9ybS9jcnVkLWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IEVudGl0eVBpY2tlckJveENvbXBvbmVudCB9IGZyb20gJy4uL2VudGl0eS1waWNrZXIvZW50aXR5LXBpY2tlci1ib3gvZW50aXR5LXBpY2tlci1ib3guY29tcG9uZW50JztcbmltcG9ydCB7IEFkdmFuY2VEYXRhRW50aXR5UGlja2VyIH0gZnJvbSAnLi4vZW50aXR5LXBpY2tlci9tb2RlbC9hZHZhbmNlLWRhdGEnO1xuaW1wb3J0IHsgRGF0YXNvdXJjZUZpbHRlckNhbkJvIH0gZnJvbSAnLi4vdXNlci1waWNrZXIvbW9kZWxzL3VzZXItcGlja2VyLXNldHRpbmcnO1xuXG5AQ29tcG9uZW50KHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGNvbXBvbmVudC1zZWxlY3RvclxuICAgIHNlbGVjdG9yOiAnYXV0b2NvbXBsZXRlLXBpY2tlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2F1dG9jb21wbGV0ZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2F1dG9jb21wbGV0ZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBdXRvQ29tcGxldGVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UsXG4gICAgICAgIEVudGl0eU1ldGFkYXRhU2VydmljZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgQXV0b0NvbXBsZXRlUGlja2VyQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICAgIEBWaWV3Q2hpbGQoJ2VudGl0eVBpY2tlckJveCcsIHsgc3RhdGljOiB0cnVlIH0pIGVudGl0eVBpY2tlckJveENvbXBvbmVudDogRW50aXR5UGlja2VyQm94Q29tcG9uZW50O1xuICAgIEBWaWV3Q2hpbGQoJ2F1dG9Db21wbGV0ZScpIGF1dG9Db21wbGV0ZTogYW55O1xuICAgIG9uQ2hhbmdlQmFzZTogRnVuY3Rpb247XG4gICAgb25Ub3VjaGVkOiBGdW5jdGlvbjtcblxuICAgIEBJbnB1dCgpIGN1cnJlbnROb2RlOiBDb250cm9sVHJlZU5vZGU7XG4gICAgQElucHV0KCkgY29udHJvbDogQXV0b0NvbXBsZXRlUGlja2VyQ29udHJvbFNjaGVtYTtcbiAgICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IG51bGw7XG4gICAgQElucHV0KCkgcG9wdXBTaXplOiBQb3B1cFNpemUgPSBuZXcgUG9wdXBTaXplKHtcbiAgICAgICAgd2lkdGg6IDExMDAsXG4gICAgICAgIGhlaWdodDogOTAwLFxuICAgICAgICBtYXhpbWl6ZTogdHJ1ZVxuICAgIH0pO1xuICAgIF9yZWFkT25seVZhbHVlczogc3RyaW5nW107XG4gICAgQElucHV0KCkgc2V0IHJlYWRPbmx5VmFsdWVzKHZhbHVlOiBzdHJpbmdbXSB8IHN0cmluZyB8IGFueSkge1xuICAgICAgICBsZXQgdGVtcCA9IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLnNwbGl0Y2hhciAmJiB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZyAmJiB0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHRlbXAgPSB2YWx1ZS5zcGxpdCh0aGlzLmNvbnRyb2wuc3BsaXRjaGFyKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yZWFkT25seVZhbHVlcyA9IHRlbXA7XG4gICAgICAgIHRoaXMudXBkYXRlRnVuY0NoZWNrUmVhZE9ubHlJdGVtKCk7XG4gICAgICAgIHRoaXMudXBkYXRlUmVhZE9ubHlJdGVtKCk7XG4gICAgfVxuXG4gICAgZ2V0IHJlYWRPbmx5VmFsdWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlWYWx1ZXM7XG4gICAgfVxuXG4gICAgQE91dHB1dCgpIG9uSW5pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvblNlbGVjdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25VblNlbGVjdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25DaGFuZ2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkZvY3VzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkJsdXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uUmVhZHk6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBzZXR0aW5nOiBDcnVkTGlzdFNldHRpbmcgPSBuZXcgQ3J1ZExpc3RTZXR0aW5nKCk7XG4gICAgYWR2YW5jZURhdGE6IEFkdmFuY2VEYXRhRW50aXR5UGlja2VyID0gbmV3IEFkdmFuY2VEYXRhRW50aXR5UGlja2VyKCk7XG5cbiAgICB2YWx1ZTogYW55O1xuICAgIGZ1bmNSZXR1cm5WYWx1ZTogKHZhbHVlKSA9PiB7fSA9IHZhbHVlID0+IHZhbHVlO1xuICAgIHNlbGVjdGVkVmFsdWU6IGFueTtcbiAgICBzZWxlY3RlZFJvd0RhdGE6IGFueTtcbiAgICBzZWxlY3RlZFZhbHVlT2JqZWN0OiBhbnk7XG4gICAgZGF0YVNvdXJjZTogYW55W10gPSBbXTtcbiAgICBmdW5jQ2hlY2tSZWFkT25seUl0ZW06IChpdGVtOiBhbnkpID0+IHZvaWQ7XG5cbiAgICBrZXl3b3JkOiBzdHJpbmcgPSAnJztcbiAgICBmaWVsZFNlYXJjaFRleHQ6IHN0cmluZ1tdID0gW107XG4gICAgZGF0YXNvdXJjZUZpZWxkRmlsdGVyID0gW107XG5cbiAgICByZXN1bHRzOiBhbnlbXSA9IFtdO1xuXG4gICAgc2hvd0Zvcm1QaWNrZXIgPSBmYWxzZTtcbiAgICBkaXJ0eSA9IGZhbHNlO1xuXG4gICAgdG9vbHRpcCA9ICcnO1xuICAgIGhhc1ZhbHVlID0gZmFsc2U7XG4gICAgaXNGaXJlZFJlYWR5ID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIGdldEZpbHRlck9uU2VhcmNoPzogRnVuY3Rpb247XG4gICAgcHJpdmF0ZSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3JcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5jb250cm9sLl9jb21wb25lbnQgPSB0aGlzO1xuICAgICAgICB0aGlzLnNldERlZmF1bHRTZXR0aW5nKCk7XG5cbiAgICAgICAgdGhpcy5idWlsZEZpbHRlcktleXdvcmQoKTtcbiAgICAgICAgdGhpcy5idWlsZFNldHRpbmdFbnRpdHlQaWNrZXIoKTtcbiAgICAgICAgdGhpcy51cGRhdGVGdW5jQ2hlY2tSZWFkT25seUl0ZW0oKTtcbiAgICAgICAgdGhpcy5vbkluaXQuZW1pdCh0aGlzKTtcbiAgICB9XG5cbiAgICB1cGRhdGVGdW5jQ2hlY2tSZWFkT25seUl0ZW0oKSB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5VmFsdWVzICYmIHRoaXMucmVhZE9ubHlWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmZ1bmNDaGVja1JlYWRPbmx5SXRlbSA9IHRoaXMuX2Z1bmNDaGVja1JlYWRPbmx5SXRlbTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZnVuY0NoZWNrUmVhZE9ubHlJdGVtID0gKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldERlZmF1bHRTZXR0aW5nKCkge1xuICAgICAgICB0aGlzLmZpZWxkU2VhcmNoVGV4dCA9IFsuLi50aGlzLmNvbnRyb2wuZmllbGRTZWFyY2hUZXh0XTtcbiAgICAgICAgaWYgKCF0aGlzLmZpZWxkU2VhcmNoVGV4dC5zb21lKGl0ZW0gPT4gaXRlbSA9PSB0aGlzLmNvbnRyb2wuZGlzcGxheUZpZWxkKSkge1xuICAgICAgICAgICAgdGhpcy5maWVsZFNlYXJjaFRleHQucHVzaCh0aGlzLmNvbnRyb2wuZGlzcGxheUZpZWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wucmV0dXJuVHlwZSA9PSAndmFsdWUnKSB7XG4gICAgICAgICAgICB0aGlzLmZ1bmNSZXR1cm5WYWx1ZSA9ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5tYXAoaXRlbSA9PiBpdGVtW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF07XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mdW5jUmV0dXJuVmFsdWUgPSB2YWx1ZSA9PiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlIGluc3RhbmNlb2YgQ2FuQm9Ib1NvU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlRmllbGRGaWx0ZXIgPSBEYXRhc291cmNlRmlsdGVyQ2FuQm87XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBidWlsZEZpbHRlcktleXdvcmQoKSB7XG4gICAgICAgIGNvbnN0IG9wZXJhdG9yID0gdGhpcy5jb250cm9sLm9wZXJhdG9yRmllbGRTZWFyY2hUZXh0ID8/IE9wZXJhdG9yLmNvbnRhaW47XG4gICAgICAgIGlmICh0aGlzLmZpZWxkU2VhcmNoVGV4dC5sZW5ndGggPT0gMSkge1xuICAgICAgICAgICAgdGhpcy5nZXRGaWx0ZXJPblNlYXJjaCA9IHZhbHVlID0+IHRoaXMubmV3RmlsdGVyKHRoaXMuY29udHJvbC5kaXNwbGF5RmllbGQsIG9wZXJhdG9yLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmdldEZpbHRlck9uU2VhcmNoID0gdmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgICAgICAgICBsb2dpYzogJ29yJyxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyczogW11cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkU2VhcmNoIG9mIHRoaXMuZmllbGRTZWFyY2hUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5maWx0ZXJzLnB1c2godGhpcy5uZXdGaWx0ZXIoZmllbGRTZWFyY2gsIG9wZXJhdG9yLCB2YWx1ZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGJ1aWxkU2V0dGluZ0VudGl0eVBpY2tlcigpIHtcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMgPSBbXTtcbiAgICAgICAgdGhpcy5zZXR0aW5nLnRpdGxlID0gJyc7XG4gICAgICAgIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSA9IHRoaXMuY29udHJvbC5iYXNlU2VydmljZTtcbiAgICAgICAgdGhpcy5zZXR0aW5nLmhlaWdodFR5cGUgPSBIZWlnaHRUeXBlLmR5bmFtaWM7XG4gICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5DaGVja2JveCA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0dGluZy5zZXR0aW5nS2V5ID0gJ2VudGl0eVBpY2tlcic7XG4gICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5BZHZhbmNlU2VhcmNoID0gdGhpcy5jb250cm9sLmhpZGRlbkFkdmFuY2VTZWFyY2g7XG4gICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5TZXR0aW5nV29ya2Zsb3cgPSB0cnVlO1xuICAgICAgICB0aGlzLnNldHRpbmcuaGlkZGVuU2V0dGluZ1Blcm1pc3Npb24gPSB0cnVlO1xuICAgICAgICB0aGlzLnNldHRpbmcuZmllbGRTZWFyY2hUZXh0ID0gdGhpcy5jb250cm9sLmZpZWxkU2VhcmNoVGV4dDtcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuc29ydEZpZWxkID0gdGhpcy5jb250cm9sLnNvcnRGaWVsZDtcbiAgICAgICAgdGhpcy5jb250cm9sLmNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgICAgICAgaWYgKGNvbHVtbi5pc0Rpc3BsYXkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2wgPSBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XG4gICAgICAgICAgICAgICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGNvbHVtbi5jb2RlIHx8IGNvbHVtbi5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChjb2x1bW4ubGFiZWwpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbi5kYXRhVHlwZSA9PSAnY3VzdG9tJykge1xuICAgICAgICAgICAgICAgICAgICBjb2wuZGF0YVR5cGUgPSBjb2x1bW4uY29kZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMucHVzaChjb2wpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hZHZhbmNlRGF0YS5maWVsZHMgPSB0aGlzLmdldEZpZWxkcygpO1xuICAgIH1cblxuICAgIC8vIEzhuqV5IHVuaW9uIGPhu6dhOiBzZWxlY3RlZEZpZWxkLCBmaWVsZFBsdXMsIGRpc3BsYXkgZmllbGRzIGPDsyB0cm9uZyB0YWJsZS5cbiAgICBnZXRGaWVsZHMoKSB7XG4gICAgICAgIGNvbnN0IGFyckZpZWxkOiBzdHJpbmdbXSA9IFt0aGlzLmNvbnRyb2wuZGlzcGxheUZpZWxkLCAnaWQnXTtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC52YWx1ZUZpZWxkICYmIHRoaXMuY29udHJvbC52YWx1ZUZpZWxkICE9ICdpZCcpIHtcbiAgICAgICAgICAgIGFyckZpZWxkLnB1c2godGhpcy5jb250cm9sLnZhbHVlRmllbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5maWVsZFBsdXMpIHtcbiAgICAgICAgICAgIGFyckZpZWxkLnB1c2goLi4udGhpcy5jb250cm9sLmZpZWxkUGx1cy5zcGxpdCgnLCcpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyckRpc3BsYXlGaWVsZCA9IHRoaXMuY29udHJvbC5jb2x1bW5zLmZpbHRlcih4ID0+IHguaXNEaXNwbGF5ICYmICF4Lm5vdEluRmllbGRzICYmIHguZGF0YVR5cGUgIT0gJ2N1c3RvbScpXG4gICAgICAgICAgICAubWFwKHggPT4geC5jb2RlIHx8IHguZmllbGQpO1xuXG4gICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UuYWRkRGlzdGluY3QoYXJyRGlzcGxheUZpZWxkLCBhcnJGaWVsZCk7XG4gICAgICAgIHJldHVybiBhcnJGaWVsZC50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGdldERyb3Bkb3duT3B0aW9ucyhwYWdlU2l6ZTogbnVtYmVyID0gbnVsbCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgRHJvcGRvd25PcHRpb25zKHtcbiAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogdGhpcy5jb250cm9sLmRpc3BsYXlGaWVsZCxcbiAgICAgICAgICAgIHZhbHVlRmllbGQ6IHRoaXMuY29udHJvbC52YWx1ZUZpZWxkLFxuICAgICAgICAgICAgZmllbGRQbHVzOiB0aGlzLmNvbnRyb2wuZmllbGRQbHVzLFxuICAgICAgICAgICAgZnVuY0dldExhYmVsOiB0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsLFxuICAgICAgICAgICAgcGx1c1VybDogdGhpcy5jb250cm9sLnBsdXNVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChwYWdlU2l6ZSkge1xuICAgICAgICAgICAgcmVzdWx0LnBhZ2VTaXplID0gcGFnZVNpemU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBhc3luYyBzaG93UGlja0Zvcm0oKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wubW9kaWZ5SW5pdFNlYXJjaERhdGEpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY29udHJvbC5tb2RpZnlJbml0U2VhcmNoRGF0YSh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm1QaWNrZXIgPSB0cnVlO1xuICAgIH1cblxuICAgIGFzeW5jIGdldERhdGEoKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlcnMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRoaXMubmV3RmlsdGVyKHRoaXMuY29udHJvbC52YWx1ZUZpZWxkLCBPcGVyYXRvci5ub3RJbiwgdGhpcy52YWx1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2godGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sLnZhbHVlRmllbGQsIE9wZXJhdG9yLm5vdEVxdWFsLCB0aGlzLnZhbHVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgYXBwZW5kRGVmYXVsdEZpbHRlcihmaWx0ZXJzLCB0aGlzLmNvbnRyb2wuZGVmYXVsdEZpbHRlcnMpO1xuICAgICAgICBpZiAodGhpcy5rZXl3b3JkICYmIHRoaXMua2V5d29yZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmaWx0ZXJzLnB1c2godGhpcy5nZXRGaWx0ZXJPblNlYXJjaCh0aGlzLmtleXdvcmQpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb250cm9sLm1vZGlmeUZpbHRlcikge1xuICAgICAgICAgICAgY29uc3QgYWxsb3cgPSBhd2FpdCB0aGlzLmNvbnRyb2wubW9kaWZ5RmlsdGVyKGZpbHRlcnMsIHRoaXMsIHRoaXMuY3VycmVudE5vZGUpO1xuICAgICAgICAgICAgaWYgKGFsbG93ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRhU291cmNlID0gYXdhaXQgdGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyKFxuICAgICAgICAgICAgZmlsdGVycywgdGhpcy5nZXREcm9wZG93bk9wdGlvbnMoKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmZpcmVFdmVudEFmdGVyR2V0RGF0YURyb3BEb3duKGRhdGFTb3VyY2UpO1xuICAgICAgICB0aGlzLnJlU3RydWN0dXJlRGF0YVNvdXJjZShkYXRhU291cmNlKTtcbiAgICAgICAgdGhpcy5yZXN1bHRzID0gdGhpcy5kYXRhU291cmNlO1xuICAgICAgICAvLyBSZXR1cm4gxJHhu4MgbeG7mXQgc+G7kSBuxqFpIGtow6FjIGTDuW5nLCBrIHJlbW92ZVxuICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHRzO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmlyZUV2ZW50QWZ0ZXJHZXREYXRhRHJvcERvd24oZGF0YVNvdXJjZSkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLmFmdGVyR2V0RGF0YURyb3Bkb3duKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuYWZ0ZXJHZXREYXRhRHJvcGRvd24oZGF0YVNvdXJjZSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXNldENvbnRyb2woKSB7XG4gICAgICAgIC8vIGlmICh0aGlzLl92YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIC8vICAgICB0aGlzLl92YWx1ZSA9IG51bGw7XG4gICAgICAgIC8vICAgICB0aGlzLmZpcmVDbGVhclZhbHVlRXZlbnQoKTtcbiAgICAgICAgLy8gfVxuICAgIH1cblxuICAgIGNsZWFyRGF0YXNvdXJjZSgpIHtcbiAgICAgICAgLy8gdGhpcy5kYXRhU291cmNlSW50ZXJuYWwgPSBbXTtcbiAgICAgICAgLy8gdGhpcy5faGFzTG9hZGVkRGF0YXNvdXJjZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHNlYXJjaChldmVudCkge1xuICAgICAgICB0aGlzLmtleXdvcmQgPSBldmVudC5xdWVyeTtcbiAgICAgICAgdGhpcy5nZXREYXRhKCk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ29udGVudExlZnRJbml0KGNydWRMaXN0KSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuYWZ0ZXJDb250ZW50TGVmdEluaXQpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5hZnRlckNvbnRlbnRMZWZ0SW5pdChjcnVkTGlzdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVDb250ZW50UmlnaHRJbml0KGNydWRMaXN0KSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuYWZ0ZXJDb250ZW50UmlnaHRJbml0KSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuYWZ0ZXJDb250ZW50UmlnaHRJbml0KGNydWRMaXN0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsZWFyVmFsdWUoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlc3VsdHMgPSBbXTtcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKCk7XG4gICAgICAgIHRoaXMuaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vblVuU2VsZWN0LmVtaXQoe1xuICAgICAgICAgICAgaXRlbTogdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0LFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2VsZWN0ZWRWYWx1ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlRXZlbnQoKTtcbiAgICB9XG5cbiAgICAvLyBTZWxlY3QgaXRlbSBj4bunYSBhdXRvY29tcGxldGVcbiAgICBoYW5kbGVTZWxlY3QoaXRlbSkge1xuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUoKTtcbiAgICAgICAgY29uc3QgZXZ0ID0ge1xuICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnNlbGVjdGVkVmFsdWVcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5vblNlbGVjdC5lbWl0KGV2dCk7XG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZUV2ZW50KCk7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuY2FsbEJhY2sgJiYgdGhpcy5jb250cm9sLmNhbGxCYWNrLnNlbGVjdCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLmNhbGxCYWNrLnNlbGVjdChpdGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIELhu48gc2VsZWN0IGl0ZW0gY+G7p2EgYXV0b2NvbXBsZXRlXG4gICAgaGFuZGxlVW5TZWxlY3QoJGV2ZW50KSB7XG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZSgpO1xuICAgICAgICBjb25zdCBldnQgPSB7XG4gICAgICAgICAgICBpdGVtOiAkZXZlbnQsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5zZWxlY3RlZFZhbHVlXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMub25VblNlbGVjdC5lbWl0KGV2dCk7XG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZUV2ZW50KCk7XG4gICAgfVxuXG4gICAgaGFuZGxlRm9jdXMoZXZ0KSB7XG4gICAgICAgIGlmIChldnQudGFyZ2V0LnZhbHVlKSB7XG4gICAgICAgICAgICBldnQudGFyZ2V0LnNlbGVjdCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25Gb2N1cy5lbWl0KGV2dCk7XG4gICAgfVxuXG4gICAgaGFuZGxlQmx1cigkZXZlbnQpIHtcbiAgICAgICAgdGhpcy5vbkJsdXIuZW1pdCgpO1xuICAgIH1cblxuICAgIGhhbmRsZUtleVVwKGV2dCkge1xuICAgICAgICBsZXQgaGlkZVN1Z2dlc3Npb25zID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIGhpZGVTdWdnZXNzaW9ucyA9IGV2dC50YXJnZXQucGFyZW50Tm9kZS5wYXJlbnROb2RlLnBhcmVudE5vZGUuY2hpbGRFbGVtZW50Q291bnQgPT0gMTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgJiYgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAmJiBldnQua2V5Q29kZSA9PSA0MCAmJiBoaWRlU3VnZ2Vzc2lvbnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGhpZGVTdWdnZXNzaW9ucyA9IGV2dC50YXJnZXQucGFyZW50Tm9kZS5jaGlsZEVsZW1lbnRDb3VudCA9PSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2dC50YXJnZXQudmFsdWUgPT0gJycgJiYgaGlkZVN1Z2dlc3Npb25zICYmIGV2dC5rZXlDb2RlICE9IDQwICYmIGV2dC5rZXlDb2RlICE9IDM4KSB7XG4gICAgICAgICAgICB0aGlzLnJlc3VsdHMgPSBbXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGx1dSBkYXRhIGN1YSByb3cgZGFuZyBkdW9jIHNlbGVjdCwgZHVuZyBraGkgY29udHJvbC5tdWx0aXBsZSA9IGZhbHNlO1xuICAgIGhhbmRsZVJvd1NlbGVjdChpdGVtKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dEYXRhID0gaXRlbTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgc2VsZWN0IGl0ZW0gdHJvbmcgZW50aXR5IHBpY2tlciBib3ggKEtow7RuZyBj4bqnbiBlbWl0IGNoYW5nZSlcbiAgICBoYW5kbGVTZWxlY3RFbnRpdHkoZXZ0KSB7XG4gICAgICAgIHRoaXMub25TZWxlY3QuZW1pdChldnQpO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSB1bnNlbGVjdCBpdGVtIHRyb25nIGVudGl0eSBwaWNrZXIgYm94IChLaMO0bmcgY+G6p24gZW1pdCBjaGFuZ2UpXG4gICAgaGFuZGxlVW5TZWxlY3RFbnRpdHkoZXZ0KSB7XG4gICAgICAgIHRoaXMub25VblNlbGVjdC5lbWl0KGV2dCk7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGNoYW5nZSBpdGVtIHRyb25nIGVudGl0eSBwaWNrZXIgYm94XG4gICAgaGFuZGxlQ2hhbmdlRW50aXR5KGV2dCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBldnQudmFsdWU7XG4gICAgICAgIHRoaXMudXBkYXRlUHVyZVZhbHVlKCk7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmZpcmVDaGFuZ2VFdmVudCgpO1xuICAgIH1cblxuICAgIGdldFZhbHVlUmV0dXJuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mdW5jUmV0dXJuVmFsdWUodGhpcy5zZWxlY3RlZFZhbHVlKTtcbiAgICB9XG5cbiAgICBfZnVuY0NoZWNrUmVhZE9ubHlJdGVtKGl0ZW06IGFueSkge1xuICAgICAgICBpZiAodGhpcy5yZWFkT25seVZhbHVlcy5zb21lKHEgPT4gcSA9PSBpdGVtLnZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSkpIHtcbiAgICAgICAgICAgIGl0ZW0uX2Rpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZVJlYWRPbmx5SXRlbSgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSAmJiB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZnVuY0NoZWNrUmVhZE9ubHlJdGVtKGl0ZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVTZWxlY3RlZFZhbHVlKCkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZFZhbHVlID0gW107XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFZhbHVlLnB1c2goaXRlbS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mdW5jQ2hlY2tSZWFkT25seUl0ZW0oaXRlbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHNlbGVjdGVkVmFsdWU7XG4gICAgICAgICAgICB0aGlzLnRvb2x0aXAgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXAgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0LnZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcCA9IHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdC5sYWJlbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlUHVyZVZhbHVlKCk7XG4gICAgfVxuXG4gICAgdXBkYXRlUHVyZVZhbHVlKCkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5zZWxlY3RlZFZhbHVlLm1hcChpdGVtID0+IGl0ZW1bdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKTtcbiAgICAgICAgICAgIHRoaXMuaGFzVmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWUubGVuZ3RoID4gMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZmlyZUNoYW5nZUV2ZW50KCkge1xuICAgICAgICBjb25zdCB2YWx1ZVJldHVybiA9IHRoaXMuZnVuY1JldHVyblZhbHVlKHRoaXMuc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgIHRoaXMub25DaGFuZ2VCYXNlKHZhbHVlUmV0dXJuKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZWQuZW1pdCh7XG4gICAgICAgICAgICB2YWx1ZTogdmFsdWVSZXR1cm5cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgaGFuZGxlSGlkZShldnQpIHtcbiAgICAgICAgdGhpcy5zaG93Rm9ybVBpY2tlciA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5kaXJ0eSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgIGxldCBkYXRhU291cmNlID0gW107XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UgPSBhd2FpdCB0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sLnZhbHVlRmllbGQsIE9wZXJhdG9yLmluLCB0aGlzLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgXSwgdGhpcy5nZXREcm9wZG93bk9wdGlvbnModGhpcy52YWx1ZS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZUV2ZW50QWZ0ZXJHZXREYXRhRHJvcERvd24oZGF0YVNvdXJjZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucmVTdHJ1Y3R1cmVEYXRhU291cmNlKGRhdGFTb3VyY2UpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IHRoaXMuZGF0YVNvdXJjZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBkYXRhU291cmNlID0gW107XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZSA9IGF3YWl0IHRoaXMuY29udHJvbC5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcih0aGlzLmNvbnRyb2wudmFsdWVGaWVsZCwgT3BlcmF0b3IuZXF1YWwsIHRoaXMudmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICBdLCB0aGlzLmdldERyb3Bkb3duT3B0aW9ucygxKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVFdmVudEFmdGVyR2V0RGF0YURyb3BEb3duKGRhdGFTb3VyY2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnJlU3RydWN0dXJlRGF0YVNvdXJjZShkYXRhU291cmNlKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhU291cmNlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ID0gdGhpcy5kYXRhU291cmNlWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ2xpY2tTdWJtaXRCdXR0b24oZXZ0LCBlbnRpdHlQaWNrZXJCb3g6IEVudGl0eVBpY2tlckJveENvbXBvbmVudCkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUhpZGUoZXZ0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnNlbGVjdGVkUm93RGF0YSkge1xuICAgICAgICAgICAgZW50aXR5UGlja2VyQm94ICYmIGVudGl0eVBpY2tlckJveC5oYW5kbGVQaWNrKHRoaXMuc2VsZWN0ZWRSb3dEYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0Zvcm1QaWNrZXIgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVTdHJ1Y3R1cmVEYXRhU291cmNlKHNvdXJjZXM6IGFueVtdKSB7XG4gICAgICAgIGlmIChzb3VyY2VzICE9IG51bGwgJiYgc291cmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBhcnIgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2Ygc291cmNlcykge1xuICAgICAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnJlU3RydWN0dXJlSXRlbU9iamVjdChpdGVtKTtcbiAgICAgICAgICAgICAgICBhcnIucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlID0gYXJyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlID0gW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZVN0cnVjdHVyZUl0ZW1PYmplY3QoaXRlbSk6IFNlbGVjdEl0ZW0ge1xuICAgICAgICBjb25zdCB0ZW1wOiBTZWxlY3RJdGVtID0geyB2YWx1ZTogaXRlbSB9O1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLmZ1bmNHZXRMYWJlbCkge1xuICAgICAgICAgICAgdGVtcC5sYWJlbCA9IHRoaXMuY29udHJvbC5mdW5jR2V0TGFiZWwoaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0ZW1wLmxhYmVsID0gaXRlbVt0aGlzLmNvbnRyb2wuZGlzcGxheUZpZWxkXTtcbiAgICAgICAgfVxuICAgICAgICB0ZW1wLnZhbHVlLl9kcm9wZG93bnZhbHVlID0gdGhpcy5jb250cm9sLnZhbHVlRmllbGQ7XG4gICAgICAgIHJldHVybiB0ZW1wO1xuICAgIH1cblxuICAgIGdldERhdGFTZWxlY3RlZFZhbHVlKG9iajogYW55KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9iaiAhPSBudWxsICYmIG9iai5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcnM6IEZpbHRlcltdID0gW107XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh0aGlzLm5ld0ZpbHRlcih0aGlzLmNvbnRyb2wudmFsdWVGaWVsZCwgT3BlcmF0b3IuaW4sIG9iaikpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBhcHBlbmREZWZhdWx0RmlsdGVyKGZpbHRlcnMsIHRoaXMuY29udHJvbC5kZWZhdWx0RmlsdGVycyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldERyb3Bkb3duT3B0aW9ucyhvYmoubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICApLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZUV2ZW50QWZ0ZXJHZXREYXRhRHJvcERvd24ocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVTdHJ1Y3R1cmVEYXRhU291cmNlKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdHMgPSB0aGlzLmRhdGFTb3VyY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSB0aGlzLmRhdGFTb3VyY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzID0gW107XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKG9iaiAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aGlzLm5ld0ZpbHRlcih0aGlzLmNvbnRyb2wudmFsdWVGaWVsZCwgT3BlcmF0b3IuZXF1YWwsIG9iaildLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXREcm9wZG93bk9wdGlvbnMoMSlcbiAgICAgICAgICAgICAgICAgICAgKS50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlRXZlbnRBZnRlckdldERhdGFEcm9wRG93bihyZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVTdHJ1Y3R1cmVEYXRhU291cmNlKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzID0gdGhpcy5kYXRhU291cmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IHRoaXMuZGF0YVNvdXJjZVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5jYWxsQmFjayAmJiB0aGlzLmNvbnRyb2wuY2FsbEJhY2suc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5jYWxsQmFjay5zZWxlY3QodGhpcy5zZWxlY3RlZFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzID0gW107XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5oYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICBsZXQgdmFsdWUgPSAhaXNMaXRlcmFsT2JqZWN0KG9iaikgPyBvYmogOiBvYmpbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdO1xuICAgICAgICB0aGlzLmdldERhdGFTZWxlY3RlZFZhbHVlKHZhbHVlKVxuICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrRmlyZVJlYWR5KCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjaGVja0ZpcmVSZWFkeSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRmlyZWRSZWFkeSAmJiB0aGlzLmhhc1ZhbHVlIHx8IHRoaXMuY29udHJvbC5pc0NoZWNrV3JpdGVWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5pc0ZpcmVkUmVhZHkgPSB0cnVlO1xuICAgICAgICAgICAgLy8gSMOgbSByZWFkeSBuw6B5IGNo4buJIEPhuqZOIETDmU5HIHRyb25nIHRyxrDhu51uZyBo4bujcCBhdXRvY29tcGxldGUtcGlja2VyIGPDsyB2YWx1ZSA9PiBEw7luZyDEkeG7gyBs4bqleSBk4buvIGxp4buHdSBjw6FjIGNvbXBvbmVudCBjb25cbiAgICAgICAgICAgIC8vIE7hur91IGPDsyB0csaw4budbmcgaOG7o3AgbsOgbyBraMOhYyB0aMOsIGPhuqduIHBo4bqjaSB44butIGzDvSBraMOhY1xuICAgICAgICAgICAgdGhpcy5vblJlYWR5LmVtaXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlQmFzZSA9IGZuO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG59XG4iXX0=
|
|
561
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvY29tcG9uZW50cy9hdXRvY29tcGxldGUtcGlja2VyL2F1dG9jb21wbGV0ZS1waWNrZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUgsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsUUFBUSxFQUNSLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUd2RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN0RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFDSCwrQkFBK0IsRUFDL0IsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixlQUFlLEVBQ2YsVUFBVSxFQUNWLFFBQVEsRUFDUixTQUFTLEVBQ1osTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDcEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFN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O3VCQUNOLE1BQU07eUJBQ04sTUFBTTt3QkFDTixNQUFNO3NCQUNOLE1BQU07cUJBQ04sTUFBTTtzQkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFNlbGVjdEl0ZW0gfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9hcGknO1xuXG5pbXBvcnQgeyBDb21wb25lbnRDb250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2FwcC1jb250ZXh0L2NvbXBvbmVudC1jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tcG9uZW50QmFzZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvYmFzZS9jb21wb25lbnQtYmFzZSc7XG5pbXBvcnQgeyBpc0xpdGVyYWxPYmplY3QgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Vudmlyb25tZW50LXNjaGVtYSc7XG5pbXBvcnQge1xuICAgIEF1dG9Db21wbGV0ZVBpY2tlckNvbnRyb2xTY2hlbWEsXG4gICAgQ29sdW1uU2NoZW1hQmFzZSxcbiAgICBDcnVkTGlzdFNldHRpbmcsXG4gICAgRHJvcGRvd25PcHRpb25zLFxuICAgIEhlaWdodFR5cGUsXG4gICAgT3BlcmF0b3IsXG4gICAgUG9wdXBTaXplXG59IGZyb20gJy4uLy4uL2NsYXNzZXMvZm9ybS1zY2hlbWEnO1xuaW1wb3J0IHsgRmlsdGVyIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyaWQtaW5mbyc7XG5pbXBvcnQgeyBDYW5Cb0hvU29TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vcHVibGljLWFwaSc7XG5pbXBvcnQgeyBFbnRpdHlNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbnRpdHktbWV0YWRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBhcHBlbmREZWZhdWx0RmlsdGVyIH0gZnJvbSAnLi4vLi4vdXRpbHMvY29tbW9uJztcbmltcG9ydCB7IENvbnRyb2xUcmVlTm9kZSB9IGZyb20gJy4uL2NydWQvY3J1ZC1mb3JtL2NydWQtZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRW50aXR5UGlja2VyQm94Q29tcG9uZW50IH0gZnJvbSAnLi4vZW50aXR5LXBpY2tlci9lbnRpdHktcGlja2VyLWJveC9lbnRpdHktcGlja2VyLWJveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWR2YW5jZURhdGFFbnRpdHlQaWNrZXIgfSBmcm9tICcuLi9lbnRpdHktcGlja2VyL21vZGVsL2FkdmFuY2UtZGF0YSc7XG5pbXBvcnQgeyBEYXRhc291cmNlRmlsdGVyQ2FuQm8gfSBmcm9tICcuLi91c2VyLXBpY2tlci9tb2RlbHMvdXNlci1waWNrZXItc2V0dGluZyc7XG5cbkBDb21wb25lbnQoe1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogY29tcG9uZW50LXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICdhdXRvY29tcGxldGUtcGlja2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYXV0b2NvbXBsZXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vYXV0b2NvbXBsZXRlLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEF1dG9Db21wbGV0ZVBpY2tlckNvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBDb21wb25lbnRDb250ZXh0U2VydmljZSxcbiAgICAgICAgRW50aXR5TWV0YWRhdGFTZXJ2aWNlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBBdXRvQ29tcGxldGVQaWNrZXJDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRCYXNlIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gICAgQFZpZXdDaGlsZCgnZW50aXR5UGlja2VyQm94JywgeyBzdGF0aWM6IHRydWUgfSkgZW50aXR5UGlja2VyQm94Q29tcG9uZW50OiBFbnRpdHlQaWNrZXJCb3hDb21wb25lbnQ7XG4gICAgQFZpZXdDaGlsZCgnYXV0b0NvbXBsZXRlJykgYXV0b0NvbXBsZXRlOiBhbnk7XG4gICAgb25DaGFuZ2VCYXNlOiBGdW5jdGlvbjtcbiAgICBvblRvdWNoZWQ6IEZ1bmN0aW9uO1xuXG4gICAgQElucHV0KCkgY3VycmVudE5vZGU6IENvbnRyb2xUcmVlTm9kZTtcbiAgICBASW5wdXQoKSBjb250cm9sOiBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hO1xuICAgIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gbnVsbDtcbiAgICBASW5wdXQoKSBwb3B1cFNpemU6IFBvcHVwU2l6ZSA9IG5ldyBQb3B1cFNpemUoe1xuICAgICAgICB3aWR0aDogMTEwMCxcbiAgICAgICAgaGVpZ2h0OiA5MDAsXG4gICAgICAgIG1heGltaXplOiB0cnVlXG4gICAgfSk7XG4gICAgX3JlYWRPbmx5VmFsdWVzOiBzdHJpbmdbXTtcbiAgICBASW5wdXQoKSBzZXQgcmVhZE9ubHlWYWx1ZXModmFsdWU6IHN0cmluZ1tdIHwgc3RyaW5nIHwgYW55KSB7XG4gICAgICAgIGxldCB0ZW1wID0gdmFsdWU7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuc3BsaXRjaGFyICYmIHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nICYmIHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xuICAgICAgICAgICAgdGVtcCA9IHZhbHVlLnNwbGl0KHRoaXMuY29udHJvbC5zcGxpdGNoYXIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3JlYWRPbmx5VmFsdWVzID0gdGVtcDtcbiAgICAgICAgdGhpcy51cGRhdGVGdW5jQ2hlY2tSZWFkT25seUl0ZW0oKTtcbiAgICAgICAgdGhpcy51cGRhdGVSZWFkT25seUl0ZW0oKTtcbiAgICB9XG5cbiAgICBnZXQgcmVhZE9ubHlWYWx1ZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWFkT25seVZhbHVlcztcbiAgICB9XG5cbiAgICBAT3V0cHV0KCkgb25Jbml0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uU2VsZWN0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvblVuU2VsZWN0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uRm9jdXM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uQmx1cjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25SZWFkeTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIHNldHRpbmc6IENydWRMaXN0U2V0dGluZyA9IG5ldyBDcnVkTGlzdFNldHRpbmcoKTtcbiAgICBhZHZhbmNlRGF0YTogQWR2YW5jZURhdGFFbnRpdHlQaWNrZXIgPSBuZXcgQWR2YW5jZURhdGFFbnRpdHlQaWNrZXIoKTtcblxuICAgIHZhbHVlOiBhbnk7XG4gICAgZnVuY1JldHVyblZhbHVlOiAodmFsdWUpID0+IHt9ID0gdmFsdWUgPT4gdmFsdWU7XG4gICAgc2VsZWN0ZWRWYWx1ZTogYW55O1xuICAgIHNlbGVjdGVkUm93RGF0YTogYW55O1xuICAgIHNlbGVjdGVkVmFsdWVPYmplY3Q6IGFueTtcbiAgICBkYXRhU291cmNlOiBhbnlbXSA9IFtdO1xuICAgIGZ1bmNDaGVja1JlYWRPbmx5SXRlbTogKGl0ZW06IGFueSkgPT4gdm9pZDtcblxuICAgIGtleXdvcmQ6IHN0cmluZyA9ICcnO1xuICAgIGZpZWxkU2VhcmNoVGV4dDogc3RyaW5nW10gPSBbXTtcbiAgICBkYXRhc291cmNlRmllbGRGaWx0ZXIgPSBbXTtcblxuICAgIHJlc3VsdHM6IGFueVtdID0gW107XG5cbiAgICBzaG93Rm9ybVBpY2tlciA9IGZhbHNlO1xuICAgIGRpcnR5ID0gZmFsc2U7XG5cbiAgICB0b29sdGlwID0gJyc7XG4gICAgaGFzVmFsdWUgPSBmYWxzZTtcbiAgICBpc0ZpcmVkUmVhZHkgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgZ2V0RmlsdGVyT25TZWFyY2g/OiBGdW5jdGlvbjtcbiAgICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvclxuICAgICkge1xuICAgICAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UgPSBpbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmNvbnRyb2wuX2NvbXBvbmVudCA9IHRoaXM7XG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdFNldHRpbmcoKTtcblxuICAgICAgICB0aGlzLmJ1aWxkRmlsdGVyS2V5d29yZCgpO1xuICAgICAgICB0aGlzLmJ1aWxkU2V0dGluZ0VudGl0eVBpY2tlcigpO1xuICAgICAgICB0aGlzLnVwZGF0ZUZ1bmNDaGVja1JlYWRPbmx5SXRlbSgpO1xuICAgICAgICB0aGlzLm9uSW5pdC5lbWl0KHRoaXMpO1xuICAgIH1cblxuICAgIHVwZGF0ZUZ1bmNDaGVja1JlYWRPbmx5SXRlbSgpIHtcbiAgICAgICAgaWYgKHRoaXMucmVhZE9ubHlWYWx1ZXMgJiYgdGhpcy5yZWFkT25seVZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZnVuY0NoZWNrUmVhZE9ubHlJdGVtID0gdGhpcy5fZnVuY0NoZWNrUmVhZE9ubHlJdGVtO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mdW5jQ2hlY2tSZWFkT25seUl0ZW0gPSAoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0RGVmYXVsdFNldHRpbmcoKSB7XG4gICAgICAgIHRoaXMuZmllbGRTZWFyY2hUZXh0ID0gWy4uLnRoaXMuY29udHJvbC5maWVsZFNlYXJjaFRleHRdO1xuICAgICAgICBpZiAoIXRoaXMuZmllbGRTZWFyY2hUZXh0LnNvbWUoaXRlbSA9PiBpdGVtID09IHRoaXMuY29udHJvbC5kaXNwbGF5RmllbGQpKSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkU2VhcmNoVGV4dC5wdXNoKHRoaXMuY29udHJvbC5kaXNwbGF5RmllbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5yZXR1cm5UeXBlID09ICd2YWx1ZScpIHtcbiAgICAgICAgICAgIHRoaXMuZnVuY1JldHVyblZhbHVlID0gKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1hcChpdGVtID0+IGl0ZW1bdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZ1bmNSZXR1cm5WYWx1ZSA9IHZhbHVlID0+IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2UgaW5zdGFuY2VvZiBDYW5Cb0hvU29TZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFzb3VyY2VGaWVsZEZpbHRlciA9IERhdGFzb3VyY2VGaWx0ZXJDYW5CbztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGJ1aWxkRmlsdGVyS2V5d29yZCgpIHtcbiAgICAgICAgY29uc3Qgb3BlcmF0b3IgPSB0aGlzLmNvbnRyb2wub3BlcmF0b3JGaWVsZFNlYXJjaFRleHQgPz8gT3BlcmF0b3IuY29udGFpbjtcbiAgICAgICAgaWYgKHRoaXMuZmllbGRTZWFyY2hUZXh0Lmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICB0aGlzLmdldEZpbHRlck9uU2VhcmNoID0gdmFsdWUgPT4gdGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sLmRpc3BsYXlGaWVsZCwgb3BlcmF0b3IsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0RmlsdGVyT25TZWFyY2ggPSB2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IEZpbHRlcih7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2ljOiAnb3InLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbXVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGRTZWFyY2ggb2YgdGhpcy5maWVsZFNlYXJjaFRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmZpbHRlcnMucHVzaCh0aGlzLm5ld0ZpbHRlcihmaWVsZFNlYXJjaCwgb3BlcmF0b3IsIHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYnVpbGRTZXR0aW5nRW50aXR5UGlja2VyKCkge1xuICAgICAgICB0aGlzLnNldHRpbmcuY29scyA9IFtdO1xuICAgICAgICB0aGlzLnNldHRpbmcudGl0bGUgPSAnJztcbiAgICAgICAgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlID0gdGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlO1xuICAgICAgICB0aGlzLnNldHRpbmcuaGVpZ2h0VHlwZSA9IEhlaWdodFR5cGUuZHluYW1pYztcbiAgICAgICAgdGhpcy5zZXR0aW5nLmhpZGRlbkNoZWNrYm94ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZXR0aW5nLnNldHRpbmdLZXkgPSAnZW50aXR5UGlja2VyJztcbiAgICAgICAgdGhpcy5zZXR0aW5nLmhpZGRlbkFkdmFuY2VTZWFyY2ggPSB0aGlzLmNvbnRyb2wuaGlkZGVuQWR2YW5jZVNlYXJjaDtcbiAgICAgICAgdGhpcy5zZXR0aW5nLmhpZGRlblNldHRpbmdXb3JrZmxvdyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5TZXR0aW5nUGVybWlzc2lvbiA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0dGluZy5maWVsZFNlYXJjaFRleHQgPSB0aGlzLmNvbnRyb2wuZmllbGRTZWFyY2hUZXh0O1xuICAgICAgICB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5zb3J0RmllbGQgPSB0aGlzLmNvbnRyb2wuc29ydEZpZWxkO1xuICAgICAgICB0aGlzLmNvbnRyb2wuY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgICAgICAgICBpZiAoY29sdW1uLmlzRGlzcGxheSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbCA9IG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcbiAgICAgICAgICAgICAgICAgICAgLi4uY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogY29sdW1uLmNvZGUgfHwgY29sdW1uLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGNvbHVtbi5sYWJlbClcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uLmRhdGFUeXBlID09ICdjdXN0b20nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbC5kYXRhVHlwZSA9IGNvbHVtbi5jb2RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuY29scy5wdXNoKGNvbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFkdmFuY2VEYXRhLmZpZWxkcyA9IHRoaXMuZ2V0RmllbGRzKCk7XG4gICAgfVxuXG4gICAgLy8gTOG6pXkgdW5pb24gY+G7p2E6IHNlbGVjdGVkRmllbGQsIGZpZWxkUGx1cywgZGlzcGxheSBmaWVsZHMgY8OzIHRyb25nIHRhYmxlLlxuICAgIGdldEZpZWxkcygpIHtcbiAgICAgICAgY29uc3QgYXJyRmllbGQ6IHN0cmluZ1tdID0gW3RoaXMuY29udHJvbC5kaXNwbGF5RmllbGQsICdpZCddO1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLnZhbHVlRmllbGQgJiYgdGhpcy5jb250cm9sLnZhbHVlRmllbGQgIT0gJ2lkJykge1xuICAgICAgICAgICAgYXJyRmllbGQucHVzaCh0aGlzLmNvbnRyb2wudmFsdWVGaWVsZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jb250cm9sLmZpZWxkUGx1cykge1xuICAgICAgICAgICAgYXJyRmllbGQucHVzaCguLi50aGlzLmNvbnRyb2wuZmllbGRQbHVzLnNwbGl0KCcsJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXJyRGlzcGxheUZpZWxkID0gdGhpcy5jb250cm9sLmNvbHVtbnMuZmlsdGVyKHggPT4geC5pc0Rpc3BsYXkgJiYgIXgubm90SW5GaWVsZHMgJiYgeC5kYXRhVHlwZSAhPSAnY3VzdG9tJylcbiAgICAgICAgICAgIC5tYXAoeCA9PiB4LmNvZGUgfHwgeC5maWVsZCk7XG5cbiAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5hZGREaXN0aW5jdChhcnJEaXNwbGF5RmllbGQsIGFyckZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGFyckZpZWxkLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgZ2V0RHJvcGRvd25PcHRpb25zKHBhZ2VTaXplOiBudW1iZXIgPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBEcm9wZG93bk9wdGlvbnMoe1xuICAgICAgICAgICAgZGlzcGxheUZpZWxkOiB0aGlzLmNvbnRyb2wuZGlzcGxheUZpZWxkLFxuICAgICAgICAgICAgdmFsdWVGaWVsZDogdGhpcy5jb250cm9sLnZhbHVlRmllbGQsXG4gICAgICAgICAgICBmaWVsZFBsdXM6IHRoaXMuY29udHJvbC5maWVsZFBsdXMsXG4gICAgICAgICAgICBmdW5jR2V0TGFiZWw6IHRoaXMuY29udHJvbC5mdW5jR2V0TGFiZWwsXG4gICAgICAgICAgICBwbHVzVXJsOiB0aGlzLmNvbnRyb2wucGx1c1VybCxcbiAgICAgICAgICAgIHNvcnRzOiB0aGlzLmNvbnRyb2wuc29ydHMsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocGFnZVNpemUpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wYWdlU2l6ZSA9IHBhZ2VTaXplO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgYXN5bmMgc2hvd1BpY2tGb3JtKCkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLm1vZGlmeUluaXRTZWFyY2hEYXRhKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvbnRyb2wubW9kaWZ5SW5pdFNlYXJjaERhdGEodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dGb3JtUGlja2VyID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXREYXRhKCkge1xuICAgICAgICBjb25zdCBmaWx0ZXJzID0gW107XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlICYmIHRoaXMudmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh0aGlzLm5ld0ZpbHRlcih0aGlzLmNvbnRyb2wudmFsdWVGaWVsZCwgT3BlcmF0b3Iubm90SW4sIHRoaXMudmFsdWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRoaXMubmV3RmlsdGVyKHRoaXMuY29udHJvbC52YWx1ZUZpZWxkLCBPcGVyYXRvci5ub3RFcXVhbCwgdGhpcy52YWx1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGFwcGVuZERlZmF1bHRGaWx0ZXIoZmlsdGVycywgdGhpcy5jb250cm9sLmRlZmF1bHRGaWx0ZXJzKTtcbiAgICAgICAgaWYgKHRoaXMua2V5d29yZCAmJiB0aGlzLmtleXdvcmQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRoaXMuZ2V0RmlsdGVyT25TZWFyY2godGhpcy5rZXl3b3JkKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tb2RpZnlGaWx0ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGFsbG93ID0gYXdhaXQgdGhpcy5jb250cm9sLm1vZGlmeUZpbHRlcihmaWx0ZXJzLCB0aGlzLCB0aGlzLmN1cnJlbnROb2RlKTtcbiAgICAgICAgICAgIGlmIChhbGxvdyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IGF3YWl0IHRoaXMuY29udHJvbC5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcbiAgICAgICAgICAgIGZpbHRlcnMsIHRoaXMuZ2V0RHJvcGRvd25PcHRpb25zKClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5maXJlRXZlbnRBZnRlckdldERhdGFEcm9wRG93bihkYXRhU291cmNlKTtcbiAgICAgICAgdGhpcy5yZVN0cnVjdHVyZURhdGFTb3VyY2UoZGF0YVNvdXJjZSk7XG4gICAgICAgIHRoaXMucmVzdWx0cyA9IHRoaXMuZGF0YVNvdXJjZTtcbiAgICAgICAgLy8gUmV0dXJuIMSR4buDIG3hu5l0IHPhu5EgbsahaSBraMOhYyBkw7luZywgayByZW1vdmVcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzdWx0cztcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpcmVFdmVudEFmdGVyR2V0RGF0YURyb3BEb3duKGRhdGFTb3VyY2UpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5hZnRlckdldERhdGFEcm9wZG93bikge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLmFmdGVyR2V0RGF0YURyb3Bkb3duKGRhdGFTb3VyY2UsIHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVzZXRDb250cm9sKCkge1xuICAgICAgICAvLyBpZiAodGhpcy5fdmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAvLyAgICAgdGhpcy5fdmFsdWUgPSBudWxsO1xuICAgICAgICAvLyAgICAgdGhpcy5maXJlQ2xlYXJWYWx1ZUV2ZW50KCk7XG4gICAgICAgIC8vIH1cbiAgICB9XG5cbiAgICBjbGVhckRhdGFzb3VyY2UoKSB7XG4gICAgICAgIC8vIHRoaXMuZGF0YVNvdXJjZUludGVybmFsID0gW107XG4gICAgICAgIC8vIHRoaXMuX2hhc0xvYWRlZERhdGFzb3VyY2UgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBzZWFyY2goZXZlbnQpIHtcbiAgICAgICAgdGhpcy5rZXl3b3JkID0gZXZlbnQucXVlcnk7XG4gICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xuICAgIH1cblxuICAgIGhhbmRsZUNvbnRlbnRMZWZ0SW5pdChjcnVkTGlzdCkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLmFmdGVyQ29udGVudExlZnRJbml0KSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuYWZ0ZXJDb250ZW50TGVmdEluaXQoY3J1ZExpc3QpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlQ29udGVudFJpZ2h0SW5pdChjcnVkTGlzdCkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLmFmdGVyQ29udGVudFJpZ2h0SW5pdCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLmFmdGVyQ29udGVudFJpZ2h0SW5pdChjcnVkTGlzdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGVhclZhbHVlKCkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXN1bHRzID0gW107XG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZSgpO1xuICAgICAgICB0aGlzLmhhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMub25VblNlbGVjdC5lbWl0KHtcbiAgICAgICAgICAgIGl0ZW06IHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnNlbGVjdGVkVmFsdWVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZUV2ZW50KCk7XG4gICAgfVxuXG4gICAgLy8gU2VsZWN0IGl0ZW0gY+G7p2EgYXV0b2NvbXBsZXRlXG4gICAgaGFuZGxlU2VsZWN0KGl0ZW0pIHtcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKCk7XG4gICAgICAgIGNvbnN0IGV2dCA9IHtcbiAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5zZWxlY3RlZFZhbHVlXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMub25TZWxlY3QuZW1pdChldnQpO1xuICAgICAgICB0aGlzLmZpcmVDaGFuZ2VFdmVudCgpO1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLmNhbGxCYWNrICYmIHRoaXMuY29udHJvbC5jYWxsQmFjay5zZWxlY3QpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5jYWxsQmFjay5zZWxlY3QoaXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBC4buPIHNlbGVjdCBpdGVtIGPhu6dhIGF1dG9jb21wbGV0ZVxuICAgIGhhbmRsZVVuU2VsZWN0KCRldmVudCkge1xuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUoKTtcbiAgICAgICAgY29uc3QgZXZ0ID0ge1xuICAgICAgICAgICAgaXRlbTogJGV2ZW50LFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2VsZWN0ZWRWYWx1ZVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9uVW5TZWxlY3QuZW1pdChldnQpO1xuICAgICAgICB0aGlzLmZpcmVDaGFuZ2VFdmVudCgpO1xuICAgIH1cblxuICAgIGhhbmRsZUZvY3VzKGV2dCkge1xuICAgICAgICBpZiAoZXZ0LnRhcmdldC52YWx1ZSkge1xuICAgICAgICAgICAgZXZ0LnRhcmdldC5zZWxlY3QoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uRm9jdXMuZW1pdChldnQpO1xuICAgIH1cblxuICAgIGhhbmRsZUJsdXIoJGV2ZW50KSB7XG4gICAgICAgIHRoaXMub25CbHVyLmVtaXQoKTtcbiAgICB9XG5cbiAgICBoYW5kbGVLZXlVcChldnQpIHtcbiAgICAgICAgbGV0IGhpZGVTdWdnZXNzaW9ucyA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XG4gICAgICAgICAgICBoaWRlU3VnZ2Vzc2lvbnMgPSBldnQudGFyZ2V0LnBhcmVudE5vZGUucGFyZW50Tm9kZS5wYXJlbnROb2RlLmNoaWxkRWxlbWVudENvdW50ID09IDE7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ICYmIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdC5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgJiYgZXZ0LmtleUNvZGUgPT0gNDAgJiYgaGlkZVN1Z2dlc3Npb25zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBoaWRlU3VnZ2Vzc2lvbnMgPSBldnQudGFyZ2V0LnBhcmVudE5vZGUuY2hpbGRFbGVtZW50Q291bnQgPT0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldnQudGFyZ2V0LnZhbHVlID09ICcnICYmIGhpZGVTdWdnZXNzaW9ucyAmJiBldnQua2V5Q29kZSAhPSA0MCAmJiBldnQua2V5Q29kZSAhPSAzOCkge1xuICAgICAgICAgICAgdGhpcy5yZXN1bHRzID0gW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBsdXUgZGF0YSBjdWEgcm93IGRhbmcgZHVvYyBzZWxlY3QsIGR1bmcga2hpIGNvbnRyb2wubXVsdGlwbGUgPSBmYWxzZTtcbiAgICBoYW5kbGVSb3dTZWxlY3QoaXRlbSkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93RGF0YSA9IGl0ZW07XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHNlbGVjdCBpdGVtIHRyb25nIGVudGl0eSBwaWNrZXIgYm94IChLaMO0bmcgY+G6p24gZW1pdCBjaGFuZ2UpXG4gICAgaGFuZGxlU2VsZWN0RW50aXR5KGV2dCkge1xuICAgICAgICB0aGlzLm9uU2VsZWN0LmVtaXQoZXZ0KTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgdW5zZWxlY3QgaXRlbSB0cm9uZyBlbnRpdHkgcGlja2VyIGJveCAoS2jDtG5nIGPhuqduIGVtaXQgY2hhbmdlKVxuICAgIGhhbmRsZVVuU2VsZWN0RW50aXR5KGV2dCkge1xuICAgICAgICB0aGlzLm9uVW5TZWxlY3QuZW1pdChldnQpO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBjaGFuZ2UgaXRlbSB0cm9uZyBlbnRpdHkgcGlja2VyIGJveFxuICAgIGhhbmRsZUNoYW5nZUVudGl0eShldnQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gZXZ0LnZhbHVlO1xuICAgICAgICB0aGlzLnVwZGF0ZVB1cmVWYWx1ZSgpO1xuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlRXZlbnQoKTtcbiAgICB9XG5cbiAgICBnZXRWYWx1ZVJldHVybigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnVuY1JldHVyblZhbHVlKHRoaXMuc2VsZWN0ZWRWYWx1ZSk7XG4gICAgfVxuXG4gICAgX2Z1bmNDaGVja1JlYWRPbmx5SXRlbShpdGVtOiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMucmVhZE9ubHlWYWx1ZXMuc29tZShxID0+IHEgPT0gaXRlbS52YWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0pKSB7XG4gICAgICAgICAgICBpdGVtLl9kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVSZWFkT25seUl0ZW0oKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUgJiYgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0KSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZ1bmNDaGVja1JlYWRPbmx5SXRlbShpdGVtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlU2VsZWN0ZWRWYWx1ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRWYWx1ZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRWYWx1ZS5wdXNoKGl0ZW0udmFsdWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuZnVuY0NoZWNrUmVhZE9ubHlJdGVtKGl0ZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBzZWxlY3RlZFZhbHVlO1xuICAgICAgICAgICAgdGhpcy50b29sdGlwID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy50b29sdGlwID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdC52YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXAgPSB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QubGFiZWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZVB1cmVWYWx1ZSgpO1xuICAgIH1cblxuICAgIHVwZGF0ZVB1cmVWYWx1ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZS5tYXAoaXRlbSA9PiBpdGVtW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSk7XG4gICAgICAgICAgICB0aGlzLmhhc1ZhbHVlID0gdGhpcy5zZWxlY3RlZFZhbHVlLmxlbmd0aCA+IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5zZWxlY3RlZFZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXTtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZpcmVDaGFuZ2VFdmVudCgpIHtcbiAgICAgICAgY29uc3QgdmFsdWVSZXR1cm4gPSB0aGlzLmZ1bmNSZXR1cm5WYWx1ZSh0aGlzLnNlbGVjdGVkVmFsdWUpO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlQmFzZSh2YWx1ZVJldHVybik7XG4gICAgICAgIHRoaXMub25DaGFuZ2VkLmVtaXQoe1xuICAgICAgICAgICAgdmFsdWU6IHZhbHVlUmV0dXJuXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIGhhbmRsZUhpZGUoZXZ0KSB7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm1QaWNrZXIgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuZGlydHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZGF0YVNvdXJjZSA9IFtdO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlICYmIHRoaXMudmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlID0gYXdhaXQgdGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKHRoaXMuY29udHJvbC52YWx1ZUZpZWxkLCBPcGVyYXRvci5pbiwgdGhpcy52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sIHRoaXMuZ2V0RHJvcGRvd25PcHRpb25zKHRoaXMudmFsdWUubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVFdmVudEFmdGVyR2V0RGF0YURyb3BEb3duKGRhdGFTb3VyY2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnJlU3RydWN0dXJlRGF0YVNvdXJjZShkYXRhU291cmNlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSB0aGlzLmRhdGFTb3VyY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgZGF0YVNvdXJjZSA9IFtdO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UgPSBhd2FpdCB0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sLnZhbHVlRmllbGQsIE9wZXJhdG9yLmVxdWFsLCB0aGlzLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgXSwgdGhpcy5nZXREcm9wZG93bk9wdGlvbnMoMSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlRXZlbnRBZnRlckdldERhdGFEcm9wRG93bihkYXRhU291cmNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5yZVN0cnVjdHVyZURhdGFTb3VyY2UoZGF0YVNvdXJjZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVNvdXJjZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IHRoaXMuZGF0YVNvdXJjZVswXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkNsaWNrU3VibWl0QnV0dG9uKGV2dCwgZW50aXR5UGlja2VyQm94OiBFbnRpdHlQaWNrZXJCb3hDb21wb25lbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVIaWRlKGV2dCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5zZWxlY3RlZFJvd0RhdGEpIHtcbiAgICAgICAgICAgIGVudGl0eVBpY2tlckJveCAmJiBlbnRpdHlQaWNrZXJCb3guaGFuZGxlUGljayh0aGlzLnNlbGVjdGVkUm93RGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3dGb3JtUGlja2VyID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlU3RydWN0dXJlRGF0YVNvdXJjZShzb3VyY2VzOiBhbnlbXSkge1xuICAgICAgICBpZiAoc291cmNlcyAhPSBudWxsICYmIHNvdXJjZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgYXJyID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHNvdXJjZXMpIHtcbiAgICAgICAgICAgICAgICBpdGVtID0gdGhpcy5yZVN0cnVjdHVyZUl0ZW1PYmplY3QoaXRlbSk7XG4gICAgICAgICAgICAgICAgYXJyLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IGFycjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVTdHJ1Y3R1cmVJdGVtT2JqZWN0KGl0ZW0pOiBTZWxlY3RJdGVtIHtcbiAgICAgICAgY29uc3QgdGVtcDogU2VsZWN0SXRlbSA9IHsgdmFsdWU6IGl0ZW0gfTtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5mdW5jR2V0TGFiZWwpIHtcbiAgICAgICAgICAgIHRlbXAubGFiZWwgPSB0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGVtcC5sYWJlbCA9IGl0ZW1bdGhpcy5jb250cm9sLmRpc3BsYXlGaWVsZF07XG4gICAgICAgIH1cbiAgICAgICAgdGVtcC52YWx1ZS5fZHJvcGRvd252YWx1ZSA9IHRoaXMuY29udHJvbC52YWx1ZUZpZWxkO1xuICAgICAgICByZXR1cm4gdGVtcDtcbiAgICB9XG5cbiAgICBnZXREYXRhU2VsZWN0ZWRWYWx1ZShvYmo6IGFueSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgIGlmIChvYmogIT0gbnVsbCAmJiBvYmoubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2godGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sLnZhbHVlRmllbGQsIE9wZXJhdG9yLmluLCBvYmopKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgYXBwZW5kRGVmYXVsdEZpbHRlcihmaWx0ZXJzLCB0aGlzLmNvbnRyb2wuZGVmYXVsdEZpbHRlcnMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXREcm9wZG93bk9wdGlvbnMob2JqLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgKS50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVFdmVudEFmdGVyR2V0RGF0YURyb3BEb3duKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlU3RydWN0dXJlRGF0YVNvdXJjZShyZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzID0gdGhpcy5kYXRhU291cmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ID0gdGhpcy5kYXRhU291cmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChvYmogIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sLnZhbHVlRmllbGQsIE9wZXJhdG9yLmVxdWFsLCBvYmopXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0RHJvcGRvd25PcHRpb25zKDEpXG4gICAgICAgICAgICAgICAgICAgICkudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZUV2ZW50QWZ0ZXJHZXREYXRhRHJvcERvd24ocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlU3RydWN0dXJlRGF0YVNvdXJjZShyZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0cyA9IHRoaXMuZGF0YVNvdXJjZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSB0aGlzLmRhdGFTb3VyY2VbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wuY2FsbEJhY2sgJiYgdGhpcy5jb250cm9sLmNhbGxCYWNrLnNlbGVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wuY2FsbEJhY2suc2VsZWN0KHRoaXMuc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgbGV0IHZhbHVlID0gIWlzTGl0ZXJhbE9iamVjdChvYmopID8gb2JqIDogb2JqW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXTtcbiAgICAgICAgdGhpcy5nZXREYXRhU2VsZWN0ZWRWYWx1ZSh2YWx1ZSlcbiAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0ZpcmVSZWFkeSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2hlY2tGaXJlUmVhZHkoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0ZpcmVkUmVhZHkgJiYgdGhpcy5oYXNWYWx1ZSB8fCB0aGlzLmNvbnRyb2wuaXNDaGVja1dyaXRlVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuaXNGaXJlZFJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIEjDoG0gcmVhZHkgbsOgeSBjaOG7iSBD4bqmTiBEw5lORyB0cm9uZyB0csaw4budbmcgaOG7o3AgYXV0b2NvbXBsZXRlLXBpY2tlciBjw7MgdmFsdWUgPT4gRMO5bmcgxJHhu4MgbOG6pXkgZOG7ryBsaeG7h3UgY8OhYyBjb21wb25lbnQgY29uXG4gICAgICAgICAgICAvLyBO4bq/dSBjw7MgdHLGsOG7nW5nIGjhu6NwIG7DoG8ga2jDoWMgdGjDrCBj4bqnbiBwaOG6o2kgeOG7rSBsw70ga2jDoWNcbiAgICAgICAgICAgIHRoaXMub25SZWFkeS5lbWl0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZUJhc2UgPSBmbjtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxufVxuIl19
|
|
@@ -374,8 +374,11 @@ export class CanBoHoSoService extends BaseService {
|
|
|
374
374
|
}
|
|
375
375
|
generatePickerControlSchema(control, enumCanBo = EnumCanBo.TRONG_DON_VI) {
|
|
376
376
|
var _a;
|
|
377
|
-
|
|
378
|
-
if (
|
|
377
|
+
let columns = [...this.lstEntityPickerColumn];
|
|
378
|
+
if (control.isOverrideColumns) {
|
|
379
|
+
columns = [...control.columns];
|
|
380
|
+
}
|
|
381
|
+
else if (((_a = control.columns) === null || _a === void 0 ? void 0 : _a.length) > 0) {
|
|
379
382
|
columns.push(...control.columns);
|
|
380
383
|
}
|
|
381
384
|
const result = new AutoCompletePickerControlSchema(Object.assign(Object.assign({ field: 'idCanBo', label: 'Cán bộ', title: 'Chọn cán bộ', multiple: false, baseService: this, plusUrl: 'WithChucDanhChucVu', displayField: 'hoVaTen', fieldPlus: 'code', fieldSearchText: ['email', 'code'], funcGetLabel: (item) => {
|
|
@@ -430,9 +433,8 @@ export class CanBoHoSoService extends BaseService {
|
|
|
430
433
|
}
|
|
431
434
|
}
|
|
432
435
|
else {
|
|
433
|
-
result.fieldPlus = 'idNgachVienChuc';
|
|
436
|
+
result.fieldPlus = 'idNgachVienChuc,ngaySinh,ngaySinh2,chucDanhs,idHocHam,idHocVi,dienThoaiDiDong,code';
|
|
434
437
|
}
|
|
435
|
-
result.fieldPlus += ',ngaySinh,ngaySinh2,chucDanhs,idHocHam,idHocVi,dienThoaiDiDong,code';
|
|
436
438
|
return result;
|
|
437
439
|
}
|
|
438
440
|
getTenDonVi(dataSource) {
|
|
@@ -687,4 +689,4 @@ CanBoHoSoService.ctorParameters = () => [
|
|
|
687
689
|
{ type: HoSoDoiTacService },
|
|
688
690
|
{ type: CrudService }
|
|
689
691
|
];
|
|
690
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FuYm8taG9zby5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL3NlcnZpY2VzL2NhbmJvLWhvc28uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoSixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUM1RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFD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QUksQ0FBQyxVQUFVLHlCQUF5QixDQUFDO1FBQ3hELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDM0MsQ0FBQzs7OztZQXJ2QkosVUFBVSxTQUFDO2dCQUNSLFVBQVUsRUFBRSxNQUFNO2FBQ3JCOzs7WUFsQlEsVUFBVTtZQUNFLFFBQVE7WUFZcEIsbUJBQW1CO1lBQ25CLFdBQVc7WUFMWCw2QkFBNkI7WUFKN0Isa0JBQWtCO1lBTWxCLGlCQUFpQjtZQURqQixXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgRW51bUNvbnRyb2xQaWNrZXJUeXBlIH0gZnJvbSAnLi4vY2xhc3Nlcy9jb25zdGFudHMnO1xuaW1wb3J0IHsgQXV0b0NvbXBsZXRlUGlja2VyQ29udHJvbFNjaGVtYSwgQ29sdW1uU2NoZW1hQmFzZSwgRGF0YVR5cGUsIEVudGl0eVBpY2tlckNvbHVtbiwgTW9kZWxTY2hlbWEsIE9wZXJhdG9yIH0gZnJvbSAnLi4vY2xhc3Nlcy9mb3JtLXNjaGVtYSc7XG5pbXBvcnQgeyBDb0NhdVRvQ2h1Y1NlcnZpY2UgfSBmcm9tICcuLi9jb21wb25lbnRzL2NvY2F1dG9jaHVjL3NlcnZpY2VzL2NvY2F1dG9jaHVjLnNlcnZpY2UnO1xuaW1wb3J0IHsgRW51bUNhbkJvIH0gZnJvbSAnLi4vZW51bXMvY29tbW9uJztcbmltcG9ydCB7IEZpbHRlciB9IGZyb20gJy4uL21vZGVscy9ncmlkLWluZm8nO1xuaW1wb3J0IHsgQmFzZVNlcnZpY2UgfSBmcm9tICcuL2Jhc2Uuc2VydmljZSc7XG5pbXBvcnQgeyBDYW5Cb19Ib1NvX0NvQ2F1VG9DaHVjU2VydmljZSB9IGZyb20gJy4vY2FuYm8taG9zby1jb2NhdXRvY2h1Yy5zZXJ2aWNlJztcbmltcG9ydCB7IENydWRTZXJ2aWNlIH0gZnJvbSAnLi9jcnVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgSG9Tb0RvaVRhY1NlcnZpY2UgfSBmcm9tICcuL2hvc29kb2l0YWMuc2VydmljZSc7XG5pbXBvcnQgeyBNYXN0ZXJEYXRhU2VydmljZSB9IGZyb20gJy4vbWFzdGVyLWRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBNb2R1bGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuL3VzZXIuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ2FuQm9Ib1NvU2VydmljZSBleHRlbmRzIEJhc2VTZXJ2aWNlIHtcbiAgICBlbnZpcm9ubWVudDogYW55O1xuICAgIHZlcnNpb246IGFueTtcbiAgICBsc3RFbnRpdHlQaWNrZXJDb2x1bW46IEVudGl0eVBpY2tlckNvbHVtbltdO1xuICAgIGRlZmF1bHRFbnRpdHlDb2x1bW5EaWN0ID0ge1xuICAgICAgICB2MTogdGhpcy5nZW5lcmF0ZUxpc3RFbnRpdHlDb2x1bW5WMSgpXG4gICAgfTtcbiAgICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlO1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBodHRwOiBIdHRwQ2xpZW50LCBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIF9tb2R1bGVDb25maWdTZXJ2aWNlOiBNb2R1bGVDb25maWdTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF91c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2NhbkJvX0hvU29fQ29DYXVUb0NodWNTZXJ2aWNlOiBDYW5Cb19Ib1NvX0NvQ2F1VG9DaHVjU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfY29DYXVUb0NodWNTZXJ2aWNlOiBDb0NhdVRvQ2h1Y1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2hvU29Eb2lUYWNTZXJ2aWNlOiBIb1NvRG9pVGFjU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfY3J1ZFNlcnZpY2U6IENydWRTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGh0dHAsIGluamVjdG9yLCBgJHtfbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5hcGlEb21haW4uY2FuYm9FbmRwb2ludH0vJHtfbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5hcGlWZXJzaW9ufS9DYW5Cb19Ib1NvYCk7XG4gICAgICAgIHRoaXMuZW5kUG9pbnQgPSBfbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5hcGlEb21haW4uY2FuYm9FbmRwb2ludDtcbiAgICAgICAgdGhpcy5lbnZpcm9ubWVudCA9IF9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50O1xuICAgICAgICB0aGlzLmVuZFBvaW50ID0gdGhpcy5lbnZpcm9ubWVudC5hcGlEb21haW4uY2FuYm9FbmRwb2ludDtcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gdGhpcy5lbnZpcm9ubWVudC5jYXVIaW5oTmdoaWVwVnU/LnZlcnNpb25Db2x1bW5QaWNrZXJDYW5CbztcbiAgICAgICAgaWYgKHRoaXMudmVyc2lvbikge1xuICAgICAgICAgICAgdGhpcy5sc3RFbnRpdHlQaWNrZXJDb2x1bW4gPSB0aGlzLmRlZmF1bHRFbnRpdHlDb2x1bW5EaWN0W2B2JHt0aGlzLnZlcnNpb259YF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmxzdEVudGl0eVBpY2tlckNvbHVtbikge1xuICAgICAgICAgICAgdGhpcy5sc3RFbnRpdHlQaWNrZXJDb2x1bW4gPSB0aGlzLmdlbmVyYXRlTGlzdEVudGl0eUNvbHVtbkRlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICAgIH1cblxuICAgIGdldElkc0RvblZpSGllblRhaUNhbkJvKGlkQ2FuQm86IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KGAke3RoaXMuc2VydmljZVVyaX0vR2V0SWRzRG9uVmlIaWVuVGFpLyR7aWRDYW5Cb31gKTtcbiAgICB9XG5cbiAgICBnZXRDYW5Cb0NhcFRyZW4odXNlcklkTGFzdHM6IHN0cmluZ1tdKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vR2V0Q2FuQm9DYXBUcmVuYCwge1xuICAgICAgICAgICAgbGlzdEd1aWRWYWx1ZTogdXNlcklkTGFzdHNcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0TGlzdFRyZWVEb25WaVF1YW5MeUJ5VXNlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldChgJHt0aGlzLnNlcnZpY2VVcml9L0dldExpc3RUcmVlRG9uVmlRdWFuTHlCeVVzZXJgKTtcbiAgICB9XG5cbiAgICBnZXRNb2RlbFNjaGVtYXMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnY29kZScsXG4gICAgICAgICAgICAgICAgbmFtZTogJ03DoycsXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6ICdNw6MnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnTcOjJyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IE1vZGVsU2NoZW1hKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2lkJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnaWQnLFxuICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiAnaWQnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnaWQnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnaWRIb2NWaWVuJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnaWQnLFxuICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiAnaWQnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnaWQnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnaG9WYVRlbicsXG4gICAgICAgICAgICAgICAgbmFtZTogJ0jhu40gdsOgIHTDqm4nLFxuICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiAnSOG7jSB2w6AgdMOqbicsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdI4buNIHbDoCB0w6puJyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IE1vZGVsU2NoZW1hKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ25nYXlTaW5oJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnTmfDoHkgc2luaCcsXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6ICdOZ8OgeSBzaW5oJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ05nw6B5IHNpbmgnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnZGllblRob2FpRGlEb25nJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnU+G7kSDEkWnhu4duIHRob+G6oWknLFxuICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiAnU+G7kSDEkWnhu4duIHRob+G6oWknLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnU+G7kSDEkWnhu4duIHRob+G6oWknLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnZW1haWwnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdFbWFpbCcsXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6ICdFbWFpbCcsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdFbWFpbCcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdkb25WaUNodWNWdVN0cicsXG4gICAgICAgICAgICAgICAgbmFtZTogJ8SQxqFuIHbhu4sgLSBDaOG7qWMgduG7pScsXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6ICfEkMahbiB24buLIC0gQ2jhu6ljIHbhu6UnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnxJDGoW4gduG7iyAtIENo4bupYyB24bulJyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgZ2V0Q29sdW1uU2NoZW1hQmFzZSgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2NvZGUnLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTUwcHgnXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2lkSG9jVmllbicsXG4gICAgICAgICAgICAgICAgaW5jbHVkZVNlbGVjdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgdmlzaWJsZTogZmFsc2VcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnaG9WYVRlbicsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcyMDBweCdcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnbmdheVNpbmgnLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnZGF0ZScsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxMTBweCdcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnZGllblRob2FpRGlEb25nJyxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzExMHB4J1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdlbWFpbCcsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmVxdWFsLFxuICAgICAgICAgICAgICAgIGlzT3ZlcnJpZGVGaWx0ZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxODBweCdcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnZG9uVmlDaHVjVnVTdHInLFxuICAgICAgICAgICAgICAgIGFsbG93RmlsdGVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzb3J0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBpbmNsdWRlU2VsZWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzI1MHB4J1xuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcbiAgICB9XG4gICAgZ2V0RGF0YUV4cG9ydDJDKGdyaWRJbmZvKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0U2lnbmFsUihcbiAgICAgICAgICAgIGAke3RoaXMuc2VydmljZVVyaX0vR2V0RGF0YUV4cG9ydDJDYCxcbiAgICAgICAgICAgIGdyaWRJbmZvXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaW5Tb1lldUx5TGljaChpZENhbkJvKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vSW5Tb1lldUx5TGljaD9pZENhbkJvPSR7aWRDYW5Cb31gO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wb3N0KHVybCwgaWRDYW5Cbywge1xuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYicsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5hcHBlbmQoXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZScsXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgICAgICApLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbkx5TGljaEJvaUhvYW4oaWRDYW5Cbykge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0luTHlMaWNoQm9pSG9hbj9pZENhbkJvPSR7aWRDYW5Cb31gO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wb3N0KHVybCwgaWRDYW5Cbywge1xuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYicsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5hcHBlbmQoXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZScsXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgICAgICApLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbkx5TGljaEJvTmhpZW0oaWRDYW5Cbykge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0luTHlMaWNoQm9OaGllbT9pZENhbkJvPSR7aWRDYW5Cb31gO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wb3N0KHVybCwgaWRDYW5Cbywge1xuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYicsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5hcHBlbmQoXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZScsXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgICAgICApLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0YW9UYWlLaG9hbihpZENhbkJvOiBhbnkpIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9UYW9UYWlLaG9hbi8ke2lkQ2FuQm99YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QodXJsLCB7fSk7XG4gICAgfVxuXG4gICAgZ2V0Q2FuQm9JbmZvKGlkQ2FuQm86IHN0cmluZykge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldENhbkJvSW5mby8ke2lkQ2FuQm99YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xuICAgIH1cblxuICAgIGdldERldGFpbFdpdGhDaHVjRGFuaENodWNWdShpZENhbkJvOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldChcbiAgICAgICAgICAgIGAke3RoaXMuc2VydmljZVVyaX0vR2V0RGV0YWlsV2l0aENodWNEYW5oQ2h1Y1Z1LyR7aWRDYW5Cb31gXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FwIG5oYXQgdHJhbmcgdGhhaSBjYW5ib19ob3NvIHRoZW8gaWQgY2FuQm9cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWRDYW5Cb1xuICAgICAqIEBwYXJhbSB7YW55fSBpZFRyYW5nVGhhaVxuICAgICAqIEByZXR1cm4ge1Byb21pc2U8UmVzcG9uc2VSZXN1bHQ+fVxuICAgICAqL1xuICAgIHVwZGF0ZVRyYW5nVGhhaUNhbkJvSG9TbyhpZENhbkJvOiBzdHJpbmcsIGlkVHJhbmdUaGFpOiBhbnkpIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9VcGRhdGVUcmFuZ1RoYWlDYW5Cb0hvU28/aWRDYW5Cbz0ke2lkQ2FuQm99JiZpZFRyYW5nVGhhaT0ke2lkVHJhbmdUaGFpfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwge30pO1xuICAgIH1cblxuICAgIEdldFRob25nVGluQ2FuQm9JZChpZENhbkJvOiBhbnkpIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRUaG9uZ1RpbkNhbkJvSWQvJHtpZENhbkJvfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcbiAgICB9XG5cbiAgICBjaGVja0NhbkJvSW5QaG9uZ0RvaU5nb2FpKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KGAke3RoaXMuc2VydmljZVVyaX0vQ2hlY2tDYW5Cb0luUGhvbmdEb2lOZ29haWApO1xuICAgIH1cblxuICAgIEdldERhbmhTYWNoQ2FuQm9UaGVvRG9uVmkobHN0SWRPcmdSZXEsIGdyaWRJbmZvKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0RGFuaFNhY2hDYW5Cb1RoZW9Eb25WaS8ke2xzdElkT3JnUmVxfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwgZ3JpZEluZm8pO1xuICAgIH1cblxuICAgIGdldERhdGFFeHBvcnRLZXRRdWFEYW5oR2lhKGdyaWRJbmZvKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0RGF0YUV4cG9ydEtldFF1YURhbmhHaWFgO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIGdyaWRJbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBM4bqleSBkYW5oIHPDoWNoIGPDoW4gYuG7mSB2w6AgY+G6pXAgZMaw4bubaSBob+G6t2MgbMOgIG5ow6JuIHZpw6puIG5nxrDhu51pIGTDuW5nIHF14bqjbiBsw70gdHLhu7FjIHRp4bq/cFxuICAgICAqIE7hur91IHRyb25nIGPDuW5nIDEgxJHGoW4gduG7iyB0aMOsIG5nxrDhu51pIGPDsyBjaOG7qWMgduG7pSBj4bqlcCB0csaw4bufbmcgc+G6vSBjw7MgY+G6pXAgZMaw4bubaSBsw6AgdG/DoG4gYuG7mSBuaMOibiB2acOqblxuICAgICAqIEPDsm4gbmfGsOG7nWkgY8OzIGNo4bupYyB24bulIGPhuqVwIHBow7MgdGjDrCBjw7MgY+G6pXAgZMaw4bubaSBsw6AgdG/DoG4gYuG7mSBuaMOibiB2acOqbiB0cuG7qyBj4bqlcCB0csaw4bufbmcsIC4uLlxuICAgICAqIEByZXR1cm4ge1Byb21pc2U8UmVzcG9uc2VSZXN1bHQ+fVxuICAgICAqL1xuICAgIGdldENhbkJvQ2FwRHVvaSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldChgJHt0aGlzLnNlcnZpY2VVcml9L0dldENhbkJvQ2FwRHVvaWApO1xuICAgIH1cblxuICAgIGNoZWNrSXNDYW5Cb1Bob25nVGNjYigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldChgJHt0aGlzLnNlcnZpY2VVcml9L0NoZWNrSXNDYW5Cb1Bob25nVGNjYmApO1xuICAgIH1cblxuICAgIGdldElkc0RvblZpRHVvY1BoZXBRdWFuTHkoaWREb25WaSkge1xuICAgICAgICBsZXQgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRJZHNEb25WaUR1b2NQaGVwUXVhbkx5YDtcbiAgICAgICAgaWYgKGlkRG9uVmkpIHtcbiAgICAgICAgICAgIHVybCArPSBgP2lkRG9uVmk9JHtpZERvblZpfWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xuICAgIH1cblxuICAgIGdldFBoYW1WaURvblZpUXVhbkx5KGlzR2V0VHJlZSA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0UGhhbVZpRG9uVmlRdWFuTHk/aXNHZXRUcmVlPSR7aXNHZXRUcmVlfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcbiAgICB9XG4gICAgZ2V0SWRzRG9uVmlRdWFuTHkoYWxsQ2hpbGQgPSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0SWRzRG9uVmlRdWFuTHk/YWxsQ2hpbGQ9JHthbGxDaGlsZH1gO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0SWRzQ2FuQm9DdW5nRG9uVmkoKSB7XG4gICAgICAgIGNvbnN0IHByb2ZpbGVJbmZvID0gdGhpcy5fdXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICAgICAgbGV0IGlkc0NhbkJvID0gW107XG4gICAgICAgIGlmIChwcm9maWxlSW5mbz8uaWRDYW5Cbykge1xuICAgICAgICAgICAgY29uc3QgY29tbW9uID0gW3RoaXMubmV3RmlsdGVyKCdjb25IaWV1THVjJywgT3BlcmF0b3IuZXF1YWwsIHRydWUpXTtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSBbXG4gICAgICAgICAgICAgICAgLi4uY29tbW9uLFxuICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdpZENhbkJvJywgT3BlcmF0b3IuZXF1YWwsIHByb2ZpbGVJbmZvLmlkQ2FuQm8pLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxldCBpZHNEb25WaUNhbkJvTG9naW4gPSBbXTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2NhbkJvX0hvU29fQ29DYXVUb0NodWNTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmdldEFsbChmaWx0ZXJzKVxuICAgICAgICAgICAgICAgIC50aGVuKChycykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocnMuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWRzRG9uVmlDYW5Cb0xvZ2luID0gcnMuZGF0YS5tYXAoKHgpID0+IHguaWREb25WaSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGlkc0RvblZpQ2FuQm9Mb2dpbi5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGlkc0RvblZpID0gW107XG4gICAgICAgICAgICBjb25zdCBjb0NhdVRvQ2h1Y0ZpbHRlcnMgPSBuZXcgRmlsdGVyKHsgbG9naWM6ICdvcicsIGZpbHRlcnM6IFtdIH0pO1xuICAgICAgICAgICAgaWRzRG9uVmlDYW5Cb0xvZ2luLmZvckVhY2goKGlkRG9uVmkpID0+IHtcbiAgICAgICAgICAgICAgICBjb0NhdVRvQ2h1Y0ZpbHRlcnMuZmlsdGVycy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICdpZER1b25nRGFuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIE9wZXJhdG9yLmNvbnRhaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBgOyR7aWREb25WaX07YFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fY29DYXVUb0NodWNTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmdldEFsbChbY29DYXVUb0NodWNGaWx0ZXJzXSwgJ2lkJylcbiAgICAgICAgICAgICAgICAudGhlbigocnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJzLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkc0RvblZpID0gcnMuZGF0YS5tYXAoKHgpID0+IHguaWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChpZHNEb25WaS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbmV3ZmlsdGVycyA9IFtcbiAgICAgICAgICAgICAgICAuLi5jb21tb24sXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoJ2lkRG9uVmknLCBPcGVyYXRvci5pbiwgaWRzRG9uVmkpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2NhbkJvX0hvU29fQ29DYXVUb0NodWNTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmdldEFsbChuZXdmaWx0ZXJzLCAnaWRDYW5CbycpXG4gICAgICAgICAgICAgICAgLnRoZW4oKHJzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChycy5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZHNDYW5CbyA9IHJzLmRhdGEubWFwKCh4KSA9PiB4LmlkQ2FuQm8pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gaWRzQ2FuQm87XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGdlbmVyYXRlQ29sdW1uRG9uVmkoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdkb25WaUNhcDJzJyxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2RvblZpVGhlb0NhcCcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnS2hvYSB2aeG7h24vIMSRxqFuIHbhu4snKSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzIyMHB4JyxcbiAgICAgICAgICAgICAgICBhbGxvd0ZpbHRlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgc29ydDogZmFsc2UsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2RvblZpQ2FwM3MnLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnZG9uVmlUaGVvQ2FwJyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdC4buZIG3DtG4vIHbEg24gcGjDsm5nIGtob2EnKSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzIyMHB4JyxcbiAgICAgICAgICAgICAgICBhbGxvd0ZpbHRlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgc29ydDogZmFsc2UsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBnZXRJbmZvQ2FuQm9XaXRoRG9uVmlDaHVjVnUobHN0SWRDYW5Cbzogc3RyaW5nW10pIHtcbiAgICAgICAgY29uc3QgZmlsdGVycyA9IFt0aGlzLm5ld0ZpbHRlcignaWQnLCBPcGVyYXRvci5pbiwgbHN0SWRDYW5CbyldO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRhQ3VzdG9tUm91dGUoXG4gICAgICAgICAgICBgRmlsdGVyQnlPcmcvJHt0aGlzLl9jb21tb25TZXJ2aWNlLmd1aWRFbXB0eSgpfWAsXG4gICAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgICAgJycsXG4gICAgICAgICAgICBbXSxcbiAgICAgICAgICAgIDEwMDAwMFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHNldFRob25nVGluRG9uVmlDYW5CbyhpdGVtQ2FuQm86IGFueSwgbHN0Q2FuQm9Eb25WaTogYW55W10pIHtcbiAgICAgICAgY29uc3QgaG9Tb0RvblZpID0gbHN0Q2FuQm9Eb25WaS5maW5kKCh4KSA9PiB4LmlkID09IGl0ZW1DYW5Cby5pZENhbkJvKTtcbiAgICAgICAgaWYgKGhvU29Eb25WaSkge1xuICAgICAgICAgICAgaXRlbUNhbkJvLmRvblZpQ2FwMnMgPSBob1NvRG9uVmkuZG9uVmlDYXAycztcbiAgICAgICAgICAgIGl0ZW1DYW5Cby5kb25WaUNhcDNzID0gaG9Tb0RvblZpLmRvblZpQ2FwM3M7XG4gICAgICAgICAgICBpdGVtQ2FuQm8uZG9uVmlDaHVjVnVzID0gaG9Tb0RvblZpLmRvblZpQ2h1Y1Z1cztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldERvblZpRnVsbHNCeUNhbkJvQXBpKGlkQ2FuQm8pIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXREb25WaUZ1bGxzQnlDYW5Cb0FwaT9pZENhbkJvPSR7aWRDYW5Cb31gO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0SW5mb0FmdGVyR2V0RGF0YShkYXRhU291cmNlKSB7XG4gICAgICAgIGNvbnN0IGd1aWRFbXB0eSA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZEVtcHR5KCk7XG4gICAgICAgIGNvbnN0IGlkc0NhbkJvID0gdGhpcy5fY29tbW9uU2VydmljZS5kaXN0aW5jdEFycmF5KFxuICAgICAgICAgICAgZGF0YVNvdXJjZVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHgpID0+IHguaWRDYW5CbyAhPSBndWlkRW1wdHkpXG4gICAgICAgICAgICAgICAgLm1hcCgoeCkgPT4geC5pZENhbkJvKVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBsc3RDYW5CbyA9IChcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0QWxsKFxuICAgICAgICAgICAgICAgIFt0aGlzLm5ld0ZpbHRlcignaWQnLCBPcGVyYXRvci5pbiwgaWRzQ2FuQm8pXSxcbiAgICAgICAgICAgICAgICAnaWQsY29kZSxob1ZhVGVuLG5nYXlTaW5oLGdpb2lUaW5oJ1xuICAgICAgICAgICAgKVxuICAgICAgICApLmRhdGE7XG4gICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQuaWRDYW5CbyAhPSBndWlkRW1wdHkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYW5CbyA9IGxzdENhbkJvLmZpbmQoKHgpID0+IHguaWQgPT0gZWxlbWVudC5pZENhbkJvKTtcbiAgICAgICAgICAgICAgICBpZiAoY2FuQm8pIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5tYUNhbkJvID0gY2FuQm8uY29kZTtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5ob1ZhVGVuID0gY2FuQm8uaG9WYVRlbjtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC50ZW5DYW5CbyA9IGNhbkJvLmhvVmFUZW47XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQubmdheVNpbmggPSBjYW5Cby5uZ2F5U2luaDtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5naW9pVGluaCA9IGNhbkJvLmdpb2lUaW5oO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0SWRVc2VyQnlEb25WaShsc3RJZERvblZpOiBzdHJpbmdbXSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L2dldElkVXNlckJ5RG9uVmlgLCB7XG4gICAgICAgICAgICBsaXN0R3VpZFZhbHVlOiBsc3RJZERvblZpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRJZENhbkJvQnlEb25WaShsc3RJZERvblZpOiBzdHJpbmdbXSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L2dldElkQ2FuQm9CeURvblZpYCwge1xuICAgICAgICAgICAgbGlzdEd1aWRWYWx1ZTogbHN0SWREb25WaSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0Q29DYXVUb0NodWNSb290RG9uVmlfQnlVc2VySWQodXNlcklkKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0Q29DYXVUb0NodWNSb290RG9uVmlfQnlVc2VySWQvJHt1c2VySWR9YDtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZGVmYXVsdEdldCh1cmwpO1xuICAgIH1cblxuICAgIGFzeW5jIEdldENvQ2F1VG9DaHVjUm9vdERvblZpX0J5TGlzdFVzZXJJZChsc3RVc2VySWQpIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRDb0NhdVRvQ2h1Y1Jvb3REb25WaV9CeUxpc3RVc2VySWRgO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5kZWZhdWx0UG9zdCh1cmwsIGxzdFVzZXJJZCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0Q29DYXVUb0NodWNSb290RG9uVmkoZ3JpZEluZm8pIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRBbGxCeUZpbHRlci9HZXRDb0NhdVRvQ2h1Y1Jvb3REb25WaWA7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRlZmF1bHRQb3N0KHVybCwgZ3JpZEluZm8pO1xuICAgIH1cblxuICAgIGdlbmVyYXRlUGlja2VyQ29udHJvbFNjaGVtYShjb250cm9sOiBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hLCBlbnVtQ2FuQm86IGFueSA9IEVudW1DYW5Cby5UUk9OR19ET05fVkkpIHtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IFsuLi50aGlzLmxzdEVudGl0eVBpY2tlckNvbHVtbl07XG4gICAgICAgIGlmIChjb250cm9sLmNvbHVtbnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbHVtbnMucHVzaCguLi5jb250cm9sLmNvbHVtbnMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hKHtcbiAgICAgICAgICAgIGZpZWxkOiAnaWRDYW5CbycsXG4gICAgICAgICAgICBsYWJlbDogJ0PDoW4gYuG7mScsXG4gICAgICAgICAgICB0aXRsZTogJ0No4buNbiBjw6FuIGLhu5knLFxuICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgICAgICAgYmFzZVNlcnZpY2U6IHRoaXMsXG4gICAgICAgICAgICBwbHVzVXJsOiAnV2l0aENodWNEYW5oQ2h1Y1Z1JyxcbiAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogJ2hvVmFUZW4nLFxuICAgICAgICAgICAgZmllbGRQbHVzOiAnY29kZScsXG4gICAgICAgICAgICBmaWVsZFNlYXJjaFRleHQ6IFsnZW1haWwnLCAnY29kZSddLFxuICAgICAgICAgICAgZnVuY0dldExhYmVsOiAoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBpdGVtLmhvVmFUZW47XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uY29kZSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBgJHtpdGVtLmNvZGV9IC0gJHtyZXN1bHR9IGA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpdGVtLnRlbkRvblZpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBgLSAke2l0ZW0udGVuRG9uVml9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgIGFmdGVyR2V0RGF0YURyb3Bkb3duOiAoZGF0YVNvdXJjZSwgZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0VGVuRG9uVmkoZGF0YVNvdXJjZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWZ0ZXJHZXREYXRhUGlja2VkOiBhc3luYyAoZGF0YVNvdXJjZSwgZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0RGF0YVBsdXMoZGF0YVNvdXJjZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWZ0ZXJHZXREYXRhVW5QaWNrZWQ6IGFzeW5jIChkYXRhU291cmNlLCBlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXREYXRhUGx1cyhkYXRhU291cmNlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWZhdWx0RmlsdGVyczogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbC5pc0NhY2hpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRoaXMubmV3RmlsdGVyKCdpc0NhY2hpbmcnLCBPcGVyYXRvci5lcXVhbCwgZmFsc2UpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3dpdGNoIChlbnVtQ2FuQm8pIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBFbnVtQ2FuQm8uTkdPQUlfRE9OX1ZJOlxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRoaXMubmV3RmlsdGVyKCdpc05nb2FpRG9uVmknLCBPcGVyYXRvci5lcXVhbCwgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgRW51bUNhbkJvLlRST05HX0RPTl9WSTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh0aGlzLm5ld0ZpbHRlcignaXNOZ29haURvblZpJywgT3BlcmF0b3IuZXF1YWwsIGZhbHNlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsdGVycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAuLi5jb250cm9sLFxuICAgICAgICAgICAgY29sdW1uczogY29sdW1ucyxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChjb250cm9sLmRhdGFUeXBlID09IEVudW1Db250cm9sUGlja2VyVHlwZS5ET0lUQUMgJiYgIXRoaXMubHN0RW50aXR5UGlja2VyQ29sdW1uLnNvbWUoaXRlbSA9PiBpdGVtLmNvZGUgPT0gJ2lkRG9pVGFjJykpIHtcbiAgICAgICAgICAgIHRoaXMubHN0RW50aXR5UGlja2VyQ29sdW1uLnB1c2goXG4gICAgICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnxJDhu5FpIHTDoWMnLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnaWREb2lUYWMnLFxuICAgICAgICAgICAgICAgICAgICBiYXNlU2VydmljZTogdGhpcy5faG9Tb0RvaVRhY1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBmdWxsVGV4dFNlYXJjaDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgaXNBcnJheUZpZWxkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzIwMHB4JyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3VsdC5maWVsZFBsdXMpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICByZXN1bHQuZmllbGRQbHVzXG4gICAgICAgICAgICAgICAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKHEpID0+IHEudHJpbSgpKVxuICAgICAgICAgICAgICAgICAgICAuaW5kZXhPZignaWROZ2FjaFZpZW5DaHVjJykgPT0gLTFcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5maWVsZFBsdXMgKz0gJyxpZE5nYWNoVmllbkNodWMnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LmZpZWxkUGx1cyA9ICdpZE5nYWNoVmllbkNodWMnO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5maWVsZFBsdXMgKz0gJyxuZ2F5U2luaCxuZ2F5U2luaDIsY2h1Y0RhbmhzLGlkSG9jSGFtLGlkSG9jVmksZGllblRob2FpRGlEb25nLGNvZGUnO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUZW5Eb25WaShkYXRhU291cmNlOiBhbnlbXSkge1xuICAgICAgICBpZiAoIWRhdGFTb3VyY2U/Lmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgLy8gQuG7lSBzdW5nIG3hu5l0IHPhu5EgdGjDtG5nIHRpbiDEkeG7gyBoaeG7g24gdGjhu4sgbGFiZWwgdHLDqm4gYXV0b2NvbXBsZXRlIHBpY2tlciBk4bqhbmcgZHJvcGRvd25cbiAgICAgICAgICAgIGlmIChpdGVtLmRvblZpQ2h1Y1Z1cyAmJiBpdGVtLmRvblZpQ2h1Y1Z1cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IGl0ZW1Eb25WaUNoaW5oID0gaXRlbS5kb25WaUNodWNWdXMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgKHEpID0+IHEuaXNEb25WaUNoaW5oXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW1Eb25WaUNoaW5oKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1Eb25WaUNoaW5oID0gaXRlbS5kb25WaUNodWNWdXNbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGl0ZW0udGVuRG9uVmkgPSBpdGVtRG9uVmlDaGluaC5jaHVjVnVcbiAgICAgICAgICAgICAgICAgICAgPyBgJHtpdGVtRG9uVmlDaGluaC5jaHVjVnV9ICR7aXRlbURvblZpQ2hpbmguZG9uVml9YFxuICAgICAgICAgICAgICAgICAgICA6IGl0ZW1Eb25WaUNoaW5oLmRvblZpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0RGF0YVBsdXMoZGF0YVNvdXJjZTogYW55KSB7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBkYXRhU291cmNlKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS5jaHVjRGFuaHMpIHtcbiAgICAgICAgICAgICAgICBpdGVtLnN0ckNodWNEYW5ocyA9IGl0ZW0uY2h1Y0RhbmhzLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVtLnN0ckNodWNEYW5ocyA9ICcnO1xuICAgICAgICAgICAgaWYgKGl0ZW0uY2h1Y0RhbmhzKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpIG9mIGl0ZW0uY2h1Y0RhbmhzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpLmNodWNEYW5oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnN0ckNodWNEYW5ocyArPSBpLmNodWNEYW5oO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaXRlbS5zdHJEb25WaUNodWNWdXMgPSAnJztcbiAgICAgICAgICAgIGlmIChpdGVtLmRvblZpQ2h1Y1Z1cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpIG9mIGl0ZW0uZG9uVmlDaHVjVnVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpLmNodWNWdSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5zdHJEb25WaUNodWNWdXMgKz0gYDxwPiR7aS5jaHVjVnV9IC0gJHtpLmRvblZpfTwvcD5gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5zdHJEb25WaUNodWNWdXMgKz0gYDxwPiR7aS5kb25WaX08L3A+YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXRlbS5uZ2F5U2luaCAmJiBpdGVtLm5nYXlTaW5oMikge1xuICAgICAgICAgICAgICAgIGl0ZW0ubmdheVNpbmggPSBuZXcgRGF0ZShpdGVtLm5nYXlTaW5oMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVtLmhvY0hhbUhvY1ZpXG4gICAgICAgICAgICAgICAgPSBpdGVtLmlkSG9jSGFtICYmIGl0ZW0uaWRIb2NWaVxuICAgICAgICAgICAgICAgICAgICA/IGAke2l0ZW0uaWRIb2NIYW19LiAke2l0ZW0uaWRIb2NWaX1gXG4gICAgICAgICAgICAgICAgICAgIDogaXRlbS5pZEhvY0hhbSB8fCBpdGVtLmlkSG9jVmk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVDYW5Cb1RvR2lhbmdWaWVuKG1vZGVsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KFxuICAgICAgICAgICAgYCR7dGhpcy5zZXJ2aWNlVXJpfS9VcGRhdGVDYW5Cb1RvR2lhbmdWaWVuYCxcbiAgICAgICAgICAgIG1vZGVsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgY3JlYXRlR2lhbmdWaWVuRG9pVGFjKG1vZGVsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KFxuICAgICAgICAgICAgYCR7dGhpcy5zZXJ2aWNlVXJpfS9DcmVhdGVHaWFuZ1ZpZW5Eb2lUYWNgLFxuICAgICAgICAgICAgbW9kZWxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXREb25WaVBoYW5DYXBCeUlkcyhtb2RlbCwgaXNVc2VyID0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXREb25WaVBoYW5DYXBCeUlkcy8ke2lzVXNlcn1gLCBtb2RlbCk7XG4gICAgfVxuXG4gICAgdXBkYXRlR2lhbmdWaWVuTm9pQm8obW9kZWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFB1dChcbiAgICAgICAgICAgIGAke3RoaXMuc2VydmljZVVyaX0vVXBkYXRlR2lhbmdWaWVuTm9pQm8vJHttb2RlbC5pZH1gLFxuICAgICAgICAgICAgbW9kZWxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICB1cGRhdGVHaWFuZ1ZpZW5Eb2lUYWMobW9kZWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFB1dChcbiAgICAgICAgICAgIGAke3RoaXMuc2VydmljZVVyaX0vVXBkYXRlR2lhbmdWaWVuRG9pVGFjLyR7bW9kZWwuaWR9YCxcbiAgICAgICAgICAgIG1vZGVsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0THlMaWNoS2hvYUhvY0NhbkJvKGlkKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0THlMaWNoS2hvYUhvY0NhbkJvLyR7aWR9YDtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZGVmYXVsdEdldCh1cmwpO1xuICAgIH1cblxuICAgIGFzeW5jIEdldERvblZpQ2h1Y1Z1KGlkQ2FuQm8pIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXREb25WaUNodWNWdS8ke2lkQ2FuQm99YDtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZGVmYXVsdEdldCh1cmwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2VuZXJhdGVMaXN0RW50aXR5Q29sdW1uRGVmYXVsdCgpIHtcbiAgICAgICAgY29uc3QgX21hc3RlckRhdGFTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KE1hc3RlckRhdGFTZXJ2aWNlKTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnTcOjJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnY29kZScsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLFxuICAgICAgICAgICAgICAgIGZ1bGxUZXh0U2VhcmNoOiB0cnVlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnODBweCcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnSOG7jWMgaMOgbSwgaOG7jWMgduG7iycsXG4gICAgICAgICAgICAgICAgY29kZTogJ2hvY0hhbUhvY1ZpJyxcbiAgICAgICAgICAgICAgICBub3RJbkZpZWxkczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sXG4gICAgICAgICAgICAgICAgYWxsb3dGaWx0ZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNvcnQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTUwcHgnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0jhu40gdsOgIHTDqm4nLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdob1ZhVGVuJyxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sXG4gICAgICAgICAgICAgICAgZnVsbFRleHRTZWFyY2g6IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcyMDBweCcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnTmfDoHkgc2luaCcsXG4gICAgICAgICAgICAgICAgY29kZTogJ25nYXlTaW5oJyxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogRGF0YVR5cGUuZGF0ZSxcbiAgICAgICAgICAgICAgICBpc1NlYXJjaGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxMjBweCcsXG4gICAgICAgICAgICAgICAgbm90SW5GaWVsZHM6IHRydWUsXG4gICAgICAgICAgICAgICAgdGV4dEFsaWduOiAxLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0dp4bubaSB0w61uaCcsXG4gICAgICAgICAgICAgICAgY29kZTogJ2dpb2lUaW5oJyxcbiAgICAgICAgICAgICAgICBiYXNlU2VydmljZTogX21hc3RlckRhdGFTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIGdyb3VwQ29kZTogJ0dJT0lfVElOSCcsXG4gICAgICAgICAgICAgICAgdmFsdWVGaWVsZDogJ2NvZGUnLFxuICAgICAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogJ25hbWUnLFxuICAgICAgICAgICAgICAgIGlzU2VhcmNoYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzkwcHgnLFxuICAgICAgICAgICAgICAgIHRleHRBbGlnbjogMSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdDaOG7qWMgZGFuaCcsXG4gICAgICAgICAgICAgICAgY29kZTogJ3N0ckNodWNEYW5ocycsXG4gICAgICAgICAgICAgICAgbm90SW5GaWVsZHM6IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxNTBweCcsXG4gICAgICAgICAgICAgICAgYWxsb3dGaWx0ZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNvcnQ6IGZhbHNlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0No4bupYyB24bulIC0gxJDGoW4gduG7iycsXG4gICAgICAgICAgICAgICAgY29kZTogJ3N0ckRvblZpQ2h1Y1Z1cycsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdodG1sJyxcbiAgICAgICAgICAgICAgICBub3RJbkZpZWxkczogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzIyMHB4JyxcbiAgICAgICAgICAgICAgICBzb3J0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAvLyB0ZW1wbGF0ZUZpbHRlcjogdGVtcGxhdGUuZmlsdGVyRG9uVmlSZWYsXG4gICAgICAgICAgICAgICAgYWxsb3dGaWx0ZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGZpZWxkRmlsdGVyOiAnaWREb25WaXMnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0VtYWlsJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnZW1haWwnLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5lcXVhbCxcbiAgICAgICAgICAgICAgICBpc092ZXJyaWRlRmlsdGVyOiB0cnVlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTcwcHgnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ8SQ4buRaSB0w6FjJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnaWREb2lUYWMnLFxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzQXJyYXlGaWVsZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBiYXNlU2VydmljZTogdGhpcy5faG9Tb0RvaVRhY1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgZnVsbFRleHRTZWFyY2g6IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcyMDBweCcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VGhvbmdLZUNhbkJvKHBsdXNVcmw6IHN0cmluZykge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9LyR7dGhpcy5hcGlHZXREYXRhfS8ke3BsdXNVcmx9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2VuZXJhdGVMaXN0RW50aXR5Q29sdW1uVjEoKSB7XG4gICAgICAgIGNvbnN0IF9tYXN0ZXJEYXRhU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChNYXN0ZXJEYXRhU2VydmljZSk7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ03DoycsXG4gICAgICAgICAgICAgICAgY29kZTogJ2NvZGUnLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuY29udGFpbixcbiAgICAgICAgICAgICAgICBmdWxsVGV4dFNlYXJjaDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzgwcHgnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0jhu40gdsOgIHTDqm4nLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdob1ZhVGVuJyxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sXG4gICAgICAgICAgICAgICAgZnVsbFRleHRTZWFyY2g6IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcyMDBweCcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnTmfDoHkgc2luaCcsXG4gICAgICAgICAgICAgICAgY29kZTogJ25nYXlTaW5oJyxcbiAgICAgICAgICAgICAgICBpc1NlYXJjaGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6IERhdGFUeXBlLmRhdGUsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxMjBweCcsXG4gICAgICAgICAgICAgICAgbm90SW5GaWVsZHM6IHRydWUsXG4gICAgICAgICAgICAgICAgdGV4dEFsaWduOiAxLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0dp4bubaSB0w61uaCcsXG4gICAgICAgICAgICAgICAgY29kZTogJ2dpb2lUaW5oJyxcbiAgICAgICAgICAgICAgICBiYXNlU2VydmljZTogX21hc3RlckRhdGFTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIGdyb3VwQ29kZTogJ0dJT0lfVElOSCcsXG4gICAgICAgICAgICAgICAgdmFsdWVGaWVsZDogJ2NvZGUnLFxuICAgICAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogJ25hbWUnLFxuICAgICAgICAgICAgICAgIGlzU2VhcmNoYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzkwcHgnLFxuICAgICAgICAgICAgICAgIHRleHRBbGlnbjogMSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdDaOG7qWMgduG7pSAtIMSQxqFuIHbhu4snLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdzdHJEb25WaUNodWNWdXMnLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnaHRtbCcsXG4gICAgICAgICAgICAgICAgbm90SW5GaWVsZHM6IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcyMjBweCcsXG4gICAgICAgICAgICAgICAgc29ydDogZmFsc2UsXG4gICAgICAgICAgICAgICAgLy8gdGVtcGxhdGVGaWx0ZXI6IHRlbXBsYXRlLmZpbHRlckRvblZpUmVmLFxuICAgICAgICAgICAgICAgIGFsbG93RmlsdGVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBmaWVsZEZpbHRlcjogJ2lkRG9uVmlzJyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdFbWFpbCcsXG4gICAgICAgICAgICAgICAgY29kZTogJ2VtYWlsJyxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuZXF1YWwsXG4gICAgICAgICAgICAgICAgaXNPdmVycmlkZUZpbHRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzE3MHB4JyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgZ2V0UXVhbkx5Q2FwVHJlbkJ5VXNlcklkKGlkVXNlcjogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQoYCR7dGhpcy5zZXJ2aWNlVXJpfS9DYW5Cb1F1YW5MeUJ5VXNlcklkLyR7aWRVc2VyfWApO1xuICAgIH1cblxuICAgIGdldERhbmhTYWNoVXNlckNhcFRyZW4oaWRzRG9uVmkpIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXREYW5oU2FjaFVzZXJDYXBUcmVuYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QodXJsLCBpZHNEb25WaSk7XG4gICAgfVxuXG5cbn1cblxuIl19
|
|
692
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FuYm8taG9zby5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL3NlcnZpY2VzL2NhbmJvLWhvc28uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoSixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUM1RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFD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O0lBRUQsc0JBQXNCLENBQUMsUUFBUTtRQUMzQixNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLHlCQUF5QixDQUFDO1FBQ3hELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDM0MsQ0FBQzs7OztZQXR2QkosVUFBVSxTQUFDO2dCQUNSLFVBQVUsRUFBRSxNQUFNO2FBQ3JCOzs7WUFsQlEsVUFBVTtZQUNFLFFBQVE7WUFZcEIsbUJBQW1CO1lBQ25CLFdBQVc7WUFMWCw2QkFBNkI7WUFKN0Isa0JBQWtCO1lBTWxCLGlCQUFpQjtZQURqQixXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgRW51bUNvbnRyb2xQaWNrZXJUeXBlIH0gZnJvbSAnLi4vY2xhc3Nlcy9jb25zdGFudHMnO1xuaW1wb3J0IHsgQXV0b0NvbXBsZXRlUGlja2VyQ29udHJvbFNjaGVtYSwgQ29sdW1uU2NoZW1hQmFzZSwgRGF0YVR5cGUsIEVudGl0eVBpY2tlckNvbHVtbiwgTW9kZWxTY2hlbWEsIE9wZXJhdG9yIH0gZnJvbSAnLi4vY2xhc3Nlcy9mb3JtLXNjaGVtYSc7XG5pbXBvcnQgeyBDb0NhdVRvQ2h1Y1NlcnZpY2UgfSBmcm9tICcuLi9jb21wb25lbnRzL2NvY2F1dG9jaHVjL3NlcnZpY2VzL2NvY2F1dG9jaHVjLnNlcnZpY2UnO1xuaW1wb3J0IHsgRW51bUNhbkJvIH0gZnJvbSAnLi4vZW51bXMvY29tbW9uJztcbmltcG9ydCB7IEZpbHRlciB9IGZyb20gJy4uL21vZGVscy9ncmlkLWluZm8nO1xuaW1wb3J0IHsgQmFzZVNlcnZpY2UgfSBmcm9tICcuL2Jhc2Uuc2VydmljZSc7XG5pbXBvcnQgeyBDYW5Cb19Ib1NvX0NvQ2F1VG9DaHVjU2VydmljZSB9IGZyb20gJy4vY2FuYm8taG9zby1jb2NhdXRvY2h1Yy5zZXJ2aWNlJztcbmltcG9ydCB7IENydWRTZXJ2aWNlIH0gZnJvbSAnLi9jcnVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgSG9Tb0RvaVRhY1NlcnZpY2UgfSBmcm9tICcuL2hvc29kb2l0YWMuc2VydmljZSc7XG5pbXBvcnQgeyBNYXN0ZXJEYXRhU2VydmljZSB9IGZyb20gJy4vbWFzdGVyLWRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBNb2R1bGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuL3VzZXIuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ2FuQm9Ib1NvU2VydmljZSBleHRlbmRzIEJhc2VTZXJ2aWNlIHtcbiAgICBlbnZpcm9ubWVudDogYW55O1xuICAgIHZlcnNpb246IGFueTtcbiAgICBsc3RFbnRpdHlQaWNrZXJDb2x1bW46IEVudGl0eVBpY2tlckNvbHVtbltdO1xuICAgIGRlZmF1bHRFbnRpdHlDb2x1bW5EaWN0ID0ge1xuICAgICAgICB2MTogdGhpcy5nZW5lcmF0ZUxpc3RFbnRpdHlDb2x1bW5WMSgpXG4gICAgfTtcbiAgICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlO1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBodHRwOiBIdHRwQ2xpZW50LCBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIF9tb2R1bGVDb25maWdTZXJ2aWNlOiBNb2R1bGVDb25maWdTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF91c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2NhbkJvX0hvU29fQ29DYXVUb0NodWNTZXJ2aWNlOiBDYW5Cb19Ib1NvX0NvQ2F1VG9DaHVjU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfY29DYXVUb0NodWNTZXJ2aWNlOiBDb0NhdVRvQ2h1Y1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2hvU29Eb2lUYWNTZXJ2aWNlOiBIb1NvRG9pVGFjU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfY3J1ZFNlcnZpY2U6IENydWRTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGh0dHAsIGluamVjdG9yLCBgJHtfbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5hcGlEb21haW4uY2FuYm9FbmRwb2ludH0vJHtfbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5hcGlWZXJzaW9ufS9DYW5Cb19Ib1NvYCk7XG4gICAgICAgIHRoaXMuZW5kUG9pbnQgPSBfbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5hcGlEb21haW4uY2FuYm9FbmRwb2ludDtcbiAgICAgICAgdGhpcy5lbnZpcm9ubWVudCA9IF9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50O1xuICAgICAgICB0aGlzLmVuZFBvaW50ID0gdGhpcy5lbnZpcm9ubWVudC5hcGlEb21haW4uY2FuYm9FbmRwb2ludDtcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gdGhpcy5lbnZpcm9ubWVudC5jYXVIaW5oTmdoaWVwVnU/LnZlcnNpb25Db2x1bW5QaWNrZXJDYW5CbztcbiAgICAgICAgaWYgKHRoaXMudmVyc2lvbikge1xuICAgICAgICAgICAgdGhpcy5sc3RFbnRpdHlQaWNrZXJDb2x1bW4gPSB0aGlzLmRlZmF1bHRFbnRpdHlDb2x1bW5EaWN0W2B2JHt0aGlzLnZlcnNpb259YF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmxzdEVudGl0eVBpY2tlckNvbHVtbikge1xuICAgICAgICAgICAgdGhpcy5sc3RFbnRpdHlQaWNrZXJDb2x1bW4gPSB0aGlzLmdlbmVyYXRlTGlzdEVudGl0eUNvbHVtbkRlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICAgIH1cblxuICAgIGdldElkc0RvblZpSGllblRhaUNhbkJvKGlkQ2FuQm86IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KGAke3RoaXMuc2VydmljZVVyaX0vR2V0SWRzRG9uVmlIaWVuVGFpLyR7aWRDYW5Cb31gKTtcbiAgICB9XG5cbiAgICBnZXRDYW5Cb0NhcFRyZW4odXNlcklkTGFzdHM6IHN0cmluZ1tdKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vR2V0Q2FuQm9DYXBUcmVuYCwge1xuICAgICAgICAgICAgbGlzdEd1aWRWYWx1ZTogdXNlcklkTGFzdHNcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0TGlzdFRyZWVEb25WaVF1YW5MeUJ5VXNlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldChgJHt0aGlzLnNlcnZpY2VVcml9L0dldExpc3RUcmVlRG9uVmlRdWFuTHlCeVVzZXJgKTtcbiAgICB9XG5cbiAgICBnZXRNb2RlbFNjaGVtYXMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnY29kZScsXG4gICAgICAgICAgICAgICAgbmFtZTogJ03DoycsXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6ICdNw6MnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnTcOjJyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IE1vZGVsU2NoZW1hKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2lkJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnaWQnLFxuICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiAnaWQnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnaWQnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnaWRIb2NWaWVuJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnaWQnLFxuICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiAnaWQnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnaWQnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnaG9WYVRlbicsXG4gICAgICAgICAgICAgICAgbmFtZTogJ0jhu40gdsOgIHTDqm4nLFxuICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiAnSOG7jSB2w6AgdMOqbicsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdI4buNIHbDoCB0w6puJyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IE1vZGVsU2NoZW1hKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ25nYXlTaW5oJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnTmfDoHkgc2luaCcsXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6ICdOZ8OgeSBzaW5oJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ05nw6B5IHNpbmgnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnZGllblRob2FpRGlEb25nJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnU+G7kSDEkWnhu4duIHRob+G6oWknLFxuICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiAnU+G7kSDEkWnhu4duIHRob+G6oWknLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnU+G7kSDEkWnhu4duIHRob+G6oWknLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnZW1haWwnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdFbWFpbCcsXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6ICdFbWFpbCcsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdFbWFpbCcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdkb25WaUNodWNWdVN0cicsXG4gICAgICAgICAgICAgICAgbmFtZTogJ8SQxqFuIHbhu4sgLSBDaOG7qWMgduG7pScsXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6ICfEkMahbiB24buLIC0gQ2jhu6ljIHbhu6UnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnxJDGoW4gduG7iyAtIENo4bupYyB24bulJyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgZ2V0Q29sdW1uU2NoZW1hQmFzZSgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2NvZGUnLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTUwcHgnXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2lkSG9jVmllbicsXG4gICAgICAgICAgICAgICAgaW5jbHVkZVNlbGVjdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgdmlzaWJsZTogZmFsc2VcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnaG9WYVRlbicsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcyMDBweCdcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnbmdheVNpbmgnLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnZGF0ZScsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxMTBweCdcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnZGllblRob2FpRGlEb25nJyxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzExMHB4J1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdlbWFpbCcsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmVxdWFsLFxuICAgICAgICAgICAgICAgIGlzT3ZlcnJpZGVGaWx0ZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxODBweCdcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnZG9uVmlDaHVjVnVTdHInLFxuICAgICAgICAgICAgICAgIGFsbG93RmlsdGVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzb3J0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBpbmNsdWRlU2VsZWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzI1MHB4J1xuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcbiAgICB9XG4gICAgZ2V0RGF0YUV4cG9ydDJDKGdyaWRJbmZvKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0U2lnbmFsUihcbiAgICAgICAgICAgIGAke3RoaXMuc2VydmljZVVyaX0vR2V0RGF0YUV4cG9ydDJDYCxcbiAgICAgICAgICAgIGdyaWRJbmZvXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaW5Tb1lldUx5TGljaChpZENhbkJvKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vSW5Tb1lldUx5TGljaD9pZENhbkJvPSR7aWRDYW5Cb31gO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wb3N0KHVybCwgaWRDYW5Cbywge1xuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYicsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5hcHBlbmQoXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZScsXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgICAgICApLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbkx5TGljaEJvaUhvYW4oaWRDYW5Cbykge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0luTHlMaWNoQm9pSG9hbj9pZENhbkJvPSR7aWRDYW5Cb31gO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wb3N0KHVybCwgaWRDYW5Cbywge1xuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYicsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5hcHBlbmQoXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZScsXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgICAgICApLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbkx5TGljaEJvTmhpZW0oaWRDYW5Cbykge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0luTHlMaWNoQm9OaGllbT9pZENhbkJvPSR7aWRDYW5Cb31gO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wb3N0KHVybCwgaWRDYW5Cbywge1xuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYicsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5hcHBlbmQoXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZScsXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgICAgICApLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0YW9UYWlLaG9hbihpZENhbkJvOiBhbnkpIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9UYW9UYWlLaG9hbi8ke2lkQ2FuQm99YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QodXJsLCB7fSk7XG4gICAgfVxuXG4gICAgZ2V0Q2FuQm9JbmZvKGlkQ2FuQm86IHN0cmluZykge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldENhbkJvSW5mby8ke2lkQ2FuQm99YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xuICAgIH1cblxuICAgIGdldERldGFpbFdpdGhDaHVjRGFuaENodWNWdShpZENhbkJvOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldChcbiAgICAgICAgICAgIGAke3RoaXMuc2VydmljZVVyaX0vR2V0RGV0YWlsV2l0aENodWNEYW5oQ2h1Y1Z1LyR7aWRDYW5Cb31gXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FwIG5oYXQgdHJhbmcgdGhhaSBjYW5ib19ob3NvIHRoZW8gaWQgY2FuQm9cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWRDYW5Cb1xuICAgICAqIEBwYXJhbSB7YW55fSBpZFRyYW5nVGhhaVxuICAgICAqIEByZXR1cm4ge1Byb21pc2U8UmVzcG9uc2VSZXN1bHQ+fVxuICAgICAqL1xuICAgIHVwZGF0ZVRyYW5nVGhhaUNhbkJvSG9TbyhpZENhbkJvOiBzdHJpbmcsIGlkVHJhbmdUaGFpOiBhbnkpIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9VcGRhdGVUcmFuZ1RoYWlDYW5Cb0hvU28/aWRDYW5Cbz0ke2lkQ2FuQm99JiZpZFRyYW5nVGhhaT0ke2lkVHJhbmdUaGFpfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwge30pO1xuICAgIH1cblxuICAgIEdldFRob25nVGluQ2FuQm9JZChpZENhbkJvOiBhbnkpIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRUaG9uZ1RpbkNhbkJvSWQvJHtpZENhbkJvfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcbiAgICB9XG5cbiAgICBjaGVja0NhbkJvSW5QaG9uZ0RvaU5nb2FpKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KGAke3RoaXMuc2VydmljZVVyaX0vQ2hlY2tDYW5Cb0luUGhvbmdEb2lOZ29haWApO1xuICAgIH1cblxuICAgIEdldERhbmhTYWNoQ2FuQm9UaGVvRG9uVmkobHN0SWRPcmdSZXEsIGdyaWRJbmZvKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0RGFuaFNhY2hDYW5Cb1RoZW9Eb25WaS8ke2xzdElkT3JnUmVxfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwgZ3JpZEluZm8pO1xuICAgIH1cblxuICAgIGdldERhdGFFeHBvcnRLZXRRdWFEYW5oR2lhKGdyaWRJbmZvKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0RGF0YUV4cG9ydEtldFF1YURhbmhHaWFgO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIGdyaWRJbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBM4bqleSBkYW5oIHPDoWNoIGPDoW4gYuG7mSB2w6AgY+G6pXAgZMaw4bubaSBob+G6t2MgbMOgIG5ow6JuIHZpw6puIG5nxrDhu51pIGTDuW5nIHF14bqjbiBsw70gdHLhu7FjIHRp4bq/cFxuICAgICAqIE7hur91IHRyb25nIGPDuW5nIDEgxJHGoW4gduG7iyB0aMOsIG5nxrDhu51pIGPDsyBjaOG7qWMgduG7pSBj4bqlcCB0csaw4bufbmcgc+G6vSBjw7MgY+G6pXAgZMaw4bubaSBsw6AgdG/DoG4gYuG7mSBuaMOibiB2acOqblxuICAgICAqIEPDsm4gbmfGsOG7nWkgY8OzIGNo4bupYyB24bulIGPhuqVwIHBow7MgdGjDrCBjw7MgY+G6pXAgZMaw4bubaSBsw6AgdG/DoG4gYuG7mSBuaMOibiB2acOqbiB0cuG7qyBj4bqlcCB0csaw4bufbmcsIC4uLlxuICAgICAqIEByZXR1cm4ge1Byb21pc2U8UmVzcG9uc2VSZXN1bHQ+fVxuICAgICAqL1xuICAgIGdldENhbkJvQ2FwRHVvaSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldChgJHt0aGlzLnNlcnZpY2VVcml9L0dldENhbkJvQ2FwRHVvaWApO1xuICAgIH1cblxuICAgIGNoZWNrSXNDYW5Cb1Bob25nVGNjYigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldChgJHt0aGlzLnNlcnZpY2VVcml9L0NoZWNrSXNDYW5Cb1Bob25nVGNjYmApO1xuICAgIH1cblxuICAgIGdldElkc0RvblZpRHVvY1BoZXBRdWFuTHkoaWREb25WaSkge1xuICAgICAgICBsZXQgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRJZHNEb25WaUR1b2NQaGVwUXVhbkx5YDtcbiAgICAgICAgaWYgKGlkRG9uVmkpIHtcbiAgICAgICAgICAgIHVybCArPSBgP2lkRG9uVmk9JHtpZERvblZpfWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xuICAgIH1cblxuICAgIGdldFBoYW1WaURvblZpUXVhbkx5KGlzR2V0VHJlZSA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0UGhhbVZpRG9uVmlRdWFuTHk/aXNHZXRUcmVlPSR7aXNHZXRUcmVlfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcbiAgICB9XG4gICAgZ2V0SWRzRG9uVmlRdWFuTHkoYWxsQ2hpbGQgPSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0SWRzRG9uVmlRdWFuTHk/YWxsQ2hpbGQ9JHthbGxDaGlsZH1gO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0SWRzQ2FuQm9DdW5nRG9uVmkoKSB7XG4gICAgICAgIGNvbnN0IHByb2ZpbGVJbmZvID0gdGhpcy5fdXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICAgICAgbGV0IGlkc0NhbkJvID0gW107XG4gICAgICAgIGlmIChwcm9maWxlSW5mbz8uaWRDYW5Cbykge1xuICAgICAgICAgICAgY29uc3QgY29tbW9uID0gW3RoaXMubmV3RmlsdGVyKCdjb25IaWV1THVjJywgT3BlcmF0b3IuZXF1YWwsIHRydWUpXTtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSBbXG4gICAgICAgICAgICAgICAgLi4uY29tbW9uLFxuICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdpZENhbkJvJywgT3BlcmF0b3IuZXF1YWwsIHByb2ZpbGVJbmZvLmlkQ2FuQm8pLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxldCBpZHNEb25WaUNhbkJvTG9naW4gPSBbXTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2NhbkJvX0hvU29fQ29DYXVUb0NodWNTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmdldEFsbChmaWx0ZXJzKVxuICAgICAgICAgICAgICAgIC50aGVuKChycykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocnMuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWRzRG9uVmlDYW5Cb0xvZ2luID0gcnMuZGF0YS5tYXAoKHgpID0+IHguaWREb25WaSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGlkc0RvblZpQ2FuQm9Mb2dpbi5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGlkc0RvblZpID0gW107XG4gICAgICAgICAgICBjb25zdCBjb0NhdVRvQ2h1Y0ZpbHRlcnMgPSBuZXcgRmlsdGVyKHsgbG9naWM6ICdvcicsIGZpbHRlcnM6IFtdIH0pO1xuICAgICAgICAgICAgaWRzRG9uVmlDYW5Cb0xvZ2luLmZvckVhY2goKGlkRG9uVmkpID0+IHtcbiAgICAgICAgICAgICAgICBjb0NhdVRvQ2h1Y0ZpbHRlcnMuZmlsdGVycy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICdpZER1b25nRGFuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIE9wZXJhdG9yLmNvbnRhaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBgOyR7aWREb25WaX07YFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fY29DYXVUb0NodWNTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmdldEFsbChbY29DYXVUb0NodWNGaWx0ZXJzXSwgJ2lkJylcbiAgICAgICAgICAgICAgICAudGhlbigocnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJzLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkc0RvblZpID0gcnMuZGF0YS5tYXAoKHgpID0+IHguaWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChpZHNEb25WaS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbmV3ZmlsdGVycyA9IFtcbiAgICAgICAgICAgICAgICAuLi5jb21tb24sXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoJ2lkRG9uVmknLCBPcGVyYXRvci5pbiwgaWRzRG9uVmkpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2NhbkJvX0hvU29fQ29DYXVUb0NodWNTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmdldEFsbChuZXdmaWx0ZXJzLCAnaWRDYW5CbycpXG4gICAgICAgICAgICAgICAgLnRoZW4oKHJzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChycy5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZHNDYW5CbyA9IHJzLmRhdGEubWFwKCh4KSA9PiB4LmlkQ2FuQm8pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gaWRzQ2FuQm87XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGdlbmVyYXRlQ29sdW1uRG9uVmkoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdkb25WaUNhcDJzJyxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2RvblZpVGhlb0NhcCcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnS2hvYSB2aeG7h24vIMSRxqFuIHbhu4snKSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzIyMHB4JyxcbiAgICAgICAgICAgICAgICBhbGxvd0ZpbHRlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgc29ydDogZmFsc2UsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2RvblZpQ2FwM3MnLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnZG9uVmlUaGVvQ2FwJyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdC4buZIG3DtG4vIHbEg24gcGjDsm5nIGtob2EnKSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzIyMHB4JyxcbiAgICAgICAgICAgICAgICBhbGxvd0ZpbHRlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgc29ydDogZmFsc2UsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBnZXRJbmZvQ2FuQm9XaXRoRG9uVmlDaHVjVnUobHN0SWRDYW5Cbzogc3RyaW5nW10pIHtcbiAgICAgICAgY29uc3QgZmlsdGVycyA9IFt0aGlzLm5ld0ZpbHRlcignaWQnLCBPcGVyYXRvci5pbiwgbHN0SWRDYW5CbyldO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRhQ3VzdG9tUm91dGUoXG4gICAgICAgICAgICBgRmlsdGVyQnlPcmcvJHt0aGlzLl9jb21tb25TZXJ2aWNlLmd1aWRFbXB0eSgpfWAsXG4gICAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgICAgJycsXG4gICAgICAgICAgICBbXSxcbiAgICAgICAgICAgIDEwMDAwMFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHNldFRob25nVGluRG9uVmlDYW5CbyhpdGVtQ2FuQm86IGFueSwgbHN0Q2FuQm9Eb25WaTogYW55W10pIHtcbiAgICAgICAgY29uc3QgaG9Tb0RvblZpID0gbHN0Q2FuQm9Eb25WaS5maW5kKCh4KSA9PiB4LmlkID09IGl0ZW1DYW5Cby5pZENhbkJvKTtcbiAgICAgICAgaWYgKGhvU29Eb25WaSkge1xuICAgICAgICAgICAgaXRlbUNhbkJvLmRvblZpQ2FwMnMgPSBob1NvRG9uVmkuZG9uVmlDYXAycztcbiAgICAgICAgICAgIGl0ZW1DYW5Cby5kb25WaUNhcDNzID0gaG9Tb0RvblZpLmRvblZpQ2FwM3M7XG4gICAgICAgICAgICBpdGVtQ2FuQm8uZG9uVmlDaHVjVnVzID0gaG9Tb0RvblZpLmRvblZpQ2h1Y1Z1cztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldERvblZpRnVsbHNCeUNhbkJvQXBpKGlkQ2FuQm8pIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXREb25WaUZ1bGxzQnlDYW5Cb0FwaT9pZENhbkJvPSR7aWRDYW5Cb31gO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0SW5mb0FmdGVyR2V0RGF0YShkYXRhU291cmNlKSB7XG4gICAgICAgIGNvbnN0IGd1aWRFbXB0eSA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZEVtcHR5KCk7XG4gICAgICAgIGNvbnN0IGlkc0NhbkJvID0gdGhpcy5fY29tbW9uU2VydmljZS5kaXN0aW5jdEFycmF5KFxuICAgICAgICAgICAgZGF0YVNvdXJjZVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHgpID0+IHguaWRDYW5CbyAhPSBndWlkRW1wdHkpXG4gICAgICAgICAgICAgICAgLm1hcCgoeCkgPT4geC5pZENhbkJvKVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBsc3RDYW5CbyA9IChcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0QWxsKFxuICAgICAgICAgICAgICAgIFt0aGlzLm5ld0ZpbHRlcignaWQnLCBPcGVyYXRvci5pbiwgaWRzQ2FuQm8pXSxcbiAgICAgICAgICAgICAgICAnaWQsY29kZSxob1ZhVGVuLG5nYXlTaW5oLGdpb2lUaW5oJ1xuICAgICAgICAgICAgKVxuICAgICAgICApLmRhdGE7XG4gICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQuaWRDYW5CbyAhPSBndWlkRW1wdHkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYW5CbyA9IGxzdENhbkJvLmZpbmQoKHgpID0+IHguaWQgPT0gZWxlbWVudC5pZENhbkJvKTtcbiAgICAgICAgICAgICAgICBpZiAoY2FuQm8pIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5tYUNhbkJvID0gY2FuQm8uY29kZTtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5ob1ZhVGVuID0gY2FuQm8uaG9WYVRlbjtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC50ZW5DYW5CbyA9IGNhbkJvLmhvVmFUZW47XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQubmdheVNpbmggPSBjYW5Cby5uZ2F5U2luaDtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5naW9pVGluaCA9IGNhbkJvLmdpb2lUaW5oO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0SWRVc2VyQnlEb25WaShsc3RJZERvblZpOiBzdHJpbmdbXSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L2dldElkVXNlckJ5RG9uVmlgLCB7XG4gICAgICAgICAgICBsaXN0R3VpZFZhbHVlOiBsc3RJZERvblZpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRJZENhbkJvQnlEb25WaShsc3RJZERvblZpOiBzdHJpbmdbXSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L2dldElkQ2FuQm9CeURvblZpYCwge1xuICAgICAgICAgICAgbGlzdEd1aWRWYWx1ZTogbHN0SWREb25WaSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0Q29DYXVUb0NodWNSb290RG9uVmlfQnlVc2VySWQodXNlcklkKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0Q29DYXVUb0NodWNSb290RG9uVmlfQnlVc2VySWQvJHt1c2VySWR9YDtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZGVmYXVsdEdldCh1cmwpO1xuICAgIH1cblxuICAgIGFzeW5jIEdldENvQ2F1VG9DaHVjUm9vdERvblZpX0J5TGlzdFVzZXJJZChsc3RVc2VySWQpIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRDb0NhdVRvQ2h1Y1Jvb3REb25WaV9CeUxpc3RVc2VySWRgO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5kZWZhdWx0UG9zdCh1cmwsIGxzdFVzZXJJZCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0Q29DYXVUb0NodWNSb290RG9uVmkoZ3JpZEluZm8pIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRBbGxCeUZpbHRlci9HZXRDb0NhdVRvQ2h1Y1Jvb3REb25WaWA7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRlZmF1bHRQb3N0KHVybCwgZ3JpZEluZm8pO1xuICAgIH1cblxuICAgIGdlbmVyYXRlUGlja2VyQ29udHJvbFNjaGVtYShjb250cm9sOiBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hLCBlbnVtQ2FuQm86IGFueSA9IEVudW1DYW5Cby5UUk9OR19ET05fVkkpIHtcbiAgICAgICAgbGV0IGNvbHVtbnMgPSBbLi4udGhpcy5sc3RFbnRpdHlQaWNrZXJDb2x1bW5dO1xuICAgICAgICBpZihjb250cm9sLmlzT3ZlcnJpZGVDb2x1bW5zKXtcbiAgICAgICAgICAgIGNvbHVtbnMgPSBbLi4uY29udHJvbC5jb2x1bW5zXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb250cm9sLmNvbHVtbnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbHVtbnMucHVzaCguLi5jb250cm9sLmNvbHVtbnMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hKHtcbiAgICAgICAgICAgIGZpZWxkOiAnaWRDYW5CbycsXG4gICAgICAgICAgICBsYWJlbDogJ0PDoW4gYuG7mScsXG4gICAgICAgICAgICB0aXRsZTogJ0No4buNbiBjw6FuIGLhu5knLFxuICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgICAgICAgYmFzZVNlcnZpY2U6IHRoaXMsXG4gICAgICAgICAgICBwbHVzVXJsOiAnV2l0aENodWNEYW5oQ2h1Y1Z1JyxcbiAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogJ2hvVmFUZW4nLFxuICAgICAgICAgICAgZmllbGRQbHVzOiAnY29kZScsXG4gICAgICAgICAgICBmaWVsZFNlYXJjaFRleHQ6IFsnZW1haWwnLCAnY29kZSddLFxuICAgICAgICAgICAgZnVuY0dldExhYmVsOiAoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBpdGVtLmhvVmFUZW47XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uY29kZSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBgJHtpdGVtLmNvZGV9IC0gJHtyZXN1bHR9IGA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpdGVtLnRlbkRvblZpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBgLSAke2l0ZW0udGVuRG9uVml9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgIGFmdGVyR2V0RGF0YURyb3Bkb3duOiAoZGF0YVNvdXJjZSwgZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0VGVuRG9uVmkoZGF0YVNvdXJjZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWZ0ZXJHZXREYXRhUGlja2VkOiBhc3luYyAoZGF0YVNvdXJjZSwgZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0RGF0YVBsdXMoZGF0YVNvdXJjZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWZ0ZXJHZXREYXRhVW5QaWNrZWQ6IGFzeW5jIChkYXRhU291cmNlLCBlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXREYXRhUGx1cyhkYXRhU291cmNlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWZhdWx0RmlsdGVyczogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbC5pc0NhY2hpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRoaXMubmV3RmlsdGVyKCdpc0NhY2hpbmcnLCBPcGVyYXRvci5lcXVhbCwgZmFsc2UpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3dpdGNoIChlbnVtQ2FuQm8pIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBFbnVtQ2FuQm8uTkdPQUlfRE9OX1ZJOlxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRoaXMubmV3RmlsdGVyKCdpc05nb2FpRG9uVmknLCBPcGVyYXRvci5lcXVhbCwgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgRW51bUNhbkJvLlRST05HX0RPTl9WSTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh0aGlzLm5ld0ZpbHRlcignaXNOZ29haURvblZpJywgT3BlcmF0b3IuZXF1YWwsIGZhbHNlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsdGVycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAuLi5jb250cm9sLFxuICAgICAgICAgICAgY29sdW1uczogY29sdW1ucywgICAgICAgICAgICBcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChjb250cm9sLmRhdGFUeXBlID09IEVudW1Db250cm9sUGlja2VyVHlwZS5ET0lUQUMgJiYgIXRoaXMubHN0RW50aXR5UGlja2VyQ29sdW1uLnNvbWUoaXRlbSA9PiBpdGVtLmNvZGUgPT0gJ2lkRG9pVGFjJykpIHtcbiAgICAgICAgICAgIHRoaXMubHN0RW50aXR5UGlja2VyQ29sdW1uLnB1c2goXG4gICAgICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnxJDhu5FpIHTDoWMnLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnaWREb2lUYWMnLFxuICAgICAgICAgICAgICAgICAgICBiYXNlU2VydmljZTogdGhpcy5faG9Tb0RvaVRhY1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBmdWxsVGV4dFNlYXJjaDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgaXNBcnJheUZpZWxkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzIwMHB4JyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3VsdC5maWVsZFBsdXMpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICByZXN1bHQuZmllbGRQbHVzXG4gICAgICAgICAgICAgICAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKHEpID0+IHEudHJpbSgpKVxuICAgICAgICAgICAgICAgICAgICAuaW5kZXhPZignaWROZ2FjaFZpZW5DaHVjJykgPT0gLTFcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5maWVsZFBsdXMgKz0gJyxpZE5nYWNoVmllbkNodWMnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LmZpZWxkUGx1cyA9ICdpZE5nYWNoVmllbkNodWMsbmdheVNpbmgsbmdheVNpbmgyLGNodWNEYW5ocyxpZEhvY0hhbSxpZEhvY1ZpLGRpZW5UaG9haURpRG9uZyxjb2RlJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VGVuRG9uVmkoZGF0YVNvdXJjZTogYW55W10pIHtcbiAgICAgICAgaWYgKCFkYXRhU291cmNlPy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGRhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgIC8vIELhu5Ugc3VuZyBt4buZdCBz4buRIHRow7RuZyB0aW4gxJHhu4MgaGnhu4NuIHRo4buLIGxhYmVsIHRyw6puIGF1dG9jb21wbGV0ZSBwaWNrZXIgZOG6oW5nIGRyb3Bkb3duXG4gICAgICAgICAgICBpZiAoaXRlbS5kb25WaUNodWNWdXMgJiYgaXRlbS5kb25WaUNodWNWdXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGxldCBpdGVtRG9uVmlDaGluaCA9IGl0ZW0uZG9uVmlDaHVjVnVzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIChxKSA9PiBxLmlzRG9uVmlDaGluaFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKCFpdGVtRG9uVmlDaGluaCkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtRG9uVmlDaGluaCA9IGl0ZW0uZG9uVmlDaHVjVnVzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpdGVtLnRlbkRvblZpID0gaXRlbURvblZpQ2hpbmguY2h1Y1Z1XG4gICAgICAgICAgICAgICAgICAgID8gYCR7aXRlbURvblZpQ2hpbmguY2h1Y1Z1fSAke2l0ZW1Eb25WaUNoaW5oLmRvblZpfWBcbiAgICAgICAgICAgICAgICAgICAgOiBpdGVtRG9uVmlDaGluaC5kb25WaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGdldERhdGFQbHVzKGRhdGFTb3VyY2U6IGFueSkge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgaWYgKGl0ZW0uY2h1Y0RhbmhzKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5zdHJDaHVjRGFuaHMgPSBpdGVtLmNodWNEYW5ocy50b1N0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaXRlbS5zdHJDaHVjRGFuaHMgPSAnJztcbiAgICAgICAgICAgIGlmIChpdGVtLmNodWNEYW5ocykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaSBvZiBpdGVtLmNodWNEYW5ocykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaS5jaHVjRGFuaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5zdHJDaHVjRGFuaHMgKz0gaS5jaHVjRGFuaDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZW0uc3RyRG9uVmlDaHVjVnVzID0gJyc7XG4gICAgICAgICAgICBpZiAoaXRlbS5kb25WaUNodWNWdXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaSBvZiBpdGVtLmRvblZpQ2h1Y1Z1cykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaS5jaHVjVnUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc3RyRG9uVmlDaHVjVnVzICs9IGA8cD4ke2kuY2h1Y1Z1fSAtICR7aS5kb25WaX08L3A+YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc3RyRG9uVmlDaHVjVnVzICs9IGA8cD4ke2kuZG9uVml9PC9wPmA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWl0ZW0ubmdheVNpbmggJiYgaXRlbS5uZ2F5U2luaDIpIHtcbiAgICAgICAgICAgICAgICBpdGVtLm5nYXlTaW5oID0gbmV3IERhdGUoaXRlbS5uZ2F5U2luaDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaXRlbS5ob2NIYW1Ib2NWaVxuICAgICAgICAgICAgICAgID0gaXRlbS5pZEhvY0hhbSAmJiBpdGVtLmlkSG9jVmlcbiAgICAgICAgICAgICAgICAgICAgPyBgJHtpdGVtLmlkSG9jSGFtfS4gJHtpdGVtLmlkSG9jVml9YFxuICAgICAgICAgICAgICAgICAgICA6IGl0ZW0uaWRIb2NIYW0gfHwgaXRlbS5pZEhvY1ZpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlQ2FuQm9Ub0dpYW5nVmllbihtb2RlbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChcbiAgICAgICAgICAgIGAke3RoaXMuc2VydmljZVVyaX0vVXBkYXRlQ2FuQm9Ub0dpYW5nVmllbmAsXG4gICAgICAgICAgICBtb2RlbFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGNyZWF0ZUdpYW5nVmllbkRvaVRhYyhtb2RlbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChcbiAgICAgICAgICAgIGAke3RoaXMuc2VydmljZVVyaX0vQ3JlYXRlR2lhbmdWaWVuRG9pVGFjYCxcbiAgICAgICAgICAgIG1vZGVsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0RG9uVmlQaGFuQ2FwQnlJZHMobW9kZWwsIGlzVXNlciA9IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vR2V0RG9uVmlQaGFuQ2FwQnlJZHMvJHtpc1VzZXJ9YCwgbW9kZWwpO1xuICAgIH1cblxuICAgIHVwZGF0ZUdpYW5nVmllbk5vaUJvKG1vZGVsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQdXQoXG4gICAgICAgICAgICBgJHt0aGlzLnNlcnZpY2VVcml9L1VwZGF0ZUdpYW5nVmllbk5vaUJvLyR7bW9kZWwuaWR9YCxcbiAgICAgICAgICAgIG1vZGVsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdXBkYXRlR2lhbmdWaWVuRG9pVGFjKG1vZGVsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQdXQoXG4gICAgICAgICAgICBgJHt0aGlzLnNlcnZpY2VVcml9L1VwZGF0ZUdpYW5nVmllbkRvaVRhYy8ke21vZGVsLmlkfWAsXG4gICAgICAgICAgICBtb2RlbFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGFzeW5jIGdldEx5TGljaEtob2FIb2NDYW5CbyhpZCkge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEx5TGljaEtob2FIb2NDYW5Cby8ke2lkfWA7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRlZmF1bHRHZXQodXJsKTtcbiAgICB9XG5cbiAgICBhc3luYyBHZXREb25WaUNodWNWdShpZENhbkJvKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0RG9uVmlDaHVjVnUvJHtpZENhbkJvfWA7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRlZmF1bHRHZXQodXJsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdlbmVyYXRlTGlzdEVudGl0eUNvbHVtbkRlZmF1bHQoKSB7XG4gICAgICAgIGNvbnN0IF9tYXN0ZXJEYXRhU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChNYXN0ZXJEYXRhU2VydmljZSk7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ03DoycsXG4gICAgICAgICAgICAgICAgY29kZTogJ2NvZGUnLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuY29udGFpbixcbiAgICAgICAgICAgICAgICBmdWxsVGV4dFNlYXJjaDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzgwcHgnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0jhu41jIGjDoG0sIGjhu41jIHbhu4snLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdob2NIYW1Ib2NWaScsXG4gICAgICAgICAgICAgICAgbm90SW5GaWVsZHM6IHRydWUsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLFxuICAgICAgICAgICAgICAgIGFsbG93RmlsdGVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzb3J0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzE1MHB4JyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdI4buNIHbDoCB0w6puJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnaG9WYVRlbicsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLFxuICAgICAgICAgICAgICAgIGZ1bGxUZXh0U2VhcmNoOiB0cnVlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMjAwcHgnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ05nw6B5IHNpbmgnLFxuICAgICAgICAgICAgICAgIGNvZGU6ICduZ2F5U2luaCcsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6IERhdGFUeXBlLmRhdGUsXG4gICAgICAgICAgICAgICAgaXNTZWFyY2hhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTIwcHgnLFxuICAgICAgICAgICAgICAgIG5vdEluRmllbGRzOiB0cnVlLFxuICAgICAgICAgICAgICAgIHRleHRBbGlnbjogMSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdHaeG7m2kgdMOtbmgnLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdnaW9pVGluaCcsXG4gICAgICAgICAgICAgICAgYmFzZVNlcnZpY2U6IF9tYXN0ZXJEYXRhU2VydmljZSxcbiAgICAgICAgICAgICAgICBncm91cENvZGU6ICdHSU9JX1RJTkgnLFxuICAgICAgICAgICAgICAgIHZhbHVlRmllbGQ6ICdjb2RlJyxcbiAgICAgICAgICAgICAgICBkaXNwbGF5RmllbGQ6ICduYW1lJyxcbiAgICAgICAgICAgICAgICBpc1NlYXJjaGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICc5MHB4JyxcbiAgICAgICAgICAgICAgICB0ZXh0QWxpZ246IDEsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnQ2jhu6ljIGRhbmgnLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdzdHJDaHVjRGFuaHMnLFxuICAgICAgICAgICAgICAgIG5vdEluRmllbGRzOiB0cnVlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTUwcHgnLFxuICAgICAgICAgICAgICAgIGFsbG93RmlsdGVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzb3J0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdDaOG7qWMgduG7pSAtIMSQxqFuIHbhu4snLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdzdHJEb25WaUNodWNWdXMnLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnaHRtbCcsXG4gICAgICAgICAgICAgICAgbm90SW5GaWVsZHM6IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcyMjBweCcsXG4gICAgICAgICAgICAgICAgc29ydDogZmFsc2UsXG4gICAgICAgICAgICAgICAgLy8gdGVtcGxhdGVGaWx0ZXI6IHRlbXBsYXRlLmZpbHRlckRvblZpUmVmLFxuICAgICAgICAgICAgICAgIGFsbG93RmlsdGVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBmaWVsZEZpbHRlcjogJ2lkRG9uVmlzJyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdFbWFpbCcsXG4gICAgICAgICAgICAgICAgY29kZTogJ2VtYWlsJyxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuZXF1YWwsXG4gICAgICAgICAgICAgICAgaXNPdmVycmlkZUZpbHRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzE3MHB4JyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICfEkOG7kWkgdMOhYycsXG4gICAgICAgICAgICAgICAgY29kZTogJ2lkRG9pVGFjJyxcbiAgICAgICAgICAgICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc0FycmF5RmllbGQ6IHRydWUsXG4gICAgICAgICAgICAgICAgYmFzZVNlcnZpY2U6IHRoaXMuX2hvU29Eb2lUYWNTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIGZ1bGxUZXh0U2VhcmNoOiB0cnVlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMjAwcHgnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHVibGljIGdldFRob25nS2VDYW5CbyhwbHVzVXJsOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS8ke3RoaXMuYXBpR2V0RGF0YX0vJHtwbHVzVXJsfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdlbmVyYXRlTGlzdEVudGl0eUNvbHVtblYxKCkge1xuICAgICAgICBjb25zdCBfbWFzdGVyRGF0YVNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTWFzdGVyRGF0YVNlcnZpY2UpO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdNw6MnLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdjb2RlJyxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sXG4gICAgICAgICAgICAgICAgZnVsbFRleHRTZWFyY2g6IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICc4MHB4JyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdI4buNIHbDoCB0w6puJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnaG9WYVRlbicsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLFxuICAgICAgICAgICAgICAgIGZ1bGxUZXh0U2VhcmNoOiB0cnVlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMjAwcHgnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ05nw6B5IHNpbmgnLFxuICAgICAgICAgICAgICAgIGNvZGU6ICduZ2F5U2luaCcsXG4gICAgICAgICAgICAgICAgaXNTZWFyY2hhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBEYXRhVHlwZS5kYXRlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTIwcHgnLFxuICAgICAgICAgICAgICAgIG5vdEluRmllbGRzOiB0cnVlLFxuICAgICAgICAgICAgICAgIHRleHRBbGlnbjogMSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdHaeG7m2kgdMOtbmgnLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdnaW9pVGluaCcsXG4gICAgICAgICAgICAgICAgYmFzZVNlcnZpY2U6IF9tYXN0ZXJEYXRhU2VydmljZSxcbiAgICAgICAgICAgICAgICBncm91cENvZGU6ICdHSU9JX1RJTkgnLFxuICAgICAgICAgICAgICAgIHZhbHVlRmllbGQ6ICdjb2RlJyxcbiAgICAgICAgICAgICAgICBkaXNwbGF5RmllbGQ6ICduYW1lJyxcbiAgICAgICAgICAgICAgICBpc1NlYXJjaGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICc5MHB4JyxcbiAgICAgICAgICAgICAgICB0ZXh0QWxpZ246IDEsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnQ2jhu6ljIHbhu6UgLSDEkMahbiB24buLJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnc3RyRG9uVmlDaHVjVnVzJyxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2h0bWwnLFxuICAgICAgICAgICAgICAgIG5vdEluRmllbGRzOiB0cnVlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMjIwcHgnLFxuICAgICAgICAgICAgICAgIHNvcnQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIC8vIHRlbXBsYXRlRmlsdGVyOiB0ZW1wbGF0ZS5maWx0ZXJEb25WaVJlZixcbiAgICAgICAgICAgICAgICBhbGxvd0ZpbHRlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgZmllbGRGaWx0ZXI6ICdpZERvblZpcycsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnRW1haWwnLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdlbWFpbCcsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmVxdWFsLFxuICAgICAgICAgICAgICAgIGlzT3ZlcnJpZGVGaWx0ZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxNzBweCcsXG4gICAgICAgICAgICB9KVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGdldFF1YW5MeUNhcFRyZW5CeVVzZXJJZChpZFVzZXI6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KGAke3RoaXMuc2VydmljZVVyaX0vQ2FuQm9RdWFuTHlCeVVzZXJJZC8ke2lkVXNlcn1gKTtcbiAgICB9XG5cbiAgICBnZXREYW5oU2FjaFVzZXJDYXBUcmVuKGlkc0RvblZpKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0RGFuaFNhY2hVc2VyQ2FwVHJlbmA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwgaWRzRG9uVmkpO1xuICAgIH1cblxuXG59XG5cbiJdfQ==
|