@fundamental-ngx/platform 0.48.0-rc.20 → 0.48.0-rc.21

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 (79) hide show
  1. package/button/button.component.d.ts +4 -1
  2. package/esm2022/approval-flow/approval-flow-add-node/approval-flow-add-node.component.mjs +2 -2
  3. package/esm2022/approval-flow/approval-flow-node/approval-flow-node.component.mjs +2 -2
  4. package/esm2022/approval-flow/approval-flow.component.mjs +2 -2
  5. package/esm2022/button/button.component.mjs +8 -3
  6. package/esm2022/feed-input/feed-input.component.mjs +2 -2
  7. package/esm2022/form/combobox/combobox/combobox.component.mjs +2 -2
  8. package/esm2022/form/form-generator/controls/dynamic-form-generator-object-status/dynamic-form-generator-object-status.component.mjs +2 -2
  9. package/esm2022/form/multi-combobox/multi-combobox/multi-combobox.component.mjs +2 -2
  10. package/esm2022/form/multi-input/multi-input.component.mjs +2 -2
  11. package/esm2022/form/select/commons/base-select.mjs +7 -2
  12. package/esm2022/form/select/select/select.component.mjs +3 -3
  13. package/esm2022/icon-tab-bar/components/popovers/icon-tab-bar-popover/icon-tab-bar-popover.component.mjs +3 -3
  14. package/esm2022/icon-tab-bar/components/popovers/text-type-popover/text-type-popover.component.mjs +3 -3
  15. package/esm2022/list/standard-list-item/standard-list-item.component.mjs +2 -2
  16. package/esm2022/menu-button/menu-button.component.mjs +8 -3
  17. package/esm2022/message-popover/components/message-view/message-view.component.mjs +2 -2
  18. package/esm2022/message-popover/message-popover.component.mjs +2 -2
  19. package/esm2022/object-marker/object-marker.component.mjs +8 -3
  20. package/esm2022/object-status/object-status.component.mjs +8 -3
  21. package/esm2022/search-field/search-field.component.mjs +2 -2
  22. package/esm2022/smart-filter-bar/components/smart-filter-bar-conditions-dialog/smart-filter-bar-conditions-dialog.component.mjs +2 -2
  23. package/esm2022/smart-filter-bar/smart-filter-bar.component.mjs +2 -2
  24. package/esm2022/split-menu-button/split-menu-button.component.mjs +8 -3
  25. package/esm2022/table/components/table-cell-header-popover/table-cell-header-popover.component.mjs +2 -2
  26. package/esm2022/table/components/table-header-cell-content/table-header-cell-content.component.mjs +1 -1
  27. package/esm2022/table/components/table-p13-dialog/filtering/filter-rule.component.mjs +2 -2
  28. package/esm2022/table/components/table-p13-dialog/grouping/grouping.component.mjs +2 -2
  29. package/esm2022/table/components/table-p13-dialog/sorting/sorting.component.mjs +2 -2
  30. package/esm2022/table/components/table-row/table-row.component.mjs +6 -4
  31. package/esm2022/table/components/table-toolbar/table-toolbar.component.mjs +2 -2
  32. package/esm2022/value-help-dialog/components/define-tab/define-tab.component.mjs +2 -2
  33. package/esm2022/value-help-dialog/value-help-dialog/value-help-dialog.component.mjs +2 -2
  34. package/esm2022/variant-management/components/manage-variants-dialog/manage-variants-dialog.component.mjs +2 -2
  35. package/esm2022/variant-management/variant-management.component.mjs +2 -2
  36. package/esm2022/wizard-generator/components/dialog-wizard-generator/dialog-wizard-generator.component.mjs +2 -2
  37. package/esm2022/wizard-generator/components/wizard-body/wizard-body.component.mjs +2 -2
  38. package/fesm2022/fundamental-ngx-platform-approval-flow.mjs +3 -3
  39. package/fesm2022/fundamental-ngx-platform-approval-flow.mjs.map +1 -1
  40. package/fesm2022/fundamental-ngx-platform-button.mjs +7 -2
  41. package/fesm2022/fundamental-ngx-platform-button.mjs.map +1 -1
  42. package/fesm2022/fundamental-ngx-platform-feed-input.mjs +1 -1
  43. package/fesm2022/fundamental-ngx-platform-feed-input.mjs.map +1 -1
  44. package/fesm2022/fundamental-ngx-platform-form.mjs +12 -8
  45. package/fesm2022/fundamental-ngx-platform-form.mjs.map +1 -1
  46. package/fesm2022/fundamental-ngx-platform-icon-tab-bar.mjs +4 -4
  47. package/fesm2022/fundamental-ngx-platform-icon-tab-bar.mjs.map +1 -1
  48. package/fesm2022/fundamental-ngx-platform-list.mjs +1 -1
  49. package/fesm2022/fundamental-ngx-platform-list.mjs.map +1 -1
  50. package/fesm2022/fundamental-ngx-platform-menu-button.mjs +7 -2
  51. package/fesm2022/fundamental-ngx-platform-menu-button.mjs.map +1 -1
  52. package/fesm2022/fundamental-ngx-platform-message-popover.mjs +2 -2
  53. package/fesm2022/fundamental-ngx-platform-message-popover.mjs.map +1 -1
  54. package/fesm2022/fundamental-ngx-platform-object-marker.mjs +7 -2
  55. package/fesm2022/fundamental-ngx-platform-object-marker.mjs.map +1 -1
  56. package/fesm2022/fundamental-ngx-platform-object-status.mjs +7 -2
  57. package/fesm2022/fundamental-ngx-platform-object-status.mjs.map +1 -1
  58. package/fesm2022/fundamental-ngx-platform-search-field.mjs +1 -1
  59. package/fesm2022/fundamental-ngx-platform-search-field.mjs.map +1 -1
  60. package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs +2 -2
  61. package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
  62. package/fesm2022/fundamental-ngx-platform-split-menu-button.mjs +7 -2
  63. package/fesm2022/fundamental-ngx-platform-split-menu-button.mjs.map +1 -1
  64. package/fesm2022/fundamental-ngx-platform-table.mjs +10 -9
  65. package/fesm2022/fundamental-ngx-platform-table.mjs.map +1 -1
  66. package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs +2 -2
  67. package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
  68. package/fesm2022/fundamental-ngx-platform-variant-management.mjs +2 -2
  69. package/fesm2022/fundamental-ngx-platform-variant-management.mjs.map +1 -1
  70. package/fesm2022/fundamental-ngx-platform-wizard-generator.mjs +2 -2
  71. package/fesm2022/fundamental-ngx-platform-wizard-generator.mjs.map +1 -1
  72. package/form/select/commons/base-select.d.ts +4 -1
  73. package/fundamental-ngx-platform-v0.48.0-rc.21.tgz +0 -0
  74. package/menu-button/menu-button.component.d.ts +5 -2
  75. package/object-marker/object-marker.component.d.ts +4 -1
  76. package/object-status/object-status.component.d.ts +4 -1
  77. package/package.json +4 -4
  78. package/split-menu-button/split-menu-button.component.d.ts +5 -2
  79. package/fundamental-ngx-platform-v0.48.0-rc.20.tgz +0 -0
@@ -156,7 +156,7 @@ export class WizardBodyComponent {
156
156
  return item.id;
157
157
  }
158
158
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: WizardBodyComponent, deps: [{ token: i1.WizardGeneratorService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
159
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.4", type: WizardBodyComponent, isStandalone: true, selector: "fdp-wizard-body", inputs: { responsivePaddings: "responsivePaddings", navigationButtonLabels: "navigationButtonLabels", appendToWizard: "appendToWizard", contentHeight: "contentHeight", isFirstStep: "isFirstStep", isLastStep: "isLastStep", isNextStepSummary: "isNextStepSummary", displaySummaryStep: "displaySummaryStep", goNextButtonTemplate: "goNextButtonTemplate", finishButtonTemplate: "finishButtonTemplate", customSummaryStepTemplate: "customSummaryStepTemplate", reviewButtonTemplate: "reviewButtonTemplate", isSummaryStep: "isSummaryStep", navigationButtons: "navigationButtons", unifiedLayout: "unifiedLayout", isBranchingStep: "isBranchingStep", isCurrentStepCompleted: "isCurrentStepCompleted", stepsOrderChanged: "stepsOrderChanged" }, outputs: { statusChange: "statusChange", goNext: "goNext", finish: "finish" }, ngImport: i0, template: "@if (visibleItems) {\n <fd-wizard\n [displaySummaryStep]=\"displaySummaryStep\"\n [responsivePaddings]=\"responsivePaddings\"\n [appendToWizard]=\"appendToWizard\"\n [contentHeight]=\"contentHeight\"\n >\n <fd-wizard-navigation>\n <ul fd-wizard-progress-bar>\n @for (step of visibleItems; track _trackFn(i, step); let i = $index) {\n <li\n fd-wizard-step\n [label]=\"step.name\"\n [status]=\"step.status\"\n [optionalText]=\"step.optionalText\"\n [branching]=\"!!step.branching\"\n [stepClickValidator]=\"stepClickValidatorFn(i)\"\n [isSummary]=\"!!step.summary\"\n (statusChange)=\"stepStatusChanged(step.id, $event)\"\n (stepClicked)=\"stepClicked(step.id)\"\n >\n <fd-wizard-step-indicator [glyph]=\"step.icon || null\">\n @if (!step.icon) {\n {{ i + 1 }}\n }\n </fd-wizard-step-indicator>\n <fd-wizard-content>\n @if (!step.summary) {\n <fdp-wizard-generator-step\n [unifiedLayout]=\"unifiedLayout\"\n [item]=\"step\"\n [stepStatus]=\"step.status\"\n ></fdp-wizard-generator-step>\n } @else {\n <fdp-wizard-summary-step\n [customSummaryStepTemplate]=\"customSummaryStepTemplate\"\n [status]=\"step.status\"\n ></fdp-wizard-summary-step>\n }\n @if (navigationButtons) {\n <fd-wizard-next-step [canHide]=\"appendToWizard\">\n @if (!isLastStep) {\n <ng-template #defaultGoNextButtonTemplate>\n <fdp-button\n [fdContentDensity]=\"navigationButtonLabels.goNext.contentDensity\"\n [buttonType]=\"navigationButtonLabels.goNext.type\"\n [label]=\"navigationButtonLabels.goNext.label\"\n (click)=\"goNext.emit()\"\n ></fdp-button>\n </ng-template>\n <ng-template #defaultReviewButtonTemplate>\n <fdp-button\n [fdContentDensity]=\"navigationButtonLabels.review.contentDensity\"\n [buttonType]=\"navigationButtonLabels.review.type\"\n [label]=\"navigationButtonLabels.review.label\"\n (click)=\"goNext.emit()\"\n ></fdp-button>\n </ng-template>\n @if (\n (isBranchingStep && (!isCurrentStepCompleted || stepsOrderChanged)) ||\n !isNextStepSummary\n ) {\n <ng-template\n [ngTemplateOutlet]=\"goNextButtonTemplate || defaultGoNextButtonTemplate\"\n [ngTemplateOutletContext]=\"{ goNext: _goNextFn }\"\n ></ng-template>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"reviewButtonTemplate || defaultReviewButtonTemplate\"\n [ngTemplateOutletContext]=\"{ goNext: _goNextFn }\"\n ></ng-template>\n }\n } @else {\n <ng-template #defaultFinishButtonTemplate>\n <fdp-button\n [fdContentDensity]=\"navigationButtonLabels.finish.contentDensity\"\n [buttonType]=\"navigationButtonLabels.finish.type\"\n [label]=\"navigationButtonLabels.finish.label\"\n (click)=\"finish.emit()\"\n ></fdp-button>\n </ng-template>\n <ng-template\n [ngTemplateOutlet]=\"finishButtonTemplate || defaultFinishButtonTemplate\"\n [ngTemplateOutletContext]=\"{ finish: _finishFn }\"\n ></ng-template>\n }\n </fd-wizard-next-step>\n }\n </fd-wizard-content>\n </li>\n }\n </ul>\n </fd-wizard-navigation>\n </fd-wizard>\n}\n", dependencies: [{ kind: "ngmodule", type: WizardModule }, { kind: "component", type: i2.WizardComponent, selector: "fd-wizard", inputs: ["appendToWizard", "contentHeight", "responsivePaddings", "displaySummaryStep", "ariaLabel"] }, { kind: "component", type: i2.WizardNavigationComponent, selector: "fd-wizard-navigation", inputs: ["ariaLabel"] }, { kind: "directive", type: i2.WizardProgressBarDirective, selector: "[fd-wizard-progress-bar]", inputs: ["size"] }, { kind: "component", type: i2.WizardStepComponent, selector: "[fd-wizard-step]", inputs: ["ariaLabel", "ariaRoleDecription", "status", "branching", "label", "optionalText", "isSummary", "stepClickValidator"], outputs: ["statusChange", "stepClicked", "stepIndicatorItemClicked"] }, { kind: "component", type: i2.WizardStepIndicatorComponent, selector: "fd-wizard-step-indicator", inputs: ["glyph"], outputs: ["stepIndicatorItemClicked"] }, { kind: "component", type: i2.WizardContentComponent, selector: "fd-wizard-content", inputs: ["contentBackground", "size"] }, { kind: "component", type: i2.WizardNextStepComponent, selector: "fd-wizard-next-step", inputs: ["floating", "canHide"] }, { kind: "component", type: WizardGeneratorStepComponent, selector: "fdp-wizard-generator-step", inputs: ["item", "stepStatus", "unifiedLayout"], outputs: ["formsSubmitted", "formsCreated"] }, { kind: "component", type: WizardSummaryStepComponent, selector: "fdp-wizard-summary-step", inputs: ["status", "customSummaryStepTemplate"] }, { kind: "component", type: ButtonComponent, selector: "fdp-button", inputs: ["glyphPosition", "label", "glyph", "buttonType", "toggled", "title", "ariaSelected", "ariaDisabled", "ariaExpanded", "ariaControlsId", "ariaPressed", "name", "type", "value"], outputs: ["buttonClicked"] }, { kind: "directive", type: ContentDensityDirective, selector: "[fdContentDensity]:not([fdCompact]):not([fdCondensed]):not([fdCozy]), [fdCompact]:not([fdContentDensity]):not([fdCondensed]):not([fdCozy]), [fdCondensed]:not([fdContentDensity]):not([fdCompact]):not([fdCozy]), [fdCozy]:not([fdContentDensity]):not([fdCompact]):not([fdCondensed])", inputs: ["fdContentDensity", "fdCompact", "fdCondensed", "fdCozy"], exportAs: ["fdContentDensity"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
159
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.4", type: WizardBodyComponent, isStandalone: true, selector: "fdp-wizard-body", inputs: { responsivePaddings: "responsivePaddings", navigationButtonLabels: "navigationButtonLabels", appendToWizard: "appendToWizard", contentHeight: "contentHeight", isFirstStep: "isFirstStep", isLastStep: "isLastStep", isNextStepSummary: "isNextStepSummary", displaySummaryStep: "displaySummaryStep", goNextButtonTemplate: "goNextButtonTemplate", finishButtonTemplate: "finishButtonTemplate", customSummaryStepTemplate: "customSummaryStepTemplate", reviewButtonTemplate: "reviewButtonTemplate", isSummaryStep: "isSummaryStep", navigationButtons: "navigationButtons", unifiedLayout: "unifiedLayout", isBranchingStep: "isBranchingStep", isCurrentStepCompleted: "isCurrentStepCompleted", stepsOrderChanged: "stepsOrderChanged" }, outputs: { statusChange: "statusChange", goNext: "goNext", finish: "finish" }, ngImport: i0, template: "@if (visibleItems) {\n <fd-wizard\n [displaySummaryStep]=\"displaySummaryStep\"\n [responsivePaddings]=\"responsivePaddings\"\n [appendToWizard]=\"appendToWizard\"\n [contentHeight]=\"contentHeight\"\n >\n <fd-wizard-navigation>\n <ul fd-wizard-progress-bar>\n @for (step of visibleItems; track _trackFn(i, step); let i = $index) {\n <li\n fd-wizard-step\n [label]=\"step.name\"\n [status]=\"step.status\"\n [optionalText]=\"step.optionalText\"\n [branching]=\"!!step.branching\"\n [stepClickValidator]=\"stepClickValidatorFn(i)\"\n [isSummary]=\"!!step.summary\"\n (statusChange)=\"stepStatusChanged(step.id, $event)\"\n (stepClicked)=\"stepClicked(step.id)\"\n >\n <fd-wizard-step-indicator [glyph]=\"step.icon || null\">\n @if (!step.icon) {\n {{ i + 1 }}\n }\n </fd-wizard-step-indicator>\n <fd-wizard-content>\n @if (!step.summary) {\n <fdp-wizard-generator-step\n [unifiedLayout]=\"unifiedLayout\"\n [item]=\"step\"\n [stepStatus]=\"step.status\"\n ></fdp-wizard-generator-step>\n } @else {\n <fdp-wizard-summary-step\n [customSummaryStepTemplate]=\"customSummaryStepTemplate\"\n [status]=\"step.status\"\n ></fdp-wizard-summary-step>\n }\n @if (navigationButtons) {\n <fd-wizard-next-step [canHide]=\"appendToWizard\">\n @if (!isLastStep) {\n <ng-template #defaultGoNextButtonTemplate>\n <fdp-button\n [fdContentDensity]=\"navigationButtonLabels.goNext.contentDensity\"\n [buttonType]=\"navigationButtonLabels.goNext.type\"\n [label]=\"navigationButtonLabels.goNext.label\"\n (click)=\"goNext.emit()\"\n ></fdp-button>\n </ng-template>\n <ng-template #defaultReviewButtonTemplate>\n <fdp-button\n [fdContentDensity]=\"navigationButtonLabels.review.contentDensity\"\n [buttonType]=\"navigationButtonLabels.review.type\"\n [label]=\"navigationButtonLabels.review.label\"\n (click)=\"goNext.emit()\"\n ></fdp-button>\n </ng-template>\n @if (\n (isBranchingStep && (!isCurrentStepCompleted || stepsOrderChanged)) ||\n !isNextStepSummary\n ) {\n <ng-template\n [ngTemplateOutlet]=\"goNextButtonTemplate || defaultGoNextButtonTemplate\"\n [ngTemplateOutletContext]=\"{ goNext: _goNextFn }\"\n ></ng-template>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"reviewButtonTemplate || defaultReviewButtonTemplate\"\n [ngTemplateOutletContext]=\"{ goNext: _goNextFn }\"\n ></ng-template>\n }\n } @else {\n <ng-template #defaultFinishButtonTemplate>\n <fdp-button\n [fdContentDensity]=\"navigationButtonLabels.finish.contentDensity\"\n [buttonType]=\"navigationButtonLabels.finish.type\"\n [label]=\"navigationButtonLabels.finish.label\"\n (click)=\"finish.emit()\"\n ></fdp-button>\n </ng-template>\n <ng-template\n [ngTemplateOutlet]=\"finishButtonTemplate || defaultFinishButtonTemplate\"\n [ngTemplateOutletContext]=\"{ finish: _finishFn }\"\n ></ng-template>\n }\n </fd-wizard-next-step>\n }\n </fd-wizard-content>\n </li>\n }\n </ul>\n </fd-wizard-navigation>\n </fd-wizard>\n}\n", dependencies: [{ kind: "ngmodule", type: WizardModule }, { kind: "component", type: i2.WizardComponent, selector: "fd-wizard", inputs: ["appendToWizard", "contentHeight", "responsivePaddings", "displaySummaryStep", "ariaLabel"] }, { kind: "component", type: i2.WizardNavigationComponent, selector: "fd-wizard-navigation", inputs: ["ariaLabel"] }, { kind: "directive", type: i2.WizardProgressBarDirective, selector: "[fd-wizard-progress-bar]", inputs: ["size"] }, { kind: "component", type: i2.WizardStepComponent, selector: "[fd-wizard-step]", inputs: ["ariaLabel", "ariaRoleDecription", "status", "branching", "label", "optionalText", "isSummary", "stepClickValidator"], outputs: ["statusChange", "stepClicked", "stepIndicatorItemClicked"] }, { kind: "component", type: i2.WizardStepIndicatorComponent, selector: "fd-wizard-step-indicator", inputs: ["glyph", "glyphFont"], outputs: ["stepIndicatorItemClicked"] }, { kind: "component", type: i2.WizardContentComponent, selector: "fd-wizard-content", inputs: ["contentBackground", "size"] }, { kind: "component", type: i2.WizardNextStepComponent, selector: "fd-wizard-next-step", inputs: ["floating", "canHide"] }, { kind: "component", type: WizardGeneratorStepComponent, selector: "fdp-wizard-generator-step", inputs: ["item", "stepStatus", "unifiedLayout"], outputs: ["formsSubmitted", "formsCreated"] }, { kind: "component", type: WizardSummaryStepComponent, selector: "fdp-wizard-summary-step", inputs: ["status", "customSummaryStepTemplate"] }, { kind: "component", type: ButtonComponent, selector: "fdp-button", inputs: ["glyphPosition", "label", "glyph", "glyphFont", "buttonType", "toggled", "title", "ariaSelected", "ariaDisabled", "ariaExpanded", "ariaControlsId", "ariaPressed", "name", "type", "value"], outputs: ["buttonClicked"] }, { kind: "directive", type: ContentDensityDirective, selector: "[fdContentDensity]:not([fdCompact]):not([fdCondensed]):not([fdCozy]), [fdCompact]:not([fdContentDensity]):not([fdCondensed]):not([fdCozy]), [fdCondensed]:not([fdContentDensity]):not([fdCompact]):not([fdCozy]), [fdCozy]:not([fdContentDensity]):not([fdCompact]):not([fdCondensed])", inputs: ["fdContentDensity", "fdCompact", "fdCondensed", "fdCozy"], exportAs: ["fdContentDensity"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
160
160
  }
161
161
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: WizardBodyComponent, decorators: [{
162
162
  type: Component,
@@ -211,4 +211,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.4", ngImpor
211
211
  }], finish: [{
212
212
  type: Output
213
213
  }] } });
214
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l6YXJkLWJvZHkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93aXphcmQtZ2VuZXJhdG9yL2NvbXBvbmVudHMvd2l6YXJkLWJvZHkvd2l6YXJkLWJvZHkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93aXphcmQtZ2VuZXJhdG9yL2NvbXBvbmVudHMvd2l6YXJkLWJvZHkvd2l6YXJkLWJvZHkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFdBQVcsRUFDWCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUd6RCxPQUFPLEVBQUUsWUFBWSxFQUFvQixNQUFNLDhCQUE4QixDQUFDO0FBRTlFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUduRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUN4RyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQzs7OztBQXNCbEcsTUFBTSxPQUFPLG1CQUFtQjtJQWdJNUI7O09BRUc7SUFDSCw4REFBOEQ7SUFDOUQsSUFB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QkFDNUIsMEJBQTBCO3dCQUMxQixlQUFlO3dCQUNmLHVCQUF1Qjt3QkFDdkIsZ0JBQWdCO3FCQUNuQjsySEFPRCxrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBT04sc0JBQXNCO3NCQURyQixLQUFLO2dCQVFOLGNBQWM7c0JBRGIsS0FBSztnQkFRTixhQUFhO3NCQURaLEtBQUs7Z0JBT04sV0FBVztzQkFEVixLQUFLO2dCQU9OLFVBQVU7c0JBRFQsS0FBSztnQkFPTixpQkFBaUI7c0JBRGhCLEtBQUs7Z0JBT04sa0JBQWtCO3NCQURqQixLQUFLO2dCQU9OLG9CQUFvQjtzQkFEbkIsS0FBSztnQkFPTixvQkFBb0I7c0JBRG5CLEtBQUs7Z0JBT04seUJBQXlCO3NCQUR4QixLQUFLO2dCQUtOLG9CQUFvQjtzQkFEbkIsS0FBSztnQkFPTixhQUFhO3NCQURaLEtBQUs7Z0JBS04saUJBQWlCO3NCQURoQixLQUFLO2dCQUtOLGFBQWE7c0JBRFosS0FBSztnQkFLTixlQUFlO3NCQURkLEtBQUs7Z0JBS04sc0JBQXNCO3NCQURyQixLQUFLO2dCQUtOLGlCQUFpQjtzQkFEaEIsS0FBSztnQkFPTixZQUFZO3NCQURYLE1BQU07Z0JBT1AsTUFBTTtzQkFETCxNQUFNO2dCQU9QLE1BQU07c0JBREwsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QsIGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgTnVsbGFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBXaXphcmRNb2R1bGUsIFdpemFyZFN0ZXBTdGF0dXMgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvd2l6YXJkJztcblxuaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eURpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jb250ZW50LWRlbnNpdHknO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9idXR0b24nO1xuaW1wb3J0IHsgUHJlcGFyZWRXaXphcmRHZW5lcmF0b3JJdGVtLCBXaXphcmRHZW5lcmF0b3JJdGVtIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy93aXphcmQtZ2VuZXJhdG9yLWl0ZW0uaW50ZXJmYWNlJztcbmltcG9ydCB7IFdpemFyZE5hdmlnYXRpb25CdXR0b25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy93aXphcmQtbmF2aWdhdGlvbi1idXR0b25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBXaXphcmRHZW5lcmF0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vd2l6YXJkLWdlbmVyYXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IFdpemFyZEdlbmVyYXRvclN0ZXBDb21wb25lbnQgfSBmcm9tICcuLi93aXphcmQtZ2VuZXJhdG9yLXN0ZXAvd2l6YXJkLWdlbmVyYXRvci1zdGVwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBXaXphcmRTdW1tYXJ5U3RlcENvbXBvbmVudCB9IGZyb20gJy4uL3dpemFyZC1zdW1tYXJ5LXN0ZXAvd2l6YXJkLXN1bW1hcnktc3RlcC5jb21wb25lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFdpemFyZFN0ZXBDaGFuZ2Uge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgc3RhdHVzOiBXaXphcmRTdGVwU3RhdHVzO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkcC13aXphcmQtYm9keScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3dpemFyZC1ib2R5LmNvbXBvbmVudC5odG1sJyxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBXaXphcmRNb2R1bGUsXG4gICAgICAgIFdpemFyZEdlbmVyYXRvclN0ZXBDb21wb25lbnQsXG4gICAgICAgIFdpemFyZFN1bW1hcnlTdGVwQ29tcG9uZW50LFxuICAgICAgICBCdXR0b25Db21wb25lbnQsXG4gICAgICAgIENvbnRlbnREZW5zaXR5RGlyZWN0aXZlLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBXaXphcmRCb2R5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBXaGV0aGVyIG9yIG5vdCBhcHBseSByZXNwb25zaXZlIHBhZGRpbmdzIHN0eWxpbmcuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICByZXNwb25zaXZlUGFkZGluZ3MgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEJ1dHRvbiBsYWJlbHMgdG8gYmUgdXNlZCBpbiBXaXphcmQgbmF2aWdhdGlvblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbmF2aWdhdGlvbkJ1dHRvbkxhYmVsczogUmVxdWlyZWQ8V2l6YXJkTmF2aWdhdGlvbkJ1dHRvbnM+O1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFdoZXRoZXIgb3Igbm90IHRvIGFwcGVuZCB0aGUgc3RlcCB0byB0aGUgd2l6YXJkLiBJZiBmYWxzZSwgZWFjaCBzdGVwIHdpbGwgYmUgZGlzcGxheWVkIG9uIGEgZGlmZmVyZW50IHBhZ2UuXG4gICAgICogRGVmYXVsdCBpcyB0cnVlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXBwZW5kVG9XaXphcmQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEN1c3RvbSBoZWlnaHQgdG8gdXNlIGZvciB0aGUgd2l6YXJkJ3MgY29udGVudCBwYW5lLiBCeSBkZWZhdWx0LCB0aGlzIHZhbHVlIGlzIGNhbGMoMTAwdmggLSAxNDRweCksIHdoZXJlIDE0NHB4XG4gICAgICogaXMgdGhlIGNvbWJpbmVkIGhlaWdodCBvZiB0aGUgU2hlbGxiYXIsIHdpemFyZCBoZWFkZXIgYW5kIHdpemFyZCBmb290ZXIuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBjb250ZW50SGVpZ2h0OiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFdoZXRoZXIgb3Igbm90IFdpemFyZCBpcyBjdXJyZW50bHkgb24gdGhlIGZpcnN0IHN0ZXBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGlzRmlyc3RTdGVwID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gV2hldGhlciBXaXphcmQgaXMgY3VycmVudGx5IG9uIHRoZSBsYXN0IHN0ZXAuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBpc0xhc3RTdGVwID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG5leHQgc3RlcCBpcyBhIFN1bW1hcnkgc3RlcC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGlzTmV4dFN0ZXBTdW1tYXJ5ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQm9vbGVhbiBmbGFnIGluZGljYXRpbmcgd2hldGhlciB0byBkaXNwbGF5IFN1bW1hcnkgc3RlcCBpbiBXaXphcmQgcHJvZ3Jlc3MgYmFyLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzcGxheVN1bW1hcnlTdGVwID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBVc2VyLWRlZmluZWQgdGVtcGxhdGUgZm9yIFwiR28gTmV4dFwiIGJ1dHRvbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGdvTmV4dEJ1dHRvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogVXNlci1kZWZpbmVkIHRlbXBsYXRlIGZvciBcIkZpbmlzaFwiIGJ1dHRvbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGZpbmlzaEJ1dHRvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogVXNlci1kZWZpbmVkIHRlbXBsYXRlIGZvciBzdW1tYXJ5IHN0ZXAuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBjdXN0b21TdW1tYXJ5U3RlcFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgLyoqIFVzZXItZGVmaW5lZCB0ZW1wbGF0ZSBmb3IgXCJSZXZpZXdcIiBidXR0b24gKi9cbiAgICBASW5wdXQoKVxuICAgIHJldmlld0J1dHRvblRlbXBsYXRlPzogVGVtcGxhdGVSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIElzIGN1cnJlbnQgc3RlcCBpcyBzdW1tYXJ5IHN0ZXAuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBpc1N1bW1hcnlTdGVwID0gZmFsc2U7XG5cbiAgICAvKiogSWYgbmF2aWdhdGlvbiBidXR0b25zIHNob3VsZCBiZSB2aXNpYmxlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbmF2aWdhdGlvbkJ1dHRvbnMgPSB0cnVlO1xuXG4gICAgLyoqIFdoZXRoZXIgb3Igbm90IGFsbCBmb3JtIGl0ZW1zIHNob3VsZCBoYXZlIGlkZW50aWNhbCBsYXlvdXQgcHJvdmlkZWQgZm9yIGZvcm0gZ3JvdXAuICovXG4gICAgQElucHV0KClcbiAgICB1bmlmaWVkTGF5b3V0ID0gdHJ1ZTtcblxuICAgIC8qKiBXaGV0aGVyIGN1cnJlbnQgc3RlcCBpcyBhIGJyYW5jaGluZyBzdGVwLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaXNCcmFuY2hpbmdTdGVwID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciBjdXJyZW50IHN0ZXAgaXMgY29tcGxldGVkICovXG4gICAgQElucHV0KClcbiAgICBpc0N1cnJlbnRTdGVwQ29tcGxldGVkID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciBvcmRlciBvZiBzdGVwcyB3YXMgY2hhbmdlZCAgKi9cbiAgICBASW5wdXQoKVxuICAgIHN0ZXBzT3JkZXJDaGFuZ2VkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRW1pdHMgd2hlbiBzb21lIHN0ZXAgc3RhdHVzIGhhcyBiZWVuIGNoYW5nZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgc3RhdHVzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxXaXphcmRTdGVwQ2hhbmdlPigpO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVtaXRzIHdoZW4gXCJHbyBuZXh0XCIgYnV0dG9uIGhhcyBiZWVuIGNsaWNrZWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBnb05leHQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRW1pdHMgd2hlbiBcIkZpbmlzaFwiIGJ1dHRvbiBoYXMgYmVlbiBjbGlja2VkXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgZmluaXNoID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEFuIFJ4SlMgU3ViamVjdCB0aGF0IHdpbGwga2lsbCB0aGUgZGF0YSBzdHJlYW0gdXBvbiBjb21wb25lbnTigJlzIGRlc3RydWN0aW9uIChmb3IgdW5zdWJzY3JpYmluZylcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vbkRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF92aXNpYmxlSXRlbXM6IFByZXBhcmVkV2l6YXJkR2VuZXJhdG9ySXRlbVtdO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEFycmF5IG9mIHZpc2libGUgV2l6YXJkIFN0ZXBzLlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXG4gICAgc2V0IHZpc2libGVJdGVtcyhpdGVtczogUHJlcGFyZWRXaXphcmRHZW5lcmF0b3JJdGVtW10pIHtcbiAgICAgICAgdGhpcy5fdmlzaWJsZUl0ZW1zID0gaXRlbXM7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXG4gICAgZ2V0IHZpc2libGVJdGVtcygpOiBQcmVwYXJlZFdpemFyZEdlbmVyYXRvckl0ZW1bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92aXNpYmxlSXRlbXMgfHwgdGhpcy5fd2l6YXJkR2VuZXJhdG9yU2VydmljZS5pdGVtcztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX3dpemFyZEdlbmVyYXRvclNlcnZpY2U6IFdpemFyZEdlbmVyYXRvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZlxuICAgICkge31cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBfZ29OZXh0Rm46ICgpID0+IHZvaWQgPSAoKSA9PiB0aGlzLmdvTmV4dC5lbWl0KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgX2ZpbmlzaEZuOiAoKSA9PiB2b2lkID0gKCkgPT4gdGhpcy5maW5pc2guZW1pdCgpO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEN1c3RvbSBzdGVwIHN0YXR1cyBjaGFuZ2UgdmFsaWRhdG9yIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSBpbmRleCBDdXJyZW50IHN0ZXAgaW5kZXguXG4gICAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IElmIHRoaXMgc3RlcCBzdGF0dXMgY2FuIGJlIGNoYW5nZWQuXG4gICAgICovXG4gICAgc3RlcENsaWNrVmFsaWRhdG9yRm4oaW5kZXg6IG51bWJlcik6ICgpID0+IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFN0ZXBJbmRleCA9IHRoaXMuX3dpemFyZEdlbmVyYXRvclNlcnZpY2UuZ2V0Q3VycmVudFN0ZXBJbmRleCgpO1xuICAgICAgICAgICAgY29uc3QgaXNTdW1tYXJ5U3RlcCA9IHRoaXMuX3Zpc2libGVJdGVtc1tjdXJyZW50U3RlcEluZGV4XT8uc3VtbWFyeSA9PT0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKGluZGV4ID09PSBjdXJyZW50U3RlcEluZGV4IHx8IGlzU3VtbWFyeVN0ZXApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuX3Zpc2libGVJdGVtcy5zbGljZSgwLCBpbmRleCkuZmluZCgoaSkgPT4gIWkuY29tcGxldGVkICYmICFpLnN1bW1hcnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5fd2l6YXJkR2VuZXJhdG9yU2VydmljZS52YWxpZGF0ZVN0ZXBGb3Jtcyh0cnVlKSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl93aXphcmRHZW5lcmF0b3JTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0VmlzaWJsZVN0ZXBzKClcbiAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSg1MCksIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHZpc2libGVTdGVwcykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Zpc2libGVJdGVtcyA9IHZpc2libGVTdGVwcztcbiAgICAgICAgICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENhbGxiYWNrIGZ1bmN0aW9uIGZvciBzdGF0dXMgY2hhbmdlLlxuICAgICAqIEBwYXJhbSBpZCBzdGVwIElELlxuICAgICAqIEBwYXJhbSBzdGF0dXMgbmV3IHN0ZXAgc3RhdHVzLlxuICAgICAqL1xuICAgIHN0ZXBTdGF0dXNDaGFuZ2VkKGlkOiBzdHJpbmcsIHN0YXR1czogV2l6YXJkU3RlcFN0YXR1cyk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0YXR1c0NoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgc3RhdHVzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgc3RlcENsaWNrZWQoc3RlcElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RlcEluZGV4ID0gdGhpcy5fd2l6YXJkR2VuZXJhdG9yU2VydmljZS5nZXRTdGVwSW5kZXgoc3RlcElkKTtcbiAgICAgICAgdGhpcy5fd2l6YXJkR2VuZXJhdG9yU2VydmljZS5zZXROZXh0U3RlcEluZGV4KHN0ZXBJbmRleCArIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAcGFyYW0gX2luZGV4XG4gICAgICogQHBhcmFtIGl0ZW1cbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIF90cmFja0ZuKF9pbmRleDogbnVtYmVyLCBpdGVtOiBXaXphcmRHZW5lcmF0b3JJdGVtKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uaWQ7XG4gICAgfVxufVxuIiwiQGlmICh2aXNpYmxlSXRlbXMpIHtcbiAgICA8ZmQtd2l6YXJkXG4gICAgICAgIFtkaXNwbGF5U3VtbWFyeVN0ZXBdPVwiZGlzcGxheVN1bW1hcnlTdGVwXCJcbiAgICAgICAgW3Jlc3BvbnNpdmVQYWRkaW5nc109XCJyZXNwb25zaXZlUGFkZGluZ3NcIlxuICAgICAgICBbYXBwZW5kVG9XaXphcmRdPVwiYXBwZW5kVG9XaXphcmRcIlxuICAgICAgICBbY29udGVudEhlaWdodF09XCJjb250ZW50SGVpZ2h0XCJcbiAgICA+XG4gICAgICAgIDxmZC13aXphcmQtbmF2aWdhdGlvbj5cbiAgICAgICAgICAgIDx1bCBmZC13aXphcmQtcHJvZ3Jlc3MtYmFyPlxuICAgICAgICAgICAgICAgIEBmb3IgKHN0ZXAgb2YgdmlzaWJsZUl0ZW1zOyB0cmFjayBfdHJhY2tGbihpLCBzdGVwKTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAgICAgICBmZC13aXphcmQtc3RlcFxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cInN0ZXAubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3RhdHVzXT1cInN0ZXAuc3RhdHVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25hbFRleHRdPVwic3RlcC5vcHRpb25hbFRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2JyYW5jaGluZ109XCIhIXN0ZXAuYnJhbmNoaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdGVwQ2xpY2tWYWxpZGF0b3JdPVwic3RlcENsaWNrVmFsaWRhdG9yRm4oaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lzU3VtbWFyeV09XCIhIXN0ZXAuc3VtbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoc3RhdHVzQ2hhbmdlKT1cInN0ZXBTdGF0dXNDaGFuZ2VkKHN0ZXAuaWQsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHN0ZXBDbGlja2VkKT1cInN0ZXBDbGlja2VkKHN0ZXAuaWQpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGZkLXdpemFyZC1zdGVwLWluZGljYXRvciBbZ2x5cGhdPVwic3RlcC5pY29uIHx8IG51bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFzdGVwLmljb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaSArIDEgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLXdpemFyZC1zdGVwLWluZGljYXRvcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxmZC13aXphcmQtY29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFzdGVwLnN1bW1hcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkcC13aXphcmQtZ2VuZXJhdG9yLXN0ZXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt1bmlmaWVkTGF5b3V0XT1cInVuaWZpZWRMYXlvdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwic3RlcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RlcFN0YXR1c109XCJzdGVwLnN0YXR1c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2ZkcC13aXphcmQtZ2VuZXJhdG9yLXN0ZXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZHAtd2l6YXJkLXN1bW1hcnktc3RlcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N1c3RvbVN1bW1hcnlTdGVwVGVtcGxhdGVdPVwiY3VzdG9tU3VtbWFyeVN0ZXBUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RhdHVzXT1cInN0ZXAuc3RhdHVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZmRwLXdpemFyZC1zdW1tYXJ5LXN0ZXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAobmF2aWdhdGlvbkJ1dHRvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLXdpemFyZC1uZXh0LXN0ZXAgW2NhbkhpZGVdPVwiYXBwZW5kVG9XaXphcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIWlzTGFzdFN0ZXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRHb05leHRCdXR0b25UZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkcC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmZENvbnRlbnREZW5zaXR5XT1cIm5hdmlnYXRpb25CdXR0b25MYWJlbHMuZ29OZXh0LmNvbnRlbnREZW5zaXR5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtidXR0b25UeXBlXT1cIm5hdmlnYXRpb25CdXR0b25MYWJlbHMuZ29OZXh0LnR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIm5hdmlnYXRpb25CdXR0b25MYWJlbHMuZ29OZXh0LmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJnb05leHQuZW1pdCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZmRwLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFJldmlld0J1dHRvblRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmRwLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZkQ29udGVudERlbnNpdHldPVwibmF2aWdhdGlvbkJ1dHRvbkxhYmVscy5yZXZpZXcuY29udGVudERlbnNpdHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2J1dHRvblR5cGVdPVwibmF2aWdhdGlvbkJ1dHRvbkxhYmVscy5yZXZpZXcudHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibmF2aWdhdGlvbkJ1dHRvbkxhYmVscy5yZXZpZXcubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImdvTmV4dC5lbWl0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9mZHAtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlzQnJhbmNoaW5nU3RlcCAmJiAoIWlzQ3VycmVudFN0ZXBDb21wbGV0ZWQgfHwgc3RlcHNPcmRlckNoYW5nZWQpKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhaXNOZXh0U3RlcFN1bW1hcnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJnb05leHRCdXR0b25UZW1wbGF0ZSB8fCBkZWZhdWx0R29OZXh0QnV0dG9uVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZ29OZXh0OiBfZ29OZXh0Rm4gfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInJldmlld0J1dHRvblRlbXBsYXRlIHx8IGRlZmF1bHRSZXZpZXdCdXR0b25UZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBnb05leHQ6IF9nb05leHRGbiB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0RmluaXNoQnV0dG9uVGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmRDb250ZW50RGVuc2l0eV09XCJuYXZpZ2F0aW9uQnV0dG9uTGFiZWxzLmZpbmlzaC5jb250ZW50RGVuc2l0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYnV0dG9uVHlwZV09XCJuYXZpZ2F0aW9uQnV0dG9uTGFiZWxzLmZpbmlzaC50eXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJuYXZpZ2F0aW9uQnV0dG9uTGFiZWxzLmZpbmlzaC5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZmluaXNoLmVtaXQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2ZkcC1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmluaXNoQnV0dG9uVGVtcGxhdGUgfHwgZGVmYXVsdEZpbmlzaEJ1dHRvblRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZmluaXNoOiBfZmluaXNoRm4gfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtd2l6YXJkLW5leHQtc3RlcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLXdpemFyZC1jb250ZW50PlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZmQtd2l6YXJkLW5hdmlnYXRpb24+XG4gICAgPC9mZC13aXphcmQ+XG59XG4iXX0=
214
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l6YXJkLWJvZHkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93aXphcmQtZ2VuZXJhdG9yL2NvbXBvbmVudHMvd2l6YXJkLWJvZHkvd2l6YXJkLWJvZHkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93aXphcmQtZ2VuZXJhdG9yL2NvbXBvbmVudHMvd2l6YXJkLWJvZHkvd2l6YXJkLWJvZHkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFdBQVcsRUFDWCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUd6RCxPQUFPLEVBQUUsWUFBWSxFQUFvQixNQUFNLDhCQUE4QixDQUFDO0FBRTlFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUduRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUN4RyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQzs7OztBQXNCbEcsTUFBTSxPQUFPLG1CQUFtQjtJQWdJNUI7O09BRUc7SUFDSCw4REFBOEQ7SUFDOUQsSUFB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QkFDNUIsMEJBQTBCO3dCQUMxQixlQUFlO3dCQUNmLHVCQUF1Qjt3QkFDdkIsZ0JBQWdCO3FCQUNuQjsySEFPRCxrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBT04sc0JBQXNCO3NCQURyQixLQUFLO2dCQVFOLGNBQWM7c0JBRGIsS0FBSztnQkFRTixhQUFhO3NCQURaLEtBQUs7Z0JBT04sV0FBVztzQkFEVixLQUFLO2dCQU9OLFVBQVU7c0JBRFQsS0FBSztnQkFPTixpQkFBaUI7c0JBRGhCLEtBQUs7Z0JBT04sa0JBQWtCO3NCQURqQixLQUFLO2dCQU9OLG9CQUFvQjtzQkFEbkIsS0FBSztnQkFPTixvQkFBb0I7c0JBRG5CLEtBQUs7Z0JBT04seUJBQXlCO3NCQUR4QixLQUFLO2dCQUtOLG9CQUFvQjtzQkFEbkIsS0FBSztnQkFPTixhQUFhO3NCQURaLEtBQUs7Z0JBS04saUJBQWlCO3NCQURoQixLQUFLO2dCQUtOLGFBQWE7c0JBRFosS0FBSztnQkFLTixlQUFlO3NCQURkLEtBQUs7Z0JBS04sc0JBQXNCO3NCQURyQixLQUFLO2dCQUtOLGlCQUFpQjtzQkFEaEIsS0FBSztnQkFPTixZQUFZO3NCQURYLE1BQU07Z0JBT1AsTUFBTTtzQkFETCxNQUFNO2dCQU9QLE1BQU07c0JBREwsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QsIGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgTnVsbGFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBXaXphcmRNb2R1bGUsIFdpemFyZFN0ZXBTdGF0dXMgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvd2l6YXJkJztcblxuaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eURpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jb250ZW50LWRlbnNpdHknO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9idXR0b24nO1xuaW1wb3J0IHsgUHJlcGFyZWRXaXphcmRHZW5lcmF0b3JJdGVtLCBXaXphcmRHZW5lcmF0b3JJdGVtIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy93aXphcmQtZ2VuZXJhdG9yLWl0ZW0uaW50ZXJmYWNlJztcbmltcG9ydCB7IFdpemFyZE5hdmlnYXRpb25CdXR0b25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy93aXphcmQtbmF2aWdhdGlvbi1idXR0b25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBXaXphcmRHZW5lcmF0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vd2l6YXJkLWdlbmVyYXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IFdpemFyZEdlbmVyYXRvclN0ZXBDb21wb25lbnQgfSBmcm9tICcuLi93aXphcmQtZ2VuZXJhdG9yLXN0ZXAvd2l6YXJkLWdlbmVyYXRvci1zdGVwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBXaXphcmRTdW1tYXJ5U3RlcENvbXBvbmVudCB9IGZyb20gJy4uL3dpemFyZC1zdW1tYXJ5LXN0ZXAvd2l6YXJkLXN1bW1hcnktc3RlcC5jb21wb25lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFdpemFyZFN0ZXBDaGFuZ2Uge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgc3RhdHVzOiBXaXphcmRTdGVwU3RhdHVzO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkcC13aXphcmQtYm9keScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3dpemFyZC1ib2R5LmNvbXBvbmVudC5odG1sJyxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBXaXphcmRNb2R1bGUsXG4gICAgICAgIFdpemFyZEdlbmVyYXRvclN0ZXBDb21wb25lbnQsXG4gICAgICAgIFdpemFyZFN1bW1hcnlTdGVwQ29tcG9uZW50LFxuICAgICAgICBCdXR0b25Db21wb25lbnQsXG4gICAgICAgIENvbnRlbnREZW5zaXR5RGlyZWN0aXZlLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBXaXphcmRCb2R5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBXaGV0aGVyIG9yIG5vdCBhcHBseSByZXNwb25zaXZlIHBhZGRpbmdzIHN0eWxpbmcuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICByZXNwb25zaXZlUGFkZGluZ3MgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEJ1dHRvbiBsYWJlbHMgdG8gYmUgdXNlZCBpbiBXaXphcmQgbmF2aWdhdGlvblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbmF2aWdhdGlvbkJ1dHRvbkxhYmVsczogUmVxdWlyZWQ8V2l6YXJkTmF2aWdhdGlvbkJ1dHRvbnM+O1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFdoZXRoZXIgb3Igbm90IHRvIGFwcGVuZCB0aGUgc3RlcCB0byB0aGUgd2l6YXJkLiBJZiBmYWxzZSwgZWFjaCBzdGVwIHdpbGwgYmUgZGlzcGxheWVkIG9uIGEgZGlmZmVyZW50IHBhZ2UuXG4gICAgICogRGVmYXVsdCBpcyB0cnVlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXBwZW5kVG9XaXphcmQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEN1c3RvbSBoZWlnaHQgdG8gdXNlIGZvciB0aGUgd2l6YXJkJ3MgY29udGVudCBwYW5lLiBCeSBkZWZhdWx0LCB0aGlzIHZhbHVlIGlzIGNhbGMoMTAwdmggLSAxNDRweCksIHdoZXJlIDE0NHB4XG4gICAgICogaXMgdGhlIGNvbWJpbmVkIGhlaWdodCBvZiB0aGUgU2hlbGxiYXIsIHdpemFyZCBoZWFkZXIgYW5kIHdpemFyZCBmb290ZXIuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBjb250ZW50SGVpZ2h0OiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFdoZXRoZXIgb3Igbm90IFdpemFyZCBpcyBjdXJyZW50bHkgb24gdGhlIGZpcnN0IHN0ZXBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGlzRmlyc3RTdGVwID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gV2hldGhlciBXaXphcmQgaXMgY3VycmVudGx5IG9uIHRoZSBsYXN0IHN0ZXAuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBpc0xhc3RTdGVwID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG5leHQgc3RlcCBpcyBhIFN1bW1hcnkgc3RlcC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGlzTmV4dFN0ZXBTdW1tYXJ5ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQm9vbGVhbiBmbGFnIGluZGljYXRpbmcgd2hldGhlciB0byBkaXNwbGF5IFN1bW1hcnkgc3RlcCBpbiBXaXphcmQgcHJvZ3Jlc3MgYmFyLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzcGxheVN1bW1hcnlTdGVwID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBVc2VyLWRlZmluZWQgdGVtcGxhdGUgZm9yIFwiR28gTmV4dFwiIGJ1dHRvbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGdvTmV4dEJ1dHRvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogVXNlci1kZWZpbmVkIHRlbXBsYXRlIGZvciBcIkZpbmlzaFwiIGJ1dHRvbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGZpbmlzaEJ1dHRvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogVXNlci1kZWZpbmVkIHRlbXBsYXRlIGZvciBzdW1tYXJ5IHN0ZXAuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBjdXN0b21TdW1tYXJ5U3RlcFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgLyoqIFVzZXItZGVmaW5lZCB0ZW1wbGF0ZSBmb3IgXCJSZXZpZXdcIiBidXR0b24gKi9cbiAgICBASW5wdXQoKVxuICAgIHJldmlld0J1dHRvblRlbXBsYXRlPzogVGVtcGxhdGVSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIElzIGN1cnJlbnQgc3RlcCBpcyBzdW1tYXJ5IHN0ZXAuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBpc1N1bW1hcnlTdGVwID0gZmFsc2U7XG5cbiAgICAvKiogSWYgbmF2aWdhdGlvbiBidXR0b25zIHNob3VsZCBiZSB2aXNpYmxlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbmF2aWdhdGlvbkJ1dHRvbnMgPSB0cnVlO1xuXG4gICAgLyoqIFdoZXRoZXIgb3Igbm90IGFsbCBmb3JtIGl0ZW1zIHNob3VsZCBoYXZlIGlkZW50aWNhbCBsYXlvdXQgcHJvdmlkZWQgZm9yIGZvcm0gZ3JvdXAuICovXG4gICAgQElucHV0KClcbiAgICB1bmlmaWVkTGF5b3V0ID0gdHJ1ZTtcblxuICAgIC8qKiBXaGV0aGVyIGN1cnJlbnQgc3RlcCBpcyBhIGJyYW5jaGluZyBzdGVwLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaXNCcmFuY2hpbmdTdGVwID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciBjdXJyZW50IHN0ZXAgaXMgY29tcGxldGVkICovXG4gICAgQElucHV0KClcbiAgICBpc0N1cnJlbnRTdGVwQ29tcGxldGVkID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciBvcmRlciBvZiBzdGVwcyB3YXMgY2hhbmdlZCAgKi9cbiAgICBASW5wdXQoKVxuICAgIHN0ZXBzT3JkZXJDaGFuZ2VkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRW1pdHMgd2hlbiBzb21lIHN0ZXAgc3RhdHVzIGhhcyBiZWVuIGNoYW5nZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgc3RhdHVzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxXaXphcmRTdGVwQ2hhbmdlPigpO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVtaXRzIHdoZW4gXCJHbyBuZXh0XCIgYnV0dG9uIGhhcyBiZWVuIGNsaWNrZWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBnb05leHQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRW1pdHMgd2hlbiBcIkZpbmlzaFwiIGJ1dHRvbiBoYXMgYmVlbiBjbGlja2VkXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgZmluaXNoID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEFuIFJ4SlMgU3ViamVjdCB0aGF0IHdpbGwga2lsbCB0aGUgZGF0YSBzdHJlYW0gdXBvbiBjb21wb25lbnTigJlzIGRlc3RydWN0aW9uIChmb3IgdW5zdWJzY3JpYmluZylcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vbkRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF92aXNpYmxlSXRlbXM6IFByZXBhcmVkV2l6YXJkR2VuZXJhdG9ySXRlbVtdO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEFycmF5IG9mIHZpc2libGUgV2l6YXJkIFN0ZXBzLlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXG4gICAgc2V0IHZpc2libGVJdGVtcyhpdGVtczogUHJlcGFyZWRXaXphcmRHZW5lcmF0b3JJdGVtW10pIHtcbiAgICAgICAgdGhpcy5fdmlzaWJsZUl0ZW1zID0gaXRlbXM7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXG4gICAgZ2V0IHZpc2libGVJdGVtcygpOiBQcmVwYXJlZFdpemFyZEdlbmVyYXRvckl0ZW1bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92aXNpYmxlSXRlbXMgfHwgdGhpcy5fd2l6YXJkR2VuZXJhdG9yU2VydmljZS5pdGVtcztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX3dpemFyZEdlbmVyYXRvclNlcnZpY2U6IFdpemFyZEdlbmVyYXRvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZlxuICAgICkge31cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBfZ29OZXh0Rm46ICgpID0+IHZvaWQgPSAoKSA9PiB0aGlzLmdvTmV4dC5lbWl0KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgX2ZpbmlzaEZuOiAoKSA9PiB2b2lkID0gKCkgPT4gdGhpcy5maW5pc2guZW1pdCgpO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEN1c3RvbSBzdGVwIHN0YXR1cyBjaGFuZ2UgdmFsaWRhdG9yIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSBpbmRleCBDdXJyZW50IHN0ZXAgaW5kZXguXG4gICAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IElmIHRoaXMgc3RlcCBzdGF0dXMgY2FuIGJlIGNoYW5nZWQuXG4gICAgICovXG4gICAgc3RlcENsaWNrVmFsaWRhdG9yRm4oaW5kZXg6IG51bWJlcik6ICgpID0+IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFN0ZXBJbmRleCA9IHRoaXMuX3dpemFyZEdlbmVyYXRvclNlcnZpY2UuZ2V0Q3VycmVudFN0ZXBJbmRleCgpO1xuICAgICAgICAgICAgY29uc3QgaXNTdW1tYXJ5U3RlcCA9IHRoaXMuX3Zpc2libGVJdGVtc1tjdXJyZW50U3RlcEluZGV4XT8uc3VtbWFyeSA9PT0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKGluZGV4ID09PSBjdXJyZW50U3RlcEluZGV4IHx8IGlzU3VtbWFyeVN0ZXApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuX3Zpc2libGVJdGVtcy5zbGljZSgwLCBpbmRleCkuZmluZCgoaSkgPT4gIWkuY29tcGxldGVkICYmICFpLnN1bW1hcnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5fd2l6YXJkR2VuZXJhdG9yU2VydmljZS52YWxpZGF0ZVN0ZXBGb3Jtcyh0cnVlKSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl93aXphcmRHZW5lcmF0b3JTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0VmlzaWJsZVN0ZXBzKClcbiAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSg1MCksIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHZpc2libGVTdGVwcykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Zpc2libGVJdGVtcyA9IHZpc2libGVTdGVwcztcbiAgICAgICAgICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENhbGxiYWNrIGZ1bmN0aW9uIGZvciBzdGF0dXMgY2hhbmdlLlxuICAgICAqIEBwYXJhbSBpZCBzdGVwIElELlxuICAgICAqIEBwYXJhbSBzdGF0dXMgbmV3IHN0ZXAgc3RhdHVzLlxuICAgICAqL1xuICAgIHN0ZXBTdGF0dXNDaGFuZ2VkKGlkOiBzdHJpbmcsIHN0YXR1czogV2l6YXJkU3RlcFN0YXR1cyk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0YXR1c0NoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgc3RhdHVzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgc3RlcENsaWNrZWQoc3RlcElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RlcEluZGV4ID0gdGhpcy5fd2l6YXJkR2VuZXJhdG9yU2VydmljZS5nZXRTdGVwSW5kZXgoc3RlcElkKTtcbiAgICAgICAgdGhpcy5fd2l6YXJkR2VuZXJhdG9yU2VydmljZS5zZXROZXh0U3RlcEluZGV4KHN0ZXBJbmRleCArIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAcGFyYW0gX2luZGV4XG4gICAgICogQHBhcmFtIGl0ZW1cbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIF90cmFja0ZuKF9pbmRleDogbnVtYmVyLCBpdGVtOiBXaXphcmRHZW5lcmF0b3JJdGVtKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uaWQ7XG4gICAgfVxufVxuIiwiQGlmICh2aXNpYmxlSXRlbXMpIHtcbiAgICA8ZmQtd2l6YXJkXG4gICAgICAgIFtkaXNwbGF5U3VtbWFyeVN0ZXBdPVwiZGlzcGxheVN1bW1hcnlTdGVwXCJcbiAgICAgICAgW3Jlc3BvbnNpdmVQYWRkaW5nc109XCJyZXNwb25zaXZlUGFkZGluZ3NcIlxuICAgICAgICBbYXBwZW5kVG9XaXphcmRdPVwiYXBwZW5kVG9XaXphcmRcIlxuICAgICAgICBbY29udGVudEhlaWdodF09XCJjb250ZW50SGVpZ2h0XCJcbiAgICA+XG4gICAgICAgIDxmZC13aXphcmQtbmF2aWdhdGlvbj5cbiAgICAgICAgICAgIDx1bCBmZC13aXphcmQtcHJvZ3Jlc3MtYmFyPlxuICAgICAgICAgICAgICAgIEBmb3IgKHN0ZXAgb2YgdmlzaWJsZUl0ZW1zOyB0cmFjayBfdHJhY2tGbihpLCBzdGVwKTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAgICAgICBmZC13aXphcmQtc3RlcFxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cInN0ZXAubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3RhdHVzXT1cInN0ZXAuc3RhdHVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25hbFRleHRdPVwic3RlcC5vcHRpb25hbFRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2JyYW5jaGluZ109XCIhIXN0ZXAuYnJhbmNoaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdGVwQ2xpY2tWYWxpZGF0b3JdPVwic3RlcENsaWNrVmFsaWRhdG9yRm4oaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lzU3VtbWFyeV09XCIhIXN0ZXAuc3VtbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoc3RhdHVzQ2hhbmdlKT1cInN0ZXBTdGF0dXNDaGFuZ2VkKHN0ZXAuaWQsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHN0ZXBDbGlja2VkKT1cInN0ZXBDbGlja2VkKHN0ZXAuaWQpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGZkLXdpemFyZC1zdGVwLWluZGljYXRvciBbZ2x5cGhdPVwic3RlcC5pY29uIHx8IG51bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFzdGVwLmljb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaSArIDEgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLXdpemFyZC1zdGVwLWluZGljYXRvcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxmZC13aXphcmQtY29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFzdGVwLnN1bW1hcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkcC13aXphcmQtZ2VuZXJhdG9yLXN0ZXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt1bmlmaWVkTGF5b3V0XT1cInVuaWZpZWRMYXlvdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwic3RlcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RlcFN0YXR1c109XCJzdGVwLnN0YXR1c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2ZkcC13aXphcmQtZ2VuZXJhdG9yLXN0ZXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZHAtd2l6YXJkLXN1bW1hcnktc3RlcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N1c3RvbVN1bW1hcnlTdGVwVGVtcGxhdGVdPVwiY3VzdG9tU3VtbWFyeVN0ZXBUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RhdHVzXT1cInN0ZXAuc3RhdHVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZmRwLXdpemFyZC1zdW1tYXJ5LXN0ZXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAobmF2aWdhdGlvbkJ1dHRvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLXdpemFyZC1uZXh0LXN0ZXAgW2NhbkhpZGVdPVwiYXBwZW5kVG9XaXphcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIWlzTGFzdFN0ZXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRHb05leHRCdXR0b25UZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkcC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmZENvbnRlbnREZW5zaXR5XT1cIm5hdmlnYXRpb25CdXR0b25MYWJlbHMuZ29OZXh0LmNvbnRlbnREZW5zaXR5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtidXR0b25UeXBlXT1cIm5hdmlnYXRpb25CdXR0b25MYWJlbHMuZ29OZXh0LnR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIm5hdmlnYXRpb25CdXR0b25MYWJlbHMuZ29OZXh0LmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJnb05leHQuZW1pdCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZmRwLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFJldmlld0J1dHRvblRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmRwLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZkQ29udGVudERlbnNpdHldPVwibmF2aWdhdGlvbkJ1dHRvbkxhYmVscy5yZXZpZXcuY29udGVudERlbnNpdHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2J1dHRvblR5cGVdPVwibmF2aWdhdGlvbkJ1dHRvbkxhYmVscy5yZXZpZXcudHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibmF2aWdhdGlvbkJ1dHRvbkxhYmVscy5yZXZpZXcubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImdvTmV4dC5lbWl0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9mZHAtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlzQnJhbmNoaW5nU3RlcCAmJiAoIWlzQ3VycmVudFN0ZXBDb21wbGV0ZWQgfHwgc3RlcHNPcmRlckNoYW5nZWQpKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhaXNOZXh0U3RlcFN1bW1hcnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJnb05leHRCdXR0b25UZW1wbGF0ZSB8fCBkZWZhdWx0R29OZXh0QnV0dG9uVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZ29OZXh0OiBfZ29OZXh0Rm4gfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInJldmlld0J1dHRvblRlbXBsYXRlIHx8IGRlZmF1bHRSZXZpZXdCdXR0b25UZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBnb05leHQ6IF9nb05leHRGbiB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0RmluaXNoQnV0dG9uVGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmRDb250ZW50RGVuc2l0eV09XCJuYXZpZ2F0aW9uQnV0dG9uTGFiZWxzLmZpbmlzaC5jb250ZW50RGVuc2l0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYnV0dG9uVHlwZV09XCJuYXZpZ2F0aW9uQnV0dG9uTGFiZWxzLmZpbmlzaC50eXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJuYXZpZ2F0aW9uQnV0dG9uTGFiZWxzLmZpbmlzaC5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZmluaXNoLmVtaXQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2ZkcC1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmluaXNoQnV0dG9uVGVtcGxhdGUgfHwgZGVmYXVsdEZpbmlzaEJ1dHRvblRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZmluaXNoOiBfZmluaXNoRm4gfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtd2l6YXJkLW5leHQtc3RlcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLXdpemFyZC1jb250ZW50PlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZmQtd2l6YXJkLW5hdmlnYXRpb24+XG4gICAgPC9mZC13aXphcmQ+XG59XG4iXX0=