vcomply-workflow-engine 7.4.8 → 7.4.9

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.
@@ -1585,9 +1585,9 @@ export class AddMultipleResponsibilityWithTabComponent {
1585
1585
  this.hasValue(obj?.endsByDateMonth);
1586
1586
  if (isOneTime && hasLifecycleEnd) {
1587
1587
  const message = VALIDATION_MESSAGES.ONE_TIME_LIFECYCLE;
1588
- this.setFieldIssue(obj, 'endsAfterOccurrences', VALIDATION_SEVERITY.ERROR, message);
1589
- this.setFieldIssue(obj, 'endsByDateDay', VALIDATION_SEVERITY.ERROR, message);
1590
- this.setFieldIssue(obj, 'endsByDateMonth', VALIDATION_SEVERITY.ERROR, message);
1588
+ this.setFieldIssue(obj, 'endsAfterOccurrences', VALIDATION_SEVERITY.INFO, message);
1589
+ this.setFieldIssue(obj, 'endsByDateDay', VALIDATION_SEVERITY.INFO, message);
1590
+ this.setFieldIssue(obj, 'endsByDateMonth', VALIDATION_SEVERITY.INFO, message);
1591
1591
  }
1592
1592
  else if (hasExtendedFrequencyColumns &&
1593
1593
  Number(obj?.endsAfterOccurrences) === 1 &&
@@ -2233,4 +2233,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
2233
2233
  }], featureflag: [{
2234
2234
  type: Input
2235
2235
  }] } });
2236
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLW11bHRpcGxlLXJlc3BvbnNpYmlsaXR5LXdpdGgtdGFiLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL2FkZC1tdWx0aXBsZS1yZXNwb25zaWJpbGl0eS13aXRoLXRhYi9hZGQtbXVsdGlwbGUtcmVzcG9uc2liaWxpdHktd2l0aC10YWIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdngtd29ya2Zsb3ctZW5naW5lL3NyYy9saWIvYWRkLW11bHRpcGxlLXJlc3BvbnNpYmlsaXR5LXdpdGgtdGFiL2FkZC1tdWx0aXBsZS1yZXNwb25zaWJpbGl0eS13aXRoLXRhYi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxHQUliLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEMsT0FBTyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBQ25DLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBTzdCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLHVCQUF1QixFQUN2QixnQkFBZ0IsRUFDaEIsNEJBQTRCLEVBQzVCLDBCQUEwQixFQUMxQixxQkFBcUIsRUFDckIsMkJBQTJCLEVBQzNCLGVBQWUsRUFDZixpQkFBaUIsRUFDakIsd0JBQXdCLEVBQ3hCLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQiwyQkFBMkIsR0FDNUIsTUFBTSw2QkFBNkIsQ0FBQztBQUVyQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7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SUFBSSxJQUFJO2dCQUM5QixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDckQsT0FBTyxTQUFTLEVBQUUsWUFBWSxJQUFJLFFBQVEsRUFDMUM7Z0JBQ0EsT0FBTyxHQUFHLElBQUksQ0FBQzthQUNoQjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQzsrR0E5MEZVLHlDQUF5QzttR0FBekMseUNBQXlDLDRjQ2xEdEQsK3FGQStDZ007OzRGREduTCx5Q0FBeUM7a0JBUnJELFNBQVM7K0JBQ0UsMENBQTBDO2dTQVExQyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBRUcsOEJBQThCO3NCQUF2QyxNQUFNO2dCQWdCb0IsZ0JBQWdCO3NCQUExQyxLQUFLO3VCQUFDLGNBQWM7Z0JBR1osVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBbUZHLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25Jbml0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gtZXMnO1xyXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudC9tb21lbnQnO1xyXG5pbXBvcnQgKiBhcyBYTFNYIGZyb20gJ3hsc3gnO1xyXG5pbXBvcnQgeyBTbmFja0JhclNlcnZpY2UgfSBmcm9tICcuLi91aS1raXQvc25hY2stYmFyL3NuYWNrLWJhci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWRkUmlza1NlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9hZGQtcmlzay5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGcmVxdWVuY3lCdWxrU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL2ZyZXF1ZW5jeS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVzcG9uc2liaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvcmVzcG9uc2liaWxpdHkuc2VydmljZSc7XHJcbmltcG9ydCB7IElmcmFtZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9pZnJhbWUuc2VydmljZSc7XHJcbmltcG9ydCB7IFJFU1BPTlNJQklMSVRZIH0gZnJvbSAnLi4vY29uc3RhbnRzL3hsc3guY29uc3RhbnQnO1xyXG5pbXBvcnQge1xyXG4gIEFTU0lHTkVFX1RZUEVfRFJPUERPV05fTElTVCxcclxuICBGUkVRVUVOQ1lfRFJPUERPV05fTElTVCxcclxuICBGVUxMX01PTlRIX05BTUVTLFxyXG4gIE5PTl9CTE9DS0lOR19EUk9QRE9XTl9GSUVMRFMsXHJcbiAgUFJPR1JBTV9UWVBFX0RST1BET1dOX0xJU1QsXHJcbiAgUkNfVFlQRV9EUk9QRE9XTl9MSVNULFxyXG4gIFJFVklFV0VSX1RZUEVfRFJPUERPV05fTElTVCxcclxuICBSSVNLX0NMQVNTX0xJU1QsXHJcbiAgU0hPUlRfTU9OVEhfTkFNRVMsXHJcbiAgRklMRV9WQUxJREFUSU9OX01FU1NBR0VTLFxyXG4gIFZBTElEQVRJT05fTUVTU0FHRVMsXHJcbiAgVkFMSURBVElPTl9TRVZFUklUWSxcclxuICBXRUVLREFZX0ZSRVFVRU5DSUVTLFxyXG4gIFlFU19OT19EUk9QRE9XTl9MSVNULFxyXG4gIGR1ZURhdGVEYXlPdXRPZlJhbmdlTWVzc2FnZSxcclxufSBmcm9tICcuLi9jb25zdGFudHMvcmVzcG9uc2liaWxpdHknO1xyXG5pbXBvcnQgeyBCdWxrVXBsb2FkU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2J1bGstdXBsb2FkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSRUdFWCB9IGZyb20gJy4uL2NvbnN0YW50cy9yZWdpeC5jb25zdGFudHMnO1xyXG5cclxudHlwZSBBT0EgPSBhbnlbXVtdO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItYWRkLW11bHRpcGxlLXJlc3BvbnNpYmlsaXR5LXdpdGgtdGFiJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWRkLW11bHRpcGxlLXJlc3BvbnNpYmlsaXR5LXdpdGgtdGFiLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFtcclxuICAgICcuL2FkZC1tdWx0aXBsZS1yZXNwb25zaWJpbGl0eS13aXRoLXRhYi5jb21wb25lbnQubGVzcycsXHJcbiAgICAnLi4vZm9ybXMubGVzcycsXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFkZE11bHRpcGxlUmVzcG9uc2liaWxpdHlXaXRoVGFiQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAT3V0cHV0KCkgcGlja2VyQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcG9wdWxhdGVPcHRpb24gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNsb3NlV29ya2Zsb3cgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGRpc2Nvbm5lY3RSZWZyZXNoID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIGlzTm90aWZpY2F0aW9uUGVuZGluZyA9IDA7XHJcbiAgQE91dHB1dCgpIGNsb3NlQWRkTXVsdGlwbGVSZXNwb25zaWJpbGl0eSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBxdWVyeVBhcmFtOiBzdHJpbmcgPSAnJztcclxuICByZWNlbnRSZXNwb25zaWJpbGl0eVVybDogYW55ID0ge1xyXG4gICAgYnlSZXNwb25zaWJpbGl0aWVzOiB7IHR5cGU6IFsncmVjZW50X3Jlc3BvbnNpYmlsaXRpZXMnXSwgc3ViVHlwZTogWydDQyddIH0sXHJcbiAgICBieVN0YXR1czogeyB0eXBlOiBbXSwgc3ViVHlwZTogW10gfSxcclxuICAgIGZpbHRlck9iamVjdDoge1xyXG4gICAgICByZXNwb25zaWJpbGl0eUNlbnRlcjogW10sXHJcbiAgICAgIGVudHJ1c3RlZEJ5OiBbXSxcclxuICAgICAgZW50cnVzdGVkVG86IFtdLFxyXG4gICAgICByaXNrSWRzOiBbXSxcclxuICAgICAgcmVzcG9uc2liaWxpdHlDYXRlZ29yeTogW10sXHJcbiAgICB9LFxyXG4gICAgdGltZVBlcmlvZERldGFpbHM6IHsgdHlwZTogJycsIHNlbGVjdGVkUGVyaW9kOiAnJywgc2VsZWN0ZWRZZWFyOiAnJyB9LFxyXG4gICAgc3RhdHVzOiAnJyxcclxuICB9O1xyXG5cclxuICBASW5wdXQoJ3VwbG9hZGVkRmlsZScpIHNldCB1cGxvYWRlZEZpbGVEYXRhKGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy51cGxvYWRlZEZpbGUoZGF0YSk7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIG9yZ0RldGFpbHMhOiBhbnk7XHJcbiAgQElucHV0KCkgZmVhdHVyZSE6IGFueTtcclxuXHJcbiAgdXJsID1cclxuICAgICdxPXtcImJ5UmVzcG9uc2liaWxpdGllc1wiOntcInR5cGVcIjpbXCJyZXNwb25zaWJpbGl0aWVzX2luX3F1ZXVlXCJdLFwic3ViVHlwZVwiOltcIkNDXCJdfSxcImJ5U3RhdHVzXCI6e1widHlwZVwiOltcInJlc3BvbnNpYmlsaXRpZXNfaW5fcXVldWVcIl0sXCJzdWJUeXBlXCI6W119LFwiZmlsdGVyT2JqZWN0XCI6e1wicmVzcG9uc2liaWxpdHlDZW50ZXJcIjpbXSxcImVudHJ1c3RlZEJ5XCI6W10sXCJlbnRydXN0ZWRUb1wiOltdLFwicmlza0lkc1wiOltdLFwicmVzcG9uc2liaWxpdHlDYXRlZ29yeVwiOltdfSxcInRpbWVQZXJpb2REZXRhaWxzXCI6e1widHlwZVwiOlwiXCIsXCJzZWxlY3RlZFBlcmlvZFwiOlwiXCIsXCJzZWxlY3RlZFllYXJcIjpcIlwifSxcInN0YXR1c1wiOlwiXCJ9JztcclxuICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ6IGFueSA9IHtcclxuICAgIGhlYWRlcjogW10sXHJcbiAgICByZXBvcnRzOiBbXSxcclxuICB9O1xyXG4gIHRhYlR5cGU6ICdmcmVxdWVuY3knIHwgJ29uZ29pbmcnIHwgJ29uQ29tcGxldGlvbicgPSAnZnJlcXVlbmN5JztcclxuICB0YWJJbmRleDogYW55ID0ge1xyXG4gICAgZnJlcXVlbmN5OiAwLFxyXG4gICAgb25nb2luZzogMSxcclxuICAgIG9uQ29tcGxldGlvbjogMixcclxuICB9O1xyXG5cclxuICBidWxrVXBsb2FkOiBhbnkgPSB7XHJcbiAgICBmcmVxdWVuY3k6IHtcclxuICAgICAgaGVhZGVyOiBbXSxcclxuICAgICAgc3ViSGVhZGluZzogW10sXHJcbiAgICAgIHJlcG9ydHM6IFtdLFxyXG4gICAgfSxcclxuICAgIG9uZ29pbmc6IHtcclxuICAgICAgaGVhZGVyOiBbXSxcclxuICAgICAgc3ViSGVhZGluZzogW10sXHJcbiAgICAgIHJlcG9ydHM6IFtdLFxyXG4gICAgfSxcclxuICAgIG9uQ29tcGxldGlvbjoge1xyXG4gICAgICBoZWFkZXI6IFtdLFxyXG4gICAgICBzdWJIZWFkaW5nOiBbXSxcclxuICAgICAgcmVwb3J0czogW10sXHJcbiAgICB9LFxyXG4gIH07XHJcblxyXG4gIHRlbXBsYXRlSW5mbzogYW55ID0ge1xyXG4gICAgY2F0ZWdvcnlMaXN0OiBbXSxcclxuICAgIHJjTGlzdDogW10sXHJcbiAgICBhc3NpZ25vcnNMaXN0OiBbXSxcclxuICAgIGFzc2lnbmVlc0xpc3Q6IFtdLFxyXG4gICAgcmV2aWV3ZXJMaXN0OiBbXSxcclxuICAgIHBhcmVudFJlc3BvbnNpYmlsaXR5OiBbXSxcclxuICAgIHBlb3BsZURyb3Bkb3duTmFtZXM6IFtdLFxyXG4gICAgbWVtYmVySWQ6ICcnLFxyXG4gIH07XHJcbiAgaXNMb2FkZXIgPSBmYWxzZTtcclxuICBzaG93Q2F0ZWdvcnlMaXN0ID0gZmFsc2U7XHJcbiAgdGVtcGxhdGVEb3dubG9hZGVkID0gZmFsc2U7XHJcbiAgZG93bmxvYWRJblByb2dyZXNzID0gZmFsc2U7XHJcbiAgbG9hZGVyID0gZmFsc2U7XHJcbiAgaXNGaWxlRW1wdHkgPSBmYWxzZTtcclxuICBpc1dyb25nRmlsZSA9IGZhbHNlO1xyXG4gIGlzV3JvbmdGb3JtYXQgPSBmYWxzZTtcclxuICBmaWxlTmFtZTogYW55O1xyXG4gIGRhdGE6IGFueTtcclxuICBzaG93RXhjZWwgPSBmYWxzZTtcclxuICB1cGxvYWRlZEZpbGVzOiBhbnkgPSBbXTtcclxuICBmaWxlUmVzcG9uc2U6IGFueSA9IFtdO1xyXG4gIGZpbGVWYWx1ZTogYW55O1xyXG4gIG1lbWJlcklkID0gMDtcclxuICBvcmdhbml6YXRpb25JZCA9IDA7XHJcbiAgZXJyb3JNZXNzYWdlID0gJyBpbnZhbGlkIGZpbGUgZXJyb3InO1xyXG4gIGRvd25sb2FkU3RhdHVzOiBzdHJpbmcgPSAnTk9UX0RPV05MT0FESU5HJztcclxuICBkb3dubG9hZFBlcmNlbnQgPSAwO1xyXG4gIGRlZmF1bHRPd25lciA9ICcnO1xyXG4gIHNtaWxleU1lc3NhZ2UgPSBgWW91J3JlIEFsbCBTZXQhIFdlJ3JlIHByb2Nlc3NpbmcgeW91ciByZXF1ZXN0IGFuZCB5b3Ugd2lsbCBiZSBub3RpZmllZCB2aWEgZW1haWwgdXBvbiBjb21wbGV0aW9uLmA7XHJcbiAgYWN0aW9uQnV0dG9ucyA9IFtcclxuICAgIHtcclxuICAgICAgYnV0dG9uVGV4dDogJ0VudHJ1c3QgTW9yZSBSZXNwb25zaWJpbGl0aWVzJyxcclxuICAgICAgY2xhc3M6ICd3aGl0ZS1idG4nLFxyXG4gICAgICBpZDogJ2FkZE1vcmUnLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgYnV0dG9uVGV4dDogdGhpcy5pc05vdGlmaWNhdGlvblBlbmRpbmdcclxuICAgICAgICA/ICdWaWV3IFJlc3BvbnNpYmlsaXRpZXMgSW4gUXVldWUnXHJcbiAgICAgICAgOiAnVmlldyBSZXNwb25zaWJpbGl0aWVzJyxcclxuICAgICAgY2xhc3M6ICdibHVlLWJ0bicsXHJcbiAgICAgIGlkOiAndmlldycsXHJcbiAgICB9LFxyXG4gIF07XHJcbiAgc2hvd1NtaWxleSA9IGZhbHNlO1xyXG4gIG1lbWJlcl9vYmpfaWQgPSAnJztcclxuICByaXNrQ2xhc3NFbmFibGVkOiBhbnk7XHJcbiAgdXNlckluZm8hOiBhbnk7XHJcbiAgcmVzcG9uc2liaWxpdHlEYXRhITogYW55O1xyXG4gIEBJbnB1dCgpIGZlYXR1cmVmbGFnOiBhbnk7XHJcbiAgZmZCdWxrVXBsb2FkT3B0aW1pemF0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgUkVTUE9OU0lCSUxJVFkgPSBSRVNQT05TSUJJTElUWTtcclxuXHJcbiAgaXNEYXlJbnZhbGlkID0gZmFsc2U7XHJcbiAgaXNEYXRlRm9ybWF0SW52YWxpZCA9IGZhbHNlO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByaXNrU2VydmljZTogQWRkUmlza1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc3BvbnNpYmlsaXR5U2VydmljZTogUmVzcG9uc2liaWxpdHlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZyZXF1ZW5jeVNlcnZpY2U6IEZyZXF1ZW5jeUJ1bGtTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogU25hY2tCYXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBpZnJhbWVTZXJ2aWNlOiBJZnJhbWVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBidWxrVXBsb2FkU2VydmljZTogQnVsa1VwbG9hZFNlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHt9XHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnBpY2tlckNoYW5nZWQuZW1pdChmYWxzZSk7XHJcbiAgICB0aGlzLm9yZ2FuaXphdGlvbklkID0gdGhpcy5hdXRoU2VydmljZS5nZXRPcmdhbml6YXRpb25JZCgpO1xyXG4gICAgdGhpcy5tZW1iZXJfb2JqX2lkID0gdGhpcy5hdXRoU2VydmljZS5nZXRVc2VyRGV0YWlscygpLnVzZXIudWlkO1xyXG4gICAgdGhpcy51c2VySW5mbyA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0VXNlckRldGFpbHMoKS51c2VyO1xyXG4gICAgdGhpcy5kZWZhdWx0T3duZXIgPSB0aGlzLnVzZXJJbmZvXHJcbiAgICAgID8gdGhpcy51c2VySW5mby5uYW1lICsgJyAoJyArIHRoaXMudXNlckluZm8uZW1haWwgKyAnKSdcclxuICAgICAgOiAnJztcclxuICAgIHRoaXMuZ2V0VXNlckRldGFpbHMoKTtcclxuICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uRGV0YWlscygpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5yaXNrQ2xhc3NFbmFibGVkID0gcmVzLmVuYWJsZV9yaXNrY2xhc3M7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZmZCdWxrVXBsb2FkT3B0aW1pemF0aW9uID0gdGhpcy5mZWF0dXJlLmlzRmVhdHVyZUVuYWJsZWQoXHJcbiAgICAgICdmZl9idWxrX3VwbG9hZF9vcHRpbWl6YXRpb24nXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlckJyb3dzZUZpbGUoKSB7XHJcbiAgICBjb25zdCBnZXRGaWxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGVJbnB1dCcpO1xyXG4gICAgaWYgKGdldEZpbGUpIHtcclxuICAgICAgZ2V0RmlsZS5jbGljaygpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXRVc2VyRGV0YWlscygpIHtcclxuICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0VXNlckluZm8oKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuaXNOb3RpZmljYXRpb25QZW5kaW5nID0gcmVzLm5vdGlmaWNhdGlvbl9wZW5kaW5nX2ZsYWc7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHVwbG9hZGVkRmlsZShldmVudDogYW55LCB0YWJUeXBlPzogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCA9IHtcclxuICAgICAgICBoZWFkZXI6IFtdLFxyXG4gICAgICAgIHJlcG9ydHM6IFtdLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy50ZW1wbGF0ZUluZm8gPSB7XHJcbiAgICAgICAgY2F0ZWdvcnlMaXN0OiBbXSxcclxuICAgICAgICByY0xpc3Q6IFtdLFxyXG4gICAgICAgIGFzc2lnbm9yc0xpc3Q6IFtdLFxyXG4gICAgICAgIGFzc2lnbmVlc0xpc3Q6IFtdLFxyXG4gICAgICAgIHJldmlld2VyTGlzdDogW10sXHJcbiAgICAgICAgcGFyZW50UmVzcG9uc2liaWxpdHk6IFtdLFxyXG4gICAgICAgIHBlb3BsZURyb3Bkb3duTmFtZXM6IFtdLFxyXG4gICAgICAgIG1lbWJlcklkOiAnJyxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy51cGxvYWRlZEZpbGVzID0gW107XHJcbiAgICAgIGNvbnN0IHJlZmVyZW5jZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNzY3JvbGxSZWZlcmVuY2UnKTtcclxuICAgICAgaWYgKHJlZmVyZW5jZSkge1xyXG4gICAgICAgIHJlZmVyZW5jZS5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdjZW50ZXInIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaXNGaWxlRW1wdHkgPSBmYWxzZTtcclxuICAgICAgdGhpcy5pc1dyb25nRmlsZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGb3JtYXQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5maWxlTmFtZSA9IGV2ZW50LnRhcmdldC5maWxlc1swXS5uYW1lO1xyXG4gICAgICB0aGlzLnVwbG9hZGVkRmlsZXMucHVzaChldmVudC50YXJnZXQuZmlsZXMpO1xyXG4gICAgICBjb25zdCB0YXJnZXQ6IERhdGFUcmFuc2ZlciA9IGV2ZW50LnRhcmdldCBhcyBEYXRhVHJhbnNmZXI7XHJcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogY3VybHlcclxuICAgICAgaWYgKHRhcmdldC5maWxlcy5sZW5ndGggIT09IDEpXHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgdXNlIG11bHRpcGxlIGZpbGVzJyk7XHJcbiAgICAgIGNvbnN0IHJlYWRlcjogRmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgYnN0cjogc3RyaW5nID0gZS50YXJnZXQucmVzdWx0O1xyXG4gICAgICAgIGNvbnN0IHdiOiBYTFNYLldvcmtCb29rID0gWExTWC5yZWFkKGJzdHIsIHsgdHlwZTogJ2JpbmFyeScgfSk7XHJcbiAgICAgICAgY29uc3Qgd3NuYW1lOiBzdHJpbmcgPSB3Yi5TaGVldE5hbWVzW1JFU1BPTlNJQklMSVRZLnNoZWV0SW5kZXguZnJlcXVlbmN5UmVzcG9uc2liaWxpdHldO1xyXG4gICAgICAgIGNvbnN0IHNoZWV0Mjogc3RyaW5nID0gd2IuU2hlZXROYW1lc1tSRVNQT05TSUJJTElUWS5zaGVldEluZGV4Lm9uR29pbmdSZXNwb25zaWJpbGl0eV07XHJcbiAgICAgICAgY29uc3Qgd3NuYW1lMTogc3RyaW5nID0gd2IuU2hlZXROYW1lc1tSRVNQT05TSUJJTElUWS5zaGVldEluZGV4LmRhdGFdO1xyXG4gICAgICAgIGNvbnN0IHdzOiBYTFNYLldvcmtTaGVldCA9IHdiLlNoZWV0c1t3c25hbWVdO1xyXG4gICAgICAgIGNvbnN0IHNoZWV0UmVwb3J0MjogWExTWC5Xb3JrU2hlZXQgPSB3Yi5TaGVldHNbc2hlZXQyXTtcclxuICAgICAgICBjb25zdCB0ZW1wRGF0YTogWExTWC5Xb3JrU2hlZXQgPSB3Yi5TaGVldHNbd3NuYW1lMV07XHJcbiAgICAgICAgY29uc3QgdERhdGEgPSBYTFNYLnV0aWxzLnNoZWV0X3RvX2pzb24odGVtcERhdGEsIHsgaGVhZGVyOiAxIH0pIGFzIEFPQTtcclxuICAgICAgICBjb25zdCB0ZW1wTGlzdCA9IHREYXRhLmZpbHRlcihcclxuICAgICAgICAgIChkYXRhRWxlbWVudDogYW55KSA9PiBkYXRhRWxlbWVudC5sZW5ndGggPiAwXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnNldE9yZ2FuaXphdGlvbkRldGFpbHModGVtcExpc3QpO1xyXG4gICAgICAgIGNvbnN0IGZyZXF1ZW5jeUhlYWRlcnMgPSB0aGlzLmJ1bGtVcGxvYWRTZXJ2aWNlLmdldEhlYWRlclJvd3Mod3MpO1xyXG4gICAgICAgIGNvbnN0IG9uZ29pbmdIZWFkZXJzID0gdGhpcy5idWxrVXBsb2FkU2VydmljZS5nZXRIZWFkZXJSb3dzKHNoZWV0UmVwb3J0Mik7XHJcbiAgICAgICAgY29uc3QgY29sdW1uRXJyb3IgPSB0aGlzLmJ1bGtVcGxvYWRTZXJ2aWNlLnZhbGlkYXRlUmVzcG9uc2liaWxpdHlIZWFkZXJzKFtcclxuICAgICAgICAgIHsgLi4uZnJlcXVlbmN5SGVhZGVycywgc2hlZXQ6ICdmcmVxdWVuY3knIH0sXHJcbiAgICAgICAgICB7IC4uLm9uZ29pbmdIZWFkZXJzLCBzaGVldDogJ29uZ29pbmcnIH0sXHJcbiAgICAgICAgXSk7XHJcbiAgICAgICAgaWYgKHRoaXMuYmxvY2tVcGxvYWRGb3JDb2x1bW5FcnJvcihjb2x1bW5FcnJvcikpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgd2IuU2hlZXROYW1lcy5mb3JFYWNoKChzaGVldDogYW55KSA9PiB7XHJcbiAgICAgICAgICBzd2l0Y2ggKHNoZWV0Py50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ZyZXF1ZW5jeSByZXNwb25zaWJpbGl0aWVzJzpcclxuICAgICAgICAgICAgICB0aGlzLnNldERhdGFGb3JEaWZmZXJlbnRUYWJzKHdzLCBzaGVldCk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ29uZ29pbmcgcmVzcG9uc2liaWxpdGllcyc6XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXREYXRhRm9yRGlmZmVyZW50VGFicyhzaGVldFJlcG9ydDIsIHNoZWV0KTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfTtcclxuICAgICAgcmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyh0YXJnZXQuZmlsZXNbMF0pO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYmxvY2tVcGxvYWRGb3JDb2x1bW5FcnJvcihjb2x1bW5FcnJvcjogJ29rJyB8ICdtaXNzaW5nJyB8ICdleHRyYScgfCBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmIChjb2x1bW5FcnJvciAhPT0gJ21pc3NpbmcnICYmIGNvbHVtbkVycm9yICE9PSAnZXh0cmEnKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuZXJyb3JNZXNzYWdlID1cclxuICAgICAgY29sdW1uRXJyb3IgPT09ICdleHRyYSdcclxuICAgICAgICA/IEZJTEVfVkFMSURBVElPTl9NRVNTQUdFUy5FWFRSQV9DT0xVTU5TXHJcbiAgICAgICAgOiBGSUxFX1ZBTElEQVRJT05fTUVTU0FHRVMuSEVBREVSU19NSVNTSU5HO1xyXG4gICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNGaWxlRW1wdHkgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0V4Y2VsID0gZmFsc2U7XHJcbiAgICB0aGlzLmZpbGVWYWx1ZSA9ICcnO1xyXG4gICAgdGhpcy5zbmFja0Jhci5zaG93KHRoaXMuZXJyb3JNZXNzYWdlLCAnYWxlcnQnKTtcclxuICAgIHRoaXMuY2xvc2VBZGRNdWx0aXBsZVJlc3BvbnNpYmlsaXR5LmVtaXQoKTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSXQgdGFrZXMgYSB3b3Jrc2hlZXQgYW5kIGEgc2hlZXQgbmFtZSwgYW5kIHRoZW4gaXQgc2V0cyB0aGUgZGF0YSBmb3IgZGlmZmVyZW50IHRhYnMuXHJcbiAgICogQHBhcmFtIHdzIC0gWExTWC5Xb3JrU2hlZXQsIHNoZWV0OiBzdHJpbmdcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2hlZXQgLSBzdHJpbmcgLSB0aGUgbmFtZSBvZiB0aGUgc2hlZXQgaW4gdGhlIGV4Y2VsIGZpbGVcclxuICAgKiBAcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIFwicmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkXCIgd2hpY2ggaXMgYW4gb2JqZWN0LlxyXG4gICAqL1xyXG4gIHNldERhdGFGb3JEaWZmZXJlbnRUYWJzKHdzOiBYTFNYLldvcmtTaGVldCwgc2hlZXQ6IHN0cmluZykge1xyXG4gICAgbGV0IHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZDogYW55ID0ge1xyXG4gICAgICBoZWFkZXI6IFtdLFxyXG4gICAgICByZXBvcnRzOiBbXSxcclxuICAgICAgc3ViSGVhZGluZzogW10sXHJcbiAgICB9O1xyXG4gICAgbGV0IHNoZWV0VmFsdWUgPSBYTFNYLnV0aWxzLnNoZWV0X3RvX2pzb24od3MsIHtcclxuICAgICAgaGVhZGVyOiAxLFxyXG4gICAgICByYXc6IGZhbHNlLFxyXG4gICAgfSkgYXMgQU9BO1xyXG4gICAgbGV0IGRhdGEgPSBzaGVldFZhbHVlLmZpbHRlcigocmVzOiBhbnkpID0+IHtcclxuICAgICAgbGV0IGlzVW5kZWZpbmVkID0gJyc7XHJcbiAgICAgIHJlcy5mb3JFYWNoKChlbDogYW55KSA9PiB7XHJcbiAgICAgICAgaXNVbmRlZmluZWQgPSBpc1VuZGVmaW5lZCArIGVsO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKHNoZWV0VmFsdWVbMl0gJiYgc2hlZXRWYWx1ZVsyXVsxXSA9PT0gJ1Byb2dyYW0nKSB7XHJcbiAgICAgICAgcmV0dXJuICEocmVzPy5sZW5ndGggPT09IDkgJiYgcmVzWzhdID09PSAnJyAmJiAhaXNVbmRlZmluZWQubGVuZ3RoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gIShyZXM/Lmxlbmd0aCA9PT0gNiAmJiByZXNbNV0gPT09ICcnICYmICFpc1VuZGVmaW5lZC5sZW5ndGgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5maWxlTmFtZS5zdWJzdHIoLTUpICE9PSAnLnhsc3gnKSB7XHJcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID1cclxuICAgICAgICAnVGhlIGluY29ycmVjdCBmaWxlIGhhcyBiZWVuIHVwbG9hZGVkLiBQbGVhc2UgdXBsb2FkIHRoZSB0ZW1wbGF0ZSB3aGljaCB5b3UgZG93bmxvYWRlZCBmcm9tIGhlcmUuJyArXHJcbiAgICAgICAgJyBSRVRSWSc7XHJcbiAgICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSB0cnVlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLmhlYWRlciA9IGNsb25lRGVlcChkYXRhWzJdKTtcclxuICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5zdWJIZWFkaW5nID0gY2xvbmVEZWVwKGRhdGFbM10pO1xyXG4gICAgY29uc3QgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zID0gdGhpcy5kZXRlY3RFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMoXHJcbiAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5oZWFkZXIsXHJcbiAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5zdWJIZWFkaW5nXHJcbiAgICApO1xyXG4gICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLmhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucyA9XHJcbiAgICAgIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucztcclxuICAgIGRhdGEgPSBkYXRhLnNsaWNlKDUpO1xyXG4gICAgaWYgKHRoaXMubWVtYmVyX29ial9pZCAhPSB0aGlzLnRlbXBsYXRlSW5mby5tZW1iZXJJZCkge1xyXG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9XHJcbiAgICAgICAgJ1RoZSBpbmNvcnJlY3QgZmlsZSBoYXMgYmVlbiB1cGxvYWRlZC4gUGxlYXNlIHVwbG9hZCB0aGUgdGVtcGxhdGUgd2hpY2ggeW91IGRvd25sb2FkZWQgZnJvbSBoZXJlLicgK1xyXG4gICAgICAgICcgUkVUUlknO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGaWxlID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlc3BvbnNpYmlsaXR5RGF0YSA9IGRhdGEuZmlsdGVyKFxyXG4gICAgICAoZGF0YUVsZW1lbnQ6IGFueSkgPT4gZGF0YUVsZW1lbnQubGVuZ3RoID4gMFxyXG4gICAgKTtcclxuICAgIHJlc3BvbnNpYmlsaXR5RGF0YS5mb3JFYWNoKChyZXBvcnQ6IGFueSkgPT4ge1xyXG4gICAgICBsZXQgdmFsaWREYXRlO1xyXG4gICAgICBjb25zdCB2YWxpZFVzZXIgPSB0aGlzLnJldHVybklkcyhyZXBvcnRbMl0sICdlbnRydXN0ZWRfdG8nKVxyXG4gICAgICAgID8gdHJ1ZVxyXG4gICAgICAgIDogZmFsc2U7XHJcbiAgICAgIGlmIChyZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQuaGVhZGVyWzFdID09PSAnUHJvZ3JhbScpIHtcclxuICAgICAgICB2YWxpZERhdGUgPSB0aGlzLmNvbXBhcmVXaXRoQ3VycmVudERhdGUocmVwb3J0WzRdLCByZXBvcnRbNV0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhbGlkRGF0ZSA9IHRoaXMuY29tcGFyZVdpdGhDdXJyZW50RGF0ZShyZXBvcnRbNV0sIHJlcG9ydFs2XSk7XHJcbiAgICAgIH1cclxuICAgICAgLyogUHVzaGluZyB0aGUgcmVwb3J0IGRldGFpbHMgaW50byB0aGUgYnVsa1VwbG9hZCBvYmplY3QgYXMgcGVyIHRhYiB0YWJzICovXHJcbiAgICAgIGlmIChzaGVldD8udG9Mb3dlckNhc2UoKSA9PT0gJ2ZyZXF1ZW5jeSByZXNwb25zaWJpbGl0aWVzJykge1xyXG4gICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5yZXBvcnRzLnB1c2goXHJcbiAgICAgICAgICB0aGlzLnNldFJlcG9ydERldGFpbHMoXHJcbiAgICAgICAgICAgIHJlcG9ydCxcclxuICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5oZWFkZXJbMV0gPT09ICdQcm9ncmFtJyA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmJ1bGtVcGxvYWQuZnJlcXVlbmN5LmhlYWRlciA9IHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8uaGVhZGVyO1xyXG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZC5mcmVxdWVuY3kuc3ViSGVhZGluZyA9XHJcbiAgICAgICAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LnN1YkhlYWRpbmc7XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLmZyZXF1ZW5jeS5yZXBvcnRzID0gcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkPy5yZXBvcnRzO1xyXG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZC5mcmVxdWVuY3kuaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zID1cclxuICAgICAgICAgIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucztcclxuICAgICAgfVxyXG4gICAgICBpZiAoc2hlZXQ/LnRvTG93ZXJDYXNlKCkgPT09ICdvbmdvaW5nIHJlc3BvbnNpYmlsaXRpZXMnKSB7XHJcbiAgICAgICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLnJlcG9ydHMucHVzaChcclxuICAgICAgICAgIHRoaXMuc2V0UmVwb3J0RGV0YWlscyhcclxuICAgICAgICAgICAgcmVwb3J0LFxyXG4gICAgICAgICAgICAnb25nb2luZycsXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5oZWFkZXJbMV0gPT09ICdQcm9ncmFtJyA/IHRydWUgOiBmYWxzZVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLm9uZ29pbmcuaGVhZGVyID0gcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkPy5oZWFkZXI7XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLm9uZ29pbmcuc3ViSGVhZGluZyA9XHJcbiAgICAgICAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LnN1YkhlYWRpbmc7XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLm9uZ29pbmcucmVwb3J0cyA9IHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8ucmVwb3J0cztcclxuICAgICAgfVxyXG4gICAgICBpZiAoc2hlZXQ/LnRvTG93ZXJDYXNlKCkgPT09ICdvbiBjb21wbGV0aW9uIHJlc3BvbnNpYmlsaXRpZXMnKSB7XHJcbiAgICAgICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLnJlcG9ydHMucHVzaChcclxuICAgICAgICAgIHRoaXMuc2V0UmVwb3J0RGV0YWlscyhcclxuICAgICAgICAgICAgcmVwb3J0LFxyXG4gICAgICAgICAgICAnb25Db21wbGV0aW9uJyxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLmhlYWRlclsxXSA9PT0gJ1Byb2dyYW0nID8gdHJ1ZSA6IGZhbHNlXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmJ1bGtVcGxvYWQub25Db21wbGV0aW9uLmhlYWRlciA9IHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8uaGVhZGVyO1xyXG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZC5vbkNvbXBsZXRpb24uc3ViSGVhZGluZyA9XHJcbiAgICAgICAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LnN1YkhlYWRpbmc7XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLm9uQ29tcGxldGlvbi5yZXBvcnRzID1cclxuICAgICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8ucmVwb3J0cztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgaXNFbXB0eSA9IHRoaXMuY2hlY2tFbXB0eUZpbGUoZGF0YSk7XHJcbiAgICAvKiBDaGVja2luZyBpZiB0aGUgZmlsZSBpcyBlbXB0eSwgaWYgaXQgaXMgZW1wdHkgaXQgd2lsbCByZXR1cm4gYW4gZXJyb3IgbWVzc2FnZS4gSWYgaXQgaXMgbm90XHJcbiAgICBlbXB0eSBpdCB3aWxsIGNoZWNrIGlmIHRoZSBmaWxlIGlzIHRoZSBjb3JyZWN0IGZpbGUsIGlmIGl0IGlzIG5vdCB0aGUgY29ycmVjdCBmaWxlIGl0IHdpbGxcclxuICAgIHJldHVybiBhbiBlcnJvciBtZXNzYWdlLiBJZiBpdCBpcyB0aGUgY29ycmVjdCBmaWxlIGl0IHdpbGwgY2FsbCB0aGUgZmlsZVVwbG9hZCgpIGZ1bmN0aW9uLiAqL1xyXG4gICAgaWYgKGlzRW1wdHkpIHtcclxuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPVxyXG4gICAgICAgICdZb3UgaGF2ZSB1cGxvYWRlZCBhIGJsYW5rIHRlbXBsYXRlLiBQbGVhc2UgYWRkIGRldGFpbHMgZm9yIGFsbCBtYW5kYXRvcnkgZmllbGRzLiBSRVRSWSc7XHJcbiAgICAgIHRoaXMuaXNGaWxlRW1wdHkgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGaWxlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICB0aGlzLmJ1bGtVcGxvYWQ/LmZyZXF1ZW5jeT8uaGVhZGVyWzBdICE9PSAnUmVzcG9uc2liaWxpdHkgTmFtZSonICYmXHJcbiAgICAgIHRoaXMuYnVsa1VwbG9hZD8ub25nb2luZz8uaGVhZGVyWzBdICE9PSAnUmVzcG9uc2liaWxpdHkgTmFtZSonICYmXHJcbiAgICAgIHRoaXMuYnVsa1VwbG9hZD8ub25Db21wbGV0aW9uPy5oZWFkZXJbMF0gIT09ICdSZXNwb25zaWJpbGl0eSBOYW1lKidcclxuICAgICkge1xyXG4gICAgICB0aGlzLmJsb2NrVXBsb2FkRm9yQ29sdW1uRXJyb3IoJ21pc3NpbmcnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pc0ZpbGVFbXB0eSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGaWxlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmZpbGVVcGxvYWQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzRmlsZUVtcHR5ID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzV3JvbmdGaWxlID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzV3JvbmdGb3JtYXQgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0V4Y2VsID0gdHJ1ZTtcclxuICAgIHRoaXMuZmlsZVZhbHVlID0gJyc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJZiB0aGUgYnVsa1VwbG9hZCBvYmplY3QgaGFzIGEgZnJlcXVlbmN5IG9iamVjdCB3aXRoIGEgcmVwb3J0cyBhcnJheSwgc2V0IHRoZVxyXG4gICAqIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCB0byB0aGUgZnJlcXVlbmN5IG9iamVjdCBhbmQgc2V0IHRoZSB0YWJUeXBlIHRvIGZyZXF1ZW5jeS4gSWYgbm90LCBjaGVja1xyXG4gICAqIGlmIHRoZSBidWxrVXBsb2FkIG9iamVjdCBoYXMgYW4gb25nb2luZyBvYmplY3Qgd2l0aCBhIHJlcG9ydHMgYXJyYXksIHNldCB0aGVcclxuICAgKiByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgdG8gdGhlIG9uZ29pbmcgb2JqZWN0IGFuZCBzZXQgdGhlIHRhYlR5cGUgdG8gb25nb2luZy4gSWYgbm90LCBjaGVjayBpZlxyXG4gICAqIHRoZSBidWxrVXBsb2FkIG9iamVjdCBoYXMgYW4gb25Db21wbGV0aW9uIG9iamVjdCB3aXRoIGEgcmVwb3J0cyBhcnJheSwgc2V0IHRoZVxyXG4gICAqIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCB0byB0aGUgb25Db21wbGV0aW9uIG9iamVjdCBhbmQgc2V0IHRoZSB0YWJUeXBlIHRvIG9uQ29tcGxldGlvbi4gSWYgbm90LFxyXG4gICAqIHJldHVybiB0cnVlLlxyXG4gICAqIDwvY29kZT5cclxuICAgKiBAcGFyYW0ge2FueX0gZGF0YSAtIGFueSA9IHtcclxuICAgKiBAcmV0dXJucyBhIGJvb2xlYW4gdmFsdWUuXHJcbiAgICovXHJcbiAgY2hlY2tFbXB0eUZpbGUoZGF0YT86IGFueSkge1xyXG4gICAgbGV0IGlzRW1wdHkgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLmJ1bGtVcGxvYWQ/LmZyZXF1ZW5jeT8ucmVwb3J0cz8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0gdGhpcy5idWxrVXBsb2FkPy5mcmVxdWVuY3k7XHJcbiAgICAgIHRoaXMudGFiVHlwZSA9ICdmcmVxdWVuY3knO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmJ1bGtVcGxvYWQ/Lm9uZ29pbmc/LnJlcG9ydHM/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCA9IHRoaXMuYnVsa1VwbG9hZD8ub25nb2luZztcclxuICAgICAgdGhpcy50YWJUeXBlID0gJ29uZ29pbmcnO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmJ1bGtVcGxvYWQ/Lm9uQ29tcGxldGlvbj8ucmVwb3J0cz8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0gdGhpcy5idWxrVXBsb2FkPy5vbkNvbXBsZXRpb247XHJcbiAgICAgIHRoaXMudGFiVHlwZSA9ICdvbkNvbXBsZXRpb24nO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaXNFbXB0eSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXNFbXB0eTtcclxuICB9XHJcblxyXG4gIGNvbXBhcmVXaXRoQ3VycmVudERhdGUoZGF5OiBhbnksIG1vbnRoOiBhbnkpIHtcclxuICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKTtcclxuICAgIGNvbnN0IG1vbnRoTmFtZXMgPSBbXHJcbiAgICAgIHsgdmFsdWU6IDEsIG1vbnRoOiAnSmFuJyB9LFxyXG4gICAgICB7IHZhbHVlOiAyLCBtb250aDogJ0ZlYicgfSxcclxuICAgICAgeyB2YWx1ZTogMywgbW9udGg6ICdNYXInIH0sXHJcbiAgICAgIHsgdmFsdWU6IDQsIG1vbnRoOiAnQXByJyB9LFxyXG4gICAgICB7IHZhbHVlOiA1LCBtb250aDogJ01heScgfSxcclxuICAgICAgeyB2YWx1ZTogNiwgbW9udGg6ICdKdW4nIH0sXHJcbiAgICAgIHsgdmFsdWU6IDcsIG1vbnRoOiAnSnVsJyB9LFxyXG4gICAgICB7IHZhbHVlOiA4LCBtb250aDogJ0F1ZycgfSxcclxuICAgICAgeyB2YWx1ZTogOSwgbW9udGg6ICdTZXAnIH0sXHJcbiAgICAgIHsgdmFsdWU6IDEwLCBtb250aDogJ09jdCcgfSxcclxuICAgICAgeyB2YWx1ZTogMTEsIG1vbnRoOiAnTm92JyB9LFxyXG4gICAgICB7IHZhbHVlOiAxMiwgbW9udGg6ICdEZWMnIH0sXHJcbiAgICBdO1xyXG5cclxuICAgIGlmICghKGRheSB8fCBtb250aCkpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKCEoZGF5ICYmIG1vbnRoKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBtb250aEZvcm1hdFJlZ2V4ID0gUkVHRVguTU9OVEg7XHJcbiAgICAgIGlmICghbW9udGhGb3JtYXRSZWdleC50ZXN0KG1vbnRoKSkge1xyXG4gICAgICAgIHRoaXMuaXNEYXRlRm9ybWF0SW52YWxpZCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKCEoZGF5ID4gMCAmJiBkYXkgPCAzMikpIHtcclxuICAgICAgICB0aGlzLmlzRGF5SW52YWxpZCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBtb250aEFuZFllYXIgPSBtb250aC5zcGxpdChcIidcIik7XHJcblxyXG4gICAgICBjb25zdCBzdGFydERhdGUgPSBtb21lbnQoXHJcbiAgICAgICAgZGF5ICsgJy0nICsgbW9udGhBbmRZZWFyWzBdICsgJy0nICsgMjAgKyBtb250aEFuZFllYXJbMV0gKyAnIDAwOjAwOjAwJyxcclxuICAgICAgICAnREQtTU1NTS1ZWVlZIEhIOm1tOnNzJ1xyXG4gICAgICApLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbTpzcycpO1xyXG4gICAgICBpZiAoc3RhcnREYXRlID09ICdJbnZhbGlkIGRhdGUnKSB7XHJcbiAgICAgICAgdGhpcy5pc0RheUludmFsaWQgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7fSwgNSk7XHJcbiAgICAgIGNvbnN0IGRhdGVfdmFsdWUgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICAgICAgZGF0ZV92YWx1ZS5zZXRNb250aChcclxuICAgICAgICB0eXBlb2YgbW9udGggIT09ICdudW1iZXInXHJcbiAgICAgICAgICA/IG1vbnRoTmFtZXMuZmlsdGVyKCh4KSA9PiB4Lm1vbnRoID09PSBtb250aD8uc3Vic3RyaW5nKDAsIDMpKVswXVxyXG4gICAgICAgICAgICAgID8udmFsdWUgLSAxXHJcbiAgICAgICAgICA6IG1vbnRoXHJcbiAgICAgICk7XHJcbiAgICAgIGRhdGVfdmFsdWUuc2V0RnVsbFllYXIoTnVtYmVyKDIwICsgbW9udGguc3BsaXQoXCInXCIpWzFdKSk7XHJcbiAgICAgIGRhdGVfdmFsdWUuc2V0RGF0ZShOdW1iZXIoZGF5KSk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBjdXJyZW50RGF0ZT8udG9KU09OKCk/LnNwbGl0KCdUJylbMF0gIT1cclxuICAgICAgICAgIGRhdGVfdmFsdWU/LnRvSlNPTigpPy5zcGxpdCgnVCcpWzBdICYmXHJcbiAgICAgICAgY3VycmVudERhdGUgPiBkYXRlX3ZhbHVlXHJcbiAgICAgICkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBpc1Bhc3REYXRlKGRheTogYW55LCBtb250aDogYW55KSB7XHJcbiAgICBjb25zdCBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKCk7XHJcblxyXG4gICAgY29uc3QgbW9udGhOYW1lcyA9IFtcclxuICAgICAgeyB2YWx1ZTogMSwgbW9udGg6ICdKYW4nIH0sXHJcbiAgICAgIHsgdmFsdWU6IDIsIG1vbnRoOiAnRmViJyB9LFxyXG4gICAgICB7IHZhbHVlOiAzLCBtb250aDogJ01hcicgfSxcclxuICAgICAgeyB2YWx1ZTogNCwgbW9udGg6ICdBcHInIH0sXHJcbiAgICAgIHsgdmFsdWU6IDUsIG1vbnRoOiAnTWF5JyB9LFxyXG4gICAgICB7IHZhbHVlOiA2LCBtb250aDogJ0p1bicgfSxcclxuICAgICAgeyB2YWx1ZTogNywgbW9udGg6ICdKdWwnIH0sXHJcbiAgICAgIHsgdmFsdWU6IDgsIG1vbnRoOiAnQXVnJyB9LFxyXG4gICAgICB7IHZhbHVlOiA5LCBtb250aDogJ1NlcCcgfSxcclxuICAgICAgeyB2YWx1ZTogMTAsIG1vbnRoOiAnT2N0JyB9LFxyXG4gICAgICB7IHZhbHVlOiAxMSwgbW9udGg6ICdOb3YnIH0sXHJcbiAgICAgIHsgdmFsdWU6IDEyLCBtb250aDogJ0RlYycgfSxcclxuICAgIF07XHJcblxyXG4gICAgaWYgKCEoZGF5IHx8IG1vbnRoKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKCEoZGF5ICYmIG1vbnRoKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBjb25zdCByZXBvcnREYXRlID0gbmV3IERhdGUoZGF5ICsgbW9udGguc3BsaXQoXCInXCIpKTtcclxuICAgICAgY29uc3QgZGF0ZV92YWx1ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgIGRhdGVfdmFsdWUuc2V0TW9udGgoXHJcbiAgICAgICAgdHlwZW9mIG1vbnRoICE9PSAnbnVtYmVyJ1xyXG4gICAgICAgICAgPyBtb250aE5hbWVzLmZpbHRlcigoeCkgPT4geC5tb250aCA9PT0gbW9udGg/LnN1YnN0cmluZygwLCAzKSlbMF1cclxuICAgICAgICAgICAgICA/LnZhbHVlIC0gMVxyXG4gICAgICAgICAgOiBtb250aFxyXG4gICAgICApO1xyXG4gICAgICBkYXRlX3ZhbHVlLnNldEZ1bGxZZWFyKE51bWJlcigyMCArIG1vbnRoLnNwbGl0KFwiJ1wiKVsxXSkpO1xyXG4gICAgICBkYXRlX3ZhbHVlLnNldERhdGUoTnVtYmVyKGRheSkpO1xyXG4gICAgICBpZiAoY3VycmVudERhdGUgPiBkYXRlX3ZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkb3dubG9hZFRlbXBsYXRlKCkge1xyXG4gICAgdGhpcy5kb3dubG9hZFN0YXR1cyA9ICdET1dOTE9BRElORyc7XHJcbiAgICB0aGlzLmRvd25sb2FkUGVyY2VudCA9IDA7XHJcbiAgICBjb25zdCBkb3dubG9hZERhdGUgPSBuZXcgRGF0ZSgpLnRvRGF0ZVN0cmluZygpLnNwbGl0KCcgJyk7XHJcbiAgICBjb25zdCBmaWxlTmFtZSA9IGBFbnRydXN0IFJlc3BvbnNpYmlsaXRpZXMtJHtkb3dubG9hZERhdGVbMl19LSR7ZG93bmxvYWREYXRlWzFdfS0ke2Rvd25sb2FkRGF0ZVszXX0ueGxzeGA7XHJcblxyXG4gICAgdGhpcy5yaXNrU2VydmljZS5kb3dubG9hZFJlc3BvbnNpYmlsaXR5VGVtcGxhdGUoKS5zdWJzY3JpYmUoXHJcbiAgICAgIChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoZGF0YS5sb2FkZWQpIHtcclxuICAgICAgICAgIHRoaXMuZG93bmxvYWRQZXJjZW50ID0gMTAwICogKGRhdGEubG9hZGVkIC8gZGF0YS50b3RhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkYXRhLmJvZHkpIHtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRvd25sb2FkU3RhdHVzID0gdGhpcy5yaXNrU2VydmljZS5kb3duTG9hZEZpbGUoXHJcbiAgICAgICAgICAgICAgZGF0YS5ib2R5LFxyXG4gICAgICAgICAgICAgICdhcHBsaWNhdGlvbi94bHN4JyxcclxuICAgICAgICAgICAgICBmaWxlTmFtZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSwgMTUwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICB0aGlzLmRvd25sb2FkU3RhdHVzID0gJ0RPV05MT0FERUQnO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc3VibWl0UmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkKCkge1xyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgbGV0IHBheWxvYWQ6IGFueSA9IFtdO1xyXG4gICAgbGV0IHJlc3BvbnNpYmlsaXR5TXVsdGlUYWJCdWxrVXBsb2FkOiBhbnkgPSBbXTtcclxuICAgIGxldCB2YWxpZFJlc3BvbnNpYmlsaXRpZXMgPSAwO1xyXG4gICAgcmVzcG9uc2liaWxpdHlNdWx0aVRhYkJ1bGtVcGxvYWQgPVxyXG4gICAgICB0aGlzLmJ1bGtVcGxvYWQ/LmZyZXF1ZW5jeT8ucmVwb3J0cz8uY29uY2F0KFxyXG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZD8ub25nb2luZz8ucmVwb3J0cyxcclxuICAgICAgICB0aGlzLmJ1bGtVcGxvYWQ/Lm9uQ29tcGxldGlvbj8ucmVwb3J0c1xyXG4gICAgICApO1xyXG4gICAgICByZXNwb25zaWJpbGl0eU11bHRpVGFiQnVsa1VwbG9hZD8uZm9yRWFjaCgocmVwb3J0OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVwb3J0Py5pc1ZhbGlkKSB7XHJcbiAgICAgICAgICB2YWxpZFJlc3BvbnNpYmlsaXRpZXMgKz0gMTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBwYXlsb2FkID0ge1xyXG4gICAgICAgIG9yaWdpbmFsRmlsZW5hbWU6IHRoaXMuZmlsZVJlc3BvbnNlWzBdPy5vcmlnaW5hbF9maWxlbmFtZSxcclxuICAgICAgICBmaWxlTmFtZTogdGhpcy5maWxlUmVzcG9uc2VbMF0/LmZpbGVuYW1lLFxyXG4gICAgICAgIGZpbGVQYXRoOiB0aGlzLmZpbGVSZXNwb25zZVswXT8uZmlsZXBhdGgsXHJcbiAgICAgICAgdG90YWxSZXNwb25zaWJpbGl0eUNvdW50OiByZXNwb25zaWJpbGl0eU11bHRpVGFiQnVsa1VwbG9hZD8ubGVuZ3RoLFxyXG4gICAgICAgIHZhbGlkUmVzcG9uc2liaWxpdHlDb3VudDogdmFsaWRSZXNwb25zaWJpbGl0aWVzLFxyXG4gICAgICB9O1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2UuYWRkQnVsa1Jlc3BvbnNpYmlsaXR5KHBheWxvYWQpLnN1YnNjcmliZShcclxuICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNob3dFeGNlbCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2hvd1NtaWxleSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdWJtaXRXb3JrZmxvdygpO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlEYXRhID0gcmVzO1xyXG4gICAgICB9LFxyXG4gICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2hvd0V4Y2VsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zbmFja0Jhci5zaG93KFxyXG4gICAgICAgICAgJ09PUFMhIFNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB0aGUgcGFnZSBjb3VsZCBub3QgYmUgbG9hZGVkLiBDb3VsZCB5b3UgcGxlYXNlIHRyeSBvbmUgbW9yZSB0aW1lPycsXHJcbiAgICAgICAgICAnYWxlcnQnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHN1Ym1pdFdvcmtmbG93KCkge1xyXG4gICAgY29uc3QgbWVzc2FnZSA9IHsgdHlwZTogJ3N1Ym1pdCcgfTtcclxuICAgIGNvbnN0IHRhcmdldE9yaWdpbiA9IHRoaXMuZ2V0T3JpZ2luKCk7XHJcbiAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKG1lc3NhZ2UsIHRhcmdldE9yaWdpbik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE9yaWdpbigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XHJcbiAgfVxyXG5cclxuICByZXR1cm5JZHMoaXRlbTogYW55LCBrZXk6IHN0cmluZyk6IGFueSB7XHJcbiAgICBzd2l0Y2ggKGtleSkge1xyXG4gICAgICBjYXNlICdyY19pZCc6XHJcbiAgICAgICAgbGV0IHJjT2JqID0geyBuYW1lOiAnJywgcmNJZDogMCwgcGFyZW50SWRzOiBbXSB9O1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLnJjTGlzdC5mb3JFYWNoKChyY19lbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyY19lbGVtZW50Lm5hbWUgPT0gaXRlbSkge1xyXG4gICAgICAgICAgICBsZXQgbmFtZTtcclxuICAgICAgICAgICAgaWYgKHJjX2VsZW1lbnQubmFtZS5pbmNsdWRlcygnW1dJVEhJTl0nKSkge1xyXG4gICAgICAgICAgICAgIG5hbWUgPSByY19lbGVtZW50Lm5hbWUuc3BsaXQoJyBbV0lUSElOXSAnKVswXTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBuYW1lID0gcmNfZWxlbWVudC5uYW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJjT2JqID0ge1xyXG4gICAgICAgICAgICAgIG5hbWUsXHJcbiAgICAgICAgICAgICAgcmNJZDogcmNfZWxlbWVudC5yY19pZCxcclxuICAgICAgICAgICAgICBwYXJlbnRJZHM6IHJjX2VsZW1lbnQucGFyZW50SWRzLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByY09iajtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncmV2aWV3ZXInOlxyXG4gICAgICAgIGxldCByZXZpZXdlck9iaiA9IHsgbmFtZTogJycsIGVtcGxveWVlSWQ6IDAsIGVtYWlsOiAnJyB9O1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvPy5yZXZpZXdlckxpc3QuZm9yRWFjaCgocmV2aWV3ZXJFbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXZpZXdlckVsZW1lbnQubmFtZUFuZEVtYWlsID09IGl0ZW0pIHtcclxuICAgICAgICAgICAgcmV2aWV3ZXJPYmogPSB7XHJcbiAgICAgICAgICAgICAgbmFtZTogcmV2aWV3ZXJFbGVtZW50Lm5hbWUsXHJcbiAgICAgICAgICAgICAgZW1wbG95ZWVJZDogcmV2aWV3ZXJFbGVtZW50Lm15X21lbWJlcl9pZCxcclxuICAgICAgICAgICAgICBlbWFpbDogcmV2aWV3ZXJFbGVtZW50LmVtYWlsLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXZpZXdlck9iajtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2Fzc2lnbm9yJzpcclxuICAgICAgICBsZXQgYXNzaWdub3JPYmogPSB7IG5hbWU6ICcnLCBtZW1iZXJJZDogMCwgZW1haWw6ICcnIH07XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8uYXNzaWdub3JzTGlzdC5mb3JFYWNoKChhc3NpZ25vckVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGFzc2lnbm9yRWxlbWVudC5uYW1lQW5kRW1haWwgPT0gaXRlbSkge1xyXG4gICAgICAgICAgICBhc3NpZ25vck9iaiA9IHtcclxuICAgICAgICAgICAgICBuYW1lOiBhc3NpZ25vckVsZW1lbnQubmFtZSxcclxuICAgICAgICAgICAgICBlbWFpbDogYXNzaWdub3JFbGVtZW50LmVtYWlsLFxyXG4gICAgICAgICAgICAgIG1lbWJlcklkOiBhc3NpZ25vckVsZW1lbnQubWVtYmVyX2lkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBhc3NpZ25vck9iajtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NjJzpcclxuICAgICAgICBsZXQgY2NPYmogPSB7IG5hbWU6ICcnLCBlbXBsb3llZUlkOiAwLCBlbWFpbDogJycgfTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mbz8ucmV2aWV3ZXJMaXN0LmZvckVhY2goKGNjRWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoY2NFbGVtZW50Lm5hbWVBbmRFbWFpbCA9PSBpdGVtKSB7XHJcbiAgICAgICAgICAgIGNjT2JqID0ge1xyXG4gICAgICAgICAgICAgIG5hbWU6IGNjRWxlbWVudC5uYW1lLFxyXG4gICAgICAgICAgICAgIGVtcGxveWVlSWQ6IGNjRWxlbWVudC5lbXBsb3llZV9pZCxcclxuICAgICAgICAgICAgICBlbWFpbDogY2NFbGVtZW50LmVtYWlsLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBjY09iajtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnY2NGYWlsdXJlJzpcclxuICAgICAgICBsZXQgY2NmT2JqID0geyBuYW1lOiAnJywgZW1wbG95ZWVJZDogMCwgZW1haWw6ICcnIH07XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8/LnJldmlld2VyTGlzdC5mb3JFYWNoKChjY2ZFbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChjY2ZFbGVtZW50Lm5hbWVBbmRFbWFpbCA9PSBpdGVtKSB7XHJcbiAgICAgICAgICAgIGNjZk9iaiA9IHtcclxuICAgICAgICAgICAgICBuYW1lOiBjY2ZFbGVtZW50Lm5hbWUsXHJcbiAgICAgICAgICAgICAgZW1wbG95ZWVJZDogY2NmRWxlbWVudC5lbXBsb3llZV9pZCxcclxuICAgICAgICAgICAgICBlbWFpbDogY2NmRWxlbWVudC5lbWFpbCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gY2NmT2JqO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAnZW50cnVzdGVkX3RvJzpcclxuICAgICAgICBsZXQgZW1wSWQgPSAwO1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmFzc2lnbmVlc0xpc3QuZm9yRWFjaCgoZW5FbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChlbkVsZW1lbnQubmFtZUFuZEVtYWlsID09IGl0ZW0pIHtcclxuICAgICAgICAgICAgZW1wSWQgPSBlbkVsZW1lbnQubWVtYmVyX2lkO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBlbXBJZDtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ3BhcmVudFJlc3BvbnNpYmlsaXR5JzpcclxuICAgICAgICBsZXQgaWQgPSAwO1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLnBhcmVudFJlc3BvbnNpYmlsaXR5LmZvckVhY2goXHJcbiAgICAgICAgICAocmVzcG9uc2liaWxpdHk6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2liaWxpdHk/Lm5hbWUgPT09IGl0ZW0pIHtcclxuICAgICAgICAgICAgICBpZCA9IHJlc3BvbnNpYmlsaXR5LmlkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gaWQ7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlICdyaXNrX2NsYXNzJzpcclxuICAgICAgICBpZiAoaXRlbSA9PSAnTG93Jykge1xyXG4gICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtID09ICdMb3ctTWVkaXVtJykge1xyXG4gICAgICAgICAgcmV0dXJuIDI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtID09ICdNZWRpdW0tSGlnaCcpIHtcclxuICAgICAgICAgIHJldHVybiAzO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSA9PSAnSGlnaCcpIHtcclxuICAgICAgICAgIHJldHVybiA0O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNldCgpIHtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0ge1xyXG4gICAgICBoZWFkZXI6IFtdLFxyXG4gICAgICByZXBvcnRzOiBbXSxcclxuICAgIH07XHJcbiAgICB0aGlzLmJ1bGtVcGxvYWQgPSB7XHJcbiAgICAgIGZyZXF1ZW5jeToge1xyXG4gICAgICAgIGhlYWRlcjogW10sXHJcbiAgICAgICAgc3ViSGVhZGluZzogW10sXHJcbiAgICAgICAgcmVwb3J0czogW10sXHJcbiAgICAgIH0sXHJcbiAgICAgIG9uZ29pbmc6IHtcclxuICAgICAgICBoZWFkZXI6IFtdLFxyXG4gICAgICAgIHN1YkhlYWRpbmc6IFtdLFxyXG4gICAgICAgIHJlcG9ydHM6IFtdLFxyXG4gICAgICB9LFxyXG4gICAgICBvbkNvbXBsZXRpb246IHtcclxuICAgICAgICBoZWFkZXI6IFtdLFxyXG4gICAgICAgIHN1YkhlYWRpbmc6IFtdLFxyXG4gICAgICAgIHJlcG9ydHM6IFtdLFxyXG4gICAgICB9LFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnRlbXBsYXRlSW5mbyA9IHtcclxuICAgICAgY2F0ZWdvcnlMaXN0OiBbXSxcclxuICAgICAgcmNMaXN0OiBbXSxcclxuICAgICAgYXNzaWdub3JzTGlzdDogW10sXHJcbiAgICAgIGFzc2lnbmVlc0xpc3Q6IFtdLFxyXG4gICAgICByZXZpZXdlckxpc3Q6IFtdLFxyXG4gICAgICBwZW9wbGVEcm9wZG93bk5hbWVzOiBbXSxcclxuICAgICAgbWVtYmVySWQ6ICcnLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmlzRmlsZUVtcHR5ID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzV3JvbmdGaWxlID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzV3JvbmdGb3JtYXQgPSBmYWxzZTtcclxuICAgIHRoaXMuZmlsZU5hbWUgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmRhdGEgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnNob3dFeGNlbCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93U21pbGV5ID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5jbG9zZUFkZE11bHRpcGxlUmVzcG9uc2liaWxpdHkuZW1pdCgpO1xyXG4gIH1cclxuICBhY3Rpb24oZXZlbnQ6IHN0cmluZykge1xyXG4gICAgc3dpdGNoIChldmVudCkge1xyXG4gICAgICBjYXNlICdhZGRNb3JlJzpcclxuICAgICAgICB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3ZpZXcnOlxyXG4gICAgICAgIHRoaXMudmlld1Jlc3BvbnNpYmlsaXRpZXMoKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsb3NlU21pbGV5KGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuc2hvd1NtaWxleSA9IGZhbHNlO1xyXG4gICAgdGhpcy5jbG9zZVdvcmtmbG93LmVtaXQoeyBldnQ6IHRoaXMucmVzcG9uc2liaWxpdHlEYXRhLCBjb25maXJtOiBmYWxzZSB9KTtcclxuICB9XHJcblxyXG4gIHZpZXdSZXNwb25zaWJpbGl0aWVzKCk6IHZvaWQge1xyXG4gICAgbGV0IHVybDogc3RyaW5nO1xyXG4gICAgbGV0IHVybFN1YnN0cmluZyA9ICcvY29tcGxpYW5jZW9wcy9yZXNwb25zaWJpbGl0aWVzLyc7XHJcbiAgICB0aGlzLmRpc2Nvbm5lY3RSZWZyZXNoLmVtaXQoZmFsc2UpO1xyXG4gICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ob3N0LnN0YXJ0c1dpdGgoJ2xvY2FsaG9zdCcpKSB7XHJcbiAgICAgIHVybCA9ICdodHRwOi8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgdXJsU3Vic3RyaW5nO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdXJsID0gJ2h0dHBzOi8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgdXJsU3Vic3RyaW5nO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pZnJhbWVTZXJ2aWNlLnJlZGlyZWN0SWZJbklmcmFtZSh1cmwsIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLy8gVXBsb2FkIEZpbGUgdG8gdGhlIHNlcnZlclxyXG4gIGZpbGVVcGxvYWQoKSB7XHJcbiAgICB0aGlzLmZpbGVSZXNwb25zZSA9IFtdO1xyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgIGNvbnN0IGZpbGUgPSB0aGlzLnVwbG9hZGVkRmlsZXNbMF1bMF07XHJcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ3NvdXJjZWZpbGUnLCBmaWxlKTtcclxuICAgIGZvcm1EYXRhLmFwcGVuZCgnZGVzdGluYXRpb24nLCAnYnVsa3VwbG9hZC9lbnRydXN0LycgKyB0aGlzLnVzZXJJbmZvLmVtYWlsKTtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmZpbGVVcGxvYWQoZm9ybURhdGEpLnN1YnNjcmliZShcclxuICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcz8uZmlsZW5hbWUpIHtcclxuICAgICAgICAgIHRoaXMuZmlsZVJlc3BvbnNlLnB1c2gocmVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc25hY2tCYXIuc2hvdyhcclxuICAgICAgICAgICdPT1BTISBTb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgdGhlIHBhZ2UgY291bGQgbm90IGJlIGxvYWRlZC4gQ291bGQgeW91IHBsZWFzZSB0cnkgb25lIG1vcmUgdGltZT8nLFxyXG4gICAgICAgICAgJ2FsZXJ0J1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzZXRPcmdhbml6YXRpb25EZXRhaWxzKHRlbXBMaXN0OiBhbnkpIHtcclxuICAgIGlmICh0ZW1wTGlzdFswXSAhPT0gdW5kZWZpbmVkICYmIHRlbXBMaXN0WzBdW1JFU1BPTlNJQklMSVRZLnVzZXJJbmRleC5jdXJyZW50VXNlcl0pIHtcclxuICAgICAgdGhpcy50ZW1wbGF0ZUluZm8ubWVtYmVySWQgPSB0ZW1wTGlzdFswXVtSRVNQT05TSUJJTElUWS51c2VySW5kZXguY3VycmVudFVzZXJdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPVxyXG4gICAgICAgICdUaGUgaW5jb3JyZWN0IGZpbGUgaGFzIGJlZW4gdXBsb2FkZWQuIFBsZWFzZSB1cGxvYWQgdGhlIHRlbXBsYXRlIHdoaWNoIHlvdSBkb3dubG9hZGVkIGZyb20gaGVyZS4nICtcclxuICAgICAgICAnIFJFVFJZJztcclxuICAgICAgdGhpcy5pc1dyb25nRmlsZSA9IHRydWU7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRlbXBMaXN0LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG5cclxuICAgICAgY29uc3QgcmVndWxhdGlvbnMgPSB0aGlzLmdldFByb2dyYW1EZXRhaWxzKGVsZW1lbnQsIFJFU1BPTlNJQklMSVRZLnByb2dyYW1JbmRleC5yZWd1bGF0aW9ucywgMSk7XHJcbiAgICAgIGNvbnN0IHN0YW5kYXJkcyA9IHRoaXMuZ2V0UHJvZ3JhbURldGFpbHMoZWxlbWVudCwgUkVTUE9OU0lCSUxJVFkucHJvZ3JhbUluZGV4LnN0YW5kYXJkcywgMik7XHJcbiAgICAgIGNvbnN0IGludGVybmFsQ29udHJvbHMgPSB0aGlzLmdldFByb2dyYW1EZXRhaWxzKGVsZW1lbnQsIFJFU1BPTlNJQklMSVRZLnByb2dyYW1JbmRleC5pbnRlcm5hbENvbnRyb2xzLCAzKTtcclxuICAgICAgY29uc3Qgb3RoZXJzID0gdGhpcy5nZXRQcm9ncmFtRGV0YWlscyhlbGVtZW50LCBSRVNQT05TSUJJTElUWS5wcm9ncmFtSW5kZXgub3RoZXJzLCAwKTtcclxuXHJcbiAgICAgIGlmKHJlZ3VsYXRpb25zKSB7XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8uY2F0ZWdvcnlMaXN0LnB1c2gocmVndWxhdGlvbnMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZihzdGFuZGFyZHMpIHtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5jYXRlZ29yeUxpc3QucHVzaChzdGFuZGFyZHMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZihpbnRlcm5hbENvbnRyb2xzKSB7XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8uY2F0ZWdvcnlMaXN0LnB1c2goaW50ZXJuYWxDb250cm9scyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmKG90aGVycykge1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmNhdGVnb3J5TGlzdC5wdXNoKG90aGVycyk7XHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgICAvKiBDaGVja2luZyBpZiB0aGUgZWxlbWVudFs5XSBpcyBub3QgbnVsbCBhbmQgbm90IGVtcHR5LiBJZiBpdCBpcyBub3QgbnVsbCBhbmQgbm90IGVtcHR5LCBpdCBpc1xyXG4gICAgICBwdXNoaW5nIHRoZSBlbGVtZW50WzldIChSQykgdG8gdGhlIGFycmF5IChyY0xpc3QpLiAqL1xyXG4gICAgICBpZiAoZWxlbWVudFtSRVNQT05TSUJJTElUWS5yY0luZGV4LmlkXSApIHtcclxuICAgICAgICBjb25zdCByYyA9IHtcclxuICAgICAgICAgIG5hbWU6IGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkucmNJbmRleC5uYW1lXSxcclxuICAgICAgICAgIHJjX2lkOiBlbGVtZW50W1JFU1BPTlNJQklMSVRZLnJjSW5kZXguaWRdLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8ucmNMaXN0LnB1c2gocmMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBBc3NpZ25lZVxyXG4gICAgICBpZiAodGhpcy5oYXNWYWx1ZShlbGVtZW50W1JFU1BPTlNJQklMSVRZLmFzc2lnbmVlSW5kZXgubmFtZV0pKSB7XHJcbiAgICAgICAgdGhpcy5hZGRQZW9wbGVEcm9wZG93bk5hbWUoZWxlbWVudFtSRVNQT05TSUJJTElUWS5hc3NpZ25lZUluZGV4Lm5hbWVdKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZWxlbWVudFtSRVNQT05TSUJJTElUWS5hc3NpZ25lZUluZGV4LmlkXSApIHtcclxuICAgICAgICBjb25zdCBwZW9wbGUgPSB0aGlzLnBhcnNlUGVvcGxlTGlzdENlbGwoXHJcbiAgICAgICAgICBlbGVtZW50W1JFU1BPTlNJQklMSVRZLmFzc2lnbmVlSW5kZXgubmFtZV1cclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGFzc2lnbmVlID0ge1xyXG4gICAgICAgICAgbmFtZUFuZEVtYWlsOiBwZW9wbGUubmFtZUFuZEVtYWlsLFxyXG4gICAgICAgICAgbmFtZTogcGVvcGxlLm5hbWUsXHJcbiAgICAgICAgICBlbWFpbDogcGVvcGxlLmVtYWlsLFxyXG4gICAgICAgICAgbWVtYmVyX2lkOiBlbGVtZW50W1JFU1BPTlNJQklMSVRZLmFzc2lnbmVlSW5kZXguaWRdLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8uYXNzaWduZWVzTGlzdC5wdXNoKGFzc2lnbmVlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gUmV2aWV3ZXJcclxuICAgICAgaWYgKGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkucmV2aWV3ZXJJbmRleC5pZF0gKSB7XHJcbiAgICAgICAgY29uc3QgcGVvcGxlID0gdGhpcy5wYXJzZVBlb3BsZUxpc3RDZWxsKFxyXG4gICAgICAgICAgZWxlbWVudFtSRVNQT05TSUJJTElUWS5yZXZpZXdlckluZGV4Lm5hbWVdXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCByZXZpZXdlciA9IHtcclxuICAgICAgICAgIG5hbWVBbmRFbWFpbDogcGVvcGxlLm5hbWVBbmRFbWFpbCxcclxuICAgICAgICAgIG5hbWU6IHBlb3BsZS5uYW1lLFxyXG4gICAgICAgICAgZW1haWw6IHBlb3BsZS5lbWFpbCxcclxuICAgICAgICAgIGVtcGxveWVlX2lkOiBlbGVtZW50W1JFU1BPTlNJQklMSVRZLnJldmlld2VySW5kZXguaWRdLFxyXG4gICAgICAgICAgbXlfbWVtYmVyX2lkOiBlbGVtZW50W1JFU1BPTlNJQklMSVRZLnJldmlld2VySW5kZXguaWRdLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8ucmV2aWV3ZXJMaXN0LnB1c2gocmV2aWV3ZXIpO1xyXG4gICAgICB9XHJcbiAgICAgIC8qIENoZWNraW5nIGlmIHRoZSBlbGVtZW50WzJdIGlzIG5vdCBlbXB0eSBhbmQgbm90IGVxdWFsIHRvIHNwYWNlLiBJZiBpdCBpcyBub3QgZW1wdHkgYW5kIG5vdFxyXG4gICAgICBlcXVhbCB0byBzcGFjZSwgaXQgd2lsbCBjcmVhdGUgYW4gb2JqZWN0IGFuZCBwdXNoIGl0IHRvIHRoZSBhc3NpZ25vcnNMaXN0IGFycmF5LiAqL1xyXG4gICAgICBpZiAodGhpcy5oYXNWYWx1ZShlbGVtZW50W1JFU1BPTlNJQklMSVRZLmFzc2lnbm9ySW5kZXgubmFtZV0pKSB7XHJcbiAgICAgICAgdGhpcy5hZGRQZW9wbGVEcm9wZG93bk5hbWUoZWxlbWVudFtSRVNQT05TSUJJTElUWS5hc3NpZ25vckluZGV4Lm5hbWVdKTtcclxuICAgICAgICBpZiAodGhpcy5oYXNWYWx1ZShlbGVtZW50W1JFU1BPTlNJQklMSVRZLmFzc2lnbm9ySW5kZXguZW1haWxdKSkge1xyXG4gICAgICAgICAgdGhpcy5hZGRQZW9wbGVEcm9wZG93bk5hbWUoZWxlbWVudFtSRVNQT05TSUJJTElUWS5hc3NpZ25vckluZGV4LmVtYWlsXSk7XHJcbiAgICAgICAgICB0aGlzLmFkZFBlb3BsZURyb3Bkb3duTmFtZShcclxuICAgICAgICAgICAgYCR7U3RyaW5nKGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkuYXNzaWdub3JJbmRleC5uYW1lXSkudHJpbSgpfSAoJHtTdHJpbmcoXHJcbiAgICAgICAgICAgICAgZWxlbWVudFtSRVNQT05TSUJJTElUWS5hc3NpZ25vckluZGV4LmVtYWlsXVxyXG4gICAgICAgICAgICApLnRyaW0oKX0pYFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkuYXNzaWdub3JJbmRleC5pZF0gKSB7XHJcbiAgICAgICAgY29uc3QgYXNzaWdub3IgPSB7XHJcbiAgICAgICAgICBuYW1lQW5kRW1haWw6IGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkuYXNzaWdub3JJbmRleC5uYW1lXSxcclxuICAgICAgICAgIG5hbWU6IGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkuYXNzaWdub3JJbmRleC5uYW1lXSxcclxuICAgICAgICAgIGVtYWlsOiBlbGVtZW50W1JFU1BPTlNJQklMSVRZLmFzc2lnbm9ySW5kZXguZW1haWxdLFxyXG4gICAgICAgICAgLy8gbmFtZTogZWxlbWVudFsxNF0uc3BsaXQoJyAoJylbMF0sXHJcbiAgICAgICAgICAvLyBlbWFpbDogZWxlbWVudFsxNF0uc3BsaXQoJyAoJylbMV0ucmVwbGFjZSgnKScsICcnKSxcclxuICAgICAgICAgIG1lbWJlcl9pZDogZWxlbWVudFtSRVNQT05TSUJJTElUWS5hc3NpZ25vckluZGV4Lm1lbWJlcl9pZF0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5hc3NpZ25vcnNMaXN0LnB1c2goYXNzaWdub3IpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jb2xsZWN0RW1haWxEaXNwbGF5TmFtZXNGcm9tU2hlZXQodGVtcExpc3QpO1xyXG5cclxuICAgIC8qIENyZWF0aW5nIGEgbGlzdCBvZiBjaGlsZCBjYXRlZ29yaWVzIGFuZCBhdHRhY2hpbmcgdGhlbSB0byB0aGVpciBwYXJlbnQgcHJvZ3JhbSAqL1xyXG4gICAgaWYgKHRoaXMudGVtcGxhdGVJbmZvLmNhdGVnb3J5TGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmNhdGVnb3J5TGlzdC5mb3JFYWNoKChwcm9ncmFtOiBhbnksIGk6IG51bWJlcikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkQ2F0ZWdvcnk6IHsgbmFtZTogYW55OyBpZDogYW55IH1bXSA9IFtdO1xyXG4gICAgICAgIHRoaXMuZ2V0UHJvZ3JhbUNhdGVnb3J5SWRDb2x1bW5zKHRlbXBMaXN0WzBdLCBwcm9ncmFtPy5wcm9ncmFtSWQpLmZvckVhY2goXHJcbiAgICAgICAgICAoaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMTsgdHJ1ZTsgaisrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRlbXBMaXN0W2pdICYmIHRlbXBMaXN0W2pdW2luZGV4XSkge1xyXG4gICAgICAgICAgICAgICAgY2hpbGRDYXRlZ29yeS5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgbmFtZTogdGVtcExpc3Rbal1baW5kZXggLSAxXSxcclxuICAgICAgICAgICAgICAgICAgaWQ6IHRlbXBMaXN0W2pdW2luZGV4XSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmNhdGVnb3J5TGlzdFtpXVsnY2hpbGRDYXRlZ29yeSddID0gY2hpbGRDYXRlZ29yeTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGlsZCBjYXRlZ29yaWVzIGxpdmUgaW4gbGF0ZXIgRGF0YS1zaGVldCBjb2x1bW5zIHdob3NlIGhlYWRlciBpcyB0aGUgcHJvZ3JhbSBpZC5cclxuICAgKiBTa2lwIHRoZSBwcm9ncmFtIGxpc3RpbmcgaWQgY29sdW1ucyAoMjItMjkgYXJlYSkg4oCUIHRob3NlIHNhbWUgaWRzIGFsc28gYXBwZWFyIHRoZXJlXHJcbiAgICogZm9yIHRoZSBmaXJzdCBwcm9ncmFtIG9mIGVhY2ggdHlwZSwgd2hpY2ggd291bGQgYXR0YWNoIHRoZSB3cm9uZyBuYW1lcy5cclxuICAgKi9cclxuICBnZXRQcm9ncmFtQ2F0ZWdvcnlJZENvbHVtbnMoaGVhZGVyUm93OiBhbnlbXSA9IFtdLCBwcm9ncmFtSWQ6IGFueSk6IG51bWJlcltdIHtcclxuICAgIGlmIChwcm9ncmFtSWQgPT0gbnVsbCB8fCBwcm9ncmFtSWQgPT09ICcnKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIGNvbnN0IHByb2dyYW1MaXN0aW5nSWRDb2x1bW5zID0gbmV3IFNldChbXHJcbiAgICAgIFJFU1BPTlNJQklMSVRZLnByb2dyYW1JbmRleC5yZWd1bGF0aW9ucy5pZCxcclxuICAgICAgUkVTUE9OU0lCSUxJVFkucHJvZ3JhbUluZGV4LnN0YW5kYXJkcy5pZCxcclxuICAgICAgUkVTUE9OU0lCSUxJVFkucHJvZ3JhbUluZGV4LmludGVybmFsQ29udHJvbHMuaWQsXHJcbiAgICAgIFJFU1BPTlNJQklMSVRZLnByb2dyYW1JbmRleC5vdGhlcnMuaWQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGluZGV4ZXM6IG51bWJlcltdID0gW107XHJcbiAgICAoaGVhZGVyUm93IHx8IFtdKS5mb3JFYWNoKChjZWxsOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgaWYgKCFwcm9ncmFtTGlzdGluZ0lkQ29sdW1ucy5oYXMoaW5kZXgpICYmIGNlbGwgPT0gcHJvZ3JhbUlkKSB7XHJcbiAgICAgICAgaW5kZXhlcy5wdXNoKGluZGV4KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gaW5kZXhlcztcclxuICB9XHJcblxyXG4gIHBhcnNlUGVvcGxlTGlzdENlbGwodmFsdWU6IGFueSk6IHtcclxuICAgIG5hbWVBbmRFbWFpbDogc3RyaW5nO1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgZW1haWw6IHN0cmluZztcclxuICB9IHtcclxuICAgIGNvbnN0IG5hbWVBbmRFbWFpbCA9IHZhbHVlID09IG51bGwgPyAnJyA6IFN0cmluZyh2YWx1ZSkudHJpbSgpO1xyXG4gICAgY29uc3QgZW1haWxNYXRjaCA9IG5hbWVBbmRFbWFpbC5tYXRjaCgvXFwoKFteKV0qQFteKV0qKVxcKVxccyokLyk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBuYW1lQW5kRW1haWwsXHJcbiAgICAgIG5hbWU6IG5hbWVBbmRFbWFpbC5yZXBsYWNlKC9cXHMqXFwoW14pXSpAW14pXSpcXClcXHMqJC8sICcnKS50cmltKCkgfHwgbmFtZUFuZEVtYWlsLFxyXG4gICAgICBlbWFpbDogZW1haWxNYXRjaCA/IGVtYWlsTWF0Y2hbMV0udHJpbSgpIDogJycsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgYWRkUGVvcGxlRHJvcGRvd25OYW1lKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5oYXNWYWx1ZSh2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLnRlbXBsYXRlSW5mby5wZW9wbGVEcm9wZG93bk5hbWVzKSB7XHJcbiAgICAgIHRoaXMudGVtcGxhdGVJbmZvLnBlb3BsZURyb3Bkb3duTmFtZXMgPSBbXTtcclxuICAgIH1cclxuICAgIGNvbnN0IG5hbWUgPSBTdHJpbmcodmFsdWUpLnRyaW0oKTtcclxuICAgIGNvbnN0IGFscmVhZHlBZGRlZCA9IHRoaXMudGVtcGxhdGVJbmZvLnBlb3BsZURyb3Bkb3duTmFtZXMuc29tZShcclxuICAgICAgKGV4aXN0aW5nOiBzdHJpbmcpID0+IHRoaXMubm9ybWFsaXplRHJvcGRvd25WYWx1ZShleGlzdGluZykgPT09IHRoaXMubm9ybWFsaXplRHJvcGRvd25WYWx1ZShuYW1lKVxyXG4gICAgKTtcclxuICAgIGlmICghYWxyZWFkeUFkZGVkKSB7XHJcbiAgICAgIHRoaXMudGVtcGxhdGVJbmZvLnBlb3BsZURyb3Bkb3duTmFtZXMucHVzaChuYW1lKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbGxlY3RFbWFpbERpc3BsYXlOYW1lc0Zyb21TaGVldCh0ZW1wTGlzdDogYW55W10gPSBbXSk6IHZvaWQge1xyXG4gICAgKHRlbXBMaXN0IHx8IFtdKS5mb3JFYWNoKChyb3c6IGFueVtdKSA9PiB7XHJcbiAgICAgIChyb3cgfHwgW10pLmZvckVhY2goKGNlbGw6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChjZWxsID09IG51bGwpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IFN0cmluZyhjZWxsKTtcclxuICAgICAgICBpZiAoL1xcKFteKV0qQFteKV0qXFwpLy50ZXN0KHRleHQpKSB7XHJcbiAgICAgICAgICB0aGlzLmFkZFBlb3BsZURyb3Bkb3duTmFtZSh0ZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRQcm9ncmFtRGV0YWlscyhlbGVtZW50OiBhbnksIGluZGV4OiBhbnksIHR5cGU6IG51bWJlcikge1xyXG4gICAgaWYoZWxlbWVudFtpbmRleC5pZF0gJiYgdHlwZW9mIGVsZW1lbnRbaW5kZXguaWRdID09PSAnbnVtYmVyJykge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHByb2dyYW1OYW1lOiBlbGVtZW50W2luZGV4Lm5hbWVdLFxyXG4gICAgICAgIHByb2dyYW1JZDogZWxlbWVudFtpbmRleC5pZF0sXHJcbiAgICAgICAgcHJvZ3JhbVR5cGU6IHR5cGVcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJdCB0YWtlcyBhbiBldmVudCwgd2hpY2ggaXMgYSBzdHJpbmcsIGFuZCB0aGVuIGl0IHNldHMgdGhlIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCB2YXJpYWJsZSB0b1xyXG4gICAqIHRoZSB2YWx1ZSBvZiB0aGUgYnVsa1VwbG9hZCB2YXJpYWJsZSwgd2hpY2ggaXMgYW4gb2JqZWN0LCBhbmQgdGhlbiBpdCBhY2Nlc3NlcyB0aGUgcHJvcGVydHkgb2ZcclxuICAgKiB0aGF0IG9iamVjdCB0aGF0IG1hdGNoZXMgdGhlIGV2ZW50IHN0cmluZy5cclxuICAgKlxyXG4gICAqIFNvIGlmIHRoZSBldmVudCBzdHJpbmcgaXMgJ2ZyZXF1ZW5jeScsIHRoZW4gdGhlIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCB2YXJpYWJsZSB3aWxsIGJlIHNldCB0b1xyXG4gICAqIHRoZSB2YWx1ZSBvZiB0aGUgZnJlcXVlbmN5IHByb3BlcnR5IG9mIHRoZSBidWxrVXBsb2FkIG9iamVjdC5cclxuICAgKlxyXG4gICAqIElmIHRoZSBldmVudCBzdHJpbmcgaXMgJ29uZ29pbmcnLCB0aGVuIHRoZSByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgdmFyaWFibGUgd2lsbCBiZSBzZXQgdG8gdGhlXHJcbiAgICogdmFsdWUgb2YgdGhlIG9uZ29pbmcgcHJvcGVydHkgb2YgdGhlIGJ1bGtVcGxvYWQgb2JqZWN0LlxyXG4gICAqXHJcbiAgICogSWYgdGhlIGV2ZW50IHN0cmluZyBpcyAnb25Db21wbGV0aW9uJywgdGhlbiB0aGUgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkIHZhcmlhYmxlIHdpbGwgYmUgc2V0IHRvIHRoZVxyXG4gICAqIHZhbHVlIG9mIHRoZSBvbkNvbXBsZXRpb24gcHJvcGVydHkgb2YgdGhlIGJ1bGtVcGxvYWQgb2JqZWN0LlxyXG4gICAqXHJcbiAgICogSWYgdGhlIGV2ZW50IHN0cmluZyBpcyBhbnl0aGluZyBlbHNlLCB0aGVuIHRoZSByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgdmFyaWFibGUgd2lsbCBiZSBzZXQgdG9cclxuICAgKiB0aGUgdmFsdWUgb2YgdGhlIGZyZXF1ZW5jeSBwcm9wZXJ0eSBvZiB0aGUgYnVsa1VwbG9hZCBvYmplY3QuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50IC0gc3RyaW5nIC0gdGhlIGV2ZW50IHRoYXQgaXMgZW1pdHRlZCBmcm9tIHRoZSBjaGlsZCBjb21wb25lbnQgKGZyZXF1ZW5jeSB8IG9uZ29pbmcgfCBvbkNvbXBsZXRpb24pXHJcbiAgICovXHJcbiAgc2VsZWN0ZWRUYWIoZXZlbnQ6ICdmcmVxdWVuY3knIHwgJ29uZ29pbmcnIHwgJ29uQ29tcGxldGlvbicpIHtcclxuICAgIHRoaXMudGFiVHlwZSA9IGV2ZW50O1xyXG4gICAgc3dpdGNoIChldmVudCkge1xyXG4gICAgICBjYXNlICdmcmVxdWVuY3knOlxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0gdGhpcy5idWxrVXBsb2FkPy5mcmVxdWVuY3k7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ29uZ29pbmcnOlxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0gdGhpcy5idWxrVXBsb2FkPy5vbmdvaW5nO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdvbkNvbXBsZXRpb24nOlxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0gdGhpcy5idWxrVXBsb2FkPy5vbkNvbXBsZXRpb247XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgPSB0aGlzLmJ1bGtVcGxvYWQ/LmZyZXF1ZW5jeTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERldGVjdHMgdGhlIGZvdXIgZnJlcXVlbmN5IGNvbHVtbnMgYWRkZWQgdG8gdGhlIGxhdGVzdCB4bHN4IHRlbXBsYXRlOlxyXG4gICAqIER1ZSBUaW1lLCBFbmRzIEFmdGVyIE9jY3VycmVuY2VzLCBFbmRzIEJ5IERhdGUgKERheSksIEVuZHMgQnkgRGF0ZSAoTW9udGgpLlxyXG4gICAqIE9sZGVyIHRlbXBsYXRlcyB3aXRob3V0IHRoZXNlIGNvbHVtbnMga2VlcCB0aGUgb3JpZ2luYWwgY29sdW1uIG1hcHBpbmcuXHJcbiAgICovXHJcbiAgZGV0ZWN0RXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zKGhlYWRlcjogYW55W10gPSBbXSwgc3ViSGVhZGluZzogYW55W10gPSBbXSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgY2VsbHMgPSBbLi4uKGhlYWRlciB8fCBbXSksIC4uLihzdWJIZWFkaW5nIHx8IFtdKV07XHJcbiAgICByZXR1cm4gY2VsbHMuc29tZSgoY2VsbDogYW55KSA9PiB7XHJcbiAgICAgIGlmICh0eXBlb2YgY2VsbCAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IGNlbGwudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICcgJyk7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgbm9ybWFsaXplZC5pbmNsdWRlcygnZHVlIHRpbWUnKSB8fFxyXG4gICAgICAgIG5vcm1hbGl6ZWQuaW5jbHVkZXMoJ3Jlc3BvbnNpYmlsaXR5IGVuZHMgYWZ0ZXInKSB8fFxyXG4gICAgICAgIG5vcm1hbGl6ZWQuaW5jbHVkZXMoJ3Jlc3BvbnNpYmlsaXR5IGVuZHMgYnkgZGF0ZScpXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbWFwcyBmcmVxdWVuY3kgY29sdW1ucyB3aGVuIHRoZSB1cGxvYWRlZCBmaWxlIGluY2x1ZGVzIHRoZSBmb3VyIG5ldyBmaWVsZHMsXHJcbiAgICogc28gbGF0ZXIgY29sdW1ucyAoUkMsIHJldmlld2VyLCBldGMuKSBzdGF5IGFsaWduZWQuIE9uZ29pbmcvb25Db21wbGV0aW9uIGFyZSB1bmNoYW5nZWQuXHJcbiAgICovXHJcbiAgYXBwbHlFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMob2JqOiBhbnksIHJlcG9ydDogYW55LCBpc1Byb2dyYW06IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmIChpc1Byb2dyYW0pIHtcclxuICAgICAgb2JqLmR1ZVRpbWUgPSByZXBvcnRbMTFdO1xyXG4gICAgICBvYmoucmVzcG9uc2liaWxpdHlXaW5kb3cgPSByZXBvcnRbMTJdO1xyXG4gICAgICBvYmouZmFpbGVkQWZ0ZXIgPSByZXBvcnRbMTNdO1xyXG4gICAgICBvYmouZW5kc0FmdGVyT2NjdXJyZW5jZXMgPSByZXBvcnRbMTRdO1xyXG4gICAgICBvYmouZW5kc0J5RGF0ZURheSA9IHJlcG9ydFsxNV07XHJcbiAgICAgIG9iai5lbmRzQnlEYXRlTW9udGggPSByZXBvcnRbMTZdO1xyXG4gICAgICBvYmoucmVzcG9uc2liaWxpdHlDZW50ZXIgPSByZXBvcnRbMTddO1xyXG4gICAgICBvYmoucmVzcG9uc2liaWxpdHlDZW50ZXJUeXBlID0gcmVwb3J0WzE4XTtcclxuICAgICAgb2JqLnJlcG9ydENsYXNzID0gcmVwb3J0WzE5XTtcclxuICAgICAgb2JqLm9iamVjdGl2ZSA9IHJlcG9ydFsyMF07XHJcbiAgICAgIG9iai5ub3RlcyA9IHJlcG9ydFsyMV07XHJcbiAgICAgIG9iai5pc0Zvcm1hdCA9IHJlcG9ydFsyMl07XHJcbiAgICAgIG9iai5mb3JtYXRGb3JSZXNwb25zaWJpbGl0eSA9IHJlcG9ydFsyM107XHJcbiAgICAgIG9iai5kb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQgPSByZXBvcnRbMjRdO1xyXG4gICAgICBvYmoucmV2aWV3ZXIgPSByZXBvcnRbMjVdO1xyXG4gICAgICBvYmoucmV2aWV3ZXJUeXBlID0gcmVwb3J0WzI2XTtcclxuICAgICAgb2JqLnJldmlld1RvQmVDb21wbGV0ZWRXaXRoaW4gPSByZXBvcnRbMjddO1xyXG4gICAgICBvYmoucmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXIgPSByZXBvcnRbMjhdO1xyXG4gICAgICBvYmoub3ZlcnNlZXIgPSByZXBvcnRbMjldO1xyXG4gICAgICBvYmoubm90aWZ5T25GYWlsdXJlID0gcmVwb3J0WzMwXTtcclxuICAgICAgb2JqLmNvbGxhYm9yYXRvciA9IHJlcG9ydFszMV07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBvYmouZHVlVGltZSA9IHJlcG9ydFs4XTtcclxuICAgICAgb2JqLnJlc3BvbnNpYmlsaXR5V2luZG93ID0gcmVwb3J0WzldO1xyXG4gICAgICBvYmouZmFpbGVkQWZ0ZXIgPSByZXBvcnRbMTBdO1xyXG4gICAgICBvYmouZW5kc0FmdGVyT2NjdXJyZW5jZXMgPSByZXBvcnRbMTFdO1xyXG4gICAgICBvYmouZW5kc0J5RGF0ZURheSA9IHJlcG9ydFsxMl07XHJcbiAgICAgIG9iai5lbmRzQnlEYXRlTW9udGggPSByZXBvcnRbMTNdO1xyXG4gICAgICBvYmoucmVzcG9uc2liaWxpdHlDZW50ZXIgPSByZXBvcnRbMTRdO1xyXG4gICAgICBvYmoucmVwb3J0Q2xhc3MgPSByZXBvcnRbMTVdO1xyXG4gICAgICBvYmoub2JqZWN0aXZlID0gcmVwb3J0WzE2XTtcclxuICAgICAgb2JqLm5vdGVzID0gcmVwb3J0WzE3XTtcclxuICAgICAgb2JqLmlzRm9ybWF0ID0gcmVwb3J0WzE4XTtcclxuICAgICAgb2JqLmZvcm1hdEZvclJlc3BvbnNpYmlsaXR5ID0gcmVwb3J0WzE5XTtcclxuICAgICAgb2JqLmRvY3VtZW50RXZpZGVuY2VSZXF1aXJlZCA9IHJlcG9ydFsyMF07XHJcbiAgICAgIG9iai5yZXZpZXdlciA9IHJlcG9ydFsyMV07XHJcbiAgICAgIG9iai5yZXZpZXdUb0JlQ29tcGxldGVkV2l0aGluID0gcmVwb3J0WzIyXTtcclxuICAgICAgb2JqLnJldmlld1dpbGxCZUZhaWxlZEFmdGVyID0gcmVwb3J0WzIzXTtcclxuICAgICAgb2JqLm92ZXJzZWVyID0gcmVwb3J0WzI0XTtcclxuICAgICAgb2JqLm5vdGlmeU9uRmFpbHVyZSA9IHJlcG9ydFsyNV07XHJcbiAgICAgIG9iai5jb2xsYWJvcmF0b3IgPSByZXBvcnRbMjZdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSXQgdGFrZXMgaW4gYSByZXBvcnQsIGEgdGFiIHR5cGUsIGFuZCBhIGJvb2xlYW4gdmFsdWUuIEl0IHRoZW4gcmV0dXJucyBhbiBvYmplY3Qgd2l0aCBhIGJ1bmNoIG9mXHJcbiAgICogcHJvcGVydGllcy5cclxuICAgKiA8L2NvZGU+XHJcbiAgICogQHBhcmFtIHthbnl9IHJlcG9ydCAtIGFueSA9Jmd0OyB0aGUgYXJyYXkgb2YgZGF0YVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJUeXBlIC0gc3RyaW5nIC0gdGhpcyBpcyB0aGUgdHlwZSBvZiB0YWIgdGhhdCBpcyBzZWxlY3RlZC5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzUHJvZ3JhbSAtIGJvb2xlYW5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucyAtIHdoZXRoZXIgdGhlIHhsc3ggaW5jbHVkZXMgdGhlIGZvdXIgbmV3IGZyZXF1ZW5jeSBjb2x1bW5zXHJcbiAgICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxyXG4gICAqL1xyXG4gIHNldFJlcG9ydERldGFpbHMocmVwb3J0OiBhbnksIHRhYlR5cGU6IHN0cmluZywgaXNQcm9ncmFtOiBib29sZWFuLCBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMgPSBmYWxzZSkge1xyXG5cclxuICAgIGxldCBvYmo6IGFueTtcclxuICAgIHN3aXRjaCAodGFiVHlwZSkge1xyXG4gICAgICBjYXNlICdmcmVxdWVuY3knOiB7XHJcbiAgICAgICAgaWYgKGlzUHJvZ3JhbSkge1xyXG4gICAgICAgICAgb2JqID0ge1xyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eU5hbWU6IHJlcG9ydFswXSxcclxuICAgICAgICAgICAgcHJvZ3JhbVR5cGU6IHJlcG9ydFsxXSxcclxuICAgICAgICAgICAgcHJvZ3JhbTogcmVwb3J0WzJdLFxyXG4gICAgICAgICAgICBwcm9ncmFtQ2F0ZWdvcnk6IHJlcG9ydFszXSxcclxuICAgICAgICAgICAgYXNzaWdub3I6IHJlcG9ydFs0XSxcclxuICAgICAgICAgICAgYXNzaWduZWU6IHJlcG9ydFs1XSxcclxuICAgICAgICAgICAgYXNzaWduZWVUeXBlOiByZXBvcnRbNl0sXHJcbiAgICAgICAgICAgIGtleVJlc3BvbnNpYmlsaXR5OiByZXBvcnRbN10sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2F0ZWdvcnk6IG51bGwsXHJcbiAgICAgICAgICAgIGZyZXF1ZW5jeTogcmVwb3J0WzhdLFxyXG4gICAgICAgICAgICBkYXk6IHJlcG9ydFs5XSxcclxuICAgICAgICAgICAgbW9udGg6IHJlcG9ydFsxMF0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5V2luZG93OiByZXBvcnRbMTFdLFxyXG4gICAgICAgICAgICBmYWlsZWRBZnRlcjogcmVwb3J0WzEyXSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXI6IHJlcG9ydFsxM10sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyVHlwZTogcmVwb3J0WzE0XSxcclxuICAgICAgICAgICAgcmVwb3J0Q2xhc3M6IHJlcG9ydFsxNV0sXHJcbiAgICAgICAgICAgIG9iamVjdGl2ZTogcmVwb3J0WzE2XSxcclxuICAgICAgICAgICAgbm90ZXM6IHJlcG9ydFsxN10sXHJcbiAgICAgICAgICAgIGlzRm9ybWF0OiByZXBvcnRbMThdLFxyXG4gICAgICAgICAgICBmb3JtYXRGb3JSZXNwb25zaWJpbGl0eTogcmVwb3J0WzE5XSxcclxuICAgICAgICAgICAgZG9jdW1lbnRFdmlkZW5jZVJlcXVpcmVkOiByZXBvcnRbMjBdLFxyXG4gICAgICAgICAgICAvLyBldmlkZW5jZU5vdGVzOiByZXBvcnRbMTldLFxyXG4gICAgICAgICAgICAvLyBhc3Nlc3NtZW50czogcmVwb3J0WzIwXSxcclxuXHJcbiAgICAgICAgICAgIHJldmlld2VyOiByZXBvcnRbMjFdICxcclxuICAgICAgICAgICAgcmV2aWV3ZXJUeXBlOiByZXBvcnRbMjJdLFxyXG4gICAgICAgICAgICByZXZpZXdUb0JlQ29tcGxldGVkV2l0aGluOiByZXBvcnRbMjNdLFxyXG4gICAgICAgICAgICByZXZpZXdXaWxsQmVGYWlsZWRBZnRlcjogcmVwb3J0WzI0XSxcclxuICAgICAgICAgICAgb3ZlcnNlZXI6IHJlcG9ydFsyNV0sXHJcbiAgICAgICAgICAgIG5vdGlmeU9uRmFpbHVyZTogcmVwb3J0WzI2XSxcclxuICAgICAgICAgICAgY29sbGFib3JhdG9yOiByZXBvcnRbMjddLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIGlmIChoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMpIHtcclxuICAgICAgICAgICAgdGhpcy5hcHBseUV4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucyhvYmosIHJlcG9ydCwgdHJ1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gPSB0aGlzLmlzVmFsaWREYXRhKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ10gPSB0aGlzLnJldHVybklkcyhvYmo/LmFzc2lnbmVlLCAnZW50cnVzdGVkX3RvJylcclxuICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgICAgICBvYmpbJ3VzZXJWYWxpZGF0ZVdpdGhQcm9ncmFtJ10gPSB0aGlzLnZhbGlkYXRlRGF0YVdpdGhQcm9ncmFtKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ3ZhbGlkRGF0ZSddID0gdGhpcy5jb21wYXJlV2l0aEN1cnJlbnREYXRlKG9iaj8uZGF5LCBvYmo/Lm1vbnRoKTtcclxuICAgICAgICAgIG9ialsnaXNEYXRlRm9ybWF0SW52YWxpZCddID0gdGhpcy5pc0RhdGVGb3JtYXRJbnZhbGlkO1xyXG4gICAgICAgICAgb2JqWydpc0RheUludmFsaWQnXSA9IHRoaXMuaXNEYXlJbnZhbGlkO1xyXG4gICAgICAgICAgb2JqWydpc1Bhc3REYXRlJ10gPSB0aGlzLmlzUGFzdERhdGUob2JqPy5kYXksIG9iaj8ubW9udGgpO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkRHVlVGltZSddID0gdGhpcy5pc1ZhbGlkRHVlVGltZShcclxuICAgICAgICAgICAgb2JqPy5kdWVUaW1lLFxyXG4gICAgICAgICAgICBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBvYmpbJ2VuZHNBZnRlck9jY3VycmVuY2VzRXJyb3InXSA9IHRoaXMuZ2V0RW5kc0FmdGVyT2NjdXJyZW5jZXNFcnJvcihcclxuICAgICAgICAgICAgb2JqPy5lbmRzQWZ0ZXJPY2N1cnJlbmNlcyxcclxuICAgICAgICAgICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkRW5kc0FmdGVyT2NjdXJyZW5jZXMnXSA9ICFvYmpbJ2VuZHNBZnRlck9jY3VycmVuY2VzRXJyb3InXTtcclxuICAgICAgICAgIHRoaXMuYXBwbHlFbmRzQnlEYXRlVmFsaWRhdGlvbihvYmosIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucyk7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWQnXSA9XHJcbiAgICAgICAgICAgIG9ialsnaXNWYWxpZERhdGEnXSAmJlxyXG4gICAgICAgICAgICBvYmpbJ3ZhbGlkRGF0ZSddICYmXHJcbiAgICAgICAgICAgICFvYmpbJ2lzUGFzdERhdGUnXSAmJlxyXG4gICAgICAgICAgICBvYmo/LmZyZXF1ZW5jeT8ubGVuZ3RoICYmXHJcbiAgICAgICAgICAgICFPYmplY3QudmFsdWVzKG9ialsndXNlclZhbGlkYXRlV2l0aFByb2dyYW0nXSkuaW5jbHVkZXMoZmFsc2UpICYmXHJcbiAgICAgICAgICAgIG9ialsnaXNWYWxpZFVzZXInXSAmJlxyXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWRSaXNrQ2xhc3Mob2JqPy5yZXBvcnRDbGFzcykgJiZcclxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkRW5kc0FmdGVyT2NjdXJyZW5jZXMnXSAmJlxyXG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWRFbmRzQnlEYXRlJ11cclxuICAgICAgICAgIHJldHVybiB0aGlzLndpdGhEcm9wZG93blZhbGlkYXRpb24oXHJcbiAgICAgICAgICAgIG9iaixcclxuICAgICAgICAgICAgdGFiVHlwZSxcclxuICAgICAgICAgICAgaXNQcm9ncmFtLFxyXG4gICAgICAgICAgICBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG9iaiA9IHtcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlOYW1lOiByZXBvcnRbMF0sXHJcbiAgICAgICAgICAgIGFzc2lnbm9yOiByZXBvcnRbMV0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlOiByZXBvcnRbMl0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlVHlwZTogcmVwb3J0WzNdLFxyXG4gICAgICAgICAgICBrZXlSZXNwb25zaWJpbGl0eTogcmVwb3J0WzRdLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNhdGVnb3J5OiBudWxsLFxyXG4gICAgICAgICAgICBmcmVxdWVuY3k6IHJlcG9ydFs1XSxcclxuICAgICAgICAgICAgZGF5OiByZXBvcnRbNl0sXHJcbiAgICAgICAgICAgIG1vbnRoOiByZXBvcnRbN10sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5V2luZG93OiByZXBvcnRbOF0sXHJcbiAgICAgICAgICAgIGZhaWxlZEFmdGVyOiByZXBvcnRbOV0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyOiByZXBvcnRbMTBdLFxyXG4gICAgICAgICAgICByZXBvcnRDbGFzczogcmVwb3J0WzExXSxcclxuICAgICAgICAgICAgb2JqZWN0aXZlOiByZXBvcnRbMTJdLFxyXG4gICAgICAgICAgICBub3RlczogcmVwb3J0WzEzXSxcclxuICAgICAgICAgICAgaXNGb3JtYXQ6IHJlcG9ydFsxNF0sXHJcbiAgICAgICAgICAgIGZvcm1hdEZvclJlc3BvbnNpYmlsaXR5OiByZXBvcnRbMTVdLFxyXG4gICAgICAgICAgICBkb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQ6IHJlcG9ydFsxNl0sXHJcbiAgICAgICAgICAgIC8vIGV2aWRlbmNlTm90ZXM6IHJlcG9ydFsxNl0sXHJcbiAgICAgICAgICAgIC8vIGFzc2Vzc21lbnRzOiByZXBvcnRbMTddLFxyXG4gICAgICAgICAgICByZXZpZXdlcjogcmVwb3J0WzE3XSxcclxuICAgICAgICAgICAgcmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbjogcmVwb3J0WzE4XSxcclxuICAgICAgICAgICAgcmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXI6IHJlcG9ydFsxOV0sXHJcbiAgICAgICAgICAgIG92ZXJzZWVyOiByZXBvcnRbMjBdLFxyXG4gICAgICAgICAgICBub3RpZnlPbkZhaWx1cmU6IHJlcG9ydFsyMV0sXHJcbiAgICAgICAgICAgIGNvbGxhYm9yYXRvcjogcmVwb3J0WzIyXSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBpZiAoaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHlFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMob2JqLCByZXBvcnQsIGZhbHNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIG9ialsnaXNWYWxpZERhdGEnXSA9IHRoaXMuaXNWYWxpZERhdGEob2JqKTtcclxuICAgICAgICAgIG9ialsndXNlclZhbGlkYXRlV2l0aFByb2dyYW0nXSA9IHRoaXMudmFsaWRhdGVEYXRhV2l0aFByb2dyYW0ob2JqKTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZFVzZXInXSA9IHRoaXMucmV0dXJuSWRzKG9iaj8uYXNzaWduZWUsICdlbnRydXN0ZWRfdG8nKVxyXG4gICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgOiBmYWxzZTtcclxuICAgICAgICAgIG9ialsndmFsaWREYXRlJ10gPSB0aGlzLmNvbXBhcmVXaXRoQ3VycmVudERhdGUob2JqPy5kYXksIG9iaj8ubW9udGgpO1xyXG4gICAgICAgICAgb2JqWydpc1Bhc3REYXRlJ10gPSB0aGlzLmlzUGFzdERhdGUob2JqPy5kYXksIG9iaj8ubW9udGgpO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkRHVlVGltZSddID0gdGhpcy5pc1ZhbGlkRHVlVGltZShcclxuICAgICAgICAgICAgb2JqPy5kdWVUaW1lLFxyXG4gICAgICAgICAgICBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBvYmpbJ2VuZHNBZnRlck9jY3VycmVuY2VzRXJyb3InXSA9IHRoaXMuZ2V0RW5kc0FmdGVyT2NjdXJyZW5jZXNFcnJvcihcclxuICAgICAgICAgICAgb2JqPy5lbmRzQWZ0ZXJPY2N1cnJlbmNlcyxcclxuICAgICAgICAgICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkRW5kc0FmdGVyT2NjdXJyZW5jZXMnXSA9ICFvYmpbJ2VuZHNBZnRlck9jY3VycmVuY2VzRXJyb3InXTtcclxuICAgICAgICAgIHRoaXMuYXBwbHlFbmRzQnlEYXRlVmFsaWRhdGlvbihvYmosIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucyk7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWQnXSA9XHJcbiAgICAgICAgICAgIG9ialsnaXNWYWxpZERhdGEnXSAmJlxyXG4gICAgICAgICAgICBvYmpbJ3ZhbGlkRGF0ZSddICYmXHJcbiAgICAgICAgICAgICFvYmpbJ2lzUGFzdERhdGUnXSAmJlxyXG4gICAgICAgICAgICBvYmo/LmZyZXF1ZW5jeT8ubGVuZ3RoICYmXHJcbiAgICAgICAgICAgIG9ialsnaXNWYWxpZFVzZXInXSAmJlxyXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWRSaXNrQ2xhc3Mob2JqPy5yZXBvcnRDbGFzcykgJiZcclxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkRW5kc0FmdGVyT2NjdXJyZW5jZXMnXSAmJlxyXG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWRFbmRzQnlEYXRlJ11cclxuICAgICAgICAgIHJldHVybiB0aGlzLndpdGhEcm9wZG93blZhbGlkYXRpb24oXHJcbiAgICAgICAgICAgIG9iaixcclxuICAgICAgICAgICAgdGFiVHlwZSxcclxuICAgICAgICAgICAgaXNQcm9ncmFtLFxyXG4gICAgICAgICAgICBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ29uZ29pbmcnOiB7XHJcbiAgICAgICAgaWYgKGlzUHJvZ3JhbSkge1xyXG4gICAgICAgICAgb2JqID0ge1xyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eU5hbWU6IHJlcG9ydFswXSxcclxuICAgICAgICAgICAgcHJvZ3JhbVR5cGU6IHJlcG9ydFsxXSxcclxuICAgICAgICAgICAgcHJvZ3JhbTogcmVwb3J0WzJdLFxyXG4gICAgICAgICAgICBwcm9ncmFtQ2F0ZWdvcnk6IHJlcG9ydFszXSxcclxuICAgICAgICAgICAgYXNzaWdub3I6IHJlcG9ydFs0XSxcclxuICAgICAgICAgICAgYXNzaWduZWU6IHJlcG9ydFs1XSxcclxuICAgICAgICAgICAgYXNzaWduZWVUeXBlOiByZXBvcnRbNl0sXHJcbiAgICAgICAgICAgIGtleVJlc3BvbnNpYmlsaXR5OiByZXBvcnRbN10sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyOiByZXBvcnRbOF0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyVHlwZTogcmVwb3J0WzldLFxyXG4gICAgICAgICAgICByZXBvcnRDbGFzczogcmVwb3J0WzEwXSxcclxuICAgICAgICAgICAgb2JqZWN0aXZlOiByZXBvcnRbMTFdLFxyXG4gICAgICAgICAgICBub3RlczogcmVwb3J0WzEyXSxcclxuICAgICAgICAgICAgaXNGb3JtYXQ6IHJlcG9ydFsxM10sXHJcbiAgICAgICAgICAgIGZvcm1hdEZvclJlc3BvbnNpYmlsaXR5OiByZXBvcnRbMTRdLFxyXG4gICAgICAgICAgICBkb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQ6IHJlcG9ydFsxNV0sXHJcbiAgICAgICAgICAgIHJldmlld2VyOiByZXBvcnRbMTZdLFxyXG4gICAgICAgICAgICByZXZpZXdlclR5cGU6IHJlcG9ydFsxN10sIFxyXG4gICAgICAgICAgICByZXZpZXdUb0JlQ29tcGxldGVkV2l0aGluOiByZXBvcnRbMThdLFxyXG4gICAgICAgICAgICByZXZpZXdXaWxsQmVGYWlsZWRBZnRlcjogcmVwb3J0WzE5XSxcclxuICAgICAgICAgICAgb3ZlcnNlZXI6IHJlcG9ydFsyMF0sXHJcbiAgICAgICAgICAgIG5vdGlmeU9uRmFpbHVyZTogcmVwb3J0WzIxXSxcclxuICAgICAgICAgICAgZnJlcXVlbmN5OiAnT25nb2luZycsXHJcbiAgICAgICAgICAgIGNvbGxhYm9yYXRvcjogcmVwb3J0WzIyXSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gPSB0aGlzLmlzVmFsaWREYXRhKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ3VzZXJWYWxpZGF0ZVdpdGhQcm9ncmFtJ10gPSB0aGlzLnZhbGlkYXRlRGF0YVdpdGhQcm9ncmFtKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ10gPSB0aGlzLnJldHVybklkcyhvYmo/LmFzc2lnbmVlLCAnZW50cnVzdGVkX3RvJylcclxuICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWQnXSA9XHJcbiAgICAgICAgICAgIG9ialsnaXNWYWxpZERhdGEnXSAmJlxyXG4gICAgICAgICAgICAhT2JqZWN0LnZhbHVlcyhvYmpbJ3VzZXJWYWxpZGF0ZVdpdGhQcm9ncmFtJ10pLmluY2x1ZGVzKGZhbHNlKSAmJlxyXG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ107XHJcblxyXG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ10gJiZcclxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkUmlza0NsYXNzKG9iaj8ucmVwb3J0Q2xhc3MpIFxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMud2l0aERyb3Bkb3duVmFsaWRhdGlvbihcclxuICAgICAgICAgICAgb2JqLFxyXG4gICAgICAgICAgICB0YWJUeXBlLFxyXG4gICAgICAgICAgICBpc1Byb2dyYW0sXHJcbiAgICAgICAgICAgIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgb2JqID0ge1xyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eU5hbWU6IHJlcG9ydFswXSxcclxuICAgICAgICAgICAgYXNzaWdub3I6IHJlcG9ydFsxXSxcclxuICAgICAgICAgICAgYXNzaWduZWU6IHJlcG9ydFsyXSxcclxuICAgICAgICAgICAgYXNzaWduZWVUeXBlOiByZXBvcnRbM10sXHJcbiAgICAgICAgICAgIGtleVJlc3BvbnNpYmlsaXR5OiByZXBvcnRbNF0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2F0ZWdvcnk6IG51bGwsXHJcbiAgICAgICAgICAgIGZyZXF1ZW5jeTogcmVwb3J0WzVdLFxyXG4gICAgICAgICAgICBzZXRSZW1pbmRlcjogcmVwb3J0WzZdLFxyXG4gICAgICAgICAgICBmcmVxdWVuY3lSZW1pbmRlcjogcmVwb3J0WzddLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNlbnRlcjogcmVwb3J0WzhdLFxyXG4gICAgICAgICAgICByZXBvcnRDbGFzczogcmVwb3J0WzldLFxyXG4gICAgICAgICAgICBvYmplY3RpdmU6IHJlcG9ydFsxMF0sXHJcbiAgICAgICAgICAgIG5vdGVzOiByZXBvcnRbMTFdLFxyXG4gICAgICAgICAgICBpc0Zvcm1hdDogcmVwb3J0WzEyXSxcclxuICAgICAgICAgICAgZm9ybWF0Rm9yUmVzcG9uc2liaWxpdHk6IHJlcG9ydFsxM10sXHJcbiAgICAgICAgICAgIGRvY3VtZW50RXZpZGVuY2VSZXF1aXJlZDogcmVwb3J0WzE0XSxcclxuICAgICAgICAgICAgLy8gZXZpZGVuY2VOb3RlczogcmVwb3J0WzE0XSxcclxuICAgICAgICAgICAgLy8gYXNzZXNzbWVudHM6IHJlcG9ydFsxNV0sXHJcbiAgICAgICAgICAgIHJldmlld2VyOiByZXBvcnRbMTVdLFxyXG4gICAgICAgICAgICByZXZpZXdUb0JlQ29tcGxldGVkV2l0aGluOiByZXBvcnRbMTZdLFxyXG4gICAgICAgICAgICByZXZpZXdXaWxsQmVGYWlsZWRBZnRlcjogcmVwb3J0WzE3XSxcclxuICAgICAgICAgICAgb3ZlcnNlZXI6IHJlcG9ydFsxOF0sXHJcbiAgICAgICAgICAgIG5vdGlmeU9uRmFpbHVyZTogcmVwb3J0WzE5XSxcclxuICAgICAgICAgICAgY29sbGFib3JhdG9yOiByZXBvcnRbMjBdLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZERhdGEnXSA9IHRoaXMuaXNWYWxpZERhdGEob2JqKTtcclxuICAgICAgICAgIG9ialsndXNlclZhbGlkYXRlV2l0aFByb2dyYW0nXSA9IHRoaXMudmFsaWRhdGVEYXRhV2l0aFByb2dyYW0ob2JqKTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZFVzZXInXSA9IHRoaXMucmV0dXJuSWRzKG9iaj8uYXNzaWduZWUsICdlbnRydXN0ZWRfdG8nKVxyXG4gICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgOiBmYWxzZTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZCddID0gb2JqWydpc1ZhbGlkRGF0YSddICYmIG9ialsnaXNWYWxpZFVzZXInXSAmJlxyXG4gICAgICAgICAgdGhpcy5pc1ZhbGlkUmlza0NsYXNzKG9iaj8ucmVwb3J0Q2xhc3MpIFxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMud2l0aERyb3Bkb3duVmFsaWRhdGlvbihcclxuICAgICAgICAgICAgb2JqLFxyXG4gICAgICAgICAgICB0YWJUeXBlLFxyXG4gICAgICAgICAgICBpc1Byb2dyYW0sXHJcbiAgICAgICAgICAgIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnb25Db21wbGV0aW9uJzoge1xyXG4gICAgICAgIGlmIChpc1Byb2dyYW0pIHtcclxuICAgICAgICAgIG9iaiA9IHtcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlOYW1lOiByZXBvcnRbMF0sXHJcbiAgICAgICAgICAgIHByb2dyYW1UeXBlOiByZXBvcnRbMV0sXHJcbiAgICAgICAgICAgIHByb2dyYW06IHJlcG9ydFsyXSxcclxuICAgICAgICAgICAgcHJvZ3JhbUNhdGVnb3J5OiByZXBvcnRbM10sXHJcbiAgICAgICAgICAgIGFzc2lnbm9yOiByZXBvcnRbNF0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlOiByZXBvcnRbNV0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlVHlwZTogcmVwb3J0WzZdLFxyXG4gICAgICAgICAgICBrZXlSZXNwb25zaWJpbGl0eTogcmVwb3J0WzddLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNhdGVnb3J5OiBudWxsLFxyXG4gICAgICAgICAgICBmcmVxdWVuY3k6IHJlcG9ydFs4XSxcclxuICAgICAgICAgICAgcGFyZW50UmVzcG9uc2liaWxpdHk6IHJlcG9ydFs5XSxcclxuICAgICAgICAgICAgZHVlRGF0ZTogcmVwb3J0WzEwXSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlXaW5kb3c6IHJlcG9ydFsxMV0sXHJcbiAgICAgICAgICAgIGZhaWxlZEFmdGVyOiByZXBvcnRbMTJdLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNlbnRlcjogcmVwb3J0WzEzXSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXJUeXBlOiByZXBvcnRbMTRdLFxyXG4gICAgICAgICAgICByZXBvcnRDbGFzczogcmVwb3J0WzE1XSxcclxuICAgICAgICAgICAgb2JqZWN0aXZlOiByZXBvcnRbMTZdLFxyXG4gICAgICAgICAgICBub3RlczogcmVwb3J0WzE3XSxcclxuICAgICAgICAgICAgaXNGb3JtYXQ6IHJlcG9ydFsxOF0sXHJcbiAgICAgICAgICAgIGZvcm1hdEZvclJlc3BvbnNpYmlsaXR5OiByZXBvcnRbMTldLFxyXG4gICAgICAgICAgICBkb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQ6IHJlcG9ydFsyMF0sXHJcbiAgICAgICAgICAgIC8vIGV2aWRlbmNlTm90ZXM6IHJlcG9ydFsxOV0sXHJcbiAgICAgICAgICAgIC8vIGFzc2Vzc21lbnRzOiByZXBvcnRbMjBdLFxyXG4gICAgICAgICAgICByZXZpZXdlcjogcmVwb3J0WzIxXSxcclxuICAgICAgICAgICAgcmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbjogcmVwb3J0WzIyXSxcclxuICAgICAgICAgICAgcmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXI6IHJlcG9ydFsyM10sXHJcbiAgICAgICAgICAgIG92ZXJzZWVyOiByZXBvcnRbMjRdLFxyXG4gICAgICAgICAgICBub3RpZnlPbkZhaWx1cmU6IHJlcG9ydFsyNV0sXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkRGF0YSddID0gdGhpcy5pc1ZhbGlkRGF0YShvYmopO1xyXG4gICAgICAgICAgb2JqWyd1c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbSddID0gdGhpcy52YWxpZGF0ZURhdGFXaXRoUHJvZ3JhbShvYmopO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddID0gdGhpcy5yZXR1cm5JZHMob2JqPy5hc3NpZ25lZSwgJ2VudHJ1c3RlZF90bycpXHJcbiAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICA6IGZhbHNlO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkJ10gPVxyXG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gJiZcclxuICAgICAgICAgICAgIU9iamVjdC52YWx1ZXMob2JqWyd1c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbSddKS5pbmNsdWRlcyhmYWxzZSkgJiZcclxuICAgICAgICAgICAgb2JqPy5wYXJlbnRSZXNwb25zaWJpbGl0eT8ubGVuZ3RoICYmXHJcbiAgICAgICAgICAgIG9ialsnaXNWYWxpZFVzZXInXSAmJlxyXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWRSaXNrQ2xhc3Mob2JqPy5yZXBvcnRDbGFzcykgXHJcbiAgICAgICAgICByZXR1cm4gdGhpcy53aXRoRHJvcGRvd25WYWxpZGF0aW9uKFxyXG4gICAgICAgICAgICBvYmosXHJcbiAgICAgICAgICAgIHRhYlR5cGUsXHJcbiAgICAgICAgICAgIGlzUHJvZ3JhbSxcclxuICAgICAgICAgICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBvYmogPSB7XHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5TmFtZTogcmVwb3J0WzBdLFxyXG4gICAgICAgICAgICBhc3NpZ25vcjogcmVwb3J0WzFdLFxyXG4gICAgICAgICAgICBhc3NpZ25lZTogcmVwb3J0WzJdLFxyXG4gICAgICAgICAgICBhc3NpZ25lZVR5cGU6IHJlcG9ydFszXSxcclxuICAgICAgICAgICAga2V5UmVzcG9uc2liaWxpdHk6IHJlcG9ydFs0XSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDYXRlZ29yeTogbnVsbCxcclxuICAgICAgICAgICAgZnJlcXVlbmN5OiByZXBvcnRbNV0sXHJcbiAgICAgICAgICAgIHBhcmVudFJlc3BvbnNpYmlsaXR5OiByZXBvcnRbNl0sXHJcbiAgICAgICAgICAgIGR1ZURhdGU6IHJlcG9ydFs3XSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlXaW5kb3c6IHJlcG9ydFs4XSxcclxuICAgICAgICAgICAgZmFpbGVkQWZ0ZXI6IHJlcG9ydFs5XSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXI6IHJlcG9ydFsxMF0sXHJcbiAgICAgICAgICAgIHJlcG9ydENsYXNzOiByZXBvcnRbMTFdLFxyXG4gICAgICAgICAgICBvYmplY3RpdmU6IHJlcG9ydFsxMl0sXHJcbiAgICAgICAgICAgIG5vdGVzOiByZXBvcnRbMTNdLFxyXG4gICAgICAgICAgICBpc0Zvcm1hdDogcmVwb3J0WzE0XSxcclxuICAgICAgICAgICAgZm9ybWF0Rm9yUmVzcG9uc2liaWxpdHk6IHJlcG9ydFsxNV0sXHJcbiAgICAgICAgICAgIGRvY3VtZW50RXZpZGVuY2VSZXF1aXJlZDogcmVwb3J0WzE2XSxcclxuICAgICAgICAgICAgLy8gZXZpZGVuY2VOb3RlczogcmVwb3J0WzE2XSxcclxuICAgICAgICAgICAgLy8gYXNzZXNzbWVudHM6IHJlcG9ydFsxN10sXHJcbiAgICAgICAgICAgIHJldmlld2VyOiByZXBvcnRbMTddLFxyXG4gICAgICAgICAgICByZXZpZXdUb0JlQ29tcGxldGVkV2l0aGluOiByZXBvcnRbMThdLFxyXG4gICAgICAgICAgICByZXZpZXdXaWxsQmVGYWlsZWRBZnRlcjogcmVwb3J0WzE5XSxcclxuICAgICAgICAgICAgb3ZlcnNlZXI6IHJlcG9ydFsyMF0sXHJcbiAgICAgICAgICAgIG5vdGlmeU9uRmFpbHVyZTogcmVwb3J0WzIxXSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gPSB0aGlzLmlzVmFsaWREYXRhKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ3VzZXJWYWxpZGF0ZVdpdGhQcm9ncmFtJ10gPSB0aGlzLnZhbGlkYXRlRGF0YVdpdGhQcm9ncmFtKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ10gPSB0aGlzLnJldHVybklkcyhvYmo/LmFzc2lnbmVlLCAnZW50cnVzdGVkX3RvJylcclxuICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWQnXSA9XHJcbiAgICAgICAgICAgIG9ialsnaXNWYWxpZERhdGEnXSAmJlxyXG4gICAgICAgICAgICBvYmo/LnBhcmVudFJlc3BvbnNpYmlsaXR5Py5sZW5ndGggJiZcclxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddICYmXHJcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZFJpc2tDbGFzcyhvYmo/LnJlcG9ydENsYXNzKSBcclxuICAgICAgICAgIHJldHVybiB0aGlzLndpdGhEcm9wZG93blZhbGlkYXRpb24oXHJcbiAgICAgICAgICAgIG9iaixcclxuICAgICAgICAgICAgdGFiVHlwZSxcclxuICAgICAgICAgICAgaXNQcm9ncmFtLFxyXG4gICAgICAgICAgICBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNWYWxpZFJpc2tDbGFzcyhyaXNrQ2xhc3M6IGFueSkge1xyXG4gICAgaWYoIXJpc2tDbGFzcykgcmV0dXJuIHRydWU7XHJcbiAgICByZXR1cm4gUklTS19DTEFTU19MSVNULmluY2x1ZGVzKHJpc2tDbGFzcz8udG9Mb3dlckNhc2UoKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGRzIGRyb3Bkb3duLWxpc3QgY2hlY2tzIG9uIHRvcCBvZiBleGlzdGluZyByb3cgdmFsaWRhdGlvbi5cclxuICAgKiBFbXB0eSBvcHRpb25hbCBjZWxscyBhcmUgdmFsaWQuIEZyZXF1ZW5jeSAvIGR1ZSBkYXRlIC8gZHVlIHRpbWUgYXJlIHNraXBwZWQgZm9yIG9uZ29pbmcuXHJcbiAgICogV2FybmluZyBhbmQgaW5mbyBpc3N1ZXMgYXJlIHNob3duIGluIHByZXZpZXcgYnV0IGRvIG5vdCBtYWtlIHRoZSByb3cgaW52YWxpZC5cclxuICAgKi9cclxuICB3aXRoRHJvcGRvd25WYWxpZGF0aW9uKFxyXG4gICAgb2JqOiBhbnksXHJcbiAgICB0YWJUeXBlOiBzdHJpbmcsXHJcbiAgICBpc1Byb2dyYW06IGJvb2xlYW4sXHJcbiAgICBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMgPSBmYWxzZVxyXG4gICk6IGFueSB7XHJcbiAgICBpZiAoIW9iaikge1xyXG4gICAgICByZXR1cm4gb2JqO1xyXG4gICAgfVxyXG4gICAgb2JqWydmaWVsZFZhbGlkYXRpb24nXSA9IHt9O1xyXG4gICAgdGhpcy5hcHBseURyb3Bkb3duVmFsaWRhdGlvbihcclxuICAgICAgb2JqLFxyXG4gICAgICB0YWJUeXBlLFxyXG4gICAgICBpc1Byb2dyYW0sXHJcbiAgICAgIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1uc1xyXG4gICAgKTtcclxuICAgIHRoaXMuYXBwbHlEYXlzQ291bnRWYWxpZGF0aW9uKG9iaiwgdGFiVHlwZSk7XHJcbiAgICB0aGlzLmFwcGx5U2hlZXRGaWVsZE1lc3NhZ2VzKFxyXG4gICAgICBvYmosXHJcbiAgICAgIHRhYlR5cGUsXHJcbiAgICAgIGlzUHJvZ3JhbSxcclxuICAgICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zXHJcbiAgICApO1xyXG4gICAgb2JqWydpc1ZhbGlkJ10gPSAhdGhpcy5oYXNCbG9ja2luZ0ZpZWxkSXNzdWVzKG9iaik7XHJcbiAgICByZXR1cm4gb2JqO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlEcm9wZG93blZhbGlkYXRpb24oXHJcbiAgICBvYmo6IGFueSxcclxuICAgIHRhYlR5cGU6IHN0cmluZyxcclxuICAgIGlzUHJvZ3JhbTogYm9vbGVhbixcclxuICAgIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucyA9IGZhbHNlXHJcbiAgKTogdm9pZCB7XHJcbiAgICBjb25zdCByZXZpZXdlck5hbWVzID0gdGhpcy5nZXRUZW1wbGF0ZUxpc3ROYW1lcyhcclxuICAgICAgdGhpcy50ZW1wbGF0ZUluZm8/LnJldmlld2VyTGlzdCxcclxuICAgICAgJ25hbWVBbmRFbWFpbCdcclxuICAgICk7XHJcbiAgICBjb25zdCBhc3NpZ25lZU5hbWVzID0gdGhpcy5nZXRUZW1wbGF0ZUxpc3ROYW1lcyhcclxuICAgICAgdGhpcy50ZW1wbGF0ZUluZm8/LmFzc2lnbmVlc0xpc3QsXHJcbiAgICAgICduYW1lQW5kRW1haWwnXHJcbiAgICApO1xyXG4gICAgY29uc3QgcHJvZ3JhbUNhdGVnb3J5TmFtZXMgPSB0aGlzLmdldFByb2dyYW1DYXRlZ29yeU5hbWVzKCk7XHJcbiAgICBjb25zdCBkcm9wZG93blZhbGlkYXRpb246IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9ID0ge1xyXG4gICAgICBwcm9ncmFtVHlwZTogdHJ1ZSxcclxuICAgICAgcHJvZ3JhbTogdHJ1ZSxcclxuICAgICAgcHJvZ3JhbUNhdGVnb3J5OiB0cnVlLFxyXG4gICAgICBhc3NpZ25vcjogdHJ1ZSxcclxuICAgICAgYXNzaWduZWU6IHRydWUsXHJcbiAgICAgIGFzc2lnbmVlVHlwZTogdHJ1ZSxcclxuICAgICAga2V5UmVzcG9uc2liaWxpdHk6IHRydWUsXHJcbiAgICAgIGZyZXF1ZW5jeTogdHJ1ZSxcclxuICAgICAgZGF5OiB0cnVlLFxyXG4gICAgICBtb250aDogdHJ1ZSxcclxuICAgICAgZHVlVGltZTogdHJ1ZSxcclxuICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXI6IHRydWUsXHJcbiAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyVHlwZTogdHJ1ZSxcclxuICAgICAgcmVwb3J0Q2xhc3M6IHRydWUsXHJcbiAgICAgIGlzRm9ybWF0OiB0cnVlLFxyXG4gICAgICBkb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQ6IHRydWUsXHJcbiAgICAgIHJldmlld2VyOiB0cnVlLFxyXG4gICAgICByZXZpZXdlclR5cGU6IHRydWUsXHJcbiAgICAgIG92ZXJzZWVyOiB0cnVlLFxyXG4gICAgICBub3RpZnlPbkZhaWx1cmU6IHRydWUsXHJcbiAgICAgIGNvbGxhYm9yYXRvcjogdHJ1ZSxcclxuICAgIH07XHJcblxyXG4gICAgaWYgKGlzUHJvZ3JhbSkge1xyXG4gICAgICBjb25zdCBoYXNQcm9ncmFtID0gdGhpcy5oYXNWYWx1ZShvYmo/LnByb2dyYW0pO1xyXG4gICAgICBjb25zdCBoYXNQcm9ncmFtVHlwZSA9IHRoaXMuaGFzVmFsdWUob2JqPy5wcm9ncmFtVHlwZSk7XHJcbiAgICAgIGlmIChoYXNQcm9ncmFtVHlwZSAmJiAhaGFzUHJvZ3JhbSkge1xyXG4gICAgICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5wcm9ncmFtVHlwZSA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZHJvcGRvd25WYWxpZGF0aW9uLnByb2dyYW1UeXBlID0gdGhpcy5pc0luU3RhdGljRHJvcGRvd24oXHJcbiAgICAgICAgICBvYmo/LnByb2dyYW1UeXBlLFxyXG4gICAgICAgICAgUFJPR1JBTV9UWVBFX0RST1BET1dOX0xJU1RcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5wcm9ncmFtID0gdGhpcy5pc0luRHJvcGRvd25MaXN0KFxyXG4gICAgICAgIG9iaj8ucHJvZ3JhbSxcclxuICAgICAgICB0aGlzLmdldFRlbXBsYXRlTGlzdE5hbWVzKHRoaXMudGVtcGxhdGVJbmZvPy5jYXRlZ29yeUxpc3QsICdwcm9ncmFtTmFtZScpXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICh0aGlzLmhhc1ZhbHVlKG9iaj8ucHJvZ3JhbUNhdGVnb3J5KSAmJiAhaGFzUHJvZ3JhbSkge1xyXG4gICAgICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5wcm9ncmFtQ2F0ZWdvcnkgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmhhc1ZhbHVlKG9iaj8ucHJvZ3JhbUNhdGVnb3J5KSAmJiBoYXNQcm9ncmFtKSB7XHJcbiAgICAgICAgY29uc3QgY2F0ZWdvcnlOYW1lcyA9IHRoaXMuZ2V0UHJvZ3JhbUNhdGVnb3J5TmFtZXNGb3JQcm9ncmFtKFxyXG4gICAgICAgICAgb2JqPy5wcm9ncmFtXHJcbiAgICAgICAgKTtcclxuICAgICAgICBkcm9wZG93blZhbGlkYXRpb24ucHJvZ3JhbUNhdGVnb3J5ID0gdGhpcy5pc0luRHJvcGRvd25MaXN0KFxyXG4gICAgICAgICAgb2JqPy5wcm9ncmFtQ2F0ZWdvcnksXHJcbiAgICAgICAgICBjYXRlZ29yeU5hbWVzLmxlbmd0aCA/IGNhdGVnb3J5TmFtZXMgOiBwcm9ncmFtQ2F0ZWdvcnlOYW1lc1xyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZHJvcGRvd25WYWxpZGF0aW9uLnByb2dyYW1DYXRlZ29yeSA9IHByb2dyYW1DYXRlZ29yeU5hbWVzLmxlbmd0aFxyXG4gICAgICAgICAgPyB0aGlzLmlzSW5Ecm9wZG93bkxpc3Qob2JqPy5wcm9ncmFtQ2F0ZWdvcnksIHByb2dyYW1DYXRlZ29yeU5hbWVzKVxyXG4gICAgICAgICAgOiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZHJvcGRvd25WYWxpZGF0aW9uLmFzc2lnbm9yID0gdGhpcy5pc0luVXNlckRyb3Bkb3duKG9iaj8uYXNzaWdub3IpO1xyXG4gICAgZHJvcGRvd25WYWxpZGF0aW9uLmFzc2lnbmVlID0gdGhpcy5pc0luRHJvcGRvd25MaXN0KFxyXG4gICAgICBvYmo/LmFzc2lnbmVlLFxyXG4gICAgICBhc3NpZ25lZU5hbWVzXHJcbiAgICApO1xyXG4gICAgZHJvcGRvd25WYWxpZGF0aW9uLmFzc2lnbmVlVHlwZSA9IHRoaXMuaXNJblN0YXRpY0Ryb3Bkb3duKFxyXG4gICAgICBvYmo/LmFzc2lnbmVlVHlwZSxcclxuICAgICAgQVNTSUdORUVfVFlQRV9EUk9QRE9XTl9MSVNUXHJcbiAgICApO1xyXG4gICAgZHJvcGRvd25WYWxpZGF0aW9uLmtleVJlc3BvbnNpYmlsaXR5ID0gdGhpcy5pc0luU3RhdGljRHJvcGRvd24oXHJcbiAgICAgIG9iaj8ua2V5UmVzcG9uc2liaWxpdHksXHJcbiAgICAgIFlFU19OT19EUk9QRE9XTl9MSVNUXHJcbiAgICApO1xyXG5cclxuICAgIGlmICh0YWJUeXBlID09PSAnZnJlcXVlbmN5Jykge1xyXG4gICAgICBkcm9wZG93blZhbGlkYXRpb24uZnJlcXVlbmN5ID0gdGhpcy5pc0luU3RhdGljRHJvcGRvd24oXHJcbiAgICAgICAgb2JqPy5mcmVxdWVuY3ksXHJcbiAgICAgICAgRlJFUVVFTkNZX0RST1BET1dOX0xJU1RcclxuICAgICAgKTtcclxuICAgICAgZHJvcGRvd25WYWxpZGF0aW9uLmRheSA9IHRoaXMuaXNWYWxpZERyb3Bkb3duRGF5KG9iaj8uZGF5KTtcclxuICAgICAgZHJvcGRvd25WYWxpZGF0aW9uLm1vbnRoID0gdGhpcy5pc1ZhbGlkRHJvcGRvd25Nb250aChvYmo/Lm1vbnRoKTtcclxuICAgICAgaWYgKGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucykge1xyXG4gICAgICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5kdWVUaW1lID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5yZXNwb25zaWJpbGl0eUNlbnRlciA9IHRoaXMuaXNJbkRyb3Bkb3duTGlzdChcclxuICAgICAgb2JqPy5yZXNwb25zaWJpbGl0eUNlbnRlcixcclxuICAgICAgdGhpcy5nZXRUZW1wbGF0ZUxpc3ROYW1lcyh0aGlzLnRlbXBsYXRlSW5mbz8ucmNMaXN0LCAnbmFtZScpXHJcbiAgICApO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmhhc1ZhbHVlKG9iaj8ucmVzcG9uc2liaWxpdHlDZW50ZXJUeXBlKSAmJlxyXG4gICAgICAhdGhpcy5oYXNWYWx1ZShvYmo/LnJlc3BvbnNpYmlsaXR5Q2VudGVyKVxyXG4gICAgKSB7XHJcbiAgICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5yZXNwb25zaWJpbGl0eUNlbnRlclR5cGUgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5yZXNwb25zaWJpbGl0eUNlbnRlclR5cGUgPSB0aGlzLmlzSW5TdGF0aWNEcm9wZG93bihcclxuICAgICAgICBvYmo/LnJlc3BvbnNpYmlsaXR5Q2VudGVyVHlwZSxcclxuICAgICAgICBSQ19UWVBFX0RST1BET1dOX0xJU1RcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5yZXBvcnRDbGFzcyA9IHRoaXMuaXNWYWxpZFJpc2tDbGFzcyhvYmo/LnJlcG9ydENsYXNzKTtcclxuICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5pc0Zvcm1hdCA9IHRoaXMuaXNJblN0YXRpY0Ryb3Bkb3duKFxyXG4gICAgICBvYmo/LmlzRm9ybWF0LFxyXG4gICAgICBZRVNfTk9fRFJPUERPV05fTElTVFxyXG4gICAgKTtcclxuICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5kb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQgPSB0aGlzLmlzSW5TdGF0aWNEcm9wZG93bihcclxuICAgICAgb2JqPy5kb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQsXHJcbiAgICAgIFlFU19OT19EUk9QRE9XTl9MSVNUXHJcbiAgICApO1xyXG4gICAgZHJvcGRvd25WYWxpZGF0aW9uLnJldmlld2VyID0gdGhpcy5pc0luRHJvcGRvd25MaXN0KFxyXG4gICAgICBvYmo/LnJldmlld2VyLFxyXG4gICAgICByZXZpZXdlck5hbWVzXHJcbiAgICApO1xyXG4gICAgaWYgKHRoaXMuaGFzVmFsdWUob2JqPy5yZXZpZXdlclR5cGUpICYmICF0aGlzLmhhc1ZhbHVlKG9iaj8ucmV2aWV3ZXIpKSB7XHJcbiAgICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5yZXZpZXdlclR5cGUgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5yZXZpZXdlclR5cGUgPSB0aGlzLmlzSW5TdGF0aWNEcm9wZG93bihcclxuICAgICAgICBvYmo/LnJldmlld2VyVHlwZSxcclxuICAgICAgICBSRVZJRVdFUl9UWVBFX0RST1BET1dOX0xJU1RcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5vdmVyc2VlciA9IHRoaXMuaXNJbkRyb3Bkb3duTGlzdChcclxuICAgICAgb2JqPy5vdmVyc2VlcixcclxuICAgICAgcmV2aWV3ZXJOYW1lc1xyXG4gICAgKTtcclxuICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5ub3RpZnlPbkZhaWx1cmUgPSB0aGlzLmlzSW5Ecm9wZG93bkxpc3QoXHJcbiAgICAgIG9iaj8ubm90aWZ5T25GYWlsdXJlLFxyXG4gICAgICByZXZpZXdlck5hbWVzXHJcbiAgICApO1xyXG4gICAgZHJvcGRvd25WYWxpZGF0aW9uLmNvbGxhYm9yYXRvciA9IHRoaXMuaXNJbkRyb3Bkb3duTGlzdChvYmo/LmNvbGxhYm9yYXRvciwgW1xyXG4gICAgICAuLi5hc3NpZ25lZU5hbWVzLFxyXG4gICAgICAuLi5yZXZpZXdlck5hbWVzLFxyXG4gICAgXSk7XHJcblxyXG4gICAgb2JqWydkcm9wZG93blZhbGlkYXRpb24nXSA9IGRyb3Bkb3duVmFsaWRhdGlvbjtcclxuICAgIG9ialsnaXNWYWxpZERyb3Bkb3duJ10gPSAhT2JqZWN0LmVudHJpZXMoZHJvcGRvd25WYWxpZGF0aW9uKS5zb21lKFxyXG4gICAgICAoW2ZpZWxkLCBpc1ZhbGlkXSkgPT5cclxuICAgICAgICBpc1ZhbGlkID09PSBmYWxzZSAmJiAhTk9OX0JMT0NLSU5HX0RST1BET1dOX0ZJRUxEUy5pbmNsdWRlcyhmaWVsZClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRUZW1wbGF0ZUxpc3ROYW1lcyhsaXN0OiBhbnlbXSA9IFtdLCBrZXk6IHN0cmluZyk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiAobGlzdCB8fCBbXSlcclxuICAgICAgLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtPy5ba2V5XSlcclxuICAgICAgLmZpbHRlcigobmFtZTogYW55KSA9PiB0aGlzLmhhc1ZhbHVlKG5hbWUpKVxyXG4gICAgICAubWFwKChuYW1lOiBhbnkpID0+IFN0cmluZyhuYW1lKS50cmltKCkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJvZ3JhbUNhdGVnb3J5TmFtZXMoKTogc3RyaW5nW10ge1xyXG4gICAgY29uc3QgbmFtZXM6IHN0cmluZ1tdID0gW107XHJcbiAgICAodGhpcy50ZW1wbGF0ZUluZm8/LmNhdGVnb3J5TGlzdCB8fCBbXSkuZm9yRWFjaCgocHJvZ3JhbTogYW55KSA9PiB7XHJcbiAgICAgIChwcm9ncmFtPy5jaGlsZENhdGVnb3J5IHx8IFtdKS5mb3JFYWNoKChjYXRlZ29yeTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzVmFsdWUoY2F0ZWdvcnk/Lm5hbWUpKSB7XHJcbiAgICAgICAgICBuYW1lcy5wdXNoKFN0cmluZyhjYXRlZ29yeS5uYW1lKS50cmltKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBuYW1lcztcclxuICB9XHJcblxyXG4gIGdldFByb2dyYW1DYXRlZ29yeU5hbWVzRm9yUHJvZ3JhbShwcm9ncmFtTmFtZTogYW55KTogc3RyaW5nW10ge1xyXG4gICAgY29uc3QgbmFtZXM6IHN0cmluZ1tdID0gW107XHJcbiAgICBjb25zdCBwcm9ncmFtID0gKHRoaXMudGVtcGxhdGVJbmZvPy5jYXRlZ29yeUxpc3QgfHwgW10pLmZpbmQoXHJcbiAgICAgIChpdGVtOiBhbnkpID0+XHJcbiAgICAgICAgdGhpcy5ub3JtYWxpemVEcm9wZG93blZhbHVlKGl0ZW0/LnByb2dyYW1OYW1lKSA9PT1cclxuICAgICAgICB0aGlzLm5vcm1hbGl6ZURyb3Bkb3duVmFsdWUocHJvZ3JhbU5hbWUpXHJcbiAgICApO1xyXG4gICAgKHByb2dyYW0/LmNoaWxkQ2F0ZWdvcnkgfHwgW10pLmZvckVhY2goKGNhdGVnb3J5OiBhbnkpID0+IHtcclxuICAgICAgaWYgKHRoaXMuaGFzVmFsdWUoY2F0ZWdvcnk/Lm5hbWUpKSB7XHJcbiAgICAgICAgbmFtZXMucHVzaChTdHJpbmcoY2F0ZWdvcnkubmFtZSkudHJpbSgpKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbmFtZXM7XHJcbiAgfVxyXG5cclxuICBzZXRGaWVsZElzc3VlKFxyXG4gICAgb2JqOiBhbnksXHJcbiAgICBmaWVsZDogc3RyaW5nLFxyXG4gICAgc2V2ZXJpdHk6IHN0cmluZyxcclxuICAgIG1lc3NhZ2U6IHN0cmluZ1xyXG4gICk6IHZvaWQge1xyXG4gICAgaWYgKCFvYmogfHwgIWZpZWxkIHx8ICFtZXNzYWdlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIG9iai5maWVsZFZhbGlkYXRpb24gPSBvYmouZmllbGRWYWxpZGF0aW9uIHx8IHt9O1xyXG4gICAgY29uc3QgcmFuazogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHtcclxuICAgICAgW1ZBTElEQVRJT05fU0VWRVJJVFkuRVJST1JdOiAzLFxyXG4gICAgICBbVkFMSURBVElPTl9TRVZFUklUWS5XQVJOSU5HXTogMixcclxuICAgICAgW1ZBTElEQVRJT05fU0VWRVJJVFkuSU5GT106IDEsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgY3VycmVudCA9IG9iai5maWVsZFZhbGlkYXRpb25bZmllbGRdO1xyXG4gICAgaWYgKCFjdXJyZW50IHx8IChyYW5rW3NldmVyaXR5XSB8fCAwKSA+PSAocmFua1tjdXJyZW50LnNldmVyaXR5XSB8fCAwKSkge1xyXG4gICAgICBvYmouZmllbGRWYWxpZGF0aW9uW2ZpZWxkXSA9IHsgc2V2ZXJpdHksIG1lc3NhZ2UgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhc0Jsb2NraW5nRmllbGRJc3N1ZXMob2JqOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKG9iaj8uZmllbGRWYWxpZGF0aW9uIHx8IHt9KS5zb21lKFxyXG4gICAgICAoaXNzdWU6IGFueSkgPT4gaXNzdWU/LnNldmVyaXR5ID09PSBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2FtZVBlcnNvbihsZWZ0OiBhbnksIHJpZ2h0OiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5oYXNWYWx1ZShsZWZ0KSB8fCAhdGhpcy5oYXNWYWx1ZShyaWdodCkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubm9ybWFsaXplRHJvcGRvd25WYWx1ZShsZWZ0KSA9PT0gdGhpcy5ub3JtYWxpemVEcm9wZG93blZhbHVlKHJpZ2h0KSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGxlZnRFbWFpbCA9IHRoaXMuZXh0cmFjdERyb3Bkb3duRW1haWwobGVmdCk7XHJcbiAgICBjb25zdCByaWdodEVtYWlsID0gdGhpcy5leHRyYWN0RHJvcGRvd25FbWFpbChyaWdodCk7XHJcbiAgICBpZiAobGVmdEVtYWlsICYmIHJpZ2h0RW1haWwgJiYgbGVmdEVtYWlsID09PSByaWdodEVtYWlsKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbGVmdE5hbWUgPSB0aGlzLmV4dHJhY3REcm9wZG93bk5hbWUobGVmdCk7XHJcbiAgICBjb25zdCByaWdodE5hbWUgPSB0aGlzLmV4dHJhY3REcm9wZG93bk5hbWUocmlnaHQpO1xyXG4gICAgcmV0dXJuICEhbGVmdE5hbWUgJiYgISFyaWdodE5hbWUgJiYgbGVmdE5hbWUgPT09IHJpZ2h0TmFtZTtcclxuICB9XHJcblxyXG4gIGlzVmFsaWRGb3JtYXRVcmwodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChTdHJpbmcodmFsdWUpLnRyaW0oKSk7XHJcbiAgICAgIHJldHVybiB1cmwucHJvdG9jb2wgPT09ICdodHRwOicgfHwgdXJsLnByb3RvY29sID09PSAnaHR0cHM6JztcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhcHBseVNoZWV0RmllbGRNZXNzYWdlcyhcclxuICAgIG9iajogYW55LFxyXG4gICAgdGFiVHlwZTogc3RyaW5nLFxyXG4gICAgaXNQcm9ncmFtOiBib29sZWFuLFxyXG4gICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zID0gZmFsc2VcclxuICApOiB2b2lkIHtcclxuICAgIGNvbnN0IGRyb3Bkb3duID0gb2JqPy5kcm9wZG93blZhbGlkYXRpb24gfHwge307XHJcbiAgICBjb25zdCBuYW1lID0gdGhpcy5jaGVja1ZhbGlkUmVzcG9uc2liaWxpdHlOYW1lKG9iaj8ucmVzcG9uc2liaWxpdHlOYW1lKTtcclxuICAgIGlmICghbmFtZSkge1xyXG4gICAgICBjb25zdCByYXcgPSBvYmo/LnJlc3BvbnNpYmlsaXR5TmFtZTtcclxuICAgICAgY29uc3Qgd2hpdGVzcGFjZU9ubHkgPVxyXG4gICAgICAgIHJhdyAhPSBudWxsICYmIFN0cmluZyhyYXcpLmxlbmd0aCA+IDAgJiYgIVN0cmluZyhyYXcpLnRyaW0oKTtcclxuICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgIG9iaixcclxuICAgICAgICAncmVzcG9uc2liaWxpdHlOYW1lJyxcclxuICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SLFxyXG4gICAgICAgIHdoaXRlc3BhY2VPbmx5XHJcbiAgICAgICAgICA/IFZBTElEQVRJT05fTUVTU0FHRVMuUkVTUE9OU0lCSUxJVFlfTkFNRV9XSElURVNQQUNFXHJcbiAgICAgICAgICA6IFZBTElEQVRJT05fTUVTU0FHRVMuUkVTUE9OU0lCSUxJVFlfTkFNRV9SRVFVSVJFRFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc1Byb2dyYW0pIHtcclxuICAgICAgY29uc3QgaGFzUHJvZ3JhbSA9IHRoaXMuaGFzVmFsdWUob2JqPy5wcm9ncmFtKTtcclxuICAgICAgY29uc3QgaGFzUHJvZ3JhbVR5cGUgPSB0aGlzLmhhc1ZhbHVlKG9iaj8ucHJvZ3JhbVR5cGUpO1xyXG4gICAgICBjb25zdCBoYXNQcm9ncmFtQ2F0ZWdvcnkgPSB0aGlzLmhhc1ZhbHVlKG9iaj8ucHJvZ3JhbUNhdGVnb3J5KTtcclxuICAgICAgaWYgKGhhc1Byb2dyYW1UeXBlICYmICFoYXNQcm9ncmFtKSB7XHJcbiAgICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgICAgb2JqLFxyXG4gICAgICAgICAgJ3Byb2dyYW1UeXBlJyxcclxuICAgICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuV0FSTklORyxcclxuICAgICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuUFJPR1JBTV9UWVBFX1dJVEhPVVRfUFJPR1JBTVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZHJvcGRvd24ucHJvZ3JhbVR5cGUgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgICAgb2JqLFxyXG4gICAgICAgICAgJ3Byb2dyYW1UeXBlJyxcclxuICAgICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkRST1BET1dOXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZHJvcGRvd24ucHJvZ3JhbSA9PT0gZmFsc2UpIHtcclxuICAgICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgICBvYmosXHJcbiAgICAgICAgICAncHJvZ3JhbScsXHJcbiAgICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SLFxyXG4gICAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5EUk9QRE9XTlxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGhhc1Byb2dyYW1DYXRlZ29yeSAmJiAhaGFzUHJvZ3JhbSkge1xyXG4gICAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICAgIG9iaixcclxuICAgICAgICAgICdwcm9ncmFtQ2F0ZWdvcnknLFxyXG4gICAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuUFJPR1JBTV9DQVRFR09SWV9XSVRIT1VUX1BST0dSQU1cclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2UgaWYgKGRyb3Bkb3duLnByb2dyYW1DYXRlZ29yeSA9PT0gZmFsc2UpIHtcclxuICAgICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgICBvYmosXHJcbiAgICAgICAgICAncHJvZ3JhbUNhdGVnb3J5JyxcclxuICAgICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLlBST0dSQU1fQ0FURUdPUllfTUlTTUFUQ0hcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaGFzVmFsdWUob2JqPy5hc3NpZ25vcikgJiYgZHJvcGRvd24uYXNzaWdub3IgPT09IGZhbHNlKSB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICBvYmosXHJcbiAgICAgICAgJ2Fzc2lnbm9yJyxcclxuICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLldBUk5JTkcsXHJcbiAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5FTlRSVVNURURfQllfSU5WQUxJRFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5oYXNWYWx1ZShvYmo/LmFzc2lnbmVlKSkge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdhc3NpZ25lZScsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkFTU0lHTkVFX1JFUVVJUkVEXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKGRyb3Bkb3duLmFzc2lnbmVlID09PSBmYWxzZSB8fCAhb2JqPy5pc1ZhbGlkVXNlcikge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdhc3NpZ25lZScsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkFTU0lHTkVFX0lOVkFMSURcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSBpZiAob2JqPy51c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbT8uaXNWYWxpZEFzc2lnbmVlID09PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdhc3NpZ25lZScsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLlVTRVJfTk9UX0lOX1BST0dSQU1cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZHJvcGRvd24uYXNzaWduZWVUeXBlID09PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdhc3NpZ25lZVR5cGUnLFxyXG4gICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuV0FSTklORyxcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkFTU0lHTkVFX1RZUEVfSU5WQUxJRFxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5pc0dyb3VwU2VsZWN0ZWQob2JqPy5hc3NpZ25lZSkgJiZcclxuICAgICAgIXRoaXMuaGFzVmFsdWUob2JqPy5hc3NpZ25lZVR5cGUpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgIG9iaixcclxuICAgICAgICAnYXNzaWduZWVUeXBlJyxcclxuICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLklORk8sXHJcbiAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5HUk9VUF9BTExfQU5ZX0JMQU5LXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRyb3Bkb3duLmtleVJlc3BvbnNpYmlsaXR5ID09PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdrZXlSZXNwb25zaWJpbGl0eScsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5XQVJOSU5HLFxyXG4gICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuS0VZX1JFU1BPTlNJQklMSVRZX0lOVkFMSURcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGFiVHlwZSA9PT0gJ2ZyZXF1ZW5jeScpIHtcclxuICAgICAgaWYgKCF0aGlzLmhhc1ZhbHVlKG9iaj8uZnJlcXVlbmN5KSkge1xyXG4gICAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICAgIG9iaixcclxuICAgICAgICAgICdmcmVxdWVuY3knLFxyXG4gICAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuRlJFUVVFTkNZX1JFUVVJUkVEXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIGlmIChkcm9wZG93bi5mcmVxdWVuY3kgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgICAgb2JqLFxyXG4gICAgICAgICAgJ2ZyZXF1ZW5jeScsXHJcbiAgICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SLFxyXG4gICAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5EUk9QRE9XTlxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuYXBwbHlEdWVEYXRlRGF5TW9udGhNZXNzYWdlcyhvYmopO1xyXG5cclxuICAgICAgaWYgKGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucykge1xyXG4gICAgICAgIGlmICghdGhpcy5oYXNWYWx1ZShvYmo/LmR1ZVRpbWUpKSB7XHJcbiAgICAgICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgICAgIG9iaixcclxuICAgICAgICAgICAgJ2R1ZVRpbWUnLFxyXG4gICAgICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLklORk8sXHJcbiAgICAgICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuRFVFX1RJTUVfQkxBTktcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5pc1ZhbGlkRHVlVGltZShvYmo/LmR1ZVRpbWUsIHRydWUpKSB7XHJcbiAgICAgICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgICAgIG9iaixcclxuICAgICAgICAgICAgJ2R1ZVRpbWUnLFxyXG4gICAgICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLldBUk5JTkcsXHJcbiAgICAgICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuRFJPUERPV05cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAob2JqPy5yZXNwb25zaWJpbGl0eVdpbmRvd0Vycm9yKSB7XHJcbiAgICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgICAgb2JqLFxyXG4gICAgICAgICAgJ3Jlc3BvbnNpYmlsaXR5V2luZG93JyxcclxuICAgICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkRST1BET1dOXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAob2JqPy5mYWlsZWRBZnRlckVycm9yKSB7XHJcbiAgICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgICAgb2JqLFxyXG4gICAgICAgICAgJ2ZhaWxlZEFmdGVyJyxcclxuICAgICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkRST1BET1dOXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAob2JqPy5lbmRzQWZ0ZXJPY2N1cnJlbmNlc0Vycm9yKSB7XHJcbiAgICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgICAgb2JqLFxyXG4gICAgICAgICAgJ2VuZHNBZnRlck9jY3VycmVuY2VzJyxcclxuICAgICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkRST1BET1dOXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAob2JqPy5lbmRzQnlEYXRlRGF5RXJyb3IpIHtcclxuICAgICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgICBvYmosXHJcbiAgICAgICAgICAnZW5kc0J5RGF0ZURheScsXHJcbiAgICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SLFxyXG4gICAgICAgICAgb2JqLmVuZHNCeURhdGVEYXlFcnJvclxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG9iaj8uZW5kc0J5RGF0ZU1vbnRoRXJyb3IpIHtcclxuICAgICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgICBvYmosXHJcbiAgICAgICAgICAnZW5kc0J5RGF0ZU1vbnRoJyxcclxuICAgICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgICBvYmouZW5kc0J5RGF0ZU1vbnRoRXJyb3JcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGlzT25lVGltZSA9XHJcbiAgICAgICAgdGhpcy5ub3JtYWxpemVEcm9wZG93blZhbHVlKG9iaj8uZnJlcXVlbmN5KSA9PT0gJ29uZSB0aW1lJztcclxuICAgICAgY29uc3QgaGFzTGlmZWN5Y2xlRW5kID1cclxuICAgICAgICB0aGlzLmhhc1ZhbHVlKG9iaj8uZW5kc0FmdGVyT2NjdXJyZW5jZXMpIHx8XHJcbiAgICAgICAgdGhpcy5oYXNWYWx1ZShvYmo/LmVuZHNCeURhdGVEYXkpIHx8XHJcbiAgICAgICAgdGhpcy5oYXNWYWx1ZShvYmo/LmVuZHNCeURhdGVNb250aCk7XHJcbiAgICAgIGlmIChpc09uZVRpbWUgJiYgaGFzTGlmZWN5Y2xlRW5kKSB7XHJcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IFZBTElEQVRJT05fTUVTU0FHRVMuT05FX1RJTUVfTElGRUNZQ0xFO1xyXG4gICAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICAgIG9iaixcclxuICAgICAgICAgICdlbmRzQWZ0ZXJPY2N1cnJlbmNlcycsXHJcbiAgICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SLFxyXG4gICAgICAgICAgbWVzc2FnZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgICAgb2JqLFxyXG4gICAgICAgICAgJ2VuZHNCeURhdGVEYXknLFxyXG4gICAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICAgIG1lc3NhZ2VcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICAgIG9iaixcclxuICAgICAgICAgICdlbmRzQnlEYXRlTW9udGgnLFxyXG4gICAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICAgIG1lc3NhZ2VcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucyAmJlxyXG4gICAgICAgIE51bWJlcihvYmo/LmVuZHNBZnRlck9jY3VycmVuY2VzKSA9PT0gMSAmJlxyXG4gICAgICAgICFpc09uZVRpbWVcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgICAgb2JqLFxyXG4gICAgICAgICAgJ2VuZHNBZnRlck9jY3VycmVuY2VzJyxcclxuICAgICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuV0FSTklORyxcclxuICAgICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuRU5EU19BRlRFUl9PTkVfT0NDVVJSRU5DRVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoZHJvcGRvd24ucmVzcG9uc2liaWxpdHlDZW50ZXIgPT09IGZhbHNlKSB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICBvYmosXHJcbiAgICAgICAgJ3Jlc3BvbnNpYmlsaXR5Q2VudGVyJyxcclxuICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SLFxyXG4gICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuRFJPUERPV05cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5oYXNWYWx1ZShvYmo/LnJlc3BvbnNpYmlsaXR5Q2VudGVyVHlwZSkgJiZcclxuICAgICAgIXRoaXMuaGFzVmFsdWUob2JqPy5yZXNwb25zaWJpbGl0eUNlbnRlcilcclxuICAgICkge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdyZXNwb25zaWJpbGl0eUNlbnRlclR5cGUnLFxyXG4gICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5SQ19UWVBFX1dJVEhPVVRfTkFNRVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChkcm9wZG93bi5yZXNwb25zaWJpbGl0eUNlbnRlclR5cGUgPT09IGZhbHNlKSB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICBvYmosXHJcbiAgICAgICAgJ3Jlc3BvbnNpYmlsaXR5Q2VudGVyVHlwZScsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkRST1BET1dOXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRyb3Bkb3duLnJlcG9ydENsYXNzID09PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdyZXBvcnRDbGFzcycsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkRST1BET1dOXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRyb3Bkb3duLmlzRm9ybWF0ID09PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdpc0Zvcm1hdCcsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkRST1BET1dOXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5oYXNWYWx1ZShvYmo/LmZvcm1hdEZvclJlc3BvbnNpYmlsaXR5KSkge1xyXG4gICAgICBpZiAodGhpcy5ub3JtYWxpemVEcm9wZG93blZhbHVlKG9iaj8uaXNGb3JtYXQpID09PSAnbm8nKSB7XHJcbiAgICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgICAgb2JqLFxyXG4gICAgICAgICAgJ2Zvcm1hdEZvclJlc3BvbnNpYmlsaXR5JyxcclxuICAgICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkZPUk1BVF9MSU5LX1dJVEhPVVRfWUVTXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIGlmICghdGhpcy5pc1ZhbGlkRm9ybWF0VXJsKG9iaj8uZm9ybWF0Rm9yUmVzcG9uc2liaWxpdHkpKSB7XHJcbiAgICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgICAgb2JqLFxyXG4gICAgICAgICAgJ2Zvcm1hdEZvclJlc3BvbnNpYmlsaXR5JyxcclxuICAgICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkZPUk1BVF9JTlZBTElEX1VSTFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChkcm9wZG93bi5kb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQgPT09IGZhbHNlKSB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICBvYmosXHJcbiAgICAgICAgJ2RvY3VtZW50RXZpZGVuY2VSZXF1aXJlZCcsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkRST1BET1dOXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRyb3Bkb3duLnJldmlld2VyID09PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdyZXZpZXdlcicsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkRST1BET1dOXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICB0aGlzLmhhc1ZhbHVlKG9iaj8ucmV2aWV3ZXIpICYmXHJcbiAgICAgIG9iaj8udXNlclZhbGlkYXRlV2l0aFByb2dyYW0/LmlzVmFsaWRSZXZpZXdlciA9PT0gZmFsc2VcclxuICAgICkge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdyZXZpZXdlcicsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLlVTRVJfTk9UX0lOX1BST0dSQU1cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmhhc1ZhbHVlKG9iaj8ucmV2aWV3ZXJUeXBlKSAmJiAhdGhpcy5oYXNWYWx1ZShvYmo/LnJldmlld2VyKSkge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdyZXZpZXdlclR5cGUnLFxyXG4gICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5EUk9QRE9XTlxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChkcm9wZG93bi5yZXZpZXdlclR5cGUgPT09IGZhbHNlKSB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICBvYmosXHJcbiAgICAgICAgJ3Jldmlld2VyVHlwZScsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkRST1BET1dOXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAob2JqPy5yZXZpZXdUb0JlQ29tcGxldGVkV2l0aGluRXJyb3IpIHtcclxuICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgIG9iaixcclxuICAgICAgICAncmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbicsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkRST1BET1dOXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAob2JqPy5yZXZpZXdXaWxsQmVGYWlsZWRBZnRlckVycm9yKSB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICBvYmosXHJcbiAgICAgICAgJ3Jldmlld1dpbGxCZUZhaWxlZEFmdGVyJyxcclxuICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SLFxyXG4gICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuRFJPUERPV05cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgKHRoaXMuaGFzVmFsdWUob2JqPy5yZXZpZXdUb0JlQ29tcGxldGVkV2l0aGluKSB8fFxyXG4gICAgICAgIHRoaXMuaGFzVmFsdWUob2JqPy5yZXZpZXdXaWxsQmVGYWlsZWRBZnRlcikpICYmXHJcbiAgICAgICF0aGlzLmhhc1ZhbHVlKG9iaj8ucmV2aWV3ZXIpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgIG9iaixcclxuICAgICAgICAncmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbicsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLlJFVklFV19XSU5ET1dfV0lUSE9VVF9SRVZJRVdFUlxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdyZXZpZXdXaWxsQmVGYWlsZWRBZnRlcicsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLlJFVklFV19XSU5ET1dfV0lUSE9VVF9SRVZJRVdFUlxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkcm9wZG93bi5vdmVyc2VlciA9PT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgIG9iaixcclxuICAgICAgICAnb3ZlcnNlZXInLFxyXG4gICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5EUk9QRE9XTlxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5oYXNWYWx1ZShvYmo/Lm92ZXJzZWVyKSAmJlxyXG4gICAgICBvYmo/LnVzZXJWYWxpZGF0ZVdpdGhQcm9ncmFtPy5pc1ZhbGlkT3ZlcnNlZXIgPT09IGZhbHNlXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgIG9iaixcclxuICAgICAgICAnb3ZlcnNlZXInLFxyXG4gICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5VU0VSX05PVF9JTl9QUk9HUkFNXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2FtZVBlcnNvbihvYmo/Lm92ZXJzZWVyLCBvYmo/LmFzc2lnbmVlKSkge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdvdmVyc2VlcicsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5JTkZPLFxyXG4gICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuT1ZFUlNJR0hUX0RVUExJQ0FURV9BU1NJR05FRVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNhbWVQZXJzb24ob2JqPy5vdmVyc2Vlciwgb2JqPy5hc3NpZ25vcikpIHtcclxuICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgIG9iaixcclxuICAgICAgICAnb3ZlcnNlZXInLFxyXG4gICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuSU5GTyxcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLk9WRVJTSUdIVF9EVVBMSUNBVEVfQVNTSUdOT1JcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZHJvcGRvd24ubm90aWZ5T25GYWlsdXJlID09PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdub3RpZnlPbkZhaWx1cmUnLFxyXG4gICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5EUk9QRE9XTlxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5oYXNWYWx1ZShvYmo/Lm5vdGlmeU9uRmFpbHVyZSkgJiZcclxuICAgICAgb2JqPy51c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbT8uaXNWYWxpZE5vdGlmeU9uRmFpbHVyZSA9PT0gZmFsc2VcclxuICAgICkge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdub3RpZnlPbkZhaWx1cmUnLFxyXG4gICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5VU0VSX05PVF9JTl9QUk9HUkFNXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2FtZVBlcnNvbihvYmo/Lm5vdGlmeU9uRmFpbHVyZSwgb2JqPy5hc3NpZ25lZSkpIHtcclxuICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgIG9iaixcclxuICAgICAgICAnbm90aWZ5T25GYWlsdXJlJyxcclxuICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLklORk8sXHJcbiAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5PVkVSU0lHSFRfRFVQTElDQVRFX0FTU0lHTkVFXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2FtZVBlcnNvbihvYmo/Lm5vdGlmeU9uRmFpbHVyZSwgb2JqPy5hc3NpZ25vcikpIHtcclxuICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgIG9iaixcclxuICAgICAgICAnbm90aWZ5T25GYWlsdXJlJyxcclxuICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLklORk8sXHJcbiAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5PVkVSU0lHSFRfRFVQTElDQVRFX0FTU0lHTk9SXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRyb3Bkb3duLmNvbGxhYm9yYXRvciA9PT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgIG9iaixcclxuICAgICAgICAnY29sbGFib3JhdG9yJyxcclxuICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SLFxyXG4gICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuRFJPUERPV05cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pc0dyb3VwU2VsZWN0ZWQob2JqPy5jb2xsYWJvcmF0b3IpKSB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICBvYmosXHJcbiAgICAgICAgJ2NvbGxhYm9yYXRvcicsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkNPTExBQk9SQVRPUl9HUk9VUFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW50cnVzdGVkIEJ5IGluIHRoZSB4bHN4IGRyb3Bkb3duIGlzIHRoZSBwZW9wbGUgbGlzdCBpbiBgTmFtZSAoZW1haWwpYCBmb3JtXHJcbiAgICogKHNhbWUgc291cmNlIGFzIEVudHJ1c3RlZCBUbyAvIFJldmlld2VyKSwgbm90IHRoZSBhc3NpZ25vciBuYW1lLW9ubHkgY29sdW1uLlxyXG4gICAqL1xyXG4gIGlzSW5Vc2VyRHJvcGRvd24odmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmhhc1ZhbHVlKHZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB0aGlzLm5vcm1hbGl6ZURyb3Bkb3duVmFsdWUodmFsdWUpO1xyXG4gICAgY29uc3QgdmFsdWVFbWFpbCA9IHRoaXMuZXh0cmFjdERyb3Bkb3duRW1haWwodmFsdWUpO1xyXG4gICAgY29uc3QgdmFsdWVOYW1lID0gdGhpcy5leHRyYWN0RHJvcGRvd25OYW1lKHZhbHVlKTtcclxuICAgIGNvbnN0IGRyb3Bkb3duTmFtZXMgPSB0aGlzLnRlbXBsYXRlSW5mbz8ucGVvcGxlRHJvcGRvd25OYW1lcyB8fCBbXTtcclxuICAgIGlmIChcclxuICAgICAgZHJvcGRvd25OYW1lcy5zb21lKFxyXG4gICAgICAgIChuYW1lOiBzdHJpbmcpID0+IHRoaXMubm9ybWFsaXplRHJvcGRvd25WYWx1ZShuYW1lKSA9PT0gbm9ybWFsaXplZFxyXG4gICAgICApXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIHZhbHVlRW1haWwgJiZcclxuICAgICAgZHJvcGRvd25OYW1lcy5zb21lKChuYW1lOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBjb25zdCBuYW1lRW1haWwgPSB0aGlzLmV4dHJhY3REcm9wZG93bkVtYWlsKG5hbWUpO1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICBuYW1lRW1haWwgPT09IHZhbHVlRW1haWwgfHxcclxuICAgICAgICAgIHRoaXMubm9ybWFsaXplRHJvcGRvd25WYWx1ZShuYW1lKSA9PT0gdmFsdWVFbWFpbFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBjb25zdCB1c2VycyA9IFtcclxuICAgICAgLi4uKHRoaXMudGVtcGxhdGVJbmZvPy5hc3NpZ25vcnNMaXN0IHx8IFtdKSxcclxuICAgICAgLi4uKHRoaXMudGVtcGxhdGVJbmZvPy5hc3NpZ25lZXNMaXN0IHx8IFtdKSxcclxuICAgICAgLi4uKHRoaXMudGVtcGxhdGVJbmZvPy5yZXZpZXdlckxpc3QgfHwgW10pLFxyXG4gICAgXTtcclxuICAgIHJldHVybiB1c2Vycy5zb21lKCh1c2VyOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgY29uc3RydWN0ZWQgPVxyXG4gICAgICAgIHRoaXMuaGFzVmFsdWUodXNlcj8ubmFtZSkgJiYgdGhpcy5oYXNWYWx1ZSh1c2VyPy5lbWFpbClcclxuICAgICAgICAgID8gYCR7U3RyaW5nKHVzZXIubmFtZSkudHJpbSgpfSAoJHtTdHJpbmcodXNlci5lbWFpbCkudHJpbSgpfSlgXHJcbiAgICAgICAgICA6ICcnO1xyXG4gICAgICBjb25zdCBjYW5kaWRhdGVzID0gW1xyXG4gICAgICAgIHVzZXI/Lm5hbWVBbmRFbWFpbCxcclxuICAgICAgICB1c2VyPy5uYW1lLFxyXG4gICAgICAgIHVzZXI/LmVtYWlsLFxyXG4gICAgICAgIGNvbnN0cnVjdGVkLFxyXG4gICAgICBdO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgY2FuZGlkYXRlcy5zb21lKFxyXG4gICAgICAgICAgKGNhbmRpZGF0ZSkgPT5cclxuICAgICAgICAgICAgdGhpcy5oYXNWYWx1ZShjYW5kaWRhdGUpICYmXHJcbiAgICAgICAgICAgIHRoaXMubm9ybWFsaXplRHJvcGRvd25WYWx1ZShjYW5kaWRhdGUpID09PSBub3JtYWxpemVkXHJcbiAgICAgICAgKVxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdmFsdWVFbWFpbCAmJlxyXG4gICAgICAgIHRoaXMuaGFzVmFsdWUodXNlcj8uZW1haWwpICYmXHJcbiAgICAgICAgdGhpcy5ub3JtYWxpemVEcm9wZG93blZhbHVlKHVzZXIuZW1haWwpID09PSB2YWx1ZUVtYWlsXHJcbiAgICAgICkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChcclxuICAgICAgICB2YWx1ZU5hbWUgJiZcclxuICAgICAgICB0aGlzLmhhc1ZhbHVlKHVzZXI/Lm5hbWUpICYmXHJcbiAgICAgICAgdGhpcy5ub3JtYWxpemVEcm9wZG93blZhbHVlKHVzZXIubmFtZSkgPT09IHZhbHVlTmFtZVxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgICEhdmFsdWVFbWFpbCAmJlxyXG4gICAgICAgIGNhbmRpZGF0ZXMuc29tZShcclxuICAgICAgICAgIChjYW5kaWRhdGUpID0+XHJcbiAgICAgICAgICAgIHRoaXMuaGFzVmFsdWUoY2FuZGlkYXRlKSAmJlxyXG4gICAgICAgICAgICB0aGlzLmV4dHJhY3REcm9wZG93bkVtYWlsKGNhbmRpZGF0ZSkgPT09IHZhbHVlRW1haWxcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5vcm1hbGl6ZURyb3Bkb3duVmFsdWUodmFsdWU6IGFueSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlID8/ICcnKVxyXG4gICAgICAucmVwbGFjZSgvW1xcdTIwMEItXFx1MjAwRFxcdUZFRkZdL2csICcnKVxyXG4gICAgICAucmVwbGFjZSgvXFx1MDBhMC9nLCAnICcpXHJcbiAgICAgIC5yZXBsYWNlKC9cXHMrL2csICcgJylcclxuICAgICAgLnRyaW0oKVxyXG4gICAgICAudG9Mb3dlckNhc2UoKTtcclxuICB9XHJcblxyXG4gIGV4dHJhY3REcm9wZG93bkVtYWlsKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgbWF0Y2ggPSBTdHJpbmcodmFsdWUgPz8gJycpLm1hdGNoKC9cXCgoW14pXSpAW14pXSopXFwpXFxzKiQvKTtcclxuICAgIHJldHVybiBtYXRjaCA/IHRoaXMubm9ybWFsaXplRHJvcGRvd25WYWx1ZShtYXRjaFsxXSkgOiAnJztcclxuICB9XHJcblxyXG4gIGV4dHJhY3REcm9wZG93bk5hbWUodmFsdWU6IGFueSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5ub3JtYWxpemVEcm9wZG93blZhbHVlKFxyXG4gICAgICBTdHJpbmcodmFsdWUgPz8gJycpLnJlcGxhY2UoL1xccypcXChbXildKkBbXildKlxcKVxccyokLywgJycpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgaXNJblN0YXRpY0Ryb3Bkb3duKHZhbHVlOiBhbnksIG9wdGlvbnM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0luRHJvcGRvd25MaXN0KHZhbHVlLCBvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGlzSW5Ecm9wZG93bkxpc3QodmFsdWU6IGFueSwgb3B0aW9uczogc3RyaW5nW10pOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5oYXNWYWx1ZSh2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBjb25zdCBub3JtYWxpemVkID0gdGhpcy5ub3JtYWxpemVEcm9wZG93blZhbHVlKHZhbHVlKTtcclxuICAgIHJldHVybiAob3B0aW9ucyB8fCBbXSkuc29tZShcclxuICAgICAgKG9wdGlvbikgPT4gdGhpcy5ub3JtYWxpemVEcm9wZG93blZhbHVlKG9wdGlvbikgPT09IG5vcm1hbGl6ZWRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpc1ZhbGlkRHJvcGRvd25EYXkodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmhhc1ZhbHVlKHZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGRheU51bWJlciA9IE51bWJlcihTdHJpbmcodmFsdWUpLnRyaW0oKSk7XHJcbiAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihkYXlOdW1iZXIpICYmIGRheU51bWJlciA+PSAxICYmIGRheU51bWJlciA8PSAzMTtcclxuICB9XHJcblxyXG4gIGlzVmFsaWREcm9wZG93bk1vbnRoKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5oYXNWYWx1ZSh2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkRHVlRGF0ZU1vbnRoKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIGlzVmFsaWREdWVEYXRlTW9udGgodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdGV4dCA9IFN0cmluZyh2YWx1ZSA/PyAnJykudHJpbSgpO1xyXG4gICAgaWYgKCF0ZXh0KSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaGFzWWVhclN1ZmZpeCA9XHJcbiAgICAgIFJFR0VYLk1PTlRILnRlc3QodGV4dCkgfHwgUkVHRVguRU5EU19CWV9EQVRFX01PTlRILnRlc3QodGV4dCk7XHJcbiAgICBpZiAoIWhhc1llYXJTdWZmaXgpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFNIT1JUX01PTlRIX05BTUVTLmluY2x1ZGVzKHRleHQuc3Vic3RyaW5nKDAsIDMpLnRvTG93ZXJDYXNlKCkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RHVlRGF0ZURheU1heChmcmVxdWVuY3k6IGFueSk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gV0VFS0RBWV9GUkVRVUVOQ0lFUy5pbmNsdWRlcyh0aGlzLm5vcm1hbGl6ZURyb3Bkb3duVmFsdWUoZnJlcXVlbmN5KSlcclxuICAgICAgPyA3XHJcbiAgICAgIDogMzE7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHMiAvIEczOiBERC0wMSwgREQtMDIsIERELTAzLCBETS0wMSwgRE0tMDIuXHJcbiAgICogQmxhbmsgZGF5IGFuZCBtb250aCB0b2dldGhlciBzdGF5IHZhbGlkLiBXYXJuaW5nL2luZm8gYXJlIG5vdCB1c2VkIGhlcmUuXHJcbiAgICovXHJcbiAgYXBwbHlEdWVEYXRlRGF5TW9udGhNZXNzYWdlcyhvYmo6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgaGFzRGF5ID0gdGhpcy5oYXNWYWx1ZShvYmo/LmRheSk7XHJcbiAgICBjb25zdCBoYXNNb250aCA9IHRoaXMuaGFzVmFsdWUob2JqPy5tb250aCk7XHJcbiAgICBjb25zdCBmcmVxdWVuY3lMYWJlbCA9IHRoaXMuaGFzVmFsdWUob2JqPy5mcmVxdWVuY3kpXHJcbiAgICAgID8gU3RyaW5nKG9iai5mcmVxdWVuY3kpLnRyaW0oKVxyXG4gICAgICA6ICdXZWVrbHknO1xyXG4gICAgY29uc3QgZGF5VGV4dCA9IGhhc0RheSA/IFN0cmluZyhvYmouZGF5KS50cmltKCkgOiAnJztcclxuICAgIGNvbnN0IGlzRGF5TnVtZXJpYyA9IC9eXFxkKyQvLnRlc3QoZGF5VGV4dCk7XHJcbiAgICBjb25zdCBkYXlOdW1iZXIgPSBpc0RheU51bWVyaWMgPyBOdW1iZXIoZGF5VGV4dCkgOiBOYU47XHJcbiAgICBjb25zdCBtYXhEYXkgPSB0aGlzLmdldER1ZURhdGVEYXlNYXgob2JqPy5mcmVxdWVuY3kpO1xyXG5cclxuICAgIGlmIChoYXNEYXkgJiYgIWlzRGF5TnVtZXJpYykge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdkYXknLFxyXG4gICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5EVUVfREFURV9EQVlfTk9UX05VTUJFUlxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChoYXNEYXkgJiYgKGRheU51bWJlciA8IDEgfHwgZGF5TnVtYmVyID4gbWF4RGF5KSkge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdkYXknLFxyXG4gICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgZHVlRGF0ZURheU91dE9mUmFuZ2VNZXNzYWdlKGZyZXF1ZW5jeUxhYmVsKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChoYXNNb250aCAmJiAhdGhpcy5pc1ZhbGlkRHVlRGF0ZU1vbnRoKG9iaj8ubW9udGgpKSB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICBvYmosXHJcbiAgICAgICAgJ21vbnRoJyxcclxuICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SLFxyXG4gICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuRFVFX0RBVEVfTU9OVEhfSU5WQUxJRFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaGFzRGF5ICYmIGhhc01vbnRoKSB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICBvYmosXHJcbiAgICAgICAgJ2RheScsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkRVRV9EQVRFX1JFUVVJUkVEXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGhhc0RheSAmJiAhaGFzTW9udGgpIHtcclxuICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgIG9iaixcclxuICAgICAgICAnbW9udGgnLFxyXG4gICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5EVUVfREFURV9SRVFVSVJFRFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGRheUhhc0Vycm9yID0gb2JqPy5maWVsZFZhbGlkYXRpb24/LmRheT8uc2V2ZXJpdHkgPT09IFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1I7XHJcbiAgICBjb25zdCBtb250aEhhc0Vycm9yID1cclxuICAgICAgb2JqPy5maWVsZFZhbGlkYXRpb24/Lm1vbnRoPy5zZXZlcml0eSA9PT0gVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUjtcclxuICAgIGlmIChoYXNEYXkgJiYgaGFzTW9udGggJiYgIWRheUhhc0Vycm9yICYmICFtb250aEhhc0Vycm9yICYmIG9iaj8uaXNQYXN0RGF0ZSkge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdkYXknLFxyXG4gICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5QQVNUX0RVRV9EQVRFXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICBvYmosXHJcbiAgICAgICAgJ21vbnRoJyxcclxuICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SLFxyXG4gICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuUEFTVF9EVUVfREFURVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNWYWxpZER1ZVRpbWUoZHVlVGltZTogYW55LCBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMgPSBmYWxzZSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMubm9ybWFsaXplRHVlVGltZShkdWVUaW1lKTtcclxuICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUkVHRVguRFVFX1RJTUUudGVzdCh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPcHRpb25hbCBmaWVsZC4gV2hlbiBmaWxsZWQsIHRoZSB2YWx1ZSBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIHdob2xlIG51bWJlci5cclxuICAgKiBSZWplY3RzIG5lZ2F0aXZlcywgZGVjaW1hbHMsIGFuZCBub24tbnVtZXJpYyB0ZXh0LiBCbGFuayBpcyB2YWxpZC4gMCBpcyBhbGxvd2VkXHJcbiAgICogKEZhaWwgLyBSZXZpZXcgRmFpbCB1c2UgMCB0byBtZWFuIGNvbXBsZXRlL3JldmlldyBvbiB0aGUgZHVlIGRhdGUpLlxyXG4gICAqL1xyXG4gIGdldFdob2xlTnVtYmVyRGF5c0Vycm9yKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0aGlzLmhhc1ZhbHVlKHZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgICBjb25zdCBub3JtYWxpemVkID0gU3RyaW5nKHZhbHVlKS50cmltKCk7XHJcbiAgICBpZiAoL14tLy50ZXN0KG5vcm1hbGl6ZWQpIHx8IE51bWJlcihub3JtYWxpemVkKSA8IDApIHtcclxuICAgICAgcmV0dXJuIFZBTElEQVRJT05fTUVTU0FHRVMuUE9TSVRJVkVfTlVNQkVSO1xyXG4gICAgfVxyXG4gICAgaWYgKCEvXlxcZCskLy50ZXN0KG5vcm1hbGl6ZWQpKSB7XHJcbiAgICAgIHJldHVybiBWQUxJREFUSU9OX01FU1NBR0VTLldIT0xFX05VTUJFUl9OT05fTkVHQVRJVkU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBhcHBseURheXNDb3VudFZhbGlkYXRpb24ob2JqOiBhbnksIHRhYlR5cGU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3Qgc3RhcnRFcnJvciA9XHJcbiAgICAgIHRhYlR5cGUgPT09ICdmcmVxdWVuY3knXHJcbiAgICAgICAgPyB0aGlzLmdldFdob2xlTnVtYmVyRGF5c0Vycm9yKG9iaj8ucmVzcG9uc2liaWxpdHlXaW5kb3cpXHJcbiAgICAgICAgOiAnJztcclxuICAgIGNvbnN0IGZhaWxFcnJvciA9XHJcbiAgICAgIHRhYlR5cGUgPT09ICdmcmVxdWVuY3knXHJcbiAgICAgICAgPyB0aGlzLmdldFdob2xlTnVtYmVyRGF5c0Vycm9yKG9iaj8uZmFpbGVkQWZ0ZXIpXHJcbiAgICAgICAgOiAnJztcclxuICAgIGNvbnN0IHJldmlld1N0YXJ0RXJyb3IgPSB0aGlzLmdldFdob2xlTnVtYmVyRGF5c0Vycm9yKFxyXG4gICAgICBvYmo/LnJldmlld1RvQmVDb21wbGV0ZWRXaXRoaW5cclxuICAgICk7XHJcbiAgICBjb25zdCByZXZpZXdGYWlsRXJyb3IgPSB0aGlzLmdldFdob2xlTnVtYmVyRGF5c0Vycm9yKFxyXG4gICAgICBvYmo/LnJldmlld1dpbGxCZUZhaWxlZEFmdGVyXHJcbiAgICApO1xyXG4gICAgb2JqWydyZXNwb25zaWJpbGl0eVdpbmRvd0Vycm9yJ10gPSBzdGFydEVycm9yO1xyXG4gICAgb2JqWydmYWlsZWRBZnRlckVycm9yJ10gPSBmYWlsRXJyb3I7XHJcbiAgICBvYmpbJ3Jldmlld1RvQmVDb21wbGV0ZWRXaXRoaW5FcnJvciddID0gcmV2aWV3U3RhcnRFcnJvcjtcclxuICAgIG9ialsncmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXJFcnJvciddID0gcmV2aWV3RmFpbEVycm9yO1xyXG4gICAgb2JqWydpc1ZhbGlkRGF5c0NvdW50J10gPVxyXG4gICAgICAhc3RhcnRFcnJvciAmJiAhZmFpbEVycm9yICYmICFyZXZpZXdTdGFydEVycm9yICYmICFyZXZpZXdGYWlsRXJyb3I7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPcHRpb25hbCBmaWVsZC4gV2hlbiBmaWxsZWQsIHRoZSB2YWx1ZSBtdXN0IGJlIG51bWVyaWMgYW5kIGdyZWF0ZXIgdGhhbiAwLlxyXG4gICAqL1xyXG4gIGdldEVuZHNBZnRlck9jY3VycmVuY2VzRXJyb3IoXHJcbiAgICB2YWx1ZTogYW55LFxyXG4gICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zID0gZmFsc2VcclxuICApOiBzdHJpbmcge1xyXG4gICAgaWYgKCFoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gICAgaWYgKHZhbHVlID09IG51bGwgfHwgU3RyaW5nKHZhbHVlKS50cmltKCkgPT09ICcnKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBTdHJpbmcodmFsdWUpLnRyaW0oKTtcclxuICAgIGlmICghL14tP1xcZCsoXFwuXFxkKyk/JC8udGVzdChub3JtYWxpemVkKSkge1xyXG4gICAgICByZXR1cm4gVkFMSURBVElPTl9NRVNTQUdFUy5FTkRTX0FGVEVSX09DQ1VSUkVOQ0VTX05VTUVSSUM7XHJcbiAgICB9XHJcbiAgICBpZiAoTnVtYmVyKG5vcm1hbGl6ZWQpIDw9IDApIHtcclxuICAgICAgcmV0dXJuIFZBTElEQVRJT05fTUVTU0FHRVMuRU5EU19BRlRFUl9PQ0NVUlJFTkNFU19HUkVBVEVSX1RIQU5fWkVSTztcclxuICAgIH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIGFwcGx5RW5kc0J5RGF0ZVZhbGlkYXRpb24ob2JqOiBhbnksIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucyA9IGZhbHNlKTogdm9pZCB7XHJcbiAgICBjb25zdCB2YWxpZGF0aW9uID0gdGhpcy5nZXRFbmRzQnlEYXRlVmFsaWRhdGlvbihcclxuICAgICAgb2JqPy5lbmRzQnlEYXRlRGF5LFxyXG4gICAgICBvYmo/LmVuZHNCeURhdGVNb250aCxcclxuICAgICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zLFxyXG4gICAgICBvYmo/LmVuZHNBZnRlck9jY3VycmVuY2VzXHJcbiAgICApO1xyXG4gICAgb2JqWydlbmRzQnlEYXRlRGF5RXJyb3InXSA9IHZhbGlkYXRpb24uZGF5RXJyb3I7XHJcbiAgICBvYmpbJ2VuZHNCeURhdGVNb250aEVycm9yJ10gPSB2YWxpZGF0aW9uLm1vbnRoRXJyb3I7XHJcbiAgICBvYmpbJ2lzVmFsaWRFbmRzQnlEYXRlRGF5J10gPSAhdmFsaWRhdGlvbi5kYXlFcnJvcjtcclxuICAgIG9ialsnaXNWYWxpZEVuZHNCeURhdGVNb250aCddID0gIXZhbGlkYXRpb24ubW9udGhFcnJvcjtcclxuICAgIG9ialsnaXNWYWxpZEVuZHNCeURhdGUnXSA9IHZhbGlkYXRpb24uaXNWYWxpZDtcclxuICB9XHJcblxyXG4gIGhhc1ZhbHVlKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIFN0cmluZyh2YWx1ZSkudHJpbSgpICE9PSAnJztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wdGlvbmFsIHVubGVzcyBlaXRoZXIgZGF5IG9yIG1vbnRoIGlzIGZpbGxlZC4gQ2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCBFbmRzIEFmdGVyIE9jY3VycmVuY2VzLlxyXG4gICAqIERheSBtdXN0IGJlIG51bWVyaWMsIGdyZWF0ZXIgdGhhbiAwLCBhbmQgYXQgbW9zdCAzMS4gTW9udGggbXVzdCBiZSBmdWxsIG1vbnRoIG5hbWUgKyAnICsgdHdvLWRpZ2l0XHJcbiAgICogeWVhciAoSmFudWFyeScyOCkuIENvbWJpbmVkIGRhdGUgbXVzdCBleGlzdCwgaW5jbHVkaW5nIGxlYXAteWVhciBGZWJydWFyeSAyOS5cclxuICAgKi9cclxuICBnZXRFbmRzQnlEYXRlVmFsaWRhdGlvbihcclxuICAgIGRheTogYW55LFxyXG4gICAgbW9udGg6IGFueSxcclxuICAgIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucyA9IGZhbHNlLFxyXG4gICAgZW5kc0FmdGVyT2NjdXJyZW5jZXM/OiBhbnlcclxuICApOiB7IGlzVmFsaWQ6IGJvb2xlYW47IGRheUVycm9yOiBzdHJpbmc7IG1vbnRoRXJyb3I6IHN0cmluZyB9IHtcclxuICAgIGNvbnN0IHZhbGlkID0geyBpc1ZhbGlkOiB0cnVlLCBkYXlFcnJvcjogJycsIG1vbnRoRXJyb3I6ICcnIH07XHJcbiAgICBpZiAoIWhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucykge1xyXG4gICAgICByZXR1cm4gdmFsaWQ7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkYXlWYWx1ZSA9IGRheSA9PSBudWxsID8gJycgOiBTdHJpbmcoZGF5KS50cmltKCk7XHJcbiAgICBjb25zdCBtb250aFZhbHVlID0gbW9udGggPT0gbnVsbCA/ICcnIDogU3RyaW5nKG1vbnRoKS50cmltKCk7XHJcbiAgICBpZiAoIWRheVZhbHVlICYmICFtb250aFZhbHVlKSB7XHJcbiAgICAgIHJldHVybiB2YWxpZDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5oYXNWYWx1ZShlbmRzQWZ0ZXJPY2N1cnJlbmNlcykgJiYgKGRheVZhbHVlIHx8IG1vbnRoVmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaXNWYWxpZDogZmFsc2UsXHJcbiAgICAgICAgZGF5RXJyb3I6IGRheVZhbHVlID8gVkFMSURBVElPTl9NRVNTQUdFUy5FTkRTX0JZX0RBVEVfQ09ORkxJQ1QgOiAnJyxcclxuICAgICAgICBtb250aEVycm9yOiBtb250aFZhbHVlID8gVkFMSURBVElPTl9NRVNTQUdFUy5FTkRTX0JZX0RBVEVfQ09ORkxJQ1QgOiAnJyxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWRheVZhbHVlIHx8ICFtb250aFZhbHVlKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaXNWYWxpZDogZmFsc2UsXHJcbiAgICAgICAgZGF5RXJyb3I6IFZBTElEQVRJT05fTUVTU0FHRVMuRU5EU19CWV9EQVRFX0lOQ09NUExFVEUsXHJcbiAgICAgICAgbW9udGhFcnJvcjogVkFMSURBVElPTl9NRVNTQUdFUy5FTkRTX0JZX0RBVEVfSU5DT01QTEVURSxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkYXlFcnJvciA9IHRoaXMuZ2V0RW5kc0J5RGF0ZURheUVycm9yKGRheVZhbHVlKTtcclxuICAgIGNvbnN0IG1vbnRoRXJyb3IgPSB0aGlzLmdldEVuZHNCeURhdGVNb250aEVycm9yKG1vbnRoVmFsdWUpO1xyXG4gICAgaWYgKGRheUVycm9yIHx8IG1vbnRoRXJyb3IpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcclxuICAgICAgICBkYXlFcnJvcixcclxuICAgICAgICBtb250aEVycm9yLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5pc1ZhbGlkRW5kc0J5Q2FsZW5kYXJEYXRlKGRheVZhbHVlLCBtb250aFZhbHVlKSkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxyXG4gICAgICAgIGRheUVycm9yOiBWQUxJREFUSU9OX01FU1NBR0VTLkVORFNfQllfREFURV9JTlZBTElEX1ZBTFVFLFxyXG4gICAgICAgIG1vbnRoRXJyb3I6IFZBTElEQVRJT05fTUVTU0FHRVMuRU5EU19CWV9EQVRFX0lOVkFMSURfVkFMVUUsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNFbmRzQnlEYXRlSW5QYXN0KGRheVZhbHVlLCBtb250aFZhbHVlKSkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxyXG4gICAgICAgIGRheUVycm9yOiBWQUxJREFUSU9OX01FU1NBR0VTLkVORFNfQllfREFURV9QQVNULFxyXG4gICAgICAgIG1vbnRoRXJyb3I6IFZBTElEQVRJT05fTUVTU0FHRVMuRU5EU19CWV9EQVRFX1BBU1QsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHZhbGlkO1xyXG4gIH1cclxuXHJcbiAgZ2V0RW5kc0J5RGF0ZURheUVycm9yKGRheTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICghL14tP1xcZCsoXFwuXFxkKyk/JC8udGVzdChkYXkpKSB7XHJcbiAgICAgIHJldHVybiBWQUxJREFUSU9OX01FU1NBR0VTLkVORFNfQllfREFURV9JTlZBTElEX1ZBTFVFO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGF5TnVtYmVyID0gTnVtYmVyKGRheSk7XHJcbiAgICBpZiAoZGF5TnVtYmVyIDw9IDAgfHwgZGF5TnVtYmVyID4gMzEpIHtcclxuICAgICAgcmV0dXJuIFZBTElEQVRJT05fTUVTU0FHRVMuRU5EU19CWV9EQVRFX0lOVkFMSURfVkFMVUU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBnZXRFbmRzQnlEYXRlTW9udGhFcnJvcihtb250aDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICghUkVHRVguRU5EU19CWV9EQVRFX01PTlRILnRlc3QobW9udGgpKSB7XHJcbiAgICAgIHJldHVybiBWQUxJREFUSU9OX01FU1NBR0VTLkVORFNfQllfREFURV9JTlZBTElEX1ZBTFVFO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgaXNWYWxpZEVuZHNCeUNhbGVuZGFyRGF0ZShkYXk6IHN0cmluZywgbW9udGg6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgbW9udGhNYXRjaCA9IG1vbnRoLm1hdGNoKFJFR0VYLkVORFNfQllfREFURV9NT05USCk7XHJcbiAgICBpZiAoIW1vbnRoTWF0Y2gpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbW9udGhJbmRleCA9IEZVTExfTU9OVEhfTkFNRVMuaW5kZXhPZihtb250aE1hdGNoWzFdKTtcclxuICAgIGNvbnN0IHllYXIgPSAyMDAwICsgTnVtYmVyKG1vbnRoTWF0Y2hbMl0pO1xyXG4gICAgY29uc3QgZGF5TnVtYmVyID0gTnVtYmVyKGRheSk7XHJcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoZGF5TnVtYmVyKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGhJbmRleCwgZGF5TnVtYmVyKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIGRhdGUuZ2V0RnVsbFllYXIoKSA9PT0geWVhciAmJlxyXG4gICAgICBkYXRlLmdldE1vbnRoKCkgPT09IG1vbnRoSW5kZXggJiZcclxuICAgICAgZGF0ZS5nZXREYXRlKCkgPT09IGRheU51bWJlclxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGlzRW5kc0J5RGF0ZUluUGFzdChkYXk6IHN0cmluZywgbW9udGg6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgbW9udGhNYXRjaCA9IG1vbnRoLm1hdGNoKFJFR0VYLkVORFNfQllfREFURV9NT05USCk7XHJcbiAgICBpZiAoIW1vbnRoTWF0Y2gpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbW9udGhJbmRleCA9IEZVTExfTU9OVEhfTkFNRVMuaW5kZXhPZihtb250aE1hdGNoWzFdKTtcclxuICAgIGNvbnN0IHllYXIgPSAyMDAwICsgTnVtYmVyKG1vbnRoTWF0Y2hbMl0pO1xyXG4gICAgY29uc3QgZGF5TnVtYmVyID0gTnVtYmVyKGRheSk7XHJcbiAgICBjb25zdCBlbmRzQnlEYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGhJbmRleCwgZGF5TnVtYmVyKTtcclxuICAgIGVuZHNCeURhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XHJcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XHJcbiAgICB0b2RheS5zZXRIb3VycygwLCAwLCAwLCAwKTtcclxuICAgIHJldHVybiBlbmRzQnlEYXRlIDwgdG9kYXk7XHJcbiAgfVxyXG5cclxuICBub3JtYWxpemVEdWVUaW1lKGR1ZVRpbWU6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAoZHVlVGltZSA9PSBudWxsIHx8IGR1ZVRpbWUgPT09ICcnKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIGxldCB2YWx1ZSA9IFN0cmluZyhkdWVUaW1lKS50cmltKCkucmVwbGFjZSgvXFxzKy9nLCAnICcpO1xyXG4gICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9eKFxcZHsxLDJ9KTooXFxkezJ9KTpcXGR7Mn1cXHMqKEFNfFBNKSQvaSwgJyQxOiQyICQzJyk7XHJcbiAgICBjb25zdCBtYXRjaCA9IHZhbHVlLm1hdGNoKC9eKFxcZHsxLDJ9KTooXFxkezJ9KVxccyooQU18UE0pJC9pKTtcclxuICAgIGlmICghbWF0Y2gpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG4gICAgbGV0IGhvdXIgPSBOdW1iZXIobWF0Y2hbMV0pO1xyXG4gICAgaWYgKGhvdXIgPT09IDApIHtcclxuICAgICAgaG91ciA9IDEyO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGAke2hvdXJ9OiR7bWF0Y2hbMl19ICR7bWF0Y2hbM10udG9VcHBlckNhc2UoKX1gO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEl0IHRha2VzIGEgc3RyaW5nLCByZW1vdmVzIGFsbCB3aGl0ZXNwYWNlLCBhbmQgcmV0dXJucyB0aGUgc3RyaW5nXHJcbiAgICogQHBhcmFtIHthbnl9IG5hbWUgLSB0aGUgbmFtZSBvZiB0aGUgcmVzcG9uc2liaWxpdHlcclxuICAgKiBAcmV0dXJucyB0aGUgdHJpbW1lZE5hbWUgdmFyaWFibGUuXHJcbiAgICovXHJcbiAgY2hlY2tWYWxpZFJlc3BvbnNpYmlsaXR5TmFtZShuYW1lOiBhbnkpIHtcclxuICAgIGNvbnN0IHJlID0gLyZuYnNwO3w8YnI+L2c7XHJcbiAgICBpZiAobmFtZSkge1xyXG4gICAgICB2YXIgdHJpbW1lZE5hbWUgPSBuYW1lLnRvU3RyaW5nKCkucmVwbGFjZShyZSwgJycpLnRyaW0oKTtcclxuICAgICAgdHJpbW1lZE5hbWUgPSB0cmltbWVkTmFtZS5yZXBsYWNlKC8gICsvZywgJyAnKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cmltbWVkTmFtZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRoZSByZXNwb25zaWJpbGl0eSBuYW1lIGlzIHZhbGlkLCBhbmQgdGhlIGFzc2lnbmVlIGFuZCBhc3NpZ25vciBhcmUgbm90IGVtcHR5LCB0aGVuIHJldHVyblxyXG4gICAqIHRydWUuIE90aGVyd2lzZSwgcmV0dXJuIGZhbHNlXHJcbiAgICogQHBhcmFtIHthbnl9IGRhdGEgLSBhbnkgLSB0aGUgZGF0YSB0aGF0IGlzIGJlaW5nIHBhc3NlZCBpblxyXG4gICAqIEByZXR1cm5zIEEgYm9vbGVhbiB2YWx1ZS5cclxuICAgKi9cclxuICBpc1ZhbGlkRGF0YShkYXRhOiBhbnkpIHtcclxuICAgIGNvbnN0IHJlc3BvbnNpYmlsaXR5ID0gdGhpcy5jaGVja1ZhbGlkUmVzcG9uc2liaWxpdHlOYW1lKFxyXG4gICAgICBkYXRhPy5yZXNwb25zaWJpbGl0eU5hbWVcclxuICAgICk/Lmxlbmd0aFxyXG4gICAgICA/IHRydWVcclxuICAgICAgOiBmYWxzZTtcclxuICAgIGNvbnN0IGFzc2lnbmVlID0gZGF0YT8uYXNzaWduZWU/Lmxlbmd0aCA/IHRydWUgOiBmYWxzZTtcclxuICAgIGNvbnN0IGZyZXF1ZW5jeSA9IGRhdGE/LmZyZXF1ZW5jeT8ubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgaWYgKGFzc2lnbmVlICYmIHJlc3BvbnNpYmlsaXR5ICYmIGZyZXF1ZW5jeSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRoZSBhc3NpZ25vciBpcyB0aGUgc2FtZSBhcyB0aGUgb3ZlcnNlZXIgb3IgdGhlIE5vdGlmeU9uRmFpbHVyZSwgb3IgaWYgdGhlIGFzc2lnbm9yIGlzIG5vdCBzZXRcclxuICAgKiBhbmQgdGhlIGRlZmF1bHRPd25lciBpcyB0aGUgc2FtZSBhcyB0aGUgb3ZlcnNlZXIgb3IgdGhlIE5vdGlmeU9uRmFpbHVyZSwgb3IgaWYgdGhlIGFzc2lnbmVlIGlzIHRoZVxyXG4gICAqIHNhbWUgYXMgdGhlIHJldmlld2VyLCBvdmVyc2Vlciwgb3IgTm90aWZ5T25GYWlsdXJlLCBvciBpZiB0aGUgYXNzaWduZWUgaXMgbm90IHNldCBhbmQgdGhlXHJcbiAgICogZGVmYXVsdE93bmVyIGlzIHRoZSBzYW1lIGFzIHRoZSBvdmVyc2VlciBvciB0aGUgTm90aWZ5T25GYWlsdXJlLCBvciBpZiB0aGUgcmV2aWV3ZXIgaXMgdGhlIHNhbWUgYXNcclxuICAgKiB0aGUgb3ZlcnNlZXIgb3IgdGhlIE5vdGlmeU9uRmFpbHVyZSwgb3IgaWYgdGhlIGFzc2lnbmVlIGlzIG5vdCBzZXQsIHRoZW4gcmV0dXJuIGZhbHNlLiBPdGhlcndpc2UsXHJcbiAgICogcmV0dXJuIHRydWVcclxuICAgKiBAcGFyYW0ge2FueX0gZGF0YSAtIGFueSAtIHRoaXMgaXMgdGhlIGRhdGEgdGhhdCBpcyBwYXNzZWQgaW4gZnJvbSB0aGUgZm9ybS5cclxuICAgKiBAcmV0dXJucyBBIGJvb2xlYW4gdmFsdWUuXHJcbiAgICovXHJcbiAgaXNWYWxpZFVzZXJzKGRhdGE6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKFxyXG4gICAgICAoZGF0YT8uYXNzaWdub3IgJiZcclxuICAgICAgICAoZGF0YT8uYXNzaWdub3IgPT0gZGF0YT8ub3ZlcnNlZXIgfHxcclxuICAgICAgICAgIGRhdGE/LmFzc2lnbm9yID09IGRhdGE/Lm5vdGlmeU9uRmFpbHVyZSkpIHx8XHJcbiAgICAgICghZGF0YT8uYXNzaWdub3IgJiZcclxuICAgICAgICAodGhpcy5kZWZhdWx0T3duZXIgPT0gZGF0YT8ub3ZlcnNlZXIgfHxcclxuICAgICAgICAgIHRoaXMuZGVmYXVsdE93bmVyID09IGRhdGE/Lm5vdGlmeU9uRmFpbHVyZSkpIHx8XHJcbiAgICAgIChkYXRhPy5hc3NpZ25lZSAmJlxyXG4gICAgICAgIChkYXRhPy5hc3NpZ25lZSA9PSBkYXRhPy5yZXZpZXdlciB8fFxyXG4gICAgICAgICAgZGF0YT8uYXNzaWduZWUgPT0gZGF0YT8ub3ZlcnNlZXIgfHxcclxuICAgICAgICAgIGRhdGE/LmFzc2lnbmVlID09IGRhdGE/Lm5vdGlmeU9uRmFpbHVyZSkpIHx8XHJcbiAgICAgICghZGF0YT8uYXNzaWduZWUgJiZcclxuICAgICAgICAodGhpcy5kZWZhdWx0T3duZXIgPT0gZGF0YT8ub3ZlcnNlZXIgfHxcclxuICAgICAgICAgIHRoaXMuZGVmYXVsdE93bmVyID09IGRhdGE/Lm5vdGlmeU9uRmFpbHVyZSkpIHx8XHJcbiAgICAgIChkYXRhPy5yZXZpZXdlciAmJlxyXG4gICAgICAgIChkYXRhPy5yZXZpZXdlciA9PSBkYXRhPy5vdmVyc2VlciB8fFxyXG4gICAgICAgICAgZGF0YT8ucmV2aWV3ZXIgPT0gZGF0YT8ubm90aWZ5T25GYWlsdXJlKSkgfHxcclxuICAgICAgIWRhdGE/LmFzc2lnbmVlXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJdCB0YWtlcyBpbiBhIGRhdGEgb2JqZWN0IGFuZCByZXR1cm5zIGFuIG9iamVjdCB3aXRoIDQgYm9vbGVhbiBwcm9wZXJ0aWVzLlxyXG4gICAqIFRoZSBib29sZWFuIHByb3BlcnRpZXMgYXJlIGRldGVybWluZWQgYnkgdGhlIHZhbHVlcyBvZiB0aGUgZGF0YSBvYmplY3QuXHJcbiAgICogQHBhcmFtIHthbnl9IGRhdGEgLSBhbnkgPSB7XHJcbiAgICogQHJldHVybnMge1xyXG4gICAqICAgaXNWYWxpZEFzc2lnbmVlOiB0cnVlLFxyXG4gICAqICAgaXNWYWxpZEFzc2lnbm9yOiB0cnVlLFxyXG4gICAqICAgaXNWYWxpZFJldmlld2VyOiB0cnVlLFxyXG4gICAqICAgaXNWYWxpZE92ZXJzZWVyOiB0cnVlXHJcbiAgICogfVxyXG4gICAqL1xyXG4gIHZhbGlkYXRlRGF0YVdpdGhQcm9ncmFtKGRhdGE6IGFueSk6IGFueSB7XHJcbiAgICBjb25zdCBwcm9ncmFtID0gdGhpcy50ZW1wbGF0ZUluZm8/LmNhdGVnb3J5TGlzdD8uZmlsdGVyKFxyXG4gICAgICAocHJvZ3JhbTogYW55KSA9PiBwcm9ncmFtPy5wcm9ncmFtTmFtZSA9PT0gZGF0YT8ucHJvZ3JhbVxyXG4gICAgKTtcclxuICAgIGNvbnN0IHNlbGVjdGVkQXNzaWduZWUgPSB0aGlzLnRlbXBsYXRlSW5mbz8uYXNzaWduZWVzTGlzdD8uZmlsdGVyKFxyXG4gICAgICAoYXNzaWduZWU6IGFueSkgPT4gYXNzaWduZWU/Lm5hbWVBbmRFbWFpbCA9PT0gZGF0YT8uYXNzaWduZWVcclxuICAgICk7XHJcbiAgICBjb25zdCBzZWxlY3RlZEFzc2lnbm9yID0gdGhpcy50ZW1wbGF0ZUluZm8/LmFzc2lnbm9yc0xpc3Q/LmZpbHRlcihcclxuICAgICAgKGFzc2lnbm9yOiBhbnkpID0+IGFzc2lnbm9yPy5uYW1lQW5kRW1haWwgPT09IGRhdGE/LmFzc2lnbm9yXHJcbiAgICApO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRSZXZpZXdlciA9IHRoaXMudGVtcGxhdGVJbmZvPy5yZXZpZXdlckxpc3Q/LmZpbHRlcihcclxuICAgICAgKHJldmlld2VyOiBhbnkpID0+IHJldmlld2VyPy5uYW1lQW5kRW1haWwgPT09IGRhdGE/LnJldmlld2VyXHJcbiAgICApO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRPdmVyc2VlciA9IHRoaXMudGVtcGxhdGVJbmZvPy5yZXZpZXdlckxpc3Q/LmZpbHRlcihcclxuICAgICAgKG92ZXJzZWVyOiBhbnkpID0+IG92ZXJzZWVyPy5uYW1lQW5kRW1haWwgPT09IGRhdGE/Lm92ZXJzZWVyXHJcbiAgICApO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWROb3RpZnlPbkZhaWx1cmUgPSB0aGlzLnRlbXBsYXRlSW5mbz8ucmV2aWV3ZXJMaXN0Py5maWx0ZXIoXHJcbiAgICAgIChub3RpZnlPbkZhaWx1cmU6IGFueSkgPT5cclxuICAgICAgICBub3RpZnlPbkZhaWx1cmU/Lm5hbWVBbmRFbWFpbCA9PT0gZGF0YT8ubm90aWZ5T25GYWlsdXJlXHJcbiAgICApO1xyXG4gICAgbGV0IGlzVmFsaWRBc3NpZ25lZSA9IHRydWU7XHJcbiAgICBsZXQgaXNWYWxpZEFzc2lnbm9yID0gdHJ1ZTtcclxuICAgIGxldCBpc1ZhbGlkUmV2aWV3ZXIgPSB0cnVlO1xyXG4gICAgbGV0IGlzVmFsaWRPdmVyc2VlciA9IHRydWU7XHJcbiAgICBsZXQgaXNWYWxpZE5vdGlmeU9uRmFpbHVyZSA9IHRydWU7XHJcbiAgICBpZiAocHJvZ3JhbSAmJiB0aGlzLm9yZ0RldGFpbHM/Lmhhc1Byb2dyYW1GdWxsUGVybWlzc2lvbikge1xyXG4gICAgICBpZiAocHJvZ3JhbVswXT8uYXNzaWduZWU/Lmxlbmd0aCAmJiBzZWxlY3RlZEFzc2lnbmVlPy5sZW5ndGgpIHtcclxuICAgICAgICBpc1ZhbGlkQXNzaWduZWUgPSBwcm9ncmFtWzBdPy5hc3NpZ25lZT8uaW5jbHVkZXMoXHJcbiAgICAgICAgICBzZWxlY3RlZEFzc2lnbmVlWzBdPy5teV9tZW1iZXJfaWRcclxuICAgICAgICApXHJcbiAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHByb2dyYW1bMF0/LnJldmlld2VyPy5sZW5ndGggJiYgc2VsZWN0ZWRSZXZpZXdlcj8ubGVuZ3RoKSB7XHJcbiAgICAgICAgaXNWYWxpZFJldmlld2VyID0gcHJvZ3JhbVswXT8ucmV2aWV3ZXI/LmluY2x1ZGVzKFxyXG4gICAgICAgICAgc2VsZWN0ZWRSZXZpZXdlclswXT8ubXlfbWVtYmVyX2lkXHJcbiAgICAgICAgKVxyXG4gICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICA6IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChwcm9ncmFtWzBdPy5vdmVyc2Vlcj8ubGVuZ3RoICYmIHNlbGVjdGVkT3ZlcnNlZXI/Lmxlbmd0aCkge1xyXG4gICAgICAgIGlzVmFsaWRPdmVyc2VlciA9IHByb2dyYW1bMF0/Lm92ZXJzZWVyPy5pbmNsdWRlcyhcclxuICAgICAgICAgIHNlbGVjdGVkT3ZlcnNlZXJbMF0/Lm15X21lbWJlcl9pZFxyXG4gICAgICAgIClcclxuICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocHJvZ3JhbVswXT8ub3ZlcnNlZXI/Lmxlbmd0aCAmJiBzZWxlY3RlZE5vdGlmeU9uRmFpbHVyZT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgaXNWYWxpZE5vdGlmeU9uRmFpbHVyZSA9IHByb2dyYW1bMF0/Lm92ZXJzZWVyPy5pbmNsdWRlcyhcclxuICAgICAgICAgIHNlbGVjdGVkTm90aWZ5T25GYWlsdXJlWzBdPy5teV9tZW1iZXJfaWRcclxuICAgICAgICApXHJcbiAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGlzVmFsaWRBc3NpZ25lZTogaXNWYWxpZEFzc2lnbmVlLFxyXG4gICAgICBpc1ZhbGlkQXNzaWdub3I6IGlzVmFsaWRBc3NpZ25vcixcclxuICAgICAgaXNWYWxpZFJldmlld2VyOiBpc1ZhbGlkUmV2aWV3ZXIsXHJcbiAgICAgIGlzVmFsaWRPdmVyc2VlcjogaXNWYWxpZE92ZXJzZWVyLFxyXG4gICAgICBpc1ZhbGlkTm90aWZ5T25GYWlsdXJlOiBpc1ZhbGlkTm90aWZ5T25GYWlsdXJlLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEl0IHRha2VzIHR3byBzdHJpbmdzIGFzIGFyZ3VtZW50cywgYW5kIHJldHVybnMgYW4gb2JqZWN0IHdpdGggdGhyZWUgcHJvcGVydGllc1xyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9ncmFtTmFtZSAtIHN0cmluZyAtJmd0OyBOYW1lIG9mIHRoZSBwcm9ncmFtXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGlsZVByb2dyYW1dIC0gc3RyaW5nID0mZ3Q7IHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIHN1Yi1wcm9ncmFtXHJcbiAgICogQHJldHVybnMge1xyXG4gICAqICAgcHJvZ3JhbUlkOiAxLFxyXG4gICAqICAgY2hpbGRQcm9ncmFtSWQ6IDIsXHJcbiAgICogICBjYXRlZ29yeUlkOiAnMSwyJ1xyXG4gICAqIH1cclxuICAgKi9cclxuICBnZXRQcm9ncmFtSWQocHJvZ3JhbU5hbWU6IHN0cmluZywgY2hpbGVQcm9ncmFtPzogc3RyaW5nKTogYW55IHtcclxuICAgIGNvbnN0IHByb2dyYW0gPSB0aGlzLnRlbXBsYXRlSW5mbz8uY2F0ZWdvcnlMaXN0Py5maWx0ZXIoXHJcbiAgICAgIChwcm9ncmFtOiBhbnkpID0+IHByb2dyYW0/LnByb2dyYW1OYW1lID09PSBwcm9ncmFtTmFtZVxyXG4gICAgKTtcclxuICAgIGxldCBzdWJQcm9ncmFtO1xyXG4gICAgbGV0IHN1YlByb2dyYW1JZDtcclxuICAgIGxldCBjYXRlZ29yeUlkO1xyXG4gICAgaWYgKGNoaWxlUHJvZ3JhbT8ubGVuZ3RoICYmIHByb2dyYW0/Lmxlbmd0aCkge1xyXG4gICAgICBzdWJQcm9ncmFtID0gcHJvZ3JhbVswXT8uY2hpbGRDYXRlZ29yeT8uZmlsdGVyKFxyXG4gICAgICAgIChzdWJQcm9ncmFtOiBhbnkpID0+IHN1YlByb2dyYW0/Lm5hbWUgPT09IGNoaWxlUHJvZ3JhbVxyXG4gICAgICApO1xyXG4gICAgICBzdWJQcm9ncmFtSWQgPSBzdWJQcm9ncmFtPy5sZW5ndGggPyBzdWJQcm9ncmFtWzBdPy5pZCA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3ViUHJvZ3JhbUlkICYmIHByb2dyYW0/Lmxlbmd0aCkge1xyXG4gICAgICBjYXRlZ29yeUlkID1cclxuICAgICAgICBwcm9ncmFtWzBdPy5wcm9ncmFtSWQ/LnRvU3RyaW5nKCkgKyAnLCcgKyBzdWJQcm9ncmFtSWQ/LnRvU3RyaW5nKCk7XHJcbiAgICB9IGVsc2UgaWYgKHByb2dyYW0/Lmxlbmd0aCkge1xyXG4gICAgICBjYXRlZ29yeUlkID0gcHJvZ3JhbVswXT8ucHJvZ3JhbUlkPy50b1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcHJvZ3JhbUlkOiBwcm9ncmFtPy5sZW5ndGggPyBwcm9ncmFtWzBdPy5wcm9ncmFtSWQgOiB1bmRlZmluZWQsXHJcbiAgICAgIGNoaWxkUHJvZ3JhbUlkOiBzdWJQcm9ncmFtSWQsXHJcbiAgICAgIGNhdGVnb3J5SWQ6IGNhdGVnb3J5SWQsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSXQgdGFrZXMgYSBzdHJpbmcgYXMgYW4gYXJndW1lbnQgYW5kIHJldHVybnMgYSBzdHJpbmcuXHJcbiAgICogQHBhcmFtIHthbnl9IGl0ZW0gLSB0aGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBncm91cCB0aGF0IGlzIHNlbGVjdGVkIGZyb20gdGhlIGRyb3Bkb3duLlxyXG4gICAqIGl0IHdpbGwgcmV0dXJuIGVtcGxveWVlIGlkIGluIHRoaXMgZm9ybSAnMTIzNCwyMzQ1Jy5cclxuICAgKi9cclxuICBnZXRFbXBsb3llZUlkRnJvbUdyb3VwKGl0ZW06IGFueSkge1xyXG4gICAgbGV0IGVtcElkOiBhbnkgPSBbXTtcclxuICAgIGxldCBlbXBsb3llZV9pZDogYW55ID0gW107XHJcbiAgICB0aGlzLnRlbXBsYXRlSW5mbz8uYXNzaWduZWVzTGlzdD8uZm9yRWFjaCgoZW5FbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgaWYgKGVuRWxlbWVudD8ubmFtZUFuZEVtYWlsID09IGl0ZW0pIHtcclxuICAgICAgICBlbXBJZCA9IGVuRWxlbWVudD8ubXlfbWVtYmVyX2lkO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGlmIChlbXBJZD8ubGVuZ3RoKSB7XHJcbiAgICAgIGVtcElkPy5mb3JFYWNoKChpZDogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8/LnJldmlld2VyTGlzdC5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmICh1c2VyPy5teV9tZW1iZXJfaWQgPT0gaWQpIHtcclxuICAgICAgICAgICAgZW1wbG95ZWVfaWQ/LnB1c2godXNlcj8uZW1wbG95ZWVfaWQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBlbXBsb3llZV9pZD8udG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRoZSBpdGVtIGlzIGEgZ3JvdXAsIHJldHVybiB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAqIEBwYXJhbSB7YW55fSBpdGVtIC0gYW55IC0gdGhlIGl0ZW0gdGhhdCBpcyBiZWluZyBjaGVja2VkXHJcbiAgICovXHJcbiAgaXNHcm91cFNlbGVjdGVkKGl0ZW06IGFueSkge1xyXG4gICAgbGV0IGlzR3JvdXAgPSBmYWxzZTtcclxuICAgICh0aGlzLnRlbXBsYXRlSW5mbz8uYXNzaWduZWVzTGlzdCB8fCBbXSkuZm9yRWFjaCgoZW5FbGVtZW50OiBhbnkpOiBhbnkgPT4ge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgZW5FbGVtZW50Lm5hbWVBbmRFbWFpbCA9PSBpdGVtICYmXHJcbiAgICAgICAgKGl0ZW0/LmluY2x1ZGVzKCdVc2VycyknKSB8fCBpdGVtPy5pbmNsdWRlcygnVXNlciknKSkgJiZcclxuICAgICAgICB0eXBlb2YgZW5FbGVtZW50Py5teV9tZW1iZXJfaWQgPT0gJ29iamVjdCdcclxuICAgICAgKSB7XHJcbiAgICAgICAgaXNHcm91cCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGlzR3JvdXA7XHJcbiAgfVxyXG59XHJcbiIsIjwhLS0gPGRpdiBjbGFzcz1cImFkZC1tdWx0aXBsZS1yaXNrXCIgW2F0dHIuaWRdPVwiJ3Njcm9sbFJlZmVyZW5jZSdcIiA+XHJcbiAgICA8IS0gLSBtYWluIGNvbnRhaW5lciBzdGFydHMgaGVyZSAtIC0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYWRkLW11bHRpcGxlLXJpc2stYm9keVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhZGQtbXVsdGlwbGUtcmlzay1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvd29ya2Zsb3ctZW5naW5lL2Fzc2V0cy93b3JrZmxvdy9zcHJlYWRzaGVldC1tdWx0aXBsZS1jYXRlZ29yeS5zdmdcIiBhbHQ9XCJcIiAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGg0PllvdSBjYW4gZW50cnVzdCBtdWx0aXBsZSByZXNwb25zaWJpbGl0aWVzIGluIGp1c3QgdHdvIGVhc3kgc3RlcHM6PC9oND5cclxuICAgICAgICAgICAgPHVsIGNsYXNzPVwibGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgPGxpPkRvd25sb2FkIHRoZSB0ZW1wbGF0ZSBhbmQgZmlsbCBpbiB0aGUgZGV0YWlscy48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPlVwbG9hZCB0aGUgLnhsc3ggZmlsZSBhbmQgeW914oCZcmUgZ29vZCB0byBnbyE8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRvd25sb2FkXCIgKm5nSWY9XCJkb3dubG9hZFN0YXR1cyA9PT0gJ05PVF9ET1dOTE9BRElORydcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiZG93bmxvYWRUZW1wbGF0ZSgpXCIgdHlwZT1cImJ1dHRvblwiPjxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTFiOzwvaT4gRG93bmxvYWQgVGVtcGxhdGU8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1bGstYnRuLXByb2dyZXNzXCIgKm5nSWY9XCJkb3dubG9hZFN0YXR1cyA9PT0gJ0RPV05MT0FESU5HJ1wiPlxyXG4gICAgICAgICAgICAgICAgRG93bmxvYWQgaW4gUHJvZ3Jlc3NcclxuICAgICAgICAgICAgICAgIDxhcHAtbGluZS1sb2FkZXIgW2xvYWRlckhlaWdodF09XCInMidcIj48L2FwcC1saW5lLWxvYWRlcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkb3dubG9hZFN0YXR1cyA9PT0gJ0RPV05MT0FERUQnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnVsay1idG4tcHJvZ3Jlc3NcIj48aSBjbGFzcz1cImljb25zXCI+JiN4ZTkxYzs8L2k+RG93bmxvYWQgQ29tcGxldGU8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidWxrLWJ0bi1hZ2FpblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIElzIHRoZSBmaWxlIG5vdCBkb3dubG9hZGVkP1xyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImRvd25sb2FkVGVtcGxhdGUoKVwiPlJldHJ5IERvd25sb2FkPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxwIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiICpuZ0lmPVwiaXNXcm9uZ0ZpbGUgfHwgaXNXcm9uZ0Zvcm1hdHx8IGlzRmlsZUVtcHR5XCJcclxuICAgICAgICAgICAgPnt7ZXJyb3JNZXNzYWdlfX08L3A+ICBcclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4gLS0+XHJcbjxhcHAtYnVsay1yZXNwb25zaWJpbGl0eS12aWV3ICpuZ0lmPVwic2hvd0V4Y2VsXCJcclxuICAgIFtyZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWRdPVwicmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkXCJcclxuICAgIFtidWxrVXBsb2FkXT1cImJ1bGtVcGxvYWRcIlxyXG4gICAgW2ZpbGVOYW1lXT1cImZpbGVOYW1lXCJcclxuICAgIFtsb2FkZXJdPVwibG9hZGVyXCJcclxuICAgIFtkZWZhdWx0T3duZXJdPVwiZGVmYXVsdE93bmVyXCJcclxuICAgIFt0YWJUeXBlXT1cInRhYlR5cGVcIlxyXG4gICAgW2J1bGtVcGxvYWRdPVwiYnVsa1VwbG9hZFwiXHJcbiAgICAoc3VibWl0UmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkKT1cInN1Ym1pdFJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCgpXCJcclxuICAgIChzZWxlY3RlZFRhYik9XCJzZWxlY3RlZFRhYigkZXZlbnQpXCJcclxuICAgIChjYW5jZWwpPVwicmVzZXQoKVwiXHJcbiAgICBbcmVzcG9uc2liaWxpdHlUeXBlXT1cIidtdWx0aVRhYidcIj5cclxuPC9hcHAtYnVsay1yZXNwb25zaWJpbGl0eS12aWV3PlxyXG48YXBwLWxvYWRlci1pbmxpbmUgKm5nSWY9XCJsb2FkZXJcIj48L2FwcC1sb2FkZXItaW5saW5lPlxyXG5cclxuPGlucHV0IHR5cGU9XCJmaWxlXCIgWyhuZ01vZGVsKV09XCJmaWxlVmFsdWVcIiBpZD1cImZpbGVJbnB1dFwiIGNsYXNzPVwiaGlkZGVuLWlucHV0XCIgYWNjZXB0PVwiLnhsc3hcIiAoY2hhbmdlKT1cInVwbG9hZGVkRmlsZSgkZXZlbnQpXCIgbXVsdGlwbGUgLz5cclxuPGFwcC1zbWlsZXktZGlhbG9nLWlubGluZSAqbmdJZj1cInNob3dTbWlsZXlcIiBbbWVzc2FnZV09XCJzbWlsZXlNZXNzYWdlXCIgW2FjdGlvbkJ1dHRvbnNdPVwiYWN0aW9uQnV0dG9uc1wiIChhY3Rpb24pPVwiYWN0aW9uKCRldmVudClcIiAoY2xvc2VTbWlsZXkpPVwiY2xvc2VTbWlsZXkoJGV2ZW50KVwiPjwvYXBwLXNtaWxleS1kaWFsb2ctaW5saW5lPiJdfQ==
2236
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLW11bHRpcGxlLXJlc3BvbnNpYmlsaXR5LXdpdGgtdGFiLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL2FkZC1tdWx0aXBsZS1yZXNwb25zaWJpbGl0eS13aXRoLXRhYi9hZGQtbXVsdGlwbGUtcmVzcG9uc2liaWxpdHktd2l0aC10YWIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdngtd29ya2Zsb3ctZW5naW5lL3NyYy9saWIvYWRkLW11bHRpcGxlLXJlc3BvbnNpYmlsaXR5LXdpdGgtdGFiL2FkZC1tdWx0aXBsZS1yZXNwb25zaWJpbGl0eS13aXRoLXRhYi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxHQUliLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEMsT0FBTyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBQ25DLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBTzdCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLHVCQUF1QixFQUN2QixnQkFBZ0IsRUFDaEIsNEJBQTRCLEVBQzVCLDBCQUEwQixFQUMxQixxQkFBcUIsRUFDckIsMkJBQTJCLEVBQzNCLGVBQWUsRUFDZixpQkFBaUIsRUFDakIsd0JBQXdCLEVBQ3hCLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQiwyQkFBMkIsR0FDNUIsTUFBTSw2QkFBNkIsQ0FBQztBQUVyQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7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SUFBSSxJQUFJO2dCQUM5QixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDckQsT0FBTyxTQUFTLEVBQUUsWUFBWSxJQUFJLFFBQVEsRUFDMUM7Z0JBQ0EsT0FBTyxHQUFHLElBQUksQ0FBQzthQUNoQjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQzsrR0E5MEZVLHlDQUF5QzttR0FBekMseUNBQXlDLDRjQ2xEdEQsK3FGQStDZ007OzRGREduTCx5Q0FBeUM7a0JBUnJELFNBQVM7K0JBQ0UsMENBQTBDO2dTQVExQyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBRUcsOEJBQThCO3NCQUF2QyxNQUFNO2dCQWdCb0IsZ0JBQWdCO3NCQUExQyxLQUFLO3VCQUFDLGNBQWM7Z0JBR1osVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBbUZHLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25Jbml0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gtZXMnO1xyXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudC9tb21lbnQnO1xyXG5pbXBvcnQgKiBhcyBYTFNYIGZyb20gJ3hsc3gnO1xyXG5pbXBvcnQgeyBTbmFja0JhclNlcnZpY2UgfSBmcm9tICcuLi91aS1raXQvc25hY2stYmFyL3NuYWNrLWJhci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWRkUmlza1NlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9hZGQtcmlzay5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGcmVxdWVuY3lCdWxrU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL2ZyZXF1ZW5jeS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVzcG9uc2liaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvcmVzcG9uc2liaWxpdHkuc2VydmljZSc7XHJcbmltcG9ydCB7IElmcmFtZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9pZnJhbWUuc2VydmljZSc7XHJcbmltcG9ydCB7IFJFU1BPTlNJQklMSVRZIH0gZnJvbSAnLi4vY29uc3RhbnRzL3hsc3guY29uc3RhbnQnO1xyXG5pbXBvcnQge1xyXG4gIEFTU0lHTkVFX1RZUEVfRFJPUERPV05fTElTVCxcclxuICBGUkVRVUVOQ1lfRFJPUERPV05fTElTVCxcclxuICBGVUxMX01PTlRIX05BTUVTLFxyXG4gIE5PTl9CTE9DS0lOR19EUk9QRE9XTl9GSUVMRFMsXHJcbiAgUFJPR1JBTV9UWVBFX0RST1BET1dOX0xJU1QsXHJcbiAgUkNfVFlQRV9EUk9QRE9XTl9MSVNULFxyXG4gIFJFVklFV0VSX1RZUEVfRFJPUERPV05fTElTVCxcclxuICBSSVNLX0NMQVNTX0xJU1QsXHJcbiAgU0hPUlRfTU9OVEhfTkFNRVMsXHJcbiAgRklMRV9WQUxJREFUSU9OX01FU1NBR0VTLFxyXG4gIFZBTElEQVRJT05fTUVTU0FHRVMsXHJcbiAgVkFMSURBVElPTl9TRVZFUklUWSxcclxuICBXRUVLREFZX0ZSRVFVRU5DSUVTLFxyXG4gIFlFU19OT19EUk9QRE9XTl9MSVNULFxyXG4gIGR1ZURhdGVEYXlPdXRPZlJhbmdlTWVzc2FnZSxcclxufSBmcm9tICcuLi9jb25zdGFudHMvcmVzcG9uc2liaWxpdHknO1xyXG5pbXBvcnQgeyBCdWxrVXBsb2FkU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2J1bGstdXBsb2FkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSRUdFWCB9IGZyb20gJy4uL2NvbnN0YW50cy9yZWdpeC5jb25zdGFudHMnO1xyXG5cclxudHlwZSBBT0EgPSBhbnlbXVtdO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItYWRkLW11bHRpcGxlLXJlc3BvbnNpYmlsaXR5LXdpdGgtdGFiJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWRkLW11bHRpcGxlLXJlc3BvbnNpYmlsaXR5LXdpdGgtdGFiLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFtcclxuICAgICcuL2FkZC1tdWx0aXBsZS1yZXNwb25zaWJpbGl0eS13aXRoLXRhYi5jb21wb25lbnQubGVzcycsXHJcbiAgICAnLi4vZm9ybXMubGVzcycsXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFkZE11bHRpcGxlUmVzcG9uc2liaWxpdHlXaXRoVGFiQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAT3V0cHV0KCkgcGlja2VyQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcG9wdWxhdGVPcHRpb24gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNsb3NlV29ya2Zsb3cgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGRpc2Nvbm5lY3RSZWZyZXNoID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIGlzTm90aWZpY2F0aW9uUGVuZGluZyA9IDA7XHJcbiAgQE91dHB1dCgpIGNsb3NlQWRkTXVsdGlwbGVSZXNwb25zaWJpbGl0eSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBxdWVyeVBhcmFtOiBzdHJpbmcgPSAnJztcclxuICByZWNlbnRSZXNwb25zaWJpbGl0eVVybDogYW55ID0ge1xyXG4gICAgYnlSZXNwb25zaWJpbGl0aWVzOiB7IHR5cGU6IFsncmVjZW50X3Jlc3BvbnNpYmlsaXRpZXMnXSwgc3ViVHlwZTogWydDQyddIH0sXHJcbiAgICBieVN0YXR1czogeyB0eXBlOiBbXSwgc3ViVHlwZTogW10gfSxcclxuICAgIGZpbHRlck9iamVjdDoge1xyXG4gICAgICByZXNwb25zaWJpbGl0eUNlbnRlcjogW10sXHJcbiAgICAgIGVudHJ1c3RlZEJ5OiBbXSxcclxuICAgICAgZW50cnVzdGVkVG86IFtdLFxyXG4gICAgICByaXNrSWRzOiBbXSxcclxuICAgICAgcmVzcG9uc2liaWxpdHlDYXRlZ29yeTogW10sXHJcbiAgICB9LFxyXG4gICAgdGltZVBlcmlvZERldGFpbHM6IHsgdHlwZTogJycsIHNlbGVjdGVkUGVyaW9kOiAnJywgc2VsZWN0ZWRZZWFyOiAnJyB9LFxyXG4gICAgc3RhdHVzOiAnJyxcclxuICB9O1xyXG5cclxuICBASW5wdXQoJ3VwbG9hZGVkRmlsZScpIHNldCB1cGxvYWRlZEZpbGVEYXRhKGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy51cGxvYWRlZEZpbGUoZGF0YSk7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIG9yZ0RldGFpbHMhOiBhbnk7XHJcbiAgQElucHV0KCkgZmVhdHVyZSE6IGFueTtcclxuXHJcbiAgdXJsID1cclxuICAgICdxPXtcImJ5UmVzcG9uc2liaWxpdGllc1wiOntcInR5cGVcIjpbXCJyZXNwb25zaWJpbGl0aWVzX2luX3F1ZXVlXCJdLFwic3ViVHlwZVwiOltcIkNDXCJdfSxcImJ5U3RhdHVzXCI6e1widHlwZVwiOltcInJlc3BvbnNpYmlsaXRpZXNfaW5fcXVldWVcIl0sXCJzdWJUeXBlXCI6W119LFwiZmlsdGVyT2JqZWN0XCI6e1wicmVzcG9uc2liaWxpdHlDZW50ZXJcIjpbXSxcImVudHJ1c3RlZEJ5XCI6W10sXCJlbnRydXN0ZWRUb1wiOltdLFwicmlza0lkc1wiOltdLFwicmVzcG9uc2liaWxpdHlDYXRlZ29yeVwiOltdfSxcInRpbWVQZXJpb2REZXRhaWxzXCI6e1widHlwZVwiOlwiXCIsXCJzZWxlY3RlZFBlcmlvZFwiOlwiXCIsXCJzZWxlY3RlZFllYXJcIjpcIlwifSxcInN0YXR1c1wiOlwiXCJ9JztcclxuICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ6IGFueSA9IHtcclxuICAgIGhlYWRlcjogW10sXHJcbiAgICByZXBvcnRzOiBbXSxcclxuICB9O1xyXG4gIHRhYlR5cGU6ICdmcmVxdWVuY3knIHwgJ29uZ29pbmcnIHwgJ29uQ29tcGxldGlvbicgPSAnZnJlcXVlbmN5JztcclxuICB0YWJJbmRleDogYW55ID0ge1xyXG4gICAgZnJlcXVlbmN5OiAwLFxyXG4gICAgb25nb2luZzogMSxcclxuICAgIG9uQ29tcGxldGlvbjogMixcclxuICB9O1xyXG5cclxuICBidWxrVXBsb2FkOiBhbnkgPSB7XHJcbiAgICBmcmVxdWVuY3k6IHtcclxuICAgICAgaGVhZGVyOiBbXSxcclxuICAgICAgc3ViSGVhZGluZzogW10sXHJcbiAgICAgIHJlcG9ydHM6IFtdLFxyXG4gICAgfSxcclxuICAgIG9uZ29pbmc6IHtcclxuICAgICAgaGVhZGVyOiBbXSxcclxuICAgICAgc3ViSGVhZGluZzogW10sXHJcbiAgICAgIHJlcG9ydHM6IFtdLFxyXG4gICAgfSxcclxuICAgIG9uQ29tcGxldGlvbjoge1xyXG4gICAgICBoZWFkZXI6IFtdLFxyXG4gICAgICBzdWJIZWFkaW5nOiBbXSxcclxuICAgICAgcmVwb3J0czogW10sXHJcbiAgICB9LFxyXG4gIH07XHJcblxyXG4gIHRlbXBsYXRlSW5mbzogYW55ID0ge1xyXG4gICAgY2F0ZWdvcnlMaXN0OiBbXSxcclxuICAgIHJjTGlzdDogW10sXHJcbiAgICBhc3NpZ25vcnNMaXN0OiBbXSxcclxuICAgIGFzc2lnbmVlc0xpc3Q6IFtdLFxyXG4gICAgcmV2aWV3ZXJMaXN0OiBbXSxcclxuICAgIHBhcmVudFJlc3BvbnNpYmlsaXR5OiBbXSxcclxuICAgIHBlb3BsZURyb3Bkb3duTmFtZXM6IFtdLFxyXG4gICAgbWVtYmVySWQ6ICcnLFxyXG4gIH07XHJcbiAgaXNMb2FkZXIgPSBmYWxzZTtcclxuICBzaG93Q2F0ZWdvcnlMaXN0ID0gZmFsc2U7XHJcbiAgdGVtcGxhdGVEb3dubG9hZGVkID0gZmFsc2U7XHJcbiAgZG93bmxvYWRJblByb2dyZXNzID0gZmFsc2U7XHJcbiAgbG9hZGVyID0gZmFsc2U7XHJcbiAgaXNGaWxlRW1wdHkgPSBmYWxzZTtcclxuICBpc1dyb25nRmlsZSA9IGZhbHNlO1xyXG4gIGlzV3JvbmdGb3JtYXQgPSBmYWxzZTtcclxuICBmaWxlTmFtZTogYW55O1xyXG4gIGRhdGE6IGFueTtcclxuICBzaG93RXhjZWwgPSBmYWxzZTtcclxuICB1cGxvYWRlZEZpbGVzOiBhbnkgPSBbXTtcclxuICBmaWxlUmVzcG9uc2U6IGFueSA9IFtdO1xyXG4gIGZpbGVWYWx1ZTogYW55O1xyXG4gIG1lbWJlcklkID0gMDtcclxuICBvcmdhbml6YXRpb25JZCA9IDA7XHJcbiAgZXJyb3JNZXNzYWdlID0gJyBpbnZhbGlkIGZpbGUgZXJyb3InO1xyXG4gIGRvd25sb2FkU3RhdHVzOiBzdHJpbmcgPSAnTk9UX0RPV05MT0FESU5HJztcclxuICBkb3dubG9hZFBlcmNlbnQgPSAwO1xyXG4gIGRlZmF1bHRPd25lciA9ICcnO1xyXG4gIHNtaWxleU1lc3NhZ2UgPSBgWW91J3JlIEFsbCBTZXQhIFdlJ3JlIHByb2Nlc3NpbmcgeW91ciByZXF1ZXN0IGFuZCB5b3Ugd2lsbCBiZSBub3RpZmllZCB2aWEgZW1haWwgdXBvbiBjb21wbGV0aW9uLmA7XHJcbiAgYWN0aW9uQnV0dG9ucyA9IFtcclxuICAgIHtcclxuICAgICAgYnV0dG9uVGV4dDogJ0VudHJ1c3QgTW9yZSBSZXNwb25zaWJpbGl0aWVzJyxcclxuICAgICAgY2xhc3M6ICd3aGl0ZS1idG4nLFxyXG4gICAgICBpZDogJ2FkZE1vcmUnLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgYnV0dG9uVGV4dDogdGhpcy5pc05vdGlmaWNhdGlvblBlbmRpbmdcclxuICAgICAgICA/ICdWaWV3IFJlc3BvbnNpYmlsaXRpZXMgSW4gUXVldWUnXHJcbiAgICAgICAgOiAnVmlldyBSZXNwb25zaWJpbGl0aWVzJyxcclxuICAgICAgY2xhc3M6ICdibHVlLWJ0bicsXHJcbiAgICAgIGlkOiAndmlldycsXHJcbiAgICB9LFxyXG4gIF07XHJcbiAgc2hvd1NtaWxleSA9IGZhbHNlO1xyXG4gIG1lbWJlcl9vYmpfaWQgPSAnJztcclxuICByaXNrQ2xhc3NFbmFibGVkOiBhbnk7XHJcbiAgdXNlckluZm8hOiBhbnk7XHJcbiAgcmVzcG9uc2liaWxpdHlEYXRhITogYW55O1xyXG4gIEBJbnB1dCgpIGZlYXR1cmVmbGFnOiBhbnk7XHJcbiAgZmZCdWxrVXBsb2FkT3B0aW1pemF0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgUkVTUE9OU0lCSUxJVFkgPSBSRVNQT05TSUJJTElUWTtcclxuXHJcbiAgaXNEYXlJbnZhbGlkID0gZmFsc2U7XHJcbiAgaXNEYXRlRm9ybWF0SW52YWxpZCA9IGZhbHNlO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByaXNrU2VydmljZTogQWRkUmlza1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc3BvbnNpYmlsaXR5U2VydmljZTogUmVzcG9uc2liaWxpdHlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZyZXF1ZW5jeVNlcnZpY2U6IEZyZXF1ZW5jeUJ1bGtTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogU25hY2tCYXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBpZnJhbWVTZXJ2aWNlOiBJZnJhbWVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBidWxrVXBsb2FkU2VydmljZTogQnVsa1VwbG9hZFNlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHt9XHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnBpY2tlckNoYW5nZWQuZW1pdChmYWxzZSk7XHJcbiAgICB0aGlzLm9yZ2FuaXphdGlvbklkID0gdGhpcy5hdXRoU2VydmljZS5nZXRPcmdhbml6YXRpb25JZCgpO1xyXG4gICAgdGhpcy5tZW1iZXJfb2JqX2lkID0gdGhpcy5hdXRoU2VydmljZS5nZXRVc2VyRGV0YWlscygpLnVzZXIudWlkO1xyXG4gICAgdGhpcy51c2VySW5mbyA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0VXNlckRldGFpbHMoKS51c2VyO1xyXG4gICAgdGhpcy5kZWZhdWx0T3duZXIgPSB0aGlzLnVzZXJJbmZvXHJcbiAgICAgID8gdGhpcy51c2VySW5mby5uYW1lICsgJyAoJyArIHRoaXMudXNlckluZm8uZW1haWwgKyAnKSdcclxuICAgICAgOiAnJztcclxuICAgIHRoaXMuZ2V0VXNlckRldGFpbHMoKTtcclxuICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uRGV0YWlscygpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5yaXNrQ2xhc3NFbmFibGVkID0gcmVzLmVuYWJsZV9yaXNrY2xhc3M7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZmZCdWxrVXBsb2FkT3B0aW1pemF0aW9uID0gdGhpcy5mZWF0dXJlLmlzRmVhdHVyZUVuYWJsZWQoXHJcbiAgICAgICdmZl9idWxrX3VwbG9hZF9vcHRpbWl6YXRpb24nXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlckJyb3dzZUZpbGUoKSB7XHJcbiAgICBjb25zdCBnZXRGaWxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGVJbnB1dCcpO1xyXG4gICAgaWYgKGdldEZpbGUpIHtcclxuICAgICAgZ2V0RmlsZS5jbGljaygpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXRVc2VyRGV0YWlscygpIHtcclxuICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0VXNlckluZm8oKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuaXNOb3RpZmljYXRpb25QZW5kaW5nID0gcmVzLm5vdGlmaWNhdGlvbl9wZW5kaW5nX2ZsYWc7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHVwbG9hZGVkRmlsZShldmVudDogYW55LCB0YWJUeXBlPzogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCA9IHtcclxuICAgICAgICBoZWFkZXI6IFtdLFxyXG4gICAgICAgIHJlcG9ydHM6IFtdLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy50ZW1wbGF0ZUluZm8gPSB7XHJcbiAgICAgICAgY2F0ZWdvcnlMaXN0OiBbXSxcclxuICAgICAgICByY0xpc3Q6IFtdLFxyXG4gICAgICAgIGFzc2lnbm9yc0xpc3Q6IFtdLFxyXG4gICAgICAgIGFzc2lnbmVlc0xpc3Q6IFtdLFxyXG4gICAgICAgIHJldmlld2VyTGlzdDogW10sXHJcbiAgICAgICAgcGFyZW50UmVzcG9uc2liaWxpdHk6IFtdLFxyXG4gICAgICAgIHBlb3BsZURyb3Bkb3duTmFtZXM6IFtdLFxyXG4gICAgICAgIG1lbWJlcklkOiAnJyxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy51cGxvYWRlZEZpbGVzID0gW107XHJcbiAgICAgIGNvbnN0IHJlZmVyZW5jZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNzY3JvbGxSZWZlcmVuY2UnKTtcclxuICAgICAgaWYgKHJlZmVyZW5jZSkge1xyXG4gICAgICAgIHJlZmVyZW5jZS5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdjZW50ZXInIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaXNGaWxlRW1wdHkgPSBmYWxzZTtcclxuICAgICAgdGhpcy5pc1dyb25nRmlsZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGb3JtYXQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5maWxlTmFtZSA9IGV2ZW50LnRhcmdldC5maWxlc1swXS5uYW1lO1xyXG4gICAgICB0aGlzLnVwbG9hZGVkRmlsZXMucHVzaChldmVudC50YXJnZXQuZmlsZXMpO1xyXG4gICAgICBjb25zdCB0YXJnZXQ6IERhdGFUcmFuc2ZlciA9IGV2ZW50LnRhcmdldCBhcyBEYXRhVHJhbnNmZXI7XHJcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogY3VybHlcclxuICAgICAgaWYgKHRhcmdldC5maWxlcy5sZW5ndGggIT09IDEpXHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgdXNlIG11bHRpcGxlIGZpbGVzJyk7XHJcbiAgICAgIGNvbnN0IHJlYWRlcjogRmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgYnN0cjogc3RyaW5nID0gZS50YXJnZXQucmVzdWx0O1xyXG4gICAgICAgIGNvbnN0IHdiOiBYTFNYLldvcmtCb29rID0gWExTWC5yZWFkKGJzdHIsIHsgdHlwZTogJ2JpbmFyeScgfSk7XHJcbiAgICAgICAgY29uc3Qgd3NuYW1lOiBzdHJpbmcgPSB3Yi5TaGVldE5hbWVzW1JFU1BPTlNJQklMSVRZLnNoZWV0SW5kZXguZnJlcXVlbmN5UmVzcG9uc2liaWxpdHldO1xyXG4gICAgICAgIGNvbnN0IHNoZWV0Mjogc3RyaW5nID0gd2IuU2hlZXROYW1lc1tSRVNQT05TSUJJTElUWS5zaGVldEluZGV4Lm9uR29pbmdSZXNwb25zaWJpbGl0eV07XHJcbiAgICAgICAgY29uc3Qgd3NuYW1lMTogc3RyaW5nID0gd2IuU2hlZXROYW1lc1tSRVNQT05TSUJJTElUWS5zaGVldEluZGV4LmRhdGFdO1xyXG4gICAgICAgIGNvbnN0IHdzOiBYTFNYLldvcmtTaGVldCA9IHdiLlNoZWV0c1t3c25hbWVdO1xyXG4gICAgICAgIGNvbnN0IHNoZWV0UmVwb3J0MjogWExTWC5Xb3JrU2hlZXQgPSB3Yi5TaGVldHNbc2hlZXQyXTtcclxuICAgICAgICBjb25zdCB0ZW1wRGF0YTogWExTWC5Xb3JrU2hlZXQgPSB3Yi5TaGVldHNbd3NuYW1lMV07XHJcbiAgICAgICAgY29uc3QgdERhdGEgPSBYTFNYLnV0aWxzLnNoZWV0X3RvX2pzb24odGVtcERhdGEsIHsgaGVhZGVyOiAxIH0pIGFzIEFPQTtcclxuICAgICAgICBjb25zdCB0ZW1wTGlzdCA9IHREYXRhLmZpbHRlcihcclxuICAgICAgICAgIChkYXRhRWxlbWVudDogYW55KSA9PiBkYXRhRWxlbWVudC5sZW5ndGggPiAwXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnNldE9yZ2FuaXphdGlvbkRldGFpbHModGVtcExpc3QpO1xyXG4gICAgICAgIGNvbnN0IGZyZXF1ZW5jeUhlYWRlcnMgPSB0aGlzLmJ1bGtVcGxvYWRTZXJ2aWNlLmdldEhlYWRlclJvd3Mod3MpO1xyXG4gICAgICAgIGNvbnN0IG9uZ29pbmdIZWFkZXJzID0gdGhpcy5idWxrVXBsb2FkU2VydmljZS5nZXRIZWFkZXJSb3dzKHNoZWV0UmVwb3J0Mik7XHJcbiAgICAgICAgY29uc3QgY29sdW1uRXJyb3IgPSB0aGlzLmJ1bGtVcGxvYWRTZXJ2aWNlLnZhbGlkYXRlUmVzcG9uc2liaWxpdHlIZWFkZXJzKFtcclxuICAgICAgICAgIHsgLi4uZnJlcXVlbmN5SGVhZGVycywgc2hlZXQ6ICdmcmVxdWVuY3knIH0sXHJcbiAgICAgICAgICB7IC4uLm9uZ29pbmdIZWFkZXJzLCBzaGVldDogJ29uZ29pbmcnIH0sXHJcbiAgICAgICAgXSk7XHJcbiAgICAgICAgaWYgKHRoaXMuYmxvY2tVcGxvYWRGb3JDb2x1bW5FcnJvcihjb2x1bW5FcnJvcikpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgd2IuU2hlZXROYW1lcy5mb3JFYWNoKChzaGVldDogYW55KSA9PiB7XHJcbiAgICAgICAgICBzd2l0Y2ggKHNoZWV0Py50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ZyZXF1ZW5jeSByZXNwb25zaWJpbGl0aWVzJzpcclxuICAgICAgICAgICAgICB0aGlzLnNldERhdGFGb3JEaWZmZXJlbnRUYWJzKHdzLCBzaGVldCk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ29uZ29pbmcgcmVzcG9uc2liaWxpdGllcyc6XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXREYXRhRm9yRGlmZmVyZW50VGFicyhzaGVldFJlcG9ydDIsIHNoZWV0KTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfTtcclxuICAgICAgcmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyh0YXJnZXQuZmlsZXNbMF0pO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYmxvY2tVcGxvYWRGb3JDb2x1bW5FcnJvcihjb2x1bW5FcnJvcjogJ29rJyB8ICdtaXNzaW5nJyB8ICdleHRyYScgfCBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmIChjb2x1bW5FcnJvciAhPT0gJ21pc3NpbmcnICYmIGNvbHVtbkVycm9yICE9PSAnZXh0cmEnKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuZXJyb3JNZXNzYWdlID1cclxuICAgICAgY29sdW1uRXJyb3IgPT09ICdleHRyYSdcclxuICAgICAgICA/IEZJTEVfVkFMSURBVElPTl9NRVNTQUdFUy5FWFRSQV9DT0xVTU5TXHJcbiAgICAgICAgOiBGSUxFX1ZBTElEQVRJT05fTUVTU0FHRVMuSEVBREVSU19NSVNTSU5HO1xyXG4gICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNGaWxlRW1wdHkgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0V4Y2VsID0gZmFsc2U7XHJcbiAgICB0aGlzLmZpbGVWYWx1ZSA9ICcnO1xyXG4gICAgdGhpcy5zbmFja0Jhci5zaG93KHRoaXMuZXJyb3JNZXNzYWdlLCAnYWxlcnQnKTtcclxuICAgIHRoaXMuY2xvc2VBZGRNdWx0aXBsZVJlc3BvbnNpYmlsaXR5LmVtaXQoKTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSXQgdGFrZXMgYSB3b3Jrc2hlZXQgYW5kIGEgc2hlZXQgbmFtZSwgYW5kIHRoZW4gaXQgc2V0cyB0aGUgZGF0YSBmb3IgZGlmZmVyZW50IHRhYnMuXHJcbiAgICogQHBhcmFtIHdzIC0gWExTWC5Xb3JrU2hlZXQsIHNoZWV0OiBzdHJpbmdcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2hlZXQgLSBzdHJpbmcgLSB0aGUgbmFtZSBvZiB0aGUgc2hlZXQgaW4gdGhlIGV4Y2VsIGZpbGVcclxuICAgKiBAcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIFwicmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkXCIgd2hpY2ggaXMgYW4gb2JqZWN0LlxyXG4gICAqL1xyXG4gIHNldERhdGFGb3JEaWZmZXJlbnRUYWJzKHdzOiBYTFNYLldvcmtTaGVldCwgc2hlZXQ6IHN0cmluZykge1xyXG4gICAgbGV0IHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZDogYW55ID0ge1xyXG4gICAgICBoZWFkZXI6IFtdLFxyXG4gICAgICByZXBvcnRzOiBbXSxcclxuICAgICAgc3ViSGVhZGluZzogW10sXHJcbiAgICB9O1xyXG4gICAgbGV0IHNoZWV0VmFsdWUgPSBYTFNYLnV0aWxzLnNoZWV0X3RvX2pzb24od3MsIHtcclxuICAgICAgaGVhZGVyOiAxLFxyXG4gICAgICByYXc6IGZhbHNlLFxyXG4gICAgfSkgYXMgQU9BO1xyXG4gICAgbGV0IGRhdGEgPSBzaGVldFZhbHVlLmZpbHRlcigocmVzOiBhbnkpID0+IHtcclxuICAgICAgbGV0IGlzVW5kZWZpbmVkID0gJyc7XHJcbiAgICAgIHJlcy5mb3JFYWNoKChlbDogYW55KSA9PiB7XHJcbiAgICAgICAgaXNVbmRlZmluZWQgPSBpc1VuZGVmaW5lZCArIGVsO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKHNoZWV0VmFsdWVbMl0gJiYgc2hlZXRWYWx1ZVsyXVsxXSA9PT0gJ1Byb2dyYW0nKSB7XHJcbiAgICAgICAgcmV0dXJuICEocmVzPy5sZW5ndGggPT09IDkgJiYgcmVzWzhdID09PSAnJyAmJiAhaXNVbmRlZmluZWQubGVuZ3RoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gIShyZXM/Lmxlbmd0aCA9PT0gNiAmJiByZXNbNV0gPT09ICcnICYmICFpc1VuZGVmaW5lZC5sZW5ndGgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5maWxlTmFtZS5zdWJzdHIoLTUpICE9PSAnLnhsc3gnKSB7XHJcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID1cclxuICAgICAgICAnVGhlIGluY29ycmVjdCBmaWxlIGhhcyBiZWVuIHVwbG9hZGVkLiBQbGVhc2UgdXBsb2FkIHRoZSB0ZW1wbGF0ZSB3aGljaCB5b3UgZG93bmxvYWRlZCBmcm9tIGhlcmUuJyArXHJcbiAgICAgICAgJyBSRVRSWSc7XHJcbiAgICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSB0cnVlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLmhlYWRlciA9IGNsb25lRGVlcChkYXRhWzJdKTtcclxuICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5zdWJIZWFkaW5nID0gY2xvbmVEZWVwKGRhdGFbM10pO1xyXG4gICAgY29uc3QgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zID0gdGhpcy5kZXRlY3RFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMoXHJcbiAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5oZWFkZXIsXHJcbiAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5zdWJIZWFkaW5nXHJcbiAgICApO1xyXG4gICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLmhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucyA9XHJcbiAgICAgIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucztcclxuICAgIGRhdGEgPSBkYXRhLnNsaWNlKDUpO1xyXG4gICAgaWYgKHRoaXMubWVtYmVyX29ial9pZCAhPSB0aGlzLnRlbXBsYXRlSW5mby5tZW1iZXJJZCkge1xyXG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9XHJcbiAgICAgICAgJ1RoZSBpbmNvcnJlY3QgZmlsZSBoYXMgYmVlbiB1cGxvYWRlZC4gUGxlYXNlIHVwbG9hZCB0aGUgdGVtcGxhdGUgd2hpY2ggeW91IGRvd25sb2FkZWQgZnJvbSBoZXJlLicgK1xyXG4gICAgICAgICcgUkVUUlknO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGaWxlID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlc3BvbnNpYmlsaXR5RGF0YSA9IGRhdGEuZmlsdGVyKFxyXG4gICAgICAoZGF0YUVsZW1lbnQ6IGFueSkgPT4gZGF0YUVsZW1lbnQubGVuZ3RoID4gMFxyXG4gICAgKTtcclxuICAgIHJlc3BvbnNpYmlsaXR5RGF0YS5mb3JFYWNoKChyZXBvcnQ6IGFueSkgPT4ge1xyXG4gICAgICBsZXQgdmFsaWREYXRlO1xyXG4gICAgICBjb25zdCB2YWxpZFVzZXIgPSB0aGlzLnJldHVybklkcyhyZXBvcnRbMl0sICdlbnRydXN0ZWRfdG8nKVxyXG4gICAgICAgID8gdHJ1ZVxyXG4gICAgICAgIDogZmFsc2U7XHJcbiAgICAgIGlmIChyZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQuaGVhZGVyWzFdID09PSAnUHJvZ3JhbScpIHtcclxuICAgICAgICB2YWxpZERhdGUgPSB0aGlzLmNvbXBhcmVXaXRoQ3VycmVudERhdGUocmVwb3J0WzRdLCByZXBvcnRbNV0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhbGlkRGF0ZSA9IHRoaXMuY29tcGFyZVdpdGhDdXJyZW50RGF0ZShyZXBvcnRbNV0sIHJlcG9ydFs2XSk7XHJcbiAgICAgIH1cclxuICAgICAgLyogUHVzaGluZyB0aGUgcmVwb3J0IGRldGFpbHMgaW50byB0aGUgYnVsa1VwbG9hZCBvYmplY3QgYXMgcGVyIHRhYiB0YWJzICovXHJcbiAgICAgIGlmIChzaGVldD8udG9Mb3dlckNhc2UoKSA9PT0gJ2ZyZXF1ZW5jeSByZXNwb25zaWJpbGl0aWVzJykge1xyXG4gICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5yZXBvcnRzLnB1c2goXHJcbiAgICAgICAgICB0aGlzLnNldFJlcG9ydERldGFpbHMoXHJcbiAgICAgICAgICAgIHJlcG9ydCxcclxuICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5oZWFkZXJbMV0gPT09ICdQcm9ncmFtJyA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmJ1bGtVcGxvYWQuZnJlcXVlbmN5LmhlYWRlciA9IHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8uaGVhZGVyO1xyXG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZC5mcmVxdWVuY3kuc3ViSGVhZGluZyA9XHJcbiAgICAgICAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LnN1YkhlYWRpbmc7XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLmZyZXF1ZW5jeS5yZXBvcnRzID0gcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkPy5yZXBvcnRzO1xyXG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZC5mcmVxdWVuY3kuaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zID1cclxuICAgICAgICAgIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucztcclxuICAgICAgfVxyXG4gICAgICBpZiAoc2hlZXQ/LnRvTG93ZXJDYXNlKCkgPT09ICdvbmdvaW5nIHJlc3BvbnNpYmlsaXRpZXMnKSB7XHJcbiAgICAgICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLnJlcG9ydHMucHVzaChcclxuICAgICAgICAgIHRoaXMuc2V0UmVwb3J0RGV0YWlscyhcclxuICAgICAgICAgICAgcmVwb3J0LFxyXG4gICAgICAgICAgICAnb25nb2luZycsXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5oZWFkZXJbMV0gPT09ICdQcm9ncmFtJyA/IHRydWUgOiBmYWxzZVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLm9uZ29pbmcuaGVhZGVyID0gcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkPy5oZWFkZXI7XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLm9uZ29pbmcuc3ViSGVhZGluZyA9XHJcbiAgICAgICAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LnN1YkhlYWRpbmc7XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLm9uZ29pbmcucmVwb3J0cyA9IHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8ucmVwb3J0cztcclxuICAgICAgfVxyXG4gICAgICBpZiAoc2hlZXQ/LnRvTG93ZXJDYXNlKCkgPT09ICdvbiBjb21wbGV0aW9uIHJlc3BvbnNpYmlsaXRpZXMnKSB7XHJcbiAgICAgICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLnJlcG9ydHMucHVzaChcclxuICAgICAgICAgIHRoaXMuc2V0UmVwb3J0RGV0YWlscyhcclxuICAgICAgICAgICAgcmVwb3J0LFxyXG4gICAgICAgICAgICAnb25Db21wbGV0aW9uJyxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLmhlYWRlclsxXSA9PT0gJ1Byb2dyYW0nID8gdHJ1ZSA6IGZhbHNlXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmJ1bGtVcGxvYWQub25Db21wbGV0aW9uLmhlYWRlciA9IHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8uaGVhZGVyO1xyXG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZC5vbkNvbXBsZXRpb24uc3ViSGVhZGluZyA9XHJcbiAgICAgICAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LnN1YkhlYWRpbmc7XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLm9uQ29tcGxldGlvbi5yZXBvcnRzID1cclxuICAgICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8ucmVwb3J0cztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgaXNFbXB0eSA9IHRoaXMuY2hlY2tFbXB0eUZpbGUoZGF0YSk7XHJcbiAgICAvKiBDaGVja2luZyBpZiB0aGUgZmlsZSBpcyBlbXB0eSwgaWYgaXQgaXMgZW1wdHkgaXQgd2lsbCByZXR1cm4gYW4gZXJyb3IgbWVzc2FnZS4gSWYgaXQgaXMgbm90XHJcbiAgICBlbXB0eSBpdCB3aWxsIGNoZWNrIGlmIHRoZSBmaWxlIGlzIHRoZSBjb3JyZWN0IGZpbGUsIGlmIGl0IGlzIG5vdCB0aGUgY29ycmVjdCBmaWxlIGl0IHdpbGxcclxuICAgIHJldHVybiBhbiBlcnJvciBtZXNzYWdlLiBJZiBpdCBpcyB0aGUgY29ycmVjdCBmaWxlIGl0IHdpbGwgY2FsbCB0aGUgZmlsZVVwbG9hZCgpIGZ1bmN0aW9uLiAqL1xyXG4gICAgaWYgKGlzRW1wdHkpIHtcclxuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPVxyXG4gICAgICAgICdZb3UgaGF2ZSB1cGxvYWRlZCBhIGJsYW5rIHRlbXBsYXRlLiBQbGVhc2UgYWRkIGRldGFpbHMgZm9yIGFsbCBtYW5kYXRvcnkgZmllbGRzLiBSRVRSWSc7XHJcbiAgICAgIHRoaXMuaXNGaWxlRW1wdHkgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGaWxlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICB0aGlzLmJ1bGtVcGxvYWQ/LmZyZXF1ZW5jeT8uaGVhZGVyWzBdICE9PSAnUmVzcG9uc2liaWxpdHkgTmFtZSonICYmXHJcbiAgICAgIHRoaXMuYnVsa1VwbG9hZD8ub25nb2luZz8uaGVhZGVyWzBdICE9PSAnUmVzcG9uc2liaWxpdHkgTmFtZSonICYmXHJcbiAgICAgIHRoaXMuYnVsa1VwbG9hZD8ub25Db21wbGV0aW9uPy5oZWFkZXJbMF0gIT09ICdSZXNwb25zaWJpbGl0eSBOYW1lKidcclxuICAgICkge1xyXG4gICAgICB0aGlzLmJsb2NrVXBsb2FkRm9yQ29sdW1uRXJyb3IoJ21pc3NpbmcnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pc0ZpbGVFbXB0eSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGaWxlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmZpbGVVcGxvYWQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzRmlsZUVtcHR5ID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzV3JvbmdGaWxlID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzV3JvbmdGb3JtYXQgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0V4Y2VsID0gdHJ1ZTtcclxuICAgIHRoaXMuZmlsZVZhbHVlID0gJyc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJZiB0aGUgYnVsa1VwbG9hZCBvYmplY3QgaGFzIGEgZnJlcXVlbmN5IG9iamVjdCB3aXRoIGEgcmVwb3J0cyBhcnJheSwgc2V0IHRoZVxyXG4gICAqIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCB0byB0aGUgZnJlcXVlbmN5IG9iamVjdCBhbmQgc2V0IHRoZSB0YWJUeXBlIHRvIGZyZXF1ZW5jeS4gSWYgbm90LCBjaGVja1xyXG4gICAqIGlmIHRoZSBidWxrVXBsb2FkIG9iamVjdCBoYXMgYW4gb25nb2luZyBvYmplY3Qgd2l0aCBhIHJlcG9ydHMgYXJyYXksIHNldCB0aGVcclxuICAgKiByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgdG8gdGhlIG9uZ29pbmcgb2JqZWN0IGFuZCBzZXQgdGhlIHRhYlR5cGUgdG8gb25nb2luZy4gSWYgbm90LCBjaGVjayBpZlxyXG4gICAqIHRoZSBidWxrVXBsb2FkIG9iamVjdCBoYXMgYW4gb25Db21wbGV0aW9uIG9iamVjdCB3aXRoIGEgcmVwb3J0cyBhcnJheSwgc2V0IHRoZVxyXG4gICAqIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCB0byB0aGUgb25Db21wbGV0aW9uIG9iamVjdCBhbmQgc2V0IHRoZSB0YWJUeXBlIHRvIG9uQ29tcGxldGlvbi4gSWYgbm90LFxyXG4gICAqIHJldHVybiB0cnVlLlxyXG4gICAqIDwvY29kZT5cclxuICAgKiBAcGFyYW0ge2FueX0gZGF0YSAtIGFueSA9IHtcclxuICAgKiBAcmV0dXJucyBhIGJvb2xlYW4gdmFsdWUuXHJcbiAgICovXHJcbiAgY2hlY2tFbXB0eUZpbGUoZGF0YT86IGFueSkge1xyXG4gICAgbGV0IGlzRW1wdHkgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLmJ1bGtVcGxvYWQ/LmZyZXF1ZW5jeT8ucmVwb3J0cz8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0gdGhpcy5idWxrVXBsb2FkPy5mcmVxdWVuY3k7XHJcbiAgICAgIHRoaXMudGFiVHlwZSA9ICdmcmVxdWVuY3knO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmJ1bGtVcGxvYWQ/Lm9uZ29pbmc/LnJlcG9ydHM/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCA9IHRoaXMuYnVsa1VwbG9hZD8ub25nb2luZztcclxuICAgICAgdGhpcy50YWJUeXBlID0gJ29uZ29pbmcnO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmJ1bGtVcGxvYWQ/Lm9uQ29tcGxldGlvbj8ucmVwb3J0cz8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0gdGhpcy5idWxrVXBsb2FkPy5vbkNvbXBsZXRpb247XHJcbiAgICAgIHRoaXMudGFiVHlwZSA9ICdvbkNvbXBsZXRpb24nO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaXNFbXB0eSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXNFbXB0eTtcclxuICB9XHJcblxyXG4gIGNvbXBhcmVXaXRoQ3VycmVudERhdGUoZGF5OiBhbnksIG1vbnRoOiBhbnkpIHtcclxuICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKTtcclxuICAgIGNvbnN0IG1vbnRoTmFtZXMgPSBbXHJcbiAgICAgIHsgdmFsdWU6IDEsIG1vbnRoOiAnSmFuJyB9LFxyXG4gICAgICB7IHZhbHVlOiAyLCBtb250aDogJ0ZlYicgfSxcclxuICAgICAgeyB2YWx1ZTogMywgbW9udGg6ICdNYXInIH0sXHJcbiAgICAgIHsgdmFsdWU6IDQsIG1vbnRoOiAnQXByJyB9LFxyXG4gICAgICB7IHZhbHVlOiA1LCBtb250aDogJ01heScgfSxcclxuICAgICAgeyB2YWx1ZTogNiwgbW9udGg6ICdKdW4nIH0sXHJcbiAgICAgIHsgdmFsdWU6IDcsIG1vbnRoOiAnSnVsJyB9LFxyXG4gICAgICB7IHZhbHVlOiA4LCBtb250aDogJ0F1ZycgfSxcclxuICAgICAgeyB2YWx1ZTogOSwgbW9udGg6ICdTZXAnIH0sXHJcbiAgICAgIHsgdmFsdWU6IDEwLCBtb250aDogJ09jdCcgfSxcclxuICAgICAgeyB2YWx1ZTogMTEsIG1vbnRoOiAnTm92JyB9LFxyXG4gICAgICB7IHZhbHVlOiAxMiwgbW9udGg6ICdEZWMnIH0sXHJcbiAgICBdO1xyXG5cclxuICAgIGlmICghKGRheSB8fCBtb250aCkpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKCEoZGF5ICYmIG1vbnRoKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBtb250aEZvcm1hdFJlZ2V4ID0gUkVHRVguTU9OVEg7XHJcbiAgICAgIGlmICghbW9udGhGb3JtYXRSZWdleC50ZXN0KG1vbnRoKSkge1xyXG4gICAgICAgIHRoaXMuaXNEYXRlRm9ybWF0SW52YWxpZCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKCEoZGF5ID4gMCAmJiBkYXkgPCAzMikpIHtcclxuICAgICAgICB0aGlzLmlzRGF5SW52YWxpZCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBtb250aEFuZFllYXIgPSBtb250aC5zcGxpdChcIidcIik7XHJcblxyXG4gICAgICBjb25zdCBzdGFydERhdGUgPSBtb21lbnQoXHJcbiAgICAgICAgZGF5ICsgJy0nICsgbW9udGhBbmRZZWFyWzBdICsgJy0nICsgMjAgKyBtb250aEFuZFllYXJbMV0gKyAnIDAwOjAwOjAwJyxcclxuICAgICAgICAnREQtTU1NTS1ZWVlZIEhIOm1tOnNzJ1xyXG4gICAgICApLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbTpzcycpO1xyXG4gICAgICBpZiAoc3RhcnREYXRlID09ICdJbnZhbGlkIGRhdGUnKSB7XHJcbiAgICAgICAgdGhpcy5pc0RheUludmFsaWQgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7fSwgNSk7XHJcbiAgICAgIGNvbnN0IGRhdGVfdmFsdWUgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICAgICAgZGF0ZV92YWx1ZS5zZXRNb250aChcclxuICAgICAgICB0eXBlb2YgbW9udGggIT09ICdudW1iZXInXHJcbiAgICAgICAgICA/IG1vbnRoTmFtZXMuZmlsdGVyKCh4KSA9PiB4Lm1vbnRoID09PSBtb250aD8uc3Vic3RyaW5nKDAsIDMpKVswXVxyXG4gICAgICAgICAgICAgID8udmFsdWUgLSAxXHJcbiAgICAgICAgICA6IG1vbnRoXHJcbiAgICAgICk7XHJcbiAgICAgIGRhdGVfdmFsdWUuc2V0RnVsbFllYXIoTnVtYmVyKDIwICsgbW9udGguc3BsaXQoXCInXCIpWzFdKSk7XHJcbiAgICAgIGRhdGVfdmFsdWUuc2V0RGF0ZShOdW1iZXIoZGF5KSk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBjdXJyZW50RGF0ZT8udG9KU09OKCk/LnNwbGl0KCdUJylbMF0gIT1cclxuICAgICAgICAgIGRhdGVfdmFsdWU/LnRvSlNPTigpPy5zcGxpdCgnVCcpWzBdICYmXHJcbiAgICAgICAgY3VycmVudERhdGUgPiBkYXRlX3ZhbHVlXHJcbiAgICAgICkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBpc1Bhc3REYXRlKGRheTogYW55LCBtb250aDogYW55KSB7XHJcbiAgICBjb25zdCBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKCk7XHJcblxyXG4gICAgY29uc3QgbW9udGhOYW1lcyA9IFtcclxuICAgICAgeyB2YWx1ZTogMSwgbW9udGg6ICdKYW4nIH0sXHJcbiAgICAgIHsgdmFsdWU6IDIsIG1vbnRoOiAnRmViJyB9LFxyXG4gICAgICB7IHZhbHVlOiAzLCBtb250aDogJ01hcicgfSxcclxuICAgICAgeyB2YWx1ZTogNCwgbW9udGg6ICdBcHInIH0sXHJcbiAgICAgIHsgdmFsdWU6IDUsIG1vbnRoOiAnTWF5JyB9LFxyXG4gICAgICB7IHZhbHVlOiA2LCBtb250aDogJ0p1bicgfSxcclxuICAgICAgeyB2YWx1ZTogNywgbW9udGg6ICdKdWwnIH0sXHJcbiAgICAgIHsgdmFsdWU6IDgsIG1vbnRoOiAnQXVnJyB9LFxyXG4gICAgICB7IHZhbHVlOiA5LCBtb250aDogJ1NlcCcgfSxcclxuICAgICAgeyB2YWx1ZTogMTAsIG1vbnRoOiAnT2N0JyB9LFxyXG4gICAgICB7IHZhbHVlOiAxMSwgbW9udGg6ICdOb3YnIH0sXHJcbiAgICAgIHsgdmFsdWU6IDEyLCBtb250aDogJ0RlYycgfSxcclxuICAgIF07XHJcblxyXG4gICAgaWYgKCEoZGF5IHx8IG1vbnRoKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKCEoZGF5ICYmIG1vbnRoKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBjb25zdCByZXBvcnREYXRlID0gbmV3IERhdGUoZGF5ICsgbW9udGguc3BsaXQoXCInXCIpKTtcclxuICAgICAgY29uc3QgZGF0ZV92YWx1ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgIGRhdGVfdmFsdWUuc2V0TW9udGgoXHJcbiAgICAgICAgdHlwZW9mIG1vbnRoICE9PSAnbnVtYmVyJ1xyXG4gICAgICAgICAgPyBtb250aE5hbWVzLmZpbHRlcigoeCkgPT4geC5tb250aCA9PT0gbW9udGg/LnN1YnN0cmluZygwLCAzKSlbMF1cclxuICAgICAgICAgICAgICA/LnZhbHVlIC0gMVxyXG4gICAgICAgICAgOiBtb250aFxyXG4gICAgICApO1xyXG4gICAgICBkYXRlX3ZhbHVlLnNldEZ1bGxZZWFyKE51bWJlcigyMCArIG1vbnRoLnNwbGl0KFwiJ1wiKVsxXSkpO1xyXG4gICAgICBkYXRlX3ZhbHVlLnNldERhdGUoTnVtYmVyKGRheSkpO1xyXG4gICAgICBpZiAoY3VycmVudERhdGUgPiBkYXRlX3ZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkb3dubG9hZFRlbXBsYXRlKCkge1xyXG4gICAgdGhpcy5kb3dubG9hZFN0YXR1cyA9ICdET1dOTE9BRElORyc7XHJcbiAgICB0aGlzLmRvd25sb2FkUGVyY2VudCA9IDA7XHJcbiAgICBjb25zdCBkb3dubG9hZERhdGUgPSBuZXcgRGF0ZSgpLnRvRGF0ZVN0cmluZygpLnNwbGl0KCcgJyk7XHJcbiAgICBjb25zdCBmaWxlTmFtZSA9IGBFbnRydXN0IFJlc3BvbnNpYmlsaXRpZXMtJHtkb3dubG9hZERhdGVbMl19LSR7ZG93bmxvYWREYXRlWzFdfS0ke2Rvd25sb2FkRGF0ZVszXX0ueGxzeGA7XHJcblxyXG4gICAgdGhpcy5yaXNrU2VydmljZS5kb3dubG9hZFJlc3BvbnNpYmlsaXR5VGVtcGxhdGUoKS5zdWJzY3JpYmUoXHJcbiAgICAgIChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoZGF0YS5sb2FkZWQpIHtcclxuICAgICAgICAgIHRoaXMuZG93bmxvYWRQZXJjZW50ID0gMTAwICogKGRhdGEubG9hZGVkIC8gZGF0YS50b3RhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkYXRhLmJvZHkpIHtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRvd25sb2FkU3RhdHVzID0gdGhpcy5yaXNrU2VydmljZS5kb3duTG9hZEZpbGUoXHJcbiAgICAgICAgICAgICAgZGF0YS5ib2R5LFxyXG4gICAgICAgICAgICAgICdhcHBsaWNhdGlvbi94bHN4JyxcclxuICAgICAgICAgICAgICBmaWxlTmFtZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSwgMTUwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICB0aGlzLmRvd25sb2FkU3RhdHVzID0gJ0RPV05MT0FERUQnO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc3VibWl0UmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkKCkge1xyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgbGV0IHBheWxvYWQ6IGFueSA9IFtdO1xyXG4gICAgbGV0IHJlc3BvbnNpYmlsaXR5TXVsdGlUYWJCdWxrVXBsb2FkOiBhbnkgPSBbXTtcclxuICAgIGxldCB2YWxpZFJlc3BvbnNpYmlsaXRpZXMgPSAwO1xyXG4gICAgcmVzcG9uc2liaWxpdHlNdWx0aVRhYkJ1bGtVcGxvYWQgPVxyXG4gICAgICB0aGlzLmJ1bGtVcGxvYWQ/LmZyZXF1ZW5jeT8ucmVwb3J0cz8uY29uY2F0KFxyXG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZD8ub25nb2luZz8ucmVwb3J0cyxcclxuICAgICAgICB0aGlzLmJ1bGtVcGxvYWQ/Lm9uQ29tcGxldGlvbj8ucmVwb3J0c1xyXG4gICAgICApO1xyXG4gICAgICByZXNwb25zaWJpbGl0eU11bHRpVGFiQnVsa1VwbG9hZD8uZm9yRWFjaCgocmVwb3J0OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVwb3J0Py5pc1ZhbGlkKSB7XHJcbiAgICAgICAgICB2YWxpZFJlc3BvbnNpYmlsaXRpZXMgKz0gMTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBwYXlsb2FkID0ge1xyXG4gICAgICAgIG9yaWdpbmFsRmlsZW5hbWU6IHRoaXMuZmlsZVJlc3BvbnNlWzBdPy5vcmlnaW5hbF9maWxlbmFtZSxcclxuICAgICAgICBmaWxlTmFtZTogdGhpcy5maWxlUmVzcG9uc2VbMF0/LmZpbGVuYW1lLFxyXG4gICAgICAgIGZpbGVQYXRoOiB0aGlzLmZpbGVSZXNwb25zZVswXT8uZmlsZXBhdGgsXHJcbiAgICAgICAgdG90YWxSZXNwb25zaWJpbGl0eUNvdW50OiByZXNwb25zaWJpbGl0eU11bHRpVGFiQnVsa1VwbG9hZD8ubGVuZ3RoLFxyXG4gICAgICAgIHZhbGlkUmVzcG9uc2liaWxpdHlDb3VudDogdmFsaWRSZXNwb25zaWJpbGl0aWVzLFxyXG4gICAgICB9O1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2UuYWRkQnVsa1Jlc3BvbnNpYmlsaXR5KHBheWxvYWQpLnN1YnNjcmliZShcclxuICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNob3dFeGNlbCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2hvd1NtaWxleSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdWJtaXRXb3JrZmxvdygpO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlEYXRhID0gcmVzO1xyXG4gICAgICB9LFxyXG4gICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2hvd0V4Y2VsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zbmFja0Jhci5zaG93KFxyXG4gICAgICAgICAgJ09PUFMhIFNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB0aGUgcGFnZSBjb3VsZCBub3QgYmUgbG9hZGVkLiBDb3VsZCB5b3UgcGxlYXNlIHRyeSBvbmUgbW9yZSB0aW1lPycsXHJcbiAgICAgICAgICAnYWxlcnQnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHN1Ym1pdFdvcmtmbG93KCkge1xyXG4gICAgY29uc3QgbWVzc2FnZSA9IHsgdHlwZTogJ3N1Ym1pdCcgfTtcclxuICAgIGNvbnN0IHRhcmdldE9yaWdpbiA9IHRoaXMuZ2V0T3JpZ2luKCk7XHJcbiAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKG1lc3NhZ2UsIHRhcmdldE9yaWdpbik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE9yaWdpbigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XHJcbiAgfVxyXG5cclxuICByZXR1cm5JZHMoaXRlbTogYW55LCBrZXk6IHN0cmluZyk6IGFueSB7XHJcbiAgICBzd2l0Y2ggKGtleSkge1xyXG4gICAgICBjYXNlICdyY19pZCc6XHJcbiAgICAgICAgbGV0IHJjT2JqID0geyBuYW1lOiAnJywgcmNJZDogMCwgcGFyZW50SWRzOiBbXSB9O1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLnJjTGlzdC5mb3JFYWNoKChyY19lbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyY19lbGVtZW50Lm5hbWUgPT0gaXRlbSkge1xyXG4gICAgICAgICAgICBsZXQgbmFtZTtcclxuICAgICAgICAgICAgaWYgKHJjX2VsZW1lbnQubmFtZS5pbmNsdWRlcygnW1dJVEhJTl0nKSkge1xyXG4gICAgICAgICAgICAgIG5hbWUgPSByY19lbGVtZW50Lm5hbWUuc3BsaXQoJyBbV0lUSElOXSAnKVswXTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBuYW1lID0gcmNfZWxlbWVudC5uYW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJjT2JqID0ge1xyXG4gICAgICAgICAgICAgIG5hbWUsXHJcbiAgICAgICAgICAgICAgcmNJZDogcmNfZWxlbWVudC5yY19pZCxcclxuICAgICAgICAgICAgICBwYXJlbnRJZHM6IHJjX2VsZW1lbnQucGFyZW50SWRzLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByY09iajtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncmV2aWV3ZXInOlxyXG4gICAgICAgIGxldCByZXZpZXdlck9iaiA9IHsgbmFtZTogJycsIGVtcGxveWVlSWQ6IDAsIGVtYWlsOiAnJyB9O1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvPy5yZXZpZXdlckxpc3QuZm9yRWFjaCgocmV2aWV3ZXJFbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXZpZXdlckVsZW1lbnQubmFtZUFuZEVtYWlsID09IGl0ZW0pIHtcclxuICAgICAgICAgICAgcmV2aWV3ZXJPYmogPSB7XHJcbiAgICAgICAgICAgICAgbmFtZTogcmV2aWV3ZXJFbGVtZW50Lm5hbWUsXHJcbiAgICAgICAgICAgICAgZW1wbG95ZWVJZDogcmV2aWV3ZXJFbGVtZW50Lm15X21lbWJlcl9pZCxcclxuICAgICAgICAgICAgICBlbWFpbDogcmV2aWV3ZXJFbGVtZW50LmVtYWlsLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXZpZXdlck9iajtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2Fzc2lnbm9yJzpcclxuICAgICAgICBsZXQgYXNzaWdub3JPYmogPSB7IG5hbWU6ICcnLCBtZW1iZXJJZDogMCwgZW1haWw6ICcnIH07XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8uYXNzaWdub3JzTGlzdC5mb3JFYWNoKChhc3NpZ25vckVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGFzc2lnbm9yRWxlbWVudC5uYW1lQW5kRW1haWwgPT0gaXRlbSkge1xyXG4gICAgICAgICAgICBhc3NpZ25vck9iaiA9IHtcclxuICAgICAgICAgICAgICBuYW1lOiBhc3NpZ25vckVsZW1lbnQubmFtZSxcclxuICAgICAgICAgICAgICBlbWFpbDogYXNzaWdub3JFbGVtZW50LmVtYWlsLFxyXG4gICAgICAgICAgICAgIG1lbWJlcklkOiBhc3NpZ25vckVsZW1lbnQubWVtYmVyX2lkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBhc3NpZ25vck9iajtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NjJzpcclxuICAgICAgICBsZXQgY2NPYmogPSB7IG5hbWU6ICcnLCBlbXBsb3llZUlkOiAwLCBlbWFpbDogJycgfTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mbz8ucmV2aWV3ZXJMaXN0LmZvckVhY2goKGNjRWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoY2NFbGVtZW50Lm5hbWVBbmRFbWFpbCA9PSBpdGVtKSB7XHJcbiAgICAgICAgICAgIGNjT2JqID0ge1xyXG4gICAgICAgICAgICAgIG5hbWU6IGNjRWxlbWVudC5uYW1lLFxyXG4gICAgICAgICAgICAgIGVtcGxveWVlSWQ6IGNjRWxlbWVudC5lbXBsb3llZV9pZCxcclxuICAgICAgICAgICAgICBlbWFpbDogY2NFbGVtZW50LmVtYWlsLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBjY09iajtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnY2NGYWlsdXJlJzpcclxuICAgICAgICBsZXQgY2NmT2JqID0geyBuYW1lOiAnJywgZW1wbG95ZWVJZDogMCwgZW1haWw6ICcnIH07XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8/LnJldmlld2VyTGlzdC5mb3JFYWNoKChjY2ZFbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChjY2ZFbGVtZW50Lm5hbWVBbmRFbWFpbCA9PSBpdGVtKSB7XHJcbiAgICAgICAgICAgIGNjZk9iaiA9IHtcclxuICAgICAgICAgICAgICBuYW1lOiBjY2ZFbGVtZW50Lm5hbWUsXHJcbiAgICAgICAgICAgICAgZW1wbG95ZWVJZDogY2NmRWxlbWVudC5lbXBsb3llZV9pZCxcclxuICAgICAgICAgICAgICBlbWFpbDogY2NmRWxlbWVudC5lbWFpbCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gY2NmT2JqO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAnZW50cnVzdGVkX3RvJzpcclxuICAgICAgICBsZXQgZW1wSWQgPSAwO1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmFzc2lnbmVlc0xpc3QuZm9yRWFjaCgoZW5FbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChlbkVsZW1lbnQubmFtZUFuZEVtYWlsID09IGl0ZW0pIHtcclxuICAgICAgICAgICAgZW1wSWQgPSBlbkVsZW1lbnQubWVtYmVyX2lkO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBlbXBJZDtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ3BhcmVudFJlc3BvbnNpYmlsaXR5JzpcclxuICAgICAgICBsZXQgaWQgPSAwO1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLnBhcmVudFJlc3BvbnNpYmlsaXR5LmZvckVhY2goXHJcbiAgICAgICAgICAocmVzcG9uc2liaWxpdHk6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2liaWxpdHk/Lm5hbWUgPT09IGl0ZW0pIHtcclxuICAgICAgICAgICAgICBpZCA9IHJlc3BvbnNpYmlsaXR5LmlkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gaWQ7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlICdyaXNrX2NsYXNzJzpcclxuICAgICAgICBpZiAoaXRlbSA9PSAnTG93Jykge1xyXG4gICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtID09ICdMb3ctTWVkaXVtJykge1xyXG4gICAgICAgICAgcmV0dXJuIDI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtID09ICdNZWRpdW0tSGlnaCcpIHtcclxuICAgICAgICAgIHJldHVybiAzO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSA9PSAnSGlnaCcpIHtcclxuICAgICAgICAgIHJldHVybiA0O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNldCgpIHtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0ge1xyXG4gICAgICBoZWFkZXI6IFtdLFxyXG4gICAgICByZXBvcnRzOiBbXSxcclxuICAgIH07XHJcbiAgICB0aGlzLmJ1bGtVcGxvYWQgPSB7XHJcbiAgICAgIGZyZXF1ZW5jeToge1xyXG4gICAgICAgIGhlYWRlcjogW10sXHJcbiAgICAgICAgc3ViSGVhZGluZzogW10sXHJcbiAgICAgICAgcmVwb3J0czogW10sXHJcbiAgICAgIH0sXHJcbiAgICAgIG9uZ29pbmc6IHtcclxuICAgICAgICBoZWFkZXI6IFtdLFxyXG4gICAgICAgIHN1YkhlYWRpbmc6IFtdLFxyXG4gICAgICAgIHJlcG9ydHM6IFtdLFxyXG4gICAgICB9LFxyXG4gICAgICBvbkNvbXBsZXRpb246IHtcclxuICAgICAgICBoZWFkZXI6IFtdLFxyXG4gICAgICAgIHN1YkhlYWRpbmc6IFtdLFxyXG4gICAgICAgIHJlcG9ydHM6IFtdLFxyXG4gICAgICB9LFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnRlbXBsYXRlSW5mbyA9IHtcclxuICAgICAgY2F0ZWdvcnlMaXN0OiBbXSxcclxuICAgICAgcmNMaXN0OiBbXSxcclxuICAgICAgYXNzaWdub3JzTGlzdDogW10sXHJcbiAgICAgIGFzc2lnbmVlc0xpc3Q6IFtdLFxyXG4gICAgICByZXZpZXdlckxpc3Q6IFtdLFxyXG4gICAgICBwZW9wbGVEcm9wZG93bk5hbWVzOiBbXSxcclxuICAgICAgbWVtYmVySWQ6ICcnLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmlzRmlsZUVtcHR5ID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzV3JvbmdGaWxlID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzV3JvbmdGb3JtYXQgPSBmYWxzZTtcclxuICAgIHRoaXMuZmlsZU5hbWUgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmRhdGEgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnNob3dFeGNlbCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93U21pbGV5ID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5jbG9zZUFkZE11bHRpcGxlUmVzcG9uc2liaWxpdHkuZW1pdCgpO1xyXG4gIH1cclxuICBhY3Rpb24oZXZlbnQ6IHN0cmluZykge1xyXG4gICAgc3dpdGNoIChldmVudCkge1xyXG4gICAgICBjYXNlICdhZGRNb3JlJzpcclxuICAgICAgICB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3ZpZXcnOlxyXG4gICAgICAgIHRoaXMudmlld1Jlc3BvbnNpYmlsaXRpZXMoKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsb3NlU21pbGV5KGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuc2hvd1NtaWxleSA9IGZhbHNlO1xyXG4gICAgdGhpcy5jbG9zZVdvcmtmbG93LmVtaXQoeyBldnQ6IHRoaXMucmVzcG9uc2liaWxpdHlEYXRhLCBjb25maXJtOiBmYWxzZSB9KTtcclxuICB9XHJcblxyXG4gIHZpZXdSZXNwb25zaWJpbGl0aWVzKCk6IHZvaWQge1xyXG4gICAgbGV0IHVybDogc3RyaW5nO1xyXG4gICAgbGV0IHVybFN1YnN0cmluZyA9ICcvY29tcGxpYW5jZW9wcy9yZXNwb25zaWJpbGl0aWVzLyc7XHJcbiAgICB0aGlzLmRpc2Nvbm5lY3RSZWZyZXNoLmVtaXQoZmFsc2UpO1xyXG4gICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ob3N0LnN0YXJ0c1dpdGgoJ2xvY2FsaG9zdCcpKSB7XHJcbiAgICAgIHVybCA9ICdodHRwOi8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgdXJsU3Vic3RyaW5nO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdXJsID0gJ2h0dHBzOi8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgdXJsU3Vic3RyaW5nO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pZnJhbWVTZXJ2aWNlLnJlZGlyZWN0SWZJbklmcmFtZSh1cmwsIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLy8gVXBsb2FkIEZpbGUgdG8gdGhlIHNlcnZlclxyXG4gIGZpbGVVcGxvYWQoKSB7XHJcbiAgICB0aGlzLmZpbGVSZXNwb25zZSA9IFtdO1xyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgIGNvbnN0IGZpbGUgPSB0aGlzLnVwbG9hZGVkRmlsZXNbMF1bMF07XHJcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ3NvdXJjZWZpbGUnLCBmaWxlKTtcclxuICAgIGZvcm1EYXRhLmFwcGVuZCgnZGVzdGluYXRpb24nLCAnYnVsa3VwbG9hZC9lbnRydXN0LycgKyB0aGlzLnVzZXJJbmZvLmVtYWlsKTtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmZpbGVVcGxvYWQoZm9ybURhdGEpLnN1YnNjcmliZShcclxuICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcz8uZmlsZW5hbWUpIHtcclxuICAgICAgICAgIHRoaXMuZmlsZVJlc3BvbnNlLnB1c2gocmVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc25hY2tCYXIuc2hvdyhcclxuICAgICAgICAgICdPT1BTISBTb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgdGhlIHBhZ2UgY291bGQgbm90IGJlIGxvYWRlZC4gQ291bGQgeW91IHBsZWFzZSB0cnkgb25lIG1vcmUgdGltZT8nLFxyXG4gICAgICAgICAgJ2FsZXJ0J1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzZXRPcmdhbml6YXRpb25EZXRhaWxzKHRlbXBMaXN0OiBhbnkpIHtcclxuICAgIGlmICh0ZW1wTGlzdFswXSAhPT0gdW5kZWZpbmVkICYmIHRlbXBMaXN0WzBdW1JFU1BPTlNJQklMSVRZLnVzZXJJbmRleC5jdXJyZW50VXNlcl0pIHtcclxuICAgICAgdGhpcy50ZW1wbGF0ZUluZm8ubWVtYmVySWQgPSB0ZW1wTGlzdFswXVtSRVNQT05TSUJJTElUWS51c2VySW5kZXguY3VycmVudFVzZXJdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPVxyXG4gICAgICAgICdUaGUgaW5jb3JyZWN0IGZpbGUgaGFzIGJlZW4gdXBsb2FkZWQuIFBsZWFzZSB1cGxvYWQgdGhlIHRlbXBsYXRlIHdoaWNoIHlvdSBkb3dubG9hZGVkIGZyb20gaGVyZS4nICtcclxuICAgICAgICAnIFJFVFJZJztcclxuICAgICAgdGhpcy5pc1dyb25nRmlsZSA9IHRydWU7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRlbXBMaXN0LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG5cclxuICAgICAgY29uc3QgcmVndWxhdGlvbnMgPSB0aGlzLmdldFByb2dyYW1EZXRhaWxzKGVsZW1lbnQsIFJFU1BPTlNJQklMSVRZLnByb2dyYW1JbmRleC5yZWd1bGF0aW9ucywgMSk7XHJcbiAgICAgIGNvbnN0IHN0YW5kYXJkcyA9IHRoaXMuZ2V0UHJvZ3JhbURldGFpbHMoZWxlbWVudCwgUkVTUE9OU0lCSUxJVFkucHJvZ3JhbUluZGV4LnN0YW5kYXJkcywgMik7XHJcbiAgICAgIGNvbnN0IGludGVybmFsQ29udHJvbHMgPSB0aGlzLmdldFByb2dyYW1EZXRhaWxzKGVsZW1lbnQsIFJFU1BPTlNJQklMSVRZLnByb2dyYW1JbmRleC5pbnRlcm5hbENvbnRyb2xzLCAzKTtcclxuICAgICAgY29uc3Qgb3RoZXJzID0gdGhpcy5nZXRQcm9ncmFtRGV0YWlscyhlbGVtZW50LCBSRVNQT05TSUJJTElUWS5wcm9ncmFtSW5kZXgub3RoZXJzLCAwKTtcclxuXHJcbiAgICAgIGlmKHJlZ3VsYXRpb25zKSB7XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8uY2F0ZWdvcnlMaXN0LnB1c2gocmVndWxhdGlvbnMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZihzdGFuZGFyZHMpIHtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5jYXRlZ29yeUxpc3QucHVzaChzdGFuZGFyZHMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZihpbnRlcm5hbENvbnRyb2xzKSB7XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8uY2F0ZWdvcnlMaXN0LnB1c2goaW50ZXJuYWxDb250cm9scyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmKG90aGVycykge1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmNhdGVnb3J5TGlzdC5wdXNoKG90aGVycyk7XHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgICAvKiBDaGVja2luZyBpZiB0aGUgZWxlbWVudFs5XSBpcyBub3QgbnVsbCBhbmQgbm90IGVtcHR5LiBJZiBpdCBpcyBub3QgbnVsbCBhbmQgbm90IGVtcHR5LCBpdCBpc1xyXG4gICAgICBwdXNoaW5nIHRoZSBlbGVtZW50WzldIChSQykgdG8gdGhlIGFycmF5IChyY0xpc3QpLiAqL1xyXG4gICAgICBpZiAoZWxlbWVudFtSRVNQT05TSUJJTElUWS5yY0luZGV4LmlkXSApIHtcclxuICAgICAgICBjb25zdCByYyA9IHtcclxuICAgICAgICAgIG5hbWU6IGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkucmNJbmRleC5uYW1lXSxcclxuICAgICAgICAgIHJjX2lkOiBlbGVtZW50W1JFU1BPTlNJQklMSVRZLnJjSW5kZXguaWRdLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8ucmNMaXN0LnB1c2gocmMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBBc3NpZ25lZVxyXG4gICAgICBpZiAodGhpcy5oYXNWYWx1ZShlbGVtZW50W1JFU1BPTlNJQklMSVRZLmFzc2lnbmVlSW5kZXgubmFtZV0pKSB7XHJcbiAgICAgICAgdGhpcy5hZGRQZW9wbGVEcm9wZG93bk5hbWUoZWxlbWVudFtSRVNQT05TSUJJTElUWS5hc3NpZ25lZUluZGV4Lm5hbWVdKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZWxlbWVudFtSRVNQT05TSUJJTElUWS5hc3NpZ25lZUluZGV4LmlkXSApIHtcclxuICAgICAgICBjb25zdCBwZW9wbGUgPSB0aGlzLnBhcnNlUGVvcGxlTGlzdENlbGwoXHJcbiAgICAgICAgICBlbGVtZW50W1JFU1BPTlNJQklMSVRZLmFzc2lnbmVlSW5kZXgubmFtZV1cclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGFzc2lnbmVlID0ge1xyXG4gICAgICAgICAgbmFtZUFuZEVtYWlsOiBwZW9wbGUubmFtZUFuZEVtYWlsLFxyXG4gICAgICAgICAgbmFtZTogcGVvcGxlLm5hbWUsXHJcbiAgICAgICAgICBlbWFpbDogcGVvcGxlLmVtYWlsLFxyXG4gICAgICAgICAgbWVtYmVyX2lkOiBlbGVtZW50W1JFU1BPTlNJQklMSVRZLmFzc2lnbmVlSW5kZXguaWRdLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8uYXNzaWduZWVzTGlzdC5wdXNoKGFzc2lnbmVlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gUmV2aWV3ZXJcclxuICAgICAgaWYgKGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkucmV2aWV3ZXJJbmRleC5pZF0gKSB7XHJcbiAgICAgICAgY29uc3QgcGVvcGxlID0gdGhpcy5wYXJzZVBlb3BsZUxpc3RDZWxsKFxyXG4gICAgICAgICAgZWxlbWVudFtSRVNQT05TSUJJTElUWS5yZXZpZXdlckluZGV4Lm5hbWVdXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCByZXZpZXdlciA9IHtcclxuICAgICAgICAgIG5hbWVBbmRFbWFpbDogcGVvcGxlLm5hbWVBbmRFbWFpbCxcclxuICAgICAgICAgIG5hbWU6IHBlb3BsZS5uYW1lLFxyXG4gICAgICAgICAgZW1haWw6IHBlb3BsZS5lbWFpbCxcclxuICAgICAgICAgIGVtcGxveWVlX2lkOiBlbGVtZW50W1JFU1BPTlNJQklMSVRZLnJldmlld2VySW5kZXguaWRdLFxyXG4gICAgICAgICAgbXlfbWVtYmVyX2lkOiBlbGVtZW50W1JFU1BPTlNJQklMSVRZLnJldmlld2VySW5kZXguaWRdLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8ucmV2aWV3ZXJMaXN0LnB1c2gocmV2aWV3ZXIpO1xyXG4gICAgICB9XHJcbiAgICAgIC8qIENoZWNraW5nIGlmIHRoZSBlbGVtZW50WzJdIGlzIG5vdCBlbXB0eSBhbmQgbm90IGVxdWFsIHRvIHNwYWNlLiBJZiBpdCBpcyBub3QgZW1wdHkgYW5kIG5vdFxyXG4gICAgICBlcXVhbCB0byBzcGFjZSwgaXQgd2lsbCBjcmVhdGUgYW4gb2JqZWN0IGFuZCBwdXNoIGl0IHRvIHRoZSBhc3NpZ25vcnNMaXN0IGFycmF5LiAqL1xyXG4gICAgICBpZiAodGhpcy5oYXNWYWx1ZShlbGVtZW50W1JFU1BPTlNJQklMSVRZLmFzc2lnbm9ySW5kZXgubmFtZV0pKSB7XHJcbiAgICAgICAgdGhpcy5hZGRQZW9wbGVEcm9wZG93bk5hbWUoZWxlbWVudFtSRVNQT05TSUJJTElUWS5hc3NpZ25vckluZGV4Lm5hbWVdKTtcclxuICAgICAgICBpZiAodGhpcy5oYXNWYWx1ZShlbGVtZW50W1JFU1BPTlNJQklMSVRZLmFzc2lnbm9ySW5kZXguZW1haWxdKSkge1xyXG4gICAgICAgICAgdGhpcy5hZGRQZW9wbGVEcm9wZG93bk5hbWUoZWxlbWVudFtSRVNQT05TSUJJTElUWS5hc3NpZ25vckluZGV4LmVtYWlsXSk7XHJcbiAgICAgICAgICB0aGlzLmFkZFBlb3BsZURyb3Bkb3duTmFtZShcclxuICAgICAgICAgICAgYCR7U3RyaW5nKGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkuYXNzaWdub3JJbmRleC5uYW1lXSkudHJpbSgpfSAoJHtTdHJpbmcoXHJcbiAgICAgICAgICAgICAgZWxlbWVudFtSRVNQT05TSUJJTElUWS5hc3NpZ25vckluZGV4LmVtYWlsXVxyXG4gICAgICAgICAgICApLnRyaW0oKX0pYFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkuYXNzaWdub3JJbmRleC5pZF0gKSB7XHJcbiAgICAgICAgY29uc3QgYXNzaWdub3IgPSB7XHJcbiAgICAgICAgICBuYW1lQW5kRW1haWw6IGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkuYXNzaWdub3JJbmRleC5uYW1lXSxcclxuICAgICAgICAgIG5hbWU6IGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkuYXNzaWdub3JJbmRleC5uYW1lXSxcclxuICAgICAgICAgIGVtYWlsOiBlbGVtZW50W1JFU1BPTlNJQklMSVRZLmFzc2lnbm9ySW5kZXguZW1haWxdLFxyXG4gICAgICAgICAgLy8gbmFtZTogZWxlbWVudFsxNF0uc3BsaXQoJyAoJylbMF0sXHJcbiAgICAgICAgICAvLyBlbWFpbDogZWxlbWVudFsxNF0uc3BsaXQoJyAoJylbMV0ucmVwbGFjZSgnKScsICcnKSxcclxuICAgICAgICAgIG1lbWJlcl9pZDogZWxlbWVudFtSRVNQT05TSUJJTElUWS5hc3NpZ25vckluZGV4Lm1lbWJlcl9pZF0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5hc3NpZ25vcnNMaXN0LnB1c2goYXNzaWdub3IpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jb2xsZWN0RW1haWxEaXNwbGF5TmFtZXNGcm9tU2hlZXQodGVtcExpc3QpO1xyXG5cclxuICAgIC8qIENyZWF0aW5nIGEgbGlzdCBvZiBjaGlsZCBjYXRlZ29yaWVzIGFuZCBhdHRhY2hpbmcgdGhlbSB0byB0aGVpciBwYXJlbnQgcHJvZ3JhbSAqL1xyXG4gICAgaWYgKHRoaXMudGVtcGxhdGVJbmZvLmNhdGVnb3J5TGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmNhdGVnb3J5TGlzdC5mb3JFYWNoKChwcm9ncmFtOiBhbnksIGk6IG51bWJlcikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkQ2F0ZWdvcnk6IHsgbmFtZTogYW55OyBpZDogYW55IH1bXSA9IFtdO1xyXG4gICAgICAgIHRoaXMuZ2V0UHJvZ3JhbUNhdGVnb3J5SWRDb2x1bW5zKHRlbXBMaXN0WzBdLCBwcm9ncmFtPy5wcm9ncmFtSWQpLmZvckVhY2goXHJcbiAgICAgICAgICAoaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMTsgdHJ1ZTsgaisrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRlbXBMaXN0W2pdICYmIHRlbXBMaXN0W2pdW2luZGV4XSkge1xyXG4gICAgICAgICAgICAgICAgY2hpbGRDYXRlZ29yeS5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgbmFtZTogdGVtcExpc3Rbal1baW5kZXggLSAxXSxcclxuICAgICAgICAgICAgICAgICAgaWQ6IHRlbXBMaXN0W2pdW2luZGV4XSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmNhdGVnb3J5TGlzdFtpXVsnY2hpbGRDYXRlZ29yeSddID0gY2hpbGRDYXRlZ29yeTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGlsZCBjYXRlZ29yaWVzIGxpdmUgaW4gbGF0ZXIgRGF0YS1zaGVldCBjb2x1bW5zIHdob3NlIGhlYWRlciBpcyB0aGUgcHJvZ3JhbSBpZC5cclxuICAgKiBTa2lwIHRoZSBwcm9ncmFtIGxpc3RpbmcgaWQgY29sdW1ucyAoMjItMjkgYXJlYSkg4oCUIHRob3NlIHNhbWUgaWRzIGFsc28gYXBwZWFyIHRoZXJlXHJcbiAgICogZm9yIHRoZSBmaXJzdCBwcm9ncmFtIG9mIGVhY2ggdHlwZSwgd2hpY2ggd291bGQgYXR0YWNoIHRoZSB3cm9uZyBuYW1lcy5cclxuICAgKi9cclxuICBnZXRQcm9ncmFtQ2F0ZWdvcnlJZENvbHVtbnMoaGVhZGVyUm93OiBhbnlbXSA9IFtdLCBwcm9ncmFtSWQ6IGFueSk6IG51bWJlcltdIHtcclxuICAgIGlmIChwcm9ncmFtSWQgPT0gbnVsbCB8fCBwcm9ncmFtSWQgPT09ICcnKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIGNvbnN0IHByb2dyYW1MaXN0aW5nSWRDb2x1bW5zID0gbmV3IFNldChbXHJcbiAgICAgIFJFU1BPTlNJQklMSVRZLnByb2dyYW1JbmRleC5yZWd1bGF0aW9ucy5pZCxcclxuICAgICAgUkVTUE9OU0lCSUxJVFkucHJvZ3JhbUluZGV4LnN0YW5kYXJkcy5pZCxcclxuICAgICAgUkVTUE9OU0lCSUxJVFkucHJvZ3JhbUluZGV4LmludGVybmFsQ29udHJvbHMuaWQsXHJcbiAgICAgIFJFU1BPTlNJQklMSVRZLnByb2dyYW1JbmRleC5vdGhlcnMuaWQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGluZGV4ZXM6IG51bWJlcltdID0gW107XHJcbiAgICAoaGVhZGVyUm93IHx8IFtdKS5mb3JFYWNoKChjZWxsOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgaWYgKCFwcm9ncmFtTGlzdGluZ0lkQ29sdW1ucy5oYXMoaW5kZXgpICYmIGNlbGwgPT0gcHJvZ3JhbUlkKSB7XHJcbiAgICAgICAgaW5kZXhlcy5wdXNoKGluZGV4KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gaW5kZXhlcztcclxuICB9XHJcblxyXG4gIHBhcnNlUGVvcGxlTGlzdENlbGwodmFsdWU6IGFueSk6IHtcclxuICAgIG5hbWVBbmRFbWFpbDogc3RyaW5nO1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgZW1haWw6IHN0cmluZztcclxuICB9IHtcclxuICAgIGNvbnN0IG5hbWVBbmRFbWFpbCA9IHZhbHVlID09IG51bGwgPyAnJyA6IFN0cmluZyh2YWx1ZSkudHJpbSgpO1xyXG4gICAgY29uc3QgZW1haWxNYXRjaCA9IG5hbWVBbmRFbWFpbC5tYXRjaCgvXFwoKFteKV0qQFteKV0qKVxcKVxccyokLyk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBuYW1lQW5kRW1haWwsXHJcbiAgICAgIG5hbWU6IG5hbWVBbmRFbWFpbC5yZXBsYWNlKC9cXHMqXFwoW14pXSpAW14pXSpcXClcXHMqJC8sICcnKS50cmltKCkgfHwgbmFtZUFuZEVtYWlsLFxyXG4gICAgICBlbWFpbDogZW1haWxNYXRjaCA/IGVtYWlsTWF0Y2hbMV0udHJpbSgpIDogJycsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgYWRkUGVvcGxlRHJvcGRvd25OYW1lKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5oYXNWYWx1ZSh2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLnRlbXBsYXRlSW5mby5wZW9wbGVEcm9wZG93bk5hbWVzKSB7XHJcbiAgICAgIHRoaXMudGVtcGxhdGVJbmZvLnBlb3BsZURyb3Bkb3duTmFtZXMgPSBbXTtcclxuICAgIH1cclxuICAgIGNvbnN0IG5hbWUgPSBTdHJpbmcodmFsdWUpLnRyaW0oKTtcclxuICAgIGNvbnN0IGFscmVhZHlBZGRlZCA9IHRoaXMudGVtcGxhdGVJbmZvLnBlb3BsZURyb3Bkb3duTmFtZXMuc29tZShcclxuICAgICAgKGV4aXN0aW5nOiBzdHJpbmcpID0+IHRoaXMubm9ybWFsaXplRHJvcGRvd25WYWx1ZShleGlzdGluZykgPT09IHRoaXMubm9ybWFsaXplRHJvcGRvd25WYWx1ZShuYW1lKVxyXG4gICAgKTtcclxuICAgIGlmICghYWxyZWFkeUFkZGVkKSB7XHJcbiAgICAgIHRoaXMudGVtcGxhdGVJbmZvLnBlb3BsZURyb3Bkb3duTmFtZXMucHVzaChuYW1lKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbGxlY3RFbWFpbERpc3BsYXlOYW1lc0Zyb21TaGVldCh0ZW1wTGlzdDogYW55W10gPSBbXSk6IHZvaWQge1xyXG4gICAgKHRlbXBMaXN0IHx8IFtdKS5mb3JFYWNoKChyb3c6IGFueVtdKSA9PiB7XHJcbiAgICAgIChyb3cgfHwgW10pLmZvckVhY2goKGNlbGw6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChjZWxsID09IG51bGwpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IFN0cmluZyhjZWxsKTtcclxuICAgICAgICBpZiAoL1xcKFteKV0qQFteKV0qXFwpLy50ZXN0KHRleHQpKSB7XHJcbiAgICAgICAgICB0aGlzLmFkZFBlb3BsZURyb3Bkb3duTmFtZSh0ZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRQcm9ncmFtRGV0YWlscyhlbGVtZW50OiBhbnksIGluZGV4OiBhbnksIHR5cGU6IG51bWJlcikge1xyXG4gICAgaWYoZWxlbWVudFtpbmRleC5pZF0gJiYgdHlwZW9mIGVsZW1lbnRbaW5kZXguaWRdID09PSAnbnVtYmVyJykge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHByb2dyYW1OYW1lOiBlbGVtZW50W2luZGV4Lm5hbWVdLFxyXG4gICAgICAgIHByb2dyYW1JZDogZWxlbWVudFtpbmRleC5pZF0sXHJcbiAgICAgICAgcHJvZ3JhbVR5cGU6IHR5cGVcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJdCB0YWtlcyBhbiBldmVudCwgd2hpY2ggaXMgYSBzdHJpbmcsIGFuZCB0aGVuIGl0IHNldHMgdGhlIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCB2YXJpYWJsZSB0b1xyXG4gICAqIHRoZSB2YWx1ZSBvZiB0aGUgYnVsa1VwbG9hZCB2YXJpYWJsZSwgd2hpY2ggaXMgYW4gb2JqZWN0LCBhbmQgdGhlbiBpdCBhY2Nlc3NlcyB0aGUgcHJvcGVydHkgb2ZcclxuICAgKiB0aGF0IG9iamVjdCB0aGF0IG1hdGNoZXMgdGhlIGV2ZW50IHN0cmluZy5cclxuICAgKlxyXG4gICAqIFNvIGlmIHRoZSBldmVudCBzdHJpbmcgaXMgJ2ZyZXF1ZW5jeScsIHRoZW4gdGhlIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCB2YXJpYWJsZSB3aWxsIGJlIHNldCB0b1xyXG4gICAqIHRoZSB2YWx1ZSBvZiB0aGUgZnJlcXVlbmN5IHByb3BlcnR5IG9mIHRoZSBidWxrVXBsb2FkIG9iamVjdC5cclxuICAgKlxyXG4gICAqIElmIHRoZSBldmVudCBzdHJpbmcgaXMgJ29uZ29pbmcnLCB0aGVuIHRoZSByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgdmFyaWFibGUgd2lsbCBiZSBzZXQgdG8gdGhlXHJcbiAgICogdmFsdWUgb2YgdGhlIG9uZ29pbmcgcHJvcGVydHkgb2YgdGhlIGJ1bGtVcGxvYWQgb2JqZWN0LlxyXG4gICAqXHJcbiAgICogSWYgdGhlIGV2ZW50IHN0cmluZyBpcyAnb25Db21wbGV0aW9uJywgdGhlbiB0aGUgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkIHZhcmlhYmxlIHdpbGwgYmUgc2V0IHRvIHRoZVxyXG4gICAqIHZhbHVlIG9mIHRoZSBvbkNvbXBsZXRpb24gcHJvcGVydHkgb2YgdGhlIGJ1bGtVcGxvYWQgb2JqZWN0LlxyXG4gICAqXHJcbiAgICogSWYgdGhlIGV2ZW50IHN0cmluZyBpcyBhbnl0aGluZyBlbHNlLCB0aGVuIHRoZSByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgdmFyaWFibGUgd2lsbCBiZSBzZXQgdG9cclxuICAgKiB0aGUgdmFsdWUgb2YgdGhlIGZyZXF1ZW5jeSBwcm9wZXJ0eSBvZiB0aGUgYnVsa1VwbG9hZCBvYmplY3QuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50IC0gc3RyaW5nIC0gdGhlIGV2ZW50IHRoYXQgaXMgZW1pdHRlZCBmcm9tIHRoZSBjaGlsZCBjb21wb25lbnQgKGZyZXF1ZW5jeSB8IG9uZ29pbmcgfCBvbkNvbXBsZXRpb24pXHJcbiAgICovXHJcbiAgc2VsZWN0ZWRUYWIoZXZlbnQ6ICdmcmVxdWVuY3knIHwgJ29uZ29pbmcnIHwgJ29uQ29tcGxldGlvbicpIHtcclxuICAgIHRoaXMudGFiVHlwZSA9IGV2ZW50O1xyXG4gICAgc3dpdGNoIChldmVudCkge1xyXG4gICAgICBjYXNlICdmcmVxdWVuY3knOlxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0gdGhpcy5idWxrVXBsb2FkPy5mcmVxdWVuY3k7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ29uZ29pbmcnOlxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0gdGhpcy5idWxrVXBsb2FkPy5vbmdvaW5nO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdvbkNvbXBsZXRpb24nOlxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0gdGhpcy5idWxrVXBsb2FkPy5vbkNvbXBsZXRpb247XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgPSB0aGlzLmJ1bGtVcGxvYWQ/LmZyZXF1ZW5jeTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERldGVjdHMgdGhlIGZvdXIgZnJlcXVlbmN5IGNvbHVtbnMgYWRkZWQgdG8gdGhlIGxhdGVzdCB4bHN4IHRlbXBsYXRlOlxyXG4gICAqIER1ZSBUaW1lLCBFbmRzIEFmdGVyIE9jY3VycmVuY2VzLCBFbmRzIEJ5IERhdGUgKERheSksIEVuZHMgQnkgRGF0ZSAoTW9udGgpLlxyXG4gICAqIE9sZGVyIHRlbXBsYXRlcyB3aXRob3V0IHRoZXNlIGNvbHVtbnMga2VlcCB0aGUgb3JpZ2luYWwgY29sdW1uIG1hcHBpbmcuXHJcbiAgICovXHJcbiAgZGV0ZWN0RXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zKGhlYWRlcjogYW55W10gPSBbXSwgc3ViSGVhZGluZzogYW55W10gPSBbXSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgY2VsbHMgPSBbLi4uKGhlYWRlciB8fCBbXSksIC4uLihzdWJIZWFkaW5nIHx8IFtdKV07XHJcbiAgICByZXR1cm4gY2VsbHMuc29tZSgoY2VsbDogYW55KSA9PiB7XHJcbiAgICAgIGlmICh0eXBlb2YgY2VsbCAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IGNlbGwudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICcgJyk7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgbm9ybWFsaXplZC5pbmNsdWRlcygnZHVlIHRpbWUnKSB8fFxyXG4gICAgICAgIG5vcm1hbGl6ZWQuaW5jbHVkZXMoJ3Jlc3BvbnNpYmlsaXR5IGVuZHMgYWZ0ZXInKSB8fFxyXG4gICAgICAgIG5vcm1hbGl6ZWQuaW5jbHVkZXMoJ3Jlc3BvbnNpYmlsaXR5IGVuZHMgYnkgZGF0ZScpXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbWFwcyBmcmVxdWVuY3kgY29sdW1ucyB3aGVuIHRoZSB1cGxvYWRlZCBmaWxlIGluY2x1ZGVzIHRoZSBmb3VyIG5ldyBmaWVsZHMsXHJcbiAgICogc28gbGF0ZXIgY29sdW1ucyAoUkMsIHJldmlld2VyLCBldGMuKSBzdGF5IGFsaWduZWQuIE9uZ29pbmcvb25Db21wbGV0aW9uIGFyZSB1bmNoYW5nZWQuXHJcbiAgICovXHJcbiAgYXBwbHlFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMob2JqOiBhbnksIHJlcG9ydDogYW55LCBpc1Byb2dyYW06IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmIChpc1Byb2dyYW0pIHtcclxuICAgICAgb2JqLmR1ZVRpbWUgPSByZXBvcnRbMTFdO1xyXG4gICAgICBvYmoucmVzcG9uc2liaWxpdHlXaW5kb3cgPSByZXBvcnRbMTJdO1xyXG4gICAgICBvYmouZmFpbGVkQWZ0ZXIgPSByZXBvcnRbMTNdO1xyXG4gICAgICBvYmouZW5kc0FmdGVyT2NjdXJyZW5jZXMgPSByZXBvcnRbMTRdO1xyXG4gICAgICBvYmouZW5kc0J5RGF0ZURheSA9IHJlcG9ydFsxNV07XHJcbiAgICAgIG9iai5lbmRzQnlEYXRlTW9udGggPSByZXBvcnRbMTZdO1xyXG4gICAgICBvYmoucmVzcG9uc2liaWxpdHlDZW50ZXIgPSByZXBvcnRbMTddO1xyXG4gICAgICBvYmoucmVzcG9uc2liaWxpdHlDZW50ZXJUeXBlID0gcmVwb3J0WzE4XTtcclxuICAgICAgb2JqLnJlcG9ydENsYXNzID0gcmVwb3J0WzE5XTtcclxuICAgICAgb2JqLm9iamVjdGl2ZSA9IHJlcG9ydFsyMF07XHJcbiAgICAgIG9iai5ub3RlcyA9IHJlcG9ydFsyMV07XHJcbiAgICAgIG9iai5pc0Zvcm1hdCA9IHJlcG9ydFsyMl07XHJcbiAgICAgIG9iai5mb3JtYXRGb3JSZXNwb25zaWJpbGl0eSA9IHJlcG9ydFsyM107XHJcbiAgICAgIG9iai5kb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQgPSByZXBvcnRbMjRdO1xyXG4gICAgICBvYmoucmV2aWV3ZXIgPSByZXBvcnRbMjVdO1xyXG4gICAgICBvYmoucmV2aWV3ZXJUeXBlID0gcmVwb3J0WzI2XTtcclxuICAgICAgb2JqLnJldmlld1RvQmVDb21wbGV0ZWRXaXRoaW4gPSByZXBvcnRbMjddO1xyXG4gICAgICBvYmoucmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXIgPSByZXBvcnRbMjhdO1xyXG4gICAgICBvYmoub3ZlcnNlZXIgPSByZXBvcnRbMjldO1xyXG4gICAgICBvYmoubm90aWZ5T25GYWlsdXJlID0gcmVwb3J0WzMwXTtcclxuICAgICAgb2JqLmNvbGxhYm9yYXRvciA9IHJlcG9ydFszMV07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBvYmouZHVlVGltZSA9IHJlcG9ydFs4XTtcclxuICAgICAgb2JqLnJlc3BvbnNpYmlsaXR5V2luZG93ID0gcmVwb3J0WzldO1xyXG4gICAgICBvYmouZmFpbGVkQWZ0ZXIgPSByZXBvcnRbMTBdO1xyXG4gICAgICBvYmouZW5kc0FmdGVyT2NjdXJyZW5jZXMgPSByZXBvcnRbMTFdO1xyXG4gICAgICBvYmouZW5kc0J5RGF0ZURheSA9IHJlcG9ydFsxMl07XHJcbiAgICAgIG9iai5lbmRzQnlEYXRlTW9udGggPSByZXBvcnRbMTNdO1xyXG4gICAgICBvYmoucmVzcG9uc2liaWxpdHlDZW50ZXIgPSByZXBvcnRbMTRdO1xyXG4gICAgICBvYmoucmVwb3J0Q2xhc3MgPSByZXBvcnRbMTVdO1xyXG4gICAgICBvYmoub2JqZWN0aXZlID0gcmVwb3J0WzE2XTtcclxuICAgICAgb2JqLm5vdGVzID0gcmVwb3J0WzE3XTtcclxuICAgICAgb2JqLmlzRm9ybWF0ID0gcmVwb3J0WzE4XTtcclxuICAgICAgb2JqLmZvcm1hdEZvclJlc3BvbnNpYmlsaXR5ID0gcmVwb3J0WzE5XTtcclxuICAgICAgb2JqLmRvY3VtZW50RXZpZGVuY2VSZXF1aXJlZCA9IHJlcG9ydFsyMF07XHJcbiAgICAgIG9iai5yZXZpZXdlciA9IHJlcG9ydFsyMV07XHJcbiAgICAgIG9iai5yZXZpZXdUb0JlQ29tcGxldGVkV2l0aGluID0gcmVwb3J0WzIyXTtcclxuICAgICAgb2JqLnJldmlld1dpbGxCZUZhaWxlZEFmdGVyID0gcmVwb3J0WzIzXTtcclxuICAgICAgb2JqLm92ZXJzZWVyID0gcmVwb3J0WzI0XTtcclxuICAgICAgb2JqLm5vdGlmeU9uRmFpbHVyZSA9IHJlcG9ydFsyNV07XHJcbiAgICAgIG9iai5jb2xsYWJvcmF0b3IgPSByZXBvcnRbMjZdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSXQgdGFrZXMgaW4gYSByZXBvcnQsIGEgdGFiIHR5cGUsIGFuZCBhIGJvb2xlYW4gdmFsdWUuIEl0IHRoZW4gcmV0dXJucyBhbiBvYmplY3Qgd2l0aCBhIGJ1bmNoIG9mXHJcbiAgICogcHJvcGVydGllcy5cclxuICAgKiA8L2NvZGU+XHJcbiAgICogQHBhcmFtIHthbnl9IHJlcG9ydCAtIGFueSA9Jmd0OyB0aGUgYXJyYXkgb2YgZGF0YVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJUeXBlIC0gc3RyaW5nIC0gdGhpcyBpcyB0aGUgdHlwZSBvZiB0YWIgdGhhdCBpcyBzZWxlY3RlZC5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzUHJvZ3JhbSAtIGJvb2xlYW5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucyAtIHdoZXRoZXIgdGhlIHhsc3ggaW5jbHVkZXMgdGhlIGZvdXIgbmV3IGZyZXF1ZW5jeSBjb2x1bW5zXHJcbiAgICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxyXG4gICAqL1xyXG4gIHNldFJlcG9ydERldGFpbHMocmVwb3J0OiBhbnksIHRhYlR5cGU6IHN0cmluZywgaXNQcm9ncmFtOiBib29sZWFuLCBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMgPSBmYWxzZSkge1xyXG5cclxuICAgIGxldCBvYmo6IGFueTtcclxuICAgIHN3aXRjaCAodGFiVHlwZSkge1xyXG4gICAgICBjYXNlICdmcmVxdWVuY3knOiB7XHJcbiAgICAgICAgaWYgKGlzUHJvZ3JhbSkge1xyXG4gICAgICAgICAgb2JqID0ge1xyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eU5hbWU6IHJlcG9ydFswXSxcclxuICAgICAgICAgICAgcHJvZ3JhbVR5cGU6IHJlcG9ydFsxXSxcclxuICAgICAgICAgICAgcHJvZ3JhbTogcmVwb3J0WzJdLFxyXG4gICAgICAgICAgICBwcm9ncmFtQ2F0ZWdvcnk6IHJlcG9ydFszXSxcclxuICAgICAgICAgICAgYXNzaWdub3I6IHJlcG9ydFs0XSxcclxuICAgICAgICAgICAgYXNzaWduZWU6IHJlcG9ydFs1XSxcclxuICAgICAgICAgICAgYXNzaWduZWVUeXBlOiByZXBvcnRbNl0sXHJcbiAgICAgICAgICAgIGtleVJlc3BvbnNpYmlsaXR5OiByZXBvcnRbN10sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2F0ZWdvcnk6IG51bGwsXHJcbiAgICAgICAgICAgIGZyZXF1ZW5jeTogcmVwb3J0WzhdLFxyXG4gICAgICAgICAgICBkYXk6IHJlcG9ydFs5XSxcclxuICAgICAgICAgICAgbW9udGg6IHJlcG9ydFsxMF0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5V2luZG93OiByZXBvcnRbMTFdLFxyXG4gICAgICAgICAgICBmYWlsZWRBZnRlcjogcmVwb3J0WzEyXSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXI6IHJlcG9ydFsxM10sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyVHlwZTogcmVwb3J0WzE0XSxcclxuICAgICAgICAgICAgcmVwb3J0Q2xhc3M6IHJlcG9ydFsxNV0sXHJcbiAgICAgICAgICAgIG9iamVjdGl2ZTogcmVwb3J0WzE2XSxcclxuICAgICAgICAgICAgbm90ZXM6IHJlcG9ydFsxN10sXHJcbiAgICAgICAgICAgIGlzRm9ybWF0OiByZXBvcnRbMThdLFxyXG4gICAgICAgICAgICBmb3JtYXRGb3JSZXNwb25zaWJpbGl0eTogcmVwb3J0WzE5XSxcclxuICAgICAgICAgICAgZG9jdW1lbnRFdmlkZW5jZVJlcXVpcmVkOiByZXBvcnRbMjBdLFxyXG4gICAgICAgICAgICAvLyBldmlkZW5jZU5vdGVzOiByZXBvcnRbMTldLFxyXG4gICAgICAgICAgICAvLyBhc3Nlc3NtZW50czogcmVwb3J0WzIwXSxcclxuXHJcbiAgICAgICAgICAgIHJldmlld2VyOiByZXBvcnRbMjFdICxcclxuICAgICAgICAgICAgcmV2aWV3ZXJUeXBlOiByZXBvcnRbMjJdLFxyXG4gICAgICAgICAgICByZXZpZXdUb0JlQ29tcGxldGVkV2l0aGluOiByZXBvcnRbMjNdLFxyXG4gICAgICAgICAgICByZXZpZXdXaWxsQmVGYWlsZWRBZnRlcjogcmVwb3J0WzI0XSxcclxuICAgICAgICAgICAgb3ZlcnNlZXI6IHJlcG9ydFsyNV0sXHJcbiAgICAgICAgICAgIG5vdGlmeU9uRmFpbHVyZTogcmVwb3J0WzI2XSxcclxuICAgICAgICAgICAgY29sbGFib3JhdG9yOiByZXBvcnRbMjddLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIGlmIChoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMpIHtcclxuICAgICAgICAgICAgdGhpcy5hcHBseUV4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucyhvYmosIHJlcG9ydCwgdHJ1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gPSB0aGlzLmlzVmFsaWREYXRhKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ10gPSB0aGlzLnJldHVybklkcyhvYmo/LmFzc2lnbmVlLCAnZW50cnVzdGVkX3RvJylcclxuICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgICAgICBvYmpbJ3VzZXJWYWxpZGF0ZVdpdGhQcm9ncmFtJ10gPSB0aGlzLnZhbGlkYXRlRGF0YVdpdGhQcm9ncmFtKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ3ZhbGlkRGF0ZSddID0gdGhpcy5jb21wYXJlV2l0aEN1cnJlbnREYXRlKG9iaj8uZGF5LCBvYmo/Lm1vbnRoKTtcclxuICAgICAgICAgIG9ialsnaXNEYXRlRm9ybWF0SW52YWxpZCddID0gdGhpcy5pc0RhdGVGb3JtYXRJbnZhbGlkO1xyXG4gICAgICAgICAgb2JqWydpc0RheUludmFsaWQnXSA9IHRoaXMuaXNEYXlJbnZhbGlkO1xyXG4gICAgICAgICAgb2JqWydpc1Bhc3REYXRlJ10gPSB0aGlzLmlzUGFzdERhdGUob2JqPy5kYXksIG9iaj8ubW9udGgpO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkRHVlVGltZSddID0gdGhpcy5pc1ZhbGlkRHVlVGltZShcclxuICAgICAgICAgICAgb2JqPy5kdWVUaW1lLFxyXG4gICAgICAgICAgICBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBvYmpbJ2VuZHNBZnRlck9jY3VycmVuY2VzRXJyb3InXSA9IHRoaXMuZ2V0RW5kc0FmdGVyT2NjdXJyZW5jZXNFcnJvcihcclxuICAgICAgICAgICAgb2JqPy5lbmRzQWZ0ZXJPY2N1cnJlbmNlcyxcclxuICAgICAgICAgICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkRW5kc0FmdGVyT2NjdXJyZW5jZXMnXSA9ICFvYmpbJ2VuZHNBZnRlck9jY3VycmVuY2VzRXJyb3InXTtcclxuICAgICAgICAgIHRoaXMuYXBwbHlFbmRzQnlEYXRlVmFsaWRhdGlvbihvYmosIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucyk7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWQnXSA9XHJcbiAgICAgICAgICAgIG9ialsnaXNWYWxpZERhdGEnXSAmJlxyXG4gICAgICAgICAgICBvYmpbJ3ZhbGlkRGF0ZSddICYmXHJcbiAgICAgICAgICAgICFvYmpbJ2lzUGFzdERhdGUnXSAmJlxyXG4gICAgICAgICAgICBvYmo/LmZyZXF1ZW5jeT8ubGVuZ3RoICYmXHJcbiAgICAgICAgICAgICFPYmplY3QudmFsdWVzKG9ialsndXNlclZhbGlkYXRlV2l0aFByb2dyYW0nXSkuaW5jbHVkZXMoZmFsc2UpICYmXHJcbiAgICAgICAgICAgIG9ialsnaXNWYWxpZFVzZXInXSAmJlxyXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWRSaXNrQ2xhc3Mob2JqPy5yZXBvcnRDbGFzcykgJiZcclxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkRW5kc0FmdGVyT2NjdXJyZW5jZXMnXSAmJlxyXG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWRFbmRzQnlEYXRlJ11cclxuICAgICAgICAgIHJldHVybiB0aGlzLndpdGhEcm9wZG93blZhbGlkYXRpb24oXHJcbiAgICAgICAgICAgIG9iaixcclxuICAgICAgICAgICAgdGFiVHlwZSxcclxuICAgICAgICAgICAgaXNQcm9ncmFtLFxyXG4gICAgICAgICAgICBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG9iaiA9IHtcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlOYW1lOiByZXBvcnRbMF0sXHJcbiAgICAgICAgICAgIGFzc2lnbm9yOiByZXBvcnRbMV0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlOiByZXBvcnRbMl0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlVHlwZTogcmVwb3J0WzNdLFxyXG4gICAgICAgICAgICBrZXlSZXNwb25zaWJpbGl0eTogcmVwb3J0WzRdLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNhdGVnb3J5OiBudWxsLFxyXG4gICAgICAgICAgICBmcmVxdWVuY3k6IHJlcG9ydFs1XSxcclxuICAgICAgICAgICAgZGF5OiByZXBvcnRbNl0sXHJcbiAgICAgICAgICAgIG1vbnRoOiByZXBvcnRbN10sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5V2luZG93OiByZXBvcnRbOF0sXHJcbiAgICAgICAgICAgIGZhaWxlZEFmdGVyOiByZXBvcnRbOV0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyOiByZXBvcnRbMTBdLFxyXG4gICAgICAgICAgICByZXBvcnRDbGFzczogcmVwb3J0WzExXSxcclxuICAgICAgICAgICAgb2JqZWN0aXZlOiByZXBvcnRbMTJdLFxyXG4gICAgICAgICAgICBub3RlczogcmVwb3J0WzEzXSxcclxuICAgICAgICAgICAgaXNGb3JtYXQ6IHJlcG9ydFsxNF0sXHJcbiAgICAgICAgICAgIGZvcm1hdEZvclJlc3BvbnNpYmlsaXR5OiByZXBvcnRbMTVdLFxyXG4gICAgICAgICAgICBkb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQ6IHJlcG9ydFsxNl0sXHJcbiAgICAgICAgICAgIC8vIGV2aWRlbmNlTm90ZXM6IHJlcG9ydFsxNl0sXHJcbiAgICAgICAgICAgIC8vIGFzc2Vzc21lbnRzOiByZXBvcnRbMTddLFxyXG4gICAgICAgICAgICByZXZpZXdlcjogcmVwb3J0WzE3XSxcclxuICAgICAgICAgICAgcmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbjogcmVwb3J0WzE4XSxcclxuICAgICAgICAgICAgcmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXI6IHJlcG9ydFsxOV0sXHJcbiAgICAgICAgICAgIG92ZXJzZWVyOiByZXBvcnRbMjBdLFxyXG4gICAgICAgICAgICBub3RpZnlPbkZhaWx1cmU6IHJlcG9ydFsyMV0sXHJcbiAgICAgICAgICAgIGNvbGxhYm9yYXRvcjogcmVwb3J0WzIyXSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBpZiAoaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHlFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMob2JqLCByZXBvcnQsIGZhbHNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIG9ialsnaXNWYWxpZERhdGEnXSA9IHRoaXMuaXNWYWxpZERhdGEob2JqKTtcclxuICAgICAgICAgIG9ialsndXNlclZhbGlkYXRlV2l0aFByb2dyYW0nXSA9IHRoaXMudmFsaWRhdGVEYXRhV2l0aFByb2dyYW0ob2JqKTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZFVzZXInXSA9IHRoaXMucmV0dXJuSWRzKG9iaj8uYXNzaWduZWUsICdlbnRydXN0ZWRfdG8nKVxyXG4gICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgOiBmYWxzZTtcclxuICAgICAgICAgIG9ialsndmFsaWREYXRlJ10gPSB0aGlzLmNvbXBhcmVXaXRoQ3VycmVudERhdGUob2JqPy5kYXksIG9iaj8ubW9udGgpO1xyXG4gICAgICAgICAgb2JqWydpc1Bhc3REYXRlJ10gPSB0aGlzLmlzUGFzdERhdGUob2JqPy5kYXksIG9iaj8ubW9udGgpO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkRHVlVGltZSddID0gdGhpcy5pc1ZhbGlkRHVlVGltZShcclxuICAgICAgICAgICAgb2JqPy5kdWVUaW1lLFxyXG4gICAgICAgICAgICBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBvYmpbJ2VuZHNBZnRlck9jY3VycmVuY2VzRXJyb3InXSA9IHRoaXMuZ2V0RW5kc0FmdGVyT2NjdXJyZW5jZXNFcnJvcihcclxuICAgICAgICAgICAgb2JqPy5lbmRzQWZ0ZXJPY2N1cnJlbmNlcyxcclxuICAgICAgICAgICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkRW5kc0FmdGVyT2NjdXJyZW5jZXMnXSA9ICFvYmpbJ2VuZHNBZnRlck9jY3VycmVuY2VzRXJyb3InXTtcclxuICAgICAgICAgIHRoaXMuYXBwbHlFbmRzQnlEYXRlVmFsaWRhdGlvbihvYmosIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucyk7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWQnXSA9XHJcbiAgICAgICAgICAgIG9ialsnaXNWYWxpZERhdGEnXSAmJlxyXG4gICAgICAgICAgICBvYmpbJ3ZhbGlkRGF0ZSddICYmXHJcbiAgICAgICAgICAgICFvYmpbJ2lzUGFzdERhdGUnXSAmJlxyXG4gICAgICAgICAgICBvYmo/LmZyZXF1ZW5jeT8ubGVuZ3RoICYmXHJcbiAgICAgICAgICAgIG9ialsnaXNWYWxpZFVzZXInXSAmJlxyXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWRSaXNrQ2xhc3Mob2JqPy5yZXBvcnRDbGFzcykgJiZcclxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkRW5kc0FmdGVyT2NjdXJyZW5jZXMnXSAmJlxyXG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWRFbmRzQnlEYXRlJ11cclxuICAgICAgICAgIHJldHVybiB0aGlzLndpdGhEcm9wZG93blZhbGlkYXRpb24oXHJcbiAgICAgICAgICAgIG9iaixcclxuICAgICAgICAgICAgdGFiVHlwZSxcclxuICAgICAgICAgICAgaXNQcm9ncmFtLFxyXG4gICAgICAgICAgICBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ29uZ29pbmcnOiB7XHJcbiAgICAgICAgaWYgKGlzUHJvZ3JhbSkge1xyXG4gICAgICAgICAgb2JqID0ge1xyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eU5hbWU6IHJlcG9ydFswXSxcclxuICAgICAgICAgICAgcHJvZ3JhbVR5cGU6IHJlcG9ydFsxXSxcclxuICAgICAgICAgICAgcHJvZ3JhbTogcmVwb3J0WzJdLFxyXG4gICAgICAgICAgICBwcm9ncmFtQ2F0ZWdvcnk6IHJlcG9ydFszXSxcclxuICAgICAgICAgICAgYXNzaWdub3I6IHJlcG9ydFs0XSxcclxuICAgICAgICAgICAgYXNzaWduZWU6IHJlcG9ydFs1XSxcclxuICAgICAgICAgICAgYXNzaWduZWVUeXBlOiByZXBvcnRbNl0sXHJcbiAgICAgICAgICAgIGtleVJlc3BvbnNpYmlsaXR5OiByZXBvcnRbN10sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyOiByZXBvcnRbOF0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyVHlwZTogcmVwb3J0WzldLFxyXG4gICAgICAgICAgICByZXBvcnRDbGFzczogcmVwb3J0WzEwXSxcclxuICAgICAgICAgICAgb2JqZWN0aXZlOiByZXBvcnRbMTFdLFxyXG4gICAgICAgICAgICBub3RlczogcmVwb3J0WzEyXSxcclxuICAgICAgICAgICAgaXNGb3JtYXQ6IHJlcG9ydFsxM10sXHJcbiAgICAgICAgICAgIGZvcm1hdEZvclJlc3BvbnNpYmlsaXR5OiByZXBvcnRbMTRdLFxyXG4gICAgICAgICAgICBkb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQ6IHJlcG9ydFsxNV0sXHJcbiAgICAgICAgICAgIHJldmlld2VyOiByZXBvcnRbMTZdLFxyXG4gICAgICAgICAgICByZXZpZXdlclR5cGU6IHJlcG9ydFsxN10sIFxyXG4gICAgICAgICAgICByZXZpZXdUb0JlQ29tcGxldGVkV2l0aGluOiByZXBvcnRbMThdLFxyXG4gICAgICAgICAgICByZXZpZXdXaWxsQmVGYWlsZWRBZnRlcjogcmVwb3J0WzE5XSxcclxuICAgICAgICAgICAgb3ZlcnNlZXI6IHJlcG9ydFsyMF0sXHJcbiAgICAgICAgICAgIG5vdGlmeU9uRmFpbHVyZTogcmVwb3J0WzIxXSxcclxuICAgICAgICAgICAgZnJlcXVlbmN5OiAnT25nb2luZycsXHJcbiAgICAgICAgICAgIGNvbGxhYm9yYXRvcjogcmVwb3J0WzIyXSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gPSB0aGlzLmlzVmFsaWREYXRhKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ3VzZXJWYWxpZGF0ZVdpdGhQcm9ncmFtJ10gPSB0aGlzLnZhbGlkYXRlRGF0YVdpdGhQcm9ncmFtKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ10gPSB0aGlzLnJldHVybklkcyhvYmo/LmFzc2lnbmVlLCAnZW50cnVzdGVkX3RvJylcclxuICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWQnXSA9XHJcbiAgICAgICAgICAgIG9ialsnaXNWYWxpZERhdGEnXSAmJlxyXG4gICAgICAgICAgICAhT2JqZWN0LnZhbHVlcyhvYmpbJ3VzZXJWYWxpZGF0ZVdpdGhQcm9ncmFtJ10pLmluY2x1ZGVzKGZhbHNlKSAmJlxyXG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ107XHJcblxyXG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ10gJiZcclxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkUmlza0NsYXNzKG9iaj8ucmVwb3J0Q2xhc3MpIFxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMud2l0aERyb3Bkb3duVmFsaWRhdGlvbihcclxuICAgICAgICAgICAgb2JqLFxyXG4gICAgICAgICAgICB0YWJUeXBlLFxyXG4gICAgICAgICAgICBpc1Byb2dyYW0sXHJcbiAgICAgICAgICAgIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgb2JqID0ge1xyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eU5hbWU6IHJlcG9ydFswXSxcclxuICAgICAgICAgICAgYXNzaWdub3I6IHJlcG9ydFsxXSxcclxuICAgICAgICAgICAgYXNzaWduZWU6IHJlcG9ydFsyXSxcclxuICAgICAgICAgICAgYXNzaWduZWVUeXBlOiByZXBvcnRbM10sXHJcbiAgICAgICAgICAgIGtleVJlc3BvbnNpYmlsaXR5OiByZXBvcnRbNF0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2F0ZWdvcnk6IG51bGwsXHJcbiAgICAgICAgICAgIGZyZXF1ZW5jeTogcmVwb3J0WzVdLFxyXG4gICAgICAgICAgICBzZXRSZW1pbmRlcjogcmVwb3J0WzZdLFxyXG4gICAgICAgICAgICBmcmVxdWVuY3lSZW1pbmRlcjogcmVwb3J0WzddLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNlbnRlcjogcmVwb3J0WzhdLFxyXG4gICAgICAgICAgICByZXBvcnRDbGFzczogcmVwb3J0WzldLFxyXG4gICAgICAgICAgICBvYmplY3RpdmU6IHJlcG9ydFsxMF0sXHJcbiAgICAgICAgICAgIG5vdGVzOiByZXBvcnRbMTFdLFxyXG4gICAgICAgICAgICBpc0Zvcm1hdDogcmVwb3J0WzEyXSxcclxuICAgICAgICAgICAgZm9ybWF0Rm9yUmVzcG9uc2liaWxpdHk6IHJlcG9ydFsxM10sXHJcbiAgICAgICAgICAgIGRvY3VtZW50RXZpZGVuY2VSZXF1aXJlZDogcmVwb3J0WzE0XSxcclxuICAgICAgICAgICAgLy8gZXZpZGVuY2VOb3RlczogcmVwb3J0WzE0XSxcclxuICAgICAgICAgICAgLy8gYXNzZXNzbWVudHM6IHJlcG9ydFsxNV0sXHJcbiAgICAgICAgICAgIHJldmlld2VyOiByZXBvcnRbMTVdLFxyXG4gICAgICAgICAgICByZXZpZXdUb0JlQ29tcGxldGVkV2l0aGluOiByZXBvcnRbMTZdLFxyXG4gICAgICAgICAgICByZXZpZXdXaWxsQmVGYWlsZWRBZnRlcjogcmVwb3J0WzE3XSxcclxuICAgICAgICAgICAgb3ZlcnNlZXI6IHJlcG9ydFsxOF0sXHJcbiAgICAgICAgICAgIG5vdGlmeU9uRmFpbHVyZTogcmVwb3J0WzE5XSxcclxuICAgICAgICAgICAgY29sbGFib3JhdG9yOiByZXBvcnRbMjBdLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZERhdGEnXSA9IHRoaXMuaXNWYWxpZERhdGEob2JqKTtcclxuICAgICAgICAgIG9ialsndXNlclZhbGlkYXRlV2l0aFByb2dyYW0nXSA9IHRoaXMudmFsaWRhdGVEYXRhV2l0aFByb2dyYW0ob2JqKTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZFVzZXInXSA9IHRoaXMucmV0dXJuSWRzKG9iaj8uYXNzaWduZWUsICdlbnRydXN0ZWRfdG8nKVxyXG4gICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgOiBmYWxzZTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZCddID0gb2JqWydpc1ZhbGlkRGF0YSddICYmIG9ialsnaXNWYWxpZFVzZXInXSAmJlxyXG4gICAgICAgICAgdGhpcy5pc1ZhbGlkUmlza0NsYXNzKG9iaj8ucmVwb3J0Q2xhc3MpIFxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMud2l0aERyb3Bkb3duVmFsaWRhdGlvbihcclxuICAgICAgICAgICAgb2JqLFxyXG4gICAgICAgICAgICB0YWJUeXBlLFxyXG4gICAgICAgICAgICBpc1Byb2dyYW0sXHJcbiAgICAgICAgICAgIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnb25Db21wbGV0aW9uJzoge1xyXG4gICAgICAgIGlmIChpc1Byb2dyYW0pIHtcclxuICAgICAgICAgIG9iaiA9IHtcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlOYW1lOiByZXBvcnRbMF0sXHJcbiAgICAgICAgICAgIHByb2dyYW1UeXBlOiByZXBvcnRbMV0sXHJcbiAgICAgICAgICAgIHByb2dyYW06IHJlcG9ydFsyXSxcclxuICAgICAgICAgICAgcHJvZ3JhbUNhdGVnb3J5OiByZXBvcnRbM10sXHJcbiAgICAgICAgICAgIGFzc2lnbm9yOiByZXBvcnRbNF0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlOiByZXBvcnRbNV0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlVHlwZTogcmVwb3J0WzZdLFxyXG4gICAgICAgICAgICBrZXlSZXNwb25zaWJpbGl0eTogcmVwb3J0WzddLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNhdGVnb3J5OiBudWxsLFxyXG4gICAgICAgICAgICBmcmVxdWVuY3k6IHJlcG9ydFs4XSxcclxuICAgICAgICAgICAgcGFyZW50UmVzcG9uc2liaWxpdHk6IHJlcG9ydFs5XSxcclxuICAgICAgICAgICAgZHVlRGF0ZTogcmVwb3J0WzEwXSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlXaW5kb3c6IHJlcG9ydFsxMV0sXHJcbiAgICAgICAgICAgIGZhaWxlZEFmdGVyOiByZXBvcnRbMTJdLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNlbnRlcjogcmVwb3J0WzEzXSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXJUeXBlOiByZXBvcnRbMTRdLFxyXG4gICAgICAgICAgICByZXBvcnRDbGFzczogcmVwb3J0WzE1XSxcclxuICAgICAgICAgICAgb2JqZWN0aXZlOiByZXBvcnRbMTZdLFxyXG4gICAgICAgICAgICBub3RlczogcmVwb3J0WzE3XSxcclxuICAgICAgICAgICAgaXNGb3JtYXQ6IHJlcG9ydFsxOF0sXHJcbiAgICAgICAgICAgIGZvcm1hdEZvclJlc3BvbnNpYmlsaXR5OiByZXBvcnRbMTldLFxyXG4gICAgICAgICAgICBkb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQ6IHJlcG9ydFsyMF0sXHJcbiAgICAgICAgICAgIC8vIGV2aWRlbmNlTm90ZXM6IHJlcG9ydFsxOV0sXHJcbiAgICAgICAgICAgIC8vIGFzc2Vzc21lbnRzOiByZXBvcnRbMjBdLFxyXG4gICAgICAgICAgICByZXZpZXdlcjogcmVwb3J0WzIxXSxcclxuICAgICAgICAgICAgcmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbjogcmVwb3J0WzIyXSxcclxuICAgICAgICAgICAgcmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXI6IHJlcG9ydFsyM10sXHJcbiAgICAgICAgICAgIG92ZXJzZWVyOiByZXBvcnRbMjRdLFxyXG4gICAgICAgICAgICBub3RpZnlPbkZhaWx1cmU6IHJlcG9ydFsyNV0sXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkRGF0YSddID0gdGhpcy5pc1ZhbGlkRGF0YShvYmopO1xyXG4gICAgICAgICAgb2JqWyd1c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbSddID0gdGhpcy52YWxpZGF0ZURhdGFXaXRoUHJvZ3JhbShvYmopO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddID0gdGhpcy5yZXR1cm5JZHMob2JqPy5hc3NpZ25lZSwgJ2VudHJ1c3RlZF90bycpXHJcbiAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICA6IGZhbHNlO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkJ10gPVxyXG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gJiZcclxuICAgICAgICAgICAgIU9iamVjdC52YWx1ZXMob2JqWyd1c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbSddKS5pbmNsdWRlcyhmYWxzZSkgJiZcclxuICAgICAgICAgICAgb2JqPy5wYXJlbnRSZXNwb25zaWJpbGl0eT8ubGVuZ3RoICYmXHJcbiAgICAgICAgICAgIG9ialsnaXNWYWxpZFVzZXInXSAmJlxyXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWRSaXNrQ2xhc3Mob2JqPy5yZXBvcnRDbGFzcykgXHJcbiAgICAgICAgICByZXR1cm4gdGhpcy53aXRoRHJvcGRvd25WYWxpZGF0aW9uKFxyXG4gICAgICAgICAgICBvYmosXHJcbiAgICAgICAgICAgIHRhYlR5cGUsXHJcbiAgICAgICAgICAgIGlzUHJvZ3JhbSxcclxuICAgICAgICAgICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBvYmogPSB7XHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5TmFtZTogcmVwb3J0WzBdLFxyXG4gICAgICAgICAgICBhc3NpZ25vcjogcmVwb3J0WzFdLFxyXG4gICAgICAgICAgICBhc3NpZ25lZTogcmVwb3J0WzJdLFxyXG4gICAgICAgICAgICBhc3NpZ25lZVR5cGU6IHJlcG9ydFszXSxcclxuICAgICAgICAgICAga2V5UmVzcG9uc2liaWxpdHk6IHJlcG9ydFs0XSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDYXRlZ29yeTogbnVsbCxcclxuICAgICAgICAgICAgZnJlcXVlbmN5OiByZXBvcnRbNV0sXHJcbiAgICAgICAgICAgIHBhcmVudFJlc3BvbnNpYmlsaXR5OiByZXBvcnRbNl0sXHJcbiAgICAgICAgICAgIGR1ZURhdGU6IHJlcG9ydFs3XSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlXaW5kb3c6IHJlcG9ydFs4XSxcclxuICAgICAgICAgICAgZmFpbGVkQWZ0ZXI6IHJlcG9ydFs5XSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXI6IHJlcG9ydFsxMF0sXHJcbiAgICAgICAgICAgIHJlcG9ydENsYXNzOiByZXBvcnRbMTFdLFxyXG4gICAgICAgICAgICBvYmplY3RpdmU6IHJlcG9ydFsxMl0sXHJcbiAgICAgICAgICAgIG5vdGVzOiByZXBvcnRbMTNdLFxyXG4gICAgICAgICAgICBpc0Zvcm1hdDogcmVwb3J0WzE0XSxcclxuICAgICAgICAgICAgZm9ybWF0Rm9yUmVzcG9uc2liaWxpdHk6IHJlcG9ydFsxNV0sXHJcbiAgICAgICAgICAgIGRvY3VtZW50RXZpZGVuY2VSZXF1aXJlZDogcmVwb3J0WzE2XSxcclxuICAgICAgICAgICAgLy8gZXZpZGVuY2VOb3RlczogcmVwb3J0WzE2XSxcclxuICAgICAgICAgICAgLy8gYXNzZXNzbWVudHM6IHJlcG9ydFsxN10sXHJcbiAgICAgICAgICAgIHJldmlld2VyOiByZXBvcnRbMTddLFxyXG4gICAgICAgICAgICByZXZpZXdUb0JlQ29tcGxldGVkV2l0aGluOiByZXBvcnRbMThdLFxyXG4gICAgICAgICAgICByZXZpZXdXaWxsQmVGYWlsZWRBZnRlcjogcmVwb3J0WzE5XSxcclxuICAgICAgICAgICAgb3ZlcnNlZXI6IHJlcG9ydFsyMF0sXHJcbiAgICAgICAgICAgIG5vdGlmeU9uRmFpbHVyZTogcmVwb3J0WzIxXSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gPSB0aGlzLmlzVmFsaWREYXRhKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ3VzZXJWYWxpZGF0ZVdpdGhQcm9ncmFtJ10gPSB0aGlzLnZhbGlkYXRlRGF0YVdpdGhQcm9ncmFtKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ10gPSB0aGlzLnJldHVybklkcyhvYmo/LmFzc2lnbmVlLCAnZW50cnVzdGVkX3RvJylcclxuICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWQnXSA9XHJcbiAgICAgICAgICAgIG9ialsnaXNWYWxpZERhdGEnXSAmJlxyXG4gICAgICAgICAgICBvYmo/LnBhcmVudFJlc3BvbnNpYmlsaXR5Py5sZW5ndGggJiZcclxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddICYmXHJcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZFJpc2tDbGFzcyhvYmo/LnJlcG9ydENsYXNzKSBcclxuICAgICAgICAgIHJldHVybiB0aGlzLndpdGhEcm9wZG93blZhbGlkYXRpb24oXHJcbiAgICAgICAgICAgIG9iaixcclxuICAgICAgICAgICAgdGFiVHlwZSxcclxuICAgICAgICAgICAgaXNQcm9ncmFtLFxyXG4gICAgICAgICAgICBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNWYWxpZFJpc2tDbGFzcyhyaXNrQ2xhc3M6IGFueSkge1xyXG4gICAgaWYoIXJpc2tDbGFzcykgcmV0dXJuIHRydWU7XHJcbiAgICByZXR1cm4gUklTS19DTEFTU19MSVNULmluY2x1ZGVzKHJpc2tDbGFzcz8udG9Mb3dlckNhc2UoKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGRzIGRyb3Bkb3duLWxpc3QgY2hlY2tzIG9uIHRvcCBvZiBleGlzdGluZyByb3cgdmFsaWRhdGlvbi5cclxuICAgKiBFbXB0eSBvcHRpb25hbCBjZWxscyBhcmUgdmFsaWQuIEZyZXF1ZW5jeSAvIGR1ZSBkYXRlIC8gZHVlIHRpbWUgYXJlIHNraXBwZWQgZm9yIG9uZ29pbmcuXHJcbiAgICogV2FybmluZyBhbmQgaW5mbyBpc3N1ZXMgYXJlIHNob3duIGluIHByZXZpZXcgYnV0IGRvIG5vdCBtYWtlIHRoZSByb3cgaW52YWxpZC5cclxuICAgKi9cclxuICB3aXRoRHJvcGRvd25WYWxpZGF0aW9uKFxyXG4gICAgb2JqOiBhbnksXHJcbiAgICB0YWJUeXBlOiBzdHJpbmcsXHJcbiAgICBpc1Byb2dyYW06IGJvb2xlYW4sXHJcbiAgICBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMgPSBmYWxzZVxyXG4gICk6IGFueSB7XHJcbiAgICBpZiAoIW9iaikge1xyXG4gICAgICByZXR1cm4gb2JqO1xyXG4gICAgfVxyXG4gICAgb2JqWydmaWVsZFZhbGlkYXRpb24nXSA9IHt9O1xyXG4gICAgdGhpcy5hcHBseURyb3Bkb3duVmFsaWRhdGlvbihcclxuICAgICAgb2JqLFxyXG4gICAgICB0YWJUeXBlLFxyXG4gICAgICBpc1Byb2dyYW0sXHJcbiAgICAgIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1uc1xyXG4gICAgKTtcclxuICAgIHRoaXMuYXBwbHlEYXlzQ291bnRWYWxpZGF0aW9uKG9iaiwgdGFiVHlwZSk7XHJcbiAgICB0aGlzLmFwcGx5U2hlZXRGaWVsZE1lc3NhZ2VzKFxyXG4gICAgICBvYmosXHJcbiAgICAgIHRhYlR5cGUsXHJcbiAgICAgIGlzUHJvZ3JhbSxcclxuICAgICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zXHJcbiAgICApO1xyXG4gICAgb2JqWydpc1ZhbGlkJ10gPSAhdGhpcy5oYXNCbG9ja2luZ0ZpZWxkSXNzdWVzKG9iaik7XHJcbiAgICByZXR1cm4gb2JqO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlEcm9wZG93blZhbGlkYXRpb24oXHJcbiAgICBvYmo6IGFueSxcclxuICAgIHRhYlR5cGU6IHN0cmluZyxcclxuICAgIGlzUHJvZ3JhbTogYm9vbGVhbixcclxuICAgIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucyA9IGZhbHNlXHJcbiAgKTogdm9pZCB7XHJcbiAgICBjb25zdCByZXZpZXdlck5hbWVzID0gdGhpcy5nZXRUZW1wbGF0ZUxpc3ROYW1lcyhcclxuICAgICAgdGhpcy50ZW1wbGF0ZUluZm8/LnJldmlld2VyTGlzdCxcclxuICAgICAgJ25hbWVBbmRFbWFpbCdcclxuICAgICk7XHJcbiAgICBjb25zdCBhc3NpZ25lZU5hbWVzID0gdGhpcy5nZXRUZW1wbGF0ZUxpc3ROYW1lcyhcclxuICAgICAgdGhpcy50ZW1wbGF0ZUluZm8/LmFzc2lnbmVlc0xpc3QsXHJcbiAgICAgICduYW1lQW5kRW1haWwnXHJcbiAgICApO1xyXG4gICAgY29uc3QgcHJvZ3JhbUNhdGVnb3J5TmFtZXMgPSB0aGlzLmdldFByb2dyYW1DYXRlZ29yeU5hbWVzKCk7XHJcbiAgICBjb25zdCBkcm9wZG93blZhbGlkYXRpb246IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9ID0ge1xyXG4gICAgICBwcm9ncmFtVHlwZTogdHJ1ZSxcclxuICAgICAgcHJvZ3JhbTogdHJ1ZSxcclxuICAgICAgcHJvZ3JhbUNhdGVnb3J5OiB0cnVlLFxyXG4gICAgICBhc3NpZ25vcjogdHJ1ZSxcclxuICAgICAgYXNzaWduZWU6IHRydWUsXHJcbiAgICAgIGFzc2lnbmVlVHlwZTogdHJ1ZSxcclxuICAgICAga2V5UmVzcG9uc2liaWxpdHk6IHRydWUsXHJcbiAgICAgIGZyZXF1ZW5jeTogdHJ1ZSxcclxuICAgICAgZGF5OiB0cnVlLFxyXG4gICAgICBtb250aDogdHJ1ZSxcclxuICAgICAgZHVlVGltZTogdHJ1ZSxcclxuICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXI6IHRydWUsXHJcbiAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyVHlwZTogdHJ1ZSxcclxuICAgICAgcmVwb3J0Q2xhc3M6IHRydWUsXHJcbiAgICAgIGlzRm9ybWF0OiB0cnVlLFxyXG4gICAgICBkb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQ6IHRydWUsXHJcbiAgICAgIHJldmlld2VyOiB0cnVlLFxyXG4gICAgICByZXZpZXdlclR5cGU6IHRydWUsXHJcbiAgICAgIG92ZXJzZWVyOiB0cnVlLFxyXG4gICAgICBub3RpZnlPbkZhaWx1cmU6IHRydWUsXHJcbiAgICAgIGNvbGxhYm9yYXRvcjogdHJ1ZSxcclxuICAgIH07XHJcblxyXG4gICAgaWYgKGlzUHJvZ3JhbSkge1xyXG4gICAgICBjb25zdCBoYXNQcm9ncmFtID0gdGhpcy5oYXNWYWx1ZShvYmo/LnByb2dyYW0pO1xyXG4gICAgICBjb25zdCBoYXNQcm9ncmFtVHlwZSA9IHRoaXMuaGFzVmFsdWUob2JqPy5wcm9ncmFtVHlwZSk7XHJcbiAgICAgIGlmIChoYXNQcm9ncmFtVHlwZSAmJiAhaGFzUHJvZ3JhbSkge1xyXG4gICAgICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5wcm9ncmFtVHlwZSA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZHJvcGRvd25WYWxpZGF0aW9uLnByb2dyYW1UeXBlID0gdGhpcy5pc0luU3RhdGljRHJvcGRvd24oXHJcbiAgICAgICAgICBvYmo/LnByb2dyYW1UeXBlLFxyXG4gICAgICAgICAgUFJPR1JBTV9UWVBFX0RST1BET1dOX0xJU1RcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5wcm9ncmFtID0gdGhpcy5pc0luRHJvcGRvd25MaXN0KFxyXG4gICAgICAgIG9iaj8ucHJvZ3JhbSxcclxuICAgICAgICB0aGlzLmdldFRlbXBsYXRlTGlzdE5hbWVzKHRoaXMudGVtcGxhdGVJbmZvPy5jYXRlZ29yeUxpc3QsICdwcm9ncmFtTmFtZScpXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICh0aGlzLmhhc1ZhbHVlKG9iaj8ucHJvZ3JhbUNhdGVnb3J5KSAmJiAhaGFzUHJvZ3JhbSkge1xyXG4gICAgICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5wcm9ncmFtQ2F0ZWdvcnkgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmhhc1ZhbHVlKG9iaj8ucHJvZ3JhbUNhdGVnb3J5KSAmJiBoYXNQcm9ncmFtKSB7XHJcbiAgICAgICAgY29uc3QgY2F0ZWdvcnlOYW1lcyA9IHRoaXMuZ2V0UHJvZ3JhbUNhdGVnb3J5TmFtZXNGb3JQcm9ncmFtKFxyXG4gICAgICAgICAgb2JqPy5wcm9ncmFtXHJcbiAgICAgICAgKTtcclxuICAgICAgICBkcm9wZG93blZhbGlkYXRpb24ucHJvZ3JhbUNhdGVnb3J5ID0gdGhpcy5pc0luRHJvcGRvd25MaXN0KFxyXG4gICAgICAgICAgb2JqPy5wcm9ncmFtQ2F0ZWdvcnksXHJcbiAgICAgICAgICBjYXRlZ29yeU5hbWVzLmxlbmd0aCA/IGNhdGVnb3J5TmFtZXMgOiBwcm9ncmFtQ2F0ZWdvcnlOYW1lc1xyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZHJvcGRvd25WYWxpZGF0aW9uLnByb2dyYW1DYXRlZ29yeSA9IHByb2dyYW1DYXRlZ29yeU5hbWVzLmxlbmd0aFxyXG4gICAgICAgICAgPyB0aGlzLmlzSW5Ecm9wZG93bkxpc3Qob2JqPy5wcm9ncmFtQ2F0ZWdvcnksIHByb2dyYW1DYXRlZ29yeU5hbWVzKVxyXG4gICAgICAgICAgOiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZHJvcGRvd25WYWxpZGF0aW9uLmFzc2lnbm9yID0gdGhpcy5pc0luVXNlckRyb3Bkb3duKG9iaj8uYXNzaWdub3IpO1xyXG4gICAgZHJvcGRvd25WYWxpZGF0aW9uLmFzc2lnbmVlID0gdGhpcy5pc0luRHJvcGRvd25MaXN0KFxyXG4gICAgICBvYmo/LmFzc2lnbmVlLFxyXG4gICAgICBhc3NpZ25lZU5hbWVzXHJcbiAgICApO1xyXG4gICAgZHJvcGRvd25WYWxpZGF0aW9uLmFzc2lnbmVlVHlwZSA9IHRoaXMuaXNJblN0YXRpY0Ryb3Bkb3duKFxyXG4gICAgICBvYmo/LmFzc2lnbmVlVHlwZSxcclxuICAgICAgQVNTSUdORUVfVFlQRV9EUk9QRE9XTl9MSVNUXHJcbiAgICApO1xyXG4gICAgZHJvcGRvd25WYWxpZGF0aW9uLmtleVJlc3BvbnNpYmlsaXR5ID0gdGhpcy5pc0luU3RhdGljRHJvcGRvd24oXHJcbiAgICAgIG9iaj8ua2V5UmVzcG9uc2liaWxpdHksXHJcbiAgICAgIFlFU19OT19EUk9QRE9XTl9MSVNUXHJcbiAgICApO1xyXG5cclxuICAgIGlmICh0YWJUeXBlID09PSAnZnJlcXVlbmN5Jykge1xyXG4gICAgICBkcm9wZG93blZhbGlkYXRpb24uZnJlcXVlbmN5ID0gdGhpcy5pc0luU3RhdGljRHJvcGRvd24oXHJcbiAgICAgICAgb2JqPy5mcmVxdWVuY3ksXHJcbiAgICAgICAgRlJFUVVFTkNZX0RST1BET1dOX0xJU1RcclxuICAgICAgKTtcclxuICAgICAgZHJvcGRvd25WYWxpZGF0aW9uLmRheSA9IHRoaXMuaXNWYWxpZERyb3Bkb3duRGF5KG9iaj8uZGF5KTtcclxuICAgICAgZHJvcGRvd25WYWxpZGF0aW9uLm1vbnRoID0gdGhpcy5pc1ZhbGlkRHJvcGRvd25Nb250aChvYmo/Lm1vbnRoKTtcclxuICAgICAgaWYgKGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucykge1xyXG4gICAgICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5kdWVUaW1lID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5yZXNwb25zaWJpbGl0eUNlbnRlciA9IHRoaXMuaXNJbkRyb3Bkb3duTGlzdChcclxuICAgICAgb2JqPy5yZXNwb25zaWJpbGl0eUNlbnRlcixcclxuICAgICAgdGhpcy5nZXRUZW1wbGF0ZUxpc3ROYW1lcyh0aGlzLnRlbXBsYXRlSW5mbz8ucmNMaXN0LCAnbmFtZScpXHJcbiAgICApO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmhhc1ZhbHVlKG9iaj8ucmVzcG9uc2liaWxpdHlDZW50ZXJUeXBlKSAmJlxyXG4gICAgICAhdGhpcy5oYXNWYWx1ZShvYmo/LnJlc3BvbnNpYmlsaXR5Q2VudGVyKVxyXG4gICAgKSB7XHJcbiAgICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5yZXNwb25zaWJpbGl0eUNlbnRlclR5cGUgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5yZXNwb25zaWJpbGl0eUNlbnRlclR5cGUgPSB0aGlzLmlzSW5TdGF0aWNEcm9wZG93bihcclxuICAgICAgICBvYmo/LnJlc3BvbnNpYmlsaXR5Q2VudGVyVHlwZSxcclxuICAgICAgICBSQ19UWVBFX0RST1BET1dOX0xJU1RcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5yZXBvcnRDbGFzcyA9IHRoaXMuaXNWYWxpZFJpc2tDbGFzcyhvYmo/LnJlcG9ydENsYXNzKTtcclxuICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5pc0Zvcm1hdCA9IHRoaXMuaXNJblN0YXRpY0Ryb3Bkb3duKFxyXG4gICAgICBvYmo/LmlzRm9ybWF0LFxyXG4gICAgICBZRVNfTk9fRFJPUERPV05fTElTVFxyXG4gICAgKTtcclxuICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5kb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQgPSB0aGlzLmlzSW5TdGF0aWNEcm9wZG93bihcclxuICAgICAgb2JqPy5kb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQsXHJcbiAgICAgIFlFU19OT19EUk9QRE9XTl9MSVNUXHJcbiAgICApO1xyXG4gICAgZHJvcGRvd25WYWxpZGF0aW9uLnJldmlld2VyID0gdGhpcy5pc0luRHJvcGRvd25MaXN0KFxyXG4gICAgICBvYmo/LnJldmlld2VyLFxyXG4gICAgICByZXZpZXdlck5hbWVzXHJcbiAgICApO1xyXG4gICAgaWYgKHRoaXMuaGFzVmFsdWUob2JqPy5yZXZpZXdlclR5cGUpICYmICF0aGlzLmhhc1ZhbHVlKG9iaj8ucmV2aWV3ZXIpKSB7XHJcbiAgICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5yZXZpZXdlclR5cGUgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5yZXZpZXdlclR5cGUgPSB0aGlzLmlzSW5TdGF0aWNEcm9wZG93bihcclxuICAgICAgICBvYmo/LnJldmlld2VyVHlwZSxcclxuICAgICAgICBSRVZJRVdFUl9UWVBFX0RST1BET1dOX0xJU1RcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5vdmVyc2VlciA9IHRoaXMuaXNJbkRyb3Bkb3duTGlzdChcclxuICAgICAgb2JqPy5vdmVyc2VlcixcclxuICAgICAgcmV2aWV3ZXJOYW1lc1xyXG4gICAgKTtcclxuICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5ub3RpZnlPbkZhaWx1cmUgPSB0aGlzLmlzSW5Ecm9wZG93bkxpc3QoXHJcbiAgICAgIG9iaj8ubm90aWZ5T25GYWlsdXJlLFxyXG4gICAgICByZXZpZXdlck5hbWVzXHJcbiAgICApO1xyXG4gICAgZHJvcGRvd25WYWxpZGF0aW9uLmNvbGxhYm9yYXRvciA9IHRoaXMuaXNJbkRyb3Bkb3duTGlzdChvYmo/LmNvbGxhYm9yYXRvciwgW1xyXG4gICAgICAuLi5hc3NpZ25lZU5hbWVzLFxyXG4gICAgICAuLi5yZXZpZXdlck5hbWVzLFxyXG4gICAgXSk7XHJcblxyXG4gICAgb2JqWydkcm9wZG93blZhbGlkYXRpb24nXSA9IGRyb3Bkb3duVmFsaWRhdGlvbjtcclxuICAgIG9ialsnaXNWYWxpZERyb3Bkb3duJ10gPSAhT2JqZWN0LmVudHJpZXMoZHJvcGRvd25WYWxpZGF0aW9uKS5zb21lKFxyXG4gICAgICAoW2ZpZWxkLCBpc1ZhbGlkXSkgPT5cclxuICAgICAgICBpc1ZhbGlkID09PSBmYWxzZSAmJiAhTk9OX0JMT0NLSU5HX0RST1BET1dOX0ZJRUxEUy5pbmNsdWRlcyhmaWVsZClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRUZW1wbGF0ZUxpc3ROYW1lcyhsaXN0OiBhbnlbXSA9IFtdLCBrZXk6IHN0cmluZyk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiAobGlzdCB8fCBbXSlcclxuICAgICAgLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtPy5ba2V5XSlcclxuICAgICAgLmZpbHRlcigobmFtZTogYW55KSA9PiB0aGlzLmhhc1ZhbHVlKG5hbWUpKVxyXG4gICAgICAubWFwKChuYW1lOiBhbnkpID0+IFN0cmluZyhuYW1lKS50cmltKCkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJvZ3JhbUNhdGVnb3J5TmFtZXMoKTogc3RyaW5nW10ge1xyXG4gICAgY29uc3QgbmFtZXM6IHN0cmluZ1tdID0gW107XHJcbiAgICAodGhpcy50ZW1wbGF0ZUluZm8/LmNhdGVnb3J5TGlzdCB8fCBbXSkuZm9yRWFjaCgocHJvZ3JhbTogYW55KSA9PiB7XHJcbiAgICAgIChwcm9ncmFtPy5jaGlsZENhdGVnb3J5IHx8IFtdKS5mb3JFYWNoKChjYXRlZ29yeTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzVmFsdWUoY2F0ZWdvcnk/Lm5hbWUpKSB7XHJcbiAgICAgICAgICBuYW1lcy5wdXNoKFN0cmluZyhjYXRlZ29yeS5uYW1lKS50cmltKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBuYW1lcztcclxuICB9XHJcblxyXG4gIGdldFByb2dyYW1DYXRlZ29yeU5hbWVzRm9yUHJvZ3JhbShwcm9ncmFtTmFtZTogYW55KTogc3RyaW5nW10ge1xyXG4gICAgY29uc3QgbmFtZXM6IHN0cmluZ1tdID0gW107XHJcbiAgICBjb25zdCBwcm9ncmFtID0gKHRoaXMudGVtcGxhdGVJbmZvPy5jYXRlZ29yeUxpc3QgfHwgW10pLmZpbmQoXHJcbiAgICAgIChpdGVtOiBhbnkpID0+XHJcbiAgICAgICAgdGhpcy5ub3JtYWxpemVEcm9wZG93blZhbHVlKGl0ZW0/LnByb2dyYW1OYW1lKSA9PT1cclxuICAgICAgICB0aGlzLm5vcm1hbGl6ZURyb3Bkb3duVmFsdWUocHJvZ3JhbU5hbWUpXHJcbiAgICApO1xyXG4gICAgKHByb2dyYW0/LmNoaWxkQ2F0ZWdvcnkgfHwgW10pLmZvckVhY2goKGNhdGVnb3J5OiBhbnkpID0+IHtcclxuICAgICAgaWYgKHRoaXMuaGFzVmFsdWUoY2F0ZWdvcnk/Lm5hbWUpKSB7XHJcbiAgICAgICAgbmFtZXMucHVzaChTdHJpbmcoY2F0ZWdvcnkubmFtZSkudHJpbSgpKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbmFtZXM7XHJcbiAgfVxyXG5cclxuICBzZXRGaWVsZElzc3VlKFxyXG4gICAgb2JqOiBhbnksXHJcbiAgICBmaWVsZDogc3RyaW5nLFxyXG4gICAgc2V2ZXJpdHk6IHN0cmluZyxcclxuICAgIG1lc3NhZ2U6IHN0cmluZ1xyXG4gICk6IHZvaWQge1xyXG4gICAgaWYgKCFvYmogfHwgIWZpZWxkIHx8ICFtZXNzYWdlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIG9iai5maWVsZFZhbGlkYXRpb24gPSBvYmouZmllbGRWYWxpZGF0aW9uIHx8IHt9O1xyXG4gICAgY29uc3QgcmFuazogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHtcclxuICAgICAgW1ZBTElEQVRJT05fU0VWRVJJVFkuRVJST1JdOiAzLFxyXG4gICAgICBbVkFMSURBVElPTl9TRVZFUklUWS5XQVJOSU5HXTogMixcclxuICAgICAgW1ZBTElEQVRJT05fU0VWRVJJVFkuSU5GT106IDEsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgY3VycmVudCA9IG9iai5maWVsZFZhbGlkYXRpb25bZmllbGRdO1xyXG4gICAgaWYgKCFjdXJyZW50IHx8IChyYW5rW3NldmVyaXR5XSB8fCAwKSA+PSAocmFua1tjdXJyZW50LnNldmVyaXR5XSB8fCAwKSkge1xyXG4gICAgICBvYmouZmllbGRWYWxpZGF0aW9uW2ZpZWxkXSA9IHsgc2V2ZXJpdHksIG1lc3NhZ2UgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhc0Jsb2NraW5nRmllbGRJc3N1ZXMob2JqOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKG9iaj8uZmllbGRWYWxpZGF0aW9uIHx8IHt9KS5zb21lKFxyXG4gICAgICAoaXNzdWU6IGFueSkgPT4gaXNzdWU/LnNldmVyaXR5ID09PSBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2FtZVBlcnNvbihsZWZ0OiBhbnksIHJpZ2h0OiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5oYXNWYWx1ZShsZWZ0KSB8fCAhdGhpcy5oYXNWYWx1ZShyaWdodCkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubm9ybWFsaXplRHJvcGRvd25WYWx1ZShsZWZ0KSA9PT0gdGhpcy5ub3JtYWxpemVEcm9wZG93blZhbHVlKHJpZ2h0KSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGxlZnRFbWFpbCA9IHRoaXMuZXh0cmFjdERyb3Bkb3duRW1haWwobGVmdCk7XHJcbiAgICBjb25zdCByaWdodEVtYWlsID0gdGhpcy5leHRyYWN0RHJvcGRvd25FbWFpbChyaWdodCk7XHJcbiAgICBpZiAobGVmdEVtYWlsICYmIHJpZ2h0RW1haWwgJiYgbGVmdEVtYWlsID09PSByaWdodEVtYWlsKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbGVmdE5hbWUgPSB0aGlzLmV4dHJhY3REcm9wZG93bk5hbWUobGVmdCk7XHJcbiAgICBjb25zdCByaWdodE5hbWUgPSB0aGlzLmV4dHJhY3REcm9wZG93bk5hbWUocmlnaHQpO1xyXG4gICAgcmV0dXJuICEhbGVmdE5hbWUgJiYgISFyaWdodE5hbWUgJiYgbGVmdE5hbWUgPT09IHJpZ2h0TmFtZTtcclxuICB9XHJcblxyXG4gIGlzVmFsaWRGb3JtYXRVcmwodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChTdHJpbmcodmFsdWUpLnRyaW0oKSk7XHJcbiAgICAgIHJldHVybiB1cmwucHJvdG9jb2wgPT09ICdodHRwOicgfHwgdXJsLnByb3RvY29sID09PSAnaHR0cHM6JztcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhcHBseVNoZWV0RmllbGRNZXNzYWdlcyhcclxuICAgIG9iajogYW55LFxyXG4gICAgdGFiVHlwZTogc3RyaW5nLFxyXG4gICAgaXNQcm9ncmFtOiBib29sZWFuLFxyXG4gICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zID0gZmFsc2VcclxuICApOiB2b2lkIHtcclxuICAgIGNvbnN0IGRyb3Bkb3duID0gb2JqPy5kcm9wZG93blZhbGlkYXRpb24gfHwge307XHJcbiAgICBjb25zdCBuYW1lID0gdGhpcy5jaGVja1ZhbGlkUmVzcG9uc2liaWxpdHlOYW1lKG9iaj8ucmVzcG9uc2liaWxpdHlOYW1lKTtcclxuICAgIGlmICghbmFtZSkge1xyXG4gICAgICBjb25zdCByYXcgPSBvYmo/LnJlc3BvbnNpYmlsaXR5TmFtZTtcclxuICAgICAgY29uc3Qgd2hpdGVzcGFjZU9ubHkgPVxyXG4gICAgICAgIHJhdyAhPSBudWxsICYmIFN0cmluZyhyYXcpLmxlbmd0aCA+IDAgJiYgIVN0cmluZyhyYXcpLnRyaW0oKTtcclxuICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgIG9iaixcclxuICAgICAgICAncmVzcG9uc2liaWxpdHlOYW1lJyxcclxuICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SLFxyXG4gICAgICAgIHdoaXRlc3BhY2VPbmx5XHJcbiAgICAgICAgICA/IFZBTElEQVRJT05fTUVTU0FHRVMuUkVTUE9OU0lCSUxJVFlfTkFNRV9XSElURVNQQUNFXHJcbiAgICAgICAgICA6IFZBTElEQVRJT05fTUVTU0FHRVMuUkVTUE9OU0lCSUxJVFlfTkFNRV9SRVFVSVJFRFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc1Byb2dyYW0pIHtcclxuICAgICAgY29uc3QgaGFzUHJvZ3JhbSA9IHRoaXMuaGFzVmFsdWUob2JqPy5wcm9ncmFtKTtcclxuICAgICAgY29uc3QgaGFzUHJvZ3JhbVR5cGUgPSB0aGlzLmhhc1ZhbHVlKG9iaj8ucHJvZ3JhbVR5cGUpO1xyXG4gICAgICBjb25zdCBoYXNQcm9ncmFtQ2F0ZWdvcnkgPSB0aGlzLmhhc1ZhbHVlKG9iaj8ucHJvZ3JhbUNhdGVnb3J5KTtcclxuICAgICAgaWYgKGhhc1Byb2dyYW1UeXBlICYmICFoYXNQcm9ncmFtKSB7XHJcbiAgICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgICAgb2JqLFxyXG4gICAgICAgICAgJ3Byb2dyYW1UeXBlJyxcclxuICAgICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuV0FSTklORyxcclxuICAgICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuUFJPR1JBTV9UWVBFX1dJVEhPVVRfUFJPR1JBTVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZHJvcGRvd24ucHJvZ3JhbVR5cGUgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgICAgb2JqLFxyXG4gICAgICAgICAgJ3Byb2dyYW1UeXBlJyxcclxuICAgICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkRST1BET1dOXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZHJvcGRvd24ucHJvZ3JhbSA9PT0gZmFsc2UpIHtcclxuICAgICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgICBvYmosXHJcbiAgICAgICAgICAncHJvZ3JhbScsXHJcbiAgICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SLFxyXG4gICAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5EUk9QRE9XTlxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGhhc1Byb2dyYW1DYXRlZ29yeSAmJiAhaGFzUHJvZ3JhbSkge1xyXG4gICAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICAgIG9iaixcclxuICAgICAgICAgICdwcm9ncmFtQ2F0ZWdvcnknLFxyXG4gICAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuUFJPR1JBTV9DQVRFR09SWV9XSVRIT1VUX1BST0dSQU1cclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2UgaWYgKGRyb3Bkb3duLnByb2dyYW1DYXRlZ29yeSA9PT0gZmFsc2UpIHtcclxuICAgICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgICBvYmosXHJcbiAgICAgICAgICAncHJvZ3JhbUNhdGVnb3J5JyxcclxuICAgICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLlBST0dSQU1fQ0FURUdPUllfTUlTTUFUQ0hcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaGFzVmFsdWUob2JqPy5hc3NpZ25vcikgJiYgZHJvcGRvd24uYXNzaWdub3IgPT09IGZhbHNlKSB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICBvYmosXHJcbiAgICAgICAgJ2Fzc2lnbm9yJyxcclxuICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLldBUk5JTkcsXHJcbiAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5FTlRSVVNURURfQllfSU5WQUxJRFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5oYXNWYWx1ZShvYmo/LmFzc2lnbmVlKSkge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdhc3NpZ25lZScsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkFTU0lHTkVFX1JFUVVJUkVEXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKGRyb3Bkb3duLmFzc2lnbmVlID09PSBmYWxzZSB8fCAhb2JqPy5pc1ZhbGlkVXNlcikge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdhc3NpZ25lZScsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkFTU0lHTkVFX0lOVkFMSURcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSBpZiAob2JqPy51c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbT8uaXNWYWxpZEFzc2lnbmVlID09PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdhc3NpZ25lZScsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLlVTRVJfTk9UX0lOX1BST0dSQU1cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZHJvcGRvd24uYXNzaWduZWVUeXBlID09PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdhc3NpZ25lZVR5cGUnLFxyXG4gICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuV0FSTklORyxcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkFTU0lHTkVFX1RZUEVfSU5WQUxJRFxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5pc0dyb3VwU2VsZWN0ZWQob2JqPy5hc3NpZ25lZSkgJiZcclxuICAgICAgIXRoaXMuaGFzVmFsdWUob2JqPy5hc3NpZ25lZVR5cGUpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgIG9iaixcclxuICAgICAgICAnYXNzaWduZWVUeXBlJyxcclxuICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLklORk8sXHJcbiAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5HUk9VUF9BTExfQU5ZX0JMQU5LXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRyb3Bkb3duLmtleVJlc3BvbnNpYmlsaXR5ID09PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdrZXlSZXNwb25zaWJpbGl0eScsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5XQVJOSU5HLFxyXG4gICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuS0VZX1JFU1BPTlNJQklMSVRZX0lOVkFMSURcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGFiVHlwZSA9PT0gJ2ZyZXF1ZW5jeScpIHtcclxuICAgICAgaWYgKCF0aGlzLmhhc1ZhbHVlKG9iaj8uZnJlcXVlbmN5KSkge1xyXG4gICAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICAgIG9iaixcclxuICAgICAgICAgICdmcmVxdWVuY3knLFxyXG4gICAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuRlJFUVVFTkNZX1JFUVVJUkVEXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIGlmIChkcm9wZG93bi5mcmVxdWVuY3kgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgICAgb2JqLFxyXG4gICAgICAgICAgJ2ZyZXF1ZW5jeScsXHJcbiAgICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SLFxyXG4gICAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5EUk9QRE9XTlxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuYXBwbHlEdWVEYXRlRGF5TW9udGhNZXNzYWdlcyhvYmopO1xyXG5cclxuICAgICAgaWYgKGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucykge1xyXG4gICAgICAgIGlmICghdGhpcy5oYXNWYWx1ZShvYmo/LmR1ZVRpbWUpKSB7XHJcbiAgICAgICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgICAgIG9iaixcclxuICAgICAgICAgICAgJ2R1ZVRpbWUnLFxyXG4gICAgICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLklORk8sXHJcbiAgICAgICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuRFVFX1RJTUVfQkxBTktcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5pc1ZhbGlkRHVlVGltZShvYmo/LmR1ZVRpbWUsIHRydWUpKSB7XHJcbiAgICAgICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgICAgIG9iaixcclxuICAgICAgICAgICAgJ2R1ZVRpbWUnLFxyXG4gICAgICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLldBUk5JTkcsXHJcbiAgICAgICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuRFJPUERPV05cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAob2JqPy5yZXNwb25zaWJpbGl0eVdpbmRvd0Vycm9yKSB7XHJcbiAgICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgICAgb2JqLFxyXG4gICAgICAgICAgJ3Jlc3BvbnNpYmlsaXR5V2luZG93JyxcclxuICAgICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkRST1BET1dOXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAob2JqPy5mYWlsZWRBZnRlckVycm9yKSB7XHJcbiAgICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgICAgb2JqLFxyXG4gICAgICAgICAgJ2ZhaWxlZEFmdGVyJyxcclxuICAgICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkRST1BET1dOXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAob2JqPy5lbmRzQWZ0ZXJPY2N1cnJlbmNlc0Vycm9yKSB7XHJcbiAgICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgICAgb2JqLFxyXG4gICAgICAgICAgJ2VuZHNBZnRlck9jY3VycmVuY2VzJyxcclxuICAgICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkRST1BET1dOXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAob2JqPy5lbmRzQnlEYXRlRGF5RXJyb3IpIHtcclxuICAgICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgICBvYmosXHJcbiAgICAgICAgICAnZW5kc0J5RGF0ZURheScsXHJcbiAgICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SLFxyXG4gICAgICAgICAgb2JqLmVuZHNCeURhdGVEYXlFcnJvclxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG9iaj8uZW5kc0J5RGF0ZU1vbnRoRXJyb3IpIHtcclxuICAgICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgICBvYmosXHJcbiAgICAgICAgICAnZW5kc0J5RGF0ZU1vbnRoJyxcclxuICAgICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgICBvYmouZW5kc0J5RGF0ZU1vbnRoRXJyb3JcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGlzT25lVGltZSA9XHJcbiAgICAgICAgdGhpcy5ub3JtYWxpemVEcm9wZG93blZhbHVlKG9iaj8uZnJlcXVlbmN5KSA9PT0gJ29uZSB0aW1lJztcclxuICAgICAgY29uc3QgaGFzTGlmZWN5Y2xlRW5kID1cclxuICAgICAgICB0aGlzLmhhc1ZhbHVlKG9iaj8uZW5kc0FmdGVyT2NjdXJyZW5jZXMpIHx8XHJcbiAgICAgICAgdGhpcy5oYXNWYWx1ZShvYmo/LmVuZHNCeURhdGVEYXkpIHx8XHJcbiAgICAgICAgdGhpcy5oYXNWYWx1ZShvYmo/LmVuZHNCeURhdGVNb250aCk7XHJcbiAgICAgIGlmIChpc09uZVRpbWUgJiYgaGFzTGlmZWN5Y2xlRW5kKSB7XHJcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IFZBTElEQVRJT05fTUVTU0FHRVMuT05FX1RJTUVfTElGRUNZQ0xFO1xyXG4gICAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICAgIG9iaixcclxuICAgICAgICAgICdlbmRzQWZ0ZXJPY2N1cnJlbmNlcycsXHJcbiAgICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLklORk8sXHJcbiAgICAgICAgICBtZXNzYWdlXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgICBvYmosXHJcbiAgICAgICAgICAnZW5kc0J5RGF0ZURheScsXHJcbiAgICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLklORk8sXHJcbiAgICAgICAgICBtZXNzYWdlXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgICBvYmosXHJcbiAgICAgICAgICAnZW5kc0J5RGF0ZU1vbnRoJyxcclxuICAgICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuSU5GTyxcclxuICAgICAgICAgIG1lc3NhZ2VcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucyAmJlxyXG4gICAgICAgIE51bWJlcihvYmo/LmVuZHNBZnRlck9jY3VycmVuY2VzKSA9PT0gMSAmJlxyXG4gICAgICAgICFpc09uZVRpbWVcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgICAgb2JqLFxyXG4gICAgICAgICAgJ2VuZHNBZnRlck9jY3VycmVuY2VzJyxcclxuICAgICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuV0FSTklORyxcclxuICAgICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuRU5EU19BRlRFUl9PTkVfT0NDVVJSRU5DRVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoZHJvcGRvd24ucmVzcG9uc2liaWxpdHlDZW50ZXIgPT09IGZhbHNlKSB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICBvYmosXHJcbiAgICAgICAgJ3Jlc3BvbnNpYmlsaXR5Q2VudGVyJyxcclxuICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SLFxyXG4gICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuRFJPUERPV05cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5oYXNWYWx1ZShvYmo/LnJlc3BvbnNpYmlsaXR5Q2VudGVyVHlwZSkgJiZcclxuICAgICAgIXRoaXMuaGFzVmFsdWUob2JqPy5yZXNwb25zaWJpbGl0eUNlbnRlcilcclxuICAgICkge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdyZXNwb25zaWJpbGl0eUNlbnRlclR5cGUnLFxyXG4gICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5SQ19UWVBFX1dJVEhPVVRfTkFNRVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChkcm9wZG93bi5yZXNwb25zaWJpbGl0eUNlbnRlclR5cGUgPT09IGZhbHNlKSB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICBvYmosXHJcbiAgICAgICAgJ3Jlc3BvbnNpYmlsaXR5Q2VudGVyVHlwZScsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkRST1BET1dOXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRyb3Bkb3duLnJlcG9ydENsYXNzID09PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdyZXBvcnRDbGFzcycsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkRST1BET1dOXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRyb3Bkb3duLmlzRm9ybWF0ID09PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdpc0Zvcm1hdCcsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkRST1BET1dOXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5oYXNWYWx1ZShvYmo/LmZvcm1hdEZvclJlc3BvbnNpYmlsaXR5KSkge1xyXG4gICAgICBpZiAodGhpcy5ub3JtYWxpemVEcm9wZG93blZhbHVlKG9iaj8uaXNGb3JtYXQpID09PSAnbm8nKSB7XHJcbiAgICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgICAgb2JqLFxyXG4gICAgICAgICAgJ2Zvcm1hdEZvclJlc3BvbnNpYmlsaXR5JyxcclxuICAgICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkZPUk1BVF9MSU5LX1dJVEhPVVRfWUVTXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIGlmICghdGhpcy5pc1ZhbGlkRm9ybWF0VXJsKG9iaj8uZm9ybWF0Rm9yUmVzcG9uc2liaWxpdHkpKSB7XHJcbiAgICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgICAgb2JqLFxyXG4gICAgICAgICAgJ2Zvcm1hdEZvclJlc3BvbnNpYmlsaXR5JyxcclxuICAgICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkZPUk1BVF9JTlZBTElEX1VSTFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChkcm9wZG93bi5kb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQgPT09IGZhbHNlKSB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICBvYmosXHJcbiAgICAgICAgJ2RvY3VtZW50RXZpZGVuY2VSZXF1aXJlZCcsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkRST1BET1dOXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRyb3Bkb3duLnJldmlld2VyID09PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdyZXZpZXdlcicsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkRST1BET1dOXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICB0aGlzLmhhc1ZhbHVlKG9iaj8ucmV2aWV3ZXIpICYmXHJcbiAgICAgIG9iaj8udXNlclZhbGlkYXRlV2l0aFByb2dyYW0/LmlzVmFsaWRSZXZpZXdlciA9PT0gZmFsc2VcclxuICAgICkge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdyZXZpZXdlcicsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLlVTRVJfTk9UX0lOX1BST0dSQU1cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmhhc1ZhbHVlKG9iaj8ucmV2aWV3ZXJUeXBlKSAmJiAhdGhpcy5oYXNWYWx1ZShvYmo/LnJldmlld2VyKSkge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdyZXZpZXdlclR5cGUnLFxyXG4gICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5EUk9QRE9XTlxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChkcm9wZG93bi5yZXZpZXdlclR5cGUgPT09IGZhbHNlKSB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICBvYmosXHJcbiAgICAgICAgJ3Jldmlld2VyVHlwZScsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkRST1BET1dOXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAob2JqPy5yZXZpZXdUb0JlQ29tcGxldGVkV2l0aGluRXJyb3IpIHtcclxuICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgIG9iaixcclxuICAgICAgICAncmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbicsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkRST1BET1dOXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAob2JqPy5yZXZpZXdXaWxsQmVGYWlsZWRBZnRlckVycm9yKSB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICBvYmosXHJcbiAgICAgICAgJ3Jldmlld1dpbGxCZUZhaWxlZEFmdGVyJyxcclxuICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SLFxyXG4gICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuRFJPUERPV05cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgKHRoaXMuaGFzVmFsdWUob2JqPy5yZXZpZXdUb0JlQ29tcGxldGVkV2l0aGluKSB8fFxyXG4gICAgICAgIHRoaXMuaGFzVmFsdWUob2JqPy5yZXZpZXdXaWxsQmVGYWlsZWRBZnRlcikpICYmXHJcbiAgICAgICF0aGlzLmhhc1ZhbHVlKG9iaj8ucmV2aWV3ZXIpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgIG9iaixcclxuICAgICAgICAncmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbicsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLlJFVklFV19XSU5ET1dfV0lUSE9VVF9SRVZJRVdFUlxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdyZXZpZXdXaWxsQmVGYWlsZWRBZnRlcicsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLlJFVklFV19XSU5ET1dfV0lUSE9VVF9SRVZJRVdFUlxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkcm9wZG93bi5vdmVyc2VlciA9PT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgIG9iaixcclxuICAgICAgICAnb3ZlcnNlZXInLFxyXG4gICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5EUk9QRE9XTlxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5oYXNWYWx1ZShvYmo/Lm92ZXJzZWVyKSAmJlxyXG4gICAgICBvYmo/LnVzZXJWYWxpZGF0ZVdpdGhQcm9ncmFtPy5pc1ZhbGlkT3ZlcnNlZXIgPT09IGZhbHNlXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgIG9iaixcclxuICAgICAgICAnb3ZlcnNlZXInLFxyXG4gICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5VU0VSX05PVF9JTl9QUk9HUkFNXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2FtZVBlcnNvbihvYmo/Lm92ZXJzZWVyLCBvYmo/LmFzc2lnbmVlKSkge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdvdmVyc2VlcicsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5JTkZPLFxyXG4gICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuT1ZFUlNJR0hUX0RVUExJQ0FURV9BU1NJR05FRVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNhbWVQZXJzb24ob2JqPy5vdmVyc2Vlciwgb2JqPy5hc3NpZ25vcikpIHtcclxuICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgIG9iaixcclxuICAgICAgICAnb3ZlcnNlZXInLFxyXG4gICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuSU5GTyxcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLk9WRVJTSUdIVF9EVVBMSUNBVEVfQVNTSUdOT1JcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZHJvcGRvd24ubm90aWZ5T25GYWlsdXJlID09PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdub3RpZnlPbkZhaWx1cmUnLFxyXG4gICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5EUk9QRE9XTlxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5oYXNWYWx1ZShvYmo/Lm5vdGlmeU9uRmFpbHVyZSkgJiZcclxuICAgICAgb2JqPy51c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbT8uaXNWYWxpZE5vdGlmeU9uRmFpbHVyZSA9PT0gZmFsc2VcclxuICAgICkge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdub3RpZnlPbkZhaWx1cmUnLFxyXG4gICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5VU0VSX05PVF9JTl9QUk9HUkFNXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2FtZVBlcnNvbihvYmo/Lm5vdGlmeU9uRmFpbHVyZSwgb2JqPy5hc3NpZ25lZSkpIHtcclxuICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgIG9iaixcclxuICAgICAgICAnbm90aWZ5T25GYWlsdXJlJyxcclxuICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLklORk8sXHJcbiAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5PVkVSU0lHSFRfRFVQTElDQVRFX0FTU0lHTkVFXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2FtZVBlcnNvbihvYmo/Lm5vdGlmeU9uRmFpbHVyZSwgb2JqPy5hc3NpZ25vcikpIHtcclxuICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgIG9iaixcclxuICAgICAgICAnbm90aWZ5T25GYWlsdXJlJyxcclxuICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLklORk8sXHJcbiAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5PVkVSU0lHSFRfRFVQTElDQVRFX0FTU0lHTk9SXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRyb3Bkb3duLmNvbGxhYm9yYXRvciA9PT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgIG9iaixcclxuICAgICAgICAnY29sbGFib3JhdG9yJyxcclxuICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SLFxyXG4gICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuRFJPUERPV05cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pc0dyb3VwU2VsZWN0ZWQob2JqPy5jb2xsYWJvcmF0b3IpKSB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICBvYmosXHJcbiAgICAgICAgJ2NvbGxhYm9yYXRvcicsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkNPTExBQk9SQVRPUl9HUk9VUFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW50cnVzdGVkIEJ5IGluIHRoZSB4bHN4IGRyb3Bkb3duIGlzIHRoZSBwZW9wbGUgbGlzdCBpbiBgTmFtZSAoZW1haWwpYCBmb3JtXHJcbiAgICogKHNhbWUgc291cmNlIGFzIEVudHJ1c3RlZCBUbyAvIFJldmlld2VyKSwgbm90IHRoZSBhc3NpZ25vciBuYW1lLW9ubHkgY29sdW1uLlxyXG4gICAqL1xyXG4gIGlzSW5Vc2VyRHJvcGRvd24odmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmhhc1ZhbHVlKHZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB0aGlzLm5vcm1hbGl6ZURyb3Bkb3duVmFsdWUodmFsdWUpO1xyXG4gICAgY29uc3QgdmFsdWVFbWFpbCA9IHRoaXMuZXh0cmFjdERyb3Bkb3duRW1haWwodmFsdWUpO1xyXG4gICAgY29uc3QgdmFsdWVOYW1lID0gdGhpcy5leHRyYWN0RHJvcGRvd25OYW1lKHZhbHVlKTtcclxuICAgIGNvbnN0IGRyb3Bkb3duTmFtZXMgPSB0aGlzLnRlbXBsYXRlSW5mbz8ucGVvcGxlRHJvcGRvd25OYW1lcyB8fCBbXTtcclxuICAgIGlmIChcclxuICAgICAgZHJvcGRvd25OYW1lcy5zb21lKFxyXG4gICAgICAgIChuYW1lOiBzdHJpbmcpID0+IHRoaXMubm9ybWFsaXplRHJvcGRvd25WYWx1ZShuYW1lKSA9PT0gbm9ybWFsaXplZFxyXG4gICAgICApXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIHZhbHVlRW1haWwgJiZcclxuICAgICAgZHJvcGRvd25OYW1lcy5zb21lKChuYW1lOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBjb25zdCBuYW1lRW1haWwgPSB0aGlzLmV4dHJhY3REcm9wZG93bkVtYWlsKG5hbWUpO1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICBuYW1lRW1haWwgPT09IHZhbHVlRW1haWwgfHxcclxuICAgICAgICAgIHRoaXMubm9ybWFsaXplRHJvcGRvd25WYWx1ZShuYW1lKSA9PT0gdmFsdWVFbWFpbFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBjb25zdCB1c2VycyA9IFtcclxuICAgICAgLi4uKHRoaXMudGVtcGxhdGVJbmZvPy5hc3NpZ25vcnNMaXN0IHx8IFtdKSxcclxuICAgICAgLi4uKHRoaXMudGVtcGxhdGVJbmZvPy5hc3NpZ25lZXNMaXN0IHx8IFtdKSxcclxuICAgICAgLi4uKHRoaXMudGVtcGxhdGVJbmZvPy5yZXZpZXdlckxpc3QgfHwgW10pLFxyXG4gICAgXTtcclxuICAgIHJldHVybiB1c2Vycy5zb21lKCh1c2VyOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgY29uc3RydWN0ZWQgPVxyXG4gICAgICAgIHRoaXMuaGFzVmFsdWUodXNlcj8ubmFtZSkgJiYgdGhpcy5oYXNWYWx1ZSh1c2VyPy5lbWFpbClcclxuICAgICAgICAgID8gYCR7U3RyaW5nKHVzZXIubmFtZSkudHJpbSgpfSAoJHtTdHJpbmcodXNlci5lbWFpbCkudHJpbSgpfSlgXHJcbiAgICAgICAgICA6ICcnO1xyXG4gICAgICBjb25zdCBjYW5kaWRhdGVzID0gW1xyXG4gICAgICAgIHVzZXI/Lm5hbWVBbmRFbWFpbCxcclxuICAgICAgICB1c2VyPy5uYW1lLFxyXG4gICAgICAgIHVzZXI/LmVtYWlsLFxyXG4gICAgICAgIGNvbnN0cnVjdGVkLFxyXG4gICAgICBdO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgY2FuZGlkYXRlcy5zb21lKFxyXG4gICAgICAgICAgKGNhbmRpZGF0ZSkgPT5cclxuICAgICAgICAgICAgdGhpcy5oYXNWYWx1ZShjYW5kaWRhdGUpICYmXHJcbiAgICAgICAgICAgIHRoaXMubm9ybWFsaXplRHJvcGRvd25WYWx1ZShjYW5kaWRhdGUpID09PSBub3JtYWxpemVkXHJcbiAgICAgICAgKVxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdmFsdWVFbWFpbCAmJlxyXG4gICAgICAgIHRoaXMuaGFzVmFsdWUodXNlcj8uZW1haWwpICYmXHJcbiAgICAgICAgdGhpcy5ub3JtYWxpemVEcm9wZG93blZhbHVlKHVzZXIuZW1haWwpID09PSB2YWx1ZUVtYWlsXHJcbiAgICAgICkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChcclxuICAgICAgICB2YWx1ZU5hbWUgJiZcclxuICAgICAgICB0aGlzLmhhc1ZhbHVlKHVzZXI/Lm5hbWUpICYmXHJcbiAgICAgICAgdGhpcy5ub3JtYWxpemVEcm9wZG93blZhbHVlKHVzZXIubmFtZSkgPT09IHZhbHVlTmFtZVxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgICEhdmFsdWVFbWFpbCAmJlxyXG4gICAgICAgIGNhbmRpZGF0ZXMuc29tZShcclxuICAgICAgICAgIChjYW5kaWRhdGUpID0+XHJcbiAgICAgICAgICAgIHRoaXMuaGFzVmFsdWUoY2FuZGlkYXRlKSAmJlxyXG4gICAgICAgICAgICB0aGlzLmV4dHJhY3REcm9wZG93bkVtYWlsKGNhbmRpZGF0ZSkgPT09IHZhbHVlRW1haWxcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5vcm1hbGl6ZURyb3Bkb3duVmFsdWUodmFsdWU6IGFueSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlID8/ICcnKVxyXG4gICAgICAucmVwbGFjZSgvW1xcdTIwMEItXFx1MjAwRFxcdUZFRkZdL2csICcnKVxyXG4gICAgICAucmVwbGFjZSgvXFx1MDBhMC9nLCAnICcpXHJcbiAgICAgIC5yZXBsYWNlKC9cXHMrL2csICcgJylcclxuICAgICAgLnRyaW0oKVxyXG4gICAgICAudG9Mb3dlckNhc2UoKTtcclxuICB9XHJcblxyXG4gIGV4dHJhY3REcm9wZG93bkVtYWlsKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgbWF0Y2ggPSBTdHJpbmcodmFsdWUgPz8gJycpLm1hdGNoKC9cXCgoW14pXSpAW14pXSopXFwpXFxzKiQvKTtcclxuICAgIHJldHVybiBtYXRjaCA/IHRoaXMubm9ybWFsaXplRHJvcGRvd25WYWx1ZShtYXRjaFsxXSkgOiAnJztcclxuICB9XHJcblxyXG4gIGV4dHJhY3REcm9wZG93bk5hbWUodmFsdWU6IGFueSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5ub3JtYWxpemVEcm9wZG93blZhbHVlKFxyXG4gICAgICBTdHJpbmcodmFsdWUgPz8gJycpLnJlcGxhY2UoL1xccypcXChbXildKkBbXildKlxcKVxccyokLywgJycpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgaXNJblN0YXRpY0Ryb3Bkb3duKHZhbHVlOiBhbnksIG9wdGlvbnM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0luRHJvcGRvd25MaXN0KHZhbHVlLCBvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGlzSW5Ecm9wZG93bkxpc3QodmFsdWU6IGFueSwgb3B0aW9uczogc3RyaW5nW10pOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5oYXNWYWx1ZSh2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBjb25zdCBub3JtYWxpemVkID0gdGhpcy5ub3JtYWxpemVEcm9wZG93blZhbHVlKHZhbHVlKTtcclxuICAgIHJldHVybiAob3B0aW9ucyB8fCBbXSkuc29tZShcclxuICAgICAgKG9wdGlvbikgPT4gdGhpcy5ub3JtYWxpemVEcm9wZG93blZhbHVlKG9wdGlvbikgPT09IG5vcm1hbGl6ZWRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpc1ZhbGlkRHJvcGRvd25EYXkodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmhhc1ZhbHVlKHZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGRheU51bWJlciA9IE51bWJlcihTdHJpbmcodmFsdWUpLnRyaW0oKSk7XHJcbiAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihkYXlOdW1iZXIpICYmIGRheU51bWJlciA+PSAxICYmIGRheU51bWJlciA8PSAzMTtcclxuICB9XHJcblxyXG4gIGlzVmFsaWREcm9wZG93bk1vbnRoKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5oYXNWYWx1ZSh2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkRHVlRGF0ZU1vbnRoKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIGlzVmFsaWREdWVEYXRlTW9udGgodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdGV4dCA9IFN0cmluZyh2YWx1ZSA/PyAnJykudHJpbSgpO1xyXG4gICAgaWYgKCF0ZXh0KSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaGFzWWVhclN1ZmZpeCA9XHJcbiAgICAgIFJFR0VYLk1PTlRILnRlc3QodGV4dCkgfHwgUkVHRVguRU5EU19CWV9EQVRFX01PTlRILnRlc3QodGV4dCk7XHJcbiAgICBpZiAoIWhhc1llYXJTdWZmaXgpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFNIT1JUX01PTlRIX05BTUVTLmluY2x1ZGVzKHRleHQuc3Vic3RyaW5nKDAsIDMpLnRvTG93ZXJDYXNlKCkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RHVlRGF0ZURheU1heChmcmVxdWVuY3k6IGFueSk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gV0VFS0RBWV9GUkVRVUVOQ0lFUy5pbmNsdWRlcyh0aGlzLm5vcm1hbGl6ZURyb3Bkb3duVmFsdWUoZnJlcXVlbmN5KSlcclxuICAgICAgPyA3XHJcbiAgICAgIDogMzE7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHMiAvIEczOiBERC0wMSwgREQtMDIsIERELTAzLCBETS0wMSwgRE0tMDIuXHJcbiAgICogQmxhbmsgZGF5IGFuZCBtb250aCB0b2dldGhlciBzdGF5IHZhbGlkLiBXYXJuaW5nL2luZm8gYXJlIG5vdCB1c2VkIGhlcmUuXHJcbiAgICovXHJcbiAgYXBwbHlEdWVEYXRlRGF5TW9udGhNZXNzYWdlcyhvYmo6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgaGFzRGF5ID0gdGhpcy5oYXNWYWx1ZShvYmo/LmRheSk7XHJcbiAgICBjb25zdCBoYXNNb250aCA9IHRoaXMuaGFzVmFsdWUob2JqPy5tb250aCk7XHJcbiAgICBjb25zdCBmcmVxdWVuY3lMYWJlbCA9IHRoaXMuaGFzVmFsdWUob2JqPy5mcmVxdWVuY3kpXHJcbiAgICAgID8gU3RyaW5nKG9iai5mcmVxdWVuY3kpLnRyaW0oKVxyXG4gICAgICA6ICdXZWVrbHknO1xyXG4gICAgY29uc3QgZGF5VGV4dCA9IGhhc0RheSA/IFN0cmluZyhvYmouZGF5KS50cmltKCkgOiAnJztcclxuICAgIGNvbnN0IGlzRGF5TnVtZXJpYyA9IC9eXFxkKyQvLnRlc3QoZGF5VGV4dCk7XHJcbiAgICBjb25zdCBkYXlOdW1iZXIgPSBpc0RheU51bWVyaWMgPyBOdW1iZXIoZGF5VGV4dCkgOiBOYU47XHJcbiAgICBjb25zdCBtYXhEYXkgPSB0aGlzLmdldER1ZURhdGVEYXlNYXgob2JqPy5mcmVxdWVuY3kpO1xyXG5cclxuICAgIGlmIChoYXNEYXkgJiYgIWlzRGF5TnVtZXJpYykge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdkYXknLFxyXG4gICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5EVUVfREFURV9EQVlfTk9UX05VTUJFUlxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChoYXNEYXkgJiYgKGRheU51bWJlciA8IDEgfHwgZGF5TnVtYmVyID4gbWF4RGF5KSkge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdkYXknLFxyXG4gICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgZHVlRGF0ZURheU91dE9mUmFuZ2VNZXNzYWdlKGZyZXF1ZW5jeUxhYmVsKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChoYXNNb250aCAmJiAhdGhpcy5pc1ZhbGlkRHVlRGF0ZU1vbnRoKG9iaj8ubW9udGgpKSB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICBvYmosXHJcbiAgICAgICAgJ21vbnRoJyxcclxuICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SLFxyXG4gICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuRFVFX0RBVEVfTU9OVEhfSU5WQUxJRFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaGFzRGF5ICYmIGhhc01vbnRoKSB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICBvYmosXHJcbiAgICAgICAgJ2RheScsXHJcbiAgICAgICAgVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUixcclxuICAgICAgICBWQUxJREFUSU9OX01FU1NBR0VTLkRVRV9EQVRFX1JFUVVJUkVEXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGhhc0RheSAmJiAhaGFzTW9udGgpIHtcclxuICAgICAgdGhpcy5zZXRGaWVsZElzc3VlKFxyXG4gICAgICAgIG9iaixcclxuICAgICAgICAnbW9udGgnLFxyXG4gICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5EVUVfREFURV9SRVFVSVJFRFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGRheUhhc0Vycm9yID0gb2JqPy5maWVsZFZhbGlkYXRpb24/LmRheT8uc2V2ZXJpdHkgPT09IFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1I7XHJcbiAgICBjb25zdCBtb250aEhhc0Vycm9yID1cclxuICAgICAgb2JqPy5maWVsZFZhbGlkYXRpb24/Lm1vbnRoPy5zZXZlcml0eSA9PT0gVkFMSURBVElPTl9TRVZFUklUWS5FUlJPUjtcclxuICAgIGlmIChoYXNEYXkgJiYgaGFzTW9udGggJiYgIWRheUhhc0Vycm9yICYmICFtb250aEhhc0Vycm9yICYmIG9iaj8uaXNQYXN0RGF0ZSkge1xyXG4gICAgICB0aGlzLnNldEZpZWxkSXNzdWUoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgICdkYXknLFxyXG4gICAgICAgIFZBTElEQVRJT05fU0VWRVJJVFkuRVJST1IsXHJcbiAgICAgICAgVkFMSURBVElPTl9NRVNTQUdFUy5QQVNUX0RVRV9EQVRFXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRJc3N1ZShcclxuICAgICAgICBvYmosXHJcbiAgICAgICAgJ21vbnRoJyxcclxuICAgICAgICBWQUxJREFUSU9OX1NFVkVSSVRZLkVSUk9SLFxyXG4gICAgICAgIFZBTElEQVRJT05fTUVTU0FHRVMuUEFTVF9EVUVfREFURVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNWYWxpZER1ZVRpbWUoZHVlVGltZTogYW55LCBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMgPSBmYWxzZSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMubm9ybWFsaXplRHVlVGltZShkdWVUaW1lKTtcclxuICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUkVHRVguRFVFX1RJTUUudGVzdCh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPcHRpb25hbCBmaWVsZC4gV2hlbiBmaWxsZWQsIHRoZSB2YWx1ZSBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIHdob2xlIG51bWJlci5cclxuICAgKiBSZWplY3RzIG5lZ2F0aXZlcywgZGVjaW1hbHMsIGFuZCBub24tbnVtZXJpYyB0ZXh0LiBCbGFuayBpcyB2YWxpZC4gMCBpcyBhbGxvd2VkXHJcbiAgICogKEZhaWwgLyBSZXZpZXcgRmFpbCB1c2UgMCB0byBtZWFuIGNvbXBsZXRlL3JldmlldyBvbiB0aGUgZHVlIGRhdGUpLlxyXG4gICAqL1xyXG4gIGdldFdob2xlTnVtYmVyRGF5c0Vycm9yKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0aGlzLmhhc1ZhbHVlKHZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgICBjb25zdCBub3JtYWxpemVkID0gU3RyaW5nKHZhbHVlKS50cmltKCk7XHJcbiAgICBpZiAoL14tLy50ZXN0KG5vcm1hbGl6ZWQpIHx8IE51bWJlcihub3JtYWxpemVkKSA8IDApIHtcclxuICAgICAgcmV0dXJuIFZBTElEQVRJT05fTUVTU0FHRVMuUE9TSVRJVkVfTlVNQkVSO1xyXG4gICAgfVxyXG4gICAgaWYgKCEvXlxcZCskLy50ZXN0KG5vcm1hbGl6ZWQpKSB7XHJcbiAgICAgIHJldHVybiBWQUxJREFUSU9OX01FU1NBR0VTLldIT0xFX05VTUJFUl9OT05fTkVHQVRJVkU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBhcHBseURheXNDb3VudFZhbGlkYXRpb24ob2JqOiBhbnksIHRhYlR5cGU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3Qgc3RhcnRFcnJvciA9XHJcbiAgICAgIHRhYlR5cGUgPT09ICdmcmVxdWVuY3knXHJcbiAgICAgICAgPyB0aGlzLmdldFdob2xlTnVtYmVyRGF5c0Vycm9yKG9iaj8ucmVzcG9uc2liaWxpdHlXaW5kb3cpXHJcbiAgICAgICAgOiAnJztcclxuICAgIGNvbnN0IGZhaWxFcnJvciA9XHJcbiAgICAgIHRhYlR5cGUgPT09ICdmcmVxdWVuY3knXHJcbiAgICAgICAgPyB0aGlzLmdldFdob2xlTnVtYmVyRGF5c0Vycm9yKG9iaj8uZmFpbGVkQWZ0ZXIpXHJcbiAgICAgICAgOiAnJztcclxuICAgIGNvbnN0IHJldmlld1N0YXJ0RXJyb3IgPSB0aGlzLmdldFdob2xlTnVtYmVyRGF5c0Vycm9yKFxyXG4gICAgICBvYmo/LnJldmlld1RvQmVDb21wbGV0ZWRXaXRoaW5cclxuICAgICk7XHJcbiAgICBjb25zdCByZXZpZXdGYWlsRXJyb3IgPSB0aGlzLmdldFdob2xlTnVtYmVyRGF5c0Vycm9yKFxyXG4gICAgICBvYmo/LnJldmlld1dpbGxCZUZhaWxlZEFmdGVyXHJcbiAgICApO1xyXG4gICAgb2JqWydyZXNwb25zaWJpbGl0eVdpbmRvd0Vycm9yJ10gPSBzdGFydEVycm9yO1xyXG4gICAgb2JqWydmYWlsZWRBZnRlckVycm9yJ10gPSBmYWlsRXJyb3I7XHJcbiAgICBvYmpbJ3Jldmlld1RvQmVDb21wbGV0ZWRXaXRoaW5FcnJvciddID0gcmV2aWV3U3RhcnRFcnJvcjtcclxuICAgIG9ialsncmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXJFcnJvciddID0gcmV2aWV3RmFpbEVycm9yO1xyXG4gICAgb2JqWydpc1ZhbGlkRGF5c0NvdW50J10gPVxyXG4gICAgICAhc3RhcnRFcnJvciAmJiAhZmFpbEVycm9yICYmICFyZXZpZXdTdGFydEVycm9yICYmICFyZXZpZXdGYWlsRXJyb3I7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPcHRpb25hbCBmaWVsZC4gV2hlbiBmaWxsZWQsIHRoZSB2YWx1ZSBtdXN0IGJlIG51bWVyaWMgYW5kIGdyZWF0ZXIgdGhhbiAwLlxyXG4gICAqL1xyXG4gIGdldEVuZHNBZnRlck9jY3VycmVuY2VzRXJyb3IoXHJcbiAgICB2YWx1ZTogYW55LFxyXG4gICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zID0gZmFsc2VcclxuICApOiBzdHJpbmcge1xyXG4gICAgaWYgKCFoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gICAgaWYgKHZhbHVlID09IG51bGwgfHwgU3RyaW5nKHZhbHVlKS50cmltKCkgPT09ICcnKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBTdHJpbmcodmFsdWUpLnRyaW0oKTtcclxuICAgIGlmICghL14tP1xcZCsoXFwuXFxkKyk/JC8udGVzdChub3JtYWxpemVkKSkge1xyXG4gICAgICByZXR1cm4gVkFMSURBVElPTl9NRVNTQUdFUy5FTkRTX0FGVEVSX09DQ1VSUkVOQ0VTX05VTUVSSUM7XHJcbiAgICB9XHJcbiAgICBpZiAoTnVtYmVyKG5vcm1hbGl6ZWQpIDw9IDApIHtcclxuICAgICAgcmV0dXJuIFZBTElEQVRJT05fTUVTU0FHRVMuRU5EU19BRlRFUl9PQ0NVUlJFTkNFU19HUkVBVEVSX1RIQU5fWkVSTztcclxuICAgIH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIGFwcGx5RW5kc0J5RGF0ZVZhbGlkYXRpb24ob2JqOiBhbnksIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucyA9IGZhbHNlKTogdm9pZCB7XHJcbiAgICBjb25zdCB2YWxpZGF0aW9uID0gdGhpcy5nZXRFbmRzQnlEYXRlVmFsaWRhdGlvbihcclxuICAgICAgb2JqPy5lbmRzQnlEYXRlRGF5LFxyXG4gICAgICBvYmo/LmVuZHNCeURhdGVNb250aCxcclxuICAgICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zLFxyXG4gICAgICBvYmo/LmVuZHNBZnRlck9jY3VycmVuY2VzXHJcbiAgICApO1xyXG4gICAgb2JqWydlbmRzQnlEYXRlRGF5RXJyb3InXSA9IHZhbGlkYXRpb24uZGF5RXJyb3I7XHJcbiAgICBvYmpbJ2VuZHNCeURhdGVNb250aEVycm9yJ10gPSB2YWxpZGF0aW9uLm1vbnRoRXJyb3I7XHJcbiAgICBvYmpbJ2lzVmFsaWRFbmRzQnlEYXRlRGF5J10gPSAhdmFsaWRhdGlvbi5kYXlFcnJvcjtcclxuICAgIG9ialsnaXNWYWxpZEVuZHNCeURhdGVNb250aCddID0gIXZhbGlkYXRpb24ubW9udGhFcnJvcjtcclxuICAgIG9ialsnaXNWYWxpZEVuZHNCeURhdGUnXSA9IHZhbGlkYXRpb24uaXNWYWxpZDtcclxuICB9XHJcblxyXG4gIGhhc1ZhbHVlKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIFN0cmluZyh2YWx1ZSkudHJpbSgpICE9PSAnJztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wdGlvbmFsIHVubGVzcyBlaXRoZXIgZGF5IG9yIG1vbnRoIGlzIGZpbGxlZC4gQ2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCBFbmRzIEFmdGVyIE9jY3VycmVuY2VzLlxyXG4gICAqIERheSBtdXN0IGJlIG51bWVyaWMsIGdyZWF0ZXIgdGhhbiAwLCBhbmQgYXQgbW9zdCAzMS4gTW9udGggbXVzdCBiZSBmdWxsIG1vbnRoIG5hbWUgKyAnICsgdHdvLWRpZ2l0XHJcbiAgICogeWVhciAoSmFudWFyeScyOCkuIENvbWJpbmVkIGRhdGUgbXVzdCBleGlzdCwgaW5jbHVkaW5nIGxlYXAteWVhciBGZWJydWFyeSAyOS5cclxuICAgKi9cclxuICBnZXRFbmRzQnlEYXRlVmFsaWRhdGlvbihcclxuICAgIGRheTogYW55LFxyXG4gICAgbW9udGg6IGFueSxcclxuICAgIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucyA9IGZhbHNlLFxyXG4gICAgZW5kc0FmdGVyT2NjdXJyZW5jZXM/OiBhbnlcclxuICApOiB7IGlzVmFsaWQ6IGJvb2xlYW47IGRheUVycm9yOiBzdHJpbmc7IG1vbnRoRXJyb3I6IHN0cmluZyB9IHtcclxuICAgIGNvbnN0IHZhbGlkID0geyBpc1ZhbGlkOiB0cnVlLCBkYXlFcnJvcjogJycsIG1vbnRoRXJyb3I6ICcnIH07XHJcbiAgICBpZiAoIWhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucykge1xyXG4gICAgICByZXR1cm4gdmFsaWQ7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkYXlWYWx1ZSA9IGRheSA9PSBudWxsID8gJycgOiBTdHJpbmcoZGF5KS50cmltKCk7XHJcbiAgICBjb25zdCBtb250aFZhbHVlID0gbW9udGggPT0gbnVsbCA/ICcnIDogU3RyaW5nKG1vbnRoKS50cmltKCk7XHJcbiAgICBpZiAoIWRheVZhbHVlICYmICFtb250aFZhbHVlKSB7XHJcbiAgICAgIHJldHVybiB2YWxpZDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5oYXNWYWx1ZShlbmRzQWZ0ZXJPY2N1cnJlbmNlcykgJiYgKGRheVZhbHVlIHx8IG1vbnRoVmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaXNWYWxpZDogZmFsc2UsXHJcbiAgICAgICAgZGF5RXJyb3I6IGRheVZhbHVlID8gVkFMSURBVElPTl9NRVNTQUdFUy5FTkRTX0JZX0RBVEVfQ09ORkxJQ1QgOiAnJyxcclxuICAgICAgICBtb250aEVycm9yOiBtb250aFZhbHVlID8gVkFMSURBVElPTl9NRVNTQUdFUy5FTkRTX0JZX0RBVEVfQ09ORkxJQ1QgOiAnJyxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWRheVZhbHVlIHx8ICFtb250aFZhbHVlKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaXNWYWxpZDogZmFsc2UsXHJcbiAgICAgICAgZGF5RXJyb3I6IFZBTElEQVRJT05fTUVTU0FHRVMuRU5EU19CWV9EQVRFX0lOQ09NUExFVEUsXHJcbiAgICAgICAgbW9udGhFcnJvcjogVkFMSURBVElPTl9NRVNTQUdFUy5FTkRTX0JZX0RBVEVfSU5DT01QTEVURSxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkYXlFcnJvciA9IHRoaXMuZ2V0RW5kc0J5RGF0ZURheUVycm9yKGRheVZhbHVlKTtcclxuICAgIGNvbnN0IG1vbnRoRXJyb3IgPSB0aGlzLmdldEVuZHNCeURhdGVNb250aEVycm9yKG1vbnRoVmFsdWUpO1xyXG4gICAgaWYgKGRheUVycm9yIHx8IG1vbnRoRXJyb3IpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcclxuICAgICAgICBkYXlFcnJvcixcclxuICAgICAgICBtb250aEVycm9yLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5pc1ZhbGlkRW5kc0J5Q2FsZW5kYXJEYXRlKGRheVZhbHVlLCBtb250aFZhbHVlKSkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxyXG4gICAgICAgIGRheUVycm9yOiBWQUxJREFUSU9OX01FU1NBR0VTLkVORFNfQllfREFURV9JTlZBTElEX1ZBTFVFLFxyXG4gICAgICAgIG1vbnRoRXJyb3I6IFZBTElEQVRJT05fTUVTU0FHRVMuRU5EU19CWV9EQVRFX0lOVkFMSURfVkFMVUUsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNFbmRzQnlEYXRlSW5QYXN0KGRheVZhbHVlLCBtb250aFZhbHVlKSkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxyXG4gICAgICAgIGRheUVycm9yOiBWQUxJREFUSU9OX01FU1NBR0VTLkVORFNfQllfREFURV9QQVNULFxyXG4gICAgICAgIG1vbnRoRXJyb3I6IFZBTElEQVRJT05fTUVTU0FHRVMuRU5EU19CWV9EQVRFX1BBU1QsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHZhbGlkO1xyXG4gIH1cclxuXHJcbiAgZ2V0RW5kc0J5RGF0ZURheUVycm9yKGRheTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICghL14tP1xcZCsoXFwuXFxkKyk/JC8udGVzdChkYXkpKSB7XHJcbiAgICAgIHJldHVybiBWQUxJREFUSU9OX01FU1NBR0VTLkVORFNfQllfREFURV9JTlZBTElEX1ZBTFVFO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGF5TnVtYmVyID0gTnVtYmVyKGRheSk7XHJcbiAgICBpZiAoZGF5TnVtYmVyIDw9IDAgfHwgZGF5TnVtYmVyID4gMzEpIHtcclxuICAgICAgcmV0dXJuIFZBTElEQVRJT05fTUVTU0FHRVMuRU5EU19CWV9EQVRFX0lOVkFMSURfVkFMVUU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBnZXRFbmRzQnlEYXRlTW9udGhFcnJvcihtb250aDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICghUkVHRVguRU5EU19CWV9EQVRFX01PTlRILnRlc3QobW9udGgpKSB7XHJcbiAgICAgIHJldHVybiBWQUxJREFUSU9OX01FU1NBR0VTLkVORFNfQllfREFURV9JTlZBTElEX1ZBTFVFO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgaXNWYWxpZEVuZHNCeUNhbGVuZGFyRGF0ZShkYXk6IHN0cmluZywgbW9udGg6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgbW9udGhNYXRjaCA9IG1vbnRoLm1hdGNoKFJFR0VYLkVORFNfQllfREFURV9NT05USCk7XHJcbiAgICBpZiAoIW1vbnRoTWF0Y2gpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbW9udGhJbmRleCA9IEZVTExfTU9OVEhfTkFNRVMuaW5kZXhPZihtb250aE1hdGNoWzFdKTtcclxuICAgIGNvbnN0IHllYXIgPSAyMDAwICsgTnVtYmVyKG1vbnRoTWF0Y2hbMl0pO1xyXG4gICAgY29uc3QgZGF5TnVtYmVyID0gTnVtYmVyKGRheSk7XHJcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoZGF5TnVtYmVyKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGhJbmRleCwgZGF5TnVtYmVyKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIGRhdGUuZ2V0RnVsbFllYXIoKSA9PT0geWVhciAmJlxyXG4gICAgICBkYXRlLmdldE1vbnRoKCkgPT09IG1vbnRoSW5kZXggJiZcclxuICAgICAgZGF0ZS5nZXREYXRlKCkgPT09IGRheU51bWJlclxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGlzRW5kc0J5RGF0ZUluUGFzdChkYXk6IHN0cmluZywgbW9udGg6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgbW9udGhNYXRjaCA9IG1vbnRoLm1hdGNoKFJFR0VYLkVORFNfQllfREFURV9NT05USCk7XHJcbiAgICBpZiAoIW1vbnRoTWF0Y2gpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbW9udGhJbmRleCA9IEZVTExfTU9OVEhfTkFNRVMuaW5kZXhPZihtb250aE1hdGNoWzFdKTtcclxuICAgIGNvbnN0IHllYXIgPSAyMDAwICsgTnVtYmVyKG1vbnRoTWF0Y2hbMl0pO1xyXG4gICAgY29uc3QgZGF5TnVtYmVyID0gTnVtYmVyKGRheSk7XHJcbiAgICBjb25zdCBlbmRzQnlEYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGhJbmRleCwgZGF5TnVtYmVyKTtcclxuICAgIGVuZHNCeURhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XHJcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XHJcbiAgICB0b2RheS5zZXRIb3VycygwLCAwLCAwLCAwKTtcclxuICAgIHJldHVybiBlbmRzQnlEYXRlIDwgdG9kYXk7XHJcbiAgfVxyXG5cclxuICBub3JtYWxpemVEdWVUaW1lKGR1ZVRpbWU6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAoZHVlVGltZSA9PSBudWxsIHx8IGR1ZVRpbWUgPT09ICcnKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIGxldCB2YWx1ZSA9IFN0cmluZyhkdWVUaW1lKS50cmltKCkucmVwbGFjZSgvXFxzKy9nLCAnICcpO1xyXG4gICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9eKFxcZHsxLDJ9KTooXFxkezJ9KTpcXGR7Mn1cXHMqKEFNfFBNKSQvaSwgJyQxOiQyICQzJyk7XHJcbiAgICBjb25zdCBtYXRjaCA9IHZhbHVlLm1hdGNoKC9eKFxcZHsxLDJ9KTooXFxkezJ9KVxccyooQU18UE0pJC9pKTtcclxuICAgIGlmICghbWF0Y2gpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG4gICAgbGV0IGhvdXIgPSBOdW1iZXIobWF0Y2hbMV0pO1xyXG4gICAgaWYgKGhvdXIgPT09IDApIHtcclxuICAgICAgaG91ciA9IDEyO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGAke2hvdXJ9OiR7bWF0Y2hbMl19ICR7bWF0Y2hbM10udG9VcHBlckNhc2UoKX1gO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEl0IHRha2VzIGEgc3RyaW5nLCByZW1vdmVzIGFsbCB3aGl0ZXNwYWNlLCBhbmQgcmV0dXJucyB0aGUgc3RyaW5nXHJcbiAgICogQHBhcmFtIHthbnl9IG5hbWUgLSB0aGUgbmFtZSBvZiB0aGUgcmVzcG9uc2liaWxpdHlcclxuICAgKiBAcmV0dXJucyB0aGUgdHJpbW1lZE5hbWUgdmFyaWFibGUuXHJcbiAgICovXHJcbiAgY2hlY2tWYWxpZFJlc3BvbnNpYmlsaXR5TmFtZShuYW1lOiBhbnkpIHtcclxuICAgIGNvbnN0IHJlID0gLyZuYnNwO3w8YnI+L2c7XHJcbiAgICBpZiAobmFtZSkge1xyXG4gICAgICB2YXIgdHJpbW1lZE5hbWUgPSBuYW1lLnRvU3RyaW5nKCkucmVwbGFjZShyZSwgJycpLnRyaW0oKTtcclxuICAgICAgdHJpbW1lZE5hbWUgPSB0cmltbWVkTmFtZS5yZXBsYWNlKC8gICsvZywgJyAnKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cmltbWVkTmFtZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRoZSByZXNwb25zaWJpbGl0eSBuYW1lIGlzIHZhbGlkLCBhbmQgdGhlIGFzc2lnbmVlIGFuZCBhc3NpZ25vciBhcmUgbm90IGVtcHR5LCB0aGVuIHJldHVyblxyXG4gICAqIHRydWUuIE90aGVyd2lzZSwgcmV0dXJuIGZhbHNlXHJcbiAgICogQHBhcmFtIHthbnl9IGRhdGEgLSBhbnkgLSB0aGUgZGF0YSB0aGF0IGlzIGJlaW5nIHBhc3NlZCBpblxyXG4gICAqIEByZXR1cm5zIEEgYm9vbGVhbiB2YWx1ZS5cclxuICAgKi9cclxuICBpc1ZhbGlkRGF0YShkYXRhOiBhbnkpIHtcclxuICAgIGNvbnN0IHJlc3BvbnNpYmlsaXR5ID0gdGhpcy5jaGVja1ZhbGlkUmVzcG9uc2liaWxpdHlOYW1lKFxyXG4gICAgICBkYXRhPy5yZXNwb25zaWJpbGl0eU5hbWVcclxuICAgICk/Lmxlbmd0aFxyXG4gICAgICA/IHRydWVcclxuICAgICAgOiBmYWxzZTtcclxuICAgIGNvbnN0IGFzc2lnbmVlID0gZGF0YT8uYXNzaWduZWU/Lmxlbmd0aCA/IHRydWUgOiBmYWxzZTtcclxuICAgIGNvbnN0IGZyZXF1ZW5jeSA9IGRhdGE/LmZyZXF1ZW5jeT8ubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgaWYgKGFzc2lnbmVlICYmIHJlc3BvbnNpYmlsaXR5ICYmIGZyZXF1ZW5jeSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRoZSBhc3NpZ25vciBpcyB0aGUgc2FtZSBhcyB0aGUgb3ZlcnNlZXIgb3IgdGhlIE5vdGlmeU9uRmFpbHVyZSwgb3IgaWYgdGhlIGFzc2lnbm9yIGlzIG5vdCBzZXRcclxuICAgKiBhbmQgdGhlIGRlZmF1bHRPd25lciBpcyB0aGUgc2FtZSBhcyB0aGUgb3ZlcnNlZXIgb3IgdGhlIE5vdGlmeU9uRmFpbHVyZSwgb3IgaWYgdGhlIGFzc2lnbmVlIGlzIHRoZVxyXG4gICAqIHNhbWUgYXMgdGhlIHJldmlld2VyLCBvdmVyc2Vlciwgb3IgTm90aWZ5T25GYWlsdXJlLCBvciBpZiB0aGUgYXNzaWduZWUgaXMgbm90IHNldCBhbmQgdGhlXHJcbiAgICogZGVmYXVsdE93bmVyIGlzIHRoZSBzYW1lIGFzIHRoZSBvdmVyc2VlciBvciB0aGUgTm90aWZ5T25GYWlsdXJlLCBvciBpZiB0aGUgcmV2aWV3ZXIgaXMgdGhlIHNhbWUgYXNcclxuICAgKiB0aGUgb3ZlcnNlZXIgb3IgdGhlIE5vdGlmeU9uRmFpbHVyZSwgb3IgaWYgdGhlIGFzc2lnbmVlIGlzIG5vdCBzZXQsIHRoZW4gcmV0dXJuIGZhbHNlLiBPdGhlcndpc2UsXHJcbiAgICogcmV0dXJuIHRydWVcclxuICAgKiBAcGFyYW0ge2FueX0gZGF0YSAtIGFueSAtIHRoaXMgaXMgdGhlIGRhdGEgdGhhdCBpcyBwYXNzZWQgaW4gZnJvbSB0aGUgZm9ybS5cclxuICAgKiBAcmV0dXJucyBBIGJvb2xlYW4gdmFsdWUuXHJcbiAgICovXHJcbiAgaXNWYWxpZFVzZXJzKGRhdGE6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKFxyXG4gICAgICAoZGF0YT8uYXNzaWdub3IgJiZcclxuICAgICAgICAoZGF0YT8uYXNzaWdub3IgPT0gZGF0YT8ub3ZlcnNlZXIgfHxcclxuICAgICAgICAgIGRhdGE/LmFzc2lnbm9yID09IGRhdGE/Lm5vdGlmeU9uRmFpbHVyZSkpIHx8XHJcbiAgICAgICghZGF0YT8uYXNzaWdub3IgJiZcclxuICAgICAgICAodGhpcy5kZWZhdWx0T3duZXIgPT0gZGF0YT8ub3ZlcnNlZXIgfHxcclxuICAgICAgICAgIHRoaXMuZGVmYXVsdE93bmVyID09IGRhdGE/Lm5vdGlmeU9uRmFpbHVyZSkpIHx8XHJcbiAgICAgIChkYXRhPy5hc3NpZ25lZSAmJlxyXG4gICAgICAgIChkYXRhPy5hc3NpZ25lZSA9PSBkYXRhPy5yZXZpZXdlciB8fFxyXG4gICAgICAgICAgZGF0YT8uYXNzaWduZWUgPT0gZGF0YT8ub3ZlcnNlZXIgfHxcclxuICAgICAgICAgIGRhdGE/LmFzc2lnbmVlID09IGRhdGE/Lm5vdGlmeU9uRmFpbHVyZSkpIHx8XHJcbiAgICAgICghZGF0YT8uYXNzaWduZWUgJiZcclxuICAgICAgICAodGhpcy5kZWZhdWx0T3duZXIgPT0gZGF0YT8ub3ZlcnNlZXIgfHxcclxuICAgICAgICAgIHRoaXMuZGVmYXVsdE93bmVyID09IGRhdGE/Lm5vdGlmeU9uRmFpbHVyZSkpIHx8XHJcbiAgICAgIChkYXRhPy5yZXZpZXdlciAmJlxyXG4gICAgICAgIChkYXRhPy5yZXZpZXdlciA9PSBkYXRhPy5vdmVyc2VlciB8fFxyXG4gICAgICAgICAgZGF0YT8ucmV2aWV3ZXIgPT0gZGF0YT8ubm90aWZ5T25GYWlsdXJlKSkgfHxcclxuICAgICAgIWRhdGE/LmFzc2lnbmVlXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJdCB0YWtlcyBpbiBhIGRhdGEgb2JqZWN0IGFuZCByZXR1cm5zIGFuIG9iamVjdCB3aXRoIDQgYm9vbGVhbiBwcm9wZXJ0aWVzLlxyXG4gICAqIFRoZSBib29sZWFuIHByb3BlcnRpZXMgYXJlIGRldGVybWluZWQgYnkgdGhlIHZhbHVlcyBvZiB0aGUgZGF0YSBvYmplY3QuXHJcbiAgICogQHBhcmFtIHthbnl9IGRhdGEgLSBhbnkgPSB7XHJcbiAgICogQHJldHVybnMge1xyXG4gICAqICAgaXNWYWxpZEFzc2lnbmVlOiB0cnVlLFxyXG4gICAqICAgaXNWYWxpZEFzc2lnbm9yOiB0cnVlLFxyXG4gICAqICAgaXNWYWxpZFJldmlld2VyOiB0cnVlLFxyXG4gICAqICAgaXNWYWxpZE92ZXJzZWVyOiB0cnVlXHJcbiAgICogfVxyXG4gICAqL1xyXG4gIHZhbGlkYXRlRGF0YVdpdGhQcm9ncmFtKGRhdGE6IGFueSk6IGFueSB7XHJcbiAgICBjb25zdCBwcm9ncmFtID0gdGhpcy50ZW1wbGF0ZUluZm8/LmNhdGVnb3J5TGlzdD8uZmlsdGVyKFxyXG4gICAgICAocHJvZ3JhbTogYW55KSA9PiBwcm9ncmFtPy5wcm9ncmFtTmFtZSA9PT0gZGF0YT8ucHJvZ3JhbVxyXG4gICAgKTtcclxuICAgIGNvbnN0IHNlbGVjdGVkQXNzaWduZWUgPSB0aGlzLnRlbXBsYXRlSW5mbz8uYXNzaWduZWVzTGlzdD8uZmlsdGVyKFxyXG4gICAgICAoYXNzaWduZWU6IGFueSkgPT4gYXNzaWduZWU/Lm5hbWVBbmRFbWFpbCA9PT0gZGF0YT8uYXNzaWduZWVcclxuICAgICk7XHJcbiAgICBjb25zdCBzZWxlY3RlZEFzc2lnbm9yID0gdGhpcy50ZW1wbGF0ZUluZm8/LmFzc2lnbm9yc0xpc3Q/LmZpbHRlcihcclxuICAgICAgKGFzc2lnbm9yOiBhbnkpID0+IGFzc2lnbm9yPy5uYW1lQW5kRW1haWwgPT09IGRhdGE/LmFzc2lnbm9yXHJcbiAgICApO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRSZXZpZXdlciA9IHRoaXMudGVtcGxhdGVJbmZvPy5yZXZpZXdlckxpc3Q/LmZpbHRlcihcclxuICAgICAgKHJldmlld2VyOiBhbnkpID0+IHJldmlld2VyPy5uYW1lQW5kRW1haWwgPT09IGRhdGE/LnJldmlld2VyXHJcbiAgICApO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRPdmVyc2VlciA9IHRoaXMudGVtcGxhdGVJbmZvPy5yZXZpZXdlckxpc3Q/LmZpbHRlcihcclxuICAgICAgKG92ZXJzZWVyOiBhbnkpID0+IG92ZXJzZWVyPy5uYW1lQW5kRW1haWwgPT09IGRhdGE/Lm92ZXJzZWVyXHJcbiAgICApO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWROb3RpZnlPbkZhaWx1cmUgPSB0aGlzLnRlbXBsYXRlSW5mbz8ucmV2aWV3ZXJMaXN0Py5maWx0ZXIoXHJcbiAgICAgIChub3RpZnlPbkZhaWx1cmU6IGFueSkgPT5cclxuICAgICAgICBub3RpZnlPbkZhaWx1cmU/Lm5hbWVBbmRFbWFpbCA9PT0gZGF0YT8ubm90aWZ5T25GYWlsdXJlXHJcbiAgICApO1xyXG4gICAgbGV0IGlzVmFsaWRBc3NpZ25lZSA9IHRydWU7XHJcbiAgICBsZXQgaXNWYWxpZEFzc2lnbm9yID0gdHJ1ZTtcclxuICAgIGxldCBpc1ZhbGlkUmV2aWV3ZXIgPSB0cnVlO1xyXG4gICAgbGV0IGlzVmFsaWRPdmVyc2VlciA9IHRydWU7XHJcbiAgICBsZXQgaXNWYWxpZE5vdGlmeU9uRmFpbHVyZSA9IHRydWU7XHJcbiAgICBpZiAocHJvZ3JhbSAmJiB0aGlzLm9yZ0RldGFpbHM/Lmhhc1Byb2dyYW1GdWxsUGVybWlzc2lvbikge1xyXG4gICAgICBpZiAocHJvZ3JhbVswXT8uYXNzaWduZWU/Lmxlbmd0aCAmJiBzZWxlY3RlZEFzc2lnbmVlPy5sZW5ndGgpIHtcclxuICAgICAgICBpc1ZhbGlkQXNzaWduZWUgPSBwcm9ncmFtWzBdPy5hc3NpZ25lZT8uaW5jbHVkZXMoXHJcbiAgICAgICAgICBzZWxlY3RlZEFzc2lnbmVlWzBdPy5teV9tZW1iZXJfaWRcclxuICAgICAgICApXHJcbiAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHByb2dyYW1bMF0/LnJldmlld2VyPy5sZW5ndGggJiYgc2VsZWN0ZWRSZXZpZXdlcj8ubGVuZ3RoKSB7XHJcbiAgICAgICAgaXNWYWxpZFJldmlld2VyID0gcHJvZ3JhbVswXT8ucmV2aWV3ZXI/LmluY2x1ZGVzKFxyXG4gICAgICAgICAgc2VsZWN0ZWRSZXZpZXdlclswXT8ubXlfbWVtYmVyX2lkXHJcbiAgICAgICAgKVxyXG4gICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICA6IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChwcm9ncmFtWzBdPy5vdmVyc2Vlcj8ubGVuZ3RoICYmIHNlbGVjdGVkT3ZlcnNlZXI/Lmxlbmd0aCkge1xyXG4gICAgICAgIGlzVmFsaWRPdmVyc2VlciA9IHByb2dyYW1bMF0/Lm92ZXJzZWVyPy5pbmNsdWRlcyhcclxuICAgICAgICAgIHNlbGVjdGVkT3ZlcnNlZXJbMF0/Lm15X21lbWJlcl9pZFxyXG4gICAgICAgIClcclxuICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocHJvZ3JhbVswXT8ub3ZlcnNlZXI/Lmxlbmd0aCAmJiBzZWxlY3RlZE5vdGlmeU9uRmFpbHVyZT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgaXNWYWxpZE5vdGlmeU9uRmFpbHVyZSA9IHByb2dyYW1bMF0/Lm92ZXJzZWVyPy5pbmNsdWRlcyhcclxuICAgICAgICAgIHNlbGVjdGVkTm90aWZ5T25GYWlsdXJlWzBdPy5teV9tZW1iZXJfaWRcclxuICAgICAgICApXHJcbiAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGlzVmFsaWRBc3NpZ25lZTogaXNWYWxpZEFzc2lnbmVlLFxyXG4gICAgICBpc1ZhbGlkQXNzaWdub3I6IGlzVmFsaWRBc3NpZ25vcixcclxuICAgICAgaXNWYWxpZFJldmlld2VyOiBpc1ZhbGlkUmV2aWV3ZXIsXHJcbiAgICAgIGlzVmFsaWRPdmVyc2VlcjogaXNWYWxpZE92ZXJzZWVyLFxyXG4gICAgICBpc1ZhbGlkTm90aWZ5T25GYWlsdXJlOiBpc1ZhbGlkTm90aWZ5T25GYWlsdXJlLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEl0IHRha2VzIHR3byBzdHJpbmdzIGFzIGFyZ3VtZW50cywgYW5kIHJldHVybnMgYW4gb2JqZWN0IHdpdGggdGhyZWUgcHJvcGVydGllc1xyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9ncmFtTmFtZSAtIHN0cmluZyAtJmd0OyBOYW1lIG9mIHRoZSBwcm9ncmFtXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGlsZVByb2dyYW1dIC0gc3RyaW5nID0mZ3Q7IHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIHN1Yi1wcm9ncmFtXHJcbiAgICogQHJldHVybnMge1xyXG4gICAqICAgcHJvZ3JhbUlkOiAxLFxyXG4gICAqICAgY2hpbGRQcm9ncmFtSWQ6IDIsXHJcbiAgICogICBjYXRlZ29yeUlkOiAnMSwyJ1xyXG4gICAqIH1cclxuICAgKi9cclxuICBnZXRQcm9ncmFtSWQocHJvZ3JhbU5hbWU6IHN0cmluZywgY2hpbGVQcm9ncmFtPzogc3RyaW5nKTogYW55IHtcclxuICAgIGNvbnN0IHByb2dyYW0gPSB0aGlzLnRlbXBsYXRlSW5mbz8uY2F0ZWdvcnlMaXN0Py5maWx0ZXIoXHJcbiAgICAgIChwcm9ncmFtOiBhbnkpID0+IHByb2dyYW0/LnByb2dyYW1OYW1lID09PSBwcm9ncmFtTmFtZVxyXG4gICAgKTtcclxuICAgIGxldCBzdWJQcm9ncmFtO1xyXG4gICAgbGV0IHN1YlByb2dyYW1JZDtcclxuICAgIGxldCBjYXRlZ29yeUlkO1xyXG4gICAgaWYgKGNoaWxlUHJvZ3JhbT8ubGVuZ3RoICYmIHByb2dyYW0/Lmxlbmd0aCkge1xyXG4gICAgICBzdWJQcm9ncmFtID0gcHJvZ3JhbVswXT8uY2hpbGRDYXRlZ29yeT8uZmlsdGVyKFxyXG4gICAgICAgIChzdWJQcm9ncmFtOiBhbnkpID0+IHN1YlByb2dyYW0/Lm5hbWUgPT09IGNoaWxlUHJvZ3JhbVxyXG4gICAgICApO1xyXG4gICAgICBzdWJQcm9ncmFtSWQgPSBzdWJQcm9ncmFtPy5sZW5ndGggPyBzdWJQcm9ncmFtWzBdPy5pZCA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3ViUHJvZ3JhbUlkICYmIHByb2dyYW0/Lmxlbmd0aCkge1xyXG4gICAgICBjYXRlZ29yeUlkID1cclxuICAgICAgICBwcm9ncmFtWzBdPy5wcm9ncmFtSWQ/LnRvU3RyaW5nKCkgKyAnLCcgKyBzdWJQcm9ncmFtSWQ/LnRvU3RyaW5nKCk7XHJcbiAgICB9IGVsc2UgaWYgKHByb2dyYW0/Lmxlbmd0aCkge1xyXG4gICAgICBjYXRlZ29yeUlkID0gcHJvZ3JhbVswXT8ucHJvZ3JhbUlkPy50b1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcHJvZ3JhbUlkOiBwcm9ncmFtPy5sZW5ndGggPyBwcm9ncmFtWzBdPy5wcm9ncmFtSWQgOiB1bmRlZmluZWQsXHJcbiAgICAgIGNoaWxkUHJvZ3JhbUlkOiBzdWJQcm9ncmFtSWQsXHJcbiAgICAgIGNhdGVnb3J5SWQ6IGNhdGVnb3J5SWQsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSXQgdGFrZXMgYSBzdHJpbmcgYXMgYW4gYXJndW1lbnQgYW5kIHJldHVybnMgYSBzdHJpbmcuXHJcbiAgICogQHBhcmFtIHthbnl9IGl0ZW0gLSB0aGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBncm91cCB0aGF0IGlzIHNlbGVjdGVkIGZyb20gdGhlIGRyb3Bkb3duLlxyXG4gICAqIGl0IHdpbGwgcmV0dXJuIGVtcGxveWVlIGlkIGluIHRoaXMgZm9ybSAnMTIzNCwyMzQ1Jy5cclxuICAgKi9cclxuICBnZXRFbXBsb3llZUlkRnJvbUdyb3VwKGl0ZW06IGFueSkge1xyXG4gICAgbGV0IGVtcElkOiBhbnkgPSBbXTtcclxuICAgIGxldCBlbXBsb3llZV9pZDogYW55ID0gW107XHJcbiAgICB0aGlzLnRlbXBsYXRlSW5mbz8uYXNzaWduZWVzTGlzdD8uZm9yRWFjaCgoZW5FbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgaWYgKGVuRWxlbWVudD8ubmFtZUFuZEVtYWlsID09IGl0ZW0pIHtcclxuICAgICAgICBlbXBJZCA9IGVuRWxlbWVudD8ubXlfbWVtYmVyX2lkO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGlmIChlbXBJZD8ubGVuZ3RoKSB7XHJcbiAgICAgIGVtcElkPy5mb3JFYWNoKChpZDogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8/LnJldmlld2VyTGlzdC5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmICh1c2VyPy5teV9tZW1iZXJfaWQgPT0gaWQpIHtcclxuICAgICAgICAgICAgZW1wbG95ZWVfaWQ/LnB1c2godXNlcj8uZW1wbG95ZWVfaWQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBlbXBsb3llZV9pZD8udG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRoZSBpdGVtIGlzIGEgZ3JvdXAsIHJldHVybiB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAqIEBwYXJhbSB7YW55fSBpdGVtIC0gYW55IC0gdGhlIGl0ZW0gdGhhdCBpcyBiZWluZyBjaGVja2VkXHJcbiAgICovXHJcbiAgaXNHcm91cFNlbGVjdGVkKGl0ZW06IGFueSkge1xyXG4gICAgbGV0IGlzR3JvdXAgPSBmYWxzZTtcclxuICAgICh0aGlzLnRlbXBsYXRlSW5mbz8uYXNzaWduZWVzTGlzdCB8fCBbXSkuZm9yRWFjaCgoZW5FbGVtZW50OiBhbnkpOiBhbnkgPT4ge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgZW5FbGVtZW50Lm5hbWVBbmRFbWFpbCA9PSBpdGVtICYmXHJcbiAgICAgICAgKGl0ZW0/LmluY2x1ZGVzKCdVc2VycyknKSB8fCBpdGVtPy5pbmNsdWRlcygnVXNlciknKSkgJiZcclxuICAgICAgICB0eXBlb2YgZW5FbGVtZW50Py5teV9tZW1iZXJfaWQgPT0gJ29iamVjdCdcclxuICAgICAgKSB7XHJcbiAgICAgICAgaXNHcm91cCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGlzR3JvdXA7XHJcbiAgfVxyXG59XHJcbiIsIjwhLS0gPGRpdiBjbGFzcz1cImFkZC1tdWx0aXBsZS1yaXNrXCIgW2F0dHIuaWRdPVwiJ3Njcm9sbFJlZmVyZW5jZSdcIiA+XHJcbiAgICA8IS0gLSBtYWluIGNvbnRhaW5lciBzdGFydHMgaGVyZSAtIC0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYWRkLW11bHRpcGxlLXJpc2stYm9keVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhZGQtbXVsdGlwbGUtcmlzay1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvd29ya2Zsb3ctZW5naW5lL2Fzc2V0cy93b3JrZmxvdy9zcHJlYWRzaGVldC1tdWx0aXBsZS1jYXRlZ29yeS5zdmdcIiBhbHQ9XCJcIiAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGg0PllvdSBjYW4gZW50cnVzdCBtdWx0aXBsZSByZXNwb25zaWJpbGl0aWVzIGluIGp1c3QgdHdvIGVhc3kgc3RlcHM6PC9oND5cclxuICAgICAgICAgICAgPHVsIGNsYXNzPVwibGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgPGxpPkRvd25sb2FkIHRoZSB0ZW1wbGF0ZSBhbmQgZmlsbCBpbiB0aGUgZGV0YWlscy48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPlVwbG9hZCB0aGUgLnhsc3ggZmlsZSBhbmQgeW914oCZcmUgZ29vZCB0byBnbyE8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRvd25sb2FkXCIgKm5nSWY9XCJkb3dubG9hZFN0YXR1cyA9PT0gJ05PVF9ET1dOTE9BRElORydcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiZG93bmxvYWRUZW1wbGF0ZSgpXCIgdHlwZT1cImJ1dHRvblwiPjxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTFiOzwvaT4gRG93bmxvYWQgVGVtcGxhdGU8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1bGstYnRuLXByb2dyZXNzXCIgKm5nSWY9XCJkb3dubG9hZFN0YXR1cyA9PT0gJ0RPV05MT0FESU5HJ1wiPlxyXG4gICAgICAgICAgICAgICAgRG93bmxvYWQgaW4gUHJvZ3Jlc3NcclxuICAgICAgICAgICAgICAgIDxhcHAtbGluZS1sb2FkZXIgW2xvYWRlckhlaWdodF09XCInMidcIj48L2FwcC1saW5lLWxvYWRlcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkb3dubG9hZFN0YXR1cyA9PT0gJ0RPV05MT0FERUQnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnVsay1idG4tcHJvZ3Jlc3NcIj48aSBjbGFzcz1cImljb25zXCI+JiN4ZTkxYzs8L2k+RG93bmxvYWQgQ29tcGxldGU8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidWxrLWJ0bi1hZ2FpblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIElzIHRoZSBmaWxlIG5vdCBkb3dubG9hZGVkP1xyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImRvd25sb2FkVGVtcGxhdGUoKVwiPlJldHJ5IERvd25sb2FkPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxwIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiICpuZ0lmPVwiaXNXcm9uZ0ZpbGUgfHwgaXNXcm9uZ0Zvcm1hdHx8IGlzRmlsZUVtcHR5XCJcclxuICAgICAgICAgICAgPnt7ZXJyb3JNZXNzYWdlfX08L3A+ICBcclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4gLS0+XHJcbjxhcHAtYnVsay1yZXNwb25zaWJpbGl0eS12aWV3ICpuZ0lmPVwic2hvd0V4Y2VsXCJcclxuICAgIFtyZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWRdPVwicmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkXCJcclxuICAgIFtidWxrVXBsb2FkXT1cImJ1bGtVcGxvYWRcIlxyXG4gICAgW2ZpbGVOYW1lXT1cImZpbGVOYW1lXCJcclxuICAgIFtsb2FkZXJdPVwibG9hZGVyXCJcclxuICAgIFtkZWZhdWx0T3duZXJdPVwiZGVmYXVsdE93bmVyXCJcclxuICAgIFt0YWJUeXBlXT1cInRhYlR5cGVcIlxyXG4gICAgW2J1bGtVcGxvYWRdPVwiYnVsa1VwbG9hZFwiXHJcbiAgICAoc3VibWl0UmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkKT1cInN1Ym1pdFJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCgpXCJcclxuICAgIChzZWxlY3RlZFRhYik9XCJzZWxlY3RlZFRhYigkZXZlbnQpXCJcclxuICAgIChjYW5jZWwpPVwicmVzZXQoKVwiXHJcbiAgICBbcmVzcG9uc2liaWxpdHlUeXBlXT1cIidtdWx0aVRhYidcIj5cclxuPC9hcHAtYnVsay1yZXNwb25zaWJpbGl0eS12aWV3PlxyXG48YXBwLWxvYWRlci1pbmxpbmUgKm5nSWY9XCJsb2FkZXJcIj48L2FwcC1sb2FkZXItaW5saW5lPlxyXG5cclxuPGlucHV0IHR5cGU9XCJmaWxlXCIgWyhuZ01vZGVsKV09XCJmaWxlVmFsdWVcIiBpZD1cImZpbGVJbnB1dFwiIGNsYXNzPVwiaGlkZGVuLWlucHV0XCIgYWNjZXB0PVwiLnhsc3hcIiAoY2hhbmdlKT1cInVwbG9hZGVkRmlsZSgkZXZlbnQpXCIgbXVsdGlwbGUgLz5cclxuPGFwcC1zbWlsZXktZGlhbG9nLWlubGluZSAqbmdJZj1cInNob3dTbWlsZXlcIiBbbWVzc2FnZV09XCJzbWlsZXlNZXNzYWdlXCIgW2FjdGlvbkJ1dHRvbnNdPVwiYWN0aW9uQnV0dG9uc1wiIChhY3Rpb24pPVwiYWN0aW9uKCRldmVudClcIiAoY2xvc2VTbWlsZXkpPVwiY2xvc2VTbWlsZXkoJGV2ZW50KVwiPjwvYXBwLXNtaWxleS1kaWFsb2ctaW5saW5lPiJdfQ==