@sunbird-cb/toc 0.35.4 → 0.35.6

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.
@@ -535,8 +535,11 @@ export class EnrollProfileFormComponent {
535
535
  this.addLoader = this.addLoader + 1;
536
536
  this.profileV2Svc.fetchCadre().subscribe((response) => {
537
537
  this.addLoader = this.addLoader - 1;
538
- this.civilServiceData = response.result.response.value.civilServiceType;
539
- this.civilServiceTypes = this.civilServiceData.civilServiceTypeList.map((service) => service.name);
538
+ const value = response && response.result && response.result.response && response.result.response.value;
539
+ if (value && value.civilServiceType) {
540
+ this.civilServiceData = value.civilServiceType;
541
+ this.civilServiceTypes = this.civilServiceData.civilServiceTypeList.map((service) => service.name);
542
+ }
540
543
  });
541
544
  }
542
545
  getIsCadreStatus(value) {
@@ -753,7 +756,6 @@ export class EnrollProfileFormComponent {
753
756
  if (this.batchDetails.batchAttributes.userProfileFileds &&
754
757
  this.batchDetails.batchAttributes.bpEnrolMandatoryProfileFields) {
755
758
  let customAttr = this.batchDetails.batchAttributes.bpEnrolMandatoryProfileFields;
756
- console.log("customAttr ", customAttr);
757
759
  if (this.findAttr(customAttr, 'name')) {
758
760
  this.canShowName = true;
759
761
  this.showname = true;
@@ -1835,4 +1837,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1835
1837
  type: HostListener,
1836
1838
  args: ['document:click', ['$event']]
1837
1839
  }] } });
1838
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5yb2xsLXByb2ZpbGUtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdG9jL3NyYy9saWIvY29tcG9uZW50cy9lbnJvbGwtcHJvZmlsZS1mb3JtL2Vucm9sbC1wcm9maWxlLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL2NvbXBvbmVudHMvZW5yb2xsLXByb2ZpbGUtZm9ybS9lbnJvbGwtcHJvZmlsZS1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDOUYsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFbkUsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFekYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUM5QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQTtBQUt0RSxPQUFPLEVBQXNDLHNCQUFzQixJQUFJLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBRS9ILG9CQUFvQjtBQUNwQixPQUFPLENBQUMsTUFBTSxRQUFRLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFLdEIsTUFBTSxjQUFjLEdBQUcsbUJBQW1CLENBQUE7QUFDMUMsTUFBTSxnQkFBZ0IsR0FBRyxpQkFBaUIsQ0FBQTtBQUMxQyxNQUFNLGNBQWMsR0FBRyxjQUFjLENBQUE7QUFDckMsb0JBQW9CO0FBQ3BCLE1BQU0sYUFBYSxHQUFHLHFIQUFxSCxDQUFB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IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbidcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbmplY3QsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3JtcydcbmltcG9ydCB7IFVzZXJQcm9maWxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3VzZXItcHJvZmlsZS5zZXJ2aWNlJ1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgc3RhcnRXaXRoLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcydcbmltcG9ydCB7IE5zVXNlclByb2ZpbGVEZXRhaWxzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3VzZXItcHJvZmlsZS5tb2RlbCdcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25zU2VydmljZSB9IGZyb20gJ0BzdW5iaXJkLWNiL3V0aWxzLXYyJ1xuaW1wb3J0IHsgUHJvZmlsZVYyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Byb2ZpbGUtdjIuc2VydmljZSdcbmltcG9ydCB7IE90cFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vdHAuc2VydmljZSdcbmltcG9ydCB7IE5QU0dyaWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbnBzLWdyaWQuc2VydmljZSdcbmltcG9ydCB7IE1hdExlZ2FjeURpYWxvZ1JlZiBhcyBNYXREaWFsb2dSZWYsIE1BVF9MRUdBQ1lfRElBTE9HX0RBVEEgYXMgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LWRpYWxvZydcbmltcG9ydCB7IE1hdExlZ2FjeVNuYWNrQmFyIGFzIE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LXNuYWNrLWJhcidcbi8qIHRzbGludDpkaXNhYmxlICovXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSdcbi8vIGltcG9ydCB7IFNpZ251cFNlcnZpY2UgfSBmcm9tICdzcmMvYXBwL3JvdXRlcy9wdWJsaWMvcHVibGljLXNpZ251cC9zaWdudXAuc2VydmljZSdcbmltcG9ydCB7IGRlc2lnbmF0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Byb2ZpbGUtcmV2YW1wLm1vZGVsJ1xuXG5jb25zdCBNT0JJTEVfUEFUVEVSTiA9IC9eWzBdP1s2Nzg5XVxcZHs5fSQvXG5jb25zdCBQSU5fQ09ERV9QQVRURVJOID0gL15bMS05XVswLTldezV9JC9cbmNvbnN0IEVNUF9JRF9QQVRURVJOID0gL15bYS16MC05XSskL2lcbi8qIHRzbGludDpkaXNhYmxlICovXG5jb25zdCBFTUFJTF9QQVRURVJOID0gL15bYS16QS1aMC05XStbYS16QS1aMC05Ll8tXSpbYS16QS1aMC05XStAW2EtekEtWjAtOV0rKFstYS16QS1aMC05XSpbYS16QS1aMC05XSspPyhcXC5bYS16QS1aMC05LV0rKSpcXC5bYS16QS1aXXsyLDR9JC9cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnd3MtYXBwLWVucm9sbC1wcm9maWxlLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vZW5yb2xsLXByb2ZpbGUtZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Vucm9sbC1wcm9maWxlLWZvcm0uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRW5yb2xsUHJvZmlsZUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwdWJsaWMgYWZ0ZXJTdWJtaXRBY3Rpb24gPSB0aGlzLmNoZWNrQWZ0ZXJTdWJtaXQuYmluZCh0aGlzKVxuICBpc1JlYWRPbmx5ID0gZmFsc2VcbiAgYmF0Y2hEZXRhaWxzOiBhbnlcbiAgY3VzdG9tRm9ybTogYm9vbGVhbiA9IGZhbHNlXG4gIHVzZXJEZXRhaWxzRm9ybTogRm9ybUdyb3VwXG4gIGdyb3VwRGF0YTogYW55IHwgdW5kZWZpbmVkXG4gIHByaXZhdGUgZGVzdHJveVN1YmplY3QkID0gbmV3IFN1YmplY3QoKVxuICBkZXNpZ25hdGlvbnNNZXRhOiBhbnkgPSBbXVxuICAvLyBmaWx0ZXJEZXNpZ25hdGlvbnNNZXRhOiBhbnkgPSBbXVxuICBlVXNlckdlbmRlciA9IE9iamVjdC5rZXlzKE5zVXNlclByb2ZpbGVEZXRhaWxzLkVVc2VyR2VuZGVyKVxuICBtYXN0ZXJMYW5ndWFnZXM6IGFueVxuICBtYXN0ZXJMYW5ndWFnZUJhY2t1cDogYW55XG4gIGVDYXRlZ29yeSA9IE9iamVjdC5rZXlzKE5zVXNlclByb2ZpbGVEZXRhaWxzLkVDYXRlZ29yeSlcbiAgdXNlclByb2ZpbGVPYmplY3Q6IGFueVxuICBlbGlnaWJsZTogYm9vbGVhbiA9IGZhbHNlXG4gIGlzQ2FkcmVTdGF0dXMgPSBmYWxzZVxuICBzaG93QmF0Y2hGb3JOb0NhZHJlID0gdHJ1ZVxuICBjaXZpbFNlcnZpY2VEYXRhOiBhbnlcbiAgY2l2aWxTZXJ2aWNlVHlwZXM6IGFueVxuICBzZXJ2aWNlTmFtZTogYW55XG4gIHNlcnZpY2VUeXBlOiBhbnlcbiAgc2VydmljZUxpc3REYXRhOiBhbnlcbiAgc2VydmljZUlkOiBhbnlcbiAgZXJyb3JNZXNzYWdlOiBhbnlcbiAgc2VsZWN0ZWRTZXJ2aWNlTmFtZTogYW55XG4gIHNlbGVjdGVkU2VydmljZTogYW55XG4gIGNpdmlsU2VydmljZU5hbWU6IGFueVxuICBjaXZpbFNlcnZpY2VJZDogYW55XG4gIGNhZHJlSWQ6IGFueVxuICBjYWRyZTogYW55XG4gIGNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHk6IGFueVxuICBzdGFydEJhdGNoOiBhbnlcbiAgZW5kQmF0Y2g6IGFueVxuICB5ZWFyQXJyYXk6IGFueVxuICBleGNsdXNpb25ZZWFyOiBhbnlcbiAgc2VsZWN0ZWRDYWRyZU5hbWU6IGFueVxuICBzZWxlY3RlZENhZHJlOiBhbnlcbiAgdmVyaWZ5TW9iaWxlOiBib29sZWFuID0gZmFsc2VcbiAgb3RwU2VudDogYm9vbGVhbiA9IGZhbHNlXG4gIGVtYWlsT3RwU2VudDogYm9vbGVhbiA9IGZhbHNlXG4gIG90cEVudGVyZWQgPSAnJ1xuICBtVmVyaWZpZWQ6IGJvb2xlYW4gPSBmYWxzZVxuICBlVmVyaWZpZWQ6IGJvb2xlYW4gPSBmYWxzZVxuICBAVmlld0NoaWxkKCd0aW1lckRpdicsIHsgc3RhdGljOiBmYWxzZSB9KSB0aW1lckRpdiAhOiBhbnlcbiAgQFZpZXdDaGlsZCgnZW1haWxUaW1lckRpdicsIHsgc3RhdGljOiBmYWxzZSB9KSBlbWFpbFRpbWVyRGl2ICE6IGFueVxuICB0aW1lTGVmdCA9IDE1MFxuICBlbWFpbFRpbWVMZWZ0ID0gMTUwXG4gIGludGVydmFsOiBhbnlcbiAgZW1haWxJbnRlcnZhbDogYW55XG4gIHNob3dSZXNlbmRPVFAgPSBmYWxzZVxuICBzaG93RW1haWxSZXNlbmRPVFAgPSBmYWxzZVxuICBvdHBGb3JtOiBGb3JtR3JvdXBcbiAgZW1haWxPdHBGb3JtOiBGb3JtR3JvdXBcbiAgc2hvd25hbWUgPSBmYWxzZVxuICBzaG93RGVzaWduYXRpb24gPSBmYWxzZVxuICBzaG93R3JvdXAgPSBmYWxzZVxuICBzaG93RW1wbG95ZWVDb2RlID0gZmFsc2VcbiAgc2hvd01vYmlsZSA9IGZhbHNlXG4gIHNob3dHZW5kZXIgPSBmYWxzZVxuICBzaG93RG9iID0gZmFsc2VcbiAgc2hvd0NhdGVnb3J5ID0gZmFsc2VcbiAgc2hvd0RlY2ltYWxNZWRpdW0gPSBmYWxzZVxuICBzaG93UGluQ29kZSA9IGZhbHNlXG4gIHNob3dDYWRyZURldGFpbHMgPSBmYWxzZVxuICB1cGRhdGVQcm9maWxlID0gZmFsc2VcbiAgcGVuZGluZ0ZpbGVkczogYW55XG4gIHBHcm91cDogYW55XG4gIHBEZXNpZ25hdGlvbjogYW55XG4gIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlXG4gIGNhblNob3dFbXBsb3llZUNvZGU6IGJvb2xlYW4gPSBmYWxzZVxuICBjYW5zaG93TW9iaWxlOiBib29sZWFuID0gZmFsc2VcbiAgY2FuU2hvd0dlbmRlcjogYm9vbGVhbiA9IGZhbHNlXG4gIGNhblNob3dEb2I6IGJvb2xlYW4gPSBmYWxzZVxuICBjYW5TaG93RG9taWNpbGVNZWRpdW06IGJvb2xlYW4gPSBmYWxzZVxuICBjYW5TaG93Q2F0ZWdvcnk6IGJvb2xlYW4gPSBmYWxzZVxuICBjYW5TaG93cGluQ29kZTogYm9vbGVhbiA9IGZhbHNlXG4gIGNhblNob3dzaG93Q2FkcmVEZXRhaWxzOiBib29sZWFuID0gZmFsc2VcbiAgY2FuU2hvd0dyb3VwOiBib29sZWFuID0gZmFsc2VcbiAgY2FuU2hvd0Rlc2lnbmF0aW9uOiBib29sZWFuID0gZmFsc2VcbiAgc2VsZWN0ZWREYXRlOiBhbnlcbiAgc2hvd0NvdW50ZXI6IG51bWJlciA9IDBcbiAgZGlzYWJsZUNvdW50ZXI6IG51bWJlciA9IDBcbiAgY2FuU2hvd0VtYWlsOiBib29sZWFuID0gZmFsc2VcbiAgc2hvd0VtYWlsOiBib29sZWFuID0gZmFsc2VcbiAgY2FuU2hvd05hbWU6IGJvb2xlYW4gPSBmYWxzZVxuICBjYW5TaG93T3JnOiBib29sZWFuID0gZmFsc2VcbiAgc2hvd09yZzogYm9vbGVhbiA9IGZhbHNlXG4gIHN1cnZleUlkOiBhbnlcbiAgc2hvd0RvcHRDaGFuZ2VzOiBib29sZWFuID0gZmFsc2VcbiAgcHJvZmlsZUZvcm1UeXBlOiBhbnlcbiAgdmVyaWZ5RW1haWwgPSBmYWxzZVxuICBhcHByb3ZlZERvbWFpbkxpc3Q6IGFueSA9IFtdXG4gIGNvbnRleHRUb2tlbjogYW55XG4gIGN1cnJlbnREYXRlID0gbmV3IERhdGUoKVxuICBvcGVuRGVzaWduYXRpb25Ecm9wZG93biA9IGZhbHNlXG4gIG9wZW5MYW5ndWFnZURyb3Bkb3duID0gZmFsc2VcbiAgY2FuU2hvd090aGVyRGVzaWduYXRpb24gPSBmYWxzZVxuICBkZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQgPSA1MFxuICBhZGRMb2FkZXIgPSAwXG4gIGlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSBmYWxzZTtcbiAgZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50ID0gIDUwXG4gIGRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gZmFsc2VcbiAgb3JnYW5pc2F0aW9uSWQgPSAnJ1xuICBzZWxlY3RlZE9yZ0hhc0Rlc2lnbmF0aW9ucyA9IGZhbHNlO1xuICBkZXNpZ25hdGlvbnNPZmZzZXQgPSAwO1xuICBkZXNpZ25hdGlvblNlYXJjaFRleHQgPSAnJztcbiAgZGVzaWduYXRpb25zVG90YWxDb3VudCA9IDA7XG4gIGZvcm1JZDogc3RyaW5nID0gJyc7XG4gIGZvcm1zRGV0aWxzOiBhbnk7XG4gIEBWaWV3Q2hpbGQoJ3RleHRCb3gnKSB0ZXh0Qm94ITogRWxlbWVudFJlZlxuICBAVmlld0NoaWxkKCdkcm9wZG93bicpIGRyb3Bkb3duITogRWxlbWVudFJlZlxuICBAVmlld0NoaWxkKCdsYW5ndWFnZVRleHRCb3gnKSBsYW5ndWFnZVRleHRCb3ghOiBFbGVtZW50UmVmXG4gIEBWaWV3Q2hpbGQoJ2xhbmd1YWdlRHJvcGRvd24nKSBsYW5ndWFnZURyb3Bkb3duITogRWxlbWVudFJlZlxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhcixcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8RW5yb2xsUHJvZmlsZUZvcm1Db21wb25lbnQ+LFxuICAgIHByaXZhdGUgdXNlclByb2ZpbGVTZXJ2aWNlOiBVc2VyUHJvZmlsZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maWdTcmM6IENvbmZpZ3VyYXRpb25zU2VydmljZSxcbiAgICBwcml2YXRlIHByb2ZpbGVWMlN2YzogUHJvZmlsZVYyU2VydmljZSxcbiAgICBwcml2YXRlIG90cFNlcnZpY2U6IE90cFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBucHNTdmM6IE5QU0dyaWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSxcbiAgICAvLyBwcml2YXRlIHNpZ251cFNlcnZpY2U6IFNpZ251cFNlcnZpY2UsXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnksXG4gICkge1xuXG4gICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd3ZWJzaXRlTGFuZ3VhZ2UnKSkge1xuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnNldERlZmF1bHRMYW5nKCdlbicpXG4gICAgICBjb25zdCBsYW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3dlYnNpdGVMYW5ndWFnZScpIVxuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnVzZShsYW5nKVxuICAgIH1cblxuICAgIHRoaXMuYmF0Y2hEZXRhaWxzID0gdGhpcy5kYXRhLmJhdGNoRGF0YVxuICAgIHRoaXMuc3VydmV5SWQgPSB0aGlzLmRhdGEuc3VydmV5SWRcbiAgICB0aGlzLnNob3dEb3B0Q2hhbmdlcyA9IHRoaXMuZGF0YS5zaG93RG9wdENoYW5nZXNcbiAgICB0aGlzLnByb2ZpbGVGb3JtVHlwZSA9IHRoaXMuYmF0Y2hEZXRhaWxzLmJhdGNoQXR0cmlidXRlcy51c2VyUHJvZmlsZUZpbGVkc1xuICAgIHRoaXMudXNlckRldGFpbHNGb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICBuYW1lOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgICAgb3JnYW5pc2F0aW9uOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgICAgZ3JvdXA6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgICBkZXNpZ25hdGlvbjogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICAgIGVtcGxveWVlQ29kZTogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICAgIHByaW1hcnlFbWFpbDogbmV3IEZvcm1Db250cm9sKCcnLCBbVmFsaWRhdG9ycy5wYXR0ZXJuKEVNQUlMX1BBVFRFUk4pXSksXG4gICAgICBtb2JpbGU6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgICBnZW5kZXI6IG5ldyBGb3JtQ29udHJvbCgnJywgW10pLFxuICAgICAgZG9iOiBuZXcgRm9ybUNvbnRyb2woJycsIFtdKSxcbiAgICAgIGRvbWljaWxlTWVkaXVtOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgICAgY2F0ZWdvcnk6IG5ldyBGb3JtQ29udHJvbCgnJywgW10pLFxuICAgICAgcGluQ29kZTogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICAgIGlzQ2FkcmU6IG5ldyBGb3JtQ29udHJvbCgpLFxuICAgICAgdHlwZU9mQ2l2aWxTZXJ2aWNlOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgICAgc2VydmljZVR5cGU6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgICBjYWRyZU5hbWU6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgICBjYWRyZUJhdGNoOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgICAgY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eTogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICAgIG90aGVyRGVzaWduYXRpb246IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgICBzZWFyY2hEZXNpZ25hdGlvbjogbmV3IEZvcm1Db250cm9sKCcnKVxuICAgIH0pXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlXG4gICAgdGhpcy51c2VyUHJvZmlsZU9iamVjdCA9IHRoaXMuY29uZmlnU3JjLnVuTWFwcGVkVXNlclxuICAgIHRoaXMub3JnYW5pc2F0aW9uSWQgPSBfLmdldCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LCAncm9vdE9yZ0lkJywgXy5nZXQodGhpcy51c2VyUHJvZmlsZU9iamVjdCwgJ3BlcnNvbmFsRGV0YWlscy5yb290T3JnSWQnLCAnJykpXG5cbiAgICB0aGlzLm90cEZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgIG90cDogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKVxuICAgIH0pXG4gICAgdGhpcy5lbWFpbE90cEZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgIGVPdHA6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZClcbiAgICB9KVxuXG4gICAgLy8gVG8gY2hlY2sgdGhlIG1vYmlsZSBudW1iZXIgZW50ZXJlZCBieSB0aGUgdXNlciBpcyBzYW1lIG9yIG5vdCwgdmFsaWRhdGluZyB0aGUgbW9iaWxlIG51bWJlciB0byBzaG93IHRoZSBHZXQgT1RQLlxuICAgIGlmICh0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ21vYmlsZScpKSB7XG4gICAgICB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ21vYmlsZScpIS52YWx1ZUNoYW5nZXNcbiAgICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgIGlmIChyZXMgJiYgcmVzICE9PSB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5tb2JpbGUgfHxcbiAgICAgICAgICAgICF0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5waG9uZVZlcmlmaWVkKSB7XG4gICAgICAgICAgICBpZiAoTU9CSUxFX1BBVFRFUk4udGVzdChyZXMpKSB7XG4gICAgICAgICAgICAgIHRoaXMudmVyaWZ5TW9iaWxlID0gdHJ1ZVxuICAgICAgICAgICAgICB0aGlzLm1WZXJpZmllZCA9IGZhbHNlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnZlcmlmeU1vYmlsZSA9IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmVyaWZ5TW9iaWxlID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gVG8gY2hlY2sgdGhlIGVtYWlsIGVudGVyZWQgYnkgdGhlIHVzZXIgaXMgc2FtZSBvciBub3QsIHZhbGlkYXRpbmcgdGhlIGVtYWlsIHRvIHNob3cgdGhlIEdldCBPVFAuXG4gICAgaWYgKHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgncHJpbWFyeUVtYWlsJykpIHtcbiAgICAgIHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgncHJpbWFyeUVtYWlsJykhLnZhbHVlQ2hhbmdlc1xuICAgICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMgIT09IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLnByaW1hcnlFbWFpbCkge1xuICAgICAgICAgICAgaWYgKEVNQUlMX1BBVFRFUk4udGVzdChyZXMpKSB7XG4gICAgICAgICAgICAgIHRoaXMudmVyaWZ5RW1haWwgPSB0cnVlXG4gICAgICAgICAgICAgIHRoaXMuZVZlcmlmaWVkID0gZmFsc2VcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMudmVyaWZ5RW1haWwgPSBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZlcmlmeUVtYWlsID0gZmFsc2VcbiAgICAgICAgICAgIHRoaXMuZVZlcmlmaWVkID0gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBzY3JvbGxUb0FjdGl2ZSh0eXBlOiBhbnkpOiB2b2lkIHtcbiAgICBsZXQgYWN0aXZlRWxlbWVudDogYW55XG4gICAgbGV0IGNvbnRhaW5lcjogYW55XG4gICAgaWYgKHR5cGUgPT09ICdsYW5ndWFnZScpIHtcbiAgICAgIGNvbnRhaW5lciA9IHRoaXMubGFuZ3VhZ2VEcm9wZG93bi5uYXRpdmVFbGVtZW50XG4gICAgICBhY3RpdmVFbGVtZW50ID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5sYW5ndWFnZS1pdGVtLWFjdGl2ZScpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnZGVzaWduYXRpb24nKSB7XG4gICAgICBjb250YWluZXIgPSB0aGlzLmRyb3Bkb3duLm5hdGl2ZUVsZW1lbnRcbiAgICAgIGFjdGl2ZUVsZW1lbnQgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignLml0ZW0tYWN0aXZlJylcbiAgICB9XG4gICAgaWYgKGFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGFjdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnbmVhcmVzdCcgfSk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxuXG4gIGhhbmRsZUNsaWNrT3V0c2lkZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGNsaWNrZWRFbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50XG4gICAgaWYgKFxuICAgICAgdGhpcy50ZXh0Qm94ICYmICF0aGlzLnRleHRCb3gubmF0aXZlRWxlbWVudC5jb250YWlucyhjbGlja2VkRWxlbWVudCkgJiZcbiAgICAgIHRoaXMuZHJvcGRvd24gJiYgIXRoaXMuZHJvcGRvd24ubmF0aXZlRWxlbWVudC5jb250YWlucyhjbGlja2VkRWxlbWVudClcbiAgICApIHtcbiAgICAgIHRoaXMub3BlbkRlc2lnbmF0aW9uRHJvcGRvd24gPSBmYWxzZVxuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLmxhbmd1YWdlVGV4dEJveCAmJiAhdGhpcy5sYW5ndWFnZVRleHRCb3gubmF0aXZlRWxlbWVudC5jb250YWlucyhjbGlja2VkRWxlbWVudCkgJiZcbiAgICAgIHRoaXMubGFuZ3VhZ2VEcm9wZG93biAmJiAhdGhpcy5sYW5ndWFnZURyb3Bkb3duLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoY2xpY2tlZEVsZW1lbnQpXG4gICAgKSB7XG4gICAgICB0aGlzLm9wZW5MYW5ndWFnZURyb3Bkb3duID0gZmFsc2VcbiAgICB9XG4gIH1cbiAgb25EZXNpZ25hdGlvbnNGb2N1cygpIHtcbiAgICAvLyB0aGlzLm9wZW5EZXNpZ25hdGlvbkRyb3Bkb3duID0gdHJ1ZVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZSgnZGVzaWduYXRpb24nKVxuICAgIH0sIDEwMClcbiAgfVxuICBvbkxhbmd1YWdlRm9jdXMoKSB7XG4gICAgdGhpcy5vcGVuTGFuZ3VhZ2VEcm9wZG93biA9IHRydWVcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmUoJ2xhbmd1YWdlJylcbiAgICB9LCAxMDApXG4gIH1cblxuICBmaWx0ZXJMYW5ndWFnZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlLmxlbmd0aCkge1xuICAgICAgdGhpcy5tYXN0ZXJMYW5ndWFnZXMgPSB0aGlzLm1hc3Rlckxhbmd1YWdlQmFja3VwLmZpbHRlcigodmFsOiBhbnkpID0+XG4gICAgICAgIHZhbCAmJiB2YWwubmFtZS50cmltKCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh2YWx1ZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgKVxuICAgICAgaWYgKHRoaXMubWFzdGVyTGFuZ3VhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zdCB1c2VybmFtZUNvbnRyb2wgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2RvbWljaWxlTWVkaXVtJylcbiAgICAgICAgaWYgKHVzZXJuYW1lQ29udHJvbCkge1xuICAgICAgICAgIHVzZXJuYW1lQ29udHJvbC5zZXRFcnJvcnMoeyByZXF1aXJlZDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9wZW5MYW5ndWFnZURyb3Bkb3duID0gdHJ1ZVxuICB9XG5cbiAgLy8gZmlsdGVyZGVzaWduYXRpb24odmFsdWU6IGFueSkge1xuICAvLyAgIGlmICh2YWx1ZS5sZW5ndGgpIHtcbiAgLy8gICAgIHRoaXMuZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUgPXRydWVcbiAgLy8gICAgIHRoaXMuZmlsdGVyRGVzaWduYXRpb25zTWV0YSA9IHRoaXMuZGVzaWduYXRpb25zTWV0YS5maWx0ZXIoKHZhbDogYW55KSA9PlxuICAvLyAgICAgICB2YWwgJiYgdmFsLm5hbWUudHJpbSgpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModmFsdWUudG9Mb3dlckNhc2UoKSlcbiAgLy8gICAgIClcbiAgLy8gICAgIGlmICh0aGlzLmZpbHRlckRlc2lnbmF0aW9uc01ldGEubGVuZ3RoID09PSAwKSB7XG4gIC8vICAgICAgIGNvbnN0IHVzZXJuYW1lQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnZGVzaWduYXRpb24nKVxuICAvLyAgICAgICBpZiAodXNlcm5hbWVDb250cm9sKSB7XG4gIC8vICAgICAgICAgdXNlcm5hbWVDb250cm9sLnNldEVycm9ycyh7IHJlcXVpcmVkOiB0cnVlIH0pO1xuICAvLyAgICAgICB9XG4gIC8vICAgICB9XG4gIC8vICAgfSBlbHNlIHtcbiAgLy8gICAgIHRoaXMuZmlsdGVyRGVzaWduYXRpb25zTWV0YSA9IHRoaXMuZGVzaWduYXRpb25zTWV0YS5zbGljZSgwLCB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudClcbiAgLy8gICAgIHRoaXMuZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUgPWZhbHNlXG5cbiAgLy8gICAgIHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50ID0gdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnQ7XG4gIC8vICAgfVxuICAvLyAgIC8vIHRoaXMub3BlbkRlc2lnbmF0aW9uRHJvcGRvd24gPSB0cnVlXG4gIC8vIH1cblxuICAvLyBhc3luYyBnZXRNYXN0ZXJEZXNpZ25hdGlvbigpIHtcbiAgLy8gICB0aGlzLnNpZ251cFNlcnZpY2UuZ2V0T3JnUmVhZERhdGEodGhpcy51c2VyUHJvZmlsZU9iamVjdC5yb290T3JnSWQpLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcbiAgLy8gICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmZyYW1ld29ya2lkKSB7XG4gIC8vICAgICAgIHRoaXMuc2lnbnVwU2VydmljZS5nZXRGcmFtZXdvcmtJbmZvKHJlc3VsdC5mcmFtZXdvcmtpZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAvLyAgICAgICAgIGNvbnN0IGZyYW1ld29ya0RldGFpbHMgPSBfLmdldChyZXMsICdyZXN1bHQuZnJhbWV3b3JrJylcbiAgLy8gICAgICAgICBjb25zdCBjYXRlZ29yaWVzT2ZGcmFtZXdvcmsgPSBfLmdldChmcmFtZXdvcmtEZXRhaWxzLCAnY2F0ZWdvcmllcycsIFtdKVxuICAvLyAgICAgICAgIGNvbnN0IG9yZ2FuaXNhdGlvbnNMaXN0ID0gdGhpcy5nZXRUZXJtc0J5Q29kZShjYXRlZ29yaWVzT2ZGcmFtZXdvcmssICdvcmcnKVxuICAvLyAgICAgICAgIGNvbnN0IGRpc09yZGVyZWRMaXN0ID0gXy5nZXQob3JnYW5pc2F0aW9uc0xpc3QsICdbMF0uY2hpbGRyZW4nLCBbXSlcbiAgLy8gICAgICAgICB0aGlzLmRlc2lnbmF0aW9uc01ldGEgPSBfLnNvcnRCeShkaXNPcmRlcmVkTGlzdCwgJ25hbWUnKVxuICAvLyAgICAgICAgIHRoaXMuZmlsdGVyRGVzaWduYXRpb25zTWV0YSA9IHRoaXMuZGVzaWduYXRpb25zTWV0YS5zbGljZSgwLCB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudClcbiAgLy8gICAgICAgICBpZiAodGhpcy5jYW5TaG93RGVzaWduYXRpb24pIHtcbiAgLy8gICAgICAgICAgIGxldCBmaWVsZCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnZGVzaWduYXRpb24nKVxuICAvLyAgICAgICAgICAgaWYgKGZpZWxkICYmIGZpZWxkLnZhbHVlKSB7XG4gIC8vICAgICAgICAgICAgIGxldCBfdmFsdWUgPSBmaWVsZC52YWx1ZS50b0xvd2VyQ2FzZSgpXG4gIC8vICAgICAgICAgICAgIGlmICghdGhpcy5kZXNpZ25hdGlvbnNNZXRhLmZpbmQoKGQ6IGFueSkgPT4gZC5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IF92YWx1ZSkpIHtcbiAgLy8gICAgICAgICAgICAgICBmaWVsZC5wYXRjaFZhbHVlKCcnKVxuICAvLyAgICAgICAgICAgICB9XG4gIC8vICAgICAgICAgICB9XG4gIC8vICAgICAgICAgfVxuICAvLyAgICAgICB9LCAoZXJyb3I6IGFueSkgPT4ge1xuICAvLyAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxuICAvLyAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIG9jY3VycmVkOicsIGVycm9yKVxuICAvLyAgICAgICB9KVxuICAvLyAgICAgfVxuICAvLyAgIH0sIChlcnJvcjogYW55KSA9PiB7XG4gIC8vICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbiAgLy8gICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIG9jY3VycmVkOicsIGVycm9yKVxuICAvLyAgIH0pXG4gIC8vIH1cblxuICAvLyBwcml2YXRlIGdldFRlcm1zQnlDb2RlKGNhdGVnb3JpZXM6IGFueVtdLCBjb2RlOiBzdHJpbmcpIHtcbiAgLy8gICBjb25zdCBzZWxlY3RlZENhdGVnb3J5ID0gY2F0ZWdvcmllcy5maWx0ZXIoXG4gIC8vICAgICAoY2F0ZWdvcnk6IGFueSkgPT4gY2F0ZWdvcnkuY29kZSA9PT0gY29kZVxuICAvLyAgICk7XG4gIC8vICAgcmV0dXJuIF8uZ2V0KHNlbGVjdGVkQ2F0ZWdvcnksICdbMF0udGVybXMnLCBbXSk7XG4gIC8vIH1cblxuICBwcmV2ZW50Qmx1cihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgfVxuICBwcmV2ZW50TGFuZ3VhZ2VCbHVyKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICB9XG5cbiAgc2VsZWN0RGVzaWduYXRpb24oZGVzaWduYXRpb246IGFueSkge1xuICAgIHRoaXMudXNlckRldGFpbHNGb3JtLnBhdGNoVmFsdWUoeyBkZXNpZ25hdGlvbjogZGVzaWduYXRpb24gfSlcbiAgICBjb25zdCBmaWVsZENvbnRyb2wgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ290aGVyRGVzaWduYXRpb24nKVxuICAgIGlmICh0aGlzLnNob3dEb3B0Q2hhbmdlcyAmJiBkZXNpZ25hdGlvbiA9PT0gJ090aGVycycpIHtcbiAgICAgIGlmIChmaWVsZENvbnRyb2wpIHtcbiAgICAgICAgZmllbGRDb250cm9sLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcbiAgICAgICAgZmllbGRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgICAgfVxuICAgICAgdGhpcy5jYW5TaG93T3RoZXJEZXNpZ25hdGlvbiA9IHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGZpZWxkQ29udHJvbCkge1xuICAgICAgICBmaWVsZENvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKClcbiAgICAgICAgZmllbGRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgICAgfVxuICAgICAgdGhpcy5jYW5TaG93T3RoZXJEZXNpZ25hdGlvbiA9IGZhbHNlXG4gICAgfVxuICAgIHRoaXMub3BlbkRlc2lnbmF0aW9uRHJvcGRvd24gPSBmYWxzZVxuICB9XG5cblxuICBzZWxlY3RMYW5ndWFnZShsYW5ndWFnZTogYW55KSB7XG4gICAgdGhpcy51c2VyRGV0YWlsc0Zvcm0ucGF0Y2hWYWx1ZSh7IGRvbWljaWxlTWVkaXVtOiBsYW5ndWFnZSB9KVxuICAgIHRoaXMub3Blbkxhbmd1YWdlRHJvcGRvd24gPSBmYWxzZVxuICB9XG5cbiAgaXNFbWFpbEFsbG93ZWQoZW1haWw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGRvbWFpbiA9IGVtYWlsLnNwbGl0KCdAJylbMV1cbiAgICByZXR1cm4gZG9tYWluID8gdGhpcy5hcHByb3ZlZERvbWFpbkxpc3QuaW5jbHVkZXMoZG9tYWluKSA6IGZhbHNlXG4gIH1cblxuICBoYW5kbGVHZW5lcmF0ZUVtYWlsT1RQKHZlcmlmeVR5cGU/OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyh2ZXJpZnlUeXBlKVxuICAgIHRoaXMudXNlclByb2ZpbGVTZXJ2aWNlLmdldFdoaXRlTGlzdERvbWFpbigpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3VsdCAmJiByZXNwb25zZS5yZXN1bHQuZG9tYWlucyAmJiByZXNwb25zZS5yZXN1bHQuZG9tYWlucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuYXBwcm92ZWREb21haW5MaXN0ID0gcmVzcG9uc2UucmVzdWx0LmRvbWFpbnNcbiAgICAgICAgaWYgKHRoaXMuYXBwcm92ZWREb21haW5MaXN0ICYmIHRoaXMuYXBwcm92ZWREb21haW5MaXN0Lmxlbmd0aCAmJiB0aGlzLmFwcHJvdmVkRG9tYWluTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNFbWFpbEFsbG93ZWQodGhpcy51c2VyRGV0YWlsc0Zvcm0udmFsdWVbJ3ByaW1hcnlFbWFpbCddKSkge1xuICAgICAgICAgICAgdGhpcy5vdHBTZXJ2aWNlLnNlbmRFbWFpbE90cCh0aGlzLnVzZXJEZXRhaWxzRm9ybS52YWx1ZVsncHJpbWFyeUVtYWlsJ10pXG4gICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3lTdWJqZWN0JCkpXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoKF9yZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1haWxPdHBGb3JtLnJlc2V0KClcbiAgICAgICAgICAgICAgICBpZiAodmVyaWZ5VHlwZSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5lbWFpbE90cFNlbnQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0RW1haWxUaW1lcigpXG4gICAgICAgICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4odGhpcy5oYW5kbGVUcmFuc2xhdGVUbygnb3RwU2VudEVtYWlsJykpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LCAoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFlcnJvci5vaykge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKHRoaXMuaGFuZGxlVHJhbnNsYXRlVG8oJ2VtYWlsT1RQU2VudEZhaWwnKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4odGhpcy5oYW5kbGVUcmFuc2xhdGVUbygnZW1haWxBcHByb3ZlZFBvcHVwTXNnJykpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGhhbmRsZUdlbmVyYXRlT1RQKHZlcmlmeVR5cGU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm90cFNlcnZpY2Uuc2VuZE90cCh0aGlzLnVzZXJEZXRhaWxzRm9ybS52YWx1ZVsnbW9iaWxlJ10pXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95U3ViamVjdCQpKVxuICAgICAgLnN1YnNjcmliZSgoX3JlczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuc25hY2tCYXIub3Blbih0aGlzLmhhbmRsZVRyYW5zbGF0ZVRvKCdvdHBTZW50TW9iaWxlJykpXG4gICAgICAgIHRoaXMub3RwRm9ybS5yZXNldCgpXG4gICAgICAgIGlmICh2ZXJpZnlUeXBlKSB7XG4gICAgICAgICAgdGhpcy5vdHBTZW50ID0gdHJ1ZVxuICAgICAgICAgIHRoaXMuc3RhcnRUaW1lcigpXG4gICAgICAgICAgLy90aGlzLmhhbmRsZVZlcmlmeU9UUCh2ZXJpZnlUeXBlLCB0aGlzLnVzZXJEZXRhaWxzRm9ybS52YWx1ZVsnbW9iaWxlJ10pXG4gICAgICAgIH1cbiAgICAgIH0sIChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKCFlcnJvci5vaykge1xuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3Blbih0aGlzLmhhbmRsZVRyYW5zbGF0ZVRvKCdtb2JpbGVPVFBTZW50RmFpbCcpKVxuICAgICAgICB9XG4gICAgICB9KVxuICB9XG5cbiAgaGFuZGxlUmVzZW5kT1RQKCk6IHZvaWQge1xuICAgIHRoaXMudGltZUxlZnQgPSAxNTBcbiAgICB0aGlzLnNob3dSZXNlbmRPVFAgPSB0cnVlXG4gICAgdGhpcy5zdGFydFRpbWVyKClcbiAgICBsZXQgb3RwVmFsdWUkOiBhbnlcbiAgICBvdHBWYWx1ZSQgPSB0aGlzLm90cFNlcnZpY2UucmVzZW5kT3RwKHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydtb2JpbGUnXS52YWx1ZSlcblxuICAgIG90cFZhbHVlJC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3lTdWJqZWN0JCkpXG4gICAgICAuc3Vic2NyaWJlKChfcmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKHRoaXMuaGFuZGxlVHJhbnNsYXRlVG8oJ290cFNlbnRNb2JpbGUnKSlcbiAgICAgIH0sIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIGlmICghZXJyb3Iub2spIHtcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oXy5nZXQoZXJyb3IsICdlcnJvci5wYXJhbXMuZXJybXNnJykgfHwgJ1VuYWJsZSB0byByZXNlbmQgT1RQLCBwbGVhc2UgdHJ5IGFnYWluIGxhdGVyIScpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gIH1cblxuICBoYW5kbGVSZXNlbmRFbWFpbE9UUCgpOiB2b2lkIHtcbiAgICB0aGlzLmVtYWlsVGltZUxlZnQgPSAxNTBcbiAgICB0aGlzLnNob3dFbWFpbFJlc2VuZE9UUCA9IHRydWVcbiAgICB0aGlzLnN0YXJ0RW1haWxUaW1lcigpXG4gICAgbGV0IG90cFZhbHVlJDogYW55XG4gICAgb3RwVmFsdWUkID0gdGhpcy5vdHBTZXJ2aWNlLnNlbmRFbWFpbE90cCh0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1sncHJpbWFyeUVtYWlsJ10udmFsdWUpXG4gICAgb3RwVmFsdWUkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveVN1YmplY3QkKSlcbiAgICAgIC5zdWJzY3JpYmUoKF9yZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4odGhpcy5oYW5kbGVUcmFuc2xhdGVUbygnb3RwU2VudEVtYWlsJykpXG4gICAgICB9LCAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICBpZiAoIWVycm9yLm9rKSB7XG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKF8uZ2V0KGVycm9yLCAnZXJyb3IucGFyYW1zLmVycm1zZycpIHx8ICdVbmFibGUgdG8gcmVzZW5kIE9UUCwgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlciEnKVxuICAgICAgICB9XG4gICAgICB9KVxuICB9XG5cbiAgdmVyaWZ5RW1haWxPVFAoKTogdm9pZCB7XG4gICAgdGhpcy5vdHBTZXJ2aWNlLnZlcmlmeUVtYWlsT1RQKHRoaXMuZW1haWxPdHBGb3JtLmNvbnRyb2xzWydlT3RwJ10udmFsdWUsIHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydwcmltYXJ5RW1haWwnXS52YWx1ZSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3lTdWJqZWN0JCkpXG4gICAgICAuc3Vic2NyaWJlKChfcmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKHRoaXMuaGFuZGxlVHJhbnNsYXRlVG8oJ09UUFNlbnRTdWNjZXNzJykpXG4gICAgICAgIHRoaXMudmVyaWZ5RW1haWwgPSB0cnVlXG4gICAgICAgIHRoaXMuZVZlcmlmaWVkID0gdHJ1ZVxuICAgICAgICB0aGlzLmVtYWlsT3RwU2VudCA9IGZhbHNlXG4gICAgICAgIHRoaXMuY29udGV4dFRva2VuID0gX3Jlcy5yZXN1bHQuY29udGV4dFRva2VuXG4gICAgICAgIHRoaXMuZW1haWxPdHBGb3JtLnJlc2V0KClcbiAgICAgIH0sIChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKCFlcnJvci5vaykge1xuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihfLmdldChlcnJvciwgJ2Vycm9yLnBhcmFtcy5lcnJtc2cnKSB8fCB0aGlzLmhhbmRsZVRyYW5zbGF0ZVRvKCdPVFBWZXJpZnlGYWlsZWQnKSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgfVxuXG4gIHZlcmlmeU1vYmlsZU9UUCgpOiB2b2lkIHtcbiAgICB0aGlzLm90cFNlcnZpY2UudmVyaWZ5T1RQKHRoaXMub3RwRm9ybS5jb250cm9sc1snb3RwJ10udmFsdWUsIHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydtb2JpbGUnXS52YWx1ZSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3lTdWJqZWN0JCkpXG4gICAgICAuc3Vic2NyaWJlKChfcmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKHRoaXMuaGFuZGxlVHJhbnNsYXRlVG8oJ09UUFNlbnRTdWNjZXNzJykpXG4gICAgICAgIHRoaXMudmVyaWZ5TW9iaWxlID0gdHJ1ZVxuICAgICAgICB0aGlzLm1WZXJpZmllZCA9IHRydWVcbiAgICAgICAgdGhpcy5vdHBTZW50ID0gZmFsc2VcbiAgICAgICAgdGhpcy5vdHBGb3JtLnJlc2V0KClcbiAgICAgIH0sIChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKCFlcnJvci5vaykge1xuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihfLmdldChlcnJvciwgJ2Vycm9yLnBhcmFtcy5lcnJtc2cnKSB8fCB0aGlzLmhhbmRsZVRyYW5zbGF0ZVRvKCdPVFBWZXJpZnlGYWlsZWQnKSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgfVxuXG4gIHN0YXJ0VGltZXIoKSB7XG4gICAgdGhpcy5pbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnRpbWVMZWZ0ID4gMCkge1xuICAgICAgICB0aGlzLnRpbWVMZWZ0ID0gdGhpcy50aW1lTGVmdCAtIDFcbiAgICAgICAgaWYgKHRoaXMudGltZXJEaXYpIHtcbiAgICAgICAgICB0aGlzLnRpbWVyRGl2Lm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gYCR7TWF0aC5mbG9vcih0aGlzLnRpbWVMZWZ0IC8gNjApfW06ICR7dGhpcy50aW1lTGVmdCAlIDYwfXNgXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbClcbiAgICAgICAgdGhpcy5zaG93UmVzZW5kT1RQID0gdHJ1ZVxuICAgICAgfVxuICAgIH0sIDEwMDApXG4gIH1cblxuICBzdGFydEVtYWlsVGltZXIoKSB7XG4gICAgdGhpcy5lbWFpbEludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZW1haWxUaW1lTGVmdCA+IDApIHtcbiAgICAgICAgdGhpcy5lbWFpbFRpbWVMZWZ0ID0gdGhpcy5lbWFpbFRpbWVMZWZ0IC0gMVxuICAgICAgICBpZiAodGhpcy5lbWFpbFRpbWVyRGl2KSB7XG4gICAgICAgICAgdGhpcy5lbWFpbFRpbWVyRGl2Lm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gYCR7TWF0aC5mbG9vcih0aGlzLmVtYWlsVGltZUxlZnQgLyA2MCl9bTogJHt0aGlzLmVtYWlsVGltZUxlZnQgJSA2MH1zYFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGVhckludGVydmFsKHRoaXMuZW1haWxJbnRlcnZhbClcbiAgICAgICAgdGhpcy5zaG93RW1haWxSZXNlbmRPVFAgPSB0cnVlXG4gICAgICB9XG4gICAgfSwgMTAwMClcbiAgfVxuXG4gIHB1YmxpYyBjaGVja0FmdGVyU3VibWl0KF9lOiBhbnkpIHtcbiAgICAvLyB0aGlzLnJlbmRlclN1YmplY3QubmV4dCgpXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmxvZygnRm9ybSBpcyBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5JylcbiAgICBpZiAodGhpcy5iYXRjaERldGFpbHMuYmF0Y2hBdHRyaWJ1dGVzLnVzZXJQcm9maWxlRmlsZWRzICYmXG4gICAgICB0aGlzLmJhdGNoRGV0YWlscy5iYXRjaEF0dHJpYnV0ZXMudXNlclByb2ZpbGVGaWxlZHMgPT09IFwiQXZhaWxhYmxlIHVzZXIgZmlsbGVkIGlHT1QgcHJvZmlsZVwiKSB7XG4gICAgICB0aGlzLnN1Ym1pdFN1cmV2eSh0cnVlKVxuICAgIH1cbiAgICBpZiAodGhpcy5iYXRjaERldGFpbHMuYmF0Y2hBdHRyaWJ1dGVzLnVzZXJQcm9maWxlRmlsZWRzICYmICF0aGlzLnVwZGF0ZVByb2ZpbGUgJiZcbiAgICAgICh0aGlzLmJhdGNoRGV0YWlscy5iYXRjaEF0dHJpYnV0ZXMudXNlclByb2ZpbGVGaWxlZHMgPT09IFwiRnVsbCBpR09UIHByb2ZpbGVcIiB8fFxuICAgICAgICB0aGlzLmJhdGNoRGV0YWlscy5iYXRjaEF0dHJpYnV0ZXMudXNlclByb2ZpbGVGaWxlZHMgPT09IFwiQ3VzdG9tIGlHT1QgcHJvZmlsZVwiKSkge1xuICAgICAgdGhpcy5zdWJtaXRTdXJldnkodHJ1ZSlcbiAgICB9XG4gICAgdGhpcy5vcGVuU25hY2tiYXIoJ0Zvcm0gaXMgc3VibWl0dGVkIHN1Y2Nlc3NmdWxseScpXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodHJ1ZSlcbiAgfVxuXG4gIGNsb3NlUG9wdXAoKSB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodHJ1ZSlcbiAgfVxuXG4gIHByaXZhdGUgb3BlblNuYWNrYmFyKHByaW1hcnlNc2c6IHN0cmluZywgZHVyYXRpb246IG51bWJlciA9IDUwMDApIHtcbiAgICB0aGlzLnNuYWNrQmFyLm9wZW4ocHJpbWFyeU1zZywgJ1gnLCB7XG4gICAgICBkdXJhdGlvbixcbiAgICB9KVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5mb3JtSWQgPSBfLmdldCh0aGlzLmRhdGEsICdiYXRjaERhdGEuYmF0Y2hBdHRyaWJ1dGVzLnByb2ZpbGVTdXJ2ZXlJZCcpXG4gICAgdGhpcy5nZXRGb3JtRGV0YWlscygpXG4gICAgdGhpcy5zZXRWYWx1ZUNoYW5nZUZ1bmN0aW9ucygpXG4gICAgdGhpcy5mZXRjaENhZHJlRGF0YSgpXG4gICAgdGhpcy5nZXRHcm91cERhdGEoKVxuICAgIHRoaXMuZ2V0UGVuZGluZ0RldGFpbHMoKVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gdGhpcy5sb2FkRGVzaWduYXRpb25zKClcbiAgICAgIHRoaXMuY2hlY2tTZWxlY3RlZE9yZ0hhc0Rlc2lnbmF0aW9ucygpO1xuICAgICAgLy90aGlzLmdldE1hc3RlckRlc2lnbmF0aW9uKClcbiAgICAgIHRoaXMuZ2V0TWFzdGVyTGFuZ3VhZ2UoKVxuICAgIH0sIDUwMClcbiAgfVxuXG4gIGdldEZvcm1EZXRhaWxzKCkge1xuICAgIGlmICh0aGlzLmZvcm1JZCkge1xuICAgICAgdGhpcy5wcm9maWxlVjJTdmMuZ2V0Rm9ybVYyQnlJRCh0aGlzLmZvcm1JZCkuc3Vic2NyaWJlKChyZXNwb25jZTogYW55KSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25jZSkge1xuICAgICAgICAgIHRoaXMuZm9ybXNEZXRpbHMgPSBfLmdldChyZXNwb25jZSwgJ3Jlc3VsdC5yZXNwb25zZScsIHt9KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHNldFZhbHVlQ2hhbmdlRnVuY3Rpb25zKCkge1xuICAgIGNvbnN0IHNlYXJjaERlc2lnbmF0aW9uQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnc2VhcmNoRGVzaWduYXRpb24nKVxuICAgIGlmIChzZWFyY2hEZXNpZ25hdGlvbkNvbnRyb2wpIHtcbiAgICAgIGxldCBzZXR0aW5nVmFsdWVDaGFuZ2UgPSB0cnVlXG4gICAgICBzZWFyY2hEZXNpZ25hdGlvbkNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSgzMDApLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzdGFydFdpdGgoJycpLFxuICAgICAgKS5zdWJzY3JpYmUoc2VhcmNoVGV4dCA9PiB7XG4gICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbnNPZmZzZXQgPSAwXG4gICAgICAgICAgaWYgKHNlYXJjaFRleHQgJiYgc2VhcmNoVGV4dC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdGhpcy5kZXNpZ25hdGlvblNlYXJjaFRleHQgPSBzZWFyY2hUZXh0XG4gICAgICAgICAgICB0aGlzLmdldGRlc2lnbmF0aW9uc01ldGEoKVxuICAgICAgICAgIH0gZWxzZSBpZiAoIXNlYXJjaFRleHQpIHtcbiAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uU2VhcmNoVGV4dCA9IHNlYXJjaFRleHRcbiAgICAgICAgICAgIGlmKCFzZXR0aW5nVmFsdWVDaGFuZ2UpIHtcbiAgICAgICAgICAgICAgdGhpcy5nZXRkZXNpZ25hdGlvbnNNZXRhKCkgXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpXG4gICAgICAgICAgfVxuICAgICAgICAgIHNldHRpbmdWYWx1ZUNoYW5nZSA9IGZhbHNlXG4gICAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZmV0Y2hDYWRyZURhdGEoKSB7XG4gICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciArIDFcbiAgICB0aGlzLnByb2ZpbGVWMlN2Yy5mZXRjaENhZHJlKCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyIC0gMVxuICAgICAgdGhpcy5jaXZpbFNlcnZpY2VEYXRhID0gcmVzcG9uc2UucmVzdWx0LnJlc3BvbnNlLnZhbHVlLmNpdmlsU2VydmljZVR5cGVcbiAgICAgIHRoaXMuY2l2aWxTZXJ2aWNlVHlwZXMgPSB0aGlzLmNpdmlsU2VydmljZURhdGEuY2l2aWxTZXJ2aWNlVHlwZUxpc3QubWFwKChzZXJ2aWNlOiBhbnkpID0+IHNlcnZpY2UubmFtZSlcbiAgICB9KVxuICB9XG5cbiAgZ2V0SXNDYWRyZVN0YXR1cyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuaXNDYWRyZVN0YXR1cyA9IHZhbHVlXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLnVzZXJEZXRhaWxzRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgdHlwZU9mQ2l2aWxTZXJ2aWNlOiAnJyxcbiAgICAgICAgc2VydmljZVR5cGU6ICcnLFxuICAgICAgICBjYWRyZU5hbWU6ICcnLFxuICAgICAgICBjYWRyZUJhdGNoOiAnJyxcbiAgICAgICAgY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eTogJycsXG4gICAgICB9KVxuICAgICAgdGhpcy5hZGRWYWxpZGF0b3JzKClcbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuc2hvd0JhdGNoRm9yTm9DYWRyZSA9IGZhbHNlXG4gICAgICB0aGlzLnJlbW92ZVZhbGlkYXRvcnMoKVxuICAgIH1cbiAgfVxuXG4gIGdldEFsbEVycm9ycygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlczogc3RyaW5nW10gPSBbXTtcbiAgICBPYmplY3Qua2V5cyh0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9scykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCBjb250cm9sRXJyb3JzID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNba2V5XS5lcnJvcnM7XG4gICAgICBpZiAoY29udHJvbEVycm9ycykge1xuICAgICAgICBPYmplY3Qua2V5cyhjb250cm9sRXJyb3JzKS5mb3JFYWNoKChlcnJvcktleSkgPT4ge1xuICAgICAgICAgIHN3aXRjaCAoZXJyb3JLZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3JlcXVpcmVkJzpcbiAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlcy5wdXNoKGAke2tleX0gaXMgcmVxdWlyZWQuYCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbWlubGVuZ3RoJzpcbiAgICAgICAgICAgICAgY29uc3QgcmVxdWlyZWRMZW5ndGggPSBjb250cm9sRXJyb3JzWydtaW5sZW5ndGgnXS5yZXF1aXJlZExlbmd0aDtcbiAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlcy5wdXNoKGAke2tleX0gbXVzdCBiZSBhdCBsZWFzdCAke3JlcXVpcmVkTGVuZ3RofSBjaGFyYWN0ZXJzIGxvbmcuYCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZW1haWwnOlxuICAgICAgICAgICAgICBlcnJvck1lc3NhZ2VzLnB1c2goYFBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3MuYCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgLy8gQWRkIG1vcmUgY2FzZXMgZm9yIG90aGVyIHZhbGlkYXRvcnMgYXMgbmVlZGVkXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZXJyb3JNZXNzYWdlcztcbiAgfVxuXG4gIGFkZFZhbGlkYXRvcnMoKSB7XG4gICAgY29uc3QgZmllbGRDb250cm9sMCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnaXNDYWRyZScpXG4gICAgaWYgKGZpZWxkQ29udHJvbDApIHtcbiAgICAgIGZpZWxkQ29udHJvbDAuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xuICAgICAgZmllbGRDb250cm9sMC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICB9XG4gICAgY29uc3QgZmllbGRDb250cm9sID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCd0eXBlT2ZDaXZpbFNlcnZpY2UnKVxuICAgIGlmIChmaWVsZENvbnRyb2wpIHtcbiAgICAgIGZpZWxkQ29udHJvbC5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XG4gICAgICBmaWVsZENvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgfVxuICAgIGNvbnN0IGZpZWxkQ29udHJvbDEgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ3NlcnZpY2VUeXBlJylcbiAgICBpZiAoZmllbGRDb250cm9sMSkge1xuICAgICAgZmllbGRDb250cm9sMS5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XG4gICAgICBmaWVsZENvbnRyb2wxLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgIH1cbiAgICBjb25zdCBmaWVsZENvbnRyb2wzID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdjYWRyZUJhdGNoJylcbiAgICBpZiAoZmllbGRDb250cm9sMykge1xuICAgICAgZmllbGRDb250cm9sMy5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XG4gICAgICBmaWVsZENvbnRyb2wzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgIH1cbiAgfVxuXG4gIHJlbW92ZVZhbGlkYXRvcnMoKSB7XG4gICAgY29uc3QgZmllbGRDb250cm9sID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCd0eXBlT2ZDaXZpbFNlcnZpY2UnKVxuICAgIGlmIChmaWVsZENvbnRyb2wpIHtcbiAgICAgIGZpZWxkQ29udHJvbC5jbGVhclZhbGlkYXRvcnMoKVxuICAgICAgZmllbGRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgIH1cbiAgICBjb25zdCBmaWVsZENvbnRyb2wxID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdzZXJ2aWNlVHlwZScpXG4gICAgaWYgKGZpZWxkQ29udHJvbDEpIHtcbiAgICAgIGZpZWxkQ29udHJvbDEuY2xlYXJWYWxpZGF0b3JzKClcbiAgICAgIGZpZWxkQ29udHJvbDEudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgfVxuICAgIGNvbnN0IGZpZWxkQ29udHJvbDIgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2NhZHJlTmFtZScpXG4gICAgaWYgKGZpZWxkQ29udHJvbDIpIHtcbiAgICAgIGZpZWxkQ29udHJvbDIuY2xlYXJWYWxpZGF0b3JzKClcbiAgICAgIGZpZWxkQ29udHJvbDIudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgfVxuICAgIGNvbnN0IGZpZWxkQ29udHJvbDMgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2NhZHJlQmF0Y2gnKVxuICAgIGlmIChmaWVsZENvbnRyb2wzKSB7XG4gICAgICBmaWVsZENvbnRyb2wzLmNsZWFyVmFsaWRhdG9ycygpXG4gICAgICBmaWVsZENvbnRyb2wzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgIH1cbiAgfVxuXG4gIGdldFNlcnZpY2UoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHNlcnZpY2VUeXBlQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnc2VydmljZVR5cGUnKVxuICAgIGNvbnN0IGNhZHJlQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnY2FkcmVOYW1lJylcbiAgICBjb25zdCBiYXRjaENvbnRyb2wgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2NhZHJlQmF0Y2gnKVxuICAgIGNvbnN0IGNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHlDb250cm9sID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdjYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5JylcblxuICAgIGlmIChzZXJ2aWNlVHlwZUNvbnRyb2wpIHsgc2VydmljZVR5cGVDb250cm9sLnJlc2V0KCkgfVxuICAgIGlmIChjYWRyZUNvbnRyb2wpIHsgY2FkcmVDb250cm9sLnJlc2V0KCkgfVxuICAgIGlmIChiYXRjaENvbnRyb2wpIHsgYmF0Y2hDb250cm9sLnJlc2V0KCkgfVxuICAgIGlmIChjYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5Q29udHJvbCkgeyBjYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5Q29udHJvbC5yZXNldCgpIH1cblxuICAgIHRoaXMuc2VydmljZVR5cGUgPSB0aGlzLmNpdmlsU2VydmljZURhdGEuY2l2aWxTZXJ2aWNlVHlwZUxpc3QuZmluZCgoZWxlbWVudDogYW55KSA9PiBlbGVtZW50Lm5hbWUgPT09IGV2ZW50KVxuICAgIHRoaXMuc2VydmljZVR5cGUgPSB0aGlzLmNpdmlsU2VydmljZURhdGEuY2l2aWxTZXJ2aWNlVHlwZUxpc3QuZmluZCgoZWxlbWVudDogYW55KSA9PiBlbGVtZW50Lm5hbWUgPT09IGV2ZW50KVxuICAgIGlmICh0aGlzLnNlcnZpY2VUeXBlKSB7XG4gICAgICB0aGlzLnNlcnZpY2VMaXN0RGF0YSA9IHRoaXMuc2VydmljZVR5cGUuc2VydmljZUxpc3RcbiAgICAgIHRoaXMuc2VydmljZU5hbWUgPSB0aGlzLnNlcnZpY2VMaXN0RGF0YS5tYXAoKHNlcnZpY2U6IGFueSkgPT4gc2VydmljZS5uYW1lKVxuICAgICAgdGhpcy5zZXJ2aWNlSWQgPSB0aGlzLnNlcnZpY2VUeXBlLmlkXG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ1NlcnZpY2UgVHlwZSBub3QgZm91bmQnXG4gICAgfVxuICB9XG5cbiAgb25TZXJ2aWNlU2VsZWN0KGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBjYWRyZUNvbnRyb2wgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2NhZHJlTmFtZScpXG4gICAgY29uc3QgYmF0Y2hDb250cm9sID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdjYWRyZUJhdGNoJylcbiAgICBjb25zdCBjYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5Q29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eScpXG4gICAgaWYgKGNhZHJlQ29udHJvbCkgeyBjYWRyZUNvbnRyb2wucmVzZXQoKSB9XG4gICAgaWYgKGJhdGNoQ29udHJvbCkgeyBiYXRjaENvbnRyb2wucmVzZXQoKSB9XG4gICAgaWYgKGNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHlDb250cm9sKSB7IGNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHlDb250cm9sLnJlc2V0KCkgfVxuICAgIHRoaXMuc2VsZWN0ZWRTZXJ2aWNlTmFtZSA9IGV2ZW50LnZhbHVlXG4gICAgaWYgKHRoaXMuc2VydmljZUxpc3REYXRhKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkU2VydmljZSA9IHRoaXMuc2VydmljZUxpc3REYXRhLmZpbmQoKHNlcnZpY2U6IGFueSkgPT4gc2VydmljZS5uYW1lID09PSB0aGlzLnNlbGVjdGVkU2VydmljZU5hbWUpXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5jaXZpbFNlcnZpY2VOYW1lID0gdGhpcy5zZWxlY3RlZFNlcnZpY2UubmFtZVxuICAgICAgICB0aGlzLmNpdmlsU2VydmljZUlkID0gdGhpcy5zZWxlY3RlZFNlcnZpY2UuaWRcbiAgICAgICAgdGhpcy5jYWRyZSA9IHRoaXMuc2VsZWN0ZWRTZXJ2aWNlLmNhZHJlTGlzdCA/IHRoaXMuc2VsZWN0ZWRTZXJ2aWNlLmNhZHJlTGlzdC5tYXAoKGNhZHJlOiBhbnkpID0+IGNhZHJlLm5hbWUpIDogW11cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRTZXJ2aWNlICYmIHRoaXMuc2VsZWN0ZWRTZXJ2aWNlLmNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHkpIHtcbiAgICAgIHRoaXMuY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eSA9IHRoaXMuc2VsZWN0ZWRTZXJ2aWNlLmNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5ID0gJ05BJ1xuICAgIH1cbiAgICBpZiAodGhpcy5zZWxlY3RlZFNlcnZpY2UgJiYgdGhpcy5zZWxlY3RlZFNlcnZpY2UuY2FkcmVMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5zaG93QmF0Y2hGb3JOb0NhZHJlID0gdHJ1ZVxuICAgICAgdGhpcy5zdGFydEJhdGNoID0gdGhpcy5zZWxlY3RlZFNlcnZpY2UuY29tbW9uQmF0Y2hTdGFydFllYXJcbiAgICAgIHRoaXMuZW5kQmF0Y2ggPSB0aGlzLnNlbGVjdGVkU2VydmljZS5jb21tb25CYXRjaEVuZFllYXJcbiAgICAgIHRoaXMuZXhjbHVzaW9uWWVhciA9IHRoaXMuc2VsZWN0ZWRTZXJ2aWNlLmNvbW1vbkJhdGNoRXhjbHVzaW9uWWVhckxpc3RcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlXG4gICAgICB0aGlzLnllYXJBcnJheSA9IEFycmF5LmZyb20oeyBsZW5ndGg6IHRoaXMuZW5kQmF0Y2ggLSB0aGlzLnN0YXJ0QmF0Y2ggKyAxIH0sIChfLCBpbmRleCkgPT4gdGhpcy5zdGFydEJhdGNoICsgaW5kZXgpXG4gICAgICAgIC5maWx0ZXIoeWVhciA9PiAhdGhpcy5leGNsdXNpb25ZZWFyLmluY2x1ZGVzKHllYXIpKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3dCYXRjaEZvck5vQ2FkcmUgPSBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIG9uQ2FkcmVTZWxlY3QoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGJhdGNoQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnY2FkcmVCYXRjaCcpXG4gICAgY29uc3QgY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eUNvbnRyb2wgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2NhZHJlQ29udHJvbGxpbmdBdXRob3JpdHknKVxuXG4gICAgaWYgKGJhdGNoQ29udHJvbCkgeyBiYXRjaENvbnRyb2wucmVzZXQoKSB9XG4gICAgaWYgKGNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHlDb250cm9sKSB7IGNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHlDb250cm9sLnJlc2V0KCkgfVxuICAgIHRoaXMuc2VsZWN0ZWRDYWRyZU5hbWUgPSBldmVudFxuICAgIGlmICh0aGlzLnNlbGVjdGVkU2VydmljZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZENhZHJlID0gdGhpcy5zZWxlY3RlZFNlcnZpY2UuY2FkcmVMaXN0LmZpbmQoKGNhZHJlOiBhbnkpID0+IGNhZHJlLm5hbWUgPT09IHRoaXMuc2VsZWN0ZWRDYWRyZU5hbWUpXG4gICAgICB0aGlzLnN0YXJ0QmF0Y2ggPSB0aGlzLnNlbGVjdGVkQ2FkcmUgPyB0aGlzLnNlbGVjdGVkQ2FkcmUuc3RhcnRCYXRjaFllYXIgOiAnJ1xuICAgICAgdGhpcy5lbmRCYXRjaCA9IHRoaXMuc2VsZWN0ZWRDYWRyZSA/IHRoaXMuc2VsZWN0ZWRDYWRyZS5lbmRCYXRjaFllYXIgOiAnJ1xuICAgICAgdGhpcy5leGNsdXNpb25ZZWFyID0gdGhpcy5zZWxlY3RlZENhZHJlID8gdGhpcy5zZWxlY3RlZENhZHJlLmV4Y3Vsc2lvblllYXJMaXN0IDogJydcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlXG4gICAgICB0aGlzLnllYXJBcnJheSA9IEFycmF5LmZyb20oeyBsZW5ndGg6IHRoaXMuZW5kQmF0Y2ggLSB0aGlzLnN0YXJ0QmF0Y2ggKyAxIH0sIChfLCBpbmRleCkgPT4gdGhpcy5zdGFydEJhdGNoICsgaW5kZXgpXG4gICAgICAgIC5maWx0ZXIoeWVhciA9PiAhdGhpcy5leGNsdXNpb25ZZWFyLmluY2x1ZGVzKHllYXIpKVxuICAgICAgdGhpcy5jYWRyZUlkID0gdGhpcy5zZWxlY3RlZENhZHJlID8gdGhpcy5zZWxlY3RlZENhZHJlLmlkIDogJydcbiAgICB9XG5cbiAgfVxuXG4gIGdldFBlbmRpbmdEZXRhaWxzKCkge1xuICAgIHRoaXMuYWRkTG9hZGVyID0gdGhpcy5hZGRMb2FkZXIgKyAxXG4gICAgdGhpcy5wcm9maWxlVjJTdmMuZmV0Y2hBcHByb3ZhbERldGFpbHMoKS5zdWJzY3JpYmUoKHJlc3A6IGFueSkgPT4ge1xuICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciAtIDFcbiAgICAgIGlmIChyZXNwICYmIHJlc3AucmVzdWx0ICYmIHJlc3AucmVzdWx0LmRhdGEpIHtcbiAgICAgICAgdGhpcy5wZW5kaW5nRmlsZWRzID0gcmVzcC5yZXN1bHQuZGF0YVxuICAgICAgICBpZiAodGhpcy5wZW5kaW5nRmlsZWRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLnBlbmRpbmdGaWxlZHMuZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAodXNlclsnZ3JvdXAnXSkge1xuICAgICAgICAgICAgICBsZXQgY3RybCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnZ3JvdXAnKVxuICAgICAgICAgICAgICBpZiAoY3RybCkge1xuICAgICAgICAgICAgICAgIGN0cmwucGF0Y2hWYWx1ZSh7IGdyb3VwOiB1c2VyWydncm91cCddIH0pXG4gICAgICAgICAgICAgICAgdGhpcy5wR3JvdXAgPSB1c2VyWydncm91cCddXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh1c2VyWydkZXNpZ25hdGlvbiddKSB7XG4gICAgICAgICAgICAgIGxldCBjdHJsID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdkZXNpZ25hdGlvbicpXG4gICAgICAgICAgICAgIGlmIChjdHJsKSB7XG4gICAgICAgICAgICAgICAgY3RybC5wYXRjaFZhbHVlKHsgZGVzaWduYXRpb246IHVzZXJbJ2Rlc2lnbmF0aW9uJ10gfSlcbiAgICAgICAgICAgICAgICB0aGlzLnBEZXNpZ25hdGlvbiA9IHVzZXJbJ2Rlc2lnbmF0aW9uJ11cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2VcbiAgICAgIHRoaXMuZGVmaW5lRm9ybUF0dHJpYnV0ZXMoKVxuICAgIH0sIGVycm9yID0+IHtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1jb25zb2xlXG4gICAgICBjb25zb2xlLmxvZyhlcnJvcilcbiAgICAgIHRoaXMuYWRkTG9hZGVyID0gdGhpcy5hZGRMb2FkZXIgLSAxXG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlXG4gICAgfSlcbiAgfVxuXG4gIGRlZmluZUZvcm1BdHRyaWJ1dGVzKCkge1xuICAgIGlmICh0aGlzLmJhdGNoRGV0YWlscy5iYXRjaEF0dHJpYnV0ZXMudXNlclByb2ZpbGVGaWxlZHMgJiZcbiAgICAgIHRoaXMuYmF0Y2hEZXRhaWxzLmJhdGNoQXR0cmlidXRlcy5icEVucm9sTWFuZGF0b3J5UHJvZmlsZUZpZWxkcykge1xuICAgICAgbGV0IGN1c3RvbUF0dHIgPSB0aGlzLmJhdGNoRGV0YWlscy5iYXRjaEF0dHJpYnV0ZXMuYnBFbnJvbE1hbmRhdG9yeVByb2ZpbGVGaWVsZHNcbiAgICAgIGNvbnNvbGUubG9nKFwiY3VzdG9tQXR0ciBcIiwgY3VzdG9tQXR0cilcbiAgICAgIGlmICh0aGlzLmZpbmRBdHRyKGN1c3RvbUF0dHIsICduYW1lJykpIHtcbiAgICAgICAgdGhpcy5jYW5TaG93TmFtZSA9IHRydWVcbiAgICAgICAgdGhpcy5zaG93bmFtZSA9IHRydWVcbiAgICAgICAgY29uc3QgZmllbGRDb250cm9sID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCduYW1lJylcbiAgICAgICAgaWYgKGZpZWxkQ29udHJvbCkge1xuICAgICAgICAgIGZpZWxkQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5maXJzdG5hbWUpXG4gICAgICAgICAgZmllbGRDb250cm9sLmRpc2FibGUoKVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnByb2ZpbGVGb3JtVHlwZSA9PT0gJ0F2YWlsYWJsZSB1c2VyIGZpbGxlZCBpR09UIHByb2ZpbGUnICYmXG4gICAgICAgICAgIXRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmZpcnN0bmFtZVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmNhblNob3dOYW1lID0gZmFsc2VcbiAgICAgICAgICB0aGlzLnNob3duYW1lID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5maW5kQXR0cihjdXN0b21BdHRyLCAnZW1haWwnKSkge1xuICAgICAgICB0aGlzLmNhblNob3dFbWFpbCA9IHRydWVcbiAgICAgICAgY29uc3QgZmllbGRDb250cm9sID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdwcmltYXJ5RW1haWwnKVxuICAgICAgICBpZiAoZmllbGRDb250cm9sKSB7XG4gICAgICAgICAgZmllbGRDb250cm9sLnNldFZhbHVlKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLnByaW1hcnlFbWFpbClcbiAgICAgICAgICBpZiAodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMucHJpbWFyeUVtYWlsKSB7XG4gICAgICAgICAgICBmaWVsZENvbnRyb2wuc2V0VmFsdWUodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMucHJpbWFyeUVtYWlsKVxuICAgICAgICAgICAgdGhpcy5lVmVyaWZpZWQgPSB0cnVlXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb2ZpbGVGb3JtVHlwZSA9PT0gJ0F2YWlsYWJsZSB1c2VyIGZpbGxlZCBpR09UIHByb2ZpbGUnKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dFbWFpbCA9IGZhbHNlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0VtYWlsID0gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lVmVyaWZpZWQgPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmZpbmRBdHRyKGN1c3RvbUF0dHIsICdvcmdhbmlzYXRpb24nKSkge1xuICAgICAgICB0aGlzLmNhblNob3dPcmcgPSB0cnVlXG4gICAgICAgIHRoaXMuc2hvd09yZyA9IHRydWVcbiAgICAgICAgY29uc3QgZmllbGRDb250cm9sID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdvcmdhbmlzYXRpb24nKVxuICAgICAgICBpZiAoZmllbGRDb250cm9sKSB7XG4gICAgICAgICAgZmllbGRDb250cm9sLnNldFZhbHVlKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuZW1wbG95bWVudERldGFpbHMuZGVwYXJ0bWVudE5hbWUpXG4gICAgICAgICAgZmllbGRDb250cm9sLmRpc2FibGUoKVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnByb2ZpbGVGb3JtVHlwZSA9PT0gJ0F2YWlsYWJsZSB1c2VyIGZpbGxlZCBpR09UIHByb2ZpbGUnICYmXG4gICAgICAgICAgIXRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuZW1wbG95bWVudERldGFpbHMuZGVwYXJ0bWVudE5hbWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5jYW5TaG93T3JnID0gZmFsc2VcbiAgICAgICAgICB0aGlzLnNob3dPcmcgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmZpbmRBdHRyKGN1c3RvbUF0dHIsICdncm91cCcpKSB7XG4gICAgICAgIHRoaXMuY2FuU2hvd0dyb3VwID0gdHJ1ZVxuICAgICAgICB0aGlzLnNob3dHcm91cCA9IHRydWVcbiAgICAgICAgY29uc3QgZmllbGRDb250cm9sID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdncm91cCcpXG4gICAgICAgIGlmIChmaWVsZENvbnRyb2wpIHtcbiAgICAgICAgICBpZiAodGhpcy5wR3JvdXApIHtcbiAgICAgICAgICAgIGZpZWxkQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnBHcm91cClcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLnByb2ZpbGVGb3JtVHlwZSA9PT0gJ0F2YWlsYWJsZSB1c2VyIGZpbGxlZCBpR09UIHByb2ZpbGUnKSB7XG4gICAgICAgICAgICAvLyAgIHRoaXMuY2FuU2hvd0dyb3VwID0gdHJ1ZVxuICAgICAgICAgICAgLy8gICB0aGlzLnNob3dHcm91cCA9IHRydWVcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucHJvZmVzc2lvbmFsRGV0YWlscyAmJlxuICAgICAgICAgICAgICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHMubGVuZ3RoICYmXG4gICAgICAgICAgICAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucHJvZmVzc2lvbmFsRGV0YWlsc1swXS5ncm91cFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZpZWxkQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHNbMF0uZ3JvdXApXG4gICAgICAgICAgICAgIC8vIGlmICh0aGlzLnByb2ZpbGVGb3JtVHlwZSA9PT0gJ0F2YWlsYWJsZSB1c2VyIGZpbGxlZCBpR09UIHByb2ZpbGUnKSB7XG4gICAgICAgICAgICAgIC8vICAgdGhpcy5jYW5TaG93R3JvdXAgPSBmYWxzZVxuICAgICAgICAgICAgICAvLyAgIHRoaXMuc2hvd0dyb3VwID0gZmFsc2VcbiAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmaWVsZENvbnRyb2wuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXG4gICAgICAgICAgZmllbGRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5maW5kQXR0cihjdXN0b21BdHRyLCAnZGVzaWduYXRpb24nKSkge1xuICAgICAgICB0aGlzLmNhblNob3dEZXNpZ25hdGlvbiA9IHRydWVcbiAgICAgICAgdGhpcy5zaG93RGVzaWduYXRpb24gPSB0cnVlXG4gICAgICAgIGNvbnN0IGZpZWxkQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnZGVzaWduYXRpb24nKVxuICAgICAgICBpZiAoZmllbGRDb250cm9sKSB7XG4gICAgICAgICAgaWYgKHRoaXMucERlc2lnbmF0aW9uKSB7XG4gICAgICAgICAgICBmaWVsZENvbnRyb2wucGF0Y2hWYWx1ZSh0aGlzLnBEZXNpZ25hdGlvbilcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLnByb2ZpbGVGb3JtVHlwZSA9PT0gJ0F2YWlsYWJsZSB1c2VyIGZpbGxlZCBpR09UIHByb2ZpbGUnKSB7XG4gICAgICAgICAgICAvLyAgIHRoaXMuY2FuU2hvd0Rlc2lnbmF0aW9uID0gdHJ1ZVxuICAgICAgICAgICAgLy8gICB0aGlzLnNob3dEZXNpZ25hdGlvbiA9IHRydWVcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucHJvZmVzc2lvbmFsRGV0YWlscyAmJlxuICAgICAgICAgICAgICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHMubGVuZ3RoICYmXG4gICAgICAgICAgICAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucHJvZmVzc2lvbmFsRGV0YWlsc1swXS5kZXNpZ25hdGlvbikge1xuICAgICAgICAgICAgICBmaWVsZENvbnRyb2wucGF0Y2hWYWx1ZSh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHNbMF0uZGVzaWduYXRpb24pXG4gICAgICAgICAgICAgIC8vIGlmICh0aGlzLnByb2ZpbGVGb3JtVHlwZSA9PT0gJ0F2YWlsYWJsZSB1c2VyIGZpbGxlZCBpR09UIHByb2ZpbGUnKSB7XG4gICAgICAgICAgICAgIC8vICAgdGhpcy5jYW5TaG93RGVzaWduYXRpb24gPSBmYWxzZVxuICAgICAgICAgICAgICAvLyAgIHRoaXMuc2hvd0Rlc2lnbmF0aW9uID0gZmFsc2VcbiAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmaWVsZENvbnRyb2wuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXG4gICAgICAgICAgZmllbGRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5maW5kQXR0cihjdXN0b21BdHRyLCAnZW1wbG95ZWVDb2RlJykpIHtcbiAgICAgICAgdGhpcy5jYW5TaG93RW1wbG95ZWVDb2RlID0gdHJ1ZVxuICAgICAgICBjb25zdCBjb250cmwgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2VtcGxveWVlQ29kZScpXG4gICAgICAgIGlmIChjb250cmwpIHtcbiAgICAgICAgICBpZiAodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlscy5lbXBsb3llZUNvZGUpIHtcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWx1ZSh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLmVtcGxveWVlQ29kZSlcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLnBhdHRlcm4oRU1QX0lEX1BBVFRFUk4pXSlcbiAgICAgICAgICAgIGNvbnRybC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJvZmlsZUZvcm1UeXBlID09PSAnQXZhaWxhYmxlIHVzZXIgZmlsbGVkIGlHT1QgcHJvZmlsZScpIHtcbiAgICAgICAgICAgIHRoaXMuY2FuU2hvd0VtcGxveWVlQ29kZSA9IGZhbHNlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0VtcGxveWVlQ29kZSA9IHRydWVcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLnBhdHRlcm4oRU1QX0lEX1BBVFRFUk4pXSk7XG4gICAgICAgICAgICBjb250cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmZpbmRBdHRyKGN1c3RvbUF0dHIsICdtb2JpbGUnKSkge1xuICAgICAgICB0aGlzLmNhbnNob3dNb2JpbGUgPSB0cnVlXG4gICAgICAgIGNvbnN0IGNvbnRybCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnbW9iaWxlJylcbiAgICAgICAgaWYgKGNvbnRybCkge1xuICAgICAgICAgIGlmICh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5tb2JpbGUgJiYgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMucGhvbmVWZXJpZmllZCkge1xuICAgICAgICAgICAgY29udHJsLnNldFZhbHVlKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLm1vYmlsZSlcbiAgICAgICAgICAgIHRoaXMubVZlcmlmaWVkID0gdHJ1ZVxuICAgICAgICAgICAgY29udHJsLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMubWluTGVuZ3RoKDEwKSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMTApLCBWYWxpZGF0b3JzLnBhdHRlcm4oTU9CSUxFX1BBVFRFUk4pXSk7XG4gICAgICAgICAgICBjb250cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb2ZpbGVGb3JtVHlwZSA9PT0gJ0F2YWlsYWJsZSB1c2VyIGZpbGxlZCBpR09UIHByb2ZpbGUnKSB7XG4gICAgICAgICAgICB0aGlzLmNhbnNob3dNb2JpbGUgPSBmYWxzZVxuICAgICAgICAgICAgdGhpcy5tVmVyaWZpZWQgPSB0cnVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd01vYmlsZSA9IHRydWVcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLm1pbkxlbmd0aCgxMCksIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEwKSwgVmFsaWRhdG9ycy5wYXR0ZXJuKE1PQklMRV9QQVRURVJOKV0pO1xuICAgICAgICAgICAgY29udHJsLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5jYW5zaG93TW9iaWxlID09PSBmYWxzZSkge1xuICAgICAgICB0aGlzLm1WZXJpZmllZCA9IHRydWVcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZmluZEF0dHIoY3VzdG9tQXR0ciwgJ2dlbmRlcicpKSB7XG4gICAgICAgIHRoaXMuY2FuU2hvd0dlbmRlciA9IHRydWVcbiAgICAgICAgY29uc3QgY29udHJsID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdnZW5kZXInKVxuICAgICAgICBpZiAoY29udHJsKSB7XG4gICAgICAgICAgaWYgKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmdlbmRlcikge1xuICAgICAgICAgICAgY29udHJsLnNldFZhbHVlKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmdlbmRlcilcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSlcbiAgICAgICAgICAgIGNvbnRybC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJvZmlsZUZvcm1UeXBlID09PSAnQXZhaWxhYmxlIHVzZXIgZmlsbGVkIGlHT1QgcHJvZmlsZScpIHtcbiAgICAgICAgICAgIHRoaXMuY2FuU2hvd0dlbmRlciA9IGZhbHNlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0dlbmRlciA9IHRydWVcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSlcbiAgICAgICAgICAgIGNvbnRybC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZmluZEF0dHIoY3VzdG9tQXR0ciwgJ2RvYicpKSB7XG4gICAgICAgIHRoaXMuY2FuU2hvd0RvYiA9IHRydWVcbiAgICAgICAgY29uc3QgY29udHJsID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdkb2InKVxuICAgICAgICBpZiAoY29udHJsKSB7XG4gICAgICAgICAgaWYgKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmRvYikge1xuICAgICAgICAgICAgbGV0IF9kb2I6IGFueSA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmRvYlxuICAgICAgICAgICAgY29uc3QgW2RheSwgbW9udGgsIHllYXJdID0gX2RvYi5zcGxpdCgnLScpXG4gICAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoTnVtYmVyKHllYXIpLCBOdW1iZXIobW9udGgpIC0gMSwgTnVtYmVyKGRheSkpXG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWREYXkgPSBTdHJpbmcoZGF0ZS5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJylcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZE1vbnRoID0gU3RyaW5nKGRhdGUuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICcwJylcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZFllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKClcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbmV3IERhdGUoYCR7Zm9ybWF0dGVkWWVhcn0tJHtmb3JtYXR0ZWRNb250aH0tJHtmb3JtYXR0ZWREYXl9YClcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWx1ZSh0aGlzLnNlbGVjdGVkRGF0ZSlcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSlcbiAgICAgICAgICAgIGNvbnRybC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJvZmlsZUZvcm1UeXBlID09PSAnQXZhaWxhYmxlIHVzZXIgZmlsbGVkIGlHT1QgcHJvZmlsZScpIHtcbiAgICAgICAgICAgIHRoaXMuY2FuU2hvd0RvYiA9IGZhbHNlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0RvYiA9IHRydWVcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSlcbiAgICAgICAgICAgIGNvbnRybC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZmluZEF0dHIoY3VzdG9tQXR0ciwgJ2RvbWljaWxlTWVkaXVtJykpIHtcbiAgICAgICAgdGhpcy5jYW5TaG93RG9taWNpbGVNZWRpdW0gPSB0cnVlXG4gICAgICAgIGNvbnN0IGNvbnRybCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnZG9taWNpbGVNZWRpdW0nKVxuICAgICAgICBpZiAoY29udHJsKSB7XG4gICAgICAgICAgaWYgKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmRvbWljaWxlTWVkaXVtKSB7XG4gICAgICAgICAgICBjb250cmwuc2V0VmFsdWUodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuZG9taWNpbGVNZWRpdW0pXG4gICAgICAgICAgICBjb250cmwuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXG4gICAgICAgICAgICBjb250cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb2ZpbGVGb3JtVHlwZSA9PT0gJ0F2YWlsYWJsZSB1c2VyIGZpbGxlZCBpR09UIHByb2ZpbGUnKSB7XG4gICAgICAgICAgICB0aGlzLmNhblNob3dEb21pY2lsZU1lZGl1bSA9IGZhbHNlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0RlY2ltYWxNZWRpdW0gPSB0cnVlXG4gICAgICAgICAgICBjb250cmwuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXG4gICAgICAgICAgICBjb250cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmZpbmRBdHRyKGN1c3RvbUF0dHIsICdjYXRlZ29yeScpKSB7XG4gICAgICAgIHRoaXMuY2FuU2hvd0NhdGVnb3J5ID0gdHJ1ZVxuICAgICAgICBjb25zdCBjb250cmwgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2NhdGVnb3J5JylcbiAgICAgICAgaWYgKGNvbnRybCkge1xuICAgICAgICAgIGlmICh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5jYXRlZ29yeSkge1xuICAgICAgICAgICAgY29udHJsLnNldFZhbHVlKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmNhdGVnb3J5KVxuICAgICAgICAgICAgY29udHJsLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKVxuICAgICAgICAgICAgY29udHJsLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9maWxlRm9ybVR5cGUgPT09ICdBdmFpbGFibGUgdXNlciBmaWxsZWQgaUdPVCBwcm9maWxlJykge1xuICAgICAgICAgICAgdGhpcy5jYW5TaG93Q2F0ZWdvcnkgPSBmYWxzZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3dDYXRlZ29yeSA9IHRydWVcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSlcbiAgICAgICAgICAgIGNvbnRybC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZmluZEF0dHIoY3VzdG9tQXR0ciwgJ3BpbkNvZGUnKSkge1xuICAgICAgICB0aGlzLmNhblNob3dwaW5Db2RlID0gdHJ1ZVxuICAgICAgICBjb25zdCBjb250cmwgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ3BpbkNvZGUnKVxuICAgICAgICBpZiAoY29udHJsKSB7XG4gICAgICAgICAgaWYgKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuZW1wbG95bWVudERldGFpbHMucGluQ29kZSkge1xuICAgICAgICAgICAgY29udHJsLnNldFZhbHVlKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuZW1wbG95bWVudERldGFpbHMucGluQ29kZSlcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCg2KSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoNiksIFZhbGlkYXRvcnMucGF0dGVybihQSU5fQ09ERV9QQVRURVJOKV0pXG4gICAgICAgICAgICBjb250cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb2ZpbGVGb3JtVHlwZSA9PT0gJ0F2YWlsYWJsZSB1c2VyIGZpbGxlZCBpR09UIHByb2ZpbGUnKSB7XG4gICAgICAgICAgICB0aGlzLmNhblNob3dwaW5Db2RlID0gZmFsc2VcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaG93UGluQ29kZSA9IHRydWVcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCg2KSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoNiksIFZhbGlkYXRvcnMucGF0dGVybihQSU5fQ09ERV9QQVRURVJOKV0pXG4gICAgICAgICAgICBjb250cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmZpbmRBdHRyKGN1c3RvbUF0dHIsICdjYWRyZURldGFpbHMnKSkge1xuICAgICAgICB0aGlzLmNhblNob3dzaG93Q2FkcmVEZXRhaWxzID0gdHJ1ZVxuICAgICAgICBjb25zdCBjb250cmwgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2lzQ2FkcmUnKVxuICAgICAgICBpZiAoY29udHJsKSB7XG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzKS5pbmNsdWRlcygnaXNDYWRyZScpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuaXNDYWRyZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICBjb250cmwuc2V0VmFsdWUodHJ1ZSlcbiAgICAgICAgICAgICAgdGhpcy5pc0NhZHJlU3RhdHVzID0gdHJ1ZVxuICAgICAgICAgICAgICB0aGlzLnNlcnZpY2VJZCA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNpdmlsU2VydmljZVR5cGVJZFxuICAgICAgICAgICAgICB0aGlzLmNpdmlsU2VydmljZUlkID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2l2aWxTZXJ2aWNlSWRcbiAgICAgICAgICAgICAgdGhpcy5jYWRyZUlkID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2FkcmVJZFxuICAgICAgICAgICAgICB0aGlzLmNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHkgPSB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5TmFtZVxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldFNlcnZpY2UodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2l2aWxTZXJ2aWNlVHlwZSlcbiAgICAgICAgICAgICAgICB0aGlzLm9uU2VydmljZVNlbGVjdCh7IHZhbHVlOiB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jaXZpbFNlcnZpY2VOYW1lIH0pXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5vbkNhZHJlU2VsZWN0KHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlTmFtZSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy51c2VyRGV0YWlsc0Zvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgICB0eXBlT2ZDaXZpbFNlcnZpY2U6IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNpdmlsU2VydmljZVR5cGUsXG4gICAgICAgICAgICAgICAgICBzZXJ2aWNlVHlwZTogdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2l2aWxTZXJ2aWNlTmFtZSxcbiAgICAgICAgICAgICAgICAgIGNhZHJlTmFtZTogdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2FkcmVOYW1lLFxuICAgICAgICAgICAgICAgICAgY2FkcmVCYXRjaDogdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2FkcmVCYXRjaCxcbiAgICAgICAgICAgICAgICAgIGNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHk6IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHlOYW1lLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH0sIDEwMDApXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb250cmwuc2V0VmFsdWUoZmFsc2UpXG4gICAgICAgICAgICAgIHRoaXMuaXNDYWRyZVN0YXR1cyA9IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb2ZpbGVGb3JtVHlwZSA9PT0gJ0F2YWlsYWJsZSB1c2VyIGZpbGxlZCBpR09UIHByb2ZpbGUnKSB7XG4gICAgICAgICAgICB0aGlzLmNhblNob3dzaG93Q2FkcmVEZXRhaWxzID0gZmFsc2VcbiAgICAgICAgICAgIHRoaXMuaXNDYWRyZVN0YXR1cyA9IGZhbHNlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSlcbiAgICAgICAgICAgIGNvbnRybC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmaW5kQXR0cihjdXN0b21BdHRyOiBhbnksIGZOYW1lOiBhbnkpIHtcbiAgICBpZiAoZk5hbWUgPT09ICduYW1lJykge1xuICAgICAgcmV0dXJuIGN1c3RvbUF0dHIuZmluZCgoX2ZpZWxkOiBhbnkpID0+IF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5maXJzdG5hbWUnKVxuICAgIH1cbiAgICBpZiAoZk5hbWUgPT09ICdlbWFpbCcpIHtcbiAgICAgIHJldHVybiBjdXN0b21BdHRyLmZpbmQoKF9maWVsZDogYW55KSA9PiBfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMucHJpbWFyeUVtYWlsJylcbiAgICB9XG4gICAgaWYgKGZOYW1lID09PSAnb3JnYW5pc2F0aW9uJykge1xuICAgICAgcmV0dXJuIGN1c3RvbUF0dHIuZmluZCgoX2ZpZWxkOiBhbnkpID0+IF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLmRlcGFydG1lbnROYW1lJylcbiAgICB9XG4gICAgaWYgKGZOYW1lID09PSAnZ3JvdXAnKSB7XG4gICAgICByZXR1cm4gY3VzdG9tQXR0ci5maW5kKChfZmllbGQ6IGFueSkgPT4gX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMucHJvZmVzc2lvbmFsRGV0YWlscy5ncm91cCcpXG4gICAgfVxuICAgIGlmIChmTmFtZSA9PT0gJ2Rlc2lnbmF0aW9uJykge1xuICAgICAgcmV0dXJuIGN1c3RvbUF0dHIuZmluZCgoX2ZpZWxkOiBhbnkpID0+IF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHMuZGVzaWduYXRpb24nKVxuICAgIH1cbiAgICBpZiAoZk5hbWUgPT09ICdlbXBsb3llZUNvZGUnKSB7XG4gICAgICByZXR1cm4gY3VzdG9tQXR0ci5maW5kKChfZmllbGQ6IGFueSkgPT4gX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMuZW1wbG95bWVudERldGFpbHMuZW1wbG95ZWVDb2RlJylcbiAgICB9XG4gICAgaWYgKGZOYW1lID09PSAnbW9iaWxlJykge1xuICAgICAgcmV0dXJuIGN1c3RvbUF0dHIuZmluZCgoX2ZpZWxkOiBhbnkpID0+IF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5tb2JpbGUnKVxuICAgIH1cbiAgICBpZiAoZk5hbWUgPT09ICdnZW5kZXInKSB7XG4gICAgICByZXR1cm4gY3VzdG9tQXR0ci5maW5kKChfZmllbGQ6IGFueSkgPT4gX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmdlbmRlcicpXG4gICAgfVxuICAgIGlmIChmTmFtZSA9PT0gJ2RvYicpIHtcbiAgICAgIHJldHVybiBjdXN0b21BdHRyLmZpbmQoKF9maWVsZDogYW55KSA9PiBfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuZG9iJylcbiAgICB9XG4gICAgaWYgKGZOYW1lID09PSAnZG9taWNpbGVNZWRpdW0nKSB7XG4gICAgICByZXR1cm4gY3VzdG9tQXR0ci5maW5kKChfZmllbGQ6IGFueSkgPT4gX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmRvbWljaWxlTWVkaXVtJylcbiAgICB9XG4gICAgaWYgKGZOYW1lID09PSAnY2F0ZWdvcnknKSB7XG4gICAgICByZXR1cm4gY3VzdG9tQXR0ci5maW5kKChfZmllbGQ6IGFueSkgPT4gX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmNhdGVnb3J5JylcbiAgICB9XG4gICAgaWYgKGZOYW1lID09PSAncGluQ29kZScpIHtcbiAgICAgIHJldHVybiBjdXN0b21BdHRyLmZpbmQoKF9maWVsZDogYW55KSA9PiBfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlscy5waW5Db2RlJylcbiAgICB9XG4gICAgaWYgKGZOYW1lID09PSAnY2FkcmVEZXRhaWxzJykge1xuICAgICAgcmV0dXJuIGN1c3RvbUF0dHIuZmluZCgoX2ZpZWxkOiBhbnkpID0+IF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jaXZpbFNlcnZpY2VUeXBlJylcbiAgICB9XG5cbiAgfVxuXG4gIGZpbmRJblByb2ZpbGUoYXR0cjogc3RyaW5nKSB7XG4gICAgaWYgKGF0dHIgPT09ICduYW1lJykge1xuICAgICAgcmV0dXJuIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmZpcnN0TmFtZSB8fCB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5maXJzdG5hbWVcbiAgICB9XG4gICAgaWYgKGF0dHIgPT09ICdncm91cCcpIHtcbiAgICAgIHJldHVybiAoIXRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucHJvZmlsZUdyb3VwU3RhdHVzKSB8fFxuICAgICAgICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnByb2ZpbGVHcm91cFN0YXR1cyA9PT0gJ05PVC1WRVJJRklFRCcgfHwgKHRoaXMucEdyb3VwID8gdHJ1ZSA6IGZhbHNlKVxuICAgIH1cbiAgICBpZiAoYXR0ciA9PT0gJ2Rlc2lnbmF0aW9uJykge1xuICAgICAgcmV0dXJuICghdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wcm9maWxlRGVzaWduYXRpb25TdGF0dXMpIHx8XG4gICAgICAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucHJvZmlsZURlc2lnbmF0aW9uU3RhdHVzID09PSAnTk9ULVZFUklGSUVEJyB8fCAodGhpcy5wRGVzaWduYXRpb24gPyB0cnVlIDogZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgZ2V0R3JvdXBEYXRhKCk6IHZvaWQge1xuICAgIHRoaXMuYWRkTG9hZGVyID0gdGhpcy5hZGRMb2FkZXIgKyAxXG4gICAgdGhpcy51c2VyUHJvZmlsZVNlcnZpY2UuZ2V0R3JvdXBzKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3lTdWJqZWN0JCkpXG4gICAgICAuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyIC0gMVxuICAgICAgICB0aGlzLmdyb3VwRGF0YSA9IHJlcy5yZXN1bHQgJiYgcmVzLnJlc3VsdC5yZXNwb25zZS5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGUgIT09ICdPdGhlcnMnKVxuICAgICAgfSwgKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xuICAgICAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyIC0gMVxuICAgICAgICBpZiAoIWVycm9yLm9rKSB7XG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKHRoaXMuaGFuZGxlVHJhbnNsYXRlVG8oJ2dyb3VwRGF0YUZhaWxlJykpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gIH1cblxuICBoYW5kbGVUcmFuc2xhdGVUbyhtZW51TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy51c2VyUHJvZmlsZVNlcnZpY2UuaGFuZGxlVHJhbnNsYXRlVG8obWVudU5hbWUpXG4gIH1cblxuICBjaGVja1NlbGVjdGVkT3JnSGFzRGVzaWduYXRpb25zKCk6IHZvaWQge1xuICAgIGlmKHRoaXMub3JnYW5pc2F0aW9uSWQpIHtcbiAgICAgIGNvbnN0IGlnb3REZXNpZ25hdGlvbkJvZHk6IGFueSA9IHtcbiAgICAgICAgcmVxdWVzdDoge1xuICAgICAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgICAgIHN0YXR1czogJ0xpdmUnLFxuICAgICAgICAgICAgY2F0ZWdvcnk6ICdkZXNpZ25hdGlvbicsXG4gICAgICAgICAgICBjYXRlZ29yaWVzOiBbXG4gICAgICAgICAgICAgIHRoaXMub3JnYW5pc2F0aW9uSWQgKyAnX29kY3NfZGVzaWduYXRpb24nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIG9iamVjdFR5cGU6ICdUZXJtJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZpZWxkczogWyduYW1lJ10sXG4gICAgICAgICAgb2Zmc2V0OiAwLFxuICAgICAgICAgIGxpbWl0OiAxLFxuICAgICAgICAgIHNvcnRfYnk6IHtcbiAgICAgICAgICAgIGxhc3RVcGRhdGVkT246ICdkZXNjJyxcbiAgICAgICAgICAgIG9iamVjdFR5cGU6ICdUZXJtJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZhY2V0czogW10sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgdGhpcy51c2VyUHJvZmlsZVNlcnZpY2Uuc2VhcmNoSWdvdERlc2lnbmF0aW9uKGlnb3REZXNpZ25hdGlvbkJvZHkpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvdW50ID0gXy5nZXQocmVzLCAncmVzdWx0LmNvdW50JywgMCk7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE9yZ0hhc0Rlc2lnbmF0aW9ucyA9IGNvdW50ID4gMDtcbiAgICAgICAgICB0aGlzLmdldGRlc2lnbmF0aW9uc01ldGEoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkT3JnSGFzRGVzaWduYXRpb25zID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5nZXRkZXNpZ25hdGlvbnNNZXRhKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkT3JnSGFzRGVzaWduYXRpb25zID0gZmFsc2U7XG4gICAgICB0aGlzLmdldGRlc2lnbmF0aW9uc01ldGEoKTtcbiAgICB9XG4gIH1cblxuICBnZXRkZXNpZ25hdGlvbnNNZXRhKCkge1xuICAgIHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IHRydWU7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRPcmdIYXNEZXNpZ25hdGlvbnMpIHtcbiAgICAgIHRoaXMuZ2V0SWdvdERlc2lnbmF0aW9ucygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdldERlZmF1bHREZXNpZ25hdGlvbnMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldElnb3REZXNpZ25hdGlvbnMoKSB7XG4gICAgY29uc3QgcmVxdWVzdEJvZHk6IGFueSA9IHtcbiAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgZmlsdGVyczoge1xuICAgICAgICAgIHN0YXR1czogXCJMaXZlXCIsXG4gICAgICAgICAgY2F0ZWdvcnk6IFwiZGVzaWduYXRpb25cIixcbiAgICAgICAgICBjYXRlZ29yaWVzOiBbXG4gICAgICAgICAgICB0aGlzLm9yZ2FuaXNhdGlvbklkICsgJ19vZGNzX2Rlc2lnbmF0aW9uJyxcbiAgICAgICAgICBdLFxuICAgICAgICAgIG9iamVjdFR5cGU6IFwiVGVybVwiXG4gICAgICAgIH0sXG4gICAgICAgIGZpZWxkczogW1xuICAgICAgICAgIFwibmFtZVwiXG4gICAgICAgIF0sXG4gICAgICAgIG9mZnNldDogdGhpcy5kZXNpZ25hdGlvbnNPZmZzZXQsXG4gICAgICAgIGxpbWl0OiB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudCxcbiAgICAgICAgc29ydF9ieToge1xuICAgICAgICAgIGxhc3RVcGRhdGVkT246IFwiZGVzY1wiLFxuICAgICAgICAgIG9iamVjdFR5cGU6IFwiVGVybVwiXG4gICAgICAgIH0sXG4gICAgICAgIGZhY2V0czogW11cbiAgICAgIH1cbiAgICB9O1xuICAgIGlmKHRoaXMuZGVzaWduYXRpb25TZWFyY2hUZXh0KXtcbiAgICAgIHJlcXVlc3RCb2R5WydyZXF1ZXN0J11bJ3F1ZXJ5J10gPSB0aGlzLmRlc2lnbmF0aW9uU2VhcmNoVGV4dDtcbiAgICB9XG4gICAgdGhpcy51c2VyUHJvZmlsZVNlcnZpY2Uuc2VhcmNoSWdvdERlc2lnbmF0aW9uKHJlcXVlc3RCb2R5KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IGZhbHNlO1xuICAgICAgICBpZih0aGlzLmRlc2lnbmF0aW9uc09mZnNldCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25zTWV0YSA9IF8uZ2V0KHJlcywgJ3Jlc3VsdC5UZXJtJywgW10pIGFzIGRlc2lnbmF0aW9uW107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbnNNZXRhID0gWy4uLnRoaXMuZGVzaWduYXRpb25zTWV0YSwgLi4uXy5nZXQocmVzLCAncmVzdWx0LlRlcm0nLCBbXSkgYXMgZGVzaWduYXRpb25bXV07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZXNpZ25hdGlvbnNUb3RhbENvdW50ID0gXy5nZXQocmVzLCAncmVzdWx0LmNvdW50JywgMCk7XG4gICAgICAgIHRoaXMuY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zID0gZmFsc2U7XG4gICAgICAgIHRoaXMub3BlblNuYWNrYmFyKCdTb21ldGhpbmcgd2VudCB3cm9uZy4gUGxlYXNlIHJlZnJlc2ggb3IgdHJ5IGFnYWluIGxhdGVyLicpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIFxuICAgIHByaXZhdGUgZ2V0RGVmYXVsdERlc2lnbmF0aW9ucygpIHtcbiAgICAgIGNvbnN0IHJlcXVlc3RCb2R5OiBhbnkgPSB7XG4gICAgICAgIGZpbHRlckNyaXRlcmlhTWFwOiB7XG4gICAgICAgICAgc3RhdHVzOiAnQWN0aXZlJ1xuICAgICAgICB9LFxuICAgICAgICByZXF1ZXN0ZWRGaWVsZHM6IFtdLFxuICAgICAgICBwYWdlTnVtYmVyOiB0aGlzLmRlc2lnbmF0aW9uc09mZnNldCxcbiAgICAgICAgcGFnZVNpemU6IHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5kZXNpZ25hdGlvblNlYXJjaFRleHQpIHtcbiAgICAgICAgcmVxdWVzdEJvZHlbJ3NlYXJjaFN0cmluZyddID0gdGhpcy5kZXNpZ25hdGlvblNlYXJjaFRleHRcbiAgICAgIH1cbiAgICAgIHRoaXMudXNlclByb2ZpbGVTZXJ2aWNlLnNlYXJjaERlc2lnbmF0aW9uKHJlcXVlc3RCb2R5KS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSBmYWxzZTtcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gXy5nZXQocmVzLCAncmVzdWx0LnJlc3VsdC5kYXRhJywgW10pIGFzIGRlc2lnbmF0aW9uW107XG4gICAgICAgICAgY29uc3QgbWFwcGVkID0gY29udGVudC5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0uZGVzaWduYXRpb24gfHwgJycsXG4gICAgICAgICAgICBzdGF0dXM6IGl0ZW0uc3RhdHVzIHx8ICdBY3RpdmUnLFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgICBpZiAodGhpcy5kZXNpZ25hdGlvbnNPZmZzZXQgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25zTWV0YSA9IG1hcHBlZDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbnNNZXRhID0gWy4uLnRoaXMuZGVzaWduYXRpb25zTWV0YSwgLi4ubWFwcGVkXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbnNUb3RhbENvdW50ID0gXy5nZXQocmVzLCAncmVzdWx0LnJlc3VsdC50b3RhbENvdW50JywgMCk7XG4gICAgICAgICAgdGhpcy5jaGVja0N1cnJlbnREZXNpZ25hdGlvblByZXNlbnQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLm9wZW5TbmFja2JhcignU29tZXRoaW5nIHdlbnQgd3JvbmcuIFBsZWFzZSByZWZyZXNoIG9yIHRyeSBhZ2FpbiBsYXRlci4nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gIGdldE1hc3Rlckxhbmd1YWdlKCk6IHZvaWQge1xuICAgIHRoaXMudXNlclByb2ZpbGVTZXJ2aWNlLmdldE1hc3Rlckxhbmd1YWdlcygpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95U3ViamVjdCQpKVxuICAgICAgLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5tYXN0ZXJMYW5ndWFnZXMgPSByZXMubGFuZ3VhZ2VzXG4gICAgICAgIHRoaXMubWFzdGVyTGFuZ3VhZ2VCYWNrdXAgPSByZXMubGFuZ3VhZ2VzXG4gICAgICB9LCAoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmICghZXJyb3Iub2spIHtcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4odGhpcy5oYW5kbGVUcmFuc2xhdGVUbygndW5hYmxlRmV0Y2hNYXN0ZXJMYW5ndWFnZURhdGEnKSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgfVxuXG4gIGhhbmRsZUVtcHR5KHR5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0eXBlID09PSAnbW9iaWxlJykge1xuICAgICAgaWYgKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLm1vYmlsZSAmJiAhdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ21vYmlsZSddLnZhbHVlKSB7XG4gICAgICAgIHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydtb2JpbGUnXS5zZXRFcnJvcnMoeyB2YWxpZDogZmFsc2UgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGUgPT09ICdwcmltYXJ5RW1haWwnKSB7XG4gICAgICBpZiAoIXRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLnByaW1hcnlFbWFpbCAmJiAhdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy52YWx1ZVsncHJpbWFyeUVtYWlsJ10pIHtcbiAgICAgICAgdGhpcy51c2VyRGV0YWlsc0Zvcm0uc2V0RXJyb3JzKHsgdmFsaWQ6IGZhbHNlIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG4gIG9uU3VibWl0Rm9ybShmb3JtOiBhbnkpIHtcbiAgICAvKiB0c2xpbnQ6ZGlzYWJsZSAqL1xuICAgIGNvbnNvbGUubG9nKGZvcm0pXG4gICAgbGV0IHBheWxvYWQgPSB0aGlzLmdlbmVyYXRlUHJvZmlsZVBheWxvYWQoKVxuICAgIGlmICgodGhpcy5jYW5TaG93RGVzaWduYXRpb24gfHwgdGhpcy5jYW5TaG93R3JvdXApICYmICF0aGlzLnNob3dEb3B0Q2hhbmdlcykge1xuICAgICAgaWYgKHRoaXMucGVuZGluZ0ZpbGVkcykge1xuICAgICAgICB0aGlzLnBlbmRpbmdGaWxlZHMuZm9yRWFjaCgoX29iajogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKF9vYmopLmluY2x1ZGVzKCdkZXNpZ25hdGlvbicpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyICsgMVxuICAgICAgICAgICAgdGhpcy5wcm9maWxlVjJTdmMud2l0aERyYXdBcHByb3ZhbFJlcXVlc3QodGhpcy5jb25maWdTcmMudW5NYXBwZWRVc2VyLmlkLCBfb2JqLndmSWQpLnN1YnNjcmliZSgocmVzcDogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChyZXNwICYmIHJlc3AucmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciAtIDFcbiAgICAgICAgICAgICAgICAvKiB0c2xpbnQ6ZGlzYWJsZSAqL1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3AucmVzdWx0Lm1lc3NhZ2UpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciAtIDFcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKF9vYmopLmluY2x1ZGVzKCdncm91cCcpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyICsgMVxuICAgICAgICAgICAgdGhpcy5wcm9maWxlVjJTdmMud2l0aERyYXdBcHByb3ZhbFJlcXVlc3QodGhpcy5jb25maWdTcmMudW5NYXBwZWRVc2VyLmlkLCBfb2JqLndmSWQpLnN1YnNjcmliZSgocmVzcDogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChyZXNwICYmIHJlc3AucmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciAtIDFcbiAgICAgICAgICAgICAgICAvKiB0c2xpbnQ6ZGlzYWJsZSAqL1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3AucmVzdWx0Lm1lc3NhZ2UpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciAtIDFcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIGlmICh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5wcmltYXJ5RW1haWwgIT09IHRoaXMudXNlckRldGFpbHNGb3JtLnZhbHVlLnByaW1hcnlFbWFpbCAmJiB0aGlzLmNhblNob3dFbWFpbCkge1xuICAgICAgICAgIHRoaXMudXBkYXRlRW1haWwodGhpcy51c2VyRGV0YWlsc0Zvcm0udmFsdWUucHJpbWFyeUVtYWlsKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3VibWl0UHJvZmlsZShwYXlsb2FkKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMucHJpbWFyeUVtYWlsICE9PSB0aGlzLnVzZXJEZXRhaWxzRm9ybS52YWx1ZS5wcmltYXJ5RW1haWwgJiYgdGhpcy5jYW5TaG93RW1haWwpIHtcbiAgICAgICAgdGhpcy51cGRhdGVFbWFpbCh0aGlzLnVzZXJEZXRhaWxzRm9ybS52YWx1ZS5wcmltYXJ5RW1haWwpXG4gICAgICB9XG4gICAgICB0aGlzLnN1Ym1pdFByb2ZpbGUocGF5bG9hZClcbiAgICB9XG4gIH1cblxuICBzdWJtaXRQcm9maWxlKHBheWxvYWQ6IGFueSkge1xuICAgIGlmIChwYXlsb2FkICYmIHBheWxvYWRbJ3JlcXVlc3QnXSAmJiBwYXlsb2FkWydyZXF1ZXN0J11bJ3Byb2ZpbGVEZXRhaWxzJ10gJiYgcGF5bG9hZFsncmVxdWVzdCddWydwcm9maWxlRGV0YWlscyddWydwZXJzb25hbERldGFpbHMnXSAmJiBwYXlsb2FkWydyZXF1ZXN0J11bJ3Byb2ZpbGVEZXRhaWxzJ11bJ3BlcnNvbmFsRGV0YWlscyddWydkb2InXSkge1xuICAgICAgbGV0IGRvYkZvcm1hdCA9IHBheWxvYWRbJ3JlcXVlc3QnXVsncHJvZmlsZURldGFpbHMnXVsncGVyc29uYWxEZXRhaWxzJ11bJ2RvYiddO1xuICAgICAgbGV0IGRvYiA9IGAke25ldyBEYXRlKGRvYkZvcm1hdCkuZ2V0RGF0ZSgpfS0ke25ldyBEYXRlKGRvYkZvcm1hdCkuZ2V0TW9udGgoKSArIDF9LSR7bmV3IERhdGUoZG9iRm9ybWF0KS5nZXRGdWxsWWVhcigpfWBcbiAgICAgIHBheWxvYWRbJ3JlcXVlc3QnXVsncHJvZmlsZURldGFpbHMnXVsncGVyc29uYWxEZXRhaWxzJ11bJ2RvYiddID0gZG9iXG4gICAgfVxuICAgIGlmICh0aGlzLnVwZGF0ZVByb2ZpbGUpIHtcbiAgICAgIHRoaXMuYWRkTG9hZGVyID0gdGhpcy5hZGRMb2FkZXIgKyAxXG4gICAgICB0aGlzLnVzZXJQcm9maWxlU2VydmljZS5lZGl0UHJvZmlsZURldGFpbHMocGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyIC0gMVxuICAgICAgICBpZiAocmVzLnJlc3BvbnNlQ29kZSA9PT0gJ09LJykge1xuICAgICAgICAgIHRoaXMuc3VibWl0U3VyZXZ5KHRydWUpXG4gICAgICAgIH1cbiAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciAtIDFcbiAgICAgICAgLyogdHNsaW50OmRpc2FibGUgKi9cbiAgICAgICAgY29uc29sZS5sb2coZXJyb3IpXG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihcInNvbWV0aGluZyB3ZW50IHdyb25nIVwiKVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBzdWJtaXRTdXJldnkoc3RhdHVzOiBhbnkpIHtcbiAgICBsZXQgc3VyZXZ5UGF5bG9hZCA9IHtcbiAgICAgIGZvcm1JZDogXy5nZXQodGhpcy5kYXRhLCAnYmF0Y2hEYXRhLmJhdGNoQXR0cmlidXRlcy5wcm9maWxlU3VydmV5SWQnKSxcbiAgICAgIHZlcnNpb246IDQsXG4gICAgICBzdGF0dXM6ICdTVUJNSVRURUQnLFxuICAgICAgcmVzcG9uc2VzOiB0aGlzLmdlbmVyZWF0ZVN1cnZleVBheWxvYWQoc3RhdHVzKSxcbiAgICAgIGNvbnRleHRJZDogXy5nZXQodGhpcy5kYXRhLCAnYmF0Y2hEYXRhLmNvdXJzZUlkJyksXG4gICAgICBjb250ZXh0TmFtZTogXy5nZXQodGhpcy5kYXRhLCAnY291cnNlTmFtZScsICcnKSxcbiAgICB9XG4gICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciArIDFcbiAgICB0aGlzLm5wc1N2Yy5zdWJtaXRCcEZvcm1XaXRoUHJvZmlsZURldGFpbHMoc3VyZXZ5UGF5bG9hZCkuc3Vic2NyaWJlKChyZXNwOiBhbnkpID0+IHtcbiAgICAgIHRoaXMuYWRkTG9hZGVyID0gdGhpcy5hZGRMb2FkZXIgLSAxXG4gICAgICBpZiAoXy5nZXQocmVzcCwgJ3BhcmFtcy5zdGF0dXMnKSA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICAgIHRoaXMuY3VzdG9tRm9ybSA9IGZhbHNlXG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihcIkZvcm0gaXMgc3VibWl0dGVkIHN1Y2Nlc3NmdWxseVwiKVxuICAgICAgICB0aGlzLmNsb3NlUG9wdXAoKVxuICAgICAgfVxuICAgICAgaWYgKHJlc3AgJiYgcmVzcC5zdGF0dXNDb2RlICYmIHJlc3Auc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICAgIHRoaXMuY3VzdG9tRm9ybSA9IGZhbHNlXG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihyZXNwLmVycm9yTWVzc2FnZSlcbiAgICAgIH1cbiAgICB9LCBlcnJvciA9PiB7XG4gICAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyIC0gMVxuICAgICAgLyogdHNsaW50OmRpc2FibGUgKi9cbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKVxuICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKFwic29tZXRoaW5nIHdlbnQgd3JvbmchXCIpXG4gICAgfSlcbiAgfVxuXG4gIGdlbmVyYXRlUHJvZmlsZVBheWxvYWQoKSB7XG4gICAgbGV0IHBheWxvYWQ6IGFueSA9IHtcbiAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgdXNlcklkOiB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LmlkZW50aWZpZXIsXG4gICAgICAgIHByb2ZpbGVEZXRhaWxzOiB7XG4gICAgICAgICAgZW1wbG95bWVudERldGFpbHM6IHt9LFxuICAgICAgICAgIHBlcnNvbmFsRGV0YWlsczoge30sXG4gICAgICAgICAgLy8gY2FkcmVEZXRhaWxzOiB7fSxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBsZXQgX3Byb2Zlc3Npb25hbERldGFpbHM6IGFueSA9IHt9XG4gICAgbGV0IHVwZGF0ZVByb2Zlc3Npb25hbERldGFpbHM6IGJvb2xlYW4gPSBmYWxzZVxuICAgIGlmICh0aGlzLnNob3dHcm91cCAmJiB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZ3JvdXAnXS52YWx1ZSAmJiAhdGhpcy5zaG93RG9wdENoYW5nZXMpIHtcbiAgICAgIF9wcm9mZXNzaW9uYWxEZXRhaWxzWydncm91cCddID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2dyb3VwJ10udmFsdWVcbiAgICAgIHRoaXMudXBkYXRlUHJvZmlsZSA9IHRydWVcbiAgICAgIHVwZGF0ZVByb2Zlc3Npb25hbERldGFpbHMgPSB0cnVlXG4gICAgfVxuICAgIGlmICh0aGlzLnNob3dEZXNpZ25hdGlvbiAmJiB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZGVzaWduYXRpb24nXS52YWx1ZSAmJiAhdGhpcy5zaG93RG9wdENoYW5nZXMpIHtcbiAgICAgIF9wcm9mZXNzaW9uYWxEZXRhaWxzWydkZXNpZ25hdGlvbiddID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2Rlc2lnbmF0aW9uJ10udmFsdWVcbiAgICAgIHRoaXMudXBkYXRlUHJvZmlsZSA9IHRydWVcbiAgICAgIHVwZGF0ZVByb2Zlc3Npb25hbERldGFpbHMgPSB0cnVlXG4gICAgfVxuICAgIGlmICh1cGRhdGVQcm9mZXNzaW9uYWxEZXRhaWxzKSB7XG4gICAgICBwYXlsb2FkLnJlcXVlc3QucHJvZmlsZURldGFpbHNbJ3Byb2Zlc3Npb25hbERldGFpbHMnXSA9IFtfcHJvZmVzc2lvbmFsRGV0YWlsc11cbiAgICB9XG4gICAgaWYgKHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydlbXBsb3llZUNvZGUnXS52YWx1ZSkge1xuICAgICAgcGF5bG9hZC5yZXF1ZXN0LnByb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzWydlbXBsb3llZUNvZGUnXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydlbXBsb3llZUNvZGUnXS52YWx1ZVxuICAgICAgdGhpcy51cGRhdGVQcm9maWxlID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAodGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ21vYmlsZSddLnZhbHVlKSB7XG4gICAgICBwYXlsb2FkLnJlcXVlc3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzWydtb2JpbGUnXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydtb2JpbGUnXS52YWx1ZVxuICAgICAgcGF5bG9hZC5yZXF1ZXN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlsc1sncGhvbmVWZXJpZmllZCddID0gdHJ1ZVxuICAgICAgdGhpcy51cGRhdGVQcm9maWxlID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAodGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2dlbmRlciddLnZhbHVlKSB7XG4gICAgICBwYXlsb2FkLnJlcXVlc3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzWydnZW5kZXInXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydnZW5kZXInXS52YWx1ZVxuICAgICAgdGhpcy51cGRhdGVQcm9maWxlID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAodGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2RvYiddLnZhbHVlKSB7XG4gICAgICBwYXlsb2FkLnJlcXVlc3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzWydkb2InXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydkb2InXS52YWx1ZVxuICAgICAgdGhpcy51cGRhdGVQcm9maWxlID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAodGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2RvbWljaWxlTWVkaXVtJ10udmFsdWUpIHtcbiAgICAgIHBheWxvYWQucmVxdWVzdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHNbJ2RvbWljaWxlTWVkaXVtJ10gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZG9taWNpbGVNZWRpdW0nXS52YWx1ZVxuICAgICAgdGhpcy51cGRhdGVQcm9maWxlID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAodGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2NhdGVnb3J5J10udmFsdWUpIHtcbiAgICAgIHBheWxvYWQucmVxdWVzdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHNbJ2NhdGVnb3J5J10gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snY2F0ZWdvcnknXS52YWx1ZVxuICAgICAgdGhpcy51cGRhdGVQcm9maWxlID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAodGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ3BpbkNvZGUnXS52YWx1ZSkge1xuICAgICAgcGF5bG9hZC5yZXF1ZXN0LnByb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzWydwaW5Db2RlJ10gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1sncGluQ29kZSddLnZhbHVlXG4gICAgICBwYXlsb2FkLnJlcXVlc3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzWydwaW5jb2RlJ10gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1sncGluQ29kZSddLnZhbHVlXG4gICAgICB0aGlzLnVwZGF0ZVByb2ZpbGUgPSB0cnVlXG4gICAgfVxuICAgIGlmICh0aGlzLmNhblNob3dzaG93Q2FkcmVEZXRhaWxzICYmICF0aGlzLnNob3dEb3B0Q2hhbmdlcykge1xuICAgICAgbGV0IF9jYWRyZURldGFpbHM6IGFueSA9IHt9XG4gICAgICBwYXlsb2FkLnJlcXVlc3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzWydpc0NhZHJlJ10gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snaXNDYWRyZSddLnZhbHVlXG4gICAgICB0aGlzLnVwZGF0ZVByb2ZpbGUgPSB0cnVlXG4gICAgICBpZiAodGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2lzQ2FkcmUnXS52YWx1ZSkge1xuICAgICAgICBfY2FkcmVEZXRhaWxzWydjaXZpbFNlcnZpY2VUeXBlJ10gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1sndHlwZU9mQ2l2aWxTZXJ2aWNlJ10udmFsdWVcbiAgICAgICAgX2NhZHJlRGV0YWlsc1snY2l2aWxTZXJ2aWNlTmFtZSddID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ3NlcnZpY2VUeXBlJ10udmFsdWVcbiAgICAgICAgX2NhZHJlRGV0YWlsc1snY2FkcmVOYW1lJ10gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snY2FkcmVOYW1lJ10udmFsdWVcbiAgICAgICAgX2NhZHJlRGV0YWlsc1snY2FkcmVCYXRjaCddID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2NhZHJlQmF0Y2gnXS52YWx1ZVxuICAgICAgICBfY2FkcmVEZXRhaWxzWydjYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5TmFtZSddID0gdGhpcy5jYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5XG4gICAgICAgIF9jYWRyZURldGFpbHNbJ2NhZHJlSWQnXSA9IHRoaXMuY2FkcmVJZFxuICAgICAgICBfY2FkcmVEZXRhaWxzWydjaXZpbFNlcnZpY2VJZCddID0gdGhpcy5jaXZpbFNlcnZpY2VJZFxuICAgICAgICBfY2FkcmVEZXRhaWxzWydjaXZpbFNlcnZpY2VUeXBlSWQnXSA9IHRoaXMuc2VydmljZUlkXG4gICAgICAgIHBheWxvYWQucmVxdWVzdC5wcm9maWxlRGV0YWlsc1snY2FkcmVEZXRhaWxzJ10gPSBfY2FkcmVEZXRhaWxzXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwYXlsb2FkXG4gIH1cblxuICBmb3JtYXREYXRlKF9kb2I6IHN0cmluZyB8IERhdGUpOiBzdHJpbmcge1xuICAgIGxldCBkYXRlT2JqOiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKF9kb2IgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICBkYXRlT2JqID0gX2RvYjtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBfZG9iID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgcGFydHMgPSBfZG9iLnNwbGl0KCctJyk7XG4gICAgICBpZiAocGFydHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IHBhcnRzO1xuICAgICAgICBkYXRlT2JqID0gbmV3IERhdGUoTnVtYmVyKHllYXIpLCBOdW1iZXIobW9udGgpIC0gMSwgTnVtYmVyKGRheSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gbmV3IERhdGUoX2RvYik7XG4gICAgICAgIGlmICghaXNOYU4ocGFyc2VkLmdldFRpbWUoKSkpIHtcbiAgICAgICAgICBkYXRlT2JqID0gcGFyc2VkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghZGF0ZU9iaiB8fCBpc05hTihkYXRlT2JqLmdldFRpbWUoKSkpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGVPYmosICd5eXl5LU1NLWRkJykgfHwgJyc7XG4gIH1cblxuICBnZXRRdWVzdGlvbklkKGZpZWxkTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIWZpZWxkTmFtZSB8fCAhdGhpcy5mb3Jtc0RldGlscy5maWVsZHMpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBmaWVsZCA9IHRoaXMuZm9ybXNEZXRpbHMuZmllbGRzLmZpbmQoKGY6IGFueSkgPT4gZi5maWVsZCA9PT0gZmllbGROYW1lKSB8fCB7fTtcbiAgICByZXR1cm4gZmllbGQuaWQgfHwgJyc7XG4gIH1cblxuICBnZW5lcmVhdGVTdXJ2ZXlQYXlsb2FkKHN0YXR1czogYW55KSB7XG4gICAgbGV0IGRhdGFPYmplY3Q6IGFueSA9IFtdXG4gICAgdGhpcy5iYXRjaERldGFpbHMuYmF0Y2hBdHRyaWJ1dGVzLmJwRW5yb2xNYW5kYXRvcnlQcm9maWxlRmllbGRzLmZvckVhY2goKF9maWVsZDogYW55KSA9PiB7XG4gICAgICBjb25zdCBmaWVsZFRvQWRkID0ge1xuICAgICAgICBxdWVzdGlvbklkOiB0aGlzLmdldFF1ZXN0aW9uSWQoX2ZpZWxkLmZpZWxkKSxcbiAgICAgICAgcXVlc3Rpb246IF9maWVsZC5kaXNwbGF5TmFtZSxcbiAgICAgICAgYW5zd2VyOiAnJyxcbiAgICAgICAgYW5zd2VyVHlwZTogX2ZpZWxkLmZpZWxkVHlwZVxuICAgICAgfVxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5maXJzdG5hbWUnKSB7XG4gICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gXy5nZXQodGhpcy51c2VyUHJvZmlsZU9iamVjdCwgJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5maXJzdE5hbWUnLCBfLmdldCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LCAncHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmZpcnN0bmFtZScsICcnKSlcbiAgICAgICAgZGF0YU9iamVjdC5wdXNoKGZpZWxkVG9BZGQpXG4gICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuZmlyc3ROYW1lIHx8IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmZpcnN0bmFtZVxuICAgICAgfVxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLmRlcGFydG1lbnROYW1lJykge1xuICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IF8uZ2V0KHRoaXMudXNlclByb2ZpbGVPYmplY3QsICdwcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlscy5kZXBhcnRtZW50TmFtZScsICdOL0EnKVxuICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzICYmIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuZW1wbG95bWVudERldGFpbHMuZGVwYXJ0bWVudE5hbWUgP1xuICAgICAgICAvLyAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuZW1wbG95bWVudERldGFpbHMuZGVwYXJ0bWVudE5hbWUgOiBcIk4vQVwiXG4gICAgICB9XG4gICAgICBpZiAoX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMucHJvZmVzc2lvbmFsRGV0YWlscy5ncm91cCcpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd0dyb3VwICYmIHN0YXR1cykge1xuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2dyb3VwJ10udmFsdWVcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydncm91cCddLnZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSBfLmdldCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LCAncHJvZmlsZURldGFpbHMucHJvZmVzc2lvbmFsRGV0YWlsc1swXS5ncm91cCcsICdOL0EnKVxuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wcm9mZXNzaW9uYWxEZXRhaWxzICYmIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucHJvZmVzc2lvbmFsRGV0YWlsc1swXS5ncm91cCA/XG4gICAgICAgICAgLy8gICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHNbMF0uZ3JvdXAgOiBcIk4vQVwiXG4gICAgICAgIH1cbiAgICAgICAgZGF0YU9iamVjdC5wdXNoKGZpZWxkVG9BZGQpXG4gICAgICB9XG4gICAgICBpZiAoX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMucHJvZmVzc2lvbmFsRGV0YWlscy5kZXNpZ25hdGlvbicpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd0Rlc2lnbmF0aW9uICYmIHN0YXR1cykge1xuICAgICAgICAgIGlmICh0aGlzLnNob3dEb3B0Q2hhbmdlcyAmJiB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZGVzaWduYXRpb24nXSAmJlxuICAgICAgICAgICAgdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2Rlc2lnbmF0aW9uJ10udmFsdWUgPT09ICdPdGhlcnMnICYmIHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydvdGhlckRlc2lnbmF0aW9uJ10pIHtcbiAgICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ290aGVyRGVzaWduYXRpb24nXS52YWx1ZVxuICAgICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snb3RoZXJEZXNpZ25hdGlvbiddLnZhbHVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2Rlc2lnbmF0aW9uJ10udmFsdWVcbiAgICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2Rlc2lnbmF0aW9uJ10udmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgICAgZGF0YU9iamVjdC5wdXNoKGZpZWxkVG9BZGQpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHMgJiYgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wcm9mZXNzaW9uYWxEZXRhaWxzWzBdLmRlc2lnbmF0aW9uID9cbiAgICAgICAgICAvLyAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucHJvZmVzc2lvbmFsRGV0YWlsc1swXS5kZXNpZ25hdGlvbiA6IFwiTi9BXCJcbiAgICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gXy5nZXQodGhpcy51c2VyUHJvZmlsZU9iamVjdCwgJ3Byb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHNbMF0uZGVzaWduYXRpb24nLCAnTi9BJylcbiAgICAgICAgICAgIGRhdGFPYmplY3QucHVzaChmaWVsZFRvQWRkKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlscy5lbXBsb3llZUNvZGUnKSB7XG4gICAgICAgIGlmICh0aGlzLnNob3dFbXBsb3llZUNvZGUgJiYgc3RhdHVzKSB7XG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZW1wbG95ZWVDb2RlJ10udmFsdWVcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydlbXBsb3llZUNvZGUnXS52YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gXy5nZXQodGhpcy51c2VyUHJvZmlsZU9iamVjdCwgJ3Byb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLmVtcGxveWVlQ29kZScsICdOL0EnKVxuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlscyAmJiB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLmVtcGxveWVlQ29kZSA/XG4gICAgICAgICAgLy8gICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLmVtcGxveWVlQ29kZSA6IFwiTi9BXCJcbiAgICAgICAgfVxuICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgIH1cblxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5wcmltYXJ5RW1haWwnKSB7XG4gICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMucHJpbWFyeUVtYWlsXG4gICAgICAgIGRhdGFPYmplY3QucHVzaChmaWVsZFRvQWRkKVxuICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLnByaW1hcnlFbWFpbFxuICAgICAgfVxuXG4gICAgICBpZiAoX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLm1vYmlsZScpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd01vYmlsZSAmJiBzdGF0dXMpIHtcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydtb2JpbGUnXS52YWx1ZVxuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ21vYmlsZSddLnZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSBfLmdldCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LCAncHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLm1vYmlsZScsICdOL0EnKVxuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMgJiYgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMubW9iaWxlID9cbiAgICAgICAgICAvLyAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLm1vYmlsZSA6IFwiTi9BXCJcbiAgICAgICAgfVxuICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgIH1cblxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5kb2InKSB7XG4gICAgICAgIGlmICh0aGlzLnNob3dEb2IgJiYgc3RhdHVzKSB7XG4gICAgICAgICAgbGV0IF9kb2I6IGFueSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydkb2InXS52YWx1ZVxuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy5mb3JtYXREYXRlKF9kb2IpXG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSB0aGlzLmZvcm1hdERhdGUoX2RvYilcbiAgICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMgJiYgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuZG9iKSB7XG4gICAgICAgICAgICBsZXQgX2RvYjogYW55ID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuZG9iXG4gICAgICAgICAgICBjb25zdCBbZGF5LCBtb250aCwgeWVhcl0gPSBfZG9iLnNwbGl0KCctJylcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShOdW1iZXIoeWVhciksIE51bWJlcihtb250aCkgLSAxLCBOdW1iZXIoZGF5KSlcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZERheSA9IFN0cmluZyhkYXRlLmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKVxuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkTW9udGggPSBTdHJpbmcoZGF0ZS5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKVxuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkWWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKVxuICAgICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSBgJHtmb3JtYXR0ZWRZZWFyfS0ke2Zvcm1hdHRlZE1vbnRofS0ke2Zvcm1hdHRlZERheX1gXG4gICAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IGAke2Zvcm1hdHRlZFllYXJ9LSR7Zm9ybWF0dGVkTW9udGh9LSR7Zm9ybWF0dGVkRGF5fWBcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSBcIjE5NTAtMDYtMDFcIlxuICAgICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSBcIjE5NTAtMDYtMDFcIlxuICAgICAgICAgIH1cbiAgICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmdlbmRlcicpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd0dlbmRlciAmJiBzdGF0dXMpIHtcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydnZW5kZXInXS52YWx1ZVxuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2dlbmRlciddLnZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSBfLmdldCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LCAncHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmdlbmRlcicsICdOL0EnKVxuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMgJiYgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuZ2VuZGVyID9cbiAgICAgICAgICAvLyAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmdlbmRlciA6IFwiTi9BXCJcbiAgICAgICAgfVxuICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgIH1cblxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5kb21pY2lsZU1lZGl1bScpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd0RlY2ltYWxNZWRpdW0gJiYgc3RhdHVzKSB7XG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZG9taWNpbGVNZWRpdW0nXS52YWx1ZVxuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2RvbWljaWxlTWVkaXVtJ10udmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IF8uZ2V0KHRoaXMudXNlclByb2ZpbGVPYmplY3QsICdwcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuZG9taWNpbGVNZWRpdW0nLCAnTi9BJylcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzICYmIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmRvbWljaWxlTWVkaXVtID9cbiAgICAgICAgICAvLyAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmRvbWljaWxlTWVkaXVtIDogXCJOL0FcIlxuICAgICAgICB9XG4gICAgICAgIGRhdGFPYmplY3QucHVzaChmaWVsZFRvQWRkKVxuICAgICAgfVxuXG4gICAgICBpZiAoX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmNhdGVnb3J5Jykge1xuICAgICAgICBpZiAodGhpcy5zaG93Q2F0ZWdvcnkgJiYgc3RhdHVzKSB7XG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snY2F0ZWdvcnknXS52YWx1ZVxuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2NhdGVnb3J5J10udmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IF8uZ2V0KHRoaXMudXNlclByb2ZpbGVPYmplY3QsICdwcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuY2F0ZWdvcnknLCAnTi9BJylcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzICYmIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmNhdGVnb3J5ID9cbiAgICAgICAgICAvLyAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmNhdGVnb3J5IDogXCJOL0FcIlxuICAgICAgICB9XG4gICAgICAgIGRhdGFPYmplY3QucHVzaChmaWVsZFRvQWRkKVxuICAgICAgfVxuXG4gICAgICBpZiAoX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMuZW1wbG95bWVudERldGFpbHMucGluQ29kZScpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd1BpbkNvZGUgJiYgc3RhdHVzKSB7XG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1sncGluQ29kZSddLnZhbHVlXG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1sncGluQ29kZSddLnZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSBfLmdldCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LCAncHJvZmlsZURldGFpbHMuZW1wbG95bWVudERldGFpbHMucGluQ29kZScsICdOL0EnKVxuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlscyAmJiB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLnBpbkNvZGUgP1xuICAgICAgICAgIC8vICAgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlscy5waW5Db2RlIDogXCJOL0FcIlxuICAgICAgICB9XG4gICAgICAgIGRhdGFPYmplY3QucHVzaChmaWVsZFRvQWRkKVxuICAgICAgfVxuXG4gICAgICBpZiAoX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzJykge1xuICAgICAgICBpZiAodGhpcy5jYW5TaG93c2hvd0NhZHJlRGV0YWlscyAmJiB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snaXNDYWRyZSddLnZhbHVlICYmIHN0YXR1cykge1xuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2lzQ2FkcmUnXS52YWx1ZVxuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2lzQ2FkcmUnXS52YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscyAmJlxuICAgICAgICAgIC8vICAgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuaXNDYWRyZSA/ICdZZXMnIDogJ05vJ1xuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gXy5nZXQodGhpcy51c2VyUHJvZmlsZU9iamVjdCwgJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5pc0NhZHJlJykgPyAnWWVzJyA6ICdObydcbiAgICAgICAgfVxuICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgIH1cbiAgICAgIGlmIChfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2l2aWxTZXJ2aWNlVHlwZScpIHtcbiAgICAgICAgaWYgKHRoaXMuY2FuU2hvd3Nob3dDYWRyZURldGFpbHMgJiYgdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2lzQ2FkcmUnXS52YWx1ZSAmJiBzdGF0dXMpIHtcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWyd0eXBlT2ZDaXZpbFNlcnZpY2UnXS52YWx1ZVxuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ3R5cGVPZkNpdmlsU2VydmljZSddLnZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscyAmJiB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jaXZpbFNlcnZpY2VUeXBlID9cbiAgICAgICAgICAvLyAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNpdmlsU2VydmljZVR5cGUgOiAnTi9BJ1xuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gXy5nZXQodGhpcy51c2VyUHJvZmlsZU9iamVjdCwgJ3Byb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jaXZpbFNlcnZpY2VUeXBlJywgJ04vQScpXG4gICAgICAgIH1cbiAgICAgICAgZGF0YU9iamVjdC5wdXNoKGZpZWxkVG9BZGQpXG4gICAgICB9XG5cbiAgICAgIGlmIChfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2l2aWxTZXJ2aWNlTmFtZScpIHtcbiAgICAgICAgaWYgKHRoaXMuY2FuU2hvd3Nob3dDYWRyZURldGFpbHMgJiYgdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2lzQ2FkcmUnXS52YWx1ZSAmJiBzdGF0dXMpIHtcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydzZXJ2aWNlVHlwZSddLnZhbHVlXG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snc2VydmljZVR5cGUnXS52YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMgJiYgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2l2aWxTZXJ2aWNlTmFtZSA/XG4gICAgICAgICAgLy8gICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jaXZpbFNlcnZpY2VOYW1lIDogJ04vQSdcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IF8uZ2V0KHRoaXMudXNlclByb2ZpbGVPYmplY3QsICdwcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2l2aWxTZXJ2aWNlTmFtZScsICdOL0EnKVxuICAgICAgICB9XG4gICAgICAgIGRhdGFPYmplY3QucHVzaChmaWVsZFRvQWRkKVxuICAgICAgfVxuXG4gICAgICBpZiAoX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlTmFtZScpIHtcbiAgICAgICAgaWYgKHRoaXMuY2FuU2hvd3Nob3dDYWRyZURldGFpbHMgJiYgdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2lzQ2FkcmUnXS52YWx1ZSAmJiBzdGF0dXMpIHtcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydjYWRyZU5hbWUnXS52YWx1ZVxuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2NhZHJlTmFtZSddLnZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSBfLmdldCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LCAncHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlTmFtZScsICdOL0EnKVxuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMgJiYgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2FkcmVOYW1lID9cbiAgICAgICAgICAvLyAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlTmFtZSA6ICdOL0EnXG4gICAgICAgIH1cbiAgICAgICAgZGF0YU9iamVjdC5wdXNoKGZpZWxkVG9BZGQpXG4gICAgICB9XG4gICAgICBpZiAoX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlQmF0Y2gnKSB7XG4gICAgICAgIGlmICh0aGlzLmNhblNob3dzaG93Q2FkcmVEZXRhaWxzICYmIHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydpc0NhZHJlJ10udmFsdWUgJiYgc3RhdHVzKSB7XG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snY2FkcmVCYXRjaCddLnZhbHVlXG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snY2FkcmVCYXRjaCddLnZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscyAmJiB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jYWRyZUJhdGNoID9cbiAgICAgICAgICAvLyAgIEpTT04uc3RyaW5naWZ5KHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlQmF0Y2gpIDogJ04vQSdcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IF8uZ2V0KHRoaXMudXNlclByb2ZpbGVPYmplY3QsICdwcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2FkcmVCYXRjaCcpID8gSlNPTi5zdHJpbmdpZnkodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2FkcmVCYXRjaCkgOiAnTi9BJ1xuICAgICAgICB9XG4gICAgICAgIGRhdGFPYmplY3QucHVzaChmaWVsZFRvQWRkKVxuICAgICAgfVxuXG4gICAgICBpZiAoX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHlOYW1lJykge1xuICAgICAgICBpZiAodGhpcy5jYW5TaG93c2hvd0NhZHJlRGV0YWlscyAmJiB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snaXNDYWRyZSddLnZhbHVlICYmIHN0YXR1cykge1xuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy5jYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5XG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSB0aGlzLmNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzICYmIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHlOYW1lID9cbiAgICAgICAgICAvLyAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHlOYW1lIDogJ04vQSdcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IF8uZ2V0KHRoaXMudXNlclByb2ZpbGVPYmplY3QsICdwcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eU5hbWUnLCAnTi9BJylcbiAgICAgICAgfVxuICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgIH1cblxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLmV4dGVybmFsU3lzdGVtSWQnKSB7XG4gICAgICAgIGlmICh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzICYmXG4gICAgICAgICAgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5hZGRpdGlvbmFsUHJvcGVydGllcy5leHRlcm5hbFN5c3RlbUlkKSB7XG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzICYmIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuYWRkaXRpb25hbFByb3BlcnRpZXMuZXh0ZXJuYWxTeXN0ZW1JZFxuICAgICAgICAgIC8vICAgPyB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLmV4dGVybmFsU3lzdGVtSWQgOiBcIk4vQVwiXG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSBfLmdldCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LCAncHJvZmlsZURldGFpbHMuYWRkaXRpb25hbFByb3BlcnRpZXMuZXh0ZXJuYWxTeXN0ZW1JZCcsICdOL0EnKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gJ04vQSdcbiAgICAgICAgfVxuICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgIH1cblxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLmV4dGVybmFsU3lzdGVtRG9yJykge1xuICAgICAgICBpZiAodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5hZGRpdGlvbmFsUHJvcGVydGllcyAmJlxuICAgICAgICAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuYWRkaXRpb25hbFByb3BlcnRpZXMuZXh0ZXJuYWxTeXN0ZW1Eb3IpIHtcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuYWRkaXRpb25hbFByb3BlcnRpZXMgJiYgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5hZGRpdGlvbmFsUHJvcGVydGllcy5leHRlcm5hbFN5c3RlbURvclxuICAgICAgICAgIC8vICAgPyB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLmV4dGVybmFsU3lzdGVtRG9yIDogXCJOL0FcIlxuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gXy5nZXQodGhpcy51c2VyUHJvZmlsZU9iamVjdCwgJ3Byb2ZpbGVEZXRhaWxzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLmV4dGVybmFsU3lzdGVtRG9yJywgJ04vQScpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSAnTi9BJ1xuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gJ04vQSdcbiAgICAgICAgfVxuICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIGRhdGFPYmplY3RcbiAgfVxuXG4gIHVwZGF0ZUVtYWlsKGVtYWlsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBwb3N0RGF0YSA9IHtcbiAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgJ3VzZXJJZCc6IHRoaXMuY29uZmlnU3JjLnVuTWFwcGVkVXNlci5pZCxcbiAgICAgICAgJ2NvbnRleHRUb2tlbic6IHRoaXMuY29udGV4dFRva2VuLFxuICAgICAgICAncHJvZmlsZURldGFpbHMnOiB7XG4gICAgICAgICAgJ3BlcnNvbmFsRGV0YWlscyc6IHtcbiAgICAgICAgICAgICdwcmltYXJ5RW1haWwnOiBlbWFpbCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9XG5cbiAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyICsgMVxuICAgIHRoaXMudXNlclByb2ZpbGVTZXJ2aWNlLnVwZGF0ZVByaW1hcnlFbWFpbERldGFpbHMocG9zdERhdGEpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95U3ViamVjdCQpKVxuICAgICAgLnN1YnNjcmliZSgoX3JlczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuYWRkTG9hZGVyID0gdGhpcy5hZGRMb2FkZXIgLSAxXG4gICAgICAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLnByaW1hcnlFbWFpbCA9IGVtYWlsXG4gICAgICAgIHRoaXMuc25hY2tCYXIub3Blbih0aGlzLmhhbmRsZVRyYW5zbGF0ZVRvKCdlbWFpbFVwZGF0ZWQnKSlcbiAgICAgIH0sIChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciAtIDFcbiAgICAgICAgaWYgKCFlcnJvci5vaykge1xuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3Blbih0aGlzLmhhbmRsZVRyYW5zbGF0ZVRvKCd1cGRhdGVFbWFpbEZhaWxlZCcpKVxuICAgICAgICB9XG4gICAgICB9KVxuICB9XG5cbiAgc2V0dXBTY3JvbGxMaXN0ZW5lcihvcGVuZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBzZWFyY2hEZXNpZ25hdGlvbkNvbnRyb2wgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ3NlYXJjaERlc2lnbmF0aW9uJyk7XG4gICAgaWYgKG9wZW5lZCAmJiBzZWFyY2hEZXNpZ25hdGlvbkNvbnRyb2wpIHtcbiAgICAgIHNlYXJjaERlc2lnbmF0aW9uQ29udHJvbC5zZXRWYWx1ZSgnJylcbiAgICAgIHRoaXMuZGVzaWduYXRpb25zT2Zmc2V0ID0gMFxuICAgICAgdGhpcy5kZXNpZ25hdGlvbnNNZXRhID0gW107XG4gICAgICB0aGlzLmdldGRlc2lnbmF0aW9uc01ldGEoKVxuICAgICAgY29uc3Qgc2VhcmNoSW5wdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuc2VhcmNoLWlucHV0JykgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgIGlmIChzZWFyY2hJbnB1dCkge1xuICAgICAgICBzZWFyY2hJbnB1dC5mb2N1cygpO1xuICAgICAgfVxuICAgICAgY29uc3QgcGFuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubWF0LXNlbGVjdC1wYW5lbCcpO1xuICAgICAgaWYgKHBhbmVsKSB7XG4gICAgICAgIHBhbmVsLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25EZXNpZ25hdGlvblNlbGVjdFNjcm9sbC5iaW5kKHRoaXMpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkRlc2lnbmF0aW9uU2VsZWN0U2Nyb2xsKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgLy8gQ2hlY2sgaWYgdXNlciBoYXMgc2Nyb2xsZWQgdG8gdGhlIGJvdHRvbSAod2l0aCBhIHNtYWxsIHRocmVzaG9sZClcbiAgICAgIGlmIChlbGVtZW50LnNjcm9sbFRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0ID49IGVsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gNSkge1xuICAgICAgICAvLyBPbmx5IGxvYWQgbW9yZSBpZiBub3QgYWxyZWFkeSBsb2FkaW5nIGFuZCBpZiB0aGVyZSBhcmUgcG90ZW50aWFsbHkgbW9yZSBpdGVtc1xuICAgICAgICBpZiAoIXRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyAmJiB0aGlzLmRlc2lnbmF0aW9uc01ldGEubGVuZ3RoIDwgdGhpcy5kZXNpZ25hdGlvbnNUb3RhbENvdW50KSB7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uc09mZnNldCArPSAxO1xuICAgICAgICAgIHRoaXMuZ2V0ZGVzaWduYXRpb25zTWV0YSgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgfVxuXG4gIGNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpIHtcbiAgICAvLyBHZXQgdGhlIGN1cnJlbnQgZGVzaWduYXRpb24gdmFsdWVcbiAgICBjb25zdCBzZWFyY2hEZXNpZ25hdGlvbkNvbnRyb2wgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2Rlc2lnbmF0aW9uJyk7XG4gICAgY29uc3QgY3VycmVudERlc2lnbmF0aW9uID0gc2VhcmNoRGVzaWduYXRpb25Db250cm9sID8gc2VhcmNoRGVzaWduYXRpb25Db250cm9sLnZhbHVlIDogJyc7XG4gICAgLy8gQ2hlY2sgaWYgY3VycmVudCBkZXNpZ25hdGlvbiBleGlzdHMgaW4gdGhlIGxpc3RcbiAgICBpZiAoY3VycmVudERlc2lnbmF0aW9uKSB7XG4gICAgICBjb25zdCBkZXNpZ25hdGlvbkV4aXN0cyA9IHRoaXMuZGVzaWduYXRpb25zTWV0YS5zb21lKFxuICAgICAgICAoZGVzaWduYXRpb246IGFueSkgPT4gZGVzaWduYXRpb24ubmFtZS50b0xvd2VyQ2FzZSgpID09PSBjdXJyZW50RGVzaWduYXRpb24udG9Mb3dlckNhc2UoKVxuICAgICAgKTtcblxuICAgICAgLy8gSWYgZGVzaWduYXRpb24gZG9lc24ndCBleGlzdCBpbiB0aGUgbGlzdCwgYWRkIGl0XG4gICAgICBpZiAoIWRlc2lnbmF0aW9uRXhpc3RzKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBkZXNpZ25hdGlvbiBvYmplY3QgdG8gbWF0Y2ggdGhlIHN0cnVjdHVyZSBvZiBvdGhlciBpdGVtc1xuICAgICAgICBjb25zdCBuZXdEZXNpZ25hdGlvbiA9IHtcbiAgICAgICAgICBuYW1lOiBjdXJyZW50RGVzaWduYXRpb24sXG4gICAgICAgICAgc3RhdHVzOiAnQWN0aXZlJ1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRlc2lnbmF0aW9uc01ldGEudW5zaGlmdChuZXdEZXNpZ25hdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25EZXNpZ25hdGlvbkRyb3Bkb3duQ2xvc2VkKCk6IHZvaWQge1xuICAgIGNvbnN0IHNlYXJjaERlc2lnbmF0aW9uQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnc2VhcmNoRGVzaWduYXRpb24nKTtcbiAgICBpZiAoc2VhcmNoRGVzaWduYXRpb25Db250cm9sKSB7XG4gICAgICBzZWFyY2hEZXNpZ25hdGlvbkNvbnRyb2wuc2V0VmFsdWUoJycpXG4gICAgICB0aGlzLmRlc2lnbmF0aW9uU2VhcmNoVGV4dCA9ICcnXG4gICAgfVxuICAgIHRoaXMuY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KClcbiAgfVxuXG59XG4iLCI8ZGl2ICNmdWxsU2NyZWVuQ29udGFpbmVyPlxuICAgIDxkaXYgY2xhc3M9XCJkaWFsb2ctaGVhZGVyIHRleHQtcmlnaHQgbWItMlwiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXQtaWNvbiBub3RyYW5zbGF0ZSBtYXRlcmlhbC1pY29ucyBjbG9zZS1pY29uIGN1cnNvci1wb2ludGVyXCIgbWF0cHJlZml4PVwiXCIgcm9sZT1cImltZ1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIFttYXQtZGlhbG9nLWNsb3NlXT1cImZhbHNlXCI+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvZGl2PlxuICAgIDxoMT4ge3tkYXRhPy5jb3Vyc2VOYW1lfX0gPC9oMT5cbiAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCIgKm5nSWY9XCIhaXNMb2FkaW5nXCI+XG4gICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cInVzZXJEZXRhaWxzRm9ybVwiIGNsYXNzPVwidXNlckRldGFpbHNGb3JtXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiICpuZ0lmPVwiY2FuU2hvd05hbWVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXNlbWlib2xkIG1hcmdpbi0wIHJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICBpMThuPVwiVGl0bGUgbGFiZWx8TGFiZWwgd2hpY2ggZXhwbGFpbnMgdGhlIHVzZXIgdG8gZW50ZXIgdGl0bGVcIj5cbiAgICAgICAgICAgICAgICB7eyAncHJvZmlsZUluZm8ubmFtZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImlucHV0LXRleHRcIiBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCIgcGxhY2Vob2xkZXI9XCJOYW1lXCIvPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCIgKm5nSWY9XCJjYW5TaG93T3JnXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1zZW1pYm9sZCBtYXJnaW4tMCByZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgaTE4bj1cIlRpdGxlIGxhYmVsfExhYmVsIHdoaWNoIGV4cGxhaW5zIHRoZSB1c2VyIHRvIGVudGVyIHRpdGxlXCI+XG4gICAgICAgICAgICAgICAge3sgKHNob3dEb3B0Q2hhbmdlcyA/ICdwcm9maWxlSW5mby5wcmVzZW50T3JnYW5pc2F0aW9uJyA6ICdwcm9maWxlSW5mby5vcmdhbmlzYXRpb24nKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiaW5wdXQtdGV4dFwiIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cIm9yZ2FuaXNhdGlvblwiIHBsYWNlaG9sZGVyPVwiT3JnYW5pc2F0aW9uXCIvPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCIgKm5nSWY9XCJjYW5TaG93RW1haWxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXNlbWlib2xkIG1hcmdpbi0wIHJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICBpMThuPVwiVGl0bGUgbGFiZWx8TGFiZWwgd2hpY2ggZXhwbGFpbnMgdGhlIHVzZXIgdG8gZW50ZXIgdGl0bGVcIj5cbiAgICAgICAgICAgICAgICB7eyAncHJvZmlsZUluZm8uZW1haWwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJpbnB1dC10ZXh0XCIgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwicHJpbWFyeUVtYWlsXCIgcGxhY2Vob2xkZXI9XCJFbnRlciBlbWFpbFwiIChrZXl1cCk9XCJoYW5kbGVFbXB0eSgncHJpbWFyeUVtYWlsJylcIi8+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1lcnJvciBjbGFzcz1cIm1hdC1lcnJvclwiICpuZ0lmPVwidXNlckRldGFpbHNGb3JtLmdldCgncHJpbWFyeUVtYWlsJykuaGFzRXJyb3IoJ3JlcXVpcmVkJykgfHwgdXNlckRldGFpbHNGb3JtLmdldCgncHJpbWFyeUVtYWlsJykuaGFzRXJyb3IoJ3BhdHRlcm4nKVwiPlxuICAgICAgICAgICAgICB7eyAncHJvZmlsZUluZm8uaW52YWxpZEVtYWlsJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZFwiICpuZ0lmPVwidmVyaWZ5RW1haWwgJiYgIW90cFNlbnQgJiYgIWVWZXJpZmllZFwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImdldC1vdHBcIiAoY2xpY2spPVwiaGFuZGxlR2VuZXJhdGVFbWFpbE9UUCgnZW1haWwnKVwiPnt7ICdwcm9maWxlSW5mby5nZXRPVFAnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJlbWFpbE90cFNlbnRcIj5cbiAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJlbWFpbE90cEZvcm1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBlbnRlci1vdHBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgICAgICAgIGkxOG49XCJUaXRsZSBsYWJlbHxMYWJlbCB3aGljaCBleHBsYWlucyB0aGUgdXNlciB0byBlbnRlciB0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5lbnRlck9UUCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+VGltZSBSZW1haW5pbmc6IDxzcGFuICNlbWFpbFRpbWVyRGl2Pjwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJwcm9maWxlLWZvcm0tZmllbGQgbW9iaWxlLW51bVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJlT3RwXCIgY2xhc3M9XCJpbnB1dC10ZXh0IGN1c3RvbS1zaXplXCIgcGxhY2Vob2xkZXI9XCJ7eyAncHJvZmlsZUluZm8uZW50ZXJUaGVPVFAnIHwgdHJhbnNsYXRlIH19XCIgbWF4bGVuZ3RoPVwiNlwiIC8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY2VudGVyXCIgKm5nSWY9XCJzaG93RW1haWxSZXNlbmRPVFBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lclwiPnt7ICdwcm9maWxlSW5mby5kaWROb3RSZWNlaXZlT1RQJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc2VuZC1vdHBcIiAoY2xpY2spPVwiaGFuZGxlUmVzZW5kRW1haWxPVFAoKVwiPiZuYnNwOyZuYnNwO3t7ICdwcm9maWxlSW5mby5yZXNlbnRPVFAnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBtYi00XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNhdmUtYnV0dG9uXCIgKGNsaWNrKT1cInZlcmlmeUVtYWlsT1RQKClcIj57eyAncHJvZmlsZUluZm8uc3VibWl0JyB8IHRyYW5zbGF0ZSB9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIiAqbmdJZj1cImNhblNob3dHcm91cFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWFyZ2luLTAgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICBpMThuPVwiVGl0bGUgbGFiZWx8TGFiZWwgd2hpY2ggZXhwbGFpbnMgdGhlIHVzZXIgdG8gZW50ZXIgdGl0bGVcIj5cbiAgICAgICAgICAgICAge3sgJ3Byb2ZpbGVJbmZvLmdyb3VwJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImdyb3VwXCIgcGxhY2Vob2xkZXI9XCJ7eyAncHJvZmlsZUluZm8uY2hvb3NlQUdyb3VwJyB8IHRyYW5zbGF0ZSB9fVwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGdyb3VwIG9mIGdyb3VwRGF0YVwiIHZhbHVlPVwie3tncm91cH19XCI+e3sgZ3JvdXAgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXhzIG1iLTJcIiAqbmdJZj1cInNob3dEb3B0Q2hhbmdlc1wiPlxuICAgICAgICAgICAgICB7eydwcm9maWxlSW5mby5ncm91cE5vdGUnIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCByZWxhdGl2ZVwiICpuZ0lmPVwiY2FuU2hvd0Rlc2lnbmF0aW9uXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWFyZ2luLTAgcmVxdWlyZWRcIlxuICAgICAgICAgICAgaTE4bj1cIlRpdGxlIGxhYmVsfExhYmVsIHdoaWNoIGV4cGxhaW5zIHRoZSB1c2VyIHRvIGVudGVyIHRpdGxlXCI+XG4gICAgICAgICAgICB7eyAncHJvZmlsZUluZm8uZGVzaWduYXRpb24nIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgYXV0by1jb21wbGV0ZS1yb3cgcmVsYXRpdmVcIj5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJpbnB1dC10ZXh0IGhpZ2gtemluZGV4XCIgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZGVzaWduYXRpb25cIlxuICAgICAgICAgICAgICAgIChpbnB1dCk9XCJmaWx0ZXJkZXNpZ25hdGlvbigkZXZlbnQudGFyZ2V0LnZhbHVlKVwiIChmb2N1cyk9XCJvbkRlc2lnbmF0aW9uc0ZvY3VzKClcIiAjdGV4dEJveFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ3Byb2ZpbGVJbmZvLmNob29zZUFEZXNpZ25hdGlvbicgfCB0cmFuc2xhdGUgfX1cIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiZGlzYWduYXRpb24tY2FyZXRcIj5hcnJvd19kcm9wX2Rvd248L21hdC1pY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD4gLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1zZWxlY3QtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cImZpeGVkLWhlaWdodC1zZWxlY3RcIj5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgcGxhY2Vob2xkZXI9XCJ7eyAncHJvZmlsZUluZm8uY2hvb3NlQURlc2lnbmF0aW9uJyB8IHRyYW5zbGF0ZSB9fVwiIGZvcm1Db250cm9sTmFtZT1cImRlc2lnbmF0aW9uXCIgIChjbG9zZWQpPVwib25EZXNpZ25hdGlvbkRyb3Bkb3duQ2xvc2VkKClcIiAob3BlbmVkQ2hhbmdlKT1cInNldHVwU2Nyb2xsTGlzdGVuZXIoJGV2ZW50KVwiICBwYW5lbENsYXNzPVwic2VhcmNoLXBhbmVsXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBTdGlja3kgc2VhcmNoIGlucHV0IGNvbnRhaW5lciAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RpY2t5LXNlYXJjaC1jb250YWluZXJcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWlucHV0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBkZXNpZ25hdGlvblwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzZWFyY2hEZXNpZ25hdGlvblwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWFyY2hEZXNpZ25hdGlvbj8udmFsdWVcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNsZWFyLWJ1dHRvblwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VhcmNoRGVzaWduYXRpb24/LnNldFZhbHVlKCcnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDinJVcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIE9wdGlvbnMgbGlzdCAtLT5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGRlc2lnbmF0aW9uc01ldGEgXCIgW3ZhbHVlXT1cIm9wdGlvbj8ubmFtZVwiIChjbGljayk9XCJzZWxlY3REZXNpZ25hdGlvbihvcHRpb24/Lm5hbWUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb24/Lm5hbWUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgIDwhLS0gTG9hZGluZyBpbmRpY2F0b3IgLS0+XG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9uc1wiIGNsYXNzPVwibG9hZGluZy1pbmRpY2F0b3JcIj5cbiAgICAgICAgICAgICAgICAgICAgTG9hZGluZyBtb3JlLi4uXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIE5vIHJlc3VsdHMgbWVzc2FnZSAtLT5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdJZj1cIihkZXNpZ25hdGlvbnNNZXRhICk/Lmxlbmd0aCA9PT0gMFwiIGRpc2FibGVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgTm8gbWF0Y2hlcyBmb3VuZFxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwidXNlckRldGFpbHNGb3JtPy5jb250cm9sc1snZGVzaWduYXRpb24nXT8uaW52YWxpZCAmJiB1c2VyRGV0YWlsc0Zvcm0/LmNvbnRyb2xzWydkZXNpZ25hdGlvbiddPy50b3VjaGVkXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdC1lcnJvclwiPlxuICAgICAgICAgICAgICAgIFBsZWFzZSBzZWxlY3QgYSB2YWxpZCBkZXNpZ25hdGlvbi5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXhzIG1iLTJcIiAqbmdJZj1cInNob3dEb3B0Q2hhbmdlc1wiPlxuICAgICAgICAgICAge3sncHJvZmlsZUluZm8uZGVzaWduYXRpb25Ob3RlJyB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiYXV0by1saXN0IGZsZXggZmxleC1jb2wgaWdub3JlLWJsdXJcIiAjZHJvcGRvd25cbiAgICAgICAgICAgICpuZ0lmPVwib3BlbkRlc2lnbmF0aW9uRHJvcGRvd24gJiYgZmlsdGVyRGVzaWduYXRpb25zTWV0YS5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxkaXYgKG1vdXNlZG93bik9XCJwcmV2ZW50Qmx1cigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJpdGVtIHt7dXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydkZXNpZ25hdGlvbiddPy52YWx1ZT8udG9Mb3dlckNhc2UoKSA9PT0gZGVzaWduYXRpb24/Lm5hbWU/LnRvTG93ZXJDYXNlKCkgPyAnaXRlbS1hY3RpdmUnIDogJyd9fVwiXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkZXNpZ25hdGlvbiBvZiBmaWx0ZXJEZXNpZ25hdGlvbnNNZXRhXCIgKGNsaWNrKT1cInNlbGVjdERlc2lnbmF0aW9uKGRlc2lnbmF0aW9uLm5hbWUpXCI+XG4gICAgICAgICAgICAgIHt7IGRlc2lnbmF0aW9uPy5uYW1lIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIHJlbGF0aXZlXCIgKm5nSWY9XCJjYW5TaG93RGVzaWduYXRpb24gJiYgY2FuU2hvd090aGVyRGVzaWduYXRpb25cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1zZW1pYm9sZCBtYXJnaW4tMCByZXF1aXJlZFwiXG4gICAgICAgICAgICBpMThuPVwiVGl0bGUgbGFiZWx8TGFiZWwgd2hpY2ggZXhwbGFpbnMgdGhlIHVzZXIgdG8gZW50ZXIgdGl0bGVcIj5cbiAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5vdGhlckRlc2lnbmF0aW9uJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJjYW5TaG93T3RoZXJEZXNpZ25hdGlvblwiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJpbnB1dC10ZXh0XCIgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwib3RoZXJEZXNpZ25hdGlvblwiIHBsYWNlaG9sZGVyPVwie3sgJ3Byb2ZpbGVJbmZvLmVudGVyRGVzaWduYXRpb24nIHwgdHJhbnNsYXRlIH19XCIvPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiICpuZ0lmPVwiY2FuU2hvd0VtcGxveWVlQ29kZVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1zZW1pYm9sZCBtYXJnaW4tMCByZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgICBpMThuPVwiVGl0bGUgbGFiZWx8TGFiZWwgd2hpY2ggZXhwbGFpbnMgdGhlIHVzZXIgdG8gZW50ZXIgdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5lbXBsb3llZUlkJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiaW5wdXQtdGV4dFwiIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cImVtcGxveWVlQ29kZVwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgZW1wbG95ZWUgY29kZVwiLz5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD4gICAgXG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgY2xhc3M9XCJtYXQtZXJyb3JcIiAqbmdJZj1cInVzZXJEZXRhaWxzRm9ybT8uZ2V0KCdlbXBsb3llZUNvZGUnKT8uaGFzRXJyb3IoJ3BhdHRlcm4nKVwiPlxuICAgICAgICAgICAgICAgIFBsZWFzZSBlbnRlciBhbiBBbHBoYS1udW1lcmljIHZhbHVlIG9ubHlcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPiAgICAgICAgICAgICAgICBcbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCIgKm5nSWY9XCJjYW5zaG93TW9iaWxlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1zZW1pYm9sZCBtYXJnaW4tMCByZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgaTE4bj1cIlRpdGxlIGxhYmVsfExhYmVsIHdoaWNoIGV4cGxhaW5zIHRoZSB1c2VyIHRvIGVudGVyIHRpdGxlXCI+XG4gICAgICAgICAgICAgICAge3sgJ3Byb2ZpbGVJbmZvLm1vYmlsZU51bWJlcicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgZ2FwLTRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50cnktY29kZSBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlclwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gICAgICAgICAgICAgICAgKzkxXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2xcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwibW9iaWxlLW51bVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImlucHV0LXRleHQgbW9iaWxlLXRleHQgcmVsYXRpdmVcIiBtYXhsZW5ndGg9XCIxMFwiIChrZXl1cCk9XCJoYW5kbGVFbXB0eSgnbW9iaWxlJylcIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cIm1vYmlsZVwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgbW9iaWxlIG51bWJlclwiLz5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJ2ZXJpZmllZC1jaGVja1wiICpuZ0lmPVwibVZlcmlmaWVkXCI+Y2hlY2tfY2lyY2xlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yIGNsYXNzPVwibWF0LWVycm9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInVzZXJEZXRhaWxzRm9ybS5nZXQoJ21vYmlsZScpLmhhc0Vycm9yKCdyZXF1aXJlZCcpIHx8IHVzZXJEZXRhaWxzRm9ybS5nZXQoJ21vYmlsZScpLmhhc0Vycm9yKCdwYXR0ZXJuJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5wbGVhc2VFbnRlclZhbGlkTW9iaWxlTnVtYmVyJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZFwiICpuZ0lmPVwidmVyaWZ5TW9iaWxlICYmICFvdHBTZW50ICYmICFtVmVyaWZpZWRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ2V0LW90cCBzbTptci00XCIgKGNsaWNrKT1cImhhbmRsZUdlbmVyYXRlT1RQKCdwaG9uZScpXCI+e3sgJ3Byb2ZpbGVJbmZvLmdldE9UUCcgfFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwib3RwU2VudFwiPiAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJvdHBGb3JtXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZW50ZXItb3RwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXNlbWlib2xkIHJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICBpMThuPVwiVGl0bGUgbGFiZWx8TGFiZWwgd2hpY2ggZXhwbGFpbnMgdGhlIHVzZXIgdG8gZW50ZXIgdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyAncHJvZmlsZUluZm8uZW50ZXJPVFAnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlRpbWUgUmVtYWluaW5nOiA8c3BhbiAjdGltZXJEaXY+PC9zcGFuPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInByb2ZpbGUtZm9ybS1maWVsZCBtb2JpbGUtbnVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cIm90cFwiIGNsYXNzPVwiaW5wdXQtdGV4dCBjdXN0b20tc2l6ZVwiIHBsYWNlaG9sZGVyPVwie3sgJ3Byb2ZpbGVJbmZvLmVudGVyVGhlT1RQJyB8IHRyYW5zbGF0ZSB9fVwiIG1heGxlbmd0aD1cIjZcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNlbnRlclwiICpuZ0lmPVwic2hvd1Jlc2VuZE9UUFwiPiAgXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZXJcIj57eyAncHJvZmlsZUluZm8uZGlkTm90UmVjZWl2ZU9UUCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXNlbmQtb3RwXCIgKGNsaWNrKT1cImhhbmRsZVJlc2VuZE9UUCgpXCI+Jm5ic3A7Jm5ic3A7e3sgJ3Byb2ZpbGVJbmZvLnJlc2VudE9UUCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIG1iLTRcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2F2ZS1idXR0b25cIiAoY2xpY2spPVwidmVyaWZ5TW9iaWxlT1RQKClcIj57eyAncHJvZmlsZUluZm8uc3VibWl0JyB8IHRyYW5zbGF0ZSB9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCIgKm5nSWY9XCJjYW5TaG93R2VuZGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1zZW1pYm9sZCBtYXJnaW4tMCByZXF1aXJlZFwiXG4gICAgICAgICAgICAgIGkxOG49XCJUaXRsZSBsYWJlbHxMYWJlbCB3aGljaCBleHBsYWlucyB0aGUgdXNlciB0byBlbnRlciB0aXRsZVwiPlxuICAgICAgICAgICAgICB7eyAncHJvZmlsZUluZm8uZ2VuZGVyJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImdlbmRlclwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IGdlbmRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgX2dlbmRlciBvZiBlVXNlckdlbmRlclwiIHZhbHVlPVwie3sgX2dlbmRlciB9fVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgaGFuZGxlVHJhbnNsYXRlVG8oX2dlbmRlci50b0xvd2VyQ2FzZSgpKSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiICpuZ0lmPVwiY2FuU2hvd0RvYlwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1zZW1pYm9sZCBtYXJnaW4tMCByZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgaTE4bj1cIlRpdGxlIGxhYmVsfExhYmVsIHdoaWNoIGV4cGxhaW5zIHRoZSB1c2VyIHRvIGVudGVyIHRpdGxlXCI+XG4gICAgICAgICAgICAgICAge3sgJ3Byb2ZpbGVJbmZvLmRvYicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgY2xhc3M9XCJpbnB1dC10ZXh0IGljb24taW5jbHVkZS1pbnB1dFwiIFttYXhdPVwiY3VycmVudERhdGVcIiBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRGF0ZVwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZG9iXCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgZGF0ZSBvZiBiaXJ0aFwiIC8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cInBpY2tlclwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXI+PC9tYXQtZGF0ZXBpY2tlcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIHJlbGF0aXZlXCIgKm5nSWY9XCJjYW5TaG93RG9taWNpbGVNZWRpdW1cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXNlbWlib2xkIG1hcmdpbi0wIHJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgaTE4bj1cIlRpdGxlIGxhYmVsfExhYmVsIHdoaWNoIGV4cGxhaW5zIHRoZSB1c2VyIHRvIGVudGVyIHRpdGxlXCI+XG4gICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5tb3RoZXJUb25ndWUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGF1dG8tY29tcGxldGUtcm93IHJlbGF0aXZlXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJpbnB1dC10ZXh0IGhpZ2gtemluZGV4XCIgYXJpYS1sYWJlbD1cIkRvbWljaWxlIE1lZGl1bSAoTW90aGVyIFRvbmd1ZSlcIiBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZG9taWNpbGVNZWRpdW1cIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBtb3RoZXIgdG9uZ3VlXCJcbiAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJmaWx0ZXJMYW5ndWFnZSgkZXZlbnQudGFyZ2V0LnZhbHVlKVwiIChmb2N1cyk9XCJvbkxhbmd1YWdlRm9jdXMoKVwiICNsYW5ndWFnZVRleHRCb3gvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1vdGhlci10b3VuZ3VlLWNhcmV0XCI+YXJyb3dfZHJvcF9kb3duPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cInVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZG9taWNpbGVNZWRpdW0nXS5pbnZhbGlkICYmIHVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZG9taWNpbGVNZWRpdW0nXS50b3VjaGVkXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdC1lcnJvclwiPlxuICAgICAgICAgICAgICAgICAgUGxlYXNlIHNlbGVjdCBhIHZhbGlkIG1vdGhlciB0b25ndWUuXG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF1dG8tbGFuZ3VhZ2UtbGlzdCBmbGV4IGZsZXgtY29sIGlnbm9yZS1ibHVyXCIgI2xhbmd1YWdlRHJvcGRvd25cbiAgICAgICAgICAgICAgKm5nSWY9XCJvcGVuTGFuZ3VhZ2VEcm9wZG93biAmJiBtYXN0ZXJMYW5ndWFnZXM/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICA8ZGl2IChtb3VzZWRvd24pPVwicHJldmVudExhbmd1YWdlQmx1cigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImxhbmd1YWdlLWl0ZW0ge3t1c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2RvbWljaWxlTWVkaXVtJ10/LnZhbHVlPy50b0xvd2VyQ2FzZSgpID09PSBsYW5ndWFnZT8ubmFtZT8udG9Mb3dlckNhc2UoKSA/ICdsYW5ndWFnZS1pdGVtLWFjdGl2ZScgOiAnJ319XCJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgbGFuZ3VhZ2Ugb2YgbWFzdGVyTGFuZ3VhZ2VzXCIgKGNsaWNrKT1cInNlbGVjdExhbmd1YWdlKGxhbmd1YWdlLm5hbWUpXCI+XG4gICAgICAgICAgICAgICAge3sgbGFuZ3VhZ2U/Lm5hbWUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIiAqbmdJZj1cImNhblNob3dDYXRlZ29yeVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1zZW1pYm9sZCBtYXJnaW4tMCByZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgaTE4bj1cIlRpdGxlIGxhYmVsfExhYmVsIHdoaWNoIGV4cGxhaW5zIHRoZSB1c2VyIHRvIGVudGVyIHRpdGxlXCI+XG4gICAgICAgICAgICAgICAge3sgJ3Byb2ZpbGVJbmZvLmNhdGVnb3J5JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImNhdGVnb3J5XCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgY2F0ZWdvcnlcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGNhdGVnb3J5IG9mIGVDYXRlZ29yeVwiIHZhbHVlPVwie3sgY2F0ZWdvcnkgfX1cIj57e1xuICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVRyYW5zbGF0ZVRvKGNhdGVnb3J5Py50b0xvd2VyQ2FzZSgpKSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCIgKm5nSWY9XCJjYW5TaG93cGluQ29kZVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1zZW1pYm9sZCBtYXJnaW4tMCByZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgICBpMThuPVwiVGl0bGUgbGFiZWx8TGFiZWwgd2hpY2ggZXhwbGFpbnMgdGhlIHVzZXIgdG8gZW50ZXIgdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgIHt7ICd1c2VyUHJvZmlsZS5vZmZpY2VQaW5Db2RlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZW1haWxcIiBjbGFzcz1cImlucHV0LXRleHRcIiBtYXRJbnB1dCBtYXhsZW5ndGg9XCI2XCIgZm9ybUNvbnRyb2xOYW1lPVwicGluQ29kZVwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgcGluY29kZVwiLz5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciBjbGFzcz1cIm1hdC1lcnJvclwiICpuZ0lmPVwidXNlckRldGFpbHNGb3JtPy5nZXQoJ3BpbkNvZGUnKT8uaGFzRXJyb3IoJ3BhdHRlcm4nKVwiPlxuICAgICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5pbnZhbGlkUGluQ29kZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj4gICAgICAgICAgXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiICpuZ0lmPVwiY2FuU2hvd3Nob3dDYWRyZURldGFpbHMgICYmICFzaG93RG9wdENoYW5nZXNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWFyZ2luLTAgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgIGkxOG49XCJUaXRsZSBsYWJlbHxMYWJlbCB3aGljaCBleHBsYWlucyB0aGUgdXNlciB0byBlbnRlciB0aXRsZVwiPlxuICAgICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5mcm9tR292T3JnYW5pemF0aW9uJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJwcm9maWxlLWZvcm0tZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImlzQ2FkcmVcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cImdldElzQ2FkcmVTdGF0dXMoJGV2ZW50LnZhbHVlKVwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IGNhZHJlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJ0cnVlXCI+WWVzPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiZmFsc2VcIj5ObzwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIiAqbmdJZj1cImNhblNob3dzaG93Q2FkcmVEZXRhaWxzICYmIGlzQ2FkcmVTdGF0dXMgICYmICFzaG93RG9wdENoYW5nZXNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWFyZ2luLTAgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgIGkxOG49XCJUaXRsZSBsYWJlbHxMYWJlbCB3aGljaCBleHBsYWlucyB0aGUgdXNlciB0byBlbnRlciB0aXRsZVwiPlxuICAgICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby50eXBlT2ZDaXZpbFNlcnZpY2UnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInByb2ZpbGUtZm9ybS1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwidHlwZU9mQ2l2aWxTZXJ2aWNlXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJnZXRTZXJ2aWNlKCRldmVudC52YWx1ZSlcIiAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgdHlwZSBvZiBjaXZpbCBzZXJ2aWNlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBzZXJ2aWNlIG9mIGNpdmlsU2VydmljZVR5cGVzXCIgW3ZhbHVlXT1cInNlcnZpY2VcIj57eyBzZXJ2aWNlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiICpuZ0lmPVwiY2FuU2hvd3Nob3dDYWRyZURldGFpbHMgJiYgdXNlckRldGFpbHNGb3JtLmdldCgndHlwZU9mQ2l2aWxTZXJ2aWNlJykudmFsdWUgJiYgdXNlckRldGFpbHNGb3JtLmdldCgnaXNDYWRyZScpLnZhbHVlICYmICFzaG93RG9wdENoYW5nZXNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWFyZ2luLTAgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgIGkxOG49XCJUaXRsZSBsYWJlbHxMYWJlbCB3aGljaCBleHBsYWlucyB0aGUgdXNlciB0byBlbnRlciB0aXRsZVwiPlxuICAgICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5zZXJ2aWNlVHlwZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwicHJvZmlsZS1mb3JtLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJzZXJ2aWNlVHlwZVwiIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZXJ2aWNlU2VsZWN0KCRldmVudClcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBzZXJ2aWNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHNlcnZpY2Ugb2Ygc2VydmljZU5hbWVcIiBbdmFsdWVdPVwic2VydmljZVwiPnt7IHNlcnZpY2UgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCIgKm5nSWY9XCJjYW5TaG93c2hvd0NhZHJlRGV0YWlscyAmJiB1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdzZXJ2aWNlVHlwZScpLnZhbHVlICYmIFxuICAgICAgICAgICAgICB1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdpc0NhZHJlJykudmFsdWUgXG4gICAgICAgICAgICAgICYmIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ3R5cGVPZkNpdmlsU2VydmljZScpLnZhbHVlICYmIChcbiAgICAgICAgICAgICAgICAgIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ3NlcnZpY2VUeXBlJykudmFsdWUgPT09ICdJbmRpYW4gQWRtaW5pc3RyYXRpdmUgU2VydmljZSAoSUFTKScgfHwgXG4gICAgICAgICAgICAgICAgICB1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdzZXJ2aWNlVHlwZScpLnZhbHVlID09PSAnSW5kaWFuIFBvbGljZSBTZXJ2aWNlIChJUFMpJyB8fCBcbiAgICAgICAgICAgICAgICAgIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ3NlcnZpY2VUeXBlJykudmFsdWUgPT09ICdJbmRpYW4gRm9yZXN0IFNlcnZpY2UgKElGb1MpJyBcbiAgICAgICAgICAgICAgICApICYmICFzaG93RG9wdENoYW5nZXNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWFyZ2luLTAgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgIGkxOG49XCJUaXRsZSBsYWJlbHxMYWJlbCB3aGljaCBleHBsYWlucyB0aGUgdXNlciB0byBlbnRlciB0aXRsZVwiPlxuICAgICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5jYWRyZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwicHJvZmlsZS1mb3JtLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJjYWRyZU5hbWVcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uQ2FkcmVTZWxlY3QoJGV2ZW50LnZhbHVlKVwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IGNhZHJlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHN0YXRlIG9mIGNhZHJlXCIgW3ZhbHVlXT1cInN0YXRlXCI+e3sgc3RhdGUgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2hvd0RvcHRDaGFuZ2VzXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCIgKm5nSWY9XCJjYW5TaG93c2hvd0NhZHJlRGV0YWlscyAmJiB1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdzZXJ2aWNlVHlwZScpICYmICh1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdzZXJ2aWNlVHlwZScpLnZhbHVlICYmIFxuICAgICAgICAgICAgdXNlckRldGFpbHNGb3JtLmdldCgnaXNDYWRyZScpLnZhbHVlICYmIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ3R5cGVPZkNpdmlsU2VydmljZScpLnZhbHVlICYmIChcbiAgICAgICAgICAgICAgICB1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdzZXJ2aWNlVHlwZScpLnZhbHVlID09PSAnSW5kaWFuIEFkbWluaXN0cmF0aXZlIFNlcnZpY2UgKElBUyknIHx8IFxuICAgICAgICAgICAgICAgIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ3NlcnZpY2VUeXBlJykudmFsdWUgPT09ICdJbmRpYW4gUG9saWNlIFNlcnZpY2UgKElQUyknIHx8IFxuICAgICAgICAgICAgICAgIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ3NlcnZpY2VUeXBlJykudmFsdWUgPT09ICdJbmRpYW4gRm9yZXN0IFNlcnZpY2UgKElGb1MpJyBcbiAgICAgICAgICAgICkgJiYgdXNlckRldGFpbHNGb3JtLmdldCgnY2FkcmVOYW1lJykudmFsdWUpICA/IHRydWUgOiAoKHVzZXJEZXRhaWxzRm9ybS5nZXQoJ3NlcnZpY2VUeXBlJykudmFsdWUgJiYgXG4gICAgICAgICAgICAgICAgdXNlckRldGFpbHNGb3JtLmdldCgnaXNDYWRyZScpLnZhbHVlIFxuICAgICAgICAgICAgJiYgdXNlckRldGFpbHNGb3JtLmdldCgndHlwZU9mQ2l2aWxTZXJ2aWNlJykudmFsdWUgJiYgKFxuICAgICAgICAgICAgICAgIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ3NlcnZpY2VUeXBlJykudmFsdWUgIT09ICdJbmRpYW4gQWRtaW5pc3RyYXRpdmUgU2VydmljZSAoSUFTKScgJiYgXG4gICAgICAgICAgICAgICAgdXNlckRldGFpbHNGb3JtLmdldCgnc2VydmljZVR5cGUnKS52YWx1ZSAhPT0gJ0luZGlhbiBQb2xpY2UgU2VydmljZSAoSVBTKScgJiYgXG4gICAgICAgICAgICAgICAgdXNlckRldGFpbHNGb3JtLmdldCgnc2VydmljZVR5cGUnKS52YWx1ZSAhPT0gJ0luZGlhbiBGb3Jlc3QgU2VydmljZSAoSUZvUyknIFxuICAgICAgICAgICAgKSkpID8gdHJ1ZSA6IGZhbHNlXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWFyZ2luLTAgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgICAgaTE4bj1cIlRpdGxlIGxhYmVsfExhYmVsIHdoaWNoIGV4cGxhaW5zIHRoZSB1c2VyIHRvIGVudGVyIHRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICB7eyAncHJvZmlsZUluZm8uYmF0Y2gnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJwcm9maWxlLWZvcm0tZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiY2FkcmVCYXRjaFwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IGJhdGNoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgeWVhciBvZiB5ZWFyQXJyYXlcIiBbdmFsdWVdPVwieWVhclwiPnt7IHllYXIgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCIgKm5nSWY9XCJjYW5TaG93c2hvd0NhZHJlRGV0YWlscyAmJiB1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdpc0NhZHJlJykudmFsdWUgJiYgIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ2NhZHJlQmF0Y2gnKS52YWx1ZSAmJiAhc2hvd0RvcHRDaGFuZ2VzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXNlbWlib2xkIG1hcmdpbi0wIHJlcXVpcmVkIG1iLTNcIlxuICAgICAgICAgICAgICAgIGkxOG49XCJUaXRsZSBsYWJlbHxMYWJlbCB3aGljaCBleHBsYWlucyB0aGUgdXNlciB0byBlbnRlciB0aXRsZVwiPlxuICAgICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5jYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYWRyZUNvbnRyb2wtbmFtZVwiPnt7Y2FkcmVDb250cm9sbGluZ0F1dGhvcml0eX19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIGZsZXggZmxleC1yb3cgZ2FwLTQganVzdGlmeS1lbmQgbWFyZ2luLXRvcC1tXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cInNhdmUtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidXNlckRldGFpbHNGb3JtPy5pbnZhbGlkIHx8ICFtVmVyaWZpZWQgfHwgIWVWZXJpZmllZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU3VibWl0Rm9ybSh1c2VyRGV0YWlsc0Zvcm0pXCI+XG4gICAgICAgICAgICAgICAge3sgJ3Byb2ZpbGVJbmZvLnNhdmVDaGFuZ2VzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9mb3JtPlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhZGRMb2FkZXIgPiAwXCIgPlxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIG15LTIgbG9hZGVyIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxtYXQtc3Bpbm5lciBjbGFzcz1cImlubGluZS1ibG9ja1wiPjwvbWF0LXNwaW5uZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuIl19
1840
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5yb2xsLXByb2ZpbGUtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdG9jL3NyYy9saWIvY29tcG9uZW50cy9lbnJvbGwtcHJvZmlsZS1mb3JtL2Vucm9sbC1wcm9maWxlLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL2NvbXBvbmVudHMvZW5yb2xsLXByb2ZpbGUtZm9ybS9lbnJvbGwtcHJvZmlsZS1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDOUYsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFbkUsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFekYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUM5QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQTtBQUt0RSxPQUFPLEVBQXNDLHNCQUFzQixJQUFJLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBRS9ILG9CQUFvQjtBQUNwQixPQUFPLENBQUMsTUFBTSxRQUFRLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFLdEIsTUFBTSxjQUFjLEdBQUcsbUJBQW1CLENBQUE7QUFDMUMsTUFBTSxnQkFBZ0IsR0FBRyxpQkFBaUIsQ0FBQTtBQUMxQyxNQUFNLGNBQWMsR0FBRyxjQUFjLENBQUE7QUFDckMsb0JBQW9CO0FBQ3BCLE1BQU0sYUFBYSxHQUFHLHFIQUFxSCxDQUFB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QkFBa0I7c0JBRmpCLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbidcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbmplY3QsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3JtcydcbmltcG9ydCB7IFVzZXJQcm9maWxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3VzZXItcHJvZmlsZS5zZXJ2aWNlJ1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgc3RhcnRXaXRoLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcydcbmltcG9ydCB7IE5zVXNlclByb2ZpbGVEZXRhaWxzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3VzZXItcHJvZmlsZS5tb2RlbCdcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25zU2VydmljZSB9IGZyb20gJ0BzdW5iaXJkLWNiL3V0aWxzLXYyJ1xuaW1wb3J0IHsgUHJvZmlsZVYyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Byb2ZpbGUtdjIuc2VydmljZSdcbmltcG9ydCB7IE90cFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vdHAuc2VydmljZSdcbmltcG9ydCB7IE5QU0dyaWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbnBzLWdyaWQuc2VydmljZSdcbmltcG9ydCB7IE1hdExlZ2FjeURpYWxvZ1JlZiBhcyBNYXREaWFsb2dSZWYsIE1BVF9MRUdBQ1lfRElBTE9HX0RBVEEgYXMgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LWRpYWxvZydcbmltcG9ydCB7IE1hdExlZ2FjeVNuYWNrQmFyIGFzIE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LXNuYWNrLWJhcidcbi8qIHRzbGludDpkaXNhYmxlICovXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSdcbi8vIGltcG9ydCB7IFNpZ251cFNlcnZpY2UgfSBmcm9tICdzcmMvYXBwL3JvdXRlcy9wdWJsaWMvcHVibGljLXNpZ251cC9zaWdudXAuc2VydmljZSdcbmltcG9ydCB7IGRlc2lnbmF0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Byb2ZpbGUtcmV2YW1wLm1vZGVsJ1xuXG5jb25zdCBNT0JJTEVfUEFUVEVSTiA9IC9eWzBdP1s2Nzg5XVxcZHs5fSQvXG5jb25zdCBQSU5fQ09ERV9QQVRURVJOID0gL15bMS05XVswLTldezV9JC9cbmNvbnN0IEVNUF9JRF9QQVRURVJOID0gL15bYS16MC05XSskL2lcbi8qIHRzbGludDpkaXNhYmxlICovXG5jb25zdCBFTUFJTF9QQVRURVJOID0gL15bYS16QS1aMC05XStbYS16QS1aMC05Ll8tXSpbYS16QS1aMC05XStAW2EtekEtWjAtOV0rKFstYS16QS1aMC05XSpbYS16QS1aMC05XSspPyhcXC5bYS16QS1aMC05LV0rKSpcXC5bYS16QS1aXXsyLDR9JC9cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnd3MtYXBwLWVucm9sbC1wcm9maWxlLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vZW5yb2xsLXByb2ZpbGUtZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Vucm9sbC1wcm9maWxlLWZvcm0uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRW5yb2xsUHJvZmlsZUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwdWJsaWMgYWZ0ZXJTdWJtaXRBY3Rpb24gPSB0aGlzLmNoZWNrQWZ0ZXJTdWJtaXQuYmluZCh0aGlzKVxuICBpc1JlYWRPbmx5ID0gZmFsc2VcbiAgYmF0Y2hEZXRhaWxzOiBhbnlcbiAgY3VzdG9tRm9ybTogYm9vbGVhbiA9IGZhbHNlXG4gIHVzZXJEZXRhaWxzRm9ybTogRm9ybUdyb3VwXG4gIGdyb3VwRGF0YTogYW55IHwgdW5kZWZpbmVkXG4gIHByaXZhdGUgZGVzdHJveVN1YmplY3QkID0gbmV3IFN1YmplY3QoKVxuICBkZXNpZ25hdGlvbnNNZXRhOiBhbnkgPSBbXVxuICAvLyBmaWx0ZXJEZXNpZ25hdGlvbnNNZXRhOiBhbnkgPSBbXVxuICBlVXNlckdlbmRlciA9IE9iamVjdC5rZXlzKE5zVXNlclByb2ZpbGVEZXRhaWxzLkVVc2VyR2VuZGVyKVxuICBtYXN0ZXJMYW5ndWFnZXM6IGFueVxuICBtYXN0ZXJMYW5ndWFnZUJhY2t1cDogYW55XG4gIGVDYXRlZ29yeSA9IE9iamVjdC5rZXlzKE5zVXNlclByb2ZpbGVEZXRhaWxzLkVDYXRlZ29yeSlcbiAgdXNlclByb2ZpbGVPYmplY3Q6IGFueVxuICBlbGlnaWJsZTogYm9vbGVhbiA9IGZhbHNlXG4gIGlzQ2FkcmVTdGF0dXMgPSBmYWxzZVxuICBzaG93QmF0Y2hGb3JOb0NhZHJlID0gdHJ1ZVxuICBjaXZpbFNlcnZpY2VEYXRhOiBhbnlcbiAgY2l2aWxTZXJ2aWNlVHlwZXM6IGFueVxuICBzZXJ2aWNlTmFtZTogYW55XG4gIHNlcnZpY2VUeXBlOiBhbnlcbiAgc2VydmljZUxpc3REYXRhOiBhbnlcbiAgc2VydmljZUlkOiBhbnlcbiAgZXJyb3JNZXNzYWdlOiBhbnlcbiAgc2VsZWN0ZWRTZXJ2aWNlTmFtZTogYW55XG4gIHNlbGVjdGVkU2VydmljZTogYW55XG4gIGNpdmlsU2VydmljZU5hbWU6IGFueVxuICBjaXZpbFNlcnZpY2VJZDogYW55XG4gIGNhZHJlSWQ6IGFueVxuICBjYWRyZTogYW55XG4gIGNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHk6IGFueVxuICBzdGFydEJhdGNoOiBhbnlcbiAgZW5kQmF0Y2g6IGFueVxuICB5ZWFyQXJyYXk6IGFueVxuICBleGNsdXNpb25ZZWFyOiBhbnlcbiAgc2VsZWN0ZWRDYWRyZU5hbWU6IGFueVxuICBzZWxlY3RlZENhZHJlOiBhbnlcbiAgdmVyaWZ5TW9iaWxlOiBib29sZWFuID0gZmFsc2VcbiAgb3RwU2VudDogYm9vbGVhbiA9IGZhbHNlXG4gIGVtYWlsT3RwU2VudDogYm9vbGVhbiA9IGZhbHNlXG4gIG90cEVudGVyZWQgPSAnJ1xuICBtVmVyaWZpZWQ6IGJvb2xlYW4gPSBmYWxzZVxuICBlVmVyaWZpZWQ6IGJvb2xlYW4gPSBmYWxzZVxuICBAVmlld0NoaWxkKCd0aW1lckRpdicsIHsgc3RhdGljOiBmYWxzZSB9KSB0aW1lckRpdiAhOiBhbnlcbiAgQFZpZXdDaGlsZCgnZW1haWxUaW1lckRpdicsIHsgc3RhdGljOiBmYWxzZSB9KSBlbWFpbFRpbWVyRGl2ICE6IGFueVxuICB0aW1lTGVmdCA9IDE1MFxuICBlbWFpbFRpbWVMZWZ0ID0gMTUwXG4gIGludGVydmFsOiBhbnlcbiAgZW1haWxJbnRlcnZhbDogYW55XG4gIHNob3dSZXNlbmRPVFAgPSBmYWxzZVxuICBzaG93RW1haWxSZXNlbmRPVFAgPSBmYWxzZVxuICBvdHBGb3JtOiBGb3JtR3JvdXBcbiAgZW1haWxPdHBGb3JtOiBGb3JtR3JvdXBcbiAgc2hvd25hbWUgPSBmYWxzZVxuICBzaG93RGVzaWduYXRpb24gPSBmYWxzZVxuICBzaG93R3JvdXAgPSBmYWxzZVxuICBzaG93RW1wbG95ZWVDb2RlID0gZmFsc2VcbiAgc2hvd01vYmlsZSA9IGZhbHNlXG4gIHNob3dHZW5kZXIgPSBmYWxzZVxuICBzaG93RG9iID0gZmFsc2VcbiAgc2hvd0NhdGVnb3J5ID0gZmFsc2VcbiAgc2hvd0RlY2ltYWxNZWRpdW0gPSBmYWxzZVxuICBzaG93UGluQ29kZSA9IGZhbHNlXG4gIHNob3dDYWRyZURldGFpbHMgPSBmYWxzZVxuICB1cGRhdGVQcm9maWxlID0gZmFsc2VcbiAgcGVuZGluZ0ZpbGVkczogYW55XG4gIHBHcm91cDogYW55XG4gIHBEZXNpZ25hdGlvbjogYW55XG4gIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlXG4gIGNhblNob3dFbXBsb3llZUNvZGU6IGJvb2xlYW4gPSBmYWxzZVxuICBjYW5zaG93TW9iaWxlOiBib29sZWFuID0gZmFsc2VcbiAgY2FuU2hvd0dlbmRlcjogYm9vbGVhbiA9IGZhbHNlXG4gIGNhblNob3dEb2I6IGJvb2xlYW4gPSBmYWxzZVxuICBjYW5TaG93RG9taWNpbGVNZWRpdW06IGJvb2xlYW4gPSBmYWxzZVxuICBjYW5TaG93Q2F0ZWdvcnk6IGJvb2xlYW4gPSBmYWxzZVxuICBjYW5TaG93cGluQ29kZTogYm9vbGVhbiA9IGZhbHNlXG4gIGNhblNob3dzaG93Q2FkcmVEZXRhaWxzOiBib29sZWFuID0gZmFsc2VcbiAgY2FuU2hvd0dyb3VwOiBib29sZWFuID0gZmFsc2VcbiAgY2FuU2hvd0Rlc2lnbmF0aW9uOiBib29sZWFuID0gZmFsc2VcbiAgc2VsZWN0ZWREYXRlOiBhbnlcbiAgc2hvd0NvdW50ZXI6IG51bWJlciA9IDBcbiAgZGlzYWJsZUNvdW50ZXI6IG51bWJlciA9IDBcbiAgY2FuU2hvd0VtYWlsOiBib29sZWFuID0gZmFsc2VcbiAgc2hvd0VtYWlsOiBib29sZWFuID0gZmFsc2VcbiAgY2FuU2hvd05hbWU6IGJvb2xlYW4gPSBmYWxzZVxuICBjYW5TaG93T3JnOiBib29sZWFuID0gZmFsc2VcbiAgc2hvd09yZzogYm9vbGVhbiA9IGZhbHNlXG4gIHN1cnZleUlkOiBhbnlcbiAgc2hvd0RvcHRDaGFuZ2VzOiBib29sZWFuID0gZmFsc2VcbiAgcHJvZmlsZUZvcm1UeXBlOiBhbnlcbiAgdmVyaWZ5RW1haWwgPSBmYWxzZVxuICBhcHByb3ZlZERvbWFpbkxpc3Q6IGFueSA9IFtdXG4gIGNvbnRleHRUb2tlbjogYW55XG4gIGN1cnJlbnREYXRlID0gbmV3IERhdGUoKVxuICBvcGVuRGVzaWduYXRpb25Ecm9wZG93biA9IGZhbHNlXG4gIG9wZW5MYW5ndWFnZURyb3Bkb3duID0gZmFsc2VcbiAgY2FuU2hvd090aGVyRGVzaWduYXRpb24gPSBmYWxzZVxuICBkZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQgPSA1MFxuICBhZGRMb2FkZXIgPSAwXG4gIGlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSBmYWxzZTtcbiAgZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50ID0gIDUwXG4gIGRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gZmFsc2VcbiAgb3JnYW5pc2F0aW9uSWQgPSAnJ1xuICBzZWxlY3RlZE9yZ0hhc0Rlc2lnbmF0aW9ucyA9IGZhbHNlO1xuICBkZXNpZ25hdGlvbnNPZmZzZXQgPSAwO1xuICBkZXNpZ25hdGlvblNlYXJjaFRleHQgPSAnJztcbiAgZGVzaWduYXRpb25zVG90YWxDb3VudCA9IDA7XG4gIGZvcm1JZDogc3RyaW5nID0gJyc7XG4gIGZvcm1zRGV0aWxzOiBhbnk7XG4gIEBWaWV3Q2hpbGQoJ3RleHRCb3gnKSB0ZXh0Qm94ITogRWxlbWVudFJlZlxuICBAVmlld0NoaWxkKCdkcm9wZG93bicpIGRyb3Bkb3duITogRWxlbWVudFJlZlxuICBAVmlld0NoaWxkKCdsYW5ndWFnZVRleHRCb3gnKSBsYW5ndWFnZVRleHRCb3ghOiBFbGVtZW50UmVmXG4gIEBWaWV3Q2hpbGQoJ2xhbmd1YWdlRHJvcGRvd24nKSBsYW5ndWFnZURyb3Bkb3duITogRWxlbWVudFJlZlxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhcixcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8RW5yb2xsUHJvZmlsZUZvcm1Db21wb25lbnQ+LFxuICAgIHByaXZhdGUgdXNlclByb2ZpbGVTZXJ2aWNlOiBVc2VyUHJvZmlsZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maWdTcmM6IENvbmZpZ3VyYXRpb25zU2VydmljZSxcbiAgICBwcml2YXRlIHByb2ZpbGVWMlN2YzogUHJvZmlsZVYyU2VydmljZSxcbiAgICBwcml2YXRlIG90cFNlcnZpY2U6IE90cFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBucHNTdmM6IE5QU0dyaWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSxcbiAgICAvLyBwcml2YXRlIHNpZ251cFNlcnZpY2U6IFNpZ251cFNlcnZpY2UsXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnksXG4gICkge1xuXG4gICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd3ZWJzaXRlTGFuZ3VhZ2UnKSkge1xuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnNldERlZmF1bHRMYW5nKCdlbicpXG4gICAgICBjb25zdCBsYW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3dlYnNpdGVMYW5ndWFnZScpIVxuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnVzZShsYW5nKVxuICAgIH1cblxuICAgIHRoaXMuYmF0Y2hEZXRhaWxzID0gdGhpcy5kYXRhLmJhdGNoRGF0YVxuICAgIHRoaXMuc3VydmV5SWQgPSB0aGlzLmRhdGEuc3VydmV5SWRcbiAgICB0aGlzLnNob3dEb3B0Q2hhbmdlcyA9IHRoaXMuZGF0YS5zaG93RG9wdENoYW5nZXNcbiAgICB0aGlzLnByb2ZpbGVGb3JtVHlwZSA9IHRoaXMuYmF0Y2hEZXRhaWxzLmJhdGNoQXR0cmlidXRlcy51c2VyUHJvZmlsZUZpbGVkc1xuICAgIHRoaXMudXNlckRldGFpbHNGb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICBuYW1lOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgICAgb3JnYW5pc2F0aW9uOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgICAgZ3JvdXA6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgICBkZXNpZ25hdGlvbjogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICAgIGVtcGxveWVlQ29kZTogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICAgIHByaW1hcnlFbWFpbDogbmV3IEZvcm1Db250cm9sKCcnLCBbVmFsaWRhdG9ycy5wYXR0ZXJuKEVNQUlMX1BBVFRFUk4pXSksXG4gICAgICBtb2JpbGU6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgICBnZW5kZXI6IG5ldyBGb3JtQ29udHJvbCgnJywgW10pLFxuICAgICAgZG9iOiBuZXcgRm9ybUNvbnRyb2woJycsIFtdKSxcbiAgICAgIGRvbWljaWxlTWVkaXVtOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgICAgY2F0ZWdvcnk6IG5ldyBGb3JtQ29udHJvbCgnJywgW10pLFxuICAgICAgcGluQ29kZTogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICAgIGlzQ2FkcmU6IG5ldyBGb3JtQ29udHJvbCgpLFxuICAgICAgdHlwZU9mQ2l2aWxTZXJ2aWNlOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgICAgc2VydmljZVR5cGU6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgICBjYWRyZU5hbWU6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgICBjYWRyZUJhdGNoOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgICAgY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eTogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICAgIG90aGVyRGVzaWduYXRpb246IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgICBzZWFyY2hEZXNpZ25hdGlvbjogbmV3IEZvcm1Db250cm9sKCcnKVxuICAgIH0pXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlXG4gICAgdGhpcy51c2VyUHJvZmlsZU9iamVjdCA9IHRoaXMuY29uZmlnU3JjLnVuTWFwcGVkVXNlclxuICAgIHRoaXMub3JnYW5pc2F0aW9uSWQgPSBfLmdldCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LCAncm9vdE9yZ0lkJywgXy5nZXQodGhpcy51c2VyUHJvZmlsZU9iamVjdCwgJ3BlcnNvbmFsRGV0YWlscy5yb290T3JnSWQnLCAnJykpXG5cbiAgICB0aGlzLm90cEZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgIG90cDogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKVxuICAgIH0pXG4gICAgdGhpcy5lbWFpbE90cEZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgIGVPdHA6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZClcbiAgICB9KVxuXG4gICAgLy8gVG8gY2hlY2sgdGhlIG1vYmlsZSBudW1iZXIgZW50ZXJlZCBieSB0aGUgdXNlciBpcyBzYW1lIG9yIG5vdCwgdmFsaWRhdGluZyB0aGUgbW9iaWxlIG51bWJlciB0byBzaG93IHRoZSBHZXQgT1RQLlxuICAgIGlmICh0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ21vYmlsZScpKSB7XG4gICAgICB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ21vYmlsZScpIS52YWx1ZUNoYW5nZXNcbiAgICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgIGlmIChyZXMgJiYgcmVzICE9PSB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5tb2JpbGUgfHxcbiAgICAgICAgICAgICF0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5waG9uZVZlcmlmaWVkKSB7XG4gICAgICAgICAgICBpZiAoTU9CSUxFX1BBVFRFUk4udGVzdChyZXMpKSB7XG4gICAgICAgICAgICAgIHRoaXMudmVyaWZ5TW9iaWxlID0gdHJ1ZVxuICAgICAgICAgICAgICB0aGlzLm1WZXJpZmllZCA9IGZhbHNlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnZlcmlmeU1vYmlsZSA9IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmVyaWZ5TW9iaWxlID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gVG8gY2hlY2sgdGhlIGVtYWlsIGVudGVyZWQgYnkgdGhlIHVzZXIgaXMgc2FtZSBvciBub3QsIHZhbGlkYXRpbmcgdGhlIGVtYWlsIHRvIHNob3cgdGhlIEdldCBPVFAuXG4gICAgaWYgKHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgncHJpbWFyeUVtYWlsJykpIHtcbiAgICAgIHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgncHJpbWFyeUVtYWlsJykhLnZhbHVlQ2hhbmdlc1xuICAgICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMgIT09IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLnByaW1hcnlFbWFpbCkge1xuICAgICAgICAgICAgaWYgKEVNQUlMX1BBVFRFUk4udGVzdChyZXMpKSB7XG4gICAgICAgICAgICAgIHRoaXMudmVyaWZ5RW1haWwgPSB0cnVlXG4gICAgICAgICAgICAgIHRoaXMuZVZlcmlmaWVkID0gZmFsc2VcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMudmVyaWZ5RW1haWwgPSBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZlcmlmeUVtYWlsID0gZmFsc2VcbiAgICAgICAgICAgIHRoaXMuZVZlcmlmaWVkID0gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBzY3JvbGxUb0FjdGl2ZSh0eXBlOiBhbnkpOiB2b2lkIHtcbiAgICBsZXQgYWN0aXZlRWxlbWVudDogYW55XG4gICAgbGV0IGNvbnRhaW5lcjogYW55XG4gICAgaWYgKHR5cGUgPT09ICdsYW5ndWFnZScpIHtcbiAgICAgIGNvbnRhaW5lciA9IHRoaXMubGFuZ3VhZ2VEcm9wZG93bi5uYXRpdmVFbGVtZW50XG4gICAgICBhY3RpdmVFbGVtZW50ID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5sYW5ndWFnZS1pdGVtLWFjdGl2ZScpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnZGVzaWduYXRpb24nKSB7XG4gICAgICBjb250YWluZXIgPSB0aGlzLmRyb3Bkb3duLm5hdGl2ZUVsZW1lbnRcbiAgICAgIGFjdGl2ZUVsZW1lbnQgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignLml0ZW0tYWN0aXZlJylcbiAgICB9XG4gICAgaWYgKGFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGFjdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnbmVhcmVzdCcgfSk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxuXG4gIGhhbmRsZUNsaWNrT3V0c2lkZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGNsaWNrZWRFbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50XG4gICAgaWYgKFxuICAgICAgdGhpcy50ZXh0Qm94ICYmICF0aGlzLnRleHRCb3gubmF0aXZlRWxlbWVudC5jb250YWlucyhjbGlja2VkRWxlbWVudCkgJiZcbiAgICAgIHRoaXMuZHJvcGRvd24gJiYgIXRoaXMuZHJvcGRvd24ubmF0aXZlRWxlbWVudC5jb250YWlucyhjbGlja2VkRWxlbWVudClcbiAgICApIHtcbiAgICAgIHRoaXMub3BlbkRlc2lnbmF0aW9uRHJvcGRvd24gPSBmYWxzZVxuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLmxhbmd1YWdlVGV4dEJveCAmJiAhdGhpcy5sYW5ndWFnZVRleHRCb3gubmF0aXZlRWxlbWVudC5jb250YWlucyhjbGlja2VkRWxlbWVudCkgJiZcbiAgICAgIHRoaXMubGFuZ3VhZ2VEcm9wZG93biAmJiAhdGhpcy5sYW5ndWFnZURyb3Bkb3duLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoY2xpY2tlZEVsZW1lbnQpXG4gICAgKSB7XG4gICAgICB0aGlzLm9wZW5MYW5ndWFnZURyb3Bkb3duID0gZmFsc2VcbiAgICB9XG4gIH1cbiAgb25EZXNpZ25hdGlvbnNGb2N1cygpIHtcbiAgICAvLyB0aGlzLm9wZW5EZXNpZ25hdGlvbkRyb3Bkb3duID0gdHJ1ZVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZSgnZGVzaWduYXRpb24nKVxuICAgIH0sIDEwMClcbiAgfVxuICBvbkxhbmd1YWdlRm9jdXMoKSB7XG4gICAgdGhpcy5vcGVuTGFuZ3VhZ2VEcm9wZG93biA9IHRydWVcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmUoJ2xhbmd1YWdlJylcbiAgICB9LCAxMDApXG4gIH1cblxuICBmaWx0ZXJMYW5ndWFnZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlLmxlbmd0aCkge1xuICAgICAgdGhpcy5tYXN0ZXJMYW5ndWFnZXMgPSB0aGlzLm1hc3Rlckxhbmd1YWdlQmFja3VwLmZpbHRlcigodmFsOiBhbnkpID0+XG4gICAgICAgIHZhbCAmJiB2YWwubmFtZS50cmltKCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh2YWx1ZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgKVxuICAgICAgaWYgKHRoaXMubWFzdGVyTGFuZ3VhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zdCB1c2VybmFtZUNvbnRyb2wgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2RvbWljaWxlTWVkaXVtJylcbiAgICAgICAgaWYgKHVzZXJuYW1lQ29udHJvbCkge1xuICAgICAgICAgIHVzZXJuYW1lQ29udHJvbC5zZXRFcnJvcnMoeyByZXF1aXJlZDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9wZW5MYW5ndWFnZURyb3Bkb3duID0gdHJ1ZVxuICB9XG5cbiAgLy8gZmlsdGVyZGVzaWduYXRpb24odmFsdWU6IGFueSkge1xuICAvLyAgIGlmICh2YWx1ZS5sZW5ndGgpIHtcbiAgLy8gICAgIHRoaXMuZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUgPXRydWVcbiAgLy8gICAgIHRoaXMuZmlsdGVyRGVzaWduYXRpb25zTWV0YSA9IHRoaXMuZGVzaWduYXRpb25zTWV0YS5maWx0ZXIoKHZhbDogYW55KSA9PlxuICAvLyAgICAgICB2YWwgJiYgdmFsLm5hbWUudHJpbSgpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModmFsdWUudG9Mb3dlckNhc2UoKSlcbiAgLy8gICAgIClcbiAgLy8gICAgIGlmICh0aGlzLmZpbHRlckRlc2lnbmF0aW9uc01ldGEubGVuZ3RoID09PSAwKSB7XG4gIC8vICAgICAgIGNvbnN0IHVzZXJuYW1lQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnZGVzaWduYXRpb24nKVxuICAvLyAgICAgICBpZiAodXNlcm5hbWVDb250cm9sKSB7XG4gIC8vICAgICAgICAgdXNlcm5hbWVDb250cm9sLnNldEVycm9ycyh7IHJlcXVpcmVkOiB0cnVlIH0pO1xuICAvLyAgICAgICB9XG4gIC8vICAgICB9XG4gIC8vICAgfSBlbHNlIHtcbiAgLy8gICAgIHRoaXMuZmlsdGVyRGVzaWduYXRpb25zTWV0YSA9IHRoaXMuZGVzaWduYXRpb25zTWV0YS5zbGljZSgwLCB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudClcbiAgLy8gICAgIHRoaXMuZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUgPWZhbHNlXG5cbiAgLy8gICAgIHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50ID0gdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnQ7XG4gIC8vICAgfVxuICAvLyAgIC8vIHRoaXMub3BlbkRlc2lnbmF0aW9uRHJvcGRvd24gPSB0cnVlXG4gIC8vIH1cblxuICAvLyBhc3luYyBnZXRNYXN0ZXJEZXNpZ25hdGlvbigpIHtcbiAgLy8gICB0aGlzLnNpZ251cFNlcnZpY2UuZ2V0T3JnUmVhZERhdGEodGhpcy51c2VyUHJvZmlsZU9iamVjdC5yb290T3JnSWQpLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcbiAgLy8gICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmZyYW1ld29ya2lkKSB7XG4gIC8vICAgICAgIHRoaXMuc2lnbnVwU2VydmljZS5nZXRGcmFtZXdvcmtJbmZvKHJlc3VsdC5mcmFtZXdvcmtpZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAvLyAgICAgICAgIGNvbnN0IGZyYW1ld29ya0RldGFpbHMgPSBfLmdldChyZXMsICdyZXN1bHQuZnJhbWV3b3JrJylcbiAgLy8gICAgICAgICBjb25zdCBjYXRlZ29yaWVzT2ZGcmFtZXdvcmsgPSBfLmdldChmcmFtZXdvcmtEZXRhaWxzLCAnY2F0ZWdvcmllcycsIFtdKVxuICAvLyAgICAgICAgIGNvbnN0IG9yZ2FuaXNhdGlvbnNMaXN0ID0gdGhpcy5nZXRUZXJtc0J5Q29kZShjYXRlZ29yaWVzT2ZGcmFtZXdvcmssICdvcmcnKVxuICAvLyAgICAgICAgIGNvbnN0IGRpc09yZGVyZWRMaXN0ID0gXy5nZXQob3JnYW5pc2F0aW9uc0xpc3QsICdbMF0uY2hpbGRyZW4nLCBbXSlcbiAgLy8gICAgICAgICB0aGlzLmRlc2lnbmF0aW9uc01ldGEgPSBfLnNvcnRCeShkaXNPcmRlcmVkTGlzdCwgJ25hbWUnKVxuICAvLyAgICAgICAgIHRoaXMuZmlsdGVyRGVzaWduYXRpb25zTWV0YSA9IHRoaXMuZGVzaWduYXRpb25zTWV0YS5zbGljZSgwLCB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudClcbiAgLy8gICAgICAgICBpZiAodGhpcy5jYW5TaG93RGVzaWduYXRpb24pIHtcbiAgLy8gICAgICAgICAgIGxldCBmaWVsZCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnZGVzaWduYXRpb24nKVxuICAvLyAgICAgICAgICAgaWYgKGZpZWxkICYmIGZpZWxkLnZhbHVlKSB7XG4gIC8vICAgICAgICAgICAgIGxldCBfdmFsdWUgPSBmaWVsZC52YWx1ZS50b0xvd2VyQ2FzZSgpXG4gIC8vICAgICAgICAgICAgIGlmICghdGhpcy5kZXNpZ25hdGlvbnNNZXRhLmZpbmQoKGQ6IGFueSkgPT4gZC5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IF92YWx1ZSkpIHtcbiAgLy8gICAgICAgICAgICAgICBmaWVsZC5wYXRjaFZhbHVlKCcnKVxuICAvLyAgICAgICAgICAgICB9XG4gIC8vICAgICAgICAgICB9XG4gIC8vICAgICAgICAgfVxuICAvLyAgICAgICB9LCAoZXJyb3I6IGFueSkgPT4ge1xuICAvLyAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxuICAvLyAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIG9jY3VycmVkOicsIGVycm9yKVxuICAvLyAgICAgICB9KVxuICAvLyAgICAgfVxuICAvLyAgIH0sIChlcnJvcjogYW55KSA9PiB7XG4gIC8vICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbiAgLy8gICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIG9jY3VycmVkOicsIGVycm9yKVxuICAvLyAgIH0pXG4gIC8vIH1cblxuICAvLyBwcml2YXRlIGdldFRlcm1zQnlDb2RlKGNhdGVnb3JpZXM6IGFueVtdLCBjb2RlOiBzdHJpbmcpIHtcbiAgLy8gICBjb25zdCBzZWxlY3RlZENhdGVnb3J5ID0gY2F0ZWdvcmllcy5maWx0ZXIoXG4gIC8vICAgICAoY2F0ZWdvcnk6IGFueSkgPT4gY2F0ZWdvcnkuY29kZSA9PT0gY29kZVxuICAvLyAgICk7XG4gIC8vICAgcmV0dXJuIF8uZ2V0KHNlbGVjdGVkQ2F0ZWdvcnksICdbMF0udGVybXMnLCBbXSk7XG4gIC8vIH1cblxuICBwcmV2ZW50Qmx1cihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgfVxuICBwcmV2ZW50TGFuZ3VhZ2VCbHVyKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICB9XG5cbiAgc2VsZWN0RGVzaWduYXRpb24oZGVzaWduYXRpb246IGFueSkge1xuICAgIHRoaXMudXNlckRldGFpbHNGb3JtLnBhdGNoVmFsdWUoeyBkZXNpZ25hdGlvbjogZGVzaWduYXRpb24gfSlcbiAgICBjb25zdCBmaWVsZENvbnRyb2wgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ290aGVyRGVzaWduYXRpb24nKVxuICAgIGlmICh0aGlzLnNob3dEb3B0Q2hhbmdlcyAmJiBkZXNpZ25hdGlvbiA9PT0gJ090aGVycycpIHtcbiAgICAgIGlmIChmaWVsZENvbnRyb2wpIHtcbiAgICAgICAgZmllbGRDb250cm9sLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcbiAgICAgICAgZmllbGRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgICAgfVxuICAgICAgdGhpcy5jYW5TaG93T3RoZXJEZXNpZ25hdGlvbiA9IHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGZpZWxkQ29udHJvbCkge1xuICAgICAgICBmaWVsZENvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKClcbiAgICAgICAgZmllbGRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgICAgfVxuICAgICAgdGhpcy5jYW5TaG93T3RoZXJEZXNpZ25hdGlvbiA9IGZhbHNlXG4gICAgfVxuICAgIHRoaXMub3BlbkRlc2lnbmF0aW9uRHJvcGRvd24gPSBmYWxzZVxuICB9XG5cblxuICBzZWxlY3RMYW5ndWFnZShsYW5ndWFnZTogYW55KSB7XG4gICAgdGhpcy51c2VyRGV0YWlsc0Zvcm0ucGF0Y2hWYWx1ZSh7IGRvbWljaWxlTWVkaXVtOiBsYW5ndWFnZSB9KVxuICAgIHRoaXMub3Blbkxhbmd1YWdlRHJvcGRvd24gPSBmYWxzZVxuICB9XG5cbiAgaXNFbWFpbEFsbG93ZWQoZW1haWw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGRvbWFpbiA9IGVtYWlsLnNwbGl0KCdAJylbMV1cbiAgICByZXR1cm4gZG9tYWluID8gdGhpcy5hcHByb3ZlZERvbWFpbkxpc3QuaW5jbHVkZXMoZG9tYWluKSA6IGZhbHNlXG4gIH1cblxuICBoYW5kbGVHZW5lcmF0ZUVtYWlsT1RQKHZlcmlmeVR5cGU/OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyh2ZXJpZnlUeXBlKVxuICAgIHRoaXMudXNlclByb2ZpbGVTZXJ2aWNlLmdldFdoaXRlTGlzdERvbWFpbigpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3VsdCAmJiByZXNwb25zZS5yZXN1bHQuZG9tYWlucyAmJiByZXNwb25zZS5yZXN1bHQuZG9tYWlucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuYXBwcm92ZWREb21haW5MaXN0ID0gcmVzcG9uc2UucmVzdWx0LmRvbWFpbnNcbiAgICAgICAgaWYgKHRoaXMuYXBwcm92ZWREb21haW5MaXN0ICYmIHRoaXMuYXBwcm92ZWREb21haW5MaXN0Lmxlbmd0aCAmJiB0aGlzLmFwcHJvdmVkRG9tYWluTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNFbWFpbEFsbG93ZWQodGhpcy51c2VyRGV0YWlsc0Zvcm0udmFsdWVbJ3ByaW1hcnlFbWFpbCddKSkge1xuICAgICAgICAgICAgdGhpcy5vdHBTZXJ2aWNlLnNlbmRFbWFpbE90cCh0aGlzLnVzZXJEZXRhaWxzRm9ybS52YWx1ZVsncHJpbWFyeUVtYWlsJ10pXG4gICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3lTdWJqZWN0JCkpXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoKF9yZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1haWxPdHBGb3JtLnJlc2V0KClcbiAgICAgICAgICAgICAgICBpZiAodmVyaWZ5VHlwZSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5lbWFpbE90cFNlbnQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0RW1haWxUaW1lcigpXG4gICAgICAgICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4odGhpcy5oYW5kbGVUcmFuc2xhdGVUbygnb3RwU2VudEVtYWlsJykpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LCAoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFlcnJvci5vaykge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKHRoaXMuaGFuZGxlVHJhbnNsYXRlVG8oJ2VtYWlsT1RQU2VudEZhaWwnKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4odGhpcy5oYW5kbGVUcmFuc2xhdGVUbygnZW1haWxBcHByb3ZlZFBvcHVwTXNnJykpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGhhbmRsZUdlbmVyYXRlT1RQKHZlcmlmeVR5cGU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm90cFNlcnZpY2Uuc2VuZE90cCh0aGlzLnVzZXJEZXRhaWxzRm9ybS52YWx1ZVsnbW9iaWxlJ10pXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95U3ViamVjdCQpKVxuICAgICAgLnN1YnNjcmliZSgoX3JlczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuc25hY2tCYXIub3Blbih0aGlzLmhhbmRsZVRyYW5zbGF0ZVRvKCdvdHBTZW50TW9iaWxlJykpXG4gICAgICAgIHRoaXMub3RwRm9ybS5yZXNldCgpXG4gICAgICAgIGlmICh2ZXJpZnlUeXBlKSB7XG4gICAgICAgICAgdGhpcy5vdHBTZW50ID0gdHJ1ZVxuICAgICAgICAgIHRoaXMuc3RhcnRUaW1lcigpXG4gICAgICAgICAgLy90aGlzLmhhbmRsZVZlcmlmeU9UUCh2ZXJpZnlUeXBlLCB0aGlzLnVzZXJEZXRhaWxzRm9ybS52YWx1ZVsnbW9iaWxlJ10pXG4gICAgICAgIH1cbiAgICAgIH0sIChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKCFlcnJvci5vaykge1xuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3Blbih0aGlzLmhhbmRsZVRyYW5zbGF0ZVRvKCdtb2JpbGVPVFBTZW50RmFpbCcpKVxuICAgICAgICB9XG4gICAgICB9KVxuICB9XG5cbiAgaGFuZGxlUmVzZW5kT1RQKCk6IHZvaWQge1xuICAgIHRoaXMudGltZUxlZnQgPSAxNTBcbiAgICB0aGlzLnNob3dSZXNlbmRPVFAgPSB0cnVlXG4gICAgdGhpcy5zdGFydFRpbWVyKClcbiAgICBsZXQgb3RwVmFsdWUkOiBhbnlcbiAgICBvdHBWYWx1ZSQgPSB0aGlzLm90cFNlcnZpY2UucmVzZW5kT3RwKHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydtb2JpbGUnXS52YWx1ZSlcblxuICAgIG90cFZhbHVlJC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3lTdWJqZWN0JCkpXG4gICAgICAuc3Vic2NyaWJlKChfcmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKHRoaXMuaGFuZGxlVHJhbnNsYXRlVG8oJ290cFNlbnRNb2JpbGUnKSlcbiAgICAgIH0sIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIGlmICghZXJyb3Iub2spIHtcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oXy5nZXQoZXJyb3IsICdlcnJvci5wYXJhbXMuZXJybXNnJykgfHwgJ1VuYWJsZSB0byByZXNlbmQgT1RQLCBwbGVhc2UgdHJ5IGFnYWluIGxhdGVyIScpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gIH1cblxuICBoYW5kbGVSZXNlbmRFbWFpbE9UUCgpOiB2b2lkIHtcbiAgICB0aGlzLmVtYWlsVGltZUxlZnQgPSAxNTBcbiAgICB0aGlzLnNob3dFbWFpbFJlc2VuZE9UUCA9IHRydWVcbiAgICB0aGlzLnN0YXJ0RW1haWxUaW1lcigpXG4gICAgbGV0IG90cFZhbHVlJDogYW55XG4gICAgb3RwVmFsdWUkID0gdGhpcy5vdHBTZXJ2aWNlLnNlbmRFbWFpbE90cCh0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1sncHJpbWFyeUVtYWlsJ10udmFsdWUpXG4gICAgb3RwVmFsdWUkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveVN1YmplY3QkKSlcbiAgICAgIC5zdWJzY3JpYmUoKF9yZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4odGhpcy5oYW5kbGVUcmFuc2xhdGVUbygnb3RwU2VudEVtYWlsJykpXG4gICAgICB9LCAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICBpZiAoIWVycm9yLm9rKSB7XG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKF8uZ2V0KGVycm9yLCAnZXJyb3IucGFyYW1zLmVycm1zZycpIHx8ICdVbmFibGUgdG8gcmVzZW5kIE9UUCwgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlciEnKVxuICAgICAgICB9XG4gICAgICB9KVxuICB9XG5cbiAgdmVyaWZ5RW1haWxPVFAoKTogdm9pZCB7XG4gICAgdGhpcy5vdHBTZXJ2aWNlLnZlcmlmeUVtYWlsT1RQKHRoaXMuZW1haWxPdHBGb3JtLmNvbnRyb2xzWydlT3RwJ10udmFsdWUsIHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydwcmltYXJ5RW1haWwnXS52YWx1ZSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3lTdWJqZWN0JCkpXG4gICAgICAuc3Vic2NyaWJlKChfcmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKHRoaXMuaGFuZGxlVHJhbnNsYXRlVG8oJ09UUFNlbnRTdWNjZXNzJykpXG4gICAgICAgIHRoaXMudmVyaWZ5RW1haWwgPSB0cnVlXG4gICAgICAgIHRoaXMuZVZlcmlmaWVkID0gdHJ1ZVxuICAgICAgICB0aGlzLmVtYWlsT3RwU2VudCA9IGZhbHNlXG4gICAgICAgIHRoaXMuY29udGV4dFRva2VuID0gX3Jlcy5yZXN1bHQuY29udGV4dFRva2VuXG4gICAgICAgIHRoaXMuZW1haWxPdHBGb3JtLnJlc2V0KClcbiAgICAgIH0sIChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKCFlcnJvci5vaykge1xuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihfLmdldChlcnJvciwgJ2Vycm9yLnBhcmFtcy5lcnJtc2cnKSB8fCB0aGlzLmhhbmRsZVRyYW5zbGF0ZVRvKCdPVFBWZXJpZnlGYWlsZWQnKSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgfVxuXG4gIHZlcmlmeU1vYmlsZU9UUCgpOiB2b2lkIHtcbiAgICB0aGlzLm90cFNlcnZpY2UudmVyaWZ5T1RQKHRoaXMub3RwRm9ybS5jb250cm9sc1snb3RwJ10udmFsdWUsIHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydtb2JpbGUnXS52YWx1ZSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3lTdWJqZWN0JCkpXG4gICAgICAuc3Vic2NyaWJlKChfcmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKHRoaXMuaGFuZGxlVHJhbnNsYXRlVG8oJ09UUFNlbnRTdWNjZXNzJykpXG4gICAgICAgIHRoaXMudmVyaWZ5TW9iaWxlID0gdHJ1ZVxuICAgICAgICB0aGlzLm1WZXJpZmllZCA9IHRydWVcbiAgICAgICAgdGhpcy5vdHBTZW50ID0gZmFsc2VcbiAgICAgICAgdGhpcy5vdHBGb3JtLnJlc2V0KClcbiAgICAgIH0sIChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKCFlcnJvci5vaykge1xuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihfLmdldChlcnJvciwgJ2Vycm9yLnBhcmFtcy5lcnJtc2cnKSB8fCB0aGlzLmhhbmRsZVRyYW5zbGF0ZVRvKCdPVFBWZXJpZnlGYWlsZWQnKSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgfVxuXG4gIHN0YXJ0VGltZXIoKSB7XG4gICAgdGhpcy5pbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnRpbWVMZWZ0ID4gMCkge1xuICAgICAgICB0aGlzLnRpbWVMZWZ0ID0gdGhpcy50aW1lTGVmdCAtIDFcbiAgICAgICAgaWYgKHRoaXMudGltZXJEaXYpIHtcbiAgICAgICAgICB0aGlzLnRpbWVyRGl2Lm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gYCR7TWF0aC5mbG9vcih0aGlzLnRpbWVMZWZ0IC8gNjApfW06ICR7dGhpcy50aW1lTGVmdCAlIDYwfXNgXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbClcbiAgICAgICAgdGhpcy5zaG93UmVzZW5kT1RQID0gdHJ1ZVxuICAgICAgfVxuICAgIH0sIDEwMDApXG4gIH1cblxuICBzdGFydEVtYWlsVGltZXIoKSB7XG4gICAgdGhpcy5lbWFpbEludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZW1haWxUaW1lTGVmdCA+IDApIHtcbiAgICAgICAgdGhpcy5lbWFpbFRpbWVMZWZ0ID0gdGhpcy5lbWFpbFRpbWVMZWZ0IC0gMVxuICAgICAgICBpZiAodGhpcy5lbWFpbFRpbWVyRGl2KSB7XG4gICAgICAgICAgdGhpcy5lbWFpbFRpbWVyRGl2Lm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gYCR7TWF0aC5mbG9vcih0aGlzLmVtYWlsVGltZUxlZnQgLyA2MCl9bTogJHt0aGlzLmVtYWlsVGltZUxlZnQgJSA2MH1zYFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGVhckludGVydmFsKHRoaXMuZW1haWxJbnRlcnZhbClcbiAgICAgICAgdGhpcy5zaG93RW1haWxSZXNlbmRPVFAgPSB0cnVlXG4gICAgICB9XG4gICAgfSwgMTAwMClcbiAgfVxuXG4gIHB1YmxpYyBjaGVja0FmdGVyU3VibWl0KF9lOiBhbnkpIHtcbiAgICAvLyB0aGlzLnJlbmRlclN1YmplY3QubmV4dCgpXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmxvZygnRm9ybSBpcyBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5JylcbiAgICBpZiAodGhpcy5iYXRjaERldGFpbHMuYmF0Y2hBdHRyaWJ1dGVzLnVzZXJQcm9maWxlRmlsZWRzICYmXG4gICAgICB0aGlzLmJhdGNoRGV0YWlscy5iYXRjaEF0dHJpYnV0ZXMudXNlclByb2ZpbGVGaWxlZHMgPT09IFwiQXZhaWxhYmxlIHVzZXIgZmlsbGVkIGlHT1QgcHJvZmlsZVwiKSB7XG4gICAgICB0aGlzLnN1Ym1pdFN1cmV2eSh0cnVlKVxuICAgIH1cbiAgICBpZiAodGhpcy5iYXRjaERldGFpbHMuYmF0Y2hBdHRyaWJ1dGVzLnVzZXJQcm9maWxlRmlsZWRzICYmICF0aGlzLnVwZGF0ZVByb2ZpbGUgJiZcbiAgICAgICh0aGlzLmJhdGNoRGV0YWlscy5iYXRjaEF0dHJpYnV0ZXMudXNlclByb2ZpbGVGaWxlZHMgPT09IFwiRnVsbCBpR09UIHByb2ZpbGVcIiB8fFxuICAgICAgICB0aGlzLmJhdGNoRGV0YWlscy5iYXRjaEF0dHJpYnV0ZXMudXNlclByb2ZpbGVGaWxlZHMgPT09IFwiQ3VzdG9tIGlHT1QgcHJvZmlsZVwiKSkge1xuICAgICAgdGhpcy5zdWJtaXRTdXJldnkodHJ1ZSlcbiAgICB9XG4gICAgdGhpcy5vcGVuU25hY2tiYXIoJ0Zvcm0gaXMgc3VibWl0dGVkIHN1Y2Nlc3NmdWxseScpXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodHJ1ZSlcbiAgfVxuXG4gIGNsb3NlUG9wdXAoKSB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodHJ1ZSlcbiAgfVxuXG4gIHByaXZhdGUgb3BlblNuYWNrYmFyKHByaW1hcnlNc2c6IHN0cmluZywgZHVyYXRpb246IG51bWJlciA9IDUwMDApIHtcbiAgICB0aGlzLnNuYWNrQmFyLm9wZW4ocHJpbWFyeU1zZywgJ1gnLCB7XG4gICAgICBkdXJhdGlvbixcbiAgICB9KVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5mb3JtSWQgPSBfLmdldCh0aGlzLmRhdGEsICdiYXRjaERhdGEuYmF0Y2hBdHRyaWJ1dGVzLnByb2ZpbGVTdXJ2ZXlJZCcpXG4gICAgdGhpcy5nZXRGb3JtRGV0YWlscygpXG4gICAgdGhpcy5zZXRWYWx1ZUNoYW5nZUZ1bmN0aW9ucygpXG4gICAgdGhpcy5mZXRjaENhZHJlRGF0YSgpXG4gICAgdGhpcy5nZXRHcm91cERhdGEoKVxuICAgIHRoaXMuZ2V0UGVuZGluZ0RldGFpbHMoKVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gdGhpcy5sb2FkRGVzaWduYXRpb25zKClcbiAgICAgIHRoaXMuY2hlY2tTZWxlY3RlZE9yZ0hhc0Rlc2lnbmF0aW9ucygpO1xuICAgICAgLy90aGlzLmdldE1hc3RlckRlc2lnbmF0aW9uKClcbiAgICAgIHRoaXMuZ2V0TWFzdGVyTGFuZ3VhZ2UoKVxuICAgIH0sIDUwMClcbiAgfVxuXG4gIGdldEZvcm1EZXRhaWxzKCkge1xuICAgIGlmICh0aGlzLmZvcm1JZCkge1xuICAgICAgdGhpcy5wcm9maWxlVjJTdmMuZ2V0Rm9ybVYyQnlJRCh0aGlzLmZvcm1JZCkuc3Vic2NyaWJlKChyZXNwb25jZTogYW55KSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25jZSkge1xuICAgICAgICAgIHRoaXMuZm9ybXNEZXRpbHMgPSBfLmdldChyZXNwb25jZSwgJ3Jlc3VsdC5yZXNwb25zZScsIHt9KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHNldFZhbHVlQ2hhbmdlRnVuY3Rpb25zKCkge1xuICAgIGNvbnN0IHNlYXJjaERlc2lnbmF0aW9uQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnc2VhcmNoRGVzaWduYXRpb24nKVxuICAgIGlmIChzZWFyY2hEZXNpZ25hdGlvbkNvbnRyb2wpIHtcbiAgICAgIGxldCBzZXR0aW5nVmFsdWVDaGFuZ2UgPSB0cnVlXG4gICAgICBzZWFyY2hEZXNpZ25hdGlvbkNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSgzMDApLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzdGFydFdpdGgoJycpLFxuICAgICAgKS5zdWJzY3JpYmUoc2VhcmNoVGV4dCA9PiB7XG4gICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbnNPZmZzZXQgPSAwXG4gICAgICAgICAgaWYgKHNlYXJjaFRleHQgJiYgc2VhcmNoVGV4dC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdGhpcy5kZXNpZ25hdGlvblNlYXJjaFRleHQgPSBzZWFyY2hUZXh0XG4gICAgICAgICAgICB0aGlzLmdldGRlc2lnbmF0aW9uc01ldGEoKVxuICAgICAgICAgIH0gZWxzZSBpZiAoIXNlYXJjaFRleHQpIHtcbiAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uU2VhcmNoVGV4dCA9IHNlYXJjaFRleHRcbiAgICAgICAgICAgIGlmKCFzZXR0aW5nVmFsdWVDaGFuZ2UpIHtcbiAgICAgICAgICAgICAgdGhpcy5nZXRkZXNpZ25hdGlvbnNNZXRhKCkgXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpXG4gICAgICAgICAgfVxuICAgICAgICAgIHNldHRpbmdWYWx1ZUNoYW5nZSA9IGZhbHNlXG4gICAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZmV0Y2hDYWRyZURhdGEoKSB7XG4gICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciArIDFcbiAgICB0aGlzLnByb2ZpbGVWMlN2Yy5mZXRjaENhZHJlKCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyIC0gMVxuICAgICAgY29uc3QgdmFsdWUgPSByZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHQgJiYgcmVzcG9uc2UucmVzdWx0LnJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3VsdC5yZXNwb25zZS52YWx1ZVxuICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmNpdmlsU2VydmljZVR5cGUpIHtcbiAgICAgICAgdGhpcy5jaXZpbFNlcnZpY2VEYXRhID0gdmFsdWUuY2l2aWxTZXJ2aWNlVHlwZVxuICAgICAgICB0aGlzLmNpdmlsU2VydmljZVR5cGVzID0gdGhpcy5jaXZpbFNlcnZpY2VEYXRhLmNpdmlsU2VydmljZVR5cGVMaXN0Lm1hcCgoc2VydmljZTogYW55KSA9PiBzZXJ2aWNlLm5hbWUpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGdldElzQ2FkcmVTdGF0dXModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzQ2FkcmVTdGF0dXMgPSB2YWx1ZVxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy51c2VyRGV0YWlsc0Zvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIHR5cGVPZkNpdmlsU2VydmljZTogJycsXG4gICAgICAgIHNlcnZpY2VUeXBlOiAnJyxcbiAgICAgICAgY2FkcmVOYW1lOiAnJyxcbiAgICAgICAgY2FkcmVCYXRjaDogJycsXG4gICAgICAgIGNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHk6ICcnLFxuICAgICAgfSlcbiAgICAgIHRoaXMuYWRkVmFsaWRhdG9ycygpXG4gICAgfVxuXG4gICAgZWxzZSB7XG4gICAgICB0aGlzLnNob3dCYXRjaEZvck5vQ2FkcmUgPSBmYWxzZVxuICAgICAgdGhpcy5yZW1vdmVWYWxpZGF0b3JzKClcbiAgICB9XG4gIH1cblxuICBnZXRBbGxFcnJvcnMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZXM6IHN0cmluZ1tdID0gW107XG4gICAgT2JqZWN0LmtleXModGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgY29uc3QgY29udHJvbEVycm9ycyA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzW2tleV0uZXJyb3JzO1xuICAgICAgaWYgKGNvbnRyb2xFcnJvcnMpIHtcbiAgICAgICAgT2JqZWN0LmtleXMoY29udHJvbEVycm9ycykuZm9yRWFjaCgoZXJyb3JLZXkpID0+IHtcbiAgICAgICAgICBzd2l0Y2ggKGVycm9yS2V5KSB7XG4gICAgICAgICAgICBjYXNlICdyZXF1aXJlZCc6XG4gICAgICAgICAgICAgIGVycm9yTWVzc2FnZXMucHVzaChgJHtrZXl9IGlzIHJlcXVpcmVkLmApO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21pbmxlbmd0aCc6XG4gICAgICAgICAgICAgIGNvbnN0IHJlcXVpcmVkTGVuZ3RoID0gY29udHJvbEVycm9yc1snbWlubGVuZ3RoJ10ucmVxdWlyZWRMZW5ndGg7XG4gICAgICAgICAgICAgIGVycm9yTWVzc2FnZXMucHVzaChgJHtrZXl9IG11c3QgYmUgYXQgbGVhc3QgJHtyZXF1aXJlZExlbmd0aH0gY2hhcmFjdGVycyBsb25nLmApO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2VtYWlsJzpcbiAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlcy5wdXNoKGBQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzLmApO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIC8vIEFkZCBtb3JlIGNhc2VzIGZvciBvdGhlciB2YWxpZGF0b3JzIGFzIG5lZWRlZFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGVycm9yTWVzc2FnZXM7XG4gIH1cblxuICBhZGRWYWxpZGF0b3JzKCkge1xuICAgIGNvbnN0IGZpZWxkQ29udHJvbDAgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2lzQ2FkcmUnKVxuICAgIGlmIChmaWVsZENvbnRyb2wwKSB7XG4gICAgICBmaWVsZENvbnRyb2wwLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcbiAgICAgIGZpZWxkQ29udHJvbDAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgfVxuICAgIGNvbnN0IGZpZWxkQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgndHlwZU9mQ2l2aWxTZXJ2aWNlJylcbiAgICBpZiAoZmllbGRDb250cm9sKSB7XG4gICAgICBmaWVsZENvbnRyb2wuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xuICAgICAgZmllbGRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgIH1cbiAgICBjb25zdCBmaWVsZENvbnRyb2wxID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdzZXJ2aWNlVHlwZScpXG4gICAgaWYgKGZpZWxkQ29udHJvbDEpIHtcbiAgICAgIGZpZWxkQ29udHJvbDEuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xuICAgICAgZmllbGRDb250cm9sMS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICB9XG4gICAgY29uc3QgZmllbGRDb250cm9sMyA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnY2FkcmVCYXRjaCcpXG4gICAgaWYgKGZpZWxkQ29udHJvbDMpIHtcbiAgICAgIGZpZWxkQ29udHJvbDMuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xuICAgICAgZmllbGRDb250cm9sMy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICB9XG4gIH1cblxuICByZW1vdmVWYWxpZGF0b3JzKCkge1xuICAgIGNvbnN0IGZpZWxkQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgndHlwZU9mQ2l2aWxTZXJ2aWNlJylcbiAgICBpZiAoZmllbGRDb250cm9sKSB7XG4gICAgICBmaWVsZENvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKClcbiAgICAgIGZpZWxkQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICB9XG4gICAgY29uc3QgZmllbGRDb250cm9sMSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnc2VydmljZVR5cGUnKVxuICAgIGlmIChmaWVsZENvbnRyb2wxKSB7XG4gICAgICBmaWVsZENvbnRyb2wxLmNsZWFyVmFsaWRhdG9ycygpXG4gICAgICBmaWVsZENvbnRyb2wxLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgIH1cbiAgICBjb25zdCBmaWVsZENvbnRyb2wyID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdjYWRyZU5hbWUnKVxuICAgIGlmIChmaWVsZENvbnRyb2wyKSB7XG4gICAgICBmaWVsZENvbnRyb2wyLmNsZWFyVmFsaWRhdG9ycygpXG4gICAgICBmaWVsZENvbnRyb2wyLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgIH1cbiAgICBjb25zdCBmaWVsZENvbnRyb2wzID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdjYWRyZUJhdGNoJylcbiAgICBpZiAoZmllbGRDb250cm9sMykge1xuICAgICAgZmllbGRDb250cm9sMy5jbGVhclZhbGlkYXRvcnMoKVxuICAgICAgZmllbGRDb250cm9sMy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICB9XG4gIH1cblxuICBnZXRTZXJ2aWNlKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBzZXJ2aWNlVHlwZUNvbnRyb2wgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ3NlcnZpY2VUeXBlJylcbiAgICBjb25zdCBjYWRyZUNvbnRyb2wgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2NhZHJlTmFtZScpXG4gICAgY29uc3QgYmF0Y2hDb250cm9sID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdjYWRyZUJhdGNoJylcbiAgICBjb25zdCBjYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5Q29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eScpXG5cbiAgICBpZiAoc2VydmljZVR5cGVDb250cm9sKSB7IHNlcnZpY2VUeXBlQ29udHJvbC5yZXNldCgpIH1cbiAgICBpZiAoY2FkcmVDb250cm9sKSB7IGNhZHJlQ29udHJvbC5yZXNldCgpIH1cbiAgICBpZiAoYmF0Y2hDb250cm9sKSB7IGJhdGNoQ29udHJvbC5yZXNldCgpIH1cbiAgICBpZiAoY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eUNvbnRyb2wpIHsgY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eUNvbnRyb2wucmVzZXQoKSB9XG5cbiAgICB0aGlzLnNlcnZpY2VUeXBlID0gdGhpcy5jaXZpbFNlcnZpY2VEYXRhLmNpdmlsU2VydmljZVR5cGVMaXN0LmZpbmQoKGVsZW1lbnQ6IGFueSkgPT4gZWxlbWVudC5uYW1lID09PSBldmVudClcbiAgICB0aGlzLnNlcnZpY2VUeXBlID0gdGhpcy5jaXZpbFNlcnZpY2VEYXRhLmNpdmlsU2VydmljZVR5cGVMaXN0LmZpbmQoKGVsZW1lbnQ6IGFueSkgPT4gZWxlbWVudC5uYW1lID09PSBldmVudClcbiAgICBpZiAodGhpcy5zZXJ2aWNlVHlwZSkge1xuICAgICAgdGhpcy5zZXJ2aWNlTGlzdERhdGEgPSB0aGlzLnNlcnZpY2VUeXBlLnNlcnZpY2VMaXN0XG4gICAgICB0aGlzLnNlcnZpY2VOYW1lID0gdGhpcy5zZXJ2aWNlTGlzdERhdGEubWFwKChzZXJ2aWNlOiBhbnkpID0+IHNlcnZpY2UubmFtZSlcbiAgICAgIHRoaXMuc2VydmljZUlkID0gdGhpcy5zZXJ2aWNlVHlwZS5pZFxuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJ1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdTZXJ2aWNlIFR5cGUgbm90IGZvdW5kJ1xuICAgIH1cbiAgfVxuXG4gIG9uU2VydmljZVNlbGVjdChldmVudDogYW55KSB7XG4gICAgY29uc3QgY2FkcmVDb250cm9sID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdjYWRyZU5hbWUnKVxuICAgIGNvbnN0IGJhdGNoQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnY2FkcmVCYXRjaCcpXG4gICAgY29uc3QgY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eUNvbnRyb2wgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2NhZHJlQ29udHJvbGxpbmdBdXRob3JpdHknKVxuICAgIGlmIChjYWRyZUNvbnRyb2wpIHsgY2FkcmVDb250cm9sLnJlc2V0KCkgfVxuICAgIGlmIChiYXRjaENvbnRyb2wpIHsgYmF0Y2hDb250cm9sLnJlc2V0KCkgfVxuICAgIGlmIChjYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5Q29udHJvbCkgeyBjYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5Q29udHJvbC5yZXNldCgpIH1cbiAgICB0aGlzLnNlbGVjdGVkU2VydmljZU5hbWUgPSBldmVudC52YWx1ZVxuICAgIGlmICh0aGlzLnNlcnZpY2VMaXN0RGF0YSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFNlcnZpY2UgPSB0aGlzLnNlcnZpY2VMaXN0RGF0YS5maW5kKChzZXJ2aWNlOiBhbnkpID0+IHNlcnZpY2UubmFtZSA9PT0gdGhpcy5zZWxlY3RlZFNlcnZpY2VOYW1lKVxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuY2l2aWxTZXJ2aWNlTmFtZSA9IHRoaXMuc2VsZWN0ZWRTZXJ2aWNlLm5hbWVcbiAgICAgICAgdGhpcy5jaXZpbFNlcnZpY2VJZCA9IHRoaXMuc2VsZWN0ZWRTZXJ2aWNlLmlkXG4gICAgICAgIHRoaXMuY2FkcmUgPSB0aGlzLnNlbGVjdGVkU2VydmljZS5jYWRyZUxpc3QgPyB0aGlzLnNlbGVjdGVkU2VydmljZS5jYWRyZUxpc3QubWFwKChjYWRyZTogYW55KSA9PiBjYWRyZS5uYW1lKSA6IFtdXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnNlbGVjdGVkU2VydmljZSAmJiB0aGlzLnNlbGVjdGVkU2VydmljZS5jYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5KSB7XG4gICAgICB0aGlzLmNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHkgPSB0aGlzLnNlbGVjdGVkU2VydmljZS5jYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eSA9ICdOQSdcbiAgICB9XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRTZXJ2aWNlICYmIHRoaXMuc2VsZWN0ZWRTZXJ2aWNlLmNhZHJlTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuc2hvd0JhdGNoRm9yTm9DYWRyZSA9IHRydWVcbiAgICAgIHRoaXMuc3RhcnRCYXRjaCA9IHRoaXMuc2VsZWN0ZWRTZXJ2aWNlLmNvbW1vbkJhdGNoU3RhcnRZZWFyXG4gICAgICB0aGlzLmVuZEJhdGNoID0gdGhpcy5zZWxlY3RlZFNlcnZpY2UuY29tbW9uQmF0Y2hFbmRZZWFyXG4gICAgICB0aGlzLmV4Y2x1c2lvblllYXIgPSB0aGlzLnNlbGVjdGVkU2VydmljZS5jb21tb25CYXRjaEV4Y2x1c2lvblllYXJMaXN0XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZVxuICAgICAgdGhpcy55ZWFyQXJyYXkgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0aGlzLmVuZEJhdGNoIC0gdGhpcy5zdGFydEJhdGNoICsgMSB9LCAoXywgaW5kZXgpID0+IHRoaXMuc3RhcnRCYXRjaCArIGluZGV4KVxuICAgICAgICAuZmlsdGVyKHllYXIgPT4gIXRoaXMuZXhjbHVzaW9uWWVhci5pbmNsdWRlcyh5ZWFyKSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93QmF0Y2hGb3JOb0NhZHJlID0gZmFsc2VcbiAgICB9XG4gIH1cblxuICBvbkNhZHJlU2VsZWN0KGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBiYXRjaENvbnRyb2wgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2NhZHJlQmF0Y2gnKVxuICAgIGNvbnN0IGNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHlDb250cm9sID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdjYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5JylcblxuICAgIGlmIChiYXRjaENvbnRyb2wpIHsgYmF0Y2hDb250cm9sLnJlc2V0KCkgfVxuICAgIGlmIChjYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5Q29udHJvbCkgeyBjYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5Q29udHJvbC5yZXNldCgpIH1cbiAgICB0aGlzLnNlbGVjdGVkQ2FkcmVOYW1lID0gZXZlbnRcbiAgICBpZiAodGhpcy5zZWxlY3RlZFNlcnZpY2UpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDYWRyZSA9IHRoaXMuc2VsZWN0ZWRTZXJ2aWNlLmNhZHJlTGlzdC5maW5kKChjYWRyZTogYW55KSA9PiBjYWRyZS5uYW1lID09PSB0aGlzLnNlbGVjdGVkQ2FkcmVOYW1lKVxuICAgICAgdGhpcy5zdGFydEJhdGNoID0gdGhpcy5zZWxlY3RlZENhZHJlID8gdGhpcy5zZWxlY3RlZENhZHJlLnN0YXJ0QmF0Y2hZZWFyIDogJydcbiAgICAgIHRoaXMuZW5kQmF0Y2ggPSB0aGlzLnNlbGVjdGVkQ2FkcmUgPyB0aGlzLnNlbGVjdGVkQ2FkcmUuZW5kQmF0Y2hZZWFyIDogJydcbiAgICAgIHRoaXMuZXhjbHVzaW9uWWVhciA9IHRoaXMuc2VsZWN0ZWRDYWRyZSA/IHRoaXMuc2VsZWN0ZWRDYWRyZS5leGN1bHNpb25ZZWFyTGlzdCA6ICcnXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZVxuICAgICAgdGhpcy55ZWFyQXJyYXkgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0aGlzLmVuZEJhdGNoIC0gdGhpcy5zdGFydEJhdGNoICsgMSB9LCAoXywgaW5kZXgpID0+IHRoaXMuc3RhcnRCYXRjaCArIGluZGV4KVxuICAgICAgICAuZmlsdGVyKHllYXIgPT4gIXRoaXMuZXhjbHVzaW9uWWVhci5pbmNsdWRlcyh5ZWFyKSlcbiAgICAgIHRoaXMuY2FkcmVJZCA9IHRoaXMuc2VsZWN0ZWRDYWRyZSA/IHRoaXMuc2VsZWN0ZWRDYWRyZS5pZCA6ICcnXG4gICAgfVxuXG4gIH1cblxuICBnZXRQZW5kaW5nRGV0YWlscygpIHtcbiAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyICsgMVxuICAgIHRoaXMucHJvZmlsZVYyU3ZjLmZldGNoQXBwcm92YWxEZXRhaWxzKCkuc3Vic2NyaWJlKChyZXNwOiBhbnkpID0+IHtcbiAgICAgIHRoaXMuYWRkTG9hZGVyID0gdGhpcy5hZGRMb2FkZXIgLSAxXG4gICAgICBpZiAocmVzcCAmJiByZXNwLnJlc3VsdCAmJiByZXNwLnJlc3VsdC5kYXRhKSB7XG4gICAgICAgIHRoaXMucGVuZGluZ0ZpbGVkcyA9IHJlc3AucmVzdWx0LmRhdGFcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ0ZpbGVkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5wZW5kaW5nRmlsZWRzLmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHVzZXJbJ2dyb3VwJ10pIHtcbiAgICAgICAgICAgICAgbGV0IGN0cmwgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2dyb3VwJylcbiAgICAgICAgICAgICAgaWYgKGN0cmwpIHtcbiAgICAgICAgICAgICAgICBjdHJsLnBhdGNoVmFsdWUoeyBncm91cDogdXNlclsnZ3JvdXAnXSB9KVxuICAgICAgICAgICAgICAgIHRoaXMucEdyb3VwID0gdXNlclsnZ3JvdXAnXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodXNlclsnZGVzaWduYXRpb24nXSkge1xuICAgICAgICAgICAgICBsZXQgY3RybCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnZGVzaWduYXRpb24nKVxuICAgICAgICAgICAgICBpZiAoY3RybCkge1xuICAgICAgICAgICAgICAgIGN0cmwucGF0Y2hWYWx1ZSh7IGRlc2lnbmF0aW9uOiB1c2VyWydkZXNpZ25hdGlvbiddIH0pXG4gICAgICAgICAgICAgICAgdGhpcy5wRGVzaWduYXRpb24gPSB1c2VyWydkZXNpZ25hdGlvbiddXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlXG4gICAgICB0aGlzLmRlZmluZUZvcm1BdHRyaWJ1dGVzKClcbiAgICB9LCBlcnJvciA9PiB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tY29uc29sZVxuICAgICAgY29uc29sZS5sb2coZXJyb3IpXG4gICAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyIC0gMVxuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZVxuICAgIH0pXG4gIH1cblxuICBkZWZpbmVGb3JtQXR0cmlidXRlcygpIHtcbiAgICBpZiAodGhpcy5iYXRjaERldGFpbHMuYmF0Y2hBdHRyaWJ1dGVzLnVzZXJQcm9maWxlRmlsZWRzICYmXG4gICAgICB0aGlzLmJhdGNoRGV0YWlscy5iYXRjaEF0dHJpYnV0ZXMuYnBFbnJvbE1hbmRhdG9yeVByb2ZpbGVGaWVsZHMpIHtcbiAgICAgIGxldCBjdXN0b21BdHRyID0gdGhpcy5iYXRjaERldGFpbHMuYmF0Y2hBdHRyaWJ1dGVzLmJwRW5yb2xNYW5kYXRvcnlQcm9maWxlRmllbGRzXG4gICAgICBpZiAodGhpcy5maW5kQXR0cihjdXN0b21BdHRyLCAnbmFtZScpKSB7XG4gICAgICAgIHRoaXMuY2FuU2hvd05hbWUgPSB0cnVlXG4gICAgICAgIHRoaXMuc2hvd25hbWUgPSB0cnVlXG4gICAgICAgIGNvbnN0IGZpZWxkQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnbmFtZScpXG4gICAgICAgIGlmIChmaWVsZENvbnRyb2wpIHtcbiAgICAgICAgICBmaWVsZENvbnRyb2wuc2V0VmFsdWUodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuZmlyc3RuYW1lKVxuICAgICAgICAgIGZpZWxkQ29udHJvbC5kaXNhYmxlKClcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wcm9maWxlRm9ybVR5cGUgPT09ICdBdmFpbGFibGUgdXNlciBmaWxsZWQgaUdPVCBwcm9maWxlJyAmJlxuICAgICAgICAgICF0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5maXJzdG5hbWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5jYW5TaG93TmFtZSA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5zaG93bmFtZSA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZmluZEF0dHIoY3VzdG9tQXR0ciwgJ2VtYWlsJykpIHtcbiAgICAgICAgdGhpcy5jYW5TaG93RW1haWwgPSB0cnVlXG4gICAgICAgIGNvbnN0IGZpZWxkQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgncHJpbWFyeUVtYWlsJylcbiAgICAgICAgaWYgKGZpZWxkQ29udHJvbCkge1xuICAgICAgICAgIGZpZWxkQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5wcmltYXJ5RW1haWwpXG4gICAgICAgICAgaWYgKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLnByaW1hcnlFbWFpbCkge1xuICAgICAgICAgICAgZmllbGRDb250cm9sLnNldFZhbHVlKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLnByaW1hcnlFbWFpbClcbiAgICAgICAgICAgIHRoaXMuZVZlcmlmaWVkID0gdHJ1ZVxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9maWxlRm9ybVR5cGUgPT09ICdBdmFpbGFibGUgdXNlciBmaWxsZWQgaUdPVCBwcm9maWxlJykge1xuICAgICAgICAgICAgdGhpcy5zaG93RW1haWwgPSBmYWxzZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3dFbWFpbCA9IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZVZlcmlmaWVkID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5maW5kQXR0cihjdXN0b21BdHRyLCAnb3JnYW5pc2F0aW9uJykpIHtcbiAgICAgICAgdGhpcy5jYW5TaG93T3JnID0gdHJ1ZVxuICAgICAgICB0aGlzLnNob3dPcmcgPSB0cnVlXG4gICAgICAgIGNvbnN0IGZpZWxkQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnb3JnYW5pc2F0aW9uJylcbiAgICAgICAgaWYgKGZpZWxkQ29udHJvbCkge1xuICAgICAgICAgIGZpZWxkQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLmRlcGFydG1lbnROYW1lKVxuICAgICAgICAgIGZpZWxkQ29udHJvbC5kaXNhYmxlKClcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wcm9maWxlRm9ybVR5cGUgPT09ICdBdmFpbGFibGUgdXNlciBmaWxsZWQgaUdPVCBwcm9maWxlJyAmJlxuICAgICAgICAgICF0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLmRlcGFydG1lbnROYW1lXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuY2FuU2hvd09yZyA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5zaG93T3JnID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5maW5kQXR0cihjdXN0b21BdHRyLCAnZ3JvdXAnKSkge1xuICAgICAgICB0aGlzLmNhblNob3dHcm91cCA9IHRydWVcbiAgICAgICAgdGhpcy5zaG93R3JvdXAgPSB0cnVlXG4gICAgICAgIGNvbnN0IGZpZWxkQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnZ3JvdXAnKVxuICAgICAgICBpZiAoZmllbGRDb250cm9sKSB7XG4gICAgICAgICAgaWYgKHRoaXMucEdyb3VwKSB7XG4gICAgICAgICAgICBmaWVsZENvbnRyb2wuc2V0VmFsdWUodGhpcy5wR3JvdXApXG4gICAgICAgICAgICAvLyBpZiAodGhpcy5wcm9maWxlRm9ybVR5cGUgPT09ICdBdmFpbGFibGUgdXNlciBmaWxsZWQgaUdPVCBwcm9maWxlJykge1xuICAgICAgICAgICAgLy8gICB0aGlzLmNhblNob3dHcm91cCA9IHRydWVcbiAgICAgICAgICAgIC8vICAgdGhpcy5zaG93R3JvdXAgPSB0cnVlXG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHMgJiZcbiAgICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wcm9mZXNzaW9uYWxEZXRhaWxzLmxlbmd0aCAmJlxuICAgICAgICAgICAgICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHNbMF0uZ3JvdXBcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBmaWVsZENvbnRyb2wuc2V0VmFsdWUodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wcm9mZXNzaW9uYWxEZXRhaWxzWzBdLmdyb3VwKVxuICAgICAgICAgICAgICAvLyBpZiAodGhpcy5wcm9maWxlRm9ybVR5cGUgPT09ICdBdmFpbGFibGUgdXNlciBmaWxsZWQgaUdPVCBwcm9maWxlJykge1xuICAgICAgICAgICAgICAvLyAgIHRoaXMuY2FuU2hvd0dyb3VwID0gZmFsc2VcbiAgICAgICAgICAgICAgLy8gICB0aGlzLnNob3dHcm91cCA9IGZhbHNlXG4gICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZmllbGRDb250cm9sLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKVxuICAgICAgICAgIGZpZWxkQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZmluZEF0dHIoY3VzdG9tQXR0ciwgJ2Rlc2lnbmF0aW9uJykpIHtcbiAgICAgICAgdGhpcy5jYW5TaG93RGVzaWduYXRpb24gPSB0cnVlXG4gICAgICAgIHRoaXMuc2hvd0Rlc2lnbmF0aW9uID0gdHJ1ZVxuICAgICAgICBjb25zdCBmaWVsZENvbnRyb2wgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2Rlc2lnbmF0aW9uJylcbiAgICAgICAgaWYgKGZpZWxkQ29udHJvbCkge1xuICAgICAgICAgIGlmICh0aGlzLnBEZXNpZ25hdGlvbikge1xuICAgICAgICAgICAgZmllbGRDb250cm9sLnBhdGNoVmFsdWUodGhpcy5wRGVzaWduYXRpb24pXG4gICAgICAgICAgICAvLyBpZiAodGhpcy5wcm9maWxlRm9ybVR5cGUgPT09ICdBdmFpbGFibGUgdXNlciBmaWxsZWQgaUdPVCBwcm9maWxlJykge1xuICAgICAgICAgICAgLy8gICB0aGlzLmNhblNob3dEZXNpZ25hdGlvbiA9IHRydWVcbiAgICAgICAgICAgIC8vICAgdGhpcy5zaG93RGVzaWduYXRpb24gPSB0cnVlXG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHMgJiZcbiAgICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wcm9mZXNzaW9uYWxEZXRhaWxzLmxlbmd0aCAmJlxuICAgICAgICAgICAgICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHNbMF0uZGVzaWduYXRpb24pIHtcbiAgICAgICAgICAgICAgZmllbGRDb250cm9sLnBhdGNoVmFsdWUodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wcm9mZXNzaW9uYWxEZXRhaWxzWzBdLmRlc2lnbmF0aW9uKVxuICAgICAgICAgICAgICAvLyBpZiAodGhpcy5wcm9maWxlRm9ybVR5cGUgPT09ICdBdmFpbGFibGUgdXNlciBmaWxsZWQgaUdPVCBwcm9maWxlJykge1xuICAgICAgICAgICAgICAvLyAgIHRoaXMuY2FuU2hvd0Rlc2lnbmF0aW9uID0gZmFsc2VcbiAgICAgICAgICAgICAgLy8gICB0aGlzLnNob3dEZXNpZ25hdGlvbiA9IGZhbHNlXG4gICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZmllbGRDb250cm9sLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKVxuICAgICAgICAgIGZpZWxkQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZmluZEF0dHIoY3VzdG9tQXR0ciwgJ2VtcGxveWVlQ29kZScpKSB7XG4gICAgICAgIHRoaXMuY2FuU2hvd0VtcGxveWVlQ29kZSA9IHRydWVcbiAgICAgICAgY29uc3QgY29udHJsID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdlbXBsb3llZUNvZGUnKVxuICAgICAgICBpZiAoY29udHJsKSB7XG4gICAgICAgICAgaWYgKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuZW1wbG95bWVudERldGFpbHMuZW1wbG95ZWVDb2RlKSB7XG4gICAgICAgICAgICBjb250cmwuc2V0VmFsdWUodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlscy5lbXBsb3llZUNvZGUpXG4gICAgICAgICAgICBjb250cmwuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5wYXR0ZXJuKEVNUF9JRF9QQVRURVJOKV0pXG4gICAgICAgICAgICBjb250cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb2ZpbGVGb3JtVHlwZSA9PT0gJ0F2YWlsYWJsZSB1c2VyIGZpbGxlZCBpR09UIHByb2ZpbGUnKSB7XG4gICAgICAgICAgICB0aGlzLmNhblNob3dFbXBsb3llZUNvZGUgPSBmYWxzZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3dFbXBsb3llZUNvZGUgPSB0cnVlXG4gICAgICAgICAgICBjb250cmwuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5wYXR0ZXJuKEVNUF9JRF9QQVRURVJOKV0pO1xuICAgICAgICAgICAgY29udHJsLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5maW5kQXR0cihjdXN0b21BdHRyLCAnbW9iaWxlJykpIHtcbiAgICAgICAgdGhpcy5jYW5zaG93TW9iaWxlID0gdHJ1ZVxuICAgICAgICBjb25zdCBjb250cmwgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ21vYmlsZScpXG4gICAgICAgIGlmIChjb250cmwpIHtcbiAgICAgICAgICBpZiAodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMubW9iaWxlICYmIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLnBob25lVmVyaWZpZWQpIHtcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWx1ZSh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5tb2JpbGUpXG4gICAgICAgICAgICB0aGlzLm1WZXJpZmllZCA9IHRydWVcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLm1pbkxlbmd0aCgxMCksIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEwKSwgVmFsaWRhdG9ycy5wYXR0ZXJuKE1PQklMRV9QQVRURVJOKV0pO1xuICAgICAgICAgICAgY29udHJsLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9maWxlRm9ybVR5cGUgPT09ICdBdmFpbGFibGUgdXNlciBmaWxsZWQgaUdPVCBwcm9maWxlJykge1xuICAgICAgICAgICAgdGhpcy5jYW5zaG93TW9iaWxlID0gZmFsc2VcbiAgICAgICAgICAgIHRoaXMubVZlcmlmaWVkID0gdHJ1ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3dNb2JpbGUgPSB0cnVlXG4gICAgICAgICAgICBjb250cmwuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5taW5MZW5ndGgoMTApLCBWYWxpZGF0b3JzLm1heExlbmd0aCgxMCksIFZhbGlkYXRvcnMucGF0dGVybihNT0JJTEVfUEFUVEVSTildKTtcbiAgICAgICAgICAgIGNvbnRybC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuY2Fuc2hvd01vYmlsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5tVmVyaWZpZWQgPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmZpbmRBdHRyKGN1c3RvbUF0dHIsICdnZW5kZXInKSkge1xuICAgICAgICB0aGlzLmNhblNob3dHZW5kZXIgPSB0cnVlXG4gICAgICAgIGNvbnN0IGNvbnRybCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnZ2VuZGVyJylcbiAgICAgICAgaWYgKGNvbnRybCkge1xuICAgICAgICAgIGlmICh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5nZW5kZXIpIHtcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWx1ZSh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5nZW5kZXIpXG4gICAgICAgICAgICBjb250cmwuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXG4gICAgICAgICAgICBjb250cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb2ZpbGVGb3JtVHlwZSA9PT0gJ0F2YWlsYWJsZSB1c2VyIGZpbGxlZCBpR09UIHByb2ZpbGUnKSB7XG4gICAgICAgICAgICB0aGlzLmNhblNob3dHZW5kZXIgPSBmYWxzZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3dHZW5kZXIgPSB0cnVlXG4gICAgICAgICAgICBjb250cmwuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXG4gICAgICAgICAgICBjb250cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmZpbmRBdHRyKGN1c3RvbUF0dHIsICdkb2InKSkge1xuICAgICAgICB0aGlzLmNhblNob3dEb2IgPSB0cnVlXG4gICAgICAgIGNvbnN0IGNvbnRybCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnZG9iJylcbiAgICAgICAgaWYgKGNvbnRybCkge1xuICAgICAgICAgIGlmICh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5kb2IpIHtcbiAgICAgICAgICAgIGxldCBfZG9iOiBhbnkgPSB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5kb2JcbiAgICAgICAgICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IF9kb2Iuc3BsaXQoJy0nKVxuICAgICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKE51bWJlcih5ZWFyKSwgTnVtYmVyKG1vbnRoKSAtIDEsIE51bWJlcihkYXkpKVxuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkRGF5ID0gU3RyaW5nKGRhdGUuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCAnMCcpXG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRNb250aCA9IFN0cmluZyhkYXRlLmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpXG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRZZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKGAke2Zvcm1hdHRlZFllYXJ9LSR7Zm9ybWF0dGVkTW9udGh9LSR7Zm9ybWF0dGVkRGF5fWApXG4gICAgICAgICAgICBjb250cmwuc2V0VmFsdWUodGhpcy5zZWxlY3RlZERhdGUpXG4gICAgICAgICAgICBjb250cmwuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXG4gICAgICAgICAgICBjb250cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb2ZpbGVGb3JtVHlwZSA9PT0gJ0F2YWlsYWJsZSB1c2VyIGZpbGxlZCBpR09UIHByb2ZpbGUnKSB7XG4gICAgICAgICAgICB0aGlzLmNhblNob3dEb2IgPSBmYWxzZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3dEb2IgPSB0cnVlXG4gICAgICAgICAgICBjb250cmwuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXG4gICAgICAgICAgICBjb250cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmZpbmRBdHRyKGN1c3RvbUF0dHIsICdkb21pY2lsZU1lZGl1bScpKSB7XG4gICAgICAgIHRoaXMuY2FuU2hvd0RvbWljaWxlTWVkaXVtID0gdHJ1ZVxuICAgICAgICBjb25zdCBjb250cmwgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2RvbWljaWxlTWVkaXVtJylcbiAgICAgICAgaWYgKGNvbnRybCkge1xuICAgICAgICAgIGlmICh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5kb21pY2lsZU1lZGl1bSkge1xuICAgICAgICAgICAgY29udHJsLnNldFZhbHVlKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmRvbWljaWxlTWVkaXVtKVxuICAgICAgICAgICAgY29udHJsLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKVxuICAgICAgICAgICAgY29udHJsLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9maWxlRm9ybVR5cGUgPT09ICdBdmFpbGFibGUgdXNlciBmaWxsZWQgaUdPVCBwcm9maWxlJykge1xuICAgICAgICAgICAgdGhpcy5jYW5TaG93RG9taWNpbGVNZWRpdW0gPSBmYWxzZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3dEZWNpbWFsTWVkaXVtID0gdHJ1ZVxuICAgICAgICAgICAgY29udHJsLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKVxuICAgICAgICAgICAgY29udHJsLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5maW5kQXR0cihjdXN0b21BdHRyLCAnY2F0ZWdvcnknKSkge1xuICAgICAgICB0aGlzLmNhblNob3dDYXRlZ29yeSA9IHRydWVcbiAgICAgICAgY29uc3QgY29udHJsID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdjYXRlZ29yeScpXG4gICAgICAgIGlmIChjb250cmwpIHtcbiAgICAgICAgICBpZiAodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuY2F0ZWdvcnkpIHtcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWx1ZSh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5jYXRlZ29yeSlcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSlcbiAgICAgICAgICAgIGNvbnRybC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJvZmlsZUZvcm1UeXBlID09PSAnQXZhaWxhYmxlIHVzZXIgZmlsbGVkIGlHT1QgcHJvZmlsZScpIHtcbiAgICAgICAgICAgIHRoaXMuY2FuU2hvd0NhdGVnb3J5ID0gZmFsc2VcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaG93Q2F0ZWdvcnkgPSB0cnVlXG4gICAgICAgICAgICBjb250cmwuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXG4gICAgICAgICAgICBjb250cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmZpbmRBdHRyKGN1c3RvbUF0dHIsICdwaW5Db2RlJykpIHtcbiAgICAgICAgdGhpcy5jYW5TaG93cGluQ29kZSA9IHRydWVcbiAgICAgICAgY29uc3QgY29udHJsID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdwaW5Db2RlJylcbiAgICAgICAgaWYgKGNvbnRybCkge1xuICAgICAgICAgIGlmICh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLnBpbkNvZGUpIHtcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWx1ZSh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLnBpbkNvZGUpXG4gICAgICAgICAgICBjb250cmwuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoNiksIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDYpLCBWYWxpZGF0b3JzLnBhdHRlcm4oUElOX0NPREVfUEFUVEVSTildKVxuICAgICAgICAgICAgY29udHJsLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9maWxlRm9ybVR5cGUgPT09ICdBdmFpbGFibGUgdXNlciBmaWxsZWQgaUdPVCBwcm9maWxlJykge1xuICAgICAgICAgICAgdGhpcy5jYW5TaG93cGluQ29kZSA9IGZhbHNlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BpbkNvZGUgPSB0cnVlXG4gICAgICAgICAgICBjb250cmwuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoNiksIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDYpLCBWYWxpZGF0b3JzLnBhdHRlcm4oUElOX0NPREVfUEFUVEVSTildKVxuICAgICAgICAgICAgY29udHJsLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5maW5kQXR0cihjdXN0b21BdHRyLCAnY2FkcmVEZXRhaWxzJykpIHtcbiAgICAgICAgdGhpcy5jYW5TaG93c2hvd0NhZHJlRGV0YWlscyA9IHRydWVcbiAgICAgICAgY29uc3QgY29udHJsID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdpc0NhZHJlJylcbiAgICAgICAgaWYgKGNvbnRybCkge1xuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscykuaW5jbHVkZXMoJ2lzQ2FkcmUnKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmlzQ2FkcmUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgY29udHJsLnNldFZhbHVlKHRydWUpXG4gICAgICAgICAgICAgIHRoaXMuaXNDYWRyZVN0YXR1cyA9IHRydWVcbiAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlSWQgPSB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jaXZpbFNlcnZpY2VUeXBlSWRcbiAgICAgICAgICAgICAgdGhpcy5jaXZpbFNlcnZpY2VJZCA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNpdmlsU2VydmljZUlkXG4gICAgICAgICAgICAgIHRoaXMuY2FkcmVJZCA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlSWRcbiAgICAgICAgICAgICAgdGhpcy5jYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5ID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eU5hbWVcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRTZXJ2aWNlKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNpdmlsU2VydmljZVR5cGUpXG4gICAgICAgICAgICAgICAgdGhpcy5vblNlcnZpY2VTZWxlY3QoeyB2YWx1ZTogdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2l2aWxTZXJ2aWNlTmFtZSB9KVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jYWRyZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMub25DYWRyZVNlbGVjdCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jYWRyZU5hbWUpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMudXNlckRldGFpbHNGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgICAgdHlwZU9mQ2l2aWxTZXJ2aWNlOiB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jaXZpbFNlcnZpY2VUeXBlLFxuICAgICAgICAgICAgICAgICAgc2VydmljZVR5cGU6IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNpdmlsU2VydmljZU5hbWUsXG4gICAgICAgICAgICAgICAgICBjYWRyZU5hbWU6IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlTmFtZSxcbiAgICAgICAgICAgICAgICAgIGNhZHJlQmF0Y2g6IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlQmF0Y2gsXG4gICAgICAgICAgICAgICAgICBjYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5OiB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5TmFtZSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9LCAxMDAwKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29udHJsLnNldFZhbHVlKGZhbHNlKVxuICAgICAgICAgICAgICB0aGlzLmlzQ2FkcmVTdGF0dXMgPSBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9maWxlRm9ybVR5cGUgPT09ICdBdmFpbGFibGUgdXNlciBmaWxsZWQgaUdPVCBwcm9maWxlJykge1xuICAgICAgICAgICAgdGhpcy5jYW5TaG93c2hvd0NhZHJlRGV0YWlscyA9IGZhbHNlXG4gICAgICAgICAgICB0aGlzLmlzQ2FkcmVTdGF0dXMgPSBmYWxzZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250cmwuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXG4gICAgICAgICAgICBjb250cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZmluZEF0dHIoY3VzdG9tQXR0cjogYW55LCBmTmFtZTogYW55KSB7XG4gICAgaWYgKGZOYW1lID09PSAnbmFtZScpIHtcbiAgICAgIHJldHVybiBjdXN0b21BdHRyLmZpbmQoKF9maWVsZDogYW55KSA9PiBfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuZmlyc3RuYW1lJylcbiAgICB9XG4gICAgaWYgKGZOYW1lID09PSAnZW1haWwnKSB7XG4gICAgICByZXR1cm4gY3VzdG9tQXR0ci5maW5kKChfZmllbGQ6IGFueSkgPT4gX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLnByaW1hcnlFbWFpbCcpXG4gICAgfVxuICAgIGlmIChmTmFtZSA9PT0gJ29yZ2FuaXNhdGlvbicpIHtcbiAgICAgIHJldHVybiBjdXN0b21BdHRyLmZpbmQoKF9maWVsZDogYW55KSA9PiBfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlscy5kZXBhcnRtZW50TmFtZScpXG4gICAgfVxuICAgIGlmIChmTmFtZSA9PT0gJ2dyb3VwJykge1xuICAgICAgcmV0dXJuIGN1c3RvbUF0dHIuZmluZCgoX2ZpZWxkOiBhbnkpID0+IF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHMuZ3JvdXAnKVxuICAgIH1cbiAgICBpZiAoZk5hbWUgPT09ICdkZXNpZ25hdGlvbicpIHtcbiAgICAgIHJldHVybiBjdXN0b21BdHRyLmZpbmQoKF9maWVsZDogYW55KSA9PiBfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5wcm9mZXNzaW9uYWxEZXRhaWxzLmRlc2lnbmF0aW9uJylcbiAgICB9XG4gICAgaWYgKGZOYW1lID09PSAnZW1wbG95ZWVDb2RlJykge1xuICAgICAgcmV0dXJuIGN1c3RvbUF0dHIuZmluZCgoX2ZpZWxkOiBhbnkpID0+IF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLmVtcGxveWVlQ29kZScpXG4gICAgfVxuICAgIGlmIChmTmFtZSA9PT0gJ21vYmlsZScpIHtcbiAgICAgIHJldHVybiBjdXN0b21BdHRyLmZpbmQoKF9maWVsZDogYW55KSA9PiBfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMubW9iaWxlJylcbiAgICB9XG4gICAgaWYgKGZOYW1lID09PSAnZ2VuZGVyJykge1xuICAgICAgcmV0dXJuIGN1c3RvbUF0dHIuZmluZCgoX2ZpZWxkOiBhbnkpID0+IF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5nZW5kZXInKVxuICAgIH1cbiAgICBpZiAoZk5hbWUgPT09ICdkb2InKSB7XG4gICAgICByZXR1cm4gY3VzdG9tQXR0ci5maW5kKChfZmllbGQ6IGFueSkgPT4gX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmRvYicpXG4gICAgfVxuICAgIGlmIChmTmFtZSA9PT0gJ2RvbWljaWxlTWVkaXVtJykge1xuICAgICAgcmV0dXJuIGN1c3RvbUF0dHIuZmluZCgoX2ZpZWxkOiBhbnkpID0+IF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5kb21pY2lsZU1lZGl1bScpXG4gICAgfVxuICAgIGlmIChmTmFtZSA9PT0gJ2NhdGVnb3J5Jykge1xuICAgICAgcmV0dXJuIGN1c3RvbUF0dHIuZmluZCgoX2ZpZWxkOiBhbnkpID0+IF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5jYXRlZ29yeScpXG4gICAgfVxuICAgIGlmIChmTmFtZSA9PT0gJ3BpbkNvZGUnKSB7XG4gICAgICByZXR1cm4gY3VzdG9tQXR0ci5maW5kKChfZmllbGQ6IGFueSkgPT4gX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMuZW1wbG95bWVudERldGFpbHMucGluQ29kZScpXG4gICAgfVxuICAgIGlmIChmTmFtZSA9PT0gJ2NhZHJlRGV0YWlscycpIHtcbiAgICAgIHJldHVybiBjdXN0b21BdHRyLmZpbmQoKF9maWVsZDogYW55KSA9PiBfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2l2aWxTZXJ2aWNlVHlwZScpXG4gICAgfVxuXG4gIH1cblxuICBmaW5kSW5Qcm9maWxlKGF0dHI6IHN0cmluZykge1xuICAgIGlmIChhdHRyID09PSAnbmFtZScpIHtcbiAgICAgIHJldHVybiB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5maXJzdE5hbWUgfHwgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuZmlyc3RuYW1lXG4gICAgfVxuICAgIGlmIChhdHRyID09PSAnZ3JvdXAnKSB7XG4gICAgICByZXR1cm4gKCF0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnByb2ZpbGVHcm91cFN0YXR1cykgfHxcbiAgICAgICAgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wcm9maWxlR3JvdXBTdGF0dXMgPT09ICdOT1QtVkVSSUZJRUQnIHx8ICh0aGlzLnBHcm91cCA/IHRydWUgOiBmYWxzZSlcbiAgICB9XG4gICAgaWYgKGF0dHIgPT09ICdkZXNpZ25hdGlvbicpIHtcbiAgICAgIHJldHVybiAoIXRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucHJvZmlsZURlc2lnbmF0aW9uU3RhdHVzKSB8fFxuICAgICAgICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnByb2ZpbGVEZXNpZ25hdGlvblN0YXR1cyA9PT0gJ05PVC1WRVJJRklFRCcgfHwgKHRoaXMucERlc2lnbmF0aW9uID8gdHJ1ZSA6IGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIGdldEdyb3VwRGF0YSgpOiB2b2lkIHtcbiAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyICsgMVxuICAgIHRoaXMudXNlclByb2ZpbGVTZXJ2aWNlLmdldEdyb3VwcygpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95U3ViamVjdCQpKVxuICAgICAgLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciAtIDFcbiAgICAgICAgdGhpcy5ncm91cERhdGEgPSByZXMucmVzdWx0ICYmIHJlcy5yZXN1bHQucmVzcG9uc2UuZmlsdGVyKChlbGU6IGFueSkgPT4gZWxlICE9PSAnT3RoZXJzJylcbiAgICAgIH0sIChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciAtIDFcbiAgICAgICAgaWYgKCFlcnJvci5vaykge1xuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3Blbih0aGlzLmhhbmRsZVRyYW5zbGF0ZVRvKCdncm91cERhdGFGYWlsZScpKVxuICAgICAgICB9XG4gICAgICB9KVxuICB9XG5cbiAgaGFuZGxlVHJhbnNsYXRlVG8obWVudU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudXNlclByb2ZpbGVTZXJ2aWNlLmhhbmRsZVRyYW5zbGF0ZVRvKG1lbnVOYW1lKVxuICB9XG5cbiAgY2hlY2tTZWxlY3RlZE9yZ0hhc0Rlc2lnbmF0aW9ucygpOiB2b2lkIHtcbiAgICBpZih0aGlzLm9yZ2FuaXNhdGlvbklkKSB7XG4gICAgICBjb25zdCBpZ290RGVzaWduYXRpb25Cb2R5OiBhbnkgPSB7XG4gICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICBmaWx0ZXJzOiB7XG4gICAgICAgICAgICBzdGF0dXM6ICdMaXZlJyxcbiAgICAgICAgICAgIGNhdGVnb3J5OiAnZGVzaWduYXRpb24nLFxuICAgICAgICAgICAgY2F0ZWdvcmllczogW1xuICAgICAgICAgICAgICB0aGlzLm9yZ2FuaXNhdGlvbklkICsgJ19vZGNzX2Rlc2lnbmF0aW9uJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBvYmplY3RUeXBlOiAnVGVybScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmaWVsZHM6IFsnbmFtZSddLFxuICAgICAgICAgIG9mZnNldDogMCxcbiAgICAgICAgICBsaW1pdDogMSxcbiAgICAgICAgICBzb3J0X2J5OiB7XG4gICAgICAgICAgICBsYXN0VXBkYXRlZE9uOiAnZGVzYycsXG4gICAgICAgICAgICBvYmplY3RUeXBlOiAnVGVybScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmYWNldHM6IFtdLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIHRoaXMudXNlclByb2ZpbGVTZXJ2aWNlLnNlYXJjaElnb3REZXNpZ25hdGlvbihpZ290RGVzaWduYXRpb25Cb2R5KS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBjb3VudCA9IF8uZ2V0KHJlcywgJ3Jlc3VsdC5jb3VudCcsIDApO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcmdIYXNEZXNpZ25hdGlvbnMgPSBjb3VudCA+IDA7XG4gICAgICAgICAgdGhpcy5nZXRkZXNpZ25hdGlvbnNNZXRhKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE9yZ0hhc0Rlc2lnbmF0aW9ucyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuZ2V0ZGVzaWduYXRpb25zTWV0YSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZE9yZ0hhc0Rlc2lnbmF0aW9ucyA9IGZhbHNlO1xuICAgICAgdGhpcy5nZXRkZXNpZ25hdGlvbnNNZXRhKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0ZGVzaWduYXRpb25zTWV0YSgpIHtcbiAgICB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSB0cnVlO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkT3JnSGFzRGVzaWduYXRpb25zKSB7XG4gICAgICB0aGlzLmdldElnb3REZXNpZ25hdGlvbnMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5nZXREZWZhdWx0RGVzaWduYXRpb25zKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRJZ290RGVzaWduYXRpb25zKCkge1xuICAgIGNvbnN0IHJlcXVlc3RCb2R5OiBhbnkgPSB7XG4gICAgICByZXF1ZXN0OiB7XG4gICAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgICBzdGF0dXM6IFwiTGl2ZVwiLFxuICAgICAgICAgIGNhdGVnb3J5OiBcImRlc2lnbmF0aW9uXCIsXG4gICAgICAgICAgY2F0ZWdvcmllczogW1xuICAgICAgICAgICAgdGhpcy5vcmdhbmlzYXRpb25JZCArICdfb2Rjc19kZXNpZ25hdGlvbicsXG4gICAgICAgICAgXSxcbiAgICAgICAgICBvYmplY3RUeXBlOiBcIlRlcm1cIlxuICAgICAgICB9LFxuICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICBcIm5hbWVcIlxuICAgICAgICBdLFxuICAgICAgICBvZmZzZXQ6IHRoaXMuZGVzaWduYXRpb25zT2Zmc2V0LFxuICAgICAgICBsaW1pdDogdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQsXG4gICAgICAgIHNvcnRfYnk6IHtcbiAgICAgICAgICBsYXN0VXBkYXRlZE9uOiBcImRlc2NcIixcbiAgICAgICAgICBvYmplY3RUeXBlOiBcIlRlcm1cIlxuICAgICAgICB9LFxuICAgICAgICBmYWNldHM6IFtdXG4gICAgICB9XG4gICAgfTtcbiAgICBpZih0aGlzLmRlc2lnbmF0aW9uU2VhcmNoVGV4dCl7XG4gICAgICByZXF1ZXN0Qm9keVsncmVxdWVzdCddWydxdWVyeSddID0gdGhpcy5kZXNpZ25hdGlvblNlYXJjaFRleHQ7XG4gICAgfVxuICAgIHRoaXMudXNlclByb2ZpbGVTZXJ2aWNlLnNlYXJjaElnb3REZXNpZ25hdGlvbihyZXF1ZXN0Qm9keSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSBmYWxzZTtcbiAgICAgICAgaWYodGhpcy5kZXNpZ25hdGlvbnNPZmZzZXQgPT09IDApIHtcbiAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uc01ldGEgPSBfLmdldChyZXMsICdyZXN1bHQuVGVybScsIFtdKSBhcyBkZXNpZ25hdGlvbltdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25zTWV0YSA9IFsuLi50aGlzLmRlc2lnbmF0aW9uc01ldGEsIC4uLl8uZ2V0KHJlcywgJ3Jlc3VsdC5UZXJtJywgW10pIGFzIGRlc2lnbmF0aW9uW11dO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVzaWduYXRpb25zVG90YWxDb3VudCA9IF8uZ2V0KHJlcywgJ3Jlc3VsdC5jb3VudCcsIDApO1xuICAgICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9wZW5TbmFja2JhcignU29tZXRoaW5nIHdlbnQgd3JvbmcuIFBsZWFzZSByZWZyZXNoIG9yIHRyeSBhZ2FpbiBsYXRlci4nKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBcbiAgICBwcml2YXRlIGdldERlZmF1bHREZXNpZ25hdGlvbnMoKSB7XG4gICAgICBjb25zdCByZXF1ZXN0Qm9keTogYW55ID0ge1xuICAgICAgICBmaWx0ZXJDcml0ZXJpYU1hcDoge1xuICAgICAgICAgIHN0YXR1czogJ0FjdGl2ZSdcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWVzdGVkRmllbGRzOiBbXSxcbiAgICAgICAgcGFnZU51bWJlcjogdGhpcy5kZXNpZ25hdGlvbnNPZmZzZXQsXG4gICAgICAgIHBhZ2VTaXplOiB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudFxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZGVzaWduYXRpb25TZWFyY2hUZXh0KSB7XG4gICAgICAgIHJlcXVlc3RCb2R5WydzZWFyY2hTdHJpbmcnXSA9IHRoaXMuZGVzaWduYXRpb25TZWFyY2hUZXh0XG4gICAgICB9XG4gICAgICB0aGlzLnVzZXJQcm9maWxlU2VydmljZS5zZWFyY2hEZXNpZ25hdGlvbihyZXF1ZXN0Qm9keSkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zID0gZmFsc2U7XG4gICAgICAgICAgY29uc3QgY29udGVudCA9IF8uZ2V0KHJlcywgJ3Jlc3VsdC5yZXN1bHQuZGF0YScsIFtdKSBhcyBkZXNpZ25hdGlvbltdO1xuICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IGNvbnRlbnQubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICBuYW1lOiBpdGVtLmRlc2lnbmF0aW9uIHx8ICcnLFxuICAgICAgICAgICAgc3RhdHVzOiBpdGVtLnN0YXR1cyB8fCAnQWN0aXZlJyxcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgaWYgKHRoaXMuZGVzaWduYXRpb25zT2Zmc2V0ID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uc01ldGEgPSBtYXBwZWQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25zTWV0YSA9IFsuLi50aGlzLmRlc2lnbmF0aW9uc01ldGEsIC4uLm1hcHBlZF07XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25zVG90YWxDb3VudCA9IF8uZ2V0KHJlcywgJ3Jlc3VsdC5yZXN1bHQudG90YWxDb3VudCcsIDApO1xuICAgICAgICAgIHRoaXMuY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5vcGVuU25hY2tiYXIoJ1NvbWV0aGluZyB3ZW50IHdyb25nLiBQbGVhc2UgcmVmcmVzaCBvciB0cnkgYWdhaW4gbGF0ZXIuJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICBnZXRNYXN0ZXJMYW5ndWFnZSgpOiB2b2lkIHtcbiAgICB0aGlzLnVzZXJQcm9maWxlU2VydmljZS5nZXRNYXN0ZXJMYW5ndWFnZXMoKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveVN1YmplY3QkKSlcbiAgICAgIC5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMubWFzdGVyTGFuZ3VhZ2VzID0gcmVzLmxhbmd1YWdlc1xuICAgICAgICB0aGlzLm1hc3Rlckxhbmd1YWdlQmFja3VwID0gcmVzLmxhbmd1YWdlc1xuICAgICAgfSwgKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoIWVycm9yLm9rKSB7XG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKHRoaXMuaGFuZGxlVHJhbnNsYXRlVG8oJ3VuYWJsZUZldGNoTWFzdGVyTGFuZ3VhZ2VEYXRhJykpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gIH1cblxuICBoYW5kbGVFbXB0eSh0eXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodHlwZSA9PT0gJ21vYmlsZScpIHtcbiAgICAgIGlmICh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5tb2JpbGUgJiYgIXRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydtb2JpbGUnXS52YWx1ZSkge1xuICAgICAgICB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snbW9iaWxlJ10uc2V0RXJyb3JzKHsgdmFsaWQ6IGZhbHNlIH0pXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlID09PSAncHJpbWFyeUVtYWlsJykge1xuICAgICAgaWYgKCF0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5wcmltYXJ5RW1haWwgJiYgIXRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMudmFsdWVbJ3ByaW1hcnlFbWFpbCddKSB7XG4gICAgICAgIHRoaXMudXNlckRldGFpbHNGb3JtLnNldEVycm9ycyh7IHZhbGlkOiBmYWxzZSB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBvblN1Ym1pdEZvcm0oZm9ybTogYW55KSB7XG4gICAgLyogdHNsaW50OmRpc2FibGUgKi9cbiAgICBjb25zb2xlLmxvZyhmb3JtKVxuICAgIGxldCBwYXlsb2FkID0gdGhpcy5nZW5lcmF0ZVByb2ZpbGVQYXlsb2FkKClcbiAgICBpZiAoKHRoaXMuY2FuU2hvd0Rlc2lnbmF0aW9uIHx8IHRoaXMuY2FuU2hvd0dyb3VwKSAmJiAhdGhpcy5zaG93RG9wdENoYW5nZXMpIHtcbiAgICAgIGlmICh0aGlzLnBlbmRpbmdGaWxlZHMpIHtcbiAgICAgICAgdGhpcy5wZW5kaW5nRmlsZWRzLmZvckVhY2goKF9vYmo6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhfb2JqKS5pbmNsdWRlcygnZGVzaWduYXRpb24nKSkge1xuICAgICAgICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciArIDFcbiAgICAgICAgICAgIHRoaXMucHJvZmlsZVYyU3ZjLndpdGhEcmF3QXBwcm92YWxSZXF1ZXN0KHRoaXMuY29uZmlnU3JjLnVuTWFwcGVkVXNlci5pZCwgX29iai53ZklkKS5zdWJzY3JpYmUoKHJlc3A6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBpZiAocmVzcCAmJiByZXNwLnJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkTG9hZGVyID0gdGhpcy5hZGRMb2FkZXIgLSAxXG4gICAgICAgICAgICAgICAgLyogdHNsaW50OmRpc2FibGUgKi9cbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXNwLnJlc3VsdC5tZXNzYWdlKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkTG9hZGVyID0gdGhpcy5hZGRMb2FkZXIgLSAxXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhfb2JqKS5pbmNsdWRlcygnZ3JvdXAnKSkge1xuICAgICAgICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciArIDFcbiAgICAgICAgICAgIHRoaXMucHJvZmlsZVYyU3ZjLndpdGhEcmF3QXBwcm92YWxSZXF1ZXN0KHRoaXMuY29uZmlnU3JjLnVuTWFwcGVkVXNlci5pZCwgX29iai53ZklkKS5zdWJzY3JpYmUoKHJlc3A6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBpZiAocmVzcCAmJiByZXNwLnJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkTG9hZGVyID0gdGhpcy5hZGRMb2FkZXIgLSAxXG4gICAgICAgICAgICAgICAgLyogdHNsaW50OmRpc2FibGUgKi9cbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXNwLnJlc3VsdC5tZXNzYWdlKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkTG9hZGVyID0gdGhpcy5hZGRMb2FkZXIgLSAxXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICBpZiAodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMucHJpbWFyeUVtYWlsICE9PSB0aGlzLnVzZXJEZXRhaWxzRm9ybS52YWx1ZS5wcmltYXJ5RW1haWwgJiYgdGhpcy5jYW5TaG93RW1haWwpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUVtYWlsKHRoaXMudXNlckRldGFpbHNGb3JtLnZhbHVlLnByaW1hcnlFbWFpbClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN1Ym1pdFByb2ZpbGUocGF5bG9hZClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLnByaW1hcnlFbWFpbCAhPT0gdGhpcy51c2VyRGV0YWlsc0Zvcm0udmFsdWUucHJpbWFyeUVtYWlsICYmIHRoaXMuY2FuU2hvd0VtYWlsKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRW1haWwodGhpcy51c2VyRGV0YWlsc0Zvcm0udmFsdWUucHJpbWFyeUVtYWlsKVxuICAgICAgfVxuICAgICAgdGhpcy5zdWJtaXRQcm9maWxlKHBheWxvYWQpXG4gICAgfVxuICB9XG5cbiAgc3VibWl0UHJvZmlsZShwYXlsb2FkOiBhbnkpIHtcbiAgICBpZiAocGF5bG9hZCAmJiBwYXlsb2FkWydyZXF1ZXN0J10gJiYgcGF5bG9hZFsncmVxdWVzdCddWydwcm9maWxlRGV0YWlscyddICYmIHBheWxvYWRbJ3JlcXVlc3QnXVsncHJvZmlsZURldGFpbHMnXVsncGVyc29uYWxEZXRhaWxzJ10gJiYgcGF5bG9hZFsncmVxdWVzdCddWydwcm9maWxlRGV0YWlscyddWydwZXJzb25hbERldGFpbHMnXVsnZG9iJ10pIHtcbiAgICAgIGxldCBkb2JGb3JtYXQgPSBwYXlsb2FkWydyZXF1ZXN0J11bJ3Byb2ZpbGVEZXRhaWxzJ11bJ3BlcnNvbmFsRGV0YWlscyddWydkb2InXTtcbiAgICAgIGxldCBkb2IgPSBgJHtuZXcgRGF0ZShkb2JGb3JtYXQpLmdldERhdGUoKX0tJHtuZXcgRGF0ZShkb2JGb3JtYXQpLmdldE1vbnRoKCkgKyAxfS0ke25ldyBEYXRlKGRvYkZvcm1hdCkuZ2V0RnVsbFllYXIoKX1gXG4gICAgICBwYXlsb2FkWydyZXF1ZXN0J11bJ3Byb2ZpbGVEZXRhaWxzJ11bJ3BlcnNvbmFsRGV0YWlscyddWydkb2InXSA9IGRvYlxuICAgIH1cbiAgICBpZiAodGhpcy51cGRhdGVQcm9maWxlKSB7XG4gICAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyICsgMVxuICAgICAgdGhpcy51c2VyUHJvZmlsZVNlcnZpY2UuZWRpdFByb2ZpbGVEZXRhaWxzKHBheWxvYWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciAtIDFcbiAgICAgICAgaWYgKHJlcy5yZXNwb25zZUNvZGUgPT09ICdPSycpIHtcbiAgICAgICAgICB0aGlzLnN1Ym1pdFN1cmV2eSh0cnVlKVxuICAgICAgICB9XG4gICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgIHRoaXMuYWRkTG9hZGVyID0gdGhpcy5hZGRMb2FkZXIgLSAxXG4gICAgICAgIC8qIHRzbGludDpkaXNhYmxlICovXG4gICAgICAgIGNvbnNvbGUubG9nKGVycm9yKVxuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oXCJzb21ldGhpbmcgd2VudCB3cm9uZyFcIilcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgc3VibWl0U3VyZXZ5KHN0YXR1czogYW55KSB7XG4gICAgbGV0IHN1cmV2eVBheWxvYWQgPSB7XG4gICAgICBmb3JtSWQ6IF8uZ2V0KHRoaXMuZGF0YSwgJ2JhdGNoRGF0YS5iYXRjaEF0dHJpYnV0ZXMucHJvZmlsZVN1cnZleUlkJyksXG4gICAgICB2ZXJzaW9uOiA0LFxuICAgICAgc3RhdHVzOiAnU1VCTUlUVEVEJyxcbiAgICAgIHJlc3BvbnNlczogdGhpcy5nZW5lcmVhdGVTdXJ2ZXlQYXlsb2FkKHN0YXR1cyksXG4gICAgICBjb250ZXh0SWQ6IF8uZ2V0KHRoaXMuZGF0YSwgJ2JhdGNoRGF0YS5jb3Vyc2VJZCcpLFxuICAgICAgY29udGV4dE5hbWU6IF8uZ2V0KHRoaXMuZGF0YSwgJ2NvdXJzZU5hbWUnLCAnJyksXG4gICAgfVxuICAgIHRoaXMuYWRkTG9hZGVyID0gdGhpcy5hZGRMb2FkZXIgKyAxXG4gICAgdGhpcy5ucHNTdmMuc3VibWl0QnBGb3JtV2l0aFByb2ZpbGVEZXRhaWxzKHN1cmV2eVBheWxvYWQpLnN1YnNjcmliZSgocmVzcDogYW55KSA9PiB7XG4gICAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyIC0gMVxuICAgICAgaWYgKF8uZ2V0KHJlc3AsICdwYXJhbXMuc3RhdHVzJykgPT09ICdzdWNjZXNzJykge1xuICAgICAgICB0aGlzLmN1c3RvbUZvcm0gPSBmYWxzZVxuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oXCJGb3JtIGlzIHN1Ym1pdHRlZCBzdWNjZXNzZnVsbHlcIilcbiAgICAgICAgdGhpcy5jbG9zZVBvcHVwKClcbiAgICAgIH1cbiAgICAgIGlmIChyZXNwICYmIHJlc3Auc3RhdHVzQ29kZSAmJiByZXNwLnN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICB0aGlzLmN1c3RvbUZvcm0gPSBmYWxzZVxuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4ocmVzcC5lcnJvck1lc3NhZ2UpXG4gICAgICB9XG4gICAgfSwgZXJyb3IgPT4ge1xuICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciAtIDFcbiAgICAgIC8qIHRzbGludDpkaXNhYmxlICovXG4gICAgICBjb25zb2xlLmxvZyhlcnJvcilcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbihcInNvbWV0aGluZyB3ZW50IHdyb25nIVwiKVxuICAgIH0pXG4gIH1cblxuICBnZW5lcmF0ZVByb2ZpbGVQYXlsb2FkKCkge1xuICAgIGxldCBwYXlsb2FkOiBhbnkgPSB7XG4gICAgICByZXF1ZXN0OiB7XG4gICAgICAgIHVzZXJJZDogdGhpcy51c2VyUHJvZmlsZU9iamVjdC5pZGVudGlmaWVyLFxuICAgICAgICBwcm9maWxlRGV0YWlsczoge1xuICAgICAgICAgIGVtcGxveW1lbnREZXRhaWxzOiB7fSxcbiAgICAgICAgICBwZXJzb25hbERldGFpbHM6IHt9LFxuICAgICAgICAgIC8vIGNhZHJlRGV0YWlsczoge30sXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IF9wcm9mZXNzaW9uYWxEZXRhaWxzOiBhbnkgPSB7fVxuICAgIGxldCB1cGRhdGVQcm9mZXNzaW9uYWxEZXRhaWxzOiBib29sZWFuID0gZmFsc2VcbiAgICBpZiAodGhpcy5zaG93R3JvdXAgJiYgdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2dyb3VwJ10udmFsdWUgJiYgIXRoaXMuc2hvd0RvcHRDaGFuZ2VzKSB7XG4gICAgICBfcHJvZmVzc2lvbmFsRGV0YWlsc1snZ3JvdXAnXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydncm91cCddLnZhbHVlXG4gICAgICB0aGlzLnVwZGF0ZVByb2ZpbGUgPSB0cnVlXG4gICAgICB1cGRhdGVQcm9mZXNzaW9uYWxEZXRhaWxzID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAodGhpcy5zaG93RGVzaWduYXRpb24gJiYgdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2Rlc2lnbmF0aW9uJ10udmFsdWUgJiYgIXRoaXMuc2hvd0RvcHRDaGFuZ2VzKSB7XG4gICAgICBfcHJvZmVzc2lvbmFsRGV0YWlsc1snZGVzaWduYXRpb24nXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydkZXNpZ25hdGlvbiddLnZhbHVlXG4gICAgICB0aGlzLnVwZGF0ZVByb2ZpbGUgPSB0cnVlXG4gICAgICB1cGRhdGVQcm9mZXNzaW9uYWxEZXRhaWxzID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAodXBkYXRlUHJvZmVzc2lvbmFsRGV0YWlscykge1xuICAgICAgcGF5bG9hZC5yZXF1ZXN0LnByb2ZpbGVEZXRhaWxzWydwcm9mZXNzaW9uYWxEZXRhaWxzJ10gPSBbX3Byb2Zlc3Npb25hbERldGFpbHNdXG4gICAgfVxuICAgIGlmICh0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZW1wbG95ZWVDb2RlJ10udmFsdWUpIHtcbiAgICAgIHBheWxvYWQucmVxdWVzdC5wcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlsc1snZW1wbG95ZWVDb2RlJ10gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZW1wbG95ZWVDb2RlJ10udmFsdWVcbiAgICAgIHRoaXMudXBkYXRlUHJvZmlsZSA9IHRydWVcbiAgICB9XG4gICAgaWYgKHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydtb2JpbGUnXS52YWx1ZSkge1xuICAgICAgcGF5bG9hZC5yZXF1ZXN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlsc1snbW9iaWxlJ10gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snbW9iaWxlJ10udmFsdWVcbiAgICAgIHBheWxvYWQucmVxdWVzdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHNbJ3Bob25lVmVyaWZpZWQnXSA9IHRydWVcbiAgICAgIHRoaXMudXBkYXRlUHJvZmlsZSA9IHRydWVcbiAgICB9XG4gICAgaWYgKHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydnZW5kZXInXS52YWx1ZSkge1xuICAgICAgcGF5bG9hZC5yZXF1ZXN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlsc1snZ2VuZGVyJ10gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZ2VuZGVyJ10udmFsdWVcbiAgICAgIHRoaXMudXBkYXRlUHJvZmlsZSA9IHRydWVcbiAgICB9XG4gICAgaWYgKHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydkb2InXS52YWx1ZSkge1xuICAgICAgcGF5bG9hZC5yZXF1ZXN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlsc1snZG9iJ10gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZG9iJ10udmFsdWVcbiAgICAgIHRoaXMudXBkYXRlUHJvZmlsZSA9IHRydWVcbiAgICB9XG4gICAgaWYgKHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydkb21pY2lsZU1lZGl1bSddLnZhbHVlKSB7XG4gICAgICBwYXlsb2FkLnJlcXVlc3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzWydkb21pY2lsZU1lZGl1bSddID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2RvbWljaWxlTWVkaXVtJ10udmFsdWVcbiAgICAgIHRoaXMudXBkYXRlUHJvZmlsZSA9IHRydWVcbiAgICB9XG4gICAgaWYgKHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydjYXRlZ29yeSddLnZhbHVlKSB7XG4gICAgICBwYXlsb2FkLnJlcXVlc3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzWydjYXRlZ29yeSddID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2NhdGVnb3J5J10udmFsdWVcbiAgICAgIHRoaXMudXBkYXRlUHJvZmlsZSA9IHRydWVcbiAgICB9XG4gICAgaWYgKHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydwaW5Db2RlJ10udmFsdWUpIHtcbiAgICAgIHBheWxvYWQucmVxdWVzdC5wcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlsc1sncGluQ29kZSddID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ3BpbkNvZGUnXS52YWx1ZVxuICAgICAgcGF5bG9hZC5yZXF1ZXN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlsc1sncGluY29kZSddID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ3BpbkNvZGUnXS52YWx1ZVxuICAgICAgdGhpcy51cGRhdGVQcm9maWxlID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAodGhpcy5jYW5TaG93c2hvd0NhZHJlRGV0YWlscyAmJiAhdGhpcy5zaG93RG9wdENoYW5nZXMpIHtcbiAgICAgIGxldCBfY2FkcmVEZXRhaWxzOiBhbnkgPSB7fVxuICAgICAgcGF5bG9hZC5yZXF1ZXN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlsc1snaXNDYWRyZSddID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2lzQ2FkcmUnXS52YWx1ZVxuICAgICAgdGhpcy51cGRhdGVQcm9maWxlID0gdHJ1ZVxuICAgICAgaWYgKHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydpc0NhZHJlJ10udmFsdWUpIHtcbiAgICAgICAgX2NhZHJlRGV0YWlsc1snY2l2aWxTZXJ2aWNlVHlwZSddID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ3R5cGVPZkNpdmlsU2VydmljZSddLnZhbHVlXG4gICAgICAgIF9jYWRyZURldGFpbHNbJ2NpdmlsU2VydmljZU5hbWUnXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydzZXJ2aWNlVHlwZSddLnZhbHVlXG4gICAgICAgIF9jYWRyZURldGFpbHNbJ2NhZHJlTmFtZSddID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2NhZHJlTmFtZSddLnZhbHVlXG4gICAgICAgIF9jYWRyZURldGFpbHNbJ2NhZHJlQmF0Y2gnXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydjYWRyZUJhdGNoJ10udmFsdWVcbiAgICAgICAgX2NhZHJlRGV0YWlsc1snY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eU5hbWUnXSA9IHRoaXMuY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eVxuICAgICAgICBfY2FkcmVEZXRhaWxzWydjYWRyZUlkJ10gPSB0aGlzLmNhZHJlSWRcbiAgICAgICAgX2NhZHJlRGV0YWlsc1snY2l2aWxTZXJ2aWNlSWQnXSA9IHRoaXMuY2l2aWxTZXJ2aWNlSWRcbiAgICAgICAgX2NhZHJlRGV0YWlsc1snY2l2aWxTZXJ2aWNlVHlwZUlkJ10gPSB0aGlzLnNlcnZpY2VJZFxuICAgICAgICBwYXlsb2FkLnJlcXVlc3QucHJvZmlsZURldGFpbHNbJ2NhZHJlRGV0YWlscyddID0gX2NhZHJlRGV0YWlsc1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGF5bG9hZFxuICB9XG5cbiAgZm9ybWF0RGF0ZShfZG9iOiBzdHJpbmcgfCBEYXRlKTogc3RyaW5nIHtcbiAgICBsZXQgZGF0ZU9iajogRGF0ZSB8IG51bGwgPSBudWxsO1xuICAgIGlmIChfZG9iIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgZGF0ZU9iaiA9IF9kb2I7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgX2RvYiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IHBhcnRzID0gX2RvYi5zcGxpdCgnLScpO1xuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICBjb25zdCBbZGF5LCBtb250aCwgeWVhcl0gPSBwYXJ0cztcbiAgICAgICAgZGF0ZU9iaiA9IG5ldyBEYXRlKE51bWJlcih5ZWFyKSwgTnVtYmVyKG1vbnRoKSAtIDEsIE51bWJlcihkYXkpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IG5ldyBEYXRlKF9kb2IpO1xuICAgICAgICBpZiAoIWlzTmFOKHBhcnNlZC5nZXRUaW1lKCkpKSB7XG4gICAgICAgICAgZGF0ZU9iaiA9IHBhcnNlZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWRhdGVPYmogfHwgaXNOYU4oZGF0ZU9iai5nZXRUaW1lKCkpKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRlT2JqLCAneXl5eS1NTS1kZCcpIHx8ICcnO1xuICB9XG5cbiAgZ2V0UXVlc3Rpb25JZChmaWVsZE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFmaWVsZE5hbWUgfHwgIXRoaXMuZm9ybXNEZXRpbHMuZmllbGRzKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgZmllbGQgPSB0aGlzLmZvcm1zRGV0aWxzLmZpZWxkcy5maW5kKChmOiBhbnkpID0+IGYuZmllbGQgPT09IGZpZWxkTmFtZSkgfHwge307XG4gICAgcmV0dXJuIGZpZWxkLmlkIHx8ICcnO1xuICB9XG5cbiAgZ2VuZXJlYXRlU3VydmV5UGF5bG9hZChzdGF0dXM6IGFueSkge1xuICAgIGxldCBkYXRhT2JqZWN0OiBhbnkgPSBbXVxuICAgIHRoaXMuYmF0Y2hEZXRhaWxzLmJhdGNoQXR0cmlidXRlcy5icEVucm9sTWFuZGF0b3J5UHJvZmlsZUZpZWxkcy5mb3JFYWNoKChfZmllbGQ6IGFueSkgPT4ge1xuICAgICAgY29uc3QgZmllbGRUb0FkZCA9IHtcbiAgICAgICAgcXVlc3Rpb25JZDogdGhpcy5nZXRRdWVzdGlvbklkKF9maWVsZC5maWVsZCksXG4gICAgICAgIHF1ZXN0aW9uOiBfZmllbGQuZGlzcGxheU5hbWUsXG4gICAgICAgIGFuc3dlcjogJycsXG4gICAgICAgIGFuc3dlclR5cGU6IF9maWVsZC5maWVsZFR5cGVcbiAgICAgIH1cbiAgICAgIGlmIChfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuZmlyc3RuYW1lJykge1xuICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IF8uZ2V0KHRoaXMudXNlclByb2ZpbGVPYmplY3QsICdwcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuZmlyc3ROYW1lJywgXy5nZXQodGhpcy51c2VyUHJvZmlsZU9iamVjdCwgJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5maXJzdG5hbWUnLCAnJykpXG4gICAgICAgIGRhdGFPYmplY3QucHVzaChmaWVsZFRvQWRkKVxuICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmZpcnN0TmFtZSB8fCB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5maXJzdG5hbWVcbiAgICAgIH1cbiAgICAgIGlmIChfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlscy5kZXBhcnRtZW50TmFtZScpIHtcbiAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSBfLmdldCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LCAncHJvZmlsZURldGFpbHMuZW1wbG95bWVudERldGFpbHMuZGVwYXJ0bWVudE5hbWUnLCAnTi9BJylcbiAgICAgICAgZGF0YU9iamVjdC5wdXNoKGZpZWxkVG9BZGQpXG4gICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlscyAmJiB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLmRlcGFydG1lbnROYW1lID9cbiAgICAgICAgLy8gICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLmRlcGFydG1lbnROYW1lIDogXCJOL0FcIlxuICAgICAgfVxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHMuZ3JvdXAnKSB7XG4gICAgICAgIGlmICh0aGlzLnNob3dHcm91cCAmJiBzdGF0dXMpIHtcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydncm91cCddLnZhbHVlXG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZ3JvdXAnXS52YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gXy5nZXQodGhpcy51c2VyUHJvZmlsZU9iamVjdCwgJ3Byb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHNbMF0uZ3JvdXAnLCAnTi9BJylcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucHJvZmVzc2lvbmFsRGV0YWlscyAmJiB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHNbMF0uZ3JvdXAgP1xuICAgICAgICAgIC8vICAgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wcm9mZXNzaW9uYWxEZXRhaWxzWzBdLmdyb3VwIDogXCJOL0FcIlxuICAgICAgICB9XG4gICAgICAgIGRhdGFPYmplY3QucHVzaChmaWVsZFRvQWRkKVxuICAgICAgfVxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHMuZGVzaWduYXRpb24nKSB7XG4gICAgICAgIGlmICh0aGlzLnNob3dEZXNpZ25hdGlvbiAmJiBzdGF0dXMpIHtcbiAgICAgICAgICBpZiAodGhpcy5zaG93RG9wdENoYW5nZXMgJiYgdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2Rlc2lnbmF0aW9uJ10gJiZcbiAgICAgICAgICAgIHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydkZXNpZ25hdGlvbiddLnZhbHVlID09PSAnT3RoZXJzJyAmJiB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snb3RoZXJEZXNpZ25hdGlvbiddKSB7XG4gICAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydvdGhlckRlc2lnbmF0aW9uJ10udmFsdWVcbiAgICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ290aGVyRGVzaWduYXRpb24nXS52YWx1ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydkZXNpZ25hdGlvbiddLnZhbHVlXG4gICAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydkZXNpZ25hdGlvbiddLnZhbHVlXG4gICAgICAgICAgfVxuICAgICAgICAgIGRhdGFPYmplY3QucHVzaChmaWVsZFRvQWRkKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wcm9mZXNzaW9uYWxEZXRhaWxzICYmIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucHJvZmVzc2lvbmFsRGV0YWlsc1swXS5kZXNpZ25hdGlvbiA/XG4gICAgICAgICAgLy8gICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHNbMF0uZGVzaWduYXRpb24gOiBcIk4vQVwiXG4gICAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IF8uZ2V0KHRoaXMudXNlclByb2ZpbGVPYmplY3QsICdwcm9maWxlRGV0YWlscy5wcm9mZXNzaW9uYWxEZXRhaWxzWzBdLmRlc2lnbmF0aW9uJywgJ04vQScpXG4gICAgICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMuZW1wbG95bWVudERldGFpbHMuZW1wbG95ZWVDb2RlJykge1xuICAgICAgICBpZiAodGhpcy5zaG93RW1wbG95ZWVDb2RlICYmIHN0YXR1cykge1xuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2VtcGxveWVlQ29kZSddLnZhbHVlXG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZW1wbG95ZWVDb2RlJ10udmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IF8uZ2V0KHRoaXMudXNlclByb2ZpbGVPYmplY3QsICdwcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlscy5lbXBsb3llZUNvZGUnLCAnTi9BJylcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuZW1wbG95bWVudERldGFpbHMgJiYgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlscy5lbXBsb3llZUNvZGUgP1xuICAgICAgICAgIC8vICAgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlscy5lbXBsb3llZUNvZGUgOiBcIk4vQVwiXG4gICAgICAgIH1cbiAgICAgICAgZGF0YU9iamVjdC5wdXNoKGZpZWxkVG9BZGQpXG4gICAgICB9XG5cbiAgICAgIGlmIChfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMucHJpbWFyeUVtYWlsJykge1xuICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLnByaW1hcnlFbWFpbFxuICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5wcmltYXJ5RW1haWxcbiAgICAgIH1cblxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5tb2JpbGUnKSB7XG4gICAgICAgIGlmICh0aGlzLnNob3dNb2JpbGUgJiYgc3RhdHVzKSB7XG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snbW9iaWxlJ10udmFsdWVcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydtb2JpbGUnXS52YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gXy5nZXQodGhpcy51c2VyUHJvZmlsZU9iamVjdCwgJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5tb2JpbGUnLCAnTi9BJylcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzICYmIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLm1vYmlsZSA/XG4gICAgICAgICAgLy8gICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5tb2JpbGUgOiBcIk4vQVwiXG4gICAgICAgIH1cbiAgICAgICAgZGF0YU9iamVjdC5wdXNoKGZpZWxkVG9BZGQpXG4gICAgICB9XG5cbiAgICAgIGlmIChfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuZG9iJykge1xuICAgICAgICBpZiAodGhpcy5zaG93RG9iICYmIHN0YXR1cykge1xuICAgICAgICAgIGxldCBfZG9iOiBhbnkgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZG9iJ10udmFsdWVcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMuZm9ybWF0RGF0ZShfZG9iKVxuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gdGhpcy5mb3JtYXREYXRlKF9kb2IpXG4gICAgICAgICAgZGF0YU9iamVjdC5wdXNoKGZpZWxkVG9BZGQpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzICYmIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmRvYikge1xuICAgICAgICAgICAgbGV0IF9kb2I6IGFueSA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmRvYlxuICAgICAgICAgICAgY29uc3QgW2RheSwgbW9udGgsIHllYXJdID0gX2RvYi5zcGxpdCgnLScpXG4gICAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoTnVtYmVyKHllYXIpLCBOdW1iZXIobW9udGgpIC0gMSwgTnVtYmVyKGRheSkpXG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWREYXkgPSBTdHJpbmcoZGF0ZS5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJylcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZE1vbnRoID0gU3RyaW5nKGRhdGUuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICcwJylcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZFllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKClcbiAgICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gYCR7Zm9ybWF0dGVkWWVhcn0tJHtmb3JtYXR0ZWRNb250aH0tJHtmb3JtYXR0ZWREYXl9YFxuICAgICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSBgJHtmb3JtYXR0ZWRZZWFyfS0ke2Zvcm1hdHRlZE1vbnRofS0ke2Zvcm1hdHRlZERheX1gXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gXCIxOTUwLTA2LTAxXCJcbiAgICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gXCIxOTUwLTA2LTAxXCJcbiAgICAgICAgICB9XG4gICAgICAgICAgZGF0YU9iamVjdC5wdXNoKGZpZWxkVG9BZGQpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5nZW5kZXInKSB7XG4gICAgICAgIGlmICh0aGlzLnNob3dHZW5kZXIgJiYgc3RhdHVzKSB7XG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZ2VuZGVyJ10udmFsdWVcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydnZW5kZXInXS52YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gXy5nZXQodGhpcy51c2VyUHJvZmlsZU9iamVjdCwgJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5nZW5kZXInLCAnTi9BJylcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzICYmIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmdlbmRlciA/XG4gICAgICAgICAgLy8gICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5nZW5kZXIgOiBcIk4vQVwiXG4gICAgICAgIH1cbiAgICAgICAgZGF0YU9iamVjdC5wdXNoKGZpZWxkVG9BZGQpXG4gICAgICB9XG5cbiAgICAgIGlmIChfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuZG9taWNpbGVNZWRpdW0nKSB7XG4gICAgICAgIGlmICh0aGlzLnNob3dEZWNpbWFsTWVkaXVtICYmIHN0YXR1cykge1xuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2RvbWljaWxlTWVkaXVtJ10udmFsdWVcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydkb21pY2lsZU1lZGl1bSddLnZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSBfLmdldCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LCAncHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmRvbWljaWxlTWVkaXVtJywgJ04vQScpXG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscyAmJiB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5kb21pY2lsZU1lZGl1bSA/XG4gICAgICAgICAgLy8gICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5kb21pY2lsZU1lZGl1bSA6IFwiTi9BXCJcbiAgICAgICAgfVxuICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgIH1cblxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5jYXRlZ29yeScpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd0NhdGVnb3J5ICYmIHN0YXR1cykge1xuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2NhdGVnb3J5J10udmFsdWVcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydjYXRlZ29yeSddLnZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSBfLmdldCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LCAncHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmNhdGVnb3J5JywgJ04vQScpXG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscyAmJiB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5jYXRlZ29yeSA/XG4gICAgICAgICAgLy8gICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5jYXRlZ29yeSA6IFwiTi9BXCJcbiAgICAgICAgfVxuICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgIH1cblxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLnBpbkNvZGUnKSB7XG4gICAgICAgIGlmICh0aGlzLnNob3dQaW5Db2RlICYmIHN0YXR1cykge1xuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ3BpbkNvZGUnXS52YWx1ZVxuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ3BpbkNvZGUnXS52YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gXy5nZXQodGhpcy51c2VyUHJvZmlsZU9iamVjdCwgJ3Byb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLnBpbkNvZGUnLCAnTi9BJylcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuZW1wbG95bWVudERldGFpbHMgJiYgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlscy5waW5Db2RlID9cbiAgICAgICAgICAvLyAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuZW1wbG95bWVudERldGFpbHMucGluQ29kZSA6IFwiTi9BXCJcbiAgICAgICAgfVxuICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgIH1cblxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscycpIHtcbiAgICAgICAgaWYgKHRoaXMuY2FuU2hvd3Nob3dDYWRyZURldGFpbHMgJiYgdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2lzQ2FkcmUnXS52YWx1ZSAmJiBzdGF0dXMpIHtcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydpc0NhZHJlJ10udmFsdWVcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydpc0NhZHJlJ10udmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMgJiZcbiAgICAgICAgICAvLyAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmlzQ2FkcmUgPyAnWWVzJyA6ICdObydcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IF8uZ2V0KHRoaXMudXNlclByb2ZpbGVPYmplY3QsICdwcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuaXNDYWRyZScpID8gJ1llcycgOiAnTm8nXG4gICAgICAgIH1cbiAgICAgICAgZGF0YU9iamVjdC5wdXNoKGZpZWxkVG9BZGQpXG4gICAgICB9XG4gICAgICBpZiAoX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNpdmlsU2VydmljZVR5cGUnKSB7XG4gICAgICAgIGlmICh0aGlzLmNhblNob3dzaG93Q2FkcmVEZXRhaWxzICYmIHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydpc0NhZHJlJ10udmFsdWUgJiYgc3RhdHVzKSB7XG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1sndHlwZU9mQ2l2aWxTZXJ2aWNlJ10udmFsdWVcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWyd0eXBlT2ZDaXZpbFNlcnZpY2UnXS52YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMgJiYgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2l2aWxTZXJ2aWNlVHlwZSA/XG4gICAgICAgICAgLy8gICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jaXZpbFNlcnZpY2VUeXBlIDogJ04vQSdcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IF8uZ2V0KHRoaXMudXNlclByb2ZpbGVPYmplY3QsICdwcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2l2aWxTZXJ2aWNlVHlwZScsICdOL0EnKVxuICAgICAgICB9XG4gICAgICAgIGRhdGFPYmplY3QucHVzaChmaWVsZFRvQWRkKVxuICAgICAgfVxuXG4gICAgICBpZiAoX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNpdmlsU2VydmljZU5hbWUnKSB7XG4gICAgICAgIGlmICh0aGlzLmNhblNob3dzaG93Q2FkcmVEZXRhaWxzICYmIHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydpc0NhZHJlJ10udmFsdWUgJiYgc3RhdHVzKSB7XG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snc2VydmljZVR5cGUnXS52YWx1ZVxuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ3NlcnZpY2VUeXBlJ10udmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzICYmIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNpdmlsU2VydmljZU5hbWUgP1xuICAgICAgICAgIC8vICAgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2l2aWxTZXJ2aWNlTmFtZSA6ICdOL0EnXG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSBfLmdldCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LCAncHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNpdmlsU2VydmljZU5hbWUnLCAnTi9BJylcbiAgICAgICAgfVxuICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgIH1cblxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jYWRyZU5hbWUnKSB7XG4gICAgICAgIGlmICh0aGlzLmNhblNob3dzaG93Q2FkcmVEZXRhaWxzICYmIHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydpc0NhZHJlJ10udmFsdWUgJiYgc3RhdHVzKSB7XG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snY2FkcmVOYW1lJ10udmFsdWVcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydjYWRyZU5hbWUnXS52YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gXy5nZXQodGhpcy51c2VyUHJvZmlsZU9iamVjdCwgJ3Byb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jYWRyZU5hbWUnLCAnTi9BJylcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzICYmIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlTmFtZSA/XG4gICAgICAgICAgLy8gICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jYWRyZU5hbWUgOiAnTi9BJ1xuICAgICAgICB9XG4gICAgICAgIGRhdGFPYmplY3QucHVzaChmaWVsZFRvQWRkKVxuICAgICAgfVxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jYWRyZUJhdGNoJykge1xuICAgICAgICBpZiAodGhpcy5jYW5TaG93c2hvd0NhZHJlRGV0YWlscyAmJiB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snaXNDYWRyZSddLnZhbHVlICYmIHN0YXR1cykge1xuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2NhZHJlQmF0Y2gnXS52YWx1ZVxuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2NhZHJlQmF0Y2gnXS52YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMgJiYgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2FkcmVCYXRjaCA/XG4gICAgICAgICAgLy8gICBKU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jYWRyZUJhdGNoKSA6ICdOL0EnXG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSBfLmdldCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LCAncHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlQmF0Y2gnKSA/IEpTT04uc3RyaW5naWZ5KHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlQmF0Y2gpIDogJ04vQSdcbiAgICAgICAgfVxuICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgIH1cblxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5TmFtZScpIHtcbiAgICAgICAgaWYgKHRoaXMuY2FuU2hvd3Nob3dDYWRyZURldGFpbHMgJiYgdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2lzQ2FkcmUnXS52YWx1ZSAmJiBzdGF0dXMpIHtcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMuY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eVxuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gdGhpcy5jYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscyAmJiB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5TmFtZSA/XG4gICAgICAgICAgLy8gICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5TmFtZSA6ICdOL0EnXG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSBfLmdldCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LCAncHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHlOYW1lJywgJ04vQScpXG4gICAgICAgIH1cbiAgICAgICAgZGF0YU9iamVjdC5wdXNoKGZpZWxkVG9BZGQpXG4gICAgICB9XG5cbiAgICAgIGlmIChfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5hZGRpdGlvbmFsUHJvcGVydGllcy5leHRlcm5hbFN5c3RlbUlkJykge1xuICAgICAgICBpZiAodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5hZGRpdGlvbmFsUHJvcGVydGllcyAmJlxuICAgICAgICAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuYWRkaXRpb25hbFByb3BlcnRpZXMuZXh0ZXJuYWxTeXN0ZW1JZCkge1xuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5hZGRpdGlvbmFsUHJvcGVydGllcyAmJiB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLmV4dGVybmFsU3lzdGVtSWRcbiAgICAgICAgICAvLyAgID8gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5hZGRpdGlvbmFsUHJvcGVydGllcy5leHRlcm5hbFN5c3RlbUlkIDogXCJOL0FcIlxuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gXy5nZXQodGhpcy51c2VyUHJvZmlsZU9iamVjdCwgJ3Byb2ZpbGVEZXRhaWxzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLmV4dGVybmFsU3lzdGVtSWQnLCAnTi9BJylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9ICdOL0EnXG4gICAgICAgIH1cbiAgICAgICAgZGF0YU9iamVjdC5wdXNoKGZpZWxkVG9BZGQpXG4gICAgICB9XG5cbiAgICAgIGlmIChfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5hZGRpdGlvbmFsUHJvcGVydGllcy5leHRlcm5hbFN5c3RlbURvcicpIHtcbiAgICAgICAgaWYgKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuYWRkaXRpb25hbFByb3BlcnRpZXMgJiZcbiAgICAgICAgICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLmV4dGVybmFsU3lzdGVtRG9yKSB7XG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzICYmIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuYWRkaXRpb25hbFByb3BlcnRpZXMuZXh0ZXJuYWxTeXN0ZW1Eb3JcbiAgICAgICAgICAvLyAgID8gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5hZGRpdGlvbmFsUHJvcGVydGllcy5leHRlcm5hbFN5c3RlbURvciA6IFwiTi9BXCJcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IF8uZ2V0KHRoaXMudXNlclByb2ZpbGVPYmplY3QsICdwcm9maWxlRGV0YWlscy5hZGRpdGlvbmFsUHJvcGVydGllcy5leHRlcm5hbFN5c3RlbURvcicsICdOL0EnKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gJ04vQSdcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9ICdOL0EnXG4gICAgICAgIH1cbiAgICAgICAgZGF0YU9iamVjdC5wdXNoKGZpZWxkVG9BZGQpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiBkYXRhT2JqZWN0XG4gIH1cblxuICB1cGRhdGVFbWFpbChlbWFpbDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcG9zdERhdGEgPSB7XG4gICAgICByZXF1ZXN0OiB7XG4gICAgICAgICd1c2VySWQnOiB0aGlzLmNvbmZpZ1NyYy51bk1hcHBlZFVzZXIuaWQsXG4gICAgICAgICdjb250ZXh0VG9rZW4nOiB0aGlzLmNvbnRleHRUb2tlbixcbiAgICAgICAgJ3Byb2ZpbGVEZXRhaWxzJzoge1xuICAgICAgICAgICdwZXJzb25hbERldGFpbHMnOiB7XG4gICAgICAgICAgICAncHJpbWFyeUVtYWlsJzogZW1haWwsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciArIDFcbiAgICB0aGlzLnVzZXJQcm9maWxlU2VydmljZS51cGRhdGVQcmltYXJ5RW1haWxEZXRhaWxzKHBvc3REYXRhKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveVN1YmplY3QkKSlcbiAgICAgIC5zdWJzY3JpYmUoKF9yZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyIC0gMVxuICAgICAgICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5wcmltYXJ5RW1haWwgPSBlbWFpbFxuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4odGhpcy5oYW5kbGVUcmFuc2xhdGVUbygnZW1haWxVcGRhdGVkJykpXG4gICAgICB9LCAoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRoaXMuYWRkTG9hZGVyID0gdGhpcy5hZGRMb2FkZXIgLSAxXG4gICAgICAgIGlmICghZXJyb3Iub2spIHtcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4odGhpcy5oYW5kbGVUcmFuc2xhdGVUbygndXBkYXRlRW1haWxGYWlsZWQnKSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgfVxuXG4gIHNldHVwU2Nyb2xsTGlzdGVuZXIob3BlbmVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qgc2VhcmNoRGVzaWduYXRpb25Db250cm9sID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdzZWFyY2hEZXNpZ25hdGlvbicpO1xuICAgIGlmIChvcGVuZWQgJiYgc2VhcmNoRGVzaWduYXRpb25Db250cm9sKSB7XG4gICAgICBzZWFyY2hEZXNpZ25hdGlvbkNvbnRyb2wuc2V0VmFsdWUoJycpXG4gICAgICB0aGlzLmRlc2lnbmF0aW9uc09mZnNldCA9IDBcbiAgICAgIHRoaXMuZGVzaWduYXRpb25zTWV0YSA9IFtdO1xuICAgICAgdGhpcy5nZXRkZXNpZ25hdGlvbnNNZXRhKClcbiAgICAgIGNvbnN0IHNlYXJjaElucHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnNlYXJjaC1pbnB1dCcpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICBpZiAoc2VhcmNoSW5wdXQpIHtcbiAgICAgICAgc2VhcmNoSW5wdXQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhbmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1hdC1zZWxlY3QtcGFuZWwnKTtcbiAgICAgIGlmIChwYW5lbCkge1xuICAgICAgICBwYW5lbC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLm9uRGVzaWduYXRpb25TZWxlY3RTY3JvbGwuYmluZCh0aGlzKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25EZXNpZ25hdGlvblNlbGVjdFNjcm9sbChldmVudDogYW55KTogdm9pZCB7XG4gICAgY29uc3QgZWxlbWVudCA9IGV2ZW50LnRhcmdldDtcbiAgICAgIC8vIENoZWNrIGlmIHVzZXIgaGFzIHNjcm9sbGVkIHRvIHRoZSBib3R0b20gKHdpdGggYSBzbWFsbCB0aHJlc2hvbGQpXG4gICAgICBpZiAoZWxlbWVudC5zY3JvbGxUb3AgKyBlbGVtZW50LmNsaWVudEhlaWdodCA+PSBlbGVtZW50LnNjcm9sbEhlaWdodCAtIDUpIHtcbiAgICAgICAgLy8gT25seSBsb2FkIG1vcmUgaWYgbm90IGFscmVhZHkgbG9hZGluZyBhbmQgaWYgdGhlcmUgYXJlIHBvdGVudGlhbGx5IG1vcmUgaXRlbXNcbiAgICAgICAgaWYgKCF0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgJiYgdGhpcy5kZXNpZ25hdGlvbnNNZXRhLmxlbmd0aCA8IHRoaXMuZGVzaWduYXRpb25zVG90YWxDb3VudCkge1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IHRydWU7XG4gICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbnNPZmZzZXQgKz0gMTtcbiAgICAgICAgICB0aGlzLmdldGRlc2lnbmF0aW9uc01ldGEoKVxuICAgICAgICB9XG4gICAgICB9XG4gIH1cblxuICBjaGVja0N1cnJlbnREZXNpZ25hdGlvblByZXNlbnQoKSB7XG4gICAgLy8gR2V0IHRoZSBjdXJyZW50IGRlc2lnbmF0aW9uIHZhbHVlXG4gICAgY29uc3Qgc2VhcmNoRGVzaWduYXRpb25Db250cm9sID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdkZXNpZ25hdGlvbicpO1xuICAgIGNvbnN0IGN1cnJlbnREZXNpZ25hdGlvbiA9IHNlYXJjaERlc2lnbmF0aW9uQ29udHJvbCA/IHNlYXJjaERlc2lnbmF0aW9uQ29udHJvbC52YWx1ZSA6ICcnO1xuICAgIC8vIENoZWNrIGlmIGN1cnJlbnQgZGVzaWduYXRpb24gZXhpc3RzIGluIHRoZSBsaXN0XG4gICAgaWYgKGN1cnJlbnREZXNpZ25hdGlvbikge1xuICAgICAgY29uc3QgZGVzaWduYXRpb25FeGlzdHMgPSB0aGlzLmRlc2lnbmF0aW9uc01ldGEuc29tZShcbiAgICAgICAgKGRlc2lnbmF0aW9uOiBhbnkpID0+IGRlc2lnbmF0aW9uLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gY3VycmVudERlc2lnbmF0aW9uLnRvTG93ZXJDYXNlKClcbiAgICAgICk7XG5cbiAgICAgIC8vIElmIGRlc2lnbmF0aW9uIGRvZXNuJ3QgZXhpc3QgaW4gdGhlIGxpc3QsIGFkZCBpdFxuICAgICAgaWYgKCFkZXNpZ25hdGlvbkV4aXN0cykge1xuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgZGVzaWduYXRpb24gb2JqZWN0IHRvIG1hdGNoIHRoZSBzdHJ1Y3R1cmUgb2Ygb3RoZXIgaXRlbXNcbiAgICAgICAgY29uc3QgbmV3RGVzaWduYXRpb24gPSB7XG4gICAgICAgICAgbmFtZTogY3VycmVudERlc2lnbmF0aW9uLFxuICAgICAgICAgIHN0YXR1czogJ0FjdGl2ZSdcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kZXNpZ25hdGlvbnNNZXRhLnVuc2hpZnQobmV3RGVzaWduYXRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uRGVzaWduYXRpb25Ecm9wZG93bkNsb3NlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBzZWFyY2hEZXNpZ25hdGlvbkNvbnRyb2wgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ3NlYXJjaERlc2lnbmF0aW9uJyk7XG4gICAgaWYgKHNlYXJjaERlc2lnbmF0aW9uQ29udHJvbCkge1xuICAgICAgc2VhcmNoRGVzaWduYXRpb25Db250cm9sLnNldFZhbHVlKCcnKVxuICAgICAgdGhpcy5kZXNpZ25hdGlvblNlYXJjaFRleHQgPSAnJ1xuICAgIH1cbiAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpXG4gIH1cblxufVxuIiwiPGRpdiAjZnVsbFNjcmVlbkNvbnRhaW5lcj5cbiAgICA8ZGl2IGNsYXNzPVwiZGlhbG9nLWhlYWRlciB0ZXh0LXJpZ2h0IG1iLTJcIj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0LWljb24gbm90cmFuc2xhdGUgbWF0ZXJpYWwtaWNvbnMgY2xvc2UtaWNvbiBjdXJzb3ItcG9pbnRlclwiIG1hdHByZWZpeD1cIlwiIHJvbGU9XCJpbWdcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBbbWF0LWRpYWxvZy1jbG9zZV09XCJmYWxzZVwiPmNsb3NlPC9tYXQtaWNvbj5cbiAgICA8L2Rpdj5cbiAgICA8aDE+IHt7ZGF0YT8uY291cnNlTmFtZX19IDwvaDE+XG4gICAgPGRpdiBjbGFzcz1cInctZnVsbFwiICpuZ0lmPVwiIWlzTG9hZGluZ1wiPlxuICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJ1c2VyRGV0YWlsc0Zvcm1cIiBjbGFzcz1cInVzZXJEZXRhaWxzRm9ybVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIiAqbmdJZj1cImNhblNob3dOYW1lXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1zZW1pYm9sZCBtYXJnaW4tMCByZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgaTE4bj1cIlRpdGxlIGxhYmVsfExhYmVsIHdoaWNoIGV4cGxhaW5zIHRoZSB1c2VyIHRvIGVudGVyIHRpdGxlXCI+XG4gICAgICAgICAgICAgICAge3sgJ3Byb2ZpbGVJbmZvLm5hbWUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJpbnB1dC10ZXh0XCIgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiIHBsYWNlaG9sZGVyPVwiTmFtZVwiLz5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiICpuZ0lmPVwiY2FuU2hvd09yZ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWFyZ2luLTAgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgIGkxOG49XCJUaXRsZSBsYWJlbHxMYWJlbCB3aGljaCBleHBsYWlucyB0aGUgdXNlciB0byBlbnRlciB0aXRsZVwiPlxuICAgICAgICAgICAgICAgIHt7IChzaG93RG9wdENoYW5nZXMgPyAncHJvZmlsZUluZm8ucHJlc2VudE9yZ2FuaXNhdGlvbicgOiAncHJvZmlsZUluZm8ub3JnYW5pc2F0aW9uJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImlucHV0LXRleHRcIiBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJvcmdhbmlzYXRpb25cIiBwbGFjZWhvbGRlcj1cIk9yZ2FuaXNhdGlvblwiLz5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiICpuZ0lmPVwiY2FuU2hvd0VtYWlsXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1zZW1pYm9sZCBtYXJnaW4tMCByZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgaTE4bj1cIlRpdGxlIGxhYmVsfExhYmVsIHdoaWNoIGV4cGxhaW5zIHRoZSB1c2VyIHRvIGVudGVyIHRpdGxlXCI+XG4gICAgICAgICAgICAgICAge3sgJ3Byb2ZpbGVJbmZvLmVtYWlsJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiaW5wdXQtdGV4dFwiIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cInByaW1hcnlFbWFpbFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgZW1haWxcIiAoa2V5dXApPVwiaGFuZGxlRW1wdHkoJ3ByaW1hcnlFbWFpbCcpXCIvPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgY2xhc3M9XCJtYXQtZXJyb3JcIiAqbmdJZj1cInVzZXJEZXRhaWxzRm9ybS5nZXQoJ3ByaW1hcnlFbWFpbCcpLmhhc0Vycm9yKCdyZXF1aXJlZCcpIHx8IHVzZXJEZXRhaWxzRm9ybS5nZXQoJ3ByaW1hcnlFbWFpbCcpLmhhc0Vycm9yKCdwYXR0ZXJuJylcIj5cbiAgICAgICAgICAgICAge3sgJ3Byb2ZpbGVJbmZvLmludmFsaWRFbWFpbCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmRcIiAqbmdJZj1cInZlcmlmeUVtYWlsICYmICFvdHBTZW50ICYmICFlVmVyaWZpZWRcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJnZXQtb3RwXCIgKGNsaWNrKT1cImhhbmRsZUdlbmVyYXRlRW1haWxPVFAoJ2VtYWlsJylcIj57eyAncHJvZmlsZUluZm8uZ2V0T1RQJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZW1haWxPdHBTZW50XCI+XG4gICAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZW1haWxPdHBGb3JtXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZW50ZXItb3RwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXNlbWlib2xkIHJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICBpMThuPVwiVGl0bGUgbGFiZWx8TGFiZWwgd2hpY2ggZXhwbGFpbnMgdGhlIHVzZXIgdG8gZW50ZXIgdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyAncHJvZmlsZUluZm8uZW50ZXJPVFAnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlRpbWUgUmVtYWluaW5nOiA8c3BhbiAjZW1haWxUaW1lckRpdj48L3NwYW4+PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwicHJvZmlsZS1mb3JtLWZpZWxkIG1vYmlsZS1udW1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZU90cFwiIGNsYXNzPVwiaW5wdXQtdGV4dCBjdXN0b20tc2l6ZVwiIHBsYWNlaG9sZGVyPVwie3sgJ3Byb2ZpbGVJbmZvLmVudGVyVGhlT1RQJyB8IHRyYW5zbGF0ZSB9fVwiIG1heGxlbmd0aD1cIjZcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNlbnRlclwiICpuZ0lmPVwic2hvd0VtYWlsUmVzZW5kT1RQXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZXJcIj57eyAncHJvZmlsZUluZm8uZGlkTm90UmVjZWl2ZU9UUCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXNlbmQtb3RwXCIgKGNsaWNrKT1cImhhbmRsZVJlc2VuZEVtYWlsT1RQKClcIj4mbmJzcDsmbmJzcDt7eyAncHJvZmlsZUluZm8ucmVzZW50T1RQJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgbWItNFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzYXZlLWJ1dHRvblwiIChjbGljayk9XCJ2ZXJpZnlFbWFpbE9UUCgpXCI+e3sgJ3Byb2ZpbGVJbmZvLnN1Ym1pdCcgfCB0cmFuc2xhdGUgfX08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCIgKm5nSWY9XCJjYW5TaG93R3JvdXBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXNlbWlib2xkIG1hcmdpbi0wIHJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgaTE4bj1cIlRpdGxlIGxhYmVsfExhYmVsIHdoaWNoIGV4cGxhaW5zIHRoZSB1c2VyIHRvIGVudGVyIHRpdGxlXCI+XG4gICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5ncm91cCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJncm91cFwiIHBsYWNlaG9sZGVyPVwie3sgJ3Byb2ZpbGVJbmZvLmNob29zZUFHcm91cCcgfCB0cmFuc2xhdGUgfX1cIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBncm91cCBvZiBncm91cERhdGFcIiB2YWx1ZT1cInt7Z3JvdXB9fVwiPnt7IGdyb3VwIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC14cyBtYi0yXCIgKm5nSWY9XCJzaG93RG9wdENoYW5nZXNcIj5cbiAgICAgICAgICAgICAge3sncHJvZmlsZUluZm8uZ3JvdXBOb3RlJyB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgcmVsYXRpdmVcIiAqbmdJZj1cImNhblNob3dEZXNpZ25hdGlvblwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXNlbWlib2xkIG1hcmdpbi0wIHJlcXVpcmVkXCJcbiAgICAgICAgICAgIGkxOG49XCJUaXRsZSBsYWJlbHxMYWJlbCB3aGljaCBleHBsYWlucyB0aGUgdXNlciB0byBlbnRlciB0aXRsZVwiPlxuICAgICAgICAgICAge3sgJ3Byb2ZpbGVJbmZvLmRlc2lnbmF0aW9uJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGF1dG8tY29tcGxldGUtcm93IHJlbGF0aXZlXCI+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiaW5wdXQtdGV4dCBoaWdoLXppbmRleFwiIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cImRlc2lnbmF0aW9uXCJcbiAgICAgICAgICAgICAgICAoaW5wdXQpPVwiZmlsdGVyZGVzaWduYXRpb24oJGV2ZW50LnRhcmdldC52YWx1ZSlcIiAoZm9jdXMpPVwib25EZXNpZ25hdGlvbnNGb2N1cygpXCIgI3RleHRCb3hcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdwcm9maWxlSW5mby5jaG9vc2VBRGVzaWduYXRpb24nIHwgdHJhbnNsYXRlIH19XCI+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImRpc2FnbmF0aW9uLWNhcmV0XCI+YXJyb3dfZHJvcF9kb3duPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+IC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tc2VsZWN0LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJmaXhlZC1oZWlnaHQtc2VsZWN0XCI+XG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IHBsYWNlaG9sZGVyPVwie3sgJ3Byb2ZpbGVJbmZvLmNob29zZUFEZXNpZ25hdGlvbicgfCB0cmFuc2xhdGUgfX1cIiBmb3JtQ29udHJvbE5hbWU9XCJkZXNpZ25hdGlvblwiICAoY2xvc2VkKT1cIm9uRGVzaWduYXRpb25Ecm9wZG93bkNsb3NlZCgpXCIgKG9wZW5lZENoYW5nZSk9XCJzZXR1cFNjcm9sbExpc3RlbmVyKCRldmVudClcIiAgcGFuZWxDbGFzcz1cInNlYXJjaC1wYW5lbFwiPlxuICAgICAgICAgICAgICAgIDwhLS0gU3RpY2t5IHNlYXJjaCBpbnB1dCBjb250YWluZXIgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0aWNreS1zZWFyY2gtY29udGFpbmVyXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1pbnB1dC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggZGVzaWduYXRpb25cIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VhcmNoRGVzaWduYXRpb25cIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZWFyY2gtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2VhcmNoRGVzaWduYXRpb24/LnZhbHVlXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjbGVhci1idXR0b25cIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlYXJjaERlc2lnbmF0aW9uPy5zZXRWYWx1ZSgnJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pyVXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSBPcHRpb25zIGxpc3QgLS0+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBkZXNpZ25hdGlvbnNNZXRhIFwiIFt2YWx1ZV09XCJvcHRpb24/Lm5hbWVcIiAoY2xpY2spPVwic2VsZWN0RGVzaWduYXRpb24ob3B0aW9uPy5uYW1lKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uPy5uYW1lIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICA8IS0tIExvYWRpbmcgaW5kaWNhdG9yIC0tPlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnNcIiBjbGFzcz1cImxvYWRpbmctaW5kaWNhdG9yXCI+XG4gICAgICAgICAgICAgICAgICAgIExvYWRpbmcgbW9yZS4uLlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSBObyByZXN1bHRzIG1lc3NhZ2UgLS0+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nSWY9XCIoZGVzaWduYXRpb25zTWV0YSApPy5sZW5ndGggPT09IDBcIiBkaXNhYmxlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIE5vIG1hdGNoZXMgZm91bmRcbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cInVzZXJEZXRhaWxzRm9ybT8uY29udHJvbHNbJ2Rlc2lnbmF0aW9uJ10/LmludmFsaWQgJiYgdXNlckRldGFpbHNGb3JtPy5jb250cm9sc1snZGVzaWduYXRpb24nXT8udG91Y2hlZFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtZXJyb3JcIj5cbiAgICAgICAgICAgICAgICBQbGVhc2Ugc2VsZWN0IGEgdmFsaWQgZGVzaWduYXRpb24uXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC14cyBtYi0yXCIgKm5nSWY9XCJzaG93RG9wdENoYW5nZXNcIj5cbiAgICAgICAgICAgIHt7J3Byb2ZpbGVJbmZvLmRlc2lnbmF0aW9uTm90ZScgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImF1dG8tbGlzdCBmbGV4IGZsZXgtY29sIGlnbm9yZS1ibHVyXCIgI2Ryb3Bkb3duXG4gICAgICAgICAgICAqbmdJZj1cIm9wZW5EZXNpZ25hdGlvbkRyb3Bkb3duICYmIGZpbHRlckRlc2lnbmF0aW9uc01ldGEubGVuZ3RoXCI+XG4gICAgICAgICAgICA8ZGl2IChtb3VzZWRvd24pPVwicHJldmVudEJsdXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiaXRlbSB7e3VzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZGVzaWduYXRpb24nXT8udmFsdWU/LnRvTG93ZXJDYXNlKCkgPT09IGRlc2lnbmF0aW9uPy5uYW1lPy50b0xvd2VyQ2FzZSgpID8gJ2l0ZW0tYWN0aXZlJyA6ICcnfX1cIlxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGVzaWduYXRpb24gb2YgZmlsdGVyRGVzaWduYXRpb25zTWV0YVwiIChjbGljayk9XCJzZWxlY3REZXNpZ25hdGlvbihkZXNpZ25hdGlvbi5uYW1lKVwiPlxuICAgICAgICAgICAgICB7eyBkZXNpZ25hdGlvbj8ubmFtZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCByZWxhdGl2ZVwiICpuZ0lmPVwiY2FuU2hvd0Rlc2lnbmF0aW9uICYmIGNhblNob3dPdGhlckRlc2lnbmF0aW9uXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWFyZ2luLTAgcmVxdWlyZWRcIlxuICAgICAgICAgICAgaTE4bj1cIlRpdGxlIGxhYmVsfExhYmVsIHdoaWNoIGV4cGxhaW5zIHRoZSB1c2VyIHRvIGVudGVyIHRpdGxlXCI+XG4gICAgICAgICAgICB7eyAncHJvZmlsZUluZm8ub3RoZXJEZXNpZ25hdGlvbicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY2FuU2hvd090aGVyRGVzaWduYXRpb25cIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiaW5wdXQtdGV4dFwiIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cIm90aGVyRGVzaWduYXRpb25cIiBwbGFjZWhvbGRlcj1cInt7ICdwcm9maWxlSW5mby5lbnRlckRlc2lnbmF0aW9uJyB8IHRyYW5zbGF0ZSB9fVwiLz5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIiAqbmdJZj1cImNhblNob3dFbXBsb3llZUNvZGVcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWFyZ2luLTAgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgICAgaTE4bj1cIlRpdGxlIGxhYmVsfExhYmVsIHdoaWNoIGV4cGxhaW5zIHRoZSB1c2VyIHRvIGVudGVyIHRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICB7eyAncHJvZmlsZUluZm8uZW1wbG95ZWVJZCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImlucHV0LXRleHRcIiBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJlbXBsb3llZUNvZGVcIiBwbGFjZWhvbGRlcj1cIkVudGVyIGVtcGxveWVlIGNvZGVcIi8+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+ICAgIFxuICAgICAgICAgICAgICA8bWF0LWVycm9yIGNsYXNzPVwibWF0LWVycm9yXCIgKm5nSWY9XCJ1c2VyRGV0YWlsc0Zvcm0/LmdldCgnZW1wbG95ZWVDb2RlJyk/Lmhhc0Vycm9yKCdwYXR0ZXJuJylcIj5cbiAgICAgICAgICAgICAgICBQbGVhc2UgZW50ZXIgYW4gQWxwaGEtbnVtZXJpYyB2YWx1ZSBvbmx5XG4gICAgICAgICAgICA8L21hdC1lcnJvcj4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiICpuZ0lmPVwiY2Fuc2hvd01vYmlsZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWFyZ2luLTAgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgIGkxOG49XCJUaXRsZSBsYWJlbHxMYWJlbCB3aGljaCBleHBsYWlucyB0aGUgdXNlciB0byBlbnRlciB0aXRsZVwiPlxuICAgICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5tb2JpbGVOdW1iZXInIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC00XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudHJ5LWNvZGUgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXJcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICAgICAgICAgICs5MVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cIm1vYmlsZS1udW1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJpbnB1dC10ZXh0IG1vYmlsZS10ZXh0IHJlbGF0aXZlXCIgbWF4bGVuZ3RoPVwiMTBcIiAoa2V5dXApPVwiaGFuZGxlRW1wdHkoJ21vYmlsZScpXCJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJtb2JpbGVcIiBwbGFjZWhvbGRlcj1cIkVudGVyIG1vYmlsZSBudW1iZXJcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwidmVyaWZpZWQtY2hlY2tcIiAqbmdJZj1cIm1WZXJpZmllZFwiPmNoZWNrX2NpcmNsZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciBjbGFzcz1cIm1hdC1lcnJvclwiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdtb2JpbGUnKS5oYXNFcnJvcigncmVxdWlyZWQnKSB8fCB1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdtb2JpbGUnKS5oYXNFcnJvcigncGF0dGVybicpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAncHJvZmlsZUluZm8ucGxlYXNlRW50ZXJWYWxpZE1vYmlsZU51bWJlcicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmRcIiAqbmdJZj1cInZlcmlmeU1vYmlsZSAmJiAhb3RwU2VudCAmJiAhbVZlcmlmaWVkXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImdldC1vdHAgc206bXItNFwiIChjbGljayk9XCJoYW5kbGVHZW5lcmF0ZU9UUCgncGhvbmUnKVwiPnt7ICdwcm9maWxlSW5mby5nZXRPVFAnIHxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm90cFNlbnRcIj4gICAgICAgICAgICAgXG4gICAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwib3RwRm9ybVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGVudGVyLW90cFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1zZW1pYm9sZCByZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgaTE4bj1cIlRpdGxlIGxhYmVsfExhYmVsIHdoaWNoIGV4cGxhaW5zIHRoZSB1c2VyIHRvIGVudGVyIHRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgJ3Byb2ZpbGVJbmZvLmVudGVyT1RQJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5UaW1lIFJlbWFpbmluZzogPHNwYW4gI3RpbWVyRGl2Pjwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJwcm9maWxlLWZvcm0tZmllbGQgbW9iaWxlLW51bVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJvdHBcIiBjbGFzcz1cImlucHV0LXRleHQgY3VzdG9tLXNpemVcIiBwbGFjZWhvbGRlcj1cInt7ICdwcm9maWxlSW5mby5lbnRlclRoZU9UUCcgfCB0cmFuc2xhdGUgfX1cIiBtYXhsZW5ndGg9XCI2XCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jZW50ZXJcIiAqbmdJZj1cInNob3dSZXNlbmRPVFBcIj4gIFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWVyXCI+e3sgJ3Byb2ZpbGVJbmZvLmRpZE5vdFJlY2VpdmVPVFAnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzZW5kLW90cFwiIChjbGljayk9XCJoYW5kbGVSZXNlbmRPVFAoKVwiPiZuYnNwOyZuYnNwO3t7ICdwcm9maWxlSW5mby5yZXNlbnRPVFAnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBtYi00XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNhdmUtYnV0dG9uXCIgKGNsaWNrKT1cInZlcmlmeU1vYmlsZU9UUCgpXCI+e3sgJ3Byb2ZpbGVJbmZvLnN1Ym1pdCcgfCB0cmFuc2xhdGUgfX08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiICpuZ0lmPVwiY2FuU2hvd0dlbmRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWFyZ2luLTAgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICBpMThuPVwiVGl0bGUgbGFiZWx8TGFiZWwgd2hpY2ggZXhwbGFpbnMgdGhlIHVzZXIgdG8gZW50ZXIgdGl0bGVcIj5cbiAgICAgICAgICAgICAge3sgJ3Byb2ZpbGVJbmZvLmdlbmRlcicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJnZW5kZXJcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBnZW5kZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IF9nZW5kZXIgb2YgZVVzZXJHZW5kZXJcIiB2YWx1ZT1cInt7IF9nZW5kZXIgfX1cIj57e1xuICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVRyYW5zbGF0ZVRvKF9nZW5kZXIudG9Mb3dlckNhc2UoKSkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIiAqbmdJZj1cImNhblNob3dEb2JcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWFyZ2luLTAgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgIGkxOG49XCJUaXRsZSBsYWJlbHxMYWJlbCB3aGljaCBleHBsYWlucyB0aGUgdXNlciB0byBlbnRlciB0aXRsZVwiPlxuICAgICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5kb2InIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGNsYXNzPVwiaW5wdXQtdGV4dCBpY29uLWluY2x1ZGUtaW5wdXRcIiBbbWF4XT1cImN1cnJlbnREYXRlXCIgW21hdERhdGVwaWNrZXJdPVwicGlja2VyXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZERhdGVcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRvYlwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IGRhdGUgb2YgYmlydGhcIiAvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJwaWNrZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjcGlja2VyPjwvbWF0LWRhdGVwaWNrZXI+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCByZWxhdGl2ZVwiICpuZ0lmPVwiY2FuU2hvd0RvbWljaWxlTWVkaXVtXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1zZW1pYm9sZCBtYXJnaW4tMCByZXF1aXJlZFwiXG4gICAgICAgICAgICAgIGkxOG49XCJUaXRsZSBsYWJlbHxMYWJlbCB3aGljaCBleHBsYWlucyB0aGUgdXNlciB0byBlbnRlciB0aXRsZVwiPlxuICAgICAgICAgICAgICB7eyAncHJvZmlsZUluZm8ubW90aGVyVG9uZ3VlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhdXRvLWNvbXBsZXRlLXJvdyByZWxhdGl2ZVwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiaW5wdXQtdGV4dCBoaWdoLXppbmRleFwiIGFyaWEtbGFiZWw9XCJEb21pY2lsZSBNZWRpdW0gKE1vdGhlciBUb25ndWUpXCIgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRvbWljaWxlTWVkaXVtXCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgbW90aGVyIHRvbmd1ZVwiXG4gICAgICAgICAgICAgICAgICAoaW5wdXQpPVwiZmlsdGVyTGFuZ3VhZ2UoJGV2ZW50LnRhcmdldC52YWx1ZSlcIiAoZm9jdXMpPVwib25MYW5ndWFnZUZvY3VzKClcIiAjbGFuZ3VhZ2VUZXh0Qm94Lz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtb3RoZXItdG91bmd1ZS1jYXJldFwiPmFycm93X2Ryb3BfZG93bjwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJ1c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2RvbWljaWxlTWVkaXVtJ10uaW52YWxpZCAmJiB1c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2RvbWljaWxlTWVkaXVtJ10udG91Y2hlZFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtZXJyb3JcIj5cbiAgICAgICAgICAgICAgICAgIFBsZWFzZSBzZWxlY3QgYSB2YWxpZCBtb3RoZXIgdG9uZ3VlLlxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdXRvLWxhbmd1YWdlLWxpc3QgZmxleCBmbGV4LWNvbCBpZ25vcmUtYmx1clwiICNsYW5ndWFnZURyb3Bkb3duXG4gICAgICAgICAgICAgICpuZ0lmPVwib3Blbkxhbmd1YWdlRHJvcGRvd24gJiYgbWFzdGVyTGFuZ3VhZ2VzPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgPGRpdiAobW91c2Vkb3duKT1cInByZXZlbnRMYW5ndWFnZUJsdXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJsYW5ndWFnZS1pdGVtIHt7dXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydkb21pY2lsZU1lZGl1bSddPy52YWx1ZT8udG9Mb3dlckNhc2UoKSA9PT0gbGFuZ3VhZ2U/Lm5hbWU/LnRvTG93ZXJDYXNlKCkgPyAnbGFuZ3VhZ2UtaXRlbS1hY3RpdmUnIDogJyd9fVwiXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGxhbmd1YWdlIG9mIG1hc3Rlckxhbmd1YWdlc1wiIChjbGljayk9XCJzZWxlY3RMYW5ndWFnZShsYW5ndWFnZS5uYW1lKVwiPlxuICAgICAgICAgICAgICAgIHt7IGxhbmd1YWdlPy5uYW1lIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCIgKm5nSWY9XCJjYW5TaG93Q2F0ZWdvcnlcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWFyZ2luLTAgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgIGkxOG49XCJUaXRsZSBsYWJlbHxMYWJlbCB3aGljaCBleHBsYWlucyB0aGUgdXNlciB0byBlbnRlciB0aXRsZVwiPlxuICAgICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5jYXRlZ29yeScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJjYXRlZ29yeVwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IGNhdGVnb3J5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBjYXRlZ29yeSBvZiBlQ2F0ZWdvcnlcIiB2YWx1ZT1cInt7IGNhdGVnb3J5IH19XCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVUcmFuc2xhdGVUbyhjYXRlZ29yeT8udG9Mb3dlckNhc2UoKSkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiICpuZ0lmPVwiY2FuU2hvd3BpbkNvZGVcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWFyZ2luLTAgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgICAgaTE4bj1cIlRpdGxlIGxhYmVsfExhYmVsIHdoaWNoIGV4cGxhaW5zIHRoZSB1c2VyIHRvIGVudGVyIHRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICB7eyAndXNlclByb2ZpbGUub2ZmaWNlUGluQ29kZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImVtYWlsXCIgY2xhc3M9XCJpbnB1dC10ZXh0XCIgbWF0SW5wdXQgbWF4bGVuZ3RoPVwiNlwiIGZvcm1Db250cm9sTmFtZT1cInBpbkNvZGVcIiBwbGFjZWhvbGRlcj1cIkVudGVyIHBpbmNvZGVcIi8+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgY2xhc3M9XCJtYXQtZXJyb3JcIiAqbmdJZj1cInVzZXJEZXRhaWxzRm9ybT8uZ2V0KCdwaW5Db2RlJyk/Lmhhc0Vycm9yKCdwYXR0ZXJuJylcIj5cbiAgICAgICAgICAgICAgICB7eyAncHJvZmlsZUluZm8uaW52YWxpZFBpbkNvZGUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+ICAgICAgICAgIFxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIiAqbmdJZj1cImNhblNob3dzaG93Q2FkcmVEZXRhaWxzICAmJiAhc2hvd0RvcHRDaGFuZ2VzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXNlbWlib2xkIG1hcmdpbi0wIHJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICBpMThuPVwiVGl0bGUgbGFiZWx8TGFiZWwgd2hpY2ggZXhwbGFpbnMgdGhlIHVzZXIgdG8gZW50ZXIgdGl0bGVcIj5cbiAgICAgICAgICAgICAgICB7eyAncHJvZmlsZUluZm8uZnJvbUdvdk9yZ2FuaXphdGlvbicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwicHJvZmlsZS1mb3JtLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJpc0NhZHJlXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJnZXRJc0NhZHJlU3RhdHVzKCRldmVudC52YWx1ZSlcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBjYWRyZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwidHJ1ZVwiPlllczwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImZhbHNlXCI+Tm88L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCIgKm5nSWY9XCJjYW5TaG93c2hvd0NhZHJlRGV0YWlscyAmJiBpc0NhZHJlU3RhdHVzICAmJiAhc2hvd0RvcHRDaGFuZ2VzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXNlbWlib2xkIG1hcmdpbi0wIHJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICBpMThuPVwiVGl0bGUgbGFiZWx8TGFiZWwgd2hpY2ggZXhwbGFpbnMgdGhlIHVzZXIgdG8gZW50ZXIgdGl0bGVcIj5cbiAgICAgICAgICAgICAgICB7eyAncHJvZmlsZUluZm8udHlwZU9mQ2l2aWxTZXJ2aWNlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJwcm9maWxlLWZvcm0tZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInR5cGVPZkNpdmlsU2VydmljZVwiIChzZWxlY3Rpb25DaGFuZ2UpPVwiZ2V0U2VydmljZSgkZXZlbnQudmFsdWUpXCIgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IHR5cGUgb2YgY2l2aWwgc2VydmljZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgc2VydmljZSBvZiBjaXZpbFNlcnZpY2VUeXBlc1wiIFt2YWx1ZV09XCJzZXJ2aWNlXCI+e3sgc2VydmljZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIiAqbmdJZj1cImNhblNob3dzaG93Q2FkcmVEZXRhaWxzICYmIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ3R5cGVPZkNpdmlsU2VydmljZScpLnZhbHVlICYmIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ2lzQ2FkcmUnKS52YWx1ZSAmJiAhc2hvd0RvcHRDaGFuZ2VzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXNlbWlib2xkIG1hcmdpbi0wIHJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICBpMThuPVwiVGl0bGUgbGFiZWx8TGFiZWwgd2hpY2ggZXhwbGFpbnMgdGhlIHVzZXIgdG8gZW50ZXIgdGl0bGVcIj5cbiAgICAgICAgICAgICAgICB7eyAncHJvZmlsZUluZm8uc2VydmljZVR5cGUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInByb2ZpbGUtZm9ybS1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwic2VydmljZVR5cGVcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VydmljZVNlbGVjdCgkZXZlbnQpXCIgcGxhY2Vob2xkZXI9XCJTZWxlY3Qgc2VydmljZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBzZXJ2aWNlIG9mIHNlcnZpY2VOYW1lXCIgW3ZhbHVlXT1cInNlcnZpY2VcIj57eyBzZXJ2aWNlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiICpuZ0lmPVwiY2FuU2hvd3Nob3dDYWRyZURldGFpbHMgJiYgdXNlckRldGFpbHNGb3JtLmdldCgnc2VydmljZVR5cGUnKS52YWx1ZSAmJiBcbiAgICAgICAgICAgICAgdXNlckRldGFpbHNGb3JtLmdldCgnaXNDYWRyZScpLnZhbHVlIFxuICAgICAgICAgICAgICAmJiB1c2VyRGV0YWlsc0Zvcm0uZ2V0KCd0eXBlT2ZDaXZpbFNlcnZpY2UnKS52YWx1ZSAmJiAoXG4gICAgICAgICAgICAgICAgICB1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdzZXJ2aWNlVHlwZScpLnZhbHVlID09PSAnSW5kaWFuIEFkbWluaXN0cmF0aXZlIFNlcnZpY2UgKElBUyknIHx8IFxuICAgICAgICAgICAgICAgICAgdXNlckRldGFpbHNGb3JtLmdldCgnc2VydmljZVR5cGUnKS52YWx1ZSA9PT0gJ0luZGlhbiBQb2xpY2UgU2VydmljZSAoSVBTKScgfHwgXG4gICAgICAgICAgICAgICAgICB1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdzZXJ2aWNlVHlwZScpLnZhbHVlID09PSAnSW5kaWFuIEZvcmVzdCBTZXJ2aWNlIChJRm9TKScgXG4gICAgICAgICAgICAgICAgKSAmJiAhc2hvd0RvcHRDaGFuZ2VzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXNlbWlib2xkIG1hcmdpbi0wIHJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICBpMThuPVwiVGl0bGUgbGFiZWx8TGFiZWwgd2hpY2ggZXhwbGFpbnMgdGhlIHVzZXIgdG8gZW50ZXIgdGl0bGVcIj5cbiAgICAgICAgICAgICAgICB7eyAncHJvZmlsZUluZm8uY2FkcmUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInByb2ZpbGUtZm9ybS1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiY2FkcmVOYW1lXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkNhZHJlU2VsZWN0KCRldmVudC52YWx1ZSlcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBjYWRyZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBzdGF0ZSBvZiBjYWRyZVwiIFt2YWx1ZV09XCJzdGF0ZVwiPnt7IHN0YXRlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNob3dEb3B0Q2hhbmdlc1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiICpuZ0lmPVwiY2FuU2hvd3Nob3dDYWRyZURldGFpbHMgJiYgdXNlckRldGFpbHNGb3JtLmdldCgnc2VydmljZVR5cGUnKSAmJiAodXNlckRldGFpbHNGb3JtLmdldCgnc2VydmljZVR5cGUnKS52YWx1ZSAmJiBcbiAgICAgICAgICAgIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ2lzQ2FkcmUnKS52YWx1ZSAmJiB1c2VyRGV0YWlsc0Zvcm0uZ2V0KCd0eXBlT2ZDaXZpbFNlcnZpY2UnKS52YWx1ZSAmJiAoXG4gICAgICAgICAgICAgICAgdXNlckRldGFpbHNGb3JtLmdldCgnc2VydmljZVR5cGUnKS52YWx1ZSA9PT0gJ0luZGlhbiBBZG1pbmlzdHJhdGl2ZSBTZXJ2aWNlIChJQVMpJyB8fCBcbiAgICAgICAgICAgICAgICB1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdzZXJ2aWNlVHlwZScpLnZhbHVlID09PSAnSW5kaWFuIFBvbGljZSBTZXJ2aWNlIChJUFMpJyB8fCBcbiAgICAgICAgICAgICAgICB1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdzZXJ2aWNlVHlwZScpLnZhbHVlID09PSAnSW5kaWFuIEZvcmVzdCBTZXJ2aWNlIChJRm9TKScgXG4gICAgICAgICAgICApICYmIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ2NhZHJlTmFtZScpLnZhbHVlKSAgPyB0cnVlIDogKCh1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdzZXJ2aWNlVHlwZScpLnZhbHVlICYmIFxuICAgICAgICAgICAgICAgIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ2lzQ2FkcmUnKS52YWx1ZSBcbiAgICAgICAgICAgICYmIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ3R5cGVPZkNpdmlsU2VydmljZScpLnZhbHVlICYmIChcbiAgICAgICAgICAgICAgICB1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdzZXJ2aWNlVHlwZScpLnZhbHVlICE9PSAnSW5kaWFuIEFkbWluaXN0cmF0aXZlIFNlcnZpY2UgKElBUyknICYmIFxuICAgICAgICAgICAgICAgIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ3NlcnZpY2VUeXBlJykudmFsdWUgIT09ICdJbmRpYW4gUG9saWNlIFNlcnZpY2UgKElQUyknICYmIFxuICAgICAgICAgICAgICAgIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ3NlcnZpY2VUeXBlJykudmFsdWUgIT09ICdJbmRpYW4gRm9yZXN0IFNlcnZpY2UgKElGb1MpJyBcbiAgICAgICAgICAgICkpKSA/IHRydWUgOiBmYWxzZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXNlbWlib2xkIG1hcmdpbi0wIHJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICAgIGkxOG49XCJUaXRsZSBsYWJlbHxMYWJlbCB3aGljaCBleHBsYWlucyB0aGUgdXNlciB0byBlbnRlciB0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAge3sgJ3Byb2ZpbGVJbmZvLmJhdGNoJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwicHJvZmlsZS1mb3JtLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImNhZHJlQmF0Y2hcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBiYXRjaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHllYXIgb2YgeWVhckFycmF5XCIgW3ZhbHVlXT1cInllYXJcIj57eyB5ZWFyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiICpuZ0lmPVwiY2FuU2hvd3Nob3dDYWRyZURldGFpbHMgJiYgdXNlckRldGFpbHNGb3JtLmdldCgnaXNDYWRyZScpLnZhbHVlICYmICB1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdjYWRyZUJhdGNoJykudmFsdWUgJiYgIXNob3dEb3B0Q2hhbmdlc1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1zZW1pYm9sZCBtYXJnaW4tMCByZXF1aXJlZCBtYi0zXCJcbiAgICAgICAgICAgICAgICBpMThuPVwiVGl0bGUgbGFiZWx8TGFiZWwgd2hpY2ggZXhwbGFpbnMgdGhlIHVzZXIgdG8gZW50ZXIgdGl0bGVcIj5cbiAgICAgICAgICAgICAgICB7eyAncHJvZmlsZUluZm8uY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FkcmVDb250cm9sLW5hbWVcIj57e2NhZHJlQ29udHJvbGxpbmdBdXRob3JpdHl9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBmbGV4IGZsZXgtcm93IGdhcC00IGp1c3RpZnktZW5kIG1hcmdpbi10b3AtbVwiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzYXZlLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInVzZXJEZXRhaWxzRm9ybT8uaW52YWxpZCB8fCAhbVZlcmlmaWVkIHx8ICFlVmVyaWZpZWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvblN1Ym1pdEZvcm0odXNlckRldGFpbHNGb3JtKVwiPlxuICAgICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5zYXZlQ2hhbmdlcycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZm9ybT5cbiAgICA8L2Rpdj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWRkTG9hZGVyID4gMFwiID5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBteS0yIGxvYWRlciBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8bWF0LXNwaW5uZXIgY2xhc3M9XCJpbmxpbmUtYmxvY2tcIj48L21hdC1zcGlubmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cbiJdfQ==