tnx-shared 5.0.33 → 5.0.35

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.
Files changed (44) hide show
  1. package/bundles/tnx-shared.umd.js +140 -100
  2. package/bundles/tnx-shared.umd.js.map +1 -1
  3. package/bundles/tnx-shared.umd.min.js +1 -1
  4. package/bundles/tnx-shared.umd.min.js.map +1 -1
  5. package/components/autocomplete-picker/autocomplete-picker.component.d.ts.map +1 -1
  6. package/components/dropdown/dropdown.component.d.ts.map +1 -1
  7. package/esm2015/components/access-denied-component/access-denied-v1/access-denied-v1.component.js +1 -1
  8. package/esm2015/components/autocomplete-picker/autocomplete-picker.component.js +34 -6
  9. package/esm2015/components/common-app-component/app-topbar-v1/app-topbar-v1.component.js +1 -1
  10. package/esm2015/components/common-app-component/app-topbar-v2/app-topbar-v2.component.js +1 -1
  11. package/esm2015/components/common-app-component/app.topbar.component.js +1 -1
  12. package/esm2015/components/common-app-component/common-app-component.js +3 -3
  13. package/esm2015/components/crud/advance-search/advance-search.component.js +1 -1
  14. package/esm2015/components/crud/crud-form/crud-form.component.js +4 -5
  15. package/esm2015/components/dropdown/dropdown.component.js +2 -1
  16. package/esm2015/components/file-explorer/services/file-explorer-new.service.js +2 -2
  17. package/esm2015/components/file-explorer/services/file-explorer.service.js +3 -3
  18. package/esm2015/components/file-explorer/services/my-drive.service.js +2 -2
  19. package/esm2015/components/not-found/not-found.component.js +1 -1
  20. package/esm2015/components/query-builders/query-builder/query-builder.component.js +1 -1
  21. package/esm2015/components/report-queue/report-queue.component.js +3 -3
  22. package/esm2015/components/splash-component/splash-component-v1/splash-component-v1.component.js +1 -1
  23. package/esm2015/components/splash-component/splash-component-v2/splash-component-v2.component.js +1 -1
  24. package/esm2015/components/splash-component/splash-component.component.js +1 -1
  25. package/esm2015/components/tn-tabview/tn-tabview.component.js +1 -1
  26. package/esm2015/components/user-picker/user-picker-box/user-picker-box.component.js +1 -1
  27. package/esm2015/components/workflow/services/entity-workflow-setting.service.js +2 -2
  28. package/esm2015/components/workflow/workflow-picker/workflow-picker.component.js +1 -1
  29. package/esm2015/components/workflow/workflow-setting-new/workflow-setting-new.component.js +1 -1
  30. package/esm2015/services/base.service.js +2 -2
  31. package/esm2015/services/common.service.js +3 -3
  32. package/esm2015/services/export.service.js +2 -2
  33. package/esm2015/services/file-object-v4.service.js +2 -2
  34. package/esm2015/services/print.service.js +2 -2
  35. package/esm2015/services/signalr.service.js +2 -2
  36. package/esm2015/services/template-text-v4.service.js +1 -1
  37. package/esm2015/services/template.service.js +2 -2
  38. package/esm2015/services/templateinstance.service.js +2 -2
  39. package/esm2015/services/user-v5.service.js +1 -1
  40. package/fesm2015/tnx-shared.js +77 -49
  41. package/fesm2015/tnx-shared.js.map +1 -1
  42. package/package.json +2 -2
  43. package/services/template-text-v4.service.d.ts.map +1 -1
  44. package/tnx-shared.metadata.json +1 -1
@@ -621,6 +621,7 @@ export class DropdownComponent extends ComponentBase {
621
621
  return;
622
622
  }
623
623
  const defaultInput = this.multiSelect.filterInputChild.nativeElement;
624
+ console.log(defaultInput);
624
625
  this._insertTextboxAndFocus(defaultInput);
625
626
  this.onShowSmartEvent.emit(evt);
626
627
  }
@@ -706,4 +707,4 @@ DropdownComponent.propDecorators = {
706
707
  valueChange: [{ type: Output }],
707
708
  adjustValue: [{ type: Output }]
708
709
  };
709
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hILE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVELE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN0RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0YsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RCxPQUFP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TixNQUFNO2lDQUNOLE1BQU07MEJBQ04sTUFBTTswQkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEluamVjdG9yLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEZXZpY2VEZXRlY3RvclNlcnZpY2UgfSBmcm9tICduZ3gtZGV2aWNlLWRldGVjdG9yJztcclxuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgU2VsZWN0SXRlbSB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IERyb3Bkb3duIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvZHJvcGRvd24nO1xyXG5pbXBvcnQgeyBNdWx0aVNlbGVjdCB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL211bHRpc2VsZWN0JztcclxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50QmFzZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvYmFzZS9jb21wb25lbnQtYmFzZSc7XHJcbmltcG9ydCB7IEZvcm1TdGF0ZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvY29uc3RhbnRzJztcclxuaW1wb3J0IHsgRHJvcGRvd25Db250cm9sU2NoZW1hLCBEcm9wZG93bk9wdGlvbnMsIE9wZXJhdG9yIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9mb3JtLXNjaGVtYSc7XHJcbmltcG9ydCB7IEZpbHRlciB9IGZyb20gJy4uLy4uL21vZGVscy9ncmlkLWluZm8nO1xyXG5pbXBvcnQgeyBDcnVkU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NydWQuc2VydmljZSc7XHJcbmltcG9ydCB7IE1hc3RlckRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWFzdGVyLWRhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7IGFwcGVuZERlZmF1bHRGaWx0ZXIgfSBmcm9tICcuLi8uLi91dGlscy9jb21tb24nO1xyXG5pbXBvcnQgeyBEcm9wZG93blNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2Ryb3Bkb3duLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2Ryb3Bkb3duJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9kcm9wZG93bi5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbQ29tcG9uZW50Q29udGV4dFNlcnZpY2VdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEcm9wZG93bkNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2VsJykgZWw6IEVsZW1lbnRSZWY7XHJcbiAgICBAVmlld0NoaWxkKCdpbnB1dE1hc2snKSBpbnB1dDogRWxlbWVudFJlZjtcclxuICAgIEBWaWV3Q2hpbGQoRHJvcGRvd24pIGRyb3Bkb3duOiBEcm9wZG93bjtcclxuICAgIEBWaWV3Q2hpbGQoTXVsdGlTZWxlY3QpIG11bHRpU2VsZWN0OiBNdWx0aVNlbGVjdDtcclxuXHJcbiAgICBASW5wdXQoKSBzZXQgc2hvd0NsZWFyKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wuc2hvd0NsZWFyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5zaG93Q2xlYXIgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgZGlzYWJsZURpc3BsYXlGaWVsZFNlcnZlclNlYXJjaCA9IGZhbHNlO1xyXG5cclxuICAgIEBJbnB1dCgpIHNldCBmaWx0ZXIodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29udHJvbC5maWx0ZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sLmZpbHRlciA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIEBJbnB1dCgpIGNvbnRyb2w6IERyb3Bkb3duQ29udHJvbFNjaGVtYSA9IG5ldyBEcm9wZG93bkNvbnRyb2xTY2hlbWEoKTtcclxuICAgIEBJbnB1dCgpIGRlZmF1bHRMYWJlbCA9ICcnO1xyXG4gICAgQElucHV0KCkgYXBwZW5kVG86IGFueSA9ICdib2R5JztcclxuICAgIEBJbnB1dCgpIHNldCBkYXRhU291cmNlKHZhbHVlOiBhbnlbXSkge1xyXG4gICAgICAgIHRoaXMuYmluZGluZ0RhdGFTb3VyY2UodmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3JldHVyblZhbHVlICE9IHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgLy8gZmlyZSBldmVudCDEkWnhu4F1IGNo4buJbmggdmFsdWUgdOG7qyBbdmFsdWU6IGd1aWRdID0+IHtbZmllbGRWYWx1ZV06IFt2YWx1ZTogZ3VpZF0sIC4uLlsxIHPhu5EgdHLGsOG7nW5nIGtow6FjIG7hu69hIHRyb25nIGRhdGFzb3VyY2VdfVxyXG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkVmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBkZWZhdWx0U2VsZWN0ZWRTdHlsZUNsYXNzID0gJ2N1c3RvbS1zZWxlY3QtaXRlbSc7XHJcbiAgICBfaXRlbVNlbGVjdGVkU3R5bGVDbGFzcyA9IHRoaXMuZGVmYXVsdFNlbGVjdGVkU3R5bGVDbGFzcztcclxuICAgIEBJbnB1dCgpIHNldCBpdGVtU2VsZWN0ZWRTdHlsZUNsYXNzKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5faXRlbVNlbGVjdGVkU3R5bGVDbGFzcyA9IGAke3RoaXMuZGVmYXVsdFNlbGVjdGVkU3R5bGVDbGFzc30gJHt2YWx1ZX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5faXRlbVNlbGVjdGVkU3R5bGVDbGFzcyA9IGAke3RoaXMuZGVmYXVsdFNlbGVjdGVkU3R5bGVDbGFzc30gJHt2YWx1ZX1gO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBAT3V0cHV0KCkgb25DaGFuZ2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uRHJvcGRvd25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uU2hvdyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uU2hvd1NtYXJ0RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvbkhpZGUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvbkhpZGVTbWFydEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25Gb2N1cyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uQmx1ciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uUmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvbkRhdGFTb3VyY2VMb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIGFkanVzdFZhbHVlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgZGF0YVNvdXJjZUludGVybmFsID0gW107XHJcbiAgICBzZWxlY3RlZFZhbHVlQmVmb3JlOiBhbnk7XHJcbiAgICBfdmFsdWU6IGFueTtcclxuICAgIF9yZXR1cm5WYWx1ZTogYW55O1xyXG4gICAgZnVuY1JldHVyblZhbHVlOiAodmFsdWUpID0+IHt9ID0gdmFsdWUgPT4gdmFsdWU7XHJcbiAgICB0b29sdGlwOiBzdHJpbmc7XHJcbiAgICBoaWRlVHJhbnNpdGlvbk9wdGlvbnMgPSAnMTk1bXMgZWFzZS1pbic7XHJcbiAgICBzaG93VHJhbnNpdGlvbk9wdGlvbnMgPSAnMjI1bXMgZWFzZS1vdXQnO1xyXG5cclxuICAgIGlucHV0RWxtOiBhbnk7XHJcbiAgICBnZXRGaWx0ZXJPblNlcnZlclNlYXJjaDogRnVuY3Rpb247XHJcbiAgICB2YWx1ZVNlYXJjaFNlcnZlciA9ICcnO1xyXG4gICAga2V5VXAgPSBuZXcgU3ViamVjdDxLZXlib2FyZEV2ZW50PigpO1xyXG4gICAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgICBfaGFzTG9hZGVkRGF0YXNvdXJjZSA9IGZhbHNlO1xyXG5cclxuICAgIHNob3dRdWlja0FkZEZvcm0gPSBmYWxzZTtcclxuICAgIGZvcm1Nb2RlbDogYW55ID0ge307XHJcblxyXG4gICAgZmxhc2hDYWNoZVBhcmVudDogYW55W10gPSBbXTtcclxuICAgIGRyb3Bkb3duT3B0aW9ucyA9IFtdO1xyXG4gICAgZGVsYXlGaWx0ZXI6IG51bWJlciA9IDEwMDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIF9kcm9wRG93blNlcnZpY2U6IERyb3Bkb3duU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9kZXZpY2VEZXRlY3RvclNlcnZpY2U6IERldmljZURldGVjdG9yU2VydmljZSxcclxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgX2NydWRTZXJ2aWNlOiBDcnVkU2VydmljZVxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuY29udHJvbC5fY29tcG9uZW50ID0gdGhpcztcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLnBsYWNlaG9sZGVyID09IG51bGwgJiYgdGhpcy5jb250cm9sLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5wbGFjZWhvbGRlciA9ICdDaMawYSBjaOG7jW4gYuG6o24gZ2hpJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0U2V0dGluZygpO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5pc1NlcnZlckxvYWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlRmlsdGVyRnVuY3Rpb24oKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5rZXlVcC5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgIG1hcChldmVudCA9PiAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKSxcclxuICAgICAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoNTAwKSxcclxuICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXHJcbiAgICAgICAgICAgICAgICApLnN1YnNjcmliZSh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2V0RGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXREYXRhKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5jb250cm9sLmxvYWRPbkluaXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2dldERhdGEoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNEZXNrdG9wKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5oaWRlVHJhbnNpdGlvbk9wdGlvbnMgPSB0aGlzLnNob3dUcmFuc2l0aW9uT3B0aW9ucyA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXREZWZhdWx0U2V0dGluZygpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLmlzVHJlZSkge1xyXG4gICAgICAgICAgICB0aGlzLmRlbGF5RmlsdGVyID0gMjAwO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY29udHJvbC5mdW5jR2V0TGFiZWwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5mdW5jR2V0TGFiZWwgPSBpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5fcHJlZml4ICsgaXRlbVt0aGlzLmNvbnRyb2wuZGlzcGxheUZpZWxkXTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jb250cm9sLmZ1bmNHZXRMYWJlbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLmZ1bmNHZXRMYWJlbCA9IGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW3RoaXMuY29udHJvbC5kaXNwbGF5RmllbGRdO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wuZ2VuZXJhdGVUb29sdGlwICYmICF0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sLmdlbmVyYXRlVG9vbHRpcCA9IHRoaXMuY29udHJvbC5mdW5jR2V0TGFiZWw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLnJldHVyblR5cGUgPT0gJ3ZhbHVlJykge1xyXG4gICAgICAgICAgICB0aGlzLmZ1bmNSZXR1cm5WYWx1ZSA9ICh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5tYXAoaXRlbSA9PiBpdGVtW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5mdW5jUmV0dXJuVmFsdWUgPSB2YWx1ZSA9PiB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWxsUGFyZW50KHJlc3VsdCwgcGFyZW50SWQpIHtcclxuICAgICAgICBpZiAodGhpcy5mbGFzaENhY2hlUGFyZW50LnNvbWUocSA9PiBxLnZhbHVlLmlkID09IHBhcmVudElkKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGl0ZW1QYXJlbnQgPSB0aGlzLmRyb3Bkb3duT3B0aW9ucy5maW5kKHEgPT4gcS52YWx1ZS5pZCA9PSBwYXJlbnRJZCk7XHJcbiAgICAgICAgaWYgKGl0ZW1QYXJlbnQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtQWRkID0ge1xyXG4gICAgICAgICAgICAgICAgLi4uaXRlbVBhcmVudCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiB0aGlzLmNvbnRyb2wuZGlzYWJsZWRQYXJlbnRJdGVtXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGl0ZW1BZGQpO1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleEV4aXN0ID0gdGhpcy5mbGFzaENhY2hlUGFyZW50LmZpbmRJbmRleChxID0+IHEudmFsdWUuX2xldmVsID09IGl0ZW1BZGQudmFsdWUuX2xldmVsKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4RXhpc3QgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mbGFzaENhY2hlUGFyZW50W2luZGV4RXhpc3RdID0gaXRlbUFkZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmxhc2hDYWNoZVBhcmVudC5wdXNoKGl0ZW1BZGQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBM4bqleSB0aMOqbSBi4bqjbiBnaGkgY2hhIGPhu6dhIGLhuqNuIGdoaSBjaGFcclxuICAgICAgICAgICAgcGFyZW50SWQgPSB0aGlzLmdldFBhcmVudElkRnJvbUl0ZW0oaXRlbVBhcmVudCk7XHJcbiAgICAgICAgICAgIGlmIChwYXJlbnRJZCAhPSB0aGlzLmd1aWRFbXB0eSAmJiBwYXJlbnRJZCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldEFsbFBhcmVudChyZXN1bHQsIHBhcmVudElkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhbHJlYWR5SGFzUGFyZW50KG9wdGlvbnM6IGFueVtdLCBpbmRleFN0YXJ0OiBudW1iZXIsIHBhcmVudElkOiBzdHJpbmcsIGxldmVsOiBudW1iZXIpIHtcclxuICAgICAgICB3aGlsZSAoaW5kZXhTdGFydCA+IC0xKSB7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zW2luZGV4U3RhcnRdLnZhbHVlLmlkID09IHBhcmVudElkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChvcHRpb25zW2luZGV4U3RhcnRdLnZhbHVlLmxldmVsID09IGxldmVsICYmIHRoaXMuZ2V0UGFyZW50SWRGcm9tSXRlbShvcHRpb25zW2luZGV4U3RhcnRdKSAhPSBwYXJlbnRJZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmxhc2hDYWNoZVBhcmVudC5zb21lKHEgPT4gcS52YWx1ZS5pZCA9PSBwYXJlbnRJZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaW5kZXhTdGFydC0tO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRQYXJlbnRJZEZyb21JdGVtKGl0ZW0pIHtcclxuICAgICAgICByZXR1cm4gaXRlbS52YWx1ZVt0aGlzLmNvbnRyb2wuZmllbGRUcmVlXTtcclxuICAgIH1cclxuXHJcbiAgICBtb2RpZnlPcHRpb25XaGVuRmlsdGVyID0gKG9wdGlvbnMpID0+IHtcclxuICAgICAgICB0aGlzLmRyb3Bkb3duT3B0aW9ucyA9IHRoaXMuZHJvcGRvd24uX29wdGlvbnM7XHJcbiAgICAgICAgdGhpcy5fbW9kaWZ5T3B0aW9uV2hlbkZpbHRlcihvcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICBtb2RpZnlPcHRpb25XaGVuRmlsdGVyTXVsdGlwbGUgPSAob3B0aW9ucykgPT4ge1xyXG4gICAgICAgIHRoaXMuZHJvcGRvd25PcHRpb25zID0gdGhpcy5tdWx0aVNlbGVjdC5fb3B0aW9ucztcclxuICAgICAgICB0aGlzLl9tb2RpZnlPcHRpb25XaGVuRmlsdGVyKG9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIF9tb2RpZnlPcHRpb25XaGVuRmlsdGVyKG9wdGlvbnMpIHtcclxuICAgICAgICB0aGlzLmZsYXNoQ2FjaGVQYXJlbnQgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgcGFyZW50SWQgPSB0aGlzLmdldFBhcmVudElkRnJvbUl0ZW0ob3B0aW9uc1tpXSk7XHJcbiAgICAgICAgICAgIGlmIChwYXJlbnRJZCAhPSB0aGlzLmd1aWRFbXB0eSAmJiBwYXJlbnRJZCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRzID0gW107XHJcbiAgICAgICAgICAgICAgICAvLyBLaeG7g20gdHJhIGPDoWMgYuG6o24gZ2hpIHBow61hIHRyxrDhu5tjIHhlbSDEkcOjIGPDsyBi4bqjbiBnaGkgY2hhIGNoxrBhIChDaG8gxJHhur9uIGdoaSBn4bq3cCBi4bqjbiBnaGkgY8O5bmcgbGV2ZWwgbmjGsG5nIGtow6FjIHBhcmVudElkKVxyXG4gICAgICAgICAgICAgICAgY29uc3QgaGFzUGFyZW50ID0gdGhpcy5hbHJlYWR5SGFzUGFyZW50KG9wdGlvbnMsIGkgLSAxLCBwYXJlbnRJZCwgb3B0aW9uc1tpXS5sZXZlbCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWhhc1BhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsUGFyZW50KHBhcmVudHMsIHBhcmVudElkKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc3BsaWNlKGksIDAsIC4uLnBhcmVudHMucmV2ZXJzZSgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaSArPSBwYXJlbnRzLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlRmlsdGVyRnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5zZWFyY2hGaWVsZCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5zZWFyY2hGaWVsZCA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuY29udHJvbC5kaXNhYmxlRGlzcGxheUZpZWxkU2VydmVyU2VhcmNoKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jb250cm9sLnNlYXJjaEZpZWxkLnNvbWUoaXRlbSA9PiBpdGVtID09IHRoaXMuY29udHJvbC5kaXNwbGF5RmllbGQpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wuc2VhcmNoRmllbGQucHVzaCh0aGlzLmNvbnRyb2wuZGlzcGxheUZpZWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLnNlYXJjaEZpZWxkLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0RmlsdGVyT25TZXJ2ZXJTZWFyY2ggPSB2YWx1ZSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6IHRoaXMuY29udHJvbC5zZWFyY2hGaWVsZFswXSwgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sIHZhbHVlOiBKU09OLnN0cmluZ2lmeSh2YWx1ZSlcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmdldEZpbHRlck9uU2VydmVyU2VhcmNoID0gdmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IEZpbHRlcih7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9naWM6ICdvcicsXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyczogW11cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdG1wVmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkU2VhcmNoIG9mIHRoaXMuY29udHJvbC5zZWFyY2hGaWVsZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5maWx0ZXJzLnB1c2goeyBmaWVsZDogZmllbGRTZWFyY2gsIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLCB2YWx1ZTogdG1wVmFsdWUgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXREYXRhKGZpbHRlclBhcmVudHM/OiBGaWx0ZXJbXSkge1xyXG4gICAgICAgIHRoaXMuX2dldERhdGEoZmlsdGVyUGFyZW50cyk7XHJcbiAgICB9XHJcblxyXG4gICAgYmluZGluZ0RhdGFTb3VyY2UobmV3U291cmNlOiBhbnlbXSwgZm9yY2U6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5fdmFsdWU7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICBsZXQgb2xkTGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgbGV0IG5ld0xlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgIGxldCBoYXZlU2VsZWN0ZWRWYWx1ZXMgPSB0cnVlO1xyXG4gICAgICAgICAgICBsZXQgbmV3VmFsdWUgPSBbXTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZSBpbnN0YW5jZW9mIEFycmF5ICYmIHRoaXMuX3ZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIG9sZExlbmd0aCA9IHRoaXMuX3ZhbHVlLmxlbmd0aDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGhhdmVTZWxlY3RlZFZhbHVlcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAobmV3U291cmNlICE9IG51bGwgJiYgbmV3U291cmNlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2hhc0xvYWRlZERhdGFzb3VyY2UgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYXJyID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIG5ld1NvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnJlU3RydWN0dXJlSXRlbU9iamVjdChpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaGF2ZVNlbGVjdGVkVmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc2VsZWN0ZWRJdGVtIG9mIHRoaXMuX3ZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmZ1bmNDb21wYXJlKGl0ZW0udmFsdWUsIHNlbGVjdGVkSXRlbSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0aGlzLmNvbnRyb2wuZnVuY0NvbXBhcmUoaXRlbS52YWx1ZSwgc2VsZWN0ZWRJdGVtW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlLnB1c2goaXRlbS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlSW50ZXJuYWwgPSBhcnI7XHJcbiAgICAgICAgICAgICAgICBpZiAobmV3VmFsdWUubGVuZ3RoID09IDBcclxuICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLmNvbnRyb2wubm90SW5DcnVkRm9ybVxyXG4gICAgICAgICAgICAgICAgICAgICYmIHRoaXMuY29udHJvbC5hdXRvRGlzcGxheUZpcnN0XHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IFthcnJbMF0udmFsdWVdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gbmV3VmFsdWU7XHJcbiAgICAgICAgICAgICAgICBuZXdMZW5ndGggPSBuZXdWYWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbCA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5faGFzTG9hZGVkRGF0YXNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG9sZExlbmd0aCAhPSBuZXdMZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVDaGFuZ2VkRXZlbnQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX3ZhbHVlICE9IG9sZFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGp1c3RWYWx1ZTJXYXlCaW5kaW5nKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKG5ld1NvdXJjZSAhPSBudWxsICYmIG5ld1NvdXJjZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9oYXNMb2FkZWREYXRhc291cmNlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFyciA9IFtdO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBuZXdTb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtID0gdGhpcy5yZVN0cnVjdHVyZUl0ZW1PYmplY3QoaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9sZFZhbHVlICE9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgb2xkVmFsdWUgIT09ICcnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmICh0aGlzLmNvbnRyb2wuZnVuY0NvbXBhcmUoaXRlbS52YWx1ZSwgb2xkVmFsdWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0aGlzLmNvbnRyb2wuZnVuY0NvbXBhcmUoaXRlbS52YWx1ZSwgb2xkVmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gaXRlbS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlSW50ZXJuYWwgPSBhcnI7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbHVlID09IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLmNvbnRyb2wubm90SW5DcnVkRm9ybVxyXG4gICAgICAgICAgICAgICAgICAgICYmIHRoaXMuY29udHJvbC5hdXRvRGlzcGxheUZpcnN0XHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IGFyclswXS52YWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZUludGVybmFsID0gW107XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9oYXNMb2FkZWREYXRhc291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBMxrB1IMO9IGlmIOG7nyBkxrDhu5tpIGtow7RuZyDEkcaw4bujYyDEkeG7lWkgdGjDoG5oIG9sZFZhbHVlICE9IHRoaXMuX3ZhbHVlXHJcbiAgICAgICAgICAgICAgICAvLyBWw6wgZ2nDoSB0cuG7iyBj4bunYSB0aGlzLl92YWx1ZSBz4bq9IMSRxrDhu6NjIGNvcnJlY3Rpbmcg4bufIHRyw6puIChpZCA9PiBvYmplY3QpIG7Dqm4gc28gc8Ohbmggc+G6vSBraMOhYyBuaGF1XHJcbiAgICAgICAgICAgICAgICBpZiAoKG9sZFZhbHVlICE9IG51bGwgJiYgdGhpcy5fdmFsdWUgPT0gbnVsbClcclxuICAgICAgICAgICAgICAgICAgICB8fCAob2xkVmFsdWUgPT0gbnVsbCAmJiB0aGlzLl92YWx1ZSAhPSBudWxsKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlQ2hhbmdlZEV2ZW50KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLl92YWx1ZSAhPSBvbGRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRqdXN0VmFsdWUyV2F5QmluZGluZygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZm9yY2UgfHwgdGhpcy5faGFzTG9hZGVkRGF0YXNvdXJjZSkge1xyXG4gICAgICAgICAgICB0aGlzLm9uUmVhZHkuZW1pdCh0aGlzLmNvbnRyb2wuZmllbGQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNoZWNrUmVhZHkoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRTZWxlY3RlZFZhbHVlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9oYXNMb2FkZWREYXRhc291cmNlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgICAgIGxldCBvbGRMZW5ndGggPSAwO1xyXG4gICAgICAgICAgICAgICAgbGV0IG5ld0xlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdmFsdWUgaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9sZExlbmd0aCA9IHRoaXMuX3ZhbHVlLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhU291cmNlSW50ZXJuYWwgIT0gbnVsbCAmJiB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBzZWxlY3RlZEl0ZW0gb2YgdGhpcy5fdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmZ1bmNDb21wYXJlKGl0ZW0udmFsdWUsIHNlbGVjdGVkSXRlbSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgdGhpcy5jb250cm9sLmZ1bmNDb21wYXJlKGl0ZW0udmFsdWUsIHNlbGVjdGVkSXRlbVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlLnB1c2goaXRlbS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBuZXdWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3TGVuZ3RoID0gbmV3VmFsdWUubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAob2xkTGVuZ3RoICE9IG5ld0xlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZUNoYW5nZWRFdmVudCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGp1c3RWYWx1ZTJXYXlCaW5kaW5nKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuX3ZhbHVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVNvdXJjZUludGVybmFsICE9IG51bGwgJiYgdGhpcy5kYXRhU291cmNlSW50ZXJuYWwubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2xkVmFsdWUgIT0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb2xkVmFsdWUgIT09ICcnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAodGhpcy5jb250cm9sLmZ1bmNDb21wYXJlKGl0ZW0udmFsdWUsIG9sZFZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHRoaXMuY29udHJvbC5mdW5jQ29tcGFyZShpdGVtLnZhbHVlLCBvbGRWYWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBpdGVtLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBMxrB1IMO9IGlmIOG7nyBkxrDhu5tpIGtow7RuZyDEkcaw4bujYyDEkeG7lWkgdGjDoG5oIG9sZFZhbHVlICE9IHRoaXMuX3ZhbHVlXHJcbiAgICAgICAgICAgICAgICAvLyBWw6wgZ2nDoSB0cuG7iyBj4bunYSB0aGlzLl92YWx1ZSBz4bq9IMSRxrDhu6NjIGNvcnJlY3Rpbmcg4bufIHRyw6puIChpZCA9PiBvYmplY3QpIG7Dqm4gc28gc8Ohbmggc+G6vSBraMOhYyBuaGF1XHJcbiAgICAgICAgICAgICAgICBpZiAoKG9sZFZhbHVlICE9IG51bGwgJiYgdGhpcy5fdmFsdWUgPT0gbnVsbClcclxuICAgICAgICAgICAgICAgICAgICB8fCAob2xkVmFsdWUgPT0gbnVsbCAmJiB0aGlzLl92YWx1ZSAhPSBudWxsKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlQ2hhbmdlZEV2ZW50KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkanVzdFZhbHVlMldheUJpbmRpbmcoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNoZWNrUmVhZHkoKTtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja1JlYWR5KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wub25BZGp1c3RlZFZhbHVlXHJcbiAgICAgICAgICAgICYmIHRoaXMuX2hhc0xvYWRlZERhdGFzb3VyY2VcclxuICAgICAgICAgICAgJiYgKCghdGhpcy5jb250cm9sLm11bHRpcGxlICYmIHRoaXMuX3ZhbHVlICE9IG51bGwpXHJcbiAgICAgICAgICAgICAgICB8fCAodGhpcy5jb250cm9sLm11bHRpcGxlICYmIHRoaXMuX3ZhbHVlICE9IG51bGwgJiYgdGhpcy5fdmFsdWUubGVuZ3RoID4gMCkpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlyZUFkanVzdFZhbHVlRXZlbnQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVTdHJ1Y3R1cmVJdGVtT2JqZWN0KGl0ZW0pOiBTZWxlY3RJdGVtIHtcclxuICAgICAgICBjb25zdCB0ZW1wOiBTZWxlY3RJdGVtID0ge1xyXG4gICAgICAgICAgICB2YWx1ZTogaXRlbSxcclxuICAgICAgICAgICAgZGlzYWJsZWQ6IGl0ZW0uZGlzYWJsZWRcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsKSB7XHJcbiAgICAgICAgICAgIHRlbXAubGFiZWwgPSB0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsKGl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGVtcC5sYWJlbCA9IGl0ZW1bdGhpcy5jb250cm9sLmRpc3BsYXlGaWVsZF0gfHwgaXRlbVsnbGFiZWwnXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGVtcC52YWx1ZS5fZHJvcGRvd252YWx1ZSA9IHRoaXMuY29udHJvbC52YWx1ZUZpZWxkO1xyXG4gICAgICAgIHJldHVybiB0ZW1wO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0Q29udHJvbCgpIHtcclxuICAgICAgICBpZiAodGhpcy5fdmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZUludGVybmFsID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuZmlyZUNoYW5nZWRFdmVudCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjbGVhckRhdGFzb3VyY2UoKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhU291cmNlSW50ZXJuYWwgPSBbXTtcclxuICAgICAgICB0aGlzLl9oYXNMb2FkZWREYXRhc291cmNlID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBfZ2V0RGF0YShmaWx0ZXJQYXJlbnRzPzogRmlsdGVyW10pIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgIGlmICghZmlsdGVyUGFyZW50cykgZmlsdGVyUGFyZW50cyA9IFtdO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9nZXREYXRhU291cmNlKGZpbHRlclBhcmVudHMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIF9nZXREYXRhU291cmNlKGZpbHRlckZyb21QYXJlbnRzOiBGaWx0ZXJbXSkge1xyXG4gICAgICAgIGNvbnN0IGZpbHRlcnMgPSBhd2FpdCB0aGlzLmZpbHRlclByb2Nlc3MoZmlsdGVyRnJvbVBhcmVudHMpO1xyXG4gICAgICAgIGlmIChmaWx0ZXJzID09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5iaW5kaW5nRGF0YVNvdXJjZShbXSwgZmFsc2UpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBkYXRhU291cmNlOiBhbnlbXTtcclxuICAgICAgICBjb25zdCBkcm9wZG93bk9wdGlvbnMgPSB0aGlzLmNyZWF0ZURyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2UgaW5zdGFuY2VvZiBNYXN0ZXJEYXRhU2VydmljZSkge1xyXG4gICAgICAgICAgICBkYXRhU291cmNlID0gYXdhaXQgdGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLmdyb3VwQ29kZSwgbnVsbCwgZmlsdGVycywgZHJvcGRvd25PcHRpb25zXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmlzVHJlZSkge1xyXG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZSA9IGF3YWl0IHRoaXMuY29udHJvbC5iYXNlU2VydmljZS5nZXRUcmVlRGF0YURyb3Bkb3duQnlGaWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVycywgdGhpcy5jb250cm9sLmZpZWxkVHJlZSwgdGhpcy5jb250cm9sLnZhbHVlUGFyZW50Um9vdFxyXG4gICAgICAgICAgICAgICAgICAgICwgZHJvcGRvd25PcHRpb25zXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZSA9IGF3YWl0IHRoaXMuY29udHJvbC5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzLCBkcm9wZG93bk9wdGlvbnNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fY3J1ZFNlcnZpY2UuZ2V0UmVmRGF0YShkYXRhU291cmNlLCBkcm9wZG93bk9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMuYmluZGluZ0RhdGFTb3VyY2UoZGF0YVNvdXJjZSwgdHJ1ZSk7XHJcbiAgICAgICAgLy8gTuG6v3UgZHJvcGRvd24gayBu4bqxbSB0cm9uZyBjcnVkIGZvcm0gdGjDrCBj4bqldSBow6xuaCBmaXJlQ2FsbEJhY2tJbnNpZGUgPSB0cnVlICht4bq3YyDEkeG7i25oKSDEkeG7gyBmaXJlIHRy4buxYyB0aeG6v3AgdOG7qyB0cm9uZyBjb21wb25lbnRcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLmZpcmVDYWxsQmFja0luc2lkZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmNhbGxiYWNrRGF0YUZpbmlzaCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLmNhbGxiYWNrRGF0YUZpbmlzaCg8YW55PntcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhU291cmNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGVsbTogdGhpc1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMub25EYXRhU291cmNlTG9hZGVkLmVtaXQoe1xyXG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZSxcclxuICAgICAgICAgICAgICAgIGVsbTogdGhpc1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBmaWx0ZXJQcm9jZXNzKGZpbHRlckZyb21QYXJlbnRzOiBGaWx0ZXJbXSkge1xyXG4gICAgICAgIGxldCBmaWx0ZXJzID0gZmlsdGVyRnJvbVBhcmVudHM7XHJcbiAgICAgICAgYXdhaXQgYXBwZW5kRGVmYXVsdEZpbHRlcihmaWx0ZXJzLCB0aGlzLmNvbnRyb2wuZGVmYXVsdEZpbHRlcnMpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLmlzU2VydmVyTG9hZCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZVNlYXJjaFNlcnZlcikge1xyXG4gICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRoaXMuZ2V0RmlsdGVyT25TZXJ2ZXJTZWFyY2godGhpcy52YWx1ZVNlYXJjaFNlcnZlcikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLm1vZGlmeUZpbHRlcikge1xyXG4gICAgICAgICAgICBjb25zdCBhbGxvdyA9IGF3YWl0IHRoaXMuY29udHJvbC5tb2RpZnlGaWx0ZXIoZmlsdGVycywgdGhpcyk7XHJcbiAgICAgICAgICAgIGlmIChhbGxvdyA9PT0gZmFsc2UpIGZpbHRlcnMgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZpbHRlcnM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVEcm9wZG93bk9wdGlvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBEcm9wZG93bk9wdGlvbnMoe1xyXG4gICAgICAgICAgICBmaWVsZFBhcmVudFRyZWVJdGVtOiB0aGlzLmNvbnRyb2wuZmllbGRQYXJlbnRUcmVlSXRlbSxcclxuICAgICAgICAgICAgZGlzcGxheUZpZWxkOiB0aGlzLmNvbnRyb2wuZGlzcGxheUZpZWxkLFxyXG4gICAgICAgICAgICB2YWx1ZUZpZWxkOiB0aGlzLmNvbnRyb2wudmFsdWVGaWVsZCxcclxuICAgICAgICAgICAgZmllbGRQbHVzOiB0aGlzLmNvbnRyb2wuZmllbGRQbHVzLFxyXG4gICAgICAgICAgICBmaWVsZFRyZWU6IHRoaXMuY29udHJvbC5maWVsZFRyZWUsXHJcbiAgICAgICAgICAgIGZ1bmNHZXRMYWJlbDogdGhpcy5jb250cm9sLmZ1bmNHZXRMYWJlbCxcclxuICAgICAgICAgICAgc29ydHM6IHRoaXMuY29udHJvbC5zb3J0cyxcclxuICAgICAgICAgICAgc29ydEZpZWxkOiB0aGlzLmNvbnRyb2wuc29ydEZpZWxkLFxyXG4gICAgICAgICAgICBzb3J0RGlyOiB0aGlzLmNvbnRyb2wuc29ydERpcixcclxuICAgICAgICAgICAgcGx1c1VybDogdGhpcy5jb250cm9sLnBsdXNVcmwsXHJcbiAgICAgICAgICAgIGNhbGxiYWNrRGF0YUZpbmlzaDogdGhpcy5jb250cm9sLmNhbGxiYWNrRGF0YUZpbmlzaCxcclxuICAgICAgICAgICAgaXNTZXJ2ZXJMb2FkOiB0aGlzLmNvbnRyb2wuaXNTZXJ2ZXJMb2FkLFxyXG4gICAgICAgICAgICByZWZGaWVsZHM6IHRoaXMuY29udHJvbC5yZWZGaWVsZHNcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQYW5lbENsYXNzKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuYXBwZW5kVG8gPT0gJ2JvZHknKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLmNvbnRyb2wucGFuZWxDbGFzc30gcC1maXhlZGA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2wucGFuZWxDbGFzcztcclxuICAgIH1cclxuXHJcbiAgICBnZXRWYWx1ZVJldHVybigpIHtcclxuICAgICAgICB0aGlzLl9yZXR1cm5WYWx1ZSA9IHRoaXMuZnVuY1JldHVyblZhbHVlKHRoaXMuX3ZhbHVlKTtcclxuICAgICAgICBpZiAoIXRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmdlbmVyYXRlVG9vbHRpcCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sdGlwID0gdGhpcy5jb250cm9sLmdlbmVyYXRlVG9vbHRpcCh0aGlzLl92YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoaXMudG9vbHRpcCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXAgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnRvb2x0aXAgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuVmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgY2hlY2tJbml0ZWRDb250cm9sKCkge1xyXG4gICAgICAgIC8vIE7hur91IGNoxrBhIGNo4bqheSBxdWEgaW5pdCB0aMOsIGsgZmlyZSBldmVudCBnw6wgY+G6o1xyXG4gICAgICAgIHJldHVybiAhIXRoaXMuY29udHJvbC5fY29tcG9uZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGFkanVzdFZhbHVlMldheUJpbmRpbmcoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrSW5pdGVkQ29udHJvbCgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdmFsdWVSZXR1cm4gPSB0aGlzLmdldFZhbHVlUmV0dXJuKCk7XHJcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlUmV0dXJuKTtcclxuICAgIH1cclxuXHJcbiAgICBmaXJlQ2hhbmdlZEV2ZW50KCkge1xyXG4gICAgICAgIC8vIE7hur91IGNoxrBhIGNo4bqheSBxdWEgaW5pdCB0aMOsIGsgZmlyZSBldmVudCBnw6wgY+G6o1xyXG4gICAgICAgIGlmICghdGhpcy5jaGVja0luaXRlZENvbnRyb2woKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHZhbHVlUmV0dXJuID0gdGhpcy5nZXRWYWx1ZVJldHVybigpO1xyXG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZVJldHVybik7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZWQubmV4dCh2YWx1ZVJldHVybik7XHJcbiAgICB9XHJcblxyXG4gICAgZmlyZUFkanVzdFZhbHVlRXZlbnQoKSB7XHJcbiAgICAgICAgLy8gTuG6v3UgY2jGsGEgY2jhuqF5IHF1YSBpbml0IHRow6wgayBmaXJlIGV2ZW50IGfDrCBj4bqjXHJcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrSW5pdGVkQ29udHJvbCgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdmFsdWVSZXR1cm4gPSB0aGlzLmdldFZhbHVlUmV0dXJuKCk7XHJcbiAgICAgICAgdGhpcy5hZGp1c3RWYWx1ZS5uZXh0KHZhbHVlUmV0dXJuKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZVNlbGVjdGVkKGV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLnNlbGVjdENoaWxkSXRlbSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50SWRzID0gW2V2ZW50Lml0ZW1WYWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF1dO1xyXG4gICAgICAgICAgICAgICAgLy8gTuG6v3UgaXRlbSDEkcaw4bujYyBjaOG7jW4gPT4gQ2jhu41uIGPhuqMgbmjhu69uZyBi4bqjbiBnaGkgY29uXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdmFsdWUuaW5kZXhPZihldmVudC5pdGVtVmFsdWUpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbC5mb3JFYWNoKHNvdXJjZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudElkID0gc291cmNlLnZhbHVlW3RoaXMuY29udHJvbC5maWVsZFRyZWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50SWRzLmluZGV4T2YocGFyZW50SWQpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZS5pbmRleE9mKHNvdXJjZS52YWx1ZSkgPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZS5wdXNoKHNvdXJjZS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZHMucHVzaChwYXJlbnRJZCwgc291cmNlLnZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgeyAvLyBpdGVtIMSRYW5nIGLhu4sgYuG7jyBjaOG7jW4gPT4gaOG7p3kgY2jhu41uIGPhuqMgbmjhu69uZyBi4bqjbiBnaGkgY29uXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlSW50ZXJuYWwuZm9yRWFjaChzb3VyY2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHNvdXJjZS52YWx1ZVt0aGlzLmNvbnRyb2wuZmllbGRUcmVlXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudElkcy5pbmRleE9mKHBhcmVudElkKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuX3ZhbHVlLmluZGV4T2Yoc291cmNlLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkcy5wdXNoKHBhcmVudElkLCBzb3VyY2UudmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZWRFdmVudCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUl0ZW0oZXZ0LCBzZWxlY3RlZEl0ZW0pIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLl92YWx1ZS5maWx0ZXIoaXRlbSA9PiBpdGVtICE9IHNlbGVjdGVkSXRlbSk7XHJcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlZEV2ZW50KCk7XHJcbiAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVCZWZvcmUgPSB0aGlzLl92YWx1ZTtcclxuICAgICAgICB0aGlzLm9uSGlkZVNtYXJ0RXZlbnQuZW1pdChldnQpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRHJvcGRvd25DbGlja0hhbmRsZXIoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5vbkRyb3Bkb3duQ2xpY2submV4dChldnQpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xpY2soJGV2ZW50KSB7XHJcbiAgICAgICAgaWYgKCRldmVudC50YXJnZXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaScgJiYgJGV2ZW50LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ3VpLWRyb3Bkb3duLWNsZWFyLWljb24nKSkge1xyXG4gICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICRldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvblNob3dIYW5kbGVyKGV2dCkge1xyXG4gICAgICAgIHRoaXMub25TaG93LmVtaXQoe1xyXG4gICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXHJcbiAgICAgICAgICAgIGV2ZW50OiBldnRcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoIXRoaXMuY29udHJvbC5pc1NlcnZlckxvYWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBkZWZhdWx0SW5wdXQgPSB0aGlzLmRyb3Bkb3duLmZpbHRlclZpZXdDaGlsZC5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIHRoaXMuX2luc2VydFRleHRib3hBbmRGb2N1cyhkZWZhdWx0SW5wdXQpO1xyXG4gICAgICAgIHRoaXMub25TaG93U21hcnRFdmVudC5lbWl0KGV2dCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25QYW5lbFNob3dIYW5kbGVyKGV2dCkge1xyXG4gICAgICAgIHRoaXMub25TaG93LmVtaXQoe1xyXG4gICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXHJcbiAgICAgICAgICAgIGV2ZW50OiBldnRcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVCZWZvcmUgPSB0aGlzLl92YWx1ZTtcclxuICAgICAgICBpZiAoIXRoaXMuY29udHJvbC5pc1NlcnZlckxvYWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBkZWZhdWx0SW5wdXQgPSB0aGlzLm11bHRpU2VsZWN0LmZpbHRlcklucHV0Q2hpbGQubmF0aXZlRWxlbWVudDtcclxuICAgICAgICB0aGlzLl9pbnNlcnRUZXh0Ym94QW5kRm9jdXMoZGVmYXVsdElucHV0KTtcclxuICAgICAgICB0aGlzLm9uU2hvd1NtYXJ0RXZlbnQuZW1pdChldnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2luc2VydFRleHRib3hBbmRGb2N1cyhkZWZhdWx0SW5wdXQpIHtcclxuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnaGlkZScpO1xyXG4gICAgICAgIC8vIGRlZmF1bHRJbnB1dC5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgZGVmYXVsdElucHV0LnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCwgZGVmYXVsdElucHV0KTtcclxuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkhpZGVIYW5kbGVyKGV2dCkge1xyXG4gICAgICAgIHRoaXMub25IaWRlLmVtaXQoe1xyXG4gICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXHJcbiAgICAgICAgICAgIGV2ZW50OiBldnRcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWVCZWZvcmUgIT0gdGhpcy5fdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWVCZWZvcmUgPT0gbnVsbCAmJiB0aGlzLl92YWx1ZSAmJiB0aGlzLl92YWx1ZS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZUJlZm9yZSA9IHRoaXMuX3ZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZUJlZm9yZSA9IHRoaXMuX3ZhbHVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbkhpZGVTbWFydEV2ZW50LmVtaXQoZXZ0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVGb2N1cyhldnQpIHtcclxuICAgICAgICB0aGlzLm9uRm9jdXMuZW1pdChldnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUJsdXIoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5vbkJsdXIuZW1pdChldnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dGb3JtUXVpY2tBZGQoKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtTW9kZWwuZGF0YSA9IHsgLi4udGhpcy5jb250cm9sLmluaXREYXRhIH07XHJcbiAgICAgICAgdGhpcy5mb3JtTW9kZWwuZm9ybVN0YXRlID0gRm9ybVN0YXRlLkFERDtcclxuICAgICAgICB0aGlzLnNob3dRdWlja0FkZEZvcm0gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUNhbmNlbCgpIHtcclxuICAgICAgICB0aGlzLnNob3dRdWlja0FkZEZvcm0gPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVTYXZlZCgpIHtcclxuICAgICAgICB0aGlzLnNob3dRdWlja0FkZEZvcm0gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9nZXREYXRhKCk7XHJcbiAgICB9XHJcbn1cclxuIl19
710
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hILE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVELE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN0RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0YsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFROUQsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGFBQWE7SUFvRmhELFlBQ1ksZ0JBQWlDLEVBQ2pDLHNCQUE2QyxFQUNyRCxRQUFrQixFQUNsQixZQUF5QjtRQUV6QixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFMUixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWlCO1FBQ2pDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBdUI7UUF6RWhELG9DQUErQixHQUFHLEtBQUssQ0FBQztRQU94QyxZQUFPLEdBQTBCLElBQUkscUJBQXFCLEVBQUUsQ0FBQztRQUM3RCxpQkFBWSxHQUFHLEVBQUUsQ0FBQztRQUNsQixhQUFRLEdBQVEsTUFBTSxDQUFDO1FBZWhDLDhCQUF5QixHQUFHLG9CQUFvQixDQUFDO1FBQ2pELDRCQUF1QixHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQztRQVUvQyxjQUFTLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFDdkQsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQzFDLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ2pDLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDM0MsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDakMscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUMzQyxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNsQyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNqQyxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNsQyx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQzdDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUN0QyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFaEQsdUJBQWtCLEdBQUcsRUFBRSxDQUFDO1FBSXhCLG9CQUFlLEdBQWtCLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO1FBRWhELDBCQUFxQixHQUFHLGVBQWUsQ0FBQztRQUN4QywwQkFBcUIsR0FBRyxnQkFBZ0IsQ0FBQztRQUl6QyxzQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFDdkIsVUFBSyxHQUFHLElBQUksT0FBTyxFQUFpQixDQUFDO1FBRXJDLHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQUU3QixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDekIsY0FBUyxHQUFRLEVBQUUsQ0FBQztRQUVwQixxQkFBZ0IsR0FBVSxFQUFFLENBQUM7UUFDN0Isb0JBQWUsR0FBRyxFQUFFLENBQUM7UUFDckIsZ0JBQVcsR0FBVyxHQUFHLENBQUM7UUFzSDFCLDJCQUFzQixHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDakMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUM5QyxJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFBO1FBRUQsbUNBQThCLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUN6QyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDO1lBQ2pELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUE7SUFySEQsQ0FBQztJQXBGRCxJQUFhLFNBQVMsQ0FBQyxLQUFjO1FBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRTtZQUN6QixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7U0FDbEM7SUFDTCxDQUFDO0lBSUQsSUFBYSxNQUFNLENBQUMsS0FBYztRQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1NBQy9CO0lBQ0wsQ0FBQztJQUlELElBQWEsVUFBVSxDQUFDLEtBQVk7UUFDaEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFhLEtBQUssQ0FBQyxLQUFVO1FBQ3pCLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxLQUFLLEVBQUU7WUFDNUIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ2hELElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO2FBQ3BCOztnQkFDSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUN6Qiw0SEFBNEg7WUFDNUgsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7U0FDM0I7SUFDTCxDQUFDO0lBR0QsSUFBYSxzQkFBc0IsQ0FBQyxLQUFhO1FBQzdDLElBQUksS0FBSyxFQUFFO1lBQ1AsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixJQUFJLEtBQUssRUFBRSxDQUFDO1NBQy9FO2FBQ0k7WUFDRCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsR0FBRyxJQUFJLENBQUMseUJBQXlCLElBQUksS0FBSyxFQUFFLENBQUM7U0FDL0U7SUFDTCxDQUFDO0lBK0NELFFBQVE7UUFDSixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDL0IsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7WUFDM0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsbUJBQW1CLENBQUM7U0FDbEQ7UUFDRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFO1lBQzFCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2dCQUM1QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUMvQixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBRSxLQUFLLENBQUMsTUFBMkIsQ0FBQyxLQUFLLENBQUMsRUFDdEQsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUNqQixvQkFBb0IsRUFBRSxDQUN6QixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDaEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNwQixDQUFDLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDbkI7aUJBQ0ksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRTtnQkFDOUIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQ25CO1NBQ0o7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQzFDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO1NBQ2hFO0lBQ0wsQ0FBQztJQUVELGlCQUFpQjtRQUNiLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7WUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFO2dCQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsRUFBRTtvQkFDL0IsT0FBTyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUMxRCxDQUFDLENBQUM7YUFDTDtTQUNKO2FBQ0k7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxFQUFFO29CQUMvQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUMzQyxDQUFDLENBQUM7YUFDTDtTQUNKO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7WUFDekQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7U0FDNUQ7UUFFRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxJQUFJLE9BQU8sRUFBRTtZQUNwQyxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQzdCLElBQUksS0FBSyxJQUFJLElBQUk7b0JBQUUsT0FBTyxJQUFJLENBQUM7Z0JBQy9CLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7b0JBQ3ZCLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7aUJBQzNEO2dCQUNELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDMUMsQ0FBQyxDQUFDO1NBQ0w7YUFDSTtZQUNELElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7U0FDekM7SUFDTCxDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQU0sRUFBRSxRQUFRO1FBQ3pCLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxFQUFFO1lBQ3pELE9BQU87U0FDVjtRQUNELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksUUFBUSxDQUFDLENBQUM7UUFDMUUsSUFBSSxVQUFVLElBQUksSUFBSSxFQUFFO1lBQ3BCLE1BQU0sT0FBTyxtQ0FDTixVQUFVLEtBQ2IsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEdBQzVDLENBQUM7WUFDRixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3JCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hHLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUNqQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLEdBQUcsT0FBTyxDQUFDO2FBQy9DO2lCQUNJO2dCQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDdkM7WUFFRCx1Q0FBdUM7WUFDdkMsUUFBUSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNoRCxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLFFBQVEsSUFBSSxJQUFJLEVBQUU7Z0JBQ2hELElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2FBQ3ZDO1NBQ0o7SUFDTCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsT0FBYyxFQUFFLFVBQWtCLEVBQUUsUUFBZ0IsRUFBRSxLQUFhO1FBQ2hGLE9BQU8sVUFBVSxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ3BCLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksUUFBUSxFQUFFO2dCQUMxQyxPQUFPLElBQUksQ0FBQzthQUNmO2lCQUNJLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxRQUFRLEVBQUU7Z0JBQzVHLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxDQUFDO2FBQ2xFO1lBQ0QsVUFBVSxFQUFFLENBQUM7U0FDaEI7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRU8sbUJBQW1CLENBQUMsSUFBSTtRQUM1QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBWUQsdUJBQXVCLENBQUMsT0FBTztRQUMzQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQzNCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3JDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0RCxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLFFBQVEsSUFBSSxJQUFJLEVBQUU7Z0JBQ2hELE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDbkIsc0hBQXNIO2dCQUN0SCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDcEYsSUFBSSxDQUFDLFNBQVMsRUFBRTtvQkFDWixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztvQkFDckMsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTt3QkFDcEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7d0JBQzNDLENBQUMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDO3FCQUN2QjtpQkFDSjthQUNKO1NBQ0o7SUFDTCxDQUFDO0lBRUQsb0JBQW9CO1FBQ2hCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksSUFBSSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztTQUNqQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLCtCQUErQixFQUFFO1lBQy9DLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDM0UsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDNUQ7U0FDSjtRQUNELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUN0QyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNyQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO2FBQy9GLENBQUMsQ0FBQztTQUNOO2FBQ0k7WUFDRCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsS0FBSyxDQUFDLEVBQUU7Z0JBQ25DLE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDO29CQUN0QixLQUFLLEVBQUUsSUFBSTtvQkFDWCxPQUFPLEVBQUUsRUFBRTtpQkFDZCxDQUFDLENBQUM7Z0JBQ0gsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdkMsS0FBSyxNQUFNLFdBQVcsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRTtvQkFDaEQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO2lCQUM1RjtnQkFDRCxPQUFPLE1BQU0sQ0FBQztZQUNsQixDQUFDLENBQUM7U0FDTDtJQUNMLENBQUM7SUFFRCxPQUFPLENBQUMsYUFBd0I7UUFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsU0FBZ0IsRUFBRSxRQUFpQixLQUFLO1FBQ3RELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDN0IsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRTtZQUN2QixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDbEIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ2xCLElBQUksa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1lBQzlCLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUVsQixJQUFJLElBQUksQ0FBQyxNQUFNLFlBQVksS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDeEQsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO2FBQ2xDO2lCQUNJO2dCQUNELGtCQUFrQixHQUFHLEtBQUssQ0FBQzthQUM5QjtZQUVELElBQUksU0FBUyxJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDM0MsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztnQkFDakMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUNmLEtBQUssSUFBSSxJQUFJLElBQUksU0FBUyxFQUFFO29CQUN4QixJQUFJLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN4QyxJQUFJLGtCQUFrQixFQUFFO3dCQUNwQixLQUFLLE1BQU0sWUFBWSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7NEJBQ3BDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUM7bUNBQy9DLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsRUFDaEY7Z0NBQ0UsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0NBQzFCLE1BQU07NkJBQ1Q7eUJBQ0o7cUJBQ0o7b0JBQ0QsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDbEI7Z0JBRUQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEdBQUcsQ0FBQztnQkFDOUIsSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUM7dUJBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYTt1QkFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFDbEM7b0JBQ0UsUUFBUSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUM3QjtnQkFFRCxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQztnQkFDdkIsU0FBUyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7YUFDL0I7aUJBQ0k7Z0JBQ0QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQzthQUNoQztZQUVELElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFO2dCQUMzQixJQUFJLFNBQVMsSUFBSSxTQUFTLEVBQUU7b0JBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2lCQUMzQjtxQkFDSSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksUUFBUSxFQUFFO29CQUM5QixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztpQkFDakM7YUFDSjtTQUNKO2FBQ0k7WUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNuQixJQUFJLFNBQVMsSUFBSSxJQUFJLElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzNDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7Z0JBQ2pDLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztnQkFDZixLQUFLLElBQUksSUFBSSxJQUFJLFNBQVMsRUFBRTtvQkFDeEIsSUFBSSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDeEMsSUFBSSxRQUFRLElBQUksSUFBSTsyQkFDYixRQUFRLEtBQUssRUFBRTsyQkFDZixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDOytCQUMzQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQzdFLEVBQ0g7d0JBQ0UsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO3FCQUM1QjtvQkFDRCxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUNsQjtnQkFFRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxDQUFDO2dCQUU5QixJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSTt1QkFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhO3VCQUMxQixJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUNsQztvQkFDRSxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7aUJBQzlCO2FBQ0o7aUJBQ0k7Z0JBQ0QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQzthQUNoQztZQUVELElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFO2dCQUMzQiwrREFBK0Q7Z0JBQy9ELCtGQUErRjtnQkFDL0YsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUM7dUJBQ3RDLENBQUMsUUFBUSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxFQUM5QztvQkFDRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztpQkFDM0I7cUJBQ0ksSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLFFBQVEsRUFBRTtvQkFDOUIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7aUJBQ2pDO2FBQ0o7U0FDSjtRQUVELElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3pDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxnQkFBZ0I7UUFDWixJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUMzQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFO2dCQUN2QixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7Z0JBQ2xCLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztnQkFDbEIsSUFBSSxJQUFJLENBQUMsTUFBTSxZQUFZLEtBQUssRUFBRTtvQkFDOUIsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO29CQUMvQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQ3ZFLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQzt3QkFDcEIsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7NEJBQ3hDLEtBQUssTUFBTSxZQUFZLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtnQ0FDcEMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQzt1Q0FDL0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUNoRjtvQ0FDRSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQ0FDMUIsTUFBTTtpQ0FDVDs2QkFDSjt5QkFDSjt3QkFFRCxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQzt3QkFDdkIsU0FBUyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7cUJBQy9CO2lCQUNKO2dCQUVELElBQUksU0FBUyxJQUFJLFNBQVMsRUFBRTtvQkFDeEIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7aUJBQzNCO3FCQUNJO29CQUNELElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2lCQUNqQzthQUNKO2lCQUNJO2dCQUNELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2dCQUNuQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ3ZFLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO3dCQUN4QyxJQUFJLFFBQVEsSUFBSSxJQUFJOytCQUNiLFFBQVEsS0FBSyxFQUFFOytCQUNmLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUM7bUNBQzNDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FDN0UsRUFDSDs0QkFDRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7NEJBQ3pCLE1BQU07eUJBQ1Q7cUJBQ0o7aUJBQ0o7Z0JBQ0QsK0RBQStEO2dCQUMvRCwrRkFBK0Y7Z0JBQy9GLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDO3VCQUN0QyxDQUFDLFFBQVEsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsRUFDOUM7b0JBQ0UsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7aUJBQzNCO3FCQUNJO29CQUNELElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2lCQUNqQzthQUNKO1NBQ0o7UUFDRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELFVBQVU7UUFDTixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZTtlQUN6QixJQUFJLENBQUMsb0JBQW9CO2VBQ3pCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDO21CQUM1QyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQ2xGO1lBQ0UsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7U0FDL0I7SUFDTCxDQUFDO0lBRUQscUJBQXFCLENBQUMsSUFBSTtRQUN0QixNQUFNLElBQUksR0FBZTtZQUNyQixLQUFLLEVBQUUsSUFBSTtZQUNYLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtTQUMxQixDQUFDO1FBQ0YsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtZQUMzQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2hEO2FBQ0k7WUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNqRTtRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBQ3BELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxZQUFZO1FBQ1IsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRTtZQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNuQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1NBQzNCO0lBQ0wsQ0FBQztJQUVELGVBQWU7UUFDWCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7SUFDdEMsQ0FBQztJQUVhLFFBQVEsQ0FBQyxhQUF3Qjs7WUFDM0MsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLGFBQWE7b0JBQUUsYUFBYSxHQUFHLEVBQUUsQ0FBQztnQkFDdkMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQzVDO1FBQ0wsQ0FBQztLQUFBO0lBRWEsY0FBYyxDQUFDLGlCQUEyQjs7WUFDcEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDNUQsSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFO2dCQUNqQixJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNsQyxPQUFPO2FBQ1Y7WUFDRCxJQUFJLFVBQWlCLENBQUM7WUFDdEIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDckQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsWUFBWSxpQkFBaUIsRUFBRTtnQkFDdkQsVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsdUJBQXVCLENBQy9ELElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsZUFBZSxDQUN6RCxDQUFDO2FBQ0w7aUJBQ0k7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtvQkFDckIsVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsMkJBQTJCLENBQ25FLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFDM0QsZUFBZSxDQUNwQixDQUFDO2lCQUNMO3FCQUNJO29CQUNELFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLHVCQUF1QixDQUMvRCxPQUFPLEVBQUUsZUFBZSxDQUMzQixDQUFDO2lCQUNMO2FBQ0o7WUFDRCxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQztZQUNoRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3pDLDRIQUE0SDtZQUM1SCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUU7Z0JBQ2pDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRTtvQkFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBTTt3QkFDakMsSUFBSSxFQUFFLFVBQVU7d0JBQ2hCLEdBQUcsRUFBRSxJQUFJO3FCQUNaLENBQUMsQ0FBQztpQkFDTjthQUNKO2lCQUNJO2dCQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7b0JBQ3pCLFVBQVU7b0JBQ1YsR0FBRyxFQUFFLElBQUk7aUJBQ1osQ0FBQyxDQUFDO2FBQ047UUFDTCxDQUFDO0tBQUE7SUFFYSxhQUFhLENBQUMsaUJBQTJCOztZQUNuRCxJQUFJLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQztZQUNoQyxNQUFNLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBRWhFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUU7Z0JBQzNCLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO29CQUN4QixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO2lCQUN0RTthQUNKO1lBRUQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtnQkFDM0IsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzdELElBQUksS0FBSyxLQUFLLEtBQUs7b0JBQUUsT0FBTyxHQUFHLElBQUksQ0FBQzthQUN2QztZQUVELE9BQU8sT0FBTyxDQUFDO1FBQ25CLENBQUM7S0FBQTtJQUVPLHFCQUFxQjtRQUN6QixPQUFPLElBQUksZUFBZSxDQUFDO1lBQ3ZCLG1CQUFtQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CO1lBQ3JELFlBQVksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVk7WUFDdkMsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVTtZQUNuQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTO1lBQ2pDLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVM7WUFDakMsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWTtZQUN2QyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLO1lBQ3pCLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVM7WUFDakMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTztZQUM3QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPO1lBQzdCLGtCQUFrQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCO1lBQ25ELFlBQVksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVk7WUFDdkMsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUztTQUNwQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsYUFBYTtRQUNULElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksTUFBTSxFQUFFO1lBQ2pDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsVUFBVSxDQUFDO1NBQy9DO1FBQ0QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsY0FBYztRQUNWLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFO1lBQ3hCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUU7Z0JBQzlCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtvQkFDYixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDNUQ7O29CQUNJLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2FBQzVCO2lCQUNJO2dCQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2FBQ3ZCO1NBQ0o7YUFDSTtZQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1NBQ3ZCO1FBQ0QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzdCLENBQUM7SUFFRCxrQkFBa0I7UUFDZCxnREFBZ0Q7UUFDaEQsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7SUFDckMsQ0FBQztJQUVELHNCQUFzQjtRQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEVBQUU7WUFDNUIsT0FBTztTQUNWO1FBQ0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxnQkFBZ0I7UUFDWixnREFBZ0Q7UUFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFO1lBQzVCLE9BQU87U0FDVjtRQUNELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsb0JBQW9CO1FBQ2hCLGdEQUFnRDtRQUNoRCxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEVBQUU7WUFDNUIsT0FBTztTQUNWO1FBQ0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFLO1FBQ2xCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7WUFDdkIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRTtnQkFDOUIsTUFBTSxTQUFTLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFDN0Qsa0RBQWtEO2dCQUNsRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDM0MsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTt3QkFDckMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO3dCQUN0RCxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7NEJBQ2xDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO2dDQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7NkJBQ2xDOzRCQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO3lCQUNuRTtvQkFDTCxDQUFDLENBQUMsQ0FBQztpQkFDTjtxQkFDSSxFQUFFLHdEQUF3RDtvQkFDM0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTt3QkFDckMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO3dCQUN0RCxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7NEJBQ2xDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQzs0QkFDaEQsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0NBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDOzZCQUNoQzs0QkFDRCxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQzt5QkFDbkU7b0JBQ0wsQ0FBQyxDQUFDLENBQUM7aUJBQ047YUFDSjtTQUNKO1FBQ0QsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELFVBQVUsQ0FBQyxHQUFHLEVBQUUsWUFBWTtRQUN4QixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFO1lBQ3ZCLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksWUFBWSxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3JCLEdBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV0QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN2QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxHQUFHO1FBQ3RCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxPQUFPLENBQUMsTUFBTTtRQUNWLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFO1lBQzNHLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6QixNQUFNLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztTQUM5QjtJQUNMLENBQUM7SUFFRCxhQUFhLENBQUMsR0FBRztRQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ2IsU0FBUyxFQUFFLElBQUk7WUFDZixLQUFLLEVBQUUsR0FBRztTQUNiLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtZQUM1QixPQUFPO1NBQ1Y7UUFDRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUM7UUFDakUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELGtCQUFrQixDQUFDLEdBQUc7UUFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDYixTQUFTLEVBQUUsSUFBSTtZQUNmLEtBQUssRUFBRSxHQUFHO1NBQ2IsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFO1lBQzVCLE9BQU87U0FDVjtRQUNELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDO1FBQ3JFLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVPLHNCQUFzQixDQUFDLFlBQVk7UUFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsRCxnQ0FBZ0M7UUFDaEMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVELGFBQWEsQ0FBQyxHQUFHO1FBQ2IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDYixTQUFTLEVBQUUsSUFBSTtZQUNmLEtBQUssRUFBRSxHQUFHO1NBQ2IsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRTtZQUN2QixJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUN6QyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7b0JBQzVFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO29CQUN2QyxPQUFPO2lCQUNWO2dCQUNELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUN2QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ25DO1NBQ0o7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQUc7UUFDWCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsVUFBVSxDQUFDLEdBQUc7UUFDVixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsZ0JBQWdCO1FBQ1osSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLHFCQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFFLENBQUM7UUFDbkQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQztRQUN6QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxZQUFZO1FBQ1IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztJQUNsQyxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDOUIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3BCLENBQUM7OztZQWp2QkosU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxVQUFVO2dCQUNwQiw2eElBQXdDO2dCQUV4QyxTQUFTLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQzs7YUFDdkM7OztZQVBRLGVBQWU7WUFkZixxQkFBcUI7WUFEZ0IsUUFBUTtZQVk3QyxXQUFXOzs7aUJBYWYsU0FBUyxTQUFDLElBQUk7b0JBQ2QsU0FBUyxTQUFDLFdBQVc7dUJBQ3JCLFNBQVMsU0FBQyxRQUFROzBCQUNsQixTQUFTLFNBQUMsV0FBVzt3QkFFckIsS0FBSzs4Q0FNTCxLQUFLO3FCQUVMLEtBQUs7c0JBS0wsS0FBSzsyQkFDTCxLQUFLO3VCQUNMLEtBQUs7eUJBQ0wsS0FBSztvQkFJTCxLQUFLO3FDQVlMLEtBQUs7d0JBU0wsTUFBTTs4QkFDTixNQUFNO3FCQUNOLE1BQU07K0JBQ04sTUFBTTtxQkFDTixNQUFNOytCQUNOLE1BQU07c0JBQ04sTUFBTTtxQkFDTixNQUFNO3NCQUNOLE1BQU07aUNBQ04sTUFBTTswQkFDTixNQUFNOzBCQUNOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERldmljZURldGVjdG9yU2VydmljZSB9IGZyb20gJ25neC1kZXZpY2UtZGV0ZWN0b3InO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBTZWxlY3RJdGVtIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgRHJvcGRvd24gfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9kcm9wZG93bic7XHJcbmltcG9ydCB7IE11bHRpU2VsZWN0IH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvbXVsdGlzZWxlY3QnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRDb250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2FwcC1jb250ZXh0L2NvbXBvbmVudC1jb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9iYXNlL2NvbXBvbmVudC1iYXNlJztcclxuaW1wb3J0IHsgRm9ybVN0YXRlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBEcm9wZG93bkNvbnRyb2xTY2hlbWEsIERyb3Bkb3duT3B0aW9ucywgT3BlcmF0b3IgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcclxuaW1wb3J0IHsgRmlsdGVyIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyaWQtaW5mbyc7XHJcbmltcG9ydCB7IENydWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY3J1ZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWFzdGVyRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYXN0ZXItZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgYXBwZW5kRGVmYXVsdEZpbHRlciB9IGZyb20gJy4uLy4uL3V0aWxzL2NvbW1vbic7XHJcbmltcG9ydCB7IERyb3Bkb3duU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZHJvcGRvd24uc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnZHJvcGRvd24nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Ryb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2Ryb3Bkb3duLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBwcm92aWRlcnM6IFtDb21wb25lbnRDb250ZXh0U2VydmljZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIERyb3Bkb3duQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnZWwnKSBlbDogRWxlbWVudFJlZjtcclxuICAgIEBWaWV3Q2hpbGQoJ2lucHV0TWFzaycpIGlucHV0OiBFbGVtZW50UmVmO1xyXG4gICAgQFZpZXdDaGlsZChEcm9wZG93bikgZHJvcGRvd246IERyb3Bkb3duO1xyXG4gICAgQFZpZXdDaGlsZChNdWx0aVNlbGVjdCkgbXVsdGlTZWxlY3Q6IE11bHRpU2VsZWN0O1xyXG5cclxuICAgIEBJbnB1dCgpIHNldCBzaG93Q2xlYXIodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29udHJvbC5zaG93Q2xlYXIpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sLnNob3dDbGVhciA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKSBkaXNhYmxlRGlzcGxheUZpZWxkU2VydmVyU2VhcmNoID0gZmFsc2U7XHJcblxyXG4gICAgQElucHV0KCkgc2V0IGZpbHRlcih2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICghdGhpcy5jb250cm9sLmZpbHRlcikge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuZmlsdGVyID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgQElucHV0KCkgY29udHJvbDogRHJvcGRvd25Db250cm9sU2NoZW1hID0gbmV3IERyb3Bkb3duQ29udHJvbFNjaGVtYSgpO1xyXG4gICAgQElucHV0KCkgZGVmYXVsdExhYmVsID0gJyc7XHJcbiAgICBASW5wdXQoKSBhcHBlbmRUbzogYW55ID0gJ2JvZHknO1xyXG4gICAgQElucHV0KCkgc2V0IGRhdGFTb3VyY2UodmFsdWU6IGFueVtdKSB7XHJcbiAgICAgICAgdGhpcy5iaW5kaW5nRGF0YVNvdXJjZSh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICBpZiAodGhpcy5fcmV0dXJuVmFsdWUgIT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB0aGlzLl92YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAvLyBmaXJlIGV2ZW50IMSRaeG7gXUgY2jhu4luaCB2YWx1ZSB04burIFt2YWx1ZTogZ3VpZF0gPT4ge1tmaWVsZFZhbHVlXTogW3ZhbHVlOiBndWlkXSwgLi4uWzEgc+G7kSB0csaw4budbmcga2jDoWMgbuG7r2EgdHJvbmcgZGF0YXNvdXJjZV19XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRWYWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGRlZmF1bHRTZWxlY3RlZFN0eWxlQ2xhc3MgPSAnY3VzdG9tLXNlbGVjdC1pdGVtJztcclxuICAgIF9pdGVtU2VsZWN0ZWRTdHlsZUNsYXNzID0gdGhpcy5kZWZhdWx0U2VsZWN0ZWRTdHlsZUNsYXNzO1xyXG4gICAgQElucHV0KCkgc2V0IGl0ZW1TZWxlY3RlZFN0eWxlQ2xhc3ModmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9pdGVtU2VsZWN0ZWRTdHlsZUNsYXNzID0gYCR7dGhpcy5kZWZhdWx0U2VsZWN0ZWRTdHlsZUNsYXNzfSAke3ZhbHVlfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9pdGVtU2VsZWN0ZWRTdHlsZUNsYXNzID0gYCR7dGhpcy5kZWZhdWx0U2VsZWN0ZWRTdHlsZUNsYXNzfSAke3ZhbHVlfWA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBPdXRwdXQoKSBvbkNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25Ecm9wZG93bkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25TaG93ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25TaG93U21hcnRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uSGlkZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uSGlkZVNtYXJ0RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvbkZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25CbHVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25SZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uRGF0YVNvdXJjZUxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgYWRqdXN0VmFsdWUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgICBkYXRhU291cmNlSW50ZXJuYWwgPSBbXTtcclxuICAgIHNlbGVjdGVkVmFsdWVCZWZvcmU6IGFueTtcclxuICAgIF92YWx1ZTogYW55O1xyXG4gICAgX3JldHVyblZhbHVlOiBhbnk7XHJcbiAgICBmdW5jUmV0dXJuVmFsdWU6ICh2YWx1ZSkgPT4ge30gPSB2YWx1ZSA9PiB2YWx1ZTtcclxuICAgIHRvb2x0aXA6IHN0cmluZztcclxuICAgIGhpZGVUcmFuc2l0aW9uT3B0aW9ucyA9ICcxOTVtcyBlYXNlLWluJztcclxuICAgIHNob3dUcmFuc2l0aW9uT3B0aW9ucyA9ICcyMjVtcyBlYXNlLW91dCc7XHJcblxyXG4gICAgaW5wdXRFbG06IGFueTtcclxuICAgIGdldEZpbHRlck9uU2VydmVyU2VhcmNoOiBGdW5jdGlvbjtcclxuICAgIHZhbHVlU2VhcmNoU2VydmVyID0gJyc7XHJcbiAgICBrZXlVcCA9IG5ldyBTdWJqZWN0PEtleWJvYXJkRXZlbnQ+KCk7XHJcbiAgICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICAgIF9oYXNMb2FkZWREYXRhc291cmNlID0gZmFsc2U7XHJcblxyXG4gICAgc2hvd1F1aWNrQWRkRm9ybSA9IGZhbHNlO1xyXG4gICAgZm9ybU1vZGVsOiBhbnkgPSB7fTtcclxuXHJcbiAgICBmbGFzaENhY2hlUGFyZW50OiBhbnlbXSA9IFtdO1xyXG4gICAgZHJvcGRvd25PcHRpb25zID0gW107XHJcbiAgICBkZWxheUZpbHRlcjogbnVtYmVyID0gMTAwO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgX2Ryb3BEb3duU2VydmljZTogRHJvcGRvd25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2RldmljZURldGVjdG9yU2VydmljZTogRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLFxyXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgICAgICBfY3J1ZFNlcnZpY2U6IENydWRTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihpbmplY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5jb250cm9sLl9jb21wb25lbnQgPSB0aGlzO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wucGxhY2Vob2xkZXIgPT0gbnVsbCAmJiB0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sLnBsYWNlaG9sZGVyID0gJ0NoxrBhIGNo4buNbiBi4bqjbiBnaGknO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldERlZmF1bHRTZXR0aW5nKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5iYXNlU2VydmljZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmlzU2VydmVyTG9hZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVGaWx0ZXJGdW5jdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmtleVVwLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgbWFwKGV2ZW50ID0+IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpLFxyXG4gICAgICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSg1MDApLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcclxuICAgICAgICAgICAgICAgICkuc3Vic2NyaWJlKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZXREYXRhKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2dldERhdGEoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRyb2wubG9hZE9uSW5pdCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZ2V0RGF0YSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX2RldmljZURldGVjdG9yU2VydmljZS5pc0Rlc2t0b3AoKSkge1xyXG4gICAgICAgICAgICB0aGlzLmhpZGVUcmFuc2l0aW9uT3B0aW9ucyA9IHRoaXMuc2hvd1RyYW5zaXRpb25PcHRpb25zID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNldERlZmF1bHRTZXR0aW5nKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuaXNUcmVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVsYXlGaWx0ZXIgPSAyMDA7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jb250cm9sLmZ1bmNHZXRMYWJlbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLmZ1bmNHZXRMYWJlbCA9IGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLl9wcmVmaXggKyBpdGVtW3RoaXMuY29udHJvbC5kaXNwbGF5RmllbGRdO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsID0gaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bdGhpcy5jb250cm9sLmRpc3BsYXlGaWVsZF07XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuY29udHJvbC5nZW5lcmF0ZVRvb2x0aXAgJiYgIXRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuZ2VuZXJhdGVUb29sdGlwID0gdGhpcy5jb250cm9sLmZ1bmNHZXRMYWJlbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wucmV0dXJuVHlwZSA9PSAndmFsdWUnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnVuY1JldHVyblZhbHVlID0gKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1hcChpdGVtID0+IGl0ZW1bdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF07XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZ1bmNSZXR1cm5WYWx1ZSA9IHZhbHVlID0+IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRBbGxQYXJlbnQocmVzdWx0LCBwYXJlbnRJZCkge1xyXG4gICAgICAgIGlmICh0aGlzLmZsYXNoQ2FjaGVQYXJlbnQuc29tZShxID0+IHEudmFsdWUuaWQgPT0gcGFyZW50SWQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaXRlbVBhcmVudCA9IHRoaXMuZHJvcGRvd25PcHRpb25zLmZpbmQocSA9PiBxLnZhbHVlLmlkID09IHBhcmVudElkKTtcclxuICAgICAgICBpZiAoaXRlbVBhcmVudCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1BZGQgPSB7XHJcbiAgICAgICAgICAgICAgICAuLi5pdGVtUGFyZW50LFxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRoaXMuY29udHJvbC5kaXNhYmxlZFBhcmVudEl0ZW1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goaXRlbUFkZCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4RXhpc3QgPSB0aGlzLmZsYXNoQ2FjaGVQYXJlbnQuZmluZEluZGV4KHEgPT4gcS52YWx1ZS5fbGV2ZWwgPT0gaXRlbUFkZC52YWx1ZS5fbGV2ZWwpO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXhFeGlzdCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZsYXNoQ2FjaGVQYXJlbnRbaW5kZXhFeGlzdF0gPSBpdGVtQWRkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mbGFzaENhY2hlUGFyZW50LnB1c2goaXRlbUFkZCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIEzhuqV5IHRow6ptIGLhuqNuIGdoaSBjaGEgY+G7p2EgYuG6o24gZ2hpIGNoYVxyXG4gICAgICAgICAgICBwYXJlbnRJZCA9IHRoaXMuZ2V0UGFyZW50SWRGcm9tSXRlbShpdGVtUGFyZW50KTtcclxuICAgICAgICAgICAgaWYgKHBhcmVudElkICE9IHRoaXMuZ3VpZEVtcHR5ICYmIHBhcmVudElkICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsUGFyZW50KHJlc3VsdCwgcGFyZW50SWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFscmVhZHlIYXNQYXJlbnQob3B0aW9uczogYW55W10sIGluZGV4U3RhcnQ6IG51bWJlciwgcGFyZW50SWQ6IHN0cmluZywgbGV2ZWw6IG51bWJlcikge1xyXG4gICAgICAgIHdoaWxlIChpbmRleFN0YXJ0ID4gLTEpIHtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbnNbaW5kZXhTdGFydF0udmFsdWUuaWQgPT0gcGFyZW50SWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG9wdGlvbnNbaW5kZXhTdGFydF0udmFsdWUubGV2ZWwgPT0gbGV2ZWwgJiYgdGhpcy5nZXRQYXJlbnRJZEZyb21JdGVtKG9wdGlvbnNbaW5kZXhTdGFydF0pICE9IHBhcmVudElkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mbGFzaENhY2hlUGFyZW50LnNvbWUocSA9PiBxLnZhbHVlLmlkID09IHBhcmVudElkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpbmRleFN0YXJ0LS07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFBhcmVudElkRnJvbUl0ZW0oaXRlbSkge1xyXG4gICAgICAgIHJldHVybiBpdGVtLnZhbHVlW3RoaXMuY29udHJvbC5maWVsZFRyZWVdO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZGlmeU9wdGlvbldoZW5GaWx0ZXIgPSAob3B0aW9ucykgPT4ge1xyXG4gICAgICAgIHRoaXMuZHJvcGRvd25PcHRpb25zID0gdGhpcy5kcm9wZG93bi5fb3B0aW9ucztcclxuICAgICAgICB0aGlzLl9tb2RpZnlPcHRpb25XaGVuRmlsdGVyKG9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZGlmeU9wdGlvbldoZW5GaWx0ZXJNdWx0aXBsZSA9IChvcHRpb25zKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kcm9wZG93bk9wdGlvbnMgPSB0aGlzLm11bHRpU2VsZWN0Ll9vcHRpb25zO1xyXG4gICAgICAgIHRoaXMuX21vZGlmeU9wdGlvbldoZW5GaWx0ZXIob3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgX21vZGlmeU9wdGlvbldoZW5GaWx0ZXIob3B0aW9ucykge1xyXG4gICAgICAgIHRoaXMuZmxhc2hDYWNoZVBhcmVudCA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHRoaXMuZ2V0UGFyZW50SWRGcm9tSXRlbShvcHRpb25zW2ldKTtcclxuICAgICAgICAgICAgaWYgKHBhcmVudElkICE9IHRoaXMuZ3VpZEVtcHR5ICYmIHBhcmVudElkICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIC8vIEtp4buDbSB0cmEgY8OhYyBi4bqjbiBnaGkgcGjDrWEgdHLGsOG7m2MgeGVtIMSRw6MgY8OzIGLhuqNuIGdoaSBjaGEgY2jGsGEgKENobyDEkeG6v24gZ2hpIGfhurdwIGLhuqNuIGdoaSBjw7luZyBsZXZlbCBuaMawbmcga2jDoWMgcGFyZW50SWQpXHJcbiAgICAgICAgICAgICAgICBjb25zdCBoYXNQYXJlbnQgPSB0aGlzLmFscmVhZHlIYXNQYXJlbnQob3B0aW9ucywgaSAtIDEsIHBhcmVudElkLCBvcHRpb25zW2ldLmxldmVsKTtcclxuICAgICAgICAgICAgICAgIGlmICghaGFzUGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRBbGxQYXJlbnQocGFyZW50cywgcGFyZW50SWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zcGxpY2UoaSwgMCwgLi4ucGFyZW50cy5yZXZlcnNlKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpICs9IHBhcmVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVGaWx0ZXJGdW5jdGlvbigpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLnNlYXJjaEZpZWxkID09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sLnNlYXJjaEZpZWxkID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5jb250cm9sLmRpc2FibGVEaXNwbGF5RmllbGRTZXJ2ZXJTZWFyY2gpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wuc2VhcmNoRmllbGQuc29tZShpdGVtID0+IGl0ZW0gPT0gdGhpcy5jb250cm9sLmRpc3BsYXlGaWVsZCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5zZWFyY2hGaWVsZC5wdXNoKHRoaXMuY29udHJvbC5kaXNwbGF5RmllbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuc2VhcmNoRmllbGQubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRGaWx0ZXJPblNlcnZlclNlYXJjaCA9IHZhbHVlID0+ICh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogdGhpcy5jb250cm9sLnNlYXJjaEZpZWxkWzBdLCBvcGVyYXRvcjogT3BlcmF0b3IuY29udGFpbiwgdmFsdWU6IEpTT04uc3RyaW5naWZ5KHZhbHVlKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0RmlsdGVyT25TZXJ2ZXJTZWFyY2ggPSB2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgRmlsdGVyKHtcclxuICAgICAgICAgICAgICAgICAgICBsb2dpYzogJ29yJyxcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbXVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0bXBWYWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGRTZWFyY2ggb2YgdGhpcy5jb250cm9sLnNlYXJjaEZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmZpbHRlcnMucHVzaCh7IGZpZWxkOiBmaWVsZFNlYXJjaCwgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sIHZhbHVlOiB0bXBWYWx1ZSB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldERhdGEoZmlsdGVyUGFyZW50cz86IEZpbHRlcltdKSB7XHJcbiAgICAgICAgdGhpcy5fZ2V0RGF0YShmaWx0ZXJQYXJlbnRzKTtcclxuICAgIH1cclxuXHJcbiAgICBiaW5kaW5nRGF0YVNvdXJjZShuZXdTb3VyY2U6IGFueVtdLCBmb3JjZTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLl92YWx1ZTtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIGxldCBvbGRMZW5ndGggPSAwO1xyXG4gICAgICAgICAgICBsZXQgbmV3TGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgbGV0IGhhdmVTZWxlY3RlZFZhbHVlcyA9IHRydWU7XHJcbiAgICAgICAgICAgIGxldCBuZXdWYWx1ZSA9IFtdO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbHVlIGluc3RhbmNlb2YgQXJyYXkgJiYgdGhpcy5fdmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgb2xkTGVuZ3RoID0gdGhpcy5fdmFsdWUubGVuZ3RoO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaGF2ZVNlbGVjdGVkVmFsdWVzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChuZXdTb3VyY2UgIT0gbnVsbCAmJiBuZXdTb3VyY2UubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faGFzTG9hZGVkRGF0YXNvdXJjZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhcnIgPSBbXTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgbmV3U291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbSA9IHRoaXMucmVTdHJ1Y3R1cmVJdGVtT2JqZWN0KGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXZlU2VsZWN0ZWRWYWx1ZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBzZWxlY3RlZEl0ZW0gb2YgdGhpcy5fdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wuZnVuY0NvbXBhcmUoaXRlbS52YWx1ZSwgc2VsZWN0ZWRJdGVtKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHRoaXMuY29udHJvbC5mdW5jQ29tcGFyZShpdGVtLnZhbHVlLCBzZWxlY3RlZEl0ZW1bdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUucHVzaChpdGVtLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBhcnIucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbCA9IGFycjtcclxuICAgICAgICAgICAgICAgIGlmIChuZXdWYWx1ZS5sZW5ndGggPT0gMFxyXG4gICAgICAgICAgICAgICAgICAgICYmIHRoaXMuY29udHJvbC5ub3RJbkNydWRGb3JtXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5jb250cm9sLmF1dG9EaXNwbGF5Rmlyc3RcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gW2FyclswXS52YWx1ZV07XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBuZXdWYWx1ZTtcclxuICAgICAgICAgICAgICAgIG5ld0xlbmd0aCA9IG5ld1ZhbHVlLmxlbmd0aDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZUludGVybmFsID0gW107XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9oYXNMb2FkZWREYXRhc291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob2xkTGVuZ3RoICE9IG5ld0xlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZUNoYW5nZWRFdmVudCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5fdmFsdWUgIT0gb2xkVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkanVzdFZhbHVlMldheUJpbmRpbmcoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAobmV3U291cmNlICE9IG51bGwgJiYgbmV3U291cmNlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2hhc0xvYWRlZERhdGFzb3VyY2UgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYXJyID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIG5ld1NvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnJlU3RydWN0dXJlSXRlbU9iamVjdChpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob2xkVmFsdWUgIT0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBvbGRWYWx1ZSAhPT0gJydcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHRoaXMuY29udHJvbC5mdW5jQ29tcGFyZShpdGVtLnZhbHVlLCBvbGRWYWx1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHRoaXMuY29udHJvbC5mdW5jQ29tcGFyZShpdGVtLnZhbHVlLCBvbGRWYWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBpdGVtLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBhcnIucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbCA9IGFycjtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdmFsdWUgPT0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICYmIHRoaXMuY29udHJvbC5ub3RJbkNydWRGb3JtXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5jb250cm9sLmF1dG9EaXNwbGF5Rmlyc3RcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gYXJyWzBdLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlSW50ZXJuYWwgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX2hhc0xvYWRlZERhdGFzb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgIC8vIEzGsHUgw70gaWYg4bufIGTGsOG7m2kga2jDtG5nIMSRxrDhu6NjIMSR4buVaSB0aMOgbmggb2xkVmFsdWUgIT0gdGhpcy5fdmFsdWVcclxuICAgICAgICAgICAgICAgIC8vIFbDrCBnacOhIHRy4buLIGPhu6dhIHRoaXMuX3ZhbHVlIHPhur0gxJHGsOG7o2MgY29ycmVjdGluZyDhu58gdHLDqm4gKGlkID0+IG9iamVjdCkgbsOqbiBzbyBzw6FuaCBz4bq9IGtow6FjIG5oYXVcclxuICAgICAgICAgICAgICAgIGlmICgob2xkVmFsdWUgIT0gbnVsbCAmJiB0aGlzLl92YWx1ZSA9PSBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgIHx8IChvbGRWYWx1ZSA9PSBudWxsICYmIHRoaXMuX3ZhbHVlICE9IG51bGwpXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVDaGFuZ2VkRXZlbnQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX3ZhbHVlICE9IG9sZFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGp1c3RWYWx1ZTJXYXlCaW5kaW5nKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmb3JjZSB8fCB0aGlzLl9oYXNMb2FkZWREYXRhc291cmNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25SZWFkeS5lbWl0KHRoaXMuY29udHJvbC5maWVsZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2hlY2tSZWFkeSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFNlbGVjdGVkVmFsdWUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2hhc0xvYWRlZERhdGFzb3VyY2UpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IG9sZExlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICBsZXQgbmV3TGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZSBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2xkTGVuZ3RoID0gdGhpcy5fdmFsdWUubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbCAhPSBudWxsICYmIHRoaXMuZGF0YVNvdXJjZUludGVybmFsLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuZGF0YVNvdXJjZUludGVybmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHNlbGVjdGVkSXRlbSBvZiB0aGlzLl92YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wuZnVuY0NvbXBhcmUoaXRlbS52YWx1ZSwgc2VsZWN0ZWRJdGVtKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0aGlzLmNvbnRyb2wuZnVuY0NvbXBhcmUoaXRlbS52YWx1ZSwgc2VsZWN0ZWRJdGVtW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUucHVzaChpdGVtLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IG5ld1ZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdMZW5ndGggPSBuZXdWYWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChvbGRMZW5ndGggIT0gbmV3TGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlQ2hhbmdlZEV2ZW50KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkanVzdFZhbHVlMldheUJpbmRpbmcoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5fdmFsdWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhU291cmNlSW50ZXJuYWwgIT0gbnVsbCAmJiB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuZGF0YVNvdXJjZUludGVybmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvbGRWYWx1ZSAhPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBvbGRWYWx1ZSAhPT0gJydcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICh0aGlzLmNvbnRyb2wuZnVuY0NvbXBhcmUoaXRlbS52YWx1ZSwgb2xkVmFsdWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgdGhpcy5jb250cm9sLmZ1bmNDb21wYXJlKGl0ZW0udmFsdWUsIG9sZFZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IGl0ZW0udmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIEzGsHUgw70gaWYg4bufIGTGsOG7m2kga2jDtG5nIMSRxrDhu6NjIMSR4buVaSB0aMOgbmggb2xkVmFsdWUgIT0gdGhpcy5fdmFsdWVcclxuICAgICAgICAgICAgICAgIC8vIFbDrCBnacOhIHRy4buLIGPhu6dhIHRoaXMuX3ZhbHVlIHPhur0gxJHGsOG7o2MgY29ycmVjdGluZyDhu58gdHLDqm4gKGlkID0+IG9iamVjdCkgbsOqbiBzbyBzw6FuaCBz4bq9IGtow6FjIG5oYXVcclxuICAgICAgICAgICAgICAgIGlmICgob2xkVmFsdWUgIT0gbnVsbCAmJiB0aGlzLl92YWx1ZSA9PSBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgIHx8IChvbGRWYWx1ZSA9PSBudWxsICYmIHRoaXMuX3ZhbHVlICE9IG51bGwpXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVDaGFuZ2VkRXZlbnQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRqdXN0VmFsdWUyV2F5QmluZGluZygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2hlY2tSZWFkeSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrUmVhZHkoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5vbkFkanVzdGVkVmFsdWVcclxuICAgICAgICAgICAgJiYgdGhpcy5faGFzTG9hZGVkRGF0YXNvdXJjZVxyXG4gICAgICAgICAgICAmJiAoKCF0aGlzLmNvbnRyb2wubXVsdGlwbGUgJiYgdGhpcy5fdmFsdWUgIT0gbnVsbClcclxuICAgICAgICAgICAgICAgIHx8ICh0aGlzLmNvbnRyb2wubXVsdGlwbGUgJiYgdGhpcy5fdmFsdWUgIT0gbnVsbCAmJiB0aGlzLl92YWx1ZS5sZW5ndGggPiAwKSlcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5maXJlQWRqdXN0VmFsdWVFdmVudCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZVN0cnVjdHVyZUl0ZW1PYmplY3QoaXRlbSk6IFNlbGVjdEl0ZW0ge1xyXG4gICAgICAgIGNvbnN0IHRlbXA6IFNlbGVjdEl0ZW0gPSB7XHJcbiAgICAgICAgICAgIHZhbHVlOiBpdGVtLFxyXG4gICAgICAgICAgICBkaXNhYmxlZDogaXRlbS5kaXNhYmxlZFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5mdW5jR2V0TGFiZWwpIHtcclxuICAgICAgICAgICAgdGVtcC5sYWJlbCA9IHRoaXMuY29udHJvbC5mdW5jR2V0TGFiZWwoaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0ZW1wLmxhYmVsID0gaXRlbVt0aGlzLmNvbnRyb2wuZGlzcGxheUZpZWxkXSB8fCBpdGVtWydsYWJlbCddO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0ZW1wLnZhbHVlLl9kcm9wZG93bnZhbHVlID0gdGhpcy5jb250cm9sLnZhbHVlRmllbGQ7XHJcbiAgICAgICAgcmV0dXJuIHRlbXA7XHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRDb250cm9sKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl92YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlSW50ZXJuYWwgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5maXJlQ2hhbmdlZEV2ZW50KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyRGF0YXNvdXJjZSgpIHtcclxuICAgICAgICB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbCA9IFtdO1xyXG4gICAgICAgIHRoaXMuX2hhc0xvYWRlZERhdGFzb3VyY2UgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIF9nZXREYXRhKGZpbHRlclBhcmVudHM/OiBGaWx0ZXJbXSkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgaWYgKCFmaWx0ZXJQYXJlbnRzKSBmaWx0ZXJQYXJlbnRzID0gW107XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2dldERhdGFTb3VyY2UoZmlsdGVyUGFyZW50cyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgX2dldERhdGFTb3VyY2UoZmlsdGVyRnJvbVBhcmVudHM6IEZpbHRlcltdKSB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVycyA9IGF3YWl0IHRoaXMuZmlsdGVyUHJvY2VzcyhmaWx0ZXJGcm9tUGFyZW50cyk7XHJcbiAgICAgICAgaWYgKGZpbHRlcnMgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmJpbmRpbmdEYXRhU291cmNlKFtdLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGRhdGFTb3VyY2U6IGFueVtdO1xyXG4gICAgICAgIGNvbnN0IGRyb3Bkb3duT3B0aW9ucyA9IHRoaXMuY3JlYXRlRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5iYXNlU2VydmljZSBpbnN0YW5jZW9mIE1hc3RlckRhdGFTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2UgPSBhd2FpdCB0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wuZ3JvdXBDb2RlLCBudWxsLCBmaWx0ZXJzLCBkcm9wZG93bk9wdGlvbnNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wuaXNUcmVlKSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlID0gYXdhaXQgdGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlLmdldFRyZWVEYXRhRHJvcGRvd25CeUZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzLCB0aGlzLmNvbnRyb2wuZmllbGRUcmVlLCB0aGlzLmNvbnRyb2wudmFsdWVQYXJlbnRSb290XHJcbiAgICAgICAgICAgICAgICAgICAgLCBkcm9wZG93bk9wdGlvbnNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlID0gYXdhaXQgdGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnMsIGRyb3Bkb3duT3B0aW9uc1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCB0aGlzLl9jcnVkU2VydmljZS5nZXRSZWZEYXRhKGRhdGFTb3VyY2UsIGRyb3Bkb3duT3B0aW9ucyk7XHJcbiAgICAgICAgdGhpcy5iaW5kaW5nRGF0YVNvdXJjZShkYXRhU291cmNlLCB0cnVlKTtcclxuICAgICAgICAvLyBO4bq/dSBkcm9wZG93biBrIG7hurFtIHRyb25nIGNydWQgZm9ybSB0aMOsIGPhuqV1IGjDrG5oIGZpcmVDYWxsQmFja0luc2lkZSA9IHRydWUgKG3hurdjIMSR4buLbmgpIMSR4buDIGZpcmUgdHLhu7FjIHRp4bq/cCB04burIHRyb25nIGNvbXBvbmVudFxyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuZmlyZUNhbGxCYWNrSW5zaWRlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wuY2FsbGJhY2tEYXRhRmluaXNoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wuY2FsbGJhY2tEYXRhRmluaXNoKDxhbnk+e1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGFTb3VyY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZWxtOiB0aGlzXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5vbkRhdGFTb3VyY2VMb2FkZWQuZW1pdCh7XHJcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlLFxyXG4gICAgICAgICAgICAgICAgZWxtOiB0aGlzXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGZpbHRlclByb2Nlc3MoZmlsdGVyRnJvbVBhcmVudHM6IEZpbHRlcltdKSB7XHJcbiAgICAgICAgbGV0IGZpbHRlcnMgPSBmaWx0ZXJGcm9tUGFyZW50cztcclxuICAgICAgICBhd2FpdCBhcHBlbmREZWZhdWx0RmlsdGVyKGZpbHRlcnMsIHRoaXMuY29udHJvbC5kZWZhdWx0RmlsdGVycyk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuaXNTZXJ2ZXJMb2FkKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlU2VhcmNoU2VydmVyKSB7XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2godGhpcy5nZXRGaWx0ZXJPblNlcnZlclNlYXJjaCh0aGlzLnZhbHVlU2VhcmNoU2VydmVyKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wubW9kaWZ5RmlsdGVyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFsbG93ID0gYXdhaXQgdGhpcy5jb250cm9sLm1vZGlmeUZpbHRlcihmaWx0ZXJzLCB0aGlzKTtcclxuICAgICAgICAgICAgaWYgKGFsbG93ID09PSBmYWxzZSkgZmlsdGVycyA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmlsdGVycztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyZWF0ZURyb3Bkb3duT3B0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4gbmV3IERyb3Bkb3duT3B0aW9ucyh7XHJcbiAgICAgICAgICAgIGZpZWxkUGFyZW50VHJlZUl0ZW06IHRoaXMuY29udHJvbC5maWVsZFBhcmVudFRyZWVJdGVtLFxyXG4gICAgICAgICAgICBkaXNwbGF5RmllbGQ6IHRoaXMuY29udHJvbC5kaXNwbGF5RmllbGQsXHJcbiAgICAgICAgICAgIHZhbHVlRmllbGQ6IHRoaXMuY29udHJvbC52YWx1ZUZpZWxkLFxyXG4gICAgICAgICAgICBmaWVsZFBsdXM6IHRoaXMuY29udHJvbC5maWVsZFBsdXMsXHJcbiAgICAgICAgICAgIGZpZWxkVHJlZTogdGhpcy5jb250cm9sLmZpZWxkVHJlZSxcclxuICAgICAgICAgICAgZnVuY0dldExhYmVsOiB0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsLFxyXG4gICAgICAgICAgICBzb3J0czogdGhpcy5jb250cm9sLnNvcnRzLFxyXG4gICAgICAgICAgICBzb3J0RmllbGQ6IHRoaXMuY29udHJvbC5zb3J0RmllbGQsXHJcbiAgICAgICAgICAgIHNvcnREaXI6IHRoaXMuY29udHJvbC5zb3J0RGlyLFxyXG4gICAgICAgICAgICBwbHVzVXJsOiB0aGlzLmNvbnRyb2wucGx1c1VybCxcclxuICAgICAgICAgICAgY2FsbGJhY2tEYXRhRmluaXNoOiB0aGlzLmNvbnRyb2wuY2FsbGJhY2tEYXRhRmluaXNoLFxyXG4gICAgICAgICAgICBpc1NlcnZlckxvYWQ6IHRoaXMuY29udHJvbC5pc1NlcnZlckxvYWQsXHJcbiAgICAgICAgICAgIHJlZkZpZWxkczogdGhpcy5jb250cm9sLnJlZkZpZWxkc1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBhbmVsQ2xhc3MoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5hcHBlbmRUbyA9PSAnYm9keScpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMuY29udHJvbC5wYW5lbENsYXNzfSBwLWZpeGVkYDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbC5wYW5lbENsYXNzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFZhbHVlUmV0dXJuKCkge1xyXG4gICAgICAgIHRoaXMuX3JldHVyblZhbHVlID0gdGhpcy5mdW5jUmV0dXJuVmFsdWUodGhpcy5fdmFsdWUpO1xyXG4gICAgICAgIGlmICghdGhpcy5jb250cm9sLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wuZ2VuZXJhdGVUb29sdGlwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXAgPSB0aGlzLmNvbnRyb2wuZ2VuZXJhdGVUb29sdGlwKHRoaXMuX3ZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy50b29sdGlwID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5WYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja0luaXRlZENvbnRyb2woKSB7XHJcbiAgICAgICAgLy8gTuG6v3UgY2jGsGEgY2jhuqF5IHF1YSBpbml0IHRow6wgayBmaXJlIGV2ZW50IGfDrCBj4bqjXHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy5jb250cm9sLl9jb21wb25lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgYWRqdXN0VmFsdWUyV2F5QmluZGluZygpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2hlY2tJbml0ZWRDb250cm9sKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB2YWx1ZVJldHVybiA9IHRoaXMuZ2V0VmFsdWVSZXR1cm4oKTtcclxuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodmFsdWVSZXR1cm4pO1xyXG4gICAgfVxyXG5cclxuICAgIGZpcmVDaGFuZ2VkRXZlbnQoKSB7XHJcbiAgICAgICAgLy8gTuG6v3UgY2jGsGEgY2jhuqF5IHF1YSBpbml0IHRow6wgayBmaXJlIGV2ZW50IGfDrCBj4bqjXHJcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrSW5pdGVkQ29udHJvbCgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdmFsdWVSZXR1cm4gPSB0aGlzLmdldFZhbHVlUmV0dXJuKCk7XHJcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlUmV0dXJuKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlZC5uZXh0KHZhbHVlUmV0dXJuKTtcclxuICAgIH1cclxuXHJcbiAgICBmaXJlQWRqdXN0VmFsdWVFdmVudCgpIHtcclxuICAgICAgICAvLyBO4bq/dSBjaMawYSBjaOG6oXkgcXVhIGluaXQgdGjDrCBrIGZpcmUgZXZlbnQgZ8OsIGPhuqNcclxuICAgICAgICBpZiAoIXRoaXMuY2hlY2tJbml0ZWRDb250cm9sKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB2YWx1ZVJldHVybiA9IHRoaXMuZ2V0VmFsdWVSZXR1cm4oKTtcclxuICAgICAgICB0aGlzLmFkanVzdFZhbHVlLm5leHQodmFsdWVSZXR1cm4pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlU2VsZWN0ZWQoZXZlbnQpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wuc2VsZWN0Q2hpbGRJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJZHMgPSBbZXZlbnQuaXRlbVZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXV07XHJcbiAgICAgICAgICAgICAgICAvLyBO4bq/dSBpdGVtIMSRxrDhu6NjIGNo4buNbiA9PiBDaOG7jW4gY+G6oyBuaOG7r25nIGLhuqNuIGdoaSBjb25cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZS5pbmRleE9mKGV2ZW50Lml0ZW1WYWx1ZSkgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZUludGVybmFsLmZvckVhY2goc291cmNlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50SWQgPSBzb3VyY2UudmFsdWVbdGhpcy5jb250cm9sLmZpZWxkVHJlZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRJZHMuaW5kZXhPZihwYXJlbnRJZCkgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbHVlLmluZGV4T2Yoc291cmNlLnZhbHVlKSA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlLnB1c2goc291cmNlLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkcy5wdXNoKHBhcmVudElkLCBzb3VyY2UudmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7IC8vIGl0ZW0gxJFhbmcgYuG7iyBi4buPIGNo4buNbiA9PiBo4buneSBjaOG7jW4gY+G6oyBuaOG7r25nIGLhuqNuIGdoaSBjb25cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbC5mb3JFYWNoKHNvdXJjZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudElkID0gc291cmNlLnZhbHVlW3RoaXMuY29udHJvbC5maWVsZFRyZWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50SWRzLmluZGV4T2YocGFyZW50SWQpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fdmFsdWUuaW5kZXhPZihzb3VyY2UudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWRzLnB1c2gocGFyZW50SWQsIHNvdXJjZS52YWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlZEV2ZW50KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlSXRlbShldnQsIHNlbGVjdGVkSXRlbSkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX3ZhbHVlLmZpbHRlcihpdGVtID0+IGl0ZW0gIT0gc2VsZWN0ZWRJdGVtKTtcclxuICAgICAgICB0aGlzLmZpcmVDaGFuZ2VkRXZlbnQoKTtcclxuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZUJlZm9yZSA9IHRoaXMuX3ZhbHVlO1xyXG4gICAgICAgIHRoaXMub25IaWRlU21hcnRFdmVudC5lbWl0KGV2dCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Ecm9wZG93bkNsaWNrSGFuZGxlcihldnQpIHtcclxuICAgICAgICB0aGlzLm9uRHJvcGRvd25DbGljay5uZXh0KGV2dCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGljaygkZXZlbnQpIHtcclxuICAgICAgICBpZiAoJGV2ZW50LnRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpJyAmJiAkZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygndWktZHJvcGRvd24tY2xlYXItaWNvbicpKSB7XHJcbiAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgJGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uU2hvd0hhbmRsZXIoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5vblNob3cuZW1pdCh7XHJcbiAgICAgICAgICAgIGNvbXBvbmVudDogdGhpcyxcclxuICAgICAgICAgICAgZXZlbnQ6IGV2dFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICghdGhpcy5jb250cm9sLmlzU2VydmVyTG9hZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRJbnB1dCA9IHRoaXMuZHJvcGRvd24uZmlsdGVyVmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5faW5zZXJ0VGV4dGJveEFuZEZvY3VzKGRlZmF1bHRJbnB1dCk7XHJcbiAgICAgICAgdGhpcy5vblNob3dTbWFydEV2ZW50LmVtaXQoZXZ0KTtcclxuICAgIH1cclxuXHJcbiAgICBvblBhbmVsU2hvd0hhbmRsZXIoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5vblNob3cuZW1pdCh7XHJcbiAgICAgICAgICAgIGNvbXBvbmVudDogdGhpcyxcclxuICAgICAgICAgICAgZXZlbnQ6IGV2dFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZUJlZm9yZSA9IHRoaXMuX3ZhbHVlO1xyXG4gICAgICAgIGlmICghdGhpcy5jb250cm9sLmlzU2VydmVyTG9hZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRJbnB1dCA9IHRoaXMubXVsdGlTZWxlY3QuZmlsdGVySW5wdXRDaGlsZC5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGRlZmF1bHRJbnB1dCk7XHJcbiAgICAgICAgdGhpcy5faW5zZXJ0VGV4dGJveEFuZEZvY3VzKGRlZmF1bHRJbnB1dCk7XHJcbiAgICAgICAgdGhpcy5vblNob3dTbWFydEV2ZW50LmVtaXQoZXZ0KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9pbnNlcnRUZXh0Ym94QW5kRm9jdXMoZGVmYXVsdElucHV0KSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGUnKTtcclxuICAgICAgICAvLyBkZWZhdWx0SW5wdXQuZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIGRlZmF1bHRJbnB1dC5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsIGRlZmF1bHRJbnB1dCk7XHJcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25IaWRlSGFuZGxlcihldnQpIHtcclxuICAgICAgICB0aGlzLm9uSGlkZS5lbWl0KHtcclxuICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxyXG4gICAgICAgICAgICBldmVudDogZXZ0XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlQmVmb3JlICE9IHRoaXMuX3ZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlQmVmb3JlID09IG51bGwgJiYgdGhpcy5fdmFsdWUgJiYgdGhpcy5fdmFsdWUubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVCZWZvcmUgPSB0aGlzLl92YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVCZWZvcmUgPSB0aGlzLl92YWx1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMub25IaWRlU21hcnRFdmVudC5lbWl0KGV2dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlRm9jdXMoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5vbkZvY3VzLmVtaXQoZXZ0KTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVCbHVyKGV2dCkge1xyXG4gICAgICAgIHRoaXMub25CbHVyLmVtaXQoZXZ0KTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93Rm9ybVF1aWNrQWRkKCkge1xyXG4gICAgICAgIHRoaXMuZm9ybU1vZGVsLmRhdGEgPSB7IC4uLnRoaXMuY29udHJvbC5pbml0RGF0YSB9O1xyXG4gICAgICAgIHRoaXMuZm9ybU1vZGVsLmZvcm1TdGF0ZSA9IEZvcm1TdGF0ZS5BREQ7XHJcbiAgICAgICAgdGhpcy5zaG93UXVpY2tBZGRGb3JtID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVDYW5jZWwoKSB7XHJcbiAgICAgICAgdGhpcy5zaG93UXVpY2tBZGRGb3JtID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlU2F2ZWQoKSB7XHJcbiAgICAgICAgdGhpcy5zaG93UXVpY2tBZGRGb3JtID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fZ2V0RGF0YSgpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -1,6 +1,6 @@
1
1
  import { HttpClient } from '@angular/common/http';
2
2
  import { Injectable, Injector } from '@angular/core';
3
- import * as printJS_ from 'print-js';
3
+ import printJS_ from 'print-js';
4
4
  import { catchError, retry, shareReplay } from 'rxjs/operators';
5
5
  import { BaseService } from '../../../services/base.service';
6
6
  import { ModuleConfigService } from '../../../services/module-config.service';
@@ -313,4 +313,4 @@ FileExplorerNewService.ctorParameters = () => [
313
313
  { type: Injector },
314
314
  { type: ModuleConfigService }
315
315
  ];
316
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1leHBsb3Jlci1uZXcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvIiwic291cmNlcyI6WyJjb21wb25lbnRzL2ZpbGUtZXhwbG9yZXIvc2VydmljZXMvZmlsZS1leHBsb3Jlci1uZXcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFxQixNQUFNLHNCQUFzQixDQUFDO0FBQ3JFLE9BQU8sRUFBYyxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sS0FBSyxRQUFRLE1BQU0sVUFBVSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR2hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUU3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUc5RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7OztBQU8vRSxxQkFBcUI7QUFDckIsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDO0FBS3pCLE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxXQUFXO0lBVW5ELFlBQ0ksSUFBZ0IsRUFDaEIsUUFBa0IsRUFDVixvQkFBeUM7UUFFakQsS0FBSyxDQUNELElBQUksRUFDSixRQUFRLEVBQ1IsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUMzRSxDQUFBO1FBTk8seUJBQW9CLEdBQXBCLG9CQUFvQixDQUFxQjtRQVg1QyxnQkFBVyxHQUFXLENBQUMsQ0FBQztRQUN4QixpQkFBWSxHQUFXLENBQUMsQ0FBQztRQWlCOUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FB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Z0IsRUFBRSxDQUFDO1FBQzNKLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQWlCLEtBQUssQ0FBQzthQUN2QyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBc0IsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQ25FLFNBQVMsRUFBRSxDQUFDO0lBQ3JCLENBQUM7Ozs7WUE5YkosVUFBVSxTQUFDO2dCQUNSLFVBQVUsRUFBRSxNQUFNO2FBQ3JCOzs7WUF2QlEsVUFBVTtZQUNjLFFBQVE7WUFPaEMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEVsZW1lbnRSZWYsIEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCAqIGFzIHByaW50SlNfIGZyb20gJ3ByaW50LWpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgcmV0cnksIHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBSZXNwb25zZVJlc3VsdCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9yZXNwb25zZS1yZXN1bHQnO1xyXG5pbXBvcnQgeyBBdXRoZW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aGVuLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Jhc2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jb21tb24uc2VydmljZSc7XHJcbmltcG9ydCB7IE1vZHVsZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb3B5RmlsZUR0byB9IGZyb20gJy4uL21vZGVscy9jb3B5LWZpbGUtZHRvJztcclxuaW1wb3J0IHsgRm9sZGVyQ3JlYXRlQW5kU2V0UGVybWlzc2lvbkRUTyB9IGZyb20gJy4uL21vZGVscy9mb2xkZXItY3JlYXRlLWFuZC1zZXQtcGVybWlzc2lvbi1kdG8nO1xyXG5pbXBvcnQgeyBHZW5lcmF0ZUxpbmtEb3dubG9hZERUTyB9IGZyb20gJy4uL21vZGVscy9nZW5lcmF0ZS1saW5rLWRvd25sb2FkLWR0byc7XHJcbmltcG9ydCB7IE1vdmVGaWxlRFRPIH0gZnJvbSAnLi4vbW9kZWxzL21vdmUtZmlsZS1kdG8nO1xyXG5pbXBvcnQgeyBTaGFyZUZpbGVEVE8gfSBmcm9tICcuLi9tb2RlbHMvc2hhcmUtZmlsZS1kdG8nO1xyXG5pbXBvcnQgeyBTaGFyZUZvbGRlckRUTyB9IGZyb20gJy4uL21vZGVscy9zaGFyZS1mb2xkZXItZHRvJztcclxuaW1wb3J0IHsgTW9kdWxlQ29uZmlnIH0gZnJvbSAnLi8uLi8uLi8uLi9jb25maWdzL21vZHVsZS1jb25maWcnO1xyXG5pbXBvcnQgeyBTZXJ2aWNlUmVxdWVzdE1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3NlcnZpY2UtcmVxdWVzdC1tb2RlbCc7XHJcblxyXG4vLyBmaXggZm9yIGJ1aWxkIHByb2RcclxuY29uc3QgcHJpbnRKUyA9IHByaW50SlNfO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWxlRXhwbG9yZXJOZXdTZXJ2aWNlIGV4dGVuZHMgQmFzZVNlcnZpY2Uge1xyXG5cclxuICAgIHJlYWRvbmx5IFJFVFJZX0NPVU5UOiBudW1iZXIgPSAwO1xyXG4gICAgcmVhZG9ubHkgUkVQTEFZX0NPVU5UOiBudW1iZXIgPSAxO1xyXG4gICAgX2RvY3VtZW50U2VydmVyVXJsOiBhbnk7XHJcbiAgICByZWFkb25seSBfc2VydmljZVVyaTtcclxuICAgIHByaXZhdGUgX2F1dGhlblNlcnZpY2U6IEF1dGhlblNlcnZpY2U7XHJcbiAgICBwcml2YXRlIF9jb21tb25TZXJpdmNlOiBDb21tb25TZXJ2aWNlO1xyXG4gICAgcHJpdmF0ZSBfbW9kdWxlQ29uZmlnOiBNb2R1bGVDb25maWc7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgaHR0cDogSHR0cENsaWVudCxcclxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgcHJpdmF0ZSBfbW9kdWxlQ29uZmlnU2VydmljZTogTW9kdWxlQ29uZmlnU2VydmljZVxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoXHJcbiAgICAgICAgICAgIGh0dHAsXHJcbiAgICAgICAgICAgIGluamVjdG9yLFxyXG4gICAgICAgICAgICBgJHtfbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5hcGlEb21haW4uZmlsZUVuZHBvaW50fWBcclxuICAgICAgICApXHJcbiAgICAgICAgdGhpcy5fbW9kdWxlQ29uZmlnID0gdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKTtcclxuICAgICAgICB0aGlzLnNlcnZpY2VVcmkgPSB0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQuYXBpRG9tYWluLmZpbGVFbmRwb2ludDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRNeUZpbGVzKCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCBzdlVybCA9IGAke3RoaXMuX3NlcnZpY2VVcml9L0ZpbGUvR2V0TXlGaWxlc2A7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldDxSZXNwb25zZVJlc3VsdD4oc3ZVcmwpLnBpcGUoXHJcbiAgICAgICAgICAgIHNoYXJlUmVwbGF5KHRoaXMuUkVQTEFZX0NPVU5UKSxcclxuICAgICAgICAgICAgcmV0cnkodGhpcy5SRVRSWV9DT1VOVCksXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyKSlcclxuICAgICAgICApLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEJ5Rm9sZGVySWQoZm9sZGVySWQ6IHN0cmluZyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBpZiAoZm9sZGVySWQgPT0gJzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHsgc3RhdHVzOiA0MDAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBzdlVybCA9IGAke3RoaXMuX3NlcnZpY2VVcml9L0ZpbGU/Zm9sZGVySWQ9JHtmb2xkZXJJZH1gO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQ8UmVzcG9uc2VSZXN1bHQ+KHN2VXJsKS5waXBlKFxyXG4gICAgICAgICAgICBzaGFyZVJlcGxheSh0aGlzLlJFUExBWV9DT1VOVCksXHJcbiAgICAgICAgICAgIHJldHJ5KHRoaXMuUkVUUllfQ09VTlQpLFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVycikpXHJcbiAgICAgICAgKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRNeURyaXZlKGZvbGRlcklkOiBzdHJpbmcpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgaWYgKGZvbGRlcklkID09ICcwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh7IHN0YXR1czogNDAwIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgc3ZVcmwgPSBgJHt0aGlzLl9zZXJ2aWNlVXJpfS9GaWxlL0dldE15RHJpdmU/Zm9sZGVySWQ9JHtmb2xkZXJJZH1gO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQ8UmVzcG9uc2VSZXN1bHQ+KHN2VXJsKS5waXBlKFxyXG4gICAgICAgICAgICBzaGFyZVJlcGxheSh0aGlzLlJFUExBWV9DT1VOVCksXHJcbiAgICAgICAgICAgIHJldHJ5KHRoaXMuUkVUUllfQ09VTlQpLFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVycikpXHJcbiAgICAgICAgKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRNeVNoYXJlKHVzZXJJZDogbnVtYmVyKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGlmICh1c2VySWQgPCAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh7IHN0YXR1czogNDAwIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgc3ZVcmwgPSBgJHt0aGlzLl9zZXJ2aWNlVXJpfS9Gb2xkZXIvR2V0TXlTaGFyZT91c2VySWQ9JHt1c2VySWR9YDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0PFJlc3BvbnNlUmVzdWx0PihzdlVybCkucGlwZShcclxuICAgICAgICAgICAgc2hhcmVSZXBsYXkodGhpcy5SRVBMQVlfQ09VTlQpLFxyXG4gICAgICAgICAgICByZXRyeSh0aGlzLlJFVFJZX0NPVU5UKSxcclxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpKVxyXG4gICAgICAgICkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBnZXRNeVNoYXJlVG9PdGhlcihvd25lcklkOiBudW1iZXIpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgaWYgKG93bmVySWQgPCAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh7IHN0YXR1czogNDAwIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgc3ZVcmwgPSBgJHt0aGlzLl9zZXJ2aWNlVXJpfS9Gb2xkZXIvR2V0TXlTaGFyZVRvT3RoZXI/b3duZXJJZD0ke293bmVySWR9YDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0PFJlc3BvbnNlUmVzdWx0PihzdlVybCkucGlwZShcclxuICAgICAgICAgICAgc2hhcmVSZXBsYXkodGhpcy5SRVBMQVlfQ09VTlQpLFxyXG4gICAgICAgICAgICByZXRyeSh0aGlzLlJFVFJZX0NPVU5UKSxcclxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpKVxyXG4gICAgICAgICkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Rm9sZGVyVHJlZShmb2xkZXJJZDogc3RyaW5nKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGlmIChmb2xkZXJJZCA9PSAnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJykge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoeyBzdGF0dXM6IDQwMCB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGFwaVVybCA9IGAke3RoaXMuX3NlcnZpY2VVcml9L0ZpbGUvR2V0VHJlZT9mb2xkZXJJZD0ke2ZvbGRlcklkfWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0PFJlc3BvbnNlUmVzdWx0PihhcGlVcmwpXHJcbiAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyKSkpXHJcbiAgICAgICAgICAgIC50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBjb3B5RmlsZShjb3B5RmlsZUR0bzogQ29weUZpbGVEdG8pOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3Qgc3ZVcmwgPSBgJHt0aGlzLl9zZXJ2aWNlVXJpfS9GaWxlL0NvcHlGaWxlYDtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wb3N0PFJlc3BvbnNlUmVzdWx0PihzdlVybCwgY29weUZpbGVEdG8pLnBpcGUoXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyKSlcclxuICAgICAgICApLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZU5ld0ZvbGRlcihmb2xkZXI6IEZvbGRlckNyZWF0ZUFuZFNldFBlcm1pc3Npb25EVE8pOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3Qgc3ZVcmwgPSBgJHt0aGlzLl9zZXJ2aWNlVXJpfS9Gb2xkZXJgO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wb3N0PFJlc3BvbnNlUmVzdWx0PihzdlVybCwgZm9sZGVyKS5waXBlKFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVycikpXHJcbiAgICAgICAgKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVGb2xkZXIoZm9sZGVySWQ6IHN0cmluZyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCBzdlVybCA9IGAke3RoaXMuX3NlcnZpY2VVcml9L0ZvbGRlci8ke2ZvbGRlcklkfWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZGVsZXRlPFJlc3BvbnNlUmVzdWx0PihzdlVybCkucGlwZShcclxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpKVxyXG4gICAgICAgICkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlTXVsdGlwbGVGb2xkZXIoZm9sZGVySWRzOiBzdHJpbmcpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3Qgc3ZVcmwgPSBgJHt0aGlzLl9zZXJ2aWNlVXJpfS9Gb2xkZXIvZGVsZXRlTXVsdGlwbGVGb2xkZXIvJHtmb2xkZXJJZHN9YDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZGVsZXRlPFJlc3BvbnNlUmVzdWx0PihzdlVybCkucGlwZShcclxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpKVxyXG4gICAgICAgICkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuYW1lRm9sZGVyKGZvbGRlcklkOiBzdHJpbmcsIG5ld0ZvbGRlck5hbWU6IHN0cmluZyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCBzdlVybCA9IGAke3RoaXMuX3NlcnZpY2VVcml9L0ZvbGRlci8ke2ZvbGRlcklkfS9SZW5hbWVGb2xkZXIvJHtuZXdGb2xkZXJOYW1lfWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucGF0Y2g8UmVzcG9uc2VSZXN1bHQ+KHN2VXJsLCB7fSkucGlwZShcclxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpKVxyXG4gICAgICAgICkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hhcmVGb2xkZXIoc2hhcmVGb2xkZXI6IFNoYXJlRm9sZGVyRFRPKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHN2VXJsID0gYCR7dGhpcy5fc2VydmljZVVyaX0vRm9sZGVyL1NoYXJlRm9sZGVyYDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucG9zdDxSZXNwb25zZVJlc3VsdD4oc3ZVcmwsIHNoYXJlRm9sZGVyKS5waXBlKFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVycikpXHJcbiAgICAgICAgKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVTaGFyZUZvbGRlcihmb2xkZXJJZDogc3RyaW5nLCBvYmplY3RJZDogc3RyaW5nKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHN2VXJsID0gYCR7dGhpcy5fc2VydmljZVVyaX0vRm9sZGVyLyR7Zm9sZGVySWR9L0RlbGV0ZVNoYXJlRm9sZGVyLyR7b2JqZWN0SWR9YDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZGVsZXRlPFJlc3BvbnNlUmVzdWx0PihzdlVybCkucGlwZShcclxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpKVxyXG4gICAgICAgICkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VXBsb2FkVXJsKCkge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLl9zZXJ2aWNlVXJpfS9GaWxlYDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGaWxlRG93bmxvYWRVcmwoZmlsZUlkOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5fc2VydmljZVVyaX0vRmlsZS8ke2ZpbGVJZH0vZG93bmxvYWRgO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEJpbmFyeUZpbGVCeUZpbGVJZChmaWxlSWQ6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5faHR0cC5nZXQodGhpcy5nZXRGaWxlRG93bmxvYWRVcmwoZmlsZUlkKSkudG9Qcm9taXNlKCkudGhlbihycyA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhycyk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcclxuICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHJlamVjdChlcnIpKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTY2FuRmlsZVVwbG9hZEVuZHBvaW50KGNvcnJlbGF0aW9uSWQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLl9zZXJ2aWNlVXJpfS9GaWxlL0NyZWF0ZVNjYW5uZWRGaWxlLyR7Y29ycmVsYXRpb25JZH1gO1xyXG4gICAgfVxyXG4gICAgZ2V0RmlsZShmaWxlSWQ6IHN0cmluZyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCBzdlVybCA9IGAke3RoaXMuX3NlcnZpY2VVcml9L0ZpbGUvJHtmaWxlSWR9YDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0PFJlc3BvbnNlUmVzdWx0PihzdlVybCkucGlwZShcclxuICAgICAgICAgICAgc2hhcmVSZXBsYXkodGhpcy5SRVBMQVlfQ09VTlQpLFxyXG4gICAgICAgICAgICByZXRyeSh0aGlzLlJFVFJZX0NPVU5UKSxcclxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpKVxyXG4gICAgICAgICkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RmlsZVZlcnNpb25Eb3dubG9hZFVybChmaWxlVmVyc2lvbklkOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5fc2VydmljZVVyaX0vRmlsZVZlcnNpb24vJHtmaWxlVmVyc2lvbklkfS9kb3dubG9hZGA7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QW5vbnltb3VzRG93bmxvYWRVcmwoaGFzaDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuX3NlcnZpY2VVcml9L0Rvd25sb2FkLyR7aGFzaH1gO1xyXG4gICAgfVxyXG5cclxuICAgIGdlbmVyYXRlTGlua0Rvd25sb2FkKG1vZGVsOiBHZW5lcmF0ZUxpbmtEb3dubG9hZERUTyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCBzdlVybCA9IGAke3RoaXMuX3NlcnZpY2VVcml9L0Rvd25sb2FkL0dlbmVyYXRlRG93bmxvYWRMaW5rYDtcclxuXHJcbiAgICAgICAgaWYgKG1vZGVsLmlzRmlsZVZlcnNpb24gJiYgIW1vZGVsLmZpbGVWZXJzaW9uSWQpIHtcclxuICAgICAgICAgICAgbW9kZWwuZmlsZVZlcnNpb25JZCA9IG1vZGVsLmZpbGVJZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnBvc3Q8UmVzcG9uc2VSZXN1bHQ+KHN2VXJsLCBtb2RlbCkucGlwZShcclxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpKSkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZG93bmxvYWRGaWxlKGZpbGVJZDogc3RyaW5nLCBpc0ZpbGVWZXJzaW9uOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICBjb25zdCBtb2RlbCA9IG5ldyBHZW5lcmF0ZUxpbmtEb3dubG9hZERUTygpO1xyXG4gICAgICAgIG1vZGVsLmZpbGVJZCA9IGZpbGVJZDtcclxuICAgICAgICBtb2RlbC5pc0ZpbGVWZXJzaW9uID0gaXNGaWxlVmVyc2lvbjtcclxuICAgICAgICB0aGlzLmdlbmVyYXRlTGlua0Rvd25sb2FkKG1vZGVsKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZG93bmxvYWRVcmwgPSB0aGlzLmdldEFub255bW91c0Rvd25sb2FkVXJsKHJlc3BvbnNlLmRhdGEpO1xyXG4gICAgICAgICAgICB3aW5kb3cub3Blbihkb3dubG9hZFVybCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2VuZXJhdGVMaW5rRG93bmxvYWRNdWx0aXBsZShtb2RlbDogR2VuZXJhdGVMaW5rRG93bmxvYWREVE9bXSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCBzdlVybCA9IGAke3RoaXMuX3NlcnZpY2VVcml9L0Rvd25sb2FkL0dlbmVyYXRlRG93bmxvYWRNdWx0aXBsZUxpbmtgO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wb3N0PFJlc3BvbnNlUmVzdWx0PihzdlVybCwgbW9kZWwpLnBpcGUoXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyKSkpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEJpbmFyeUZpbGUobGlua0Rvd25sb2FkOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQobGlua0Rvd25sb2FkKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRNb3ZlRmlsZUl0ZW0obW92ZUZpbGU6IE1vdmVGaWxlRFRPKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHN2VXJsID0gYCR7dGhpcy5fc2VydmljZVVyaX0vRmlsZS9Nb3ZlRmlsZWA7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnBvc3Q8UmVzcG9uc2VSZXN1bHQ+KHN2VXJsLCBtb3ZlRmlsZSkucGlwZShcclxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpKVxyXG4gICAgICAgICkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlRmlsZShmaWxlSWQ6IHN0cmluZyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCBzdlVybCA9IGAke3RoaXMuX3NlcnZpY2VVcml9L0ZpbGUvJHtmaWxlSWR9YDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZGVsZXRlPFJlc3BvbnNlUmVzdWx0PihzdlVybCkucGlwZShcclxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpKVxyXG4gICAgICAgICkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlTXVsdGlwbGVGaWxlKGZpbGVJZHM6IHN0cmluZyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCBzdlVybCA9IGAke3RoaXMuX3NlcnZpY2VVcml9L0ZpbGUvZGVsZXRlTXVsdGlwbGVGaWxlLyR7ZmlsZUlkc31gO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5kZWxldGU8UmVzcG9uc2VSZXN1bHQ+KHN2VXJsKS5waXBlKFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVycikpXHJcbiAgICAgICAgKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVGaWxlVmVyc2lvbihmaWxlVmVyc2lvbklkOiBzdHJpbmcpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3Qgc3ZVcmwgPSBgJHt0aGlzLl9zZXJ2aWNlVXJpfS9GaWxlVmVyc2lvbi8ke2ZpbGVWZXJzaW9uSWR9YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5kZWxldGU8UmVzcG9uc2VSZXN1bHQ+KHN2VXJsKS5waXBlKFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVycikpXHJcbiAgICAgICAgKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5hbWVGaWxlKGZpbGVJZDogc3RyaW5nLCBuZXdGaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHN2VXJsID0gYCR7dGhpcy5fc2VydmljZVVyaX0vRmlsZS8ke2ZpbGVJZH0vUmVuYW1lRmlsZS8ke25ld0ZpbGVOYW1lfWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucGF0Y2g8UmVzcG9uc2VSZXN1bHQ+KHN2VXJsLCB7fSkucGlwZShcclxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpKVxyXG4gICAgICAgICkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hhcmVGaWxlKHNoYXJlRmlsZTogU2hhcmVGaWxlRFRPKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHN2VXJsID0gYCR7dGhpcy5fc2VydmljZVVyaX0vRmlsZS9TaGFyZUZpbGVgO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wb3N0PFJlc3BvbnNlUmVzdWx0PihzdlVybCwgc2hhcmVGaWxlKS5waXBlKFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVycikpXHJcbiAgICAgICAgKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVTaGFyZUZpbGUoZmlsZUlkOiBzdHJpbmcsIG9iamVjdElkOiBzdHJpbmcpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3Qgc3ZVcmwgPSBgJHt0aGlzLl9zZXJ2aWNlVXJpfS9GaWxlLyR7ZmlsZUlkfS9EZWxldGVTaGFyZUZpbGUvJHtvYmplY3RJZH1gO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5kZWxldGU8UmVzcG9uc2VSZXN1bHQ+KHN2VXJsKS5waXBlKFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVycikpXHJcbiAgICAgICAgKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTaGFyZWRGaWxlcyhmb2xkZXJJZD86IHN0cmluZyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBsZXQgc3ZVcmwgPSBgJHt0aGlzLl9zZXJ2aWNlVXJpfS9GaWxlL0dldE15U2hhcmVkRmlsZXNgO1xyXG4gICAgICAgIGlmIChmb2xkZXJJZCkge1xyXG4gICAgICAgICAgICBzdlVybCA9IGAke3N2VXJsfT9mb2xkZXJJZD0ke2ZvbGRlcklkfWA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQ8UmVzcG9uc2VSZXN1bHQ+KHN2VXJsKS5waXBlKFxyXG4gICAgICAgICAgICBzaGFyZVJlcGxheSh0aGlzLlJFUExBWV9DT1VOVCksXHJcbiAgICAgICAgICAgIHJldHJ5KHRoaXMuUkVUUllfQ09VTlQpLFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVycikpXHJcbiAgICAgICAgKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRVc2VyU2hhcmluZ0J5RmlsZShmaWxlSWQ6IHN0cmluZyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBsZXQgc3ZVcmwgPSBgJHt0aGlzLl9zZXJ2aWNlVXJpfS9GaWxlL0dldFVzZXJTaGFyaW5nQnlGaWxlYDtcclxuICAgICAgICBpZiAoZmlsZUlkKSB7XHJcbiAgICAgICAgICAgIHN2VXJsID0gYCR7c3ZVcmx9P2ZpbGVJZD0ke2ZpbGVJZH1gO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0PFJlc3BvbnNlUmVzdWx0PihzdlVybCkucGlwZShcclxuICAgICAgICAgICAgc2hhcmVSZXBsYXkodGhpcy5SRVBMQVlfQ09VTlQpLFxyXG4gICAgICAgICAgICByZXRyeSh0aGlzLlJFVFJZX0NPVU5UKSxcclxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpKVxyXG4gICAgICAgICkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Rm9sZGVySWQodXNlcklkOiBzdHJpbmcpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgbGV0IHN2VXJsID0gYCR7dGhpcy5fc2VydmljZVVyaX0vRm9sZGVyL0dldEZvbGRlcklkYDtcclxuICAgICAgICBpZiAodXNlcklkKSB7XHJcbiAgICAgICAgICAgIHN2VXJsID0gYCR7c3ZVcmx9P3VzZXJJZD0ke3VzZXJJZH1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQ8UmVzcG9uc2VSZXN1bHQ+KHN2VXJsKS5waXBlKFxyXG4gICAgICAgICAgICBzaGFyZVJlcGxheSh0aGlzLlJFUExBWV9DT1VOVCksXHJcbiAgICAgICAgICAgIHJldHJ5KHRoaXMuUkVUUllfQ09VTlQpLFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVycikpXHJcbiAgICAgICAgKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBpc1N1cHBvcnRlZFZpZXdPbmxpbmUoZmlsZU5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIC8vIGZpbGUga2jDtG5nIGPDsyDEkXXhu5VpIC0+IGxv4bqhaVxyXG4gICAgICAgIGlmIChmaWxlTmFtZS5sYXN0SW5kZXhPZignLicpID09PSAtMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBmaWxlVHlwZSA9IGZpbGVOYW1lLnN1YnN0cmluZyhmaWxlTmFtZS5sYXN0SW5kZXhPZignLicpICsgMSk7XHJcblxyXG4gICAgICAgIGlmICgoLyhnaWZ8anBnfGpwZWd8dGlmZnxwbmcpJC9pKS50ZXN0KGZpbGVUeXBlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKCgvKGRvY3xkb2NtfGRvY3h8ZG90fGRvdG18ZG90eHxlcHVifGZvZHR8aHRtfGh0bWx8bWh0fG9kdHxvdHR8cGRmfHJ0Znx0eHR8ZGp2dXx4cHMpJC9pKS50ZXN0KGZpbGVUeXBlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKCgvKGNzdnxmb2RzfG9kc3xvdHN8eGxzfHhsc218eGxzeHx4bHR8eGx0bXx4bHR4KSQvaSkudGVzdChmaWxlVHlwZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSBlbHNlIGlmICgoLyhmb2RwfG9kcHxvdHB8cG90fHBvdG18cG90eHxwcHN8cHBzbXxwcHN4fHBwdHxwcHRtfHBwdHgpJC9pKS50ZXN0KGZpbGVUeXBlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKCgvKG1wNHxtb3Z8YXZpfHdtdnx2b2J8cm18YXNmfDNncCkkL2kpLnRlc3QoZmlsZVR5cGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoKC8obXAzfHdtYXx3YXZ8d212fG9nZykkL2kpLnRlc3QoZmlsZVR5cGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEZpbGVUeXBlKGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChmaWxlTmFtZS5sYXN0SW5kZXhPZignLicpID09PSAtMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBhcnIgPSBmaWxlTmFtZS5zcGxpdCgnLicpO1xyXG4gICAgICAgIHJldHVybiBhcnJbYXJyLmxlbmd0aCAtIDFdO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnZlcnRUb1BkZihmaWxlTmFtZTogc3RyaW5nLCBmaWxlSWQ6IHN0cmluZywgaXNGaWxlVmVyc2lvbjogYm9vbGVhbik6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc2VydmljZSA9IGAke3RoaXMuX2RvY3VtZW50U2VydmVyVXJsfS9Db252ZXJ0U2VydmljZS5hc2h4YDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVMaW5rRG93bmxvYWQoPEdlbmVyYXRlTGlua0Rvd25sb2FkRFRPPntcclxuICAgICAgICAgICAgICAgIGZpbGVJZDogZmlsZUlkLFxyXG4gICAgICAgICAgICAgICAgaXNGaWxlVmVyc2lvbjogaXNGaWxlVmVyc2lvblxyXG4gICAgICAgICAgICB9KS50aGVuKHJzID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRvd25sb2FkVXJsID0gdGhpcy5nZXRBbm9ueW1vdXNEb3dubG9hZFVybChycy5kYXRhKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIFwiYXN5bmNcIjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJmaWxldHlwZVwiOiB0aGlzLmdldEZpbGVUeXBlKGZpbGVOYW1lKSxcclxuICAgICAgICAgICAgICAgICAgICBcImtleVwiOiB0aGlzLl9jb21tb25TZXJpdmNlLnJhbmRvbVN0cmluZ1dpdGhOb3REZWxpbWl0ZXIoKSxcclxuICAgICAgICAgICAgICAgICAgICBcIm91dHB1dHR5cGVcIjogXCJwZGZcIixcclxuICAgICAgICAgICAgICAgICAgICBcInRpdGxlXCI6IGZpbGVOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIFwidXJsXCI6IGRvd25sb2FkVXJsXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5faHR0cC5wb3N0KHNlcnZpY2UsIGlucHV0KS50b1Byb21pc2UoKS50aGVuKChyc0NvbnZlcnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocnNDb252ZXJ0LmZpbGVVcmwpO1xyXG4gICAgICAgICAgICAgICAgfSwgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QobnVsbCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSwgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIHJlamVjdChudWxsKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpbnQoZmlsZVVybDogc3RyaW5nKSB7XHJcbiAgICAgICAgcHJpbnRKUyhkZWNvZGVVUkkoZmlsZVVybCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGRvd25sb2FkQnlJZnJhbWUoX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIGZpbGVJZCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuZ2V0RmlsZURvd25sb2FkVXJsKGZpbGVJZCk7XHJcbiAgICAgICAgY29uc3QgaWZyYW1lID0gYDxpZnJhbWUgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCIgd2lkdGg9XCIwXCIgaGVpZ2h0PVwiMFwiIHNyYz1cIiR7dXJsfVwiPjwvaWZyYW1lPmA7XHJcbiAgICAgICAgX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5pbnNlcnRBZGphY2VudEhUTUwoJ2JlZm9yZWVuZCcsIGlmcmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlRXJyb3IoZXJyb3I6IGFueSkge1xyXG4gICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwMSkge1xyXG4gICAgICAgICAgICB0aGlzLl9hdXRoZW5TZXJ2aWNlLnRyeUxvZ2luQW5kTG9nb3V0SWZGYWxzZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xyXG4gICAgfVxyXG5cclxuICAgIHN1cHBvcnREaWdpdGFsU2lnbmF0dXJlKGZpbGVOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoZmlsZU5hbWUubGFzdEluZGV4T2YoJy4nKSA9PT0gLTEpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgdmFyIGZpbGVFeHRBcnIgPSBmaWxlTmFtZS5zcGxpdCgnLicpO1xyXG4gICAgICAgIHJldHVybiBmaWxlRXh0QXJyW2ZpbGVFeHRBcnIubGVuZ3RoIC0gMV0udG9Mb3dlckNhc2UoKSA9PT0gJ3BkZic7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZVNpZ25lZEZpbGUoZGF0YTogYW55KTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnBvc3Q8UmVzcG9uc2VSZXN1bHQ+KGAke3RoaXMuX3NlcnZpY2VVcml9L1NpZ25hdHVyZS9TYXZlU2lnbmVkRmlsZWAsIGRhdGEpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNpZ25hdHVyZUluZm9CeUZpbGVJZChmaWxlSWQ6IHN0cmluZyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQ8UmVzcG9uc2VSZXN1bHQ+KGAke3RoaXMuX3NlcnZpY2VVcml9L1NpZ25hdHVyZS9HZXRMaXN0U2lnbmF0dXJlQnlGaWxlSWQ/ZmlsZUlkPSR7ZmlsZUlkfWApLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNpZ25hdHVyZUluZm9CeUZpbGVWZXJzaW9uSWQoZmlsZVZlcnNpb25JZDogc3RyaW5nKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldDxSZXNwb25zZVJlc3VsdD4oYCR7dGhpcy5fc2VydmljZVVyaX0vU2lnbmF0dXJlL0dldExpc3RTaWduYXR1cmVCeUZpbGVWZXJzaW9uSWQ/ZmlsZVZlcnNpb25JZD0ke2ZpbGVWZXJzaW9uSWR9YCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SW1hZ2VGaWxlQmFzZTY0KGZpbGVJZDogc3RyaW5nLCBleHRlbnNpb24gPSAnanBnJywgd2lkdGggPSAwLCBoZWlnaHQgPSAwKTogUHJvbWlzZTxhbnk+IHsgLy8gcmV0dXJuIGJhc2UgNjRcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLl9zZXJ2aWNlVXJpfS9GaWxlL2dldEltYWdlRmlsZUJhc2U2ND9maWxlSWQ9JHtmaWxlSWR9JmV4dGVuc2lvbj0ke2V4dGVuc2lvbn0md2lkdGg9JHt3aWR0aH0maGVpZ2h0PSR7aGVpZ2h0fWA7XHJcbiAgICAgICAgICAgIHRoaXMuX2h0dHAuZ2V0PGFueT4odXJsLCB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InIGFzICdqc29uJyB9KVxyXG4gICAgICAgICAgICAgICAgLnRvUHJvbWlzZSgpLnRoZW4ocnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlYWRlci5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVhZGVyLnJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChycykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChycyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG51bGwpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2VydmljZUZpbGVFeHBsb3Jlcihtb2RlbDogU2VydmljZVJlcXVlc3RNb2RlbCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCBzdlVybCA9IGAke3RoaXMuX3NlcnZpY2VVcml9L0ZpbGUvR2V0U2VydmljZUZpbGVFeHBsb3Jlcj9zZXJ2aWNlPSR7bW9kZWwuc2VydmljZX0mZW50aXR5PSR7bW9kZWwuZW50aXR5fSZlbnRpdHlJbnN0YW5jZUlkPSR7bW9kZWwuZW50aXR5SW5zdGFuY2VJZH1gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldDxSZXNwb25zZVJlc3VsdD4oc3ZVcmwpXHJcbiAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyKSkpXHJcbiAgICAgICAgICAgIC50b1Byb21pc2UoKTtcclxuICAgIH1cclxufVxyXG4iXX0=
316
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1leHBsb3Jlci1uZXcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvIiwic291cmNlcyI6WyJjb21wb25lbnRzL2ZpbGUtZXhwbG9yZXIvc2VydmljZXMvZmlsZS1leHBsb3Jlci1uZXcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFxQixNQUFNLHNCQUFzQixDQUFDO0FBQ3JFLE9BQU8sRUFBYyxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sUUFBUSxNQUFNLFVBQVUsQ0FBQztBQUNoQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFN0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFHOUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7QUFPL0UscUJBQXFCO0FBQ3JCLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQztBQUt6QixNQUFNLE9BQU8sc0JBQXVCLFNBQVEsV0FBVztJQVVuRCxZQUNJLElBQWdCLEVBQ2hCLFFBQWtCLEVBQ1Ysb0JBQXlDO1FBRWpELEtBQUssQ0FDRCxJQUFJLEVBQ0osUUFBUSxFQUNSLEdBQUcsb0JBQW9CLENBQUMsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FDM0UsQ0FBQTtRQU5PLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBcUI7UUFYNUMsZ0JBQVcsR0FBVyxDQUFDLENBQUM7UUFDeEIsaUJBQVksR0FBVyxDQUFDLENBQUM7UUFpQjlCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsRUFB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QUUsQ0FBQztRQUMzSixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFpQixLQUFLLENBQUM7YUFDdkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQXNCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUNuRSxTQUFTLEVBQUUsQ0FBQztJQUNyQixDQUFDOzs7O1lBOWJKLFVBQVUsU0FBQztnQkFDUixVQUFVLEVBQUUsTUFBTTthQUNyQjs7O1lBdkJRLFVBQVU7WUFDYyxRQUFRO1lBT2hDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBFbGVtZW50UmVmLCBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgcHJpbnRKU18gZnJvbSAncHJpbnQtanMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCByZXRyeSwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFJlc3BvbnNlUmVzdWx0IH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3Jlc3BvbnNlLXJlc3VsdCc7XHJcbmltcG9ydCB7IEF1dGhlblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hdXRoZW4uc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYmFzZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2NvbW1vbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21vZHVsZS1jb25maWcuc2VydmljZSc7XHJcbmltcG9ydCB7IENvcHlGaWxlRHRvIH0gZnJvbSAnLi4vbW9kZWxzL2NvcHktZmlsZS1kdG8nO1xyXG5pbXBvcnQgeyBGb2xkZXJDcmVhdGVBbmRTZXRQZXJtaXNzaW9uRFRPIH0gZnJvbSAnLi4vbW9kZWxzL2ZvbGRlci1jcmVhdGUtYW5kLXNldC1wZXJtaXNzaW9uLWR0byc7XHJcbmltcG9ydCB7IEdlbmVyYXRlTGlua0Rvd25sb2FkRFRPIH0gZnJvbSAnLi4vbW9kZWxzL2dlbmVyYXRlLWxpbmstZG93bmxvYWQtZHRvJztcclxuaW1wb3J0IHsgTW92ZUZpbGVEVE8gfSBmcm9tICcuLi9tb2RlbHMvbW92ZS1maWxlLWR0byc7XHJcbmltcG9ydCB7IFNoYXJlRmlsZURUTyB9IGZyb20gJy4uL21vZGVscy9zaGFyZS1maWxlLWR0byc7XHJcbmltcG9ydCB7IFNoYXJlRm9sZGVyRFRPIH0gZnJvbSAnLi4vbW9kZWxzL3NoYXJlLWZvbGRlci1kdG8nO1xyXG5pbXBvcnQgeyBNb2R1bGVDb25maWcgfSBmcm9tICcuLy4uLy4uLy4uL2NvbmZpZ3MvbW9kdWxlLWNvbmZpZyc7XHJcbmltcG9ydCB7IFNlcnZpY2VSZXF1ZXN0TW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvc2VydmljZS1yZXF1ZXN0LW1vZGVsJztcclxuXHJcbi8vIGZpeCBmb3IgYnVpbGQgcHJvZFxyXG5jb25zdCBwcmludEpTID0gcHJpbnRKU187XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEZpbGVFeHBsb3Jlck5ld1NlcnZpY2UgZXh0ZW5kcyBCYXNlU2VydmljZSB7XHJcblxyXG4gICAgcmVhZG9ubHkgUkVUUllfQ09VTlQ6IG51bWJlciA9IDA7XHJcbiAgICByZWFkb25seSBSRVBMQVlfQ09VTlQ6IG51bWJlciA9IDE7XHJcbiAgICBfZG9jdW1lbnRTZXJ2ZXJVcmw6IGFueTtcclxuICAgIHJlYWRvbmx5IF9zZXJ2aWNlVXJpO1xyXG4gICAgcHJpdmF0ZSBfYXV0aGVuU2VydmljZTogQXV0aGVuU2VydmljZTtcclxuICAgIHByaXZhdGUgX2NvbW1vblNlcml2Y2U6IENvbW1vblNlcnZpY2U7XHJcbiAgICBwcml2YXRlIF9tb2R1bGVDb25maWc6IE1vZHVsZUNvbmZpZztcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgICAgICBwcml2YXRlIF9tb2R1bGVDb25maWdTZXJ2aWNlOiBNb2R1bGVDb25maWdTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihcclxuICAgICAgICAgICAgaHR0cCxcclxuICAgICAgICAgICAgaW5qZWN0b3IsXHJcbiAgICAgICAgICAgIGAke19tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaURvbWFpbi5maWxlRW5kcG9pbnR9YFxyXG4gICAgICAgIClcclxuICAgICAgICB0aGlzLl9tb2R1bGVDb25maWcgPSB0aGlzLl9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpO1xyXG4gICAgICAgIHRoaXMuc2VydmljZVVyaSA9IHRoaXMuX21vZHVsZUNvbmZpZy5lbnZpcm9ubWVudC5hcGlEb21haW4uZmlsZUVuZHBvaW50O1xyXG4gICAgfVxyXG5cclxuICAgIGdldE15RmlsZXMoKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHN2VXJsID0gYCR7dGhpcy5fc2VydmljZVVyaX0vRmlsZS9HZXRNeUZpbGVzYDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0PFJlc3BvbnNlUmVzdWx0PihzdlVybCkucGlwZShcclxuICAgICAgICAgICAgc2hhcmVSZXBsYXkodGhpcy5SRVBMQVlfQ09VTlQpLFxyXG4gICAgICAgICAgICByZXRyeSh0aGlzLlJFVFJZX0NPVU5UKSxcclxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpKVxyXG4gICAgICAgICkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QnlGb2xkZXJJZChmb2xkZXJJZDogc3RyaW5nKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGlmIChmb2xkZXJJZCA9PSAnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJykge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoeyBzdGF0dXM6IDQwMCB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHN2VXJsID0gYCR7dGhpcy5fc2VydmljZVVyaX0vRmlsZT9mb2xkZXJJZD0ke2ZvbGRlcklkfWA7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldDxSZXNwb25zZVJlc3VsdD4oc3ZVcmwpLnBpcGUoXHJcbiAgICAgICAgICAgIHNoYXJlUmVwbGF5KHRoaXMuUkVQTEFZX0NPVU5UKSxcclxuICAgICAgICAgICAgcmV0cnkodGhpcy5SRVRSWV9DT1VOVCksXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyKSlcclxuICAgICAgICApLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE15RHJpdmUoZm9sZGVySWQ6IHN0cmluZyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBpZiAoZm9sZGVySWQgPT0gJzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHsgc3RhdHVzOiA0MDAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBzdlVybCA9IGAke3RoaXMuX3NlcnZpY2VVcml9L0ZpbGUvR2V0TXlEcml2ZT9mb2xkZXJJZD0ke2ZvbGRlcklkfWA7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldDxSZXNwb25zZVJlc3VsdD4oc3ZVcmwpLnBpcGUoXHJcbiAgICAgICAgICAgIHNoYXJlUmVwbGF5KHRoaXMuUkVQTEFZX0NPVU5UKSxcclxuICAgICAgICAgICAgcmV0cnkodGhpcy5SRVRSWV9DT1VOVCksXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyKSlcclxuICAgICAgICApLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE15U2hhcmUodXNlcklkOiBudW1iZXIpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgaWYgKHVzZXJJZCA8IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHsgc3RhdHVzOiA0MDAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBzdlVybCA9IGAke3RoaXMuX3NlcnZpY2VVcml9L0ZvbGRlci9HZXRNeVNoYXJlP3VzZXJJZD0ke3VzZXJJZH1gO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQ8UmVzcG9uc2VSZXN1bHQ+KHN2VXJsKS5waXBlKFxyXG4gICAgICAgICAgICBzaGFyZVJlcGxheSh0aGlzLlJFUExBWV9DT1VOVCksXHJcbiAgICAgICAgICAgIHJldHJ5KHRoaXMuUkVUUllfQ09VTlQpLFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVycikpXHJcbiAgICAgICAgKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIGdldE15U2hhcmVUb090aGVyKG93bmVySWQ6IG51bWJlcik6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBpZiAob3duZXJJZCA8IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHsgc3RhdHVzOiA0MDAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBzdlVybCA9IGAke3RoaXMuX3NlcnZpY2VVcml9L0ZvbGRlci9HZXRNeVNoYXJlVG9PdGhlcj9vd25lcklkPSR7b3duZXJJZH1gO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQ8UmVzcG9uc2VSZXN1bHQ+KHN2VXJsKS5waXBlKFxyXG4gICAgICAgICAgICBzaGFyZVJlcGxheSh0aGlzLlJFUExBWV9DT1VOVCksXHJcbiAgICAgICAgICAgIHJldHJ5KHRoaXMuUkVUUllfQ09VTlQpLFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVycikpXHJcbiAgICAgICAgKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGb2xkZXJUcmVlKGZvbGRlcklkOiBzdHJpbmcpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgaWYgKGZvbGRlcklkID09ICcwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh7IHN0YXR1czogNDAwIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYXBpVXJsID0gYCR7dGhpcy5fc2VydmljZVVyaX0vRmlsZS9HZXRUcmVlP2ZvbGRlcklkPSR7Zm9sZGVySWR9YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQ8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybClcclxuICAgICAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpKSlcclxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvcHlGaWxlKGNvcHlGaWxlRHRvOiBDb3B5RmlsZUR0byk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCBzdlVybCA9IGAke3RoaXMuX3NlcnZpY2VVcml9L0ZpbGUvQ29weUZpbGVgO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnBvc3Q8UmVzcG9uc2VSZXN1bHQ+KHN2VXJsLCBjb3B5RmlsZUR0bykucGlwZShcclxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpKVxyXG4gICAgICAgICkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlTmV3Rm9sZGVyKGZvbGRlcjogRm9sZGVyQ3JlYXRlQW5kU2V0UGVybWlzc2lvbkRUTyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCBzdlVybCA9IGAke3RoaXMuX3NlcnZpY2VVcml9L0ZvbGRlcmA7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnBvc3Q8UmVzcG9uc2VSZXN1bHQ+KHN2VXJsLCBmb2xkZXIpLnBpcGUoXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyKSlcclxuICAgICAgICApLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZUZvbGRlcihmb2xkZXJJZDogc3RyaW5nKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHN2VXJsID0gYCR7dGhpcy5fc2VydmljZVVyaX0vRm9sZGVyLyR7Zm9sZGVySWR9YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5kZWxldGU8UmVzcG9uc2VSZXN1bHQ+KHN2VXJsKS5waXBlKFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVycikpXHJcbiAgICAgICAgKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVNdWx0aXBsZUZvbGRlcihmb2xkZXJJZHM6IHN0cmluZyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCBzdlVybCA9IGAke3RoaXMuX3NlcnZpY2VVcml9L0ZvbGRlci9kZWxldGVNdWx0aXBsZUZvbGRlci8ke2ZvbGRlcklkc31gO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5kZWxldGU8UmVzcG9uc2VSZXN1bHQ+KHN2VXJsKS5waXBlKFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVycikpXHJcbiAgICAgICAgKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5hbWVGb2xkZXIoZm9sZGVySWQ6IHN0cmluZywgbmV3Rm9sZGVyTmFtZTogc3RyaW5nKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHN2VXJsID0gYCR7dGhpcy5fc2VydmljZVVyaX0vRm9sZGVyLyR7Zm9sZGVySWR9L1JlbmFtZUZvbGRlci8ke25ld0ZvbGRlck5hbWV9YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wYXRjaDxSZXNwb25zZVJlc3VsdD4oc3ZVcmwsIHt9KS5waXBlKFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVycikpXHJcbiAgICAgICAgKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBzaGFyZUZvbGRlcihzaGFyZUZvbGRlcjogU2hhcmVGb2xkZXJEVE8pOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3Qgc3ZVcmwgPSBgJHt0aGlzLl9zZXJ2aWNlVXJpfS9Gb2xkZXIvU2hhcmVGb2xkZXJgO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wb3N0PFJlc3BvbnNlUmVzdWx0PihzdlVybCwgc2hhcmVGb2xkZXIpLnBpcGUoXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyKSlcclxuICAgICAgICApLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZVNoYXJlRm9sZGVyKGZvbGRlcklkOiBzdHJpbmcsIG9iamVjdElkOiBzdHJpbmcpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3Qgc3ZVcmwgPSBgJHt0aGlzLl9zZXJ2aWNlVXJpfS9Gb2xkZXIvJHtmb2xkZXJJZH0vRGVsZXRlU2hhcmVGb2xkZXIvJHtvYmplY3RJZH1gO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5kZWxldGU8UmVzcG9uc2VSZXN1bHQ+KHN2VXJsKS5waXBlKFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVycikpXHJcbiAgICAgICAgKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRVcGxvYWRVcmwoKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuX3NlcnZpY2VVcml9L0ZpbGVgO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEZpbGVEb3dubG9hZFVybChmaWxlSWQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLl9zZXJ2aWNlVXJpfS9GaWxlLyR7ZmlsZUlkfS9kb3dubG9hZGA7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QmluYXJ5RmlsZUJ5RmlsZUlkKGZpbGVJZDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9odHRwLmdldCh0aGlzLmdldEZpbGVEb3dubG9hZFVybChmaWxlSWQpKS50b1Byb21pc2UoKS50aGVuKHJzID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJzKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKG51bGwpO1xyXG4gICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4gcmVqZWN0KGVycikpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNjYW5GaWxlVXBsb2FkRW5kcG9pbnQoY29ycmVsYXRpb25JZDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuX3NlcnZpY2VVcml9L0ZpbGUvQ3JlYXRlU2Nhbm5lZEZpbGUvJHtjb3JyZWxhdGlvbklkfWA7XHJcbiAgICB9XHJcbiAgICBnZXRGaWxlKGZpbGVJZDogc3RyaW5nKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHN2VXJsID0gYCR7dGhpcy5fc2VydmljZVVyaX0vRmlsZS8ke2ZpbGVJZH1gO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQ8UmVzcG9uc2VSZXN1bHQ+KHN2VXJsKS5waXBlKFxyXG4gICAgICAgICAgICBzaGFyZVJlcGxheSh0aGlzLlJFUExBWV9DT1VOVCksXHJcbiAgICAgICAgICAgIHJldHJ5KHRoaXMuUkVUUllfQ09VTlQpLFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVycikpXHJcbiAgICAgICAgKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGaWxlVmVyc2lvbkRvd25sb2FkVXJsKGZpbGVWZXJzaW9uSWQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLl9zZXJ2aWNlVXJpfS9GaWxlVmVyc2lvbi8ke2ZpbGVWZXJzaW9uSWR9L2Rvd25sb2FkYDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBbm9ueW1vdXNEb3dubG9hZFVybChoYXNoOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5fc2VydmljZVVyaX0vRG93bmxvYWQvJHtoYXNofWA7XHJcbiAgICB9XHJcblxyXG4gICAgZ2VuZXJhdGVMaW5rRG93bmxvYWQobW9kZWw6IEdlbmVyYXRlTGlua0Rvd25sb2FkRFRPKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHN2VXJsID0gYCR7dGhpcy5fc2VydmljZVVyaX0vRG93bmxvYWQvR2VuZXJhdGVEb3dubG9hZExpbmtgO1xyXG5cclxuICAgICAgICBpZiAobW9kZWwuaXNGaWxlVmVyc2lvbiAmJiAhbW9kZWwuZmlsZVZlcnNpb25JZCkge1xyXG4gICAgICAgICAgICBtb2RlbC5maWxlVmVyc2lvbklkID0gbW9kZWwuZmlsZUlkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucG9zdDxSZXNwb25zZVJlc3VsdD4oc3ZVcmwsIG1vZGVsKS5waXBlKFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVycikpKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBkb3dubG9hZEZpbGUoZmlsZUlkOiBzdHJpbmcsIGlzRmlsZVZlcnNpb246IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIGNvbnN0IG1vZGVsID0gbmV3IEdlbmVyYXRlTGlua0Rvd25sb2FkRFRPKCk7XHJcbiAgICAgICAgbW9kZWwuZmlsZUlkID0gZmlsZUlkO1xyXG4gICAgICAgIG1vZGVsLmlzRmlsZVZlcnNpb24gPSBpc0ZpbGVWZXJzaW9uO1xyXG4gICAgICAgIHRoaXMuZ2VuZXJhdGVMaW5rRG93bmxvYWQobW9kZWwpLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBkb3dubG9hZFVybCA9IHRoaXMuZ2V0QW5vbnltb3VzRG93bmxvYWRVcmwocmVzcG9uc2UuZGF0YSk7XHJcbiAgICAgICAgICAgIHdpbmRvdy5vcGVuKGRvd25sb2FkVXJsKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZW5lcmF0ZUxpbmtEb3dubG9hZE11bHRpcGxlKG1vZGVsOiBHZW5lcmF0ZUxpbmtEb3dubG9hZERUT1tdKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHN2VXJsID0gYCR7dGhpcy5fc2VydmljZVVyaX0vRG93bmxvYWQvR2VuZXJhdGVEb3dubG9hZE11bHRpcGxlTGlua2A7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnBvc3Q8UmVzcG9uc2VSZXN1bHQ+KHN2VXJsLCBtb2RlbCkucGlwZShcclxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpKSkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QmluYXJ5RmlsZShsaW5rRG93bmxvYWQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldChsaW5rRG93bmxvYWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldE1vdmVGaWxlSXRlbShtb3ZlRmlsZTogTW92ZUZpbGVEVE8pOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3Qgc3ZVcmwgPSBgJHt0aGlzLl9zZXJ2aWNlVXJpfS9GaWxlL01vdmVGaWxlYDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucG9zdDxSZXNwb25zZVJlc3VsdD4oc3ZVcmwsIG1vdmVGaWxlKS5waXBlKFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVycikpXHJcbiAgICAgICAgKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVGaWxlKGZpbGVJZDogc3RyaW5nKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHN2VXJsID0gYCR7dGhpcy5fc2VydmljZVVyaX0vRmlsZS8ke2ZpbGVJZH1gO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5kZWxldGU8UmVzcG9uc2VSZXN1bHQ+KHN2VXJsKS5waXBlKFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVycikpXHJcbiAgICAgICAgKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVNdWx0aXBsZUZpbGUoZmlsZUlkczogc3RyaW5nKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHN2VXJsID0gYCR7dGhpcy5fc2VydmljZVVyaX0vRmlsZS9kZWxldGVNdWx0aXBsZUZpbGUvJHtmaWxlSWRzfWA7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmRlbGV0ZTxSZXNwb25zZVJlc3VsdD4oc3ZVcmwpLnBpcGUoXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyKSlcclxuICAgICAgICApLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZUZpbGVWZXJzaW9uKGZpbGVWZXJzaW9uSWQ6IHN0cmluZyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCBzdlVybCA9IGAke3RoaXMuX3NlcnZpY2VVcml9L0ZpbGVWZXJzaW9uLyR7ZmlsZVZlcnNpb25JZH1gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmRlbGV0ZTxSZXNwb25zZVJlc3VsdD4oc3ZVcmwpLnBpcGUoXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyKSlcclxuICAgICAgICApLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmFtZUZpbGUoZmlsZUlkOiBzdHJpbmcsIG5ld0ZpbGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3Qgc3ZVcmwgPSBgJHt0aGlzLl9zZXJ2aWNlVXJpfS9GaWxlLyR7ZmlsZUlkfS9SZW5hbWVGaWxlLyR7bmV3RmlsZU5hbWV9YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wYXRjaDxSZXNwb25zZVJlc3VsdD4oc3ZVcmwsIHt9KS5waXBlKFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVycikpXHJcbiAgICAgICAgKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBzaGFyZUZpbGUoc2hhcmVGaWxlOiBTaGFyZUZpbGVEVE8pOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3Qgc3ZVcmwgPSBgJHt0aGlzLl9zZXJ2aWNlVXJpfS9GaWxlL1NoYXJlRmlsZWA7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnBvc3Q8UmVzcG9uc2VSZXN1bHQ+KHN2VXJsLCBzaGFyZUZpbGUpLnBpcGUoXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyKSlcclxuICAgICAgICApLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZVNoYXJlRmlsZShmaWxlSWQ6IHN0cmluZywgb2JqZWN0SWQ6IHN0cmluZyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCBzdlVybCA9IGAke3RoaXMuX3NlcnZpY2VVcml9L0ZpbGUvJHtmaWxlSWR9L0RlbGV0ZVNoYXJlRmlsZS8ke29iamVjdElkfWA7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmRlbGV0ZTxSZXNwb25zZVJlc3VsdD4oc3ZVcmwpLnBpcGUoXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyKSlcclxuICAgICAgICApLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNoYXJlZEZpbGVzKGZvbGRlcklkPzogc3RyaW5nKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGxldCBzdlVybCA9IGAke3RoaXMuX3NlcnZpY2VVcml9L0ZpbGUvR2V0TXlTaGFyZWRGaWxlc2A7XHJcbiAgICAgICAgaWYgKGZvbGRlcklkKSB7XHJcbiAgICAgICAgICAgIHN2VXJsID0gYCR7c3ZVcmx9P2ZvbGRlcklkPSR7Zm9sZGVySWR9YDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldDxSZXNwb25zZVJlc3VsdD4oc3ZVcmwpLnBpcGUoXHJcbiAgICAgICAgICAgIHNoYXJlUmVwbGF5KHRoaXMuUkVQTEFZX0NPVU5UKSxcclxuICAgICAgICAgICAgcmV0cnkodGhpcy5SRVRSWV9DT1VOVCksXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyKSlcclxuICAgICAgICApLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFVzZXJTaGFyaW5nQnlGaWxlKGZpbGVJZDogc3RyaW5nKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGxldCBzdlVybCA9IGAke3RoaXMuX3NlcnZpY2VVcml9L0ZpbGUvR2V0VXNlclNoYXJpbmdCeUZpbGVgO1xyXG4gICAgICAgIGlmIChmaWxlSWQpIHtcclxuICAgICAgICAgICAgc3ZVcmwgPSBgJHtzdlVybH0/ZmlsZUlkPSR7ZmlsZUlkfWA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQ8UmVzcG9uc2VSZXN1bHQ+KHN2VXJsKS5waXBlKFxyXG4gICAgICAgICAgICBzaGFyZVJlcGxheSh0aGlzLlJFUExBWV9DT1VOVCksXHJcbiAgICAgICAgICAgIHJldHJ5KHRoaXMuUkVUUllfQ09VTlQpLFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVycikpXHJcbiAgICAgICAgKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGb2xkZXJJZCh1c2VySWQ6IHN0cmluZyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBsZXQgc3ZVcmwgPSBgJHt0aGlzLl9zZXJ2aWNlVXJpfS9Gb2xkZXIvR2V0Rm9sZGVySWRgO1xyXG4gICAgICAgIGlmICh1c2VySWQpIHtcclxuICAgICAgICAgICAgc3ZVcmwgPSBgJHtzdlVybH0/dXNlcklkPSR7dXNlcklkfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldDxSZXNwb25zZVJlc3VsdD4oc3ZVcmwpLnBpcGUoXHJcbiAgICAgICAgICAgIHNoYXJlUmVwbGF5KHRoaXMuUkVQTEFZX0NPVU5UKSxcclxuICAgICAgICAgICAgcmV0cnkodGhpcy5SRVRSWV9DT1VOVCksXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyKSlcclxuICAgICAgICApLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzU3VwcG9ydGVkVmlld09ubGluZShmaWxlTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgLy8gZmlsZSBraMO0bmcgY8OzIMSRdeG7lWkgLT4gbG/huqFpXHJcbiAgICAgICAgaWYgKGZpbGVOYW1lLmxhc3RJbmRleE9mKCcuJykgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbGVUeXBlID0gZmlsZU5hbWUuc3Vic3RyaW5nKGZpbGVOYW1lLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcclxuXHJcbiAgICAgICAgaWYgKCgvKGdpZnxqcGd8anBlZ3x0aWZmfHBuZykkL2kpLnRlc3QoZmlsZVR5cGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoKC8oZG9jfGRvY218ZG9jeHxkb3R8ZG90bXxkb3R4fGVwdWJ8Zm9kdHxodG18aHRtbHxtaHR8b2R0fG90dHxwZGZ8cnRmfHR4dHxkanZ1fHhwcykkL2kpLnRlc3QoZmlsZVR5cGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoKC8oY3N2fGZvZHN8b2RzfG90c3x4bHN8eGxzbXx4bHN4fHhsdHx4bHRtfHhsdHgpJC9pKS50ZXN0KGZpbGVUeXBlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKCgvKGZvZHB8b2RwfG90cHxwb3R8cG90bXxwb3R4fHBwc3xwcHNtfHBwc3h8cHB0fHBwdG18cHB0eCkkL2kpLnRlc3QoZmlsZVR5cGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoKC8obXA0fG1vdnxhdml8d212fHZvYnxybXxhc2Z8M2dwKSQvaSkudGVzdChmaWxlVHlwZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSBlbHNlIGlmICgoLyhtcDN8d21hfHdhdnx3bXZ8b2dnKSQvaSkudGVzdChmaWxlVHlwZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RmlsZVR5cGUoZmlsZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKGZpbGVOYW1lLmxhc3RJbmRleE9mKCcuJykgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGFyciA9IGZpbGVOYW1lLnNwbGl0KCcuJyk7XHJcbiAgICAgICAgcmV0dXJuIGFyclthcnIubGVuZ3RoIC0gMV07XHJcbiAgICB9XHJcblxyXG4gICAgY29udmVydFRvUGRmKGZpbGVOYW1lOiBzdHJpbmcsIGZpbGVJZDogc3RyaW5nLCBpc0ZpbGVWZXJzaW9uOiBib29sZWFuKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlID0gYCR7dGhpcy5fZG9jdW1lbnRTZXJ2ZXJVcmx9L0NvbnZlcnRTZXJ2aWNlLmFzaHhgO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUxpbmtEb3dubG9hZCg8R2VuZXJhdGVMaW5rRG93bmxvYWREVE8+e1xyXG4gICAgICAgICAgICAgICAgZmlsZUlkOiBmaWxlSWQsXHJcbiAgICAgICAgICAgICAgICBpc0ZpbGVWZXJzaW9uOiBpc0ZpbGVWZXJzaW9uXHJcbiAgICAgICAgICAgIH0pLnRoZW4ocnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZG93bmxvYWRVcmwgPSB0aGlzLmdldEFub255bW91c0Rvd25sb2FkVXJsKHJzLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJhc3luY1wiOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBcImZpbGV0eXBlXCI6IHRoaXMuZ2V0RmlsZVR5cGUoZmlsZU5hbWUpLFxyXG4gICAgICAgICAgICAgICAgICAgIFwia2V5XCI6IHRoaXMuX2NvbW1vblNlcml2Y2UucmFuZG9tU3RyaW5nV2l0aE5vdERlbGltaXRlcigpLFxyXG4gICAgICAgICAgICAgICAgICAgIFwib3V0cHV0dHlwZVwiOiBcInBkZlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwidGl0bGVcIjogZmlsZU5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJ1cmxcIjogZG93bmxvYWRVcmxcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9odHRwLnBvc3Qoc2VydmljZSwgaW5wdXQpLnRvUHJvbWlzZSgpLnRoZW4oKHJzQ29udmVydDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyc0NvbnZlcnQuZmlsZVVybCk7XHJcbiAgICAgICAgICAgICAgICB9LCBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChudWxsKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9LCBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KG51bGwpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcmludChmaWxlVXJsOiBzdHJpbmcpIHtcclxuICAgICAgICBwcmludEpTKGRlY29kZVVSSShmaWxlVXJsKSk7XHJcbiAgICB9XHJcblxyXG4gICAgZG93bmxvYWRCeUlmcmFtZShfZWxlbWVudFJlZjogRWxlbWVudFJlZiwgZmlsZUlkKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5nZXRGaWxlRG93bmxvYWRVcmwoZmlsZUlkKTtcclxuICAgICAgICBjb25zdCBpZnJhbWUgPSBgPGlmcmFtZSBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIiB3aWR0aD1cIjBcIiBoZWlnaHQ9XCIwXCIgc3JjPVwiJHt1cmx9XCI+PC9pZnJhbWU+YDtcclxuICAgICAgICBfZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lmluc2VydEFkamFjZW50SFRNTCgnYmVmb3JlZW5kJywgaWZyYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVFcnJvcihlcnJvcjogYW55KSB7XHJcbiAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2F1dGhlblNlcnZpY2UudHJ5TG9naW5BbmRMb2dvdXRJZkZhbHNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XHJcbiAgICB9XHJcblxyXG4gICAgc3VwcG9ydERpZ2l0YWxTaWduYXR1cmUoZmlsZU5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmIChmaWxlTmFtZS5sYXN0SW5kZXhPZignLicpID09PSAtMSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICB2YXIgZmlsZUV4dEFyciA9IGZpbGVOYW1lLnNwbGl0KCcuJyk7XHJcbiAgICAgICAgcmV0dXJuIGZpbGVFeHRBcnJbZmlsZUV4dEFyci5sZW5ndGggLSAxXS50b0xvd2VyQ2FzZSgpID09PSAncGRmJztcclxuICAgIH1cclxuXHJcbiAgICBzYXZlU2lnbmVkRmlsZShkYXRhOiBhbnkpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucG9zdDxSZXNwb25zZVJlc3VsdD4oYCR7dGhpcy5fc2VydmljZVVyaX0vU2lnbmF0dXJlL1NhdmVTaWduZWRGaWxlYCwgZGF0YSkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2lnbmF0dXJlSW5mb0J5RmlsZUlkKGZpbGVJZDogc3RyaW5nKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldDxSZXNwb25zZVJlc3VsdD4oYCR7dGhpcy5fc2VydmljZVVyaX0vU2lnbmF0dXJlL0dldExpc3RTaWduYXR1cmVCeUZpbGVJZD9maWxlSWQ9JHtmaWxlSWR9YCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2lnbmF0dXJlSW5mb0J5RmlsZVZlcnNpb25JZChmaWxlVmVyc2lvbklkOiBzdHJpbmcpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0PFJlc3BvbnNlUmVzdWx0PihgJHt0aGlzLl9zZXJ2aWNlVXJpfS9TaWduYXR1cmUvR2V0TGlzdFNpZ25hdHVyZUJ5RmlsZVZlcnNpb25JZD9maWxlVmVyc2lvbklkPSR7ZmlsZVZlcnNpb25JZH1gKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJbWFnZUZpbGVCYXNlNjQoZmlsZUlkOiBzdHJpbmcsIGV4dGVuc2lvbiA9ICdqcGcnLCB3aWR0aCA9IDAsIGhlaWdodCA9IDApOiBQcm9taXNlPGFueT4geyAvLyByZXR1cm4gYmFzZSA2NFxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuX3NlcnZpY2VVcml9L0ZpbGUvZ2V0SW1hZ2VGaWxlQmFzZTY0P2ZpbGVJZD0ke2ZpbGVJZH0mZXh0ZW5zaW9uPSR7ZXh0ZW5zaW9ufSZ3aWR0aD0ke3dpZHRofSZoZWlnaHQ9JHtoZWlnaHR9YDtcclxuICAgICAgICAgICAgdGhpcy5faHR0cC5nZXQ8YW55Pih1cmwsIHsgcmVzcG9uc2VUeXBlOiAnYmxvYicgYXMgJ2pzb24nIH0pXHJcbiAgICAgICAgICAgICAgICAudG9Qcm9taXNlKCkudGhlbihycyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZWFkZXIucmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICB9LCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKHJzKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QobnVsbCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTZXJ2aWNlRmlsZUV4cGxvcmVyKG1vZGVsOiBTZXJ2aWNlUmVxdWVzdE1vZGVsKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHN2VXJsID0gYCR7dGhpcy5fc2VydmljZVVyaX0vRmlsZS9HZXRTZXJ2aWNlRmlsZUV4cGxvcmVyP3NlcnZpY2U9JHttb2RlbC5zZXJ2aWNlfSZlbnRpdHk9JHttb2RlbC5lbnRpdHl9JmVudGl0eUluc3RhbmNlSWQ9JHttb2RlbC5lbnRpdHlJbnN0YW5jZUlkfWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0PFJlc3BvbnNlUmVzdWx0PihzdlVybClcclxuICAgICAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpKSlcclxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==