@myrmidon/gve-core 0.0.5 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/README.md +2 -0
  2. package/esm2022/lib/components/animation-timeline/animation-timeline.component.mjs +4 -4
  3. package/esm2022/lib/components/animation-timeline-set/animation-timeline-set.component.mjs +4 -4
  4. package/esm2022/lib/components/animation-tween/animation-tween.component.mjs +4 -4
  5. package/esm2022/lib/components/base-text-char/base-text-char.component.mjs +4 -4
  6. package/esm2022/lib/components/base-text-editor/base-text-editor.component.mjs +4 -4
  7. package/esm2022/lib/components/base-text-view/base-text-view.component.mjs +4 -4
  8. package/esm2022/lib/components/batch-operation-editor/batch-operation-editor.component.mjs +111 -0
  9. package/esm2022/lib/components/chain-operation-editor/chain-operation-editor.component.mjs +4 -4
  10. package/esm2022/lib/components/chain-result-view/chain-result-view.component.mjs +8 -5
  11. package/esm2022/lib/components/feature-editor/feature-editor.component.mjs +4 -4
  12. package/esm2022/lib/components/feature-set-editor/feature-set-editor.component.mjs +4 -4
  13. package/esm2022/lib/components/feature-set-view/feature-set-view.component.mjs +5 -5
  14. package/esm2022/lib/components/ln-heights-editor/ln-heights-editor.component.mjs +4 -4
  15. package/esm2022/lib/components/operation-source-editor/operation-source-editor.component.mjs +4 -4
  16. package/esm2022/lib/components/simple-tree/simple-tree.component.mjs +4 -4
  17. package/esm2022/lib/components/snapshot-editor/snapshot-editor.component.mjs +82 -75
  18. package/esm2022/lib/components/steps-map/steps-map.component.mjs +12 -6
  19. package/esm2022/lib/models.mjs +1 -1
  20. package/esm2022/lib/services/gve-api.service.mjs +4 -4
  21. package/esm2022/lib/services/settings.service.mjs +4 -4
  22. package/esm2022/public-api.mjs +2 -1
  23. package/fesm2022/myrmidon-gve-core.mjs +296 -183
  24. package/fesm2022/myrmidon-gve-core.mjs.map +1 -1
  25. package/lib/components/batch-operation-editor/batch-operation-editor.component.d.ts +46 -0
  26. package/lib/components/chain-result-view/chain-result-view.component.d.ts +4 -1
  27. package/lib/components/feature-set-editor/feature-set-editor.component.d.ts +1 -1
  28. package/lib/components/snapshot-editor/snapshot-editor.component.d.ts +11 -9
  29. package/lib/components/steps-map/steps-map.component.d.ts +2 -0
  30. package/lib/models.d.ts +8 -0
  31. package/lib/services/gve-api.service.d.ts +33 -0
  32. package/package.json +8 -8
  33. package/public-api.d.ts +1 -0
@@ -18,7 +18,10 @@ import * as i5 from "@angular/material/core";
18
18
  /**
19
19
  * 🔑 `gve-chain-result-view`
20
20
  *
21
- * Component to display a chain result.
21
+ * Component to display a chain result. This provides a version picker
22
+ * by staged version or simple step, and shows the selected step's text
23
+ * and features, plus a steps map. User can pick a step from both the
24
+ * pickers or the map.
22
25
  * Used by the `gve-snapshot-editor` component.
23
26
  *
24
27
  * - ▶️ `result` (`CharChainResult`): the result to display.
@@ -196,10 +199,10 @@ export class ChainResultViewComponent {
196
199
  this.tag.setValue(step.outputTag);
197
200
  this.selectionFeatures = [];
198
201
  }
199
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ChainResultViewComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
200
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.8", type: ChainResultViewComponent, isStandalone: true, selector: "gve-chain-result-view", inputs: { result: "result", initialStepIndex: "initialStepIndex" }, outputs: { stepPick: "stepPick" }, ngImport: i0, template: "@if (result) {\r\n<div id=\"container\">\r\n <div id=\"bar\" class=\"form-row\">\r\n <!-- version -->\r\n <mat-form-field *ngIf=\"versionTags?.length\">\r\n <mat-label>version</mat-label>\r\n <mat-select [formControl]=\"versionTag\">\r\n <mat-option [value]=\"null\">-</mat-option>\r\n <mat-option *ngFor=\"let t of versionTags\" [value]=\"t\">{{\r\n t\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <!-- tag -->\r\n <mat-form-field *ngIf=\"tags?.length\">\r\n <mat-label>tag</mat-label>\r\n <mat-select [formControl]=\"tag\">\r\n <mat-option *ngFor=\"let t of tags\" [value]=\"t\">{{ t }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- step -->\r\n @if (step) {\r\n <div id=\"step\">\r\n <!-- text -->\r\n <div id=\"text\">\r\n <gve-base-text-view\r\n [text]=\"result.taggedNodes[step.outputTag]\"\r\n (charPick)=\"onStepCharPick($event)\"\r\n (rangePick)=\"onStepRangePick($event)\"\r\n />\r\n </div>\r\n <!-- features -->\r\n <div id=\"feats\" class=\"form-row-top\">\r\n <div id=\"g-feats\">\r\n <div class=\"feat-header\">{{ step.outputTag }}</div>\r\n <gve-feature-set-view [features]=\"step.featureSet.features\" />\r\n </div>\r\n <div id=\"n-feats\">\r\n @if (selectionFeatures.length) {\r\n <div class=\"feat-header\">{{ selection }}</div>\r\n <gve-feature-set-view [features]=\"selectionFeatures\" />\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- steps map -->\r\n <div id=\"map\">\r\n <gve-steps-map\r\n [steps]=\"result.steps\"\r\n [selectedStep]=\"step\"\r\n (selectedStepChange)=\"onStepChange($event)\"\r\n />\r\n </div>\r\n</div>\r\n}\r\n", styles: [".form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}.form-row-top{display:flex;gap:8px;align-items:start;flex-wrap:wrap}div#container{display:grid;grid-template-rows:auto 1fr;grid-template-columns:3fr 1fr;grid-template-areas:\"bar map\" \"step map\";gap:8px}div#bar{grid-area:bar}div#map{grid-area:map}div#step{grid-area:step}.feat-header{background-color:#3e92cc;color:#fff;text-align:center;border:1px solid #3e92cc;border-top-left-radius:4px;border-top-right-radius:4px}@media only screen and (max-width: 959px){div#container{grid-template-columns:1fr;grid-template-areas:\"bar\" \"step\"}#map{display:none}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i4.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: FeatureSetViewComponent, selector: "gve-feature-set-view", inputs: ["features", "featNames", "featValues", "filterThreshold"] }, { kind: "component", type: StepsMapComponent, selector: "gve-steps-map", inputs: ["steps", "selectedStep", "textFontSize"], outputs: ["selectedStepChange"] }, { kind: "component", type: BaseTextViewComponent, selector: "gve-base-text-view", inputs: ["defaultColor", "defaultBorderColor", "selectionColor", "hasLineNumber", "text"], outputs: ["charPick", "rangePick"] }] }); }
202
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ChainResultViewComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
203
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: ChainResultViewComponent, isStandalone: true, selector: "gve-chain-result-view", inputs: { result: "result", initialStepIndex: "initialStepIndex" }, outputs: { stepPick: "stepPick" }, ngImport: i0, template: "@if (result) {\r\n<div id=\"container\">\r\n <div id=\"bar\" class=\"form-row\">\r\n <!-- version -->\r\n <mat-form-field *ngIf=\"versionTags?.length\">\r\n <mat-label>version</mat-label>\r\n <mat-select [formControl]=\"versionTag\">\r\n <mat-option [value]=\"null\">-</mat-option>\r\n <mat-option *ngFor=\"let t of versionTags\" [value]=\"t\">{{\r\n t\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <!-- tag -->\r\n <mat-form-field *ngIf=\"tags?.length\">\r\n <mat-label>tag</mat-label>\r\n <mat-select [formControl]=\"tag\">\r\n <mat-option *ngFor=\"let t of tags\" [value]=\"t\">{{ t }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- step -->\r\n @if (step) {\r\n <div id=\"step\">\r\n <!-- text -->\r\n <div id=\"text\">\r\n <gve-base-text-view\r\n [text]=\"result.taggedNodes[step.outputTag]\"\r\n (charPick)=\"onStepCharPick($event)\"\r\n (rangePick)=\"onStepRangePick($event)\"\r\n />\r\n </div>\r\n <!-- features -->\r\n <div id=\"feats\" class=\"form-row-top\">\r\n <div id=\"g-feats\">\r\n <div class=\"feat-header\">{{ step.outputTag }}</div>\r\n <gve-feature-set-view [features]=\"step.featureSet.features\" />\r\n </div>\r\n <div id=\"n-feats\">\r\n @if (selectionFeatures.length) {\r\n <div class=\"feat-header\">{{ selection }}</div>\r\n <gve-feature-set-view [features]=\"selectionFeatures\" />\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- steps map -->\r\n <div id=\"map\">\r\n <gve-steps-map\r\n [steps]=\"result.steps\"\r\n [selectedStep]=\"step\"\r\n (selectedStepChange)=\"onStepChange($event)\"\r\n />\r\n </div>\r\n</div>\r\n}\r\n", styles: [".form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}.form-row-top{display:flex;gap:8px;align-items:start;flex-wrap:wrap}div#container{display:grid;grid-template-rows:auto 1fr;grid-template-columns:3fr 1fr;grid-template-areas:\"bar map\" \"step map\";gap:8px}div#bar{grid-area:bar}div#map{grid-area:map}div#step{grid-area:step}.feat-header{background-color:#3e92cc;color:#fff;text-align:center;border:1px solid #3e92cc;border-top-left-radius:4px;border-top-right-radius:4px}@media only screen and (max-width: 959px){div#container{grid-template-columns:1fr;grid-template-areas:\"bar\" \"step\"}#map{display:none}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i4.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: FeatureSetViewComponent, selector: "gve-feature-set-view", inputs: ["features", "featNames", "featValues", "filterThreshold"] }, { kind: "component", type: StepsMapComponent, selector: "gve-steps-map", inputs: ["steps", "selectedStep", "textFontSize"], outputs: ["selectedStepChange"] }, { kind: "component", type: BaseTextViewComponent, selector: "gve-base-text-view", inputs: ["defaultColor", "defaultBorderColor", "selectionColor", "hasLineNumber", "text"], outputs: ["charPick", "rangePick"] }] }); }
201
204
  }
202
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ChainResultViewComponent, decorators: [{
205
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ChainResultViewComponent, decorators: [{
203
206
  type: Component,
204
207
  args: [{ selector: 'gve-chain-result-view', standalone: true, imports: [
205
208
  CommonModule,
@@ -219,4 +222,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImpor
219
222
  }], stepPick: [{
220
223
  type: Output
221
224
  }] } });
222
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhaW4tcmVzdWx0LXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vZ3ZlLWNvcmUvc3JjL2xpYi9jb21wb25lbnRzL2NoYWluLXJlc3VsdC12aWV3L2NoYWluLXJlc3VsdC12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2d2ZS1jb3JlL3NyYy9saWIvY29tcG9uZW50cy9jaGFpbi1yZXN1bHQtdmlldy9jaGFpbi1yZXN1bHQtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQTRCLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUFnQixZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFeEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFRM0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUNMLHFCQUFxQixHQUV0QixNQUFNLDRDQUE0QyxDQUFDOzs7Ozs7O0FBT3BEOzs7Ozs7Ozs7R0FTRztBQWtCSCxNQUFN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QUMsU0FBUyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztJQUM5QixDQUFDOzhHQXJOVSx3QkFBd0I7a0dBQXhCLHdCQUF3Qix3TEM5RHJDLGt6REEyREEscXNCRFZJLFlBQVksK1BBQ1osbUJBQW1CLHlUQUNuQixlQUFlLDhCQUNmLGtCQUFrQiwwU0FDbEIsYUFBYSw4QkFDYixlQUFlLG9yQkFDZix1QkFBdUIscUlBQ3ZCLGlCQUFpQiw4SUFDakIscUJBQXFCOzsyRkFLWix3QkFBd0I7a0JBakJwQyxTQUFTOytCQUNFLHVCQUF1QixjQUNyQixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2Ysa0JBQWtCO3dCQUNsQixhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsdUJBQXVCO3dCQUN2QixpQkFBaUI7d0JBQ2pCLHFCQUFxQjtxQkFDdEI7Z0ZBYVUsTUFBTTtzQkFEaEIsS0FBSztnQkFvQkssZ0JBQWdCO3NCQUQxQixLQUFLO2dCQWtCQyxRQUFRO3NCQURkLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5cclxuaW1wb3J0IHtcclxuICBDaGFyTm9kZSxcclxuICBGZWF0dXJlLFxyXG4gIE9wZXJhdGlvbkZlYXR1cmUsXHJcbn0gZnJvbSAnQG15cm1pZG9uL2d2ZS1zbmFwc2hvdC12aWV3JztcclxuXHJcbmltcG9ydCB7IEZlYXR1cmVTZXRWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi4vZmVhdHVyZS1zZXQtdmlldy9mZWF0dXJlLXNldC12aWV3LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFN0ZXBzTWFwQ29tcG9uZW50IH0gZnJvbSAnLi4vc3RlcHMtbWFwL3N0ZXBzLW1hcC5jb21wb25lbnQnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VUZXh0Vmlld0NvbXBvbmVudCxcclxuICBWYXJCYXNlVGV4dFJhbmdlLFxyXG59IGZyb20gJy4uL2Jhc2UtdGV4dC12aWV3L2Jhc2UtdGV4dC12aWV3LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7XHJcbiAgQ2hhaW5PcGVyYXRpb25Db250ZXh0U3RlcCxcclxuICBDaGFyQ2hhaW5SZXN1bHQsXHJcbn0gZnJvbSAnLi4vLi4vc2VydmljZXMvZ3ZlLWFwaS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZVRleHRDaGFyRXZlbnQgfSBmcm9tICcuLi9iYXNlLXRleHQtY2hhci9iYXNlLXRleHQtY2hhci5jb21wb25lbnQnO1xyXG5cclxuLyoqXHJcbiAqIPCflJEgYGd2ZS1jaGFpbi1yZXN1bHQtdmlld2BcclxuICpcclxuICogQ29tcG9uZW50IHRvIGRpc3BsYXkgYSBjaGFpbiByZXN1bHQuXHJcbiAqIFVzZWQgYnkgdGhlIGBndmUtc25hcHNob3QtZWRpdG9yYCBjb21wb25lbnQuXHJcbiAqXHJcbiAqIC0g4pa277iPIGByZXN1bHRgIChgQ2hhckNoYWluUmVzdWx0YCk6IHRoZSByZXN1bHQgdG8gZGlzcGxheS5cclxuICogLSDwn5SlIGBzdGVwUGlja2AgKGBDaGFpbk9wZXJhdGlvbkNvbnRleHRTdGVwYCk6IGVtaXR0ZWQgd2hlbiBhXHJcbiAqIHJlc3VsdCdzIHN0ZXAgaXMgcGlja2VkIGJ5IHRoZSB1c2VyLlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdndmUtY2hhaW4tcmVzdWx0LXZpZXcnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcclxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcclxuICAgIE1hdEljb25Nb2R1bGUsXHJcbiAgICBNYXRTZWxlY3RNb2R1bGUsXHJcbiAgICBGZWF0dXJlU2V0Vmlld0NvbXBvbmVudCxcclxuICAgIFN0ZXBzTWFwQ29tcG9uZW50LFxyXG4gICAgQmFzZVRleHRWaWV3Q29tcG9uZW50LFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NoYWluLXJlc3VsdC12aWV3LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vY2hhaW4tcmVzdWx0LXZpZXcuY29tcG9uZW50LmNzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDaGFpblJlc3VsdFZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSBfc3Vicz86IFN1YnNjcmlwdGlvbltdO1xyXG4gIHByaXZhdGUgX3Jlc3VsdD86IENoYXJDaGFpblJlc3VsdDtcclxuICBwcml2YXRlIF9pbml0aWFsU3RlcEluZGV4PzogbnVtYmVyO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgcmVzdWx0IHRvIGRpc3BsYXkuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZ2V0IHJlc3VsdCgpOiBDaGFyQ2hhaW5SZXN1bHQgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Jlc3VsdDtcclxuICB9XHJcbiAgcHVibGljIHNldCByZXN1bHQodmFsdWU6IENoYXJDaGFpblJlc3VsdCB8IHVuZGVmaW5lZCB8IG51bGwpIHtcclxuICAgIGlmICh0aGlzLl9yZXN1bHQgPT09IHZhbHVlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX3Jlc3VsdCA9IHZhbHVlIHx8IHVuZGVmaW5lZDtcclxuICAgIHRoaXMudXBkYXRlRm9ybSh0aGlzLl9yZXN1bHQpO1xyXG5cclxuICAgIC8vIHNlbGVjdCB0aGUgaW5pdGlhbCBzdGVwIGlmIHNldFxyXG4gICAgdGhpcy5zZWxlY3RJbml0aWFsU3RlcCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGluZGV4IG9mIHRoZSBpbml0aWFsIHN0ZXAgdG8gZGlzcGxheSBhZnRlciB0aGUgcmVzdWx0IGlzIHNldC5cclxuICAgKiBJZiB0aGUgaW5kZXggaXMgbmVnYXRpdmUsIGl0IGlzIGNvdW50ZWQgZnJvbSB0aGUgZW5kIG9mIHRoZSBzdGVwcy5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgaW5pdGlhbFN0ZXBJbmRleCgpOiBudW1iZXIgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2luaXRpYWxTdGVwSW5kZXg7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgaW5pdGlhbFN0ZXBJbmRleCh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xyXG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgdGhpcy5faW5pdGlhbFN0ZXBJbmRleCA9IHVuZGVmaW5lZDtcclxuICAgICAgdGhpcy5zdGVwID0gdW5kZWZpbmVkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faW5pdGlhbFN0ZXBJbmRleCA9IHZhbHVlO1xyXG4gICAgICB0aGlzLnNlbGVjdEluaXRpYWxTdGVwKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbWl0dGVkIHdoZW4gYSByZXN1bHQncyBzdGVwIGlzIHBpY2tlZCBieSB0aGUgdXNlci5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgc3RlcFBpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPENoYWluT3BlcmF0aW9uQ29udGV4dFN0ZXA+KCk7XHJcblxyXG4gIHB1YmxpYyB2ZXJzaW9uVGFnczogc3RyaW5nW10gPSBbXTtcclxuICBwdWJsaWMgdGFnczogc3RyaW5nW10gPSBbXTtcclxuICBwdWJsaWMgdmVyc2lvblRhZzogRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD47XHJcbiAgcHVibGljIHRhZzogRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD47XHJcbiAgcHVibGljIHN0ZXA/OiBDaGFpbk9wZXJhdGlvbkNvbnRleHRTdGVwO1xyXG4gIHB1YmxpYyBzZWxlY3Rpb24/OiBzdHJpbmc7XHJcbiAgcHVibGljIHNlbGVjdGlvbkZlYXR1cmVzOiBPcGVyYXRpb25GZWF0dXJlW10gPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IoZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyKSB7XHJcbiAgICB0aGlzLnZlcnNpb25UYWcgPSBmb3JtQnVpbGRlci5jb250cm9sPHN0cmluZyB8IG51bGw+KG51bGwpO1xyXG4gICAgdGhpcy50YWcgPSBmb3JtQnVpbGRlci5jb250cm9sPHN0cmluZyB8IG51bGw+KG51bGwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3VicyA9IFtcclxuICAgICAgLy8gd2hlbmV2ZXIgdGhlIHN0YWdlZCB2ZXJzaW9uIHRhZyBjaGFuZ2VzLCB1cGRhdGUgdGhlIGZvcm1cclxuICAgICAgdGhpcy52ZXJzaW9uVGFnLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAgIC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIGRlYm91bmNlVGltZSgyMDApKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRhZy5zZXRWYWx1ZSh0aGlzLmdldFRhZ0Zyb21WZXJzaW9uKHZhbHVlKSB8fCBudWxsKTtcclxuICAgICAgICB9KSxcclxuXHJcbiAgICAgIC8vIHdoZW5ldmVyIHRoZSB0YWcgY2hhbmdlcywgdXBkYXRlIHRoZSBzdGVwXHJcbiAgICAgIHRoaXMudGFnLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAgIC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIGRlYm91bmNlVGltZSgyMDApKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnN0ZXAgPSB0aGlzLl9yZXN1bHQ/LnN0ZXBzLmZpbmQoXHJcbiAgICAgICAgICAgIChzdGVwKSA9PiBzdGVwLm91dHB1dFRhZyA9PT0gdmFsdWVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpZiAodGhpcy5zdGVwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RlcFBpY2suZW1pdCh0aGlzLnN0ZXAhKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSxcclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlbGVjdEluaXRpYWxTdGVwKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2luaXRpYWxTdGVwSW5kZXggIT09IHVuZGVmaW5lZCAmJiB0aGlzLl9yZXN1bHQ/LnN0ZXBzKSB7XHJcbiAgICAgIHRoaXMuc3RlcCA9XHJcbiAgICAgICAgdGhpcy5fcmVzdWx0LnN0ZXBzW1xyXG4gICAgICAgICAgdGhpcy5faW5pdGlhbFN0ZXBJbmRleCA8IDBcclxuICAgICAgICAgICAgPyB0aGlzLl9yZXN1bHQuc3RlcHMubGVuZ3RoICsgdGhpcy5faW5pdGlhbFN0ZXBJbmRleFxyXG4gICAgICAgICAgICA6IHRoaXMuX2luaXRpYWxTdGVwSW5kZXhcclxuICAgICAgICBdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3Vicz8uZm9yRWFjaCgoc3ViKSA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVZlcnNpb25UYWdzKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLl9yZXN1bHQpIHtcclxuICAgICAgdGhpcy52ZXJzaW9uVGFncyA9IFtdO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZXh0cmFjdCB2ZXJzaW9uIHRhZ3MgZnJvbSByZXN1bHQgc3RlcHMgZmVhdHVyZXMgbmFtZWQgJ3ZlcnNpb24nXHJcbiAgICBjb25zdCB0YWdzID0gbmV3IFNldDxzdHJpbmc+KCk7XHJcbiAgICBmb3IgKGNvbnN0IHN0ZXAgb2YgdGhpcy5fcmVzdWx0LnN0ZXBzKSB7XHJcbiAgICAgIGZvciAoY29uc3QgZmVhdHVyZSBvZiBzdGVwLmZlYXR1cmVTZXQuZmVhdHVyZXMpIHtcclxuICAgICAgICBpZiAoZmVhdHVyZS5uYW1lID09PSAndmVyc2lvbicpIHtcclxuICAgICAgICAgIHRhZ3MuYWRkKGZlYXR1cmUudmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy52ZXJzaW9uVGFncyA9IEFycmF5LmZyb20odGFncykuc29ydCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRUYWdGcm9tVmVyc2lvbih2ZXJzaW9uPzogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAoIXRoaXMuX3Jlc3VsdCB8fCAhdmVyc2lvbikge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCBzdGVwIG9mIHRoaXMuX3Jlc3VsdC5zdGVwcykge1xyXG4gICAgICBmb3IgKGNvbnN0IGZlYXR1cmUgb2Ygc3RlcC5mZWF0dXJlU2V0LmZlYXR1cmVzKSB7XHJcbiAgICAgICAgaWYgKGZlYXR1cmUubmFtZSA9PT0gJ3ZlcnNpb24nICYmIGZlYXR1cmUudmFsdWUgPT09IHZlcnNpb24pIHtcclxuICAgICAgICAgIHJldHVybiBzdGVwLm91dHB1dFRhZztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUZvcm0ocmVzdWx0PzogQ2hhckNoYWluUmVzdWx0KTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGlvbkZlYXR1cmVzID0gW107XHJcblxyXG4gICAgaWYgKCFyZXN1bHQpIHtcclxuICAgICAgdGhpcy5zdGVwID0gdW5kZWZpbmVkO1xyXG4gICAgICB0aGlzLnNlbGVjdGlvbiA9IHVuZGVmaW5lZDtcclxuICAgICAgdGhpcy50YWdzID0gW107XHJcbiAgICAgIHRoaXMudmVyc2lvblRhZ3MgPSBbXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudGFncyA9IHJlc3VsdC5jaGFpblRhZ3M7XHJcbiAgICAgIHRoaXMudXBkYXRlVmVyc2lvblRhZ3MoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Tm9kZUZlYXR1cmVzKGlkOiBudW1iZXIpOiBGZWF0dXJlW10ge1xyXG4gICAgaWYgKCF0aGlzLnN0ZXApIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5zdGVwLmZlYXR1cmVTZXQubm9kZUZlYXR1cmVzW3RoaXMuc3RlcC5vdXRwdXRUYWcgKyAnXycgKyBpZF0gfHwgW11cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbmROb2RlKGlkOiBudW1iZXIpOiBDaGFyTm9kZSB8IG51bGwge1xyXG4gICAgaWYgKCF0aGlzLnN0ZXApIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5fcmVzdWx0IS50YWdnZWROb2RlcykpIHtcclxuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuX3Jlc3VsdCEudGFnZ2VkTm9kZXNba2V5XS5maW5kKChuKSA9PiBuLmlkID09PSBpZCk7XHJcbiAgICAgIGlmIChub2RlKSB7XHJcbiAgICAgICAgcmV0dXJuIG5vZGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uU3RlcENoYXJQaWNrKGV2ZW50OiBCYXNlVGV4dENoYXJFdmVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgZmVhdHVyZXMgPSB0aGlzLmdldE5vZGVGZWF0dXJlcyhldmVudC5jaGFyLmlkKTtcclxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmZpbmROb2RlKGV2ZW50LmNoYXIuaWQpITtcclxuICAgIHRoaXMuc2VsZWN0aW9uID0gYCR7ZXZlbnQuY2hhci5sYWJlbH0gKCR7bm9kZS5zb3VyY2VUYWd9KWA7XHJcbiAgICB0aGlzLnNlbGVjdGlvbkZlYXR1cmVzID0gWy4uLmZlYXR1cmVzXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblN0ZXBSYW5nZVBpY2socmFuZ2U6IFZhckJhc2VUZXh0UmFuZ2UpOiB2b2lkIHtcclxuICAgIGlmIChyYW5nZS5ydW4gPT09IDEpIHtcclxuICAgICAgLy8gYWxyZWFkeSBoYW5kbGVkIGJ5IG9uU3RlcENoYXJQaWNrXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuc2VsZWN0aW9uID0gcmFuZ2UuYXQgKyAnw5cnICsgcmFuZ2UucnVuO1xyXG4gICAgY29uc3QgZW5kID0gcmFuZ2UuYXQgKyByYW5nZS5ydW47XHJcblxyXG4gICAgY29uc3QgZmVhdHVyZXM6IEZlYXR1cmVbXSA9IFtdO1xyXG4gICAgY29uc3QgdGFnTm9kZXMgPSB0aGlzLl9yZXN1bHQhLnRhZ2dlZE5vZGVzW3RoaXMudGFnLnZhbHVlIV07XHJcblxyXG4gICAgZm9yIChsZXQgbm9kZSBvZiB0YWdOb2Rlcykge1xyXG4gICAgICAvLyBpZiBpbiByYW5nZSwgaW50ZXJzZWN0IGZlYXR1cmVzXHJcbiAgICAgIGlmIChub2RlLmlkID49IHJhbmdlLmF0ICYmIG5vZGUuaWQgPCBlbmQpIHtcclxuICAgICAgICBjb25zdCBub2RlRmVhdHVyZXMgPSB0aGlzLmdldE5vZGVGZWF0dXJlcyhub2RlLmlkKTtcclxuXHJcbiAgICAgICAgaWYgKG5vZGUuaWQgPT09IHJhbmdlLmF0KSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBmIG9mIG5vZGVGZWF0dXJlcykge1xyXG4gICAgICAgICAgICBmZWF0dXJlcy5wdXNoKGYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBmZWF0dXJlcyA9IGludGVyc2VjdGlvbiBvZiBmZWF0dXJlcyBhbmQgY2hhckZlYXR1cmVzXHJcbiAgICAgICAgICBmZWF0dXJlcy5zcGxpY2UoXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIGZlYXR1cmVzLmxlbmd0aCxcclxuICAgICAgICAgICAgLi4uZmVhdHVyZXMuZmlsdGVyKChmKSA9PlxyXG4gICAgICAgICAgICAgIG5vZGVGZWF0dXJlcy5zb21lKChjZikgPT4gY2YubmFtZSA9PT0gZi5uYW1lKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VsZWN0aW9uRmVhdHVyZXMgPSBmZWF0dXJlcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblN0ZXBDaGFuZ2Uoc3RlcDogQ2hhaW5PcGVyYXRpb25Db250ZXh0U3RlcCk6IHZvaWQge1xyXG4gICAgLy8gc2V0dGluZyB0aGUgdGFnIHdpbGwgdHJpZ2dlciB0aGUgc3RlcCBjaGFuZ2VcclxuICAgIHRoaXMudGFnLnNldFZhbHVlKHN0ZXAub3V0cHV0VGFnKTtcclxuICAgIHRoaXMuc2VsZWN0aW9uRmVhdHVyZXMgPSBbXTtcclxuICB9XHJcbn1cclxuIiwiQGlmIChyZXN1bHQpIHtcclxuPGRpdiBpZD1cImNvbnRhaW5lclwiPlxyXG4gIDxkaXYgaWQ9XCJiYXJcIiBjbGFzcz1cImZvcm0tcm93XCI+XHJcbiAgICA8IS0tIHZlcnNpb24gLS0+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJ2ZXJzaW9uVGFncz8ubGVuZ3RoXCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+dmVyc2lvbjwvbWF0LWxhYmVsPlxyXG4gICAgICA8bWF0LXNlbGVjdCBbZm9ybUNvbnRyb2xdPVwidmVyc2lvblRhZ1wiPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJudWxsXCI+LTwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgdCBvZiB2ZXJzaW9uVGFnc1wiIFt2YWx1ZV09XCJ0XCI+e3tcclxuICAgICAgICAgIHRcclxuICAgICAgICB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwhLS0gdGFnIC0tPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwidGFncz8ubGVuZ3RoXCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+dGFnPC9tYXQtbGFiZWw+XHJcbiAgICAgIDxtYXQtc2VsZWN0IFtmb3JtQ29udHJvbF09XCJ0YWdcIj5cclxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgdCBvZiB0YWdzXCIgW3ZhbHVlXT1cInRcIj57eyB0IH19PC9tYXQtb3B0aW9uPlxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIHN0ZXAgLS0+XHJcbiAgQGlmIChzdGVwKSB7XHJcbiAgPGRpdiBpZD1cInN0ZXBcIj5cclxuICAgIDwhLS0gdGV4dCAtLT5cclxuICAgIDxkaXYgaWQ9XCJ0ZXh0XCI+XHJcbiAgICAgIDxndmUtYmFzZS10ZXh0LXZpZXdcclxuICAgICAgICBbdGV4dF09XCJyZXN1bHQudGFnZ2VkTm9kZXNbc3RlcC5vdXRwdXRUYWddXCJcclxuICAgICAgICAoY2hhclBpY2spPVwib25TdGVwQ2hhclBpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgKHJhbmdlUGljayk9XCJvblN0ZXBSYW5nZVBpY2soJGV2ZW50KVwiXHJcbiAgICAgIC8+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0gZmVhdHVyZXMgLS0+XHJcbiAgICA8ZGl2IGlkPVwiZmVhdHNcIiBjbGFzcz1cImZvcm0tcm93LXRvcFwiPlxyXG4gICAgICA8ZGl2IGlkPVwiZy1mZWF0c1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmZWF0LWhlYWRlclwiPnt7IHN0ZXAub3V0cHV0VGFnIH19PC9kaXY+XHJcbiAgICAgICAgPGd2ZS1mZWF0dXJlLXNldC12aWV3IFtmZWF0dXJlc109XCJzdGVwLmZlYXR1cmVTZXQuZmVhdHVyZXNcIiAvPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBpZD1cIm4tZmVhdHNcIj5cclxuICAgICAgICBAaWYgKHNlbGVjdGlvbkZlYXR1cmVzLmxlbmd0aCkge1xyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmZWF0LWhlYWRlclwiPnt7IHNlbGVjdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgIDxndmUtZmVhdHVyZS1zZXQtdmlldyBbZmVhdHVyZXNdPVwic2VsZWN0aW9uRmVhdHVyZXNcIiAvPlxyXG4gICAgICAgIH1cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICB9XHJcblxyXG4gIDwhLS0gc3RlcHMgbWFwIC0tPlxyXG4gIDxkaXYgaWQ9XCJtYXBcIj5cclxuICAgIDxndmUtc3RlcHMtbWFwXHJcbiAgICAgIFtzdGVwc109XCJyZXN1bHQuc3RlcHNcIlxyXG4gICAgICBbc2VsZWN0ZWRTdGVwXT1cInN0ZXBcIlxyXG4gICAgICAoc2VsZWN0ZWRTdGVwQ2hhbmdlKT1cIm9uU3RlcENoYW5nZSgkZXZlbnQpXCJcclxuICAgIC8+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG59XHJcbiJdfQ==
225
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhaW4tcmVzdWx0LXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vZ3ZlLWNvcmUvc3JjL2xpYi9jb21wb25lbnRzL2NoYWluLXJlc3VsdC12aWV3L2NoYWluLXJlc3VsdC12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2d2ZS1jb3JlL3NyYy9saWIvY29tcG9uZW50cy9jaGFpbi1yZXN1bHQtdmlldy9jaGFpbi1yZXN1bHQtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQTRCLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUFnQixZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFeEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFRM0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUNMLHFCQUFxQixHQUV0QixNQUFNLDRDQUE0QyxDQUFDOzs7Ozs7O0FBT3BEOzs7Ozs7Ozs7Ozs7R0FZRztBQWtCSCxN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LENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztJQUM5QixDQUFDOytHQXJOVSx3QkFBd0I7bUdBQXhCLHdCQUF3Qix3TENqRXJDLGt6REEyREEscXNCRFBJLFlBQVksK1BBQ1osbUJBQW1CLHlUQUNuQixlQUFlLDhCQUNmLGtCQUFrQiwwU0FDbEIsYUFBYSw4QkFDYixlQUFlLG9yQkFDZix1QkFBdUIscUlBQ3ZCLGlCQUFpQiw4SUFDakIscUJBQXFCOzs0RkFLWix3QkFBd0I7a0JBakJwQyxTQUFTOytCQUNFLHVCQUF1QixjQUNyQixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2Ysa0JBQWtCO3dCQUNsQixhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsdUJBQXVCO3dCQUN2QixpQkFBaUI7d0JBQ2pCLHFCQUFxQjtxQkFDdEI7Z0ZBYVUsTUFBTTtzQkFEaEIsS0FBSztnQkFvQkssZ0JBQWdCO3NCQUQxQixLQUFLO2dCQWtCQyxRQUFRO3NCQURkLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5cclxuaW1wb3J0IHtcclxuICBDaGFyTm9kZSxcclxuICBGZWF0dXJlLFxyXG4gIE9wZXJhdGlvbkZlYXR1cmUsXHJcbn0gZnJvbSAnQG15cm1pZG9uL2d2ZS1zbmFwc2hvdC12aWV3JztcclxuXHJcbmltcG9ydCB7IEZlYXR1cmVTZXRWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi4vZmVhdHVyZS1zZXQtdmlldy9mZWF0dXJlLXNldC12aWV3LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFN0ZXBzTWFwQ29tcG9uZW50IH0gZnJvbSAnLi4vc3RlcHMtbWFwL3N0ZXBzLW1hcC5jb21wb25lbnQnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VUZXh0Vmlld0NvbXBvbmVudCxcclxuICBWYXJCYXNlVGV4dFJhbmdlLFxyXG59IGZyb20gJy4uL2Jhc2UtdGV4dC12aWV3L2Jhc2UtdGV4dC12aWV3LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7XHJcbiAgQ2hhaW5PcGVyYXRpb25Db250ZXh0U3RlcCxcclxuICBDaGFyQ2hhaW5SZXN1bHQsXHJcbn0gZnJvbSAnLi4vLi4vc2VydmljZXMvZ3ZlLWFwaS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZVRleHRDaGFyRXZlbnQgfSBmcm9tICcuLi9iYXNlLXRleHQtY2hhci9iYXNlLXRleHQtY2hhci5jb21wb25lbnQnO1xyXG5cclxuLyoqXHJcbiAqIPCflJEgYGd2ZS1jaGFpbi1yZXN1bHQtdmlld2BcclxuICpcclxuICogQ29tcG9uZW50IHRvIGRpc3BsYXkgYSBjaGFpbiByZXN1bHQuIFRoaXMgcHJvdmlkZXMgYSB2ZXJzaW9uIHBpY2tlclxyXG4gKiBieSBzdGFnZWQgdmVyc2lvbiBvciBzaW1wbGUgc3RlcCwgYW5kIHNob3dzIHRoZSBzZWxlY3RlZCBzdGVwJ3MgdGV4dFxyXG4gKiBhbmQgZmVhdHVyZXMsIHBsdXMgYSBzdGVwcyBtYXAuIFVzZXIgY2FuIHBpY2sgYSBzdGVwIGZyb20gYm90aCB0aGVcclxuICogcGlja2VycyBvciB0aGUgbWFwLlxyXG4gKiBVc2VkIGJ5IHRoZSBgZ3ZlLXNuYXBzaG90LWVkaXRvcmAgY29tcG9uZW50LlxyXG4gKlxyXG4gKiAtIOKWtu+4jyBgcmVzdWx0YCAoYENoYXJDaGFpblJlc3VsdGApOiB0aGUgcmVzdWx0IHRvIGRpc3BsYXkuXHJcbiAqIC0g8J+UpSBgc3RlcFBpY2tgIChgQ2hhaW5PcGVyYXRpb25Db250ZXh0U3RlcGApOiBlbWl0dGVkIHdoZW4gYVxyXG4gKiByZXN1bHQncyBzdGVwIGlzIHBpY2tlZCBieSB0aGUgdXNlci5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZ3ZlLWNoYWluLXJlc3VsdC12aWV3JyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxyXG4gICAgRmVhdHVyZVNldFZpZXdDb21wb25lbnQsXHJcbiAgICBTdGVwc01hcENvbXBvbmVudCxcclxuICAgIEJhc2VUZXh0Vmlld0NvbXBvbmVudCxcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGFpbi1yZXN1bHQtdmlldy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2NoYWluLXJlc3VsdC12aWV3LmNvbXBvbmVudC5jc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2hhaW5SZXN1bHRWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgX3N1YnM/OiBTdWJzY3JpcHRpb25bXTtcclxuICBwcml2YXRlIF9yZXN1bHQ/OiBDaGFyQ2hhaW5SZXN1bHQ7XHJcbiAgcHJpdmF0ZSBfaW5pdGlhbFN0ZXBJbmRleD86IG51bWJlcjtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIHJlc3VsdCB0byBkaXNwbGF5LlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCByZXN1bHQoKTogQ2hhckNoYWluUmVzdWx0IHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9yZXN1bHQ7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgcmVzdWx0KHZhbHVlOiBDaGFyQ2hhaW5SZXN1bHQgfCB1bmRlZmluZWQgfCBudWxsKSB7XHJcbiAgICBpZiAodGhpcy5fcmVzdWx0ID09PSB2YWx1ZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl9yZXN1bHQgPSB2YWx1ZSB8fCB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnVwZGF0ZUZvcm0odGhpcy5fcmVzdWx0KTtcclxuXHJcbiAgICAvLyBzZWxlY3QgdGhlIGluaXRpYWwgc3RlcCBpZiBzZXRcclxuICAgIHRoaXMuc2VsZWN0SW5pdGlhbFN0ZXAoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgaW5pdGlhbCBzdGVwIHRvIGRpc3BsYXkgYWZ0ZXIgdGhlIHJlc3VsdCBpcyBzZXQuXHJcbiAgICogSWYgdGhlIGluZGV4IGlzIG5lZ2F0aXZlLCBpdCBpcyBjb3VudGVkIGZyb20gdGhlIGVuZCBvZiB0aGUgc3RlcHMuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZ2V0IGluaXRpYWxTdGVwSW5kZXgoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9pbml0aWFsU3RlcEluZGV4O1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IGluaXRpYWxTdGVwSW5kZXgodmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGwpIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuX2luaXRpYWxTdGVwSW5kZXggPSB1bmRlZmluZWQ7XHJcbiAgICAgIHRoaXMuc3RlcCA9IHVuZGVmaW5lZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2luaXRpYWxTdGVwSW5kZXggPSB2YWx1ZTtcclxuICAgICAgdGhpcy5zZWxlY3RJbml0aWFsU3RlcCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW1pdHRlZCB3aGVuIGEgcmVzdWx0J3Mgc3RlcCBpcyBwaWNrZWQgYnkgdGhlIHVzZXIuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIHN0ZXBQaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxDaGFpbk9wZXJhdGlvbkNvbnRleHRTdGVwPigpO1xyXG5cclxuICBwdWJsaWMgdmVyc2lvblRhZ3M6IHN0cmluZ1tdID0gW107XHJcbiAgcHVibGljIHRhZ3M6IHN0cmluZ1tdID0gW107XHJcbiAgcHVibGljIHZlcnNpb25UYWc6IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+O1xyXG4gIHB1YmxpYyB0YWc6IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+O1xyXG4gIHB1YmxpYyBzdGVwPzogQ2hhaW5PcGVyYXRpb25Db250ZXh0U3RlcDtcclxuICBwdWJsaWMgc2VsZWN0aW9uPzogc3RyaW5nO1xyXG4gIHB1YmxpYyBzZWxlY3Rpb25GZWF0dXJlczogT3BlcmF0aW9uRmVhdHVyZVtdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcikge1xyXG4gICAgdGhpcy52ZXJzaW9uVGFnID0gZm9ybUJ1aWxkZXIuY29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsKTtcclxuICAgIHRoaXMudGFnID0gZm9ybUJ1aWxkZXIuY29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3N1YnMgPSBbXHJcbiAgICAgIC8vIHdoZW5ldmVyIHRoZSBzdGFnZWQgdmVyc2lvbiB0YWcgY2hhbmdlcywgdXBkYXRlIHRoZSBmb3JtXHJcbiAgICAgIHRoaXMudmVyc2lvblRhZy52YWx1ZUNoYW5nZXNcclxuICAgICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCBkZWJvdW5jZVRpbWUoMjAwKSlcclxuICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50YWcuc2V0VmFsdWUodGhpcy5nZXRUYWdGcm9tVmVyc2lvbih2YWx1ZSkgfHwgbnVsbCk7XHJcbiAgICAgICAgfSksXHJcblxyXG4gICAgICAvLyB3aGVuZXZlciB0aGUgdGFnIGNoYW5nZXMsIHVwZGF0ZSB0aGUgc3RlcFxyXG4gICAgICB0aGlzLnRhZy52YWx1ZUNoYW5nZXNcclxuICAgICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCBkZWJvdW5jZVRpbWUoMjAwKSlcclxuICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zdGVwID0gdGhpcy5fcmVzdWx0Py5zdGVwcy5maW5kKFxyXG4gICAgICAgICAgICAoc3RlcCkgPT4gc3RlcC5vdXRwdXRUYWcgPT09IHZhbHVlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgaWYgKHRoaXMuc3RlcCkge1xyXG4gICAgICAgICAgICB0aGlzLnN0ZXBQaWNrLmVtaXQodGhpcy5zdGVwISk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZWxlY3RJbml0aWFsU3RlcCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9pbml0aWFsU3RlcEluZGV4ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5fcmVzdWx0Py5zdGVwcykge1xyXG4gICAgICB0aGlzLnN0ZXAgPVxyXG4gICAgICAgIHRoaXMuX3Jlc3VsdC5zdGVwc1tcclxuICAgICAgICAgIHRoaXMuX2luaXRpYWxTdGVwSW5kZXggPCAwXHJcbiAgICAgICAgICAgID8gdGhpcy5fcmVzdWx0LnN0ZXBzLmxlbmd0aCArIHRoaXMuX2luaXRpYWxTdGVwSW5kZXhcclxuICAgICAgICAgICAgOiB0aGlzLl9pbml0aWFsU3RlcEluZGV4XHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3N1YnM/LmZvckVhY2goKHN1YikgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVWZXJzaW9uVGFncygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5fcmVzdWx0KSB7XHJcbiAgICAgIHRoaXMudmVyc2lvblRhZ3MgPSBbXTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGV4dHJhY3QgdmVyc2lvbiB0YWdzIGZyb20gcmVzdWx0IHN0ZXBzIGZlYXR1cmVzIG5hbWVkICd2ZXJzaW9uJ1xyXG4gICAgY29uc3QgdGFncyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG4gICAgZm9yIChjb25zdCBzdGVwIG9mIHRoaXMuX3Jlc3VsdC5zdGVwcykge1xyXG4gICAgICBmb3IgKGNvbnN0IGZlYXR1cmUgb2Ygc3RlcC5mZWF0dXJlU2V0LmZlYXR1cmVzKSB7XHJcbiAgICAgICAgaWYgKGZlYXR1cmUubmFtZSA9PT0gJ3ZlcnNpb24nKSB7XHJcbiAgICAgICAgICB0YWdzLmFkZChmZWF0dXJlLnZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMudmVyc2lvblRhZ3MgPSBBcnJheS5mcm9tKHRhZ3MpLnNvcnQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VGFnRnJvbVZlcnNpb24odmVyc2lvbj86IHN0cmluZyB8IG51bGwpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKCF0aGlzLl9yZXN1bHQgfHwgIXZlcnNpb24pIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3Qgc3RlcCBvZiB0aGlzLl9yZXN1bHQuc3RlcHMpIHtcclxuICAgICAgZm9yIChjb25zdCBmZWF0dXJlIG9mIHN0ZXAuZmVhdHVyZVNldC5mZWF0dXJlcykge1xyXG4gICAgICAgIGlmIChmZWF0dXJlLm5hbWUgPT09ICd2ZXJzaW9uJyAmJiBmZWF0dXJlLnZhbHVlID09PSB2ZXJzaW9uKSB7XHJcbiAgICAgICAgICByZXR1cm4gc3RlcC5vdXRwdXRUYWc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVGb3JtKHJlc3VsdD86IENoYXJDaGFpblJlc3VsdCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3Rpb25GZWF0dXJlcyA9IFtdO1xyXG5cclxuICAgIGlmICghcmVzdWx0KSB7XHJcbiAgICAgIHRoaXMuc3RlcCA9IHVuZGVmaW5lZDtcclxuICAgICAgdGhpcy5zZWxlY3Rpb24gPSB1bmRlZmluZWQ7XHJcbiAgICAgIHRoaXMudGFncyA9IFtdO1xyXG4gICAgICB0aGlzLnZlcnNpb25UYWdzID0gW107XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRhZ3MgPSByZXN1bHQuY2hhaW5UYWdzO1xyXG4gICAgICB0aGlzLnVwZGF0ZVZlcnNpb25UYWdzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE5vZGVGZWF0dXJlcyhpZDogbnVtYmVyKTogRmVhdHVyZVtdIHtcclxuICAgIGlmICghdGhpcy5zdGVwKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuc3RlcC5mZWF0dXJlU2V0Lm5vZGVGZWF0dXJlc1t0aGlzLnN0ZXAub3V0cHV0VGFnICsgJ18nICsgaWRdIHx8IFtdXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaW5kTm9kZShpZDogbnVtYmVyKTogQ2hhck5vZGUgfCBudWxsIHtcclxuICAgIGlmICghdGhpcy5zdGVwKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMuX3Jlc3VsdCEudGFnZ2VkTm9kZXMpKSB7XHJcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLl9yZXN1bHQhLnRhZ2dlZE5vZGVzW2tleV0uZmluZCgobikgPT4gbi5pZCA9PT0gaWQpO1xyXG4gICAgICBpZiAobm9kZSkge1xyXG4gICAgICAgIHJldHVybiBub2RlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblN0ZXBDaGFyUGljayhldmVudDogQmFzZVRleHRDaGFyRXZlbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZlYXR1cmVzID0gdGhpcy5nZXROb2RlRmVhdHVyZXMoZXZlbnQuY2hhci5pZCk7XHJcbiAgICBjb25zdCBub2RlID0gdGhpcy5maW5kTm9kZShldmVudC5jaGFyLmlkKSE7XHJcbiAgICB0aGlzLnNlbGVjdGlvbiA9IGAke2V2ZW50LmNoYXIubGFiZWx9ICgke25vZGUuc291cmNlVGFnfSlgO1xyXG4gICAgdGhpcy5zZWxlY3Rpb25GZWF0dXJlcyA9IFsuLi5mZWF0dXJlc107XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25TdGVwUmFuZ2VQaWNrKHJhbmdlOiBWYXJCYXNlVGV4dFJhbmdlKTogdm9pZCB7XHJcbiAgICBpZiAocmFuZ2UucnVuID09PSAxKSB7XHJcbiAgICAgIC8vIGFscmVhZHkgaGFuZGxlZCBieSBvblN0ZXBDaGFyUGlja1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGlvbiA9IHJhbmdlLmF0ICsgJ8OXJyArIHJhbmdlLnJ1bjtcclxuICAgIGNvbnN0IGVuZCA9IHJhbmdlLmF0ICsgcmFuZ2UucnVuO1xyXG5cclxuICAgIGNvbnN0IGZlYXR1cmVzOiBGZWF0dXJlW10gPSBbXTtcclxuICAgIGNvbnN0IHRhZ05vZGVzID0gdGhpcy5fcmVzdWx0IS50YWdnZWROb2Rlc1t0aGlzLnRhZy52YWx1ZSFdO1xyXG5cclxuICAgIGZvciAobGV0IG5vZGUgb2YgdGFnTm9kZXMpIHtcclxuICAgICAgLy8gaWYgaW4gcmFuZ2UsIGludGVyc2VjdCBmZWF0dXJlc1xyXG4gICAgICBpZiAobm9kZS5pZCA+PSByYW5nZS5hdCAmJiBub2RlLmlkIDwgZW5kKSB7XHJcbiAgICAgICAgY29uc3Qgbm9kZUZlYXR1cmVzID0gdGhpcy5nZXROb2RlRmVhdHVyZXMobm9kZS5pZCk7XHJcblxyXG4gICAgICAgIGlmIChub2RlLmlkID09PSByYW5nZS5hdCkge1xyXG4gICAgICAgICAgZm9yIChsZXQgZiBvZiBub2RlRmVhdHVyZXMpIHtcclxuICAgICAgICAgICAgZmVhdHVyZXMucHVzaChmKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gZmVhdHVyZXMgPSBpbnRlcnNlY3Rpb24gb2YgZmVhdHVyZXMgYW5kIGNoYXJGZWF0dXJlc1xyXG4gICAgICAgICAgZmVhdHVyZXMuc3BsaWNlKFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICBmZWF0dXJlcy5sZW5ndGgsXHJcbiAgICAgICAgICAgIC4uLmZlYXR1cmVzLmZpbHRlcigoZikgPT5cclxuICAgICAgICAgICAgICBub2RlRmVhdHVyZXMuc29tZSgoY2YpID0+IGNmLm5hbWUgPT09IGYubmFtZSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdGlvbkZlYXR1cmVzID0gZmVhdHVyZXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25TdGVwQ2hhbmdlKHN0ZXA6IENoYWluT3BlcmF0aW9uQ29udGV4dFN0ZXApOiB2b2lkIHtcclxuICAgIC8vIHNldHRpbmcgdGhlIHRhZyB3aWxsIHRyaWdnZXIgdGhlIHN0ZXAgY2hhbmdlXHJcbiAgICB0aGlzLnRhZy5zZXRWYWx1ZShzdGVwLm91dHB1dFRhZyk7XHJcbiAgICB0aGlzLnNlbGVjdGlvbkZlYXR1cmVzID0gW107XHJcbiAgfVxyXG59XHJcbiIsIkBpZiAocmVzdWx0KSB7XHJcbjxkaXYgaWQ9XCJjb250YWluZXJcIj5cclxuICA8ZGl2IGlkPVwiYmFyXCIgY2xhc3M9XCJmb3JtLXJvd1wiPlxyXG4gICAgPCEtLSB2ZXJzaW9uIC0tPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwidmVyc2lvblRhZ3M/Lmxlbmd0aFwiPlxyXG4gICAgICA8bWF0LWxhYmVsPnZlcnNpb248L21hdC1sYWJlbD5cclxuICAgICAgPG1hdC1zZWxlY3QgW2Zvcm1Db250cm9sXT1cInZlcnNpb25UYWdcIj5cclxuICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwibnVsbFwiPi08L21hdC1vcHRpb24+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHQgb2YgdmVyc2lvblRhZ3NcIiBbdmFsdWVdPVwidFwiPnt7XHJcbiAgICAgICAgICB0XHJcbiAgICAgICAgfX08L21hdC1vcHRpb24+XHJcbiAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8IS0tIHRhZyAtLT5cclxuICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cInRhZ3M/Lmxlbmd0aFwiPlxyXG4gICAgICA8bWF0LWxhYmVsPnRhZzwvbWF0LWxhYmVsPlxyXG4gICAgICA8bWF0LXNlbGVjdCBbZm9ybUNvbnRyb2xdPVwidGFnXCI+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHQgb2YgdGFnc1wiIFt2YWx1ZV09XCJ0XCI+e3sgdCB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBzdGVwIC0tPlxyXG4gIEBpZiAoc3RlcCkge1xyXG4gIDxkaXYgaWQ9XCJzdGVwXCI+XHJcbiAgICA8IS0tIHRleHQgLS0+XHJcbiAgICA8ZGl2IGlkPVwidGV4dFwiPlxyXG4gICAgICA8Z3ZlLWJhc2UtdGV4dC12aWV3XHJcbiAgICAgICAgW3RleHRdPVwicmVzdWx0LnRhZ2dlZE5vZGVzW3N0ZXAub3V0cHV0VGFnXVwiXHJcbiAgICAgICAgKGNoYXJQaWNrKT1cIm9uU3RlcENoYXJQaWNrKCRldmVudClcIlxyXG4gICAgICAgIChyYW5nZVBpY2spPVwib25TdGVwUmFuZ2VQaWNrKCRldmVudClcIlxyXG4gICAgICAvPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIGZlYXR1cmVzIC0tPlxyXG4gICAgPGRpdiBpZD1cImZlYXRzXCIgY2xhc3M9XCJmb3JtLXJvdy10b3BcIj5cclxuICAgICAgPGRpdiBpZD1cImctZmVhdHNcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmVhdC1oZWFkZXJcIj57eyBzdGVwLm91dHB1dFRhZyB9fTwvZGl2PlxyXG4gICAgICAgIDxndmUtZmVhdHVyZS1zZXQtdmlldyBbZmVhdHVyZXNdPVwic3RlcC5mZWF0dXJlU2V0LmZlYXR1cmVzXCIgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgaWQ9XCJuLWZlYXRzXCI+XHJcbiAgICAgICAgQGlmIChzZWxlY3Rpb25GZWF0dXJlcy5sZW5ndGgpIHtcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmVhdC1oZWFkZXJcIj57eyBzZWxlY3Rpb24gfX08L2Rpdj5cclxuICAgICAgICA8Z3ZlLWZlYXR1cmUtc2V0LXZpZXcgW2ZlYXR1cmVzXT1cInNlbGVjdGlvbkZlYXR1cmVzXCIgLz5cclxuICAgICAgICB9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgfVxyXG5cclxuICA8IS0tIHN0ZXBzIG1hcCAtLT5cclxuICA8ZGl2IGlkPVwibWFwXCI+XHJcbiAgICA8Z3ZlLXN0ZXBzLW1hcFxyXG4gICAgICBbc3RlcHNdPVwicmVzdWx0LnN0ZXBzXCJcclxuICAgICAgW3NlbGVjdGVkU3RlcF09XCJzdGVwXCJcclxuICAgICAgKHNlbGVjdGVkU3RlcENoYW5nZSk9XCJvblN0ZXBDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAvPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxufVxyXG4iXX0=
@@ -165,10 +165,10 @@ export class FeatureEditorComponent {
165
165
  };
166
166
  this.featureChange.emit(this.feature);
167
167
  }
168
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: FeatureEditorComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
169
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.8", type: FeatureEditorComponent, isStandalone: true, selector: "gve-feature-editor", inputs: { featNames: "featNames", featValues: "featValues", feature: "feature", isVar: "isVar" }, outputs: { featureCancel: "featureCancel", featureChange: "featureChange" }, viewQueries: [{ propertyName: "nameControl", first: true, predicate: ["nameCtl"], descendants: true }], ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <div class=\"form-row\">\r\n @if (featNames?.length) {\r\n <!-- name (bound) -->\r\n <mat-form-field>\r\n <mat-label>name</mat-label>\r\n <mat-select #nameCtl [formControl]=\"name\">\r\n <mat-option *ngFor=\"let i of featNames\" [value]=\"i.id\">{{\r\n i.label\r\n }}</mat-option>\r\n </mat-select>\r\n @if ($any(name).errors?.required && (name.dirty || name.touched)) {\r\n <mat-error>name required</mat-error>\r\n }\r\n </mat-form-field>\r\n } @else {\r\n <!-- name (free) -->\r\n <mat-form-field>\r\n <mat-label>name</mat-label>\r\n <input #nameCtl matInput [formControl]=\"name\" />\r\n <mat-error\r\n *ngIf=\"$any(name).errors?.required && (name.dirty || name.touched)\"\r\n >name required</mat-error\r\n >\r\n @if ($any(name).errors?.maxLength && (name.dirty || name.touched)) {\r\n <mat-error>name too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n\r\n <!-- value (bound) -->\r\n @if (nameIds?.length) {\r\n <mat-form-field>\r\n <mat-label>value</mat-label>\r\n <mat-select [formControl]=\"value\">\r\n <mat-option *ngFor=\"let e of nameIds\" [value]=\"e.id\">{{\r\n e.label\r\n }}</mat-option>\r\n </mat-select>\r\n @if ($any(value).errors?.required && (value.dirty || value.touched)) {\r\n <mat-error>value required</mat-error>\r\n }\r\n </mat-form-field>\r\n } @else {\r\n <!-- value (free) -->\r\n <mat-form-field>\r\n <mat-label>value</mat-label>\r\n <input matInput [formControl]=\"value\" />\r\n @if ($any(value).errors?.required && (value.dirty || value.touched)) {\r\n <mat-error>value required</mat-error>\r\n } @if ($any(value).errors?.maxLength && (value.dirty || value.touched)) {\r\n <mat-error>value too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n\r\n <!-- setPolicy -->\r\n <mat-form-field>\r\n <mat-label>set policy</mat-label>\r\n <mat-select [formControl]=\"setPolicy\">\r\n <mat-option [value]=\"0\">multiple</mat-option>\r\n <mat-option [value]=\"1\">single</mat-option>\r\n <mat-option [value]=\"2\">single first</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n @if (isVar) {\r\n <div class=\"form-row\">\r\n <!-- isNegated -->\r\n <mat-checkbox [formControl]=\"isNegated\">negated</mat-checkbox>\r\n\r\n <!-- isShortLived -->\r\n <mat-checkbox [formControl]=\"isShortLived\">short-lived</mat-checkbox>\r\n\r\n <!-- isGlobal -->\r\n <mat-checkbox [formControl]=\"isGlobal\">global</mat-checkbox>\r\n </div>\r\n }\r\n\r\n <!-- buttons -->\r\n <div class=\"form-row\">\r\n <button\r\n type=\"button\"\r\n color=\"warn\"\r\n mat-icon-button\r\n matTooltip=\"Discard changes\"\r\n (click)=\"cancel()\"\r\n >\r\n <mat-icon class=\"mat-warn\">clear</mat-icon>\r\n </button>\r\n <button\r\n type=\"submit\"\r\n color=\"primary\"\r\n mat-icon-button\r\n matTooltip=\"Accept changes\"\r\n [disabled]=\"form.invalid || form.pristine\"\r\n >\r\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n </button>\r\n </div>\r\n</form>\r\n", styles: [".form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i8.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i9.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
168
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: FeatureEditorComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
169
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: FeatureEditorComponent, isStandalone: true, selector: "gve-feature-editor", inputs: { featNames: "featNames", featValues: "featValues", feature: "feature", isVar: "isVar" }, outputs: { featureCancel: "featureCancel", featureChange: "featureChange" }, viewQueries: [{ propertyName: "nameControl", first: true, predicate: ["nameCtl"], descendants: true }], ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <div class=\"form-row\">\r\n @if (featNames?.length) {\r\n <!-- name (bound) -->\r\n <mat-form-field>\r\n <mat-label>name</mat-label>\r\n <mat-select #nameCtl [formControl]=\"name\">\r\n <mat-option *ngFor=\"let i of featNames\" [value]=\"i.id\">{{\r\n i.label\r\n }}</mat-option>\r\n </mat-select>\r\n @if ($any(name).errors?.required && (name.dirty || name.touched)) {\r\n <mat-error>name required</mat-error>\r\n }\r\n </mat-form-field>\r\n } @else {\r\n <!-- name (free) -->\r\n <mat-form-field>\r\n <mat-label>name</mat-label>\r\n <input #nameCtl matInput [formControl]=\"name\" />\r\n <mat-error\r\n *ngIf=\"$any(name).errors?.required && (name.dirty || name.touched)\"\r\n >name required</mat-error\r\n >\r\n @if ($any(name).errors?.maxLength && (name.dirty || name.touched)) {\r\n <mat-error>name too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n\r\n <!-- value (bound) -->\r\n @if (nameIds?.length) {\r\n <mat-form-field>\r\n <mat-label>value</mat-label>\r\n <mat-select [formControl]=\"value\">\r\n <mat-option *ngFor=\"let e of nameIds\" [value]=\"e.id\">{{\r\n e.label\r\n }}</mat-option>\r\n </mat-select>\r\n @if ($any(value).errors?.required && (value.dirty || value.touched)) {\r\n <mat-error>value required</mat-error>\r\n }\r\n </mat-form-field>\r\n } @else {\r\n <!-- value (free) -->\r\n <mat-form-field>\r\n <mat-label>value</mat-label>\r\n <input matInput [formControl]=\"value\" />\r\n @if ($any(value).errors?.required && (value.dirty || value.touched)) {\r\n <mat-error>value required</mat-error>\r\n } @if ($any(value).errors?.maxLength && (value.dirty || value.touched)) {\r\n <mat-error>value too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n\r\n <!-- setPolicy -->\r\n <mat-form-field>\r\n <mat-label>set policy</mat-label>\r\n <mat-select [formControl]=\"setPolicy\">\r\n <mat-option [value]=\"0\">multiple</mat-option>\r\n <mat-option [value]=\"1\">single</mat-option>\r\n <mat-option [value]=\"2\">single first</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n @if (isVar) {\r\n <div class=\"form-row\">\r\n <!-- isNegated -->\r\n <mat-checkbox [formControl]=\"isNegated\">negated</mat-checkbox>\r\n\r\n <!-- isShortLived -->\r\n <mat-checkbox [formControl]=\"isShortLived\">short-lived</mat-checkbox>\r\n\r\n <!-- isGlobal -->\r\n <mat-checkbox [formControl]=\"isGlobal\">global</mat-checkbox>\r\n </div>\r\n }\r\n\r\n <!-- buttons -->\r\n <div class=\"form-row\">\r\n <button\r\n type=\"button\"\r\n color=\"warn\"\r\n mat-icon-button\r\n matTooltip=\"Discard changes\"\r\n (click)=\"cancel()\"\r\n >\r\n <mat-icon class=\"mat-warn\">clear</mat-icon>\r\n </button>\r\n <button\r\n type=\"submit\"\r\n color=\"primary\"\r\n mat-icon-button\r\n matTooltip=\"Accept changes\"\r\n [disabled]=\"form.invalid || form.pristine\"\r\n >\r\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n </button>\r\n </div>\r\n</form>\r\n", styles: [".form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i8.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i9.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
170
170
  }
171
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: FeatureEditorComponent, decorators: [{
171
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: FeatureEditorComponent, decorators: [{
172
172
  type: Component,
173
173
  args: [{ selector: 'gve-feature-editor', standalone: true, imports: [
174
174
  CommonModule,
@@ -197,4 +197,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImpor
197
197
  }], featureChange: [{
198
198
  type: Output
199
199
  }] } });
200
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vZ3ZlLWNvcmUvc3JjL2xpYi9jb21wb25lbnRzL2ZlYXR1cmUtZWRpdG9yL2ZlYXR1cmUtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2d2ZS1jb3JlL3NyYy9saWIvY29tcG9uZW50cy9mZWF0dXJlLWVkaXRvci9mZWF0dXJlLWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBSUwsbUJBQW1CLEVBQ25CLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQWdCLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV4RSxXQUFXO0FBQ1gsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTdELE9BQU8sRUFFTCxnQkFBZ0Is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LENBQUMsSUFBSSxFQUFFO2dCQUM1QixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFO2dCQUM5QixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLO2FBQ2hDLENBQUM7UUFDTixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEMsQ0FBQzs4R0FyS1Usc0JBQXNCO2tHQUF0QixzQkFBc0IscVdDbEZuQyxxeEdBc0dBLHNKRGpDSSxZQUFZLCtQQUNaLG1CQUFtQiwrOUJBQ25CLGVBQWUsMklBQ2YsaUJBQWlCLG9ZQUNqQixrQkFBa0IsdVlBQ2xCLGFBQWEsbUxBQ2IsY0FBYywwV0FDZCxlQUFlLG1yQkFDZixnQkFBZ0I7OzJGQUtQLHNCQUFzQjtrQkFqQmxDLFNBQVM7K0JBQ0Usb0JBQW9CLGNBQ2xCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsZUFBZTt3QkFDZixpQkFBaUI7d0JBQ2pCLGtCQUFrQjt3QkFDbEIsYUFBYTt3QkFDYixjQUFjO3dCQUNkLGVBQWU7d0JBQ2YsZ0JBQWdCO3FCQUNqQjtnRkFVcUIsV0FBVztzQkFBaEMsU0FBUzt1QkFBQyxTQUFTO2dCQU9iLFNBQVM7c0JBRGYsS0FBSztnQkFTSyxVQUFVO3NCQURwQixLQUFLO2dCQWFLLE9BQU87c0JBRGpCLEtBQUs7Z0JBcUJDLEtBQUs7c0JBRFgsS0FBSztnQkFPQyxhQUFhO3NCQURuQixNQUFNO2dCQU9BLGFBQWE7c0JBRG5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgRm9ybUJ1aWxkZXIsXHJcbiAgRm9ybUNvbnRyb2wsXHJcbiAgRm9ybUdyb3VwLFxyXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgVmFsaWRhdG9ycyxcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMnO1xyXG5cclxuLy8gbWF0ZXJpYWxcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIEZlYXR1cmUsXHJcbiAgRmVhdHVyZVNldFBvbGljeSxcclxuICBMYWJlbGVkSWQsXHJcbiAgT3BlcmF0aW9uRmVhdHVyZSxcclxufSBmcm9tICdAbXlybWlkb24vZ3ZlLXNuYXBzaG90LXZpZXcnO1xyXG5cclxuLyoqXHJcbiAqIEZlYXR1cmVzIG1hcC4gVGhpcyBpcyB1c2VkIGZvciBmZWF0dXJlcyBmcm9tIGNsb3NlZCBzZXRzLFxyXG4gKiBhbmQgbGlzdHMgdGhlIHBvc3NpYmxlIHZhbHVlcyBmb3IgZWFjaCBmZWF0dXJlLlxyXG4gKiBUaGUga2V5IGlzIHRoZSBmZWF0dXJlIG5hbWUsIGFuZCB0aGUgdmFsdWUgaXMgYW4gYXJyYXkgb2ZcclxuICogbGFiZWxlZCBJRHMgcmVwcmVzZW50aW5nIHRoZSBhbGxvd2VkIHZhbHVlcyBmb3IgdGhhdCBmZWF0dXJlLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBGZWF0dXJlTWFwIHtcclxuICBba2V5OiBzdHJpbmddOiBMYWJlbGVkSWRbXTtcclxufVxyXG5cclxuLyoqXHJcbiAqIPCflJEgYGd2ZS1mZWF0dXJlLWVkaXRvcmBcclxuICpcclxuICogQ29tcG9uZW50IGZvciBlZGl0aW5nIGEgc2luZ2xlIGZlYXR1cmUsIHdob3NlIG1vZGVsIGlzIGEgbmFtZT12YWx1ZVxyXG4gKiBwYWlyLCBwbHVzIGEgc2V0IHBvbGljeSB2YWx1ZSB3aGljaCBkZWZpbmVzIHRoZSBkZXNpcmVkIGJlaGF2aW9yXHJcbiAqIHdoZW4gYWRkaW5nIHRoYXQgZmVhdHVyZSB0byBhIHNldC5cclxuICogVXNlZCBieSBgZ3ZlLWZlYXR1cmUtc2V0LWVkaXRvcmAuXHJcbiAqXHJcbiAqIC0g4pa277iPIGBmZWF0dXJlYCAoYEZlYXR1cmVgKTogdGhlIGZlYXR1cmUgdG8gZWRpdC5cclxuICogLSDilrbvuI8gYGZlYXROYW1lc2AgKGBMYWJlbGVkSWRbXWApOiB0aGUgbGlzdCBvZiBmZWF0dXJlIG5hbWVzIHRvIGRpc3BsYXlcclxuICogaW4gdGhlIF9uYW1lXyBzZWxlY3Rpb24uIFRoaXMgaXMgdXNlZCB3aGVuIHlvdSBoYXZlIGEgY2xvc2VkIGxpc3Qgb2ZcclxuICogZmVhdHVyZXMuIEVhY2ggaXRlbSBpbiB0aGUgbGlzdCBpcyBhbiBvYmplY3Qgd2l0aCBfaWRfIGFuZCBfbGFiZWxfXHJcbiAqIHByb3BlcnRpZXMuXHJcbiAqIC0g4pa277iPIGBmZWF0VmFsdWVzYCAoYEZlYXR1cmVNYXBgKTogdGhlIGZlYXR1cmUgdmFsdWVzIG1hcC4gV2hlblxyXG4gKiBzcGVjaWZpZWQgYW5kIHRoZSB1c2VyIHNlbGVjdHMgYSBmZWF0dXJlIG5hbWUgcHJlc2VudCBpbiB0aGUgbWFwIGtleXMsXHJcbiAqIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcyB3aWxsIGJlIHVzZWQgdG8gcG9wdWxhdGUgdGhlIHZhbHVlIHNlbGVjdGlvbi5cclxuICogLSDwn5SlIGBmZWF0dXJlQ2hhbmdlYCAoYEZlYXR1cmVgKTogZW1pdHRlZCB3aGVuIGZlYXR1cmUgaGFzIGNoYW5nZWQuXHJcbiAqIC0g8J+UpSBgZmVhdHVyZUNhbmNlbGA6IGVtaXR0ZWQgd2hlbiB0aGUgdXNlciBjYW5jZWxzIHRoZSBmZWF0dXJlIGVkaXRpbmcuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2d2ZS1mZWF0dXJlLWVkaXRvcicsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgTWF0Q2hlY2tib3hNb2R1bGUsXHJcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgTWF0SW5wdXRNb2R1bGUsXHJcbiAgICBNYXRTZWxlY3RNb2R1bGUsXHJcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ZlYXR1cmUtZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vZmVhdHVyZS1lZGl0b3IuY29tcG9uZW50LmNzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGZWF0dXJlRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgX3N1Yj86IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIF9mZWF0dXJlPzogT3BlcmF0aW9uRmVhdHVyZTtcclxuICBwcml2YXRlIF9tYXA/OiBGZWF0dXJlTWFwO1xyXG4gIHByaXZhdGUgX2Zyb3plbj86IGJvb2xlYW47XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ25hbWVDdGwnKSBuYW1lQ29udHJvbD86IEVsZW1lbnRSZWY7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBsaXN0IG9mIGZlYXR1cmUgbmFtZXMgdG8gZGlzcGxheSBpbiB0aGUgbmFtZSBzZWxlY3Rpb24uXHJcbiAgICogVGhpcyBpcyB1c2VkIHdoZW4geW91IGhhdmUgYSBjbG9zZWQgbGlzdCBvZiBmZWF0dXJlcy5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBmZWF0TmFtZXM6IExhYmVsZWRJZFtdIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgZmVhdHVyZSB2YWx1ZXMgbWFwLiBXaGVuIHNwZWNpZmllZCBhbmQgdGhlIHVzZXIgc2VsZWN0cyBhIGZlYXR1cmVcclxuICAgKiBuYW1lIHByZXNlbnQgaW4gdGhlIG1hcCBrZXlzLCB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMgd2lsbCBiZSB1c2VkXHJcbiAgICogdG8gcG9wdWxhdGUgdGhlIHZhbHVlIHNlbGVjdGlvbi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgZmVhdFZhbHVlcygpOiBGZWF0dXJlTWFwIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9tYXA7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgZmVhdFZhbHVlcyh2YWx1ZTogRmVhdHVyZU1hcCB8IHVuZGVmaW5lZCB8IG51bGwpIHtcclxuICAgIHRoaXMuX21hcCA9IHZhbHVlIHx8IHVuZGVmaW5lZDtcclxuICAgIHRoaXMubmFtZUlkcyA9IHRoaXMuZ2V0TGFiZWxlZElkc0Zvcih0aGlzLm5hbWUudmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGZlYXR1cmUgdG8gZWRpdC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgZmVhdHVyZSgpOiBGZWF0dXJlIHwgT3BlcmF0aW9uRmVhdHVyZSB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmVhdHVyZTtcclxuICB9XHJcbiAgcHVibGljIHNldCBmZWF0dXJlKHZhbHVlOiBGZWF0dXJlIHwgT3BlcmF0aW9uRmVhdHVyZSB8IHVuZGVmaW5lZCB8IG51bGwpIHtcclxuICAgIGlmICh0aGlzLl9mZWF0dXJlID09PSB2YWx1ZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl9mZWF0dXJlID0gdmFsdWUgfHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIHRoaXMudXBkYXRlRm9ybSh0aGlzLl9mZWF0dXJlKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLm5hbWVDb250cm9sPy5uYXRpdmVFbGVtZW50Py5mb2N1cygpO1xyXG4gICAgfSwgNTAwKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRydWUgaWYgdGhlIGZlYXR1cmUgaXMgYSB2YXJpYW50IG9wZXJhdGlvbiBmZWF0dXJlLCB3aGljaCBoYXNcclxuICAgKiBhZGRpdGlvbmFsIHByb3BlcnRpZXMgbGlrZSBuZWdhdGlvbiwgZ2xvYmFsLCBhbmQgc2hvcnQtbGl2ZWQuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgaXNWYXIgPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSB1c2VyIGNhbmNlbHMgdGhlIGZlYXR1cmUgZWRpdGluZy5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgZmVhdHVyZUNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSB1c2VyIHNhdmVzIHRoZSBlZGl0ZWQgZmVhdHVyZS5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgZmVhdHVyZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RmVhdHVyZSB8IE9wZXJhdGlvbkZlYXR1cmU+KCk7XHJcblxyXG4gIHB1YmxpYyBuYW1lOiBGb3JtQ29udHJvbDxzdHJpbmc+O1xyXG4gIHB1YmxpYyB2YWx1ZTogRm9ybUNvbnRyb2w8c3RyaW5nPjtcclxuICBwdWJsaWMgc2V0UG9saWN5OiBGb3JtQ29udHJvbDxGZWF0dXJlU2V0UG9saWN5PjtcclxuICAvLyB2YXIgZmVhdHVyZSBjb250cm9sc1xyXG4gIHB1YmxpYyBpc05lZ2F0ZWQ6IEZvcm1Db250cm9sPGJvb2xlYW4+O1xyXG4gIHB1YmxpYyBpc0dsb2JhbDogRm9ybUNvbnRyb2w8Ym9vbGVhbj47XHJcbiAgcHVibGljIGlzU2hvcnRMaXZlZDogRm9ybUNvbnRyb2w8Ym9vbGVhbj47XHJcblxyXG4gIHB1YmxpYyBmb3JtOiBGb3JtR3JvdXA7XHJcblxyXG4gIHB1YmxpYyBuYW1lSWRzPzogTGFiZWxlZElkW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcikge1xyXG4gICAgdGhpcy5uYW1lID0gZm9ybUJ1aWxkZXIuY29udHJvbDxzdHJpbmc+KCcnLCB7XHJcbiAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1heExlbmd0aCg1MCldLFxyXG4gICAgICBub25OdWxsYWJsZTogdHJ1ZSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy52YWx1ZSA9IGZvcm1CdWlsZGVyLmNvbnRyb2woJycsIHtcclxuICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDUwMDApXSxcclxuICAgICAgbm9uTnVsbGFibGU6IHRydWUsXHJcbiAgICB9KTtcclxuICAgIHRoaXMuc2V0UG9saWN5ID0gZm9ybUJ1aWxkZXIuY29udHJvbChGZWF0dXJlU2V0UG9saWN5Lm11bHRpcGxlLCB7XHJcbiAgICAgIG5vbk51bGxhYmxlOiB0cnVlLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmlzTmVnYXRlZCA9IGZvcm1CdWlsZGVyLmNvbnRyb2woZmFsc2UsIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XHJcbiAgICB0aGlzLmlzR2xvYmFsID0gZm9ybUJ1aWxkZXIuY29udHJvbChmYWxzZSwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KTtcclxuICAgIHRoaXMuaXNTaG9ydExpdmVkID0gZm9ybUJ1aWxkZXIuY29udHJvbChmYWxzZSwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KTtcclxuICAgIHRoaXMuZm9ybSA9IGZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxyXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcclxuICAgICAgc2V0UG9saWN5OiB0aGlzLnNldFBvbGljeSxcclxuICAgICAgaXNOZWdhdGVkOiB0aGlzLmlzTmVnYXRlZCxcclxuICAgICAgaXNHbG9iYWw6IHRoaXMuaXNHbG9iYWwsXHJcbiAgICAgIGlzU2hvcnRMaXZlZDogdGhpcy5pc1Nob3J0TGl2ZWQsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIC8vIHdoZW5ldmVyIHRoZSBuYW1lIGNoYW5nZXMsIHVwZGF0ZSB0aGUgdmFsdWUgc2VsZWN0aW9uXHJcbiAgICB0aGlzLl9zdWIgPSB0aGlzLm5hbWUudmFsdWVDaGFuZ2VzXHJcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSgzMDApLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxyXG4gICAgICAuc3Vic2NyaWJlKChuYW1lKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9mcm96ZW4gJiYgdGhpcy5mZWF0TmFtZXM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy52YWx1ZS5yZXNldCgpO1xyXG4gICAgICAgICAgdGhpcy5uYW1lSWRzID0gdGhpcy5nZXRMYWJlbGVkSWRzRm9yKG5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWI/LnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldExhYmVsZWRJZHNGb3IoaWQ/OiBzdHJpbmcpOiBMYWJlbGVkSWRbXSB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAoIWlkKSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5mZWF0VmFsdWVzID8gdGhpcy5mZWF0VmFsdWVzW2lkXSA6IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlRm9ybShmZWF0dXJlPzogT3BlcmF0aW9uRmVhdHVyZSk6IHZvaWQge1xyXG4gICAgaWYgKCFmZWF0dXJlKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5yZXNldCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fZnJvemVuID0gdHJ1ZTtcclxuICAgICAgdGhpcy5uYW1lLnNldFZhbHVlKGZlYXR1cmUubmFtZSk7XHJcbiAgICAgIHRoaXMudmFsdWUuc2V0VmFsdWUoZmVhdHVyZS52YWx1ZSk7XHJcbiAgICAgIHRoaXMuc2V0UG9saWN5LnNldFZhbHVlKGZlYXR1cmUuc2V0UG9saWN5IHx8IEZlYXR1cmVTZXRQb2xpY3kubXVsdGlwbGUpO1xyXG4gICAgICB0aGlzLmlzTmVnYXRlZC5zZXRWYWx1ZShmZWF0dXJlLmlzTmVnYXRlZCB8fCBmYWxzZSk7XHJcbiAgICAgIHRoaXMuaXNHbG9iYWwuc2V0VmFsdWUoZmVhdHVyZS5pc0dsb2JhbCB8fCBmYWxzZSk7XHJcbiAgICAgIHRoaXMuaXNTaG9ydExpdmVkLnNldFZhbHVlKGZlYXR1cmUuaXNTaG9ydExpdmVkIHx8IGZhbHNlKTtcclxuICAgICAgdGhpcy5fZnJvemVuID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2FuY2VsKCk6IHZvaWQge1xyXG4gICAgdGhpcy5mZWF0dXJlQ2FuY2VsLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzYXZlKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmZvcm0udmFsaWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5mZWF0dXJlID0gdGhpcy5pc1ZhclxyXG4gICAgICA/IHtcclxuICAgICAgICAgIG5hbWU6IHRoaXMubmFtZS52YWx1ZS50cmltKCksXHJcbiAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZS52YWx1ZS50cmltKCksXHJcbiAgICAgICAgICBzZXRQb2xpY3k6IHRoaXMuc2V0UG9saWN5LnZhbHVlLFxyXG4gICAgICAgICAgaXNOZWdhdGVkOiB0aGlzLmlzTmVnYXRlZC52YWx1ZSxcclxuICAgICAgICAgIGlzR2xvYmFsOiB0aGlzLmlzR2xvYmFsLnZhbHVlLFxyXG4gICAgICAgICAgaXNTaG9ydExpdmVkOiB0aGlzLmlzU2hvcnRMaXZlZC52YWx1ZSxcclxuICAgICAgICB9XHJcbiAgICAgIDoge1xyXG4gICAgICAgICAgbmFtZTogdGhpcy5uYW1lLnZhbHVlLnRyaW0oKSxcclxuICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLnZhbHVlLnRyaW0oKSxcclxuICAgICAgICAgIHNldFBvbGljeTogdGhpcy5zZXRQb2xpY3kudmFsdWUsXHJcbiAgICAgICAgfTtcclxuICAgIHRoaXMuZmVhdHVyZUNoYW5nZS5lbWl0KHRoaXMuZmVhdHVyZSk7XHJcbiAgfVxyXG59XHJcbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIChzdWJtaXQpPVwic2F2ZSgpXCI+XHJcbiAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XHJcbiAgICBAaWYgKGZlYXROYW1lcz8ubGVuZ3RoKSB7XHJcbiAgICA8IS0tIG5hbWUgKGJvdW5kKSAtLT5cclxuICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgPG1hdC1sYWJlbD5uYW1lPC9tYXQtbGFiZWw+XHJcbiAgICAgIDxtYXQtc2VsZWN0ICNuYW1lQ3RsIFtmb3JtQ29udHJvbF09XCJuYW1lXCI+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGkgb2YgZmVhdE5hbWVzXCIgW3ZhbHVlXT1cImkuaWRcIj57e1xyXG4gICAgICAgICAgaS5sYWJlbFxyXG4gICAgICAgIH19PC9tYXQtb3B0aW9uPlxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgIEBpZiAoJGFueShuYW1lKS5lcnJvcnM/LnJlcXVpcmVkICYmIChuYW1lLmRpcnR5IHx8IG5hbWUudG91Y2hlZCkpIHtcclxuICAgICAgPG1hdC1lcnJvcj5uYW1lIHJlcXVpcmVkPC9tYXQtZXJyb3I+XHJcbiAgICAgIH1cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICB9IEBlbHNlIHtcclxuICAgIDwhLS0gbmFtZSAoZnJlZSkgLS0+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtbGFiZWw+bmFtZTwvbWF0LWxhYmVsPlxyXG4gICAgICA8aW5wdXQgI25hbWVDdGwgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT1cIm5hbWVcIiAvPlxyXG4gICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgKm5nSWY9XCIkYW55KG5hbWUpLmVycm9ycz8ucmVxdWlyZWQgJiYgKG5hbWUuZGlydHkgfHwgbmFtZS50b3VjaGVkKVwiXHJcbiAgICAgICAgPm5hbWUgcmVxdWlyZWQ8L21hdC1lcnJvclxyXG4gICAgICA+XHJcbiAgICAgIEBpZiAoJGFueShuYW1lKS5lcnJvcnM/Lm1heExlbmd0aCAmJiAobmFtZS5kaXJ0eSB8fCBuYW1lLnRvdWNoZWQpKSB7XHJcbiAgICAgIDxtYXQtZXJyb3I+bmFtZSB0b28gbG9uZzwvbWF0LWVycm9yPlxyXG4gICAgICB9XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgfVxyXG5cclxuICAgIDwhLS0gdmFsdWUgKGJvdW5kKSAtLT5cclxuICAgIEBpZiAobmFtZUlkcz8ubGVuZ3RoKSB7XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtbGFiZWw+dmFsdWU8L21hdC1sYWJlbD5cclxuICAgICAgPG1hdC1zZWxlY3QgW2Zvcm1Db250cm9sXT1cInZhbHVlXCI+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGUgb2YgbmFtZUlkc1wiIFt2YWx1ZV09XCJlLmlkXCI+e3tcclxuICAgICAgICAgIGUubGFiZWxcclxuICAgICAgICB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICBAaWYgKCRhbnkodmFsdWUpLmVycm9ycz8ucmVxdWlyZWQgJiYgKHZhbHVlLmRpcnR5IHx8IHZhbHVlLnRvdWNoZWQpKSB7XHJcbiAgICAgIDxtYXQtZXJyb3I+dmFsdWUgcmVxdWlyZWQ8L21hdC1lcnJvcj5cclxuICAgICAgfVxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIH0gQGVsc2Uge1xyXG4gICAgPCEtLSB2YWx1ZSAoZnJlZSkgLS0+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtbGFiZWw+dmFsdWU8L21hdC1sYWJlbD5cclxuICAgICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJ2YWx1ZVwiIC8+XHJcbiAgICAgIEBpZiAoJGFueSh2YWx1ZSkuZXJyb3JzPy5yZXF1aXJlZCAmJiAodmFsdWUuZGlydHkgfHwgdmFsdWUudG91Y2hlZCkpIHtcclxuICAgICAgPG1hdC1lcnJvcj52YWx1ZSByZXF1aXJlZDwvbWF0LWVycm9yPlxyXG4gICAgICB9IEBpZiAoJGFueSh2YWx1ZSkuZXJyb3JzPy5tYXhMZW5ndGggJiYgKHZhbHVlLmRpcnR5IHx8IHZhbHVlLnRvdWNoZWQpKSB7XHJcbiAgICAgIDxtYXQtZXJyb3I+dmFsdWUgdG9vIGxvbmc8L21hdC1lcnJvcj5cclxuICAgICAgfVxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIH1cclxuXHJcbiAgICA8IS0tIHNldFBvbGljeSAtLT5cclxuICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgPG1hdC1sYWJlbD5zZXQgcG9saWN5PC9tYXQtbGFiZWw+XHJcbiAgICAgIDxtYXQtc2VsZWN0IFtmb3JtQ29udHJvbF09XCJzZXRQb2xpY3lcIj5cclxuICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiMFwiPm11bHRpcGxlPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCIxXCI+c2luZ2xlPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCIyXCI+c2luZ2xlIGZpcnN0PC9tYXQtb3B0aW9uPlxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDwvZGl2PlxyXG5cclxuICBAaWYgKGlzVmFyKSB7XHJcbiAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XHJcbiAgICA8IS0tIGlzTmVnYXRlZCAtLT5cclxuICAgIDxtYXQtY2hlY2tib3ggW2Zvcm1Db250cm9sXT1cImlzTmVnYXRlZFwiPm5lZ2F0ZWQ8L21hdC1jaGVja2JveD5cclxuXHJcbiAgICA8IS0tIGlzU2hvcnRMaXZlZCAtLT5cclxuICAgIDxtYXQtY2hlY2tib3ggW2Zvcm1Db250cm9sXT1cImlzU2hvcnRMaXZlZFwiPnNob3J0LWxpdmVkPC9tYXQtY2hlY2tib3g+XHJcblxyXG4gICAgPCEtLSBpc0dsb2JhbCAtLT5cclxuICAgIDxtYXQtY2hlY2tib3ggW2Zvcm1Db250cm9sXT1cImlzR2xvYmFsXCI+Z2xvYmFsPC9tYXQtY2hlY2tib3g+XHJcbiAgPC9kaXY+XHJcbiAgfVxyXG5cclxuICA8IS0tIGJ1dHRvbnMgLS0+XHJcbiAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBjb2xvcj1cIndhcm5cIlxyXG4gICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgbWF0VG9vbHRpcD1cIkRpc2NhcmQgY2hhbmdlc1wiXHJcbiAgICAgIChjbGljayk9XCJjYW5jZWwoKVwiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdC13YXJuXCI+Y2xlYXI8L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxyXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgbWF0VG9vbHRpcD1cIkFjY2VwdCBjaGFuZ2VzXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImZvcm0uaW52YWxpZCB8fCBmb3JtLnByaXN0aW5lXCJcclxuICAgID5cclxuICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0LXByaW1hcnlcIj5jaGVja19jaXJjbGU8L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvZm9ybT5cclxuIl19
200
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vZ3ZlLWNvcmUvc3JjL2xpYi9jb21wb25lbnRzL2ZlYXR1cmUtZWRpdG9yL2ZlYXR1cmUtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2d2ZS1jb3JlL3NyYy9saWIvY29tcG9uZW50cy9mZWF0dXJlLWVkaXRvci9mZWF0dXJlLWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBSUwsbUJBQW1CLEVBQ25CLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQWdCLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV4RSxXQUFXO0FBQ1gsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTdELE9BQU8sRUFFTCxnQkFBZ0Is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LENBQUMsSUFBSSxFQUFFO2dCQUM1QixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFO2dCQUM5QixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLO2FBQ2hDLENBQUM7UUFDTixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEMsQ0FBQzsrR0FyS1Usc0JBQXNCO21HQUF0QixzQkFBc0IscVdDbEZuQyxxeEdBc0dBLHNKRGpDSSxZQUFZLCtQQUNaLG1CQUFtQiwrOUJBQ25CLGVBQWUsMklBQ2YsaUJBQWlCLG9ZQUNqQixrQkFBa0IsdVlBQ2xCLGFBQWEsbUxBQ2IsY0FBYywwV0FDZCxlQUFlLG1yQkFDZixnQkFBZ0I7OzRGQUtQLHNCQUFzQjtrQkFqQmxDLFNBQVM7K0JBQ0Usb0JBQW9CLGNBQ2xCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsZUFBZTt3QkFDZixpQkFBaUI7d0JBQ2pCLGtCQUFrQjt3QkFDbEIsYUFBYTt3QkFDYixjQUFjO3dCQUNkLGVBQWU7d0JBQ2YsZ0JBQWdCO3FCQUNqQjtnRkFVcUIsV0FBVztzQkFBaEMsU0FBUzt1QkFBQyxTQUFTO2dCQU9iLFNBQVM7c0JBRGYsS0FBSztnQkFTSyxVQUFVO3NCQURwQixLQUFLO2dCQWFLLE9BQU87c0JBRGpCLEtBQUs7Z0JBcUJDLEtBQUs7c0JBRFgsS0FBSztnQkFPQyxhQUFhO3NCQURuQixNQUFNO2dCQU9BLGFBQWE7c0JBRG5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgRm9ybUJ1aWxkZXIsXHJcbiAgRm9ybUNvbnRyb2wsXHJcbiAgRm9ybUdyb3VwLFxyXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgVmFsaWRhdG9ycyxcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMnO1xyXG5cclxuLy8gbWF0ZXJpYWxcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIEZlYXR1cmUsXHJcbiAgRmVhdHVyZVNldFBvbGljeSxcclxuICBMYWJlbGVkSWQsXHJcbiAgT3BlcmF0aW9uRmVhdHVyZSxcclxufSBmcm9tICdAbXlybWlkb24vZ3ZlLXNuYXBzaG90LXZpZXcnO1xyXG5cclxuLyoqXHJcbiAqIEZlYXR1cmVzIG1hcC4gVGhpcyBpcyB1c2VkIGZvciBmZWF0dXJlcyBmcm9tIGNsb3NlZCBzZXRzLFxyXG4gKiBhbmQgbGlzdHMgdGhlIHBvc3NpYmxlIHZhbHVlcyBmb3IgZWFjaCBmZWF0dXJlLlxyXG4gKiBUaGUga2V5IGlzIHRoZSBmZWF0dXJlIG5hbWUsIGFuZCB0aGUgdmFsdWUgaXMgYW4gYXJyYXkgb2ZcclxuICogbGFiZWxlZCBJRHMgcmVwcmVzZW50aW5nIHRoZSBhbGxvd2VkIHZhbHVlcyBmb3IgdGhhdCBmZWF0dXJlLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBGZWF0dXJlTWFwIHtcclxuICBba2V5OiBzdHJpbmddOiBMYWJlbGVkSWRbXTtcclxufVxyXG5cclxuLyoqXHJcbiAqIPCflJEgYGd2ZS1mZWF0dXJlLWVkaXRvcmBcclxuICpcclxuICogQ29tcG9uZW50IGZvciBlZGl0aW5nIGEgc2luZ2xlIGZlYXR1cmUsIHdob3NlIG1vZGVsIGlzIGEgbmFtZT12YWx1ZVxyXG4gKiBwYWlyLCBwbHVzIGEgc2V0IHBvbGljeSB2YWx1ZSB3aGljaCBkZWZpbmVzIHRoZSBkZXNpcmVkIGJlaGF2aW9yXHJcbiAqIHdoZW4gYWRkaW5nIHRoYXQgZmVhdHVyZSB0byBhIHNldC5cclxuICogVXNlZCBieSBgZ3ZlLWZlYXR1cmUtc2V0LWVkaXRvcmAuXHJcbiAqXHJcbiAqIC0g4pa277iPIGBmZWF0dXJlYCAoYEZlYXR1cmVgKTogdGhlIGZlYXR1cmUgdG8gZWRpdC5cclxuICogLSDilrbvuI8gYGZlYXROYW1lc2AgKGBMYWJlbGVkSWRbXWApOiB0aGUgbGlzdCBvZiBmZWF0dXJlIG5hbWVzIHRvIGRpc3BsYXlcclxuICogaW4gdGhlIF9uYW1lXyBzZWxlY3Rpb24uIFRoaXMgaXMgdXNlZCB3aGVuIHlvdSBoYXZlIGEgY2xvc2VkIGxpc3Qgb2ZcclxuICogZmVhdHVyZXMuIEVhY2ggaXRlbSBpbiB0aGUgbGlzdCBpcyBhbiBvYmplY3Qgd2l0aCBfaWRfIGFuZCBfbGFiZWxfXHJcbiAqIHByb3BlcnRpZXMuXHJcbiAqIC0g4pa277iPIGBmZWF0VmFsdWVzYCAoYEZlYXR1cmVNYXBgKTogdGhlIGZlYXR1cmUgdmFsdWVzIG1hcC4gV2hlblxyXG4gKiBzcGVjaWZpZWQgYW5kIHRoZSB1c2VyIHNlbGVjdHMgYSBmZWF0dXJlIG5hbWUgcHJlc2VudCBpbiB0aGUgbWFwIGtleXMsXHJcbiAqIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcyB3aWxsIGJlIHVzZWQgdG8gcG9wdWxhdGUgdGhlIHZhbHVlIHNlbGVjdGlvbi5cclxuICogLSDwn5SlIGBmZWF0dXJlQ2hhbmdlYCAoYEZlYXR1cmVgKTogZW1pdHRlZCB3aGVuIGZlYXR1cmUgaGFzIGNoYW5nZWQuXHJcbiAqIC0g8J+UpSBgZmVhdHVyZUNhbmNlbGA6IGVtaXR0ZWQgd2hlbiB0aGUgdXNlciBjYW5jZWxzIHRoZSBmZWF0dXJlIGVkaXRpbmcuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2d2ZS1mZWF0dXJlLWVkaXRvcicsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgTWF0Q2hlY2tib3hNb2R1bGUsXHJcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgTWF0SW5wdXRNb2R1bGUsXHJcbiAgICBNYXRTZWxlY3RNb2R1bGUsXHJcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ZlYXR1cmUtZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vZmVhdHVyZS1lZGl0b3IuY29tcG9uZW50LmNzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGZWF0dXJlRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgX3N1Yj86IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIF9mZWF0dXJlPzogT3BlcmF0aW9uRmVhdHVyZTtcclxuICBwcml2YXRlIF9tYXA/OiBGZWF0dXJlTWFwO1xyXG4gIHByaXZhdGUgX2Zyb3plbj86IGJvb2xlYW47XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ25hbWVDdGwnKSBuYW1lQ29udHJvbD86IEVsZW1lbnRSZWY7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBsaXN0IG9mIGZlYXR1cmUgbmFtZXMgdG8gZGlzcGxheSBpbiB0aGUgbmFtZSBzZWxlY3Rpb24uXHJcbiAgICogVGhpcyBpcyB1c2VkIHdoZW4geW91IGhhdmUgYSBjbG9zZWQgbGlzdCBvZiBmZWF0dXJlcy5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBmZWF0TmFtZXM6IExhYmVsZWRJZFtdIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgZmVhdHVyZSB2YWx1ZXMgbWFwLiBXaGVuIHNwZWNpZmllZCBhbmQgdGhlIHVzZXIgc2VsZWN0cyBhIGZlYXR1cmVcclxuICAgKiBuYW1lIHByZXNlbnQgaW4gdGhlIG1hcCBrZXlzLCB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMgd2lsbCBiZSB1c2VkXHJcbiAgICogdG8gcG9wdWxhdGUgdGhlIHZhbHVlIHNlbGVjdGlvbi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgZmVhdFZhbHVlcygpOiBGZWF0dXJlTWFwIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9tYXA7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgZmVhdFZhbHVlcyh2YWx1ZTogRmVhdHVyZU1hcCB8IHVuZGVmaW5lZCB8IG51bGwpIHtcclxuICAgIHRoaXMuX21hcCA9IHZhbHVlIHx8IHVuZGVmaW5lZDtcclxuICAgIHRoaXMubmFtZUlkcyA9IHRoaXMuZ2V0TGFiZWxlZElkc0Zvcih0aGlzLm5hbWUudmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGZlYXR1cmUgdG8gZWRpdC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgZmVhdHVyZSgpOiBGZWF0dXJlIHwgT3BlcmF0aW9uRmVhdHVyZSB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmVhdHVyZTtcclxuICB9XHJcbiAgcHVibGljIHNldCBmZWF0dXJlKHZhbHVlOiBGZWF0dXJlIHwgT3BlcmF0aW9uRmVhdHVyZSB8IHVuZGVmaW5lZCB8IG51bGwpIHtcclxuICAgIGlmICh0aGlzLl9mZWF0dXJlID09PSB2YWx1ZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl9mZWF0dXJlID0gdmFsdWUgfHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIHRoaXMudXBkYXRlRm9ybSh0aGlzLl9mZWF0dXJlKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLm5hbWVDb250cm9sPy5uYXRpdmVFbGVtZW50Py5mb2N1cygpO1xyXG4gICAgfSwgNTAwKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRydWUgaWYgdGhlIGZlYXR1cmUgaXMgYSB2YXJpYW50IG9wZXJhdGlvbiBmZWF0dXJlLCB3aGljaCBoYXNcclxuICAgKiBhZGRpdGlvbmFsIHByb3BlcnRpZXMgbGlrZSBuZWdhdGlvbiwgZ2xvYmFsLCBhbmQgc2hvcnQtbGl2ZWQuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgaXNWYXIgPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSB1c2VyIGNhbmNlbHMgdGhlIGZlYXR1cmUgZWRpdGluZy5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgZmVhdHVyZUNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSB1c2VyIHNhdmVzIHRoZSBlZGl0ZWQgZmVhdHVyZS5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgZmVhdHVyZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RmVhdHVyZSB8IE9wZXJhdGlvbkZlYXR1cmU+KCk7XHJcblxyXG4gIHB1YmxpYyBuYW1lOiBGb3JtQ29udHJvbDxzdHJpbmc+O1xyXG4gIHB1YmxpYyB2YWx1ZTogRm9ybUNvbnRyb2w8c3RyaW5nPjtcclxuICBwdWJsaWMgc2V0UG9saWN5OiBGb3JtQ29udHJvbDxGZWF0dXJlU2V0UG9saWN5PjtcclxuICAvLyB2YXIgZmVhdHVyZSBjb250cm9sc1xyXG4gIHB1YmxpYyBpc05lZ2F0ZWQ6IEZvcm1Db250cm9sPGJvb2xlYW4+O1xyXG4gIHB1YmxpYyBpc0dsb2JhbDogRm9ybUNvbnRyb2w8Ym9vbGVhbj47XHJcbiAgcHVibGljIGlzU2hvcnRMaXZlZDogRm9ybUNvbnRyb2w8Ym9vbGVhbj47XHJcblxyXG4gIHB1YmxpYyBmb3JtOiBGb3JtR3JvdXA7XHJcblxyXG4gIHB1YmxpYyBuYW1lSWRzPzogTGFiZWxlZElkW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcikge1xyXG4gICAgdGhpcy5uYW1lID0gZm9ybUJ1aWxkZXIuY29udHJvbDxzdHJpbmc+KCcnLCB7XHJcbiAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1heExlbmd0aCg1MCldLFxyXG4gICAgICBub25OdWxsYWJsZTogdHJ1ZSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy52YWx1ZSA9IGZvcm1CdWlsZGVyLmNvbnRyb2woJycsIHtcclxuICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDUwMDApXSxcclxuICAgICAgbm9uTnVsbGFibGU6IHRydWUsXHJcbiAgICB9KTtcclxuICAgIHRoaXMuc2V0UG9saWN5ID0gZm9ybUJ1aWxkZXIuY29udHJvbChGZWF0dXJlU2V0UG9saWN5Lm11bHRpcGxlLCB7XHJcbiAgICAgIG5vbk51bGxhYmxlOiB0cnVlLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmlzTmVnYXRlZCA9IGZvcm1CdWlsZGVyLmNvbnRyb2woZmFsc2UsIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XHJcbiAgICB0aGlzLmlzR2xvYmFsID0gZm9ybUJ1aWxkZXIuY29udHJvbChmYWxzZSwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KTtcclxuICAgIHRoaXMuaXNTaG9ydExpdmVkID0gZm9ybUJ1aWxkZXIuY29udHJvbChmYWxzZSwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KTtcclxuICAgIHRoaXMuZm9ybSA9IGZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxyXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcclxuICAgICAgc2V0UG9saWN5OiB0aGlzLnNldFBvbGljeSxcclxuICAgICAgaXNOZWdhdGVkOiB0aGlzLmlzTmVnYXRlZCxcclxuICAgICAgaXNHbG9iYWw6IHRoaXMuaXNHbG9iYWwsXHJcbiAgICAgIGlzU2hvcnRMaXZlZDogdGhpcy5pc1Nob3J0TGl2ZWQsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIC8vIHdoZW5ldmVyIHRoZSBuYW1lIGNoYW5nZXMsIHVwZGF0ZSB0aGUgdmFsdWUgc2VsZWN0aW9uXHJcbiAgICB0aGlzLl9zdWIgPSB0aGlzLm5hbWUudmFsdWVDaGFuZ2VzXHJcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSgzMDApLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxyXG4gICAgICAuc3Vic2NyaWJlKChuYW1lKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9mcm96ZW4gJiYgdGhpcy5mZWF0TmFtZXM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy52YWx1ZS5yZXNldCgpO1xyXG4gICAgICAgICAgdGhpcy5uYW1lSWRzID0gdGhpcy5nZXRMYWJlbGVkSWRzRm9yKG5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWI/LnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldExhYmVsZWRJZHNGb3IoaWQ/OiBzdHJpbmcpOiBMYWJlbGVkSWRbXSB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAoIWlkKSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5mZWF0VmFsdWVzID8gdGhpcy5mZWF0VmFsdWVzW2lkXSA6IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlRm9ybShmZWF0dXJlPzogT3BlcmF0aW9uRmVhdHVyZSk6IHZvaWQge1xyXG4gICAgaWYgKCFmZWF0dXJlKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5yZXNldCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fZnJvemVuID0gdHJ1ZTtcclxuICAgICAgdGhpcy5uYW1lLnNldFZhbHVlKGZlYXR1cmUubmFtZSk7XHJcbiAgICAgIHRoaXMudmFsdWUuc2V0VmFsdWUoZmVhdHVyZS52YWx1ZSk7XHJcbiAgICAgIHRoaXMuc2V0UG9saWN5LnNldFZhbHVlKGZlYXR1cmUuc2V0UG9saWN5IHx8IEZlYXR1cmVTZXRQb2xpY3kubXVsdGlwbGUpO1xyXG4gICAgICB0aGlzLmlzTmVnYXRlZC5zZXRWYWx1ZShmZWF0dXJlLmlzTmVnYXRlZCB8fCBmYWxzZSk7XHJcbiAgICAgIHRoaXMuaXNHbG9iYWwuc2V0VmFsdWUoZmVhdHVyZS5pc0dsb2JhbCB8fCBmYWxzZSk7XHJcbiAgICAgIHRoaXMuaXNTaG9ydExpdmVkLnNldFZhbHVlKGZlYXR1cmUuaXNTaG9ydExpdmVkIHx8IGZhbHNlKTtcclxuICAgICAgdGhpcy5fZnJvemVuID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2FuY2VsKCk6IHZvaWQge1xyXG4gICAgdGhpcy5mZWF0dXJlQ2FuY2VsLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzYXZlKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmZvcm0udmFsaWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5mZWF0dXJlID0gdGhpcy5pc1ZhclxyXG4gICAgICA/IHtcclxuICAgICAgICAgIG5hbWU6IHRoaXMubmFtZS52YWx1ZS50cmltKCksXHJcbiAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZS52YWx1ZS50cmltKCksXHJcbiAgICAgICAgICBzZXRQb2xpY3k6IHRoaXMuc2V0UG9saWN5LnZhbHVlLFxyXG4gICAgICAgICAgaXNOZWdhdGVkOiB0aGlzLmlzTmVnYXRlZC52YWx1ZSxcclxuICAgICAgICAgIGlzR2xvYmFsOiB0aGlzLmlzR2xvYmFsLnZhbHVlLFxyXG4gICAgICAgICAgaXNTaG9ydExpdmVkOiB0aGlzLmlzU2hvcnRMaXZlZC52YWx1ZSxcclxuICAgICAgICB9XHJcbiAgICAgIDoge1xyXG4gICAgICAgICAgbmFtZTogdGhpcy5uYW1lLnZhbHVlLnRyaW0oKSxcclxuICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLnZhbHVlLnRyaW0oKSxcclxuICAgICAgICAgIHNldFBvbGljeTogdGhpcy5zZXRQb2xpY3kudmFsdWUsXHJcbiAgICAgICAgfTtcclxuICAgIHRoaXMuZmVhdHVyZUNoYW5nZS5lbWl0KHRoaXMuZmVhdHVyZSk7XHJcbiAgfVxyXG59XHJcbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIChzdWJtaXQpPVwic2F2ZSgpXCI+XHJcbiAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XHJcbiAgICBAaWYgKGZlYXROYW1lcz8ubGVuZ3RoKSB7XHJcbiAgICA8IS0tIG5hbWUgKGJvdW5kKSAtLT5cclxuICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgPG1hdC1sYWJlbD5uYW1lPC9tYXQtbGFiZWw+XHJcbiAgICAgIDxtYXQtc2VsZWN0ICNuYW1lQ3RsIFtmb3JtQ29udHJvbF09XCJuYW1lXCI+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGkgb2YgZmVhdE5hbWVzXCIgW3ZhbHVlXT1cImkuaWRcIj57e1xyXG4gICAgICAgICAgaS5sYWJlbFxyXG4gICAgICAgIH19PC9tYXQtb3B0aW9uPlxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgIEBpZiAoJGFueShuYW1lKS5lcnJvcnM/LnJlcXVpcmVkICYmIChuYW1lLmRpcnR5IHx8IG5hbWUudG91Y2hlZCkpIHtcclxuICAgICAgPG1hdC1lcnJvcj5uYW1lIHJlcXVpcmVkPC9tYXQtZXJyb3I+XHJcbiAgICAgIH1cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICB9IEBlbHNlIHtcclxuICAgIDwhLS0gbmFtZSAoZnJlZSkgLS0+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtbGFiZWw+bmFtZTwvbWF0LWxhYmVsPlxyXG4gICAgICA8aW5wdXQgI25hbWVDdGwgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT1cIm5hbWVcIiAvPlxyXG4gICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgKm5nSWY9XCIkYW55KG5hbWUpLmVycm9ycz8ucmVxdWlyZWQgJiYgKG5hbWUuZGlydHkgfHwgbmFtZS50b3VjaGVkKVwiXHJcbiAgICAgICAgPm5hbWUgcmVxdWlyZWQ8L21hdC1lcnJvclxyXG4gICAgICA+XHJcbiAgICAgIEBpZiAoJGFueShuYW1lKS5lcnJvcnM/Lm1heExlbmd0aCAmJiAobmFtZS5kaXJ0eSB8fCBuYW1lLnRvdWNoZWQpKSB7XHJcbiAgICAgIDxtYXQtZXJyb3I+bmFtZSB0b28gbG9uZzwvbWF0LWVycm9yPlxyXG4gICAgICB9XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgfVxyXG5cclxuICAgIDwhLS0gdmFsdWUgKGJvdW5kKSAtLT5cclxuICAgIEBpZiAobmFtZUlkcz8ubGVuZ3RoKSB7XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtbGFiZWw+dmFsdWU8L21hdC1sYWJlbD5cclxuICAgICAgPG1hdC1zZWxlY3QgW2Zvcm1Db250cm9sXT1cInZhbHVlXCI+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGUgb2YgbmFtZUlkc1wiIFt2YWx1ZV09XCJlLmlkXCI+e3tcclxuICAgICAgICAgIGUubGFiZWxcclxuICAgICAgICB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICBAaWYgKCRhbnkodmFsdWUpLmVycm9ycz8ucmVxdWlyZWQgJiYgKHZhbHVlLmRpcnR5IHx8IHZhbHVlLnRvdWNoZWQpKSB7XHJcbiAgICAgIDxtYXQtZXJyb3I+dmFsdWUgcmVxdWlyZWQ8L21hdC1lcnJvcj5cclxuICAgICAgfVxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIH0gQGVsc2Uge1xyXG4gICAgPCEtLSB2YWx1ZSAoZnJlZSkgLS0+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtbGFiZWw+dmFsdWU8L21hdC1sYWJlbD5cclxuICAgICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJ2YWx1ZVwiIC8+XHJcbiAgICAgIEBpZiAoJGFueSh2YWx1ZSkuZXJyb3JzPy5yZXF1aXJlZCAmJiAodmFsdWUuZGlydHkgfHwgdmFsdWUudG91Y2hlZCkpIHtcclxuICAgICAgPG1hdC1lcnJvcj52YWx1ZSByZXF1aXJlZDwvbWF0LWVycm9yPlxyXG4gICAgICB9IEBpZiAoJGFueSh2YWx1ZSkuZXJyb3JzPy5tYXhMZW5ndGggJiYgKHZhbHVlLmRpcnR5IHx8IHZhbHVlLnRvdWNoZWQpKSB7XHJcbiAgICAgIDxtYXQtZXJyb3I+dmFsdWUgdG9vIGxvbmc8L21hdC1lcnJvcj5cclxuICAgICAgfVxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIH1cclxuXHJcbiAgICA8IS0tIHNldFBvbGljeSAtLT5cclxuICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgPG1hdC1sYWJlbD5zZXQgcG9saWN5PC9tYXQtbGFiZWw+XHJcbiAgICAgIDxtYXQtc2VsZWN0IFtmb3JtQ29udHJvbF09XCJzZXRQb2xpY3lcIj5cclxuICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiMFwiPm11bHRpcGxlPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCIxXCI+c2luZ2xlPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCIyXCI+c2luZ2xlIGZpcnN0PC9tYXQtb3B0aW9uPlxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDwvZGl2PlxyXG5cclxuICBAaWYgKGlzVmFyKSB7XHJcbiAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XHJcbiAgICA8IS0tIGlzTmVnYXRlZCAtLT5cclxuICAgIDxtYXQtY2hlY2tib3ggW2Zvcm1Db250cm9sXT1cImlzTmVnYXRlZFwiPm5lZ2F0ZWQ8L21hdC1jaGVja2JveD5cclxuXHJcbiAgICA8IS0tIGlzU2hvcnRMaXZlZCAtLT5cclxuICAgIDxtYXQtY2hlY2tib3ggW2Zvcm1Db250cm9sXT1cImlzU2hvcnRMaXZlZFwiPnNob3J0LWxpdmVkPC9tYXQtY2hlY2tib3g+XHJcblxyXG4gICAgPCEtLSBpc0dsb2JhbCAtLT5cclxuICAgIDxtYXQtY2hlY2tib3ggW2Zvcm1Db250cm9sXT1cImlzR2xvYmFsXCI+Z2xvYmFsPC9tYXQtY2hlY2tib3g+XHJcbiAgPC9kaXY+XHJcbiAgfVxyXG5cclxuICA8IS0tIGJ1dHRvbnMgLS0+XHJcbiAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBjb2xvcj1cIndhcm5cIlxyXG4gICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgbWF0VG9vbHRpcD1cIkRpc2NhcmQgY2hhbmdlc1wiXHJcbiAgICAgIChjbGljayk9XCJjYW5jZWwoKVwiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdC13YXJuXCI+Y2xlYXI8L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxyXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgbWF0VG9vbHRpcD1cIkFjY2VwdCBjaGFuZ2VzXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImZvcm0uaW52YWxpZCB8fCBmb3JtLnByaXN0aW5lXCJcclxuICAgID5cclxuICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0LXByaW1hcnlcIj5jaGVja19jaXJjbGU8L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvZm9ybT5cclxuIl19
@@ -141,10 +141,10 @@ export class FeatureSetEditorComponent {
141
141
  this.editedFeature = undefined;
142
142
  this._editedFeatureIndex = -1;
143
143
  }
144
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: FeatureSetEditorComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
145
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.8", type: FeatureSetEditorComponent, isStandalone: true, selector: "gve-feature-set-editor", inputs: { isVar: "isVar", featNames: "featNames", featValues: "featValues", filterThreshold: "filterThreshold", features: "features" }, outputs: { featuresChange: "featuresChange" }, ngImport: i0, template: "<div>\r\n <div class=\"form-row\">\r\n <!-- filter -->\r\n @if (filterThreshold === 0 || features.length > filterThreshold) {\r\n <mat-form-field>\r\n <input matInput placeholder=\"filter\" [formControl]=\"filter\" />\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matSuffix\r\n (click)=\"filter.reset()\"\r\n [disabled]=\"!filter.value\"\r\n [attr.aria-label]=\"'Reset filter'\"\r\n >\r\n <mat-icon color=\"warn\" class=\"mat-warn\">cancel</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n }\r\n\r\n <!-- add feature button -->\r\n <button\r\n type=\"button\"\r\n color=\"primary\"\r\n class=\"mat-primary\"\r\n mat-flat-button\r\n matTooltip=\"Add a new feature\"\r\n (click)=\"addFeature()\"\r\n [class.in-row-button]=\"\r\n filterThreshold === 0 || features.length > filterThreshold\r\n \"\r\n >\r\n <mat-icon>add</mat-icon>\r\n feature\r\n </button>\r\n </div>\r\n\r\n <!-- list -->\r\n @if (features.length) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>feature</th>\r\n <th>value</th>\r\n <th>policy</th>\r\n @if (isVar) {\r\n <th>negated</th>\r\n <th>global</th>\r\n <th>short-lived</th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (feature of filteredFeatures; track feature) {\r\n <tr>\r\n <td class=\"fit-width\">\r\n <!-- edit -->\r\n <button\r\n type=\"button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n matTooltip=\"Edit this feature\"\r\n (click)=\"editFeature(feature)\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <!-- delete -->\r\n <button\r\n type=\"button\"\r\n color=\"warn\"\r\n mat-icon-button\r\n matTooltip=\"Delete this feature\"\r\n (click)=\"deleteFeature(feature)\"\r\n >\r\n <mat-icon class=\"mat-warn\">delete</mat-icon>\r\n </button>\r\n </td>\r\n <td>\r\n @if (featNames?.length) {\r\n <span>{{\r\n feature.name | flatLookup : featNames : \"id\" : \"label\"\r\n }}</span>\r\n } @else {\r\n <span>{{ feature.name }}</span>\r\n }\r\n </td>\r\n <td>\r\n @if (featValues) {\r\n <span>{{\r\n feature.value | flatLookup : featValues[feature.name]\r\n }}</span>\r\n } @else {\r\n <span>{{ feature.value }}</span>\r\n }\r\n </td>\r\n <td>\r\n <span>{{ POLICIES[feature.setPolicy] }}</span>\r\n </td>\r\n @if (isVar) {\r\n <td>\r\n <span>{{ $any(feature).isNegated ? \"yes\" : \"no\" }}</span>\r\n </td>\r\n <td>\r\n <span>{{ $any(feature).isGlobal ? \"yes\" : \"no\" }}</span>\r\n </td>\r\n <td>\r\n <span>{{ $any(feature).isShortLived ? \"yes\" : \"no\" }}</span>\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n\r\n <!-- editor -->\r\n <mat-expansion-panel [disabled]=\"!editedFeature\" [expanded]=\"editedFeature\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n <span>{{ editedFeature?.name || \"feature\" }}</span>\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <gve-feature-editor\r\n [isVar]=\"isVar\"\r\n [featNames]=\"featNames\"\r\n [featValues]=\"featValues\"\r\n [feature]=\"editedFeature\"\r\n (featureChange)=\"onFeatureChange($event)\"\r\n (featureCancel)=\"onFeatureCancel()\"\r\n />\r\n </mat-expansion-panel>\r\n</div>\r\n", styles: [".form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}.in-row-button{margin-top:-16px}table{width:100%;border-collapse:collapse;margin-top:8px}th{color:#909090;font-weight:400;text-align:left;background-color:#e1e0e0}th,td{padding:4px;border-bottom:1px solid silver}tbody tr:nth-child(2n){background-color:#e8e8e8}td.fit-width{width:1px;white-space:nowrap}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i3.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i3.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i3.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: NgToolsModule }, { kind: "pipe", type: i8.FlatLookupPipe, name: "flatLookup" }, { kind: "component", type: FeatureEditorComponent, selector: "gve-feature-editor", inputs: ["featNames", "featValues", "feature", "isVar"], outputs: ["featureCancel", "featureChange"] }] }); }
144
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: FeatureSetEditorComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
145
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: FeatureSetEditorComponent, isStandalone: true, selector: "gve-feature-set-editor", inputs: { isVar: "isVar", featNames: "featNames", featValues: "featValues", filterThreshold: "filterThreshold", features: "features" }, outputs: { featuresChange: "featuresChange" }, ngImport: i0, template: "<div>\r\n <div class=\"form-row\">\r\n <!-- filter -->\r\n @if (filterThreshold === 0 || features.length > filterThreshold) {\r\n <mat-form-field>\r\n <input matInput placeholder=\"filter\" [formControl]=\"filter\" />\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matSuffix\r\n (click)=\"filter.reset()\"\r\n [disabled]=\"!filter.value\"\r\n [attr.aria-label]=\"'Reset filter'\"\r\n >\r\n <mat-icon color=\"warn\" class=\"mat-warn\">cancel</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n }\r\n\r\n <!-- add feature button -->\r\n <button\r\n type=\"button\"\r\n color=\"primary\"\r\n class=\"mat-primary\"\r\n mat-flat-button\r\n matTooltip=\"Add a new feature\"\r\n (click)=\"addFeature()\"\r\n [class.in-row-button]=\"\r\n filterThreshold === 0 || features.length > filterThreshold\r\n \"\r\n >\r\n <mat-icon>add</mat-icon>\r\n feature\r\n </button>\r\n </div>\r\n\r\n <!-- list -->\r\n @if (features.length) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>feature</th>\r\n <th>value</th>\r\n <th>policy</th>\r\n @if (isVar) {\r\n <th>negated</th>\r\n <th>global</th>\r\n <th>short-lived</th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (feature of filteredFeatures; track feature) {\r\n <tr>\r\n <td class=\"fit-width\">\r\n <!-- edit -->\r\n <button\r\n type=\"button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n matTooltip=\"Edit this feature\"\r\n (click)=\"editFeature(feature)\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <!-- delete -->\r\n <button\r\n type=\"button\"\r\n color=\"warn\"\r\n mat-icon-button\r\n matTooltip=\"Delete this feature\"\r\n (click)=\"deleteFeature(feature)\"\r\n >\r\n <mat-icon class=\"mat-warn\">delete</mat-icon>\r\n </button>\r\n </td>\r\n <td>\r\n @if (featNames?.length) {\r\n <span>{{\r\n feature.name | flatLookup : featNames : \"id\" : \"label\"\r\n }}</span>\r\n } @else {\r\n <span>{{ feature.name }}</span>\r\n }\r\n </td>\r\n <td>\r\n @if (featValues) {\r\n <span>{{\r\n feature.value | flatLookup : featValues[feature.name]\r\n }}</span>\r\n } @else {\r\n <span>{{ feature.value }}</span>\r\n }\r\n </td>\r\n <td>\r\n <span>{{ POLICIES[feature.setPolicy] }}</span>\r\n </td>\r\n @if (isVar) {\r\n <td>\r\n <span>{{ $any(feature).isNegated ? \"yes\" : \"no\" }}</span>\r\n </td>\r\n <td>\r\n <span>{{ $any(feature).isGlobal ? \"yes\" : \"no\" }}</span>\r\n </td>\r\n <td>\r\n <span>{{ $any(feature).isShortLived ? \"yes\" : \"no\" }}</span>\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n\r\n <!-- editor -->\r\n <mat-expansion-panel [disabled]=\"!editedFeature\" [expanded]=\"editedFeature\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n <span>{{ editedFeature?.name || \"feature\" }}</span>\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <gve-feature-editor\r\n [isVar]=\"isVar\"\r\n [featNames]=\"featNames\"\r\n [featValues]=\"featValues\"\r\n [feature]=\"editedFeature\"\r\n (featureChange)=\"onFeatureChange($event)\"\r\n (featureCancel)=\"onFeatureCancel()\"\r\n />\r\n </mat-expansion-panel>\r\n</div>\r\n", styles: [".form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.form-row *{flex:0 0 auto}.in-row-button{margin-top:-16px}table{width:100%;border-collapse:collapse;margin-top:8px}th{color:#909090;font-weight:400;text-align:left;background-color:#e1e0e0}th,td{padding:4px;border-bottom:1px solid silver}tbody tr:nth-child(2n){background-color:#e8e8e8}td.fit-width{width:1px;white-space:nowrap}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i3.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i3.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i3.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: NgToolsModule }, { kind: "pipe", type: i8.FlatLookupPipe, name: "flatLookup" }, { kind: "component", type: FeatureEditorComponent, selector: "gve-feature-editor", inputs: ["featNames", "featValues", "feature", "isVar"], outputs: ["featureCancel", "featureChange"] }] }); }
146
146
  }
147
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: FeatureSetEditorComponent, decorators: [{
147
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: FeatureSetEditorComponent, decorators: [{
148
148
  type: Component,
149
149
  args: [{ selector: 'gve-feature-set-editor', standalone: true, imports: [
150
150
  CommonModule,
@@ -172,4 +172,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImpor
172
172
  }], featuresChange: [{
173
173
  type: Output
174
174
  }] } });
175
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1zZXQtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2d2ZS1jb3JlL3NyYy9saWIvY29tcG9uZW50cy9mZWF0dXJlLXNldC1lZGl0b3IvZmVhdHVyZS1zZXQtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2d2ZS1jb3JlL3NyYy9saWIvY29tcG9uZW50cy9mZWF0dXJlLXNldC1lZGl0b3IvZmVhdHVyZS1zZXQtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBNEIsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFN0QsT0FBTyxFQUFnQixZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9C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O1FBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO1FBQy9CLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVNLGVBQWU7UUFDcEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7UUFDL0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7OEdBL0lVLHlCQUF5QjtrR0FBekIseUJBQXlCLHlRQzNFdEMsNnlIQW9JQSxvY0R4RUksWUFBWSw4QkFDWixtQkFBbUIseWtCQUNuQixlQUFlLHdVQUNmLGtCQUFrQix5ZEFDbEIsa0JBQWtCLDBXQUNsQixhQUFhLG1MQUNiLGNBQWMsMFdBQ2QsZUFBZSw4QkFDZixnQkFBZ0IsNFRBQ2hCLGFBQWEsOEZBQ2Isc0JBQXNCOzsyRkFLYix5QkFBeUI7a0JBbkJyQyxTQUFTOytCQUNFLHdCQUF3QixjQUN0QixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2Ysa0JBQWtCO3dCQUNsQixrQkFBa0I7d0JBQ2xCLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIsYUFBYTt3QkFDYixzQkFBc0I7cUJBQ3ZCO2dGQWVNLEtBQUs7c0JBRFgsS0FBSztnQkFRQyxTQUFTO3NCQURmLEtBQUs7Z0JBU0MsVUFBVTtzQkFEaEIsS0FBSztnQkFVQyxlQUFlO3NCQURyQixLQUFLO2dCQU9LLFFBQVE7c0JBRGxCLEtBQUs7Z0JBZ0JDLGNBQWM7c0JBRHBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdEV4cGFuc2lvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2V4cGFuc2lvbic7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcblxyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IE5nVG9vbHNNb2R1bGUgfSBmcm9tICdAbXlybWlkb24vbmctdG9vbHMnO1xyXG5cclxuaW1wb3J0IHtcclxuICBGZWF0dXJlU2V0UG9saWN5LFxyXG4gIExhYmVsZWRJZCxcclxuICBGZWF0dXJlLFxyXG4gIE9wZXJhdGlvbkZlYXR1cmUsXHJcbn0gZnJvbSAnQG15cm1pZG9uL2d2ZS1zbmFwc2hvdC12aWV3JztcclxuaW1wb3J0IHtcclxuICBGZWF0dXJlRWRpdG9yQ29tcG9uZW50LFxyXG4gIEZlYXR1cmVNYXAsXHJcbn0gZnJvbSAnLi4vZmVhdHVyZS1lZGl0b3IvZmVhdHVyZS1lZGl0b3IuY29tcG9uZW50JztcclxuXHJcbi8qKlxyXG4gKiDwn5SRIGBndmUtZmVhdHVyZS1zZXQtZWRpdG9yYFxyXG4gKlxyXG4gKiBDb21wb25lbnQgZm9yIGVkaXRpbmcgYSBzZXQgb2YgZmVhdHVyZXMuIEl0IHNob3dzIGEgbGlzdCBvZiBmZWF0dXJlcyxcclxuICogYWxsb3dpbmcgdG8gZWRpdCBlYWNoIG9mIHRoZW0gb3IgYWRkaW5nIG5ldyBvbmVzLiBPcHRpb25hbGx5IHlvdSBjYW5cclxuICogc3BlY2lmeSBhIGxpc3Qgb2YgZmVhdHVyZSBuYW1lcyBhbmQgdmFsdWVzIHRvIHVzZSBpbiB0aGUgc2VsZWN0aW9uLlxyXG4gKiBVc2VkIGJ5IGJhc2UgdGV4dCBlZGl0b3IgYW5kIGNoYWluIG9wZXJhdGlvbiBlZGl0b3IgY29tcG9uZW50cy5cclxuICpcclxuICogLSDilrbvuI8gYGZlYXROYW1lc2AgKGBMYWJlbGVkSWRbXWApOiB0aGUgbGlzdCBvZiBmZWF0dXJlIG5hbWVzIHRvIGRpc3BsYXlcclxuICogaW4gdGhlIF9uYW1lXyBzZWxlY3Rpb24uIFRoaXMgaXMgdXNlZCB3aGVuIHlvdSBoYXZlIGEgY2xvc2VkIGxpc3Qgb2YgZmVhdHVyZXMuXHJcbiAqIC0g4pa277iPIGBmZWF0VmFsdWVzYCAoYEZlYXR1cmVNYXBgKTogdGhlIGZlYXR1cmUgdmFsdWVzIG1hcC4gV2hlbiBzcGVjaWZpZWRcclxuICogYW5kIHRoZSB1c2VyIHNlbGVjdHMgYSBmZWF0dXJlIG5hbWUgcHJlc2VudCBpbiB0aGUgbWFwIGtleXMsIHRoZSBjb3JyZXNwb25kaW5nXHJcbiAqIHZhbHVlcyB3aWxsIGJlIHVzZWQgdG8gcG9wdWxhdGUgdGhlIHZhbHVlIHNlbGVjdGlvbi5cclxuICogLSDilrbvuI8gYGZpbHRlclRocmVzaG9sZGAgKGBudW1iZXJgKTogdGhlIHRocmVzaG9sZCBhdCB3aGljaCB0aGUgZmVhdHVyZXMgZmlsdGVyXHJcbiAqIHNob3VsZCBiZWNvbWUgdmlzaWJsZS4gSWYgc2V0IHRvIDAsIHRoZSBmaWx0ZXIgaXMgYWx3YXlzIHZpc2libGU7IGlmIHNldCB0byAtMSxcclxuICogaXQgaXMgYWx3YXlzIGludmlzaWJsZTsgb3RoZXJ3aXNlLCBpdCBnZXRzIHZpc2libGUgd2hlbiB0aGUgbnVtYmVyIG9mIGZlYXR1cmVzXHJcbiAqIGlzIGdyZWF0ZXIgdGhhbiB0aGUgdGhyZXNob2xkLiBEZWZhdWx0IGlzIDUuXHJcbiAqIC0g4pa277iPIGBmZWF0dXJlc2AgKGBGZWF0dXJlW11gKTogdGhlIGZlYXR1cmVzIHRvIGVkaXQuXHJcbiAqIC0g4pa277iPIGBpc1ZhcmA6IHRydWUgaWYgdGhlIGZlYXR1cmUgaXMgYSB2YXJpYW50IG9wZXJhdGlvbiBmZWF0dXJlLCB3aGljaFxyXG4gKiBoYXMgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGxpa2UgbmVnYXRpb24sIGdsb2JhbCwgYW5kIHNob3J0LWxpdmVkLlxyXG4gKiAtIPCflKUgYGZlYXR1cmVzQ2hhbmdlYCAoYEZlYXR1cmVbXWApOiBlbWl0dGVkIHdoZW4gZmVhdHVyZXMgaGF2ZSBjaGFuZ2VkLlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdndmUtZmVhdHVyZS1zZXQtZWRpdG9yJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICBNYXRFeHBhbnNpb25Nb2R1bGUsXHJcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgTWF0SW5wdXRNb2R1bGUsXHJcbiAgICBNYXRTZWxlY3RNb2R1bGUsXHJcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxyXG4gICAgTmdUb29sc01vZHVsZSxcclxuICAgIEZlYXR1cmVFZGl0b3JDb21wb25lbnQsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vZmVhdHVyZS1zZXQtZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vZmVhdHVyZS1zZXQtZWRpdG9yLmNvbXBvbmVudC5jc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmVhdHVyZVNldEVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIF9zdWI/OiBTdWJzY3JpcHRpb247XHJcbiAgcHJpdmF0ZSBfZmVhdHVyZXM6IEZlYXR1cmVbXSB8IE9wZXJhdGlvbkZlYXR1cmVbXTtcclxuICBwcml2YXRlIF9lZGl0ZWRGZWF0dXJlSW5kZXg6IG51bWJlcjtcclxuXHJcbiAgcHVibGljIFBPTElDSUVTID0gWydNJywgJ1MnLCAnU0YnXTtcclxuXHJcbiAgLyoqXHJcbiAgICogVHJ1ZSBpZiB0aGUgZmVhdHVyZXMgYXJlIHZhcmlhYmxlIGZlYXR1cmVzLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGlzVmFyID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBsaXN0IG9mIGZlYXR1cmUgbmFtZXMgdG8gZGlzcGxheSBpbiB0aGUgbmFtZSBzZWxlY3Rpb24uXHJcbiAgICogVGhpcyBpcyB1c2VkIHdoZW4geW91IGhhdmUgYSBjbG9zZWQgbGlzdCBvZiBmZWF0dXJlcy5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBmZWF0TmFtZXM6IExhYmVsZWRJZFtdIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgZmVhdHVyZSB2YWx1ZXMgbWFwLiBXaGVuIHNwZWNpZmllZCBhbmQgdGhlIHVzZXIgc2VsZWN0cyBhIGZlYXR1cmVcclxuICAgKiBuYW1lIHByZXNlbnQgaW4gdGhlIG1hcCBrZXlzLCB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMgd2lsbCBiZSB1c2VkXHJcbiAgICogdG8gcG9wdWxhdGUgdGhlIHZhbHVlIHNlbGVjdGlvbi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBmZWF0VmFsdWVzOiBGZWF0dXJlTWFwIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgdGhyZXNob2xkIGF0IHdoaWNoIHRoZSBmZWF0dXJlcyBmaWx0ZXIgc2hvdWxkIGJlY29tZSB2aXNpYmxlLlxyXG4gICAqIElmIHNldCB0byAwLCB0aGUgZmlsdGVyIGlzIGFsd2F5cyB2aXNpYmxlOyBpZiBzZXQgdG8gLTEsIGl0IGlzIGFsd2F5c1xyXG4gICAqIGludmlzaWJsZTsgb3RoZXJ3aXNlLCBpdCBnZXRzIHZpc2libGUgd2hlbiB0aGUgbnVtYmVyIG9mIGZlYXR1cmVzXHJcbiAgICogaXMgZ3JlYXRlciB0aGFuIHRoZSB0aHJlc2hvbGQuIERlZmF1bHQgaXMgNS5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBmaWx0ZXJUaHJlc2hvbGQgPSA1O1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgZmVhdHVyZXMgdG8gZWRpdC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgZmVhdHVyZXMoKTogRmVhdHVyZVtdIHwgT3BlcmF0aW9uRmVhdHVyZVtdIHtcclxuICAgIHJldHVybiB0aGlzLl9mZWF0dXJlcztcclxuICB9XHJcbiAgcHVibGljIHNldCBmZWF0dXJlcyh2YWx1ZTogRmVhdHVyZVtdIHwgT3BlcmF0aW9uRmVhdHVyZVtdKSB7XHJcbiAgICBpZiAodGhpcy5fZmVhdHVyZXMgPT09IHZhbHVlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX2ZlYXR1cmVzID0gdmFsdWU7XHJcbiAgICB0aGlzLmFwcGx5RmVhdHVyZUZpbHRlcih0aGlzLmZpbHRlci52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbWl0dGVkIHdoZW4gdGhlIGZlYXR1cmVzIGNoYW5nZS5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgZmVhdHVyZXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEZlYXR1cmVbXSB8IE9wZXJhdGlvbkZlYXR1cmVbXT4oKTtcclxuXHJcbiAgcHVibGljIGVkaXRlZEZlYXR1cmU/OiBGZWF0dXJlIHwgT3BlcmF0aW9uRmVhdHVyZTtcclxuXHJcbiAgLy8gZmlsdGVyXHJcbiAgcHVibGljIGZpbHRlcjogRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD47XHJcbiAgcHVibGljIGZpbHRlcmVkRmVhdHVyZXM6IEZlYXR1cmVbXSB8IE9wZXJhdGlvbkZlYXR1cmVbXTtcclxuXHJcbiAgY29uc3RydWN0b3IoZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyKSB7XHJcbiAgICB0aGlzLl9mZWF0dXJlcyA9IFtdO1xyXG4gICAgdGhpcy5maWx0ZXJlZEZlYXR1cmVzID0gW107XHJcbiAgICB0aGlzLmZpbHRlciA9IGZvcm1CdWlsZGVyLmNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCk7XHJcbiAgICB0aGlzLl9lZGl0ZWRGZWF0dXJlSW5kZXggPSAtMTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlGZWF0dXJlRmlsdGVyKG5hbWU/OiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbHRlcmVkRmVhdHVyZXMgPSB0aGlzLmZlYXR1cmVzLmZpbHRlcigoZmVhdHVyZSkgPT4ge1xyXG4gICAgICByZXR1cm4gIW5hbWUgfHwgZmVhdHVyZS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobmFtZS50b0xvd2VyQ2FzZSgpKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3ViID0gdGhpcy5maWx0ZXIudmFsdWVDaGFuZ2VzXHJcbiAgICAgIC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIGRlYm91bmNlVGltZSgzMDApKVxyXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXBwbHlGZWF0dXJlRmlsdGVyKHZhbHVlKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWI/LnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWRkRmVhdHVyZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZWRpdGVkRmVhdHVyZSA9IHtcclxuICAgICAgbmFtZTogJycsXHJcbiAgICAgIHZhbHVlOiAnJyxcclxuICAgICAgc2V0UG9saWN5OiBGZWF0dXJlU2V0UG9saWN5Lm11bHRpcGxlLFxyXG4gICAgfTtcclxuICAgIHRoaXMuX2VkaXRlZEZlYXR1cmVJbmRleCA9IC0xO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGVkaXRGZWF0dXJlKGZlYXR1cmU6IEZlYXR1cmUgfCBPcGVyYXRpb25GZWF0dXJlKTogdm9pZCB7XHJcbiAgICB0aGlzLmVkaXRlZEZlYXR1cmUgPSBmZWF0dXJlO1xyXG4gICAgdGhpcy5fZWRpdGVkRmVhdHVyZUluZGV4ID0gdGhpcy5mZWF0dXJlcy5pbmRleE9mKGZlYXR1cmUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGRlbGV0ZUZlYXR1cmUoZmVhdHVyZTogRmVhdHVyZSB8IE9wZXJhdGlvbkZlYXR1cmUpOiB2b2lkIHtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5mZWF0dXJlcy5pbmRleE9mKGZlYXR1cmUpO1xyXG4gICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBmZWF0dXJlcyA9IFsuLi50aGlzLmZlYXR1cmVzXTtcclxuICAgIGZlYXR1cmVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB0aGlzLmZlYXR1cmVzID0gZmVhdHVyZXM7XHJcbiAgICB0aGlzLmZlYXR1cmVzQ2hhbmdlLmVtaXQodGhpcy5mZWF0dXJlcyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25GZWF0dXJlQ2hhbmdlKGZlYXR1cmU6IEZlYXR1cmUgfCBPcGVyYXRpb25GZWF0dXJlKTogdm9pZCB7XHJcbiAgICBjb25zdCBmZWF0dXJlcyA9IFsuLi50aGlzLmZlYXR1cmVzXTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gZmVhdHVyZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgaWYgKGZlYXR1cmVzW2ldLm5hbWUgPT09IGZlYXR1cmUubmFtZSkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGZlYXR1cmUuc2V0UG9saWN5ID09PSBGZWF0dXJlU2V0UG9saWN5LnNpbmdsZSB8fFxyXG4gICAgICAgICAgZmVhdHVyZXNbaV0uc2V0UG9saWN5ID09PSBGZWF0dXJlU2V0UG9saWN5LnNpbmdsZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgZmVhdHVyZXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9lZGl0ZWRGZWF0dXJlSW5kZXggPT09IC0xKSB7XHJcbiAgICAgIGZlYXR1cmVzLnB1c2goZmVhdHVyZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmZWF0dXJlcy5zcGxpY2UodGhpcy5fZWRpdGVkRmVhdHVyZUluZGV4LCAxLCBmZWF0dXJlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZlYXR1cmVzID0gZmVhdHVyZXM7XHJcbiAgICB0aGlzLmVkaXRlZEZlYXR1cmUgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLl9lZGl0ZWRGZWF0dXJlSW5kZXggPSAtMTtcclxuICAgIHRoaXMuZmVhdHVyZXNDaGFuZ2UuZW1pdCh0aGlzLmZlYXR1cmVzKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkZlYXR1cmVDYW5jZWwoKTogdm9pZCB7XHJcbiAgICB0aGlzLmVkaXRlZEZlYXR1cmUgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLl9lZGl0ZWRGZWF0dXJlSW5kZXggPSAtMTtcclxuICB9XHJcbn1cclxuIiwiPGRpdj5cclxuICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cclxuICAgIDwhLS0gZmlsdGVyIC0tPlxyXG4gICAgQGlmIChmaWx0ZXJUaHJlc2hvbGQgPT09IDAgfHwgZmVhdHVyZXMubGVuZ3RoID4gZmlsdGVyVGhyZXNob2xkKSB7XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cImZpbHRlclwiIFtmb3JtQ29udHJvbF09XCJmaWx0ZXJcIiAvPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgKGNsaWNrKT1cImZpbHRlci5yZXNldCgpXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiIWZpbHRlci52YWx1ZVwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInUmVzZXQgZmlsdGVyJ1wiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LWljb24gY29sb3I9XCJ3YXJuXCIgY2xhc3M9XCJtYXQtd2FyblwiPmNhbmNlbDwvbWF0LWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIH1cclxuXHJcbiAgICA8IS0tIGFkZCBmZWF0dXJlIGJ1dHRvbiAtLT5cclxuICAgIDxidXR0b25cclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgIGNsYXNzPVwibWF0LXByaW1hcnlcIlxyXG4gICAgICBtYXQtZmxhdC1idXR0b25cclxuICAgICAgbWF0VG9vbHRpcD1cIkFkZCBhIG5ldyBmZWF0dXJlXCJcclxuICAgICAgKGNsaWNrKT1cImFkZEZlYXR1cmUoKVwiXHJcbiAgICAgIFtjbGFzcy5pbi1yb3ctYnV0dG9uXT1cIlxyXG4gICAgICAgIGZpbHRlclRocmVzaG9sZCA9PT0gMCB8fCBmZWF0dXJlcy5sZW5ndGggPiBmaWx0ZXJUaHJlc2hvbGRcclxuICAgICAgXCJcclxuICAgID5cclxuICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XHJcbiAgICAgIGZlYXR1cmVcclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIGxpc3QgLS0+XHJcbiAgQGlmIChmZWF0dXJlcy5sZW5ndGgpIHtcclxuICA8dGFibGU+XHJcbiAgICA8dGhlYWQ+XHJcbiAgICAgIDx0cj5cclxuICAgICAgICA8dGg+PC90aD5cclxuICAgICAgICA8dGg+ZmVhdHVyZTwvdGg+XHJcbiAgICAgICAgPHRoPnZhbHVlPC90aD5cclxuICAgICAgICA8dGg+cG9saWN5PC90aD5cclxuICAgICAgICBAaWYgKGlzVmFyKSB7XHJcbiAgICAgICAgPHRoPm5lZ2F0ZWQ8L3RoPlxyXG4gICAgICAgIDx0aD5nbG9iYWw8L3RoPlxyXG4gICAgICAgIDx0aD5zaG9ydC1saXZlZDwvdGg+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L3RyPlxyXG4gICAgPC90aGVhZD5cclxuICAgIDx0Ym9keT5cclxuICAgICAgQGZvciAoZmVhdHVyZSBvZiBmaWx0ZXJlZEZlYXR1cmVzOyB0cmFjayBmZWF0dXJlKSB7XHJcbiAgICAgIDx0cj5cclxuICAgICAgICA8dGQgY2xhc3M9XCJmaXQtd2lkdGhcIj5cclxuICAgICAgICAgIDwhLS0gZWRpdCAtLT5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiRWRpdCB0aGlzIGZlYXR1cmVcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiZWRpdEZlYXR1cmUoZmVhdHVyZSlcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXQtcHJpbWFyeVwiPmVkaXQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8IS0tIGRlbGV0ZSAtLT5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIGNvbG9yPVwid2FyblwiXHJcbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiRGVsZXRlIHRoaXMgZmVhdHVyZVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVGZWF0dXJlKGZlYXR1cmUpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0LXdhcm5cIj5kZWxldGU8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgICA8dGQ+XHJcbiAgICAgICAgICBAaWYgKGZlYXROYW1lcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICA8c3Bhbj57e1xyXG4gICAgICAgICAgICBmZWF0dXJlLm5hbWUgfCBmbGF0TG9va3VwIDogZmVhdE5hbWVzIDogXCJpZFwiIDogXCJsYWJlbFwiXHJcbiAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgPHNwYW4+e3sgZmVhdHVyZS5uYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPHRkPlxyXG4gICAgICAgICAgQGlmIChmZWF0VmFsdWVzKSB7XHJcbiAgICAgICAgICA8c3Bhbj57e1xyXG4gICAgICAgICAgICBmZWF0dXJlLnZhbHVlIHwgZmxhdExvb2t1cCA6IGZlYXRWYWx1ZXNbZmVhdHVyZS5uYW1lXVxyXG4gICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgIDxzcGFuPnt7IGZlYXR1cmUudmFsdWUgfX08L3NwYW4+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgICA8dGQ+XHJcbiAgICAgICAgICA8c3Bhbj57eyBQT0xJQ0lFU1tmZWF0dXJlLnNldFBvbGljeV0gfX08L3NwYW4+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgICBAaWYgKGlzVmFyKSB7XHJcbiAgICAgICAgPHRkPlxyXG4gICAgICAgICAgPHNwYW4+e3sgJGFueShmZWF0dXJlKS5pc05lZ2F0ZWQgPyBcInllc1wiIDogXCJub1wiIH19PC9zcGFuPlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPHRkPlxyXG4gICAgICAgICAgPHNwYW4+e3sgJGFueShmZWF0dXJlKS5pc0dsb2JhbCA/IFwieWVzXCIgOiBcIm5vXCIgfX08L3NwYW4+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgICA8dGQ+XHJcbiAgICAgICAgICA8c3Bhbj57eyAkYW55KGZlYXR1cmUpLmlzU2hvcnRMaXZlZCA/IFwieWVzXCIgOiBcIm5vXCIgfX08L3NwYW4+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgICB9XHJcbiAgICAgIDwvdHI+XHJcbiAgICAgIH1cclxuICAgIDwvdGJvZHk+XHJcbiAgPC90YWJsZT5cclxuICB9XHJcblxyXG4gIDwhLS0gZWRpdG9yIC0tPlxyXG4gIDxtYXQtZXhwYW5zaW9uLXBhbmVsIFtkaXNhYmxlZF09XCIhZWRpdGVkRmVhdHVyZVwiIFtleHBhbmRlZF09XCJlZGl0ZWRGZWF0dXJlXCI+XHJcbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgPHNwYW4+e3sgZWRpdGVkRmVhdHVyZT8ubmFtZSB8fCBcImZlYXR1cmVcIiB9fTwvc3Bhbj5cclxuICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgPGd2ZS1mZWF0dXJlLWVkaXRvclxyXG4gICAgICBbaXNWYXJdPVwiaXNWYXJcIlxyXG4gICAgICBbZmVhdE5hbWVzXT1cImZlYXROYW1lc1wiXHJcbiAgICAgIFtmZWF0VmFsdWVzXT1cImZlYXRWYWx1ZXNcIlxyXG4gICAgICBbZmVhdHVyZV09XCJlZGl0ZWRGZWF0dXJlXCJcclxuICAgICAgKGZlYXR1cmVDaGFuZ2UpPVwib25GZWF0dXJlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAoZmVhdHVyZUNhbmNlbCk9XCJvbkZlYXR1cmVDYW5jZWwoKVwiXHJcbiAgICAvPlxyXG4gIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuPC9kaXY+XHJcbiJdfQ==
175
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1zZXQtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2d2ZS1jb3JlL3NyYy9saWIvY29tcG9uZW50cy9mZWF0dXJlLXNldC1lZGl0b3IvZmVhdHVyZS1zZXQtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2d2ZS1jb3JlL3NyYy9saWIvY29tcG9uZW50cy9mZWF0dXJlLXNldC1lZGl0b3IvZmVhdHVyZS1zZXQtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBNEIsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFN0QsT0FBTyxFQUFnQixZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9C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O1FBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO1FBQy9CLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVNLGVBQWU7UUFDcEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7UUFDL0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7K0dBL0lVLHlCQUF5QjttR0FBekIseUJBQXlCLHlRQzNFdEMsNnlIQW9JQSxvY0R4RUksWUFBWSw4QkFDWixtQkFBbUIseWtCQUNuQixlQUFlLHdVQUNmLGtCQUFrQix5ZEFDbEIsa0JBQWtCLDBXQUNsQixhQUFhLG1MQUNiLGNBQWMsMFdBQ2QsZUFBZSw4QkFDZixnQkFBZ0IsNFRBQ2hCLGFBQWEsOEZBQ2Isc0JBQXNCOzs0RkFLYix5QkFBeUI7a0JBbkJyQyxTQUFTOytCQUNFLHdCQUF3QixjQUN0QixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2Ysa0JBQWtCO3dCQUNsQixrQkFBa0I7d0JBQ2xCLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIsYUFBYTt3QkFDYixzQkFBc0I7cUJBQ3ZCO2dGQWVNLEtBQUs7c0JBRFgsS0FBSztnQkFRQyxTQUFTO3NCQURmLEtBQUs7Z0JBU0MsVUFBVTtzQkFEaEIsS0FBSztnQkFVQyxlQUFlO3NCQURyQixLQUFLO2dCQU9LLFFBQVE7c0JBRGxCLEtBQUs7Z0JBZ0JDLGNBQWM7c0JBRHBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdEV4cGFuc2lvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2V4cGFuc2lvbic7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcblxyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IE5nVG9vbHNNb2R1bGUgfSBmcm9tICdAbXlybWlkb24vbmctdG9vbHMnO1xyXG5cclxuaW1wb3J0IHtcclxuICBGZWF0dXJlU2V0UG9saWN5LFxyXG4gIExhYmVsZWRJZCxcclxuICBGZWF0dXJlLFxyXG4gIE9wZXJhdGlvbkZlYXR1cmUsXHJcbn0gZnJvbSAnQG15cm1pZG9uL2d2ZS1zbmFwc2hvdC12aWV3JztcclxuaW1wb3J0IHtcclxuICBGZWF0dXJlRWRpdG9yQ29tcG9uZW50LFxyXG4gIEZlYXR1cmVNYXAsXHJcbn0gZnJvbSAnLi4vZmVhdHVyZS1lZGl0b3IvZmVhdHVyZS1lZGl0b3IuY29tcG9uZW50JztcclxuXHJcbi8qKlxyXG4gKiDwn5SRIGBndmUtZmVhdHVyZS1zZXQtZWRpdG9yYFxyXG4gKlxyXG4gKiBDb21wb25lbnQgZm9yIGVkaXRpbmcgYSBzZXQgb2YgZmVhdHVyZXMuIEl0IHNob3dzIGEgbGlzdCBvZiBmZWF0dXJlcyxcclxuICogYWxsb3dpbmcgdG8gZWRpdCBlYWNoIG9mIHRoZW0gb3IgYWRkaW5nIG5ldyBvbmVzLiBPcHRpb25hbGx5IHlvdSBjYW5cclxuICogc3BlY2lmeSBhIGxpc3Qgb2YgZmVhdHVyZSBuYW1lcyBhbmQgdmFsdWVzIHRvIHVzZSBpbiB0aGUgc2VsZWN0aW9uLlxyXG4gKiBVc2VkIGJ5IGJhc2UgdGV4dCBlZGl0b3IgYW5kIGNoYWluIG9wZXJhdGlvbiBlZGl0b3IgY29tcG9uZW50cy5cclxuICpcclxuICogLSDilrbvuI8gYGZlYXROYW1lc2AgKGBMYWJlbGVkSWRbXWApOiB0aGUgbGlzdCBvZiBmZWF0dXJlIG5hbWVzIHRvIGRpc3BsYXlcclxuICogaW4gdGhlIF9uYW1lXyBzZWxlY3Rpb24uIFRoaXMgaXMgdXNlZCB3aGVuIHlvdSBoYXZlIGEgY2xvc2VkIGxpc3Qgb2YgZmVhdHVyZXMuXHJcbiAqIC0g4pa277iPIGBmZWF0VmFsdWVzYCAoYEZlYXR1cmVNYXBgKTogdGhlIGZlYXR1cmUgdmFsdWVzIG1hcC4gV2hlbiBzcGVjaWZpZWRcclxuICogYW5kIHRoZSB1c2VyIHNlbGVjdHMgYSBmZWF0dXJlIG5hbWUgcHJlc2VudCBpbiB0aGUgbWFwIGtleXMsIHRoZSBjb3JyZXNwb25kaW5nXHJcbiAqIHZhbHVlcyB3aWxsIGJlIHVzZWQgdG8gcG9wdWxhdGUgdGhlIHZhbHVlIHNlbGVjdGlvbi5cclxuICogLSDilrbvuI8gYGZpbHRlclRocmVzaG9sZGAgKGBudW1iZXJgKTogdGhlIHRocmVzaG9sZCBhdCB3aGljaCB0aGUgZmVhdHVyZXMgZmlsdGVyXHJcbiAqIHNob3VsZCBiZWNvbWUgdmlzaWJsZS4gSWYgc2V0IHRvIDAsIHRoZSBmaWx0ZXIgaXMgYWx3YXlzIHZpc2libGU7IGlmIHNldCB0byAtMSxcclxuICogaXQgaXMgYWx3YXlzIGludmlzaWJsZTsgb3RoZXJ3aXNlLCBpdCBnZXRzIHZpc2libGUgd2hlbiB0aGUgbnVtYmVyIG9mIGZlYXR1cmVzXHJcbiAqIGlzIGdyZWF0ZXIgdGhhbiB0aGUgdGhyZXNob2xkLiBEZWZhdWx0IGlzIDUuXHJcbiAqIC0g4pa277iPIGBmZWF0dXJlc2AgKGBGZWF0dXJlW11gKTogdGhlIGZlYXR1cmVzIHRvIGVkaXQuXHJcbiAqIC0g4pa277iPIGBpc1ZhcmA6IHRydWUgaWYgdGhlIGZlYXR1cmUgaXMgYSB2YXJpYW50IG9wZXJhdGlvbiBmZWF0dXJlLCB3aGljaFxyXG4gKiBoYXMgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGxpa2UgbmVnYXRpb24sIGdsb2JhbCwgYW5kIHNob3J0LWxpdmVkLlxyXG4gKiAtIPCflKUgYGZlYXR1cmVzQ2hhbmdlYCAoYEZlYXR1cmVbXWApOiBlbWl0dGVkIHdoZW4gZmVhdHVyZXMgaGF2ZSBjaGFuZ2VkLlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdndmUtZmVhdHVyZS1zZXQtZWRpdG9yJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICBNYXRFeHBhbnNpb25Nb2R1bGUsXHJcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgTWF0SW5wdXRNb2R1bGUsXHJcbiAgICBNYXRTZWxlY3RNb2R1bGUsXHJcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxyXG4gICAgTmdUb29sc01vZHVsZSxcclxuICAgIEZlYXR1cmVFZGl0b3JDb21wb25lbnQsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vZmVhdHVyZS1zZXQtZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vZmVhdHVyZS1zZXQtZWRpdG9yLmNvbXBvbmVudC5jc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmVhdHVyZVNldEVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIF9zdWI/OiBTdWJzY3JpcHRpb247XHJcbiAgcHJpdmF0ZSBfZmVhdHVyZXM6IEZlYXR1cmVbXSB8IE9wZXJhdGlvbkZlYXR1cmVbXTtcclxuICBwcml2YXRlIF9lZGl0ZWRGZWF0dXJlSW5kZXg6IG51bWJlcjtcclxuXHJcbiAgcHVibGljIFBPTElDSUVTID0gWydNJywgJ1MnLCAnU0YnXTtcclxuXHJcbiAgLyoqXHJcbiAgICogVHJ1ZSBpZiB0aGUgZmVhdHVyZXMgYXJlIHZhcmlhYmxlIGZlYXR1cmVzLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGlzVmFyID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBsaXN0IG9mIGZlYXR1cmUgbmFtZXMgdG8gZGlzcGxheSBpbiB0aGUgbmFtZSBzZWxlY3Rpb24uXHJcbiAgICogVGhpcyBpcyB1c2VkIHdoZW4geW91IGhhdmUgYSBjbG9zZWQgbGlzdCBvZiBmZWF0dXJlcy5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBmZWF0TmFtZXM6IExhYmVsZWRJZFtdIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgZmVhdHVyZSB2YWx1ZXMgbWFwLiBXaGVuIHNwZWNpZmllZCBhbmQgdGhlIHVzZXIgc2VsZWN0cyBhIGZlYXR1cmVcclxuICAgKiBuYW1lIHByZXNlbnQgaW4gdGhlIG1hcCBrZXlzLCB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMgd2lsbCBiZSB1c2VkXHJcbiAgICogdG8gcG9wdWxhdGUgdGhlIHZhbHVlIHNlbGVjdGlvbi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBmZWF0VmFsdWVzOiBGZWF0dXJlTWFwIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgdGhyZXNob2xkIGF0IHdoaWNoIHRoZSBmZWF0dXJlcyBmaWx0ZXIgc2hvdWxkIGJlY29tZSB2aXNpYmxlLlxyXG4gICAqIElmIHNldCB0byAwLCB0aGUgZmlsdGVyIGlzIGFsd2F5cyB2aXNpYmxlOyBpZiBzZXQgdG8gLTEsIGl0IGlzIGFsd2F5c1xyXG4gICAqIGludmlzaWJsZTsgb3RoZXJ3aXNlLCBpdCBnZXRzIHZpc2libGUgd2hlbiB0aGUgbnVtYmVyIG9mIGZlYXR1cmVzXHJcbiAgICogaXMgZ3JlYXRlciB0aGFuIHRoZSB0aHJlc2hvbGQuIERlZmF1bHQgaXMgNS5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBmaWx0ZXJUaHJlc2hvbGQgPSA1O1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgZmVhdHVyZXMgdG8gZWRpdC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgZmVhdHVyZXMoKTogRmVhdHVyZVtdIHwgT3BlcmF0aW9uRmVhdHVyZVtdIHtcclxuICAgIHJldHVybiB0aGlzLl9mZWF0dXJlcztcclxuICB9XHJcbiAgcHVibGljIHNldCBmZWF0dXJlcyh2YWx1ZTogRmVhdHVyZVtdIHwgT3BlcmF0aW9uRmVhdHVyZVtdKSB7XHJcbiAgICBpZiAodGhpcy5fZmVhdHVyZXMgPT09IHZhbHVlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX2ZlYXR1cmVzID0gdmFsdWU7XHJcbiAgICB0aGlzLmFwcGx5RmVhdHVyZUZpbHRlcih0aGlzLmZpbHRlci52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbWl0dGVkIHdoZW4gdGhlIGZlYXR1cmVzIGNoYW5nZS5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgZmVhdHVyZXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEZlYXR1cmVbXSB8IE9wZXJhdGlvbkZlYXR1cmVbXT4oKTtcclxuXHJcbiAgcHVibGljIGVkaXRlZEZlYXR1cmU/OiBGZWF0dXJlIHwgT3BlcmF0aW9uRmVhdHVyZTtcclxuXHJcbiAgLy8gZmlsdGVyXHJcbiAgcHVibGljIGZpbHRlcjogRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD47XHJcbiAgcHVibGljIGZpbHRlcmVkRmVhdHVyZXM6IEZlYXR1cmVbXSB8IE9wZXJhdGlvbkZlYXR1cmVbXTtcclxuXHJcbiAgY29uc3RydWN0b3IoZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyKSB7XHJcbiAgICB0aGlzLl9mZWF0dXJlcyA9IFtdO1xyXG4gICAgdGhpcy5maWx0ZXJlZEZlYXR1cmVzID0gW107XHJcbiAgICB0aGlzLmZpbHRlciA9IGZvcm1CdWlsZGVyLmNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCk7XHJcbiAgICB0aGlzLl9lZGl0ZWRGZWF0dXJlSW5kZXggPSAtMTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlGZWF0dXJlRmlsdGVyKG5hbWU/OiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbHRlcmVkRmVhdHVyZXMgPSB0aGlzLmZlYXR1cmVzLmZpbHRlcigoZmVhdHVyZSkgPT4ge1xyXG4gICAgICByZXR1cm4gIW5hbWUgfHwgZmVhdHVyZS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobmFtZS50b0xvd2VyQ2FzZSgpKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3ViID0gdGhpcy5maWx0ZXIudmFsdWVDaGFuZ2VzXHJcbiAgICAgIC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIGRlYm91bmNlVGltZSgzMDApKVxyXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXBwbHlGZWF0dXJlRmlsdGVyKHZhbHVlKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWI/LnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWRkRmVhdHVyZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZWRpdGVkRmVhdHVyZSA9IHtcclxuICAgICAgbmFtZTogJycsXHJcbiAgICAgIHZhbHVlOiAnJyxcclxuICAgICAgc2V0UG9saWN5OiBGZWF0dXJlU2V0UG9saWN5Lm11bHRpcGxlLFxyXG4gICAgfTtcclxuICAgIHRoaXMuX2VkaXRlZEZlYXR1cmVJbmRleCA9IC0xO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGVkaXRGZWF0dXJlKGZlYXR1cmU6IEZlYXR1cmUgfCBPcGVyYXRpb25GZWF0dXJlKTogdm9pZCB7XHJcbiAgICB0aGlzLmVkaXRlZEZlYXR1cmUgPSBmZWF0dXJlO1xyXG4gICAgdGhpcy5fZWRpdGVkRmVhdHVyZUluZGV4ID0gdGhpcy5mZWF0dXJlcy5pbmRleE9mKGZlYXR1cmUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGRlbGV0ZUZlYXR1cmUoZmVhdHVyZTogRmVhdHVyZSB8IE9wZXJhdGlvbkZlYXR1cmUpOiB2b2lkIHtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5mZWF0dXJlcy5pbmRleE9mKGZlYXR1cmUpO1xyXG4gICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBmZWF0dXJlcyA9IFsuLi50aGlzLmZlYXR1cmVzXTtcclxuICAgIGZlYXR1cmVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB0aGlzLmZlYXR1cmVzID0gZmVhdHVyZXM7XHJcbiAgICB0aGlzLmZlYXR1cmVzQ2hhbmdlLmVtaXQodGhpcy5mZWF0dXJlcyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25GZWF0dXJlQ2hhbmdlKGZlYXR1cmU6IEZlYXR1cmUgfCBPcGVyYXRpb25GZWF0dXJlKTogdm9pZCB7XHJcbiAgICBjb25zdCBmZWF0dXJlcyA9IFsuLi50aGlzLmZlYXR1cmVzXTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gZmVhdHVyZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgaWYgKGZlYXR1cmVzW2ldLm5hbWUgPT09IGZlYXR1cmUubmFtZSkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGZlYXR1cmUuc2V0UG9saWN5ID09PSBGZWF0dXJlU2V0UG9saWN5LnNpbmdsZSB8fFxyXG4gICAgICAgICAgZmVhdHVyZXNbaV0uc2V0UG9saWN5ID09PSBGZWF0dXJlU2V0UG9saWN5LnNpbmdsZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgZmVhdHVyZXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9lZGl0ZWRGZWF0dXJlSW5kZXggPT09IC0xKSB7XHJcbiAgICAgIGZlYXR1cmVzLnB1c2goZmVhdHVyZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmZWF0dXJlcy5zcGxpY2UodGhpcy5fZWRpdGVkRmVhdHVyZUluZGV4LCAxLCBmZWF0dXJlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZlYXR1cmVzID0gZmVhdHVyZXM7XHJcbiAgICB0aGlzLmVkaXRlZEZlYXR1cmUgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLl9lZGl0ZWRGZWF0dXJlSW5kZXggPSAtMTtcclxuICAgIHRoaXMuZmVhdHVyZXNDaGFuZ2UuZW1pdCh0aGlzLmZlYXR1cmVzKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkZlYXR1cmVDYW5jZWwoKTogdm9pZCB7XHJcbiAgICB0aGlzLmVkaXRlZEZlYXR1cmUgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLl9lZGl0ZWRGZWF0dXJlSW5kZXggPSAtMTtcclxuICB9XHJcbn1cclxuIiwiPGRpdj5cclxuICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cclxuICAgIDwhLS0gZmlsdGVyIC0tPlxyXG4gICAgQGlmIChmaWx0ZXJUaHJlc2hvbGQgPT09IDAgfHwgZmVhdHVyZXMubGVuZ3RoID4gZmlsdGVyVGhyZXNob2xkKSB7XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cImZpbHRlclwiIFtmb3JtQ29udHJvbF09XCJmaWx0ZXJcIiAvPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgKGNsaWNrKT1cImZpbHRlci5yZXNldCgpXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiIWZpbHRlci52YWx1ZVwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInUmVzZXQgZmlsdGVyJ1wiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LWljb24gY29sb3I9XCJ3YXJuXCIgY2xhc3M9XCJtYXQtd2FyblwiPmNhbmNlbDwvbWF0LWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIH1cclxuXHJcbiAgICA8IS0tIGFkZCBmZWF0dXJlIGJ1dHRvbiAtLT5cclxuICAgIDxidXR0b25cclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgIGNsYXNzPVwibWF0LXByaW1hcnlcIlxyXG4gICAgICBtYXQtZmxhdC1idXR0b25cclxuICAgICAgbWF0VG9vbHRpcD1cIkFkZCBhIG5ldyBmZWF0dXJlXCJcclxuICAgICAgKGNsaWNrKT1cImFkZEZlYXR1cmUoKVwiXHJcbiAgICAgIFtjbGFzcy5pbi1yb3ctYnV0dG9uXT1cIlxyXG4gICAgICAgIGZpbHRlclRocmVzaG9sZCA9PT0gMCB8fCBmZWF0dXJlcy5sZW5ndGggPiBmaWx0ZXJUaHJlc2hvbGRcclxuICAgICAgXCJcclxuICAgID5cclxuICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XHJcbiAgICAgIGZlYXR1cmVcclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIGxpc3QgLS0+XHJcbiAgQGlmIChmZWF0dXJlcy5sZW5ndGgpIHtcclxuICA8dGFibGU+XHJcbiAgICA8dGhlYWQ+XHJcbiAgICAgIDx0cj5cclxuICAgICAgICA8dGg+PC90aD5cclxuICAgICAgICA8dGg+ZmVhdHVyZTwvdGg+XHJcbiAgICAgICAgPHRoPnZhbHVlPC90aD5cclxuICAgICAgICA8dGg+cG9saWN5PC90aD5cclxuICAgICAgICBAaWYgKGlzVmFyKSB7XHJcbiAgICAgICAgPHRoPm5lZ2F0ZWQ8L3RoPlxyXG4gICAgICAgIDx0aD5nbG9iYWw8L3RoPlxyXG4gICAgICAgIDx0aD5zaG9ydC1saXZlZDwvdGg+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L3RyPlxyXG4gICAgPC90aGVhZD5cclxuICAgIDx0Ym9keT5cclxuICAgICAgQGZvciAoZmVhdHVyZSBvZiBmaWx0ZXJlZEZlYXR1cmVzOyB0cmFjayBmZWF0dXJlKSB7XHJcbiAgICAgIDx0cj5cclxuICAgICAgICA8dGQgY2xhc3M9XCJmaXQtd2lkdGhcIj5cclxuICAgICAgICAgIDwhLS0gZWRpdCAtLT5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiRWRpdCB0aGlzIGZlYXR1cmVcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiZWRpdEZlYXR1cmUoZmVhdHVyZSlcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXQtcHJpbWFyeVwiPmVkaXQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8IS0tIGRlbGV0ZSAtLT5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIGNvbG9yPVwid2FyblwiXHJcbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiRGVsZXRlIHRoaXMgZmVhdHVyZVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVGZWF0dXJlKGZlYXR1cmUpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0LXdhcm5cIj5kZWxldGU8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgICA8dGQ+XHJcbiAgICAgICAgICBAaWYgKGZlYXROYW1lcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICA8c3Bhbj57e1xyXG4gICAgICAgICAgICBmZWF0dXJlLm5hbWUgfCBmbGF0TG9va3VwIDogZmVhdE5hbWVzIDogXCJpZFwiIDogXCJsYWJlbFwiXHJcbiAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgPHNwYW4+e3sgZmVhdHVyZS5uYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPHRkPlxyXG4gICAgICAgICAgQGlmIChmZWF0VmFsdWVzKSB7XHJcbiAgICAgICAgICA8c3Bhbj57e1xyXG4gICAgICAgICAgICBmZWF0dXJlLnZhbHVlIHwgZmxhdExvb2t1cCA6IGZlYXRWYWx1ZXNbZmVhdHVyZS5uYW1lXVxyXG4gICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgIDxzcGFuPnt7IGZlYXR1cmUudmFsdWUgfX08L3NwYW4+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgICA8dGQ+XHJcbiAgICAgICAgICA8c3Bhbj57eyBQT0xJQ0lFU1tmZWF0dXJlLnNldFBvbGljeV0gfX08L3NwYW4+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgICBAaWYgKGlzVmFyKSB7XHJcbiAgICAgICAgPHRkPlxyXG4gICAgICAgICAgPHNwYW4+e3sgJGFueShmZWF0dXJlKS5pc05lZ2F0ZWQgPyBcInllc1wiIDogXCJub1wiIH19PC9zcGFuPlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPHRkPlxyXG4gICAgICAgICAgPHNwYW4+e3sgJGFueShmZWF0dXJlKS5pc0dsb2JhbCA/IFwieWVzXCIgOiBcIm5vXCIgfX08L3NwYW4+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgICA8dGQ+XHJcbiAgICAgICAgICA8c3Bhbj57eyAkYW55KGZlYXR1cmUpLmlzU2hvcnRMaXZlZCA/IFwieWVzXCIgOiBcIm5vXCIgfX08L3NwYW4+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgICB9XHJcbiAgICAgIDwvdHI+XHJcbiAgICAgIH1cclxuICAgIDwvdGJvZHk+XHJcbiAgPC90YWJsZT5cclxuICB9XHJcblxyXG4gIDwhLS0gZWRpdG9yIC0tPlxyXG4gIDxtYXQtZXhwYW5zaW9uLXBhbmVsIFtkaXNhYmxlZF09XCIhZWRpdGVkRmVhdHVyZVwiIFtleHBhbmRlZF09XCJlZGl0ZWRGZWF0dXJlXCI+XHJcbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgPHNwYW4+e3sgZWRpdGVkRmVhdHVyZT8ubmFtZSB8fCBcImZlYXR1cmVcIiB9fTwvc3Bhbj5cclxuICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgPGd2ZS1mZWF0dXJlLWVkaXRvclxyXG4gICAgICBbaXNWYXJdPVwiaXNWYXJcIlxyXG4gICAgICBbZmVhdE5hbWVzXT1cImZlYXROYW1lc1wiXHJcbiAgICAgIFtmZWF0VmFsdWVzXT1cImZlYXRWYWx1ZXNcIlxyXG4gICAgICBbZmVhdHVyZV09XCJlZGl0ZWRGZWF0dXJlXCJcclxuICAgICAgKGZlYXR1cmVDaGFuZ2UpPVwib25GZWF0dXJlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAoZmVhdHVyZUNhbmNlbCk9XCJvbkZlYXR1cmVDYW5jZWwoKVwiXHJcbiAgICAvPlxyXG4gIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuPC9kaXY+XHJcbiJdfQ==