tnx-shared 5.0.45 → 5.0.46

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.
@@ -12,6 +12,7 @@ export declare class AutoCompletePickerComponent extends ComponentBase implement
12
12
  onTouched: Function;
13
13
  control: AutoCompletePickerControlSchema;
14
14
  disabled: boolean;
15
+ parentPath: string;
15
16
  popupSize: PopupSize;
16
17
  onSelect: EventEmitter<any>;
17
18
  onUnSelect: EventEmitter<any>;
@@ -1 +1 @@
1
- {"version":3,"file":"autocomplete-picker.component.d.ts","sourceRoot":"../../../../projects/tnx-shared/src/lib/","sources":["components/autocomplete-picker/autocomplete-picker.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAAc,QAAQ,EAAS,MAAM,EAAU,MAAM,eAAe,CAAC;AACrG,OAAO,EAAE,oBAAoB,EAAqB,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAElE,OAAO,EAAE,+BAA+B,EAAoB,eAAe,EAAE,eAAe,EAAwB,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAIjK,OAAO,EAAE,wBAAwB,EAAE,MAAM,gEAAgE,CAAC;AAC1G,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAE9E,qBAea,2BAA4B,SAAQ,aAAc,YAAW,MAAM,EAAE,oBAAoB;IA8C9F,OAAO,CAAC,iBAAiB;IA5C7B,YAAY,EAAE,QAAQ,CAAC;IACvB,SAAS,EAAE,QAAQ,CAAC;IAEX,OAAO,EAAE,+BAA+B,CAAC;IACzC,QAAQ,EAAE,OAAO,CAAQ;IACzB,SAAS,EAAE,SAAS,CAI1B;IAEO,QAAQ,EAAE,YAAY,CAAC,GAAG,CAAC,CAA2B;IACtD,UAAU,EAAE,YAAY,CAAC,GAAG,CAAC,CAA2B;IACxD,SAAS,EAAE,YAAY,CAAC,GAAG,CAAC,CAA2B;IACvD,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC,CAA2B;IACrD,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,CAA2B;IACpD,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC,CAA2B;IAE/D,OAAO,EAAE,eAAe,CAAyB;IACjD,WAAW,EAAE,uBAAuB,CAAiC;IAErE,KAAK,EAAE,GAAG,CAAC;IACX,eAAe,EAAE,CAAC,KAAK,KAAA,KAAK,EAAE,CAAkB;IAChD,aAAa,EAAE,GAAG,CAAC;IACnB,eAAe,EAAE,GAAG,CAAC;IACrB,mBAAmB,EAAE,GAAG,CAAC;IACzB,UAAU,EAAE,GAAG,EAAE,CAAM;IAEvB,OAAO,EAAE,MAAM,CAAM;IACrB,eAAe,EAAE,MAAM,EAAE,CAAM;IAE/B,OAAO,EAAE,GAAG,EAAE,CAAM;IAEpB,cAAc,UAAS;IACvB,KAAK,UAAS;IAEd,OAAO,SAAM;IACb,QAAQ,UAAS;IACjB,YAAY,UAAS;IAErB,OAAO,CAAC,iBAAiB,CAAC,CAAW;gBAGjC,QAAQ,EAAE,QAAQ,EACV,iBAAiB,EAAE,gBAAgB;IAK/C,QAAQ;IAQR,iBAAiB;IAoBjB,kBAAkB;IA4BlB,wBAAwB;IA6BxB,SAAS;IAiBT,kBAAkB;IAUZ,YAAY;IAQZ,OAAO;IAyCb,OAAO,CAAC,6BAA6B;IAMrC,YAAY;IAOZ,eAAe;IAKf,MAAM,CAAC,KAAK,KAAA;IAKZ,qBAAqB,CAAC,QAAQ,KAAA;IAM9B,sBAAsB,CAAC,QAAQ,KAAA;IAM/B,UAAU;IAkBV,YAAY,CAAC,IAAI,KAAA;IAcjB,cAAc,CAAC,MAAM,KAAA;IAUrB,WAAW,CAAC,GAAG,KAAA;IAOf,UAAU,CAAC,MAAM,KAAA;IAIjB,WAAW,CAAC,GAAG,KAAA;IAmBf,eAAe,CAAC,IAAI,KAAA;IASpB,kBAAkB,CAAC,GAAG,KAAA;IAKtB,oBAAoB,CAAC,GAAG,KAAA;IAKxB,kBAAkB,CAAC,GAAG,KAAA;IAOtB,cAAc;IAId,mBAAmB;IAmBnB,eAAe;IAiBf,eAAe;IAQT,UAAU,CAAC,GAAG,KAAA;IAuEpB,mBAAmB,CAAC,GAAG,KAAA,EAAE,eAAe,EAAE,wBAAwB;IAYlE,OAAO,CAAC,qBAAqB;IAe7B,qBAAqB,CAAC,IAAI,KAAA,GAAG,UAAU;IAYvC,oBAAoB,CAAC,GAAG,EAAE,GAAG;IAsE7B,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IAc1B,gBAAgB,CAAC,EAAE,EAAE,GAAG,GAAG,IAAI;IAI/B,iBAAiB,CAAC,EAAE,EAAE,GAAG,GAAG,IAAI;CAGnC"}
1
+ {"version":3,"file":"autocomplete-picker.component.d.ts","sourceRoot":"../../../../projects/tnx-shared/src/lib/","sources":["components/autocomplete-picker/autocomplete-picker.component.ts"],"names":[],"mappings":"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"}
@@ -149,6 +149,9 @@ export class AutoCompletePickerComponent extends ComponentBase {
149
149
  }
150
150
  getData() {
151
151
  return __awaiter(this, void 0, void 0, function* () {
152
+ if (this.control.modifyInitSearchData) {
153
+ yield this.control.modifyInitSearchData(this);
154
+ }
152
155
  const filters = [];
153
156
  if (this.control.multiple) {
154
157
  if (this.value && this.value.length > 0) {
@@ -562,6 +565,7 @@ AutoCompletePickerComponent.ctorParameters = () => [
562
565
  AutoCompletePickerComponent.propDecorators = {
563
566
  control: [{ type: Input }],
564
567
  disabled: [{ type: Input }],
568
+ parentPath: [{ type: Input }],
565
569
  popupSize: [{ type: Input }],
566
570
  onSelect: [{ type: Output }],
567
571
  onUnSelect: [{ type: Output }],
@@ -570,4 +574,4 @@ AutoCompletePickerComponent.propDecorators = {
570
574
  onBlur: [{ type: Output }],
571
575
  onReady: [{ type: Output }]
572
576
  };
573
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9hdXRvY29tcGxldGUtcGlja2VyL2F1dG9jb21wbGV0ZS1waWNrZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckcsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXZELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLCtCQUErQixFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqSyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFekQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFpQjlFLE1BQU0sT0FBTywyQkFBNEIsU0FBUSxhQUFhO0lBNEMxRCxZQUNJLFFBQWtCLEVBQ1YsaUJBQW1DO1FBRTNDLEtBQUssQ0FBQyxRQUFRLENBQUMs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Q0FBQztJQUVELGlCQUFpQixDQUFDLEVBQU87UUFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDeEIsQ0FBQzs7O1lBaG1CSixTQUFTLFNBQUM7Z0JBQ1AsK0NBQStDO2dCQUMvQyxRQUFRLEVBQUUscUJBQXFCO2dCQUMvQixvOEVBQW1EO2dCQUVuRCxTQUFTLEVBQUU7b0JBQ1A7d0JBQ0ksT0FBTyxFQUFFLGlCQUFpQjt3QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQzt3QkFDMUQsS0FBSyxFQUFFLElBQUk7cUJBQ2Q7b0JBQ0QsdUJBQXVCO29CQUN2QixxQkFBcUI7aUJBQ3hCOzthQUNKOzs7WUE1QjZDLFFBQVE7WUFFN0MsZ0JBQWdCOzs7c0JBZ0NwQixLQUFLO3VCQUNMLEtBQUs7d0JBQ0wsS0FBSzt1QkFNTCxNQUFNO3lCQUNOLE1BQU07d0JBQ04sTUFBTTtzQkFDTixNQUFNO3FCQUNOLE1BQU07c0JBQ04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBJbmplY3RvciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBTZWxlY3RJdGVtIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50QmFzZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvYmFzZS9jb21wb25lbnQtYmFzZSc7XHJcbmltcG9ydCB7IEVudW1Db3JlVmVyc2lvbiB9IGZyb20gJy4uLy4uL2NsYXNzZXMvY29uc3RhbnRzJztcclxuaW1wb3J0IHsgQXV0b0NvbXBsZXRlUGlja2VyQ29udHJvbFNjaGVtYSwgQ29sdW1uU2NoZW1hQmFzZSwgQ3J1ZExpc3RTZXR0aW5nLCBEcm9wZG93bk9wdGlvbnMsIEhlaWdodFR5cGUsIE9wZXJhdG9yLCBQb3B1cFNpemUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcclxuaW1wb3J0IHsgRmlsdGVyIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyaWQtaW5mbyc7XHJcbmltcG9ydCB7IEVudGl0eU1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VudGl0eS1tZXRhZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgYXBwZW5kRGVmYXVsdEZpbHRlciB9IGZyb20gJy4uLy4uL3V0aWxzL2NvbW1vbic7XHJcbmltcG9ydCB7IEVudGl0eVBpY2tlckJveENvbXBvbmVudCB9IGZyb20gJy4uL2VudGl0eS1waWNrZXIvZW50aXR5LXBpY2tlci1ib3gvZW50aXR5LXBpY2tlci1ib3guY29tcG9uZW50JztcclxuaW1wb3J0IHsgQWR2YW5jZURhdGFFbnRpdHlQaWNrZXIgfSBmcm9tICcuLi9lbnRpdHktcGlja2VyL21vZGVsL2FkdmFuY2UtZGF0YSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogY29tcG9uZW50LXNlbGVjdG9yXHJcbiAgICBzZWxlY3RvcjogJ2F1dG9jb21wbGV0ZS1waWNrZXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2F1dG9jb21wbGV0ZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vYXV0b2NvbXBsZXRlLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQXV0b0NvbXBsZXRlUGlja2VyQ29tcG9uZW50KSxcclxuICAgICAgICAgICAgbXVsdGk6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIENvbXBvbmVudENvbnRleHRTZXJ2aWNlLFxyXG4gICAgICAgIEVudGl0eU1ldGFkYXRhU2VydmljZVxyXG4gICAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXV0b0NvbXBsZXRlUGlja2VyQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG5cclxuICAgIG9uQ2hhbmdlQmFzZTogRnVuY3Rpb247XHJcbiAgICBvblRvdWNoZWQ6IEZ1bmN0aW9uO1xyXG5cclxuICAgIEBJbnB1dCgpIGNvbnRyb2w6IEF1dG9Db21wbGV0ZVBpY2tlckNvbnRyb2xTY2hlbWE7XHJcbiAgICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IG51bGw7XHJcbiAgICBASW5wdXQoKSBwb3B1cFNpemU6IFBvcHVwU2l6ZSA9IG5ldyBQb3B1cFNpemUoe1xyXG4gICAgICAgIHdpZHRoOiAxMTAwLFxyXG4gICAgICAgIGhlaWdodDogOTAwLFxyXG4gICAgICAgIG1heGltaXplOiB0cnVlXHJcbiAgICB9KTtcclxuXHJcbiAgICBAT3V0cHV0KCkgb25TZWxlY3Q6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25VblNlbGVjdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvbkNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25Gb2N1czogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvbkJsdXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25SZWFkeTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgICBzZXR0aW5nOiBDcnVkTGlzdFNldHRpbmcgPSBuZXcgQ3J1ZExpc3RTZXR0aW5nKCk7XHJcbiAgICBhZHZhbmNlRGF0YTogQWR2YW5jZURhdGFFbnRpdHlQaWNrZXIgPSBuZXcgQWR2YW5jZURhdGFFbnRpdHlQaWNrZXIoKTtcclxuXHJcbiAgICB2YWx1ZTogYW55O1xyXG4gICAgZnVuY1JldHVyblZhbHVlOiAodmFsdWUpID0+IHt9ID0gdmFsdWUgPT4gdmFsdWU7XHJcbiAgICBzZWxlY3RlZFZhbHVlOiBhbnk7XHJcbiAgICBzZWxlY3RlZFJvd0RhdGE6IGFueTtcclxuICAgIHNlbGVjdGVkVmFsdWVPYmplY3Q6IGFueTtcclxuICAgIGRhdGFTb3VyY2U6IGFueVtdID0gW107XHJcblxyXG4gICAga2V5d29yZDogc3RyaW5nID0gJyc7XHJcbiAgICBmaWVsZFNlYXJjaFRleHQ6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgcmVzdWx0czogYW55W10gPSBbXTtcclxuXHJcbiAgICBzaG93Rm9ybVBpY2tlciA9IGZhbHNlO1xyXG4gICAgZGlydHkgPSBmYWxzZTtcclxuXHJcbiAgICB0b29sdGlwID0gJyc7XHJcbiAgICBoYXNWYWx1ZSA9IGZhbHNlO1xyXG4gICAgaXNGaXJlZFJlYWR5ID0gZmFsc2U7XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRGaWx0ZXJPblNlYXJjaD86IEZ1bmN0aW9uO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgICAgICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihpbmplY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5jb250cm9sLl9jb21wb25lbnQgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdFNldHRpbmcoKTtcclxuXHJcbiAgICAgICAgdGhpcy5idWlsZEZpbHRlcktleXdvcmQoKTtcclxuICAgICAgICB0aGlzLmJ1aWxkU2V0dGluZ0VudGl0eVBpY2tlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldERlZmF1bHRTZXR0aW5nKCkge1xyXG4gICAgICAgIHRoaXMuZmllbGRTZWFyY2hUZXh0ID0gWy4uLnRoaXMuY29udHJvbC5maWVsZFNlYXJjaFRleHRdO1xyXG4gICAgICAgIGlmICghdGhpcy5maWVsZFNlYXJjaFRleHQuc29tZShpdGVtID0+IGl0ZW0gPT0gdGhpcy5jb250cm9sLmRpc3BsYXlGaWVsZCkpIHtcclxuICAgICAgICAgICAgdGhpcy5maWVsZFNlYXJjaFRleHQucHVzaCh0aGlzLmNvbnRyb2wuZGlzcGxheUZpZWxkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wucmV0dXJuVHlwZSA9PSAndmFsdWUnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnVuY1JldHVyblZhbHVlID0gKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1hcChpdGVtID0+IGl0ZW1bdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF07XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZ1bmNSZXR1cm5WYWx1ZSA9IHZhbHVlID0+IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBidWlsZEZpbHRlcktleXdvcmQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZmllbGRTZWFyY2hUZXh0Lmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wuY29yZVZlcnNpb24gPT0gRW51bUNvcmVWZXJzaW9uLlY0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldEZpbHRlck9uU2VhcmNoID0gdmFsdWUgPT4gdGhpcy5uZXdGaWx0ZXJWNCh0aGlzLmNvbnRyb2wuZGlzcGxheUZpZWxkLCBPcGVyYXRvci5jb250YWluLCB2YWx1ZS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0RmlsdGVyT25TZWFyY2ggPSB2YWx1ZSA9PiB0aGlzLm5ld0ZpbHRlcih0aGlzLmNvbnRyb2wuZGlzcGxheUZpZWxkLCBPcGVyYXRvci5jb250YWluLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0RmlsdGVyT25TZWFyY2ggPSB2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgRmlsdGVyKHtcclxuICAgICAgICAgICAgICAgICAgICBsb2dpYzogJ29yJyxcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbXVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmNvcmVWZXJzaW9uID09IEVudW1Db3JlVmVyc2lvbi5WNCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGRTZWFyY2ggb2YgdGhpcy5maWVsZFNlYXJjaFRleHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmZpbHRlcnMucHVzaCh0aGlzLm5ld0ZpbHRlclY0KGZpZWxkU2VhcmNoLCBPcGVyYXRvci5jb250YWluLCB2YWx1ZS50b1N0cmluZygpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkU2VhcmNoIG9mIHRoaXMuZmllbGRTZWFyY2hUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5maWx0ZXJzLnB1c2godGhpcy5uZXdGaWx0ZXIoZmllbGRTZWFyY2gsIE9wZXJhdG9yLmNvbnRhaW4sIHZhbHVlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGRTZXR0aW5nRW50aXR5UGlja2VyKCkge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5jb2xzID0gW107XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLnRpdGxlID0gJyc7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlID0gdGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5oZWlnaHRUeXBlID0gSGVpZ2h0VHlwZS5keW5hbWljO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5DaGVja2JveCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLnNldHRpbmdLZXkgPSAnZW50aXR5UGlja2VyJztcclxuICAgICAgICB0aGlzLnNldHRpbmcuaGlkZGVuU2V0dGluZ1dvcmtmbG93ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuaGlkZGVuU2V0dGluZ1Blcm1pc3Npb24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5maWVsZFNlYXJjaFRleHQgPSB0aGlzLmNvbnRyb2wuZmllbGRTZWFyY2hUZXh0O1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnRGaWVsZCA9IHRoaXMuY29udHJvbC5zb3J0RmllbGQ7XHJcbiAgICAgICAgdGhpcy5jb250cm9sLmNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xyXG4gICAgICAgICAgICBpZiAoY29sdW1uLmlzRGlzcGxheSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY29sID0gbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLmNvbHVtbixcclxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBjb2x1bW4uY29kZSxcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGNvbHVtbi5sYWJlbClcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbi5kYXRhVHlwZSA9PSAnY3VzdG9tJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbC5kYXRhVHlwZSA9IGNvbHVtbi5jb2RlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMucHVzaChjb2wpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5hZHZhbmNlRGF0YS5maWVsZHMgPSB0aGlzLmdldEZpZWxkcygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEzhuqV5IHVuaW9uIGPhu6dhOiBzZWxlY3RlZEZpZWxkLCBmaWVsZFBsdXMsIGRpc3BsYXkgZmllbGRzIGPDsyB0cm9uZyB0YWJsZS5cclxuICAgIGdldEZpZWxkcygpIHtcclxuICAgICAgICBjb25zdCBhcnJGaWVsZDogc3RyaW5nW10gPSBbdGhpcy5jb250cm9sLmRpc3BsYXlGaWVsZCwgJ2lkJ107XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC52YWx1ZUZpZWxkICYmIHRoaXMuY29udHJvbC52YWx1ZUZpZWxkICE9ICdpZCcpIHtcclxuICAgICAgICAgICAgYXJyRmllbGQucHVzaCh0aGlzLmNvbnRyb2wudmFsdWVGaWVsZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLmZpZWxkUGx1cykge1xyXG4gICAgICAgICAgICBhcnJGaWVsZC5wdXNoKC4uLnRoaXMuY29udHJvbC5maWVsZFBsdXMuc3BsaXQoJywnKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBhcnJEaXNwbGF5RmllbGQgPSB0aGlzLmNvbnRyb2wuY29sdW1ucy5maWx0ZXIoeCA9PiB4LmlzRGlzcGxheSA9PSB0cnVlICYmICF4Lm5vdEluRmllbGRzICYmIHguZGF0YVR5cGUgIT0gJ2N1c3RvbScpXHJcbiAgICAgICAgICAgIC5tYXAoeCA9PiB4LmNvZGUpO1xyXG5cclxuICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlLmFkZERpc3RpbmN0KGFyckRpc3BsYXlGaWVsZCwgYXJyRmllbGQpO1xyXG4gICAgICAgIHJldHVybiBhcnJGaWVsZC50b1N0cmluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERyb3Bkb3duT3B0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4gbmV3IERyb3Bkb3duT3B0aW9ucyh7XHJcbiAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogdGhpcy5jb250cm9sLmRpc3BsYXlGaWVsZCxcclxuICAgICAgICAgICAgdmFsdWVGaWVsZDogdGhpcy5jb250cm9sLnZhbHVlRmllbGQsXHJcbiAgICAgICAgICAgIGZpZWxkUGx1czogdGhpcy5jb250cm9sLmZpZWxkUGx1cyxcclxuICAgICAgICAgICAgZnVuY0dldExhYmVsOiB0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsLFxyXG4gICAgICAgICAgICBwbHVzVXJsOiB0aGlzLmNvbnRyb2wucGx1c1VybFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNob3dQaWNrRm9ybSgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLm1vZGlmeUluaXRTZWFyY2hEYXRhKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY29udHJvbC5tb2RpZnlJbml0U2VhcmNoRGF0YSh0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2hvd0Zvcm1QaWNrZXIgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldERhdGEoKSB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVycyA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmNvcmVWZXJzaW9uID09IEVudW1Db3JlVmVyc2lvbi5WNCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh0aGlzLm5ld0ZpbHRlclY0KHRoaXMuY29udHJvbC52YWx1ZUZpZWxkLCBPcGVyYXRvci5ub3RJbiwgdGhpcy52YWx1ZS5qb2luKCcsJykpKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRoaXMubmV3RmlsdGVyKHRoaXMuY29udHJvbC52YWx1ZUZpZWxkLCBPcGVyYXRvci5ub3RJbiwgdGhpcy52YWx1ZSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5jb3JlVmVyc2lvbiA9PSBFbnVtQ29yZVZlcnNpb24uVjQpIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2godGhpcy5uZXdGaWx0ZXJWNCh0aGlzLmNvbnRyb2wudmFsdWVGaWVsZCwgT3BlcmF0b3Iubm90RXF1YWwsIHRoaXMudmFsdWUudG9TdHJpbmcoKSkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2godGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sLnZhbHVlRmllbGQsIE9wZXJhdG9yLm5vdEVxdWFsLCB0aGlzLnZhbHVlKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgYXBwZW5kRGVmYXVsdEZpbHRlcihmaWx0ZXJzLCB0aGlzLmNvbnRyb2wuZGVmYXVsdEZpbHRlcnMpO1xyXG4gICAgICAgIGlmICh0aGlzLmtleXdvcmQgJiYgdGhpcy5rZXl3b3JkLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRoaXMuZ2V0RmlsdGVyT25TZWFyY2godGhpcy5rZXl3b3JkKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wubW9kaWZ5RmlsdGVyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFsbG93ID0gYXdhaXQgdGhpcy5jb250cm9sLm1vZGlmeUZpbHRlcihmaWx0ZXJzKTtcclxuICAgICAgICAgICAgaWYgKGFsbG93ID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzID0gW107XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IGF3YWl0IHRoaXMuY29udHJvbC5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcclxuICAgICAgICAgICAgZmlsdGVycywgdGhpcy5nZXREcm9wZG93bk9wdGlvbnMoKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5maXJlRXZlbnRBZnRlckdldERhdGFEcm9wRG93bihkYXRhU291cmNlKTtcclxuICAgICAgICB0aGlzLnJlU3RydWN0dXJlRGF0YVNvdXJjZShkYXRhU291cmNlKTtcclxuICAgICAgICB0aGlzLnJlc3VsdHMgPSB0aGlzLmRhdGFTb3VyY2U7XHJcbiAgICAgICAgLy8gUmV0dXJuIMSR4buDIG3hu5l0IHPhu5EgbsahaSBraMOhYyBkw7luZywgayByZW1vdmVcclxuICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHRzO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZmlyZUV2ZW50QWZ0ZXJHZXREYXRhRHJvcERvd24oZGF0YVNvdXJjZSkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuYWZ0ZXJHZXREYXRhRHJvcGRvd24pIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sLmFmdGVyR2V0RGF0YURyb3Bkb3duKGRhdGFTb3VyY2UsIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXNldENvbnRyb2woKSB7XHJcbiAgICAgICAgLy8gaWYgKHRoaXMuX3ZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAvLyAgICAgdGhpcy5fdmFsdWUgPSBudWxsO1xyXG4gICAgICAgIC8vICAgICB0aGlzLmZpcmVDbGVhclZhbHVlRXZlbnQoKTtcclxuICAgICAgICAvLyB9XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJEYXRhc291cmNlKCkge1xyXG4gICAgICAgIC8vIHRoaXMuZGF0YVNvdXJjZUludGVybmFsID0gW107XHJcbiAgICAgICAgLy8gdGhpcy5faGFzTG9hZGVkRGF0YXNvdXJjZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHNlYXJjaChldmVudCkge1xyXG4gICAgICAgIHRoaXMua2V5d29yZCA9IGV2ZW50LnF1ZXJ5O1xyXG4gICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUNvbnRlbnRMZWZ0SW5pdChjcnVkTGlzdCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuYWZ0ZXJDb250ZW50TGVmdEluaXQpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sLmFmdGVyQ29udGVudExlZnRJbml0KGNydWRMaXN0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlQ29udGVudFJpZ2h0SW5pdChjcnVkTGlzdCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuYWZ0ZXJDb250ZW50UmlnaHRJbml0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5hZnRlckNvbnRlbnRSaWdodEluaXQoY3J1ZExpc3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjbGVhclZhbHVlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlc3VsdHMgPSBbXTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUoKTtcclxuICAgICAgICB0aGlzLmhhc1ZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5vblVuU2VsZWN0LmVtaXQoe1xyXG4gICAgICAgICAgICBpdGVtOiB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QsXHJcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnNlbGVjdGVkVmFsdWVcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmZpcmVDaGFuZ2VFdmVudCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFNlbGVjdCBpdGVtIGPhu6dhIGF1dG9jb21wbGV0ZVxyXG4gICAgaGFuZGxlU2VsZWN0KGl0ZW0pIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUoKTtcclxuICAgICAgICBjb25zdCBldnQgPSB7XHJcbiAgICAgICAgICAgIGl0ZW0sXHJcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnNlbGVjdGVkVmFsdWVcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMub25TZWxlY3QuZW1pdChldnQpO1xyXG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZUV2ZW50KCk7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5jYWxsQmFjayAmJiB0aGlzLmNvbnRyb2wuY2FsbEJhY2suc2VsZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5jYWxsQmFjay5zZWxlY3QoaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIELhu48gc2VsZWN0IGl0ZW0gY+G7p2EgYXV0b2NvbXBsZXRlXHJcbiAgICBoYW5kbGVVblNlbGVjdCgkZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUoKTtcclxuICAgICAgICBjb25zdCBldnQgPSB7XHJcbiAgICAgICAgICAgIGl0ZW06ICRldmVudCxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2VsZWN0ZWRWYWx1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5vblVuU2VsZWN0LmVtaXQoZXZ0KTtcclxuICAgICAgICB0aGlzLmZpcmVDaGFuZ2VFdmVudCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUZvY3VzKGV2dCkge1xyXG4gICAgICAgIGlmIChldnQudGFyZ2V0LnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGV2dC50YXJnZXQuc2VsZWN0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMub25Gb2N1cy5lbWl0KGV2dCk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlQmx1cigkZXZlbnQpIHtcclxuICAgICAgICB0aGlzLm9uQmx1ci5lbWl0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlS2V5VXAoZXZ0KSB7XHJcbiAgICAgICAgbGV0IGhpZGVTdWdnZXNzaW9ucyA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgaGlkZVN1Z2dlc3Npb25zID0gZXZ0LnRhcmdldC5wYXJlbnROb2RlLnBhcmVudE5vZGUucGFyZW50Tm9kZS5jaGlsZEVsZW1lbnRDb3VudCA9PSAxO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ICYmIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdC5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICAmJiBldnQua2V5Q29kZSA9PSA0MCAmJiBoaWRlU3VnZ2Vzc2lvbnMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0cyA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBoaWRlU3VnZ2Vzc2lvbnMgPSBldnQudGFyZ2V0LnBhcmVudE5vZGUuY2hpbGRFbGVtZW50Q291bnQgPT0gMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChldnQudGFyZ2V0LnZhbHVlID09ICcnICYmIGhpZGVTdWdnZXNzaW9ucyAmJiBldnQua2V5Q29kZSAhPSA0MCAmJiBldnQua2V5Q29kZSAhPSAzOCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdHMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gbHV1IGRhdGEgY3VhIHJvdyBkYW5nIGR1b2Mgc2VsZWN0LCBkdW5nIGtoaSBjb250cm9sLm11bHRpcGxlID0gZmFsc2U7XHJcbiAgICBoYW5kbGVSb3dTZWxlY3QoaXRlbSkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0RhdGEgPSBpdGVtO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEhhbmRsZSBzZWxlY3QgaXRlbSB0cm9uZyBlbnRpdHkgcGlja2VyIGJveCAoS2jDtG5nIGPhuqduIGVtaXQgY2hhbmdlKVxyXG4gICAgaGFuZGxlU2VsZWN0RW50aXR5KGV2dCkge1xyXG4gICAgICAgIHRoaXMub25TZWxlY3QuZW1pdChldnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEhhbmRsZSB1bnNlbGVjdCBpdGVtIHRyb25nIGVudGl0eSBwaWNrZXIgYm94IChLaMO0bmcgY+G6p24gZW1pdCBjaGFuZ2UpXHJcbiAgICBoYW5kbGVVblNlbGVjdEVudGl0eShldnQpIHtcclxuICAgICAgICB0aGlzLm9uVW5TZWxlY3QuZW1pdChldnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEhhbmRsZSBjaGFuZ2UgaXRlbSB0cm9uZyBlbnRpdHkgcGlja2VyIGJveFxyXG4gICAgaGFuZGxlQ2hhbmdlRW50aXR5KGV2dCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IGV2dC52YWx1ZTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVB1cmVWYWx1ZSgpO1xyXG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZUV2ZW50KCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VmFsdWVSZXR1cm4oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZnVuY1JldHVyblZhbHVlKHRoaXMuc2VsZWN0ZWRWYWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU2VsZWN0ZWRWYWx1ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdC5tYXAoaXRlbSA9PiBpdGVtLnZhbHVlKTtcclxuICAgICAgICAgICAgdGhpcy50b29sdGlwID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QudmFsdWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXAgPSB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QubGFiZWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlUHVyZVZhbHVlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlUHVyZVZhbHVlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZS5tYXAoaXRlbSA9PiBpdGVtW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSk7XHJcbiAgICAgICAgICAgIHRoaXMuaGFzVmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWUubGVuZ3RoID4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWUgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhc1ZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5zZWxlY3RlZFZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFzVmFsdWUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZpcmVDaGFuZ2VFdmVudCgpIHtcclxuICAgICAgICBjb25zdCB2YWx1ZVJldHVybiA9IHRoaXMuZnVuY1JldHVyblZhbHVlKHRoaXMuc2VsZWN0ZWRWYWx1ZSk7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZUJhc2UodmFsdWVSZXR1cm4pO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2VkLmVtaXQoe1xyXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWVSZXR1cm5cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBoYW5kbGVIaWRlKGV2dCkge1xyXG4gICAgICAgIHRoaXMuc2hvd0Zvcm1QaWNrZXIgPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5kaXJ0eSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF0YVNvdXJjZSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpbHRlcnMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmNvcmVWZXJzaW9uID09IEVudW1Db3JlVmVyc2lvbi5WNCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXJWNCh0aGlzLmNvbnRyb2wudmFsdWVGaWVsZCwgT3BlcmF0b3IuaW4sIHRoaXMudmFsdWUuam9pbignLCcpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcih0aGlzLmNvbnRyb2wudmFsdWVGaWVsZCwgT3BlcmF0b3IuaW4sIHRoaXMudmFsdWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wubW9kaWZ5RmlsdGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFsbG93ID0gYXdhaXQgdGhpcy5jb250cm9sLm1vZGlmeUZpbHRlcihmaWx0ZXJzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFsbG93ID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZVN0cnVjdHVyZURhdGFTb3VyY2UoZGF0YVNvdXJjZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSB0aGlzLmRhdGFTb3VyY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlID0gYXdhaXQgdGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzLCB0aGlzLmdldERyb3Bkb3duT3B0aW9ucygpXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVFdmVudEFmdGVyR2V0RGF0YURyb3BEb3duKGRhdGFTb3VyY2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZVN0cnVjdHVyZURhdGFTb3VyY2UoZGF0YVNvdXJjZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSB0aGlzLmRhdGFTb3VyY2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF0YVNvdXJjZSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZmlsdGVycyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wuY29yZVZlcnNpb24gPT0gRW51bUNvcmVWZXJzaW9uLlY0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlclY0KHRoaXMuY29udHJvbC52YWx1ZUZpZWxkLCBPcGVyYXRvci5lcXVhbCwgdGhpcy52YWx1ZS50b1N0cmluZygpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcih0aGlzLmNvbnRyb2wudmFsdWVGaWVsZCwgT3BlcmF0b3IuZXF1YWwsIHRoaXMudmFsdWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wubW9kaWZ5RmlsdGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFsbG93ID0gYXdhaXQgdGhpcy5jb250cm9sLm1vZGlmeUZpbHRlcihmaWx0ZXJzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFsbG93ID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZVN0cnVjdHVyZURhdGFTb3VyY2UoZGF0YVNvdXJjZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlID0gYXdhaXQgdGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzLCB0aGlzLmdldERyb3Bkb3duT3B0aW9ucygpXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVFdmVudEFmdGVyR2V0RGF0YURyb3BEb3duKGRhdGFTb3VyY2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZVN0cnVjdHVyZURhdGFTb3VyY2UoZGF0YVNvdXJjZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhU291cmNlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSB0aGlzLmRhdGFTb3VyY2VbMF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkNsaWNrU3VibWl0QnV0dG9uKGV2dCwgZW50aXR5UGlja2VyQm94OiBFbnRpdHlQaWNrZXJCb3hDb21wb25lbnQpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlSGlkZShldnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLnNlbGVjdGVkUm93RGF0YSkge1xyXG4gICAgICAgICAgICBlbnRpdHlQaWNrZXJCb3ggJiYgZW50aXR5UGlja2VyQm94LmhhbmRsZVBpY2sodGhpcy5zZWxlY3RlZFJvd0RhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93Rm9ybVBpY2tlciA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlU3RydWN0dXJlRGF0YVNvdXJjZShzb3VyY2VzOiBhbnlbXSkge1xyXG4gICAgICAgIGlmIChzb3VyY2VzICE9IG51bGwgJiYgc291cmNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFyciA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHNvdXJjZXMpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnJlU3RydWN0dXJlSXRlbU9iamVjdChpdGVtKTtcclxuICAgICAgICAgICAgICAgIGFyci5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UgPSBhcnI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVTdHJ1Y3R1cmVJdGVtT2JqZWN0KGl0ZW0pOiBTZWxlY3RJdGVtIHtcclxuICAgICAgICBjb25zdCB0ZW1wOiBTZWxlY3RJdGVtID0geyB2YWx1ZTogaXRlbSB9O1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsKSB7XHJcbiAgICAgICAgICAgIHRlbXAubGFiZWwgPSB0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsKGl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGVtcC5sYWJlbCA9IGl0ZW1bdGhpcy5jb250cm9sLmRpc3BsYXlGaWVsZF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRlbXAudmFsdWUuX2Ryb3Bkb3dudmFsdWUgPSB0aGlzLmNvbnRyb2wudmFsdWVGaWVsZDtcclxuICAgICAgICByZXR1cm4gdGVtcDtcclxuICAgIH1cclxuXHJcbiAgICBnZXREYXRhU2VsZWN0ZWRWYWx1ZShvYmo6IGFueSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChvYmogIT0gbnVsbCAmJiBvYmoubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcnM6IEZpbHRlcltdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5jb3JlVmVyc2lvbiA9PSBFbnVtQ29yZVZlcnNpb24uVjQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRoaXMubmV3RmlsdGVyVjQodGhpcy5jb250cm9sLnZhbHVlRmllbGQsIE9wZXJhdG9yLmluLCBvYmouam9pbignLCcpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRoaXMubmV3RmlsdGVyKHRoaXMuY29udHJvbC52YWx1ZUZpZWxkLCBPcGVyYXRvci5pbiwgb2JqKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wubW9kaWZ5RmlsdGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY29udHJvbC5tb2RpZnlGaWx0ZXIoZmlsdGVycyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGFwcGVuZERlZmF1bHRGaWx0ZXIoZmlsdGVycywgdGhpcy5jb250cm9sLmRlZmF1bHRGaWx0ZXJzKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0RHJvcGRvd25PcHRpb25zKClcclxuICAgICAgICAgICAgICAgICAgICApLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlRXZlbnRBZnRlckdldERhdGFEcm9wRG93bihyZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlU3RydWN0dXJlRGF0YVNvdXJjZShyZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdHMgPSB0aGlzLmRhdGFTb3VyY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IHRoaXMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKG9iaiAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpbHRlcnMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmNvcmVWZXJzaW9uID09IEVudW1Db3JlVmVyc2lvbi5WNCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXJWNCh0aGlzLmNvbnRyb2wudmFsdWVGaWVsZCwgT3BlcmF0b3IuZXF1YWwsIG9iai50b1N0cmluZygpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcih0aGlzLmNvbnRyb2wudmFsdWVGaWVsZCwgT3BlcmF0b3IuZXF1YWwsIG9iailcclxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tb2RpZnlGaWx0ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jb250cm9sLm1vZGlmeUZpbHRlcihmaWx0ZXJzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzLCB0aGlzLmdldERyb3Bkb3duT3B0aW9ucygpXHJcbiAgICAgICAgICAgICAgICAgICAgKS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlRXZlbnRBZnRlckdldERhdGFEcm9wRG93bihyZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZVN0cnVjdHVyZURhdGFTb3VyY2UocmVzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0cyA9IHRoaXMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IHRoaXMuZGF0YVNvdXJjZVswXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wuY2FsbEJhY2sgJiYgdGhpcy5jb250cm9sLmNhbGxCYWNrLnNlbGVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5jYWxsQmFjay5zZWxlY3QodGhpcy5zZWxlY3RlZFZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5oYXNWYWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZ2V0RGF0YVNlbGVjdGVkVmFsdWUob2JqKVxyXG4gICAgICAgICAgICAudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNWYWx1ZSAmJiAhdGhpcy5pc0ZpcmVkUmVhZHkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRmlyZWRSZWFkeSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSMOgbSByZWFkeSBuw6B5IGNo4buJIEPhuqZOIETDmU5HIHRyb25nIHRyxrDhu51uZyBo4bujcCBhdXRvY29tcGxldGUtcGlja2VyIGPDsyB2YWx1ZSA9PiBEw7luZyDEkeG7gyBs4bqleSBk4buvIGxp4buHdSBjw6FjIGNvbXBvbmVudCBjb25cclxuICAgICAgICAgICAgICAgICAgICAvLyBO4bq/dSBjw7MgdHLGsOG7nW5nIGjhu6NwIG7DoG8ga2jDoWMgdGjDrCBj4bqnbiBwaOG6o2kgeOG7rSBsw70ga2jDoWNcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uUmVhZHkuZW1pdCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlQmFzZSA9IGZuO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
577
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9hdXRvY29tcGxldGUtcGlja2VyL2F1dG9jb21wbGV0ZS1waWNrZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckcsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXZELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLCtCQUErQixFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqSyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFekQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFpQjlFLE1BQU0sT0FBTywyQkFBNEIsU0FBUSxhQUFhO0lBNkMxRCxZQUNJLFFBQWtCLEVBQ1YsaUJBQW1DO1FBRTNDLEtBQUssQ0FBQyxRQUFRLENBQUMs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RSxDQUFDO2FBQ3ZCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsRUFBTztRQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBTztRQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN4QixDQUFDOzs7WUFwbUJKLFNBQVMsU0FBQztnQkFDUCwrQ0FBK0M7Z0JBQy9DLFFBQVEsRUFBRSxxQkFBcUI7Z0JBQy9CLG84RUFBbUQ7Z0JBRW5ELFNBQVMsRUFBRTtvQkFDUDt3QkFDSSxPQUFPLEVBQUUsaUJBQWlCO3dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDJCQUEyQixDQUFDO3dCQUMxRCxLQUFLLEVBQUUsSUFBSTtxQkFDZDtvQkFDRCx1QkFBdUI7b0JBQ3ZCLHFCQUFxQjtpQkFDeEI7O2FBQ0o7OztZQTVCNkMsUUFBUTtZQUU3QyxnQkFBZ0I7OztzQkFnQ3BCLEtBQUs7dUJBQ0wsS0FBSzt5QkFDTCxLQUFLO3dCQUNMLEtBQUs7dUJBTUwsTUFBTTt5QkFDTixNQUFNO3dCQUNOLE1BQU07c0JBQ04sTUFBTTtxQkFDTixNQUFNO3NCQUNOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgSW5qZWN0b3IsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgU2VsZWN0SXRlbSB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IENvbXBvbmVudENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwLWNvbnRleHQvY29tcG9uZW50LWNvbnRleHQuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Jhc2UvY29tcG9uZW50LWJhc2UnO1xyXG5pbXBvcnQgeyBFbnVtQ29yZVZlcnNpb24gfSBmcm9tICcuLi8uLi9jbGFzc2VzL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IEF1dG9Db21wbGV0ZVBpY2tlckNvbnRyb2xTY2hlbWEsIENvbHVtblNjaGVtYUJhc2UsIENydWRMaXN0U2V0dGluZywgRHJvcGRvd25PcHRpb25zLCBIZWlnaHRUeXBlLCBPcGVyYXRvciwgUG9wdXBTaXplIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9mb3JtLXNjaGVtYSc7XHJcbmltcG9ydCB7IEZpbHRlciB9IGZyb20gJy4uLy4uL21vZGVscy9ncmlkLWluZm8nO1xyXG5pbXBvcnQgeyBFbnRpdHlNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbnRpdHktbWV0YWRhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7IGFwcGVuZERlZmF1bHRGaWx0ZXIgfSBmcm9tICcuLi8uLi91dGlscy9jb21tb24nO1xyXG5pbXBvcnQgeyBFbnRpdHlQaWNrZXJCb3hDb21wb25lbnQgfSBmcm9tICcuLi9lbnRpdHktcGlja2VyL2VudGl0eS1waWNrZXItYm94L2VudGl0eS1waWNrZXItYm94LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFkdmFuY2VEYXRhRW50aXR5UGlja2VyIH0gZnJvbSAnLi4vZW50aXR5LXBpY2tlci9tb2RlbC9hZHZhbmNlLWRhdGEnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGNvbXBvbmVudC1zZWxlY3RvclxyXG4gICAgc2VsZWN0b3I6ICdhdXRvY29tcGxldGUtcGlja2VyJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9hdXRvY29tcGxldGUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2F1dG9jb21wbGV0ZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEF1dG9Db21wbGV0ZVBpY2tlckNvbXBvbmVudCksXHJcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBDb21wb25lbnRDb250ZXh0U2VydmljZSxcclxuICAgICAgICBFbnRpdHlNZXRhZGF0YVNlcnZpY2VcclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEF1dG9Db21wbGV0ZVBpY2tlckNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuXHJcbiAgICBvbkNoYW5nZUJhc2U6IEZ1bmN0aW9uO1xyXG4gICAgb25Ub3VjaGVkOiBGdW5jdGlvbjtcclxuXHJcbiAgICBASW5wdXQoKSBjb250cm9sOiBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hO1xyXG4gICAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBudWxsO1xyXG4gICAgQElucHV0KCkgcGFyZW50UGF0aDogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgcG9wdXBTaXplOiBQb3B1cFNpemUgPSBuZXcgUG9wdXBTaXplKHtcclxuICAgICAgICB3aWR0aDogMTEwMCxcclxuICAgICAgICBoZWlnaHQ6IDkwMCxcclxuICAgICAgICBtYXhpbWl6ZTogdHJ1ZVxyXG4gICAgfSk7XHJcblxyXG4gICAgQE91dHB1dCgpIG9uU2VsZWN0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uVW5TZWxlY3Q6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25DaGFuZ2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uRm9jdXM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25CbHVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uUmVhZHk6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgc2V0dGluZzogQ3J1ZExpc3RTZXR0aW5nID0gbmV3IENydWRMaXN0U2V0dGluZygpO1xyXG4gICAgYWR2YW5jZURhdGE6IEFkdmFuY2VEYXRhRW50aXR5UGlja2VyID0gbmV3IEFkdmFuY2VEYXRhRW50aXR5UGlja2VyKCk7XHJcblxyXG4gICAgdmFsdWU6IGFueTtcclxuICAgIGZ1bmNSZXR1cm5WYWx1ZTogKHZhbHVlKSA9PiB7fSA9IHZhbHVlID0+IHZhbHVlO1xyXG4gICAgc2VsZWN0ZWRWYWx1ZTogYW55O1xyXG4gICAgc2VsZWN0ZWRSb3dEYXRhOiBhbnk7XHJcbiAgICBzZWxlY3RlZFZhbHVlT2JqZWN0OiBhbnk7XHJcbiAgICBkYXRhU291cmNlOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgIGtleXdvcmQ6IHN0cmluZyA9ICcnO1xyXG4gICAgZmllbGRTZWFyY2hUZXh0OiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIHJlc3VsdHM6IGFueVtdID0gW107XHJcblxyXG4gICAgc2hvd0Zvcm1QaWNrZXIgPSBmYWxzZTtcclxuICAgIGRpcnR5ID0gZmFsc2U7XHJcblxyXG4gICAgdG9vbHRpcCA9ICcnO1xyXG4gICAgaGFzVmFsdWUgPSBmYWxzZTtcclxuICAgIGlzRmlyZWRSZWFkeSA9IGZhbHNlO1xyXG5cclxuICAgIHByaXZhdGUgZ2V0RmlsdGVyT25TZWFyY2g/OiBGdW5jdGlvbjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgcHJpdmF0ZSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZVxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuY29udHJvbC5fY29tcG9uZW50ID0gdGhpcztcclxuICAgICAgICB0aGlzLnNldERlZmF1bHRTZXR0aW5nKCk7XHJcblxyXG4gICAgICAgIHRoaXMuYnVpbGRGaWx0ZXJLZXl3b3JkKCk7XHJcbiAgICAgICAgdGhpcy5idWlsZFNldHRpbmdFbnRpdHlQaWNrZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXREZWZhdWx0U2V0dGluZygpIHtcclxuICAgICAgICB0aGlzLmZpZWxkU2VhcmNoVGV4dCA9IFsuLi50aGlzLmNvbnRyb2wuZmllbGRTZWFyY2hUZXh0XTtcclxuICAgICAgICBpZiAoIXRoaXMuZmllbGRTZWFyY2hUZXh0LnNvbWUoaXRlbSA9PiBpdGVtID09IHRoaXMuY29udHJvbC5kaXNwbGF5RmllbGQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmllbGRTZWFyY2hUZXh0LnB1c2godGhpcy5jb250cm9sLmRpc3BsYXlGaWVsZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLnJldHVyblR5cGUgPT0gJ3ZhbHVlJykge1xyXG4gICAgICAgICAgICB0aGlzLmZ1bmNSZXR1cm5WYWx1ZSA9ICh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5tYXAoaXRlbSA9PiBpdGVtW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5mdW5jUmV0dXJuVmFsdWUgPSB2YWx1ZSA9PiB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGRGaWx0ZXJLZXl3b3JkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmZpZWxkU2VhcmNoVGV4dC5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmNvcmVWZXJzaW9uID09IEVudW1Db3JlVmVyc2lvbi5WNCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRGaWx0ZXJPblNlYXJjaCA9IHZhbHVlID0+IHRoaXMubmV3RmlsdGVyVjQodGhpcy5jb250cm9sLmRpc3BsYXlGaWVsZCwgT3BlcmF0b3IuY29udGFpbiwgdmFsdWUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldEZpbHRlck9uU2VhcmNoID0gdmFsdWUgPT4gdGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sLmRpc3BsYXlGaWVsZCwgT3BlcmF0b3IuY29udGFpbiwgdmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmdldEZpbHRlck9uU2VhcmNoID0gdmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IEZpbHRlcih7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9naWM6ICdvcicsXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyczogW11cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5jb3JlVmVyc2lvbiA9PSBFbnVtQ29yZVZlcnNpb24uVjQpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkU2VhcmNoIG9mIHRoaXMuZmllbGRTZWFyY2hUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5maWx0ZXJzLnB1c2godGhpcy5uZXdGaWx0ZXJWNChmaWVsZFNlYXJjaCwgT3BlcmF0b3IuY29udGFpbiwgdmFsdWUudG9TdHJpbmcoKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZFNlYXJjaCBvZiB0aGlzLmZpZWxkU2VhcmNoVGV4dCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuZmlsdGVycy5wdXNoKHRoaXMubmV3RmlsdGVyKGZpZWxkU2VhcmNoLCBPcGVyYXRvci5jb250YWluLCB2YWx1ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkU2V0dGluZ0VudGl0eVBpY2tlcigpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmcuY29scyA9IFtdO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy50aXRsZSA9ICcnO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSA9IHRoaXMuY29udHJvbC5iYXNlU2VydmljZTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuaGVpZ2h0VHlwZSA9IEhlaWdodFR5cGUuZHluYW1pYztcclxuICAgICAgICB0aGlzLnNldHRpbmcuaGlkZGVuQ2hlY2tib3ggPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5zZXR0aW5nS2V5ID0gJ2VudGl0eVBpY2tlcic7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmhpZGRlblNldHRpbmdXb3JrZmxvdyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmhpZGRlblNldHRpbmdQZXJtaXNzaW9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuZmllbGRTZWFyY2hUZXh0ID0gdGhpcy5jb250cm9sLmZpZWxkU2VhcmNoVGV4dDtcclxuICAgICAgICB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5zb3J0RmllbGQgPSB0aGlzLmNvbnRyb2wuc29ydEZpZWxkO1xyXG4gICAgICAgIHRoaXMuY29udHJvbC5jb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcclxuICAgICAgICAgICAgaWYgKGNvbHVtbi5pc0Rpc3BsYXkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbCA9IG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcclxuICAgICAgICAgICAgICAgICAgICAuLi5jb2x1bW4sXHJcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogY29sdW1uLmNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChjb2x1bW4ubGFiZWwpXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4uZGF0YVR5cGUgPT0gJ2N1c3RvbScpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb2wuZGF0YVR5cGUgPSBjb2x1bW4uY29kZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2xzLnB1c2goY29sKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuYWR2YW5jZURhdGEuZmllbGRzID0gdGhpcy5nZXRGaWVsZHMoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBM4bqleSB1bmlvbiBj4bunYTogc2VsZWN0ZWRGaWVsZCwgZmllbGRQbHVzLCBkaXNwbGF5IGZpZWxkcyBjw7MgdHJvbmcgdGFibGUuXHJcbiAgICBnZXRGaWVsZHMoKSB7XHJcbiAgICAgICAgY29uc3QgYXJyRmllbGQ6IHN0cmluZ1tdID0gW3RoaXMuY29udHJvbC5kaXNwbGF5RmllbGQsICdpZCddO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wudmFsdWVGaWVsZCAmJiB0aGlzLmNvbnRyb2wudmFsdWVGaWVsZCAhPSAnaWQnKSB7XHJcbiAgICAgICAgICAgIGFyckZpZWxkLnB1c2godGhpcy5jb250cm9sLnZhbHVlRmllbGQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5maWVsZFBsdXMpIHtcclxuICAgICAgICAgICAgYXJyRmllbGQucHVzaCguLi50aGlzLmNvbnRyb2wuZmllbGRQbHVzLnNwbGl0KCcsJykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYXJyRGlzcGxheUZpZWxkID0gdGhpcy5jb250cm9sLmNvbHVtbnMuZmlsdGVyKHggPT4geC5pc0Rpc3BsYXkgPT0gdHJ1ZSAmJiAheC5ub3RJbkZpZWxkcyAmJiB4LmRhdGFUeXBlICE9ICdjdXN0b20nKVxyXG4gICAgICAgICAgICAubWFwKHggPT4geC5jb2RlKTtcclxuXHJcbiAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5hZGREaXN0aW5jdChhcnJEaXNwbGF5RmllbGQsIGFyckZpZWxkKTtcclxuICAgICAgICByZXR1cm4gYXJyRmllbGQudG9TdHJpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREcm9wZG93bk9wdGlvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBEcm9wZG93bk9wdGlvbnMoe1xyXG4gICAgICAgICAgICBkaXNwbGF5RmllbGQ6IHRoaXMuY29udHJvbC5kaXNwbGF5RmllbGQsXHJcbiAgICAgICAgICAgIHZhbHVlRmllbGQ6IHRoaXMuY29udHJvbC52YWx1ZUZpZWxkLFxyXG4gICAgICAgICAgICBmaWVsZFBsdXM6IHRoaXMuY29udHJvbC5maWVsZFBsdXMsXHJcbiAgICAgICAgICAgIGZ1bmNHZXRMYWJlbDogdGhpcy5jb250cm9sLmZ1bmNHZXRMYWJlbCxcclxuICAgICAgICAgICAgcGx1c1VybDogdGhpcy5jb250cm9sLnBsdXNVcmxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzaG93UGlja0Zvcm0oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tb2RpZnlJbml0U2VhcmNoRGF0YSkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvbnRyb2wubW9kaWZ5SW5pdFNlYXJjaERhdGEodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNob3dGb3JtUGlja2VyID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXREYXRhKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wubW9kaWZ5SW5pdFNlYXJjaERhdGEpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb250cm9sLm1vZGlmeUluaXRTZWFyY2hEYXRhKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBmaWx0ZXJzID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZSAmJiB0aGlzLnZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wuY29yZVZlcnNpb24gPT0gRW51bUNvcmVWZXJzaW9uLlY0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRoaXMubmV3RmlsdGVyVjQodGhpcy5jb250cm9sLnZhbHVlRmllbGQsIE9wZXJhdG9yLm5vdEluLCB0aGlzLnZhbHVlLmpvaW4oJywnKSkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2godGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sLnZhbHVlRmllbGQsIE9wZXJhdG9yLm5vdEluLCB0aGlzLnZhbHVlKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmNvcmVWZXJzaW9uID09IEVudW1Db3JlVmVyc2lvbi5WNCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh0aGlzLm5ld0ZpbHRlclY0KHRoaXMuY29udHJvbC52YWx1ZUZpZWxkLCBPcGVyYXRvci5ub3RFcXVhbCwgdGhpcy52YWx1ZS50b1N0cmluZygpKSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh0aGlzLm5ld0ZpbHRlcih0aGlzLmNvbnRyb2wudmFsdWVGaWVsZCwgT3BlcmF0b3Iubm90RXF1YWwsIHRoaXMudmFsdWUpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCBhcHBlbmREZWZhdWx0RmlsdGVyKGZpbHRlcnMsIHRoaXMuY29udHJvbC5kZWZhdWx0RmlsdGVycyk7XHJcbiAgICAgICAgaWYgKHRoaXMua2V5d29yZCAmJiB0aGlzLmtleXdvcmQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBmaWx0ZXJzLnB1c2godGhpcy5nZXRGaWx0ZXJPblNlYXJjaCh0aGlzLmtleXdvcmQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tb2RpZnlGaWx0ZXIpIHtcclxuICAgICAgICAgICAgY29uc3QgYWxsb3cgPSBhd2FpdCB0aGlzLmNvbnRyb2wubW9kaWZ5RmlsdGVyKGZpbHRlcnMpO1xyXG4gICAgICAgICAgICBpZiAoYWxsb3cgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBkYXRhU291cmNlID0gYXdhaXQgdGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyKFxyXG4gICAgICAgICAgICBmaWx0ZXJzLCB0aGlzLmdldERyb3Bkb3duT3B0aW9ucygpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpcmVFdmVudEFmdGVyR2V0RGF0YURyb3BEb3duKGRhdGFTb3VyY2UpO1xyXG4gICAgICAgIHRoaXMucmVTdHJ1Y3R1cmVEYXRhU291cmNlKGRhdGFTb3VyY2UpO1xyXG4gICAgICAgIHRoaXMucmVzdWx0cyA9IHRoaXMuZGF0YVNvdXJjZTtcclxuICAgICAgICAvLyBSZXR1cm4gxJHhu4MgbeG7mXQgc+G7kSBuxqFpIGtow6FjIGTDuW5nLCBrIHJlbW92ZVxyXG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdHM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmaXJlRXZlbnRBZnRlckdldERhdGFEcm9wRG93bihkYXRhU291cmNlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5hZnRlckdldERhdGFEcm9wZG93bikge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuYWZ0ZXJHZXREYXRhRHJvcGRvd24oZGF0YVNvdXJjZSwgdGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0Q29udHJvbCgpIHtcclxuICAgICAgICAvLyBpZiAodGhpcy5fdmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgIC8vICAgICB0aGlzLl92YWx1ZSA9IG51bGw7XHJcbiAgICAgICAgLy8gICAgIHRoaXMuZmlyZUNsZWFyVmFsdWVFdmVudCgpO1xyXG4gICAgICAgIC8vIH1cclxuICAgIH1cclxuXHJcbiAgICBjbGVhckRhdGFzb3VyY2UoKSB7XHJcbiAgICAgICAgLy8gdGhpcy5kYXRhU291cmNlSW50ZXJuYWwgPSBbXTtcclxuICAgICAgICAvLyB0aGlzLl9oYXNMb2FkZWREYXRhc291cmNlID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgc2VhcmNoKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5rZXl3b3JkID0gZXZlbnQucXVlcnk7XHJcbiAgICAgICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlQ29udGVudExlZnRJbml0KGNydWRMaXN0KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5hZnRlckNvbnRlbnRMZWZ0SW5pdCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuYWZ0ZXJDb250ZW50TGVmdEluaXQoY3J1ZExpc3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVDb250ZW50UmlnaHRJbml0KGNydWRMaXN0KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5hZnRlckNvbnRlbnRSaWdodEluaXQpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sLmFmdGVyQ29udGVudFJpZ2h0SW5pdChjcnVkTGlzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyVmFsdWUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVzdWx0cyA9IFtdO1xyXG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZSgpO1xyXG4gICAgICAgIHRoaXMuaGFzVmFsdWUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm9uVW5TZWxlY3QuZW1pdCh7XHJcbiAgICAgICAgICAgIGl0ZW06IHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2VsZWN0ZWRWYWx1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZUV2ZW50KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2VsZWN0IGl0ZW0gY+G7p2EgYXV0b2NvbXBsZXRlXHJcbiAgICBoYW5kbGVTZWxlY3QoaXRlbSkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZSgpO1xyXG4gICAgICAgIGNvbnN0IGV2dCA9IHtcclxuICAgICAgICAgICAgaXRlbSxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2VsZWN0ZWRWYWx1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5vblNlbGVjdC5lbWl0KGV2dCk7XHJcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlRXZlbnQoKTtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLmNhbGxCYWNrICYmIHRoaXMuY29udHJvbC5jYWxsQmFjay5zZWxlY3QpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sLmNhbGxCYWNrLnNlbGVjdChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQuG7jyBzZWxlY3QgaXRlbSBj4bunYSBhdXRvY29tcGxldGVcclxuICAgIGhhbmRsZVVuU2VsZWN0KCRldmVudCkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZSgpO1xyXG4gICAgICAgIGNvbnN0IGV2dCA9IHtcclxuICAgICAgICAgICAgaXRlbTogJGV2ZW50LFxyXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5zZWxlY3RlZFZhbHVlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLm9uVW5TZWxlY3QuZW1pdChldnQpO1xyXG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZUV2ZW50KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlRm9jdXMoZXZ0KSB7XHJcbiAgICAgICAgaWYgKGV2dC50YXJnZXQudmFsdWUpIHtcclxuICAgICAgICAgICAgZXZ0LnRhcmdldC5zZWxlY3QoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vbkZvY3VzLmVtaXQoZXZ0KTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVCbHVyKCRldmVudCkge1xyXG4gICAgICAgIHRoaXMub25CbHVyLmVtaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVLZXlVcChldnQpIHtcclxuICAgICAgICBsZXQgaGlkZVN1Z2dlc3Npb25zID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICBoaWRlU3VnZ2Vzc2lvbnMgPSBldnQudGFyZ2V0LnBhcmVudE5vZGUucGFyZW50Tm9kZS5wYXJlbnROb2RlLmNoaWxkRWxlbWVudENvdW50ID09IDE7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgJiYgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0Lmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICYmIGV2dC5rZXlDb2RlID09IDQwICYmIGhpZGVTdWdnZXNzaW9ucykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzID0gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGhpZGVTdWdnZXNzaW9ucyA9IGV2dC50YXJnZXQucGFyZW50Tm9kZS5jaGlsZEVsZW1lbnRDb3VudCA9PSAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGV2dC50YXJnZXQudmFsdWUgPT0gJycgJiYgaGlkZVN1Z2dlc3Npb25zICYmIGV2dC5rZXlDb2RlICE9IDQwICYmIGV2dC5rZXlDb2RlICE9IDM4KSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzdWx0cyA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBsdXUgZGF0YSBjdWEgcm93IGRhbmcgZHVvYyBzZWxlY3QsIGR1bmcga2hpIGNvbnRyb2wubXVsdGlwbGUgPSBmYWxzZTtcclxuICAgIGhhbmRsZVJvd1NlbGVjdChpdGVtKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93RGF0YSA9IGl0ZW07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSGFuZGxlIHNlbGVjdCBpdGVtIHRyb25nIGVudGl0eSBwaWNrZXIgYm94IChLaMO0bmcgY+G6p24gZW1pdCBjaGFuZ2UpXHJcbiAgICBoYW5kbGVTZWxlY3RFbnRpdHkoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5vblNlbGVjdC5lbWl0KGV2dCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSGFuZGxlIHVuc2VsZWN0IGl0ZW0gdHJvbmcgZW50aXR5IHBpY2tlciBib3ggKEtow7RuZyBj4bqnbiBlbWl0IGNoYW5nZSlcclxuICAgIGhhbmRsZVVuU2VsZWN0RW50aXR5KGV2dCkge1xyXG4gICAgICAgIHRoaXMub25VblNlbGVjdC5lbWl0KGV2dCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSGFuZGxlIGNoYW5nZSBpdGVtIHRyb25nIGVudGl0eSBwaWNrZXIgYm94XHJcbiAgICBoYW5kbGVDaGFuZ2VFbnRpdHkoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gZXZ0LnZhbHVlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlUHVyZVZhbHVlKCk7XHJcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlRXZlbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRWYWx1ZVJldHVybigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mdW5jUmV0dXJuVmFsdWUodGhpcy5zZWxlY3RlZFZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTZWxlY3RlZFZhbHVlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0Lm1hcChpdGVtID0+IGl0ZW0udmFsdWUpO1xyXG4gICAgICAgICAgICB0aGlzLnRvb2x0aXAgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b29sdGlwID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdC52YWx1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcCA9IHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdC5sYWJlbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVQdXJlVmFsdWUoKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVQdXJlVmFsdWUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5zZWxlY3RlZFZhbHVlLm1hcChpdGVtID0+IGl0ZW1bdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKTtcclxuICAgICAgICAgICAgdGhpcy5oYXNWYWx1ZSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZS5sZW5ndGggPiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFzVmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYXNWYWx1ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZmlyZUNoYW5nZUV2ZW50KCkge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlUmV0dXJuID0gdGhpcy5mdW5jUmV0dXJuVmFsdWUodGhpcy5zZWxlY3RlZFZhbHVlKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlQmFzZSh2YWx1ZVJldHVybik7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZWQuZW1pdCh7XHJcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVJldHVyblxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGhhbmRsZUhpZGUoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5zaG93Rm9ybVBpY2tlciA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLmRpcnR5KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgICAgIGxldCBkYXRhU291cmNlID0gW107XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZSAmJiB0aGlzLnZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZmlsdGVycyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wuY29yZVZlcnNpb24gPT0gRW51bUNvcmVWZXJzaW9uLlY0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlclY0KHRoaXMuY29udHJvbC52YWx1ZUZpZWxkLCBPcGVyYXRvci5pbiwgdGhpcy52YWx1ZS5qb2luKCcsJykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycyA9IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKHRoaXMuY29udHJvbC52YWx1ZUZpZWxkLCBPcGVyYXRvci5pbiwgdGhpcy52YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tb2RpZnlGaWx0ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWxsb3cgPSBhd2FpdCB0aGlzLmNvbnRyb2wubW9kaWZ5RmlsdGVyKGZpbHRlcnMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWxsb3cgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlU3RydWN0dXJlRGF0YVNvdXJjZShkYXRhU291cmNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IHRoaXMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UgPSBhd2FpdCB0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnMsIHRoaXMuZ2V0RHJvcGRvd25PcHRpb25zKClcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZUV2ZW50QWZ0ZXJHZXREYXRhRHJvcERvd24oZGF0YVNvdXJjZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlU3RydWN0dXJlRGF0YVNvdXJjZShkYXRhU291cmNlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IHRoaXMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxldCBkYXRhU291cmNlID0gW107XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmaWx0ZXJzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5jb3JlVmVyc2lvbiA9PSBFbnVtQ29yZVZlcnNpb24uVjQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycyA9IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyVjQodGhpcy5jb250cm9sLnZhbHVlRmllbGQsIE9wZXJhdG9yLmVxdWFsLCB0aGlzLnZhbHVlLnRvU3RyaW5nKCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycyA9IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKHRoaXMuY29udHJvbC52YWx1ZUZpZWxkLCBPcGVyYXRvci5lcXVhbCwgdGhpcy52YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tb2RpZnlGaWx0ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWxsb3cgPSBhd2FpdCB0aGlzLmNvbnRyb2wubW9kaWZ5RmlsdGVyKGZpbHRlcnMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWxsb3cgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlU3RydWN0dXJlRGF0YVNvdXJjZShkYXRhU291cmNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UgPSBhd2FpdCB0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnMsIHRoaXMuZ2V0RHJvcGRvd25PcHRpb25zKClcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZUV2ZW50QWZ0ZXJHZXREYXRhRHJvcERvd24oZGF0YVNvdXJjZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlU3RydWN0dXJlRGF0YVNvdXJjZShkYXRhU291cmNlKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGFTb3VyY2UubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IHRoaXMuZGF0YVNvdXJjZVswXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xpY2tTdWJtaXRCdXR0b24oZXZ0LCBlbnRpdHlQaWNrZXJCb3g6IEVudGl0eVBpY2tlckJveENvbXBvbmVudCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVIaWRlKGV2dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRSb3dEYXRhKSB7XHJcbiAgICAgICAgICAgIGVudGl0eVBpY2tlckJveCAmJiBlbnRpdHlQaWNrZXJCb3guaGFuZGxlUGljayh0aGlzLnNlbGVjdGVkUm93RGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dGb3JtUGlja2VyID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVTdHJ1Y3R1cmVEYXRhU291cmNlKHNvdXJjZXM6IGFueVtdKSB7XHJcbiAgICAgICAgaWYgKHNvdXJjZXMgIT0gbnVsbCAmJiBzb3VyY2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgYXJyID0gW107XHJcbiAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2Ygc291cmNlcykge1xyXG4gICAgICAgICAgICAgICAgaXRlbSA9IHRoaXMucmVTdHJ1Y3R1cmVJdGVtT2JqZWN0KGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgYXJyLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IGFycjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZVN0cnVjdHVyZUl0ZW1PYmplY3QoaXRlbSk6IFNlbGVjdEl0ZW0ge1xyXG4gICAgICAgIGNvbnN0IHRlbXA6IFNlbGVjdEl0ZW0gPSB7IHZhbHVlOiBpdGVtIH07XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5mdW5jR2V0TGFiZWwpIHtcclxuICAgICAgICAgICAgdGVtcC5sYWJlbCA9IHRoaXMuY29udHJvbC5mdW5jR2V0TGFiZWwoaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0ZW1wLmxhYmVsID0gaXRlbVt0aGlzLmNvbnRyb2wuZGlzcGxheUZpZWxkXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGVtcC52YWx1ZS5fZHJvcGRvd252YWx1ZSA9IHRoaXMuY29udHJvbC52YWx1ZUZpZWxkO1xyXG4gICAgICAgIHJldHVybiB0ZW1wO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERhdGFTZWxlY3RlZFZhbHVlKG9iajogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG9iaiAhPSBudWxsICYmIG9iai5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyczogRmlsdGVyW10gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmNvcmVWZXJzaW9uID09IEVudW1Db3JlVmVyc2lvbi5WNCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2godGhpcy5uZXdGaWx0ZXJWNCh0aGlzLmNvbnRyb2wudmFsdWVGaWVsZCwgT3BlcmF0b3IuaW4sIG9iai5qb2luKCcsJykpKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2godGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sLnZhbHVlRmllbGQsIE9wZXJhdG9yLmluLCBvYmopKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tb2RpZnlGaWx0ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jb250cm9sLm1vZGlmeUZpbHRlcihmaWx0ZXJzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgYXBwZW5kRGVmYXVsdEZpbHRlcihmaWx0ZXJzLCB0aGlzLmNvbnRyb2wuZGVmYXVsdEZpbHRlcnMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXREcm9wZG93bk9wdGlvbnMoKVxyXG4gICAgICAgICAgICAgICAgICAgICkudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVFdmVudEFmdGVyR2V0RGF0YURyb3BEb3duKHJlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVTdHJ1Y3R1cmVEYXRhU291cmNlKHJlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0cyA9IHRoaXMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ID0gdGhpcy5kYXRhU291cmNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob2JqICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZmlsdGVycyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wuY29yZVZlcnNpb24gPT0gRW51bUNvcmVWZXJzaW9uLlY0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlclY0KHRoaXMuY29udHJvbC52YWx1ZUZpZWxkLCBPcGVyYXRvci5lcXVhbCwgb2JqLnRvU3RyaW5nKCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycyA9IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKHRoaXMuY29udHJvbC52YWx1ZUZpZWxkLCBPcGVyYXRvci5lcXVhbCwgb2JqKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLm1vZGlmeUZpbHRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNvbnRyb2wubW9kaWZ5RmlsdGVyKGZpbHRlcnMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnMsIHRoaXMuZ2V0RHJvcGRvd25PcHRpb25zKClcclxuICAgICAgICAgICAgICAgICAgICApLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVFdmVudEFmdGVyR2V0RGF0YURyb3BEb3duKHJlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlU3RydWN0dXJlRGF0YVNvdXJjZShyZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzID0gdGhpcy5kYXRhU291cmNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ID0gdGhpcy5kYXRhU291cmNlWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5jYWxsQmFjayAmJiB0aGlzLmNvbnRyb2wuY2FsbEJhY2suc2VsZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLmNhbGxCYWNrLnNlbGVjdCh0aGlzLnNlbGVjdGVkVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmhhc1ZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5nZXREYXRhU2VsZWN0ZWRWYWx1ZShvYmopXHJcbiAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUoKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc1ZhbHVlICYmICF0aGlzLmlzRmlyZWRSZWFkeSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNGaXJlZFJlYWR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBIw6BtIHJlYWR5IG7DoHkgY2jhu4kgQ+G6pk4gRMOZTkcgdHJvbmcgdHLGsOG7nW5nIGjhu6NwIGF1dG9jb21wbGV0ZS1waWNrZXIgY8OzIHZhbHVlID0+IETDuW5nIMSR4buDIGzhuqV5IGThu68gbGnhu4d1IGPDoWMgY29tcG9uZW50IGNvblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIE7hur91IGPDsyB0csaw4budbmcgaOG7o3AgbsOgbyBraMOhYyB0aMOsIGPhuqduIHBo4bqjaSB44butIGzDvSBraMOhY1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25SZWFkeS5lbWl0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2VCYXNlID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgICB9XHJcbn1cclxuIl19