@c8y/ngx-components 1021.73.3 → 1021.73.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 (34) hide show
  1. package/branding/shared/lazy/branding/branding.component.d.ts.map +1 -1
  2. package/core/beta-feature/beta-preview.service.d.ts +1 -1
  3. package/core/beta-feature/beta-preview.service.d.ts.map +1 -1
  4. package/esm2022/branding/shared/lazy/branding/branding.component.mjs +4 -5
  5. package/esm2022/core/beta-feature/beta-preview.service.mjs +10 -6
  6. package/esm2022/datapoint-explorer/view/datapoint-explorer.component.mjs +3 -3
  7. package/esm2022/datapoint-selector/datapoint-selector.component.mjs +3 -3
  8. package/esm2022/ecosystem/packages/package-versions/packages-versions.component.mjs +3 -3
  9. package/esm2022/widgets/implementations/datapoints-graph/datapoints-graph-config/datapoints-graph-widget-config.component.mjs +3 -3
  10. package/esm2022/widgets/implementations/datapoints-graph/datapoints-graph-view/datapoints-graph-widget-view.component.mjs +3 -3
  11. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +3 -4
  12. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs.map +1 -1
  13. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs +2 -2
  14. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -1
  15. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +2 -2
  16. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
  17. package/fesm2022/c8y-ngx-components-ecosystem.mjs +2 -2
  18. package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
  19. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +4 -4
  20. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs.map +1 -1
  21. package/fesm2022/c8y-ngx-components.mjs +9 -5
  22. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  23. package/locales/de.po +314 -41
  24. package/locales/es.po +315 -42
  25. package/locales/fr.po +315 -42
  26. package/locales/ja_JP.po +308 -47
  27. package/locales/ko.po +314 -42
  28. package/locales/locales.pot +5 -27
  29. package/locales/nl.po +312 -40
  30. package/locales/pl.po +315 -42
  31. package/locales/pt_BR.po +312 -39
  32. package/locales/zh_CN.po +312 -40
  33. package/locales/zh_TW.po +313 -42
  34. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"branding.component.d.ts","sourceRoot":"","sources":["../../../../../branding/shared/lazy/branding/branding.component.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAmB,UAAU,EAAkB,MAAM,MAAM,CAAC;AAEnE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EACL,aAAa,EACb,YAAY,EACZ,eAAe,EAEf,MAAM,EACN,cAAc,EACd,YAAY,EACZ,UAAU,EAEV,UAAU,EAIX,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,uBAAuB,EAAE,MAAM,6DAA6D,CAAC;AAEtG,OAAO,EAAE,0BAA0B,EAAE,MAAM,wDAAwD,CAAC;;AAIpG,qBAMa,iBAAiB;IAiJ1B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,uBAAuB;IAC/B,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,0BAA0B;IAClC,OAAO,CAAC,gBAAgB;IA7J1B,UAAU,EAAE,UAAU,CAGpB;IACF,cAAc,EAAE,cAAc,CAM5B;IACF,cAAc,EAAE,aAAa,EAAE,CA+F7B;IACF,OAAO,EAAE,MAAM,EAAE,CA4Bf;IACF,qBAAqB,SAAoB;IACzC,0BAA0B,EAAE,UAAU,CAAC;QACrC,aAAa,EAAE,YAAY,CAAC;QAC5B,QAAQ,EAAE,YAAY,EAAE,CAAC;KAC1B,CAAC,CAAC;IAEH,OAAO,CAAC,aAAa,CAAwC;gBAEnD,SAAS,EAAE,oBAAoB,EAC/B,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE,eAAe,EACzB,kBAAkB,EAAE,kBAAkB,EACtC,GAAG,EAAE,UAAU,EACf,YAAY,EAAE,mBAAmB,EACjC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,cAAc,EACrB,YAAY,EAAE,YAAY,EAC1B,sBAAsB,EAAE,sBAAsB,EAC9C,uBAAuB,EAAE,uBAAuB,EAChD,KAAK,EAAE,YAAY,EACnB,0BAA0B,EAAE,0BAA0B,EACtD,gBAAgB,EAAE,uBAAuB;IAc7C,kBAAkB,CAAC,aAAa,CAAC,EAAE,YAAY;IA6B/C,cAAc,CAAC,OAAO,EAAE,YAAY;IAiB1C,OAAO;IAID,aAAa;IA4Bb,gBAAgB,CAAC,OAAO,EAAE,YAAY;IAsBtC,YAAY,CAAC,YAAY,EAAE,MAAM;IAIjC,uBAAuB;IA4BvB,WAAW,CAAC,OAAO,EAAE,YAAY;IAiCjC,cAAc;YAWN,2BAA2B;yCA5V9B,iBAAiB;2CAAjB,iBAAiB;CAgX7B"}
1
+ {"version":3,"file":"branding.component.d.ts","sourceRoot":"","sources":["../../../../../branding/shared/lazy/branding/branding.component.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAmB,UAAU,EAAkB,MAAM,MAAM,CAAC;AAEnE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EACL,aAAa,EACb,YAAY,EACZ,eAAe,EAEf,MAAM,EACN,cAAc,EACd,YAAY,EACZ,UAAU,EAEV,UAAU,EAIX,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,uBAAuB,EAAE,MAAM,6DAA6D,CAAC;AAEtG,OAAO,EAAE,0BAA0B,EAAE,MAAM,wDAAwD,CAAC;;AAIpG,qBAMa,iBAAiB;IAiJ1B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,uBAAuB;IAC/B,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,0BAA0B;IAClC,OAAO,CAAC,gBAAgB;IA7J1B,UAAU,EAAE,UAAU,CAGpB;IACF,cAAc,EAAE,cAAc,CAM5B;IACF,cAAc,EAAE,aAAa,EAAE,CA+F7B;IACF,OAAO,EAAE,MAAM,EAAE,CA4Bf;IACF,qBAAqB,SAAoB;IACzC,0BAA0B,EAAE,UAAU,CAAC;QACrC,aAAa,EAAE,YAAY,CAAC;QAC5B,QAAQ,EAAE,YAAY,EAAE,CAAC;KAC1B,CAAC,CAAC;IAEH,OAAO,CAAC,aAAa,CAAwC;gBAEnD,SAAS,EAAE,oBAAoB,EAC/B,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE,eAAe,EACzB,kBAAkB,EAAE,kBAAkB,EACtC,GAAG,EAAE,UAAU,EACf,YAAY,EAAE,mBAAmB,EACjC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,cAAc,EACrB,YAAY,EAAE,YAAY,EAC1B,sBAAsB,EAAE,sBAAsB,EAC9C,uBAAuB,EAAE,uBAAuB,EAChD,KAAK,EAAE,YAAY,EACnB,0BAA0B,EAAE,0BAA0B,EACtD,gBAAgB,EAAE,uBAAuB;IAc7C,kBAAkB,CAAC,aAAa,CAAC,EAAE,YAAY;IA6B/C,cAAc,CAAC,OAAO,EAAE,YAAY;IAiB1C,OAAO;IAID,aAAa;IA4Bb,gBAAgB,CAAC,OAAO,EAAE,YAAY;IAsBtC,YAAY,CAAC,YAAY,EAAE,MAAM;IAIjC,uBAAuB;IA2BvB,WAAW,CAAC,OAAO,EAAE,YAAY;IAiCjC,cAAc;YAWN,2BAA2B;yCA3V9B,iBAAiB;2CAAjB,iBAAiB;CA+W7B"}
@@ -31,7 +31,7 @@ export declare class PreviewService extends ExtensionPointForPlugins<BetaFeature
31
31
  */
32
32
  setFeatureActiveState(key: string, toggleValue: boolean): Promise<void>;
33
33
  /**
34
- * Marks all features as seen by the user and updates the local storage.
34
+ * Marks all unseen features as seen by the user and updates the local storage.
35
35
  * This assumes all features are provided via the `items$` observable.
36
36
  */
37
37
  markAllFeaturesAsSeen(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"beta-preview.service.d.ts","sourceRoot":"","sources":["../../../core/beta-feature/beta-preview.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,cAAc,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAiC,UAAU,EAAM,MAAM,MAAM,CAAC;AAEtF,OAAO,EACL,kBAAkB,EAClB,eAAe,EAGf,wBAAwB,EAIzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;;AAK3E,eAAO,MAAM,YAAY,+BAAoD,CAAC;AAE9E,wBAAgB,WAAW,CACzB,OAAO,EAAE,eAAe,CAAC,WAAW,CAAC,EACrC,OAAO,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,4HAGtC;AAED,qBACa,cAAe,SAAQ,wBAAwB,CAAC,WAAW,CAAC;IACvE,MAAM,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC,CAA+B;IAChE,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,CAAuC;IACxE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA4B;IAC9D,OAAO,CAAC,aAAa,CAAyD;IAC9E,kBAAkB,sBAGhB;IACF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA0B;IACzD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA+B;IACnE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA0B;IAEzD,OAAO,CAAC,yBAAyB,CAA0B;gBAE/C,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,qBAAqB;IAIxE,IAAI,KAAK,IAAI,GAAG,CAAC,WAAW,CAAC,CAE5B;IAED;;;;OAIG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC;IAuB3C;;;;OAIG;IACG,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA+B7E;;;OAGG;IACG,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5C;;OAEG;IACH,qBAAqB,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;IAgBlD;;;OAGG;IACH,OAAO,CAAC,eAAe;IAKvB,SAAS,CAAC,oBAAoB,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;yCA/HhD,cAAc;6CAAd,cAAc;CA0I1B"}
1
+ {"version":3,"file":"beta-preview.service.d.ts","sourceRoot":"","sources":["../../../core/beta-feature/beta-preview.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,cAAc,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAiC,UAAU,EAAM,MAAM,MAAM,CAAC;AAEtF,OAAO,EACL,kBAAkB,EAClB,eAAe,EAGf,wBAAwB,EAIzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;;AAK3E,eAAO,MAAM,YAAY,+BAAoD,CAAC;AAE9E,wBAAgB,WAAW,CACzB,OAAO,EAAE,eAAe,CAAC,WAAW,CAAC,EACrC,OAAO,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,4HAGtC;AAED,qBACa,cAAe,SAAQ,wBAAwB,CAAC,WAAW,CAAC;IACvE,MAAM,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC,CAA+B;IAChE,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,CAAuC;IACxE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA4B;IAC9D,OAAO,CAAC,aAAa,CAAyD;IAC9E,kBAAkB,sBAGhB;IACF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA0B;IACzD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA+B;IACnE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA0B;IAEzD,OAAO,CAAC,yBAAyB,CAA0B;gBAE/C,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,qBAAqB;IAIxE,IAAI,KAAK,IAAI,GAAG,CAAC,WAAW,CAAC,CAE5B;IAED;;;;OAIG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC;IAuB3C;;;;OAIG;IACG,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA+B7E;;;OAGG;IACG,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAc5C;;OAEG;IACH,qBAAqB,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;IAgBlD;;;OAGG;IACH,OAAO,CAAC,eAAe;IAKvB,SAAS,CAAC,oBAAoB,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;yCArIhD,cAAc;6CAAd,cAAc;CAgJ1B"}
@@ -260,8 +260,7 @@ export class BrandingComponent {
260
260
  After customization, you can set your new variant as global or apply it to specific apps.
261
261
  </p>
262
262
  <p>
263
- To revert changes, simply set the default branding as global or use the "Delete all
264
- brandings" button at any time.
263
+ To revert changes, simply set the default branding as global or use the "Delete all variants" button at any time.
265
264
  </p>`));
266
265
  if (result === false || (typeof result === 'object' && !result.confirmed)) {
267
266
  return;
@@ -318,10 +317,10 @@ export class BrandingComponent {
318
317
  }
319
318
  }
320
319
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BrandingComponent, deps: [{ token: i1.StoreBrandingService }, { token: i2.ActivatedRoute }, { token: i3.AppStateService }, { token: i4.ApplicationService }, { token: i3.ZipService }, { token: i5.StaticAssetsService }, { token: i2.Router }, { token: i6.BsModalService }, { token: i3.ModalService }, { token: i1.BrandingVersionService }, { token: i7.AddBrandingModalService }, { token: i3.AlertService }, { token: i8.BrandingImportModalService }, { token: i1.BrandingTrackingService }], target: i0.ɵɵFactoryTarget.Component }); }
321
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: BrandingComponent, isStandalone: true, selector: "c8y-branding", ngImport: i0, template: "<c8y-title translate>Branding</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'palette'\"\n [label]=\"'Branding' | translate\"\n [path]=\"'/branding-editor'\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<ng-container *ngIf=\"availableBrandingVariants$ | async as brandingVariant; else loading\">\n <c8y-action-bar-item\n *ngIf=\"brandingVariant.publicOptions\"\n [placement]=\"'right'\"\n [priority]=\"30\"\n >\n <button\n class=\"btn btn-link\"\n (click)=\"addNewVersion()\"\n data-cy=\"branding-add-branding-variant\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n <span translate>Add variant</span>\n </button>\n </c8y-action-bar-item>\n <c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"20\"\n >\n <button\n class=\"btn btn-link\"\n data-cy=\"branding-import-branding\"\n (click)=\"importBranding()\"\n >\n <i [c8yIcon]=\"'data-import'\"></i>\n <span translate>Import variant</span>\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item\n *ngIf=\"brandingVariant.publicOptions\"\n [placement]=\"'right'\"\n [priority]=\"10\"\n >\n <button\n class=\"btn btn-link\"\n (click)=\"deleteAllBrandings(brandingVariant.publicOptions)\"\n data-cy=\"branding-remove-all-brandings\"\n >\n <i [c8yIcon]=\"'trash-o'\"></i>\n <span translate>Delete all variants</span>\n </button>\n </c8y-action-bar-item>\n\n <div class=\"content-fullpage d-flex d-col border-top\">\n <c8y-data-grid\n [title]=\"'Branding variants' | translate\"\n [columns]=\"columns\"\n [actionControls]=\"actionControls\"\n [pagination]=\"pagination\"\n [displayOptions]=\"displayOptions\"\n (onReload)=\"refresh()\"\n [rows]=\"brandingVariant.variants\"\n >\n <c8y-ui-empty-state\n [icon]=\"'palette'\"\n [title]=\"'No branding variants' | translate\"\n [subtitle]=\"\n 'Personalize your experience with a theme-able interface. Create a unique look that aligns\n with your brand identity.'\n | translate\n \"\n *ngIf=\"!brandingVariant.publicOptions\"\n [horizontal]=\"false\"\n >\n <button\n class=\"btn btn-default\"\n data-cy=\"branding-get-started-using-branding\"\n (click)=\"getStartedUsingBranding()\"\n translate\n >\n Add branding variant\n </button>\n </c8y-ui-empty-state>\n </c8y-data-grid>\n </div>\n</ng-container>\n\n<ng-template #loading>\n <c8y-loading></c8y-loading>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "component", type: i3.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "component", type: i3.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i3.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "component", type: i3.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i9.AsyncPipe, name: "async" }, { kind: "component", type: i3.LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "component", type: i3.DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "columns", "rows", "pagination", "infiniteScroll", "serverSideDataCallback", "selectable", "singleSelection", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning", "activeClassName", "expandableRows", "hideReload"], outputs: ["rowMouseOver", "rowMouseLeave", "rowClick", "onConfigChange", "onBeforeFilter", "onBeforeSearch", "onFilter", "itemsSelect", "onReload", "onAddCustomColumn", "onRemoveCustomColumn", "onColumnFilterReset", "onSort", "onPageSizeChange", "onColumnReordered", "onColumnVisibilityChange"] }, { kind: "component", type: i3.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "ngmodule", type: DataGridModule }] }); }
320
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: BrandingComponent, isStandalone: true, selector: "c8y-branding", ngImport: i0, template: "<c8y-title translate>Branding</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'palette'\"\n [label]=\"'Branding' | translate\"\n [path]=\"'/branding-editor'\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<ng-container *ngIf=\"availableBrandingVariants$ | async as brandingVariant; else loading\">\n <c8y-action-bar-item\n *ngIf=\"brandingVariant.publicOptions\"\n [placement]=\"'right'\"\n [priority]=\"30\"\n >\n <button\n class=\"btn btn-link\"\n (click)=\"addNewVersion()\"\n data-cy=\"branding-add-branding-variant\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n <span translate>Add variant</span>\n </button>\n </c8y-action-bar-item>\n <c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"20\"\n >\n <button\n class=\"btn btn-link\"\n data-cy=\"branding-import-branding\"\n (click)=\"importBranding()\"\n >\n <i [c8yIcon]=\"'data-import'\"></i>\n <span translate>Import variant</span>\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item\n *ngIf=\"brandingVariant.publicOptions\"\n [placement]=\"'right'\"\n [priority]=\"10\"\n >\n <button\n class=\"btn btn-link\"\n (click)=\"deleteAllBrandings(brandingVariant.publicOptions)\"\n data-cy=\"branding-remove-all-brandings\"\n >\n <i [c8yIcon]=\"'trash-o'\"></i>\n <span translate>Delete all variants</span>\n </button>\n </c8y-action-bar-item>\n\n <div class=\"content-fullpage d-flex d-col border-top\">\n <c8y-data-grid\n [title]=\"'Branding variants' | translate\"\n [columns]=\"columns\"\n [actionControls]=\"actionControls\"\n [pagination]=\"pagination\"\n [displayOptions]=\"displayOptions\"\n (onReload)=\"refresh()\"\n [rows]=\"brandingVariant.variants\"\n >\n <c8y-ui-empty-state\n [icon]=\"'palette'\"\n [title]=\"'No branding variants' | translate\"\n [subtitle]=\"\n 'Personalize your experience with a theme-able interface. Create a unique look that aligns with your brand identity.'\n | translate\n \"\n *ngIf=\"!brandingVariant.publicOptions\"\n [horizontal]=\"false\"\n >\n <button\n class=\"btn btn-default\"\n data-cy=\"branding-get-started-using-branding\"\n (click)=\"getStartedUsingBranding()\"\n translate\n >\n Add branding variant\n </button>\n </c8y-ui-empty-state>\n </c8y-data-grid>\n </div>\n</ng-container>\n\n<ng-template #loading>\n <c8y-loading></c8y-loading>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "component", type: i3.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "component", type: i3.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i3.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "component", type: i3.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i9.AsyncPipe, name: "async" }, { kind: "component", type: i3.LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "component", type: i3.DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "columns", "rows", "pagination", "infiniteScroll", "serverSideDataCallback", "selectable", "singleSelection", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning", "activeClassName", "expandableRows", "hideReload"], outputs: ["rowMouseOver", "rowMouseLeave", "rowClick", "onConfigChange", "onBeforeFilter", "onBeforeSearch", "onFilter", "itemsSelect", "onReload", "onAddCustomColumn", "onRemoveCustomColumn", "onColumnFilterReset", "onSort", "onPageSizeChange", "onColumnReordered", "onColumnVisibilityChange"] }, { kind: "component", type: i3.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "ngmodule", type: DataGridModule }] }); }
322
321
  }
323
322
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BrandingComponent, decorators: [{
324
323
  type: Component,
325
- args: [{ selector: 'c8y-branding', standalone: true, imports: [CoreModule, DataGridModule], template: "<c8y-title translate>Branding</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'palette'\"\n [label]=\"'Branding' | translate\"\n [path]=\"'/branding-editor'\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<ng-container *ngIf=\"availableBrandingVariants$ | async as brandingVariant; else loading\">\n <c8y-action-bar-item\n *ngIf=\"brandingVariant.publicOptions\"\n [placement]=\"'right'\"\n [priority]=\"30\"\n >\n <button\n class=\"btn btn-link\"\n (click)=\"addNewVersion()\"\n data-cy=\"branding-add-branding-variant\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n <span translate>Add variant</span>\n </button>\n </c8y-action-bar-item>\n <c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"20\"\n >\n <button\n class=\"btn btn-link\"\n data-cy=\"branding-import-branding\"\n (click)=\"importBranding()\"\n >\n <i [c8yIcon]=\"'data-import'\"></i>\n <span translate>Import variant</span>\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item\n *ngIf=\"brandingVariant.publicOptions\"\n [placement]=\"'right'\"\n [priority]=\"10\"\n >\n <button\n class=\"btn btn-link\"\n (click)=\"deleteAllBrandings(brandingVariant.publicOptions)\"\n data-cy=\"branding-remove-all-brandings\"\n >\n <i [c8yIcon]=\"'trash-o'\"></i>\n <span translate>Delete all variants</span>\n </button>\n </c8y-action-bar-item>\n\n <div class=\"content-fullpage d-flex d-col border-top\">\n <c8y-data-grid\n [title]=\"'Branding variants' | translate\"\n [columns]=\"columns\"\n [actionControls]=\"actionControls\"\n [pagination]=\"pagination\"\n [displayOptions]=\"displayOptions\"\n (onReload)=\"refresh()\"\n [rows]=\"brandingVariant.variants\"\n >\n <c8y-ui-empty-state\n [icon]=\"'palette'\"\n [title]=\"'No branding variants' | translate\"\n [subtitle]=\"\n 'Personalize your experience with a theme-able interface. Create a unique look that aligns\n with your brand identity.'\n | translate\n \"\n *ngIf=\"!brandingVariant.publicOptions\"\n [horizontal]=\"false\"\n >\n <button\n class=\"btn btn-default\"\n data-cy=\"branding-get-started-using-branding\"\n (click)=\"getStartedUsingBranding()\"\n translate\n >\n Add branding variant\n </button>\n </c8y-ui-empty-state>\n </c8y-data-grid>\n </div>\n</ng-container>\n\n<ng-template #loading>\n <c8y-loading></c8y-loading>\n</ng-template>\n" }]
324
+ args: [{ selector: 'c8y-branding', standalone: true, imports: [CoreModule, DataGridModule], template: "<c8y-title translate>Branding</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'palette'\"\n [label]=\"'Branding' | translate\"\n [path]=\"'/branding-editor'\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<ng-container *ngIf=\"availableBrandingVariants$ | async as brandingVariant; else loading\">\n <c8y-action-bar-item\n *ngIf=\"brandingVariant.publicOptions\"\n [placement]=\"'right'\"\n [priority]=\"30\"\n >\n <button\n class=\"btn btn-link\"\n (click)=\"addNewVersion()\"\n data-cy=\"branding-add-branding-variant\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n <span translate>Add variant</span>\n </button>\n </c8y-action-bar-item>\n <c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"20\"\n >\n <button\n class=\"btn btn-link\"\n data-cy=\"branding-import-branding\"\n (click)=\"importBranding()\"\n >\n <i [c8yIcon]=\"'data-import'\"></i>\n <span translate>Import variant</span>\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item\n *ngIf=\"brandingVariant.publicOptions\"\n [placement]=\"'right'\"\n [priority]=\"10\"\n >\n <button\n class=\"btn btn-link\"\n (click)=\"deleteAllBrandings(brandingVariant.publicOptions)\"\n data-cy=\"branding-remove-all-brandings\"\n >\n <i [c8yIcon]=\"'trash-o'\"></i>\n <span translate>Delete all variants</span>\n </button>\n </c8y-action-bar-item>\n\n <div class=\"content-fullpage d-flex d-col border-top\">\n <c8y-data-grid\n [title]=\"'Branding variants' | translate\"\n [columns]=\"columns\"\n [actionControls]=\"actionControls\"\n [pagination]=\"pagination\"\n [displayOptions]=\"displayOptions\"\n (onReload)=\"refresh()\"\n [rows]=\"brandingVariant.variants\"\n >\n <c8y-ui-empty-state\n [icon]=\"'palette'\"\n [title]=\"'No branding variants' | translate\"\n [subtitle]=\"\n 'Personalize your experience with a theme-able interface. Create a unique look that aligns with your brand identity.'\n | translate\n \"\n *ngIf=\"!brandingVariant.publicOptions\"\n [horizontal]=\"false\"\n >\n <button\n class=\"btn btn-default\"\n data-cy=\"branding-get-started-using-branding\"\n (click)=\"getStartedUsingBranding()\"\n translate\n >\n Add branding variant\n </button>\n </c8y-ui-empty-state>\n </c8y-data-grid>\n </div>\n</ng-container>\n\n<ng-template #loading>\n <c8y-loading></c8y-loading>\n</ng-template>\n" }]
326
325
  }], ctorParameters: () => [{ type: i1.StoreBrandingService }, { type: i2.ActivatedRoute }, { type: i3.AppStateService }, { type: i4.ApplicationService }, { type: i3.ZipService }, { type: i5.StaticAssetsService }, { type: i2.Router }, { type: i6.BsModalService }, { type: i3.ModalService }, { type: i1.BrandingVersionService }, { type: i7.AddBrandingModalService }, { type: i3.AlertService }, { type: i8.BrandingImportModalService }, { type: i1.BrandingTrackingService }] });
327
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhbmRpbmcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vYnJhbmRpbmcvc2hhcmVkL2xhenkvYnJhbmRpbmcvYnJhbmRpbmcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vYnJhbmRpbmcvc2hhcmVkL2xhenkvYnJhbmRpbmcvYnJhbmRpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBRUwsb0JBQW9CLEVBQ3BCLHNCQUFzQixFQUN0Qix1QkFBdUIsRUFDeEIsTUFBTSwwQ0FBMEMsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZUFBZSxFQUFjLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFFTCxZQUFZLEVBQ1osZUFBZSxFQUNmLGlCQUFpQixFQUdqQixZQUFZLEVBRVosTUFBTSxFQUNOLFVBQVUsRUFDVixPQUFPLEVBQ1AsVUFBVSxFQUNWLGNBQWMsRUFDZixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxrQkFBa0IsRUFBZ0IsTUFBTSxhQUFhLENBQUM7QUFDL0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sc0VBQXNFLENBQUM7QUFDeEgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkRB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Y2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEJyYW5kVmVyc2lvbixcbiAgU3RvcmVCcmFuZGluZ1NlcnZpY2UsXG4gIEJyYW5kaW5nVmVyc2lvblNlcnZpY2UsXG4gIEJyYW5kaW5nVHJhY2tpbmdTZXJ2aWNlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYnJhbmRpbmcvc2hhcmVkL2RhdGEnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzaGFyZVJlcGxheSwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBBY3Rpb25Db250cm9sLFxuICBBbGVydFNlcnZpY2UsXG4gIEFwcFN0YXRlU2VydmljZSxcbiAgQnVpbHRJbkFjdGlvblR5cGUsXG4gIENvbHVtbixcbiAgRGlzcGxheU9wdGlvbnMsXG4gIE1vZGFsU2VydmljZSxcbiAgUGFnaW5hdGlvbixcbiAgU3RhdHVzLFxuICBaaXBTZXJ2aWNlLFxuICBnZXR0ZXh0LFxuICBDb3JlTW9kdWxlLFxuICBEYXRhR3JpZE1vZHVsZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uU2VydmljZSwgSUFwcGxpY2F0aW9uIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlcic7XG5pbXBvcnQgeyBTdGF0aWNBc3NldHNTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9zdGF0aWMtYXNzZXRzL2RhdGEnO1xuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IEFwcGx5QnJhbmRpbmdUb0FwcE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vYXBwbHktYnJhbmRpbmctdG8tYXBwLW1vZGFsL2FwcGx5LWJyYW5kaW5nLXRvLWFwcC1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWRkQnJhbmRpbmdNb2RhbFNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2JyYW5kaW5nL3NoYXJlZC9sYXp5L2FkZC1icmFuZGluZy1tb2RhbCc7XG5pbXBvcnQgeyBCcmFuZGluZ1RhZ3NDZWxsUmVuZGVyZXJDb21wb25lbnQgfSBmcm9tICcuLi9icmFuZGluZy10YWdzLWNlbGwtcmVuZGVyZXIvYnJhbmRpbmctdGFncy1jZWxsLXJlbmRlcmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCcmFuZGluZ0ltcG9ydE1vZGFsU2VydmljZSB9IGZyb20gJy4uL2JyYW5kaW5nLWltcG9ydC1tb2RhbC9icmFuZGluZy1pbXBvcnQtbW9kYWwuc2VydmljZSc7XG5pbXBvcnQgeyBCcmFuZGluZ05hbWVDZWxsUmVuZGVyZXJDb21wb25lbnQgfSBmcm9tICcuLi9icmFuZGluZy1uYW1lLWNlbGwtcmVuZGVyZXIvYnJhbmRpbmctbmFtZS1jZWxsLXJlbmRlcmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCcmFuZGluZ1RhZ3NIZWFkZXJDZWxsUmVuZGVyZXJDb21wb25lbnQgfSBmcm9tICcuLi9icmFuZGluZy10YWdzLWhlYWRlci1jZWxsLXJlbmRlcmVyL2JyYW5kaW5nLXRhZ3MtaGVhZGVyLWNlbGwtcmVuZGVyZXIuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWJyYW5kaW5nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2JyYW5kaW5nLmNvbXBvbmVudC5odG1sJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvcmVNb2R1bGUsIERhdGFHcmlkTW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBCcmFuZGluZ0NvbXBvbmVudCB7XG4gIHBhZ2luYXRpb246IFBhZ2luYXRpb24gPSB7XG4gICAgcGFnZVNpemU6IDEwLFxuICAgIGN1cnJlbnRQYWdlOiAxXG4gIH07XG4gIGRpc3BsYXlPcHRpb25zOiBEaXNwbGF5T3B0aW9ucyA9IHtcbiAgICBib3JkZXJlZDogZmFsc2UsXG4gICAgc3RyaXBlZDogdHJ1ZSxcbiAgICBmaWx0ZXI6IHRydWUsXG4gICAgZ3JpZEhlYWRlcjogdHJ1ZSxcbiAgICBob3ZlcjogdHJ1ZVxuICB9O1xuICBhY3Rpb25Db250cm9sczogQWN0aW9uQ29udHJvbFtdID0gW1xuICAgIHtcbiAgICAgIHR5cGU6IEJ1aWx0SW5BY3Rpb25UeXBlLkVkaXQsXG4gICAgICBjYWxsYmFjazogKGVudHJ5OiBCcmFuZFZlcnNpb24sIF9yZWxvYWQpID0+IHtcbiAgICAgICAgdGhpcy5lZGl0QnJhbmRpbmcoZW50cnkubmFtZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiBCdWlsdEluQWN0aW9uVHlwZS5FeHBvcnQsXG4gICAgICBjYWxsYmFjazogYXN5bmMgKGVudHJ5OiBCcmFuZFZlcnNpb24sIF9yZWxvYWQpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5leHBvcnRCcmFuZGluZyhlbnRyeSk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiAncHJldmlldycsXG4gICAgICBpY29uOiAnZXh0ZXJuYWwtbGluaycsXG4gICAgICB0ZXh0OiBnZXR0ZXh0KCdPcGVuIHByZXZpZXcnKSxcbiAgICAgIGNhbGxiYWNrOiBhc3luYyAoZW50cnk6IEJyYW5kVmVyc2lvbiwgX3JlbG9hZCkgPT4ge1xuICAgICAgICB0aGlzLmJyYW5kaW5ncy5vcGVuUHJldmlld0ZvckJyYW5kaW5nKGVudHJ5Lm5hbWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogJ2R1cGxpY2F0ZScsXG4gICAgICBpY29uOiAnY29weScsXG4gICAgICB0ZXh0OiBnZXR0ZXh0KCdEdXBsaWNhdGUnKSxcbiAgICAgIGNhbGxiYWNrOiBhc3luYyAoZW50cnk6IEJyYW5kVmVyc2lvbiwgX3JlbG9hZCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLmR1cGxpY2F0ZVZlcnNpb24oZW50cnkpO1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6ICdhcHBseS10by1hcHAnLFxuICAgICAgaWNvbjogJ2Zvcm0nLFxuICAgICAgdGV4dDogZ2V0dGV4dCgnQXBwbHkgdG8gc3BlY2lmaWMgYXBwcycpLFxuICAgICAgY2FsbGJhY2s6IGFzeW5jIChlbnRyeTogQnJhbmRWZXJzaW9uLCBfcmVsb2FkKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuYXBwbHlUb0FwcHMoZW50cnkpO1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6ICdzZXQtYXMtZGVmYXVsdCcsXG4gICAgICBpY29uOiAnZ2xvYmUxJyxcbiAgICAgIHRleHQ6IGdldHRleHQoJ1NldCBhcyBnbG9iYWwnKSxcbiAgICAgIHNob3dJZjogKGVudHJ5OiBCcmFuZFZlcnNpb24pID0+IHtcbiAgICAgICAgaWYgKGVudHJ5LnRhZ3M/LmluY2x1ZGVzKCdsYXRlc3QnKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0sXG4gICAgICBjYWxsYmFjazogYXN5bmMgKGVudHJ5OiBCcmFuZFZlcnNpb24sIF9yZWxvYWQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmNvbmZpcm1Nb2RhbC5jb25maXJtKFxuICAgICAgICAgICAgZ2V0dGV4dCgnU2V0IGFzIGdsb2JhbCBicmFuZGluZycpLFxuICAgICAgICAgICAgZ2V0dGV4dChcbiAgICAgICAgICAgICAgJ0FyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3YW50IHRvIHNldCB0aGlzIHZhcmlhbnQgYXMgdGhlIGdsb2JhbCBicmFuZGluZz8gQnkgZG9pbmcgc28sIHRoaXMgdmFyaWFudCB3aWxsIGJlIGFwcGxpZWQgdG8gYWxsIGFwcHMgdGhhdCBkbyBub3QgaGF2ZSBhIHNwZWNpZmljIGJyYW5kaW5nIGFwcGxpZWQuIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/J1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIFN0YXR1cy5JTkZPXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gZGlkIG5vdCBjb25maXJtXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuYnJhbmRpbmdzLm1hcmtBc0FjdGl2ZShlbnRyeSk7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogQnVpbHRJbkFjdGlvblR5cGUuRGVsZXRlLFxuICAgICAgc2hvd0lmOiAoZW50cnk6IEJyYW5kVmVyc2lvbikgPT4ge1xuICAgICAgICBpZiAoZW50cnkudGFncz8uaW5jbHVkZXMoJ2xhdGVzdCcpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSxcbiAgICAgIGNhbGxiYWNrOiBhc3luYyAoZW50cnk6IEJyYW5kVmVyc2lvbiwgX3JlbG9hZCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuY29uZmlybU1vZGFsLmNvbmZpcm0oXG4gICAgICAgICAgICBnZXR0ZXh0KCdEZWxldGUgYnJhbmRpbmcgdmFyaWFudCcpLFxuICAgICAgICAgICAgZ2V0dGV4dChcbiAgICAgICAgICAgICAgJ1lvdSBhcmUgYWJvdXQgdG8gZGVsZXRlIHRoaXMgYnJhbmRpbmcgdmFyaWFudC4gVGhpcyBhY3Rpb24gY2Fubm90IGJlIHVuZG9uZS4gRG8geW91IHdhbnQgdG8gcHJvY2VlZD8nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgU3RhdHVzLkRBTkdFUlxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIGRpZCBub3QgY29uZmlybVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYnJhbmRpbmdUcmFja2luZy5kZWxldGVCcmFuZGluZ1ZhcmlhbnQoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZGVsZXRlVmVyc2lvblBhY2thZ2UoZW50cnkucHVibGljT3B0aW9uc0FwcCwge1xuICAgICAgICAgIHZlcnNpb246IGVudHJ5LnZlcnNpb25cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgfVxuICAgIH1cbiAgXTtcbiAgY29sdW1uczogQ29sdW1uW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogJ25hbWUnLFxuICAgICAgaGVhZGVyOiBnZXR0ZXh0KCdOYW1lJyksXG4gICAgICBwYXRoOiAnbmFtZScsXG4gICAgICBmaWx0ZXJhYmxlOiB0cnVlLFxuICAgICAgY2VsbFJlbmRlcmVyQ29tcG9uZW50OiBCcmFuZGluZ05hbWVDZWxsUmVuZGVyZXJDb21wb25lbnRcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IGdldHRleHQoJ0FwcGxpZWQgdG9gQXBwbGljYXRpb25zIGEgYnJhbmRpbmcgYXBwbGllcyB0byAodGFibGUgY29sdW1uIGhlYWRlcilgJyksXG4gICAgICBwYXRoOiAndGFncycsXG4gICAgICBmaWx0ZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNlbGxDU1NDbGFzc05hbWU6ICdzbWFsbCcsXG4gICAgICBjZWxsUmVuZGVyZXJDb21wb25lbnQ6IEJyYW5kaW5nVGFnc0NlbGxSZW5kZXJlckNvbXBvbmVudCxcbiAgICAgIGhlYWRlckNlbGxSZW5kZXJlckNvbXBvbmVudDogQnJhbmRpbmdUYWdzSGVhZGVyQ2VsbFJlbmRlcmVyQ29tcG9uZW50XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnb3duZXInLFxuICAgICAgaGVhZGVyOiBnZXR0ZXh0KCdPd25lcicpLFxuICAgICAgcGF0aDogJ293bmVyJyxcbiAgICAgIGZpbHRlcmFibGU6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnbGFzdFVwZGF0ZWQnLFxuICAgICAgaGVhZGVyOiBnZXR0ZXh0KCdMYXN0IHVwZGF0ZWQnKSxcbiAgICAgIHBhdGg6ICdsYXN0VXBkYXRlZCcsXG4gICAgICBmaWx0ZXJhYmxlOiBmYWxzZVxuICAgIH1cbiAgXTtcbiAgY3VycmVudEFwcENvbnRleHRQYXRoID0gJ2FkbWluaXN0cmF0aW9uJztcbiAgYXZhaWxhYmxlQnJhbmRpbmdWYXJpYW50cyQ6IE9ic2VydmFibGU8e1xuICAgIHB1YmxpY09wdGlvbnM6IElBcHBsaWNhdGlvbjtcbiAgICB2YXJpYW50czogQnJhbmRWZXJzaW9uW107XG4gIH0+O1xuXG4gIHByaXZhdGUgcmVsb2FkVHJpZ2dlciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8dm9pZD4odW5kZWZpbmVkKTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBicmFuZGluZ3M6IFN0b3JlQnJhbmRpbmdTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgYXBwU3RhdGU6IEFwcFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIGFwcGxpY2F0aW9uU2VydmljZTogQXBwbGljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgemlwOiBaaXBTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3RhdGljQXNzZXRzOiBTdGF0aWNBc3NldHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBtb2RhbDogQnNNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maXJtTW9kYWw6IE1vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIGJyYW5kaW5nVmVyc2lvblNlcnZpY2U6IEJyYW5kaW5nVmVyc2lvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhZGRCcmFuZGluZ01vZGFsU2VydmljZTogQWRkQnJhbmRpbmdNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydDogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYnJhbmRpbmdJbXBvcnRNb2RhbFNlcnZpY2U6IEJyYW5kaW5nSW1wb3J0TW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgYnJhbmRpbmdUcmFja2luZzogQnJhbmRpbmdUcmFja2luZ1NlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5jdXJyZW50QXBwQ29udGV4dFBhdGggPSB0aGlzLmFwcFN0YXRlLnN0YXRlLmFwcD8uY29udGV4dFBhdGggfHwgdGhpcy5jdXJyZW50QXBwQ29udGV4dFBhdGg7XG4gICAgdGhpcy5hdmFpbGFibGVCcmFuZGluZ1ZhcmlhbnRzJCA9IHRoaXMucmVsb2FkVHJpZ2dlci5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuYnJhbmRpbmdzLmxvYWRCcmFuZGluZ1ZhcmlhbnRzKCkpLFxuICAgICAgLy8gaGlkZSB0aGUgZmFsbGJhY2sgZnJvbSB1c2Vyc1xuICAgICAgbWFwKHZhcmlhbnRzID0+IHtcbiAgICAgICAgdmFyaWFudHMudmFyaWFudHMgPSB2YXJpYW50cy52YXJpYW50cy5maWx0ZXIodiA9PiAhdi50YWdzPy5pbmNsdWRlcygnZmFsbGJhY2snKSk7XG4gICAgICAgIHJldHVybiB2YXJpYW50cztcbiAgICAgIH0pLFxuICAgICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KVxuICAgICk7XG4gIH1cblxuICBhc3luYyBkZWxldGVBbGxCcmFuZGluZ3MocHVibGljT3B0aW9ucz86IElBcHBsaWNhdGlvbikge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29uZmlybU1vZGFsLmNvbmZpcm0oXG4gICAgICBnZXR0ZXh0KCdEZWxldGUgYWxsIGJyYW5kaW5nIHZhcmlhbnRzJyksXG4gICAgICBnZXR0ZXh0KFxuICAgICAgICBgPHAgY2xhc3M9XCJtLWItOFwiPlxuICAgICAgICAgIFRoaXMgYWN0aW9uIHdpbGwgcGVybWFuZW50bHkgcmVtb3ZlIGFsbCBjdXN0b20gYnJhbmRpbmcgdmFyaWFudHMuIFlvdXIgdGVuYW50IHdpbGwgcmV2ZXJ0XG4gICAgICAgICAgdG8gdGhlIGRlZmF1bHQgYnJhbmRpbmcuXG4gICAgICAgIDwvcD5cbiAgICAgICAgPHAgY2xhc3M9XCJtLWItOFwiPlxuICAgICAgICAgIENvbnNpZGVyIGV4cG9ydGluZyB5b3VyIGN1c3RvbSBicmFuZGluZyB2YXJpYW50cyBiZWZvcmUgcHJvY2VlZGluZywgYXMgdGhpcyBhY3Rpb24gY2Fubm90XG4gICAgICAgICAgYmUgdW5kb25lLlxuICAgICAgICA8L3A+XG4gICAgICAgIDxwPlxuICAgICAgICAgIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjb250aW51ZT9cbiAgICAgICAgPC9wPmBcbiAgICAgICksXG4gICAgICBTdGF0dXMuREFOR0VSLFxuICAgICAgeyBjYW5jZWw6IGdldHRleHQoJ0NhbmNlbCcpLCBvazogZ2V0dGV4dCgnRGVsZXRlIGFsbCcpIH1cbiAgICApO1xuICAgIGlmIChyZXN1bHQgPT09IGZhbHNlIHx8ICh0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiAhcmVzdWx0LmNvbmZpcm1lZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmJyYW5kaW5nVHJhY2tpbmcuZGVsZXRlQWxsQnJhbmRpbmdzKCk7XG5cbiAgICBhd2FpdCB0aGlzLmJyYW5kaW5ncy5kZWxldGVBbGxCcmFuZGluZ3MocHVibGljT3B0aW9ucyk7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG4gIH1cblxuICBhc3luYyBleHBvcnRCcmFuZGluZyh2YXJpYW50OiBCcmFuZFZlcnNpb24pIHtcbiAgICB0aGlzLmJyYW5kaW5nVHJhY2tpbmcuZXhwb3J0QnJhbmRpbmcoKTtcbiAgICBjb25zdCBicmFuZGluZyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuYnJhbmRpbmdzLmdldFppcEZvckJpbmFyeSh2YXJpYW50LmlkKSk7XG4gICAgY29uc3Qgc3RhdGljQXNzZXRzQXBwID0gYXdhaXQgdGhpcy5zdGF0aWNBc3NldHMuZ2V0QXBwRm9yVGVuYW50KCdicmFuZGluZycpO1xuICAgIGNvbnN0IHN0YXRpY0Fzc2V0c1ppcCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgdGhpcy5icmFuZGluZ3MuZ2V0WmlwRm9yQmluYXJ5KFxuICAgICAgICBzdGF0aWNBc3NldHNBcHAuYWN0aXZlVmVyc2lvbklkLFxuICAgICAgICB0aGlzLnN0YXRpY0Fzc2V0cy5maWxlTmFtZXMuZXhwb3J0WmlwTmFtZVxuICAgICAgKVxuICAgICk7XG4gICAgY29uc3QgYmxvYiA9IGF3YWl0IHRoaXMuemlwLmNyZWF0ZVppcChbXG4gICAgICB7IGZpbGVOYW1lOiB0aGlzLmJyYW5kaW5ncy5maWxlTmFtZXMuZXhwb3J0WmlwTmFtZSwgYmxvYjogYnJhbmRpbmcgfSxcbiAgICAgIHsgZmlsZU5hbWU6IHRoaXMuc3RhdGljQXNzZXRzLmZpbGVOYW1lcy5leHBvcnRaaXBOYW1lLCBibG9iOiBzdGF0aWNBc3NldHNaaXAgfVxuICAgIF0pO1xuICAgIHNhdmVBcyhibG9iLCBgYnJhbmRpbmctZXhwb3J0LSR7dmFyaWFudC5uYW1lfS0ke3ZhcmlhbnQucmV2aXNpb259LSR7bmV3IERhdGUoKS5nZXRUaW1lKCl9LnppcGApO1xuICB9XG5cbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLnJlbG9hZFRyaWdnZXIubmV4dCgpO1xuICB9XG5cbiAgYXN5bmMgYWRkTmV3VmVyc2lvbigpIHtcbiAgICBjb25zdCB2ZXJzaW9uRGV0YWlscyA9IGF3YWl0IHRoaXMuYWRkQnJhbmRpbmdNb2RhbFNlcnZpY2Uub3BlbkFkZEJyYW5kaW5nTW9kYWwoKTtcbiAgICBpZiAoIXZlcnNpb25EZXRhaWxzKSB7XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGZhbGxCYWNrQnJhbmRpbmcgPSB7fTtcbiAgICB0cnkge1xuICAgICAgZmFsbEJhY2tCcmFuZGluZyA9IGF3YWl0IHRoaXMuYnJhbmRpbmdzLmdldEJyYW5kaW5nT3B0aW9uc0ZvclZlcnNpb24oJ2xhdGVzdCcpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybihgRmFpbGVkIHRvIGxvYWQgbGF0ZXN0IGJyYW5kaW5nYCk7XG4gICAgfVxuXG4gICAgdGhpcy5icmFuZGluZ1RyYWNraW5nLmFkZE5ld1ZlcnNpb24oKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmJyYW5kaW5ncy5hZGRCcmFuZGluZyhcbiAgICAgICAgdGhpcy5icmFuZGluZ1ZlcnNpb25TZXJ2aWNlLmNyZWF0ZUluaXRpYWxCcmFuZGluZ1ZlcnNpb24odmVyc2lvbkRldGFpbHMuYnJhbmRpbmdOYW1lKSxcbiAgICAgICAgZmFsbEJhY2tCcmFuZGluZyxcbiAgICAgICAgW3ZlcnNpb25EZXRhaWxzLmJyYW5kaW5nTmFtZV1cbiAgICAgICk7XG4gICAgICBhd2FpdCB0aGlzLmJyYW5kaW5ncy53YWl0Rm9yQnJhbmRpbmdUb0JlUHJlc2VudCh2ZXJzaW9uRGV0YWlscy5icmFuZGluZ05hbWUpO1xuICAgICAgdGhpcy5lZGl0QnJhbmRpbmcodmVyc2lvbkRldGFpbHMuYnJhbmRpbmdOYW1lKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmFsZXJ0LmFkZFNlcnZlckZhaWx1cmUoZSwgJ2RhbmdlcicpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGR1cGxpY2F0ZVZlcnNpb24odmVyc2lvbjogQnJhbmRWZXJzaW9uKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGF3YWl0IHRoaXMuYnJhbmRpbmdzLmdldEJyYW5kaW5nT3B0aW9uc0ZvclZlcnNpb24odmVyc2lvbi52ZXJzaW9uKTtcbiAgICBjb25zdCB2ZXJzaW9uRGV0YWlscyA9IGF3YWl0IHRoaXMuYWRkQnJhbmRpbmdNb2RhbFNlcnZpY2Uub3BlbkR1cGxpY2F0ZUJyYW5kaW5nTW9kYWwoKTtcbiAgICBpZiAoIXZlcnNpb25EZXRhaWxzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5icmFuZGluZ1RyYWNraW5nLmR1cGxpY2F0ZVZlcnNpb24oKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmJyYW5kaW5ncy5hZGRCcmFuZGluZyhcbiAgICAgICAgdGhpcy5icmFuZGluZ1ZlcnNpb25TZXJ2aWNlLmNyZWF0ZUluaXRpYWxCcmFuZGluZ1ZlcnNpb24odmVyc2lvbkRldGFpbHMuYnJhbmRpbmdOYW1lKSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgW3ZlcnNpb25EZXRhaWxzLmJyYW5kaW5nTmFtZV1cbiAgICAgICk7XG4gICAgICBhd2FpdCB0aGlzLmJyYW5kaW5ncy53YWl0Rm9yQnJhbmRpbmdUb0JlUHJlc2VudCh2ZXJzaW9uRGV0YWlscy5icmFuZGluZ05hbWUpO1xuICAgICAgdGhpcy5lZGl0QnJhbmRpbmcodmVyc2lvbkRldGFpbHMuYnJhbmRpbmdOYW1lKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmFsZXJ0LmFkZFNlcnZlckZhaWx1cmUoZSwgJ2RhbmdlcicpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGVkaXRCcmFuZGluZyhicmFuZGluZ05hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYnJhbmRpbmdOYW1lLCAnZWRpdCddLCB7IHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGUgfSk7XG4gIH1cblxuICBhc3luYyBnZXRTdGFydGVkVXNpbmdCcmFuZGluZygpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNvbmZpcm1Nb2RhbC5jb25maXJtKFxuICAgICAgZ2V0dGV4dChgR2V0IHN0YXJ0ZWQgdXNpbmcgYnJhbmRpbmcgdmFyaWFudHNgKSxcbiAgICAgIGdldHRleHQoXG4gICAgICAgIGA8cCBjbGFzcz1cIm0tYi04XCI+Q29uZmlybWluZyB0aGlzIGFjdGlvbiBjcmVhdGVzIHR3byBicmFuZGluZyB2YXJpYW50czo8L3A+XG4gICAgICAgIDx1bCBjbGFzcz1cIm0tYi04IHAtbC0xNlwiPlxuICAgICAgICAgIDxsaT5BIGRlZmF1bHQgY29weSBvZiB5b3VyIGN1cnJlbnQgZ2xvYmFsIGJyYW5kaW5nPC9saT5cbiAgICAgICAgICA8bGk+WW91ciBuZXcgY3VzdG9taXphYmxlIHZhcmlhbnQuPC9saT5cbiAgICAgICAgPC91bD5cbiAgICAgICAgPHAgY2xhc3M9XCJtLWItOFwiPlxuICAgICAgICAgIEFmdGVyIGN1c3RvbWl6YXRpb24sIHlvdSBjYW4gc2V0IHlvdXIgbmV3IHZhcmlhbnQgYXMgZ2xvYmFsIG9yIGFwcGx5IGl0IHRvIHNwZWNpZmljIGFwcHMuXG4gICAgICAgIDwvcD5cbiAgICAgICAgPHA+XG4gICAgICAgICAgVG8gcmV2ZXJ0IGNoYW5nZXMsIHNpbXBseSBzZXQgdGhlIGRlZmF1bHQgYnJhbmRpbmcgYXMgZ2xvYmFsIG9yIHVzZSB0aGUgXCJEZWxldGUgYWxsXG4gICAgICAgICAgYnJhbmRpbmdzXCIgYnV0dG9uIGF0IGFueSB0aW1lLlxuICAgICAgICA8L3A+YFxuICAgICAgKVxuICAgICk7XG4gICAgaWYgKHJlc3VsdCA9PT0gZmFsc2UgfHwgKHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnICYmICFyZXN1bHQuY29uZmlybWVkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYnJhbmRpbmdUcmFja2luZy5nZXRTdGFydGVkVXNpbmdCcmFuZGluZygpO1xuXG4gICAgYXdhaXQgdGhpcy5icmFuZGluZ3MuZ2V0U3RhcnRlZFVzaW5nQnJhbmRpbmcoKTtcbiAgICBhd2FpdCB0aGlzLmFkZE5ld1ZlcnNpb24oKTtcbiAgfVxuXG4gIGFzeW5jIGFwcGx5VG9BcHBzKHZlcnNpb246IEJyYW5kVmVyc2lvbikge1xuICAgIGNvbnN0IHByZWZpeCA9ICdhcHAtJztcbiAgICBjb25zdCBjdXJyZW50VGFncyA9IHZlcnNpb24udGFnc1xuICAgICAgLmZpbHRlcih0YWcgPT4gdGFnLnN0YXJ0c1dpdGgocHJlZml4KSlcbiAgICAgIC5tYXAodGFnID0+IHRhZy5yZXBsYWNlKHByZWZpeCwgJycpKTtcbiAgICBjb25zdCBvdGhlclRhZ3MgPSB2ZXJzaW9uLnRhZ3MuZmlsdGVyKHRhZyA9PiAhdGFnLnN0YXJ0c1dpdGgocHJlZml4KSk7XG4gICAgbGV0IHNlbGVjdGVkVGFnczogQXdhaXRlZDxBcHBseUJyYW5kaW5nVG9BcHBNb2RhbENvbXBvbmVudFsncmVzdWx0J10+O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWwuc2hvdyhBcHBseUJyYW5kaW5nVG9BcHBNb2RhbENvbXBvbmVudCwge1xuICAgICAgICBpbml0aWFsU3RhdGU6IHsgY3VycmVudFRhZ3MgfSxcbiAgICAgICAgaWdub3JlQmFja2Ryb3BDbGljazogdHJ1ZSxcbiAgICAgICAga2V5Ym9hcmQ6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIHNlbGVjdGVkVGFncyA9IGF3YWl0IG1vZGFsUmVmLmNvbnRlbnQucmVzdWx0O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIG1vZGFsIGNsb3NlZFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGVjdGVkQXBwcyA9IE9iamVjdC5rZXlzKHNlbGVjdGVkVGFncykuZmlsdGVyKGtleSA9PiBzZWxlY3RlZFRhZ3Nba2V5XSk7XG5cbiAgICB0aGlzLmJyYW5kaW5nVHJhY2tpbmcuYXBwbHlUb0FwcHMoc2VsZWN0ZWRBcHBzKTtcblxuICAgIGNvbnN0IHRhZ3NUb1NldCA9IFsuLi5vdGhlclRhZ3MsIC4uLnNlbGVjdGVkQXBwcy5tYXAodGFnID0+IGAke3ByZWZpeH0ke3RhZ31gKV07XG5cbiAgICBhd2FpdCB0aGlzLnJlbW92ZVRhZ3NGcm9tT3RoZXJWZXJzaW9ucyh2ZXJzaW9uLnB1YmxpY09wdGlvbnNBcHAsIHRhZ3NUb1NldCwgdmVyc2lvbi52ZXJzaW9uKTtcbiAgICBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5zZXRQYWNrYWdlVmVyc2lvblRhZyhcbiAgICAgIHZlcnNpb24ucHVibGljT3B0aW9uc0FwcCxcbiAgICAgIHZlcnNpb24udmVyc2lvbixcbiAgICAgIHRhZ3NUb1NldFxuICAgICk7XG4gIH1cblxuICBhc3luYyBpbXBvcnRCcmFuZGluZygpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5icmFuZGluZ0ltcG9ydE1vZGFsU2VydmljZS5vcGVuQnJhbmRpbmdJbXBvcnRNb2RhbCgpO1xuXG4gICAgICB0aGlzLmJyYW5kaW5ncy5yZWZyZXNoVHJpZ2dlckJyYW5kaW5nVmFyaWFudHMubmV4dCgpO1xuICAgICAgdGhpcy5yZWxvYWRUcmlnZ2VyLm5leHQoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBtb2RhbCBjbG9zZWRcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlbW92ZVRhZ3NGcm9tT3RoZXJWZXJzaW9ucyhcbiAgICBwdWJsaWNPcHRpb25zQXBwOiBJQXBwbGljYXRpb24sXG4gICAgdGFnc1RvUmVtb3ZlOiBzdHJpbmdbXSxcbiAgICB2ZXJzaW9uVG9JZ25vcmU/OiBzdHJpbmdcbiAgKSB7XG4gICAgZm9yIChjb25zdCB2ZXJzaW9uIG9mIHB1YmxpY09wdGlvbnNBcHAuYXBwbGljYXRpb25WZXJzaW9ucykge1xuICAgICAgaWYgKHZlcnNpb24udmVyc2lvbiA9PT0gdmVyc2lvblRvSWdub3JlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVtb3ZlZFRhZ3MgPSB2ZXJzaW9uLnRhZ3MuZmlsdGVyKHRhZyA9PiAhdGFnc1RvUmVtb3ZlLmluY2x1ZGVzKHRhZykpO1xuICAgICAgaWYgKHJlbW92ZWRUYWdzLmxlbmd0aCA9PT0gdmVyc2lvbi50YWdzLmxlbmd0aCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLnNldFBhY2thZ2VWZXJzaW9uVGFnKFxuICAgICAgICBwdWJsaWNPcHRpb25zQXBwLFxuICAgICAgICB2ZXJzaW9uLnZlcnNpb24sXG4gICAgICAgIHJlbW92ZWRUYWdzXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIiwiPGM4eS10aXRsZSB0cmFuc2xhdGU+QnJhbmRpbmc8L2M4eS10aXRsZT5cblxuPGM4eS1icmVhZGNydW1iPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbVxuICAgIFtpY29uXT1cIidwYWxldHRlJ1wiXG4gICAgW2xhYmVsXT1cIidCcmFuZGluZycgfCB0cmFuc2xhdGVcIlxuICAgIFtwYXRoXT1cIicvYnJhbmRpbmctZWRpdG9yJ1wiXG4gID48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG48L2M4eS1icmVhZGNydW1iPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiYXZhaWxhYmxlQnJhbmRpbmdWYXJpYW50cyQgfCBhc3luYyBhcyBicmFuZGluZ1ZhcmlhbnQ7IGVsc2UgbG9hZGluZ1wiPlxuICA8Yzh5LWFjdGlvbi1iYXItaXRlbVxuICAgICpuZ0lmPVwiYnJhbmRpbmdWYXJpYW50LnB1YmxpY09wdGlvbnNcIlxuICAgIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiXG4gICAgW3ByaW9yaXR5XT1cIjMwXCJcbiAgPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCJcbiAgICAgIChjbGljayk9XCJhZGROZXdWZXJzaW9uKClcIlxuICAgICAgZGF0YS1jeT1cImJyYW5kaW5nLWFkZC1icmFuZGluZy12YXJpYW50XCJcbiAgICA+XG4gICAgICA8aSBjOHlJY29uPVwicGx1cy1jaXJjbGVcIj48L2k+XG4gICAgICA8c3BhbiB0cmFuc2xhdGU+QWRkIHZhcmlhbnQ8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIDwvYzh5LWFjdGlvbi1iYXItaXRlbT5cbiAgPGM4eS1hY3Rpb24tYmFyLWl0ZW1cbiAgICBbcGxhY2VtZW50XT1cIidyaWdodCdcIlxuICAgIFtwcmlvcml0eV09XCIyMFwiXG4gID5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiXG4gICAgICBkYXRhLWN5PVwiYnJhbmRpbmctaW1wb3J0LWJyYW5kaW5nXCJcbiAgICAgIChjbGljayk9XCJpbXBvcnRCcmFuZGluZygpXCJcbiAgICA+XG4gICAgICA8aSBbYzh5SWNvbl09XCInZGF0YS1pbXBvcnQnXCI+PC9pPlxuICAgICAgPHNwYW4gdHJhbnNsYXRlPkltcG9ydCB2YXJpYW50PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbiAgPGM4eS1hY3Rpb24tYmFyLWl0ZW1cbiAgICAqbmdJZj1cImJyYW5kaW5nVmFyaWFudC5wdWJsaWNPcHRpb25zXCJcbiAgICBbcGxhY2VtZW50XT1cIidyaWdodCdcIlxuICAgIFtwcmlvcml0eV09XCIxMFwiXG4gID5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiXG4gICAgICAoY2xpY2spPVwiZGVsZXRlQWxsQnJhbmRpbmdzKGJyYW5kaW5nVmFyaWFudC5wdWJsaWNPcHRpb25zKVwiXG4gICAgICBkYXRhLWN5PVwiYnJhbmRpbmctcmVtb3ZlLWFsbC1icmFuZGluZ3NcIlxuICAgID5cbiAgICAgIDxpIFtjOHlJY29uXT1cIid0cmFzaC1vJ1wiPjwvaT5cbiAgICAgIDxzcGFuIHRyYW5zbGF0ZT5EZWxldGUgYWxsIHZhcmlhbnRzPC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbiAgPGRpdiBjbGFzcz1cImNvbnRlbnQtZnVsbHBhZ2UgZC1mbGV4IGQtY29sIGJvcmRlci10b3BcIj5cbiAgICA8Yzh5LWRhdGEtZ3JpZFxuICAgICAgW3RpdGxlXT1cIidCcmFuZGluZyB2YXJpYW50cycgfCB0cmFuc2xhdGVcIlxuICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXG4gICAgICBbYWN0aW9uQ29udHJvbHNdPVwiYWN0aW9uQ29udHJvbHNcIlxuICAgICAgW3BhZ2luYXRpb25dPVwicGFnaW5hdGlvblwiXG4gICAgICBbZGlzcGxheU9wdGlvbnNdPVwiZGlzcGxheU9wdGlvbnNcIlxuICAgICAgKG9uUmVsb2FkKT1cInJlZnJlc2goKVwiXG4gICAgICBbcm93c109XCJicmFuZGluZ1ZhcmlhbnQudmFyaWFudHNcIlxuICAgID5cbiAgICAgIDxjOHktdWktZW1wdHktc3RhdGVcbiAgICAgICAgW2ljb25dPVwiJ3BhbGV0dGUnXCJcbiAgICAgICAgW3RpdGxlXT1cIidObyBicmFuZGluZyB2YXJpYW50cycgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbc3VidGl0bGVdPVwiXG4gICAgICAgICAgJ1BlcnNvbmFsaXplIHlvdXIgZXhwZXJpZW5jZSB3aXRoIGEgdGhlbWUtYWJsZSBpbnRlcmZhY2UuIENyZWF0ZSBhIHVuaXF1ZSBsb29rIHRoYXQgYWxpZ25zXG4gICAgICAgICAgIHdpdGggeW91ciBicmFuZCBpZGVudGl0eS4nXG4gICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICBcIlxuICAgICAgICAqbmdJZj1cIiFicmFuZGluZ1ZhcmlhbnQucHVibGljT3B0aW9uc1wiXG4gICAgICAgIFtob3Jpem9udGFsXT1cImZhbHNlXCJcbiAgICAgID5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICAgICAgICBkYXRhLWN5PVwiYnJhbmRpbmctZ2V0LXN0YXJ0ZWQtdXNpbmctYnJhbmRpbmdcIlxuICAgICAgICAgIChjbGljayk9XCJnZXRTdGFydGVkVXNpbmdCcmFuZGluZygpXCJcbiAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgPlxuICAgICAgICAgIEFkZCBicmFuZGluZyB2YXJpYW50XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9jOHktdWktZW1wdHktc3RhdGU+XG4gICAgPC9jOHktZGF0YS1ncmlkPlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI2xvYWRpbmc+XG4gIDxjOHktbG9hZGluZz48L2M4eS1sb2FkaW5nPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
326
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhbmRpbmcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vYnJhbmRpbmcvc2hhcmVkL2xhenkvYnJhbmRpbmcvYnJhbmRpbmcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vYnJhbmRpbmcvc2hhcmVkL2xhenkvYnJhbmRpbmcvYnJhbmRpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBRUwsb0JBQW9CLEVBQ3BCLHNCQUFzQixFQUN0Qix1QkFBdUIsRUFDeEIsTUFBTSwwQ0FBMEMsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZUFBZSxFQUFjLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFFTCxZQUFZLEVBQ1osZUFBZSxFQUNmLGlCQUFpQixFQUdqQixZQUFZLEVBRVosTUFBTSxFQUNOLFVBQVUsRUFDVixPQUFPLEVBQ1AsVUFBVSxFQUNWLGNBQWMsRUFDZixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxrQkFBa0IsRUFBZ0IsTUFBTSxhQUFhLENBQUM7QUFDL0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sc0VBQXNFLENBQUM7QUFDeEgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDdEcsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sc0VBQXNFLENBQUM7QUFDekgsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDcEcsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sc0VBQXNFLENBQUM7QUFDekgsT0FBTyxFQUFFLHVDQUF1QyxFQUFFLE1BQU0sb0ZBQW9GLENBQUM7Ozs7Ozs7Ozs7O0FBUTdJLE1BQU0sT0FBTyxpQkFBaUI7SUFnSjVCLFlBQ1UsU0FBK0IsRUFDL0IsY0FBOEIsRUFDOUIsUUFBeUIsRUFDekIsa0JBQXNDLEVBQ3RDLEdBQWUsRUFDZixZQUFpQyxFQUNqQyxNQUFjLEVBQ2QsS0FBcUIsRUFDckIsWUFBMEIsRUFDMUIsc0JBQThDLEVBQzlDLHVCQUFnRCxFQUNoRCxLQUFtQixFQUNuQiwwQkFBc0QsRUFDdEQsZ0JBQXlDO1FBYnpDLGNBQVMsR0FBVCxTQUFTLENBQXNCO1FBQy9CLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLFFBQUcsR0FBSCxHQUFHLENBQVk7UUFDZixpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUFDakMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDOUMsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtRQUNoRCxVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQ25CLCtCQUEwQixHQUExQiwwQkFBMEIsQ0FBNEI7UUFDdEQscUJBQWdCLEdBQWhCLGdCQUFnQixDQUF5QjtRQTdKbkQsZUFBVSxHQUFlO1lBQ3ZCLFFBQVEsRUFBRSxFQUFFO1lBQ1osV0FBVyxFQUFFLENBQUM7U0FDZixDQUFDO1FBQ0YsbUJBQWMsR0FBbUI7WUFDL0IsUUFBUSxFQUFFLEtBQUs7WUFDZixPQUFPLEVBQUUsSUFBSTtZQUNiLE1BQU0sRUFBRSxJQUFJO1lBQ1osVUFBVSxFQUFFLElBQUk7WUFDaEIsS0FBSyxFQUFFLElBQUk7U0FDWixDQUFDO1FBQ0YsbUJBQWMsR0FBb0I7WUFDaEM7Z0JBQ0UsSUFBSSxFQUFFLGlCQUFpQixDQUFDLElBQUk7Z0JBQzVCLFFBQVEsRUFBRSxDQUFDLEtBQW1CLEVBQUUsT0FBTyxFQUFFLEVBQUU7b0JBQ3pDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoQyxDQUFDO2FBQ0Y7WUFDRDtnQkFDRSxJQUFJLEVBQUUsaUJBQWlCLENBQUMsTUFBTTtnQkFDOUIsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFtQixFQUFFLE9BQU8sRUFBRSxFQUFFO29CQUMvQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25DLENBQUM7YUFDRjtZQUNEO2dCQUNFLElBQUksRUFBRSxTQUFTO2dCQUNmLElBQUksRUFBRSxlQUFlO2dCQUNyQixJQUFJLEVBQUUsT0FBTyxDQUFDLGNBQWMsQ0FBQztnQkFDN0IsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFtQixFQUFFLE9BQU8sRUFBRSxFQUFFO29CQUMvQyxJQUFJLENBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDcEQsQ0FBQzthQUNGO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLElBQUksRUFBRSxNQUFNO2dCQUNaLElBQUksRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDO2dCQUMxQixRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQW1CLEVBQUUsT0FBTyxFQUFFLEVBQUU7b0JBQy9DLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNuQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2pCLENBQUM7YUFDRjtZQUNEO2dCQUNFLElBQUksRUFBRSxjQUFjO2dCQUNwQixJQUFJLEVBQUUsTUFBTTtnQkFDWixJQUFJLEVBQUUsT0FBTyxDQUFDLHdCQUF3QixDQUFDO2dCQUN2QyxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQW1CLEVBQUUsT0FBTyxFQUFFLEVBQUU7b0JBQy9DLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNqQixDQUFDO2FBQ0Y7WUFDRDtnQkFDRSxJQUFJLEVBQUUsZ0JBQWdCO2dCQUN0QixJQUFJLEVBQUUsUUFBUTtnQkFDZCxJQUFJLEVBQUUsT0FBTyxDQUFDLGVBQWUsQ0FBQztnQkFDOUIsTUFBTSxFQUFFLENBQUMsS0FBbUIsRUFBRSxFQUFFO29CQUM5QixJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7d0JBQ25DLE9BQU8sS0FBSyxDQUFDO29CQUNmLENBQUM7b0JBQ0QsT0FBTyxJQUFJLENBQUM7Z0JBQ2QsQ0FBQztnQkFDRCxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQW1CLEVBQUUsT0FBTyxFQUFFLEVBQUU7b0JBQy9DLElBQUksQ0FBQzt3QkFDSCxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUM3QixPQUFPLENBQUMsd0JBQXdCLENBQUMsRUFDakMsT0FBTyxDQUNMLG9NQUFvTSxDQUNyTSxFQUNELE1BQU0sQ0FBQyxJQUFJLENBQ1osQ0FBQztvQkFDSixDQUFDO29CQUFDLE1BQU0sQ0FBQzt3QkFDUCxrQkFBa0I7d0JBQ2xCLE9BQU87b0JBQ1QsQ0FBQztvQkFDRCxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUN6QyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2pCLENBQUM7YUFDRjtZQUNEO2dCQUNFLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxNQUFNO2dCQUM5QixNQUFNLEVBQUUsQ0FBQyxLQUFtQixFQUFFLEVBQUU7b0JBQzlCLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQzt3QkFDbkMsT0FBTyxLQUFLLENBQUM7b0JBQ2YsQ0FBQztvQkFDRCxPQUFPLElBQUksQ0FBQztnQkFDZCxDQUFDO2dCQUNELFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBbUIsRUFBRSxPQUFPLEVBQUUsRUFBRTtvQkFDL0MsSUFBSSxDQUFDO3dCQUNILE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQzdCLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxFQUNsQyxPQUFPLENBQ0wsc0dBQXNHLENBQ3ZHLEVBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FDZCxDQUFDO29CQUNKLENBQUM7b0JBQUMsTUFBTSxDQUFDO3dCQUNQLGtCQUFrQjt3QkFDbEIsT0FBTztvQkFDVCxDQUFDO29CQUVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO29CQUM5QyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUU7d0JBQ3pFLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztxQkFDdkIsQ0FBQyxDQUFDO29CQUNILElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDakIsQ0FBQzthQUNGO1NBQ0YsQ0FBQztRQUNGLFlBQU8sR0FBYTtZQUNsQjtnQkFDRSxJQUFJLEVBQUUsTUFBTTtnQkFDWixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQztnQkFDdkIsSUFBSSxFQUFFLE1BQU07Z0JBQ1osVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLHFCQUFxQixFQUFFLGlDQUFpQzthQUN6RDtZQUNEO2dCQUNFLElBQUksRUFBRSxPQUFPLENBQUMsc0VBQXNFLENBQUM7Z0JBQ3JGLElBQUksRUFBRSxNQUFNO2dCQUNaLFVBQVUsRUFBRSxLQUFLO2dCQUNqQixnQkFBZ0IsRUFBRSxPQUFPO2dCQUN6QixxQkFBcUIsRUFBRSxpQ0FBaUM7Z0JBQ3hELDJCQUEyQixFQUFFLHVDQUF1QzthQUNyRTtZQUNEO2dCQUNFLElBQUksRUFBRSxPQUFPO2dCQUNiLE1BQU0sRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDO2dCQUN4QixJQUFJLEVBQUUsT0FBTztnQkFDYixVQUFVLEVBQUUsS0FBSzthQUNsQjtZQUNEO2dCQUNFLElBQUksRUFBRSxhQUFhO2dCQUNuQixNQUFNLEVBQUUsT0FBTyxDQUFDLGNBQWMsQ0FBQztnQkFDL0IsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLFVBQVUsRUFBRSxLQUFLO2FBQ2xCO1NBQ0YsQ0FBQztRQUNGLDBCQUFxQixHQUFHLGdCQUFnQixDQUFDO1FBTWpDLGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQU8sU0FBUyxDQUFDLENBQUM7UUFpQjNELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsV0FBVyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztRQUNoRyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ3ZELFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDdEQsK0JBQStCO1FBQy9CLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNiLFFBQVEsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDakYsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQyxDQUFDLEVBQ0YsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FDL0MsQ0FBQztJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsa0JBQWtCLENBQUMsYUFBNEI7UUFDbkQsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FDNUMsT0FBTyxDQUFDLDhCQUE4QixDQUFDLEVBQ3ZDLE9BQU8sQ0FDTDs7Ozs7Ozs7OzthQVVLLENBQ04sRUFDRCxNQUFNLENBQUMsTUFBTSxFQUNiLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQ3pELENBQUM7UUFDRixJQUFJLE1BQU0sS0FBSyxLQUFLLElBQUksQ0FBQyxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUMxRSxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBRTNDLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBcUI7UUFDeEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sUUFBUSxHQUFHLE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLE1BQU0sZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDNUUsTUFBTSxlQUFlLEdBQUcsTUFBTSxjQUFjLENBQzFDLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUM1QixlQUFlLENBQUMsZUFBZSxFQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQzFDLENBQ0YsQ0FBQztRQUNGLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7WUFDcEMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7WUFDcEUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUU7U0FDL0UsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLElBQUksRUFBRSxtQkFBbUIsT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsUUFBUSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2xHLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWE7UUFDakIsTUFBTSxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsdUJBQXVCLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUNqRixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2YsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUM7WUFDSCxnQkFBZ0IsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsNEJBQTRCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakYsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDakQsQ0FBQztRQUVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUV0QyxJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUM5QixJQUFJLENBQUMsc0JBQXNCLENBQUMsNEJBQTRCLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxFQUNyRixnQkFBZ0IsRUFDaEIsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQzlCLENBQUM7WUFDRixNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsMEJBQTBCLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzdFLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDM0MsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsT0FBcUI7UUFDMUMsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLDRCQUE0QixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuRixNQUFNLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNwQixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRXpDLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQzlCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyw0QkFBNEIsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLEVBQ3JGLE9BQU8sRUFDUCxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FDOUIsQ0FBQztZQUNGLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQywwQkFBMEIsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDN0UsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDakQsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMzQyxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZLENBQUMsWUFBb0I7UUFDckMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUMzRixDQUFDO0lBRUQsS0FBSyxDQUFDLHVCQUF1QjtRQUMzQixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUM1QyxPQUFPLENBQUMscUNBQXFDLENBQUMsRUFDOUMsT0FBTyxDQUNMOzs7Ozs7Ozs7O2FBVUssQ0FDTixDQUNGLENBQUM7UUFDRixJQUFJLE1BQU0sS0FBSyxLQUFLLElBQUksQ0FBQyxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUMxRSxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBRWhELE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQy9DLE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQXFCO1FBQ3JDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUN0QixNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSTthQUM3QixNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3JDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN0RSxJQUFJLFlBQWlFLENBQUM7UUFDdEUsSUFBSSxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLEVBQUU7Z0JBQ2pFLFlBQVksRUFBRSxFQUFFLFdBQVcsRUFBRTtnQkFDN0IsbUJBQW1CLEVBQUUsSUFBSTtnQkFDekIsUUFBUSxFQUFFLEtBQUs7YUFDaEIsQ0FBQyxDQUFDO1lBQ0gsWUFBWSxHQUFHLE1BQU0sUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDL0MsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxlQUFlO1lBQ2YsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRWhGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFaEQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFHLFNBQVMsRUFBRSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFaEYsTUFBTSxJQUFJLENBQUMsMkJBQTJCLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0YsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLENBQ2hELE9BQU8sQ0FBQyxnQkFBZ0IsRUFDeEIsT0FBTyxDQUFDLE9BQU8sRUFDZixTQUFTLENBQ1YsQ0FBQztJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsY0FBYztRQUNsQixJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksQ0FBQywwQkFBMEIsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBRWhFLElBQUksQ0FBQyxTQUFTLENBQUMsOEJBQThCLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM1QixDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLGVBQWU7UUFDakIsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsMkJBQTJCLENBQ3ZDLGdCQUE4QixFQUM5QixZQUFzQixFQUN0QixlQUF3QjtRQUV4QixLQUFLLE1BQU0sT0FBTyxJQUFJLGdCQUFnQixDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDM0QsSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLGVBQWUsRUFBRSxDQUFDO2dCQUN4QyxTQUFTO1lBQ1gsQ0FBQztZQUNELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDNUUsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQy9DLFNBQVM7WUFDWCxDQUFDO1lBQ0QsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLENBQ2hELGdCQUFnQixFQUNoQixPQUFPLENBQUMsT0FBTyxFQUNmLFdBQVcsQ0FDWixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7K0dBOVdVLGlCQUFpQjttR0FBakIsaUJBQWlCLHdFQzFDOUIsMGtGQTBGQSwyQ0RsRFksVUFBVSxzOERBQUUsY0FBYzs7NEZBRXpCLGlCQUFpQjtrQkFON0IsU0FBUzsrQkFDRSxjQUFjLGNBRVosSUFBSSxXQUNQLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQnJhbmRWZXJzaW9uLFxuICBTdG9yZUJyYW5kaW5nU2VydmljZSxcbiAgQnJhbmRpbmdWZXJzaW9uU2VydmljZSxcbiAgQnJhbmRpbmdUcmFja2luZ1NlcnZpY2Vcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9icmFuZGluZy9zaGFyZWQvZGF0YSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIEFjdGlvbkNvbnRyb2wsXG4gIEFsZXJ0U2VydmljZSxcbiAgQXBwU3RhdGVTZXJ2aWNlLFxuICBCdWlsdEluQWN0aW9uVHlwZSxcbiAgQ29sdW1uLFxuICBEaXNwbGF5T3B0aW9ucyxcbiAgTW9kYWxTZXJ2aWNlLFxuICBQYWdpbmF0aW9uLFxuICBTdGF0dXMsXG4gIFppcFNlcnZpY2UsXG4gIGdldHRleHQsXG4gIENvcmVNb2R1bGUsXG4gIERhdGFHcmlkTW9kdWxlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25TZXJ2aWNlLCBJQXBwbGljYXRpb24gfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBzYXZlQXMgfSBmcm9tICdmaWxlLXNhdmVyJztcbmltcG9ydCB7IFN0YXRpY0Fzc2V0c1NlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL3N0YXRpYy1hc3NldHMvZGF0YSc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgQXBwbHlCcmFuZGluZ1RvQXBwTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9hcHBseS1icmFuZGluZy10by1hcHAtbW9kYWwvYXBwbHktYnJhbmRpbmctdG8tYXBwLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBZGRCcmFuZGluZ01vZGFsU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYnJhbmRpbmcvc2hhcmVkL2xhenkvYWRkLWJyYW5kaW5nLW1vZGFsJztcbmltcG9ydCB7IEJyYW5kaW5nVGFnc0NlbGxSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4uL2JyYW5kaW5nLXRhZ3MtY2VsbC1yZW5kZXJlci9icmFuZGluZy10YWdzLWNlbGwtcmVuZGVyZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEJyYW5kaW5nSW1wb3J0TW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vYnJhbmRpbmctaW1wb3J0LW1vZGFsL2JyYW5kaW5nLWltcG9ydC1tb2RhbC5zZXJ2aWNlJztcbmltcG9ydCB7IEJyYW5kaW5nTmFtZUNlbGxSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4uL2JyYW5kaW5nLW5hbWUtY2VsbC1yZW5kZXJlci9icmFuZGluZy1uYW1lLWNlbGwtcmVuZGVyZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEJyYW5kaW5nVGFnc0hlYWRlckNlbGxSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4uL2JyYW5kaW5nLXRhZ3MtaGVhZGVyLWNlbGwtcmVuZGVyZXIvYnJhbmRpbmctdGFncy1oZWFkZXItY2VsbC1yZW5kZXJlci5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktYnJhbmRpbmcnLFxuICB0ZW1wbGF0ZVVybDogJy4vYnJhbmRpbmcuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29yZU1vZHVsZSwgRGF0YUdyaWRNb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIEJyYW5kaW5nQ29tcG9uZW50IHtcbiAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbiA9IHtcbiAgICBwYWdlU2l6ZTogMTAsXG4gICAgY3VycmVudFBhZ2U6IDFcbiAgfTtcbiAgZGlzcGxheU9wdGlvbnM6IERpc3BsYXlPcHRpb25zID0ge1xuICAgIGJvcmRlcmVkOiBmYWxzZSxcbiAgICBzdHJpcGVkOiB0cnVlLFxuICAgIGZpbHRlcjogdHJ1ZSxcbiAgICBncmlkSGVhZGVyOiB0cnVlLFxuICAgIGhvdmVyOiB0cnVlXG4gIH07XG4gIGFjdGlvbkNvbnRyb2xzOiBBY3Rpb25Db250cm9sW10gPSBbXG4gICAge1xuICAgICAgdHlwZTogQnVpbHRJbkFjdGlvblR5cGUuRWRpdCxcbiAgICAgIGNhbGxiYWNrOiAoZW50cnk6IEJyYW5kVmVyc2lvbiwgX3JlbG9hZCkgPT4ge1xuICAgICAgICB0aGlzLmVkaXRCcmFuZGluZyhlbnRyeS5uYW1lKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6IEJ1aWx0SW5BY3Rpb25UeXBlLkV4cG9ydCxcbiAgICAgIGNhbGxiYWNrOiBhc3luYyAoZW50cnk6IEJyYW5kVmVyc2lvbiwgX3JlbG9hZCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLmV4cG9ydEJyYW5kaW5nKGVudHJ5KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6ICdwcmV2aWV3JyxcbiAgICAgIGljb246ICdleHRlcm5hbC1saW5rJyxcbiAgICAgIHRleHQ6IGdldHRleHQoJ09wZW4gcHJldmlldycpLFxuICAgICAgY2FsbGJhY2s6IGFzeW5jIChlbnRyeTogQnJhbmRWZXJzaW9uLCBfcmVsb2FkKSA9PiB7XG4gICAgICAgIHRoaXMuYnJhbmRpbmdzLm9wZW5QcmV2aWV3Rm9yQnJhbmRpbmcoZW50cnkubmFtZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiAnZHVwbGljYXRlJyxcbiAgICAgIGljb246ICdjb3B5JyxcbiAgICAgIHRleHQ6IGdldHRleHQoJ0R1cGxpY2F0ZScpLFxuICAgICAgY2FsbGJhY2s6IGFzeW5jIChlbnRyeTogQnJhbmRWZXJzaW9uLCBfcmVsb2FkKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuZHVwbGljYXRlVmVyc2lvbihlbnRyeSk7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogJ2FwcGx5LXRvLWFwcCcsXG4gICAgICBpY29uOiAnZm9ybScsXG4gICAgICB0ZXh0OiBnZXR0ZXh0KCdBcHBseSB0byBzcGVjaWZpYyBhcHBzJyksXG4gICAgICBjYWxsYmFjazogYXN5bmMgKGVudHJ5OiBCcmFuZFZlcnNpb24sIF9yZWxvYWQpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5hcHBseVRvQXBwcyhlbnRyeSk7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogJ3NldC1hcy1kZWZhdWx0JyxcbiAgICAgIGljb246ICdnbG9iZTEnLFxuICAgICAgdGV4dDogZ2V0dGV4dCgnU2V0IGFzIGdsb2JhbCcpLFxuICAgICAgc2hvd0lmOiAoZW50cnk6IEJyYW5kVmVyc2lvbikgPT4ge1xuICAgICAgICBpZiAoZW50cnkudGFncz8uaW5jbHVkZXMoJ2xhdGVzdCcpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSxcbiAgICAgIGNhbGxiYWNrOiBhc3luYyAoZW50cnk6IEJyYW5kVmVyc2lvbiwgX3JlbG9hZCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuY29uZmlybU1vZGFsLmNvbmZpcm0oXG4gICAgICAgICAgICBnZXR0ZXh0KCdTZXQgYXMgZ2xvYmFsIGJyYW5kaW5nJyksXG4gICAgICAgICAgICBnZXR0ZXh0KFxuICAgICAgICAgICAgICAnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdhbnQgdG8gc2V0IHRoaXMgdmFyaWFudCBhcyB0aGUgZ2xvYmFsIGJyYW5kaW5nPyBCeSBkb2luZyBzbywgdGhpcyB2YXJpYW50IHdpbGwgYmUgYXBwbGllZCB0byBhbGwgYXBwcyB0aGF0IGRvIG5vdCBoYXZlIGEgc3BlY2lmaWMgYnJhbmRpbmcgYXBwbGllZC4gRG8geW91IHdhbnQgdG8gcHJvY2VlZD8nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgU3RhdHVzLklORk9cbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBkaWQgbm90IGNvbmZpcm1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5icmFuZGluZ3MubWFya0FzQWN0aXZlKGVudHJ5KTtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiBCdWlsdEluQWN0aW9uVHlwZS5EZWxldGUsXG4gICAgICBzaG93SWY6IChlbnRyeTogQnJhbmRWZXJzaW9uKSA9PiB7XG4gICAgICAgIGlmIChlbnRyeS50YWdzPy5pbmNsdWRlcygnbGF0ZXN0JykpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9LFxuICAgICAgY2FsbGJhY2s6IGFzeW5jIChlbnRyeTogQnJhbmRWZXJzaW9uLCBfcmVsb2FkKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5jb25maXJtTW9kYWwuY29uZmlybShcbiAgICAgICAgICAgIGdldHRleHQoJ0RlbGV0ZSBicmFuZGluZyB2YXJpYW50JyksXG4gICAgICAgICAgICBnZXR0ZXh0KFxuICAgICAgICAgICAgICAnWW91IGFyZSBhYm91dCB0byBkZWxldGUgdGhpcyBicmFuZGluZyB2YXJpYW50LiBUaGlzIGFjdGlvbiBjYW5ub3QgYmUgdW5kb25lLiBEbyB5b3Ugd2FudCB0byBwcm9jZWVkPydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBTdGF0dXMuREFOR0VSXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gZGlkIG5vdCBjb25maXJtXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5icmFuZGluZ1RyYWNraW5nLmRlbGV0ZUJyYW5kaW5nVmFyaWFudCgpO1xuICAgICAgICBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5kZWxldGVWZXJzaW9uUGFja2FnZShlbnRyeS5wdWJsaWNPcHRpb25zQXBwLCB7XG4gICAgICAgICAgdmVyc2lvbjogZW50cnkudmVyc2lvblxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICB9XG4gICAgfVxuICBdO1xuICBjb2x1bW5zOiBDb2x1bW5bXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnbmFtZScsXG4gICAgICBoZWFkZXI6IGdldHRleHQoJ05hbWUnKSxcbiAgICAgIHBhdGg6ICduYW1lJyxcbiAgICAgIGZpbHRlcmFibGU6IHRydWUsXG4gICAgICBjZWxsUmVuZGVyZXJDb21wb25lbnQ6IEJyYW5kaW5nTmFtZUNlbGxSZW5kZXJlckNvbXBvbmVudFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogZ2V0dGV4dCgnQXBwbGllZCB0b2BBcHBsaWNhdGlvbnMgYSBicmFuZGluZyBhcHBsaWVzIHRvICh0YWJsZSBjb2x1bW4gaGVhZGVyKWAnKSxcbiAgICAgIHBhdGg6ICd0YWdzJyxcbiAgICAgIGZpbHRlcmFibGU6IGZhbHNlLFxuICAgICAgY2VsbENTU0NsYXNzTmFtZTogJ3NtYWxsJyxcbiAgICAgIGNlbGxSZW5kZXJlckNvbXBvbmVudDogQnJhbmRpbmdUYWdzQ2VsbFJlbmRlcmVyQ29tcG9uZW50LFxuICAgICAgaGVhZGVyQ2VsbFJlbmRlcmVyQ29tcG9uZW50OiBCcmFuZGluZ1RhZ3NIZWFkZXJDZWxsUmVuZGVyZXJDb21wb25lbnRcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdvd25lcicsXG4gICAgICBoZWFkZXI6IGdldHRleHQoJ093bmVyJyksXG4gICAgICBwYXRoOiAnb3duZXInLFxuICAgICAgZmlsdGVyYWJsZTogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdsYXN0VXBkYXRlZCcsXG4gICAgICBoZWFkZXI6IGdldHRleHQoJ0xhc3QgdXBkYXRlZCcpLFxuICAgICAgcGF0aDogJ2xhc3RVcGRhdGVkJyxcbiAgICAgIGZpbHRlcmFibGU6IGZhbHNlXG4gICAgfVxuICBdO1xuICBjdXJyZW50QXBwQ29udGV4dFBhdGggPSAnYWRtaW5pc3RyYXRpb24nO1xuICBhdmFpbGFibGVCcmFuZGluZ1ZhcmlhbnRzJDogT2JzZXJ2YWJsZTx7XG4gICAgcHVibGljT3B0aW9uczogSUFwcGxpY2F0aW9uO1xuICAgIHZhcmlhbnRzOiBCcmFuZFZlcnNpb25bXTtcbiAgfT47XG5cbiAgcHJpdmF0ZSByZWxvYWRUcmlnZ2VyID0gbmV3IEJlaGF2aW9yU3ViamVjdDx2b2lkPih1bmRlZmluZWQpO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGJyYW5kaW5nczogU3RvcmVCcmFuZGluZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBhcHBTdGF0ZTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwbGljYXRpb25TZXJ2aWNlOiBBcHBsaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSB6aXA6IFppcFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdGF0aWNBc3NldHM6IFN0YXRpY0Fzc2V0c1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIG1vZGFsOiBCc01vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpcm1Nb2RhbDogTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgYnJhbmRpbmdWZXJzaW9uU2VydmljZTogQnJhbmRpbmdWZXJzaW9uU2VydmljZSxcbiAgICBwcml2YXRlIGFkZEJyYW5kaW5nTW9kYWxTZXJ2aWNlOiBBZGRCcmFuZGluZ01vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0OiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBicmFuZGluZ0ltcG9ydE1vZGFsU2VydmljZTogQnJhbmRpbmdJbXBvcnRNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBicmFuZGluZ1RyYWNraW5nOiBCcmFuZGluZ1RyYWNraW5nU2VydmljZVxuICApIHtcbiAgICB0aGlzLmN1cnJlbnRBcHBDb250ZXh0UGF0aCA9IHRoaXMuYXBwU3RhdGUuc3RhdGUuYXBwPy5jb250ZXh0UGF0aCB8fCB0aGlzLmN1cnJlbnRBcHBDb250ZXh0UGF0aDtcbiAgICB0aGlzLmF2YWlsYWJsZUJyYW5kaW5nVmFyaWFudHMkID0gdGhpcy5yZWxvYWRUcmlnZ2VyLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5icmFuZGluZ3MubG9hZEJyYW5kaW5nVmFyaWFudHMoKSksXG4gICAgICAvLyBoaWRlIHRoZSBmYWxsYmFjayBmcm9tIHVzZXJzXG4gICAgICBtYXAodmFyaWFudHMgPT4ge1xuICAgICAgICB2YXJpYW50cy52YXJpYW50cyA9IHZhcmlhbnRzLnZhcmlhbnRzLmZpbHRlcih2ID0+ICF2LnRhZ3M/LmluY2x1ZGVzKCdmYWxsYmFjaycpKTtcbiAgICAgICAgcmV0dXJuIHZhcmlhbnRzO1xuICAgICAgfSksXG4gICAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUFsbEJyYW5kaW5ncyhwdWJsaWNPcHRpb25zPzogSUFwcGxpY2F0aW9uKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jb25maXJtTW9kYWwuY29uZmlybShcbiAgICAgIGdldHRleHQoJ0RlbGV0ZSBhbGwgYnJhbmRpbmcgdmFyaWFudHMnKSxcbiAgICAgIGdldHRleHQoXG4gICAgICAgIGA8cCBjbGFzcz1cIm0tYi04XCI+XG4gICAgICAgICAgVGhpcyBhY3Rpb24gd2lsbCBwZXJtYW5lbnRseSByZW1vdmUgYWxsIGN1c3RvbSBicmFuZGluZyB2YXJpYW50cy4gWW91ciB0ZW5hbnQgd2lsbCByZXZlcnRcbiAgICAgICAgICB0byB0aGUgZGVmYXVsdCBicmFuZGluZy5cbiAgICAgICAgPC9wPlxuICAgICAgICA8cCBjbGFzcz1cIm0tYi04XCI+XG4gICAgICAgICAgQ29uc2lkZXIgZXhwb3J0aW5nIHlvdXIgY3VzdG9tIGJyYW5kaW5nIHZhcmlhbnRzIGJlZm9yZSBwcm9jZWVkaW5nLCBhcyB0aGlzIGFjdGlvbiBjYW5ub3RcbiAgICAgICAgICBiZSB1bmRvbmUuXG4gICAgICAgIDwvcD5cbiAgICAgICAgPHA+XG4gICAgICAgICAgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNvbnRpbnVlP1xuICAgICAgICA8L3A+YFxuICAgICAgKSxcbiAgICAgIFN0YXR1cy5EQU5HRVIsXG4gICAgICB7IGNhbmNlbDogZ2V0dGV4dCgnQ2FuY2VsJyksIG9rOiBnZXR0ZXh0KCdEZWxldGUgYWxsJykgfVxuICAgICk7XG4gICAgaWYgKHJlc3VsdCA9PT0gZmFsc2UgfHwgKHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnICYmICFyZXN1bHQuY29uZmlybWVkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYnJhbmRpbmdUcmFja2luZy5kZWxldGVBbGxCcmFuZGluZ3MoKTtcblxuICAgIGF3YWl0IHRoaXMuYnJhbmRpbmdzLmRlbGV0ZUFsbEJyYW5kaW5ncyhwdWJsaWNPcHRpb25zKTtcbiAgICB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIGFzeW5jIGV4cG9ydEJyYW5kaW5nKHZhcmlhbnQ6IEJyYW5kVmVyc2lvbikge1xuICAgIHRoaXMuYnJhbmRpbmdUcmFja2luZy5leHBvcnRCcmFuZGluZygpO1xuICAgIGNvbnN0IGJyYW5kaW5nID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5icmFuZGluZ3MuZ2V0WmlwRm9yQmluYXJ5KHZhcmlhbnQuaWQpKTtcbiAgICBjb25zdCBzdGF0aWNBc3NldHNBcHAgPSBhd2FpdCB0aGlzLnN0YXRpY0Fzc2V0cy5nZXRBcHBGb3JUZW5hbnQoJ2JyYW5kaW5nJyk7XG4gICAgY29uc3Qgc3RhdGljQXNzZXRzWmlwID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICB0aGlzLmJyYW5kaW5ncy5nZXRaaXBGb3JCaW5hcnkoXG4gICAgICAgIHN0YXRpY0Fzc2V0c0FwcC5hY3RpdmVWZXJzaW9uSWQsXG4gICAgICAgIHRoaXMuc3RhdGljQXNzZXRzLmZpbGVOYW1lcy5leHBvcnRaaXBOYW1lXG4gICAgICApXG4gICAgKTtcbiAgICBjb25zdCBibG9iID0gYXdhaXQgdGhpcy56aXAuY3JlYXRlWmlwKFtcbiAgICAgIHsgZmlsZU5hbWU6IHRoaXMuYnJhbmRpbmdzLmZpbGVOYW1lcy5leHBvcnRaaXBOYW1lLCBibG9iOiBicmFuZGluZyB9LFxuICAgICAgeyBmaWxlTmFtZTogdGhpcy5zdGF0aWNBc3NldHMuZmlsZU5hbWVzLmV4cG9ydFppcE5hbWUsIGJsb2I6IHN0YXRpY0Fzc2V0c1ppcCB9XG4gICAgXSk7XG4gICAgc2F2ZUFzKGJsb2IsIGBicmFuZGluZy1leHBvcnQtJHt2YXJpYW50Lm5hbWV9LSR7dmFyaWFudC5yZXZpc2lvbn0tJHtuZXcgRGF0ZSgpLmdldFRpbWUoKX0uemlwYCk7XG4gIH1cblxuICByZWZyZXNoKCkge1xuICAgIHRoaXMucmVsb2FkVHJpZ2dlci5uZXh0KCk7XG4gIH1cblxuICBhc3luYyBhZGROZXdWZXJzaW9uKCkge1xuICAgIGNvbnN0IHZlcnNpb25EZXRhaWxzID0gYXdhaXQgdGhpcy5hZGRCcmFuZGluZ01vZGFsU2VydmljZS5vcGVuQWRkQnJhbmRpbmdNb2RhbCgpO1xuICAgIGlmICghdmVyc2lvbkRldGFpbHMpIHtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgZmFsbEJhY2tCcmFuZGluZyA9IHt9O1xuICAgIHRyeSB7XG4gICAgICBmYWxsQmFja0JyYW5kaW5nID0gYXdhaXQgdGhpcy5icmFuZGluZ3MuZ2V0QnJhbmRpbmdPcHRpb25zRm9yVmVyc2lvbignbGF0ZXN0Jyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS53YXJuKGBGYWlsZWQgdG8gbG9hZCBsYXRlc3QgYnJhbmRpbmdgKTtcbiAgICB9XG5cbiAgICB0aGlzLmJyYW5kaW5nVHJhY2tpbmcuYWRkTmV3VmVyc2lvbigpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuYnJhbmRpbmdzLmFkZEJyYW5kaW5nKFxuICAgICAgICB0aGlzLmJyYW5kaW5nVmVyc2lvblNlcnZpY2UuY3JlYXRlSW5pdGlhbEJyYW5kaW5nVmVyc2lvbih2ZXJzaW9uRGV0YWlscy5icmFuZGluZ05hbWUpLFxuICAgICAgICBmYWxsQmFja0JyYW5kaW5nLFxuICAgICAgICBbdmVyc2lvbkRldGFpbHMuYnJhbmRpbmdOYW1lXVxuICAgICAgKTtcbiAgICAgIGF3YWl0IHRoaXMuYnJhbmRpbmdzLndhaXRGb3JCcmFuZGluZ1RvQmVQcmVzZW50KHZlcnNpb25EZXRhaWxzLmJyYW5kaW5nTmFtZSk7XG4gICAgICB0aGlzLmVkaXRCcmFuZGluZyh2ZXJzaW9uRGV0YWlscy5icmFuZGluZ05hbWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuYWxlcnQuYWRkU2VydmVyRmFpbHVyZShlLCAnZGFuZ2VyJyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZHVwbGljYXRlVmVyc2lvbih2ZXJzaW9uOiBCcmFuZFZlcnNpb24pIHtcbiAgICBjb25zdCBvcHRpb25zID0gYXdhaXQgdGhpcy5icmFuZGluZ3MuZ2V0QnJhbmRpbmdPcHRpb25zRm9yVmVyc2lvbih2ZXJzaW9uLnZlcnNpb24pO1xuICAgIGNvbnN0IHZlcnNpb25EZXRhaWxzID0gYXdhaXQgdGhpcy5hZGRCcmFuZGluZ01vZGFsU2VydmljZS5vcGVuRHVwbGljYXRlQnJhbmRpbmdNb2RhbCgpO1xuICAgIGlmICghdmVyc2lvbkRldGFpbHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmJyYW5kaW5nVHJhY2tpbmcuZHVwbGljYXRlVmVyc2lvbigpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuYnJhbmRpbmdzLmFkZEJyYW5kaW5nKFxuICAgICAgICB0aGlzLmJyYW5kaW5nVmVyc2lvblNlcnZpY2UuY3JlYXRlSW5pdGlhbEJyYW5kaW5nVmVyc2lvbih2ZXJzaW9uRGV0YWlscy5icmFuZGluZ05hbWUpLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICBbdmVyc2lvbkRldGFpbHMuYnJhbmRpbmdOYW1lXVxuICAgICAgKTtcbiAgICAgIGF3YWl0IHRoaXMuYnJhbmRpbmdzLndhaXRGb3JCcmFuZGluZ1RvQmVQcmVzZW50KHZlcnNpb25EZXRhaWxzLmJyYW5kaW5nTmFtZSk7XG4gICAgICB0aGlzLmVkaXRCcmFuZGluZyh2ZXJzaW9uRGV0YWlscy5icmFuZGluZ05hbWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuYWxlcnQuYWRkU2VydmVyRmFpbHVyZShlLCAnZGFuZ2VyJyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZWRpdEJyYW5kaW5nKGJyYW5kaW5nTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlKFticmFuZGluZ05hbWUsICdlZGl0J10sIHsgcmVsYXRpdmVUbzogdGhpcy5hY3RpdmF0ZWRSb3V0ZSB9KTtcbiAgfVxuXG4gIGFzeW5jIGdldFN0YXJ0ZWRVc2luZ0JyYW5kaW5nKCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29uZmlybU1vZGFsLmNvbmZpcm0oXG4gICAgICBnZXR0ZXh0KGBHZXQgc3RhcnRlZCB1c2luZyBicmFuZGluZyB2YXJpYW50c2ApLFxuICAgICAgZ2V0dGV4dChcbiAgICAgICAgYDxwIGNsYXNzPVwibS1iLThcIj5Db25maXJtaW5nIHRoaXMgYWN0aW9uIGNyZWF0ZXMgdHdvIGJyYW5kaW5nIHZhcmlhbnRzOjwvcD5cbiAgICAgICAgPHVsIGNsYXNzPVwibS1iLTggcC1sLTE2XCI+XG4gICAgICAgICAgPGxpPkEgZGVmYXVsdCBjb3B5IG9mIHlvdXIgY3VycmVudCBnbG9iYWwgYnJhbmRpbmc8L2xpPlxuICAgICAgICAgIDxsaT5Zb3VyIG5ldyBjdXN0b21pemFibGUgdmFyaWFudC48L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgICA8cCBjbGFzcz1cIm0tYi04XCI+XG4gICAgICAgICAgQWZ0ZXIgY3VzdG9taXphdGlvbiwgeW91IGNhbiBzZXQgeW91ciBuZXcgdmFyaWFudCBhcyBnbG9iYWwgb3IgYXBwbHkgaXQgdG8gc3BlY2lmaWMgYXBwcy5cbiAgICAgICAgPC9wPlxuICAgICAgICA8cD5cbiAgICAgICAgICBUbyByZXZlcnQgY2hhbmdlcywgc2ltcGx5IHNldCB0aGUgZGVmYXVsdCBicmFuZGluZyBhcyBnbG9iYWwgb3IgdXNlIHRoZSBcIkRlbGV0ZSBhbGwgdmFyaWFudHNcIiBidXR0b24gYXQgYW55IHRpbWUuXG4gICAgICAgIDwvcD5gXG4gICAgICApXG4gICAgKTtcbiAgICBpZiAocmVzdWx0ID09PSBmYWxzZSB8fCAodHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcgJiYgIXJlc3VsdC5jb25maXJtZWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5icmFuZGluZ1RyYWNraW5nLmdldFN0YXJ0ZWRVc2luZ0JyYW5kaW5nKCk7XG5cbiAgICBhd2FpdCB0aGlzLmJyYW5kaW5ncy5nZXRTdGFydGVkVXNpbmdCcmFuZGluZygpO1xuICAgIGF3YWl0IHRoaXMuYWRkTmV3VmVyc2lvbigpO1xuICB9XG5cbiAgYXN5bmMgYXBwbHlUb0FwcHModmVyc2lvbjogQnJhbmRWZXJzaW9uKSB7XG4gICAgY29uc3QgcHJlZml4ID0gJ2FwcC0nO1xuICAgIGNvbnN0IGN1cnJlbnRUYWdzID0gdmVyc2lvbi50YWdzXG4gICAgICAuZmlsdGVyKHRhZyA9PiB0YWcuc3RhcnRzV2l0aChwcmVmaXgpKVxuICAgICAgLm1hcCh0YWcgPT4gdGFnLnJlcGxhY2UocHJlZml4LCAnJykpO1xuICAgIGNvbnN0IG90aGVyVGFncyA9IHZlcnNpb24udGFncy5maWx0ZXIodGFnID0+ICF0YWcuc3RhcnRzV2l0aChwcmVmaXgpKTtcbiAgICBsZXQgc2VsZWN0ZWRUYWdzOiBBd2FpdGVkPEFwcGx5QnJhbmRpbmdUb0FwcE1vZGFsQ29tcG9uZW50WydyZXN1bHQnXT47XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbC5zaG93KEFwcGx5QnJhbmRpbmdUb0FwcE1vZGFsQ29tcG9uZW50LCB7XG4gICAgICAgIGluaXRpYWxTdGF0ZTogeyBjdXJyZW50VGFncyB9LFxuICAgICAgICBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlLFxuICAgICAgICBrZXlib2FyZDogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgc2VsZWN0ZWRUYWdzID0gYXdhaXQgbW9kYWxSZWYuY29udGVudC5yZXN1bHQ7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gbW9kYWwgY2xvc2VkXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2VsZWN0ZWRBcHBzID0gT2JqZWN0LmtleXMoc2VsZWN0ZWRUYWdzKS5maWx0ZXIoa2V5ID0+IHNlbGVjdGVkVGFnc1trZXldKTtcblxuICAgIHRoaXMuYnJhbmRpbmdUcmFja2luZy5hcHBseVRvQXBwcyhzZWxlY3RlZEFwcHMpO1xuXG4gICAgY29uc3QgdGFnc1RvU2V0ID0gWy4uLm90aGVyVGFncywgLi4uc2VsZWN0ZWRBcHBzLm1hcCh0YWcgPT4gYCR7cHJlZml4fSR7dGFnfWApXTtcblxuICAgIGF3YWl0IHRoaXMucmVtb3ZlVGFnc0Zyb21PdGhlclZlcnNpb25zKHZlcnNpb24ucHVibGljT3B0aW9uc0FwcCwgdGFnc1RvU2V0LCB2ZXJzaW9uLnZlcnNpb24pO1xuICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLnNldFBhY2thZ2VWZXJzaW9uVGFnKFxuICAgICAgdmVyc2lvbi5wdWJsaWNPcHRpb25zQXBwLFxuICAgICAgdmVyc2lvbi52ZXJzaW9uLFxuICAgICAgdGFnc1RvU2V0XG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGltcG9ydEJyYW5kaW5nKCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmJyYW5kaW5nSW1wb3J0TW9kYWxTZXJ2aWNlLm9wZW5CcmFuZGluZ0ltcG9ydE1vZGFsKCk7XG5cbiAgICAgIHRoaXMuYnJhbmRpbmdzLnJlZnJlc2hUcmlnZ2VyQnJhbmRpbmdWYXJpYW50cy5uZXh0KCk7XG4gICAgICB0aGlzLnJlbG9hZFRyaWdnZXIubmV4dCgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIG1vZGFsIGNsb3NlZFxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVtb3ZlVGFnc0Zyb21PdGhlclZlcnNpb25zKFxuICAgIHB1YmxpY09wdGlvbnNBcHA6IElBcHBsaWNhdGlvbixcbiAgICB0YWdzVG9SZW1vdmU6IHN0cmluZ1tdLFxuICAgIHZlcnNpb25Ub0lnbm9yZT86IHN0cmluZ1xuICApIHtcbiAgICBmb3IgKGNvbnN0IHZlcnNpb24gb2YgcHVibGljT3B0aW9uc0FwcC5hcHBsaWNhdGlvblZlcnNpb25zKSB7XG4gICAgICBpZiAodmVyc2lvbi52ZXJzaW9uID09PSB2ZXJzaW9uVG9JZ25vcmUpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByZW1vdmVkVGFncyA9IHZlcnNpb24udGFncy5maWx0ZXIodGFnID0+ICF0YWdzVG9SZW1vdmUuaW5jbHVkZXModGFnKSk7XG4gICAgICBpZiAocmVtb3ZlZFRhZ3MubGVuZ3RoID09PSB2ZXJzaW9uLnRhZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2Uuc2V0UGFja2FnZVZlcnNpb25UYWcoXG4gICAgICAgIHB1YmxpY09wdGlvbnNBcHAsXG4gICAgICAgIHZlcnNpb24udmVyc2lvbixcbiAgICAgICAgcmVtb3ZlZFRhZ3NcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iLCI8Yzh5LXRpdGxlIHRyYW5zbGF0ZT5CcmFuZGluZzwvYzh5LXRpdGxlPlxuXG48Yzh5LWJyZWFkY3J1bWI+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtXG4gICAgW2ljb25dPVwiJ3BhbGV0dGUnXCJcbiAgICBbbGFiZWxdPVwiJ0JyYW5kaW5nJyB8IHRyYW5zbGF0ZVwiXG4gICAgW3BhdGhdPVwiJy9icmFuZGluZy1lZGl0b3InXCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbjwvYzh5LWJyZWFkY3J1bWI+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJhdmFpbGFibGVCcmFuZGluZ1ZhcmlhbnRzJCB8IGFzeW5jIGFzIGJyYW5kaW5nVmFyaWFudDsgZWxzZSBsb2FkaW5nXCI+XG4gIDxjOHktYWN0aW9uLWJhci1pdGVtXG4gICAgKm5nSWY9XCJicmFuZGluZ1ZhcmlhbnQucHVibGljT3B0aW9uc1wiXG4gICAgW3BsYWNlbWVudF09XCIncmlnaHQnXCJcbiAgICBbcHJpb3JpdHldPVwiMzBcIlxuICA+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG4gYnRuLWxpbmtcIlxuICAgICAgKGNsaWNrKT1cImFkZE5ld1ZlcnNpb24oKVwiXG4gICAgICBkYXRhLWN5PVwiYnJhbmRpbmctYWRkLWJyYW5kaW5nLXZhcmlhbnRcIlxuICAgID5cbiAgICAgIDxpIGM4eUljb249XCJwbHVzLWNpcmNsZVwiPjwvaT5cbiAgICAgIDxzcGFuIHRyYW5zbGF0ZT5BZGQgdmFyaWFudDwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuICA8Yzh5LWFjdGlvbi1iYXItaXRlbVxuICAgIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiXG4gICAgW3ByaW9yaXR5XT1cIjIwXCJcbiAgPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCJcbiAgICAgIGRhdGEtY3k9XCJicmFuZGluZy1pbXBvcnQtYnJhbmRpbmdcIlxuICAgICAgKGNsaWNrKT1cImltcG9ydEJyYW5kaW5nKClcIlxuICAgID5cbiAgICAgIDxpIFtjOHlJY29uXT1cIidkYXRhLWltcG9ydCdcIj48L2k+XG4gICAgICA8c3BhbiB0cmFuc2xhdGU+SW1wb3J0IHZhcmlhbnQ8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIDwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuICA8Yzh5LWFjdGlvbi1iYXItaXRlbVxuICAgICpuZ0lmPVwiYnJhbmRpbmdWYXJpYW50LnB1YmxpY09wdGlvbnNcIlxuICAgIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiXG4gICAgW3ByaW9yaXR5XT1cIjEwXCJcbiAgPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCJcbiAgICAgIChjbGljayk9XCJkZWxldGVBbGxCcmFuZGluZ3MoYnJhbmRpbmdWYXJpYW50LnB1YmxpY09wdGlvbnMpXCJcbiAgICAgIGRhdGEtY3k9XCJicmFuZGluZy1yZW1vdmUtYWxsLWJyYW5kaW5nc1wiXG4gICAgPlxuICAgICAgPGkgW2M4eUljb25dPVwiJ3RyYXNoLW8nXCI+PC9pPlxuICAgICAgPHNwYW4gdHJhbnNsYXRlPkRlbGV0ZSBhbGwgdmFyaWFudHM8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIDwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuICA8ZGl2IGNsYXNzPVwiY29udGVudC1mdWxscGFnZSBkLWZsZXggZC1jb2wgYm9yZGVyLXRvcFwiPlxuICAgIDxjOHktZGF0YS1ncmlkXG4gICAgICBbdGl0bGVdPVwiJ0JyYW5kaW5nIHZhcmlhbnRzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcbiAgICAgIFthY3Rpb25Db250cm9sc109XCJhY3Rpb25Db250cm9sc1wiXG4gICAgICBbcGFnaW5hdGlvbl09XCJwYWdpbmF0aW9uXCJcbiAgICAgIFtkaXNwbGF5T3B0aW9uc109XCJkaXNwbGF5T3B0aW9uc1wiXG4gICAgICAob25SZWxvYWQpPVwicmVmcmVzaCgpXCJcbiAgICAgIFtyb3dzXT1cImJyYW5kaW5nVmFyaWFudC52YXJpYW50c1wiXG4gICAgPlxuICAgICAgPGM4eS11aS1lbXB0eS1zdGF0ZVxuICAgICAgICBbaWNvbl09XCIncGFsZXR0ZSdcIlxuICAgICAgICBbdGl0bGVdPVwiJ05vIGJyYW5kaW5nIHZhcmlhbnRzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFtzdWJ0aXRsZV09XCJcbiAgICAgICAgICAnUGVyc29uYWxpemUgeW91ciBleHBlcmllbmNlIHdpdGggYSB0aGVtZS1hYmxlIGludGVyZmFjZS4gQ3JlYXRlIGEgdW5pcXVlIGxvb2sgdGhhdCBhbGlnbnMgd2l0aCB5b3VyIGJyYW5kIGlkZW50aXR5LidcbiAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgIFwiXG4gICAgICAgICpuZ0lmPVwiIWJyYW5kaW5nVmFyaWFudC5wdWJsaWNPcHRpb25zXCJcbiAgICAgICAgW2hvcml6b250YWxdPVwiZmFsc2VcIlxuICAgICAgPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgICAgICAgIGRhdGEtY3k9XCJicmFuZGluZy1nZXQtc3RhcnRlZC11c2luZy1icmFuZGluZ1wiXG4gICAgICAgICAgKGNsaWNrKT1cImdldFN0YXJ0ZWRVc2luZ0JyYW5kaW5nKClcIlxuICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICA+XG4gICAgICAgICAgQWRkIGJyYW5kaW5nIHZhcmlhbnRcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2M4eS11aS1lbXB0eS1zdGF0ZT5cbiAgICA8L2M4eS1kYXRhLWdyaWQ+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZz5cbiAgPGM4eS1sb2FkaW5nPjwvYzh5LWxvYWRpbmc+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -80,14 +80,18 @@ export class PreviewService extends ExtensionPointForPlugins {
80
80
  this.reload$.next(this.toggledFeaturesWithReload.size > 0);
81
81
  }
82
82
  /**
83
- * Marks all features as seen by the user and updates the local storage.
83
+ * Marks all unseen features as seen by the user and updates the local storage.
84
84
  * This assumes all features are provided via the `items$` observable.
85
85
  */
86
86
  async markAllFeaturesAsSeen() {
87
- const features = await firstValueFrom(this.items$);
88
- const featureNames = features.map(feature => feature.label);
89
- localStorage.setItem(this.LOCAL_STORAGE_KEY, JSON.stringify(featureNames));
90
- this.seenFeatures$.next(featureNames);
87
+ const features = await firstValueFrom(this.getAvailableFeatures$());
88
+ const newFeatureNames = features.map(feature => feature.label);
89
+ const storedFeatures = localStorage.getItem(this.LOCAL_STORAGE_KEY);
90
+ const existingFeatureNames = storedFeatures ? JSON.parse(storedFeatures) : [];
91
+ // Update the local storage with unique feature names and remove duplicates
92
+ const updatedFeatureNames = Array.from(new Set([...existingFeatureNames, ...newFeatureNames]));
93
+ localStorage.setItem(this.LOCAL_STORAGE_KEY, JSON.stringify(updatedFeatureNames));
94
+ this.seenFeatures$.next(updatedFeatureNames);
91
95
  }
92
96
  /**
93
97
  * Filters the features to only include those that are available by checking the feature toggle API.
@@ -123,4 +127,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
123
127
  type: Injectable,
124
128
  args: [{ providedIn: 'root' }]
125
129
  }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.PluginsResolveService }] });
126
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmV0YS1wcmV2aWV3LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2JldGEtZmVhdHVyZS9iZXRhLXByZXZpZXcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkYsT0FBTyxFQUdMLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsd0JBQXdCLEVBQ3hCLGVBQWUsRUFDZixjQUFjLEVBQ2QsY0FBYyxFQUNmLE1BQU0sMkJBQTJCLENBQUM7QUFFbkMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDM0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7OztBQUUzRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxjQUFjLENBQWdCLGNBQWMsQ0FBQyxDQUFDO0FBRTlFLE1BQU0sVUFBVSxXQUFXLENBQ3pCLE9BQXFDLEVBQ3JDLE9BQXFDO0lBRXJDLE9BQU8sV0FBVyxDQUFjLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDbEUsQ0FBQztBQUdELE1BQU0sT0FBTyxjQUFlLFNBQVEsd0JBQXFDO0lBZXZFLFlBQVksWUFBc0IsRUFBRSxhQUFvQztRQUN0RSxLQUFLLENBQUMsWUFBWSxF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QUM7SUFFUyxvQkFBb0I7UUFDNUIsT0FBTyxlQUFlLENBQWMsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDNUQsZ0JBQWdCLENBQWMsWUFBWSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDM0QsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFDcEIsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7U0FDNUIsQ0FBQyxDQUFDLElBQUksQ0FDTCxvQkFBb0IsRUFBRSxFQUN0QixHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDekMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7SUFDSixDQUFDOytHQXpJVSxjQUFjO21IQUFkLGNBQWMsY0FERCxNQUFNOzs0RkFDbkIsY0FBYztrQkFEMUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmaXJzdFZhbHVlRnJvbSwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBHZW5lcmljSG9va09wdGlvbnMsXG4gIEdlbmVyaWNIb29rVHlwZSxcbiAgaG9va0dlbmVyaWMsXG4gIGdldEluamVjdGVkSG9va3MsXG4gIEV4dGVuc2lvblBvaW50Rm9yUGx1Z2lucyxcbiAgZnJvbVRyaWdnZXJPbmNlLFxuICBzdGF0ZVRvRmFjdG9yeSxcbiAgc29ydEJ5UHJpb3JpdHlcbn0gZnJvbSAnLi4vY29tbW9uL2V4dGVuc2lvbi1ob29rcyc7XG5pbXBvcnQgeyBCZXRhRmVhdHVyZSB9IGZyb20gJy4vYmV0YS1wcmV2aWV3Lm1vZGVsJztcbmltcG9ydCB7IFBsdWdpbnNSZXNvbHZlU2VydmljZSB9IGZyb20gJy4uL3BsdWdpbnMvcGx1Z2lucy1yZXNvbHZlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmVhdHVyZVNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBGZWF0dXJlQ2FjaGVTZXJ2aWNlIH0gZnJvbSAnLi9mZWF0dXJlLWNhY2hlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT3B0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vb3B0aW9ucy5zZXJ2aWNlJztcblxuZXhwb3J0IGNvbnN0IEhPT0tfUFJFVklFVyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxCZXRhRmVhdHVyZVtdPignSE9PS19QUkVWSUVXJyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBob29rUHJldmlldyhcbiAgcHJldmlldzogR2VuZXJpY0hvb2tUeXBlPEJldGFGZWF0dXJlPixcbiAgb3B0aW9ucz86IFBhcnRpYWw8R2VuZXJpY0hvb2tPcHRpb25zPlxuKSB7XG4gIHJldHVybiBob29rR2VuZXJpYzxCZXRhRmVhdHVyZT4ocHJldmlldywgSE9PS19QUkVWSUVXLCBvcHRpb25zKTtcbn1cblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBQcmV2aWV3U2VydmljZSBleHRlbmRzIEV4dGVuc2lvblBvaW50Rm9yUGx1Z2luczxCZXRhRmVhdHVyZT4ge1xuICBpdGVtcyQ6IE9ic2VydmFibGU8QmV0YUZlYXR1cmVbXT4gPSB0aGlzLnNldHVwSXRlbXNPYnNlcnZhYmxlKCk7XG4gIHJlbG9hZCQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IExPQ0FMX1NUT1JBR0VfS0VZID0gJ2M4eV9iZXRhX2ZlYXR1cmVzX3NlZW4nO1xuICBwcml2YXRlIHNlZW5GZWF0dXJlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ1tdPih0aGlzLmdldFNlZW5GZWF0dXJlcygpKTtcbiAgaGFzVW5zZWVuRmVhdHVyZXMkID0gY29tYmluZUxhdGVzdChbdGhpcy5nZXRBdmFpbGFibGVGZWF0dXJlcyQoKSwgdGhpcy5zZWVuRmVhdHVyZXMkXSkucGlwZShcbiAgICBtYXAoKFtmZWF0dXJlcywgc2Vlbl0pID0+IGZlYXR1cmVzLnNvbWUoZmVhdHVyZSA9PiAhc2Vlbi5pbmNsdWRlcyhmZWF0dXJlLmxhYmVsKSkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgKTtcbiAgcHJpdmF0ZSByZWFkb25seSBmZWF0dXJlU2VydmljZSA9IGluamVjdChGZWF0dXJlU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmVhdHVyZUNhY2hlU2VydmljZSA9IGluamVjdChGZWF0dXJlQ2FjaGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zU2VydmljZSA9IGluamVjdChPcHRpb25zU2VydmljZSk7XG5cbiAgcHJpdmF0ZSB0b2dnbGVkRmVhdHVyZXNXaXRoUmVsb2FkOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTsgLy8gdHJhY2sgZmVhdHVyZXMgd2l0aCBzZXR0aW5ncy5yZWxvYWQgPSB0cnVlXG5cbiAgY29uc3RydWN0b3Iocm9vdEluamVjdG9yOiBJbmplY3RvciwgcGx1Z2luU2VydmljZTogUGx1Z2luc1Jlc29sdmVTZXJ2aWNlKSB7XG4gICAgc3VwZXIocm9vdEluamVjdG9yLCBwbHVnaW5TZXJ2aWNlKTtcbiAgfVxuXG4gIGdldCBzdGF0ZSgpOiBTZXQ8QmV0YUZlYXR1cmU+IHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZSQudmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzdGF0ZSBvZiBhIHNwZWNpZmljIGZlYXR1cmUuXG4gICAqIEBwYXJhbSBrZXkgVGhlIHVuaXF1ZSBrZXkgZm9yIHRoZSBmZWF0dXJlLlxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPGJvb2xlYW4+IHJlcHJlc2VudGluZyB0aGUgc3RhdGUgb2YgdGhlIGZlYXR1cmUuXG4gICAqL1xuICBnZXRTdGF0ZSQoa2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5pdGVtcyQucGlwZShcbiAgICAgIHN3aXRjaE1hcChmZWF0dXJlcyA9PlxuICAgICAgICB0aGlzLm9wdGlvbnNTZXJ2aWNlLmdldCQoJ2VuYWJsZUFsbEJldGFGZWF0dXJlcycpLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKGVuYWJsZUFsbEJldGFGZWF0dXJlcyA9PiB7XG4gICAgICAgICAgICBpZiAoZW5hYmxlQWxsQmV0YUZlYXR1cmVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiBvZih0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlcy5maW5kKGYgPT4gZi5rZXkgPT09IGtleSk7XG4gICAgICAgICAgICBpZiAoIWZlYXR1cmUpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGZWF0dXJlIHdpdGgga2V5IFwiJHtrZXl9XCIgZG9lcyBub3QgZXhpc3QuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmVhdHVyZS5hY3RpdmUkKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmZWF0dXJlLmFjdGl2ZSQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mZWF0dXJlQ2FjaGVTZXJ2aWNlLmdldEZlYXR1cmVTdGF0ZShrZXkpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB0aGUgc3RhdGUgb2YgYSBzcGVjaWZpYyBmZWF0dXJlLlxuICAgKiBAcGFyYW0ga2V5IFRoZSB1bmlxdWUga2V5IG9yIGxhYmVsIGZvciB0aGUgZmVhdHVyZS4gTGFiZWwgaXMgdXNlZCB0byBmaW5kIHRoZSBjdXN0b20gZmVhdHVyZXMuXG4gICAqIEByZXR1cm5zIFByb21pc2U8dm9pZD4gYWZ0ZXIgdG9nZ2xpbmcgdGhlIHN0YXRlLlxuICAgKi9cbiAgYXN5bmMgc2V0RmVhdHVyZUFjdGl2ZVN0YXRlKGtleTogc3RyaW5nLCB0b2dnbGVWYWx1ZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZlYXR1cmVzID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5pdGVtcyQpO1xuICAgIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlcy5maW5kKGYgPT4gZi5rZXkgPT09IGtleSkgfHwgZmVhdHVyZXMuZmluZChmID0+IGYubGFiZWwgPT09IGtleSk7XG5cbiAgICBpZiAoIWZlYXR1cmUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmVhdHVyZSB3aXRoIGtleSBcIiR7a2V5fVwiIGRvZXMgbm90IGV4aXN0LmApO1xuICAgIH1cblxuICAgIGlmIChmZWF0dXJlLm9uVG9nZ2xlKSB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgZmVhdHVyZS5vblRvZ2dsZSh0b2dnbGVWYWx1ZSk7XG4gICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gdG9nZ2xlIGZlYXR1cmUgd2l0aCBrZXkgXCIke2tleX1cIi5gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmZWF0dXJlVG9VcGRhdGUgPSB7IGtleTogZmVhdHVyZS5rZXksIGFjdGl2ZTogdG9nZ2xlVmFsdWUgfTtcbiAgICBhd2FpdCB0aGlzLmZlYXR1cmVTZXJ2aWNlLnVwZGF0ZUZlYXR1cmUoZmVhdHVyZVRvVXBkYXRlKTtcbiAgICBhd2FpdCB0aGlzLmZlYXR1cmVDYWNoZVNlcnZpY2UucmVzZXRGZWF0dXJlU3RhdGUoKTtcblxuICAgIGlmIChmZWF0dXJlLnNldHRpbmdzPy5yZWxvYWQpIHtcbiAgICAgIGlmICh0aGlzLnRvZ2dsZWRGZWF0dXJlc1dpdGhSZWxvYWQuaGFzKGtleSkpIHtcbiAgICAgICAgdGhpcy50b2dnbGVkRmVhdHVyZXNXaXRoUmVsb2FkLmRlbGV0ZShrZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50b2dnbGVkRmVhdHVyZXNXaXRoUmVsb2FkLmFkZChrZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVsb2FkJC5uZXh0KHRoaXMudG9nZ2xlZEZlYXR1cmVzV2l0aFJlbG9hZC5zaXplID4gMCk7XG4gIH1cblxuICAvKipcbiAgICogTWFya3MgYWxsIGZlYXR1cmVzIGFzIHNlZW4gYnkgdGhlIHVzZXIgYW5kIHVwZGF0ZXMgdGhlIGxvY2FsIHN0b3JhZ2UuXG4gICAqIFRoaXMgYXNzdW1lcyBhbGwgZmVhdHVyZXMgYXJlIHByb3ZpZGVkIHZpYSB0aGUgYGl0ZW1zJGAgb2JzZXJ2YWJsZS5cbiAgICovXG4gIGFzeW5jIG1hcmtBbGxGZWF0dXJlc0FzU2VlbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmZWF0dXJlcyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuaXRlbXMkKTtcbiAgICBjb25zdCBmZWF0dXJlTmFtZXMgPSBmZWF0dXJlcy5tYXAoZmVhdHVyZSA9PiBmZWF0dXJlLmxhYmVsKTtcblxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuTE9DQUxfU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KGZlYXR1cmVOYW1lcykpO1xuICAgIHRoaXMuc2VlbkZlYXR1cmVzJC5uZXh0KGZlYXR1cmVOYW1lcyk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyB0aGUgZmVhdHVyZXMgdG8gb25seSBpbmNsdWRlIHRob3NlIHRoYXQgYXJlIGF2YWlsYWJsZSBieSBjaGVja2luZyB0aGUgZmVhdHVyZSB0b2dnbGUgQVBJLlxuICAgKi9cbiAgZ2V0QXZhaWxhYmxlRmVhdHVyZXMkKCk6IE9ic2VydmFibGU8QmV0YUZlYXR1cmVbXT4ge1xuICAgIHJldHVybiB0aGlzLml0ZW1zJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKGZlYXR1cmVzID0+IHtcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoXG4gICAgICAgICAgZmVhdHVyZXMubWFwKGZlYXQgPT5cbiAgICAgICAgICAgIGZlYXQua2V5XG4gICAgICAgICAgICAgID8gdGhpcy5mZWF0dXJlQ2FjaGVTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAuZmVhdHVyZUV4aXN0cyhmZWF0LmtleSlcbiAgICAgICAgICAgICAgICAgIC5waXBlKG1hcChleGlzdHMgPT4gKGV4aXN0cyA/IGZlYXQgOiBmYWxzZSkpKVxuICAgICAgICAgICAgICA6IG9mKGZlYXQpXG4gICAgICAgICAgKVxuICAgICAgICApLnBpcGUobWFwKGZlYXR1cmVzID0+IGZlYXR1cmVzLmZpbHRlcihCb29sZWFuKSkpIGFzIE9ic2VydmFibGU8QmV0YUZlYXR1cmVbXT47XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZmVhdHVyZSBuYW1lcyB0aGF0IGhhdmUgYmVlbiBzZWVuIGJ5IHRoZSB1c2VyLiBUaGlzIGlzIHJldHJpZXZlZCBmcm9tIGxvY2FsIHN0b3JhZ2UuXG4gICAqL1xuICBwcml2YXRlIGdldFNlZW5GZWF0dXJlcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgc2VlbkZlYXR1cmVzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5MT0NBTF9TVE9SQUdFX0tFWSk7XG4gICAgcmV0dXJuIHNlZW5GZWF0dXJlcyA/IEpTT04ucGFyc2Uoc2VlbkZlYXR1cmVzKSA6IFtdO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldHVwSXRlbXNPYnNlcnZhYmxlKCk6IE9ic2VydmFibGU8QmV0YUZlYXR1cmVbXT4ge1xuICAgIHJldHVybiBmcm9tVHJpZ2dlck9uY2U8QmV0YUZlYXR1cmU+KHVuZGVmaW5lZCwgdGhpcy5yZWZyZXNoJCwgW1xuICAgICAgZ2V0SW5qZWN0ZWRIb29rczxCZXRhRmVhdHVyZT4oSE9PS19QUkVWSUVXLCB0aGlzLmluamVjdG9ycyksXG4gICAgICAoKSA9PiB0aGlzLmZhY3RvcmllcyxcbiAgICAgIHN0YXRlVG9GYWN0b3J5KHRoaXMuc3RhdGUkKVxuICAgIF0pLnBpcGUoXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgbWFwKGZlYXR1cmVzID0+IHNvcnRCeVByaW9yaXR5KGZlYXR1cmVzKSksXG4gICAgICBzaGFyZVJlcGxheSgxKVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmV0YS1wcmV2aWV3LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2JldGEtZmVhdHVyZS9iZXRhLXByZXZpZXcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkYsT0FBTyxFQUdMLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsd0JBQXdCLEVBQ3hCLGVBQWUsRUFDZixjQUFjLEVBQ2QsY0FBYyxFQUNmLE1BQU0sMkJBQTJCLENBQUM7QUFFbkMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDM0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7OztBQUUzRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxjQUFjLENBQWdCLGNBQWMsQ0FBQyxDQUFDO0FBRTlFLE1BQU0sVUFBVSxXQUFXLENBQ3pCLE9BQXFDLEVBQ3JDLE9BQXFDO0lBRXJDLE9BQU8sV0FBVyxDQUFjLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDbEUsQ0FBQztBQUdELE1BQU0sT0FBTyxjQUFlLFNBQVEsd0JBQXFDO0lBZXZFLFlBQVksWUFBc0IsRUFBRSxhQUFvQztRQUN0RSxLQUFLLENBQUMsWUFBWSxF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QUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBOEIsQ0FBQztRQUNqRixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNLLGVBQWU7UUFDckIsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNsRSxPQUFPLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3RELENBQUM7SUFFUyxvQkFBb0I7UUFDNUIsT0FBTyxlQUFlLENBQWMsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDNUQsZ0JBQWdCLENBQWMsWUFBWSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDM0QsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFDcEIsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7U0FDNUIsQ0FBQyxDQUFDLElBQUksQ0FDTCxvQkFBb0IsRUFBRSxFQUN0QixHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDekMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7SUFDSixDQUFDOytHQS9JVSxjQUFjO21IQUFkLGNBQWMsY0FERCxNQUFNOzs0RkFDbkIsY0FBYztrQkFEMUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmaXJzdFZhbHVlRnJvbSwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBHZW5lcmljSG9va09wdGlvbnMsXG4gIEdlbmVyaWNIb29rVHlwZSxcbiAgaG9va0dlbmVyaWMsXG4gIGdldEluamVjdGVkSG9va3MsXG4gIEV4dGVuc2lvblBvaW50Rm9yUGx1Z2lucyxcbiAgZnJvbVRyaWdnZXJPbmNlLFxuICBzdGF0ZVRvRmFjdG9yeSxcbiAgc29ydEJ5UHJpb3JpdHlcbn0gZnJvbSAnLi4vY29tbW9uL2V4dGVuc2lvbi1ob29rcyc7XG5pbXBvcnQgeyBCZXRhRmVhdHVyZSB9IGZyb20gJy4vYmV0YS1wcmV2aWV3Lm1vZGVsJztcbmltcG9ydCB7IFBsdWdpbnNSZXNvbHZlU2VydmljZSB9IGZyb20gJy4uL3BsdWdpbnMvcGx1Z2lucy1yZXNvbHZlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmVhdHVyZVNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBGZWF0dXJlQ2FjaGVTZXJ2aWNlIH0gZnJvbSAnLi9mZWF0dXJlLWNhY2hlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT3B0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vb3B0aW9ucy5zZXJ2aWNlJztcblxuZXhwb3J0IGNvbnN0IEhPT0tfUFJFVklFVyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxCZXRhRmVhdHVyZVtdPignSE9PS19QUkVWSUVXJyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBob29rUHJldmlldyhcbiAgcHJldmlldzogR2VuZXJpY0hvb2tUeXBlPEJldGFGZWF0dXJlPixcbiAgb3B0aW9ucz86IFBhcnRpYWw8R2VuZXJpY0hvb2tPcHRpb25zPlxuKSB7XG4gIHJldHVybiBob29rR2VuZXJpYzxCZXRhRmVhdHVyZT4ocHJldmlldywgSE9PS19QUkVWSUVXLCBvcHRpb25zKTtcbn1cblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBQcmV2aWV3U2VydmljZSBleHRlbmRzIEV4dGVuc2lvblBvaW50Rm9yUGx1Z2luczxCZXRhRmVhdHVyZT4ge1xuICBpdGVtcyQ6IE9ic2VydmFibGU8QmV0YUZlYXR1cmVbXT4gPSB0aGlzLnNldHVwSXRlbXNPYnNlcnZhYmxlKCk7XG4gIHJlbG9hZCQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IExPQ0FMX1NUT1JBR0VfS0VZID0gJ2M4eV9iZXRhX2ZlYXR1cmVzX3NlZW4nO1xuICBwcml2YXRlIHNlZW5GZWF0dXJlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ1tdPih0aGlzLmdldFNlZW5GZWF0dXJlcygpKTtcbiAgaGFzVW5zZWVuRmVhdHVyZXMkID0gY29tYmluZUxhdGVzdChbdGhpcy5nZXRBdmFpbGFibGVGZWF0dXJlcyQoKSwgdGhpcy5zZWVuRmVhdHVyZXMkXSkucGlwZShcbiAgICBtYXAoKFtmZWF0dXJlcywgc2Vlbl0pID0+IGZlYXR1cmVzLnNvbWUoZmVhdHVyZSA9PiAhc2Vlbi5pbmNsdWRlcyhmZWF0dXJlLmxhYmVsKSkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgKTtcbiAgcHJpdmF0ZSByZWFkb25seSBmZWF0dXJlU2VydmljZSA9IGluamVjdChGZWF0dXJlU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmVhdHVyZUNhY2hlU2VydmljZSA9IGluamVjdChGZWF0dXJlQ2FjaGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zU2VydmljZSA9IGluamVjdChPcHRpb25zU2VydmljZSk7XG5cbiAgcHJpdmF0ZSB0b2dnbGVkRmVhdHVyZXNXaXRoUmVsb2FkOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTsgLy8gdHJhY2sgZmVhdHVyZXMgd2l0aCBzZXR0aW5ncy5yZWxvYWQgPSB0cnVlXG5cbiAgY29uc3RydWN0b3Iocm9vdEluamVjdG9yOiBJbmplY3RvciwgcGx1Z2luU2VydmljZTogUGx1Z2luc1Jlc29sdmVTZXJ2aWNlKSB7XG4gICAgc3VwZXIocm9vdEluamVjdG9yLCBwbHVnaW5TZXJ2aWNlKTtcbiAgfVxuXG4gIGdldCBzdGF0ZSgpOiBTZXQ8QmV0YUZlYXR1cmU+IHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZSQudmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzdGF0ZSBvZiBhIHNwZWNpZmljIGZlYXR1cmUuXG4gICAqIEBwYXJhbSBrZXkgVGhlIHVuaXF1ZSBrZXkgZm9yIHRoZSBmZWF0dXJlLlxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPGJvb2xlYW4+IHJlcHJlc2VudGluZyB0aGUgc3RhdGUgb2YgdGhlIGZlYXR1cmUuXG4gICAqL1xuICBnZXRTdGF0ZSQoa2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5pdGVtcyQucGlwZShcbiAgICAgIHN3aXRjaE1hcChmZWF0dXJlcyA9PlxuICAgICAgICB0aGlzLm9wdGlvbnNTZXJ2aWNlLmdldCQoJ2VuYWJsZUFsbEJldGFGZWF0dXJlcycpLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKGVuYWJsZUFsbEJldGFGZWF0dXJlcyA9PiB7XG4gICAgICAgICAgICBpZiAoZW5hYmxlQWxsQmV0YUZlYXR1cmVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiBvZih0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlcy5maW5kKGYgPT4gZi5rZXkgPT09IGtleSk7XG4gICAgICAgICAgICBpZiAoIWZlYXR1cmUpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGZWF0dXJlIHdpdGgga2V5IFwiJHtrZXl9XCIgZG9lcyBub3QgZXhpc3QuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmVhdHVyZS5hY3RpdmUkKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmZWF0dXJlLmFjdGl2ZSQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mZWF0dXJlQ2FjaGVTZXJ2aWNlLmdldEZlYXR1cmVTdGF0ZShrZXkpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB0aGUgc3RhdGUgb2YgYSBzcGVjaWZpYyBmZWF0dXJlLlxuICAgKiBAcGFyYW0ga2V5IFRoZSB1bmlxdWUga2V5IG9yIGxhYmVsIGZvciB0aGUgZmVhdHVyZS4gTGFiZWwgaXMgdXNlZCB0byBmaW5kIHRoZSBjdXN0b20gZmVhdHVyZXMuXG4gICAqIEByZXR1cm5zIFByb21pc2U8dm9pZD4gYWZ0ZXIgdG9nZ2xpbmcgdGhlIHN0YXRlLlxuICAgKi9cbiAgYXN5bmMgc2V0RmVhdHVyZUFjdGl2ZVN0YXRlKGtleTogc3RyaW5nLCB0b2dnbGVWYWx1ZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZlYXR1cmVzID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5pdGVtcyQpO1xuICAgIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlcy5maW5kKGYgPT4gZi5rZXkgPT09IGtleSkgfHwgZmVhdHVyZXMuZmluZChmID0+IGYubGFiZWwgPT09IGtleSk7XG5cbiAgICBpZiAoIWZlYXR1cmUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmVhdHVyZSB3aXRoIGtleSBcIiR7a2V5fVwiIGRvZXMgbm90IGV4aXN0LmApO1xuICAgIH1cblxuICAgIGlmIChmZWF0dXJlLm9uVG9nZ2xlKSB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgZmVhdHVyZS5vblRvZ2dsZSh0b2dnbGVWYWx1ZSk7XG4gICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gdG9nZ2xlIGZlYXR1cmUgd2l0aCBrZXkgXCIke2tleX1cIi5gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmZWF0dXJlVG9VcGRhdGUgPSB7IGtleTogZmVhdHVyZS5rZXksIGFjdGl2ZTogdG9nZ2xlVmFsdWUgfTtcbiAgICBhd2FpdCB0aGlzLmZlYXR1cmVTZXJ2aWNlLnVwZGF0ZUZlYXR1cmUoZmVhdHVyZVRvVXBkYXRlKTtcbiAgICBhd2FpdCB0aGlzLmZlYXR1cmVDYWNoZVNlcnZpY2UucmVzZXRGZWF0dXJlU3RhdGUoKTtcblxuICAgIGlmIChmZWF0dXJlLnNldHRpbmdzPy5yZWxvYWQpIHtcbiAgICAgIGlmICh0aGlzLnRvZ2dsZWRGZWF0dXJlc1dpdGhSZWxvYWQuaGFzKGtleSkpIHtcbiAgICAgICAgdGhpcy50b2dnbGVkRmVhdHVyZXNXaXRoUmVsb2FkLmRlbGV0ZShrZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50b2dnbGVkRmVhdHVyZXNXaXRoUmVsb2FkLmFkZChrZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVsb2FkJC5uZXh0KHRoaXMudG9nZ2xlZEZlYXR1cmVzV2l0aFJlbG9hZC5zaXplID4gMCk7XG4gIH1cblxuICAvKipcbiAgICogTWFya3MgYWxsIHVuc2VlbiBmZWF0dXJlcyBhcyBzZWVuIGJ5IHRoZSB1c2VyIGFuZCB1cGRhdGVzIHRoZSBsb2NhbCBzdG9yYWdlLlxuICAgKiBUaGlzIGFzc3VtZXMgYWxsIGZlYXR1cmVzIGFyZSBwcm92aWRlZCB2aWEgdGhlIGBpdGVtcyRgIG9ic2VydmFibGUuXG4gICAqL1xuICBhc3luYyBtYXJrQWxsRmVhdHVyZXNBc1NlZW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZmVhdHVyZXMgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmdldEF2YWlsYWJsZUZlYXR1cmVzJCgpKTtcbiAgICBjb25zdCBuZXdGZWF0dXJlTmFtZXMgPSBmZWF0dXJlcy5tYXAoZmVhdHVyZSA9PiBmZWF0dXJlLmxhYmVsKTtcblxuICAgIGNvbnN0IHN0b3JlZEZlYXR1cmVzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5MT0NBTF9TVE9SQUdFX0tFWSk7XG4gICAgY29uc3QgZXhpc3RpbmdGZWF0dXJlTmFtZXM6IHN0cmluZ1tdID0gc3RvcmVkRmVhdHVyZXMgPyBKU09OLnBhcnNlKHN0b3JlZEZlYXR1cmVzKSA6IFtdO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBsb2NhbCBzdG9yYWdlIHdpdGggdW5pcXVlIGZlYXR1cmUgbmFtZXMgYW5kIHJlbW92ZSBkdXBsaWNhdGVzXG4gICAgY29uc3QgdXBkYXRlZEZlYXR1cmVOYW1lcyA9IEFycmF5LmZyb20obmV3IFNldChbLi4uZXhpc3RpbmdGZWF0dXJlTmFtZXMsIC4uLm5ld0ZlYXR1cmVOYW1lc10pKTtcblxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuTE9DQUxfU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KHVwZGF0ZWRGZWF0dXJlTmFtZXMpKTtcbiAgICB0aGlzLnNlZW5GZWF0dXJlcyQubmV4dCh1cGRhdGVkRmVhdHVyZU5hbWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIHRoZSBmZWF0dXJlcyB0byBvbmx5IGluY2x1ZGUgdGhvc2UgdGhhdCBhcmUgYXZhaWxhYmxlIGJ5IGNoZWNraW5nIHRoZSBmZWF0dXJlIHRvZ2dsZSBBUEkuXG4gICAqL1xuICBnZXRBdmFpbGFibGVGZWF0dXJlcyQoKTogT2JzZXJ2YWJsZTxCZXRhRmVhdHVyZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXMkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoZmVhdHVyZXMgPT4ge1xuICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChcbiAgICAgICAgICBmZWF0dXJlcy5tYXAoZmVhdCA9PlxuICAgICAgICAgICAgZmVhdC5rZXlcbiAgICAgICAgICAgICAgPyB0aGlzLmZlYXR1cmVDYWNoZVNlcnZpY2VcbiAgICAgICAgICAgICAgICAgIC5mZWF0dXJlRXhpc3RzKGZlYXQua2V5KVxuICAgICAgICAgICAgICAgICAgLnBpcGUobWFwKGV4aXN0cyA9PiAoZXhpc3RzID8gZmVhdCA6IGZhbHNlKSkpXG4gICAgICAgICAgICAgIDogb2YoZmVhdClcbiAgICAgICAgICApXG4gICAgICAgICkucGlwZShtYXAoZmVhdHVyZXMgPT4gZmVhdHVyZXMuZmlsdGVyKEJvb2xlYW4pKSkgYXMgT2JzZXJ2YWJsZTxCZXRhRmVhdHVyZVtdPjtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBmZWF0dXJlIG5hbWVzIHRoYXQgaGF2ZSBiZWVuIHNlZW4gYnkgdGhlIHVzZXIuIFRoaXMgaXMgcmV0cmlldmVkIGZyb20gbG9jYWwgc3RvcmFnZS5cbiAgICovXG4gIHByaXZhdGUgZ2V0U2VlbkZlYXR1cmVzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBzZWVuRmVhdHVyZXMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkxPQ0FMX1NUT1JBR0VfS0VZKTtcbiAgICByZXR1cm4gc2VlbkZlYXR1cmVzID8gSlNPTi5wYXJzZShzZWVuRmVhdHVyZXMpIDogW107XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0dXBJdGVtc09ic2VydmFibGUoKTogT2JzZXJ2YWJsZTxCZXRhRmVhdHVyZVtdPiB7XG4gICAgcmV0dXJuIGZyb21UcmlnZ2VyT25jZTxCZXRhRmVhdHVyZT4odW5kZWZpbmVkLCB0aGlzLnJlZnJlc2gkLCBbXG4gICAgICBnZXRJbmplY3RlZEhvb2tzPEJldGFGZWF0dXJlPihIT09LX1BSRVZJRVcsIHRoaXMuaW5qZWN0b3JzKSxcbiAgICAgICgpID0+IHRoaXMuZmFjdG9yaWVzLFxuICAgICAgc3RhdGVUb0ZhY3RvcnkodGhpcy5zdGF0ZSQpXG4gICAgXSkucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBtYXAoZmVhdHVyZXMgPT4gc29ydEJ5UHJpb3JpdHkoZmVhdHVyZXMpKSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcbiAgfVxufVxuIl19