@hmcts/ccd-case-ui-toolkit 7.1.32-ungrey-back-button → 7.1.32-ungrey-back-button-2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/esm2022/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.mjs +12 -9
  2. package/esm2022/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.mjs +19 -15
  3. package/esm2022/lib/shared/components/palette/base-field/abstract-field-write-journey.component.mjs +1 -1
  4. package/esm2022/lib/shared/components/palette/case-flag/components/manage-case-flags/manage-case-flags.component.mjs +8 -3
  5. package/esm2022/lib/shared/components/palette/case-flag/components/select-flag-location/select-flag-location.component.mjs +3 -3
  6. package/esm2022/lib/shared/components/palette/case-flag/components/select-flag-type/select-flag-type.component.mjs +36 -29
  7. package/esm2022/lib/shared/components/palette/case-flag/components/update-flag/update-flag.component.mjs +1 -1
  8. package/esm2022/lib/shared/components/palette/case-flag/read-case-flag-field.component.mjs +4 -3
  9. package/esm2022/lib/shared/components/palette/case-flag/write-case-flag-field.component.mjs +1 -1
  10. package/esm2022/lib/shared/components/palette/linked-cases/components/before-you-start/before-you-start.component.mjs +2 -5
  11. package/esm2022/lib/shared/components/palette/linked-cases/components/link-cases/link-cases.component.mjs +1 -1
  12. package/esm2022/lib/shared/components/palette/linked-cases/components/unlink-cases/unlink-cases.component.mjs +1 -1
  13. package/esm2022/lib/shared/components/palette/linked-cases/write-linked-cases-field.component.mjs +5 -5
  14. package/esm2022/lib/shared/services/journey/multipage-component-state.service.mjs +1 -1
  15. package/fesm2022/hmcts-ccd-case-ui-toolkit.mjs +78 -61
  16. package/fesm2022/hmcts-ccd-case-ui-toolkit.mjs.map +1 -1
  17. package/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.d.ts +1 -0
  18. package/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.d.ts.map +1 -1
  19. package/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.d.ts +3 -0
  20. package/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.d.ts.map +1 -1
  21. package/lib/shared/components/palette/case-flag/components/manage-case-flags/manage-case-flags.component.d.ts +4 -2
  22. package/lib/shared/components/palette/case-flag/components/manage-case-flags/manage-case-flags.component.d.ts.map +1 -1
  23. package/lib/shared/components/palette/case-flag/components/select-flag-location/select-flag-location.component.d.ts +1 -1
  24. package/lib/shared/components/palette/case-flag/components/select-flag-location/select-flag-location.component.d.ts.map +1 -1
  25. package/lib/shared/components/palette/case-flag/components/select-flag-type/select-flag-type.component.d.ts +7 -2
  26. package/lib/shared/components/palette/case-flag/components/select-flag-type/select-flag-type.component.d.ts.map +1 -1
  27. package/lib/shared/components/palette/case-flag/components/update-flag/update-flag.component.d.ts.map +1 -1
  28. package/lib/shared/components/palette/case-flag/read-case-flag-field.component.d.ts.map +1 -1
  29. package/lib/shared/components/palette/linked-cases/components/before-you-start/before-you-start.component.d.ts +0 -1
  30. package/lib/shared/components/palette/linked-cases/components/before-you-start/before-you-start.component.d.ts.map +1 -1
  31. package/lib/shared/components/palette/linked-cases/write-linked-cases-field.component.d.ts +1 -1
  32. package/lib/shared/components/palette/linked-cases/write-linked-cases-field.component.d.ts.map +1 -1
  33. package/lib/shared/services/journey/multipage-component-state.service.d.ts.map +1 -1
  34. package/package.json +1 -1
@@ -182,6 +182,7 @@ export class ReadCaseFlagFieldComponent extends AbstractFieldReadComponent {
182
182
  // The FlagLauncher component, WriteCaseFlagFieldComponent, holds a reference to:
183
183
  // i) the parent FormGroup for the Flags instance where changes have been made;
184
184
  // ii) the currently selected flag (selectedFlag) if one exists
185
+ const caseFlagLocationControl = 'selectedManageCaseLocation';
185
186
  if (flagLauncherComponent) {
186
187
  // The FlagLauncher component holds a reference (selectedFlagsLocation) containing the CaseField instance to
187
188
  // which the new flag has been added
@@ -199,14 +200,14 @@ export class ReadCaseFlagFieldComponent extends AbstractFieldReadComponent {
199
200
  flagLauncherComponent.caseField.display_context_parameter === CaseFlagDisplayContextParameter.UPDATE_2_POINT_1 ||
200
201
  flagLauncherComponent.caseField.display_context_parameter === CaseFlagDisplayContextParameter.UPDATE_EXTERNAL) &&
201
202
  (flagLauncherComponent.selectedFlag ||
202
- (this.caseFlagStateService.formGroup.get('selectedManageCaseLocation').value.flagDetailDisplay && this.displayContextParameter === CaseFlagDisplayContextParameter.UPDATE_2_POINT_1))) {
203
+ (this.caseFlagStateService.formGroup.get(caseFlagLocationControl).value.flagDetailDisplay && this.displayContextParameter === CaseFlagDisplayContextParameter.UPDATE_2_POINT_1))) {
203
204
  if (this.formGroup.get(flagLauncherControlName)['component']?.selectedFlag?.flagDetailDisplay !== undefined) {
204
205
  this.flagForSummaryDisplay =
205
206
  this.formGroup.get(flagLauncherControlName)['component'].selectedFlag.flagDetailDisplay;
206
207
  }
207
208
  else {
208
209
  this.flagForSummaryDisplay =
209
- this.caseFlagStateService.formGroup.get('selectedManageCaseLocation').value.flagDetailDisplay;
210
+ this.caseFlagStateService.formGroup.get(caseFlagLocationControl).value.flagDetailDisplay;
210
211
  }
211
212
  // TODO: not the best solution, the caseFlagStateService should have all the fields, then we can delete a lot of the transformations here
212
213
  // in Create Case Flag it already has all fields
@@ -276,4 +277,4 @@ export class ReadCaseFlagFieldComponent extends AbstractFieldReadComponent {
276
277
  args: [{ selector: 'ccd-read-case-flag-field', template: "<ng-container *ngIf=\"context === paletteContext.CHECK_YOUR_ANSWER\">\n <ccd-case-flag-summary-list\n [flagForSummaryDisplay]=\"flagForSummaryDisplay\"\n [displayContextParameter]=\"displayContextParameter\"\n (changeButtonEmitter)=\"navigateBackToForm($event)\">\n </ccd-case-flag-summary-list>\n</ng-container>\n\n<ng-container *ngIf=\"context !== paletteContext.CHECK_YOUR_ANSWER\">\n <ng-container [ngSwitch]=\"displayContextParameter\">\n <ng-container *ngSwitchCase=\"caseFlagDisplayContextParameter.READ_EXTERNAL\">\n <h2 id=\"read-case-flag-title\" class=\"govuk-heading-l\">\n {{ 'Support requested' | rpxTranslate }}\n </h2>\n\n <div *ngFor=\"let flagData of partyLevelCaseFlagData\">\n <ccd-case-flag-table *ngIf=\"flagData.flags.partyName\"\n [tableCaption]=\"''\"\n [flagData]=\"flagData\"\n [firstColumnHeader]=\"flagData.flags.partyName\"\n [caseFlagsExternalUser]=\"caseFlagsExternalUser\"\n ></ccd-case-flag-table>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <h2 id=\"read-case-flag-title\" class=\"govuk-heading-l\">\n {{ 'Case flags' | rpxTranslate }}\n </h2>\n\n <div *ngFor=\"let flagData of partyLevelCaseFlagData\">\n <ccd-case-flag-table *ngIf=\"flagData.flags.partyName\"\n [tableCaption]=\"flagData.flags.partyName\"\n [flagData]=\"flagData\"\n [firstColumnHeader]=\"'Party level flags' | rpxTranslate\"\n ></ccd-case-flag-table>\n </div>\n <div *ngIf=\"caseLevelCaseFlagData\">\n <ccd-case-flag-table\n [tableCaption]=\"'Case level flags' | rpxTranslate\"\n [flagData]=\"caseLevelCaseFlagData\"\n [firstColumnHeader]=\"'Case flags' | rpxTranslate\"\n ></ccd-case-flag-table>\n </div>\n </ng-container>\n </ng-container>\n</ng-container>\n", styles: [".govuk-heading-l{margin-top:30px}\n"] }]
277
278
  }], () => [{ type: i1.ActivatedRoute }, { type: i1.Router }, { type: i2.CaseFlagStateService }], null); })();
278
279
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ReadCaseFlagFieldComponent, { className: "ReadCaseFlagFieldComponent", filePath: "lib/shared/components/palette/case-flag/read-case-flag-field.component.ts", lineNumber: 16 }); })();
279
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZC1jYXNlLWZsYWctZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvY2FzZS1mbGFnL3JlYWQtY2FzZS1mbGFnLWZpZWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9wYWxldHRlL2Nhc2UtZmxhZy9yZWFkLWNhc2UtZmxhZy1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUVwRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsY0FBYyxFQUFFLE1BQU0sU0FBUyxDQUFDOzs7Ozs7SUNSMUUsNkJBQW1FO0lBQ2pFLHFEQUdxRDtJQUFuRCxxUEFBdUIsaUNBQTBCLEtBQUM7SUFDcEQsaUJBQTZCOzs7O0lBSDNCLGNBQStDO0lBQy9DLEFBREEsb0VBQStDLDJEQUNJOzs7SUFhL0MseUNBS3VCOzs7O0lBREQsQUFEQSxBQURBLEFBREEsaUNBQW1CLHlCQUNFLGtEQUN5Qix1REFDQzs7O0lBTHZFLDJCQUFxRDtJQUNuRCwrSUFLQztJQUNI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REFBMUIsMEJBQTBCO1lDUHZDLEFBUkEsNkZBQW1FLGdGQVFBOztZQVJwRCwyRUFBa0Q7WUFRbEQsY0FBa0Q7WUFBbEQsMkVBQWtEOzs7aUZET3BELDBCQUEwQjtjQUx0QyxTQUFTOzJCQUNFLDBCQUEwQjs7a0ZBSXpCLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IENhc2VUYWIgfSBmcm9tICcuLi8uLi8uLi9kb21haW4nO1xuaW1wb3J0IHsgRmllbGRzVXRpbHMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9maWVsZHMnO1xuaW1wb3J0IHsgQ2FzZUZsYWdTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jYXNlLWVkaXRvci9zZXJ2aWNlcy9jYXNlLWZsYWctc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBBYnN0cmFjdEZpZWxkUmVhZENvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2UtZmllbGQvYWJzdHJhY3QtZmllbGQtcmVhZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGFsZXR0ZUNvbnRleHQgfSBmcm9tICcuLi9iYXNlLWZpZWxkL3BhbGV0dGUtY29udGV4dC5lbnVtJztcbmltcG9ydCB7IEZsYWdEZXRhaWxEaXNwbGF5LCBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoIH0gZnJvbSAnLi9kb21haW4nO1xuaW1wb3J0IHsgQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlciwgQ2FzZUZsYWdTdGF0dXMgfSBmcm9tICcuL2VudW1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NkLXJlYWQtY2FzZS1mbGFnLWZpZWxkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JlYWQtY2FzZS1mbGFnLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmVhZC1jYXNlLWZsYWctZmllbGQuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBSZWFkQ2FzZUZsYWdGaWVsZENvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0RmllbGRSZWFkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHVibGljIGZsYWdzRGF0YTogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aFtdO1xuICBwdWJsaWMgcGFydHlMZXZlbENhc2VGbGFnRGF0YTogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aFtdO1xuICBwdWJsaWMgY2FzZUxldmVsQ2FzZUZsYWdEYXRhOiBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoO1xuICBwdWJsaWMgcGFsZXR0ZUNvbnRleHQgPSBQYWxldHRlQ29udGV4dDtcbiAgcHVibGljIGZsYWdGb3JTdW1tYXJ5RGlzcGxheTogRmxhZ0RldGFpbERpc3BsYXk7XG4gIHB1YmxpYyBkaXNwbGF5Q29udGV4dFBhcmFtZXRlcjogQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlcjtcbiAgcHVibGljIGNhc2VGbGFnc0V4dGVybmFsVXNlciA9IGZhbHNlO1xuICBwdWJsaWMgcGF0aFRvRmxhZ3NGb3JtR3JvdXA6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBjYXNlTGV2ZWxDYXNlRmxhZ3NGaWVsZElkID0gJ2Nhc2VGbGFncyc7XG5cbiAgcHVibGljIGdldCBjYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyKCk6IHR5cGVvZiBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyIHtcbiAgICByZXR1cm4gQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlcjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXNlRmxhZ1N0YXRlU2VydmljZTogQ2FzZUZsYWdTdGF0ZVNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBmbGFnTGF1bmNoZXJDb250cm9sTmFtZSA9IE9iamVjdC5rZXlzKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzKS5maW5kKFxuICAgICAgY29udHJvbE5hbWUgPT4gRmllbGRzVXRpbHMuaXNDYXNlRmllbGRPZlR5cGUodGhpcy5mb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lKVsnY2FzZUZpZWxkJ10sIFsnRmxhZ0xhdW5jaGVyJ10pKTtcbiAgICBjb25zdCBmbGFnTGF1bmNoZXJDb21wb25lbnQgPSB0aGlzLmZvcm1Hcm91cC5nZXQoZmxhZ0xhdW5jaGVyQ29udHJvbE5hbWUpPy5bJ2NvbXBvbmVudCddO1xuICAgIHRoaXMuZGlzcGxheUNvbnRleHRQYXJhbWV0ZXIgPSBmbGFnTGF1bmNoZXJDb21wb25lbnQ/LmNhc2VGaWVsZD8uZGlzcGxheV9jb250ZXh0X3BhcmFtZXRlcjtcbiAgICB0aGlzLmNhc2VGbGFnc0V4dGVybmFsVXNlciA9IHRoaXMuZGlzcGxheUNvbnRleHRQYXJhbWV0ZXIgPT09IENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIuUkVBRF9FWFRFUk5BTDtcblxuICAgIC8vIElmIHRoZSBjb250ZXh0IGlzIFBhbGV0dGVDb250ZXh0LkRFRkFVTFQsIHRoZSBGbGFncyBmaWVsZHMgbmVlZCB0byBiZSBsb2NhdGVkIGJ5IENhc2VUYWIgKHRoZXkgd29uJ3QgYmUgcHJlc2VudFxuICAgIC8vIGluIHRoZSBGb3JtR3JvdXAgLSBvbmx5IHRoZSBGbGFnTGF1bmNoZXIgZmllbGQgaXMgcHJlc2VudClcbiAgICBpZiAodGhpcy5jb250ZXh0ID09PSBQYWxldHRlQ29udGV4dC5ERUZBVUxUKSB7XG4gICAgICAvLyBEZXRlcm1pbmUgdGhlIHRhYiB0aGlzIENhc2VGaWVsZCBiZWxvbmdzIHRvIChzaG91bGQgYmUgb25seSBvbmUpLCBmcm9tIHRoZSBDYXNlVmlldyBvYmplY3QgaW4gdGhlIHNuYXBzaG90XG4gICAgICAvLyBkYXRhLCBhbmQgZXh0cmFjdCBhbGwgZmxhZ3MtcmVsYXRlZCBkYXRhIGZyb20gaXRzIEZsYWdzIGZpZWxkc1xuICAgICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5jYXNlPy50YWJzKSB7XG4gICAgICAgIHRoaXMuZmxhZ3NEYXRhID0gKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5jYXNlLnRhYnMgYXMgQ2FzZVRhYltdKVxuICAgICAgICAgIC5maWx0ZXIoKHRhYikgPT4gdGFiLmZpZWxkcz8uc29tZShcbiAgICAgICAgICAgIC8vIFRoZXJlIGNvdWxkIGJlIG1vcmUgdGhhbiBvbmUgRmxhZ0xhdW5jaGVyIGZpZWxkIGluc3RhbmNlIHNvIGFuIGFkZGl0aW9uYWwgY2hlY2sgb2YgY2FzZUZpZWxkIElEIGlzXG4gICAgICAgICAgICAvLyByZXF1aXJlZCB0byBlbnN1cmUgdGhlIGNvcnJlY3QgaW5zdGFuY2UgaXMgb2J0YWluZWRcbiAgICAgICAgICAgIChjYXNlRmllbGQpID0+IGNhc2VGaWVsZC5maWVsZF90eXBlLnR5cGUgPT09ICdGbGFnTGF1bmNoZXInICYmIGNhc2VGaWVsZC5pZCA9PT0gdGhpcy5jYXNlRmllbGQuaWQpKVxuICAgICAgICAgIFswXS5maWVsZHM/LnJlZHVjZSgoZmxhZ3MsIGNhc2VGaWVsZCkgPT4gRmllbGRzVXRpbHMuZXh0cmFjdEZsYWdzRGF0YUZyb21DYXNlRmllbGQoXG4gICAgICAgICAgICBmbGFncywgY2FzZUZpZWxkLCBjYXNlRmllbGQuaWQsIGNhc2VGaWVsZCksIFtdKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2VwYXJhdGUgdGhlIHBhcnR5LWxldmVsIGFuZCBjYXNlLWxldmVsIGZsYWdzXG4gICAgICB0aGlzLnBhcnR5TGV2ZWxDYXNlRmxhZ0RhdGEgPSB0aGlzLmZsYWdzRGF0YS5maWx0ZXIoXG4gICAgICAgIChpbnN0YW5jZSkgPT4gaW5zdGFuY2UucGF0aFRvRmxhZ3NGb3JtR3JvdXAgIT09IHRoaXMuY2FzZUxldmVsQ2FzZUZsYWdzRmllbGRJZCk7XG4gICAgICAvLyBJZiB0aGUgdXNlciBpcyBpbnRlcm5hbCwgZ3JvdXAgYWxsIGZsYWdzIGRhdGEgYnkgZ3JvdXBJZCB3aGVyZSBwcmVzZW50IHNvIHRoZXkgc2VlIGEgY29tYmluZWQgY29sbGVjdGlvbiBvZlxuICAgICAgLy8gaW50ZXJuYWwgYW5kIGV4dGVybmFsIGZsYWdzIGRhdGEgZm9yIGVhY2ggcGFydHlcbiAgICAgIGlmICghdGhpcy5jYXNlRmxhZ3NFeHRlcm5hbFVzZXIpIHtcbiAgICAgICAgY29uc3QgZ3JvdXBlZEZsYWdzRGF0YSA9IHRoaXMucGFydHlMZXZlbENhc2VGbGFnRGF0YVxuICAgICAgICAgIC5maWx0ZXIoKGYpID0+IGYuZmxhZ3MuZ3JvdXBJZClcbiAgICAgICAgICAucmVkdWNlKChtZXJnZWRGbGFnRGV0YWlscywgZikgPT4ge1xuICAgICAgICAgICAgbWVyZ2VkRmxhZ0RldGFpbHNbZi5mbGFncy5ncm91cElkXSA9IG1lcmdlZEZsYWdEZXRhaWxzW2YuZmxhZ3MuZ3JvdXBJZF0gfHwgW107XG4gICAgICAgICAgICAvLyBUaGUgZmxhZ3MuZGV0YWlscyBwcm9wZXJ0eSAod2hpY2ggc2hvdWxkIGJlIGFuIGFycmF5KSBjb3VsZCBiZSBmYWxzeTsgc3ByZWFkIGFuIGVtcHR5IGFycmF5IGlmIHNvXG4gICAgICAgICAgICBtZXJnZWRGbGFnRGV0YWlsc1tmLmZsYWdzLmdyb3VwSWRdLnB1c2goLi4uKGYuZmxhZ3MuZGV0YWlscyB8fCBbXSkpO1xuICAgICAgICAgICAgcmV0dXJuIG1lcmdlZEZsYWdEZXRhaWxzO1xuICAgICAgICAgIH0sIE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICAgICAgICAvLyBSZW1vdmUgZHVwbGljYXRlIGZsYWdzIG9iamVjdHMgd2l0aCB0aGUgc2FtZSBncm91cElkICh3aGljaCBhcmUgZ29pbmcgdG8gYmUgdHJlYXRlZCBhcyBvbmUgZm9yIGRpc3BsYXlcbiAgICAgICAgLy8gcHVycG9zZXMpXG4gICAgICAgIGNvbnN0IHVuaXF1ZVBhcnR5RGF0YSA9IHRoaXMucGFydHlMZXZlbENhc2VGbGFnRGF0YVxuICAgICAgICAgIC5maWx0ZXIoKGYpID0+IGYuZmxhZ3MuZ3JvdXBJZClcbiAgICAgICAgICAucmVkdWNlKChmbGFnc1VuaXF1ZUJ5R3JvdXBJZCwgZikgPT4ge1xuICAgICAgICAgICAgaWYgKGZsYWdzVW5pcXVlQnlHcm91cElkLmZpbmRJbmRleChmbGFnID0+IGZsYWcuZmxhZ3MuZ3JvdXBJZCA9PT0gZi5mbGFncy5ncm91cElkKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIC8vIFNldCB0aGUgY29ycmVzcG9uZGluZyBncm91cGVkIGZsYWdzIGRhdGFcbiAgICAgICAgICAgICAgZi5mbGFncy5kZXRhaWxzID0gZ3JvdXBlZEZsYWdzRGF0YVtmLmZsYWdzLmdyb3VwSWRdO1xuICAgICAgICAgICAgICBmbGFnc1VuaXF1ZUJ5R3JvdXBJZC5wdXNoKGYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZsYWdzVW5pcXVlQnlHcm91cElkO1xuICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgLy8gQXBwZW5kIGZsYWdzIG9iamVjdHMgd2l0aCBubyBncm91cElkXG4gICAgICAgIHRoaXMucGFydHlMZXZlbENhc2VGbGFnRGF0YS5maWx0ZXIoKGYpID0+ICFmLmZsYWdzLmdyb3VwSWQpLmZvckVhY2goKGYpID0+IHVuaXF1ZVBhcnR5RGF0YS5wdXNoKGYpKTtcbiAgICAgICAgdGhpcy5wYXJ0eUxldmVsQ2FzZUZsYWdEYXRhID0gdW5pcXVlUGFydHlEYXRhO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGVyZSB3aWxsIGJlIG9ubHkgb25lIGNhc2UtbGV2ZWwgZmxhZ3MgaW5zdGFuY2UgY29udGFpbmluZyBhbGwgY2FzZS1sZXZlbCBmbGFnIGRldGFpbHNcbiAgICAgIHRoaXMuY2FzZUxldmVsQ2FzZUZsYWdEYXRhID0gdGhpcy5mbGFnc0RhdGEuZmluZChcbiAgICAgICAgKGluc3RhbmNlKSA9PiBpbnN0YW5jZS5wYXRoVG9GbGFnc0Zvcm1Hcm91cCA9PT0gdGhpcy5jYXNlTGV2ZWxDYXNlRmxhZ3NGaWVsZElkKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29udGV4dCA9PT0gUGFsZXR0ZUNvbnRleHQuQ0hFQ0tfWU9VUl9BTlNXRVIpIHtcbiAgICAgIC8vIElmIHRoZSBjb250ZXh0IGlzIFBhbGV0dGVDb250ZXh0LkNIRUNLX1lPVVJfQU5TV0VSLCB0aGUgRmxhZ3MgZGF0YSBpcyBhbHJlYWR5IHByZXNlbnQgd2l0aGluIHRoZSBGb3JtR3JvdXAuXG4gICAgICAvLyBUaGUgRmxhZ0xhdW5jaGVyIGNvbXBvbmVudCwgV3JpdGVDYXNlRmxhZ0ZpZWxkQ29tcG9uZW50LCBob2xkcyBhIHJlZmVyZW5jZSB0bzpcbiAgICAgIC8vIGkpIHRoZSBwYXJlbnQgRm9ybUdyb3VwIGZvciB0aGUgRmxhZ3MgaW5zdGFuY2Ugd2hlcmUgY2hhbmdlcyBoYXZlIGJlZW4gbWFkZTtcbiAgICAgIC8vIGlpKSB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGZsYWcgKHNlbGVjdGVkRmxhZykgaWYgb25lIGV4aXN0c1xuICAgICAgaWYgKGZsYWdMYXVuY2hlckNvbXBvbmVudCkge1xuICAgICAgICAvLyBUaGUgRmxhZ0xhdW5jaGVyIGNvbXBvbmVudCBob2xkcyBhIHJlZmVyZW5jZSAoc2VsZWN0ZWRGbGFnc0xvY2F0aW9uKSBjb250YWluaW5nIHRoZSBDYXNlRmllbGQgaW5zdGFuY2UgdG9cbiAgICAgICAgLy8gd2hpY2ggdGhlIG5ldyBmbGFnIGhhcyBiZWVuIGFkZGVkXG4gICAgICAgIGlmICgoZmxhZ0xhdW5jaGVyQ29tcG9uZW50LmNhc2VGaWVsZC5kaXNwbGF5X2NvbnRleHRfcGFyYW1ldGVyID09PSBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLkNSRUFURSB8fFxuICAgICAgICAgIGZsYWdMYXVuY2hlckNvbXBvbmVudC5jYXNlRmllbGQuZGlzcGxheV9jb250ZXh0X3BhcmFtZXRlciA9PT0gQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlci5DUkVBVEVfMl9QT0lOVF8xIHx8XG4gICAgICAgICAgZmxhZ0xhdW5jaGVyQ29tcG9uZW50LmNhc2VGaWVsZC5kaXNwbGF5X2NvbnRleHRfcGFyYW1ldGVyID09PSBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLkNSRUFURV9FWFRFUk5BTCkgJiZcbiAgICAgICAgICBmbGFnTGF1bmNoZXJDb21wb25lbnQuc2VsZWN0ZWRGbGFnc0xvY2F0aW9uKSB7XG4gICAgICAgICAgdGhpcy5jbGVhbnVwTmF2aWdhdGlvbkZvcm1BZGRpdGlvbnMoZmxhZ0xhdW5jaGVyQ29tcG9uZW50LnNlbGVjdGVkRmxhZ3NMb2NhdGlvbik7XG4gICAgICAgICAgdGhpcy5wYXRoVG9GbGFnc0Zvcm1Hcm91cCA9IGZsYWdMYXVuY2hlckNvbXBvbmVudC5zZWxlY3RlZEZsYWdzTG9jYXRpb24ucGF0aFRvRmxhZ3NGb3JtR3JvdXA7XG4gICAgICAgICAgdGhpcy5mbGFnRm9yU3VtbWFyeURpc3BsYXkgPSB0aGlzLmV4dHJhY3ROZXdGbGFnVG9GbGFnRGV0YWlsRGlzcGxheU9iamVjdChcbiAgICAgICAgICAgIGZsYWdMYXVuY2hlckNvbXBvbmVudC5zZWxlY3RlZEZsYWdzTG9jYXRpb24pO1xuICAgICAgICAvLyBUaGUgRmxhZ0xhdW5jaGVyIGNvbXBvbmVudCBob2xkcyBhIHJlZmVyZW5jZSAoc2VsZWN0ZWRGbGFnKSwgd2hpY2ggZ2V0cyBzZXQgYWZ0ZXIgdGhlIHNlbGVjdGlvbiBzdGVwIG9mIHRoZVxuICAgICAgICAvLyBNYW5hZ2UgQ2FzZSBGbGFncyBqb3VybmV5XG4gICAgICAgIH0gZWxzZSBpZiAoKGZsYWdMYXVuY2hlckNvbXBvbmVudC5jYXNlRmllbGQuZGlzcGxheV9jb250ZXh0X3BhcmFtZXRlciA9PT0gQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlci5VUERBVEUgfHxcbiAgICAgICAgICBmbGFnTGF1bmNoZXJDb21wb25lbnQuY2FzZUZpZWxkLmRpc3BsYXlfY29udGV4dF9wYXJhbWV0ZXIgPT09IENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIuVVBEQVRFXzJfUE9JTlRfMSB8fFxuICAgICAgICAgIGZsYWdMYXVuY2hlckNvbXBvbmVudC5jYXNlRmllbGQuZGlzcGxheV9jb250ZXh0X3BhcmFtZXRlciA9PT0gQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlci5VUERBVEVfRVhURVJOQUwpICYmXG4gICAgICAgICAgKGZsYWdMYXVuY2hlckNvbXBvbmVudC5zZWxlY3RlZEZsYWcgfHxcbiAgICAgICAgICAgICh0aGlzLmNhc2VGbGFnU3RhdGVTZXJ2aWNlLmZvcm1Hcm91cC5nZXQoJ3NlbGVjdGVkTWFuYWdlQ2FzZUxvY2F0aW9uJykudmFsdWUuZmxhZ0RldGFpbERpc3BsYXkgJiYgdGhpcy5kaXNwbGF5Q29udGV4dFBhcmFtZXRlciA9PT0gQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlci5VUERBVEVfMl9QT0lOVF8xKSkpIHtcbiAgICAgICAgICBpZiAodGhpcy5mb3JtR3JvdXAuZ2V0KGZsYWdMYXVuY2hlckNvbnRyb2xOYW1lKVsnY29tcG9uZW50J10/LnNlbGVjdGVkRmxhZz8uZmxhZ0RldGFpbERpc3BsYXkgIT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICB0aGlzLmZsYWdGb3JTdW1tYXJ5RGlzcGxheSA9XG4gICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChmbGFnTGF1bmNoZXJDb250cm9sTmFtZSlbJ2NvbXBvbmVudCddLnNlbGVjdGVkRmxhZy5mbGFnRGV0YWlsRGlzcGxheTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mbGFnRm9yU3VtbWFyeURpc3BsYXkgPVxuICAgICAgICAgICAgICB0aGlzLmNhc2VGbGFnU3RhdGVTZXJ2aWNlLmZvcm1Hcm91cC5nZXQoJ3NlbGVjdGVkTWFuYWdlQ2FzZUxvY2F0aW9uJykudmFsdWUuZmxhZ0RldGFpbERpc3BsYXk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFRPRE86IG5vdCB0aGUgYmVzdCBzb2x1dGlvbiwgdGhlIGNhc2VGbGFnU3RhdGVTZXJ2aWNlIHNob3VsZCBoYXZlIGFsbCB0aGUgZmllbGRzLCB0aGVuIHdlIGNhbiBkZWxldGUgYSBsb3Qgb2YgdGhlIHRyYW5zZm9ybWF0aW9ucyBoZXJlXG4gICAgICAgICAgLy8gaW4gQ3JlYXRlIENhc2UgRmxhZyBpdCBhbHJlYWR5IGhhcyBhbGwgZmllbGRzXG4gICAgICAgICAgY29uc3QgY2FzZUZsYWdGb3JtR3JvdXBWYWx1ZSA9IHRoaXMuY2FzZUZsYWdTdGF0ZVNlcnZpY2UuZm9ybUdyb3VwPy52YWx1ZTtcbiAgICAgICAgICBpZiAoY2FzZUZsYWdGb3JtR3JvdXBWYWx1ZSkge1xuICAgICAgICAgICAgY2FzZUZsYWdGb3JtR3JvdXBWYWx1ZS5zdGF0dXMgPSBDYXNlRmxhZ1N0YXR1c1tjYXNlRmxhZ0Zvcm1Hcm91cFZhbHVlLnN0YXR1c107XG4gICAgICAgICAgICB0aGlzLmZsYWdGb3JTdW1tYXJ5RGlzcGxheS5mbGFnRGV0YWlsID0ge1xuICAgICAgICAgICAgICAuLi50aGlzLmZsYWdGb3JTdW1tYXJ5RGlzcGxheS5mbGFnRGV0YWlsLFxuICAgICAgICAgICAgICAuLi5jYXNlRmxhZ0Zvcm1Hcm91cFZhbHVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xlYW51cE5hdmlnYXRpb25Gb3JtQWRkaXRpb25zKHNlbGVjdGVkRmxhZ3NMb2NhdGlvbjogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aCl7XG4gICAgY29uc3QgcGF0aCA9IHNlbGVjdGVkRmxhZ3NMb2NhdGlvbi5wYXRoVG9GbGFnc0Zvcm1Hcm91cDtcbiAgICBPYmplY3Qua2V5cyh0aGlzLmZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaCgoY29udHJvbE5hbWUpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWUpO1xuICAgICAgaWYgKChjb250cm9sTmFtZSAhPT0gcGF0aCkpIHtcbiAgICAgICAgaWYgKGNvbnRyb2xbJ2Nhc2VGaWVsZCddLmZvcm1hdHRlZF92YWx1ZT8uZGV0YWlscyl7XG4gICAgICAgICAgLy8gd2Ugd2FudCB0byBsb29wIHRocm91Z2ggdGhlIGN1cnJlbnQgZmxhZyBkZXRhaWxzIHRvIGVuc3VyZSB0aGF0IHRoZXJlIGFyZSBubyBhZGRpdGlvbmFsIGRhdGEgZnJvbSB0aGUgdXNyZSByZXN0YXJ0aW5nIHRoZSBmbG93IHRoYXQgaGF2ZSBiZWVuIGFkZGVkLlxuICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgaW4gY29udHJvbFsnY2FzZUZpZWxkJ10uZm9ybWF0dGVkX3ZhbHVlPy5kZXRhaWxzKXtcbiAgICAgICAgICAgIC8vIGlmIHRoZSBpZCBpcyB1bmRlZmluZWQgdGhlbiB0aGUgdXNlciBoYXMgYWRkZWQgdGhpcyBhcyBwYXJ0IG9mIHRoZWlyIGN1cnJlbnQgZmxvdyBhbmQgd2Ugc2hvdWxkIHJlbW92ZSBpdCBzbyBpdCBkb2VzbnQgZ2V0IGFkZGVkIHRvIHRoZSBjYXNlXG4gICAgICAgICAgICBpZiAoIWNvbnRyb2xbJ2Nhc2VGaWVsZCddLmZvcm1hdHRlZF92YWx1ZT8uZGV0YWlsc1t2YWx1ZV0uaWQpe1xuICAgICAgICAgICAgICBjb250cm9sWydjYXNlRmllbGQnXS52YWx1ZS5kZXRhaWxzLnBvcCgpO1xuICAgICAgICAgICAgICBjb250cm9sWydjYXNlRmllbGQnXS5mb3JtYXR0ZWRfdmFsdWUuZGV0YWlscy5wb3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdE5ld0ZsYWdUb0ZsYWdEZXRhaWxEaXNwbGF5T2JqZWN0KHNlbGVjdGVkRmxhZ3NMb2NhdGlvbjogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aCk6IEZsYWdEZXRhaWxEaXNwbGF5IHtcbiAgICAvLyBVc2UgdGhlIHBhdGhUb0ZsYWdzRm9ybUdyb3VwIHByb3BlcnR5IGZyb20gdGhlIHNlbGVjdGVkIGZsYWcgbG9jYXRpb24gdG8gZHJpbGwgZG93biB0byB0aGUgY29ycmVjdCBwYXJ0IG9mIHRoZVxuICAgIC8vIENhc2VGaWVsZCB2YWx1ZSBjb250YWluaW5nIHRoZSBuZXcgZmxhZ1xuICAgIGxldCBmbGFnc0Nhc2VGaWVsZFZhbHVlID0gc2VsZWN0ZWRGbGFnc0xvY2F0aW9uLmNhc2VGaWVsZD8udmFsdWU7XG4gICAgY29uc3QgcGF0aCA9IHNlbGVjdGVkRmxhZ3NMb2NhdGlvbi5wYXRoVG9GbGFnc0Zvcm1Hcm91cDtcbiAgICAvLyBSb290LWxldmVsIEZsYWdzIENhc2VGaWVsZHMgZG9uJ3QgaGF2ZSBhIGRvdC1kZWxpbWl0ZWQgcGF0aCAtIGp1c3QgdGhlIENhc2VGaWVsZCBJRCBpdHNlbGYgLSBzbyBkb24ndCBkcmlsbCBkb3duXG4gICAgaWYgKHBhdGguaW5kZXhPZignLicpID4gLTEpIHtcbiAgICAgIHBhdGguc2xpY2UocGF0aC5pbmRleE9mKCcuJykgKyAxKS5zcGxpdCgnLicpLmZvckVhY2gocGFydCA9PiBmbGFnc0Nhc2VGaWVsZFZhbHVlID0gZmxhZ3NDYXNlRmllbGRWYWx1ZVtwYXJ0XSk7XG4gICAgfVxuICAgIGlmIChmbGFnc0Nhc2VGaWVsZFZhbHVlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXJ0eU5hbWU6IGZsYWdzQ2FzZUZpZWxkVmFsdWUucGFydHlOYW1lLFxuICAgICAgICAvLyBMb29rIGluIHRoZSBkZXRhaWxzIGFycmF5IGZvciB0aGUgb2JqZWN0IHRoYXQgZG9lcyAqbm90KiBoYXZlIGFuIGlkIC0gdGhpcyBpbmRpY2F0ZXMgaXQgaXMgdGhlIG5ldyBmbGFnXG4gICAgICAgIGZsYWdEZXRhaWw6IGZsYWdzQ2FzZUZpZWxkVmFsdWUuZGV0YWlscz8uZmluZChlbGVtZW50ID0+ICFlbGVtZW50Lmhhc093blByb3BlcnR5KCdpZCcpKT8udmFsdWVcbiAgICAgIH0gYXMgRmxhZ0RldGFpbERpc3BsYXk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwdWJsaWMgbmF2aWdhdGVCYWNrVG9Gb3JtKGZpZWxkU3RhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuY2FzZUZsYWdTdGF0ZVNlcnZpY2UuZmllbGRTdGF0ZVRvTmF2aWdhdGUgPSBmaWVsZFN0YXRlO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgLi4vJHt0aGlzLmNhc2VGbGFnU3RhdGVTZXJ2aWNlLnBhZ2VMb2NhdGlvbn1gXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiY29udGV4dCA9PT0gcGFsZXR0ZUNvbnRleHQuQ0hFQ0tfWU9VUl9BTlNXRVJcIj5cbiAgPGNjZC1jYXNlLWZsYWctc3VtbWFyeS1saXN0XG4gICAgW2ZsYWdGb3JTdW1tYXJ5RGlzcGxheV09XCJmbGFnRm9yU3VtbWFyeURpc3BsYXlcIlxuICAgIFtkaXNwbGF5Q29udGV4dFBhcmFtZXRlcl09XCJkaXNwbGF5Q29udGV4dFBhcmFtZXRlclwiXG4gICAgKGNoYW5nZUJ1dHRvbkVtaXR0ZXIpPVwibmF2aWdhdGVCYWNrVG9Gb3JtKCRldmVudClcIj5cbiAgPC9jY2QtY2FzZS1mbGFnLXN1bW1hcnktbGlzdD5cbjwvbmctY29udGFpbmVyPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiY29udGV4dCAhPT0gcGFsZXR0ZUNvbnRleHQuQ0hFQ0tfWU9VUl9BTlNXRVJcIj5cbiAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZGlzcGxheUNvbnRleHRQYXJhbWV0ZXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLlJFQURfRVhURVJOQUxcIj5cbiAgICAgIDxoMiBpZD1cInJlYWQtY2FzZS1mbGFnLXRpdGxlXCIgY2xhc3M9XCJnb3Z1ay1oZWFkaW5nLWxcIj5cbiAgICAgICAge3sgJ1N1cHBvcnQgcmVxdWVzdGVkJyB8IHJweFRyYW5zbGF0ZSB9fVxuICAgICAgPC9oMj5cblxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZmxhZ0RhdGEgb2YgcGFydHlMZXZlbENhc2VGbGFnRGF0YVwiPlxuICAgICAgICA8Y2NkLWNhc2UtZmxhZy10YWJsZSAqbmdJZj1cImZsYWdEYXRhLmZsYWdzLnBhcnR5TmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFibGVDYXB0aW9uXT1cIicnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmbGFnRGF0YV09XCJmbGFnRGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlyc3RDb2x1bW5IZWFkZXJdPVwiZmxhZ0RhdGEuZmxhZ3MucGFydHlOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYXNlRmxhZ3NFeHRlcm5hbFVzZXJdPVwiY2FzZUZsYWdzRXh0ZXJuYWxVc2VyXCJcbiAgICAgICAgPjwvY2NkLWNhc2UtZmxhZy10YWJsZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgPGgyIGlkPVwicmVhZC1jYXNlLWZsYWctdGl0bGVcIiBjbGFzcz1cImdvdnVrLWhlYWRpbmctbFwiPlxuICAgICAgICB7eyAnQ2FzZSBmbGFncycgfCBycHhUcmFuc2xhdGUgfX1cbiAgICAgIDwvaDI+XG5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZsYWdEYXRhIG9mIHBhcnR5TGV2ZWxDYXNlRmxhZ0RhdGFcIj5cbiAgICAgICAgPGNjZC1jYXNlLWZsYWctdGFibGUgKm5nSWY9XCJmbGFnRGF0YS5mbGFncy5wYXJ0eU5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RhYmxlQ2FwdGlvbl09XCJmbGFnRGF0YS5mbGFncy5wYXJ0eU5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZsYWdEYXRhXT1cImZsYWdEYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaXJzdENvbHVtbkhlYWRlcl09XCInUGFydHkgbGV2ZWwgZmxhZ3MnIHwgcnB4VHJhbnNsYXRlXCJcbiAgICAgICAgPjwvY2NkLWNhc2UtZmxhZy10YWJsZT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cImNhc2VMZXZlbENhc2VGbGFnRGF0YVwiPlxuICAgICAgICA8Y2NkLWNhc2UtZmxhZy10YWJsZVxuICAgICAgICAgIFt0YWJsZUNhcHRpb25dPVwiJ0Nhc2UgbGV2ZWwgZmxhZ3MnIHwgcnB4VHJhbnNsYXRlXCJcbiAgICAgICAgICBbZmxhZ0RhdGFdPVwiY2FzZUxldmVsQ2FzZUZsYWdEYXRhXCJcbiAgICAgICAgICBbZmlyc3RDb2x1bW5IZWFkZXJdPVwiJ0Nhc2UgZmxhZ3MnIHwgcnB4VHJhbnNsYXRlXCJcbiAgICAgICAgPjwvY2NkLWNhc2UtZmxhZy10YWJsZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuIl19
280
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZC1jYXNlLWZsYWctZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvY2FzZS1mbGFnL3JlYWQtY2FzZS1mbGFnLWZpZWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9wYWxldHRlL2Nhc2UtZmxhZy9yZWFkLWNhc2UtZmxhZy1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUVwRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsY0FBYyxFQUFFLE1BQU0sU0FBUyxDQUFDOzs7Ozs7SUNSMUUsNkJBQW1FO0lBQ2pFLHFEQUdxRDtJQUFuRCxxUEFBdUIsaUNBQTBCLEtBQUM7SUFDcEQsaUJBQTZCOzs7O0lBSDNCLGNBQStDO0lBQy9DLEFBREEsb0VBQStDLDJEQUNJOzs7SUFhL0MseUNBS3VCOzs7O0lBREQsQUFEQSxBQURBLEFBREEsaUNBQW1CLHlCQUNFLGtEQUN5Qix1REFDQzs7O0lBTHZFLDJCQUFxRDtJQUNuRCwrSUFLQztJQUNI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QUFDLENBQUM7SUFDckcsQ0FBQztvRkF2S1UsMEJBQTBCOzZEQUExQiwwQkFBMEI7WUNQdkMsQUFSQSw2RkFBbUUsZ0ZBUUE7O1lBUnBELDJFQUFrRDtZQVFsRCxjQUFrRDtZQUFsRCwyRUFBa0Q7OztpRkRPcEQsMEJBQTBCO2NBTHRDLFNBQVM7MkJBQ0UsMEJBQTBCOztrRkFJekIsMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQ2FzZVRhYiB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbic7XG5pbXBvcnQgeyBGaWVsZHNVdGlscyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZpZWxkcyc7XG5pbXBvcnQgeyBDYXNlRmxhZ1N0YXRlU2VydmljZSB9IGZyb20gJy4uLy4uL2Nhc2UtZWRpdG9yL3NlcnZpY2VzL2Nhc2UtZmxhZy1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IEFic3RyYWN0RmllbGRSZWFkQ29tcG9uZW50IH0gZnJvbSAnLi4vYmFzZS1maWVsZC9hYnN0cmFjdC1maWVsZC1yZWFkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQYWxldHRlQ29udGV4dCB9IGZyb20gJy4uL2Jhc2UtZmllbGQvcGFsZXR0ZS1jb250ZXh0LmVudW0nO1xuaW1wb3J0IHsgRmxhZ0RldGFpbERpc3BsYXksIEZsYWdzV2l0aEZvcm1Hcm91cFBhdGggfSBmcm9tICcuL2RvbWFpbic7XG5pbXBvcnQgeyBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLCBDYXNlRmxhZ1N0YXR1cyB9IGZyb20gJy4vZW51bXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY2QtcmVhZC1jYXNlLWZsYWctZmllbGQnLFxuICB0ZW1wbGF0ZVVybDogJy4vcmVhZC1jYXNlLWZsYWctZmllbGQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yZWFkLWNhc2UtZmxhZy1maWVsZC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFJlYWRDYXNlRmxhZ0ZpZWxkQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RGaWVsZFJlYWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwdWJsaWMgZmxhZ3NEYXRhOiBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoW107XG4gIHB1YmxpYyBwYXJ0eUxldmVsQ2FzZUZsYWdEYXRhOiBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoW107XG4gIHB1YmxpYyBjYXNlTGV2ZWxDYXNlRmxhZ0RhdGE6IEZsYWdzV2l0aEZvcm1Hcm91cFBhdGg7XG4gIHB1YmxpYyBwYWxldHRlQ29udGV4dCA9IFBhbGV0dGVDb250ZXh0O1xuICBwdWJsaWMgZmxhZ0ZvclN1bW1hcnlEaXNwbGF5OiBGbGFnRGV0YWlsRGlzcGxheTtcbiAgcHVibGljIGRpc3BsYXlDb250ZXh0UGFyYW1ldGVyOiBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyO1xuICBwdWJsaWMgY2FzZUZsYWdzRXh0ZXJuYWxVc2VyID0gZmFsc2U7XG4gIHB1YmxpYyBwYXRoVG9GbGFnc0Zvcm1Hcm91cDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGNhc2VMZXZlbENhc2VGbGFnc0ZpZWxkSWQgPSAnY2FzZUZsYWdzJztcblxuICBwdWJsaWMgZ2V0IGNhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIoKTogdHlwZW9mIENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIge1xuICAgIHJldHVybiBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhc2VGbGFnU3RhdGVTZXJ2aWNlOiBDYXNlRmxhZ1N0YXRlU2VydmljZVxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IGZsYWdMYXVuY2hlckNvbnRyb2xOYW1lID0gT2JqZWN0LmtleXModGhpcy5mb3JtR3JvdXAuY29udHJvbHMpLmZpbmQoXG4gICAgICBjb250cm9sTmFtZSA9PiBGaWVsZHNVdGlscy5pc0Nhc2VGaWVsZE9mVHlwZSh0aGlzLmZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWUpWydjYXNlRmllbGQnXSwgWydGbGFnTGF1bmNoZXInXSkpO1xuICAgIGNvbnN0IGZsYWdMYXVuY2hlckNvbXBvbmVudCA9IHRoaXMuZm9ybUdyb3VwLmdldChmbGFnTGF1bmNoZXJDb250cm9sTmFtZSk/LlsnY29tcG9uZW50J107XG4gICAgdGhpcy5kaXNwbGF5Q29udGV4dFBhcmFtZXRlciA9IGZsYWdMYXVuY2hlckNvbXBvbmVudD8uY2FzZUZpZWxkPy5kaXNwbGF5X2NvbnRleHRfcGFyYW1ldGVyO1xuICAgIHRoaXMuY2FzZUZsYWdzRXh0ZXJuYWxVc2VyID0gdGhpcy5kaXNwbGF5Q29udGV4dFBhcmFtZXRlciA9PT0gQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlci5SRUFEX0VYVEVSTkFMO1xuXG4gICAgLy8gSWYgdGhlIGNvbnRleHQgaXMgUGFsZXR0ZUNvbnRleHQuREVGQVVMVCwgdGhlIEZsYWdzIGZpZWxkcyBuZWVkIHRvIGJlIGxvY2F0ZWQgYnkgQ2FzZVRhYiAodGhleSB3b24ndCBiZSBwcmVzZW50XG4gICAgLy8gaW4gdGhlIEZvcm1Hcm91cCAtIG9ubHkgdGhlIEZsYWdMYXVuY2hlciBmaWVsZCBpcyBwcmVzZW50KVxuICAgIGlmICh0aGlzLmNvbnRleHQgPT09IFBhbGV0dGVDb250ZXh0LkRFRkFVTFQpIHtcbiAgICAgIC8vIERldGVybWluZSB0aGUgdGFiIHRoaXMgQ2FzZUZpZWxkIGJlbG9uZ3MgdG8gKHNob3VsZCBiZSBvbmx5IG9uZSksIGZyb20gdGhlIENhc2VWaWV3IG9iamVjdCBpbiB0aGUgc25hcHNob3RcbiAgICAgIC8vIGRhdGEsIGFuZCBleHRyYWN0IGFsbCBmbGFncy1yZWxhdGVkIGRhdGEgZnJvbSBpdHMgRmxhZ3MgZmllbGRzXG4gICAgICBpZiAodGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmNhc2U/LnRhYnMpIHtcbiAgICAgICAgdGhpcy5mbGFnc0RhdGEgPSAodGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmNhc2UudGFicyBhcyBDYXNlVGFiW10pXG4gICAgICAgICAgLmZpbHRlcigodGFiKSA9PiB0YWIuZmllbGRzPy5zb21lKFxuICAgICAgICAgICAgLy8gVGhlcmUgY291bGQgYmUgbW9yZSB0aGFuIG9uZSBGbGFnTGF1bmNoZXIgZmllbGQgaW5zdGFuY2Ugc28gYW4gYWRkaXRpb25hbCBjaGVjayBvZiBjYXNlRmllbGQgSUQgaXNcbiAgICAgICAgICAgIC8vIHJlcXVpcmVkIHRvIGVuc3VyZSB0aGUgY29ycmVjdCBpbnN0YW5jZSBpcyBvYnRhaW5lZFxuICAgICAgICAgICAgKGNhc2VGaWVsZCkgPT4gY2FzZUZpZWxkLmZpZWxkX3R5cGUudHlwZSA9PT0gJ0ZsYWdMYXVuY2hlcicgJiYgY2FzZUZpZWxkLmlkID09PSB0aGlzLmNhc2VGaWVsZC5pZCkpXG4gICAgICAgICAgWzBdLmZpZWxkcz8ucmVkdWNlKChmbGFncywgY2FzZUZpZWxkKSA9PiBGaWVsZHNVdGlscy5leHRyYWN0RmxhZ3NEYXRhRnJvbUNhc2VGaWVsZChcbiAgICAgICAgICAgIGZsYWdzLCBjYXNlRmllbGQsIGNhc2VGaWVsZC5pZCwgY2FzZUZpZWxkKSwgW10pO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXBhcmF0ZSB0aGUgcGFydHktbGV2ZWwgYW5kIGNhc2UtbGV2ZWwgZmxhZ3NcbiAgICAgIHRoaXMucGFydHlMZXZlbENhc2VGbGFnRGF0YSA9IHRoaXMuZmxhZ3NEYXRhLmZpbHRlcihcbiAgICAgICAgKGluc3RhbmNlKSA9PiBpbnN0YW5jZS5wYXRoVG9GbGFnc0Zvcm1Hcm91cCAhPT0gdGhpcy5jYXNlTGV2ZWxDYXNlRmxhZ3NGaWVsZElkKTtcbiAgICAgIC8vIElmIHRoZSB1c2VyIGlzIGludGVybmFsLCBncm91cCBhbGwgZmxhZ3MgZGF0YSBieSBncm91cElkIHdoZXJlIHByZXNlbnQgc28gdGhleSBzZWUgYSBjb21iaW5lZCBjb2xsZWN0aW9uIG9mXG4gICAgICAvLyBpbnRlcm5hbCBhbmQgZXh0ZXJuYWwgZmxhZ3MgZGF0YSBmb3IgZWFjaCBwYXJ0eVxuICAgICAgaWYgKCF0aGlzLmNhc2VGbGFnc0V4dGVybmFsVXNlcikge1xuICAgICAgICBjb25zdCBncm91cGVkRmxhZ3NEYXRhID0gdGhpcy5wYXJ0eUxldmVsQ2FzZUZsYWdEYXRhXG4gICAgICAgICAgLmZpbHRlcigoZikgPT4gZi5mbGFncy5ncm91cElkKVxuICAgICAgICAgIC5yZWR1Y2UoKG1lcmdlZEZsYWdEZXRhaWxzLCBmKSA9PiB7XG4gICAgICAgICAgICBtZXJnZWRGbGFnRGV0YWlsc1tmLmZsYWdzLmdyb3VwSWRdID0gbWVyZ2VkRmxhZ0RldGFpbHNbZi5mbGFncy5ncm91cElkXSB8fCBbXTtcbiAgICAgICAgICAgIC8vIFRoZSBmbGFncy5kZXRhaWxzIHByb3BlcnR5ICh3aGljaCBzaG91bGQgYmUgYW4gYXJyYXkpIGNvdWxkIGJlIGZhbHN5OyBzcHJlYWQgYW4gZW1wdHkgYXJyYXkgaWYgc29cbiAgICAgICAgICAgIG1lcmdlZEZsYWdEZXRhaWxzW2YuZmxhZ3MuZ3JvdXBJZF0ucHVzaCguLi4oZi5mbGFncy5kZXRhaWxzIHx8IFtdKSk7XG4gICAgICAgICAgICByZXR1cm4gbWVyZ2VkRmxhZ0RldGFpbHM7XG4gICAgICAgICAgfSwgT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gICAgICAgIC8vIFJlbW92ZSBkdXBsaWNhdGUgZmxhZ3Mgb2JqZWN0cyB3aXRoIHRoZSBzYW1lIGdyb3VwSWQgKHdoaWNoIGFyZSBnb2luZyB0byBiZSB0cmVhdGVkIGFzIG9uZSBmb3IgZGlzcGxheVxuICAgICAgICAvLyBwdXJwb3NlcylcbiAgICAgICAgY29uc3QgdW5pcXVlUGFydHlEYXRhID0gdGhpcy5wYXJ0eUxldmVsQ2FzZUZsYWdEYXRhXG4gICAgICAgICAgLmZpbHRlcigoZikgPT4gZi5mbGFncy5ncm91cElkKVxuICAgICAgICAgIC5yZWR1Y2UoKGZsYWdzVW5pcXVlQnlHcm91cElkLCBmKSA9PiB7XG4gICAgICAgICAgICBpZiAoZmxhZ3NVbmlxdWVCeUdyb3VwSWQuZmluZEluZGV4KGZsYWcgPT4gZmxhZy5mbGFncy5ncm91cElkID09PSBmLmZsYWdzLmdyb3VwSWQpID09PSAtMSkge1xuICAgICAgICAgICAgLy8gU2V0IHRoZSBjb3JyZXNwb25kaW5nIGdyb3VwZWQgZmxhZ3MgZGF0YVxuICAgICAgICAgICAgICBmLmZsYWdzLmRldGFpbHMgPSBncm91cGVkRmxhZ3NEYXRhW2YuZmxhZ3MuZ3JvdXBJZF07XG4gICAgICAgICAgICAgIGZsYWdzVW5pcXVlQnlHcm91cElkLnB1c2goZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmxhZ3NVbmlxdWVCeUdyb3VwSWQ7XG4gICAgICAgICAgfSwgW10pO1xuICAgICAgICAvLyBBcHBlbmQgZmxhZ3Mgb2JqZWN0cyB3aXRoIG5vIGdyb3VwSWRcbiAgICAgICAgdGhpcy5wYXJ0eUxldmVsQ2FzZUZsYWdEYXRhLmZpbHRlcigoZikgPT4gIWYuZmxhZ3MuZ3JvdXBJZCkuZm9yRWFjaCgoZikgPT4gdW5pcXVlUGFydHlEYXRhLnB1c2goZikpO1xuICAgICAgICB0aGlzLnBhcnR5TGV2ZWxDYXNlRmxhZ0RhdGEgPSB1bmlxdWVQYXJ0eURhdGE7XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZXJlIHdpbGwgYmUgb25seSBvbmUgY2FzZS1sZXZlbCBmbGFncyBpbnN0YW5jZSBjb250YWluaW5nIGFsbCBjYXNlLWxldmVsIGZsYWcgZGV0YWlsc1xuICAgICAgdGhpcy5jYXNlTGV2ZWxDYXNlRmxhZ0RhdGEgPSB0aGlzLmZsYWdzRGF0YS5maW5kKFxuICAgICAgICAoaW5zdGFuY2UpID0+IGluc3RhbmNlLnBhdGhUb0ZsYWdzRm9ybUdyb3VwID09PSB0aGlzLmNhc2VMZXZlbENhc2VGbGFnc0ZpZWxkSWQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jb250ZXh0ID09PSBQYWxldHRlQ29udGV4dC5DSEVDS19ZT1VSX0FOU1dFUikge1xuICAgICAgLy8gSWYgdGhlIGNvbnRleHQgaXMgUGFsZXR0ZUNvbnRleHQuQ0hFQ0tfWU9VUl9BTlNXRVIsIHRoZSBGbGFncyBkYXRhIGlzIGFscmVhZHkgcHJlc2VudCB3aXRoaW4gdGhlIEZvcm1Hcm91cC5cbiAgICAgIC8vIFRoZSBGbGFnTGF1bmNoZXIgY29tcG9uZW50LCBXcml0ZUNhc2VGbGFnRmllbGRDb21wb25lbnQsIGhvbGRzIGEgcmVmZXJlbmNlIHRvOlxuICAgICAgLy8gaSkgdGhlIHBhcmVudCBGb3JtR3JvdXAgZm9yIHRoZSBGbGFncyBpbnN0YW5jZSB3aGVyZSBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlO1xuICAgICAgLy8gaWkpIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZmxhZyAoc2VsZWN0ZWRGbGFnKSBpZiBvbmUgZXhpc3RzXG4gICAgICBjb25zdCBjYXNlRmxhZ0xvY2F0aW9uQ29udHJvbCA9ICdzZWxlY3RlZE1hbmFnZUNhc2VMb2NhdGlvbic7XG4gICAgICBpZiAoZmxhZ0xhdW5jaGVyQ29tcG9uZW50KSB7XG4gICAgICAgIC8vIFRoZSBGbGFnTGF1bmNoZXIgY29tcG9uZW50IGhvbGRzIGEgcmVmZXJlbmNlIChzZWxlY3RlZEZsYWdzTG9jYXRpb24pIGNvbnRhaW5pbmcgdGhlIENhc2VGaWVsZCBpbnN0YW5jZSB0b1xuICAgICAgICAvLyB3aGljaCB0aGUgbmV3IGZsYWcgaGFzIGJlZW4gYWRkZWRcbiAgICAgICAgaWYgKChmbGFnTGF1bmNoZXJDb21wb25lbnQuY2FzZUZpZWxkLmRpc3BsYXlfY29udGV4dF9wYXJhbWV0ZXIgPT09IENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIuQ1JFQVRFIHx8XG4gICAgICAgICAgZmxhZ0xhdW5jaGVyQ29tcG9uZW50LmNhc2VGaWVsZC5kaXNwbGF5X2NvbnRleHRfcGFyYW1ldGVyID09PSBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLkNSRUFURV8yX1BPSU5UXzEgfHxcbiAgICAgICAgICBmbGFnTGF1bmNoZXJDb21wb25lbnQuY2FzZUZpZWxkLmRpc3BsYXlfY29udGV4dF9wYXJhbWV0ZXIgPT09IENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIuQ1JFQVRFX0VYVEVSTkFMKSAmJlxuICAgICAgICAgIGZsYWdMYXVuY2hlckNvbXBvbmVudC5zZWxlY3RlZEZsYWdzTG9jYXRpb24pIHtcbiAgICAgICAgICB0aGlzLmNsZWFudXBOYXZpZ2F0aW9uRm9ybUFkZGl0aW9ucyhmbGFnTGF1bmNoZXJDb21wb25lbnQuc2VsZWN0ZWRGbGFnc0xvY2F0aW9uKTtcbiAgICAgICAgICB0aGlzLnBhdGhUb0ZsYWdzRm9ybUdyb3VwID0gZmxhZ0xhdW5jaGVyQ29tcG9uZW50LnNlbGVjdGVkRmxhZ3NMb2NhdGlvbi5wYXRoVG9GbGFnc0Zvcm1Hcm91cDtcbiAgICAgICAgICB0aGlzLmZsYWdGb3JTdW1tYXJ5RGlzcGxheSA9IHRoaXMuZXh0cmFjdE5ld0ZsYWdUb0ZsYWdEZXRhaWxEaXNwbGF5T2JqZWN0KFxuICAgICAgICAgICAgZmxhZ0xhdW5jaGVyQ29tcG9uZW50LnNlbGVjdGVkRmxhZ3NMb2NhdGlvbik7XG4gICAgICAgIC8vIFRoZSBGbGFnTGF1bmNoZXIgY29tcG9uZW50IGhvbGRzIGEgcmVmZXJlbmNlIChzZWxlY3RlZEZsYWcpLCB3aGljaCBnZXRzIHNldCBhZnRlciB0aGUgc2VsZWN0aW9uIHN0ZXAgb2YgdGhlXG4gICAgICAgIC8vIE1hbmFnZSBDYXNlIEZsYWdzIGpvdXJuZXlcbiAgICAgICAgfSBlbHNlIGlmICgoZmxhZ0xhdW5jaGVyQ29tcG9uZW50LmNhc2VGaWVsZC5kaXNwbGF5X2NvbnRleHRfcGFyYW1ldGVyID09PSBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLlVQREFURSB8fFxuICAgICAgICAgIGZsYWdMYXVuY2hlckNvbXBvbmVudC5jYXNlRmllbGQuZGlzcGxheV9jb250ZXh0X3BhcmFtZXRlciA9PT0gQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlci5VUERBVEVfMl9QT0lOVF8xIHx8XG4gICAgICAgICAgZmxhZ0xhdW5jaGVyQ29tcG9uZW50LmNhc2VGaWVsZC5kaXNwbGF5X2NvbnRleHRfcGFyYW1ldGVyID09PSBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLlVQREFURV9FWFRFUk5BTCkgJiZcbiAgICAgICAgICAoZmxhZ0xhdW5jaGVyQ29tcG9uZW50LnNlbGVjdGVkRmxhZyB8fFxuICAgICAgICAgICAgKHRoaXMuY2FzZUZsYWdTdGF0ZVNlcnZpY2UuZm9ybUdyb3VwLmdldChjYXNlRmxhZ0xvY2F0aW9uQ29udHJvbCkudmFsdWUuZmxhZ0RldGFpbERpc3BsYXkgJiYgdGhpcy5kaXNwbGF5Q29udGV4dFBhcmFtZXRlciA9PT0gQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlci5VUERBVEVfMl9QT0lOVF8xKSkpIHtcbiAgICAgICAgICBpZiAodGhpcy5mb3JtR3JvdXAuZ2V0KGZsYWdMYXVuY2hlckNvbnRyb2xOYW1lKVsnY29tcG9uZW50J10/LnNlbGVjdGVkRmxhZz8uZmxhZ0RldGFpbERpc3BsYXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5mbGFnRm9yU3VtbWFyeURpc3BsYXkgPVxuICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoZmxhZ0xhdW5jaGVyQ29udHJvbE5hbWUpWydjb21wb25lbnQnXS5zZWxlY3RlZEZsYWcuZmxhZ0RldGFpbERpc3BsYXk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZmxhZ0ZvclN1bW1hcnlEaXNwbGF5ID1cbiAgICAgICAgICAgICAgdGhpcy5jYXNlRmxhZ1N0YXRlU2VydmljZS5mb3JtR3JvdXAuZ2V0KGNhc2VGbGFnTG9jYXRpb25Db250cm9sKS52YWx1ZS5mbGFnRGV0YWlsRGlzcGxheTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gVE9ETzogbm90IHRoZSBiZXN0IHNvbHV0aW9uLCB0aGUgY2FzZUZsYWdTdGF0ZVNlcnZpY2Ugc2hvdWxkIGhhdmUgYWxsIHRoZSBmaWVsZHMsIHRoZW4gd2UgY2FuIGRlbGV0ZSBhIGxvdCBvZiB0aGUgdHJhbnNmb3JtYXRpb25zIGhlcmVcbiAgICAgICAgICAvLyBpbiBDcmVhdGUgQ2FzZSBGbGFnIGl0IGFscmVhZHkgaGFzIGFsbCBmaWVsZHNcbiAgICAgICAgICBjb25zdCBjYXNlRmxhZ0Zvcm1Hcm91cFZhbHVlID0gdGhpcy5jYXNlRmxhZ1N0YXRlU2VydmljZS5mb3JtR3JvdXA/LnZhbHVlO1xuICAgICAgICAgIGlmIChjYXNlRmxhZ0Zvcm1Hcm91cFZhbHVlKSB7XG4gICAgICAgICAgICBjYXNlRmxhZ0Zvcm1Hcm91cFZhbHVlLnN0YXR1cyA9IENhc2VGbGFnU3RhdHVzW2Nhc2VGbGFnRm9ybUdyb3VwVmFsdWUuc3RhdHVzXTtcbiAgICAgICAgICAgIHRoaXMuZmxhZ0ZvclN1bW1hcnlEaXNwbGF5LmZsYWdEZXRhaWwgPSB7XG4gICAgICAgICAgICAgIC4uLnRoaXMuZmxhZ0ZvclN1bW1hcnlEaXNwbGF5LmZsYWdEZXRhaWwsXG4gICAgICAgICAgICAgIC4uLmNhc2VGbGFnRm9ybUdyb3VwVmFsdWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhbnVwTmF2aWdhdGlvbkZvcm1BZGRpdGlvbnMoc2VsZWN0ZWRGbGFnc0xvY2F0aW9uOiBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoKTogdm9pZHtcbiAgICBjb25zdCBwYXRoID0gc2VsZWN0ZWRGbGFnc0xvY2F0aW9uLnBhdGhUb0ZsYWdzRm9ybUdyb3VwO1xuICAgIE9iamVjdC5rZXlzKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKChjb250cm9sTmFtZSkgPT4ge1xuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybUdyb3VwLmdldChjb250cm9sTmFtZSk7XG4gICAgICBpZiAoKGNvbnRyb2xOYW1lICE9PSBwYXRoKSkge1xuICAgICAgICBpZiAoY29udHJvbFsnY2FzZUZpZWxkJ10uZm9ybWF0dGVkX3ZhbHVlPy5kZXRhaWxzKSB7XG4gICAgICAgICAgLy8gd2Ugd2FudCB0byBsb29wIHRocm91Z2ggdGhlIGN1cnJlbnQgZmxhZyBkZXRhaWxzIHRvIGVuc3VyZSB0aGF0IHRoZXJlIGFyZSBubyBhZGRpdGlvbmFsIGRhdGEgZnJvbSB0aGUgdXNyZSByZXN0YXJ0aW5nIHRoZSBmbG93IHRoYXQgaGF2ZSBiZWVuIGFkZGVkLlxuICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgaW4gY29udHJvbFsnY2FzZUZpZWxkJ10uZm9ybWF0dGVkX3ZhbHVlPy5kZXRhaWxzKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgaWQgaXMgdW5kZWZpbmVkIHRoZW4gdGhlIHVzZXIgaGFzIGFkZGVkIHRoaXMgYXMgcGFydCBvZiB0aGVpciBjdXJyZW50IGZsb3cgYW5kIHdlIHNob3VsZCByZW1vdmUgaXQgc28gaXQgZG9lc250IGdldCBhZGRlZCB0byB0aGUgY2FzZVxuICAgICAgICAgICAgaWYgKCFjb250cm9sWydjYXNlRmllbGQnXS5mb3JtYXR0ZWRfdmFsdWU/LmRldGFpbHNbdmFsdWVdLmlkKSB7XG4gICAgICAgICAgICAgIGNvbnRyb2xbJ2Nhc2VGaWVsZCddLnZhbHVlLmRldGFpbHMucG9wKCk7XG4gICAgICAgICAgICAgIGNvbnRyb2xbJ2Nhc2VGaWVsZCddLmZvcm1hdHRlZF92YWx1ZS5kZXRhaWxzLnBvcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0TmV3RmxhZ1RvRmxhZ0RldGFpbERpc3BsYXlPYmplY3Qoc2VsZWN0ZWRGbGFnc0xvY2F0aW9uOiBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoKTogRmxhZ0RldGFpbERpc3BsYXkge1xuICAgIC8vIFVzZSB0aGUgcGF0aFRvRmxhZ3NGb3JtR3JvdXAgcHJvcGVydHkgZnJvbSB0aGUgc2VsZWN0ZWQgZmxhZyBsb2NhdGlvbiB0byBkcmlsbCBkb3duIHRvIHRoZSBjb3JyZWN0IHBhcnQgb2YgdGhlXG4gICAgLy8gQ2FzZUZpZWxkIHZhbHVlIGNvbnRhaW5pbmcgdGhlIG5ldyBmbGFnXG4gICAgbGV0IGZsYWdzQ2FzZUZpZWxkVmFsdWUgPSBzZWxlY3RlZEZsYWdzTG9jYXRpb24uY2FzZUZpZWxkPy52YWx1ZTtcbiAgICBjb25zdCBwYXRoID0gc2VsZWN0ZWRGbGFnc0xvY2F0aW9uLnBhdGhUb0ZsYWdzRm9ybUdyb3VwO1xuICAgIC8vIFJvb3QtbGV2ZWwgRmxhZ3MgQ2FzZUZpZWxkcyBkb24ndCBoYXZlIGEgZG90LWRlbGltaXRlZCBwYXRoIC0ganVzdCB0aGUgQ2FzZUZpZWxkIElEIGl0c2VsZiAtIHNvIGRvbid0IGRyaWxsIGRvd25cbiAgICBpZiAocGF0aC5pbmRleE9mKCcuJykgPiAtMSkge1xuICAgICAgcGF0aC5zbGljZShwYXRoLmluZGV4T2YoJy4nKSArIDEpLnNwbGl0KCcuJykuZm9yRWFjaChwYXJ0ID0+IGZsYWdzQ2FzZUZpZWxkVmFsdWUgPSBmbGFnc0Nhc2VGaWVsZFZhbHVlW3BhcnRdKTtcbiAgICB9XG4gICAgaWYgKGZsYWdzQ2FzZUZpZWxkVmFsdWUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhcnR5TmFtZTogZmxhZ3NDYXNlRmllbGRWYWx1ZS5wYXJ0eU5hbWUsXG4gICAgICAgIC8vIExvb2sgaW4gdGhlIGRldGFpbHMgYXJyYXkgZm9yIHRoZSBvYmplY3QgdGhhdCBkb2VzICpub3QqIGhhdmUgYW4gaWQgLSB0aGlzIGluZGljYXRlcyBpdCBpcyB0aGUgbmV3IGZsYWdcbiAgICAgICAgZmxhZ0RldGFpbDogZmxhZ3NDYXNlRmllbGRWYWx1ZS5kZXRhaWxzPy5maW5kKGVsZW1lbnQgPT4gIWVsZW1lbnQuaGFzT3duUHJvcGVydHkoJ2lkJykpPy52YWx1ZVxuICAgICAgfSBhcyBGbGFnRGV0YWlsRGlzcGxheTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBuYXZpZ2F0ZUJhY2tUb0Zvcm0oZmllbGRTdGF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5jYXNlRmxhZ1N0YXRlU2VydmljZS5maWVsZFN0YXRlVG9OYXZpZ2F0ZSA9IGZpZWxkU3RhdGU7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2AuLi8ke3RoaXMuY2FzZUZsYWdTdGF0ZVNlcnZpY2UucGFnZUxvY2F0aW9ufWBdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJjb250ZXh0ID09PSBwYWxldHRlQ29udGV4dC5DSEVDS19ZT1VSX0FOU1dFUlwiPlxuICA8Y2NkLWNhc2UtZmxhZy1zdW1tYXJ5LWxpc3RcbiAgICBbZmxhZ0ZvclN1bW1hcnlEaXNwbGF5XT1cImZsYWdGb3JTdW1tYXJ5RGlzcGxheVwiXG4gICAgW2Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyXT1cImRpc3BsYXlDb250ZXh0UGFyYW1ldGVyXCJcbiAgICAoY2hhbmdlQnV0dG9uRW1pdHRlcik9XCJuYXZpZ2F0ZUJhY2tUb0Zvcm0oJGV2ZW50KVwiPlxuICA8L2NjZC1jYXNlLWZsYWctc3VtbWFyeS1saXN0PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJjb250ZXh0ICE9PSBwYWxldHRlQ29udGV4dC5DSEVDS19ZT1VSX0FOU1dFUlwiPlxuICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJkaXNwbGF5Q29udGV4dFBhcmFtZXRlclwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImNhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIuUkVBRF9FWFRFUk5BTFwiPlxuICAgICAgPGgyIGlkPVwicmVhZC1jYXNlLWZsYWctdGl0bGVcIiBjbGFzcz1cImdvdnVrLWhlYWRpbmctbFwiPlxuICAgICAgICB7eyAnU3VwcG9ydCByZXF1ZXN0ZWQnIHwgcnB4VHJhbnNsYXRlIH19XG4gICAgICA8L2gyPlxuXG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmbGFnRGF0YSBvZiBwYXJ0eUxldmVsQ2FzZUZsYWdEYXRhXCI+XG4gICAgICAgIDxjY2QtY2FzZS1mbGFnLXRhYmxlICpuZ0lmPVwiZmxhZ0RhdGEuZmxhZ3MucGFydHlOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0YWJsZUNhcHRpb25dPVwiJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZsYWdEYXRhXT1cImZsYWdEYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaXJzdENvbHVtbkhlYWRlcl09XCJmbGFnRGF0YS5mbGFncy5wYXJ0eU5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Nhc2VGbGFnc0V4dGVybmFsVXNlcl09XCJjYXNlRmxhZ3NFeHRlcm5hbFVzZXJcIlxuICAgICAgICA+PC9jY2QtY2FzZS1mbGFnLXRhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XG4gICAgICA8aDIgaWQ9XCJyZWFkLWNhc2UtZmxhZy10aXRsZVwiIGNsYXNzPVwiZ292dWstaGVhZGluZy1sXCI+XG4gICAgICAgIHt7ICdDYXNlIGZsYWdzJyB8IHJweFRyYW5zbGF0ZSB9fVxuICAgICAgPC9oMj5cblxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZmxhZ0RhdGEgb2YgcGFydHlMZXZlbENhc2VGbGFnRGF0YVwiPlxuICAgICAgICA8Y2NkLWNhc2UtZmxhZy10YWJsZSAqbmdJZj1cImZsYWdEYXRhLmZsYWdzLnBhcnR5TmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFibGVDYXB0aW9uXT1cImZsYWdEYXRhLmZsYWdzLnBhcnR5TmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmxhZ0RhdGFdPVwiZmxhZ0RhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpcnN0Q29sdW1uSGVhZGVyXT1cIidQYXJ0eSBsZXZlbCBmbGFncycgfCBycHhUcmFuc2xhdGVcIlxuICAgICAgICA+PC9jY2QtY2FzZS1mbGFnLXRhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwiY2FzZUxldmVsQ2FzZUZsYWdEYXRhXCI+XG4gICAgICAgIDxjY2QtY2FzZS1mbGFnLXRhYmxlXG4gICAgICAgICAgW3RhYmxlQ2FwdGlvbl09XCInQ2FzZSBsZXZlbCBmbGFncycgfCBycHhUcmFuc2xhdGVcIlxuICAgICAgICAgIFtmbGFnRGF0YV09XCJjYXNlTGV2ZWxDYXNlRmxhZ0RhdGFcIlxuICAgICAgICAgIFtmaXJzdENvbHVtbkhlYWRlcl09XCInQ2FzZSBmbGFncycgfCBycHhUcmFuc2xhdGVcIlxuICAgICAgICA+PC9jY2QtY2FzZS1mbGFnLXRhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
@@ -802,4 +802,4 @@ export class WriteCaseFlagFieldComponent extends AbstractFieldWriteJourneyCompon
802
802
  args: [{ selector: 'ccd-write-case-flag-field', template: "<!-- Error message summary -->\n<div *ngIf=\"errorMessages.length > 0\" class=\"govuk-error-summary\" aria-labelledby=\"error-summary-title\" role=\"alert\"\n tabindex=\"-1\" data-module=\"govuk-error-summary\">\n <h2 class=\"govuk-error-summary__title\" id=\"error-summary-title\">\n {{'There is a problem' | rpxTranslate}}\n </h2>\n <div *ngFor=\"let errorMessage of errorMessages\" class=\"govuk-error-summary__body\">\n <ul class=\"govuk-list govuk-error-summary__list\">\n <li>\n <a (click)=\"navigateToErrorElement(errorMessage.fieldId)\" class=\"validation-error\">{{errorMessage.description |\n rpxTranslate}}</a>\n </li>\n </ul>\n </div>\n</div>\n<div *ngIf=\"!isDisplayContextParameterUpdate\" class=\"form-group\" [formGroup]=\"formGroup\">\n <div class=\"govuk-form-group\" [ngSwitch]=\"fieldState\">\n <ng-container *ngSwitchCase=\"caseFlagFieldState.FLAG_LOCATION\">\n <ccd-select-flag-location \n #journeyChild \n [formGroup]=\"caseFlagParentFormGroup\" \n [flagsData]=\"flagsData\"\n [isDisplayContextParameterExternal]=\"isDisplayContextParameterExternal\"\n (caseFlagStateEmitter)=\"onCaseFlagStateEmitted($event)\">\n </ccd-select-flag-location>\n </ng-container>\n <ng-container *ngSwitchCase=\"caseFlagFieldState.FLAG_TYPE\">\n <ccd-select-flag-type \n #journeyChild \n [formGroup]=\"caseFlagParentFormGroup\" \n [jurisdiction]=\"jurisdiction\"\n [caseTypeId]=\"caseTypeId\" \n [hmctsServiceId]=\"hmctsServiceId\"\n [isDisplayContextParameterExternal]=\"isDisplayContextParameterExternal\"\n [isDisplayContextParameter2Point1Enabled]=\"isDisplayContextParameter2Point1Enabled\"\n [selectedFlagsLocation]=\"selectedFlagsLocation\" \n (caseFlagStateEmitter)=\"onCaseFlagStateEmitted($event)\"\n (flagCommentsOptionalEmitter)=\"onFlagCommentsOptionalEmitted($event)\"\n (flagTypeSubJourneyEmitter)=\"updateFlagTypeSubJourney($event)\">\n </ccd-select-flag-type>\n </ng-container>\n <ng-container *ngSwitchCase=\"caseFlagFieldState.FLAG_LANGUAGE_INTERPRETER\">\n <ccd-search-language-interpreter \n #journeyChild \n [formGroup]=\"caseFlagParentFormGroup\" \n [flagType]=\"flagType\" \n (caseFlagStateEmitter)=\"onCaseFlagStateEmitted($event)\">\n </ccd-search-language-interpreter>\n </ng-container>\n <ng-container *ngSwitchCase=\"caseFlagFieldState.FLAG_COMMENTS\">\n <ccd-add-comments \n #journeyChild \n [formGroup]=\"caseFlagParentFormGroup\" \n [optional]=\"flagCommentsOptional\"\n [isDisplayContextParameterExternal]=\"isDisplayContextParameterExternal\"\n [isDisplayContextParameter2Point1Enabled]=\"isDisplayContextParameter2Point1Enabled\"\n (caseFlagStateEmitter)=\"onCaseFlagStateEmitted($event)\">\n </ccd-add-comments>\n </ng-container>\n <ng-container *ngSwitchCase=\"caseFlagFieldState.FLAG_STATUS\">\n <ccd-confirm-flag-status \n #journeyChild \n [formGroup]=\"caseFlagParentFormGroup\"\n [defaultStatus]=\"flagType.defaultStatus\" \n (caseFlagStateEmitter)=\"onCaseFlagStateEmitted($event)\">\n </ccd-confirm-flag-status>\n </ng-container>\n </div>\n</div>\n<div *ngIf=\"isDisplayContextParameterUpdate\" class=\"form-group\" [formGroup]=\"formGroup\">\n <div class=\"govuk-form-group\" [ngSwitch]=\"fieldState\">\n <ng-container *ngSwitchCase=\"caseFlagFieldState.FLAG_MANAGE_CASE_FLAGS\">\n <ccd-manage-case-flags \n #journeyChild \n [formGroup]=\"caseFlagParentFormGroup\" \n [flagsData]=\"flagsData\"\n [caseTitle]=\"caseTitle\" \n [displayContextParameter]=\"displayContextParameter\"\n (caseFlagStateEmitter)=\"onCaseFlagStateEmitted($event)\">\n </ccd-manage-case-flags>\n </ng-container>\n <ng-container *ngSwitchCase=\"caseFlagFieldState.FLAG_UPDATE\">\n <ccd-update-flag \n #journeyChild \n [formGroup]=\"caseFlagParentFormGroup\"\n [displayContextParameter]=\"displayContextParameter\" \n (caseFlagStateEmitter)=\"onCaseFlagStateEmitted($event)\">\n </ccd-update-flag>\n </ng-container>\n <ng-container *ngSwitchCase=\"caseFlagFieldState.FLAG_UPDATE_WELSH_TRANSLATION\">\n <ccd-update-flag-add-translation-form \n #journeyChild \n [formGroup]=\"caseFlagParentFormGroup\"\n (caseFlagStateEmitter)=\"onCaseFlagStateEmitted($event)\">\n </ccd-update-flag-add-translation-form>\n </ng-container>\n </div>\n</div>", styles: [".validation-error{cursor:pointer;text-decoration:underline;color:#d4351c}\n"] }]
803
803
  }], () => [{ type: i1.ActivatedRoute }, { type: i2.CaseEditDataService }, { type: i3.CaseFlagStateService }, { type: i4.RpxTranslationService }, { type: i1.Router }, { type: i5.MultipageComponentStateService }], null); })();
804
804
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(WriteCaseFlagFieldComponent, { className: "WriteCaseFlagFieldComponent", filePath: "lib/shared/components/palette/case-flag/write-case-flag-field.component.ts", lineNumber: 21 }); })();
805
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGUtY2FzZS1mbGFnLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9wYWxldHRlL2Nhc2UtZmxhZy93cml0ZS1jYXNlLWZsYWctZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvY2FzZS1mbGFnL3dyaXRlLWNhc2UtZmxhZy1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQW1CLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFHN0YsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXZELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQzFHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxTQUFTLENBQUM7Ozs7Ozs7OztJQ0poSSxBQURGLEFBREYsQUFE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MkJBQ0UsMkJBQTJCOztrRkFJMUIsMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFJweFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJ3JweC14dWktdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDYXNlRWRpdERhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9ucy9jYXNlLWVkaXQtZGF0YS9jYXNlLWVkaXQtZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IENhc2VGaWVsZCwgRXJyb3JNZXNzYWdlLCBKb3VybmV5IH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluJztcbmltcG9ydCB7IEZsYWdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluL2Nhc2UtZmxhZyc7XG5pbXBvcnQgeyBGaWVsZHNVdGlscyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZpZWxkcyc7XG5pbXBvcnQgeyBDYXNlRmxhZ1N0YXRlLCBGbGFnRGV0YWlsLCBGbGFnRGV0YWlsRGlzcGxheVdpdGhGb3JtR3JvdXBQYXRoLCBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoIH0gZnJvbSAnLi9kb21haW4nO1xuaW1wb3J0IHsgTXVsdGlwYWdlQ29tcG9uZW50U3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgQWJzdHJhY3RGaWVsZFdyaXRlSm91cm5leUNvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2UtZmllbGQvYWJzdHJhY3QtZmllbGQtd3JpdGUtam91cm5leS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FzZUZsYWdTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jYXNlLWVkaXRvci9zZXJ2aWNlcy9jYXNlLWZsYWctc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLCBDYXNlRmxhZ0Vycm9yTWVzc2FnZSwgQ2FzZUZsYWdGaWVsZFN0YXRlLCBDYXNlRmxhZ0Zvcm1GaWVsZHMsIENhc2VGbGFnU3RhdHVzIH0gZnJvbSAnLi9lbnVtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjZC13cml0ZS1jYXNlLWZsYWctZmllbGQnLFxuICB0ZW1wbGF0ZVVybDogJy4vd3JpdGUtY2FzZS1mbGFnLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vd3JpdGUtY2FzZS1mbGFnLWZpZWxkLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgV3JpdGVDYXNlRmxhZ0ZpZWxkQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RGaWVsZFdyaXRlSm91cm5leUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBKb3VybmV5IHtcbiAgLy9wdWJsaWMgZm9ybUdyb3VwOiBGb3JtR3JvdXA7XG4gIHB1YmxpYyBmaWVsZFN0YXRlOiBudW1iZXI7XG4gIHB1YmxpYyBjYXNlRmxhZ0ZpZWxkU3RhdGUgPSBDYXNlRmxhZ0ZpZWxkU3RhdGU7XG4gIHB1YmxpYyBlcnJvck1lc3NhZ2VzOiBFcnJvck1lc3NhZ2VbXSA9IFtdO1xuICBwdWJsaWMgZmxhZ3NEYXRhOiBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoW107XG4gIHB1YmxpYyBzZWxlY3RlZEZsYWc6IEZsYWdEZXRhaWxEaXNwbGF5V2l0aEZvcm1Hcm91cFBhdGg7XG4gIHB1YmxpYyBjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cDogRm9ybUdyb3VwO1xuICBwdWJsaWMgZmxhZ0NvbW1lbnRzT3B0aW9uYWwgPSBmYWxzZTtcbiAgcHVibGljIGp1cmlzZGljdGlvbjogc3RyaW5nO1xuICBwdWJsaWMgY2FzZVR5cGVJZDogc3RyaW5nO1xuICBwdWJsaWMgaG1jdHNTZXJ2aWNlSWQ6IHN0cmluZztcbiAgcHVibGljIGlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJVcGRhdGU6IGJvb2xlYW47XG4gIHB1YmxpYyBpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyRXh0ZXJuYWw6IGJvb2xlYW47XG4gIHB1YmxpYyBpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyMlBvaW50MUVuYWJsZWQ6IGJvb2xlYW47XG4gIHB1YmxpYyBjYXNlVGl0bGU6IHN0cmluZztcbiAgcHVibGljIGNhc2VUaXRsZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgZGlzcGxheUNvbnRleHRQYXJhbWV0ZXI6IHN0cmluZztcbiAgcHVibGljIGRldGVybWluZWRMb2NhdGlvbjogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aDtcbiAgcHJpdmF0ZSBhbGxDYXNlRmxhZ1N0YWdlc0NvbXBsZXRlZCA9IGZhbHNlO1xuICBwdWJsaWMgbmF2aWdhdGVkVG8gPSBmYWxzZTtcbiAgLy8gQ29kZSBmb3IgXCJPdGhlclwiIGZsYWcgdHlwZSBhcyBkZWZpbmVkIGluIFJlZmVyZW5jZSBEYXRhXG4gIHByaXZhdGUgcmVhZG9ubHkgb3RoZXJGbGFnVHlwZUNvZGUgPSAnT1QwMDAxJztcbiAgcHJpdmF0ZSByZWFkb25seSBzZWxlY3RlZE1hbmFnZUNhc2VMb2NhdGlvbiA9ICdzZWxlY3RlZE1hbmFnZUNhc2VMb2NhdGlvbic7XG4gIHB1YmxpYyByZWFkb25seSBjYXNlTmFtZU1pc3NpbmcgPSAnQ2FzZSBuYW1lIG1pc3NpbmcnO1xuICBmbGFnVHlwZVN1YkpvdXJuZXlJbmRleDogYW55O1xuXG4gIHB1YmxpYyBnZXQgZmxhZ1R5cGUoKTogRmxhZ1R5cGUgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cD8udmFsdWUuZmxhZ1R5cGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkRmxhZ3NMb2NhdGlvbigpOiBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXA/LnZhbHVlLnNlbGVjdGVkTG9jYXRpb247XG4gIH1cblxuICBwdWJsaWMgc2V0IHNlbGVjdGVkRmxhZ3NMb2NhdGlvbihzZWxlY3RlZExvY2F0aW9uOiBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoIHwgbnVsbCkge1xuICAgIGlmICh0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwKSB7XG4gICAgICB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLnZhbHVlLnNlbGVjdGVkTG9jYXRpb24gPSBzZWxlY3RlZExvY2F0aW9uO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FzZUVkaXREYXRhU2VydmljZTogQ2FzZUVkaXREYXRhU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhc2VGbGFnU3RhdGVTZXJ2aWNlOiBDYXNlRmxhZ1N0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJweFRyYW5zbGF0aW9uU2VydmljZTogUnB4VHJhbnNsYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgbXVsdGlwYWdlQ29tcG9uZW50U3RhdGVTZXJ2aWNlOiBNdWx0aXBhZ2VDb21wb25lbnRTdGF0ZVNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIobXVsdGlwYWdlQ29tcG9uZW50U3RhdGVTZXJ2aWNlKTtcbiAgICB0aGlzLmhhbmRsZUJhY2tCdXR0b24gPSB0aGlzLmhhbmRsZUJhY2tCdXR0b24uYmluZCh0aGlzKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCB0cmlnVXJsID0gbG9jYXRpb24uaHJlZjtcbiAgICB0aGlzLmFkZFN0YXRlKG51bGwsIHRoaXMucm91dGVyLnVybC5zcGxpdCgnLycpLnNwbGljZSgwLCB0aGlzLnJvdXRlci51cmwuc3BsaXQoJy8nKS5pbmRleE9mKCd0cmlnZ2VyJykpLmpvaW4oJy8nKSk7XG4gICAgdGhpcy5hZGRTdGF0ZSgwLCB0cmlnVXJsKTtcbiAgICAvLyBJZiBpdCBpcyBzdGFydCBvZiB0aGUgam91cm5leSBvciBuYXZpZ2F0aW9uIGZyb20gY2hlY2sgeW91ciBhbnN3ZXJzIHBhZ2UgdGhlbiBmaWVsZFN0YXRlVG9OYXZpZ2F0ZSBwcm9wZXJ0eVxuICAgIC8vIGluIGNhc2UgZmxhZyBzdGF0ZSBzZXJ2aWNlIHdpbGwgY29udGFpbiB0aGUgZmllbGQgc3RhdGUgdG8gbmF2aWdhdGUgYmFzZWQgb24gY3JlYXRlIG9yIG1hbmFnZSBqb3VybmV5XG4gICAgdGhpcy5maWVsZFN0YXRlID0gdGhpcy5jYXNlRmxhZ1N0YXRlU2VydmljZS5maWVsZFN0YXRlVG9OYXZpZ2F0ZTtcbiAgICBpZiAodGhpcy5maWVsZFN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zO1xuICAgICAgLy8gQ2xlYXIgdGhlIGZvcm0gZ3JvdXAsIGZpZWxkIHN0YXRlIHRvIG5hdmlnYXRlIGFuZCBzZXQgdGhlIHBhZ2UgbG9jYXRpb25cbiAgICAgIHRoaXMuY2FzZUZsYWdTdGF0ZVNlcnZpY2UucmVzZXRDYWNoZShgLi4vJHtwYXJhbXNbJ2VpZCddfS8ke3BhcmFtc1sncGFnZSddfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5hdmlnYXRlZFRvID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBSZWFzc2lnbiB0aGUgZm9ybSBncm91cCBmcm9tIHRoZSBjYXNlIGZsYWcgc3RhdGUgc2VydmljZVxuICAgIHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAgPSB0aGlzLmNhc2VGbGFnU3RhdGVTZXJ2aWNlLmZvcm1Hcm91cDtcbiAgICAvLyBDbGVhciBmb3JtIHZhbGlkYXRpb24gZXJyb3JzIGFzIGEgbmV3IHBhZ2Ugd2lsbCBiZSByZW5kZXJlZCBiYXNlZCBvbiBmaWVsZCBzdGF0ZVxuICAgIHRoaXMuY2FzZUVkaXREYXRhU2VydmljZS5jbGVhckZvcm1WYWxpZGF0aW9uRXJyb3JzKCk7XG4gICAgLy8gQ2hlY2sgZm9yIGV4aXN0aW5nIEZsYWdMYXVuY2hlciBjb250cm9sIGluIHBhcmVudCBhbmQgcmVtb3ZlIGl0IC0gdGhpcyBpcyB0aGUgb25seSB3YXkgdG8gZW5zdXJlIGl0cyBpbnZhbGlkaXR5XG4gICAgLy8gaXMgc2V0IGNvcnJlY3RseSBhdCB0aGUgc3RhcnQsIHdoZW4gdGhlIGNvbXBvbmVudCBpcyByZWxvYWRlZCBhbmQgdGhlIGNvbnRyb2wgaXMgcmUtcmVnaXN0ZXJlZC4gT3RoZXJ3aXNlLCB0aGVcbiAgICAvLyB2YWxpZGF0b3Igc3RhdGUgZ2V0cyBjYXJyaWVkIG92ZXJcbiAgICBpZiAodGhpcy5mb3JtR3JvdXAgJiYgdGhpcy5mb3JtR3JvdXAuZ2V0KHRoaXMuY2FzZUZpZWxkLmlkKSkge1xuICAgICAgdGhpcy5mb3JtR3JvdXAucmVtb3ZlQ29udHJvbCh0aGlzLmNhc2VGaWVsZC5pZCk7XG4gICAgfVxuICAgIC8vIEZyb20gdGhpcyBwb2ludCwgdGhpcy5mb3JtR3JvdXAgcmVmZXJzIHRvIHRoZSBGb3JtR3JvdXAgZm9yIHRoZSBGbGFnTGF1bmNoZXIgZmllbGQsIG5vdCB0aGUgcGFyZW50IEZvcm1Hcm91cFxuICAgIHRoaXMuZm9ybUdyb3VwID0gdGhpcy5yZWdpc3RlckNvbnRyb2wobmV3IEZvcm1Hcm91cCh7fSwge1xuICAgICAgdmFsaWRhdG9yczogKF86IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9IHwgbnVsbCA9PiB7XG4gICAgICAgIGlmICghdGhpcy5hbGxDYXNlRmxhZ1N0YWdlc0NvbXBsZXRlZCkge1xuICAgICAgICAgIC8vIFJldHVybiBhbiBlcnJvciB0byBtYXJrIHRoZSBGb3JtR3JvdXAgYXMgaW52YWxpZCBpZiBub3QgYWxsIENhc2UgRmxhZyBzdGFnZXMgaGF2ZSBiZWVuIGNvbXBsZXRlZFxuICAgICAgICAgIHJldHVybiB7IG5vdEFsbENhc2VGbGFnU3RhZ2VzQ29tcGxldGVkOiB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSksIHRydWUpIGFzIEZvcm1Hcm91cDtcblxuICAgIC8vIEdldCB0aGUgY2FzZSB0eXBlIElEIGZyb20gdGhlIENhc2VWaWV3IG9iamVjdCBpbiB0aGUgc25hcHNob3QgZGF0YSAocmVxdWlyZWQgZm9yIHJldHJpZXZpbmcgdGhlIGF2YWlsYWJsZSBmbGFnXG4gICAgLy8gdHlwZXMgZm9yIGEgY2FzZSlcbiAgICBpZiAodGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmNhc2UgJiYgdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmNhc2UuY2FzZV90eXBlKSB7XG4gICAgICB0aGlzLmNhc2VUeXBlSWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuY2FzZS5jYXNlX3R5cGUuaWQ7XG4gICAgICAvLyBHZXQgdGhlIGp1cmlzZGljdGlvbiAocmVxdWlyZWQgZm9yIHJldHJpZXZpbmcgdGhlIGF2YWlsYWJsZSBmbGFnIHR5cGVzIGlmIHVuYWJsZSB0byBkZXRlcm1pbmUgdXNpbmcgY2FzZSB0eXBlIElEKVxuICAgICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5jYXNlLmNhc2VfdHlwZS5qdXJpc2RpY3Rpb24pIHtcbiAgICAgICAgdGhpcy5qdXJpc2RpY3Rpb24gPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuY2FzZS5jYXNlX3R5cGUuanVyaXNkaWN0aW9uLmlkO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBFeHRyYWN0IGFsbCBmbGFncy1yZWxhdGVkIGRhdGEgZnJvbSB0aGUgQ2FzZUV2ZW50VHJpZ2dlciBvYmplY3QgaW4gdGhlIHNuYXBzaG90IGRhdGFcbiAgICBpZiAodGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmV2ZW50VHJpZ2dlcikge1xuICAgICAgLy8gR2V0IHRoZSBITUNUU1NlcnZpY2VJZCBmcm9tIHN1cHBsZW1lbnRhcnkgZGF0YSwgaWYgaXQgZXhpc3RzIChyZXF1aXJlZCBmb3IgcmV0cmlldmluZyB0aGUgYXZhaWxhYmxlIGZsYWcgdHlwZXMgaW5cbiAgICAgIC8vIHRoZSBmaXJzdCBpbnN0YW5jZSwgb25seSBmYWxsaW5nIGJhY2sgb24gY2FzZSB0eXBlIElEIG9yIGp1cmlzZGljdGlvbiBpZiBpdCdzIG5vdCBwcmVzZW50KVxuICAgICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5ldmVudFRyaWdnZXIuc3VwcGxlbWVudGFyeV9kYXRhXG4gICAgICAgICYmIHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5ldmVudFRyaWdnZXIuc3VwcGxlbWVudGFyeV9kYXRhLkhNQ1RTU2VydmljZUlkKSB7XG4gICAgICAgIHRoaXMuaG1jdHNTZXJ2aWNlSWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuZXZlbnRUcmlnZ2VyLnN1cHBsZW1lbnRhcnlfZGF0YS5ITUNUU1NlcnZpY2VJZDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5ldmVudFRyaWdnZXIuY2FzZV9maWVsZHMpIHtcbiAgICAgICAgLy8gdGhlcmUgaXMgYW4gZWRnZSBjYXNlIGluIHRoZSBuYXZpZ2F0aW9uIHdoZW4gZ29pbmcgYmFjaywgc29tZXRpbWVzIHRoZSBjYXNlX2ZpbGVkcyB3aWxsIGxvc2UgdmFsdWVzIGluIHRoZSB2YWx1ZXMgd2hpY2ggY2F1c2VzIHRoZSBmbG93IHRvIGJyZWFrIGJlZm9yZSBDWUFcbiAgICAgICAgLy8gYmVsb3cgZnVuY2l0b24gZW5zdXJlcyBhbGwgZGF0YSBpcyBjb3JyZWN0bHkgc2V0LlxuICAgICAgICBjb25zdCBmbGFnRGF0YSA9IHRoaXMudmFsaWRhdGVDYXNlRmllbGRzKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5ldmVudFRyaWdnZXIuY2FzZV9maWVsZHMpO1xuICAgICAgICB0aGlzLmZsYWdzRGF0YSA9ICh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzIGFzIENhc2VGaWVsZFtdKVxuICAgICAgICAgIC5yZWR1Y2UoKGZsYWdzOiBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoW10sIGNhc2VGaWVsZDogQ2FzZUZpZWxkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gRmllbGRzVXRpbHMuZXh0cmFjdEZsYWdzRGF0YUZyb21DYXNlRmllbGQoZmxhZ3MsIGNhc2VGaWVsZCwgY2FzZUZpZWxkLmlkLCBjYXNlRmllbGQpO1xuICAgICAgICAgIH0sIFtdIGFzIEZsYWdzV2l0aEZvcm1Hcm91cFBhdGhbXSk7XG5cbiAgICAgICAgLy8gU2V0IGRpc3BsYXlDb250ZXh0UGFyYW1ldGVyICh0byBiZSBwYXNzZWQgYXMgYW4gaW5wdXQgdG8gTWFuYWdlQ2FzZUZsYWdzQ29tcG9uZW50IGZvciBzZXR0aW5nIGNvcnJlY3QgdGl0bGUpXG4gICAgICAgIHRoaXMuZGlzcGxheUNvbnRleHRQYXJhbWV0ZXIgPVxuICAgICAgICAgIHRoaXMuc2V0RGlzcGxheUNvbnRleHRQYXJhbWV0ZXIoZmxhZ0RhdGEgYXMgQ2FzZUZpZWxkW10pO1xuXG4gICAgICAgIC8vIFNldCBib29sZWFuIGluZGljYXRpbmcgdGhlIGRpc3BsYXlfY29udGV4dF9wYXJhbWV0ZXIgaXMgXCJ1cGRhdGVcIlxuICAgICAgICB0aGlzLmlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJVcGRhdGUgPSB0aGlzLnNldERpc3BsYXlDb250ZXh0UGFyYW1ldGVyVXBkYXRlKHRoaXMuZGlzcGxheUNvbnRleHRQYXJhbWV0ZXIpO1xuXG4gICAgICAgIC8vIFNldCBib29sZWFuIGluZGljYXRpbmcgdGhlIGRpc3BsYXlfY29udGV4dF9wYXJhbWV0ZXIgaXMgXCJleHRlcm5hbFwiXG4gICAgICAgIHRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsID0gdGhpcy5zZXREaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsKHRoaXMuZGlzcGxheUNvbnRleHRQYXJhbWV0ZXIpO1xuXG4gICAgICAgIC8vIFNldCBib29sZWFuIGluZGljYXRpbmcgdGhlIGRpc3BsYXlfY29udGV4dF9wYXJhbWV0ZXIgaXMgQ2FzZSBGbGFncyB2Mi4xIGVuYWJsZWRcbiAgICAgICAgdGhpcy5pc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyMlBvaW50MUVuYWJsZWQgPSB0aGlzLnNldERpc3BsYXlDb250ZXh0UGFyYW1ldGVyMlBvaW50MUVuYWJsZWQodGhpcy5kaXNwbGF5Q29udGV4dFBhcmFtZXRlcik7XG5cbiAgICAgICAgLy8gU2V0IHN0YXJ0aW5nIGZpZWxkIHN0YXRlIGlmIGZpZWxkU3RhdGUgbm90IHRoZSByaWdodCB2YWx1ZVxuICAgICAgICBpZiAoIXRoaXMuZmllbGRTdGF0ZSkge1xuICAgICAgICAgIHRoaXMuZmllbGRTdGF0ZSA9IHRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlclVwZGF0ZSA/IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX01BTkFHRV9DQVNFX0ZMQUdTIDogQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfTE9DQVRJT047XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgY2FzZSB0aXRsZSwgdG8gYmUgdXNlZCBieSBjaGlsZCBjb21wb25lbnRzXG4gICAgICAgIHRoaXMuY2FzZVRpdGxlU3Vic2NyaXB0aW9uID0gdGhpcy5jYXNlRWRpdERhdGFTZXJ2aWNlLmNhc2VUaXRsZSQuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiB0aXRsZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNhc2VUaXRsZSA9IHRpdGxlPy5sZW5ndGggPiAwID8gdGl0bGUgOiB0aGlzLmNhc2VOYW1lTWlzc2luZztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENTRkQtMTYuXG4gICAgLy8gU2V0dXAgdGhlIHBhZ2UgbnVtYmVyIHRvIGluaXRpYWxseSBiZSB0aGUgc2FtZSB2YWx1ZSBhcyBcbiAgICAvLyB0aGUgc3RhcnQgcGFnZSBudW1iZXIuIFByb3ZpZGVkIHRoYXQgc29tZSBzdGF0ZSBleGlzdHMgd2l0aGluIFxuICAgIC8vIHRoZSBwYWdlIHN0YXRlIHNlcnZpY2UsIHVzZSB0aGF0IGluc3RhZWFkLlxuICAgIC8vXG4gICAgLy8gSWYgaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlclVwZGF0ZSBpcyB0cnVlLCB0aGVuIHRoZSBzdGFydGluZyBwYWdlIG11c3QgYmUgXG4gICAgLy8gdGhlIHZhbHVlIG9mIDQuIE90aGVyd2lzZSwgaXQncyAwLiBIb3dldmVyLCB3ZSdyZSB1c2luZyBhbiBlbnVtIHRvIHNpbXBsaWZ5XG4gICAgLy8gdGhpcyBwcm9jZXNzLlxuICAgIC8vXG4gICAgLy8gSXQgbWlnaHQgaGVscCB0byB0YWtlIGEgbG9vayBhdCB0aGUgdGVtcGxhdGUgZmlsZS4gXG4gICAgaWYgKHRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlclVwZGF0ZSkge1xuICAgICAgdGhpcy5qb3VybmV5U3RhcnRQYWdlTnVtYmVyID0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfTUFOQUdFX0NBU0VfRkxBR1M7XG4gICAgICB0aGlzLmpvdXJuZXlFbmRQYWdlTnVtYmVyID0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVVBEQVRFX1dFTFNIX1RSQU5TTEFUSU9OO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmpvdXJuZXlTdGFydFBhZ2VOdW1iZXIgPSBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19MT0NBVElPTjtcbiAgICAgIHRoaXMuam91cm5leUVuZFBhZ2VOdW1iZXIgPSBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19TVEFUVVM7XG4gICAgfVxuXG4gICAgLy8gTm93IHRoYXQgd2UndmUgc2V0IHRoZSBzdGFydCBwYWdlIG51bWJlciwgbGV0J3Mgc2V0IHRoZSBjdXJyZW50IHBhZ2UgbnVtYmVyLiBcbiAgICB0aGlzLmpvdXJuZXlQYWdlTnVtYmVyID0gdGhpcy5qb3VybmV5U3RhcnRQYWdlTnVtYmVyO1xuXG4gICAgLy8gSWYgd2UndmUgbmF2aWdhdGVkIHRvIHRoaXMgcGFnZSwgdGhlbiB3ZSBrbm93IGJ5IGRlZmF1bHQsIHdlIHdhbnQgdG8gc2V0IHRoZSBcbiAgICAvLyBqb3VybmV5IHBhZ2UgbnVtYmVyIHRvIHRoZSBmaWVsZCBzdGF0ZS4gXG4gICAgaWYgKHRoaXMubmF2aWdhdGVkVG8pIHtcbiAgICAgIGNvbnN0IHBhZ2VObyA9IHRoaXMuZmllbGRTdGF0ZSA9PT0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfU1RBVFVTID8gdGhpcy5maWVsZFN0YXRlIC0xIDogdGhpcy5maWVsZFN0YXRlO1xuICAgICAgdGhpcy5qb3VybmV5UGFnZU51bWJlciA9IHBhZ2VObztcbiAgICAgIHRoaXMuam91cm5leVByZXZpb3VzUGFnZU51bWJlciA9IHBhZ2VObysxO1xuICAgIH1cblxuICAgIC8vIFByb3ZpZGVkIHdlIGhhdmUgc29tZSBzdG9yZWQgc3RhdGUsIGkuZS4gd2hlbiBnb2luZyBiYWNrd2FyZHMsIHdlIHdhbnQgXG4gICAgLy8gdG8gZ2V0IHRoZSBsYXN0IHZpc2l0ZWQgcGFnZSwgZXRjLiBcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMubXVsdGlwYWdlQ29tcG9uZW50U3RhdGVTZXJ2aWNlLmdldEpvdXJuZXlTdGF0ZSh0aGlzKTtcblxuICAgIGlmIChzdGF0ZSkge1xuICAgICAgY29uc3QgeyBqb3VybmV5UGFnZU51bWJlciwgam91cm5leVN0YXJ0UGFnZU51bWJlciwgam91cm5leUVuZFBhZ2VOdW1iZXIgfSA9IHN0YXRlO1xuXG4gICAgICB0aGlzLmpvdXJuZXlQYWdlTnVtYmVyID0gam91cm5leVBhZ2VOdW1iZXI7XG4gICAgICB0aGlzLmpvdXJuZXlTdGFydFBhZ2VOdW1iZXIgPSBqb3VybmV5U3RhcnRQYWdlTnVtYmVyO1xuICAgICAgdGhpcy5qb3VybmV5RW5kUGFnZU51bWJlciA9IGpvdXJuZXlFbmRQYWdlTnVtYmVyO1xuICAgIH1cblxuICAgIHRoaXMubXVsdGlwYWdlQ29tcG9uZW50U3RhdGVTZXJ2aWNlLmlzQXRTdGFydCA9IHRoaXMuam91cm5leVBhZ2VOdW1iZXIgPT09IHRoaXMuam91cm5leVN0YXJ0UGFnZU51bWJlcjtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9wc3RhdGUnLCB0aGlzLmhhbmRsZUJhY2tCdXR0b24pO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZUJhY2tCdXR0b24oZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICh0aGlzLmZpZWxkU3RhdGUgPT09IDApe1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMucm91dGVyLnVybC5zcGxpdCgnLycpLnNwbGljZSgwLCB0aGlzLnJvdXRlci51cmwuc3BsaXQoJy8nKS5pbmRleE9mKCd0cmlnZ2VyJykpLmpvaW4oJy8nKV0pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5maWVsZFN0YXRlID09PSAxICYmIHRoaXMuZmxhZ1R5cGVTdWJKb3VybmV5SW5kZXggPT09IDApe1xuICAgICAgdGhpcy5wcmV2aW91c1BhZ2UoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZmllbGRTdGF0ZSAhPT0gMSkge1xuICAgICAgdGhpcy5wcmV2aW91c1BhZ2UoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWRkU3RhdGUoZGF0YSwgdXJsPyk6IHZvaWQge1xuICAgIGhpc3RvcnkucHVzaFN0YXRlKGRhdGEsICcnLCB1cmwpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUZsYWdUeXBlU3ViSm91cm5leShldmVudCk6IHZvaWQge1xuICAgIHRoaXMuZmxhZ1R5cGVTdWJKb3VybmV5SW5kZXggPSBldmVudDtcbiAgfVxuXG4gIHZhbGlkYXRlQ2FzZUZpZWxkcyhjYXNlRmllbGRzKSB7XG4gICAgY2FzZUZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgaWYgKGZpZWxkLmZvcm1hdHRlZF92YWx1ZSkge1xuICAgICAgICBPYmplY3Qua2V5cyhmaWVsZC5mb3JtYXR0ZWRfdmFsdWUpLmZvckVhY2goKHZhbHVlS2V5KSA9PiB7XG4gICAgICAgICAgaWYgKGZpZWxkLmZvcm1hdHRlZF92YWx1ZVt2YWx1ZUtleV0gIT09IGZpZWxkLnZhbHVlW3ZhbHVlS2V5XSkge1xuICAgICAgICAgICAgZmllbGQudmFsdWVbdmFsdWVLZXldID0gZmllbGQuZm9ybWF0dGVkX3ZhbHVlW3ZhbHVlS2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjYXNlRmllbGRzO1xuICB9XG5cbiAgcHVibGljIG9uUGFnZUNoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLm11bHRpcGFnZUNvbXBvbmVudFN0YXRlU2VydmljZS5pc0F0U3RhcnQgPSB0aGlzLmZpZWxkU3RhdGUgPT09IHRoaXMuY2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfTE9DQVRJT047XG4gICAgdGhpcy5hZGRTdGF0ZSh0aGlzLmZpZWxkU3RhdGUpO1xuICB9XG5cbiAgcHVibGljIHNldERpc3BsYXlDb250ZXh0UGFyYW1ldGVyVXBkYXRlKGRpc3BsYXlDb250ZXh0UGFyYW1ldGVyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZGlzcGxheUNvbnRleHRQYXJhbWV0ZXIgPT09IENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIuVVBEQVRFIHx8XG4gICAgICBkaXNwbGF5Q29udGV4dFBhcmFtZXRlciA9PT0gQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlci5VUERBVEVfRVhURVJOQUwgfHxcbiAgICAgIGRpc3BsYXlDb250ZXh0UGFyYW1ldGVyID09PSBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLlVQREFURV8yX1BPSU5UXzE7XG4gIH1cblxuICBwdWJsaWMgc2V0RGlzcGxheUNvbnRleHRQYXJhbWV0ZXJFeHRlcm5hbChkaXNwbGF5Q29udGV4dFBhcmFtZXRlcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGRpc3BsYXlDb250ZXh0UGFyYW1ldGVyID09PSBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLkNSRUFURV9FWFRFUk5BTCB8fFxuICAgICAgZGlzcGxheUNvbnRleHRQYXJhbWV0ZXIgPT09IENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIuVVBEQVRFX0VYVEVSTkFMO1xuICB9XG5cbiAgcHVibGljIHNldERpc3BsYXlDb250ZXh0UGFyYW1ldGVyMlBvaW50MUVuYWJsZWQoZGlzcGxheUNvbnRleHRQYXJhbWV0ZXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBkaXNwbGF5Q29udGV4dFBhcmFtZXRlciA9PT0gQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlci5DUkVBVEVfMl9QT0lOVF8xIHx8XG4gICAgICBkaXNwbGF5Q29udGV4dFBhcmFtZXRlciA9PT0gQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlci5VUERBVEVfMl9QT0lOVF8xO1xuICB9XG5cbiAgcHVibGljIG9uQ2FzZUZsYWdTdGF0ZUVtaXR0ZWQoY2FzZUZsYWdTdGF0ZTogQ2FzZUZsYWdTdGF0ZSk6IHZvaWQge1xuICAgIHRoaXMuY2FzZUVkaXREYXRhU2VydmljZS5jbGVhckZvcm1WYWxpZGF0aW9uRXJyb3JzKCk7XG5cbiAgICB0aGlzLmVycm9yTWVzc2FnZXMgPSBjYXNlRmxhZ1N0YXRlLmVycm9yTWVzc2FnZXM7XG4gICAgdGhpcy5zZWxlY3RlZEZsYWcgPSBjYXNlRmxhZ1N0YXRlLnNlbGVjdGVkRmxhZztcblxuICAgIC8vIFZhbGlkYXRpb24gc3VjY2VlZGVkOyBwcm9jZWVkIHRvIG5leHQgc3RhdGUgb3IgZmluYWwgcmV2aWV3IHN0YWdlIChcIkNoZWNrIHlvdXIgYW5zd2Vyc1wiKVxuICAgIGlmICh0aGlzLmVycm9yTWVzc2FnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBpZiAodGhpcy5jYW5Nb3ZlVG9GaW5hbFJldmlld1N0YWdlKGNhc2VGbGFnU3RhdGUpKSB7XG4gICAgICAgIHRoaXMubW92ZVRvRmluYWxSZXZpZXdTdGFnZSgpO1xuICAgICAgICAvLyBEb24ndCBtb3ZlIHRvIG5leHQgc3RhdGUgaWYgY3VycmVudCBzdGF0ZSBpcyBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19UWVBFIGFuZCB0aGUgZmxhZyB0eXBlIGlzIGEgcGFyZW50IC0gdGhpc1xuICAgICAgICAvLyBtZWFucyB0aGUgdXNlciBuZWVkcyB0byBzZWxlY3QgZnJvbSB0aGUgbmV4dCBzZXQgb2YgZmxhZyB0eXBlcyBiZWZvcmUgdGhleSBjYW4gbW92ZSBvblxuICAgICAgfSBlbHNlIGlmICghY2FzZUZsYWdTdGF0ZS5pc1BhcmVudEZsYWdUeXBlKSB7XG4gICAgICAgIC8vIFByb2NlZWQgdG8gbmV4dCBzdGF0ZVxuICAgICAgICB0aGlzLnByb2NlZWRUb05leHRTdGF0ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjYW5Nb3ZlVG9GaW5hbFJldmlld1N0YWdlKGNhc2VGbGFnU3RhdGU6IENhc2VGbGFnU3RhdGUpOiBib29sZWFuIHtcbiAgICAvLyBJZiB0aGUgam91cm5leSBpcyByZXF1ZXN0IHN1cHBvcnQgb3IgbWFuYWdlIHN1cHBvcnRcbiAgICAvLyBhbmQgdGhlIGN1cnJlbnQgc3RhdGUgaXMgZWl0aGVyIENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0NPTU1FTlRTIG9yIENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1VQREFURVxuICAgIC8vIHRoZW4gbW92ZSB0byBmaW5hbCByZXZpZXcgc3RhZ2VcbiAgICBpZiAodGhpcy5pc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyRXh0ZXJuYWwpIHtcbiAgICAgIHJldHVybiBjYXNlRmxhZ1N0YXRlLmN1cnJlbnRDYXNlRmxhZ0ZpZWxkU3RhdGUgPT09IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0NPTU1FTlRTIHx8XG4gICAgICAgIGNhc2VGbGFnU3RhdGUuY3VycmVudENhc2VGbGFnRmllbGRTdGF0ZSA9PT0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVVBEQVRFO1xuICAgIH1cbiAgICAvLyBJZiB0aGUgY3VycmVudCBzdGF0ZSBpcyBvbmUgb2Y6XG4gICAgLy8gKiBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19TVEFUVVMgQU5EIENhc2UgRmxhZ3MgdjIuMSBpcyBlbmFibGVkXG4gICAgLy8gKiBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19DT01NRU5UUyBBTkQgQ2FzZSBGbGFncyB2Mi4xIGlzIG5vdCBlbmFibGVkXG4gICAgLy8gKiBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19VUERBVEUgYW5kIFdlbHNoIHRyYW5zbGF0aW9uIGNoZWNrYm94IGlzIG5vdCBzZWxlY3RlZFxuICAgIC8vICogQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVVBEQVRFX1dFTFNIX1RSQU5TTEFUSU9OXG4gICAgLy8gdGhlbiBtb3ZlIHRvIGZpbmFsIHJldmlldyBzdGFnZVxuICAgIHJldHVybiAoY2FzZUZsYWdTdGF0ZS5jdXJyZW50Q2FzZUZsYWdGaWVsZFN0YXRlID09PVxuICAgICAgQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfU1RBVFVTICYmIHRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlcjJQb2ludDFFbmFibGVkKSB8fFxuICAgICAgKGNhc2VGbGFnU3RhdGUuY3VycmVudENhc2VGbGFnRmllbGRTdGF0ZSA9PT1cbiAgICAgICAgQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfQ09NTUVOVFMgJiYgIXRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlcjJQb2ludDFFbmFibGVkKSB8fFxuICAgICAgKGNhc2VGbGFnU3RhdGUuY3VycmVudENhc2VGbGFnRmllbGRTdGF0ZSA9PT0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVVBEQVRFICYmXG4gICAgICAgICF0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLmdldChDYXNlRmxhZ0Zvcm1GaWVsZHMuSVNfV0VMU0hfVFJBTlNMQVRJT05fTkVFREVEKT8udmFsdWUpIHx8XG4gICAgICBjYXNlRmxhZ1N0YXRlLmN1cnJlbnRDYXNlRmxhZ0ZpZWxkU3RhdGUgPT09IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1VQREFURV9XRUxTSF9UUkFOU0xBVElPTjtcbiAgfVxuXG4gIHB1YmxpYyBwcm9jZWVkVG9OZXh0U3RhdGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzQXRGaW5hbFN0YXRlKCkpIHtcbiAgICAgIHRoaXMuam91cm5leVByZXZpb3VzUGFnZU51bWJlciA9IHRoaXMuZmllbGRTdGF0ZTtcbiAgICAgIC8vIFNraXAgdGhlIFwibGFuZ3VhZ2UgaW50ZXJwcmV0ZXJcIiBzdGF0ZSBpZiBjdXJyZW50IHN0YXRlIGlzIENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1RZUEUgYW5kIHRoZSBmbGFnIHR5cGUgZG9lc24ndFxuICAgICAgLy8gaGF2ZSBhIFwibGlzdCBvZiB2YWx1ZXNcIiAtIGN1cnJlbnRseSwgdGhpcyBpcyBwcmVzZW50IG9ubHkgZm9yIHRob3NlIGZsYWcgdHlwZXMgdGhhdCByZXF1aXJlIGxhbmd1YWdlIGludGVycHJldGVyXG4gICAgICAvLyBzZWxlY3Rpb25cbiAgICAgIGlmICh0aGlzLmZpZWxkU3RhdGUgPT09IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1RZUEUgJiYgIXRoaXMuZmxhZ1R5cGU/Lmxpc3RPZlZhbHVlcykge1xuICAgICAgICB0aGlzLmZpZWxkU3RhdGUgPSBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19DT01NRU5UUztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmllbGRTdGF0ZSsrO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm5leHRQYWdlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldEZsYWdzQ2FzZUZpZWxkVmFsdWUoKTogdm9pZCB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBzd2l0Y2gtZGVmYXVsdFxuICAgIHN3aXRjaCAodGhpcy5maWVsZFN0YXRlKSB7XG4gICAgICBjYXNlIENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1NUQVRVUzpcbiAgICAgICAgdGhpcy5hZGRGbGFnVG9Db2xsZWN0aW9uKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19DT01NRU5UUzpcbiAgICAgICAgaWYgKHRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsIHx8ICF0aGlzLmlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIyUG9pbnQxRW5hYmxlZCkge1xuICAgICAgICAgIHRoaXMuYWRkRmxhZ1RvQ29sbGVjdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0aGlzLm1hbmFnZUZsYWdGaW5hbFN0YXRlOlxuICAgICAgICB0aGlzLnVwZGF0ZUZsYWdJbkNvbGxlY3Rpb24oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHByZXZpb3VzUGFnZSgpOiB2b2lkIHtcbiAgICAvLyBpZiB3ZSBhcmUgbmF2aWdhdGluZyBhd2F5IGZyb20gdGhlIHBhZ2UsIHdlIHNob3VsZCBzZXQgdGhlIGVycm9yIG1lc3NhZ2VzIHRvIGVtcHR5IHNvIHRoZSBtZXNzYWdlIGRpc3NhcGVhcnNcbiAgICB0aGlzLmVycm9yTWVzc2FnZXMgPSBbXTtcbiAgICB0aGlzLmpvdXJuZXlQcmV2aW91c1BhZ2VOdW1iZXIgPSB0aGlzLmZpZWxkU3RhdGU7XG4gICAgaWYgKHRoaXMuaGFzUHJldmlvdXMoKSAmJiB0aGlzLmZpZWxkU3RhdGUgPT09IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0NPTU1FTlRTICYmICF0aGlzLmZsYWdUeXBlPy5saXN0T2ZWYWx1ZXMpIHtcbiAgICAgIHRoaXMuZmllbGRTdGF0ZSA9IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1RZUEU7XG4gICAgfSBlbHNlIGlmICh0aGlzLmhhc1ByZXZpb3VzKCkpIHtcbiAgICAgIHRoaXMuZmllbGRTdGF0ZS0tO1xuICAgIH1cbiAgICBzdXBlci5wcmV2aW91c1BhZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRGbGFnVG9Db2xsZWN0aW9uKCk6IHZvaWQge1xuICAgIC8vIEVuc3VyZSBubyBtb3JlIHRoYW4gb25lIG5ldyBmbGFnIGlzIGJlaW5nIGFkZGVkIGF0IGEgdGltZSwgYnkgaXRlcmF0aW5nIHRocm91Z2ggZWFjaCBGbGFncyBjYXNlIGZpZWxkIGFuZCByZW1vdmluZ1xuICAgIC8vIGFueSBwcmV2aW91cyBlbnRyeSBmcm9tIHRoZSBkZXRhaWxzIGFycmF5IHdoZXJlIHRoYXQgZW50cnkgaGFzIG5vIGlkIChoZW5jZSBpdCBpcyBuZXcgLSBhbmQgdGhlcmUgc2hvdWxkIGJlIG9ubHlcbiAgICAvLyBvbmUgc3VjaCBlbnRyeSkuIChUaGlzIHNjZW5hcmlvIG9jY3VycyBpZiB0aGUgdXNlciByZXBlYXRzIHRoZSBDYXNlIEZsYWcgY3JlYXRpb24gam91cm5leSBieSB1c2luZyB0aGUgXCJDaGFuZ2VcIlxuICAgIC8vIGxpbmsgYW5kIHNlbGVjdHMgZWl0aGVyIHRoZSBzYW1lIGZsYWcgbG9jYXRpb24gYXMgYmVmb3JlIG9yIGEgZGlmZmVyZW50IG9uZS4pXG4gICAgdGhpcy5mbGFnc0RhdGEuZm9yRWFjaChpbnN0YW5jZSA9PiB7XG4gICAgICAvLyBVc2UgdGhlIHBhdGhUb0ZsYWdzRm9ybUdyb3VwIHByb3BlcnR5IGZvciBlYWNoIEZsYWdzIGNhc2UgZmllbGQgdG8gZHJpbGwgZG93biB0byB0aGUgY29ycmVjdCBwYXJ0IG9mIHRoZVxuICAgICAgLy8gQ2FzZUZpZWxkIHZhbHVlIHRvIHJlbW92ZSB0aGUgbmV3IHZhbHVlIGZyb21cbiAgICAgIGxldCB2YWx1ZSA9IGluc3RhbmNlLmNhc2VGaWVsZD8udmFsdWU7XG4gICAgICBjb25zdCBwYXRoVG9WYWx1ZSA9IGluc3RhbmNlLnBhdGhUb0ZsYWdzRm9ybUdyb3VwO1xuICAgICAgLy8gUm9vdC1sZXZlbCBGbGFncyBDYXNlRmllbGRzIGRvbid0IGhhdmUgYSBkb3QtZGVsaW1pdGVkIHBhdGggLSBqdXN0IHRoZSBDYXNlRmllbGQgSUQgaXRzZWxmIC0gc28gZG9uJ3QgZHJpbGwgZG93blxuICAgICAgaWYgKHBhdGhUb1ZhbHVlLmluZGV4T2YoJy4nKSA+IC0xKSB7XG4gICAgICAgIHBhdGhUb1ZhbHVlLnNsaWNlKHBhdGhUb1ZhbHVlLmluZGV4T2YoJy4nKSArIDEpLnNwbGl0KCcuJykuZm9yRWFjaChwYXJ0ID0+IHZhbHVlID0gdmFsdWVbcGFydF0pO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlPy5kZXRhaWxzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGluZGV4T2ZOZXdGbGFnRGV0YWlsID0gdmFsdWUuZGV0YWlscy5maW5kSW5kZXgoZWxlbWVudCA9PiAhZWxlbWVudC5oYXNPd25Qcm9wZXJ0eSgnaWQnKSk7XG4gICAgICAgIGlmIChpbmRleE9mTmV3RmxhZ0RldGFpbCA+IC0xKSB7XG4gICAgICAgICAgdmFsdWUuZGV0YWlscy5zcGxpY2UoaW5kZXhPZk5ld0ZsYWdEZXRhaWwsIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBmb3JtVmFsdWVzID0gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cD8udmFsdWU7XG4gICAgLy8gRGV0ZXJtaW5lIHRoZSBjb3JyZWN0IGxvY2F0aW9uIC0gaW50ZXJuYWwgb3IgZXh0ZXJuYWwgLSBmb3IgdGhlIG5ldyBmbGFnLiBJZiByZXR1cm5lZCBhcyB1bmRlZmluZWQsIHRoaXNcbiAgICAvLyBpbmRpY2F0ZXMgYSBjb25maWd1cmF0aW9uIGVycm9yIHdpdGggdGhlIGV4dGVybmFsIGBGbGFnc2Agb2JqZWN0IGluc3RhbmNlXG4gICAgdGhpcy5kZXRlcm1pbmVkTG9jYXRpb24gPVxuICAgICAgdGhpcy5kZXRlcm1pbmVMb2NhdGlvbkZvckZsYWcoIXRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsLCB0aGlzLnNlbGVjdGVkRmxhZ3NMb2NhdGlvbiwgZm9ybVZhbHVlcyk7XG4gICAgLy8gRG8gbm90IG11dGF0ZSB0aGlzLnNlbGVjdGVkRmxhZ3NMb2NhdGlvbjsgaWYgdGhpcy5zZWxlY3RlZEZsYWdzTG9jYXRpb24gYmVjb21lcyB1bmRlZmluZWQsXG4gICAgLy8gZGV0ZXJtaW5lTG9jYXRpb25Gb3JGbGFnKCkgd2lsbCBubyBsb25nZXIgZG8gYW55dGhpbmcgd2hlbiBjYWxsZWQgd2l0aCBpdCAtIGFuZCB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgbWVzc2FnZSB3aWxsXG4gICAgLy8gbm90IGJlIHJlZGlzcGxheWVkIGlmIHRoZSB1c2VyIGNsaWNrcyBcIk5leHRcIiBhZ2FpbiBvbiB0aGUgXCJBZGQgY29tbWVudHNcIiBwYWdlLCBhZnRlciB0aGUgZXJyb3IgaXMgZmlyc3Qgc2hvd25cblxuICAgIGlmICh0aGlzLmRldGVybWluZWRMb2NhdGlvbikge1xuICAgICAgY29uc3QgcGF0aCA9IHRoaXMuZGV0ZXJtaW5lZExvY2F0aW9uLnBhdGhUb0ZsYWdzRm9ybUdyb3VwO1xuICAgICAgY29uc3QgZmxhZ0RhdGFSZWYgPSB0aGlzLmZsYWdzRGF0YS5maW5kKGl0ZW0gPT4gaXRlbS5wYXRoVG9GbGFnc0Zvcm1Hcm91cCA9PT0gcGF0aCk7XG4gICAgICBsZXQgZmxhZ3NDYXNlRmllbGRWYWx1ZSA9IGZsYWdEYXRhUmVmLmNhc2VGaWVsZD8udmFsdWU7XG4gICAgICAvLyBVc2UgdGhlIHBhdGhUb0ZsYWdzRm9ybUdyb3VwIHByb3BlcnR5IGZyb20gdGhlIHNlbGVjdGVkIGZsYWcgbG9jYXRpb24gdG8gZHJpbGwgZG93biB0byB0aGUgY29ycmVjdCBwYXJ0IG9mIHRoZVxuICAgICAgLy8gQ2FzZUZpZWxkIHZhbHVlIHRvIGFwcGx5IGNoYW5nZXMgdG9cbiAgICAgIC8vIFJvb3QtbGV2ZWwgRmxhZ3MgQ2FzZUZpZWxkcyBkb24ndCBoYXZlIGEgZG90LWRlbGltaXRlZCBwYXRoIC0ganVzdCB0aGUgQ2FzZUZpZWxkIElEIGl0c2VsZiAtIHNvIGRvbid0IGRyaWxsIGRvd25cbiAgICAgIGlmIChwYXRoLmluZGV4T2YoJy4nKSA+IC0xKSB7XG4gICAgICAgIHBhdGguc2xpY2UocGF0aC5pbmRleE9mKCcuJykgKyAxKS5zcGxpdCgnLicpLmZvckVhY2gocGFydCA9PiBmbGFnc0Nhc2VGaWVsZFZhbHVlID0gZmxhZ3NDYXNlRmllbGRWYWx1ZVtwYXJ0XSk7XG4gICAgICB9XG4gICAgICAvLyBJZiB0aGUgQ2FzZUZpZWxkIGZvciB0aGUgc2VsZWN0ZWQgZmxhZ3MgbG9jYXRpb24gaGFzIG5vIHZhbHVlLCBzZXQgaXQgdG8gYW4gZW1wdHkgb2JqZWN0IHNvIGl0IGNhbiBiZSBwb3B1bGF0ZWRcbiAgICAgIC8vIHdpdGggZmxhZyBkZXRhaWxzXG4gICAgICBpZiAoIWZsYWdzQ2FzZUZpZWxkVmFsdWUpIHtcbiAgICAgICAgZmxhZ0RhdGFSZWYuY2FzZUZpZWxkLnZhbHVlID0ge307XG4gICAgICAgIGZsYWdzQ2FzZUZpZWxkVmFsdWUgPSBmbGFnRGF0YVJlZi5jYXNlRmllbGQudmFsdWU7XG4gICAgICB9XG4gICAgICAvLyBDcmVhdGUgYSBkZXRhaWxzIGFycmF5IGlmIG9uZSBkb2VzIG5vdCBleGlzdFxuICAgICAgaWYgKCFmbGFnc0Nhc2VGaWVsZFZhbHVlLmhhc093blByb3BlcnR5KCdkZXRhaWxzJykpIHtcbiAgICAgICAgZmxhZ3NDYXNlRmllbGRWYWx1ZS5kZXRhaWxzID0gW107XG4gICAgICB9XG4gICAgICAvLyBQb3B1bGF0ZSBuZXcgRmxhZ0RldGFpbCBpbnN0YW5jZSBhbmQgYWRkIHRvIHRoZSBGbGFncyBkYXRhIHdpdGhpbiB0aGUgQ2FzZUZpZWxkIGluc3RhbmNlIG9mIHRoZSBzZWxlY3RlZCBmbGFnXG4gICAgICAvLyBsb2NhdGlvblxuICAgICAgZmxhZ3NDYXNlRmllbGRWYWx1ZS5kZXRhaWxzLnB1c2goe3ZhbHVlOiB0aGlzLnBvcHVsYXRlTmV3RmxhZ0RldGFpbEluc3RhbmNlKCl9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUgY29ycmVjdCBsb2NhdGlvbiAoaS5lLiBlaXRoZXIgdGhlIGludGVybmFsIG9yIGV4dGVybmFsIGluc3RhbmNlIG9mIGEgYEZsYWdzYCBvYmplY3QpIGZvciBhIG5ldyBmbGFnLFxuICAgKiBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZzpcbiAgICpcbiAgICogKiBXaGV0aGVyIHRoZSB1c2VyIGlzIGludGVybmFsIG9yIGV4dGVybmFsIChubyBlZmZlY3QgZm9yIGV4dGVybmFsIHVzZXJzIGJlY2F1c2UgdGhleSBjYW4gYWNjZXNzIG9ubHkgdGhlIGV4dGVybmFsXG4gICAqIGluc3RhbmNlKVxuICAgKiAqIFRoZSBleGlzdGVuY2Ugb2YgdHdvIGBGbGFnc2Agb2JqZWN0cyAtIG9uZSBpbnRlcm5hbCwgb25lIGV4dGVybmFsIC0gbGlua2VkIGJ5IHRoZSBzYW1lIGBncm91cElkYDtcbiAgICogKiBGb3IgZmxhZ3Mgb2YgdHlwZSBcIk90aGVyXCIsIHdoZXRoZXIgXCJvbmx5IHZpc2libGUgdG8gSE1DVFMgc3RhZmZcIiBoYXMgYmVlbiBzZWxlY3RlZCBvciBub3QgKFwiT3RoZXJcIiBkZWZhdWx0cyB0b1xuICAgKiBleHRlcm5hbGx5IHZpc2libGUpO1xuICAgKiAqIEZvciBhbGwgb3RoZXIgZmxhZyB0eXBlcywgdGhlIHZhbHVlIG9mIHRoZSBgZXh0ZXJuYWxseUF2YWlsYWJsZWAgYXR0cmlidXRlLlxuICAgKlxuICAgKiBJZiB0aGUgdXNlciBpcyBpbnRlcm5hbCB0aGVuIHRoZSBuZXcgZmxhZyBzaG91bGQgYmUgYXNzaWduZWQgdG8gdGhlIGV4dGVybmFsIGBGbGFnc2AgaW5zdGFuY2UgaWY6XG4gICAqICogU3VjaCBhbiBpbnN0YW5jZSBleGlzdHMsIEFORFxuICAgKiAqIFRoZSBmbGFnIHR5cGUgaXMgXCJPdGhlclwiIGFuZCBcIm9ubHkgdmlzaWJsZSB0byBITUNUUyBzdGFmZlwiIHdhcyBub3Qgc2VsZWN0ZWQsIE9SXG4gICAqICogVGhlIGZsYWcgdHlwZSBpcyBub3QgXCJPdGhlclwiIGFuZCBgZXh0ZXJuYWxseUF2YWlsYWJsZWAgaXMgYHRydWVgLlxuICAgKlxuICAgKiBAcGFyYW0gaXNJbnRlcm5hbFVzZXIgV2hldGhlciB0aGUgY3VycmVudCB1c2VyIGlzIGludGVybmFsIG9yIG5vdFxuICAgKiBAcGFyYW0gc2VsZWN0ZWRGbGFnc0xvY2F0aW9uIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgbG9jYXRpb24gZm9yIHRoZSBuZXcgZmxhZ1xuICAgKiBAcGFyYW0gZm9ybVZhbHVlcyBBbGwgdGhlIHZhbHVlcyBmcm9tIHRoZSBgY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXBgXG4gICAqIEByZXR1cm5zIFRoZSBjb3JyZWN0bHkgZGV0ZXJtaW5lZCBsb2NhdGlvbjogZWl0aGVyIHRoZSBpbnRlcm5hbCBvciBleHRlcm5hbCBsb2NhdGlvbiAoaWYgb25lIGV4aXN0cykgd2hlcmUgYSBncm91cElkXG4gICAqIGlzIHByZXNlbnQ7IHRoZSBvcmlnaW5hbCBsb2NhdGlvbiBvdGhlcndpc2UuICoqTm90ZToqKiBJZiB0aGUgZXh0ZXJuYWwgbG9jYXRpb24gaXMgcmV0dXJuZWQgYXMgdW5kZWZpbmVkLCB0aGlzXG4gICAqIGluZGljYXRlcyBhIGNvbmZpZ3VyYXRpb24gZXJyb3JcbiAgICovXG4gIHB1YmxpYyBkZXRlcm1pbmVMb2NhdGlvbkZvckZsYWcoaXNJbnRlcm5hbFVzZXI6IGJvb2xlYW4sIHNlbGVjdGVkRmxhZ3NMb2NhdGlvbjogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aCxcbiAgICBmb3JtVmFsdWVzOiBhbnkpOiBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoIHtcbiAgICBpZiAoaXNJbnRlcm5hbFVzZXIgJiYgc2VsZWN0ZWRGbGFnc0xvY2F0aW9uPy5mbGFncz8uZ3JvdXBJZCkge1xuICAgICAgaWYgKChmb3JtVmFsdWVzPy5mbGFnVHlwZT8uZmxhZ0NvZGUgPT09IHRoaXMub3RoZXJGbGFnVHlwZUNvZGUgJiYgIWZvcm1WYWx1ZXM/LmZsYWdJc1Zpc2libGVJbnRlcm5hbGx5T25seSkgfHxcbiAgICAgICAgICAoZm9ybVZhbHVlcz8uZmxhZ1R5cGU/LmZsYWdDb2RlICE9PSB0aGlzLm90aGVyRmxhZ1R5cGVDb2RlICYmIGZvcm1WYWx1ZXM/LmZsYWdUeXBlPy5leHRlcm5hbGx5QXZhaWxhYmxlKSkge1xuICAgICAgICAvLyBJZiBuZWNlc3NhcnksIGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgZmxhZ3Mgb2JqZWN0IHdpdGggdGhlIHNhbWUgZ3JvdXBJZCBhbmQgZXh0ZXJuYWwgdmlzaWJpbGl0eSAoc2hvdWxkIGJlXG4gICAgICAgIC8vIG9ubHkgb25lIHVubGVzcyBtaXNjb25maWd1cmVkKVxuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHNlbGVjdGVkRmxhZ3NMb2NhdGlvbi5mbGFncy52aXNpYmlsaXR5Py50b0xvd2VyQ2FzZSgpID09PSAnZXh0ZXJuYWwnXG4gICAgICAgICAgPyBzZWxlY3RlZEZsYWdzTG9jYXRpb25cbiAgICAgICAgICA6IHRoaXMuZmxhZ3NEYXRhLmZpbHRlcihcbiAgICAgICAgICAgIChmKSA9PiBmLmZsYWdzPy5ncm91cElkID09PSBzZWxlY3RlZEZsYWdzTG9jYXRpb24uZmxhZ3MuZ3JvdXBJZCAmJlxuICAgICAgICAgICAgICAgIGYuZmxhZ3M/LnZpc2liaWxpdHk/LnRvTG93ZXJDYXNlKCkgPT09ICdleHRlcm5hbCcpPy5bMF07XG4gICAgICAgIC8vIElmIGxvY2F0aW9uIGlzIG5vdCB0cnV0aHksIHNldCBhbiBlcnJvciBtZXNzYWdlIGFuZCBtYWtlIGNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwIGludmFsaWQgdG8gcHJldmVudFxuICAgICAgICAvLyBuYXZpZ2F0aW9uIHRvIHRoZSBzdW1tYXJ5IHBhZ2UgKGJ5IG5vdCB0cmlnZ2VyaW5nIHRoZSBzdWJtaXQgZXZlbnQpXG4gICAgICAgIGlmICghbG9jYXRpb24pIHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZXMucHVzaCh7XG4gICAgICAgICAgICB0aXRsZTogJycsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogQ2FzZUZsYWdFcnJvck1lc3NhZ2UuTk9fRVhURVJOQUxfRkxBR1NfQ09MTEVDVElPTlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAuc2V0RXJyb3JzKHtcbiAgICAgICAgICAgIG5vRXh0ZXJuYWxDb2xsZWN0aW9uOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvY2F0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgbmVjZXNzYXJ5LCBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIGZsYWdzIG9iamVjdCB3aXRoIHRoZSBzYW1lIGdyb3VwSWQgYW5kIGludGVybmFsIHZpc2liaWxpdHkgKHNob3VsZCBiZVxuICAgICAgICAvLyBvbmx5IG9uZSB1bmxlc3MgbWlzY29uZmlndXJlZCk7IGFzc3VtZWQgdG8gYmUgaW50ZXJuYWwgaWYgdmlzaWJpbGl0eSBhdHRyaWJ1dGUgaXMgbnVsbCBvciB1bmRlZmluZWRcbiAgICAgICAgY29uc3QgbG9jYXRpb24gPSBzZWxlY3RlZEZsYWdzTG9jYXRpb24uZmxhZ3MudmlzaWJpbGl0eT8udG9Mb3dlckNhc2UoKSAhPT0gJ2V4dGVybmFsJ1xuICAgICAgICAgID8gc2VsZWN0ZWRGbGFnc0xvY2F0aW9uXG4gICAgICAgICAgOiB0aGlzLmZsYWdzRGF0YS5maWx0ZXIoXG4gICAgICAgICAgICAoZikgPT4gZi5mbGFncz8uZ3JvdXBJZCA9PT0gc2VsZWN0ZWRGbGFnc0xvY2F0aW9uLmZsYWdzLmdyb3VwSWQgJiZcbiAgICAgICAgICAgICAgZi5mbGFncz8udmlzaWJpbGl0eT8udG9Mb3dlckNhc2UoKSAhPT0gJ2V4dGVybmFsJyk/LlswXTtcbiAgICAgICAgICAvLyBJZiBsb2NhdGlvbiBpcyBub3QgdHJ1dGh5LCBzZXQgYW4gZXJyb3IgbWVzc2FnZSBhbmQgbWFrZSBjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cCBpbnZhbGlkIHRvIHByZXZlbnRcbiAgICAgICAgICAvLyBuYXZpZ2F0aW9uIHRvIHRoZSBzdW1tYXJ5IHBhZ2UgKGJ5IG5vdCB0cmlnZ2VyaW5nIHRoZSBzdWJtaXQgZXZlbnQpXG4gICAgICAgIGlmICghbG9jYXRpb24pIHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZXMucHVzaCh7XG4gICAgICAgICAgICB0aXRsZTogJycsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogQ2FzZUZsYWdFcnJvck1lc3NhZ2UuTk9fSU5URVJOQUxfRkxBR1NfQ09MTEVDVElPTlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAuc2V0RXJyb3JzKHtcbiAgICAgICAgICAgIG5vSW50ZXJuYWxDb2xsZWN0aW9uOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvY2F0aW9uO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2VsZWN0ZWRGbGFnc0xvY2F0aW9uO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUZsYWdJbkNvbGxlY3Rpb24oKTogdm9pZCB7XG4gICAgLy8gRW5zdXJlIG5vIG1vcmUgdGhhbiBvbmUgZmxhZyBpcyBiZWluZyB1cGRhdGVkIGF0IGEgdGltZSwgYnkgaXRlcmF0aW5nIHRocm91Z2ggZWFjaCBGbGFncyBjYXNlIGZpZWxkIGFuZCByZXNldHRpbmdcbiAgICAvLyB0aGUgZGVzY3JpcHRpb24sIGNvbW1lbnRzLCBzdGF0dXMsIGFuZCBkYXRlL3RpbWUgbW9kaWZpZWQgKGlmIHByZXNlbnQpIGZvciBlYWNoIGVudHJ5IGluIHRoZSBkZXRhaWxzIGFycmF5LCB3aXRoXG4gICAgLy8gb3JpZ2luYWwgdmFsdWVzIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgZm9ybWF0dGVkX3ZhbHVlIHByb3BlcnR5LiAoVGhpcyBzY2VuYXJpbyBvY2N1cnMgaWYgdGhlIHVzZXIgcmVwZWF0cyB0aGVcbiAgICAvLyBNYW5hZ2UgQ2FzZSBGbGFnIGpvdXJuZXkgYnkgdXNpbmcgdGhlIFwiQ2hhbmdlXCIgbGluayBhbmQgc2VsZWN0cyBhIGRpZmZlcmVudCBmbGFnIHRvIHVwZGF0ZS4pXG4gICAgdGhpcy5mbGFnc0RhdGEuZm9yRWFjaChpbnN0YW5jZSA9PiB7XG4gICAgICAvLyBVc2UgdGhlIHBhdGhUb0ZsYWdzRm9ybUdyb3VwIHByb3BlcnR5IGZvciBlYWNoIEZsYWdzIGNhc2UgZmllbGQgdG8gZHJpbGwgZG93biB0byB0aGUgY29ycmVjdCBwYXJ0IG9mIHRoZVxuICAgICAgLy8gQ2FzZUZpZWxkIHZhbHVlIGZvciB3aGljaCB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCB2YWx1ZXNcbiAgICAgIGxldCB2YWx1ZSA9IGluc3RhbmNlLmNhc2VGaWVsZD8udmFsdWU7XG4gICAgICBsZXQgZm9ybWF0dGVkVmFsdWUgPSBpbnN0YW5jZS5jYXNlRmllbGQ/LmZvcm1hdHRlZF92YWx1ZTtcbiAgICAgIGNvbnN0IHBhdGhUb1ZhbHVlID0gaW5zdGFuY2UucGF0aFRvRmxhZ3NGb3JtR3JvdXA7XG4gICAgICAvLyBSb290LWxldmVsIEZsYWdzIENhc2VGaWVsZHMgZG9uJ3QgaGF2ZSBhIGRvdC1kZWxpbWl0ZWQgcGF0aCAtIGp1c3QgdGhlIENhc2VGaWVsZCBJRCBpdHNlbGYgLSBzbyBkb24ndCBkcmlsbCBkb3duXG4gICAgICBpZiAocGF0aFRvVmFsdWUuaW5kZXhPZignLicpID4gLTEpIHtcbiAgICAgICAgcGF0aFRvVmFsdWUuc2xpY2UocGF0aFRvVmFsdWUuaW5kZXhPZignLicpICsgMSkuc3BsaXQoJy4nKS5mb3JFYWNoKHBhcnQgPT4ge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWVbcGFydF07XG4gICAgICAgICAgaWYgKGZvcm1hdHRlZFZhbHVlICYmIEZpZWxkc1V0aWxzLmlzTm9uRW1wdHlPYmplY3QoZm9ybWF0dGVkVmFsdWUpKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IGZvcm1hdHRlZFZhbHVlW3BhcnRdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWU/LmRldGFpbHM/Lmxlbmd0aCA+IDAgJiYgZm9ybWF0dGVkVmFsdWUgJiYgRmllbGRzVXRpbHMuaXNOb25FbXB0eU9iamVjdChmb3JtYXR0ZWRWYWx1ZSkpIHtcbiAgICAgICAgdmFsdWUuZGV0YWlscy5mb3JFYWNoKGZsYWdEZXRhaWwgPT4ge1xuICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRmxhZ0RldGFpbCA9IGZvcm1hdHRlZFZhbHVlLmRldGFpbHM/LmZpbmQoZGV0YWlsID0+IGRldGFpbC5pZCA9PT0gZmxhZ0RldGFpbC5pZCk7XG4gICAgICAgICAgaWYgKG9yaWdpbmFsRmxhZ0RldGFpbCkge1xuICAgICAgICAgICAgZmxhZ0RldGFpbC52YWx1ZS5vdGhlckRlc2NyaXB0aW9uID0gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlPy5vdGhlckRlc2NyaXB0aW9uIHx8IG51bGw7XG4gICAgICAgICAgICBmbGFnRGV0YWlsLnZhbHVlLm90aGVyRGVzY3JpcHRpb25fY3kgPSBvcmlnaW5hbEZsYWdEZXRhaWwudmFsdWU/Lm90aGVyRGVzY3JpcHRpb25fY3kgfHwgbnVsbDtcbiAgICAgICAgICAgIGZsYWdEZXRhaWwudmFsdWUuZmxhZ0NvbW1lbnQgPSBvcmlnaW5hbEZsYWdEZXRhaWwudmFsdWU/LmZsYWdDb21tZW50IHx8IG51bGw7XG4gICAgICAgICAgICBmbGFnRGV0YWlsLnZhbHVlLmZsYWdDb21tZW50X2N5ID0gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlPy5mbGFnQ29tbWVudF9jeSB8fCBudWxsO1xuICAgICAgICAgICAgZmxhZ0RldGFpbC52YWx1ZS5mbGFnVXBkYXRlQ29tbWVudCA9IG9yaWdpbmFsRmxhZ0RldGFpbC52YWx1ZT8uZmxhZ1VwZGF0ZUNvbW1lbnQgfHwgbnVsbDtcbiAgICAgICAgICAgIGZsYWdEZXRhaWwudmFsdWUuc3RhdHVzID0gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlPy5zdGF0dXM7XG4gICAgICAgICAgICBmbGFnRGV0YWlsLnZhbHVlLmRhdGVUaW1lTW9kaWZpZWQgPSBvcmlnaW5hbEZsYWdEZXRhaWwudmFsdWU/LmRhdGVUaW1lTW9kaWZpZWQgfHwgbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghdGhpcy5zZWxlY3RlZEZsYWcpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRGbGFnID0gdGhpcy5mb3JtR3JvdXAuZ2V0KHRoaXMuc2VsZWN0ZWRNYW5hZ2VDYXNlTG9jYXRpb24pLnZhbHVlIGFzIEZsYWdEZXRhaWxEaXNwbGF5V2l0aEZvcm1Hcm91cFBhdGg7XG4gICAgfVxuICAgIGxldCBmbGFnc0Nhc2VGaWVsZFZhbHVlID0gdGhpcy5zZWxlY3RlZEZsYWcuY2FzZUZpZWxkPy52YWx1ZTtcbiAgICAvLyBVc2UgdGhlIHBhdGhUb0ZsYWdzRm9ybUdyb3VwIHByb3BlcnR5IGZyb20gdGhlIHNlbGVjdGVkIGZsYWcgbG9jYXRpb24gdG8gZHJpbGwgZG93biB0byB0aGUgY29ycmVjdCBwYXJ0IG9mIHRoZVxuICAgIC8vIENhc2VGaWVsZCB2YWx1ZSB0byBhcHBseSBjaGFuZ2VzIHRvXG4gICAgY29uc3QgcGF0aCA9IHRoaXMuc2VsZWN0ZWRGbGFnLnBhdGhUb0ZsYWdzRm9ybUdyb3VwO1xuICAgIC8vIFJvb3QtbGV2ZWwgRmxhZ3MgQ2FzZUZpZWxkcyBkb24ndCBoYXZlIGEgZG90LWRlbGltaXRlZCBwYXRoIC0ganVzdCB0aGUgQ2FzZUZpZWxkIElEIGl0c2VsZiAtIHNvIGRvbid0IGRyaWxsIGRvd25cbiAgICBpZiAocGF0aC5pbmRleE9mKCcuJykgPiAtMSkge1xuICAgICAgcGF0aC5zbGljZShwYXRoLmluZGV4T2YoJy4nKSArIDEpLnNwbGl0KCcuJykuZm9yRWFjaChwYXJ0ID0+IGZsYWdzQ2FzZUZpZWxkVmFsdWUgPSBmbGFnc0Nhc2VGaWVsZFZhbHVlW3BhcnRdKTtcbiAgICB9XG4gICAgaWYgKGZsYWdzQ2FzZUZpZWxkVmFsdWUpIHtcbiAgICAgIGNvbnN0IGZsYWdEZXRhaWxUb1VwZGF0ZSA9IGZsYWdzQ2FzZUZpZWxkVmFsdWUuZGV0YWlscz8uZmluZChcbiAgICAgICAgZGV0YWlsID0+IGRldGFpbC5pZCA9PT0gdGhpcy5zZWxlY3RlZEZsYWcuZmxhZ0RldGFpbERpc3BsYXk/LmZsYWdEZXRhaWw/LmlkKTtcbiAgICAgIGlmIChmbGFnRGV0YWlsVG9VcGRhdGUpIHtcbiAgICAgICAgLy8gQ2FjaGUgdGhlICpvcmlnaW5hbCogc3RhdHVzIG9mIHRoZSBmbGFnIGJlZm9yZSBpdCBpcyBtb2RpZmllZC4gVGhpcyBpcyBuZWVkZWQgaWYgdGhlIHVzZXIgY2hhbmdlcyB0aGUgZmxhZyBzdGF0dXNcbiAgICAgICAgLy8gdGhlbiBkZWNpZGVzIHRvIHJldHVybiB0byBhbnkgcGFydCBvZiB0aGUgZmxhZyB1cGRhdGUgam91cm5leS4gVGhlIE1hbmFnZUNhc2VGbGFnc0NvbXBvbmVudCBhbmQgVXBkYXRlRmxhZ0NvbXBvbmVudFxuICAgICAgICAvLyBzaG91bGQgcmVmZXIgdG8gYSBmbGFnJ3Mgb3JpZ2luYWwgc3RhdHVzLCBub3QgdGhlIG9uZSBzZXQgdmlhIHRoZSBVSSBiZWNhdXNlIHRoaXMgaGFzbid0IGJlZW4gcGVyc2lzdGVkIHlldFxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRGbGFnLm9yaWdpbmFsU3RhdHVzKXtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRmxhZy5vcmlnaW5hbFN0YXR1cyA9IGZsYWdEZXRhaWxUb1VwZGF0ZS52YWx1ZT8uc3RhdHVzO1xuICAgICAgICB9XG4gICAgICAgIC8vIFVwZGF0ZSBkZXNjcmlwdGlvbiBmaWVsZHMgb25seSBpZiBmbGFnIHR5cGUgaXMgXCJPdGhlclwiIChmbGFnIGNvZGUgT1QwMDAxKTsgdGhlc2UgZmllbGRzIGFwcGx5IG9ubHkgdG8gdGhhdCBmbGFnIHR5cGVcbiAgICAgICAgLy8gSWYgdGhlaXIgRm9ybUNvbnRyb2xzIGRvbid0IGV4aXN0LCBpdCBtZWFucyB0aGVzZSBmaWVsZHMgd2VyZW4ndCB2aXNpdGVkIGFzIHBhcnQgb2YgdGhlIFwiVXBkYXRlIEZsYWdcIiBqb3VybmV5LCBzbyBkb1xuICAgICAgICAvLyAqbm90KiB1cGRhdGUgdGhlaXIgdmFsdWVzIChvdGhlcndpc2UgdGhleSB3aWxsIGJlY29tZSB1bmRlZmluZWQpXG4gICAgICAgIGlmIChmbGFnRGV0YWlsVG9VcGRhdGUudmFsdWU/LmZsYWdDb2RlID09PSB0aGlzLm90aGVyRmxhZ1R5cGVDb2RlKSB7XG4gICAgICAgICAgaWYgKHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAuZ2V0KENhc2VGbGFnRm9ybUZpZWxkcy5PVEhFUl9GTEFHX0RFU0NSSVBUSU9OKSkge1xuICAgICAgICAgICAgZmxhZ0RldGFpbFRvVXBkYXRlLnZhbHVlLm90aGVyRGVzY3JpcHRpb24gPSB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLmdldChcbiAgICAgICAgICAgICAgQ2FzZUZsYWdGb3JtRmllbGRzLk9USEVSX0ZMQUdfREVTQ1JJUFRJT04pLnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC5nZXQoQ2FzZUZsYWdGb3JtRmllbGRzLk9USEVSX0ZMQUdfREVTQ1JJUFRJT05fV0VMU0gpKSB7XG4gICAgICAgICAgICBmbGFnRGV0YWlsVG9VcGRhdGUudmFsdWUub3RoZXJEZXNjcmlwdGlvbl9jeSA9IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAuZ2V0KFxuICAgICAgICAgICAgICBDYXNlRmxhZ0Zvcm1GaWVsZHMuT1RIRVJfRkxBR19ERVNDUklQVElPTl9XRUxTSCkudmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEVuc3VyZSB0aGF0IGFueSBjb21tZW50cyBlbnRlcmVkIHdpdGggbGFuZ3VhZ2Ugc2V0IHRvIFdlbHNoIGRvIG5vdCBlbmQgdXAgaW4gdGhlIEVuZ2xpc2ggY29tbWVudHMgZmllbGRcbiAgICAgICAgaWYgKHRoaXMucnB4VHJhbnNsYXRpb25TZXJ2aWNlLmxhbmd1YWdlICE9PSAnY3knKSB7XG4gICAgICAgICAgZmxhZ0RldGFpbFRvVXBkYXRlLnZhbHVlLmZsYWdDb21tZW50ID0gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC5nZXQoQ2FzZUZsYWdGb3JtRmllbGRzLkNPTU1FTlRTKT8udmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUG9wdWxhdGUgZnJvbSB0aGUgKkVuZ2xpc2gqIGNvbW1lbnRzIGZpZWxkIGlmOlxuICAgICAgICAvLyAqIFRoZSBXZWxzaCBjb21tZW50cyBmaWVsZCBoYXMgbm8gdmFsdWUgKFdlbHNoIGNvbW1lbnRzIGZpZWxkIGFjcXVpcmVzIGEgdmFsdWUgb25seSB3aGVuIGFuIEhNQ1RTIGludGVybmFsIHVzZXIgaGFzXG4gICAgICAgIC8vIGdvbmUgdGhyb3VnaCB0aGUgXCJhZGQgdHJhbnNsYXRpb25cIiBzdGVwIGZvciBNYW5hZ2UgQ2FzZSBGbGFncyksIEFORFxuICAgICAgICAvLyAqIFRoZSBsYW5ndWFnZSBpcyBzZXQgdG8gV2Vsc2hcbiAgICAgICAgLy8gSWYgdGhlIEZvcm1Db250cm9sIGRvZXNuJ3QgZXhpc3QsIGl0IG1lYW5zIHRoaXMgZmllbGQgd2Fzbid0IHZpc2l0ZWQgYXMgcGFydCBvZiB0aGUgXCJVcGRhdGUgRmxhZ1wiIGpvdXJuZXksIHNvIGRvXG4gICAgICAgIC8vICpub3QqIHVwZGF0ZSBpdHMgdmFsdWUgKG90aGVyd2lzZSBpdCB3aWxsIGJlIG92ZXJyaWRkZW4pIC0gdW5sZXNzIHRoZSB1c2VyIGlzIGV4dGVybmFsIEFORCB3b3JraW5nIGluIFdlbHNoXG4gICAgICAgIGlmICh0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLmdldChDYXNlRmxhZ0Zvcm1GaWVsZHMuQ09NTUVOVFNfV0VMU0gpIHx8IHRoaXMucnB4VHJhbnNsYXRpb25TZXJ2aWNlLmxhbmd1YWdlID09PSAnY3knKSB7XG4gICAgICAgICAgZmxhZ0RldGFpbFRvVXBkYXRlLnZhbHVlLmZsYWdDb21tZW50X2N5ID0gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC5nZXQoQ2FzZUZsYWdGb3JtRmllbGRzLkNPTU1FTlRTX1dFTFNIKT8udmFsdWVcbiAgICAgICAgICAgID8gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC5nZXQoQ2FzZUZsYWdGb3JtRmllbGRzLkNPTU1FTlRTX1dFTFNIKT8udmFsdWVcbiAgICAgICAgICAgIDogdGhpcy5ycHhUcmFuc2xhdGlvblNlcnZpY2UubGFuZ3VhZ2UgPT09ICdjeSdcbiAgICAgICAgICAgICAgPyB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLmdldChDYXNlRmxhZ0Zvcm1GaWVsZHMuQ09NTUVOVFMpPy52YWx1ZVxuICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZmxhZ0RldGFpbFRvVXBkYXRlLnZhbHVlLmZsYWdVcGRhdGVDb21tZW50ID0gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC5nZXQoQ2FzZUZsYWdGb3JtRmllbGRzLlNUQVRVU19DSEFOR0VfUkVBU09OKT8udmFsdWU7XG4gICAgICAgIGZsYWdEZXRhaWxUb1VwZGF0ZS52YWx1ZS5zdGF0dXMgPSBDYXNlRmxhZ1N0YXR1c1t0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLmdldChDYXNlRmxhZ0Zvcm1GaWVsZHMuU1RBVFVTKT8udmFsdWVdO1xuICAgICAgICBmbGFnRGV0YWlsVG9VcGRhdGUudmFsdWUuZGF0ZVRpbWVNb2RpZmllZCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNBdEZpbmFsU3RhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlclVwZGF0ZVxuICAgICAgPyB0aGlzLmZpZWxkU3RhdGUgPT09IHRoaXMubWFuYWdlRmxhZ0ZpbmFsU3RhdGVcbiAgICAgIDogIXRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlcjJQb2ludDFFbmFibGVkXG4gICAgICAgID8gdGhpcy5maWVsZFN0YXRlID09PSBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19DT01NRU5UU1xuICAgICAgICA6IHRoaXMuZmllbGRTdGF0ZSA9PT0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfU1RBVFVTO1xuICB9XG5cbiAgcHVibGljIG5hdmlnYXRlVG9FcnJvckVsZW1lbnQoZWxlbWVudElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoZWxlbWVudElkKSB7XG4gICAgICBjb25zdCBodG1sRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7XG4gICAgICBpZiAoaHRtbEVsZW1lbnQpIHtcbiAgICAgICAgaHRtbEVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnY2VudGVyJyB9KTtcbiAgICAgICAgaHRtbEVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25GbGFnQ29tbWVudHNPcHRpb25hbEVtaXR0ZWQoXzogYW55KTogdm9pZCB7XG4gICAgdGhpcy5mbGFnQ29tbWVudHNPcHRpb25hbCA9IHRydWU7XG4gIH1cblxuICBwdWJsaWMgcG9wdWxhdGVOZXdGbGFnRGV0YWlsSW5zdGFuY2UoKTogRmxhZ0RldGFpbCB7XG4gICAgY29uc3QgbGFuZ1NlYXJjaFRlcm0gPSB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwPy52YWx1ZVsnbGFuZ3VhZ2VTZWFyY2hUZXJtJ107XG4gICAgY29uc3QgbWFudWFsTGFuZ0VudHJ5ID0gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cD8udmFsdWVbJ21hbnVhbExhbmd1YWdlRW50cnknXTtcbiAgICBjb25zdCBmbGFnVHlwZSA9IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXA/LnZhbHVlWydmbGFnVHlwZSddO1xuICAgIGNvbnN0IG90aGVyRGVzYyA9IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXA/LnZhbHVlWydvdGhlckRlc2NyaXB0aW9uJ107XG4gICAgY29uc3QgZm9ybVZhbHVlcyA9IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXA/LnZhbHVlO1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiB0aGlzLmZsYWdUeXBlPy5uYW1lLFxuICAgICAgbmFtZV9jeTogZmxhZ1R5cGU/Lm5hbWVfY3ksXG4gICAgICAvLyBDdXJyZW50bHksIHN1YlR5cGVWYWx1ZSwgc3ViVHlwZVZhbHVlX2N5IGFuZCBzdWJUeXBlS2V5IGFyZSBhcHBsaWNhYmxlIG9ubHkgdG8gbGFuZ3VhZ2UgZmxhZyB0eXBlc1xuICAgICAgc3ViVHlwZVZhbHVlOiBsYW5nU2VhcmNoVGVybSAmJiB0aGlzLnJweFRyYW5zbGF0aW9uU2VydmljZS5sYW5ndWFnZSA9PT0gJ2VuJ1xuICAgICAgICA/IGxhbmdTZWFyY2hUZXJtLnZhbHVlXG4gICAgICAgIDogbWFudWFsTGFuZ0VudHJ5ICYmIHRoaXMucnB4VHJhbnNsYXRpb25TZXJ2aWNlLmxhbmd1YWdlID09PSAnZW4nXG4gICAgICAgICAgPyBtYW51YWxMYW5nRW50cnlcbiAgICAgICAgICA6IG51bGwsXG4gICAgICBzdWJUeXBlVmFsdWVfY3k6IGxhbmdTZWFyY2hUZXJtICYmIHRoaXMucnB4VHJhbnNsYXRpb25TZXJ2aWNlLmxhbmd1YWdlID09PSAnY3knXG4gICAgICAgID8gbGFuZ1NlYXJjaFRlcm0/LnZhbHVlX2N5XG4gICAgICAgIDogbWFudWFsTGFuZ0VudHJ5ICYmIHRoaXMucnB4VHJhbnNsYXRpb25TZXJ2aWNlLmxhbmd1YWdlID09PSAnY3knXG4gICAgICAgICAgPyBtYW51YWxMYW5nRW50cnlcbiAgICAgICAgICA6IG51bGwsXG4gICAgICAvLyBGb3IgdXNlci1lbnRlcmVkIChpLmUuIG5vbi1SZWZlcmVuY2UgRGF0YSkgbGFuZ3VhZ2VzLCB0aGVyZSBpcyBubyBrZXlcbiAgICAgIHN1YlR5cGVLZXk6IGxhbmdTZWFyY2hUZXJtXG4gICAgICAgID8gbGFuZ1NlYXJjaFRlcm0ua2V5XG4gICAgICAgIDogbnVsbCxcbiAgICAgIG90aGVyRGVzY3JpcHRpb246IGZsYWdUeXBlPy5mbGFnQ29kZSA9PT0gdGhpcy5vdGhlckZsYWdUeXBlQ29kZSAmJlxuICAgICAgICBvdGhlckRlc2MgJiYgdGhpcy5ycHhUcmFuc2xhdGlvblNlcnZpY2UubGFuZ3VhZ2UgPT09ICdlbidcbiAgICAgICAgPyBvdGhlckRlc2NcbiAgICAgICAgOiBudWxsLFxuICAgICAgb3RoZXJEZXNjcmlwdGlvbl9jeTogZmxhZ1R5cGU/LmZsYWdDb2RlID09PSB0aGlzLm90aGVyRmxhZ1R5cGVDb2RlICYmXG4gICAgICAgIG90aGVyRGVzYyAmJiB0aGlzLnJweFRyYW5zbGF0aW9uU2VydmljZS5sYW5ndWFnZSA9PT0gJ2N5J1xuICAgICAgICA/IG90aGVyRGVzY1xuICAgICAgICA6IG51bGwsXG4gICAgICBmbGFnQ29tbWVudDogdGhpcy5ycHhUcmFuc2xhdGlvblNlcnZpY2UubGFuZ3VhZ2UgPT09ICdlbidcbiAgICAgICAgPyBmb3JtVmFsdWVzPy5mbGFnQ29tbWVudHNcbiAgICAgICAgOiBudWxsLFxuICAgICAgZmxhZ0NvbW1lbnRfY3k6IHRoaXMucnB4VHJhbnNsYXRpb25TZXJ2aWNlLmxhbmd1YWdlID09PSAnY3knXG4gICAgICAgID8gZm9ybVZhbHVlcz8uZmxhZ0NvbW1lbnRzXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGZsYWdVcGRhdGVDb21tZW50OiBmb3JtVmFsdWVzPy5zdGF0dXNSZWFzb24sXG4gICAgICBkYXRlVGltZUNyZWF0ZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHBhdGg6IGZsYWdUeXBlPy5QYXRoICYmXG4gICAgICAgIGZsYWdUeXBlPy5QYXRoLm1hcChwYXRoVmFsdWUgPT4gT2JqZWN0LmFzc2lnbih7IGlkOiBudWxsLCB2YWx1ZTogcGF0aFZhbHVlIH0pKSxcbiAgICAgIGhlYXJpbmdSZWxldmFudDogZmxhZ1R5cGU/LmhlYXJpbmdSZWxldmFudCA/ICdZZXMnIDogJ05vJyxcbiAgICAgIGZsYWdDb2RlOiBmbGFnVHlwZT8uZmxhZ0NvZGUsXG4gICAgICAvLyBTdGF0dXMgc2hvdWxkIGJlIHNldCB0byB3aGF0ZXZlciB0aGUgZGVmYXVsdCBpcyBmb3IgdGhpcyBmbGFnIHR5cGUsIGlmIGZsYWcgaXMgYmVpbmcgY3JlYXRlZCBieSBhbiBleHRlcm5hbFxuICAgICAgLy8gdXNlciwgb3RoZXJ3aXNlIGl0IHNob3VsZCBiZSBzZXQgdG8gXCJBY3RpdmVcIiBpZiBDYXNlIEZsYWdzIHYyLjEgaXMgTk9UIGVuYWJsZWQsIG9yIHRoZSBzZWxlY3RlZCBzdGF0dXMgaWYgaXQgaXNcbiAgICAgIHN0YXR1czogdGhpcy5pc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyRXh0ZXJuYWxcbiAgICAgICAgPyBmbGFnVHlwZT8uZGVmYXVsdFN0YXR1c1xuICAgICAgICA6ICF0aGlzLmlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIyUG9pbnQxRW5hYmxlZFxuICAgICAgICAgID8gQ2FzZUZsYWdTdGF0dXMuQUNUSVZFXG4gICAgICAgICAgOiBDYXNlRmxhZ1N0YXR1c1tmb3JtVmFsdWVzPy5zZWxlY3RlZFN0YXR1c10sXG4gICAgICBhdmFpbGFibGVFeHRlcm5hbGx5OiBmbGFnVHlwZT8uZXh0ZXJuYWxseUF2YWlsYWJsZSA/ICdZZXMnIDogJ05vJ1xuICAgIH0gYXMgRmxhZ0RldGFpbDtcbiAgfVxuXG4gIHB1YmxpYyBtb3ZlVG9GaW5hbFJldmlld1N0YWdlKCk6IHZvaWQge1xuICAgIHRoaXMuY2FzZUZsYWdTdGF0ZVNlcnZpY2UubGFzdFBhZ2VGaWVsZFN0YXRlID0gdGhpcy5maWVsZFN0YXRlO1xuICAgIHRoaXMuc2V0RmxhZ3NDYXNlRmllbGRWYWx1ZSgpO1xuICAgIC8vIENoZWNrIHRoYXQgbm8gZXJyb3JzIGhhdmUgYmVlbiBzZXQgb24gY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAgKGJ5IGRldGVybWluZUxvY2F0aW9uRm9yRmxhZygpKTsgcHJldmVudCBtb3ZpbmcgdG9cbiAgICAvLyBmaW5hbCByZXZpZXcgc3RhZ2UgaWYgZXJyb3JzIGV4aXN0XG4gICAgaWYgKCF0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLmVycm9ycykge1xuICAgICAgLy8gQ2xlYXIgdGhlIFwibm90QWxsQ2FzZUZsYWdTdGFnZXNDb21wbGV0ZWRcIiBlcnJvclxuICAgICAgdGhpcy5hbGxDYXNlRmxhZ1N0YWdlc0NvbXBsZXRlZCA9IHRydWU7XG4gICAgICB0aGlzLmZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICB0aGlzLmNhc2VFZGl0RGF0YVNlcnZpY2Uuc2V0VHJpZ2dlclN1Ym1pdEV2ZW50KHRydWUpO1xuICAgICAgLy8gVXBkYXRlIHRoaXMuc2VsZWN0ZWRGbGFnc0xvY2F0aW9uIHdpdGggdGhlIGNvcnJlY3RseSBkZXRlcm1pbmVkIGxvY2F0aW9uLCBzbyB0aGUgY29ycmVjdCB2YWx1ZSBpcyBhdmFpbGFibGUgdG9cbiAgICAgIC8vIFJlYWRDYXNlRmxhZ0ZpZWxkQ29tcG9uZW50IHdoZW4gaXQgaW5pdGlhbGlzZXMgdGhlIENhc2UgRmxhZyBTdW1tYXJ5IHBhZ2VcbiAgICAgIHRoaXMuc2VsZWN0ZWRGbGFnc0xvY2F0aW9uID0gdGhpcy5kZXRlcm1pbmVkTG9jYXRpb247XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMubXVsdGlwYWdlQ29tcG9uZW50U3RhdGVTZXJ2aWNlLnNldEpvdXJuZXlTdGF0ZSh0aGlzKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9wc3RhdGUnLCB0aGlzLmhhbmRsZUJhY2tCdXR0b24pO1xuICAgIC8vIFJlc2V0IHRoZSBmaWVsZHN0YXRlVG9OYXZpZ2F0ZSBhcyB0aGUgd3JpdGUgam91cm5leSBjb21wbGV0ZXMgYXQgdGhpcyBwb2ludFxuICAgIHRoaXMuY2FzZUZsYWdTdGF0ZVNlcnZpY2UuZmllbGRTdGF0ZVRvTmF2aWdhdGUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jYXNlVGl0bGVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1hbmFnZUZsYWdGaW5hbFN0YXRlKCkge1xuICAgIHJldHVybiB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLmdldChDYXNlRmxhZ0Zvcm1GaWVsZHMuSVNfV0VMU0hfVFJBTlNMQVRJT05fTkVFREVEKT8udmFsdWVcbiAgICAgID8gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVVBEQVRFX1dFTFNIX1RSQU5TTEFUSU9OIDogQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVVBEQVRFO1xuICB9XG5cbiAgcHVibGljIHNldERpc3BsYXlDb250ZXh0UGFyYW1ldGVyKGNhc2VGaWVsZHM6IENhc2VGaWVsZFtdKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY2FzZUZpZWxkcy5maW5kKGNhc2VGaWVsZCA9PiBGaWVsZHNVdGlscy5pc0Nhc2VGaWVsZE9mVHlwZShjYXNlRmllbGQsIFsnRmxhZ0xhdW5jaGVyJ10pKT8uZGlzcGxheV9jb250ZXh0X3BhcmFtZXRlcjtcbiAgfVxufVxuIiwiPCEtLSBFcnJvciBtZXNzYWdlIHN1bW1hcnkgLS0+XG48ZGl2ICpuZ0lmPVwiZXJyb3JNZXNzYWdlcy5sZW5ndGggPiAwXCIgY2xhc3M9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5XCIgYXJpYS1sYWJlbGxlZGJ5PVwiZXJyb3Itc3VtbWFyeS10aXRsZVwiIHJvbGU9XCJhbGVydFwiXG4gIHRhYmluZGV4PVwiLTFcIiBkYXRhLW1vZHVsZT1cImdvdnVrLWVycm9yLXN1bW1hcnlcIj5cbiAgPGgyIGNsYXNzPVwiZ292dWstZXJyb3Itc3VtbWFyeV9fdGl0bGVcIiBpZD1cImVycm9yLXN1bW1hcnktdGl0bGVcIj5cbiAgICB7eydUaGVyZSBpcyBhIHByb2JsZW0nIHwgcnB4VHJhbnNsYXRlfX1cbiAgPC9oMj5cbiAgPGRpdiAqbmdGb3I9XCJsZXQgZXJyb3JNZXNzYWdlIG9mIGVycm9yTWVzc2FnZXNcIiBjbGFzcz1cImdvdnVrLWVycm9yLXN1bW1hcnlfX2JvZHlcIj5cbiAgICA8dWwgY2xhc3M9XCJnb3Z1ay1saXN0IGdvdnVrLWVycm9yLXN1bW1hcnlfX2xpc3RcIj5cbiAgICAgIDxsaT5cbiAgICAgICAgPGEgKGNsaWNrKT1cIm5hdmlnYXRlVG9FcnJvckVsZW1lbnQoZXJyb3JNZXNzYWdlLmZpZWxkSWQpXCIgY2xhc3M9XCJ2YWxpZGF0aW9uLWVycm9yXCI+e3tlcnJvck1lc3NhZ2UuZGVzY3JpcHRpb24gfFxuICAgICAgICAgIHJweFRyYW5zbGF0ZX19PC9hPlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiAqbmdJZj1cIiFpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyVXBkYXRlXCIgY2xhc3M9XCJmb3JtLWdyb3VwXCIgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIj5cbiAgPGRpdiBjbGFzcz1cImdvdnVrLWZvcm0tZ3JvdXBcIiBbbmdTd2l0Y2hdPVwiZmllbGRTdGF0ZVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImNhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0xPQ0FUSU9OXCI+XG4gICAgICA8Y2NkLXNlbGVjdC1mbGFnLWxvY2F0aW9uIFxuICAgICAgICAjam91cm5leUNoaWxkIFxuICAgICAgICBbZm9ybUdyb3VwXT1cImNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwXCIgXG4gICAgICAgIFtmbGFnc0RhdGFdPVwiZmxhZ3NEYXRhXCJcbiAgICAgICAgW2lzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJFeHRlcm5hbF09XCJpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyRXh0ZXJuYWxcIlxuICAgICAgICAoY2FzZUZsYWdTdGF0ZUVtaXR0ZXIpPVwib25DYXNlRmxhZ1N0YXRlRW1pdHRlZCgkZXZlbnQpXCI+XG4gICAgICA8L2NjZC1zZWxlY3QtZmxhZy1sb2NhdGlvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19UWVBFXCI+XG4gICAgICA8Y2NkLXNlbGVjdC1mbGFnLXR5cGUgXG4gICAgICAgICNqb3VybmV5Q2hpbGQgXG4gICAgICAgIFtmb3JtR3JvdXBdPVwiY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXBcIiBcbiAgICAgICAgW2p1cmlzZGljdGlvbl09XCJqdXJpc2RpY3Rpb25cIlxuICAgICAgICBbY2FzZVR5cGVJZF09XCJjYXNlVHlwZUlkXCIgXG4gICAgICAgIFtobWN0c1NlcnZpY2VJZF09XCJobWN0c1NlcnZpY2VJZFwiXG4gICAgICAgIFtpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyRXh0ZXJuYWxdPVwiaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsXCJcbiAgICAgICAgW2lzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIyUG9pbnQxRW5hYmxlZF09XCJpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyMlBvaW50MUVuYWJsZWRcIlxuICAgICAgICBbc2VsZWN0ZWRGbGFnc0xvY2F0aW9uXT1cInNlbGVjdGVkRmxhZ3NMb2NhdGlvblwiIFxuICAgICAgICAoY2FzZUZsYWdTdGF0ZUVtaXR0ZXIpPVwib25DYXNlRmxhZ1N0YXRlRW1pdHRlZCgkZXZlbnQpXCJcbiAgICAgICAgKGZsYWdDb21tZW50c09wdGlvbmFsRW1pdHRlcik9XCJvbkZsYWdDb21tZW50c09wdGlvbmFsRW1pdHRlZCgkZXZlbnQpXCJcbiAgICAgICAgKGZsYWdUeXBlU3ViSm91cm5leUVtaXR0ZXIpPVwidXBkYXRlRmxhZ1R5cGVTdWJKb3VybmV5KCRldmVudClcIj5cbiAgICAgIDwvY2NkLXNlbGVjdC1mbGFnLXR5cGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfTEFOR1VBR0VfSU5URVJQUkVURVJcIj5cbiAgICAgIDxjY2Qtc2VhcmNoLWxhbmd1YWdlLWludGVycHJldGVyIFxuICAgICAgICAjam91cm5leUNoaWxkIFxuICAgICAgICBbZm9ybUdyb3VwXT1cImNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwXCIgXG4gICAgICAgIFtmbGFnVHlwZV09XCJmbGFnVHlwZVwiIFxuICAgICAgICAoY2FzZUZsYWdTdGF0ZUVtaXR0ZXIpPVwib25DYXNlRmxhZ1N0YXRlRW1pdHRlZCgkZXZlbnQpXCI+XG4gICAgICA8L2NjZC1zZWFyY2gtbGFuZ3VhZ2UtaW50ZXJwcmV0ZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfQ09NTUVOVFNcIj5cbiAgICAgIDxjY2QtYWRkLWNvbW1lbnRzIFxuICAgICAgICAjam91cm5leUNoaWxkIFxuICAgICAgICBbZm9ybUdyb3VwXT1cImNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwXCIgXG4gICAgICAgIFtvcHRpb25hbF09XCJmbGFnQ29tbWVudHNPcHRpb25hbFwiXG4gICAgICAgIFtpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyRXh0ZXJuYWxdPVwiaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsXCJcbiAgICAgICAgW2lzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIyUG9pbnQxRW5hYmxlZF09XCJpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyMlBvaW50MUVuYWJsZWRcIlxuICAgICAgICAoY2FzZUZsYWdTdGF0ZUVtaXR0ZXIpPVwib25DYXNlRmxhZ1N0YXRlRW1pdHRlZCgkZXZlbnQpXCI+XG4gICAgICA8L2NjZC1hZGQtY29tbWVudHM+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfU1RBVFVTXCI+XG4gICAgICA8Y2NkLWNvbmZpcm0tZmxhZy1zdGF0dXMgXG4gICAgICAgICNqb3VybmV5Q2hpbGQgXG4gICAgICAgIFtmb3JtR3JvdXBdPVwiY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXBcIlxuICAgICAgICBbZGVmYXVsdFN0YXR1c109XCJmbGFnVHlwZS5kZWZhdWx0U3RhdHVzXCIgXG4gICAgICAgIChjYXNlRmxhZ1N0YXRlRW1pdHRlcik9XCJvbkNhc2VGbGFnU3RhdGVFbWl0dGVkKCRldmVudClcIj5cbiAgICAgIDwvY2NkLWNvbmZpcm0tZmxhZy1zdGF0dXM+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwiaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlclVwZGF0ZVwiIGNsYXNzPVwiZm9ybS1ncm91cFwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XG4gIDxkaXYgY2xhc3M9XCJnb3Z1ay1mb3JtLWdyb3VwXCIgW25nU3dpdGNoXT1cImZpZWxkU3RhdGVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19NQU5BR0VfQ0FTRV9GTEFHU1wiPlxuICAgICAgPGNjZC1tYW5hZ2UtY2FzZS1mbGFncyBcbiAgICAgICAgI2pvdXJuZXlDaGlsZCBcbiAgICAgICAgW2Zvcm1Hcm91cF09XCJjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cFwiIFxuICAgICAgICBbZmxhZ3NEYXRhXT1cImZsYWdzRGF0YVwiXG4gICAgICAgIFtjYXNlVGl0bGVdPVwiY2FzZVRpdGxlXCIgXG4gICAgICAgIFtkaXNwbGF5Q29udGV4dFBhcmFtZXRlcl09XCJkaXNwbGF5Q29udGV4dFBhcmFtZXRlclwiXG4gICAgICAgIChjYXNlRmxhZ1N0YXRlRW1pdHRlcik9XCJvbkNhc2VGbGFnU3RhdGVFbWl0dGVkKCRldmVudClcIj5cbiAgICAgIDwvY2NkLW1hbmFnZS1jYXNlLWZsYWdzPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImNhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1VQREFURVwiPlxuICAgICAgPGNjZC11cGRhdGUtZmxhZyBcbiAgICAgICAgI2pvdXJuZXlDaGlsZCBcbiAgICAgICAgW2Zvcm1Hcm91cF09XCJjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cFwiXG4gICAgICAgIFtkaXNwbGF5Q29udGV4dFBhcmFtZXRlcl09XCJkaXNwbGF5Q29udGV4dFBhcmFtZXRlclwiIFxuICAgICAgICAoY2FzZUZsYWdTdGF0ZUVtaXR0ZXIpPVwib25DYXNlRmxhZ1N0YXRlRW1pdHRlZCgkZXZlbnQpXCI+XG4gICAgICA8L2NjZC11cGRhdGUtZmxhZz5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19VUERBVEVfV0VMU0hfVFJBTlNMQVRJT05cIj5cbiAgICAgIDxjY2QtdXBkYXRlLWZsYWctYWRkLXRyYW5zbGF0aW9uLWZvcm0gXG4gICAgICAgICNqb3VybmV5Q2hpbGQgXG4gICAgICAgIFtmb3JtR3JvdXBdPVwiY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXBcIlxuICAgICAgICAoY2FzZUZsYWdTdGF0ZUVtaXR0ZXIpPVwib25DYXNlRmxhZ1N0YXRlRW1pdHRlZCgkZXZlbnQpXCI+XG4gICAgICA8L2NjZC11cGRhdGUtZmxhZy1hZGQtdHJhbnNsYXRpb24tZm9ybT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj4iXX0=
805
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGUtY2FzZS1mbGFnLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9wYWxldHRlL2Nhc2UtZmxhZy93cml0ZS1jYXNlLWZsYWctZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvY2FzZS1mbGFnL3dyaXRlLWNhc2UtZmxhZy1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQW1CLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFHN0YsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXZELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQzFHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxTQUFTLENBQUM7Ozs7Ozs7OztJQ0poSSxBQURGLEFBREYsQUFE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MkJBQ0UsMkJBQTJCOztrRkFJMUIsMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFJweFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJ3JweC14dWktdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDYXNlRWRpdERhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9ucy9jYXNlLWVkaXQtZGF0YS9jYXNlLWVkaXQtZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IENhc2VGaWVsZCwgRXJyb3JNZXNzYWdlLCBKb3VybmV5IH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluJztcbmltcG9ydCB7IEZsYWdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluL2Nhc2UtZmxhZyc7XG5pbXBvcnQgeyBGaWVsZHNVdGlscyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZpZWxkcyc7XG5pbXBvcnQgeyBDYXNlRmxhZ1N0YXRlLCBGbGFnRGV0YWlsLCBGbGFnRGV0YWlsRGlzcGxheVdpdGhGb3JtR3JvdXBQYXRoLCBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoIH0gZnJvbSAnLi9kb21haW4nO1xuaW1wb3J0IHsgTXVsdGlwYWdlQ29tcG9uZW50U3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgQWJzdHJhY3RGaWVsZFdyaXRlSm91cm5leUNvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2UtZmllbGQvYWJzdHJhY3QtZmllbGQtd3JpdGUtam91cm5leS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FzZUZsYWdTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jYXNlLWVkaXRvci9zZXJ2aWNlcy9jYXNlLWZsYWctc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLCBDYXNlRmxhZ0Vycm9yTWVzc2FnZSwgQ2FzZUZsYWdGaWVsZFN0YXRlLCBDYXNlRmxhZ0Zvcm1GaWVsZHMsIENhc2VGbGFnU3RhdHVzIH0gZnJvbSAnLi9lbnVtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjZC13cml0ZS1jYXNlLWZsYWctZmllbGQnLFxuICB0ZW1wbGF0ZVVybDogJy4vd3JpdGUtY2FzZS1mbGFnLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vd3JpdGUtY2FzZS1mbGFnLWZpZWxkLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgV3JpdGVDYXNlRmxhZ0ZpZWxkQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RGaWVsZFdyaXRlSm91cm5leUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBKb3VybmV5IHtcbiAgLy9wdWJsaWMgZm9ybUdyb3VwOiBGb3JtR3JvdXA7XG4gIHB1YmxpYyBmaWVsZFN0YXRlOiBudW1iZXI7XG4gIHB1YmxpYyBjYXNlRmxhZ0ZpZWxkU3RhdGUgPSBDYXNlRmxhZ0ZpZWxkU3RhdGU7XG4gIHB1YmxpYyBlcnJvck1lc3NhZ2VzOiBFcnJvck1lc3NhZ2VbXSA9IFtdO1xuICBwdWJsaWMgZmxhZ3NEYXRhOiBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoW107XG4gIHB1YmxpYyBzZWxlY3RlZEZsYWc6IEZsYWdEZXRhaWxEaXNwbGF5V2l0aEZvcm1Hcm91cFBhdGg7XG4gIHB1YmxpYyBjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cDogRm9ybUdyb3VwO1xuICBwdWJsaWMgZmxhZ0NvbW1lbnRzT3B0aW9uYWwgPSBmYWxzZTtcbiAgcHVibGljIGp1cmlzZGljdGlvbjogc3RyaW5nO1xuICBwdWJsaWMgY2FzZVR5cGVJZDogc3RyaW5nO1xuICBwdWJsaWMgaG1jdHNTZXJ2aWNlSWQ6IHN0cmluZztcbiAgcHVibGljIGlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJVcGRhdGU6IGJvb2xlYW47XG4gIHB1YmxpYyBpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyRXh0ZXJuYWw6IGJvb2xlYW47XG4gIHB1YmxpYyBpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyMlBvaW50MUVuYWJsZWQ6IGJvb2xlYW47XG4gIHB1YmxpYyBjYXNlVGl0bGU6IHN0cmluZztcbiAgcHVibGljIGNhc2VUaXRsZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgZGlzcGxheUNvbnRleHRQYXJhbWV0ZXI6IHN0cmluZztcbiAgcHVibGljIGRldGVybWluZWRMb2NhdGlvbjogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aDtcbiAgcHJpdmF0ZSBhbGxDYXNlRmxhZ1N0YWdlc0NvbXBsZXRlZCA9IGZhbHNlO1xuICBwdWJsaWMgbmF2aWdhdGVkVG8gPSBmYWxzZTtcbiAgLy8gQ29kZSBmb3IgXCJPdGhlclwiIGZsYWcgdHlwZSBhcyBkZWZpbmVkIGluIFJlZmVyZW5jZSBEYXRhXG4gIHByaXZhdGUgcmVhZG9ubHkgb3RoZXJGbGFnVHlwZUNvZGUgPSAnT1QwMDAxJztcbiAgcHJpdmF0ZSByZWFkb25seSBzZWxlY3RlZE1hbmFnZUNhc2VMb2NhdGlvbiA9ICdzZWxlY3RlZE1hbmFnZUNhc2VMb2NhdGlvbic7XG4gIHB1YmxpYyByZWFkb25seSBjYXNlTmFtZU1pc3NpbmcgPSAnQ2FzZSBuYW1lIG1pc3NpbmcnO1xuICBmbGFnVHlwZVN1YkpvdXJuZXlJbmRleDogYW55O1xuXG4gIHB1YmxpYyBnZXQgZmxhZ1R5cGUoKTogRmxhZ1R5cGUgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cD8udmFsdWUuZmxhZ1R5cGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkRmxhZ3NMb2NhdGlvbigpOiBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXA/LnZhbHVlLnNlbGVjdGVkTG9jYXRpb247XG4gIH1cblxuICBwdWJsaWMgc2V0IHNlbGVjdGVkRmxhZ3NMb2NhdGlvbihzZWxlY3RlZExvY2F0aW9uOiBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoIHwgbnVsbCkge1xuICAgIGlmICh0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwKSB7XG4gICAgICB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLnZhbHVlLnNlbGVjdGVkTG9jYXRpb24gPSBzZWxlY3RlZExvY2F0aW9uO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FzZUVkaXREYXRhU2VydmljZTogQ2FzZUVkaXREYXRhU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhc2VGbGFnU3RhdGVTZXJ2aWNlOiBDYXNlRmxhZ1N0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJweFRyYW5zbGF0aW9uU2VydmljZTogUnB4VHJhbnNsYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgbXVsdGlwYWdlQ29tcG9uZW50U3RhdGVTZXJ2aWNlOiBNdWx0aXBhZ2VDb21wb25lbnRTdGF0ZVNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIobXVsdGlwYWdlQ29tcG9uZW50U3RhdGVTZXJ2aWNlKTtcbiAgICB0aGlzLmhhbmRsZUJhY2tCdXR0b24gPSB0aGlzLmhhbmRsZUJhY2tCdXR0b24uYmluZCh0aGlzKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCB0cmlnVXJsID0gbG9jYXRpb24uaHJlZjtcbiAgICB0aGlzLmFkZFN0YXRlKG51bGwsIHRoaXMucm91dGVyLnVybC5zcGxpdCgnLycpLnNwbGljZSgwLCB0aGlzLnJvdXRlci51cmwuc3BsaXQoJy8nKS5pbmRleE9mKCd0cmlnZ2VyJykpLmpvaW4oJy8nKSk7XG4gICAgdGhpcy5hZGRTdGF0ZSgwLCB0cmlnVXJsKTtcbiAgICAvLyBJZiBpdCBpcyBzdGFydCBvZiB0aGUgam91cm5leSBvciBuYXZpZ2F0aW9uIGZyb20gY2hlY2sgeW91ciBhbnN3ZXJzIHBhZ2UgdGhlbiBmaWVsZFN0YXRlVG9OYXZpZ2F0ZSBwcm9wZXJ0eVxuICAgIC8vIGluIGNhc2UgZmxhZyBzdGF0ZSBzZXJ2aWNlIHdpbGwgY29udGFpbiB0aGUgZmllbGQgc3RhdGUgdG8gbmF2aWdhdGUgYmFzZWQgb24gY3JlYXRlIG9yIG1hbmFnZSBqb3VybmV5XG4gICAgdGhpcy5maWVsZFN0YXRlID0gdGhpcy5jYXNlRmxhZ1N0YXRlU2VydmljZS5maWVsZFN0YXRlVG9OYXZpZ2F0ZTtcbiAgICBpZiAodGhpcy5maWVsZFN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zO1xuICAgICAgLy8gQ2xlYXIgdGhlIGZvcm0gZ3JvdXAsIGZpZWxkIHN0YXRlIHRvIG5hdmlnYXRlIGFuZCBzZXQgdGhlIHBhZ2UgbG9jYXRpb25cbiAgICAgIHRoaXMuY2FzZUZsYWdTdGF0ZVNlcnZpY2UucmVzZXRDYWNoZShgLi4vJHtwYXJhbXNbJ2VpZCddfS8ke3BhcmFtc1sncGFnZSddfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5hdmlnYXRlZFRvID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBSZWFzc2lnbiB0aGUgZm9ybSBncm91cCBmcm9tIHRoZSBjYXNlIGZsYWcgc3RhdGUgc2VydmljZVxuICAgIHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAgPSB0aGlzLmNhc2VGbGFnU3RhdGVTZXJ2aWNlLmZvcm1Hcm91cDtcbiAgICAvLyBDbGVhciBmb3JtIHZhbGlkYXRpb24gZXJyb3JzIGFzIGEgbmV3IHBhZ2Ugd2lsbCBiZSByZW5kZXJlZCBiYXNlZCBvbiBmaWVsZCBzdGF0ZVxuICAgIHRoaXMuY2FzZUVkaXREYXRhU2VydmljZS5jbGVhckZvcm1WYWxpZGF0aW9uRXJyb3JzKCk7XG4gICAgLy8gQ2hlY2sgZm9yIGV4aXN0aW5nIEZsYWdMYXVuY2hlciBjb250cm9sIGluIHBhcmVudCBhbmQgcmVtb3ZlIGl0IC0gdGhpcyBpcyB0aGUgb25seSB3YXkgdG8gZW5zdXJlIGl0cyBpbnZhbGlkaXR5XG4gICAgLy8gaXMgc2V0IGNvcnJlY3RseSBhdCB0aGUgc3RhcnQsIHdoZW4gdGhlIGNvbXBvbmVudCBpcyByZWxvYWRlZCBhbmQgdGhlIGNvbnRyb2wgaXMgcmUtcmVnaXN0ZXJlZC4gT3RoZXJ3aXNlLCB0aGVcbiAgICAvLyB2YWxpZGF0b3Igc3RhdGUgZ2V0cyBjYXJyaWVkIG92ZXJcbiAgICBpZiAodGhpcy5mb3JtR3JvdXAgJiYgdGhpcy5mb3JtR3JvdXAuZ2V0KHRoaXMuY2FzZUZpZWxkLmlkKSkge1xuICAgICAgdGhpcy5mb3JtR3JvdXAucmVtb3ZlQ29udHJvbCh0aGlzLmNhc2VGaWVsZC5pZCk7XG4gICAgfVxuICAgIC8vIEZyb20gdGhpcyBwb2ludCwgdGhpcy5mb3JtR3JvdXAgcmVmZXJzIHRvIHRoZSBGb3JtR3JvdXAgZm9yIHRoZSBGbGFnTGF1bmNoZXIgZmllbGQsIG5vdCB0aGUgcGFyZW50IEZvcm1Hcm91cFxuICAgIHRoaXMuZm9ybUdyb3VwID0gdGhpcy5yZWdpc3RlckNvbnRyb2wobmV3IEZvcm1Hcm91cCh7fSwge1xuICAgICAgdmFsaWRhdG9yczogKF86IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9IHwgbnVsbCA9PiB7XG4gICAgICAgIGlmICghdGhpcy5hbGxDYXNlRmxhZ1N0YWdlc0NvbXBsZXRlZCkge1xuICAgICAgICAgIC8vIFJldHVybiBhbiBlcnJvciB0byBtYXJrIHRoZSBGb3JtR3JvdXAgYXMgaW52YWxpZCBpZiBub3QgYWxsIENhc2UgRmxhZyBzdGFnZXMgaGF2ZSBiZWVuIGNvbXBsZXRlZFxuICAgICAgICAgIHJldHVybiB7IG5vdEFsbENhc2VGbGFnU3RhZ2VzQ29tcGxldGVkOiB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSksIHRydWUpIGFzIEZvcm1Hcm91cDtcblxuICAgIC8vIEdldCB0aGUgY2FzZSB0eXBlIElEIGZyb20gdGhlIENhc2VWaWV3IG9iamVjdCBpbiB0aGUgc25hcHNob3QgZGF0YSAocmVxdWlyZWQgZm9yIHJldHJpZXZpbmcgdGhlIGF2YWlsYWJsZSBmbGFnXG4gICAgLy8gdHlwZXMgZm9yIGEgY2FzZSlcbiAgICBpZiAodGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmNhc2UgJiYgdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmNhc2UuY2FzZV90eXBlKSB7XG4gICAgICB0aGlzLmNhc2VUeXBlSWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuY2FzZS5jYXNlX3R5cGUuaWQ7XG4gICAgICAvLyBHZXQgdGhlIGp1cmlzZGljdGlvbiAocmVxdWlyZWQgZm9yIHJldHJpZXZpbmcgdGhlIGF2YWlsYWJsZSBmbGFnIHR5cGVzIGlmIHVuYWJsZSB0byBkZXRlcm1pbmUgdXNpbmcgY2FzZSB0eXBlIElEKVxuICAgICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5jYXNlLmNhc2VfdHlwZS5qdXJpc2RpY3Rpb24pIHtcbiAgICAgICAgdGhpcy5qdXJpc2RpY3Rpb24gPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuY2FzZS5jYXNlX3R5cGUuanVyaXNkaWN0aW9uLmlkO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBFeHRyYWN0IGFsbCBmbGFncy1yZWxhdGVkIGRhdGEgZnJvbSB0aGUgQ2FzZUV2ZW50VHJpZ2dlciBvYmplY3QgaW4gdGhlIHNuYXBzaG90IGRhdGFcbiAgICBpZiAodGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmV2ZW50VHJpZ2dlcikge1xuICAgICAgLy8gR2V0IHRoZSBITUNUU1NlcnZpY2VJZCBmcm9tIHN1cHBsZW1lbnRhcnkgZGF0YSwgaWYgaXQgZXhpc3RzIChyZXF1aXJlZCBmb3IgcmV0cmlldmluZyB0aGUgYXZhaWxhYmxlIGZsYWcgdHlwZXMgaW5cbiAgICAgIC8vIHRoZSBmaXJzdCBpbnN0YW5jZSwgb25seSBmYWxsaW5nIGJhY2sgb24gY2FzZSB0eXBlIElEIG9yIGp1cmlzZGljdGlvbiBpZiBpdCdzIG5vdCBwcmVzZW50KVxuICAgICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5ldmVudFRyaWdnZXIuc3VwcGxlbWVudGFyeV9kYXRhXG4gICAgICAgICYmIHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5ldmVudFRyaWdnZXIuc3VwcGxlbWVudGFyeV9kYXRhLkhNQ1RTU2VydmljZUlkKSB7XG4gICAgICAgIHRoaXMuaG1jdHNTZXJ2aWNlSWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuZXZlbnRUcmlnZ2VyLnN1cHBsZW1lbnRhcnlfZGF0YS5ITUNUU1NlcnZpY2VJZDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5ldmVudFRyaWdnZXIuY2FzZV9maWVsZHMpIHtcbiAgICAgICAgLy8gdGhlcmUgaXMgYW4gZWRnZSBjYXNlIGluIHRoZSBuYXZpZ2F0aW9uIHdoZW4gZ29pbmcgYmFjaywgc29tZXRpbWVzIHRoZSBjYXNlX2ZpbGVkcyB3aWxsIGxvc2UgdmFsdWVzIGluIHRoZSB2YWx1ZXMgd2hpY2ggY2F1c2VzIHRoZSBmbG93IHRvIGJyZWFrIGJlZm9yZSBDWUFcbiAgICAgICAgLy8gYmVsb3cgZnVuY2l0b24gZW5zdXJlcyBhbGwgZGF0YSBpcyBjb3JyZWN0bHkgc2V0LlxuICAgICAgICBjb25zdCBmbGFnRGF0YSA9IHRoaXMudmFsaWRhdGVDYXNlRmllbGRzKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5ldmVudFRyaWdnZXIuY2FzZV9maWVsZHMpO1xuICAgICAgICB0aGlzLmZsYWdzRGF0YSA9ICh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzIGFzIENhc2VGaWVsZFtdKVxuICAgICAgICAgIC5yZWR1Y2UoKGZsYWdzOiBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoW10sIGNhc2VGaWVsZDogQ2FzZUZpZWxkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gRmllbGRzVXRpbHMuZXh0cmFjdEZsYWdzRGF0YUZyb21DYXNlRmllbGQoZmxhZ3MsIGNhc2VGaWVsZCwgY2FzZUZpZWxkLmlkLCBjYXNlRmllbGQpO1xuICAgICAgICAgIH0sIFtdIGFzIEZsYWdzV2l0aEZvcm1Hcm91cFBhdGhbXSk7XG5cbiAgICAgICAgLy8gU2V0IGRpc3BsYXlDb250ZXh0UGFyYW1ldGVyICh0byBiZSBwYXNzZWQgYXMgYW4gaW5wdXQgdG8gTWFuYWdlQ2FzZUZsYWdzQ29tcG9uZW50IGZvciBzZXR0aW5nIGNvcnJlY3QgdGl0bGUpXG4gICAgICAgIHRoaXMuZGlzcGxheUNvbnRleHRQYXJhbWV0ZXIgPVxuICAgICAgICAgIHRoaXMuc2V0RGlzcGxheUNvbnRleHRQYXJhbWV0ZXIoZmxhZ0RhdGEgYXMgQ2FzZUZpZWxkW10pO1xuXG4gICAgICAgIC8vIFNldCBib29sZWFuIGluZGljYXRpbmcgdGhlIGRpc3BsYXlfY29udGV4dF9wYXJhbWV0ZXIgaXMgXCJ1cGRhdGVcIlxuICAgICAgICB0aGlzLmlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJVcGRhdGUgPSB0aGlzLnNldERpc3BsYXlDb250ZXh0UGFyYW1ldGVyVXBkYXRlKHRoaXMuZGlzcGxheUNvbnRleHRQYXJhbWV0ZXIpO1xuXG4gICAgICAgIC8vIFNldCBib29sZWFuIGluZGljYXRpbmcgdGhlIGRpc3BsYXlfY29udGV4dF9wYXJhbWV0ZXIgaXMgXCJleHRlcm5hbFwiXG4gICAgICAgIHRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsID0gdGhpcy5zZXREaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsKHRoaXMuZGlzcGxheUNvbnRleHRQYXJhbWV0ZXIpO1xuXG4gICAgICAgIC8vIFNldCBib29sZWFuIGluZGljYXRpbmcgdGhlIGRpc3BsYXlfY29udGV4dF9wYXJhbWV0ZXIgaXMgQ2FzZSBGbGFncyB2Mi4xIGVuYWJsZWRcbiAgICAgICAgdGhpcy5pc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyMlBvaW50MUVuYWJsZWQgPSB0aGlzLnNldERpc3BsYXlDb250ZXh0UGFyYW1ldGVyMlBvaW50MUVuYWJsZWQodGhpcy5kaXNwbGF5Q29udGV4dFBhcmFtZXRlcik7XG5cbiAgICAgICAgLy8gU2V0IHN0YXJ0aW5nIGZpZWxkIHN0YXRlIGlmIGZpZWxkU3RhdGUgbm90IHRoZSByaWdodCB2YWx1ZVxuICAgICAgICBpZiAoIXRoaXMuZmllbGRTdGF0ZSkge1xuICAgICAgICAgIHRoaXMuZmllbGRTdGF0ZSA9IHRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlclVwZGF0ZSA/IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX01BTkFHRV9DQVNFX0ZMQUdTIDogQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfTE9DQVRJT047XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgY2FzZSB0aXRsZSwgdG8gYmUgdXNlZCBieSBjaGlsZCBjb21wb25lbnRzXG4gICAgICAgIHRoaXMuY2FzZVRpdGxlU3Vic2NyaXB0aW9uID0gdGhpcy5jYXNlRWRpdERhdGFTZXJ2aWNlLmNhc2VUaXRsZSQuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiB0aXRsZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNhc2VUaXRsZSA9IHRpdGxlPy5sZW5ndGggPiAwID8gdGl0bGUgOiB0aGlzLmNhc2VOYW1lTWlzc2luZztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENTRkQtMTYuXG4gICAgLy8gU2V0dXAgdGhlIHBhZ2UgbnVtYmVyIHRvIGluaXRpYWxseSBiZSB0aGUgc2FtZSB2YWx1ZSBhcyBcbiAgICAvLyB0aGUgc3RhcnQgcGFnZSBudW1iZXIuIFByb3ZpZGVkIHRoYXQgc29tZSBzdGF0ZSBleGlzdHMgd2l0aGluIFxuICAgIC8vIHRoZSBwYWdlIHN0YXRlIHNlcnZpY2UsIHVzZSB0aGF0IGluc3RhZWFkLlxuICAgIC8vXG4gICAgLy8gSWYgaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlclVwZGF0ZSBpcyB0cnVlLCB0aGVuIHRoZSBzdGFydGluZyBwYWdlIG11c3QgYmUgXG4gICAgLy8gdGhlIHZhbHVlIG9mIDQuIE90aGVyd2lzZSwgaXQncyAwLiBIb3dldmVyLCB3ZSdyZSB1c2luZyBhbiBlbnVtIHRvIHNpbXBsaWZ5XG4gICAgLy8gdGhpcyBwcm9jZXNzLlxuICAgIC8vXG4gICAgLy8gSXQgbWlnaHQgaGVscCB0byB0YWtlIGEgbG9vayBhdCB0aGUgdGVtcGxhdGUgZmlsZS4gXG4gICAgaWYgKHRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlclVwZGF0ZSkge1xuICAgICAgdGhpcy5qb3VybmV5U3RhcnRQYWdlTnVtYmVyID0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfTUFOQUdFX0NBU0VfRkxBR1M7XG4gICAgICB0aGlzLmpvdXJuZXlFbmRQYWdlTnVtYmVyID0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVVBEQVRFX1dFTFNIX1RSQU5TTEFUSU9OO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmpvdXJuZXlTdGFydFBhZ2VOdW1iZXIgPSBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19MT0NBVElPTjtcbiAgICAgIHRoaXMuam91cm5leUVuZFBhZ2VOdW1iZXIgPSBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19TVEFUVVM7XG4gICAgfVxuXG4gICAgLy8gTm93IHRoYXQgd2UndmUgc2V0IHRoZSBzdGFydCBwYWdlIG51bWJlciwgbGV0J3Mgc2V0IHRoZSBjdXJyZW50IHBhZ2UgbnVtYmVyLiBcbiAgICB0aGlzLmpvdXJuZXlQYWdlTnVtYmVyID0gdGhpcy5qb3VybmV5U3RhcnRQYWdlTnVtYmVyO1xuXG4gICAgLy8gSWYgd2UndmUgbmF2aWdhdGVkIHRvIHRoaXMgcGFnZSwgdGhlbiB3ZSBrbm93IGJ5IGRlZmF1bHQsIHdlIHdhbnQgdG8gc2V0IHRoZSBcbiAgICAvLyBqb3VybmV5IHBhZ2UgbnVtYmVyIHRvIHRoZSBmaWVsZCBzdGF0ZS4gXG4gICAgaWYgKHRoaXMubmF2aWdhdGVkVG8pIHtcbiAgICAgIGNvbnN0IHBhZ2VObyA9IHRoaXMuZmllbGRTdGF0ZSA9PT0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfU1RBVFVTID8gdGhpcy5maWVsZFN0YXRlIC0xIDogdGhpcy5maWVsZFN0YXRlO1xuICAgICAgdGhpcy5qb3VybmV5UGFnZU51bWJlciA9IHBhZ2VObztcbiAgICAgIHRoaXMuam91cm5leVByZXZpb3VzUGFnZU51bWJlciA9IHBhZ2VObysxO1xuICAgIH1cblxuICAgIC8vIFByb3ZpZGVkIHdlIGhhdmUgc29tZSBzdG9yZWQgc3RhdGUsIGkuZS4gd2hlbiBnb2luZyBiYWNrd2FyZHMsIHdlIHdhbnQgXG4gICAgLy8gdG8gZ2V0IHRoZSBsYXN0IHZpc2l0ZWQgcGFnZSwgZXRjLiBcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMubXVsdGlwYWdlQ29tcG9uZW50U3RhdGVTZXJ2aWNlLmdldEpvdXJuZXlTdGF0ZSh0aGlzKTtcblxuICAgIGlmIChzdGF0ZSkge1xuICAgICAgY29uc3QgeyBqb3VybmV5UGFnZU51bWJlciwgam91cm5leVN0YXJ0UGFnZU51bWJlciwgam91cm5leUVuZFBhZ2VOdW1iZXIgfSA9IHN0YXRlO1xuXG4gICAgICB0aGlzLmpvdXJuZXlQYWdlTnVtYmVyID0gam91cm5leVBhZ2VOdW1iZXI7XG4gICAgICB0aGlzLmpvdXJuZXlTdGFydFBhZ2VOdW1iZXIgPSBqb3VybmV5U3RhcnRQYWdlTnVtYmVyO1xuICAgICAgdGhpcy5qb3VybmV5RW5kUGFnZU51bWJlciA9IGpvdXJuZXlFbmRQYWdlTnVtYmVyO1xuICAgIH1cblxuICAgIHRoaXMubXVsdGlwYWdlQ29tcG9uZW50U3RhdGVTZXJ2aWNlLmlzQXRTdGFydCA9IHRoaXMuam91cm5leVBhZ2VOdW1iZXIgPT09IHRoaXMuam91cm5leVN0YXJ0UGFnZU51bWJlcjtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9wc3RhdGUnLCB0aGlzLmhhbmRsZUJhY2tCdXR0b24pO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZUJhY2tCdXR0b24oZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICh0aGlzLmZpZWxkU3RhdGUgPT09IDApIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLnJvdXRlci51cmwuc3BsaXQoJy8nKS5zcGxpY2UoMCwgdGhpcy5yb3V0ZXIudXJsLnNwbGl0KCcvJykuaW5kZXhPZigndHJpZ2dlcicpKS5qb2luKCcvJyldKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZmllbGRTdGF0ZSA9PT0gMSAmJiB0aGlzLmZsYWdUeXBlU3ViSm91cm5leUluZGV4ID09PSAwKSB7XG4gICAgICB0aGlzLnByZXZpb3VzUGFnZSgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5maWVsZFN0YXRlICE9PSAxKSB7XG4gICAgICB0aGlzLnByZXZpb3VzUGFnZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhZGRTdGF0ZShkYXRhLCB1cmw/KTogdm9pZCB7XG4gICAgaGlzdG9yeS5wdXNoU3RhdGUoZGF0YSwgJycsIHVybCk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlRmxhZ1R5cGVTdWJKb3VybmV5KGV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5mbGFnVHlwZVN1YkpvdXJuZXlJbmRleCA9IGV2ZW50O1xuICB9XG5cbiAgdmFsaWRhdGVDYXNlRmllbGRzKGNhc2VGaWVsZHMpIHtcbiAgICBjYXNlRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICBpZiAoZmllbGQuZm9ybWF0dGVkX3ZhbHVlKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKGZpZWxkLmZvcm1hdHRlZF92YWx1ZSkuZm9yRWFjaCgodmFsdWVLZXkpID0+IHtcbiAgICAgICAgICBpZiAoZmllbGQuZm9ybWF0dGVkX3ZhbHVlW3ZhbHVlS2V5XSAhPT0gZmllbGQudmFsdWVbdmFsdWVLZXldKSB7XG4gICAgICAgICAgICBmaWVsZC52YWx1ZVt2YWx1ZUtleV0gPSBmaWVsZC5mb3JtYXR0ZWRfdmFsdWVbdmFsdWVLZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNhc2VGaWVsZHM7XG4gIH1cblxuICBwdWJsaWMgb25QYWdlQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMubXVsdGlwYWdlQ29tcG9uZW50U3RhdGVTZXJ2aWNlLmlzQXRTdGFydCA9IHRoaXMuZmllbGRTdGF0ZSA9PT0gdGhpcy5jYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19MT0NBVElPTjtcbiAgICB0aGlzLmFkZFN0YXRlKHRoaXMuZmllbGRTdGF0ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0RGlzcGxheUNvbnRleHRQYXJhbWV0ZXJVcGRhdGUoZGlzcGxheUNvbnRleHRQYXJhbWV0ZXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBkaXNwbGF5Q29udGV4dFBhcmFtZXRlciA9PT0gQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlci5VUERBVEUgfHxcbiAgICAgIGRpc3BsYXlDb250ZXh0UGFyYW1ldGVyID09PSBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLlVQREFURV9FWFRFUk5BTCB8fFxuICAgICAgZGlzcGxheUNvbnRleHRQYXJhbWV0ZXIgPT09IENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIuVVBEQVRFXzJfUE9JTlRfMTtcbiAgfVxuXG4gIHB1YmxpYyBzZXREaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsKGRpc3BsYXlDb250ZXh0UGFyYW1ldGVyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZGlzcGxheUNvbnRleHRQYXJhbWV0ZXIgPT09IENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIuQ1JFQVRFX0VYVEVSTkFMIHx8XG4gICAgICBkaXNwbGF5Q29udGV4dFBhcmFtZXRlciA9PT0gQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlci5VUERBVEVfRVhURVJOQUw7XG4gIH1cblxuICBwdWJsaWMgc2V0RGlzcGxheUNvbnRleHRQYXJhbWV0ZXIyUG9pbnQxRW5hYmxlZChkaXNwbGF5Q29udGV4dFBhcmFtZXRlcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGRpc3BsYXlDb250ZXh0UGFyYW1ldGVyID09PSBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLkNSRUFURV8yX1BPSU5UXzEgfHxcbiAgICAgIGRpc3BsYXlDb250ZXh0UGFyYW1ldGVyID09PSBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLlVQREFURV8yX1BPSU5UXzE7XG4gIH1cblxuICBwdWJsaWMgb25DYXNlRmxhZ1N0YXRlRW1pdHRlZChjYXNlRmxhZ1N0YXRlOiBDYXNlRmxhZ1N0YXRlKTogdm9pZCB7XG4gICAgdGhpcy5jYXNlRWRpdERhdGFTZXJ2aWNlLmNsZWFyRm9ybVZhbGlkYXRpb25FcnJvcnMoKTtcblxuICAgIHRoaXMuZXJyb3JNZXNzYWdlcyA9IGNhc2VGbGFnU3RhdGUuZXJyb3JNZXNzYWdlcztcbiAgICB0aGlzLnNlbGVjdGVkRmxhZyA9IGNhc2VGbGFnU3RhdGUuc2VsZWN0ZWRGbGFnO1xuXG4gICAgLy8gVmFsaWRhdGlvbiBzdWNjZWVkZWQ7IHByb2NlZWQgdG8gbmV4dCBzdGF0ZSBvciBmaW5hbCByZXZpZXcgc3RhZ2UgKFwiQ2hlY2sgeW91ciBhbnN3ZXJzXCIpXG4gICAgaWYgKHRoaXMuZXJyb3JNZXNzYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGlmICh0aGlzLmNhbk1vdmVUb0ZpbmFsUmV2aWV3U3RhZ2UoY2FzZUZsYWdTdGF0ZSkpIHtcbiAgICAgICAgdGhpcy5tb3ZlVG9GaW5hbFJldmlld1N0YWdlKCk7XG4gICAgICAgIC8vIERvbid0IG1vdmUgdG8gbmV4dCBzdGF0ZSBpZiBjdXJyZW50IHN0YXRlIGlzIENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1RZUEUgYW5kIHRoZSBmbGFnIHR5cGUgaXMgYSBwYXJlbnQgLSB0aGlzXG4gICAgICAgIC8vIG1lYW5zIHRoZSB1c2VyIG5lZWRzIHRvIHNlbGVjdCBmcm9tIHRoZSBuZXh0IHNldCBvZiBmbGFnIHR5cGVzIGJlZm9yZSB0aGV5IGNhbiBtb3ZlIG9uXG4gICAgICB9IGVsc2UgaWYgKCFjYXNlRmxhZ1N0YXRlLmlzUGFyZW50RmxhZ1R5cGUpIHtcbiAgICAgICAgLy8gUHJvY2VlZCB0byBuZXh0IHN0YXRlXG4gICAgICAgIHRoaXMucHJvY2VlZFRvTmV4dFN0YXRlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNhbk1vdmVUb0ZpbmFsUmV2aWV3U3RhZ2UoY2FzZUZsYWdTdGF0ZTogQ2FzZUZsYWdTdGF0ZSk6IGJvb2xlYW4ge1xuICAgIC8vIElmIHRoZSBqb3VybmV5IGlzIHJlcXVlc3Qgc3VwcG9ydCBvciBtYW5hZ2Ugc3VwcG9ydFxuICAgIC8vIGFuZCB0aGUgY3VycmVudCBzdGF0ZSBpcyBlaXRoZXIgQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfQ09NTUVOVFMgb3IgQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVVBEQVRFXG4gICAgLy8gdGhlbiBtb3ZlIHRvIGZpbmFsIHJldmlldyBzdGFnZVxuICAgIGlmICh0aGlzLmlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJFeHRlcm5hbCkge1xuICAgICAgcmV0dXJuIGNhc2VGbGFnU3RhdGUuY3VycmVudENhc2VGbGFnRmllbGRTdGF0ZSA9PT0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfQ09NTUVOVFMgfHxcbiAgICAgICAgY2FzZUZsYWdTdGF0ZS5jdXJyZW50Q2FzZUZsYWdGaWVsZFN0YXRlID09PSBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19VUERBVEU7XG4gICAgfVxuICAgIC8vIElmIHRoZSBjdXJyZW50IHN0YXRlIGlzIG9uZSBvZjpcbiAgICAvLyAqIENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1NUQVRVUyBBTkQgQ2FzZSBGbGFncyB2Mi4xIGlzIGVuYWJsZWRcbiAgICAvLyAqIENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0NPTU1FTlRTIEFORCBDYXNlIEZsYWdzIHYyLjEgaXMgbm90IGVuYWJsZWRcbiAgICAvLyAqIENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1VQREFURSBhbmQgV2Vsc2ggdHJhbnNsYXRpb24gY2hlY2tib3ggaXMgbm90IHNlbGVjdGVkXG4gICAgLy8gKiBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19VUERBVEVfV0VMU0hfVFJBTlNMQVRJT05cbiAgICAvLyB0aGVuIG1vdmUgdG8gZmluYWwgcmV2aWV3IHN0YWdlXG4gICAgcmV0dXJuIChjYXNlRmxhZ1N0YXRlLmN1cnJlbnRDYXNlRmxhZ0ZpZWxkU3RhdGUgPT09XG4gICAgICBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19TVEFUVVMgJiYgdGhpcy5pc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyMlBvaW50MUVuYWJsZWQpIHx8XG4gICAgICAoY2FzZUZsYWdTdGF0ZS5jdXJyZW50Q2FzZUZsYWdGaWVsZFN0YXRlID09PVxuICAgICAgICBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19DT01NRU5UUyAmJiAhdGhpcy5pc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyMlBvaW50MUVuYWJsZWQpIHx8XG4gICAgICAoY2FzZUZsYWdTdGF0ZS5jdXJyZW50Q2FzZUZsYWdGaWVsZFN0YXRlID09PSBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19VUERBVEUgJiZcbiAgICAgICAgIXRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAuZ2V0KENhc2VGbGFnRm9ybUZpZWxkcy5JU19XRUxTSF9UUkFOU0xBVElPTl9ORUVERUQpPy52YWx1ZSkgfHxcbiAgICAgIGNhc2VGbGFnU3RhdGUuY3VycmVudENhc2VGbGFnRmllbGRTdGF0ZSA9PT0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVVBEQVRFX1dFTFNIX1RSQU5TTEFUSU9OO1xuICB9XG5cbiAgcHVibGljIHByb2NlZWRUb05leHRTdGF0ZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNBdEZpbmFsU3RhdGUoKSkge1xuICAgICAgdGhpcy5qb3VybmV5UHJldmlvdXNQYWdlTnVtYmVyID0gdGhpcy5maWVsZFN0YXRlO1xuICAgICAgLy8gU2tpcCB0aGUgXCJsYW5ndWFnZSBpbnRlcnByZXRlclwiIHN0YXRlIGlmIGN1cnJlbnQgc3RhdGUgaXMgQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVFlQRSBhbmQgdGhlIGZsYWcgdHlwZSBkb2Vzbid0XG4gICAgICAvLyBoYXZlIGEgXCJsaXN0IG9mIHZhbHVlc1wiIC0gY3VycmVudGx5LCB0aGlzIGlzIHByZXNlbnQgb25seSBmb3IgdGhvc2UgZmxhZyB0eXBlcyB0aGF0IHJlcXVpcmUgbGFuZ3VhZ2UgaW50ZXJwcmV0ZXJcbiAgICAgIC8vIHNlbGVjdGlvblxuICAgICAgaWYgKHRoaXMuZmllbGRTdGF0ZSA9PT0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVFlQRSAmJiAhdGhpcy5mbGFnVHlwZT8ubGlzdE9mVmFsdWVzKSB7XG4gICAgICAgIHRoaXMuZmllbGRTdGF0ZSA9IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0NPTU1FTlRTO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5maWVsZFN0YXRlKys7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubmV4dFBhZ2UoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0RmxhZ3NDYXNlRmllbGRWYWx1ZSgpOiB2b2lkIHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IHN3aXRjaC1kZWZhdWx0XG4gICAgc3dpdGNoICh0aGlzLmZpZWxkU3RhdGUpIHtcbiAgICAgIGNhc2UgQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfU1RBVFVTOlxuICAgICAgICB0aGlzLmFkZEZsYWdUb0NvbGxlY3Rpb24oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0NPTU1FTlRTOlxuICAgICAgICBpZiAodGhpcy5pc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyRXh0ZXJuYWwgfHwgIXRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlcjJQb2ludDFFbmFibGVkKSB7XG4gICAgICAgICAgdGhpcy5hZGRGbGFnVG9Db2xsZWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRoaXMubWFuYWdlRmxhZ0ZpbmFsU3RhdGU6XG4gICAgICAgIHRoaXMudXBkYXRlRmxhZ0luQ29sbGVjdGlvbigpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcHJldmlvdXNQYWdlKCk6IHZvaWQge1xuICAgIC8vIGlmIHdlIGFyZSBuYXZpZ2F0aW5nIGF3YXkgZnJvbSB0aGUgcGFnZSwgd2Ugc2hvdWxkIHNldCB0aGUgZXJyb3IgbWVzc2FnZXMgdG8gZW1wdHkgc28gdGhlIG1lc3NhZ2UgZGlzc2FwZWFyc1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlcyA9IFtdO1xuICAgIHRoaXMuam91cm5leVByZXZpb3VzUGFnZU51bWJlciA9IHRoaXMuZmllbGRTdGF0ZTtcbiAgICBpZiAodGhpcy5oYXNQcmV2aW91cygpICYmIHRoaXMuZmllbGRTdGF0ZSA9PT0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfQ09NTUVOVFMgJiYgIXRoaXMuZmxhZ1R5cGU/Lmxpc3RPZlZhbHVlcykge1xuICAgICAgdGhpcy5maWVsZFN0YXRlID0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVFlQRTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaGFzUHJldmlvdXMoKSkge1xuICAgICAgdGhpcy5maWVsZFN0YXRlLS07XG4gICAgfVxuICAgIHN1cGVyLnByZXZpb3VzUGFnZSgpO1xuICB9XG5cbiAgcHVibGljIGFkZEZsYWdUb0NvbGxlY3Rpb24oKTogdm9pZCB7XG4gICAgLy8gRW5zdXJlIG5vIG1vcmUgdGhhbiBvbmUgbmV3IGZsYWcgaXMgYmVpbmcgYWRkZWQgYXQgYSB0aW1lLCBieSBpdGVyYXRpbmcgdGhyb3VnaCBlYWNoIEZsYWdzIGNhc2UgZmllbGQgYW5kIHJlbW92aW5nXG4gICAgLy8gYW55IHByZXZpb3VzIGVudHJ5IGZyb20gdGhlIGRldGFpbHMgYXJyYXkgd2hlcmUgdGhhdCBlbnRyeSBoYXMgbm8gaWQgKGhlbmNlIGl0IGlzIG5ldyAtIGFuZCB0aGVyZSBzaG91bGQgYmUgb25seVxuICAgIC8vIG9uZSBzdWNoIGVudHJ5KS4gKFRoaXMgc2NlbmFyaW8gb2NjdXJzIGlmIHRoZSB1c2VyIHJlcGVhdHMgdGhlIENhc2UgRmxhZyBjcmVhdGlvbiBqb3VybmV5IGJ5IHVzaW5nIHRoZSBcIkNoYW5nZVwiXG4gICAgLy8gbGluayBhbmQgc2VsZWN0cyBlaXRoZXIgdGhlIHNhbWUgZmxhZyBsb2NhdGlvbiBhcyBiZWZvcmUgb3IgYSBkaWZmZXJlbnQgb25lLilcbiAgICB0aGlzLmZsYWdzRGF0YS5mb3JFYWNoKGluc3RhbmNlID0+IHtcbiAgICAgIC8vIFVzZSB0aGUgcGF0aFRvRmxhZ3NGb3JtR3JvdXAgcHJvcGVydHkgZm9yIGVhY2ggRmxhZ3MgY2FzZSBmaWVsZCB0byBkcmlsbCBkb3duIHRvIHRoZSBjb3JyZWN0IHBhcnQgb2YgdGhlXG4gICAgICAvLyBDYXNlRmllbGQgdmFsdWUgdG8gcmVtb3ZlIHRoZSBuZXcgdmFsdWUgZnJvbVxuICAgICAgbGV0IHZhbHVlID0gaW5zdGFuY2UuY2FzZUZpZWxkPy52YWx1ZTtcbiAgICAgIGNvbnN0IHBhdGhUb1ZhbHVlID0gaW5zdGFuY2UucGF0aFRvRmxhZ3NGb3JtR3JvdXA7XG4gICAgICAvLyBSb290LWxldmVsIEZsYWdzIENhc2VGaWVsZHMgZG9uJ3QgaGF2ZSBhIGRvdC1kZWxpbWl0ZWQgcGF0aCAtIGp1c3QgdGhlIENhc2VGaWVsZCBJRCBpdHNlbGYgLSBzbyBkb24ndCBkcmlsbCBkb3duXG4gICAgICBpZiAocGF0aFRvVmFsdWUuaW5kZXhPZignLicpID4gLTEpIHtcbiAgICAgICAgcGF0aFRvVmFsdWUuc2xpY2UocGF0aFRvVmFsdWUuaW5kZXhPZignLicpICsgMSkuc3BsaXQoJy4nKS5mb3JFYWNoKHBhcnQgPT4gdmFsdWUgPSB2YWx1ZVtwYXJ0XSk7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWU/LmRldGFpbHM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgaW5kZXhPZk5ld0ZsYWdEZXRhaWwgPSB2YWx1ZS5kZXRhaWxzLmZpbmRJbmRleChlbGVtZW50ID0+ICFlbGVtZW50Lmhhc093blByb3BlcnR5KCdpZCcpKTtcbiAgICAgICAgaWYgKGluZGV4T2ZOZXdGbGFnRGV0YWlsID4gLTEpIHtcbiAgICAgICAgICB2YWx1ZS5kZXRhaWxzLnNwbGljZShpbmRleE9mTmV3RmxhZ0RldGFpbCwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGZvcm1WYWx1ZXMgPSB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwPy52YWx1ZTtcbiAgICAvLyBEZXRlcm1pbmUgdGhlIGNvcnJlY3QgbG9jYXRpb24gLSBpbnRlcm5hbCBvciBleHRlcm5hbCAtIGZvciB0aGUgbmV3IGZsYWcuIElmIHJldHVybmVkIGFzIHVuZGVmaW5lZCwgdGhpc1xuICAgIC8vIGluZGljYXRlcyBhIGNvbmZpZ3VyYXRpb24gZXJyb3Igd2l0aCB0aGUgZXh0ZXJuYWwgYEZsYWdzYCBvYmplY3QgaW5zdGFuY2VcbiAgICB0aGlzLmRldGVybWluZWRMb2NhdGlvbiA9XG4gICAgICB0aGlzLmRldGVybWluZUxvY2F0aW9uRm9yRmxhZyghdGhpcy5pc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyRXh0ZXJuYWwsIHRoaXMuc2VsZWN0ZWRGbGFnc0xvY2F0aW9uLCBmb3JtVmFsdWVzKTtcbiAgICAvLyBEbyBub3QgbXV0YXRlIHRoaXMuc2VsZWN0ZWRGbGFnc0xvY2F0aW9uOyBpZiB0aGlzLnNlbGVjdGVkRmxhZ3NMb2NhdGlvbiBiZWNvbWVzIHVuZGVmaW5lZCxcbiAgICAvLyBkZXRlcm1pbmVMb2NhdGlvbkZvckZsYWcoKSB3aWxsIG5vIGxvbmdlciBkbyBhbnl0aGluZyB3aGVuIGNhbGxlZCB3aXRoIGl0IC0gYW5kIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBtZXNzYWdlIHdpbGxcbiAgICAvLyBub3QgYmUgcmVkaXNwbGF5ZWQgaWYgdGhlIHVzZXIgY2xpY2tzIFwiTmV4dFwiIGFnYWluIG9uIHRoZSBcIkFkZCBjb21tZW50c1wiIHBhZ2UsIGFmdGVyIHRoZSBlcnJvciBpcyBmaXJzdCBzaG93blxuXG4gICAgaWYgKHRoaXMuZGV0ZXJtaW5lZExvY2F0aW9uKSB7XG4gICAgICBjb25zdCBwYXRoID0gdGhpcy5kZXRlcm1pbmVkTG9jYXRpb24ucGF0aFRvRmxhZ3NGb3JtR3JvdXA7XG4gICAgICBjb25zdCBmbGFnRGF0YVJlZiA9IHRoaXMuZmxhZ3NEYXRhLmZpbmQoaXRlbSA9PiBpdGVtLnBhdGhUb0ZsYWdzRm9ybUdyb3VwID09PSBwYXRoKTtcbiAgICAgIGxldCBmbGFnc0Nhc2VGaWVsZFZhbHVlID0gZmxhZ0RhdGFSZWYuY2FzZUZpZWxkPy52YWx1ZTtcbiAgICAgIC8vIFVzZSB0aGUgcGF0aFRvRmxhZ3NGb3JtR3JvdXAgcHJvcGVydHkgZnJvbSB0aGUgc2VsZWN0ZWQgZmxhZyBsb2NhdGlvbiB0byBkcmlsbCBkb3duIHRvIHRoZSBjb3JyZWN0IHBhcnQgb2YgdGhlXG4gICAgICAvLyBDYXNlRmllbGQgdmFsdWUgdG8gYXBwbHkgY2hhbmdlcyB0b1xuICAgICAgLy8gUm9vdC1sZXZlbCBGbGFncyBDYXNlRmllbGRzIGRvbid0IGhhdmUgYSBkb3QtZGVsaW1pdGVkIHBhdGggLSBqdXN0IHRoZSBDYXNlRmllbGQgSUQgaXRzZWxmIC0gc28gZG9uJ3QgZHJpbGwgZG93blxuICAgICAgaWYgKHBhdGguaW5kZXhPZignLicpID4gLTEpIHtcbiAgICAgICAgcGF0aC5zbGljZShwYXRoLmluZGV4T2YoJy4nKSArIDEpLnNwbGl0KCcuJykuZm9yRWFjaChwYXJ0ID0+IGZsYWdzQ2FzZUZpZWxkVmFsdWUgPSBmbGFnc0Nhc2VGaWVsZFZhbHVlW3BhcnRdKTtcbiAgICAgIH1cbiAgICAgIC8vIElmIHRoZSBDYXNlRmllbGQgZm9yIHRoZSBzZWxlY3RlZCBmbGFncyBsb2NhdGlvbiBoYXMgbm8gdmFsdWUsIHNldCBpdCB0byBhbiBlbXB0eSBvYmplY3Qgc28gaXQgY2FuIGJlIHBvcHVsYXRlZFxuICAgICAgLy8gd2l0aCBmbGFnIGRldGFpbHNcbiAgICAgIGlmICghZmxhZ3NDYXNlRmllbGRWYWx1ZSkge1xuICAgICAgICBmbGFnRGF0YVJlZi5jYXNlRmllbGQudmFsdWUgPSB7fTtcbiAgICAgICAgZmxhZ3NDYXNlRmllbGRWYWx1ZSA9IGZsYWdEYXRhUmVmLmNhc2VGaWVsZC52YWx1ZTtcbiAgICAgIH1cbiAgICAgIC8vIENyZWF0ZSBhIGRldGFpbHMgYXJyYXkgaWYgb25lIGRvZXMgbm90IGV4aXN0XG4gICAgICBpZiAoIWZsYWdzQ2FzZUZpZWxkVmFsdWUuaGFzT3duUHJvcGVydHkoJ2RldGFpbHMnKSkge1xuICAgICAgICBmbGFnc0Nhc2VGaWVsZFZhbHVlLmRldGFpbHMgPSBbXTtcbiAgICAgIH1cbiAgICAgIC8vIFBvcHVsYXRlIG5ldyBGbGFnRGV0YWlsIGluc3RhbmNlIGFuZCBhZGQgdG8gdGhlIEZsYWdzIGRhdGEgd2l0aGluIHRoZSBDYXNlRmllbGQgaW5zdGFuY2Ugb2YgdGhlIHNlbGVjdGVkIGZsYWdcbiAgICAgIC8vIGxvY2F0aW9uXG4gICAgICBmbGFnc0Nhc2VGaWVsZFZhbHVlLmRldGFpbHMucHVzaCh7dmFsdWU6IHRoaXMucG9wdWxhdGVOZXdGbGFnRGV0YWlsSW5zdGFuY2UoKX0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHRoZSBjb3JyZWN0IGxvY2F0aW9uIChpLmUuIGVpdGhlciB0aGUgaW50ZXJuYWwgb3IgZXh0ZXJuYWwgaW5zdGFuY2Ugb2YgYSBgRmxhZ3NgIG9iamVjdCkgZm9yIGEgbmV3IGZsYWcsXG4gICAqIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nOlxuICAgKlxuICAgKiAqIFdoZXRoZXIgdGhlIHVzZXIgaXMgaW50ZXJuYWwgb3IgZXh0ZXJuYWwgKG5vIGVmZmVjdCBmb3IgZXh0ZXJuYWwgdXNlcnMgYmVjYXVzZSB0aGV5IGNhbiBhY2Nlc3Mgb25seSB0aGUgZXh0ZXJuYWxcbiAgICogaW5zdGFuY2UpXG4gICAqICogVGhlIGV4aXN0ZW5jZSBvZiB0d28gYEZsYWdzYCBvYmplY3RzIC0gb25lIGludGVybmFsLCBvbmUgZXh0ZXJuYWwgLSBsaW5rZWQgYnkgdGhlIHNhbWUgYGdyb3VwSWRgO1xuICAgKiAqIEZvciBmbGFncyBvZiB0eXBlIFwiT3RoZXJcIiwgd2hldGhlciBcIm9ubHkgdmlzaWJsZSB0byBITUNUUyBzdGFmZlwiIGhhcyBiZWVuIHNlbGVjdGVkIG9yIG5vdCAoXCJPdGhlclwiIGRlZmF1bHRzIHRvXG4gICAqIGV4dGVybmFsbHkgdmlzaWJsZSk7XG4gICAqICogRm9yIGFsbCBvdGhlciBmbGFnIHR5cGVzLCB0aGUgdmFsdWUgb2YgdGhlIGBleHRlcm5hbGx5QXZhaWxhYmxlYCBhdHRyaWJ1dGUuXG4gICAqXG4gICAqIElmIHRoZSB1c2VyIGlzIGludGVybmFsIHRoZW4gdGhlIG5ldyBmbGFnIHNob3VsZCBiZSBhc3NpZ25lZCB0byB0aGUgZXh0ZXJuYWwgYEZsYWdzYCBpbnN0YW5jZSBpZjpcbiAgICogKiBTdWNoIGFuIGluc3RhbmNlIGV4aXN0cywgQU5EXG4gICAqICogVGhlIGZsYWcgdHlwZSBpcyBcIk90aGVyXCIgYW5kIFwib25seSB2aXNpYmxlIHRvIEhNQ1RTIHN0YWZmXCIgd2FzIG5vdCBzZWxlY3RlZCwgT1JcbiAgICogKiBUaGUgZmxhZyB0eXBlIGlzIG5vdCBcIk90aGVyXCIgYW5kIGBleHRlcm5hbGx5QXZhaWxhYmxlYCBpcyBgdHJ1ZWAuXG4gICAqXG4gICAqIEBwYXJhbSBpc0ludGVybmFsVXNlciBXaGV0aGVyIHRoZSBjdXJyZW50IHVzZXIgaXMgaW50ZXJuYWwgb3Igbm90XG4gICAqIEBwYXJhbSBzZWxlY3RlZEZsYWdzTG9jYXRpb24gVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBsb2NhdGlvbiBmb3IgdGhlIG5ldyBmbGFnXG4gICAqIEBwYXJhbSBmb3JtVmFsdWVzIEFsbCB0aGUgdmFsdWVzIGZyb20gdGhlIGBjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cGBcbiAgICogQHJldHVybnMgVGhlIGNvcnJlY3RseSBkZXRlcm1pbmVkIGxvY2F0aW9uOiBlaXRoZXIgdGhlIGludGVybmFsIG9yIGV4dGVybmFsIGxvY2F0aW9uIChpZiBvbmUgZXhpc3RzKSB3aGVyZSBhIGdyb3VwSWRcbiAgICogaXMgcHJlc2VudDsgdGhlIG9yaWdpbmFsIGxvY2F0aW9uIG90aGVyd2lzZS4gKipOb3RlOioqIElmIHRoZSBleHRlcm5hbCBsb2NhdGlvbiBpcyByZXR1cm5lZCBhcyB1bmRlZmluZWQsIHRoaXNcbiAgICogaW5kaWNhdGVzIGEgY29uZmlndXJhdGlvbiBlcnJvclxuICAgKi9cbiAgcHVibGljIGRldGVybWluZUxvY2F0aW9uRm9yRmxhZyhpc0ludGVybmFsVXNlcjogYm9vbGVhbiwgc2VsZWN0ZWRGbGFnc0xvY2F0aW9uOiBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoLFxuICAgIGZvcm1WYWx1ZXM6IGFueSk6IEZsYWdzV2l0aEZvcm1Hcm91cFBhdGgge1xuICAgIGlmIChpc0ludGVybmFsVXNlciAmJiBzZWxlY3RlZEZsYWdzTG9jYXRpb24/LmZsYWdzPy5ncm91cElkKSB7XG4gICAgICBpZiAoKGZvcm1WYWx1ZXM/LmZsYWdUeXBlPy5mbGFnQ29kZSA9PT0gdGhpcy5vdGhlckZsYWdUeXBlQ29kZSAmJiAhZm9ybVZhbHVlcz8uZmxhZ0lzVmlzaWJsZUludGVybmFsbHlPbmx5KSB8fFxuICAgICAgICAgIChmb3JtVmFsdWVzPy5mbGFnVHlwZT8uZmxhZ0NvZGUgIT09IHRoaXMub3RoZXJGbGFnVHlwZUNvZGUgJiYgZm9ybVZhbHVlcz8uZmxhZ1R5cGU/LmV4dGVybmFsbHlBdmFpbGFibGUpKSB7XG4gICAgICAgIC8vIElmIG5lY2Vzc2FyeSwgZmluZCB0aGUgY29ycmVzcG9uZGluZyBmbGFncyBvYmplY3Qgd2l0aCB0aGUgc2FtZSBncm91cElkIGFuZCBleHRlcm5hbCB2aXNpYmlsaXR5IChzaG91bGQgYmVcbiAgICAgICAgLy8gb25seSBvbmUgdW5sZXNzIG1pc2NvbmZpZ3VyZWQpXG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gc2VsZWN0ZWRGbGFnc0xvY2F0aW9uLmZsYWdzLnZpc2liaWxpdHk/LnRvTG93ZXJDYXNlKCkgPT09ICdleHRlcm5hbCdcbiAgICAgICAgICA/IHNlbGVjdGVkRmxhZ3NMb2NhdGlvblxuICAgICAgICAgIDogdGhpcy5mbGFnc0RhdGEuZmlsdGVyKFxuICAgICAgICAgICAgKGYpID0+IGYuZmxhZ3M/Lmdyb3VwSWQgPT09IHNlbGVjdGVkRmxhZ3NMb2NhdGlvbi5mbGFncy5ncm91cElkICYmXG4gICAgICAgICAgICAgICAgZi5mbGFncz8udmlzaWJpbGl0eT8udG9Mb3dlckNhc2UoKSA9PT0gJ2V4dGVybmFsJyk/LlswXTtcbiAgICAgICAgLy8gSWYgbG9jYXRpb24gaXMgbm90IHRydXRoeSwgc2V0IGFuIGVycm9yIG1lc3NhZ2UgYW5kIG1ha2UgY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAgaW52YWxpZCB0byBwcmV2ZW50XG4gICAgICAgIC8vIG5hdmlnYXRpb24gdG8gdGhlIHN1bW1hcnkgcGFnZSAoYnkgbm90IHRyaWdnZXJpbmcgdGhlIHN1Ym1pdCBldmVudClcbiAgICAgICAgaWYgKCFsb2NhdGlvbikge1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlcy5wdXNoKHtcbiAgICAgICAgICAgIHRpdGxlOiAnJyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBDYXNlRmxhZ0Vycm9yTWVzc2FnZS5OT19FWFRFUk5BTF9GTEFHU19DT0xMRUNUSU9OXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC5zZXRFcnJvcnMoe1xuICAgICAgICAgICAgbm9FeHRlcm5hbENvbGxlY3Rpb246IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9jYXRpb247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZiBuZWNlc3NhcnksIGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgZmxhZ3Mgb2JqZWN0IHdpdGggdGhlIHNhbWUgZ3JvdXBJZCBhbmQgaW50ZXJuYWwgdmlzaWJpbGl0eSAoc2hvdWxkIGJlXG4gICAgICAgIC8vIG9ubHkgb25lIHVubGVzcyBtaXNjb25maWd1cmVkKTsgYXNzdW1lZCB0byBiZSBpbnRlcm5hbCBpZiB2aXNpYmlsaXR5IGF0dHJpYnV0ZSBpcyBudWxsIG9yIHVuZGVmaW5lZFxuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHNlbGVjdGVkRmxhZ3NMb2NhdGlvbi5mbGFncy52aXNpYmlsaXR5Py50b0xvd2VyQ2FzZSgpICE9PSAnZXh0ZXJuYWwnXG4gICAgICAgICAgPyBzZWxlY3RlZEZsYWdzTG9jYXRpb25cbiAgICAgICAgICA6IHRoaXMuZmxhZ3NEYXRhLmZpbHRlcihcbiAgICAgICAgICAgIChmKSA9PiBmLmZsYWdzPy5ncm91cElkID09PSBzZWxlY3RlZEZsYWdzTG9jYXRpb24uZmxhZ3MuZ3JvdXBJZCAmJlxuICAgICAgICAgICAgICBmLmZsYWdzPy52aXNpYmlsaXR5Py50b0xvd2VyQ2FzZSgpICE9PSAnZXh0ZXJuYWwnKT8uWzBdO1xuICAgICAgICAgIC8vIElmIGxvY2F0aW9uIGlzIG5vdCB0cnV0aHksIHNldCBhbiBlcnJvciBtZXNzYWdlIGFuZCBtYWtlIGNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwIGludmFsaWQgdG8gcHJldmVudFxuICAgICAgICAgIC8vIG5hdmlnYXRpb24gdG8gdGhlIHN1bW1hcnkgcGFnZSAoYnkgbm90IHRyaWdnZXJpbmcgdGhlIHN1Ym1pdCBldmVudClcbiAgICAgICAgaWYgKCFsb2NhdGlvbikge1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlcy5wdXNoKHtcbiAgICAgICAgICAgIHRpdGxlOiAnJyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBDYXNlRmxhZ0Vycm9yTWVzc2FnZS5OT19JTlRFUk5BTF9GTEFHU19DT0xMRUNUSU9OXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC5zZXRFcnJvcnMoe1xuICAgICAgICAgICAgbm9JbnRlcm5hbENvbGxlY3Rpb246IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9jYXRpb247XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3RlZEZsYWdzTG9jYXRpb247XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlRmxhZ0luQ29sbGVjdGlvbigpOiB2b2lkIHtcbiAgICAvLyBFbnN1cmUgbm8gbW9yZSB0aGFuIG9uZSBmbGFnIGlzIGJlaW5nIHVwZGF0ZWQgYXQgYSB0aW1lLCBieSBpdGVyYXRpbmcgdGhyb3VnaCBlYWNoIEZsYWdzIGNhc2UgZmllbGQgYW5kIHJlc2V0dGluZ1xuICAgIC8vIHRoZSBkZXNjcmlwdGlvbiwgY29tbWVudHMsIHN0YXR1cywgYW5kIGRhdGUvdGltZSBtb2RpZmllZCAoaWYgcHJlc2VudCkgZm9yIGVhY2ggZW50cnkgaW4gdGhlIGRldGFpbHMgYXJyYXksIHdpdGhcbiAgICAvLyBvcmlnaW5hbCB2YWx1ZXMgZnJvbSB0aGUgY29ycmVzcG9uZGluZyBmb3JtYXR0ZWRfdmFsdWUgcHJvcGVydHkuIChUaGlzIHNjZW5hcmlvIG9jY3VycyBpZiB0aGUgdXNlciByZXBlYXRzIHRoZVxuICAgIC8vIE1hbmFnZSBDYXNlIEZsYWcgam91cm5leSBieSB1c2luZyB0aGUgXCJDaGFuZ2VcIiBsaW5rIGFuZCBzZWxlY3RzIGEgZGlmZmVyZW50IGZsYWcgdG8gdXBkYXRlLilcbiAgICB0aGlzLmZsYWdzRGF0YS5mb3JFYWNoKGluc3RhbmNlID0+IHtcbiAgICAgIC8vIFVzZSB0aGUgcGF0aFRvRmxhZ3NGb3JtR3JvdXAgcHJvcGVydHkgZm9yIGVhY2ggRmxhZ3MgY2FzZSBmaWVsZCB0byBkcmlsbCBkb3duIHRvIHRoZSBjb3JyZWN0IHBhcnQgb2YgdGhlXG4gICAgICAvLyBDYXNlRmllbGQgdmFsdWUgZm9yIHdoaWNoIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHZhbHVlc1xuICAgICAgbGV0IHZhbHVlID0gaW5zdGFuY2UuY2FzZUZpZWxkPy52YWx1ZTtcbiAgICAgIGxldCBmb3JtYXR0ZWRWYWx1ZSA9IGluc3RhbmNlLmNhc2VGaWVsZD8uZm9ybWF0dGVkX3ZhbHVlO1xuICAgICAgY29uc3QgcGF0aFRvVmFsdWUgPSBpbnN0YW5jZS5wYXRoVG9GbGFnc0Zvcm1Hcm91cDtcbiAgICAgIC8vIFJvb3QtbGV2ZWwgRmxhZ3MgQ2FzZUZpZWxkcyBkb24ndCBoYXZlIGEgZG90LWRlbGltaXRlZCBwYXRoIC0ganVzdCB0aGUgQ2FzZUZpZWxkIElEIGl0c2VsZiAtIHNvIGRvbid0IGRyaWxsIGRvd25cbiAgICAgIGlmIChwYXRoVG9WYWx1ZS5pbmRleE9mKCcuJykgPiAtMSkge1xuICAgICAgICBwYXRoVG9WYWx1ZS5zbGljZShwYXRoVG9WYWx1ZS5pbmRleE9mKCcuJykgKyAxKS5zcGxpdCgnLicpLmZvckVhY2gocGFydCA9PiB7XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZVtwYXJ0XTtcbiAgICAgICAgICBpZiAoZm9ybWF0dGVkVmFsdWUgJiYgRmllbGRzVXRpbHMuaXNOb25FbXB0eU9iamVjdChmb3JtYXR0ZWRWYWx1ZSkpIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZFZhbHVlID0gZm9ybWF0dGVkVmFsdWVbcGFydF07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZT8uZGV0YWlscz8ubGVuZ3RoID4gMCAmJiBmb3JtYXR0ZWRWYWx1ZSAmJiBGaWVsZHNVdGlscy5pc05vbkVtcHR5T2JqZWN0KGZvcm1hdHRlZFZhbHVlKSkge1xuICAgICAgICB2YWx1ZS5kZXRhaWxzLmZvckVhY2goZmxhZ0RldGFpbCA9PiB7XG4gICAgICAgICAgY29uc3Qgb3JpZ2luYWxGbGFnRGV0YWlsID0gZm9ybWF0dGVkVmFsdWUuZGV0YWlscz8uZmluZChkZXRhaWwgPT4gZGV0YWlsLmlkID09PSBmbGFnRGV0YWlsLmlkKTtcbiAgICAgICAgICBpZiAob3JpZ2luYWxGbGFnRGV0YWlsKSB7XG4gICAgICAgICAgICBmbGFnRGV0YWlsLnZhbHVlLm90aGVyRGVzY3JpcHRpb24gPSBvcmlnaW5hbEZsYWdEZXRhaWwudmFsdWU/Lm90aGVyRGVzY3JpcHRpb24gfHwgbnVsbDtcbiAgICAgICAgICAgIGZsYWdEZXRhaWwudmFsdWUub3RoZXJEZXNjcmlwdGlvbl9jeSA9IG9yaWdpbmFsRmxhZ0RldGFpbC52YWx1ZT8ub3RoZXJEZXNjcmlwdGlvbl9jeSB8fCBudWxsO1xuICAgICAgICAgICAgZmxhZ0RldGFpbC52YWx1ZS5mbGFnQ29tbWVudCA9IG9yaWdpbmFsRmxhZ0RldGFpbC52YWx1ZT8uZmxhZ0NvbW1lbnQgfHwgbnVsbDtcbiAgICAgICAgICAgIGZsYWdEZXRhaWwudmFsdWUuZmxhZ0NvbW1lbnRfY3kgPSBvcmlnaW5hbEZsYWdEZXRhaWwudmFsdWU/LmZsYWdDb21tZW50X2N5IHx8IG51bGw7XG4gICAgICAgICAgICBmbGFnRGV0YWlsLnZhbHVlLmZsYWdVcGRhdGVDb21tZW50ID0gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlPy5mbGFnVXBkYXRlQ29tbWVudCB8fCBudWxsO1xuICAgICAgICAgICAgZmxhZ0RldGFpbC52YWx1ZS5zdGF0dXMgPSBvcmlnaW5hbEZsYWdEZXRhaWwudmFsdWU/LnN0YXR1cztcbiAgICAgICAgICAgIGZsYWdEZXRhaWwudmFsdWUuZGF0ZVRpbWVNb2RpZmllZCA9IG9yaWdpbmFsRmxhZ0RldGFpbC52YWx1ZT8uZGF0ZVRpbWVNb2RpZmllZCB8fCBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkRmxhZykge1xuICAgICAgdGhpcy5zZWxlY3RlZEZsYWcgPSB0aGlzLmZvcm1Hcm91cC5nZXQodGhpcy5zZWxlY3RlZE1hbmFnZUNhc2VMb2NhdGlvbikudmFsdWUgYXMgRmxhZ0RldGFpbERpc3BsYXlXaXRoRm9ybUdyb3VwUGF0aDtcbiAgICB9XG4gICAgbGV0IGZsYWdzQ2FzZUZpZWxkVmFsdWUgPSB0aGlzLnNlbGVjdGVkRmxhZy5jYXNlRmllbGQ/LnZhbHVlO1xuICAgIC8vIFVzZSB0aGUgcGF0aFRvRmxhZ3NGb3JtR3JvdXAgcHJvcGVydHkgZnJvbSB0aGUgc2VsZWN0ZWQgZmxhZyBsb2NhdGlvbiB0byBkcmlsbCBkb3duIHRvIHRoZSBjb3JyZWN0IHBhcnQgb2YgdGhlXG4gICAgLy8gQ2FzZUZpZWxkIHZhbHVlIHRvIGFwcGx5IGNoYW5nZXMgdG9cbiAgICBjb25zdCBwYXRoID0gdGhpcy5zZWxlY3RlZEZsYWcucGF0aFRvRmxhZ3NGb3JtR3JvdXA7XG4gICAgLy8gUm9vdC1sZXZlbCBGbGFncyBDYXNlRmllbGRzIGRvbid0IGhhdmUgYSBkb3QtZGVsaW1pdGVkIHBhdGggLSBqdXN0IHRoZSBDYXNlRmllbGQgSUQgaXRzZWxmIC0gc28gZG9uJ3QgZHJpbGwgZG93blxuICAgIGlmIChwYXRoLmluZGV4T2YoJy4nKSA+IC0xKSB7XG4gICAgICBwYXRoLnNsaWNlKHBhdGguaW5kZXhPZignLicpICsgMSkuc3BsaXQoJy4nKS5mb3JFYWNoKHBhcnQgPT4gZmxhZ3NDYXNlRmllbGRWYWx1ZSA9IGZsYWdzQ2FzZUZpZWxkVmFsdWVbcGFydF0pO1xuICAgIH1cbiAgICBpZiAoZmxhZ3NDYXNlRmllbGRWYWx1ZSkge1xuICAgICAgY29uc3QgZmxhZ0RldGFpbFRvVXBkYXRlID0gZmxhZ3NDYXNlRmllbGRWYWx1ZS5kZXRhaWxzPy5maW5kKFxuICAgICAgICBkZXRhaWwgPT4gZGV0YWlsLmlkID09PSB0aGlzLnNlbGVjdGVkRmxhZy5mbGFnRGV0YWlsRGlzcGxheT8uZmxhZ0RldGFpbD8uaWQpO1xuICAgICAgaWYgKGZsYWdEZXRhaWxUb1VwZGF0ZSkge1xuICAgICAgICAvLyBDYWNoZSB0aGUgKm9yaWdpbmFsKiBzdGF0dXMgb2YgdGhlIGZsYWcgYmVmb3JlIGl0IGlzIG1vZGlmaWVkLiBUaGlzIGlzIG5lZWRlZCBpZiB0aGUgdXNlciBjaGFuZ2VzIHRoZSBmbGFnIHN0YXR1c1xuICAgICAgICAvLyB0aGVuIGRlY2lkZXMgdG8gcmV0dXJuIHRvIGFueSBwYXJ0IG9mIHRoZSBmbGFnIHVwZGF0ZSBqb3VybmV5LiBUaGUgTWFuYWdlQ2FzZUZsYWdzQ29tcG9uZW50IGFuZCBVcGRhdGVGbGFnQ29tcG9uZW50XG4gICAgICAgIC8vIHNob3VsZCByZWZlciB0byBhIGZsYWcncyBvcmlnaW5hbCBzdGF0dXMsIG5vdCB0aGUgb25lIHNldCB2aWEgdGhlIFVJIGJlY2F1c2UgdGhpcyBoYXNuJ3QgYmVlbiBwZXJzaXN0ZWQgeWV0XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEZsYWcub3JpZ2luYWxTdGF0dXMpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRmxhZy5vcmlnaW5hbFN0YXR1cyA9IGZsYWdEZXRhaWxUb1VwZGF0ZS52YWx1ZT8uc3RhdHVzO1xuICAgICAgICB9XG4gICAgICAgIC8vIFVwZGF0ZSBkZXNjcmlwdGlvbiBmaWVsZHMgb25seSBpZiBmbGFnIHR5cGUgaXMgXCJPdGhlclwiIChmbGFnIGNvZGUgT1QwMDAxKTsgdGhlc2UgZmllbGRzIGFwcGx5IG9ubHkgdG8gdGhhdCBmbGFnIHR5cGVcbiAgICAgICAgLy8gSWYgdGhlaXIgRm9ybUNvbnRyb2xzIGRvbid0IGV4aXN0LCBpdCBtZWFucyB0aGVzZSBmaWVsZHMgd2VyZW4ndCB2aXNpdGVkIGFzIHBhcnQgb2YgdGhlIFwiVXBkYXRlIEZsYWdcIiBqb3VybmV5LCBzbyBkb1xuICAgICAgICAvLyAqbm90KiB1cGRhdGUgdGhlaXIgdmFsdWVzIChvdGhlcndpc2UgdGhleSB3aWxsIGJlY29tZSB1bmRlZmluZWQpXG4gICAgICAgIGlmIChmbGFnRGV0YWlsVG9VcGRhdGUudmFsdWU/LmZsYWdDb2RlID09PSB0aGlzLm90aGVyRmxhZ1R5cGVDb2RlKSB7XG4gICAgICAgICAgaWYgKHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAuZ2V0KENhc2VGbGFnRm9ybUZpZWxkcy5PVEhFUl9GTEFHX0RFU0NSSVBUSU9OKSkge1xuICAgICAgICAgICAgZmxhZ0RldGFpbFRvVXBkYXRlLnZhbHVlLm90aGVyRGVzY3JpcHRpb24gPSB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLmdldChcbiAgICAgICAgICAgICAgQ2FzZUZsYWdGb3JtRmllbGRzLk9USEVSX0ZMQUdfREVTQ1JJUFRJT04pLnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC5nZXQoQ2FzZUZsYWdGb3JtRmllbGRzLk9USEVSX0ZMQUdfREVTQ1JJUFRJT05fV0VMU0gpKSB7XG4gICAgICAgICAgICBmbGFnRGV0YWlsVG9VcGRhdGUudmFsdWUub3RoZXJEZXNjcmlwdGlvbl9jeSA9IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAuZ2V0KFxuICAgICAgICAgICAgICBDYXNlRmxhZ0Zvcm1GaWVsZHMuT1RIRVJfRkxBR19ERVNDUklQVElPTl9XRUxTSCkudmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEVuc3VyZSB0aGF0IGFueSBjb21tZW50cyBlbnRlcmVkIHdpdGggbGFuZ3VhZ2Ugc2V0IHRvIFdlbHNoIGRvIG5vdCBlbmQgdXAgaW4gdGhlIEVuZ2xpc2ggY29tbWVudHMgZmllbGRcbiAgICAgICAgaWYgKHRoaXMucnB4VHJhbnNsYXRpb25TZXJ2aWNlLmxhbmd1YWdlICE9PSAnY3knKSB7XG4gICAgICAgICAgZmxhZ0RldGFpbFRvVXBkYXRlLnZhbHVlLmZsYWdDb21tZW50ID0gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC5nZXQoQ2FzZUZsYWdGb3JtRmllbGRzLkNPTU1FTlRTKT8udmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUG9wdWxhdGUgZnJvbSB0aGUgKkVuZ2xpc2gqIGNvbW1lbnRzIGZpZWxkIGlmOlxuICAgICAgICAvLyAqIFRoZSBXZWxzaCBjb21tZW50cyBmaWVsZCBoYXMgbm8gdmFsdWUgKFdlbHNoIGNvbW1lbnRzIGZpZWxkIGFjcXVpcmVzIGEgdmFsdWUgb25seSB3aGVuIGFuIEhNQ1RTIGludGVybmFsIHVzZXIgaGFzXG4gICAgICAgIC8vIGdvbmUgdGhyb3VnaCB0aGUgXCJhZGQgdHJhbnNsYXRpb25cIiBzdGVwIGZvciBNYW5hZ2UgQ2FzZSBGbGFncyksIEFORFxuICAgICAgICAvLyAqIFRoZSBsYW5ndWFnZSBpcyBzZXQgdG8gV2Vsc2hcbiAgICAgICAgLy8gSWYgdGhlIEZvcm1Db250cm9sIGRvZXNuJ3QgZXhpc3QsIGl0IG1lYW5zIHRoaXMgZmllbGQgd2Fzbid0IHZpc2l0ZWQgYXMgcGFydCBvZiB0aGUgXCJVcGRhdGUgRmxhZ1wiIGpvdXJuZXksIHNvIGRvXG4gICAgICAgIC8vICpub3QqIHVwZGF0ZSBpdHMgdmFsdWUgKG90aGVyd2lzZSBpdCB3aWxsIGJlIG92ZXJyaWRkZW4pIC0gdW5sZXNzIHRoZSB1c2VyIGlzIGV4dGVybmFsIEFORCB3b3JraW5nIGluIFdlbHNoXG4gICAgICAgIGlmICh0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLmdldChDYXNlRmxhZ0Zvcm1GaWVsZHMuQ09NTUVOVFNfV0VMU0gpIHx8IHRoaXMucnB4VHJhbnNsYXRpb25TZXJ2aWNlLmxhbmd1YWdlID09PSAnY3knKSB7XG4gICAgICAgICAgZmxhZ0RldGFpbFRvVXBkYXRlLnZhbHVlLmZsYWdDb21tZW50X2N5ID0gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC5nZXQoQ2FzZUZsYWdGb3JtRmllbGRzLkNPTU1FTlRTX1dFTFNIKT8udmFsdWVcbiAgICAgICAgICAgID8gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC5nZXQoQ2FzZUZsYWdGb3JtRmllbGRzLkNPTU1FTlRTX1dFTFNIKT8udmFsdWVcbiAgICAgICAgICAgIDogdGhpcy5ycHhUcmFuc2xhdGlvblNlcnZpY2UubGFuZ3VhZ2UgPT09ICdjeSdcbiAgICAgICAgICAgICAgPyB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLmdldChDYXNlRmxhZ0Zvcm1GaWVsZHMuQ09NTUVOVFMpPy52YWx1ZVxuICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZmxhZ0RldGFpbFRvVXBkYXRlLnZhbHVlLmZsYWdVcGRhdGVDb21tZW50ID0gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC5nZXQoQ2FzZUZsYWdGb3JtRmllbGRzLlNUQVRVU19DSEFOR0VfUkVBU09OKT8udmFsdWU7XG4gICAgICAgIGZsYWdEZXRhaWxUb1VwZGF0ZS52YWx1ZS5zdGF0dXMgPSBDYXNlRmxhZ1N0YXR1c1t0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLmdldChDYXNlRmxhZ0Zvcm1GaWVsZHMuU1RBVFVTKT8udmFsdWVdO1xuICAgICAgICBmbGFnRGV0YWlsVG9VcGRhdGUudmFsdWUuZGF0ZVRpbWVNb2RpZmllZCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNBdEZpbmFsU3RhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlclVwZGF0ZVxuICAgICAgPyB0aGlzLmZpZWxkU3RhdGUgPT09IHRoaXMubWFuYWdlRmxhZ0ZpbmFsU3RhdGVcbiAgICAgIDogIXRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlcjJQb2ludDFFbmFibGVkXG4gICAgICAgID8gdGhpcy5maWVsZFN0YXRlID09PSBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19DT01NRU5UU1xuICAgICAgICA6IHRoaXMuZmllbGRTdGF0ZSA9PT0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfU1RBVFVTO1xuICB9XG5cbiAgcHVibGljIG5hdmlnYXRlVG9FcnJvckVsZW1lbnQoZWxlbWVudElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoZWxlbWVudElkKSB7XG4gICAgICBjb25zdCBodG1sRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7XG4gICAgICBpZiAoaHRtbEVsZW1lbnQpIHtcbiAgICAgICAgaHRtbEVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnY2VudGVyJyB9KTtcbiAgICAgICAgaHRtbEVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25GbGFnQ29tbWVudHNPcHRpb25hbEVtaXR0ZWQoXzogYW55KTogdm9pZCB7XG4gICAgdGhpcy5mbGFnQ29tbWVudHNPcHRpb25hbCA9IHRydWU7XG4gIH1cblxuICBwdWJsaWMgcG9wdWxhdGVOZXdGbGFnRGV0YWlsSW5zdGFuY2UoKTogRmxhZ0RldGFpbCB7XG4gICAgY29uc3QgbGFuZ1NlYXJjaFRlcm0gPSB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwPy52YWx1ZVsnbGFuZ3VhZ2VTZWFyY2hUZXJtJ107XG4gICAgY29uc3QgbWFudWFsTGFuZ0VudHJ5ID0gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cD8udmFsdWVbJ21hbnVhbExhbmd1YWdlRW50cnknXTtcbiAgICBjb25zdCBmbGFnVHlwZSA9IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXA/LnZhbHVlWydmbGFnVHlwZSddO1xuICAgIGNvbnN0IG90aGVyRGVzYyA9IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXA/LnZhbHVlWydvdGhlckRlc2NyaXB0aW9uJ107XG4gICAgY29uc3QgZm9ybVZhbHVlcyA9IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXA/LnZhbHVlO1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiB0aGlzLmZsYWdUeXBlPy5uYW1lLFxuICAgICAgbmFtZV9jeTogZmxhZ1R5cGU/Lm5hbWVfY3ksXG4gICAgICAvLyBDdXJyZW50bHksIHN1YlR5cGVWYWx1ZSwgc3ViVHlwZVZhbHVlX2N5IGFuZCBzdWJUeXBlS2V5IGFyZSBhcHBsaWNhYmxlIG9ubHkgdG8gbGFuZ3VhZ2UgZmxhZyB0eXBlc1xuICAgICAgc3ViVHlwZVZhbHVlOiBsYW5nU2VhcmNoVGVybSAmJiB0aGlzLnJweFRyYW5zbGF0aW9uU2VydmljZS5sYW5ndWFnZSA9PT0gJ2VuJ1xuICAgICAgICA/IGxhbmdTZWFyY2hUZXJtLnZhbHVlXG4gICAgICAgIDogbWFudWFsTGFuZ0VudHJ5ICYmIHRoaXMucnB4VHJhbnNsYXRpb25TZXJ2aWNlLmxhbmd1YWdlID09PSAnZW4nXG4gICAgICAgICAgPyBtYW51YWxMYW5nRW50cnlcbiAgICAgICAgICA6IG51bGwsXG4gICAgICBzdWJUeXBlVmFsdWVfY3k6IGxhbmdTZWFyY2hUZXJtICYmIHRoaXMucnB4VHJhbnNsYXRpb25TZXJ2aWNlLmxhbmd1YWdlID09PSAnY3knXG4gICAgICAgID8gbGFuZ1NlYXJjaFRlcm0/LnZhbHVlX2N5XG4gICAgICAgIDogbWFudWFsTGFuZ0VudHJ5ICYmIHRoaXMucnB4VHJhbnNsYXRpb25TZXJ2aWNlLmxhbmd1YWdlID09PSAnY3knXG4gICAgICAgICAgPyBtYW51YWxMYW5nRW50cnlcbiAgICAgICAgICA6IG51bGwsXG4gICAgICAvLyBGb3IgdXNlci1lbnRlcmVkIChpLmUuIG5vbi1SZWZlcmVuY2UgRGF0YSkgbGFuZ3VhZ2VzLCB0aGVyZSBpcyBubyBrZXlcbiAgICAgIHN1YlR5cGVLZXk6IGxhbmdTZWFyY2hUZXJtXG4gICAgICAgID8gbGFuZ1NlYXJjaFRlcm0ua2V5XG4gICAgICAgIDogbnVsbCxcbiAgICAgIG90aGVyRGVzY3JpcHRpb246IGZsYWdUeXBlPy5mbGFnQ29kZSA9PT0gdGhpcy5vdGhlckZsYWdUeXBlQ29kZSAmJlxuICAgICAgICBvdGhlckRlc2MgJiYgdGhpcy5ycHhUcmFuc2xhdGlvblNlcnZpY2UubGFuZ3VhZ2UgPT09ICdlbidcbiAgICAgICAgPyBvdGhlckRlc2NcbiAgICAgICAgOiBudWxsLFxuICAgICAgb3RoZXJEZXNjcmlwdGlvbl9jeTogZmxhZ1R5cGU/LmZsYWdDb2RlID09PSB0aGlzLm90aGVyRmxhZ1R5cGVDb2RlICYmXG4gICAgICAgIG90aGVyRGVzYyAmJiB0aGlzLnJweFRyYW5zbGF0aW9uU2VydmljZS5sYW5ndWFnZSA9PT0gJ2N5J1xuICAgICAgICA/IG90aGVyRGVzY1xuICAgICAgICA6IG51bGwsXG4gICAgICBmbGFnQ29tbWVudDogdGhpcy5ycHhUcmFuc2xhdGlvblNlcnZpY2UubGFuZ3VhZ2UgPT09ICdlbidcbiAgICAgICAgPyBmb3JtVmFsdWVzPy5mbGFnQ29tbWVudHNcbiAgICAgICAgOiBudWxsLFxuICAgICAgZmxhZ0NvbW1lbnRfY3k6IHRoaXMucnB4VHJhbnNsYXRpb25TZXJ2aWNlLmxhbmd1YWdlID09PSAnY3knXG4gICAgICAgID8gZm9ybVZhbHVlcz8uZmxhZ0NvbW1lbnRzXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGZsYWdVcGRhdGVDb21tZW50OiBmb3JtVmFsdWVzPy5zdGF0dXNSZWFzb24sXG4gICAgICBkYXRlVGltZUNyZWF0ZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHBhdGg6IGZsYWdUeXBlPy5QYXRoICYmXG4gICAgICAgIGZsYWdUeXBlPy5QYXRoLm1hcChwYXRoVmFsdWUgPT4gT2JqZWN0LmFzc2lnbih7IGlkOiBudWxsLCB2YWx1ZTogcGF0aFZhbHVlIH0pKSxcbiAgICAgIGhlYXJpbmdSZWxldmFudDogZmxhZ1R5cGU/LmhlYXJpbmdSZWxldmFudCA/ICdZZXMnIDogJ05vJyxcbiAgICAgIGZsYWdDb2RlOiBmbGFnVHlwZT8uZmxhZ0NvZGUsXG4gICAgICAvLyBTdGF0dXMgc2hvdWxkIGJlIHNldCB0byB3aGF0ZXZlciB0aGUgZGVmYXVsdCBpcyBmb3IgdGhpcyBmbGFnIHR5cGUsIGlmIGZsYWcgaXMgYmVpbmcgY3JlYXRlZCBieSBhbiBleHRlcm5hbFxuICAgICAgLy8gdXNlciwgb3RoZXJ3aXNlIGl0IHNob3VsZCBiZSBzZXQgdG8gXCJBY3RpdmVcIiBpZiBDYXNlIEZsYWdzIHYyLjEgaXMgTk9UIGVuYWJsZWQsIG9yIHRoZSBzZWxlY3RlZCBzdGF0dXMgaWYgaXQgaXNcbiAgICAgIHN0YXR1czogdGhpcy5pc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyRXh0ZXJuYWxcbiAgICAgICAgPyBmbGFnVHlwZT8uZGVmYXVsdFN0YXR1c1xuICAgICAgICA6ICF0aGlzLmlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIyUG9pbnQxRW5hYmxlZFxuICAgICAgICAgID8gQ2FzZUZsYWdTdGF0dXMuQUNUSVZFXG4gICAgICAgICAgOiBDYXNlRmxhZ1N0YXR1c1tmb3JtVmFsdWVzPy5zZWxlY3RlZFN0YXR1c10sXG4gICAgICBhdmFpbGFibGVFeHRlcm5hbGx5OiBmbGFnVHlwZT8uZXh0ZXJuYWxseUF2YWlsYWJsZSA/ICdZZXMnIDogJ05vJ1xuICAgIH0gYXMgRmxhZ0RldGFpbDtcbiAgfVxuXG4gIHB1YmxpYyBtb3ZlVG9GaW5hbFJldmlld1N0YWdlKCk6IHZvaWQge1xuICAgIHRoaXMuY2FzZUZsYWdTdGF0ZVNlcnZpY2UubGFzdFBhZ2VGaWVsZFN0YXRlID0gdGhpcy5maWVsZFN0YXRlO1xuICAgIHRoaXMuc2V0RmxhZ3NDYXNlRmllbGRWYWx1ZSgpO1xuICAgIC8vIENoZWNrIHRoYXQgbm8gZXJyb3JzIGhhdmUgYmVlbiBzZXQgb24gY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAgKGJ5IGRldGVybWluZUxvY2F0aW9uRm9yRmxhZygpKTsgcHJldmVudCBtb3ZpbmcgdG9cbiAgICAvLyBmaW5hbCByZXZpZXcgc3RhZ2UgaWYgZXJyb3JzIGV4aXN0XG4gICAgaWYgKCF0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLmVycm9ycykge1xuICAgICAgLy8gQ2xlYXIgdGhlIFwibm90QWxsQ2FzZUZsYWdTdGFnZXNDb21wbGV0ZWRcIiBlcnJvclxuICAgICAgdGhpcy5hbGxDYXNlRmxhZ1N0YWdlc0NvbXBsZXRlZCA9IHRydWU7XG4gICAgICB0aGlzLmZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICB0aGlzLmNhc2VFZGl0RGF0YVNlcnZpY2Uuc2V0VHJpZ2dlclN1Ym1pdEV2ZW50KHRydWUpO1xuICAgICAgLy8gVXBkYXRlIHRoaXMuc2VsZWN0ZWRGbGFnc0xvY2F0aW9uIHdpdGggdGhlIGNvcnJlY3RseSBkZXRlcm1pbmVkIGxvY2F0aW9uLCBzbyB0aGUgY29ycmVjdCB2YWx1ZSBpcyBhdmFpbGFibGUgdG9cbiAgICAgIC8vIFJlYWRDYXNlRmxhZ0ZpZWxkQ29tcG9uZW50IHdoZW4gaXQgaW5pdGlhbGlzZXMgdGhlIENhc2UgRmxhZyBTdW1tYXJ5IHBhZ2VcbiAgICAgIHRoaXMuc2VsZWN0ZWRGbGFnc0xvY2F0aW9uID0gdGhpcy5kZXRlcm1pbmVkTG9jYXRpb247XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMubXVsdGlwYWdlQ29tcG9uZW50U3RhdGVTZXJ2aWNlLnNldEpvdXJuZXlTdGF0ZSh0aGlzKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9wc3RhdGUnLCB0aGlzLmhhbmRsZUJhY2tCdXR0b24pO1xuICAgIC8vIFJlc2V0IHRoZSBmaWVsZHN0YXRlVG9OYXZpZ2F0ZSBhcyB0aGUgd3JpdGUgam91cm5leSBjb21wbGV0ZXMgYXQgdGhpcyBwb2ludFxuICAgIHRoaXMuY2FzZUZsYWdTdGF0ZVNlcnZpY2UuZmllbGRTdGF0ZVRvTmF2aWdhdGUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jYXNlVGl0bGVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1hbmFnZUZsYWdGaW5hbFN0YXRlKCkge1xuICAgIHJldHVybiB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLmdldChDYXNlRmxhZ0Zvcm1GaWVsZHMuSVNfV0VMU0hfVFJBTlNMQVRJT05fTkVFREVEKT8udmFsdWVcbiAgICAgID8gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVVBEQVRFX1dFTFNIX1RSQU5TTEFUSU9OIDogQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVVBEQVRFO1xuICB9XG5cbiAgcHVibGljIHNldERpc3BsYXlDb250ZXh0UGFyYW1ldGVyKGNhc2VGaWVsZHM6IENhc2VGaWVsZFtdKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY2FzZUZpZWxkcy5maW5kKGNhc2VGaWVsZCA9PiBGaWVsZHNVdGlscy5pc0Nhc2VGaWVsZE9mVHlwZShjYXNlRmllbGQsIFsnRmxhZ0xhdW5jaGVyJ10pKT8uZGlzcGxheV9jb250ZXh0X3BhcmFtZXRlcjtcbiAgfVxufVxuIiwiPCEtLSBFcnJvciBtZXNzYWdlIHN1bW1hcnkgLS0+XG48ZGl2ICpuZ0lmPVwiZXJyb3JNZXNzYWdlcy5sZW5ndGggPiAwXCIgY2xhc3M9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5XCIgYXJpYS1sYWJlbGxlZGJ5PVwiZXJyb3Itc3VtbWFyeS10aXRsZVwiIHJvbGU9XCJhbGVydFwiXG4gIHRhYmluZGV4PVwiLTFcIiBkYXRhLW1vZHVsZT1cImdvdnVrLWVycm9yLXN1bW1hcnlcIj5cbiAgPGgyIGNsYXNzPVwiZ292dWstZXJyb3Itc3VtbWFyeV9fdGl0bGVcIiBpZD1cImVycm9yLXN1bW1hcnktdGl0bGVcIj5cbiAgICB7eydUaGVyZSBpcyBhIHByb2JsZW0nIHwgcnB4VHJhbnNsYXRlfX1cbiAgPC9oMj5cbiAgPGRpdiAqbmdGb3I9XCJsZXQgZXJyb3JNZXNzYWdlIG9mIGVycm9yTWVzc2FnZXNcIiBjbGFzcz1cImdvdnVrLWVycm9yLXN1bW1hcnlfX2JvZHlcIj5cbiAgICA8dWwgY2xhc3M9XCJnb3Z1ay1saXN0IGdvdnVrLWVycm9yLXN1bW1hcnlfX2xpc3RcIj5cbiAgICAgIDxsaT5cbiAgICAgICAgPGEgKGNsaWNrKT1cIm5hdmlnYXRlVG9FcnJvckVsZW1lbnQoZXJyb3JNZXNzYWdlLmZpZWxkSWQpXCIgY2xhc3M9XCJ2YWxpZGF0aW9uLWVycm9yXCI+e3tlcnJvck1lc3NhZ2UuZGVzY3JpcHRpb24gfFxuICAgICAgICAgIHJweFRyYW5zbGF0ZX19PC9hPlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiAqbmdJZj1cIiFpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyVXBkYXRlXCIgY2xhc3M9XCJmb3JtLWdyb3VwXCIgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIj5cbiAgPGRpdiBjbGFzcz1cImdvdnVrLWZvcm0tZ3JvdXBcIiBbbmdTd2l0Y2hdPVwiZmllbGRTdGF0ZVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImNhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0xPQ0FUSU9OXCI+XG4gICAgICA8Y2NkLXNlbGVjdC1mbGFnLWxvY2F0aW9uIFxuICAgICAgICAjam91cm5leUNoaWxkIFxuICAgICAgICBbZm9ybUdyb3VwXT1cImNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwXCIgXG4gICAgICAgIFtmbGFnc0RhdGFdPVwiZmxhZ3NEYXRhXCJcbiAgICAgICAgW2lzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJFeHRlcm5hbF09XCJpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyRXh0ZXJuYWxcIlxuICAgICAgICAoY2FzZUZsYWdTdGF0ZUVtaXR0ZXIpPVwib25DYXNlRmxhZ1N0YXRlRW1pdHRlZCgkZXZlbnQpXCI+XG4gICAgICA8L2NjZC1zZWxlY3QtZmxhZy1sb2NhdGlvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19UWVBFXCI+XG4gICAgICA8Y2NkLXNlbGVjdC1mbGFnLXR5cGUgXG4gICAgICAgICNqb3VybmV5Q2hpbGQgXG4gICAgICAgIFtmb3JtR3JvdXBdPVwiY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXBcIiBcbiAgICAgICAgW2p1cmlzZGljdGlvbl09XCJqdXJpc2RpY3Rpb25cIlxuICAgICAgICBbY2FzZVR5cGVJZF09XCJjYXNlVHlwZUlkXCIgXG4gICAgICAgIFtobWN0c1NlcnZpY2VJZF09XCJobWN0c1NlcnZpY2VJZFwiXG4gICAgICAgIFtpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyRXh0ZXJuYWxdPVwiaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsXCJcbiAgICAgICAgW2lzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIyUG9pbnQxRW5hYmxlZF09XCJpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyMlBvaW50MUVuYWJsZWRcIlxuICAgICAgICBbc2VsZWN0ZWRGbGFnc0xvY2F0aW9uXT1cInNlbGVjdGVkRmxhZ3NMb2NhdGlvblwiIFxuICAgICAgICAoY2FzZUZsYWdTdGF0ZUVtaXR0ZXIpPVwib25DYXNlRmxhZ1N0YXRlRW1pdHRlZCgkZXZlbnQpXCJcbiAgICAgICAgKGZsYWdDb21tZW50c09wdGlvbmFsRW1pdHRlcik9XCJvbkZsYWdDb21tZW50c09wdGlvbmFsRW1pdHRlZCgkZXZlbnQpXCJcbiAgICAgICAgKGZsYWdUeXBlU3ViSm91cm5leUVtaXR0ZXIpPVwidXBkYXRlRmxhZ1R5cGVTdWJKb3VybmV5KCRldmVudClcIj5cbiAgICAgIDwvY2NkLXNlbGVjdC1mbGFnLXR5cGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfTEFOR1VBR0VfSU5URVJQUkVURVJcIj5cbiAgICAgIDxjY2Qtc2VhcmNoLWxhbmd1YWdlLWludGVycHJldGVyIFxuICAgICAgICAjam91cm5leUNoaWxkIFxuICAgICAgICBbZm9ybUdyb3VwXT1cImNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwXCIgXG4gICAgICAgIFtmbGFnVHlwZV09XCJmbGFnVHlwZVwiIFxuICAgICAgICAoY2FzZUZsYWdTdGF0ZUVtaXR0ZXIpPVwib25DYXNlRmxhZ1N0YXRlRW1pdHRlZCgkZXZlbnQpXCI+XG4gICAgICA8L2NjZC1zZWFyY2gtbGFuZ3VhZ2UtaW50ZXJwcmV0ZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfQ09NTUVOVFNcIj5cbiAgICAgIDxjY2QtYWRkLWNvbW1lbnRzIFxuICAgICAgICAjam91cm5leUNoaWxkIFxuICAgICAgICBbZm9ybUdyb3VwXT1cImNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwXCIgXG4gICAgICAgIFtvcHRpb25hbF09XCJmbGFnQ29tbWVudHNPcHRpb25hbFwiXG4gICAgICAgIFtpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyRXh0ZXJuYWxdPVwiaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsXCJcbiAgICAgICAgW2lzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIyUG9pbnQxRW5hYmxlZF09XCJpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyMlBvaW50MUVuYWJsZWRcIlxuICAgICAgICAoY2FzZUZsYWdTdGF0ZUVtaXR0ZXIpPVwib25DYXNlRmxhZ1N0YXRlRW1pdHRlZCgkZXZlbnQpXCI+XG4gICAgICA8L2NjZC1hZGQtY29tbWVudHM+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfU1RBVFVTXCI+XG4gICAgICA8Y2NkLWNvbmZpcm0tZmxhZy1zdGF0dXMgXG4gICAgICAgICNqb3VybmV5Q2hpbGQgXG4gICAgICAgIFtmb3JtR3JvdXBdPVwiY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXBcIlxuICAgICAgICBbZGVmYXVsdFN0YXR1c109XCJmbGFnVHlwZS5kZWZhdWx0U3RhdHVzXCIgXG4gICAgICAgIChjYXNlRmxhZ1N0YXRlRW1pdHRlcik9XCJvbkNhc2VGbGFnU3RhdGVFbWl0dGVkKCRldmVudClcIj5cbiAgICAgIDwvY2NkLWNvbmZpcm0tZmxhZy1zdGF0dXM+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwiaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlclVwZGF0ZVwiIGNsYXNzPVwiZm9ybS1ncm91cFwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XG4gIDxkaXYgY2xhc3M9XCJnb3Z1ay1mb3JtLWdyb3VwXCIgW25nU3dpdGNoXT1cImZpZWxkU3RhdGVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19NQU5BR0VfQ0FTRV9GTEFHU1wiPlxuICAgICAgPGNjZC1tYW5hZ2UtY2FzZS1mbGFncyBcbiAgICAgICAgI2pvdXJuZXlDaGlsZCBcbiAgICAgICAgW2Zvcm1Hcm91cF09XCJjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cFwiIFxuICAgICAgICBbZmxhZ3NEYXRhXT1cImZsYWdzRGF0YVwiXG4gICAgICAgIFtjYXNlVGl0bGVdPVwiY2FzZVRpdGxlXCIgXG4gICAgICAgIFtkaXNwbGF5Q29udGV4dFBhcmFtZXRlcl09XCJkaXNwbGF5Q29udGV4dFBhcmFtZXRlclwiXG4gICAgICAgIChjYXNlRmxhZ1N0YXRlRW1pdHRlcik9XCJvbkNhc2VGbGFnU3RhdGVFbWl0dGVkKCRldmVudClcIj5cbiAgICAgIDwvY2NkLW1hbmFnZS1jYXNlLWZsYWdzPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImNhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1VQREFURVwiPlxuICAgICAgPGNjZC11cGRhdGUtZmxhZyBcbiAgICAgICAgI2pvdXJuZXlDaGlsZCBcbiAgICAgICAgW2Zvcm1Hcm91cF09XCJjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cFwiXG4gICAgICAgIFtkaXNwbGF5Q29udGV4dFBhcmFtZXRlcl09XCJkaXNwbGF5Q29udGV4dFBhcmFtZXRlclwiIFxuICAgICAgICAoY2FzZUZsYWdTdGF0ZUVtaXR0ZXIpPVwib25DYXNlRmxhZ1N0YXRlRW1pdHRlZCgkZXZlbnQpXCI+XG4gICAgICA8L2NjZC11cGRhdGUtZmxhZz5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19VUERBVEVfV0VMU0hfVFJBTlNMQVRJT05cIj5cbiAgICAgIDxjY2QtdXBkYXRlLWZsYWctYWRkLXRyYW5zbGF0aW9uLWZvcm0gXG4gICAgICAgICNqb3VybmV5Q2hpbGQgXG4gICAgICAgIFtmb3JtR3JvdXBdPVwiY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXBcIlxuICAgICAgICAoY2FzZUZsYWdTdGF0ZUVtaXR0ZXIpPVwib25DYXNlRmxhZ1N0YXRlRW1pdHRlZCgkZXZlbnQpXCI+XG4gICAgICA8L2NjZC11cGRhdGUtZmxhZy1hZGQtdHJhbnNsYXRpb24tZm9ybT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj4iXX0=