@igo2/geo 17.0.0-next.5 → 17.0.0-next.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 (109) hide show
  1. package/esm2022/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +3 -3
  2. package/esm2022/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +5 -5
  3. package/esm2022/lib/catalog/catalog-library/catalog-library-item.component.mjs +3 -3
  4. package/esm2022/lib/catalog/catalog-library/catalog-library.component.mjs +3 -3
  5. package/esm2022/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +1 -1
  6. package/esm2022/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +1 -1
  7. package/esm2022/lib/datasource/shared/datasources/datasource.mjs +1 -1
  8. package/esm2022/lib/datasource/shared/datasources/feature-datasource.interface.mjs +1 -1
  9. package/esm2022/lib/datasource/shared/datasources/feature-datasource.mjs +1 -1
  10. package/esm2022/lib/datasource/shared/datasources/websocket-datasource.mjs +1 -1
  11. package/esm2022/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +1 -1
  12. package/esm2022/lib/datasource/shared/datasources/wfs-datasource.mjs +1 -1
  13. package/esm2022/lib/datasource/shared/datasources/wms-datasource.interface.mjs +1 -1
  14. package/esm2022/lib/directions/directions-buttons/directions-buttons.component.mjs +3 -3
  15. package/esm2022/lib/directions/directions-inputs/directions-inputs.component.mjs +3 -3
  16. package/esm2022/lib/directions/directions-results/directions-results.component.mjs +3 -3
  17. package/esm2022/lib/directions/shared/directions.interface.mjs +1 -1
  18. package/esm2022/lib/directions/shared/directions.utils.mjs +21 -21
  19. package/esm2022/lib/download/download-button/download-button.component.mjs +3 -3
  20. package/esm2022/lib/draw/draw/draw-shorcuts.component.mjs +7 -4
  21. package/esm2022/lib/draw/draw/draw.component.mjs +4 -4
  22. package/esm2022/lib/feature/feature-details/feature-details.component.mjs +3 -3
  23. package/esm2022/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +3 -3
  24. package/esm2022/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +3 -3
  25. package/esm2022/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +3 -3
  26. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +7 -7
  27. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +3 -3
  28. package/esm2022/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +3 -3
  29. package/esm2022/lib/filter/shared/ogc-filter.interface.mjs +1 -1
  30. package/esm2022/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +3 -3
  31. package/esm2022/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +3 -3
  32. package/esm2022/lib/filter/time-filter-button/time-filter-button.component.mjs +3 -3
  33. package/esm2022/lib/filter/time-filter-form/time-filter-form.component.mjs +7 -7
  34. package/esm2022/lib/filter/time-filter-item/time-filter-item.component.mjs +3 -3
  35. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +1 -1
  36. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +3 -3
  37. package/esm2022/lib/geometry/shared/controls/draw.mjs +1 -1
  38. package/esm2022/lib/geometry/shared/controls/slice.mjs +1 -1
  39. package/esm2022/lib/import-export/export-button/export-button.component.mjs +3 -3
  40. package/esm2022/lib/import-export/import-export/import-export.component.mjs +1 -1
  41. package/esm2022/lib/layer/layer-item/layer-item.component.mjs +3 -3
  42. package/esm2022/lib/layer/layer-legend/layer-legend.component.mjs +3 -3
  43. package/esm2022/lib/layer/layer-list/layer-list.component.mjs +5 -4
  44. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.component.mjs +3 -3
  45. package/esm2022/lib/layer/shared/layers/vector-layer.interface.mjs +1 -1
  46. package/esm2022/lib/layer/shared/layers/vector-layer.mjs +1 -1
  47. package/esm2022/lib/layer/track-feature-button/track-feature-button.component.mjs +3 -3
  48. package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +3 -3
  49. package/esm2022/lib/map/geolocate-button/geolocate-button.component.mjs +7 -7
  50. package/esm2022/lib/map/home-extent-button/home-extent-button.component.mjs +3 -3
  51. package/esm2022/lib/map/menu-button/menu-button.component.mjs +3 -3
  52. package/esm2022/lib/map/offline-button/offline-button.component.mjs +3 -3
  53. package/esm2022/lib/map/rotation-button/rotation-button.component.mjs +3 -3
  54. package/esm2022/lib/map/wake-lock-button/wake-lock-button.component.mjs +6 -6
  55. package/esm2022/lib/map/zoom-button/zoom-button.component.mjs +3 -3
  56. package/esm2022/lib/measure/measurer/measurer.component.mjs +3 -3
  57. package/esm2022/lib/metadata/metadata-button/metadata-button.component.mjs +3 -3
  58. package/esm2022/lib/query/shared/query.directive.mjs +1 -1
  59. package/esm2022/lib/query/shared/query.interfaces.mjs +1 -1
  60. package/esm2022/lib/search/search-bar/search-bar.component.mjs +3 -3
  61. package/esm2022/lib/search/search-results/search-results-add-button.component.mjs +5 -5
  62. package/esm2022/lib/search/search-results/search-results-item.component.mjs +3 -3
  63. package/esm2022/lib/search/search-selector/search-selector.component.mjs +3 -3
  64. package/esm2022/lib/search/search-settings/search-settings.component.mjs +3 -3
  65. package/esm2022/lib/search/shared/search.interfaces.mjs +1 -1
  66. package/esm2022/lib/search/shared/search.utils.mjs +2 -2
  67. package/esm2022/lib/search/shared/sources/cadastre.mjs +2 -2
  68. package/esm2022/lib/search/shared/sources/coordinates.mjs +2 -2
  69. package/esm2022/lib/search/shared/sources/icherche-icons.mjs +32 -0
  70. package/esm2022/lib/search/shared/sources/icherche.mjs +8 -3
  71. package/esm2022/lib/search/shared/sources/nominatim.mjs +2 -2
  72. package/esm2022/lib/search/shared/sources/storedqueries.mjs +3 -3
  73. package/esm2022/lib/search/shared/sources/workspace.mjs +2 -2
  74. package/esm2022/lib/style/shared/vector/conversion.utils.mjs +1 -1
  75. package/esm2022/lib/style/style-modal/drawing/style-modal-drawing.component.mjs +3 -3
  76. package/esm2022/lib/style/style-modal/layer/style-modal-layer.component.mjs +3 -3
  77. package/esm2022/lib/style/style-modal/layer-button/style-modal-layer-button.component.mjs +3 -3
  78. package/esm2022/lib/toast/toast.component.mjs +3 -3
  79. package/esm2022/lib/workspace/shared/edition-workspace.service.mjs +3 -3
  80. package/esm2022/lib/workspace/shared/workspace.utils.mjs +2 -2
  81. package/fesm2022/igo2-geo.mjs +188 -150
  82. package/fesm2022/igo2-geo.mjs.map +1 -1
  83. package/lib/catalog/catalog-browser/catalog-browser-layer.component.d.ts +1 -1
  84. package/lib/datasource/shared/datasources/arcgisrest-datasource.d.ts +2 -3
  85. package/lib/datasource/shared/datasources/cluster-datasource.interface.d.ts +2 -3
  86. package/lib/datasource/shared/datasources/datasource.d.ts +1 -2
  87. package/lib/datasource/shared/datasources/feature-datasource.d.ts +2 -3
  88. package/lib/datasource/shared/datasources/feature-datasource.interface.d.ts +2 -3
  89. package/lib/datasource/shared/datasources/websocket-datasource.d.ts +1 -2
  90. package/lib/datasource/shared/datasources/wfs-datasource.d.ts +2 -3
  91. package/lib/datasource/shared/datasources/wfs-datasource.interface.d.ts +1 -2
  92. package/lib/datasource/shared/datasources/wms-datasource.interface.d.ts +1 -2
  93. package/lib/directions/shared/directions.interface.d.ts +2 -9
  94. package/lib/draw/draw/draw-shorcuts.component.d.ts +2 -0
  95. package/lib/filter/shared/ogc-filter.interface.d.ts +1 -2
  96. package/lib/geometry/geometry-form-field/geometry-form-field-input.component.d.ts +1 -2
  97. package/lib/geometry/shared/controls/draw.d.ts +4 -4
  98. package/lib/geometry/shared/controls/slice.d.ts +4 -4
  99. package/lib/layer/layer-list/layer-list.component.d.ts +2 -0
  100. package/lib/layer/shared/layers/vector-layer.d.ts +3 -4
  101. package/lib/layer/shared/layers/vector-layer.interface.d.ts +1 -2
  102. package/lib/query/shared/query.interfaces.d.ts +1 -2
  103. package/lib/search/search-results/search-results-add-button.component.d.ts +1 -1
  104. package/lib/search/shared/search.interfaces.d.ts +12 -10
  105. package/lib/search/shared/sources/icherche-icons.d.ts +7 -0
  106. package/lib/style/shared/vector/conversion.utils.d.ts +2 -3
  107. package/lib/workspace/shared/edition-workspace.service.d.ts +2 -1
  108. package/package.json +6 -6
  109. package/style/style.css +2 -1
@@ -271,7 +271,7 @@ export class FeatureDetailsComponent {
271
271
  }
272
272
  }
273
273
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: FeatureDetailsComponent, deps: [{ token: i1.HttpClient }, { token: i0.ChangeDetectorRef }, { token: i2.DomSanitizer }, { token: i3.NetworkService }, { token: i4.MessageService }, { token: i5.ConfigService }], target: i0.ɵɵFactoryTarget.Component });
274
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: FeatureDetailsComponent, isStandalone: true, selector: "igo-feature-details", inputs: { source: "source", map: "map", toolbox: "toolbox", feature: "feature" }, outputs: { routeEvent: "routeEvent", selectFeature: "selectFeature", htmlDisplayEvent: "htmlDisplayEvent" }, ngImport: i0, template: "<table\n class=\"igo-striped mat-typography\"\n *ngIf=\"\n ready &&\n feature &&\n isObject(feature.properties) &&\n feature.properties.target !== 'iframe'\n \"\n>\n <tbody>\n <tr *ngFor=\"let property of filterFeatureProperties(feature) | keyvalue\">\n <td\n *ngIf=\"feature.properties.target === '_blank' && property.key === 'url'\"\n >\n <mat-icon matListItemIcon svgIcon=\"{{ icon }}\"></mat-icon>\n </td>\n\n <td\n *ngIf=\"feature.properties.target === '_blank' && property.key === 'url'\"\n >\n <a\n href=\"{{ property.value }}\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {{ 'igo.geo.targetHtmlUrl' | translate }} {{ title }}</a\n >\n <button\n class=\"copyClipboard\"\n mat-icon-button\n (click)=\"copyTextToClipboard(property.value)\"\n >\n <mat-icon svgIcon=\"content-copy\"></mat-icon>\n </button>\n </td>\n\n <td id=\"keyValue\" *ngIf=\"feature.properties.target === undefined\">\n {{ property.key }}\n </td>\n\n <td\n *ngIf=\"\n feature.properties.target === undefined &&\n !isObject(property.value) &&\n !isUrl(property.value) &&\n !isEmbeddedLink(property.value)\n \"\n [innerHTML]=\"property.value\"\n ></td>\n\n <td\n *ngIf=\"\n feature.properties.target === undefined &&\n isEmbeddedLink(property.value)\n \"\n >\n <u\n [ngStyle]=\"{ cursor: 'pointer', color: 'blue' }\"\n (click)=\"openSecureUrl(property.value)\"\n >{{ getEmbeddedLinkText(property.value) }}</u\n >\n </td>\n\n <td\n *ngIf=\"\n feature.properties.target === undefined &&\n !isObject(property.value) &&\n (isDoc(property.value) || isUrl(property.value)) &&\n !isImg(property.value)\n \"\n >\n <u\n [ngStyle]=\"{ cursor: 'pointer', color: 'blue' }\"\n (click)=\"openSecureUrl(property.value)\"\n >{{ 'igo.geo.targetHtmlUrl' | translate }}</u\n >\n <button\n class=\"copyClipboard\"\n mat-icon-button\n (click)=\"copyTextToClipboard(property.value)\"\n >\n <mat-icon svgIcon=\"content-copy\"></mat-icon>\n </button>\n </td>\n\n <td\n *ngIf=\"\n feature.properties.target === undefined &&\n !isObject(property.value) &&\n isUrl(property.value) &&\n isImg(property.value)\n \"\n >\n <a\n href=\"{{ property.value }}\"\n target=\"_blank\"\n (click)=\"openSecureUrl(property.value)\"\n rel=\"noopener noreferrer\"\n >\n <img\n igoImageError\n src=\"{{ property.value | secureImage | async }}\"\n width=\"225\"\n height=\"auto\"\n />\n </a>\n </td>\n\n <td\n *ngIf=\"\n feature.properties.target === undefined && isObject(property.value)\n \"\n [innerHTML]=\"property.value | json\"\n ></td>\n </tr>\n </tbody>\n</table>\n\n<iframe\n *ngIf=\"isHtmlDisplay()\"\n [srcdoc]=\"htmlSanitizer(feature.properties)\"\n [src]=\"urlSanitizer(feature.properties.url)\"\n></iframe>\n", styles: ["table{width:100%}table td{padding:5px}#keyValue{width:30%}table ::ng-deep .routing{cursor:pointer}iframe{height:calc(100% - 4px);width:100%;border:0}.copyClipboard{border:none;background:transparent;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: ImageErrorDirective, selector: "[igoImageError]", inputs: ["errorImageUrl", "hideError"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: JsonPipe, name: "json" }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "pipe", type: SecureImagePipe, name: "secureImage" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
274
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: FeatureDetailsComponent, isStandalone: true, selector: "igo-feature-details", inputs: { source: "source", map: "map", toolbox: "toolbox", feature: "feature" }, outputs: { routeEvent: "routeEvent", selectFeature: "selectFeature", htmlDisplayEvent: "htmlDisplayEvent" }, ngImport: i0, template: "<table\n class=\"igo-striped mat-typography\"\n *ngIf=\"\n ready &&\n feature &&\n isObject(feature.properties) &&\n feature.properties.target !== 'iframe'\n \"\n>\n <tbody>\n <tr *ngFor=\"let property of filterFeatureProperties(feature) | keyvalue\">\n <td\n *ngIf=\"feature.properties.target === '_blank' && property.key === 'url'\"\n >\n <mat-icon matListItemIcon>{{ icon }}</mat-icon>\n </td>\n\n <td\n *ngIf=\"feature.properties.target === '_blank' && property.key === 'url'\"\n >\n <a\n href=\"{{ property.value }}\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {{ 'igo.geo.targetHtmlUrl' | translate }} {{ title }}</a\n >\n <button\n class=\"copyClipboard\"\n mat-icon-button\n (click)=\"copyTextToClipboard(property.value)\"\n >\n <mat-icon>content_copy</mat-icon>\n </button>\n </td>\n\n <td id=\"keyValue\" *ngIf=\"feature.properties.target === undefined\">\n {{ property.key }}\n </td>\n\n <td\n *ngIf=\"\n feature.properties.target === undefined &&\n !isObject(property.value) &&\n !isUrl(property.value) &&\n !isEmbeddedLink(property.value)\n \"\n [innerHTML]=\"property.value\"\n ></td>\n\n <td\n *ngIf=\"\n feature.properties.target === undefined &&\n isEmbeddedLink(property.value)\n \"\n >\n <u\n [ngStyle]=\"{ cursor: 'pointer', color: 'blue' }\"\n (click)=\"openSecureUrl(property.value)\"\n >{{ getEmbeddedLinkText(property.value) }}</u\n >\n </td>\n\n <td\n *ngIf=\"\n feature.properties.target === undefined &&\n !isObject(property.value) &&\n (isDoc(property.value) || isUrl(property.value)) &&\n !isImg(property.value)\n \"\n >\n <u\n [ngStyle]=\"{ cursor: 'pointer', color: 'blue' }\"\n (click)=\"openSecureUrl(property.value)\"\n >{{ 'igo.geo.targetHtmlUrl' | translate }}</u\n >\n <button\n class=\"copyClipboard\"\n mat-icon-button\n (click)=\"copyTextToClipboard(property.value)\"\n >\n <mat-icon>content_copy</mat-icon>\n </button>\n </td>\n\n <td\n *ngIf=\"\n feature.properties.target === undefined &&\n !isObject(property.value) &&\n isUrl(property.value) &&\n isImg(property.value)\n \"\n >\n <a\n href=\"{{ property.value }}\"\n target=\"_blank\"\n (click)=\"openSecureUrl(property.value)\"\n rel=\"noopener noreferrer\"\n >\n <img\n igoImageError\n src=\"{{ property.value | secureImage | async }}\"\n width=\"225\"\n height=\"auto\"\n />\n </a>\n </td>\n\n <td\n *ngIf=\"\n feature.properties.target === undefined && isObject(property.value)\n \"\n [innerHTML]=\"property.value | json\"\n ></td>\n </tr>\n </tbody>\n</table>\n\n<iframe\n *ngIf=\"isHtmlDisplay()\"\n [srcdoc]=\"htmlSanitizer(feature.properties)\"\n [src]=\"urlSanitizer(feature.properties.url)\"\n></iframe>\n", styles: ["table{width:100%}table td{padding:5px}#keyValue{width:30%}table ::ng-deep .routing{cursor:pointer}iframe{height:calc(100% - 4px);width:100%;border:0}.copyClipboard{border:none;background:transparent;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: ImageErrorDirective, selector: "[igoImageError]", inputs: ["errorImageUrl", "hideError"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: JsonPipe, name: "json" }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "pipe", type: SecureImagePipe, name: "secureImage" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
275
275
  }
276
276
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: FeatureDetailsComponent, decorators: [{
277
277
  type: Component,
@@ -286,7 +286,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
286
286
  KeyValuePipe,
287
287
  TranslateModule,
288
288
  SecureImagePipe
289
- ], template: "<table\n class=\"igo-striped mat-typography\"\n *ngIf=\"\n ready &&\n feature &&\n isObject(feature.properties) &&\n feature.properties.target !== 'iframe'\n \"\n>\n <tbody>\n <tr *ngFor=\"let property of filterFeatureProperties(feature) | keyvalue\">\n <td\n *ngIf=\"feature.properties.target === '_blank' && property.key === 'url'\"\n >\n <mat-icon matListItemIcon svgIcon=\"{{ icon }}\"></mat-icon>\n </td>\n\n <td\n *ngIf=\"feature.properties.target === '_blank' && property.key === 'url'\"\n >\n <a\n href=\"{{ property.value }}\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {{ 'igo.geo.targetHtmlUrl' | translate }} {{ title }}</a\n >\n <button\n class=\"copyClipboard\"\n mat-icon-button\n (click)=\"copyTextToClipboard(property.value)\"\n >\n <mat-icon svgIcon=\"content-copy\"></mat-icon>\n </button>\n </td>\n\n <td id=\"keyValue\" *ngIf=\"feature.properties.target === undefined\">\n {{ property.key }}\n </td>\n\n <td\n *ngIf=\"\n feature.properties.target === undefined &&\n !isObject(property.value) &&\n !isUrl(property.value) &&\n !isEmbeddedLink(property.value)\n \"\n [innerHTML]=\"property.value\"\n ></td>\n\n <td\n *ngIf=\"\n feature.properties.target === undefined &&\n isEmbeddedLink(property.value)\n \"\n >\n <u\n [ngStyle]=\"{ cursor: 'pointer', color: 'blue' }\"\n (click)=\"openSecureUrl(property.value)\"\n >{{ getEmbeddedLinkText(property.value) }}</u\n >\n </td>\n\n <td\n *ngIf=\"\n feature.properties.target === undefined &&\n !isObject(property.value) &&\n (isDoc(property.value) || isUrl(property.value)) &&\n !isImg(property.value)\n \"\n >\n <u\n [ngStyle]=\"{ cursor: 'pointer', color: 'blue' }\"\n (click)=\"openSecureUrl(property.value)\"\n >{{ 'igo.geo.targetHtmlUrl' | translate }}</u\n >\n <button\n class=\"copyClipboard\"\n mat-icon-button\n (click)=\"copyTextToClipboard(property.value)\"\n >\n <mat-icon svgIcon=\"content-copy\"></mat-icon>\n </button>\n </td>\n\n <td\n *ngIf=\"\n feature.properties.target === undefined &&\n !isObject(property.value) &&\n isUrl(property.value) &&\n isImg(property.value)\n \"\n >\n <a\n href=\"{{ property.value }}\"\n target=\"_blank\"\n (click)=\"openSecureUrl(property.value)\"\n rel=\"noopener noreferrer\"\n >\n <img\n igoImageError\n src=\"{{ property.value | secureImage | async }}\"\n width=\"225\"\n height=\"auto\"\n />\n </a>\n </td>\n\n <td\n *ngIf=\"\n feature.properties.target === undefined && isObject(property.value)\n \"\n [innerHTML]=\"property.value | json\"\n ></td>\n </tr>\n </tbody>\n</table>\n\n<iframe\n *ngIf=\"isHtmlDisplay()\"\n [srcdoc]=\"htmlSanitizer(feature.properties)\"\n [src]=\"urlSanitizer(feature.properties.url)\"\n></iframe>\n", styles: ["table{width:100%}table td{padding:5px}#keyValue{width:30%}table ::ng-deep .routing{cursor:pointer}iframe{height:calc(100% - 4px);width:100%;border:0}.copyClipboard{border:none;background:transparent;cursor:pointer}\n"] }]
289
+ ], template: "<table\n class=\"igo-striped mat-typography\"\n *ngIf=\"\n ready &&\n feature &&\n isObject(feature.properties) &&\n feature.properties.target !== 'iframe'\n \"\n>\n <tbody>\n <tr *ngFor=\"let property of filterFeatureProperties(feature) | keyvalue\">\n <td\n *ngIf=\"feature.properties.target === '_blank' && property.key === 'url'\"\n >\n <mat-icon matListItemIcon>{{ icon }}</mat-icon>\n </td>\n\n <td\n *ngIf=\"feature.properties.target === '_blank' && property.key === 'url'\"\n >\n <a\n href=\"{{ property.value }}\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {{ 'igo.geo.targetHtmlUrl' | translate }} {{ title }}</a\n >\n <button\n class=\"copyClipboard\"\n mat-icon-button\n (click)=\"copyTextToClipboard(property.value)\"\n >\n <mat-icon>content_copy</mat-icon>\n </button>\n </td>\n\n <td id=\"keyValue\" *ngIf=\"feature.properties.target === undefined\">\n {{ property.key }}\n </td>\n\n <td\n *ngIf=\"\n feature.properties.target === undefined &&\n !isObject(property.value) &&\n !isUrl(property.value) &&\n !isEmbeddedLink(property.value)\n \"\n [innerHTML]=\"property.value\"\n ></td>\n\n <td\n *ngIf=\"\n feature.properties.target === undefined &&\n isEmbeddedLink(property.value)\n \"\n >\n <u\n [ngStyle]=\"{ cursor: 'pointer', color: 'blue' }\"\n (click)=\"openSecureUrl(property.value)\"\n >{{ getEmbeddedLinkText(property.value) }}</u\n >\n </td>\n\n <td\n *ngIf=\"\n feature.properties.target === undefined &&\n !isObject(property.value) &&\n (isDoc(property.value) || isUrl(property.value)) &&\n !isImg(property.value)\n \"\n >\n <u\n [ngStyle]=\"{ cursor: 'pointer', color: 'blue' }\"\n (click)=\"openSecureUrl(property.value)\"\n >{{ 'igo.geo.targetHtmlUrl' | translate }}</u\n >\n <button\n class=\"copyClipboard\"\n mat-icon-button\n (click)=\"copyTextToClipboard(property.value)\"\n >\n <mat-icon>content_copy</mat-icon>\n </button>\n </td>\n\n <td\n *ngIf=\"\n feature.properties.target === undefined &&\n !isObject(property.value) &&\n isUrl(property.value) &&\n isImg(property.value)\n \"\n >\n <a\n href=\"{{ property.value }}\"\n target=\"_blank\"\n (click)=\"openSecureUrl(property.value)\"\n rel=\"noopener noreferrer\"\n >\n <img\n igoImageError\n src=\"{{ property.value | secureImage | async }}\"\n width=\"225\"\n height=\"auto\"\n />\n </a>\n </td>\n\n <td\n *ngIf=\"\n feature.properties.target === undefined && isObject(property.value)\n \"\n [innerHTML]=\"property.value | json\"\n ></td>\n </tr>\n </tbody>\n</table>\n\n<iframe\n *ngIf=\"isHtmlDisplay()\"\n [srcdoc]=\"htmlSanitizer(feature.properties)\"\n [src]=\"urlSanitizer(feature.properties.url)\"\n></iframe>\n", styles: ["table{width:100%}table td{padding:5px}#keyValue{width:30%}table ::ng-deep .routing{cursor:pointer}iframe{height:calc(100% - 4px);width:100%;border:0}.copyClipboard{border:none;background:transparent;cursor:pointer}\n"] }]
290
290
  }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i0.ChangeDetectorRef }, { type: i2.DomSanitizer }, { type: i3.NetworkService }, { type: i4.MessageService }, { type: i5.ConfigService }], propDecorators: { source: [{
291
291
  type: Input
292
292
  }], map: [{
@@ -302,4 +302,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
302
302
  }], htmlDisplayEvent: [{
303
303
  type: Output
304
304
  }] } });
305
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1kZXRhaWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZlYXR1cmUvZmVhdHVyZS1kZXRhaWxzL2ZlYXR1cmUtZGV0YWlscy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9mZWF0dXJlL2ZlYXR1cmUtZGV0YWlscy9mZWF0dXJlLWRldGFpbHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxRQUFRLEVBQ1IsWUFBWSxFQUNaLEtBQUssRUFDTCxJQUFJLEVBQ0osT0FBTyxFQUNSLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBbUIsTUFBTSwyQkFBMkIsQ0FBQztBQUUxRSxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGVBQWUsRUFDZixhQUFhLEVBQ2IsY0FBYyxFQUNmLE1BQU0sY0FBYyxDQUFDO0FBRXRCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFtQixjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXhDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztB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O1lBQ0wsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQUM7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsbUJBQW1CLENBQUMsS0FBYTtRQUMvQixNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQzVELENBQUM7SUFDSCxDQUFDO3VHQS9SVSx1QkFBdUI7MkZBQXZCLHVCQUF1Qiw4UUM3RHBDLHMxR0EySEEsa1JEMUVJLElBQUksNkZBQ0osS0FBSyxrSEFDTCxhQUFhLG9MQUNiLE9BQU8sMkVBQ1AsbUJBQW1CLCtGQUNuQixTQUFTLHlDQUNULFFBQVEsd0NBQ1IsWUFBWSxnREFDWixlQUFlLHVGQUNmLGVBQWU7OzJGQUdOLHVCQUF1QjtrQkFuQm5DLFNBQVM7K0JBQ0UscUJBQXFCLG1CQUdkLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNQLElBQUk7d0JBQ0osS0FBSzt3QkFDTCxhQUFhO3dCQUNiLE9BQU87d0JBQ1AsbUJBQW1CO3dCQUNuQixTQUFTO3dCQUNULFFBQVE7d0JBQ1IsWUFBWTt3QkFDWixlQUFlO3dCQUNmLGVBQWU7cUJBQ2hCO2dPQVFHLE1BQU07c0JBRFQsS0FBSztnQkFTRyxHQUFHO3NCQUFYLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQUdGLE9BQU87c0JBRFYsS0FBSztnQkFhSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQXN5bmNQaXBlLFxuICBKc29uUGlwZSxcbiAgS2V5VmFsdWVQaXBlLFxuICBOZ0ZvcixcbiAgTmdJZixcbiAgTmdTdHlsZVxufSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlUmVzb3VyY2VVcmwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuaW1wb3J0IHtcbiAgSW1hZ2VFcnJvckRpcmVjdGl2ZSxcbiAgU2VjdXJlSW1hZ2VQaXBlLFxuICBnZXRFbnRpdHlJY29uLFxuICBnZXRFbnRpdHlUaXRsZVxufSBmcm9tICdAaWdvMi9jb21tb24nO1xuaW1wb3J0IHR5cGUgeyBUb29sYm94IH0gZnJvbSAnQGlnbzIvY29tbW9uJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlL2NvbmZpZyc7XG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUvbWVzc2FnZSc7XG5pbXBvcnQgeyBDb25uZWN0aW9uU3RhdGUsIE5ldHdvcmtTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9uZXR3b3JrJztcbmltcG9ydCB7IENsaXBib2FyZCB9IGZyb20gJ0BpZ28yL3V0aWxzJztcblxuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IElnb01hcCB9IGZyb20gJy4uLy4uL21hcC9zaGFyZWQvbWFwJztcbmltcG9ydCB7IFNlYXJjaFNvdXJjZSB9IGZyb20gJy4uLy4uL3NlYXJjaC9zaGFyZWQvc291cmNlcy9zb3VyY2UnO1xuaW1wb3J0IHsgRmVhdHVyZSB9IGZyb20gJy4uL3NoYXJlZCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2lnby1mZWF0dXJlLWRldGFpbHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZmVhdHVyZS1kZXRhaWxzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmVhdHVyZS1kZXRhaWxzLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTmdJZixcbiAgICBOZ0ZvcixcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE5nU3R5bGUsXG4gICAgSW1hZ2VFcnJvckRpcmVjdGl2ZSxcbiAgICBBc3luY1BpcGUsXG4gICAgSnNvblBpcGUsXG4gICAgS2V5VmFsdWVQaXBlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBTZWN1cmVJbWFnZVBpcGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBGZWF0dXJlRGV0YWlsc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBzdGF0ZTogQ29ubmVjdGlvblN0YXRlO1xuICBwcml2YXRlIHVuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHJlYWR5ID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgZ2V0IHNvdXJjZSgpOiBTZWFyY2hTb3VyY2Uge1xuICAgIHJldHVybiB0aGlzLl9zb3VyY2U7XG4gIH1cbiAgc2V0IHNvdXJjZSh2YWx1ZTogU2VhcmNoU291cmNlKSB7XG4gICAgdGhpcy5fc291cmNlID0gdmFsdWU7XG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBASW5wdXQoKSBtYXA6IElnb01hcDtcblxuICBASW5wdXQoKSB0b29sYm94OiBUb29sYm94O1xuXG4gIEBJbnB1dCgpXG4gIGdldCBmZWF0dXJlKCk6IEZlYXR1cmUge1xuICAgIHJldHVybiB0aGlzLl9mZWF0dXJlO1xuICB9XG4gIHNldCBmZWF0dXJlKHZhbHVlOiBGZWF0dXJlKSB7XG4gICAgdGhpcy5fZmVhdHVyZSA9IHZhbHVlO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuc2VsZWN0RmVhdHVyZS5lbWl0KCk7XG4gIH1cblxuICBwcml2YXRlIF9mZWF0dXJlOiBGZWF0dXJlO1xuICBwcml2YXRlIF9zb3VyY2U6IFNlYXJjaFNvdXJjZTtcblxuICBAT3V0cHV0KCkgcm91dGVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdEZlYXR1cmUgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBodG1sRGlzcGxheUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldCB0aXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBnZXRFbnRpdHlUaXRsZSh0aGlzLmZlYXR1cmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0IGljb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZ2V0RW50aXR5SWNvbih0aGlzLmZlYXR1cmUpIHx8ICdsaW5rJztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgbmV0d29ya1NlcnZpY2U6IE5ldHdvcmtTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZVxuICApIHtcbiAgICB0aGlzLm5ldHdvcmtTZXJ2aWNlXG4gICAgICAuY3VycmVudFN0YXRlKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpXG4gICAgICAuc3Vic2NyaWJlKChzdGF0ZTogQ29ubmVjdGlvblN0YXRlKSA9PiB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5yZWFkeSA9IHRydWU7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlJC5uZXh0KCk7XG4gICAgdGhpcy51bnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHVybFNhbml0aXplcih2YWx1ZSk6IFNhZmVSZXNvdXJjZVVybCB7XG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh2YWx1ZSk7XG4gIH1cblxuICBpc0h0bWxEaXNwbGF5KCk6IGJvb2xlYW4ge1xuICAgIGlmIChcbiAgICAgIHRoaXMuZmVhdHVyZSAmJlxuICAgICAgdGhpcy5pc09iamVjdCh0aGlzLmZlYXR1cmUucHJvcGVydGllcykgJiZcbiAgICAgIHRoaXMuZmVhdHVyZS5wcm9wZXJ0aWVzLnRhcmdldCA9PT0gJ2lmcmFtZSdcbiAgICApIHtcbiAgICAgIHRoaXMuaHRtbERpc3BsYXlFdmVudC5lbWl0KHRydWUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaHRtbERpc3BsYXlFdmVudC5lbWl0KGZhbHNlKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBodG1sU2FuaXRpemVyKHZhbHVlKTogU2FmZVJlc291cmNlVXJsIHtcbiAgICBpZiAoIXZhbHVlLmJvZHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVnZXhCYXNlID0gLzxiYXNlIGhyZWY9XCJbXFx3OlxcL1xcLl0rXCI+LztcbiAgICBpZiAoIXJlZ2V4QmFzZS50ZXN0KHZhbHVlLmJvZHkpKSB7XG4gICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHZhbHVlLnVybCwgd2luZG93LmxvY2F0aW9uLm9yaWdpbik7XG4gICAgICB2YWx1ZS5ib2R5ID0gdmFsdWUuYm9keS5yZXBsYWNlKFxuICAgICAgICAnPGhlYWQ+JyxcbiAgICAgICAgYDxoZWFkPjxiYXNlIGhyZWY9XCIke3VybC5vcmlnaW59XCI+YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwodmFsdWUuYm9keSk7XG4gIH1cblxuICBpc09iamVjdCh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnO1xuICB9XG5cbiAgb3BlblNlY3VyZVVybCh2YWx1ZSkge1xuICAgIGxldCB1cmw6IHN0cmluZztcbiAgICBjb25zdCByZWdleERlcG90ID0gbmV3IFJlZ0V4cChcbiAgICAgIHRoaXMuY29uZmlnU2VydmljZT8uZ2V0Q29uZmlnKCdkZXBvdC51cmwnKSArICcuKj8oPz1cInwkKSdcbiAgICApO1xuXG4gICAgaWYgKHJlZ2V4RGVwb3QudGVzdCh2YWx1ZSkpIHtcbiAgICAgIHVybCA9IHZhbHVlLm1hdGNoKHJlZ2V4RGVwb3QpWzBdO1xuXG4gICAgICB0aGlzLmh0dHBcbiAgICAgICAgLmdldCh1cmwsIHtcbiAgICAgICAgICByZXNwb25zZVR5cGU6ICdibG9iJ1xuICAgICAgICB9KVxuICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgIChkb2NPckltYWdlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWxlVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChkb2NPckltYWdlKTtcbiAgICAgICAgICAgIHdpbmRvdy5vcGVuKGZpbGVVcmwsICdfYmxhbmsnKTtcbiAgICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcihcbiAgICAgICAgICAgICAgJ2lnby5nZW8udGFyZ2V0SHRtbFVybFVuYXV0aG9yaXplZCcsXG4gICAgICAgICAgICAgICdpZ28uZ2VvLnRhcmdldEh0bWxVcmxVbmF1dGhvcml6ZWRUaXRsZSdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgdXJsID0gdmFsdWU7XG4gICAgICBpZiAodGhpcy5pc0VtYmVkZGVkTGluayh2YWx1ZSkpIHtcbiAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBkaXYuaW5uZXJIVE1MID0gdmFsdWU7XG4gICAgICAgIHVybCA9IGRpdi5jaGlsZHJlblswXS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtcbiAgICAgIH1cbiAgICAgIHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpO1xuICAgIH1cbiAgfVxuXG4gIGlzVXJsKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IHJlZ2V4ID0gL15odHRwcz86XFwvXFwvLztcbiAgICAgIHJldHVybiByZWdleC50ZXN0KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBpc0RvYyh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAodGhpcy5pc1VybCh2YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgcmVnZXggPSAvKHBkZnxkb2N4P3x4bHN4PykkLztcbiAgICAgICAgcmV0dXJuIHJlZ2V4LnRlc3QodmFsdWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNJbWcodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKHRoaXMuaXNVcmwodmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gLyhqcGU/Z3xwbmd8Z2lmKSQvO1xuICAgICAgICByZXR1cm4gcmVnZXgudGVzdCh2YWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpc0VtYmVkZGVkTGluayh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBtYXRjaFJlZ2V4ID0gLzxhL2c7XG4gICAgICBjb25zdCBtYXRjaCA9IHZhbHVlLm1hdGNoKG1hdGNoUmVnZXgpIHx8IFtdO1xuICAgICAgY29uc3QgY291bnQgPSBtYXRjaC5sZW5ndGg7XG4gICAgICBpZiAoY291bnQgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldEVtYmVkZGVkTGlua1RleHQodmFsdWUpIHtcbiAgICBjb25zdCByZWdleCA9IC8oPzo+KS4qPyg/PTx8JCkvO1xuICAgIGxldCB0ZXh0ID0gdmFsdWUubWF0Y2gocmVnZXgpWzBdIGFzIHN0cmluZztcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8+L2csICcnKTtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIGZpbHRlckZlYXR1cmVQcm9wZXJ0aWVzKGZlYXR1cmUpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICBjb25zdCBhbGxvd2VkRmllbGRzQW5kQWxpYXMgPSBmZWF0dXJlLm1ldGEgPyBmZWF0dXJlLm1ldGEuYWxpYXMgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IHt9O1xuICAgIGxldCBvZmZsaW5lQnV0dG9uU3RhdGU7XG5cbiAgICBpZiAodGhpcy5tYXApIHtcbiAgICAgIHRoaXMubWFwLmZvcmNlZE9mZmxpbmUkXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHN0YXRlKSA9PiB7XG4gICAgICAgICAgb2ZmbGluZUJ1dHRvblN0YXRlID0gc3RhdGU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGZlYXR1cmUucHJvcGVydGllcyAmJlxuICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzLlJvdXRlICYmXG4gICAgICB0aGlzLnRvb2xib3ggJiZcbiAgICAgICF0aGlzLnRvb2xib3guZ2V0VG9vbCgnZGlyZWN0aW9ucycpXG4gICAgKSB7XG4gICAgICBkZWxldGUgZmVhdHVyZS5wcm9wZXJ0aWVzLlJvdXRlO1xuICAgIH1cblxuICAgIGlmIChhbGxvd2VkRmllbGRzQW5kQWxpYXMpIHtcbiAgICAgIE9iamVjdC5rZXlzKGFsbG93ZWRGaWVsZHNBbmRBbGlhcykuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgcHJvcGVydGllc1thbGxvd2VkRmllbGRzQW5kQWxpYXNbZmllbGRdXSA9IGZlYXR1cmUucHJvcGVydGllc1tmaWVsZF07XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgIH0gZWxzZSBpZiAob2ZmbGluZUJ1dHRvblN0YXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghb2ZmbGluZUJ1dHRvblN0YXRlKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLnN0YXRlLmNvbm5lY3Rpb24gJiZcbiAgICAgICAgICBmZWF0dXJlLm1ldGEgJiZcbiAgICAgICAgICBmZWF0dXJlLm1ldGEuZXhjbHVkZUF0dHJpYnV0ZVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBleGNsdWRlQXR0cmlidXRlID0gZmVhdHVyZS5tZXRhLmV4Y2x1ZGVBdHRyaWJ1dGU7XG4gICAgICAgICAgZXhjbHVkZUF0dHJpYnV0ZS5mb3JFYWNoKChhdHRyaWJ1dGUpID0+IHtcbiAgICAgICAgICAgIGRlbGV0ZSBmZWF0dXJlLnByb3BlcnRpZXNbYXR0cmlidXRlXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAhdGhpcy5zdGF0ZS5jb25uZWN0aW9uICYmXG4gICAgICAgICAgZmVhdHVyZS5tZXRhICYmXG4gICAgICAgICAgZmVhdHVyZS5tZXRhLmV4Y2x1ZGVBdHRyaWJ1dGVPZmZsaW5lXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGV4Y2x1ZGVBdHRyaWJ1dGVPZmZsaW5lID0gZmVhdHVyZS5tZXRhLmV4Y2x1ZGVBdHRyaWJ1dGVPZmZsaW5lO1xuICAgICAgICAgIGV4Y2x1ZGVBdHRyaWJ1dGVPZmZsaW5lLmZvckVhY2goKGF0dHJpYnV0ZSkgPT4ge1xuICAgICAgICAgICAgZGVsZXRlIGZlYXR1cmUucHJvcGVydGllc1thdHRyaWJ1dGVdO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZmVhdHVyZS5tZXRhICYmIGZlYXR1cmUubWV0YS5leGNsdWRlQXR0cmlidXRlT2ZmbGluZSkge1xuICAgICAgICAgIGNvbnN0IGV4Y2x1ZGVBdHRyaWJ1dGVPZmZsaW5lID0gZmVhdHVyZS5tZXRhLmV4Y2x1ZGVBdHRyaWJ1dGVPZmZsaW5lO1xuICAgICAgICAgIGV4Y2x1ZGVBdHRyaWJ1dGVPZmZsaW5lLmZvckVhY2goKGF0dHJpYnV0ZSkgPT4ge1xuICAgICAgICAgICAgZGVsZXRlIGZlYXR1cmUucHJvcGVydGllc1thdHRyaWJ1dGVdO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5zdGF0ZS5jb25uZWN0aW9uICYmXG4gICAgICAgIGZlYXR1cmUubWV0YSAmJlxuICAgICAgICBmZWF0dXJlLm1ldGEuZXhjbHVkZUF0dHJpYnV0ZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGV4Y2x1ZGVBdHRyaWJ1dGUgPSBmZWF0dXJlLm1ldGEuZXhjbHVkZUF0dHJpYnV0ZTtcbiAgICAgICAgZXhjbHVkZUF0dHJpYnV0ZS5mb3JFYWNoKChhdHRyaWJ1dGUpID0+IHtcbiAgICAgICAgICBkZWxldGUgZmVhdHVyZS5wcm9wZXJ0aWVzW2F0dHJpYnV0ZV07XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgIXRoaXMuc3RhdGUuY29ubmVjdGlvbiAmJlxuICAgICAgICBmZWF0dXJlLm1ldGEgJiZcbiAgICAgICAgZmVhdHVyZS5tZXRhLmV4Y2x1ZGVBdHRyaWJ1dGVPZmZsaW5lXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgZXhjbHVkZUF0dHJpYnV0ZU9mZmxpbmUgPSBmZWF0dXJlLm1ldGEuZXhjbHVkZUF0dHJpYnV0ZU9mZmxpbmU7XG4gICAgICAgIGV4Y2x1ZGVBdHRyaWJ1dGVPZmZsaW5lLmZvckVhY2goKGF0dHJpYnV0ZSkgPT4ge1xuICAgICAgICAgIGRlbGV0ZSBmZWF0dXJlLnByb3BlcnRpZXNbYXR0cmlidXRlXTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmZWF0dXJlLnByb3BlcnRpZXM7XG4gIH1cblxuICAvKipcbiAgICogQ29weSB0aGUgdXJsIHRvIGEgY2xpcGJvYXJkXG4gICAqL1xuICBjb3B5VGV4dFRvQ2xpcGJvYXJkKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBzdWNjZXNzZnVsID0gQ2xpcGJvYXJkLmNvcHkodmFsdWUpO1xuICAgIGlmIChzdWNjZXNzZnVsKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnN1Y2Nlc3MoJ2lnby5nZW8ucXVlcnkubGluay5tZXNzYWdlJyk7XG4gICAgfVxuICB9XG59XG4iLCI8dGFibGVcbiAgY2xhc3M9XCJpZ28tc3RyaXBlZCBtYXQtdHlwb2dyYXBoeVwiXG4gICpuZ0lmPVwiXG4gICAgcmVhZHkgJiZcbiAgICBmZWF0dXJlICYmXG4gICAgaXNPYmplY3QoZmVhdHVyZS5wcm9wZXJ0aWVzKSAmJlxuICAgIGZlYXR1cmUucHJvcGVydGllcy50YXJnZXQgIT09ICdpZnJhbWUnXG4gIFwiXG4+XG4gIDx0Ym9keT5cbiAgICA8dHIgKm5nRm9yPVwibGV0IHByb3BlcnR5IG9mIGZpbHRlckZlYXR1cmVQcm9wZXJ0aWVzKGZlYXR1cmUpIHwga2V5dmFsdWVcIj5cbiAgICAgIDx0ZFxuICAgICAgICAqbmdJZj1cImZlYXR1cmUucHJvcGVydGllcy50YXJnZXQgPT09ICdfYmxhbmsnICYmIHByb3BlcnR5LmtleSA9PT0gJ3VybCdcIlxuICAgICAgPlxuICAgICAgICA8bWF0LWljb24gbWF0TGlzdEl0ZW1JY29uIHN2Z0ljb249XCJ7eyBpY29uIH19XCI+PC9tYXQtaWNvbj5cbiAgICAgIDwvdGQ+XG5cbiAgICAgIDx0ZFxuICAgICAgICAqbmdJZj1cImZlYXR1cmUucHJvcGVydGllcy50YXJnZXQgPT09ICdfYmxhbmsnICYmIHByb3BlcnR5LmtleSA9PT0gJ3VybCdcIlxuICAgICAgPlxuICAgICAgICA8YVxuICAgICAgICAgIGhyZWY9XCJ7eyBwcm9wZXJ0eS52YWx1ZSB9fVwiXG4gICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7ICdpZ28uZ2VvLnRhcmdldEh0bWxVcmwnIHwgdHJhbnNsYXRlIH19IHt7IHRpdGxlIH19PC9hXG4gICAgICAgID5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiY29weUNsaXBib2FyZFwiXG4gICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgKGNsaWNrKT1cImNvcHlUZXh0VG9DbGlwYm9hcmQocHJvcGVydHkudmFsdWUpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiY29udGVudC1jb3B5XCI+PC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3RkPlxuXG4gICAgICA8dGQgaWQ9XCJrZXlWYWx1ZVwiICpuZ0lmPVwiZmVhdHVyZS5wcm9wZXJ0aWVzLnRhcmdldCA9PT0gdW5kZWZpbmVkXCI+XG4gICAgICAgIHt7IHByb3BlcnR5LmtleSB9fVxuICAgICAgPC90ZD5cblxuICAgICAgPHRkXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzLnRhcmdldCA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgIWlzT2JqZWN0KHByb3BlcnR5LnZhbHVlKSAmJlxuICAgICAgICAgICFpc1VybChwcm9wZXJ0eS52YWx1ZSkgJiZcbiAgICAgICAgICAhaXNFbWJlZGRlZExpbmsocHJvcGVydHkudmFsdWUpXG4gICAgICAgIFwiXG4gICAgICAgIFtpbm5lckhUTUxdPVwicHJvcGVydHkudmFsdWVcIlxuICAgICAgPjwvdGQ+XG5cbiAgICAgIDx0ZFxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcy50YXJnZXQgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGlzRW1iZWRkZWRMaW5rKHByb3BlcnR5LnZhbHVlKVxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8dVxuICAgICAgICAgIFtuZ1N0eWxlXT1cInsgY3Vyc29yOiAncG9pbnRlcicsIGNvbG9yOiAnYmx1ZScgfVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9wZW5TZWN1cmVVcmwocHJvcGVydHkudmFsdWUpXCJcbiAgICAgICAgICA+e3sgZ2V0RW1iZWRkZWRMaW5rVGV4dChwcm9wZXJ0eS52YWx1ZSkgfX08L3VcbiAgICAgICAgPlxuICAgICAgPC90ZD5cblxuICAgICAgPHRkXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzLnRhcmdldCA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgIWlzT2JqZWN0KHByb3BlcnR5LnZhbHVlKSAmJlxuICAgICAgICAgIChpc0RvYyhwcm9wZXJ0eS52YWx1ZSkgfHwgaXNVcmwocHJvcGVydHkudmFsdWUpKSAmJlxuICAgICAgICAgICFpc0ltZyhwcm9wZXJ0eS52YWx1ZSlcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPHVcbiAgICAgICAgICBbbmdTdHlsZV09XCJ7IGN1cnNvcjogJ3BvaW50ZXInLCBjb2xvcjogJ2JsdWUnIH1cIlxuICAgICAgICAgIChjbGljayk9XCJvcGVuU2VjdXJlVXJsKHByb3BlcnR5LnZhbHVlKVwiXG4gICAgICAgICAgPnt7ICdpZ28uZ2VvLnRhcmdldEh0bWxVcmwnIHwgdHJhbnNsYXRlIH19PC91XG4gICAgICAgID5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiY29weUNsaXBib2FyZFwiXG4gICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgKGNsaWNrKT1cImNvcHlUZXh0VG9DbGlwYm9hcmQocHJvcGVydHkudmFsdWUpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiY29udGVudC1jb3B5XCI+PC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3RkPlxuXG4gICAgICA8dGRcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMudGFyZ2V0ID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAhaXNPYmplY3QocHJvcGVydHkudmFsdWUpICYmXG4gICAgICAgICAgaXNVcmwocHJvcGVydHkudmFsdWUpICYmXG4gICAgICAgICAgaXNJbWcocHJvcGVydHkudmFsdWUpXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxhXG4gICAgICAgICAgaHJlZj1cInt7IHByb3BlcnR5LnZhbHVlIH19XCJcbiAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgIChjbGljayk9XCJvcGVuU2VjdXJlVXJsKHByb3BlcnR5LnZhbHVlKVwiXG4gICAgICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICAgID5cbiAgICAgICAgICA8aW1nXG4gICAgICAgICAgICBpZ29JbWFnZUVycm9yXG4gICAgICAgICAgICBzcmM9XCJ7eyBwcm9wZXJ0eS52YWx1ZSB8IHNlY3VyZUltYWdlIHwgYXN5bmMgfX1cIlxuICAgICAgICAgICAgd2lkdGg9XCIyMjVcIlxuICAgICAgICAgICAgaGVpZ2h0PVwiYXV0b1wiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9hPlxuICAgICAgPC90ZD5cblxuICAgICAgPHRkXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzLnRhcmdldCA9PT0gdW5kZWZpbmVkICYmIGlzT2JqZWN0KHByb3BlcnR5LnZhbHVlKVxuICAgICAgICBcIlxuICAgICAgICBbaW5uZXJIVE1MXT1cInByb3BlcnR5LnZhbHVlIHwganNvblwiXG4gICAgICA+PC90ZD5cbiAgICA8L3RyPlxuICA8L3Rib2R5PlxuPC90YWJsZT5cblxuPGlmcmFtZVxuICAqbmdJZj1cImlzSHRtbERpc3BsYXkoKVwiXG4gIFtzcmNkb2NdPVwiaHRtbFNhbml0aXplcihmZWF0dXJlLnByb3BlcnRpZXMpXCJcbiAgW3NyY109XCJ1cmxTYW5pdGl6ZXIoZmVhdHVyZS5wcm9wZXJ0aWVzLnVybClcIlxuPjwvaWZyYW1lPlxuIl19
305
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1kZXRhaWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZlYXR1cmUvZmVhdHVyZS1kZXRhaWxzL2ZlYXR1cmUtZGV0YWlscy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9mZWF0dXJlL2ZlYXR1cmUtZGV0YWlscy9mZWF0dXJlLWRldGFpbHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxRQUFRLEVBQ1IsWUFBWSxFQUNaLEtBQUssRUFDTCxJQUFJLEVBQ0osT0FBTyxFQUNSLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBbUIsTUFBTSwyQkFBMkIsQ0FBQztBQUUxRSxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGVBQWUsRUFDZixhQUFhLEVBQ2IsY0FBYyxFQUNmLE1BQU0sY0FBYyxDQUFDO0FBRXRCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFtQixjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXhDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztB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O1lBQ0wsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQUM7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsbUJBQW1CLENBQUMsS0FBYTtRQUMvQixNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQzVELENBQUM7SUFDSCxDQUFDO3VHQS9SVSx1QkFBdUI7MkZBQXZCLHVCQUF1Qiw4UUM3RHBDLCt5R0EySEEsa1JEMUVJLElBQUksNkZBQ0osS0FBSyxrSEFDTCxhQUFhLG9MQUNiLE9BQU8sMkVBQ1AsbUJBQW1CLCtGQUNuQixTQUFTLHlDQUNULFFBQVEsd0NBQ1IsWUFBWSxnREFDWixlQUFlLHVGQUNmLGVBQWU7OzJGQUdOLHVCQUF1QjtrQkFuQm5DLFNBQVM7K0JBQ0UscUJBQXFCLG1CQUdkLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNQLElBQUk7d0JBQ0osS0FBSzt3QkFDTCxhQUFhO3dCQUNiLE9BQU87d0JBQ1AsbUJBQW1CO3dCQUNuQixTQUFTO3dCQUNULFFBQVE7d0JBQ1IsWUFBWTt3QkFDWixlQUFlO3dCQUNmLGVBQWU7cUJBQ2hCO2dPQVFHLE1BQU07c0JBRFQsS0FBSztnQkFTRyxHQUFHO3NCQUFYLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQUdGLE9BQU87c0JBRFYsS0FBSztnQkFhSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQXN5bmNQaXBlLFxuICBKc29uUGlwZSxcbiAgS2V5VmFsdWVQaXBlLFxuICBOZ0ZvcixcbiAgTmdJZixcbiAgTmdTdHlsZVxufSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlUmVzb3VyY2VVcmwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuaW1wb3J0IHtcbiAgSW1hZ2VFcnJvckRpcmVjdGl2ZSxcbiAgU2VjdXJlSW1hZ2VQaXBlLFxuICBnZXRFbnRpdHlJY29uLFxuICBnZXRFbnRpdHlUaXRsZVxufSBmcm9tICdAaWdvMi9jb21tb24nO1xuaW1wb3J0IHR5cGUgeyBUb29sYm94IH0gZnJvbSAnQGlnbzIvY29tbW9uJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlL2NvbmZpZyc7XG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUvbWVzc2FnZSc7XG5pbXBvcnQgeyBDb25uZWN0aW9uU3RhdGUsIE5ldHdvcmtTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9uZXR3b3JrJztcbmltcG9ydCB7IENsaXBib2FyZCB9IGZyb20gJ0BpZ28yL3V0aWxzJztcblxuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IElnb01hcCB9IGZyb20gJy4uLy4uL21hcC9zaGFyZWQvbWFwJztcbmltcG9ydCB7IFNlYXJjaFNvdXJjZSB9IGZyb20gJy4uLy4uL3NlYXJjaC9zaGFyZWQvc291cmNlcy9zb3VyY2UnO1xuaW1wb3J0IHsgRmVhdHVyZSB9IGZyb20gJy4uL3NoYXJlZCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2lnby1mZWF0dXJlLWRldGFpbHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZmVhdHVyZS1kZXRhaWxzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmVhdHVyZS1kZXRhaWxzLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTmdJZixcbiAgICBOZ0ZvcixcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE5nU3R5bGUsXG4gICAgSW1hZ2VFcnJvckRpcmVjdGl2ZSxcbiAgICBBc3luY1BpcGUsXG4gICAgSnNvblBpcGUsXG4gICAgS2V5VmFsdWVQaXBlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBTZWN1cmVJbWFnZVBpcGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBGZWF0dXJlRGV0YWlsc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBzdGF0ZTogQ29ubmVjdGlvblN0YXRlO1xuICBwcml2YXRlIHVuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHJlYWR5ID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgZ2V0IHNvdXJjZSgpOiBTZWFyY2hTb3VyY2Uge1xuICAgIHJldHVybiB0aGlzLl9zb3VyY2U7XG4gIH1cbiAgc2V0IHNvdXJjZSh2YWx1ZTogU2VhcmNoU291cmNlKSB7XG4gICAgdGhpcy5fc291cmNlID0gdmFsdWU7XG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBASW5wdXQoKSBtYXA6IElnb01hcDtcblxuICBASW5wdXQoKSB0b29sYm94OiBUb29sYm94O1xuXG4gIEBJbnB1dCgpXG4gIGdldCBmZWF0dXJlKCk6IEZlYXR1cmUge1xuICAgIHJldHVybiB0aGlzLl9mZWF0dXJlO1xuICB9XG4gIHNldCBmZWF0dXJlKHZhbHVlOiBGZWF0dXJlKSB7XG4gICAgdGhpcy5fZmVhdHVyZSA9IHZhbHVlO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuc2VsZWN0RmVhdHVyZS5lbWl0KCk7XG4gIH1cblxuICBwcml2YXRlIF9mZWF0dXJlOiBGZWF0dXJlO1xuICBwcml2YXRlIF9zb3VyY2U6IFNlYXJjaFNvdXJjZTtcblxuICBAT3V0cHV0KCkgcm91dGVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdEZlYXR1cmUgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBodG1sRGlzcGxheUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldCB0aXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBnZXRFbnRpdHlUaXRsZSh0aGlzLmZlYXR1cmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0IGljb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZ2V0RW50aXR5SWNvbih0aGlzLmZlYXR1cmUpIHx8ICdsaW5rJztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgbmV0d29ya1NlcnZpY2U6IE5ldHdvcmtTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZVxuICApIHtcbiAgICB0aGlzLm5ldHdvcmtTZXJ2aWNlXG4gICAgICAuY3VycmVudFN0YXRlKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpXG4gICAgICAuc3Vic2NyaWJlKChzdGF0ZTogQ29ubmVjdGlvblN0YXRlKSA9PiB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5yZWFkeSA9IHRydWU7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlJC5uZXh0KCk7XG4gICAgdGhpcy51bnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHVybFNhbml0aXplcih2YWx1ZSk6IFNhZmVSZXNvdXJjZVVybCB7XG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh2YWx1ZSk7XG4gIH1cblxuICBpc0h0bWxEaXNwbGF5KCk6IGJvb2xlYW4ge1xuICAgIGlmIChcbiAgICAgIHRoaXMuZmVhdHVyZSAmJlxuICAgICAgdGhpcy5pc09iamVjdCh0aGlzLmZlYXR1cmUucHJvcGVydGllcykgJiZcbiAgICAgIHRoaXMuZmVhdHVyZS5wcm9wZXJ0aWVzLnRhcmdldCA9PT0gJ2lmcmFtZSdcbiAgICApIHtcbiAgICAgIHRoaXMuaHRtbERpc3BsYXlFdmVudC5lbWl0KHRydWUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaHRtbERpc3BsYXlFdmVudC5lbWl0KGZhbHNlKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBodG1sU2FuaXRpemVyKHZhbHVlKTogU2FmZVJlc291cmNlVXJsIHtcbiAgICBpZiAoIXZhbHVlLmJvZHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVnZXhCYXNlID0gLzxiYXNlIGhyZWY9XCJbXFx3OlxcL1xcLl0rXCI+LztcbiAgICBpZiAoIXJlZ2V4QmFzZS50ZXN0KHZhbHVlLmJvZHkpKSB7XG4gICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHZhbHVlLnVybCwgd2luZG93LmxvY2F0aW9uLm9yaWdpbik7XG4gICAgICB2YWx1ZS5ib2R5ID0gdmFsdWUuYm9keS5yZXBsYWNlKFxuICAgICAgICAnPGhlYWQ+JyxcbiAgICAgICAgYDxoZWFkPjxiYXNlIGhyZWY9XCIke3VybC5vcmlnaW59XCI+YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwodmFsdWUuYm9keSk7XG4gIH1cblxuICBpc09iamVjdCh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnO1xuICB9XG5cbiAgb3BlblNlY3VyZVVybCh2YWx1ZSkge1xuICAgIGxldCB1cmw6IHN0cmluZztcbiAgICBjb25zdCByZWdleERlcG90ID0gbmV3IFJlZ0V4cChcbiAgICAgIHRoaXMuY29uZmlnU2VydmljZT8uZ2V0Q29uZmlnKCdkZXBvdC51cmwnKSArICcuKj8oPz1cInwkKSdcbiAgICApO1xuXG4gICAgaWYgKHJlZ2V4RGVwb3QudGVzdCh2YWx1ZSkpIHtcbiAgICAgIHVybCA9IHZhbHVlLm1hdGNoKHJlZ2V4RGVwb3QpWzBdO1xuXG4gICAgICB0aGlzLmh0dHBcbiAgICAgICAgLmdldCh1cmwsIHtcbiAgICAgICAgICByZXNwb25zZVR5cGU6ICdibG9iJ1xuICAgICAgICB9KVxuICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgIChkb2NPckltYWdlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWxlVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChkb2NPckltYWdlKTtcbiAgICAgICAgICAgIHdpbmRvdy5vcGVuKGZpbGVVcmwsICdfYmxhbmsnKTtcbiAgICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcihcbiAgICAgICAgICAgICAgJ2lnby5nZW8udGFyZ2V0SHRtbFVybFVuYXV0aG9yaXplZCcsXG4gICAgICAgICAgICAgICdpZ28uZ2VvLnRhcmdldEh0bWxVcmxVbmF1dGhvcml6ZWRUaXRsZSdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgdXJsID0gdmFsdWU7XG4gICAgICBpZiAodGhpcy5pc0VtYmVkZGVkTGluayh2YWx1ZSkpIHtcbiAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBkaXYuaW5uZXJIVE1MID0gdmFsdWU7XG4gICAgICAgIHVybCA9IGRpdi5jaGlsZHJlblswXS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtcbiAgICAgIH1cbiAgICAgIHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpO1xuICAgIH1cbiAgfVxuXG4gIGlzVXJsKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IHJlZ2V4ID0gL15odHRwcz86XFwvXFwvLztcbiAgICAgIHJldHVybiByZWdleC50ZXN0KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBpc0RvYyh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAodGhpcy5pc1VybCh2YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgcmVnZXggPSAvKHBkZnxkb2N4P3x4bHN4PykkLztcbiAgICAgICAgcmV0dXJuIHJlZ2V4LnRlc3QodmFsdWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNJbWcodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKHRoaXMuaXNVcmwodmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gLyhqcGU/Z3xwbmd8Z2lmKSQvO1xuICAgICAgICByZXR1cm4gcmVnZXgudGVzdCh2YWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpc0VtYmVkZGVkTGluayh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBtYXRjaFJlZ2V4ID0gLzxhL2c7XG4gICAgICBjb25zdCBtYXRjaCA9IHZhbHVlLm1hdGNoKG1hdGNoUmVnZXgpIHx8IFtdO1xuICAgICAgY29uc3QgY291bnQgPSBtYXRjaC5sZW5ndGg7XG4gICAgICBpZiAoY291bnQgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldEVtYmVkZGVkTGlua1RleHQodmFsdWUpIHtcbiAgICBjb25zdCByZWdleCA9IC8oPzo+KS4qPyg/PTx8JCkvO1xuICAgIGxldCB0ZXh0ID0gdmFsdWUubWF0Y2gocmVnZXgpWzBdIGFzIHN0cmluZztcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8+L2csICcnKTtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIGZpbHRlckZlYXR1cmVQcm9wZXJ0aWVzKGZlYXR1cmUpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICBjb25zdCBhbGxvd2VkRmllbGRzQW5kQWxpYXMgPSBmZWF0dXJlLm1ldGEgPyBmZWF0dXJlLm1ldGEuYWxpYXMgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IHt9O1xuICAgIGxldCBvZmZsaW5lQnV0dG9uU3RhdGU7XG5cbiAgICBpZiAodGhpcy5tYXApIHtcbiAgICAgIHRoaXMubWFwLmZvcmNlZE9mZmxpbmUkXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHN0YXRlKSA9PiB7XG4gICAgICAgICAgb2ZmbGluZUJ1dHRvblN0YXRlID0gc3RhdGU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGZlYXR1cmUucHJvcGVydGllcyAmJlxuICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzLlJvdXRlICYmXG4gICAgICB0aGlzLnRvb2xib3ggJiZcbiAgICAgICF0aGlzLnRvb2xib3guZ2V0VG9vbCgnZGlyZWN0aW9ucycpXG4gICAgKSB7XG4gICAgICBkZWxldGUgZmVhdHVyZS5wcm9wZXJ0aWVzLlJvdXRlO1xuICAgIH1cblxuICAgIGlmIChhbGxvd2VkRmllbGRzQW5kQWxpYXMpIHtcbiAgICAgIE9iamVjdC5rZXlzKGFsbG93ZWRGaWVsZHNBbmRBbGlhcykuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgcHJvcGVydGllc1thbGxvd2VkRmllbGRzQW5kQWxpYXNbZmllbGRdXSA9IGZlYXR1cmUucHJvcGVydGllc1tmaWVsZF07XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgIH0gZWxzZSBpZiAob2ZmbGluZUJ1dHRvblN0YXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghb2ZmbGluZUJ1dHRvblN0YXRlKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLnN0YXRlLmNvbm5lY3Rpb24gJiZcbiAgICAgICAgICBmZWF0dXJlLm1ldGEgJiZcbiAgICAgICAgICBmZWF0dXJlLm1ldGEuZXhjbHVkZUF0dHJpYnV0ZVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBleGNsdWRlQXR0cmlidXRlID0gZmVhdHVyZS5tZXRhLmV4Y2x1ZGVBdHRyaWJ1dGU7XG4gICAgICAgICAgZXhjbHVkZUF0dHJpYnV0ZS5mb3JFYWNoKChhdHRyaWJ1dGUpID0+IHtcbiAgICAgICAgICAgIGRlbGV0ZSBmZWF0dXJlLnByb3BlcnRpZXNbYXR0cmlidXRlXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAhdGhpcy5zdGF0ZS5jb25uZWN0aW9uICYmXG4gICAgICAgICAgZmVhdHVyZS5tZXRhICYmXG4gICAgICAgICAgZmVhdHVyZS5tZXRhLmV4Y2x1ZGVBdHRyaWJ1dGVPZmZsaW5lXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGV4Y2x1ZGVBdHRyaWJ1dGVPZmZsaW5lID0gZmVhdHVyZS5tZXRhLmV4Y2x1ZGVBdHRyaWJ1dGVPZmZsaW5lO1xuICAgICAgICAgIGV4Y2x1ZGVBdHRyaWJ1dGVPZmZsaW5lLmZvckVhY2goKGF0dHJpYnV0ZSkgPT4ge1xuICAgICAgICAgICAgZGVsZXRlIGZlYXR1cmUucHJvcGVydGllc1thdHRyaWJ1dGVdO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZmVhdHVyZS5tZXRhICYmIGZlYXR1cmUubWV0YS5leGNsdWRlQXR0cmlidXRlT2ZmbGluZSkge1xuICAgICAgICAgIGNvbnN0IGV4Y2x1ZGVBdHRyaWJ1dGVPZmZsaW5lID0gZmVhdHVyZS5tZXRhLmV4Y2x1ZGVBdHRyaWJ1dGVPZmZsaW5lO1xuICAgICAgICAgIGV4Y2x1ZGVBdHRyaWJ1dGVPZmZsaW5lLmZvckVhY2goKGF0dHJpYnV0ZSkgPT4ge1xuICAgICAgICAgICAgZGVsZXRlIGZlYXR1cmUucHJvcGVydGllc1thdHRyaWJ1dGVdO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5zdGF0ZS5jb25uZWN0aW9uICYmXG4gICAgICAgIGZlYXR1cmUubWV0YSAmJlxuICAgICAgICBmZWF0dXJlLm1ldGEuZXhjbHVkZUF0dHJpYnV0ZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGV4Y2x1ZGVBdHRyaWJ1dGUgPSBmZWF0dXJlLm1ldGEuZXhjbHVkZUF0dHJpYnV0ZTtcbiAgICAgICAgZXhjbHVkZUF0dHJpYnV0ZS5mb3JFYWNoKChhdHRyaWJ1dGUpID0+IHtcbiAgICAgICAgICBkZWxldGUgZmVhdHVyZS5wcm9wZXJ0aWVzW2F0dHJpYnV0ZV07XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgIXRoaXMuc3RhdGUuY29ubmVjdGlvbiAmJlxuICAgICAgICBmZWF0dXJlLm1ldGEgJiZcbiAgICAgICAgZmVhdHVyZS5tZXRhLmV4Y2x1ZGVBdHRyaWJ1dGVPZmZsaW5lXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgZXhjbHVkZUF0dHJpYnV0ZU9mZmxpbmUgPSBmZWF0dXJlLm1ldGEuZXhjbHVkZUF0dHJpYnV0ZU9mZmxpbmU7XG4gICAgICAgIGV4Y2x1ZGVBdHRyaWJ1dGVPZmZsaW5lLmZvckVhY2goKGF0dHJpYnV0ZSkgPT4ge1xuICAgICAgICAgIGRlbGV0ZSBmZWF0dXJlLnByb3BlcnRpZXNbYXR0cmlidXRlXTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmZWF0dXJlLnByb3BlcnRpZXM7XG4gIH1cblxuICAvKipcbiAgICogQ29weSB0aGUgdXJsIHRvIGEgY2xpcGJvYXJkXG4gICAqL1xuICBjb3B5VGV4dFRvQ2xpcGJvYXJkKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBzdWNjZXNzZnVsID0gQ2xpcGJvYXJkLmNvcHkodmFsdWUpO1xuICAgIGlmIChzdWNjZXNzZnVsKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnN1Y2Nlc3MoJ2lnby5nZW8ucXVlcnkubGluay5tZXNzYWdlJyk7XG4gICAgfVxuICB9XG59XG4iLCI8dGFibGVcbiAgY2xhc3M9XCJpZ28tc3RyaXBlZCBtYXQtdHlwb2dyYXBoeVwiXG4gICpuZ0lmPVwiXG4gICAgcmVhZHkgJiZcbiAgICBmZWF0dXJlICYmXG4gICAgaXNPYmplY3QoZmVhdHVyZS5wcm9wZXJ0aWVzKSAmJlxuICAgIGZlYXR1cmUucHJvcGVydGllcy50YXJnZXQgIT09ICdpZnJhbWUnXG4gIFwiXG4+XG4gIDx0Ym9keT5cbiAgICA8dHIgKm5nRm9yPVwibGV0IHByb3BlcnR5IG9mIGZpbHRlckZlYXR1cmVQcm9wZXJ0aWVzKGZlYXR1cmUpIHwga2V5dmFsdWVcIj5cbiAgICAgIDx0ZFxuICAgICAgICAqbmdJZj1cImZlYXR1cmUucHJvcGVydGllcy50YXJnZXQgPT09ICdfYmxhbmsnICYmIHByb3BlcnR5LmtleSA9PT0gJ3VybCdcIlxuICAgICAgPlxuICAgICAgICA8bWF0LWljb24gbWF0TGlzdEl0ZW1JY29uPnt7IGljb24gfX08L21hdC1pY29uPlxuICAgICAgPC90ZD5cblxuICAgICAgPHRkXG4gICAgICAgICpuZ0lmPVwiZmVhdHVyZS5wcm9wZXJ0aWVzLnRhcmdldCA9PT0gJ19ibGFuaycgJiYgcHJvcGVydHkua2V5ID09PSAndXJsJ1wiXG4gICAgICA+XG4gICAgICAgIDxhXG4gICAgICAgICAgaHJlZj1cInt7IHByb3BlcnR5LnZhbHVlIH19XCJcbiAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgJ2lnby5nZW8udGFyZ2V0SHRtbFVybCcgfCB0cmFuc2xhdGUgfX0ge3sgdGl0bGUgfX08L2FcbiAgICAgICAgPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJjb3B5Q2xpcGJvYXJkXCJcbiAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAoY2xpY2spPVwiY29weVRleHRUb0NsaXBib2FyZChwcm9wZXJ0eS52YWx1ZSlcIlxuICAgICAgICA+XG4gICAgICAgICAgPG1hdC1pY29uPmNvbnRlbnRfY29weTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC90ZD5cblxuICAgICAgPHRkIGlkPVwia2V5VmFsdWVcIiAqbmdJZj1cImZlYXR1cmUucHJvcGVydGllcy50YXJnZXQgPT09IHVuZGVmaW5lZFwiPlxuICAgICAgICB7eyBwcm9wZXJ0eS5rZXkgfX1cbiAgICAgIDwvdGQ+XG5cbiAgICAgIDx0ZFxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcy50YXJnZXQgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICFpc09iamVjdChwcm9wZXJ0eS52YWx1ZSkgJiZcbiAgICAgICAgICAhaXNVcmwocHJvcGVydHkudmFsdWUpICYmXG4gICAgICAgICAgIWlzRW1iZWRkZWRMaW5rKHByb3BlcnR5LnZhbHVlKVxuICAgICAgICBcIlxuICAgICAgICBbaW5uZXJIVE1MXT1cInByb3BlcnR5LnZhbHVlXCJcbiAgICAgID48L3RkPlxuXG4gICAgICA8dGRcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMudGFyZ2V0ID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICBpc0VtYmVkZGVkTGluayhwcm9wZXJ0eS52YWx1ZSlcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPHVcbiAgICAgICAgICBbbmdTdHlsZV09XCJ7IGN1cnNvcjogJ3BvaW50ZXInLCBjb2xvcjogJ2JsdWUnIH1cIlxuICAgICAgICAgIChjbGljayk9XCJvcGVuU2VjdXJlVXJsKHByb3BlcnR5LnZhbHVlKVwiXG4gICAgICAgICAgPnt7IGdldEVtYmVkZGVkTGlua1RleHQocHJvcGVydHkudmFsdWUpIH19PC91XG4gICAgICAgID5cbiAgICAgIDwvdGQ+XG5cbiAgICAgIDx0ZFxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcy50YXJnZXQgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICFpc09iamVjdChwcm9wZXJ0eS52YWx1ZSkgJiZcbiAgICAgICAgICAoaXNEb2MocHJvcGVydHkudmFsdWUpIHx8IGlzVXJsKHByb3BlcnR5LnZhbHVlKSkgJiZcbiAgICAgICAgICAhaXNJbWcocHJvcGVydHkudmFsdWUpXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDx1XG4gICAgICAgICAgW25nU3R5bGVdPVwieyBjdXJzb3I6ICdwb2ludGVyJywgY29sb3I6ICdibHVlJyB9XCJcbiAgICAgICAgICAoY2xpY2spPVwib3BlblNlY3VyZVVybChwcm9wZXJ0eS52YWx1ZSlcIlxuICAgICAgICAgID57eyAnaWdvLmdlby50YXJnZXRIdG1sVXJsJyB8IHRyYW5zbGF0ZSB9fTwvdVxuICAgICAgICA+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImNvcHlDbGlwYm9hcmRcIlxuICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIChjbGljayk9XCJjb3B5VGV4dFRvQ2xpcGJvYXJkKHByb3BlcnR5LnZhbHVlKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8bWF0LWljb24+Y29udGVudF9jb3B5PC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3RkPlxuXG4gICAgICA8dGRcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMudGFyZ2V0ID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAhaXNPYmplY3QocHJvcGVydHkudmFsdWUpICYmXG4gICAgICAgICAgaXNVcmwocHJvcGVydHkudmFsdWUpICYmXG4gICAgICAgICAgaXNJbWcocHJvcGVydHkudmFsdWUpXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxhXG4gICAgICAgICAgaHJlZj1cInt7IHByb3BlcnR5LnZhbHVlIH19XCJcbiAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgIChjbGljayk9XCJvcGVuU2VjdXJlVXJsKHByb3BlcnR5LnZhbHVlKVwiXG4gICAgICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICAgID5cbiAgICAgICAgICA8aW1nXG4gICAgICAgICAgICBpZ29JbWFnZUVycm9yXG4gICAgICAgICAgICBzcmM9XCJ7eyBwcm9wZXJ0eS52YWx1ZSB8IHNlY3VyZUltYWdlIHwgYXN5bmMgfX1cIlxuICAgICAgICAgICAgd2lkdGg9XCIyMjVcIlxuICAgICAgICAgICAgaGVpZ2h0PVwiYXV0b1wiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9hPlxuICAgICAgPC90ZD5cblxuICAgICAgPHRkXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzLnRhcmdldCA9PT0gdW5kZWZpbmVkICYmIGlzT2JqZWN0KHByb3BlcnR5LnZhbHVlKVxuICAgICAgICBcIlxuICAgICAgICBbaW5uZXJIVE1MXT1cInByb3BlcnR5LnZhbHVlIHwganNvblwiXG4gICAgICA+PC90ZD5cbiAgICA8L3RyPlxuICA8L3Rib2R5PlxuPC90YWJsZT5cblxuPGlmcmFtZVxuICAqbmdJZj1cImlzSHRtbERpc3BsYXkoKVwiXG4gIFtzcmNkb2NdPVwiaHRtbFNhbml0aXplcihmZWF0dXJlLnByb3BlcnRpZXMpXCJcbiAgW3NyY109XCJ1cmxTYW5pdGl6ZXIoZmVhdHVyZS5wcm9wZXJ0aWVzLnVybClcIlxuPjwvaWZyYW1lPlxuIl19
@@ -116,7 +116,7 @@ export class OgcFilterButtonComponent {
116
116
  .options;
117
117
  }
118
118
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: OgcFilterButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
119
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: OgcFilterButtonComponent, isStandalone: true, selector: "igo-ogc-filter-button", inputs: { layer: "layer", map: "map", color: "color", header: "header" }, ngImport: i0, template: "<button\n *ngIf=\"\n header &&\n options.ogcFilters &&\n options.ogcFilters.enabled &&\n (options.ogcFilters.pushButtons ||\n options.ogcFilters.checkboxes ||\n options.ogcFilters.radioButtons ||\n options.ogcFilters.select ||\n options.ogcFilters.autocomplete ||\n options.ogcFilters.editable)\n \"\n mat-icon-button\n collapsibleButton\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.filter.filterBy' | translate\"\n [color]=\"color\"\n>\n <mat-icon\n aria-hidden=\"false\"\n [matBadge]=\"badge\"\n matBadgeColor=\"warn\"\n matBadgeSize=\"medium\"\n svgIcon=\"filter\"\n ></mat-icon>\n</button>\n\n<div\n #ogcFilter\n class=\"igo-layer-actions-container\"\n *ngIf=\"\n options.ogcFilters &&\n options.ogcFilters.enabled &&\n (options.ogcFilters.pushButtons ||\n options.ogcFilters.checkboxes ||\n options.ogcFilters.radioButtons ||\n options.ogcFilters.select ||\n options.ogcFilters.autocomplete ||\n options.ogcFilters.editable)\n \"\n>\n <igo-ogc-filterable-item\n *ngIf=\"ogcFilterCollapse && options.ogcFilters.enabled\"\n igoListItem\n [header]=\"false\"\n [map]=\"layer.map\"\n [layer]=\"layer\"\n >\n </igo-ogc-filterable-item>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatBadgeModule }, { kind: "directive", type: i4.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "component", type: OgcFilterableItemComponent, selector: "igo-ogc-filterable-item", inputs: ["layer", "map", "header"] }, { kind: "directive", type: ListItemDirective, selector: "[igoListItem]", inputs: ["color", "focused", "selected", "disabled"], outputs: ["beforeSelect", "beforeFocus", "beforeUnselect", "beforeUnfocus", "beforeDisable", "beforeEnable", "focus", "unfocus", "select", "unselect", "disable", "enable"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
119
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: OgcFilterButtonComponent, isStandalone: true, selector: "igo-ogc-filter-button", inputs: { layer: "layer", map: "map", color: "color", header: "header" }, ngImport: i0, template: "<button\n *ngIf=\"\n header &&\n options.ogcFilters &&\n options.ogcFilters.enabled &&\n (options.ogcFilters.pushButtons ||\n options.ogcFilters.checkboxes ||\n options.ogcFilters.radioButtons ||\n options.ogcFilters.select ||\n options.ogcFilters.autocomplete ||\n options.ogcFilters.editable)\n \"\n mat-icon-button\n collapsibleButton\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.filter.filterBy' | translate\"\n [color]=\"color\"\n>\n <mat-icon\n aria-hidden=\"false\"\n [matBadge]=\"badge\"\n matBadgeColor=\"warn\"\n matBadgeSize=\"medium\"\n >filter_alt</mat-icon\n >\n</button>\n\n<div\n #ogcFilter\n class=\"igo-layer-actions-container\"\n *ngIf=\"\n options.ogcFilters &&\n options.ogcFilters.enabled &&\n (options.ogcFilters.pushButtons ||\n options.ogcFilters.checkboxes ||\n options.ogcFilters.radioButtons ||\n options.ogcFilters.select ||\n options.ogcFilters.autocomplete ||\n options.ogcFilters.editable)\n \"\n>\n <igo-ogc-filterable-item\n *ngIf=\"ogcFilterCollapse && options.ogcFilters.enabled\"\n igoListItem\n [header]=\"false\"\n [map]=\"layer.map\"\n [layer]=\"layer\"\n >\n </igo-ogc-filterable-item>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatBadgeModule }, { kind: "directive", type: i4.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "component", type: OgcFilterableItemComponent, selector: "igo-ogc-filterable-item", inputs: ["layer", "map", "header"] }, { kind: "directive", type: ListItemDirective, selector: "[igoListItem]", inputs: ["color", "focused", "selected", "disabled"], outputs: ["beforeSelect", "beforeFocus", "beforeUnselect", "beforeUnfocus", "beforeDisable", "beforeEnable", "focus", "unfocus", "select", "unselect", "disable", "enable"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
120
120
  }
121
121
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: OgcFilterButtonComponent, decorators: [{
122
122
  type: Component,
@@ -129,7 +129,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
129
129
  OgcFilterableItemComponent,
130
130
  ListItemDirective,
131
131
  TranslateModule
132
- ], template: "<button\n *ngIf=\"\n header &&\n options.ogcFilters &&\n options.ogcFilters.enabled &&\n (options.ogcFilters.pushButtons ||\n options.ogcFilters.checkboxes ||\n options.ogcFilters.radioButtons ||\n options.ogcFilters.select ||\n options.ogcFilters.autocomplete ||\n options.ogcFilters.editable)\n \"\n mat-icon-button\n collapsibleButton\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.filter.filterBy' | translate\"\n [color]=\"color\"\n>\n <mat-icon\n aria-hidden=\"false\"\n [matBadge]=\"badge\"\n matBadgeColor=\"warn\"\n matBadgeSize=\"medium\"\n svgIcon=\"filter\"\n ></mat-icon>\n</button>\n\n<div\n #ogcFilter\n class=\"igo-layer-actions-container\"\n *ngIf=\"\n options.ogcFilters &&\n options.ogcFilters.enabled &&\n (options.ogcFilters.pushButtons ||\n options.ogcFilters.checkboxes ||\n options.ogcFilters.radioButtons ||\n options.ogcFilters.select ||\n options.ogcFilters.autocomplete ||\n options.ogcFilters.editable)\n \"\n>\n <igo-ogc-filterable-item\n *ngIf=\"ogcFilterCollapse && options.ogcFilters.enabled\"\n igoListItem\n [header]=\"false\"\n [map]=\"layer.map\"\n [layer]=\"layer\"\n >\n </igo-ogc-filterable-item>\n</div>\n" }]
132
+ ], template: "<button\n *ngIf=\"\n header &&\n options.ogcFilters &&\n options.ogcFilters.enabled &&\n (options.ogcFilters.pushButtons ||\n options.ogcFilters.checkboxes ||\n options.ogcFilters.radioButtons ||\n options.ogcFilters.select ||\n options.ogcFilters.autocomplete ||\n options.ogcFilters.editable)\n \"\n mat-icon-button\n collapsibleButton\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.filter.filterBy' | translate\"\n [color]=\"color\"\n>\n <mat-icon\n aria-hidden=\"false\"\n [matBadge]=\"badge\"\n matBadgeColor=\"warn\"\n matBadgeSize=\"medium\"\n >filter_alt</mat-icon\n >\n</button>\n\n<div\n #ogcFilter\n class=\"igo-layer-actions-container\"\n *ngIf=\"\n options.ogcFilters &&\n options.ogcFilters.enabled &&\n (options.ogcFilters.pushButtons ||\n options.ogcFilters.checkboxes ||\n options.ogcFilters.radioButtons ||\n options.ogcFilters.select ||\n options.ogcFilters.autocomplete ||\n options.ogcFilters.editable)\n \"\n>\n <igo-ogc-filterable-item\n *ngIf=\"ogcFilterCollapse && options.ogcFilters.enabled\"\n igoListItem\n [header]=\"false\"\n [map]=\"layer.map\"\n [layer]=\"layer\"\n >\n </igo-ogc-filterable-item>\n</div>\n" }]
133
133
  }], ctorParameters: () => [], propDecorators: { layer: [{
134
134
  type: Input
135
135
  }], map: [{
@@ -139,4 +139,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
139
139
  }], header: [{
140
140
  type: Input
141
141
  }] } });
142
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2djLWZpbHRlci1idXR0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvZmlsdGVyL29nYy1maWx0ZXItYnV0dG9uL29nYy1maWx0ZXItYnV0dG9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9vZ2MtZmlsdGVyLWJ1dHRvbi9vZ2MtZmlsdGVyLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsS0FBSyxFQUVOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTdELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3hELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sc0RBQXNELENBQUM7Ozs7Ozs7QUF1QmxHLE1BQU0sT0FBTyx3QkFBd0I7SUFDNUIsT0FBTyxDQUFpQztJQUUvQyxJQUFJLEtBQUs7UUFDUCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVB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L2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25Jbml0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0QmFkZ2VNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9iYWRnZSc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuXG5pbXBvcnQgeyBMaXN0SXRlbURpcmVjdGl2ZSB9IGZyb20gJ0BpZ28yL2NvbW1vbic7XG5cbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5pbXBvcnQgeyBMYXllciB9IGZyb20gJy4uLy4uL2xheWVyL3NoYXJlZC9sYXllcnMvbGF5ZXInO1xuaW1wb3J0IHsgTWFwQmFzZSB9IGZyb20gJy4uLy4uL21hcCc7XG5pbXBvcnQgeyBPZ2NGaWx0ZXJhYmxlSXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL29nYy1maWx0ZXJhYmxlLWl0ZW0vb2djLWZpbHRlcmFibGUtaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgSWdvT2djU2VsZWN0b3IsXG4gIE9nY0ZpbHRlcmFibGVEYXRhU291cmNlT3B0aW9uc1xufSBmcm9tICcuLi9zaGFyZWQvb2djLWZpbHRlci5pbnRlcmZhY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpZ28tb2djLWZpbHRlci1idXR0b24nLFxuICB0ZW1wbGF0ZVVybDogJy4vb2djLWZpbHRlci1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vZ2MtZmlsdGVyLWJ1dHRvbi5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE5nSWYsXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgTWF0SWNvbk1vZHVsZSxcbiAgICBNYXRCYWRnZU1vZHVsZSxcbiAgICBPZ2NGaWx0ZXJhYmxlSXRlbUNvbXBvbmVudCxcbiAgICBMaXN0SXRlbURpcmVjdGl2ZSxcbiAgICBUcmFuc2xhdGVNb2R1bGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBPZ2NGaWx0ZXJCdXR0b25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwdWJsaWMgb3B0aW9uczogT2djRmlsdGVyYWJsZURhdGFTb3VyY2VPcHRpb25zO1xuXG4gIGdldCBiYWRnZSgpIHtcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLm9wdGlvbnMub2djRmlsdGVycyBhcyBhbnk7XG4gICAgbGV0IGNudCA9IDA7XG4gICAgaWYgKGZpbHRlciAmJiAhZmlsdGVyLmFkdmFuY2VkT2djRmlsdGVycykge1xuICAgICAgaWYgKGZpbHRlci5wdXNoQnV0dG9ucykge1xuICAgICAgICBjb25zdCBwdXNoQnV0dG9ucyA9IGZpbHRlci5wdXNoQnV0dG9ucyBhcyBJZ29PZ2NTZWxlY3RvcjtcbiAgICAgICAgY29uc3QgY3VycmVudFB1c2hCdXR0b25Hcm91cCA9IHB1c2hCdXR0b25zLmdyb3Vwcy5maW5kKFxuICAgICAgICAgIChncikgPT4gZ3IuZW5hYmxlZFxuICAgICAgICApO1xuICAgICAgICBsZXQgY250UHVzaEJ1dHRvbnMgPSAwO1xuICAgICAgICBpZiAoY3VycmVudFB1c2hCdXR0b25Hcm91cCkge1xuICAgICAgICAgIGN1cnJlbnRQdXNoQnV0dG9uR3JvdXAuY29tcHV0ZWRTZWxlY3RvcnM/Lm1hcChcbiAgICAgICAgICAgIChjYikgPT5cbiAgICAgICAgICAgICAgKGNudFB1c2hCdXR0b25zICs9IChjYi5zZWxlY3RvcnMgYXMgYW55KT8uZmlsdGVyKFxuICAgICAgICAgICAgICAgIChidXR0b24pID0+IGJ1dHRvbi5lbmFibGVkXG4gICAgICAgICAgICAgICkubGVuZ3RoKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY250ICs9IGNudFB1c2hCdXR0b25zO1xuICAgICAgfVxuICAgICAgaWYgKGZpbHRlci5jaGVja2JveGVzKSB7XG4gICAgICAgIGNvbnN0IGNoZWNrYm94ZXMgPSBmaWx0ZXIuY2hlY2tib3hlcyBhcyBJZ29PZ2NTZWxlY3RvcjtcbiAgICAgICAgY29uc3QgY3VycmVudENoZWNrYm94R3JvdXAgPSBjaGVja2JveGVzLmdyb3Vwcy5maW5kKChncikgPT4gZ3IuZW5hYmxlZCk7XG4gICAgICAgIGxldCBjbnRDaGVja2JveGVzID0gMDtcbiAgICAgICAgaWYgKGN1cnJlbnRDaGVja2JveEdyb3VwKSB7XG4gICAgICAgICAgY3VycmVudENoZWNrYm94R3JvdXAuY29tcHV0ZWRTZWxlY3RvcnM/Lm1hcChcbiAgICAgICAgICAgIChjYikgPT5cbiAgICAgICAgICAgICAgKGNudENoZWNrYm94ZXMgKz0gKGNiLnNlbGVjdG9ycyBhcyBhbnkpPy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKGNoZWNrYm94KSA9PiBjaGVja2JveC5lbmFibGVkXG4gICAgICAgICAgICAgICkubGVuZ3RoKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY250ICs9IGNudENoZWNrYm94ZXM7XG4gICAgICB9XG4gICAgICBpZiAoZmlsdGVyLnJhZGlvQnV0dG9ucykge1xuICAgICAgICBjb25zdCByYWRpb0J1dHRvbnMgPSBmaWx0ZXIucmFkaW9CdXR0b25zIGFzIElnb09nY1NlbGVjdG9yO1xuICAgICAgICBjb25zdCBjdXJyZW50UmFkaW9CdXR0b25zR3JvdXAgPSByYWRpb0J1dHRvbnMuZ3JvdXBzLmZpbmQoXG4gICAgICAgICAgKGdyKSA9PiBnci5lbmFibGVkXG4gICAgICAgICk7XG4gICAgICAgIGxldCBjbnRSYWRpb0J1dHRvbnMgPSAwO1xuICAgICAgICBpZiAoY3VycmVudFJhZGlvQnV0dG9uc0dyb3VwKSB7XG4gICAgICAgICAgY3VycmVudFJhZGlvQnV0dG9uc0dyb3VwLmNvbXB1dGVkU2VsZWN0b3JzPy5tYXAoXG4gICAgICAgICAgICAoY2IpID0+XG4gICAgICAgICAgICAgIChjbnRSYWRpb0J1dHRvbnMgKz0gKGNiLnNlbGVjdG9ycyBhcyBhbnkpPy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKHJhZGlvKSA9PiByYWRpby5lbmFibGVkXG4gICAgICAgICAgICAgICkubGVuZ3RoKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY250ICs9IGNudFJhZGlvQnV0dG9ucztcbiAgICAgIH1cbiAgICAgIGlmIChmaWx0ZXIuc2VsZWN0KSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdCA9IGZpbHRlci5zZWxlY3QgYXMgSWdvT2djU2VsZWN0b3I7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRTZWxlY3RHcm91cCA9IHNlbGVjdC5ncm91cHMuZmluZCgoZ3IpID0+IGdyLmVuYWJsZWQpO1xuICAgICAgICBsZXQgY250U2VsZWN0ID0gMDtcbiAgICAgICAgaWYgKGN1cnJlbnRTZWxlY3RHcm91cCkge1xuICAgICAgICAgIGN1cnJlbnRTZWxlY3RHcm91cC5jb21wdXRlZFNlbGVjdG9ycz8ubWFwKFxuICAgICAgICAgICAgKGNiKSA9PlxuICAgICAgICAgICAgICAoY250U2VsZWN0ICs9IChjYi5zZWxlY3RvcnMgYXMgYW55KT8uZmlsdGVyKFxuICAgICAgICAgICAgICAgIChtdWx0aSkgPT4gbXVsdGkuZW5hYmxlZFxuICAgICAgICAgICAgICApLmxlbmd0aClcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNudCArPSBjbnRTZWxlY3Q7XG4gICAgICB9XG4gICAgICBpZiAoZmlsdGVyLmF1dG9jb21wbGV0ZSkge1xuICAgICAgICBjb25zdCBhdXRvY29tcGxldGUgPSBmaWx0ZXIuYXV0b2NvbXBsZXRlIGFzIElnb09nY1NlbGVjdG9yO1xuICAgICAgICBjb25zdCBjdXJyZW50QXV0b2NvbXBsZXRlR3JvdXAgPSBhdXRvY29tcGxldGUuZ3JvdXBzLmZpbmQoXG4gICAgICAgICAgKGdyKSA9PiBnci5lbmFibGVkXG4gICAgICAgICk7XG4gICAgICAgIGxldCBjbnRBdXRvY29tcGxldGUgPSAwO1xuICAgICAgICBpZiAoY3VycmVudEF1dG9jb21wbGV0ZUdyb3VwKSB7XG4gICAgICAgICAgY3VycmVudEF1dG9jb21wbGV0ZUdyb3VwLmNvbXB1dGVkU2VsZWN0b3JzPy5tYXAoXG4gICAgICAgICAgICAoY2IpID0+XG4gICAgICAgICAgICAgIChjbnRBdXRvY29tcGxldGUgKz0gKGNiLnNlbGVjdG9ycyBhcyBhbnkpPy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKGF1dG9jb21wbGV0ZSkgPT4gYXV0b2NvbXBsZXRlLmVuYWJsZWRcbiAgICAgICAgICAgICAgKS5sZW5ndGgpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjbnQgKz0gY250QXV0b2NvbXBsZXRlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZmlsdGVyICYmIGZpbHRlci5maWx0ZXJzICYmICFmaWx0ZXIuZmlsdGVycy5maWx0ZXJzKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2UgaWYgKGZpbHRlciAmJiBmaWx0ZXIuZmlsdGVycyAmJiBmaWx0ZXIuZmlsdGVycy5maWx0ZXJzKSB7XG4gICAgICByZXR1cm4gZmlsdGVyLmZpbHRlcnMuZmlsdGVycy5sZW5ndGg7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGZpbHRlci5maWx0ZXJzICYmXG4gICAgICBmaWx0ZXIuZmlsdGVycy5vcGVyYXRvciA9PT0gJ0R1cmluZycgJiZcbiAgICAgIGZpbHRlci5maWx0ZXJzLmFjdGl2ZSAmJlxuICAgICAgZmlsdGVyLmludGVyZmFjZU9nY0ZpbHRlcnMgJiZcbiAgICAgIGZpbHRlci5pbnRlcmZhY2VPZ2NGaWx0ZXJzWzBdLmFjdGl2ZVxuICAgICkge1xuICAgICAgY29uc3QgZmlsdGVyQWN0aXZlVmFsdWUgPSBmaWx0ZXIuaW50ZXJmYWNlT2djRmlsdGVyc1swXTtcbiAgICAgIGlmIChmaWx0ZXIuZmlsdGVycy5jYWxlbmRhck1vZGVZZWFyKSB7XG4gICAgICAgIC8vIHllYXIgbW9kZSBjaGVjayBqdXN0IHllYXJcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZpbHRlckFjdGl2ZVZhbHVlLmJlZ2luLnN1YnN0cmluZygwLCA0KSAhPT1cbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5taW5EYXRlLnN1YnN0cmluZygwLCA0KSB8fFxuICAgICAgICAgIGZpbHRlckFjdGl2ZVZhbHVlLmVuZC5zdWJzdHJpbmcoMCwgNCkgIT09XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMubWF4RGF0ZS5zdWJzdHJpbmcoMCwgNClcbiAgICAgICAgKSB7XG4gICAgICAgICAgY250ICs9IDE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGZpbHRlckFjdGl2ZVZhbHVlLmJlZ2luICE9PSB0aGlzLm9wdGlvbnMubWluRGF0ZSB8fFxuICAgICAgICBmaWx0ZXJBY3RpdmVWYWx1ZS5lbmQgIT09IHRoaXMub3B0aW9ucy5tYXhEYXRlXG4gICAgICApIHtcbiAgICAgICAgY250ICs9IDE7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjbnQgPiAwID8gY250IDogdW5kZWZpbmVkO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IGxheWVyKCk6IExheWVyIHtcbiAgICByZXR1cm4gdGhpcy5fbGF5ZXI7XG4gIH1cbiAgc2V0IGxheWVyKHZhbHVlOiBMYXllcikge1xuICAgIHRoaXMuX2xheWVyID0gdmFsdWU7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmxheWVyLmRhdGFTb3VyY2VcbiAgICAgICAgLm9wdGlvbnMgYXMgT2djRmlsdGVyYWJsZURhdGFTb3VyY2VPcHRpb25zO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIF9sYXllcjtcblxuICBASW5wdXQoKSBtYXA6IE1hcEJhc2U7XG5cbiAgQElucHV0KCkgY29sb3I6IHN0cmluZyA9ICdwcmltYXJ5JztcblxuICBASW5wdXQoKSBoZWFkZXI6IGJvb2xlYW47XG5cbiAgcHVibGljIG9nY0ZpbHRlckNvbGxhcHNlID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMubGF5ZXIuZGF0YVNvdXJjZVxuICAgICAgLm9wdGlvbnMgYXMgT2djRmlsdGVyYWJsZURhdGFTb3VyY2VPcHRpb25zO1xuICB9XG59XG4iLCI8YnV0dG9uXG4gICpuZ0lmPVwiXG4gICAgaGVhZGVyICYmXG4gICAgb3B0aW9ucy5vZ2NGaWx0ZXJzICYmXG4gICAgb3B0aW9ucy5vZ2NGaWx0ZXJzLmVuYWJsZWQgJiZcbiAgICAob3B0aW9ucy5vZ2NGaWx0ZXJzLnB1c2hCdXR0b25zIHx8XG4gICAgICBvcHRpb25zLm9nY0ZpbHRlcnMuY2hlY2tib3hlcyB8fFxuICAgICAgb3B0aW9ucy5vZ2NGaWx0ZXJzLnJhZGlvQnV0dG9ucyB8fFxuICAgICAgb3B0aW9ucy5vZ2NGaWx0ZXJzLnNlbGVjdCB8fFxuICAgICAgb3B0aW9ucy5vZ2NGaWx0ZXJzLmF1dG9jb21wbGV0ZSB8fFxuICAgICAgb3B0aW9ucy5vZ2NGaWx0ZXJzLmVkaXRhYmxlKVxuICBcIlxuICBtYXQtaWNvbi1idXR0b25cbiAgY29sbGFwc2libGVCdXR0b25cbiAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcbiAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmZpbHRlci5maWx0ZXJCeScgfCB0cmFuc2xhdGVcIlxuICBbY29sb3JdPVwiY29sb3JcIlxuPlxuICA8bWF0LWljb25cbiAgICBhcmlhLWhpZGRlbj1cImZhbHNlXCJcbiAgICBbbWF0QmFkZ2VdPVwiYmFkZ2VcIlxuICAgIG1hdEJhZGdlQ29sb3I9XCJ3YXJuXCJcbiAgICBtYXRCYWRnZVNpemU9XCJtZWRpdW1cIlxuICAgIHN2Z0ljb249XCJmaWx0ZXJcIlxuICA+PC9tYXQtaWNvbj5cbjwvYnV0dG9uPlxuXG48ZGl2XG4gICNvZ2NGaWx0ZXJcbiAgY2xhc3M9XCJpZ28tbGF5ZXItYWN0aW9ucy1jb250YWluZXJcIlxuICAqbmdJZj1cIlxuICAgIG9wdGlvbnMub2djRmlsdGVycyAmJlxuICAgIG9wdGlvbnMub2djRmlsdGVycy5lbmFibGVkICYmXG4gICAgKG9wdGlvbnMub2djRmlsdGVycy5wdXNoQnV0dG9ucyB8fFxuICAgICAgb3B0aW9ucy5vZ2NGaWx0ZXJzLmNoZWNrYm94ZXMgfHxcbiAgICAgIG9wdGlvbnMub2djRmlsdGVycy5yYWRpb0J1dHRvbnMgfHxcbiAgICAgIG9wdGlvbnMub2djRmlsdGVycy5zZWxlY3QgfHxcbiAgICAgIG9wdGlvbnMub2djRmlsdGVycy5hdXRvY29tcGxldGUgfHxcbiAgICAgIG9wdGlvbnMub2djRmlsdGVycy5lZGl0YWJsZSlcbiAgXCJcbj5cbiAgPGlnby1vZ2MtZmlsdGVyYWJsZS1pdGVtXG4gICAgKm5nSWY9XCJvZ2NGaWx0ZXJDb2xsYXBzZSAmJiBvcHRpb25zLm9nY0ZpbHRlcnMuZW5hYmxlZFwiXG4gICAgaWdvTGlzdEl0ZW1cbiAgICBbaGVhZGVyXT1cImZhbHNlXCJcbiAgICBbbWFwXT1cImxheWVyLm1hcFwiXG4gICAgW2xheWVyXT1cImxheWVyXCJcbiAgPlxuICA8L2lnby1vZ2MtZmlsdGVyYWJsZS1pdGVtPlxuPC9kaXY+XG4iXX0=
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2djLWZpbHRlci1idXR0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvZmlsdGVyL29nYy1maWx0ZXItYnV0dG9uL29nYy1maWx0ZXItYnV0dG9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9vZ2MtZmlsdGVyLWJ1dHRvbi9vZ2MtZmlsdGVyLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsS0FBSyxFQUVOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTdELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3hELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sc0RBQXNELENBQUM7Ozs7Ozs7QUF1QmxHLE1BQU0sT0FBTyx3QkFBd0I7SUFDNUIsT0FBTyxDQUFpQztJQUUvQyxJQUFJLEtBQUs7UUFDUCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVB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L2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25Jbml0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0QmFkZ2VNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9iYWRnZSc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuXG5pbXBvcnQgeyBMaXN0SXRlbURpcmVjdGl2ZSB9IGZyb20gJ0BpZ28yL2NvbW1vbic7XG5cbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5pbXBvcnQgeyBMYXllciB9IGZyb20gJy4uLy4uL2xheWVyL3NoYXJlZC9sYXllcnMvbGF5ZXInO1xuaW1wb3J0IHsgTWFwQmFzZSB9IGZyb20gJy4uLy4uL21hcCc7XG5pbXBvcnQgeyBPZ2NGaWx0ZXJhYmxlSXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL29nYy1maWx0ZXJhYmxlLWl0ZW0vb2djLWZpbHRlcmFibGUtaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgSWdvT2djU2VsZWN0b3IsXG4gIE9nY0ZpbHRlcmFibGVEYXRhU291cmNlT3B0aW9uc1xufSBmcm9tICcuLi9zaGFyZWQvb2djLWZpbHRlci5pbnRlcmZhY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpZ28tb2djLWZpbHRlci1idXR0b24nLFxuICB0ZW1wbGF0ZVVybDogJy4vb2djLWZpbHRlci1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vZ2MtZmlsdGVyLWJ1dHRvbi5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE5nSWYsXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgTWF0SWNvbk1vZHVsZSxcbiAgICBNYXRCYWRnZU1vZHVsZSxcbiAgICBPZ2NGaWx0ZXJhYmxlSXRlbUNvbXBvbmVudCxcbiAgICBMaXN0SXRlbURpcmVjdGl2ZSxcbiAgICBUcmFuc2xhdGVNb2R1bGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBPZ2NGaWx0ZXJCdXR0b25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwdWJsaWMgb3B0aW9uczogT2djRmlsdGVyYWJsZURhdGFTb3VyY2VPcHRpb25zO1xuXG4gIGdldCBiYWRnZSgpIHtcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLm9wdGlvbnMub2djRmlsdGVycyBhcyBhbnk7XG4gICAgbGV0IGNudCA9IDA7XG4gICAgaWYgKGZpbHRlciAmJiAhZmlsdGVyLmFkdmFuY2VkT2djRmlsdGVycykge1xuICAgICAgaWYgKGZpbHRlci5wdXNoQnV0dG9ucykge1xuICAgICAgICBjb25zdCBwdXNoQnV0dG9ucyA9IGZpbHRlci5wdXNoQnV0dG9ucyBhcyBJZ29PZ2NTZWxlY3RvcjtcbiAgICAgICAgY29uc3QgY3VycmVudFB1c2hCdXR0b25Hcm91cCA9IHB1c2hCdXR0b25zLmdyb3Vwcy5maW5kKFxuICAgICAgICAgIChncikgPT4gZ3IuZW5hYmxlZFxuICAgICAgICApO1xuICAgICAgICBsZXQgY250UHVzaEJ1dHRvbnMgPSAwO1xuICAgICAgICBpZiAoY3VycmVudFB1c2hCdXR0b25Hcm91cCkge1xuICAgICAgICAgIGN1cnJlbnRQdXNoQnV0dG9uR3JvdXAuY29tcHV0ZWRTZWxlY3RvcnM/Lm1hcChcbiAgICAgICAgICAgIChjYikgPT5cbiAgICAgICAgICAgICAgKGNudFB1c2hCdXR0b25zICs9IChjYi5zZWxlY3RvcnMgYXMgYW55KT8uZmlsdGVyKFxuICAgICAgICAgICAgICAgIChidXR0b24pID0+IGJ1dHRvbi5lbmFibGVkXG4gICAgICAgICAgICAgICkubGVuZ3RoKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY250ICs9IGNudFB1c2hCdXR0b25zO1xuICAgICAgfVxuICAgICAgaWYgKGZpbHRlci5jaGVja2JveGVzKSB7XG4gICAgICAgIGNvbnN0IGNoZWNrYm94ZXMgPSBmaWx0ZXIuY2hlY2tib3hlcyBhcyBJZ29PZ2NTZWxlY3RvcjtcbiAgICAgICAgY29uc3QgY3VycmVudENoZWNrYm94R3JvdXAgPSBjaGVja2JveGVzLmdyb3Vwcy5maW5kKChncikgPT4gZ3IuZW5hYmxlZCk7XG4gICAgICAgIGxldCBjbnRDaGVja2JveGVzID0gMDtcbiAgICAgICAgaWYgKGN1cnJlbnRDaGVja2JveEdyb3VwKSB7XG4gICAgICAgICAgY3VycmVudENoZWNrYm94R3JvdXAuY29tcHV0ZWRTZWxlY3RvcnM/Lm1hcChcbiAgICAgICAgICAgIChjYikgPT5cbiAgICAgICAgICAgICAgKGNudENoZWNrYm94ZXMgKz0gKGNiLnNlbGVjdG9ycyBhcyBhbnkpPy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKGNoZWNrYm94KSA9PiBjaGVja2JveC5lbmFibGVkXG4gICAgICAgICAgICAgICkubGVuZ3RoKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY250ICs9IGNudENoZWNrYm94ZXM7XG4gICAgICB9XG4gICAgICBpZiAoZmlsdGVyLnJhZGlvQnV0dG9ucykge1xuICAgICAgICBjb25zdCByYWRpb0J1dHRvbnMgPSBmaWx0ZXIucmFkaW9CdXR0b25zIGFzIElnb09nY1NlbGVjdG9yO1xuICAgICAgICBjb25zdCBjdXJyZW50UmFkaW9CdXR0b25zR3JvdXAgPSByYWRpb0J1dHRvbnMuZ3JvdXBzLmZpbmQoXG4gICAgICAgICAgKGdyKSA9PiBnci5lbmFibGVkXG4gICAgICAgICk7XG4gICAgICAgIGxldCBjbnRSYWRpb0J1dHRvbnMgPSAwO1xuICAgICAgICBpZiAoY3VycmVudFJhZGlvQnV0dG9uc0dyb3VwKSB7XG4gICAgICAgICAgY3VycmVudFJhZGlvQnV0dG9uc0dyb3VwLmNvbXB1dGVkU2VsZWN0b3JzPy5tYXAoXG4gICAgICAgICAgICAoY2IpID0+XG4gICAgICAgICAgICAgIChjbnRSYWRpb0J1dHRvbnMgKz0gKGNiLnNlbGVjdG9ycyBhcyBhbnkpPy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKHJhZGlvKSA9PiByYWRpby5lbmFibGVkXG4gICAgICAgICAgICAgICkubGVuZ3RoKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY250ICs9IGNudFJhZGlvQnV0dG9ucztcbiAgICAgIH1cbiAgICAgIGlmIChmaWx0ZXIuc2VsZWN0KSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdCA9IGZpbHRlci5zZWxlY3QgYXMgSWdvT2djU2VsZWN0b3I7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRTZWxlY3RHcm91cCA9IHNlbGVjdC5ncm91cHMuZmluZCgoZ3IpID0+IGdyLmVuYWJsZWQpO1xuICAgICAgICBsZXQgY250U2VsZWN0ID0gMDtcbiAgICAgICAgaWYgKGN1cnJlbnRTZWxlY3RHcm91cCkge1xuICAgICAgICAgIGN1cnJlbnRTZWxlY3RHcm91cC5jb21wdXRlZFNlbGVjdG9ycz8ubWFwKFxuICAgICAgICAgICAgKGNiKSA9PlxuICAgICAgICAgICAgICAoY250U2VsZWN0ICs9IChjYi5zZWxlY3RvcnMgYXMgYW55KT8uZmlsdGVyKFxuICAgICAgICAgICAgICAgIChtdWx0aSkgPT4gbXVsdGkuZW5hYmxlZFxuICAgICAgICAgICAgICApLmxlbmd0aClcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNudCArPSBjbnRTZWxlY3Q7XG4gICAgICB9XG4gICAgICBpZiAoZmlsdGVyLmF1dG9jb21wbGV0ZSkge1xuICAgICAgICBjb25zdCBhdXRvY29tcGxldGUgPSBmaWx0ZXIuYXV0b2NvbXBsZXRlIGFzIElnb09nY1NlbGVjdG9yO1xuICAgICAgICBjb25zdCBjdXJyZW50QXV0b2NvbXBsZXRlR3JvdXAgPSBhdXRvY29tcGxldGUuZ3JvdXBzLmZpbmQoXG4gICAgICAgICAgKGdyKSA9PiBnci5lbmFibGVkXG4gICAgICAgICk7XG4gICAgICAgIGxldCBjbnRBdXRvY29tcGxldGUgPSAwO1xuICAgICAgICBpZiAoY3VycmVudEF1dG9jb21wbGV0ZUdyb3VwKSB7XG4gICAgICAgICAgY3VycmVudEF1dG9jb21wbGV0ZUdyb3VwLmNvbXB1dGVkU2VsZWN0b3JzPy5tYXAoXG4gICAgICAgICAgICAoY2IpID0+XG4gICAgICAgICAgICAgIChjbnRBdXRvY29tcGxldGUgKz0gKGNiLnNlbGVjdG9ycyBhcyBhbnkpPy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKGF1dG9jb21wbGV0ZSkgPT4gYXV0b2NvbXBsZXRlLmVuYWJsZWRcbiAgICAgICAgICAgICAgKS5sZW5ndGgpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjbnQgKz0gY250QXV0b2NvbXBsZXRlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZmlsdGVyICYmIGZpbHRlci5maWx0ZXJzICYmICFmaWx0ZXIuZmlsdGVycy5maWx0ZXJzKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2UgaWYgKGZpbHRlciAmJiBmaWx0ZXIuZmlsdGVycyAmJiBmaWx0ZXIuZmlsdGVycy5maWx0ZXJzKSB7XG4gICAgICByZXR1cm4gZmlsdGVyLmZpbHRlcnMuZmlsdGVycy5sZW5ndGg7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGZpbHRlci5maWx0ZXJzICYmXG4gICAgICBmaWx0ZXIuZmlsdGVycy5vcGVyYXRvciA9PT0gJ0R1cmluZycgJiZcbiAgICAgIGZpbHRlci5maWx0ZXJzLmFjdGl2ZSAmJlxuICAgICAgZmlsdGVyLmludGVyZmFjZU9nY0ZpbHRlcnMgJiZcbiAgICAgIGZpbHRlci5pbnRlcmZhY2VPZ2NGaWx0ZXJzWzBdLmFjdGl2ZVxuICAgICkge1xuICAgICAgY29uc3QgZmlsdGVyQWN0aXZlVmFsdWUgPSBmaWx0ZXIuaW50ZXJmYWNlT2djRmlsdGVyc1swXTtcbiAgICAgIGlmIChmaWx0ZXIuZmlsdGVycy5jYWxlbmRhck1vZGVZZWFyKSB7XG4gICAgICAgIC8vIHllYXIgbW9kZSBjaGVjayBqdXN0IHllYXJcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZpbHRlckFjdGl2ZVZhbHVlLmJlZ2luLnN1YnN0cmluZygwLCA0KSAhPT1cbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5taW5EYXRlLnN1YnN0cmluZygwLCA0KSB8fFxuICAgICAgICAgIGZpbHRlckFjdGl2ZVZhbHVlLmVuZC5zdWJzdHJpbmcoMCwgNCkgIT09XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMubWF4RGF0ZS5zdWJzdHJpbmcoMCwgNClcbiAgICAgICAgKSB7XG4gICAgICAgICAgY250ICs9IDE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGZpbHRlckFjdGl2ZVZhbHVlLmJlZ2luICE9PSB0aGlzLm9wdGlvbnMubWluRGF0ZSB8fFxuICAgICAgICBmaWx0ZXJBY3RpdmVWYWx1ZS5lbmQgIT09IHRoaXMub3B0aW9ucy5tYXhEYXRlXG4gICAgICApIHtcbiAgICAgICAgY250ICs9IDE7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjbnQgPiAwID8gY250IDogdW5kZWZpbmVkO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IGxheWVyKCk6IExheWVyIHtcbiAgICByZXR1cm4gdGhpcy5fbGF5ZXI7XG4gIH1cbiAgc2V0IGxheWVyKHZhbHVlOiBMYXllcikge1xuICAgIHRoaXMuX2xheWVyID0gdmFsdWU7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmxheWVyLmRhdGFTb3VyY2VcbiAgICAgICAgLm9wdGlvbnMgYXMgT2djRmlsdGVyYWJsZURhdGFTb3VyY2VPcHRpb25zO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIF9sYXllcjtcblxuICBASW5wdXQoKSBtYXA6IE1hcEJhc2U7XG5cbiAgQElucHV0KCkgY29sb3I6IHN0cmluZyA9ICdwcmltYXJ5JztcblxuICBASW5wdXQoKSBoZWFkZXI6IGJvb2xlYW47XG5cbiAgcHVibGljIG9nY0ZpbHRlckNvbGxhcHNlID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMubGF5ZXIuZGF0YVNvdXJjZVxuICAgICAgLm9wdGlvbnMgYXMgT2djRmlsdGVyYWJsZURhdGFTb3VyY2VPcHRpb25zO1xuICB9XG59XG4iLCI8YnV0dG9uXG4gICpuZ0lmPVwiXG4gICAgaGVhZGVyICYmXG4gICAgb3B0aW9ucy5vZ2NGaWx0ZXJzICYmXG4gICAgb3B0aW9ucy5vZ2NGaWx0ZXJzLmVuYWJsZWQgJiZcbiAgICAob3B0aW9ucy5vZ2NGaWx0ZXJzLnB1c2hCdXR0b25zIHx8XG4gICAgICBvcHRpb25zLm9nY0ZpbHRlcnMuY2hlY2tib3hlcyB8fFxuICAgICAgb3B0aW9ucy5vZ2NGaWx0ZXJzLnJhZGlvQnV0dG9ucyB8fFxuICAgICAgb3B0aW9ucy5vZ2NGaWx0ZXJzLnNlbGVjdCB8fFxuICAgICAgb3B0aW9ucy5vZ2NGaWx0ZXJzLmF1dG9jb21wbGV0ZSB8fFxuICAgICAgb3B0aW9ucy5vZ2NGaWx0ZXJzLmVkaXRhYmxlKVxuICBcIlxuICBtYXQtaWNvbi1idXR0b25cbiAgY29sbGFwc2libGVCdXR0b25cbiAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcbiAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmZpbHRlci5maWx0ZXJCeScgfCB0cmFuc2xhdGVcIlxuICBbY29sb3JdPVwiY29sb3JcIlxuPlxuICA8bWF0LWljb25cbiAgICBhcmlhLWhpZGRlbj1cImZhbHNlXCJcbiAgICBbbWF0QmFkZ2VdPVwiYmFkZ2VcIlxuICAgIG1hdEJhZGdlQ29sb3I9XCJ3YXJuXCJcbiAgICBtYXRCYWRnZVNpemU9XCJtZWRpdW1cIlxuICAgID5maWx0ZXJfYWx0PC9tYXQtaWNvblxuICA+XG48L2J1dHRvbj5cblxuPGRpdlxuICAjb2djRmlsdGVyXG4gIGNsYXNzPVwiaWdvLWxheWVyLWFjdGlvbnMtY29udGFpbmVyXCJcbiAgKm5nSWY9XCJcbiAgICBvcHRpb25zLm9nY0ZpbHRlcnMgJiZcbiAgICBvcHRpb25zLm9nY0ZpbHRlcnMuZW5hYmxlZCAmJlxuICAgIChvcHRpb25zLm9nY0ZpbHRlcnMucHVzaEJ1dHRvbnMgfHxcbiAgICAgIG9wdGlvbnMub2djRmlsdGVycy5jaGVja2JveGVzIHx8XG4gICAgICBvcHRpb25zLm9nY0ZpbHRlcnMucmFkaW9CdXR0b25zIHx8XG4gICAgICBvcHRpb25zLm9nY0ZpbHRlcnMuc2VsZWN0IHx8XG4gICAgICBvcHRpb25zLm9nY0ZpbHRlcnMuYXV0b2NvbXBsZXRlIHx8XG4gICAgICBvcHRpb25zLm9nY0ZpbHRlcnMuZWRpdGFibGUpXG4gIFwiXG4+XG4gIDxpZ28tb2djLWZpbHRlcmFibGUtaXRlbVxuICAgICpuZ0lmPVwib2djRmlsdGVyQ29sbGFwc2UgJiYgb3B0aW9ucy5vZ2NGaWx0ZXJzLmVuYWJsZWRcIlxuICAgIGlnb0xpc3RJdGVtXG4gICAgW2hlYWRlcl09XCJmYWxzZVwiXG4gICAgW21hcF09XCJsYXllci5tYXBcIlxuICAgIFtsYXllcl09XCJsYXllclwiXG4gID5cbiAgPC9pZ28tb2djLWZpbHRlcmFibGUtaXRlbT5cbjwvZGl2PlxuIl19