@igo2/geo 18.0.1-next.2 → 18.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/igo2-geo.mjs +5 -0
- package/esm2022/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +234 -0
- package/esm2022/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +272 -0
- package/esm2022/lib/catalog/catalog-browser/catalog-browser.component.mjs +246 -0
- package/esm2022/lib/catalog/catalog-browser/catalog-browser.module.mjs +19 -0
- package/esm2022/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +136 -0
- package/esm2022/lib/catalog/catalog-library/catalog-library-item.component.mjs +60 -0
- package/esm2022/lib/catalog/catalog-library/catalog-library.component.mjs +232 -0
- package/esm2022/lib/catalog/catalog-library/catalog-library.module.mjs +24 -0
- package/esm2022/lib/catalog/catalog-library/index.mjs +4 -0
- package/esm2022/lib/catalog/catalog.module.mjs +26 -0
- package/esm2022/lib/catalog/index.mjs +6 -0
- package/esm2022/lib/catalog/shared/catalog.abstract.mjs +32 -0
- package/esm2022/lib/catalog/shared/catalog.enum.mjs +16 -0
- package/esm2022/lib/catalog/shared/catalog.interface.mjs +2 -0
- package/esm2022/lib/catalog/shared/catalog.service.mjs +706 -0
- package/esm2022/lib/catalog/shared/catalogs.mjs +75 -0
- package/esm2022/lib/catalog/shared/index.mjs +5 -0
- package/esm2022/lib/datasource/index.mjs +3 -0
- package/esm2022/lib/datasource/shared/capabilities.interface.mjs +17 -0
- package/esm2022/lib/datasource/shared/capabilities.service.mjs +441 -0
- package/esm2022/lib/datasource/shared/datasource.service.mjs +258 -0
- package/esm2022/lib/datasource/shared/datasources/any-datasource.interface.mjs +2 -0
- package/esm2022/lib/datasource/shared/datasources/any-datasource.mjs +2 -0
- package/esm2022/lib/datasource/shared/datasources/arcgisrest-datasource.interface.mjs +2 -0
- package/esm2022/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +222 -0
- package/esm2022/lib/datasource/shared/datasources/carto-datasource.interface.mjs +2 -0
- package/esm2022/lib/datasource/shared/datasources/carto-datasource.mjs +118 -0
- package/esm2022/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +2 -0
- package/esm2022/lib/datasource/shared/datasources/cluster-datasource.mjs +24 -0
- package/esm2022/lib/datasource/shared/datasources/data.service.mjs +3 -0
- package/esm2022/lib/datasource/shared/datasources/datasource.interface.mjs +2 -0
- package/esm2022/lib/datasource/shared/datasources/datasource.mjs +42 -0
- package/esm2022/lib/datasource/shared/datasources/feature-datasource.interface.mjs +2 -0
- package/esm2022/lib/datasource/shared/datasources/feature-datasource.mjs +52 -0
- package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs +2 -0
- package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +70 -0
- package/esm2022/lib/datasource/shared/datasources/index.mjs +36 -0
- package/esm2022/lib/datasource/shared/datasources/mvt-datasource.interface.mjs +2 -0
- package/esm2022/lib/datasource/shared/datasources/mvt-datasource.mjs +33 -0
- package/esm2022/lib/datasource/shared/datasources/osm-datasource.interface.mjs +2 -0
- package/esm2022/lib/datasource/shared/datasources/osm-datasource.mjs +14 -0
- package/esm2022/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.mjs +2 -0
- package/esm2022/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +60 -0
- package/esm2022/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs +2 -0
- package/esm2022/lib/datasource/shared/datasources/tiledebug-datasource.mjs +17 -0
- package/esm2022/lib/datasource/shared/datasources/websocket-datasource.interface.mjs +2 -0
- package/esm2022/lib/datasource/shared/datasources/websocket-datasource.mjs +56 -0
- package/esm2022/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +2 -0
- package/esm2022/lib/datasource/shared/datasources/wfs-datasource.mjs +137 -0
- package/esm2022/lib/datasource/shared/datasources/wfs.service.mjs +170 -0
- package/esm2022/lib/datasource/shared/datasources/wms-datasource.interface.mjs +2 -0
- package/esm2022/lib/datasource/shared/datasources/wms-datasource.mjs +227 -0
- package/esm2022/lib/datasource/shared/datasources/wms-wfs.utils.mjs +224 -0
- package/esm2022/lib/datasource/shared/datasources/wmts-datasource.interface.mjs +2 -0
- package/esm2022/lib/datasource/shared/datasources/wmts-datasource.mjs +18 -0
- package/esm2022/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +2 -0
- package/esm2022/lib/datasource/shared/datasources/xyz-datasource.mjs +11 -0
- package/esm2022/lib/datasource/shared/index.mjs +6 -0
- package/esm2022/lib/datasource/shared/options/index.mjs +5 -0
- package/esm2022/lib/datasource/shared/options/options-api.interface.mjs +2 -0
- package/esm2022/lib/datasource/shared/options/options-api.providers.mjs +15 -0
- package/esm2022/lib/datasource/shared/options/options-api.service.mjs +85 -0
- package/esm2022/lib/datasource/shared/options/options.service.mjs +3 -0
- package/esm2022/lib/datasource/utils/index.mjs +2 -0
- package/esm2022/lib/datasource/utils/tilegrid.mjs +20 -0
- package/esm2022/lib/directions/directions-buttons/directions-buttons.component.mjs +246 -0
- package/esm2022/lib/directions/directions-buttons/index.mjs +2 -0
- package/esm2022/lib/directions/directions-inputs/directions-inputs.component.mjs +312 -0
- package/esm2022/lib/directions/directions-inputs/index.mjs +2 -0
- package/esm2022/lib/directions/directions-results/directions-results.component.mjs +192 -0
- package/esm2022/lib/directions/directions-results/index.mjs +2 -0
- package/esm2022/lib/directions/directions-sources/directions-source.interface.mjs +5 -0
- package/esm2022/lib/directions/directions-sources/directions-source.mjs +3 -0
- package/esm2022/lib/directions/directions-sources/directions-source.provider.mjs +23 -0
- package/esm2022/lib/directions/directions-sources/index.mjs +5 -0
- package/esm2022/lib/directions/directions-sources/osrm-directions-source.mjs +159 -0
- package/esm2022/lib/directions/directions.component.mjs +437 -0
- package/esm2022/lib/directions/directions.module.mjs +46 -0
- package/esm2022/lib/directions/directions.provider.mjs +16 -0
- package/esm2022/lib/directions/index.mjs +8 -0
- package/esm2022/lib/directions/shared/directions-source.service.mjs +18 -0
- package/esm2022/lib/directions/shared/directions.enum.mjs +72 -0
- package/esm2022/lib/directions/shared/directions.interface.mjs +2 -0
- package/esm2022/lib/directions/shared/directions.service.mjs +239 -0
- package/esm2022/lib/directions/shared/directions.utils.mjs +522 -0
- package/esm2022/lib/directions/shared/index.mjs +6 -0
- package/esm2022/lib/directions/shared/store.mjs +21 -0
- package/esm2022/lib/download/download-button/download-button.component.mjs +48 -0
- package/esm2022/lib/download/download-button/index.mjs +2 -0
- package/esm2022/lib/download/download.module.mjs +24 -0
- package/esm2022/lib/download/index.mjs +3 -0
- package/esm2022/lib/download/shared/download.interface.mjs +2 -0
- package/esm2022/lib/download/shared/download.service.mjs +67 -0
- package/esm2022/lib/download/shared/index.mjs +3 -0
- package/esm2022/lib/draw/draw/draw-layer-popup.component.mjs +42 -0
- package/esm2022/lib/draw/draw/draw-popup.component.mjs +421 -0
- package/esm2022/lib/draw/draw/draw-shorcuts.component.mjs +28 -0
- package/esm2022/lib/draw/draw/draw.component.mjs +1136 -0
- package/esm2022/lib/draw/draw/draw.module.mjs +19 -0
- package/esm2022/lib/draw/drawingTool.module.mjs +18 -0
- package/esm2022/lib/draw/index.mjs +3 -0
- package/esm2022/lib/draw/shared/draw-icon.service.mjs +30 -0
- package/esm2022/lib/draw/shared/draw.enum.mjs +21 -0
- package/esm2022/lib/draw/shared/draw.interface.mjs +2 -0
- package/esm2022/lib/draw/shared/draw.utils.mjs +125 -0
- package/esm2022/lib/draw/shared/index.mjs +5 -0
- package/esm2022/lib/environment/environment.interface.mjs +2 -0
- package/esm2022/lib/environment/index.mjs +2 -0
- package/esm2022/lib/feature/feature-details/feature-details.component.mjs +306 -0
- package/esm2022/lib/feature/feature-details/feature-details.directive.mjs +56 -0
- package/esm2022/lib/feature/feature-details/feature-details.module.mjs +26 -0
- package/esm2022/lib/feature/feature-details/index.mjs +4 -0
- package/esm2022/lib/feature/feature-form/feature-form.component.mjs +101 -0
- package/esm2022/lib/feature/feature-form/feature-form.module.mjs +19 -0
- package/esm2022/lib/feature/feature.module.mjs +26 -0
- package/esm2022/lib/feature/index.mjs +5 -0
- package/esm2022/lib/feature/shared/feature-store.utils.mjs +28 -0
- package/esm2022/lib/feature/shared/feature.enums.mjs +9 -0
- package/esm2022/lib/feature/shared/feature.interfaces.mjs +2 -0
- package/esm2022/lib/feature/shared/feature.utils.mjs +332 -0
- package/esm2022/lib/feature/shared/index.mjs +8 -0
- package/esm2022/lib/feature/shared/store.mjs +143 -0
- package/esm2022/lib/feature/shared/strategies/geo-properties.mjs +216 -0
- package/esm2022/lib/feature/shared/strategies/in-map-extent.mjs +119 -0
- package/esm2022/lib/feature/shared/strategies/in-map-resolution.mjs +99 -0
- package/esm2022/lib/feature/shared/strategies/index.mjs +8 -0
- package/esm2022/lib/feature/shared/strategies/loading-layer.mjs +103 -0
- package/esm2022/lib/feature/shared/strategies/loading.mjs +136 -0
- package/esm2022/lib/feature/shared/strategies/search.mjs +158 -0
- package/esm2022/lib/feature/shared/strategies/selection.mjs +385 -0
- package/esm2022/lib/feature/shared/strategies.utils.mjs +37 -0
- package/esm2022/lib/filter/filter.module.mjs +131 -0
- package/esm2022/lib/filter/index.mjs +17 -0
- package/esm2022/lib/filter/ogc-filter-button/index.mjs +2 -0
- package/esm2022/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +141 -0
- package/esm2022/lib/filter/ogc-filter-form/index.mjs +2 -0
- package/esm2022/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +325 -0
- package/esm2022/lib/filter/ogc-filter-selection/index.mjs +2 -0
- package/esm2022/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +787 -0
- package/esm2022/lib/filter/ogc-filter-time/index.mjs +3 -0
- package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +201 -0
- package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +665 -0
- package/esm2022/lib/filter/ogc-filterable-form/index.mjs +2 -0
- package/esm2022/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +66 -0
- package/esm2022/lib/filter/ogc-filterable-item/index.mjs +2 -0
- package/esm2022/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +244 -0
- package/esm2022/lib/filter/ogc-filterable-list/index.mjs +3 -0
- package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +39 -0
- package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +32 -0
- package/esm2022/lib/filter/shared/filterable-datasource.pipe.mjs +63 -0
- package/esm2022/lib/filter/shared/index.mjs +12 -0
- package/esm2022/lib/filter/shared/ogc-filter-time.service.mjs +72 -0
- package/esm2022/lib/filter/shared/ogc-filter.enum.mjs +30 -0
- package/esm2022/lib/filter/shared/ogc-filter.interface.mjs +2 -0
- package/esm2022/lib/filter/shared/ogc-filter.mjs +756 -0
- package/esm2022/lib/filter/shared/ogc-filter.service.mjs +47 -0
- package/esm2022/lib/filter/shared/spatial-filter.enum.mjs +23 -0
- package/esm2022/lib/filter/shared/spatial-filter.interface.mjs +2 -0
- package/esm2022/lib/filter/shared/spatial-filter.service.mjs +282 -0
- package/esm2022/lib/filter/shared/time-filter.enum.mjs +13 -0
- package/esm2022/lib/filter/shared/time-filter.interface.mjs +2 -0
- package/esm2022/lib/filter/shared/time-filter.service.mjs +107 -0
- package/esm2022/lib/filter/spatial-filter/spatial-filter-item/index.mjs +2 -0
- package/esm2022/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +875 -0
- package/esm2022/lib/filter/spatial-filter/spatial-filter-list/index.mjs +2 -0
- package/esm2022/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +191 -0
- package/esm2022/lib/filter/spatial-filter/spatial-filter-type/index.mjs +2 -0
- package/esm2022/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +120 -0
- package/esm2022/lib/filter/time-filter-button/index.mjs +2 -0
- package/esm2022/lib/filter/time-filter-button/time-filter-button.component.mjs +70 -0
- package/esm2022/lib/filter/time-filter-form/index.mjs +2 -0
- package/esm2022/lib/filter/time-filter-form/time-filter-form.component.mjs +537 -0
- package/esm2022/lib/filter/time-filter-item/index.mjs +2 -0
- package/esm2022/lib/filter/time-filter-item/time-filter-item.component.mjs +90 -0
- package/esm2022/lib/filter/time-filter-list/index.mjs +3 -0
- package/esm2022/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +39 -0
- package/esm2022/lib/filter/time-filter-list/time-filter-list.component.mjs +24 -0
- package/esm2022/lib/geo.module.mjs +63 -0
- package/esm2022/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +559 -0
- package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +170 -0
- package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +24 -0
- package/esm2022/lib/geometry/geometry-form-field/index.mjs +4 -0
- package/esm2022/lib/geometry/geometry.module.mjs +18 -0
- package/esm2022/lib/geometry/index.mjs +3 -0
- package/esm2022/lib/geometry/shared/controls/draw.mjs +340 -0
- package/esm2022/lib/geometry/shared/controls/index.mjs +4 -0
- package/esm2022/lib/geometry/shared/controls/modify.mjs +538 -0
- package/esm2022/lib/geometry/shared/controls/slice.mjs +190 -0
- package/esm2022/lib/geometry/shared/geometry.errors.mjs +24 -0
- package/esm2022/lib/geometry/shared/geometry.interfaces.mjs +2 -0
- package/esm2022/lib/geometry/shared/geometry.utils.mjs +113 -0
- package/esm2022/lib/geometry/shared/index.mjs +5 -0
- package/esm2022/lib/import-export/export-button/export-button.component.mjs +49 -0
- package/esm2022/lib/import-export/export-button/index.mjs +2 -0
- package/esm2022/lib/import-export/import-export/import-export.component.mjs +876 -0
- package/esm2022/lib/import-export/import-export/index.mjs +2 -0
- package/esm2022/lib/import-export/import-export.module.mjs +31 -0
- package/esm2022/lib/import-export/index.mjs +5 -0
- package/esm2022/lib/import-export/shared/drop-geo-file.directive.mjs +114 -0
- package/esm2022/lib/import-export/shared/export.errors.mjs +15 -0
- package/esm2022/lib/import-export/shared/export.interface.mjs +2 -0
- package/esm2022/lib/import-export/shared/export.service.mjs +378 -0
- package/esm2022/lib/import-export/shared/export.type.mjs +13 -0
- package/esm2022/lib/import-export/shared/export.utils.mjs +51 -0
- package/esm2022/lib/import-export/shared/import.errors.mjs +39 -0
- package/esm2022/lib/import-export/shared/import.interface.mjs +2 -0
- package/esm2022/lib/import-export/shared/import.service.mjs +221 -0
- package/esm2022/lib/import-export/shared/import.utils.mjs +203 -0
- package/esm2022/lib/import-export/shared/index.mjs +11 -0
- package/esm2022/lib/layer/index.mjs +16 -0
- package/esm2022/lib/layer/layer-group/index.mjs +2 -0
- package/esm2022/lib/layer/layer-group/layer-group.component.mjs +103 -0
- package/esm2022/lib/layer/layer-item/index.mjs +2 -0
- package/esm2022/lib/layer/layer-item/layer-item.component.mjs +196 -0
- package/esm2022/lib/layer/layer-legend/index.mjs +2 -0
- package/esm2022/lib/layer/layer-legend/layer-legend.component.mjs +287 -0
- package/esm2022/lib/layer/layer-legend-item/index.mjs +2 -0
- package/esm2022/lib/layer/layer-legend-item/layer-legend-item.component.mjs +85 -0
- package/esm2022/lib/layer/layer-legend-list/index.mjs +3 -0
- package/esm2022/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +54 -0
- package/esm2022/lib/layer/layer-legend-list/layer-legend-list.component.mjs +104 -0
- package/esm2022/lib/layer/layer-list/index.mjs +2 -0
- package/esm2022/lib/layer/layer-list/layer-list.component.mjs +232 -0
- package/esm2022/lib/layer/layer-list-tool/index.mjs +4 -0
- package/esm2022/lib/layer/layer-list-tool/layer-list-tool.component.mjs +92 -0
- package/esm2022/lib/layer/layer-list-tool/layer-list-tool.interface.mjs +7 -0
- package/esm2022/lib/layer/layer-list-tool/layer-list-tool.service.mjs +61 -0
- package/esm2022/lib/layer/layer-search/index.mjs +2 -0
- package/esm2022/lib/layer/layer-search/layer-search.component.mjs +65 -0
- package/esm2022/lib/layer/layer-unavailable/index.mjs +3 -0
- package/esm2022/lib/layer/layer-unavailable/layer-unavailable-list/layer-unavailable-list.component.mjs +26 -0
- package/esm2022/lib/layer/layer-unavailable/layer-unavailable.component.mjs +35 -0
- package/esm2022/lib/layer/layer-viewer/index.mjs +3 -0
- package/esm2022/lib/layer/layer-viewer/layer-viewer.component.mjs +226 -0
- package/esm2022/lib/layer/layer-viewer/layer-viewer.interface.mjs +2 -0
- package/esm2022/lib/layer/layer-viewer-bottom-actions/index.mjs +2 -0
- package/esm2022/lib/layer/layer-viewer-bottom-actions/layer-viewer-bottom-actions.component.mjs +207 -0
- package/esm2022/lib/layer/layer-visibility-button/index.mjs +2 -0
- package/esm2022/lib/layer/layer-visibility-button/layer-visibility-button.component.mjs +83 -0
- package/esm2022/lib/layer/layer.module.mjs +107 -0
- package/esm2022/lib/layer/shared/clusterParam.mjs +2 -0
- package/esm2022/lib/layer/shared/index.mjs +6 -0
- package/esm2022/lib/layer/shared/layer-controller.mjs +316 -0
- package/esm2022/lib/layer/shared/layer-selection.mjs +38 -0
- package/esm2022/lib/layer/shared/layer.enums.mjs +2 -0
- package/esm2022/lib/layer/shared/layer.service.mjs +315 -0
- package/esm2022/lib/layer/shared/layers/any-layer.interface.mjs +2 -0
- package/esm2022/lib/layer/shared/layers/any-layer.mjs +2 -0
- package/esm2022/lib/layer/shared/layers/image-layer.interface.mjs +2 -0
- package/esm2022/lib/layer/shared/layers/image-layer.mjs +75 -0
- package/esm2022/lib/layer/shared/layers/index.mjs +18 -0
- package/esm2022/lib/layer/shared/layers/layer-base.mjs +199 -0
- package/esm2022/lib/layer/shared/layers/layer-group.interface.mjs +2 -0
- package/esm2022/lib/layer/shared/layers/layer-group.mjs +120 -0
- package/esm2022/lib/layer/shared/layers/layer.interface.mjs +7 -0
- package/esm2022/lib/layer/shared/layers/layer.mjs +178 -0
- package/esm2022/lib/layer/shared/layers/legend.interface.mjs +2 -0
- package/esm2022/lib/layer/shared/layers/linked/index.mjs +4 -0
- package/esm2022/lib/layer/shared/layers/linked/linked-layer.interface.mjs +12 -0
- package/esm2022/lib/layer/shared/layers/linked/linked-layer.mjs +242 -0
- package/esm2022/lib/layer/shared/layers/linked/linked-layer.utils.mjs +70 -0
- package/esm2022/lib/layer/shared/layers/tile-layer.interface.mjs +2 -0
- package/esm2022/lib/layer/shared/layers/tile-layer.mjs +55 -0
- package/esm2022/lib/layer/shared/layers/vector-layer.interface.mjs +2 -0
- package/esm2022/lib/layer/shared/layers/vector-layer.mjs +576 -0
- package/esm2022/lib/layer/shared/layers/vectortile-layer.interface.mjs +2 -0
- package/esm2022/lib/layer/shared/layers/vectortile-layer.mjs +112 -0
- package/esm2022/lib/layer/track-feature-button/index.mjs +2 -0
- package/esm2022/lib/layer/track-feature-button/track-feature-button.component.mjs +54 -0
- package/esm2022/lib/layer/utils/image-watcher.mjs +62 -0
- package/esm2022/lib/layer/utils/index.mjs +6 -0
- package/esm2022/lib/layer/utils/layer.utils.mjs +57 -0
- package/esm2022/lib/layer/utils/outputLegend.mjs +32 -0
- package/esm2022/lib/layer/utils/tile-watcher.mjs +52 -0
- package/esm2022/lib/layer/utils/vector-watcher.mjs +50 -0
- package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.animation.mjs +20 -0
- package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +87 -0
- package/esm2022/lib/map/baselayers-switcher/index.mjs +3 -0
- package/esm2022/lib/map/baselayers-switcher/mini-basemap.component.mjs +122 -0
- package/esm2022/lib/map/geolocate-button/geolocate-button.component.mjs +78 -0
- package/esm2022/lib/map/geolocate-button/index.mjs +2 -0
- package/esm2022/lib/map/home-extent-button/home-extent-button.component.mjs +73 -0
- package/esm2022/lib/map/home-extent-button/home-extent-button.interface.mjs +2 -0
- package/esm2022/lib/map/home-extent-button/index.mjs +3 -0
- package/esm2022/lib/map/index.mjs +14 -0
- package/esm2022/lib/map/info-section/index.mjs +2 -0
- package/esm2022/lib/map/info-section/info-section.component.mjs +15 -0
- package/esm2022/lib/map/map-browser/index.mjs +2 -0
- package/esm2022/lib/map/map-browser/map-browser.component.mjs +67 -0
- package/esm2022/lib/map/map-center/index.mjs +2 -0
- package/esm2022/lib/map/map-center/map-center.component.mjs +56 -0
- package/esm2022/lib/map/map.module.mjs +89 -0
- package/esm2022/lib/map/menu-button/index.mjs +2 -0
- package/esm2022/lib/map/menu-button/menu-button.component.mjs +57 -0
- package/esm2022/lib/map/offline-button/index.mjs +2 -0
- package/esm2022/lib/map/offline-button/offline-button.component.mjs +53 -0
- package/esm2022/lib/map/rotation-button/index.mjs +2 -0
- package/esm2022/lib/map/rotation-button/rotation-button.component.mjs +58 -0
- package/esm2022/lib/map/shared/controllers/controller.mjs +44 -0
- package/esm2022/lib/map/shared/controllers/geolocation.interface.mjs +8 -0
- package/esm2022/lib/map/shared/controllers/geolocation.mjs +431 -0
- package/esm2022/lib/map/shared/controllers/index.mjs +5 -0
- package/esm2022/lib/map/shared/controllers/view.mjs +361 -0
- package/esm2022/lib/map/shared/hover-feature.directive.mjs +481 -0
- package/esm2022/lib/map/shared/index.mjs +15 -0
- package/esm2022/lib/map/shared/linkedLayers.utils.mjs +238 -0
- package/esm2022/lib/map/shared/map-pointer-position.directive.mjs +122 -0
- package/esm2022/lib/map/shared/map.abstract.mjs +24 -0
- package/esm2022/lib/map/shared/map.enums.mjs +6 -0
- package/esm2022/lib/map/shared/map.interface.mjs +2 -0
- package/esm2022/lib/map/shared/map.mjs +201 -0
- package/esm2022/lib/map/shared/map.service.mjs +29 -0
- package/esm2022/lib/map/shared/map.utils.mjs +455 -0
- package/esm2022/lib/map/shared/mapOffline.directive.mjs +114 -0
- package/esm2022/lib/map/shared/projection.interfaces.mjs +2 -0
- package/esm2022/lib/map/shared/projection.service.mjs +67 -0
- package/esm2022/lib/map/shared/projection.utils.mjs +122 -0
- package/esm2022/lib/map/swipe-control/index.mjs +2 -0
- package/esm2022/lib/map/swipe-control/swipe-control.component.mjs +211 -0
- package/esm2022/lib/map/utils/index.mjs +2 -0
- package/esm2022/lib/map/utils/layer-watcher.mjs +112 -0
- package/esm2022/lib/map/wake-lock-button/index.mjs +2 -0
- package/esm2022/lib/map/wake-lock-button/wake-lock-button.component.mjs +103 -0
- package/esm2022/lib/map/zoom-button/index.mjs +2 -0
- package/esm2022/lib/map/zoom-button/zoom-button.component.mjs +35 -0
- package/esm2022/lib/measure/index.mjs +3 -0
- package/esm2022/lib/measure/measure.module.mjs +20 -0
- package/esm2022/lib/measure/measurer/index.mjs +6 -0
- package/esm2022/lib/measure/measurer/measure-format.pipe.mjs +40 -0
- package/esm2022/lib/measure/measurer/measurer-dialog.component.mjs +38 -0
- package/esm2022/lib/measure/measurer/measurer-item.component.mjs +143 -0
- package/esm2022/lib/measure/measurer/measurer.component.mjs +948 -0
- package/esm2022/lib/measure/measurer/measurer.module.mjs +20 -0
- package/esm2022/lib/measure/shared/index.mjs +4 -0
- package/esm2022/lib/measure/shared/measure.enum.mjs +37 -0
- package/esm2022/lib/measure/shared/measure.interfaces.mjs +2 -0
- package/esm2022/lib/measure/shared/measure.utils.mjs +497 -0
- package/esm2022/lib/metadata/index.mjs +4 -0
- package/esm2022/lib/metadata/metadata-button/index.mjs +2 -0
- package/esm2022/lib/metadata/metadata-button/metadata-button.component.mjs +96 -0
- package/esm2022/lib/metadata/metadata.module.mjs +29 -0
- package/esm2022/lib/metadata/shared/index.mjs +3 -0
- package/esm2022/lib/metadata/shared/metadata.interface.mjs +2 -0
- package/esm2022/lib/metadata/shared/metadata.service.mjs +18 -0
- package/esm2022/lib/offline/geoDB/configFileToGeoDB.service.mjs +130 -0
- package/esm2022/lib/offline/geoDB/geoDB.enums.mjs +6 -0
- package/esm2022/lib/offline/geoDB/geoDB.interface.mjs +2 -0
- package/esm2022/lib/offline/geoDB/geoDB.service.mjs +172 -0
- package/esm2022/lib/offline/geoDB/index.mjs +5 -0
- package/esm2022/lib/offline/index.mjs +6 -0
- package/esm2022/lib/offline/layerDB/index.mjs +3 -0
- package/esm2022/lib/offline/layerDB/layerDB.interface.mjs +2 -0
- package/esm2022/lib/offline/layerDB/layerDB.service.mjs +83 -0
- package/esm2022/lib/offline/offline.interface.mjs +2 -0
- package/esm2022/lib/offline/offline.provider.mjs +50 -0
- package/esm2022/lib/offline/shared/geo-network.service.mjs +79 -0
- package/esm2022/lib/offline/shared/index.mjs +2 -0
- package/esm2022/lib/overlay/index.mjs +2 -0
- package/esm2022/lib/overlay/shared/index.mjs +4 -0
- package/esm2022/lib/overlay/shared/overlay.enum.mjs +8 -0
- package/esm2022/lib/overlay/shared/overlay.mjs +139 -0
- package/esm2022/lib/overlay/shared/overlay.utils.mjs +17 -0
- package/esm2022/lib/print/index.mjs +4 -0
- package/esm2022/lib/print/print/print.component.mjs +116 -0
- package/esm2022/lib/print/print-form/index.mjs +2 -0
- package/esm2022/lib/print/print-form/print-form.component.mjs +320 -0
- package/esm2022/lib/print/print.module.mjs +20 -0
- package/esm2022/lib/print/shared/geopdf.mjs +68 -0
- package/esm2022/lib/print/shared/index.mjs +5 -0
- package/esm2022/lib/print/shared/print.interface.mjs +2 -0
- package/esm2022/lib/print/shared/print.service.mjs +1136 -0
- package/esm2022/lib/print/shared/print.type.mjs +30 -0
- package/esm2022/lib/query/index.mjs +2 -0
- package/esm2022/lib/query/query.module.mjs +27 -0
- package/esm2022/lib/query/shared/index.mjs +8 -0
- package/esm2022/lib/query/shared/query-search-source.mjs +35 -0
- package/esm2022/lib/query/shared/query-search-source.providers.mjs +22 -0
- package/esm2022/lib/query/shared/query.directive.mjs +290 -0
- package/esm2022/lib/query/shared/query.enums.mjs +32 -0
- package/esm2022/lib/query/shared/query.interfaces.mjs +2 -0
- package/esm2022/lib/query/shared/query.service.mjs +753 -0
- package/esm2022/lib/query/shared/query.utils.mjs +45 -0
- package/esm2022/lib/search/index.mjs +10 -0
- package/esm2022/lib/search/search-bar/search-bar.component.mjs +483 -0
- package/esm2022/lib/search/search-bar/search-bar.module.mjs +19 -0
- package/esm2022/lib/search/search-results/index.mjs +5 -0
- package/esm2022/lib/search/search-results/save-feature-dialog.component.mjs +101 -0
- package/esm2022/lib/search/search-results/search-results-add-button.component.mjs +433 -0
- package/esm2022/lib/search/search-results/search-results-item.component.mjs +119 -0
- package/esm2022/lib/search/search-results/search-results.component.mjs +297 -0
- package/esm2022/lib/search/search-results/search-results.directive.mjs +7 -0
- package/esm2022/lib/search/search-results/search-results.module.mjs +20 -0
- package/esm2022/lib/search/search-selector/search-selector.component.mjs +118 -0
- package/esm2022/lib/search/search-selector/search-selector.module.mjs +19 -0
- package/esm2022/lib/search/search-settings/search-settings.component.mjs +264 -0
- package/esm2022/lib/search/search-settings/search-settings.module.mjs +19 -0
- package/esm2022/lib/search/search.module.mjs +77 -0
- package/esm2022/lib/search/shared/index.mjs +10 -0
- package/esm2022/lib/search/shared/search-pointer-summary.directive.mjs +328 -0
- package/esm2022/lib/search/shared/search-source-service.providers.mjs +20 -0
- package/esm2022/lib/search/shared/search-source.service.mjs +56 -0
- package/esm2022/lib/search/shared/search.enums.mjs +4 -0
- package/esm2022/lib/search/shared/search.interfaces.mjs +2 -0
- package/esm2022/lib/search/shared/search.provider.mjs +20 -0
- package/esm2022/lib/search/shared/search.service.mjs +149 -0
- package/esm2022/lib/search/shared/search.utils.mjs +92 -0
- package/esm2022/lib/search/shared/sources/cadastre.mjs +142 -0
- package/esm2022/lib/search/shared/sources/cadastre.providers.mjs +32 -0
- package/esm2022/lib/search/shared/sources/coordinates.interfaces.mjs +2 -0
- package/esm2022/lib/search/shared/sources/coordinates.mjs +168 -0
- package/esm2022/lib/search/shared/sources/coordinates.providers.mjs +52 -0
- package/esm2022/lib/search/shared/sources/icherche-icons.mjs +32 -0
- package/esm2022/lib/search/shared/sources/icherche.interfaces.mjs +2 -0
- package/esm2022/lib/search/shared/sources/icherche.mjs +816 -0
- package/esm2022/lib/search/shared/sources/icherche.providers.mjs +87 -0
- package/esm2022/lib/search/shared/sources/ilayer.interfaces.mjs +2 -0
- package/esm2022/lib/search/shared/sources/ilayer.mjs +339 -0
- package/esm2022/lib/search/shared/sources/ilayer.providers.mjs +58 -0
- package/esm2022/lib/search/shared/sources/index.mjs +23 -0
- package/esm2022/lib/search/shared/sources/nominatim.interfaces.mjs +2 -0
- package/esm2022/lib/search/shared/sources/nominatim.mjs +263 -0
- package/esm2022/lib/search/shared/sources/nominatim.providers.mjs +31 -0
- package/esm2022/lib/search/shared/sources/source.interfaces.mjs +13 -0
- package/esm2022/lib/search/shared/sources/source.mjs +221 -0
- package/esm2022/lib/search/shared/sources/storedqueries.interfaces.mjs +2 -0
- package/esm2022/lib/search/shared/sources/storedqueries.mjs +454 -0
- package/esm2022/lib/search/shared/sources/storedqueries.providers.mjs +56 -0
- package/esm2022/lib/search/shared/sources/workspace.interfaces.mjs +2 -0
- package/esm2022/lib/search/shared/sources/workspace.mjs +192 -0
- package/esm2022/lib/search/shared/sources/workspace.providers.mjs +31 -0
- package/esm2022/lib/style/index.mjs +5 -0
- package/esm2022/lib/style/shared/datasource/esri-style-generator.mjs +360 -0
- package/esm2022/lib/style/shared/datasource/index.mjs +2 -0
- package/esm2022/lib/style/shared/feature/feature-style.mjs +162 -0
- package/esm2022/lib/style/shared/feature/index.mjs +2 -0
- package/esm2022/lib/style/shared/font.enum.mjs +17 -0
- package/esm2022/lib/style/shared/index.mjs +5 -0
- package/esm2022/lib/style/shared/overlay/index.mjs +3 -0
- package/esm2022/lib/style/shared/overlay/overlay-marker-style.utils.mjs +39 -0
- package/esm2022/lib/style/shared/overlay/overlay-style.utils.mjs +88 -0
- package/esm2022/lib/style/shared/vector/commonVectorStyle.mjs +78 -0
- package/esm2022/lib/style/shared/vector/conversion.utils.mjs +27 -0
- package/esm2022/lib/style/shared/vector/index.mjs +4 -0
- package/esm2022/lib/style/shared/vector/vector-style.interface.mjs +2 -0
- package/esm2022/lib/style/style-list/index.mjs +5 -0
- package/esm2022/lib/style/style-list/style-list.interface.mjs +2 -0
- package/esm2022/lib/style/style-list/style-list.module.mjs +23 -0
- package/esm2022/lib/style/style-list/style-list.provider.mjs +21 -0
- package/esm2022/lib/style/style-list/style-list.service.mjs +52 -0
- package/esm2022/lib/style/style-modal/drawing/index.mjs +2 -0
- package/esm2022/lib/style/style-modal/drawing/style-modal-drawing.component.mjs +193 -0
- package/esm2022/lib/style/style-modal/index.mjs +5 -0
- package/esm2022/lib/style/style-modal/layer/index.mjs +2 -0
- package/esm2022/lib/style/style-modal/layer/style-modal-layer.component.mjs +142 -0
- package/esm2022/lib/style/style-modal/layer-button/index.mjs +2 -0
- package/esm2022/lib/style/style-modal/layer-button/style-modal-layer-button.component.mjs +44 -0
- package/esm2022/lib/style/style-modal/shared/index.mjs +2 -0
- package/esm2022/lib/style/style-modal/shared/style-modal.interface.mjs +2 -0
- package/esm2022/lib/style/style-service/draw-style.service.mjs +255 -0
- package/esm2022/lib/style/style-service/index.mjs +3 -0
- package/esm2022/lib/style/style-service/style.service.mjs +393 -0
- package/esm2022/lib/style/style.module.mjs +46 -0
- package/esm2022/lib/toast/index.mjs +2 -0
- package/esm2022/lib/toast/toast.component.mjs +99 -0
- package/esm2022/lib/toast/toast.module.mjs +24 -0
- package/esm2022/lib/utils/googleLinks.mjs +13 -0
- package/esm2022/lib/utils/id-generator.mjs +112 -0
- package/esm2022/lib/utils/index.mjs +5 -0
- package/esm2022/lib/utils/osmLinks.mjs +9 -0
- package/esm2022/lib/utils/propertyTypeDetector/index.mjs +3 -0
- package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.interface.mjs +2 -0
- package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.service.mjs +64 -0
- package/esm2022/lib/wkt/index.mjs +2 -0
- package/esm2022/lib/wkt/shared/index.mjs +2 -0
- package/esm2022/lib/wkt/shared/wkt.service.mjs +235 -0
- package/esm2022/lib/wkt/wkt.module.mjs +25 -0
- package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +36 -0
- package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +19 -0
- package/esm2022/lib/workspace/confirmation-popup/index.mjs +3 -0
- package/esm2022/lib/workspace/index.mjs +8 -0
- package/esm2022/lib/workspace/shared/edition-workspace.mjs +301 -0
- package/esm2022/lib/workspace/shared/edition-workspace.service.mjs +720 -0
- package/esm2022/lib/workspace/shared/feature-workspace.mjs +41 -0
- package/esm2022/lib/workspace/shared/feature-workspace.service.mjs +113 -0
- package/esm2022/lib/workspace/shared/index.mjs +8 -0
- package/esm2022/lib/workspace/shared/wfs-workspace.mjs +41 -0
- package/esm2022/lib/workspace/shared/wfs-workspace.service.mjs +121 -0
- package/esm2022/lib/workspace/shared/wms-workspace.service.mjs +248 -0
- package/esm2022/lib/workspace/shared/workspace.utils.mjs +188 -0
- package/esm2022/lib/workspace/widgets/index.mjs +4 -0
- package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +48 -0
- package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +19 -0
- package/esm2022/lib/workspace/widgets/widgets.mjs +15 -0
- package/esm2022/lib/workspace/workspace-selector/workspace-selector.directive.mjs +172 -0
- package/esm2022/lib/workspace/workspace-selector/workspace-selector.module.mjs +19 -0
- package/esm2022/lib/workspace/workspace-updator/workspace-updator.directive.mjs +137 -0
- package/esm2022/lib/workspace/workspace-updator/workspace-updator.module.mjs +19 -0
- package/esm2022/lib/workspace/workspace.module.mjs +32 -0
- package/esm2022/public_api.mjs +56 -0
- package/fesm2022/igo2-geo.mjs +717 -691
- package/fesm2022/igo2-geo.mjs.map +1 -1
- package/lib/datasource/shared/datasources/datasource.d.ts +2 -2
- package/lib/directions/shared/directions.service.d.ts +0 -1
- package/lib/offline/geoDB/geoDB.service.d.ts +1 -1
- package/lib/offline/layerDB/layerDB.service.d.ts +1 -1
- package/lib/style/style-list/style-list.provider.d.ts +8 -1
- package/lib/style/style-list/style-list.service.d.ts +1 -1
- package/package.json +16 -14
- package/src/lib/layer/layer-list/layer-list.theme.scss +1 -2
- package/src/lib/map/menu-button/menu-button.theming.scss +3 -3
- package/src/style/style.scss +1 -1
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
import { AsyncPipe, KeyValuePipe, NgClass, NgFor, NgIf } from '@angular/common';
|
|
2
|
+
import { Component, Input } from '@angular/core';
|
|
3
|
+
import { MatAutocompleteModule } from '@angular/material/autocomplete';
|
|
4
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
5
|
+
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
6
|
+
import { MatOptionModule } from '@angular/material/core';
|
|
7
|
+
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
8
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
9
|
+
import { MatInputModule } from '@angular/material/input';
|
|
10
|
+
import { MatSelectModule } from '@angular/material/select';
|
|
11
|
+
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
12
|
+
import { IgoLanguageModule } from '@igo2/core/language';
|
|
13
|
+
import { BehaviorSubject, of } from 'rxjs';
|
|
14
|
+
import { OgcFilterWriter } from '../../filter/shared/ogc-filter';
|
|
15
|
+
import { OgcFilterOperator } from '../../filter/shared/ogc-filter.enum';
|
|
16
|
+
import { MapBase } from '../../map';
|
|
17
|
+
import { WktService } from '../../wkt/shared/wkt.service';
|
|
18
|
+
import { OgcFilterTimeComponent } from '../ogc-filter-time/ogc-filter-time.component';
|
|
19
|
+
import * as i0 from "@angular/core";
|
|
20
|
+
import * as i1 from "../../wkt/shared/wkt.service";
|
|
21
|
+
import * as i2 from "@angular/material/checkbox";
|
|
22
|
+
import * as i3 from "@angular/material/tooltip";
|
|
23
|
+
import * as i4 from "@angular/material/form-field";
|
|
24
|
+
import * as i5 from "@angular/material/select";
|
|
25
|
+
import * as i6 from "@angular/material/core";
|
|
26
|
+
import * as i7 from "@angular/material/input";
|
|
27
|
+
import * as i8 from "@angular/material/autocomplete";
|
|
28
|
+
import * as i9 from "@angular/material/button";
|
|
29
|
+
import * as i10 from "@angular/material/icon";
|
|
30
|
+
import * as i11 from "@ngx-translate/core";
|
|
31
|
+
export class OgcFilterFormComponent {
|
|
32
|
+
wktService;
|
|
33
|
+
ogcFilterOperator = OgcFilterOperator;
|
|
34
|
+
filteredValues$;
|
|
35
|
+
filteredFields$;
|
|
36
|
+
allOgcFilterOperators;
|
|
37
|
+
ogcFilterOperators$ = new BehaviorSubject(undefined);
|
|
38
|
+
igoSpatialSelectors;
|
|
39
|
+
value = '';
|
|
40
|
+
inputOperator;
|
|
41
|
+
selectedField$ = new BehaviorSubject(undefined);
|
|
42
|
+
fields$ = new BehaviorSubject([]);
|
|
43
|
+
color = 'primary';
|
|
44
|
+
disabled;
|
|
45
|
+
currentFilterIsSpatial$ = new BehaviorSubject(false);
|
|
46
|
+
defaultStepMillisecond = 6000;
|
|
47
|
+
inputClearable;
|
|
48
|
+
refreshFilters;
|
|
49
|
+
datasource;
|
|
50
|
+
map;
|
|
51
|
+
currentFilter;
|
|
52
|
+
set snrc(value) {
|
|
53
|
+
const checkSNRC50k = /^\d{2}[a-l][0,1][0-9]$/gi;
|
|
54
|
+
const checkSNRC250k = /^\d{2}[a-p]$/gi;
|
|
55
|
+
const checkSNRC1m = /^\d{2}$/gi;
|
|
56
|
+
if (checkSNRC1m.test(value) ||
|
|
57
|
+
checkSNRC250k.test(value) ||
|
|
58
|
+
checkSNRC50k.test(value)) {
|
|
59
|
+
this._snrc = value;
|
|
60
|
+
this.currentFilter.igoSNRC = value;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
get snrc() {
|
|
64
|
+
return this._snrc;
|
|
65
|
+
}
|
|
66
|
+
_snrc = '';
|
|
67
|
+
floatLabel;
|
|
68
|
+
get activeFilters() {
|
|
69
|
+
return this.datasource.options.ogcFilters.interfaceOgcFilters.filter((f) => f.active === true);
|
|
70
|
+
}
|
|
71
|
+
get allowedOperators() {
|
|
72
|
+
return new OgcFilterWriter().computeAllowedOperators(this.fields$.value, this.currentFilter.propertyName, this.datasource.options.ogcFilters.allowedOperatorsType);
|
|
73
|
+
}
|
|
74
|
+
constructor(wktService) {
|
|
75
|
+
this.wktService = wktService;
|
|
76
|
+
// TODO: Filter permitted operator based on wfscapabilities
|
|
77
|
+
// Need to work on regex on XML capabilities because
|
|
78
|
+
// comaparison operator's name varies between WFS servers...
|
|
79
|
+
// Ex: IsNull vs PropertyIsNull vs IsNil ...
|
|
80
|
+
this.allOgcFilterOperators = new OgcFilterWriter().operators;
|
|
81
|
+
this.ogcFilterOperators$.next(this.allOgcFilterOperators);
|
|
82
|
+
this.igoSpatialSelectors = [
|
|
83
|
+
{
|
|
84
|
+
type: 'fixedExtent'
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
type: 'snrc'
|
|
88
|
+
}
|
|
89
|
+
];
|
|
90
|
+
// TODO: selectFeature & drawFeature
|
|
91
|
+
}
|
|
92
|
+
ngOnInit() {
|
|
93
|
+
if (this.datasource.options.sourceFields) {
|
|
94
|
+
const sFields = this.datasource.options.sourceFields.filter((sf) => sf.excludeFromOgcFilters === undefined || !sf.excludeFromOgcFilters);
|
|
95
|
+
sFields.map((sfs) => {
|
|
96
|
+
if (sfs.values) {
|
|
97
|
+
sfs.values.sort();
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
this.fields$.next(sFields);
|
|
101
|
+
}
|
|
102
|
+
this.updateFieldsList();
|
|
103
|
+
this.selectedField$.next(this.fields$.value.find((f) => f.name === this.currentFilter.propertyName));
|
|
104
|
+
this.updateValuesList();
|
|
105
|
+
this.selectedField$.subscribe(() => {
|
|
106
|
+
this.ogcFilterOperators$.next(this.allowedOperators);
|
|
107
|
+
if (Object.keys(this.allowedOperators).indexOf(this.currentFilter.operator) === -1) {
|
|
108
|
+
this.currentFilter.operator = Object.keys(this.allowedOperators)[0];
|
|
109
|
+
this.currentFilter.operator = Object.keys(this.allowedOperators)[0];
|
|
110
|
+
}
|
|
111
|
+
this.updateValuesList();
|
|
112
|
+
});
|
|
113
|
+
this.currentFilterIsSpatial();
|
|
114
|
+
}
|
|
115
|
+
updateFieldsList(value) {
|
|
116
|
+
this.filteredFields$ =
|
|
117
|
+
value && value.length > 0 ? of(this._filterFields(value)) : this.fields$;
|
|
118
|
+
if (this.fields$.value.find((f) => f.name === value)) {
|
|
119
|
+
this.changeField(value);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
updateValuesList(value, pos) {
|
|
123
|
+
this.filteredValues$ =
|
|
124
|
+
value && value.length > 0
|
|
125
|
+
? of(this._filterValues(value))
|
|
126
|
+
: this.selectedField$.value
|
|
127
|
+
? of(this.selectedField$.value.values)
|
|
128
|
+
: of([]);
|
|
129
|
+
if (value && value.length >= 1) {
|
|
130
|
+
this.changeProperty(value, pos);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
_filterFields(value) {
|
|
134
|
+
const keywordRegex = new RegExp(value.normalize('NFD').replace(/[\u0300-\u036f]/g, ''), 'gi');
|
|
135
|
+
return this.fields$.value.filter((val) => keywordRegex.test(val.alias.normalize('NFD').replace(/[\u0300-\u036f]/g, '')));
|
|
136
|
+
}
|
|
137
|
+
_filterValues(value) {
|
|
138
|
+
const keywordRegex = new RegExp(value
|
|
139
|
+
.replace(/[.*+?^${}()|[\]\\]/g, '')
|
|
140
|
+
.toString()
|
|
141
|
+
.normalize('NFD')
|
|
142
|
+
.replace(/[\u0300-\u036f]/g, ''), 'gi');
|
|
143
|
+
return this.selectedField$.value?.values?.filter((val) => val &&
|
|
144
|
+
keywordRegex.test(val
|
|
145
|
+
.toString()
|
|
146
|
+
.normalize('NFD')
|
|
147
|
+
.replace(/[\u0300-\u036f]/g, '')));
|
|
148
|
+
}
|
|
149
|
+
clearSelectedField() {
|
|
150
|
+
this.currentFilter.propertyName = '';
|
|
151
|
+
this.selectedField$.next(undefined);
|
|
152
|
+
this.clearProperty();
|
|
153
|
+
}
|
|
154
|
+
isClearable(pos) {
|
|
155
|
+
const detectedProperty = this.detectProperty(pos);
|
|
156
|
+
if (detectedProperty) {
|
|
157
|
+
return this.currentFilter[detectedProperty];
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
clearProperty(pos) {
|
|
161
|
+
// this.autoCompleteInputValues.closePanel();
|
|
162
|
+
const detectedProperty = this.detectProperty(pos);
|
|
163
|
+
if (detectedProperty) {
|
|
164
|
+
return (this.currentFilter[detectedProperty] = '');
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
toggleFilterState(event) {
|
|
168
|
+
this.datasource.options.ogcFilters.interfaceOgcFilters.find((f) => f.filterid === this.currentFilter.filterid).active = event.checked;
|
|
169
|
+
this.refreshFilters();
|
|
170
|
+
}
|
|
171
|
+
deleteFilter() {
|
|
172
|
+
const ogcFilters = this.datasource.options.ogcFilters;
|
|
173
|
+
ogcFilters.interfaceOgcFilters = ogcFilters.interfaceOgcFilters.filter((f) => f.filterid !== this.currentFilter.filterid);
|
|
174
|
+
this.refreshFilters();
|
|
175
|
+
}
|
|
176
|
+
changeLogical(logical) {
|
|
177
|
+
this.currentFilter.parentLogical = logical;
|
|
178
|
+
this.refreshFilters();
|
|
179
|
+
}
|
|
180
|
+
changeOperator(operator) {
|
|
181
|
+
this.currentFilter.operator = operator;
|
|
182
|
+
this.currentFilterIsSpatial();
|
|
183
|
+
if (this.currentFilterIsSpatial$.value &&
|
|
184
|
+
this.currentFilter.wkt_geometry.length === 0) {
|
|
185
|
+
this.changeSpatialSelector(this.currentFilter.igoSpatialSelector);
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
this.refreshFilters();
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
changeField(field) {
|
|
192
|
+
this.currentFilter.propertyName = field;
|
|
193
|
+
this.selectedField$.next(this.fields$.value.find((f) => f.name === this.currentFilter.propertyName));
|
|
194
|
+
this.refreshFilters();
|
|
195
|
+
}
|
|
196
|
+
// Issue with mapserver 7.2 and Postgis layers. Fixed in 7.4
|
|
197
|
+
// Due to this issue, the checkbox is hide.
|
|
198
|
+
changeCaseSensitive(matchCase) {
|
|
199
|
+
this.currentFilter.matchCase = matchCase.checked;
|
|
200
|
+
this.refreshFilters();
|
|
201
|
+
}
|
|
202
|
+
changeProperty(value, pos, refreshFilter = true) {
|
|
203
|
+
const detectedProperty = this.detectProperty(pos);
|
|
204
|
+
if (detectedProperty) {
|
|
205
|
+
this.datasource.options.ogcFilters.interfaceOgcFilters.find((f) => f.filterid === this.currentFilter.filterid)[detectedProperty] = value;
|
|
206
|
+
if (refreshFilter) {
|
|
207
|
+
this.refreshFilters();
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
changeNumericProperty(value, pos) {
|
|
212
|
+
this.changeProperty(parseFloat(value), pos);
|
|
213
|
+
}
|
|
214
|
+
changeSpatialSelector(value) {
|
|
215
|
+
this.currentFilter.igoSpatialSelector = value;
|
|
216
|
+
if (value === 'fixedExtent') {
|
|
217
|
+
this.changeMapExtentGeometry(false);
|
|
218
|
+
}
|
|
219
|
+
this.currentFilterIsSpatial();
|
|
220
|
+
this.refreshFilters();
|
|
221
|
+
}
|
|
222
|
+
changeSNRC(value) {
|
|
223
|
+
this.snrc = value;
|
|
224
|
+
this.changeSNRCGeometry();
|
|
225
|
+
}
|
|
226
|
+
changeSNRCGeometry() {
|
|
227
|
+
const interfaceOgcFilter = this.datasource.options.ogcFilters.interfaceOgcFilters.find((f) => f.filterid === this.currentFilter.filterid);
|
|
228
|
+
if (!interfaceOgcFilter) {
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
if (this.snrc && this.currentFilter.igoSpatialSelector === 'snrc') {
|
|
232
|
+
this.currentFilter.wkt_geometry = this.wktService.snrcToWkt(this.snrc, this.map.projection).wktPoly;
|
|
233
|
+
}
|
|
234
|
+
this.refreshFilters();
|
|
235
|
+
}
|
|
236
|
+
changeMapExtentGeometry(refresh = true) {
|
|
237
|
+
const interfaceOgcFilter = this.datasource.options.ogcFilters.interfaceOgcFilters.find((f) => f.filterid === this.currentFilter.filterid);
|
|
238
|
+
if (!interfaceOgcFilter) {
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
if (this.currentFilter.igoSpatialSelector === 'fixedExtent') {
|
|
242
|
+
this.currentFilter.wkt_geometry = this.wktService.extentToWkt(this.map.projection, this.map.viewController.getExtent(), this.map.projection).wktPoly;
|
|
243
|
+
}
|
|
244
|
+
if (refresh) {
|
|
245
|
+
this.refreshFilters();
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
detectProperty(pos) {
|
|
249
|
+
switch (this.currentFilter.operator) {
|
|
250
|
+
case OgcFilterOperator.PropertyIsNotEqualTo:
|
|
251
|
+
case OgcFilterOperator.PropertyIsEqualTo:
|
|
252
|
+
case OgcFilterOperator.PropertyIsGreaterThan:
|
|
253
|
+
case OgcFilterOperator.PropertyIsGreaterThanOrEqualTo:
|
|
254
|
+
case OgcFilterOperator.PropertyIsLessThan:
|
|
255
|
+
case OgcFilterOperator.PropertyIsLessThanOrEqualTo:
|
|
256
|
+
return 'expression';
|
|
257
|
+
case OgcFilterOperator.PropertyIsLike:
|
|
258
|
+
return 'pattern';
|
|
259
|
+
case OgcFilterOperator.PropertyIsBetween:
|
|
260
|
+
return pos && pos === 1
|
|
261
|
+
? 'lowerBoundary'
|
|
262
|
+
: pos && pos === 2
|
|
263
|
+
? 'upperBoundary'
|
|
264
|
+
: undefined;
|
|
265
|
+
case OgcFilterOperator.During:
|
|
266
|
+
return pos && pos === 1
|
|
267
|
+
? 'begin'
|
|
268
|
+
: pos && pos === 2
|
|
269
|
+
? 'end'
|
|
270
|
+
: undefined;
|
|
271
|
+
default:
|
|
272
|
+
return;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
currentFilterIsSpatial() {
|
|
276
|
+
let isSpatial = false;
|
|
277
|
+
if (this.currentFilter) {
|
|
278
|
+
isSpatial =
|
|
279
|
+
[
|
|
280
|
+
OgcFilterOperator.Contains,
|
|
281
|
+
OgcFilterOperator.Intersects,
|
|
282
|
+
OgcFilterOperator.Within
|
|
283
|
+
].indexOf(this.currentFilter.operator) !== -1;
|
|
284
|
+
}
|
|
285
|
+
this.currentFilterIsSpatial$.next(isSpatial);
|
|
286
|
+
}
|
|
287
|
+
isTemporalOperator() {
|
|
288
|
+
return (this.currentFilter.operator.toLowerCase() ===
|
|
289
|
+
this.ogcFilterOperator.During.toLowerCase());
|
|
290
|
+
}
|
|
291
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OgcFilterFormComponent, deps: [{ token: i1.WktService }], target: i0.ɵɵFactoryTarget.Component });
|
|
292
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: OgcFilterFormComponent, isStandalone: true, selector: "igo-ogc-filter-form", inputs: { refreshFilters: "refreshFilters", datasource: "datasource", map: "map", currentFilter: "currentFilter", floatLabel: "floatLabel" }, ngImport: i0, template: "<div class=\"ogc-filter-form-container\">\n <mat-checkbox\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleFilterState($event)\"\n [checked]=\"currentFilter.active\"\n >\n </mat-checkbox>\n\n <mat-form-field\n [ngClass]=\"{\n logical:\n activeFilters.indexOf(currentFilter) !== 0 &&\n currentFilter.active === true,\n logicalHidden:\n activeFilters.indexOf(currentFilter) === 0 ||\n currentFilter.active !== true\n }\"\n >\n <mat-select\n [disabled]=\"!currentFilter.active\"\n [value]=\"currentFilter.parentLogical\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n currentFilter.parentLogical\n ? ('igo.geo.operators.tooltip.' + currentFilter.parentLogical\n | translate)\n : ''\n \"\n (selectionChange)=\"changeLogical($event.value)\"\n >\n <mat-option\n [value]=\"ogcFilterOperator.And\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.operators.tooltip.And' | translate\"\n >\n {{ 'igo.geo.operators.And' | translate }}\n </mat-option>\n <mat-option\n [value]=\"ogcFilterOperator.Or\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.operators.tooltip.Or' | translate\"\n >\n {{ 'igo.geo.operators.Or' | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field\n class=\"field\"\n *ngIf=\"\n (currentFilterIsSpatial$ | async) === false &&\n (fields$ | async) &&\n (fields$ | async).length > 0 &&\n (fields$ | async)[0].name !== ''\n \"\n (mouseenter)=\"inputClearable = 'selectField'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.sourceFields.selectField' | translate\"\n [disabled]=\"!currentFilter.active\"\n [matAutocomplete]=\"autoCompleteField\"\n [value]=\"(selectedField$ | async) ? (selectedField$ | async).alias : ''\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n (selectedField$ | async)\n ? (selectedField$ | async).alias\n : ('igo.geo.sourceFields.selectField' | translate)\n \"\n (input)=\"updateFieldsList($any($event.target).value)\"\n />\n <mat-autocomplete\n #autoCompleteField=\"matAutocomplete\"\n (optionSelected)=\"changeField($event.option.id)\"\n >\n <mat-option\n *ngFor=\"let field of filteredFields$ | async\"\n matTooltipShowDelay=\"500\"\n [value]=\"field.alias\"\n [id]=\"field.name\"\n [matTooltip]=\"field.alias\"\n >\n {{ field.alias }}\n </mat-option>\n </mat-autocomplete>\n <button\n *ngIf=\"\n currentFilter.propertyName &&\n inputClearable === 'selectField' &&\n currentFilter.active\n \"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"!currentFilter.active\"\n (click)=\"clearSelectedField()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field\n [ngClass]=\"{\n operator: (currentFilterIsSpatial$ | async) === false,\n dualInput: (currentFilterIsSpatial$ | async)\n }\"\n [floatLabel]=\"floatLabel\"\n >\n <mat-select\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n currentFilter.operator\n ? ('igo.geo.operators.tooltip.' + currentFilter.operator | translate)\n : ('igo.geo.filter.selectOperator' | translate)\n \"\n [disabled]=\"!currentFilter.active\"\n [value]=\"currentFilter.operator\"\n (selectionChange)=\"changeOperator($event.value)\"\n >\n <mat-option\n *ngFor=\"let operator of ogcFilterOperators$ | async | keyvalue\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [value]=\"operator.key\"\n [matTooltip]=\"'igo.geo.operators.tooltip.' + operator.key | translate\"\n >\n {{ 'igo.geo.operators.' + operator.key | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field\n class=\"spatialSelector\"\n *ngIf=\"currentFilterIsSpatial$ | async\"\n >\n <mat-select\n [disabled]=\"!currentFilter.active\"\n [value]=\"currentFilter.igoSpatialSelector\"\n (selectionChange)=\"changeSpatialSelector($event.value)\"\n >\n <mat-option\n *ngFor=\"let igoSpatialSelector of igoSpatialSelectors\"\n [value]=\"igoSpatialSelector.type\"\n >\n {{ 'igo.geo.spatialSelector.' + igoSpatialSelector.type | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field\n class=\"singleInput\"\n *ngIf=\"['expression', 'pattern'].indexOf(detectProperty()) !== -1\"\n (mouseenter)=\"inputClearable = 'selectProperty'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\n [disabled]=\"!currentFilter.active\"\n [matAutocomplete]=\"autoCompleteValues\"\n [value]=\"\n detectProperty() === 'expression'\n ? currentFilter.expression\n : currentFilter.pattern\n \"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n detectProperty() === 'expression'\n ? currentFilter.expression || ''\n : currentFilter.pattern || ''\n \"\n (input)=\"updateValuesList($any($event.target).value)\"\n />\n <mat-autocomplete\n #autoCompleteValues=\"matAutocomplete\"\n (optionSelected)=\"changeProperty($event.option.value)\"\n >\n <mat-option\n *ngFor=\"let value of filteredValues$ | async\"\n matTooltipShowDelay=\"500\"\n [value]=\"value\"\n [matTooltip]=\"value\"\n >\n {{ value }}\n </mat-option>\n </mat-autocomplete>\n <button\n *ngIf=\"\n isClearable() &&\n inputClearable === 'selectProperty' &&\n currentFilter.active\n \"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"!currentFilter.active\"\n (click)=\"clearProperty()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <div class=\"igo-layer-button-group\">\n <button\n mat-icon-button\n collapsibleButton\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.filter.removeFilter' | translate\"\n color=\"warn\"\n (click)=\"deleteFilter()\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n\n <mat-form-field\n class=\"snrc\"\n *ngIf=\"\n (currentFilterIsSpatial$ | async) &&\n currentFilter.igoSpatialSelector === 'snrc'\n \"\n (mouseenter)=\"inputClearable = 'selectSNRC'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.filter.placeholderSnrc' | translate\"\n [value]=\"currentFilter.igoSNRC\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"currentFilter.igoSNRC ? currentFilter.igoSNRC : ''\"\n (input)=\"changeSNRC($any($event.target).value)\"\n />\n <button\n *ngIf=\"currentFilter.igoSNRC\"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"\n !currentFilter.active &&\n inputClearable === 'selectSNRC' &&\n currentFilter.active\n \"\n (click)=\"currentFilter.igoSNRC = ''\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <ng-container\n *ngIf=\"\n (currentFilterIsSpatial$ | async) &&\n currentFilter.igoSpatialSelector === 'fixedExtent'\n \"\n >\n <button\n [disabled]=\"!currentFilter.active\"\n *ngIf=\"currentFilter.igoSpatialSelector === 'fixedExtent'\"\n matSuffix\n mat-icon-button\n [disabled]=\"!currentFilter.active\"\n (click)=\"changeMapExtentGeometry()\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.spatialSelector.btnSetExtent' | translate\"\n >\n <mat-icon>zoom_out_map</mat-icon>\n </button>\n </ng-container>\n</div>\n\n<div class=\"ogc-filter-form-container\">\n <mat-form-field\n class=\"dualInput\"\n *ngIf=\"\n !isTemporalOperator() &&\n ['lowerBoundary', 'begin'].indexOf(detectProperty(1)) !== -1\n \"\n (mouseenter)=\"inputClearable = 'selectProperty1'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\n [disabled]=\"!currentFilter.active\"\n [matAutocomplete]=\"autoDualValueOperator1\"\n type=\"number\"\n [value]=\"\n detectProperty(1) === 'lowerBoundary'\n ? currentFilter.lowerBoundary\n : currentFilter.begin\n \"\n (input)=\"updateValuesList($any($event.target).value, 1)\"\n />\n <mat-autocomplete\n #autoDualValueOperator1=\"matAutocomplete\"\n (optionSelected)=\"changeNumericProperty($event.option.value, 1)\"\n >\n <mat-option\n *ngFor=\"let value of filteredValues$ | async\"\n matTooltipShowDelay=\"500\"\n [value]=\"value\"\n [matTooltip]=\"value\"\n >\n {{ value }}\n </mat-option>\n </mat-autocomplete>\n <button\n *ngIf=\"\n isClearable(1) &&\n inputClearable === 'selectProperty1' &&\n currentFilter.active\n \"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"!currentFilter.active\"\n (click)=\"clearProperty(1)\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field\n class=\"dualInput\"\n *ngIf=\"\n !isTemporalOperator() &&\n ['upperBoundary', 'end'].indexOf(detectProperty(2)) !== -1\n \"\n (mouseenter)=\"inputClearable = 'selectProperty2'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\n [disabled]=\"!currentFilter.active\"\n [matAutocomplete]=\"autoDualValueOperator2\"\n type=\"number\"\n [value]=\"\n detectProperty(2) === 'upperBoundary'\n ? currentFilter.upperBoundary\n : currentFilter.end\n \"\n (input)=\"updateValuesList($any($event.target).value, 2)\"\n />\n <mat-autocomplete\n #autoDualValueOperator2=\"matAutocomplete\"\n (optionSelected)=\"changeNumericProperty($event.option.value, 2)\"\n >\n <mat-option\n *ngFor=\"let value of filteredValues$ | async\"\n matTooltipShowDelay=\"500\"\n [value]=\"value\"\n [matTooltip]=\"value\"\n >\n {{ value }}\n </mat-option>\n </mat-autocomplete>\n <button\n *ngIf=\"\n isClearable(2) &&\n inputClearable === 'selectProperty2' &&\n currentFilter.active\n \"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"!currentFilter.active\"\n (click)=\"clearProperty(2)\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n</div>\n\n<igo-ogc-filter-time\n *ngIf=\"isTemporalOperator()\"\n [datasource]=\"datasource\"\n [currentFilter]=\"currentFilter\"\n (changeProperty)=\"changeProperty($event.value, $event.pos)\"\n>\n</igo-ogc-filter-time>\n", styles: [":host{width:100%;padding:5px 10px}:host ::ng-deep .mat-mdc-form-field .mat-icon svg{width:1em;height:1em;color:#d3d3d3}:host .ogc-filter-form-container{display:flex}:host .mat-mdc-form-field{width:100%}:host .mat-mdc-select-arrow{visibility:hidden}:host .mat-mdc-slide-toggle{margin-top:10px}:host .logical{flex-flow:column nowrap;width:100%;max-width:60px;margin-right:5px}:host .logicalHidden{width:0px;visibility:hidden;max-width:0px}:host ::ng-deep .logical .mat-mdc-select-arrow{visibility:hidden}:host ::ng-deep .logicalHidden .mat-mdc-select-arrow{visibility:hidden}:host .field{width:150px;margin-right:5px}:host ::ng-deep .field .mat-mdc-select-arrow{visibility:hidden}:host .operator{width:150px;margin-right:5px;text-align:center}:host ::ng-deep .operator .mat-mdc-select-arrow{visibility:hidden}:host .spatialSelector{width:110px;margin-right:5px}:host ::ng-deep .spatialSelector .mat-mdc-select-arrow{visibility:hidden}:host .singleInput{width:150px;margin-right:5px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){:host .singleInput{width:27%}}:host .snrc{width:110px;margin-right:5px}:host ::ng-deep .singleInput .mat-mdc-select-arrow{visibility:hidden}:host .dualInput{width:150px;margin-right:5px}:host ::ng-deep .dualInput .mat-mdc-select-arrow{visibility:hidden}:host .igo-layer-button-group{display:flex;padding-top:5px}:host .container{display:flex}\n"], dependencies: [{ kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i2.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i5.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i8.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i8.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: OgcFilterTimeComponent, selector: "igo-ogc-filter-time", inputs: ["datasource", "currentFilter"], outputs: ["changeProperty"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i11.TranslatePipe, name: "translate" }] });
|
|
293
|
+
}
|
|
294
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OgcFilterFormComponent, decorators: [{
|
|
295
|
+
type: Component,
|
|
296
|
+
args: [{ selector: 'igo-ogc-filter-form', standalone: true, imports: [
|
|
297
|
+
MatCheckboxModule,
|
|
298
|
+
MatTooltipModule,
|
|
299
|
+
MatFormFieldModule,
|
|
300
|
+
NgClass,
|
|
301
|
+
MatSelectModule,
|
|
302
|
+
MatOptionModule,
|
|
303
|
+
NgIf,
|
|
304
|
+
MatInputModule,
|
|
305
|
+
MatAutocompleteModule,
|
|
306
|
+
NgFor,
|
|
307
|
+
MatButtonModule,
|
|
308
|
+
MatIconModule,
|
|
309
|
+
OgcFilterTimeComponent,
|
|
310
|
+
AsyncPipe,
|
|
311
|
+
KeyValuePipe,
|
|
312
|
+
IgoLanguageModule
|
|
313
|
+
], template: "<div class=\"ogc-filter-form-container\">\n <mat-checkbox\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleFilterState($event)\"\n [checked]=\"currentFilter.active\"\n >\n </mat-checkbox>\n\n <mat-form-field\n [ngClass]=\"{\n logical:\n activeFilters.indexOf(currentFilter) !== 0 &&\n currentFilter.active === true,\n logicalHidden:\n activeFilters.indexOf(currentFilter) === 0 ||\n currentFilter.active !== true\n }\"\n >\n <mat-select\n [disabled]=\"!currentFilter.active\"\n [value]=\"currentFilter.parentLogical\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n currentFilter.parentLogical\n ? ('igo.geo.operators.tooltip.' + currentFilter.parentLogical\n | translate)\n : ''\n \"\n (selectionChange)=\"changeLogical($event.value)\"\n >\n <mat-option\n [value]=\"ogcFilterOperator.And\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.operators.tooltip.And' | translate\"\n >\n {{ 'igo.geo.operators.And' | translate }}\n </mat-option>\n <mat-option\n [value]=\"ogcFilterOperator.Or\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.operators.tooltip.Or' | translate\"\n >\n {{ 'igo.geo.operators.Or' | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field\n class=\"field\"\n *ngIf=\"\n (currentFilterIsSpatial$ | async) === false &&\n (fields$ | async) &&\n (fields$ | async).length > 0 &&\n (fields$ | async)[0].name !== ''\n \"\n (mouseenter)=\"inputClearable = 'selectField'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.sourceFields.selectField' | translate\"\n [disabled]=\"!currentFilter.active\"\n [matAutocomplete]=\"autoCompleteField\"\n [value]=\"(selectedField$ | async) ? (selectedField$ | async).alias : ''\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n (selectedField$ | async)\n ? (selectedField$ | async).alias\n : ('igo.geo.sourceFields.selectField' | translate)\n \"\n (input)=\"updateFieldsList($any($event.target).value)\"\n />\n <mat-autocomplete\n #autoCompleteField=\"matAutocomplete\"\n (optionSelected)=\"changeField($event.option.id)\"\n >\n <mat-option\n *ngFor=\"let field of filteredFields$ | async\"\n matTooltipShowDelay=\"500\"\n [value]=\"field.alias\"\n [id]=\"field.name\"\n [matTooltip]=\"field.alias\"\n >\n {{ field.alias }}\n </mat-option>\n </mat-autocomplete>\n <button\n *ngIf=\"\n currentFilter.propertyName &&\n inputClearable === 'selectField' &&\n currentFilter.active\n \"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"!currentFilter.active\"\n (click)=\"clearSelectedField()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field\n [ngClass]=\"{\n operator: (currentFilterIsSpatial$ | async) === false,\n dualInput: (currentFilterIsSpatial$ | async)\n }\"\n [floatLabel]=\"floatLabel\"\n >\n <mat-select\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n currentFilter.operator\n ? ('igo.geo.operators.tooltip.' + currentFilter.operator | translate)\n : ('igo.geo.filter.selectOperator' | translate)\n \"\n [disabled]=\"!currentFilter.active\"\n [value]=\"currentFilter.operator\"\n (selectionChange)=\"changeOperator($event.value)\"\n >\n <mat-option\n *ngFor=\"let operator of ogcFilterOperators$ | async | keyvalue\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [value]=\"operator.key\"\n [matTooltip]=\"'igo.geo.operators.tooltip.' + operator.key | translate\"\n >\n {{ 'igo.geo.operators.' + operator.key | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field\n class=\"spatialSelector\"\n *ngIf=\"currentFilterIsSpatial$ | async\"\n >\n <mat-select\n [disabled]=\"!currentFilter.active\"\n [value]=\"currentFilter.igoSpatialSelector\"\n (selectionChange)=\"changeSpatialSelector($event.value)\"\n >\n <mat-option\n *ngFor=\"let igoSpatialSelector of igoSpatialSelectors\"\n [value]=\"igoSpatialSelector.type\"\n >\n {{ 'igo.geo.spatialSelector.' + igoSpatialSelector.type | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field\n class=\"singleInput\"\n *ngIf=\"['expression', 'pattern'].indexOf(detectProperty()) !== -1\"\n (mouseenter)=\"inputClearable = 'selectProperty'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\n [disabled]=\"!currentFilter.active\"\n [matAutocomplete]=\"autoCompleteValues\"\n [value]=\"\n detectProperty() === 'expression'\n ? currentFilter.expression\n : currentFilter.pattern\n \"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n detectProperty() === 'expression'\n ? currentFilter.expression || ''\n : currentFilter.pattern || ''\n \"\n (input)=\"updateValuesList($any($event.target).value)\"\n />\n <mat-autocomplete\n #autoCompleteValues=\"matAutocomplete\"\n (optionSelected)=\"changeProperty($event.option.value)\"\n >\n <mat-option\n *ngFor=\"let value of filteredValues$ | async\"\n matTooltipShowDelay=\"500\"\n [value]=\"value\"\n [matTooltip]=\"value\"\n >\n {{ value }}\n </mat-option>\n </mat-autocomplete>\n <button\n *ngIf=\"\n isClearable() &&\n inputClearable === 'selectProperty' &&\n currentFilter.active\n \"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"!currentFilter.active\"\n (click)=\"clearProperty()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <div class=\"igo-layer-button-group\">\n <button\n mat-icon-button\n collapsibleButton\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.filter.removeFilter' | translate\"\n color=\"warn\"\n (click)=\"deleteFilter()\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n\n <mat-form-field\n class=\"snrc\"\n *ngIf=\"\n (currentFilterIsSpatial$ | async) &&\n currentFilter.igoSpatialSelector === 'snrc'\n \"\n (mouseenter)=\"inputClearable = 'selectSNRC'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.filter.placeholderSnrc' | translate\"\n [value]=\"currentFilter.igoSNRC\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"currentFilter.igoSNRC ? currentFilter.igoSNRC : ''\"\n (input)=\"changeSNRC($any($event.target).value)\"\n />\n <button\n *ngIf=\"currentFilter.igoSNRC\"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"\n !currentFilter.active &&\n inputClearable === 'selectSNRC' &&\n currentFilter.active\n \"\n (click)=\"currentFilter.igoSNRC = ''\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <ng-container\n *ngIf=\"\n (currentFilterIsSpatial$ | async) &&\n currentFilter.igoSpatialSelector === 'fixedExtent'\n \"\n >\n <button\n [disabled]=\"!currentFilter.active\"\n *ngIf=\"currentFilter.igoSpatialSelector === 'fixedExtent'\"\n matSuffix\n mat-icon-button\n [disabled]=\"!currentFilter.active\"\n (click)=\"changeMapExtentGeometry()\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.spatialSelector.btnSetExtent' | translate\"\n >\n <mat-icon>zoom_out_map</mat-icon>\n </button>\n </ng-container>\n</div>\n\n<div class=\"ogc-filter-form-container\">\n <mat-form-field\n class=\"dualInput\"\n *ngIf=\"\n !isTemporalOperator() &&\n ['lowerBoundary', 'begin'].indexOf(detectProperty(1)) !== -1\n \"\n (mouseenter)=\"inputClearable = 'selectProperty1'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\n [disabled]=\"!currentFilter.active\"\n [matAutocomplete]=\"autoDualValueOperator1\"\n type=\"number\"\n [value]=\"\n detectProperty(1) === 'lowerBoundary'\n ? currentFilter.lowerBoundary\n : currentFilter.begin\n \"\n (input)=\"updateValuesList($any($event.target).value, 1)\"\n />\n <mat-autocomplete\n #autoDualValueOperator1=\"matAutocomplete\"\n (optionSelected)=\"changeNumericProperty($event.option.value, 1)\"\n >\n <mat-option\n *ngFor=\"let value of filteredValues$ | async\"\n matTooltipShowDelay=\"500\"\n [value]=\"value\"\n [matTooltip]=\"value\"\n >\n {{ value }}\n </mat-option>\n </mat-autocomplete>\n <button\n *ngIf=\"\n isClearable(1) &&\n inputClearable === 'selectProperty1' &&\n currentFilter.active\n \"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"!currentFilter.active\"\n (click)=\"clearProperty(1)\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field\n class=\"dualInput\"\n *ngIf=\"\n !isTemporalOperator() &&\n ['upperBoundary', 'end'].indexOf(detectProperty(2)) !== -1\n \"\n (mouseenter)=\"inputClearable = 'selectProperty2'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\"\n >\n <input\n matInput\n [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\n [disabled]=\"!currentFilter.active\"\n [matAutocomplete]=\"autoDualValueOperator2\"\n type=\"number\"\n [value]=\"\n detectProperty(2) === 'upperBoundary'\n ? currentFilter.upperBoundary\n : currentFilter.end\n \"\n (input)=\"updateValuesList($any($event.target).value, 2)\"\n />\n <mat-autocomplete\n #autoDualValueOperator2=\"matAutocomplete\"\n (optionSelected)=\"changeNumericProperty($event.option.value, 2)\"\n >\n <mat-option\n *ngFor=\"let value of filteredValues$ | async\"\n matTooltipShowDelay=\"500\"\n [value]=\"value\"\n [matTooltip]=\"value\"\n >\n {{ value }}\n </mat-option>\n </mat-autocomplete>\n <button\n *ngIf=\"\n isClearable(2) &&\n inputClearable === 'selectProperty2' &&\n currentFilter.active\n \"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"!currentFilter.active\"\n (click)=\"clearProperty(2)\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n</div>\n\n<igo-ogc-filter-time\n *ngIf=\"isTemporalOperator()\"\n [datasource]=\"datasource\"\n [currentFilter]=\"currentFilter\"\n (changeProperty)=\"changeProperty($event.value, $event.pos)\"\n>\n</igo-ogc-filter-time>\n", styles: [":host{width:100%;padding:5px 10px}:host ::ng-deep .mat-mdc-form-field .mat-icon svg{width:1em;height:1em;color:#d3d3d3}:host .ogc-filter-form-container{display:flex}:host .mat-mdc-form-field{width:100%}:host .mat-mdc-select-arrow{visibility:hidden}:host .mat-mdc-slide-toggle{margin-top:10px}:host .logical{flex-flow:column nowrap;width:100%;max-width:60px;margin-right:5px}:host .logicalHidden{width:0px;visibility:hidden;max-width:0px}:host ::ng-deep .logical .mat-mdc-select-arrow{visibility:hidden}:host ::ng-deep .logicalHidden .mat-mdc-select-arrow{visibility:hidden}:host .field{width:150px;margin-right:5px}:host ::ng-deep .field .mat-mdc-select-arrow{visibility:hidden}:host .operator{width:150px;margin-right:5px;text-align:center}:host ::ng-deep .operator .mat-mdc-select-arrow{visibility:hidden}:host .spatialSelector{width:110px;margin-right:5px}:host ::ng-deep .spatialSelector .mat-mdc-select-arrow{visibility:hidden}:host .singleInput{width:150px;margin-right:5px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){:host .singleInput{width:27%}}:host .snrc{width:110px;margin-right:5px}:host ::ng-deep .singleInput .mat-mdc-select-arrow{visibility:hidden}:host .dualInput{width:150px;margin-right:5px}:host ::ng-deep .dualInput .mat-mdc-select-arrow{visibility:hidden}:host .igo-layer-button-group{display:flex;padding-top:5px}:host .container{display:flex}\n"] }]
|
|
314
|
+
}], ctorParameters: () => [{ type: i1.WktService }], propDecorators: { refreshFilters: [{
|
|
315
|
+
type: Input
|
|
316
|
+
}], datasource: [{
|
|
317
|
+
type: Input
|
|
318
|
+
}], map: [{
|
|
319
|
+
type: Input
|
|
320
|
+
}], currentFilter: [{
|
|
321
|
+
type: Input
|
|
322
|
+
}], floatLabel: [{
|
|
323
|
+
type: Input
|
|
324
|
+
}] } });
|
|
325
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2djLWZpbHRlci1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9vZ2MtZmlsdGVyLWZvcm0vb2djLWZpbHRlci1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9vZ2MtZmlsdGVyLWZvcm0vb2djLWZpbHRlci1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBRUwsa0JBQWtCLEVBQ25CLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFeEQsT0FBTyxFQUFFLGVBQWUsRUFBYyxFQUFFLEVBQUUs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WixpQkFBaUI7OzRGQUdSLHNCQUFzQjtrQkF4QmxDLFNBQVM7K0JBQ0UscUJBQXFCLGNBR25CLElBQUksV0FDUDt3QkFDUCxpQkFBaUI7d0JBQ2pCLGdCQUFnQjt3QkFDaEIsa0JBQWtCO3dCQUNsQixPQUFPO3dCQUNQLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZixJQUFJO3dCQUNKLGNBQWM7d0JBQ2QscUJBQXFCO3dCQUNyQixLQUFLO3dCQUNMLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixzQkFBc0I7d0JBQ3RCLFNBQVM7d0JBQ1QsWUFBWTt3QkFDWixpQkFBaUI7cUJBQ2xCOytFQXVCUSxjQUFjO3NCQUF0QixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsR0FBRztzQkFBWCxLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBc0JHLFVBQVU7c0JBQWxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3luY1BpcGUsIEtleVZhbHVlUGlwZSwgTmdDbGFzcywgTmdGb3IsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xuaW1wb3J0IHsgTWF0T3B0aW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQge1xuICBGbG9hdExhYmVsVHlwZSxcbiAgTWF0Rm9ybUZpZWxkTW9kdWxlXG59IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuXG5pbXBvcnQgeyBJZ29MYW5ndWFnZU1vZHVsZSB9IGZyb20gJ0BpZ28yL2NvcmUvbGFuZ3VhZ2UnO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNvdXJjZUZpZWxkc09wdGlvbnNQYXJhbXMgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlL3NoYXJlZC9kYXRhc291cmNlcy9kYXRhc291cmNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBPZ2NGaWx0ZXJXcml0ZXIgfSBmcm9tICcuLi8uLi9maWx0ZXIvc2hhcmVkL29nYy1maWx0ZXInO1xuaW1wb3J0IHsgT2djRmlsdGVyT3BlcmF0b3IgfSBmcm9tICcuLi8uLi9maWx0ZXIvc2hhcmVkL29nYy1maWx0ZXIuZW51bSc7XG5pbXBvcnQge1xuICBPZ2NGaWx0ZXJhYmxlRGF0YVNvdXJjZSxcbiAgT2djRmlsdGVyc09wdGlvbnNcbn0gZnJvbSAnLi4vLi4vZmlsdGVyL3NoYXJlZC9vZ2MtZmlsdGVyLmludGVyZmFjZSc7XG5pbXBvcnQgeyBNYXBCYXNlIH0gZnJvbSAnLi4vLi4vbWFwJztcbmltcG9ydCB7IFdrdFNlcnZpY2UgfSBmcm9tICcuLi8uLi93a3Qvc2hhcmVkL3drdC5zZXJ2aWNlJztcbmltcG9ydCB7IE9nY0ZpbHRlclRpbWVDb21wb25lbnQgfSBmcm9tICcuLi9vZ2MtZmlsdGVyLXRpbWUvb2djLWZpbHRlci10aW1lLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2lnby1vZ2MtZmlsdGVyLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vb2djLWZpbHRlci1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vb2djLWZpbHRlci1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBNYXRDaGVja2JveE1vZHVsZSxcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICBOZ0NsYXNzLFxuICAgIE1hdFNlbGVjdE1vZHVsZSxcbiAgICBNYXRPcHRpb25Nb2R1bGUsXG4gICAgTmdJZixcbiAgICBNYXRJbnB1dE1vZHVsZSxcbiAgICBNYXRBdXRvY29tcGxldGVNb2R1bGUsXG4gICAgTmdGb3IsXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgT2djRmlsdGVyVGltZUNvbXBvbmVudCxcbiAgICBBc3luY1BpcGUsXG4gICAgS2V5VmFsdWVQaXBlLFxuICAgIElnb0xhbmd1YWdlTW9kdWxlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgT2djRmlsdGVyRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIG9nY0ZpbHRlck9wZXJhdG9yID0gT2djRmlsdGVyT3BlcmF0b3I7XG4gIGZpbHRlcmVkVmFsdWVzJDogT2JzZXJ2YWJsZTxzdHJpbmdbXT47XG4gIGZpbHRlcmVkRmllbGRzJDogT2JzZXJ2YWJsZTxTb3VyY2VGaWVsZHNPcHRpb25zUGFyYW1zW10+O1xuICBwdWJsaWMgYWxsT2djRmlsdGVyT3BlcmF0b3JzO1xuICBwdWJsaWMgb2djRmlsdGVyT3BlcmF0b3JzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UmVjb3JkPHN0cmluZywgYW55Pj4oXG4gICAgdW5kZWZpbmVkXG4gICk7XG4gIHB1YmxpYyBpZ29TcGF0aWFsU2VsZWN0b3JzO1xuICBwdWJsaWMgdmFsdWUgPSAnJztcbiAgcHVibGljIGlucHV0T3BlcmF0b3I7XG4gIHB1YmxpYyBzZWxlY3RlZEZpZWxkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U291cmNlRmllbGRzT3B0aW9uc1BhcmFtcz4oXG4gICAgdW5kZWZpbmVkXG4gICk7XG4gIHB1YmxpYyBmaWVsZHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTb3VyY2VGaWVsZHNPcHRpb25zUGFyYW1zW10+KFtdKTtcbiAgcHVibGljIGNvbG9yID0gJ3ByaW1hcnknO1xuICBwdWJsaWMgZGlzYWJsZWQ7XG4gIHB1YmxpYyBjdXJyZW50RmlsdGVySXNTcGF0aWFsJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgZGVmYXVsdFN0ZXBNaWxsaXNlY29uZCA9IDYwMDA7XG4gIHB1YmxpYyBpbnB1dENsZWFyYWJsZTogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIHJlZnJlc2hGaWx0ZXJzOiAoKSA9PiB2b2lkO1xuXG4gIEBJbnB1dCgpIGRhdGFzb3VyY2U6IE9nY0ZpbHRlcmFibGVEYXRhU291cmNlO1xuXG4gIEBJbnB1dCgpIG1hcDogTWFwQmFzZTtcblxuICBASW5wdXQoKSBjdXJyZW50RmlsdGVyOiBhbnk7XG5cbiAgc2V0IHNucmModmFsdWU6IGFueSkge1xuICAgIGNvbnN0IGNoZWNrU05SQzUwayA9IC9eXFxkezJ9W2EtbF1bMCwxXVswLTldJC9naTtcbiAgICBjb25zdCBjaGVja1NOUkMyNTBrID0gL15cXGR7Mn1bYS1wXSQvZ2k7XG4gICAgY29uc3QgY2hlY2tTTlJDMW0gPSAvXlxcZHsyfSQvZ2k7XG4gICAgaWYgKFxuICAgICAgY2hlY2tTTlJDMW0udGVzdCh2YWx1ZSkgfHxcbiAgICAgIGNoZWNrU05SQzI1MGsudGVzdCh2YWx1ZSkgfHxcbiAgICAgIGNoZWNrU05SQzUway50ZXN0KHZhbHVlKVxuICAgICkge1xuICAgICAgdGhpcy5fc25yYyA9IHZhbHVlO1xuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyLmlnb1NOUkMgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBnZXQgc25yYygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9zbnJjO1xuICB9XG5cbiAgcHJpdmF0ZSBfc25yYyA9ICcnO1xuXG4gIEBJbnB1dCgpIGZsb2F0TGFiZWw6IEZsb2F0TGFiZWxUeXBlO1xuXG4gIGdldCBhY3RpdmVGaWx0ZXJzKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmludGVyZmFjZU9nY0ZpbHRlcnMuZmlsdGVyKFxuICAgICAgKGYpID0+IGYuYWN0aXZlID09PSB0cnVlXG4gICAgKTtcbiAgfVxuXG4gIGdldCBhbGxvd2VkT3BlcmF0b3JzKCkge1xuICAgIHJldHVybiBuZXcgT2djRmlsdGVyV3JpdGVyKCkuY29tcHV0ZUFsbG93ZWRPcGVyYXRvcnMoXG4gICAgICB0aGlzLmZpZWxkcyQudmFsdWUsXG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIucHJvcGVydHlOYW1lLFxuICAgICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5hbGxvd2VkT3BlcmF0b3JzVHlwZVxuICAgICk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHdrdFNlcnZpY2U6IFdrdFNlcnZpY2UpIHtcbiAgICAvLyBUT0RPOiBGaWx0ZXIgcGVybWl0dGVkIG9wZXJhdG9yIGJhc2VkIG9uIHdmc2NhcGFiaWxpdGllc1xuICAgIC8vIE5lZWQgdG8gd29yayBvbiByZWdleCBvbiBYTUwgY2FwYWJpbGl0aWVzIGJlY2F1c2VcbiAgICAvLyBjb21hcGFyaXNvbiBvcGVyYXRvcidzIG5hbWUgdmFyaWVzIGJldHdlZW4gV0ZTIHNlcnZlcnMuLi5cbiAgICAvLyBFeDogSXNOdWxsIHZzIFByb3BlcnR5SXNOdWxsIHZzIElzTmlsIC4uLlxuICAgIHRoaXMuYWxsT2djRmlsdGVyT3BlcmF0b3JzID0gbmV3IE9nY0ZpbHRlcldyaXRlcigpLm9wZXJhdG9ycztcbiAgICB0aGlzLm9nY0ZpbHRlck9wZXJhdG9ycyQubmV4dCh0aGlzLmFsbE9nY0ZpbHRlck9wZXJhdG9ycyk7XG4gICAgdGhpcy5pZ29TcGF0aWFsU2VsZWN0b3JzID0gW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnZml4ZWRFeHRlbnQnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiAnc25yYydcbiAgICAgIH1cbiAgICBdO1xuICAgIC8vIFRPRE86IHNlbGVjdEZlYXR1cmUgJiBkcmF3RmVhdHVyZVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLnNvdXJjZUZpZWxkcykge1xuICAgICAgY29uc3Qgc0ZpZWxkcyA9IHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLnNvdXJjZUZpZWxkcy5maWx0ZXIoXG4gICAgICAgIChzZikgPT5cbiAgICAgICAgICBzZi5leGNsdWRlRnJvbU9nY0ZpbHRlcnMgPT09IHVuZGVmaW5lZCB8fCAhc2YuZXhjbHVkZUZyb21PZ2NGaWx0ZXJzXG4gICAgICApO1xuICAgICAgc0ZpZWxkcy5tYXAoKHNmcykgPT4ge1xuICAgICAgICBpZiAoc2ZzLnZhbHVlcykge1xuICAgICAgICAgIHNmcy52YWx1ZXMuc29ydCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZmllbGRzJC5uZXh0KHNGaWVsZHMpO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlRmllbGRzTGlzdCgpO1xuICAgIHRoaXMuc2VsZWN0ZWRGaWVsZCQubmV4dChcbiAgICAgIHRoaXMuZmllbGRzJC52YWx1ZS5maW5kKChmKSA9PiBmLm5hbWUgPT09IHRoaXMuY3VycmVudEZpbHRlci5wcm9wZXJ0eU5hbWUpXG4gICAgKTtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlc0xpc3QoKTtcbiAgICB0aGlzLnNlbGVjdGVkRmllbGQkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLm9nY0ZpbHRlck9wZXJhdG9ycyQubmV4dCh0aGlzLmFsbG93ZWRPcGVyYXRvcnMpO1xuICAgICAgaWYgKFxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmFsbG93ZWRPcGVyYXRvcnMpLmluZGV4T2YoXG4gICAgICAgICAgdGhpcy5jdXJyZW50RmlsdGVyLm9wZXJhdG9yXG4gICAgICAgICkgPT09IC0xXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5jdXJyZW50RmlsdGVyLm9wZXJhdG9yID0gT2JqZWN0LmtleXModGhpcy5hbGxvd2VkT3BlcmF0b3JzKVswXTtcbiAgICAgICAgdGhpcy5jdXJyZW50RmlsdGVyLm9wZXJhdG9yID0gT2JqZWN0LmtleXModGhpcy5hbGxvd2VkT3BlcmF0b3JzKVswXTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlVmFsdWVzTGlzdCgpO1xuICAgIH0pO1xuICAgIHRoaXMuY3VycmVudEZpbHRlcklzU3BhdGlhbCgpO1xuICB9XG5cbiAgdXBkYXRlRmllbGRzTGlzdCh2YWx1ZT86IHN0cmluZykge1xuICAgIHRoaXMuZmlsdGVyZWRGaWVsZHMkID1cbiAgICAgIHZhbHVlICYmIHZhbHVlLmxlbmd0aCA+IDAgPyBvZih0aGlzLl9maWx0ZXJGaWVsZHModmFsdWUpKSA6IHRoaXMuZmllbGRzJDtcbiAgICBpZiAodGhpcy5maWVsZHMkLnZhbHVlLmZpbmQoKGYpID0+IGYubmFtZSA9PT0gdmFsdWUpKSB7XG4gICAgICB0aGlzLmNoYW5nZUZpZWxkKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVWYWx1ZXNMaXN0KHZhbHVlPzogc3RyaW5nLCBwb3M/OiBudW1iZXIpIHtcbiAgICB0aGlzLmZpbHRlcmVkVmFsdWVzJCA9XG4gICAgICB2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPiAwXG4gICAgICAgID8gb2YodGhpcy5fZmlsdGVyVmFsdWVzKHZhbHVlKSlcbiAgICAgICAgOiB0aGlzLnNlbGVjdGVkRmllbGQkLnZhbHVlXG4gICAgICAgICAgPyBvZih0aGlzLnNlbGVjdGVkRmllbGQkLnZhbHVlLnZhbHVlcylcbiAgICAgICAgICA6IG9mKFtdKTtcbiAgICBpZiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoID49IDEpIHtcbiAgICAgIHRoaXMuY2hhbmdlUHJvcGVydHkodmFsdWUsIHBvcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZmlsdGVyRmllbGRzKHZhbHVlOiBzdHJpbmcpOiBTb3VyY2VGaWVsZHNPcHRpb25zUGFyYW1zW10ge1xuICAgIGNvbnN0IGtleXdvcmRSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICB2YWx1ZS5ub3JtYWxpemUoJ05GRCcpLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKSxcbiAgICAgICdnaSdcbiAgICApO1xuICAgIHJldHVybiB0aGlzLmZpZWxkcyQudmFsdWUuZmlsdGVyKCh2YWwpID0+XG4gICAgICBrZXl3b3JkUmVnZXgudGVzdChcbiAgICAgICAgdmFsLmFsaWFzLm5vcm1hbGl6ZSgnTkZEJykucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX2ZpbHRlclZhbHVlcyh2YWx1ZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGtleXdvcmRSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICB2YWx1ZVxuICAgICAgICAucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICcnKVxuICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAubm9ybWFsaXplKCdORkQnKVxuICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpLFxuICAgICAgJ2dpJ1xuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEZpZWxkJC52YWx1ZT8udmFsdWVzPy5maWx0ZXIoXG4gICAgICAodmFsKSA9PlxuICAgICAgICB2YWwgJiZcbiAgICAgICAga2V5d29yZFJlZ2V4LnRlc3QoXG4gICAgICAgICAgdmFsXG4gICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJylcbiAgICAgICAgKVxuICAgICk7XG4gIH1cblxuICBjbGVhclNlbGVjdGVkRmllbGQoKSB7XG4gICAgdGhpcy5jdXJyZW50RmlsdGVyLnByb3BlcnR5TmFtZSA9ICcnO1xuICAgIHRoaXMuc2VsZWN0ZWRGaWVsZCQubmV4dCh1bmRlZmluZWQpO1xuICAgIHRoaXMuY2xlYXJQcm9wZXJ0eSgpO1xuICB9XG5cbiAgaXNDbGVhcmFibGUocG9zPzogbnVtYmVyKSB7XG4gICAgY29uc3QgZGV0ZWN0ZWRQcm9wZXJ0eSA9IHRoaXMuZGV0ZWN0UHJvcGVydHkocG9zKTtcbiAgICBpZiAoZGV0ZWN0ZWRQcm9wZXJ0eSkge1xuICAgICAgcmV0dXJuIHRoaXMuY3VycmVudEZpbHRlcltkZXRlY3RlZFByb3BlcnR5XTtcbiAgICB9XG4gIH1cbiAgY2xlYXJQcm9wZXJ0eShwb3M/OiBudW1iZXIpIHtcbiAgICAvLyB0aGlzLmF1dG9Db21wbGV0ZUlucHV0VmFsdWVzLmNsb3NlUGFuZWwoKTtcbiAgICBjb25zdCBkZXRlY3RlZFByb3BlcnR5ID0gdGhpcy5kZXRlY3RQcm9wZXJ0eShwb3MpO1xuICAgIGlmIChkZXRlY3RlZFByb3BlcnR5KSB7XG4gICAgICByZXR1cm4gKHRoaXMuY3VycmVudEZpbHRlcltkZXRlY3RlZFByb3BlcnR5XSA9ICcnKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVGaWx0ZXJTdGF0ZShldmVudCkge1xuICAgIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuaW50ZXJmYWNlT2djRmlsdGVycy5maW5kKFxuICAgICAgKGYpID0+IGYuZmlsdGVyaWQgPT09IHRoaXMuY3VycmVudEZpbHRlci5maWx0ZXJpZFxuICAgICkuYWN0aXZlID0gZXZlbnQuY2hlY2tlZDtcbiAgICB0aGlzLnJlZnJlc2hGaWx0ZXJzKCk7XG4gIH1cblxuICBkZWxldGVGaWx0ZXIoKSB7XG4gICAgY29uc3Qgb2djRmlsdGVyczogT2djRmlsdGVyc09wdGlvbnMgPSB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzO1xuICAgIG9nY0ZpbHRlcnMuaW50ZXJmYWNlT2djRmlsdGVycyA9IG9nY0ZpbHRlcnMuaW50ZXJmYWNlT2djRmlsdGVycy5maWx0ZXIoXG4gICAgICAoZikgPT4gZi5maWx0ZXJpZCAhPT0gdGhpcy5jdXJyZW50RmlsdGVyLmZpbHRlcmlkXG4gICAgKTtcbiAgICB0aGlzLnJlZnJlc2hGaWx0ZXJzKCk7XG4gIH1cblxuICBjaGFuZ2VMb2dpY2FsKGxvZ2ljYWw6IHN0cmluZykge1xuICAgIHRoaXMuY3VycmVudEZpbHRlci5wYXJlbnRMb2dpY2FsID0gbG9naWNhbDtcbiAgICB0aGlzLnJlZnJlc2hGaWx0ZXJzKCk7XG4gIH1cblxuICBjaGFuZ2VPcGVyYXRvcihvcGVyYXRvcjogc3RyaW5nKSB7XG4gICAgdGhpcy5jdXJyZW50RmlsdGVyLm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgdGhpcy5jdXJyZW50RmlsdGVySXNTcGF0aWFsKCk7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXJJc1NwYXRpYWwkLnZhbHVlICYmXG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIud2t0X2dlb21ldHJ5Lmxlbmd0aCA9PT0gMFxuICAgICkge1xuICAgICAgdGhpcy5jaGFuZ2VTcGF0aWFsU2VsZWN0b3IodGhpcy5jdXJyZW50RmlsdGVyLmlnb1NwYXRpYWxTZWxlY3Rvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVmcmVzaEZpbHRlcnMoKTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VGaWVsZChmaWVsZDogc3RyaW5nKSB7XG4gICAgdGhpcy5jdXJyZW50RmlsdGVyLnByb3BlcnR5TmFtZSA9IGZpZWxkO1xuICAgIHRoaXMuc2VsZWN0ZWRGaWVsZCQubmV4dChcbiAgICAgIHRoaXMuZmllbGRzJC52YWx1ZS5maW5kKChmKSA9PiBmLm5hbWUgPT09IHRoaXMuY3VycmVudEZpbHRlci5wcm9wZXJ0eU5hbWUpXG4gICAgKTtcbiAgICB0aGlzLnJlZnJlc2hGaWx0ZXJzKCk7XG4gIH1cblxuICAvLyBJc3N1ZSB3aXRoIG1hcHNlcnZlciA3LjIgYW5kIFBvc3RnaXMgbGF5ZXJzLiBGaXhlZCBpbiA3LjRcbiAgLy8gRHVlIHRvIHRoaXMgaXNzdWUsIHRoZSBjaGVja2JveCBpcyBoaWRlLlxuICBjaGFuZ2VDYXNlU2Vuc2l0aXZlKG1hdGNoQ2FzZSkge1xuICAgIHRoaXMuY3VycmVudEZpbHRlci5tYXRjaENhc2UgPSBtYXRjaENhc2UuY2hlY2tlZDtcbiAgICB0aGlzLnJlZnJlc2hGaWx0ZXJzKCk7XG4gIH1cblxuICBjaGFuZ2VQcm9wZXJ0eSh2YWx1ZTogYW55LCBwb3M/OiBudW1iZXIsIHJlZnJlc2hGaWx0ZXIgPSB0cnVlKSB7XG4gICAgY29uc3QgZGV0ZWN0ZWRQcm9wZXJ0eSA9IHRoaXMuZGV0ZWN0UHJvcGVydHkocG9zKTtcbiAgICBpZiAoZGV0ZWN0ZWRQcm9wZXJ0eSkge1xuICAgICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5pbnRlcmZhY2VPZ2NGaWx0ZXJzLmZpbmQoXG4gICAgICAgIChmKSA9PiBmLmZpbHRlcmlkID09PSB0aGlzLmN1cnJlbnRGaWx0ZXIuZmlsdGVyaWRcbiAgICAgIClbZGV0ZWN0ZWRQcm9wZXJ0eV0gPSB2YWx1ZTtcblxuICAgICAgaWYgKHJlZnJlc2hGaWx0ZXIpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoRmlsdGVycygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNoYW5nZU51bWVyaWNQcm9wZXJ0eSh2YWx1ZSwgcG9zOiBudW1iZXIpIHtcbiAgICB0aGlzLmNoYW5nZVByb3BlcnR5KHBhcnNlRmxvYXQodmFsdWUpLCBwb3MpO1xuICB9XG5cbiAgY2hhbmdlU3BhdGlhbFNlbGVjdG9yKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXIuaWdvU3BhdGlhbFNlbGVjdG9yID0gdmFsdWU7XG5cbiAgICBpZiAodmFsdWUgPT09ICdmaXhlZEV4dGVudCcpIHtcbiAgICAgIHRoaXMuY2hhbmdlTWFwRXh0ZW50R2VvbWV0cnkoZmFsc2UpO1xuICAgIH1cbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXJJc1NwYXRpYWwoKTtcbiAgICB0aGlzLnJlZnJlc2hGaWx0ZXJzKCk7XG4gIH1cblxuICBjaGFuZ2VTTlJDKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnNucmMgPSB2YWx1ZTtcbiAgICB0aGlzLmNoYW5nZVNOUkNHZW9tZXRyeSgpO1xuICB9XG5cbiAgY2hhbmdlU05SQ0dlb21ldHJ5KCkge1xuICAgIGNvbnN0IGludGVyZmFjZU9nY0ZpbHRlciA9XG4gICAgICB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmludGVyZmFjZU9nY0ZpbHRlcnMuZmluZChcbiAgICAgICAgKGYpID0+IGYuZmlsdGVyaWQgPT09IHRoaXMuY3VycmVudEZpbHRlci5maWx0ZXJpZFxuICAgICAgKTtcbiAgICBpZiAoIWludGVyZmFjZU9nY0ZpbHRlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNucmMgJiYgdGhpcy5jdXJyZW50RmlsdGVyLmlnb1NwYXRpYWxTZWxlY3RvciA9PT0gJ3NucmMnKSB7XG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIud2t0X2dlb21ldHJ5ID0gdGhpcy53a3RTZXJ2aWNlLnNucmNUb1drdChcbiAgICAgICAgdGhpcy5zbnJjLFxuICAgICAgICB0aGlzLm1hcC5wcm9qZWN0aW9uXG4gICAgICApLndrdFBvbHk7XG4gICAgfVxuICAgIHRoaXMucmVmcmVzaEZpbHRlcnMoKTtcbiAgfVxuXG4gIGNoYW5nZU1hcEV4dGVudEdlb21ldHJ5KHJlZnJlc2ggPSB0cnVlKSB7XG4gICAgY29uc3QgaW50ZXJmYWNlT2djRmlsdGVyID1cbiAgICAgIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuaW50ZXJmYWNlT2djRmlsdGVycy5maW5kKFxuICAgICAgICAoZikgPT4gZi5maWx0ZXJpZCA9PT0gdGhpcy5jdXJyZW50RmlsdGVyLmZpbHRlcmlkXG4gICAgICApO1xuICAgIGlmICghaW50ZXJmYWNlT2djRmlsdGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY3VycmVudEZpbHRlci5pZ29TcGF0aWFsU2VsZWN0b3IgPT09ICdmaXhlZEV4dGVudCcpIHtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlci53a3RfZ2VvbWV0cnkgPSB0aGlzLndrdFNlcnZpY2UuZXh0ZW50VG9Xa3QoXG4gICAgICAgIHRoaXMubWFwLnByb2plY3Rpb24sXG4gICAgICAgIHRoaXMubWFwLnZpZXdDb250cm9sbGVyLmdldEV4dGVudCgpLFxuICAgICAgICB0aGlzLm1hcC5wcm9qZWN0aW9uXG4gICAgICApLndrdFBvbHk7XG4gICAgfVxuICAgIGlmIChyZWZyZXNoKSB7XG4gICAgICB0aGlzLnJlZnJlc2hGaWx0ZXJzKCk7XG4gICAgfVxuICB9XG5cbiAgZGV0ZWN0UHJvcGVydHkocG9zPzogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHRoaXMuY3VycmVudEZpbHRlci5vcGVyYXRvcikge1xuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzTm90RXF1YWxUbzpcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0VxdWFsVG86XG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNHcmVhdGVyVGhhbjpcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0dyZWF0ZXJUaGFuT3JFcXVhbFRvOlxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzTGVzc1RoYW46XG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNMZXNzVGhhbk9yRXF1YWxUbzpcbiAgICAgICAgcmV0dXJuICdleHByZXNzaW9uJztcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0xpa2U6XG4gICAgICAgIHJldHVybiAncGF0dGVybic7XG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNCZXR3ZWVuOlxuICAgICAgICByZXR1cm4gcG9zICYmIHBvcyA9PT0gMVxuICAgICAgICAgID8gJ2xvd2VyQm91bmRhcnknXG4gICAgICAgICAgOiBwb3MgJiYgcG9zID09PSAyXG4gICAgICAgICAgICA/ICd1cHBlckJvdW5kYXJ5J1xuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLkR1cmluZzpcbiAgICAgICAgcmV0dXJuIHBvcyAmJiBwb3MgPT09IDFcbiAgICAgICAgICA/ICdiZWdpbidcbiAgICAgICAgICA6IHBvcyAmJiBwb3MgPT09IDJcbiAgICAgICAgICAgID8gJ2VuZCdcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3VycmVudEZpbHRlcklzU3BhdGlhbCgpIHtcbiAgICBsZXQgaXNTcGF0aWFsID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuY3VycmVudEZpbHRlcikge1xuICAgICAgaXNTcGF0aWFsID1cbiAgICAgICAgW1xuICAgICAgICAgIE9nY0ZpbHRlck9wZXJhdG9yLkNvbnRhaW5zLFxuICAgICAgICAgIE9nY0ZpbHRlck9wZXJhdG9yLkludGVyc2VjdHMsXG4gICAgICAgICAgT2djRmlsdGVyT3BlcmF0b3IuV2l0aGluXG4gICAgICAgIF0uaW5kZXhPZih0aGlzLmN1cnJlbnRGaWx0ZXIub3BlcmF0b3IpICE9PSAtMTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50RmlsdGVySXNTcGF0aWFsJC5uZXh0KGlzU3BhdGlhbCk7XG4gIH1cblxuICBpc1RlbXBvcmFsT3BlcmF0b3IoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlci5vcGVyYXRvci50b0xvd2VyQ2FzZSgpID09PVxuICAgICAgdGhpcy5vZ2NGaWx0ZXJPcGVyYXRvci5EdXJpbmcudG9Mb3dlckNhc2UoKVxuICAgICk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJvZ2MtZmlsdGVyLWZvcm0tY29udGFpbmVyXCI+XG4gIDxtYXQtY2hlY2tib3hcbiAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmZpbHRlci50b2dnbGVGaWx0ZXJTdGF0ZScgfCB0cmFuc2xhdGVcIlxuICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgIChjaGFuZ2UpPVwidG9nZ2xlRmlsdGVyU3RhdGUoJGV2ZW50KVwiXG4gICAgW2NoZWNrZWRdPVwiY3VycmVudEZpbHRlci5hY3RpdmVcIlxuICA+XG4gIDwvbWF0LWNoZWNrYm94PlxuXG4gIDxtYXQtZm9ybS1maWVsZFxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgIGxvZ2ljYWw6XG4gICAgICAgIGFjdGl2ZUZpbHRlcnMuaW5kZXhPZihjdXJyZW50RmlsdGVyKSAhPT0gMCAmJlxuICAgICAgICBjdXJyZW50RmlsdGVyLmFjdGl2ZSA9PT0gdHJ1ZSxcbiAgICAgIGxvZ2ljYWxIaWRkZW46XG4gICAgICAgIGFjdGl2ZUZpbHRlcnMuaW5kZXhPZihjdXJyZW50RmlsdGVyKSA9PT0gMCB8fFxuICAgICAgICBjdXJyZW50RmlsdGVyLmFjdGl2ZSAhPT0gdHJ1ZVxuICAgIH1cIlxuICA+XG4gICAgPG1hdC1zZWxlY3RcbiAgICAgIFtkaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxuICAgICAgW3ZhbHVlXT1cImN1cnJlbnRGaWx0ZXIucGFyZW50TG9naWNhbFwiXG4gICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYWJvdmVcIlxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICBbbWF0VG9vbHRpcF09XCJcbiAgICAgICAgY3VycmVudEZpbHRlci5wYXJlbnRMb2dpY2FsXG4gICAgICAgICAgPyAoJ2lnby5nZW8ub3BlcmF0b3JzLnRvb2x0aXAuJyArIGN1cnJlbnRGaWx0ZXIucGFyZW50TG9naWNhbFxuICAgICAgICAgICAgfCB0cmFuc2xhdGUpXG4gICAgICAgICAgOiAnJ1xuICAgICAgXCJcbiAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiY2hhbmdlTG9naWNhbCgkZXZlbnQudmFsdWUpXCJcbiAgICA+XG4gICAgICA8bWF0LW9wdGlvblxuICAgICAgICBbdmFsdWVdPVwib2djRmlsdGVyT3BlcmF0b3IuQW5kXCJcbiAgICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImFib3ZlXCJcbiAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLm9wZXJhdG9ycy50b29sdGlwLkFuZCcgfCB0cmFuc2xhdGVcIlxuICAgICAgPlxuICAgICAgICB7eyAnaWdvLmdlby5vcGVyYXRvcnMuQW5kJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgW3ZhbHVlXT1cIm9nY0ZpbHRlck9wZXJhdG9yLk9yXCJcbiAgICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImFib3ZlXCJcbiAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLm9wZXJhdG9ycy50b29sdGlwLk9yJyB8IHRyYW5zbGF0ZVwiXG4gICAgICA+XG4gICAgICAgIHt7ICdpZ28uZ2VvLm9wZXJhdG9ycy5PcicgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICA8L21hdC1zZWxlY3Q+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgPG1hdC1mb3JtLWZpZWxkXG4gICAgY2xhc3M9XCJmaWVsZFwiXG4gICAgKm5nSWY9XCJcbiAgICAgIChjdXJyZW50RmlsdGVySXNTcGF0aWFsJCB8IGFzeW5jKSA9PT0gZmFsc2UgJiZcbiAgICAgIChmaWVsZHMkIHwgYXN5bmMpICYmXG4gICAgICAoZmllbGRzJCB8IGFzeW5jKS5sZW5ndGggPiAwICYmXG4gICAgICAoZmllbGRzJCB8IGFzeW5jKVswXS5uYW1lICE9PSAnJ1xuICAgIFwiXG4gICAgKG1vdXNlZW50ZXIpPVwiaW5wdXRDbGVhcmFibGUgPSAnc2VsZWN0RmllbGQnXCJcbiAgICAobW91c2VsZWF2ZSk9XCJpbnB1dENsZWFyYWJsZSA9IHVuZGVmaW5lZFwiXG4gICAgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbFwiXG4gID5cbiAgICA8aW5wdXRcbiAgICAgIG1hdElucHV0XG4gICAgICBbcGxhY2Vob2xkZXJdPVwiJ2lnby5nZW8uc291cmNlRmllbGRzLnNlbGVjdEZpZWxkJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcbiAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b0NvbXBsZXRlRmllbGRcIlxuICAgICAgW3ZhbHVlXT1cIihzZWxlY3RlZEZpZWxkJCB8IGFzeW5jKSA/IChzZWxlY3RlZEZpZWxkJCB8IGFzeW5jKS5hbGlhcyA6ICcnXCJcbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJhYm92ZVwiXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgIFttYXRUb29sdGlwXT1cIlxuICAgICAgICAoc2VsZWN0ZWRGaWVsZCQgfCBhc3luYylcbiAgICAgICAgICA/IChzZWxlY3RlZEZpZWxkJCB8IGFzeW5jKS5hbGlhc1xuICAgICAgICAgIDogKCdpZ28uZ2VvLnNvdXJjZUZpZWxkcy5zZWxlY3RGaWVsZCcgfCB0cmFuc2xhdGUpXG4gICAgICBcIlxuICAgICAgKGlucHV0KT1cInVwZGF0ZUZpZWxkc0xpc3QoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIlxuICAgIC8+XG4gICAgPG1hdC1hdXRvY29tcGxldGVcbiAgICAgICNhdXRvQ29tcGxldGVGaWVsZD1cIm1hdEF1dG9jb21wbGV0ZVwiXG4gICAgICAob3B0aW9uU2VsZWN0ZWQpPVwiY2hhbmdlRmllbGQoJGV2ZW50Lm9wdGlvbi5pZClcIlxuICAgID5cbiAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBmaWx0ZXJlZEZpZWxkcyQgfCBhc3luY1wiXG4gICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgICBbdmFsdWVdPVwiZmllbGQuYWxpYXNcIlxuICAgICAgICBbaWRdPVwiZmllbGQubmFtZVwiXG4gICAgICAgIFttYXRUb29sdGlwXT1cImZpZWxkLmFsaWFzXCJcbiAgICAgID5cbiAgICAgICAge3sgZmllbGQuYWxpYXMgfX1cbiAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICA8L21hdC1hdXRvY29tcGxldGU+XG4gICAgPGJ1dHRvblxuICAgICAgKm5nSWY9XCJcbiAgICAgICAgY3VycmVudEZpbHRlci5wcm9wZXJ0eU5hbWUgJiZcbiAgICAgICAgaW5wdXRDbGVhcmFibGUgPT09ICdzZWxlY3RGaWVsZCcgJiZcbiAgICAgICAgY3VycmVudEZpbHRlci5hY3RpdmVcbiAgICAgIFwiXG4gICAgICBtYXRTdWZmaXhcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxuICAgICAgKGNsaWNrKT1cImNsZWFyU2VsZWN0ZWRGaWVsZCgpXCJcbiAgICA+XG4gICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gIDxtYXQtZm9ybS1maWVsZFxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgIG9wZXJhdG9yOiAoY3VycmVudEZpbHRlcklzU3BhdGlhbCQgfCBhc3luYykgPT09IGZhbHNlLFxuICAgICAgZHVhbElucHV0OiAoY3VycmVudEZpbHRlcklzU3BhdGlhbCQgfCBhc3luYylcbiAgICB9XCJcbiAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCJcbiAgPlxuICAgIDxtYXQtc2VsZWN0XG4gICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICBbbWF0VG9vbHRpcF09XCJcbiAgICAgICAgY3VycmVudEZpbHRlci5vcGVyYXRvclxuICAgICAgICAgID8gKCdpZ28uZ2VvLm9wZXJhdG9ycy50b29sdGlwLicgKyBjdXJyZW50RmlsdGVyLm9wZXJhdG9yIHwgdHJhbnNsYXRlKVxuICAgICAgICAgIDogKCdpZ28uZ2VvLmZpbHRlci5zZWxlY3RPcGVyYXRvcicgfCB0cmFuc2xhdGUpXG4gICAgICBcIlxuICAgICAgW2Rpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gICAgICBbdmFsdWVdPVwiY3VycmVudEZpbHRlci5vcGVyYXRvclwiXG4gICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cImNoYW5nZU9wZXJhdG9yKCRldmVudC52YWx1ZSlcIlxuICAgID5cbiAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICpuZ0Zvcj1cImxldCBvcGVyYXRvciBvZiBvZ2NGaWx0ZXJPcGVyYXRvcnMkIHwgYXN5bmMgfCBrZXl2YWx1ZVwiXG4gICAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJhYm92ZVwiXG4gICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgICBbdmFsdWVdPVwib3BlcmF0b3Iua2V5XCJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8ub3BlcmF0b3JzLnRvb2x0aXAuJyArIG9wZXJhdG9yLmtleSB8IHRyYW5zbGF0ZVwiXG4gICAgICA+XG4gICAgICAgIHt7ICdpZ28uZ2VvLm9wZXJhdG9ycy4nICsgb3BlcmF0b3Iua2V5IHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1vcHRpb24+XG4gICAgPC9tYXQtc2VsZWN0PlxuICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gIDxtYXQtZm9ybS1maWVsZFxuICAgIGNsYXNzPVwic3BhdGlhbFNlbGVjdG9yXCJcbiAgICAqbmdJZj1cImN1cnJlbnRGaWx0ZXJJc1NwYXRpYWwkIHwgYXN5bmNcIlxuICA+XG4gICAgPG1hdC1zZWxlY3RcbiAgICAgIFtkaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxuICAgICAgW3ZhbHVlXT1cImN1cnJlbnRGaWx0ZXIuaWdvU3BhdGlhbFNlbGVjdG9yXCJcbiAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiY2hhbmdlU3BhdGlhbFNlbGVjdG9yKCRldmVudC52YWx1ZSlcIlxuICAgID5cbiAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICpuZ0Zvcj1cImxldCBpZ29TcGF0aWFsU2VsZWN0b3Igb2YgaWdvU3BhdGlhbFNlbGVjdG9yc1wiXG4gICAgICAgIFt2YWx1ZV09XCJpZ29TcGF0aWFsU2VsZWN0b3IudHlwZVwiXG4gICAgICA+XG4gICAgICAgIHt7ICdpZ28uZ2VvLnNwYXRpYWxTZWxlY3Rvci4nICsgaWdvU3BhdGlhbFNlbGVjdG9yLnR5cGUgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICA8L21hdC1zZWxlY3Q+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgPG1hdC1mb3JtLWZpZWxkXG4gICAgY2xhc3M9XCJzaW5nbGVJbnB1dFwiXG4gICAgKm5nSWY9XCJbJ2V4cHJlc3Npb24nLCAncGF0dGVybiddLmluZGV4T2YoZGV0ZWN0UHJvcGVydHkoKSkgIT09IC0xXCJcbiAgICAobW91c2VlbnRlcik9XCJpbnB1dENsZWFyYWJsZSA9ICdzZWxlY3RQcm9wZXJ0eSdcIlxuICAgIChtb3VzZWxlYXZlKT1cImlucHV0Q2xlYXJhYmxlID0gdW5kZWZpbmVkXCJcbiAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCJcbiAgPlxuICAgIDxpbnB1dFxuICAgICAgbWF0SW5wdXRcbiAgICAgIFtwbGFjZWhvbGRlcl09XCInaWdvLmdlby5maWx0ZXIucGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxuICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvQ29tcGxldGVWYWx1ZXNcIlxuICAgICAgW3ZhbHVlXT1cIlxuICAgICAgICBkZXRlY3RQcm9wZXJ0eSgpID09PSAnZXhwcmVzc2lvbidcbiAgICAgICAgICA/IGN1cnJlbnRGaWx0ZXIuZXhwcmVzc2lvblxuICAgICAgICAgIDogY3VycmVudEZpbHRlci5wYXR0ZXJuXG4gICAgICBcIlxuICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImFib3ZlXCJcbiAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgW21hdFRvb2x0aXBdPVwiXG4gICAgICAgIGRldGVjdFByb3BlcnR5KCkgPT09ICdleHByZXNzaW9uJ1xuICAgICAgICAgID8gY3VycmVudEZpbHRlci5leHByZXNzaW9uIHx8ICcnXG4gICAgICAgICAgOiBjdXJyZW50RmlsdGVyLnBhdHRlcm4gfHwgJydcbiAgICAgIFwiXG4gICAgICAoaW5wdXQpPVwidXBkYXRlVmFsdWVzTGlzdCgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiXG4gICAgLz5cbiAgICA8bWF0LWF1dG9jb21wbGV0ZVxuICAgICAgI2F1dG9Db21wbGV0ZVZhbHVlcz1cIm1hdEF1dG9jb21wbGV0ZVwiXG4gICAgICAob3B0aW9uU2VsZWN0ZWQpPVwiY2hhbmdlUHJvcGVydHkoJGV2ZW50Lm9wdGlvbi52YWx1ZSlcIlxuICAgID5cbiAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBmaWx0ZXJlZFZhbHVlcyQgfCBhc3luY1wiXG4gICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgICBbbWF0VG9vbHRpcF09XCJ2YWx1ZVwiXG4gICAgICA+XG4gICAgICAgIHt7IHZhbHVlIH19XG4gICAgICA8L21hdC1vcHRpb24+XG4gICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwiXG4gICAgICAgIGlzQ2xlYXJhYmxlKCkgJiZcbiAgICAgICAgaW5wdXRDbGVhcmFibGUgPT09ICdzZWxlY3RQcm9wZXJ0eScgJiZcbiAgICAgICAgY3VycmVudEZpbHRlci5hY3RpdmVcbiAgICAgIFwiXG4gICAgICBtYXRTdWZmaXhcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxuICAgICAgKGNsaWNrKT1cImNsZWFyUHJvcGVydHkoKVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cblxuICA8ZGl2IGNsYXNzPVwiaWdvLWxheWVyLWJ1dHRvbi1ncm91cFwiPlxuICAgIDxidXR0b25cbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgY29sbGFwc2libGVCdXR0b25cbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmZpbHRlci5yZW1vdmVGaWx0ZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgIGNvbG9yPVwid2FyblwiXG4gICAgICAoY2xpY2spPVwiZGVsZXRlRmlsdGVyKClcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8bWF0LWZvcm0tZmllbGRcbiAgICBjbGFzcz1cInNucmNcIlxuICAgICpuZ0lmPVwiXG4gICAgICAoY3VycmVudEZpbHRlcklzU3BhdGlhbCQgfCBhc3luYykgJiZcbiAgICAgIGN1cnJlbnRGaWx0ZXIuaWdvU3BhdGlhbFNlbGVjdG9yID09PSAnc25yYydcbiAgICBcIlxuICAgIChtb3VzZWVudGVyKT1cImlucHV0Q2xlYXJhYmxlID0gJ3NlbGVjdFNOUkMnXCJcbiAgICAobW91c2VsZWF2ZSk9XCJpbnB1dENsZWFyYWJsZSA9IHVuZGVmaW5lZFwiXG4gICAgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbFwiXG4gID5cbiAgICA8aW5wdXRcbiAgICAgIG1hdElucHV0XG4gICAgICBbcGxhY2Vob2xkZXJdPVwiJ2lnby5nZW8uZmlsdGVyLnBsYWNlaG9sZGVyU25yYycgfCB0cmFuc2xhdGVcIlxuICAgICAgW3ZhbHVlXT1cImN1cnJlbnRGaWx0ZXIuaWdvU05SQ1wiXG4gICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYWJvdmVcIlxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICBbbWF0VG9vbHRpcF09XCJjdXJyZW50RmlsdGVyLmlnb1NOUkMgPyBjdXJyZW50RmlsdGVyLmlnb1NOUkMgOiAnJ1wiXG4gICAgICAoaW5wdXQpPVwiY2hhbmdlU05SQygkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiXG4gICAgLz5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdJZj1cImN1cnJlbnRGaWx0ZXIuaWdvU05SQ1wiXG4gICAgICBtYXRTdWZmaXhcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyXCJcbiAgICAgIFtkaXNhYmxlZF09XCJcbiAgICAgICAgIWN1cnJlbnRGaWx0ZXIuYWN0aXZlICYmXG4gICAgICAgIGlucHV0Q2xlYXJhYmxlID09PSAnc2VsZWN0U05SQycgJiZcbiAgICAgICAgY3VycmVudEZpbHRlci5hY3RpdmVcbiAgICAgIFwiXG4gICAgICAoY2xpY2spPVwiY3VycmVudEZpbHRlci5pZ29TTlJDID0gJydcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiXG4gICAgICAoY3VycmVudEZpbHRlcklzU3BhdGlhbCQgfCBhc3luYykgJiZcbiAgICAgIGN1cnJlbnRGaWx0ZXIuaWdvU3BhdGlhbFNlbGVjdG9yID09PSAnZml4ZWRFeHRlbnQnXG4gICAgXCJcbiAgPlxuICAgIDxidXR0b25cbiAgICAgIFtkaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxuICAgICAgKm5nSWY9XCJjdXJyZW50RmlsdGVyLmlnb1NwYXRpYWxTZWxlY3RvciA9PT0gJ2ZpeGVkRXh0ZW50J1wiXG4gICAgICBtYXRTdWZmaXhcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgW2Rpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gICAgICAoY2xpY2spPVwiY2hhbmdlTWFwRXh0ZW50R2VvbWV0cnkoKVwiXG4gICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5zcGF0aWFsU2VsZWN0b3IuYnRuU2V0RXh0ZW50JyB8IHRyYW5zbGF0ZVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uPnpvb21fb3V0X21hcDwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJvZ2MtZmlsdGVyLWZvcm0tY29udGFpbmVyXCI+XG4gIDxtYXQtZm9ybS1maWVsZFxuICAgIGNsYXNzPVwiZHVhbElucHV0XCJcbiAgICAqbmdJZj1cIlxuICAgICAgIWlzVGVtcG9yYWxPcGVyYXRvcigpICYmXG4gICAgICBbJ2xvd2VyQm91bmRhcnknLCAnYmVnaW4nXS5pbmRleE9mKGRldGVjdFByb3BlcnR5KDEpKSAhPT0gLTFcbiAgICBcIlxuICAgIChtb3VzZWVudGVyKT1cImlucHV0Q2xlYXJhYmxlID0gJ3NlbGVjdFByb3BlcnR5MSdcIlxuICAgIChtb3VzZWxlYXZlKT1cImlucHV0Q2xlYXJhYmxlID0gdW5kZWZpbmVkXCJcbiAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCJcbiAgPlxuICAgIDxpbnB1dFxuICAgICAgbWF0SW5wdXRcbiAgICAgIFtwbGFjZWhvbGRlcl09XCInaWdvLmdlby5maWx0ZXIucGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxuICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvRHVhbFZhbHVlT3BlcmF0b3IxXCJcbiAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgW3ZhbHVlXT1cIlxuICAgICAgICBkZXRlY3RQcm9wZXJ0eSgxKSA9PT0gJ2xvd2VyQm91bmRhcnknXG4gICAgICAgICAgPyBjdXJyZW50RmlsdGVyLmxvd2VyQm91bmRhcnlcbiAgICAgICAgICA6IGN1cnJlbnRGaWx0ZXIuYmVnaW5cbiAgICAgIFwiXG4gICAgICAoaW5wdXQpPVwidXBkYXRlVmFsdWVzTGlzdCgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlLCAxKVwiXG4gICAgLz5cbiAgICA8bWF0LWF1dG9jb21wbGV0ZVxuICAgICAgI2F1dG9EdWFsVmFsdWVPcGVyYXRvcjE9XCJtYXRBdXRvY29tcGxldGVcIlxuICAgICAgKG9wdGlvblNlbGVjdGVkKT1cImNoYW5nZU51bWVyaWNQcm9wZXJ0eSgkZXZlbnQub3B0aW9uLnZhbHVlLCAxKVwiXG4gICAgPlxuICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgKm5nRm9yPVwibGV0IHZhbHVlIG9mIGZpbHRlcmVkVmFsdWVzJCB8IGFzeW5jXCJcbiAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAgIFttYXRUb29sdGlwXT1cInZhbHVlXCJcbiAgICAgID5cbiAgICAgICAge3sgdmFsdWUgfX1cbiAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICA8L21hdC1hdXRvY29tcGxldGU+XG4gICAgPGJ1dHRvblxuICAgICAgKm5nSWY9XCJcbiAgICAgICAgaXNDbGVhcmFibGUoMSkgJiZcbiAgICAgICAgaW5wdXRDbGVhcmFibGUgPT09ICdzZWxlY3RQcm9wZXJ0eTEnICYmXG4gICAgICAgIGN1cnJlbnRGaWx0ZXIuYWN0aXZlXG4gICAgICBcIlxuICAgICAgbWF0U3VmZml4XG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIGFyaWEtbGFiZWw9XCJDbGVhclwiXG4gICAgICBbZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcbiAgICAgIChjbGljayk9XCJjbGVhclByb3BlcnR5KDEpXCJcbiAgICA+XG4gICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gIDxtYXQtZm9ybS1maWVsZFxuICAgIGNsYXNzPVwiZHVhbElucHV0XCJcbiAgICAqbmdJZj1cIlxuICAgICAgIWlzVGVtcG9yYWxPcGVyYXRvcigpICYmXG4gICAgICBbJ3VwcGVyQm91bmRhcnknLCAnZW5kJ10uaW5kZXhPZihkZXRlY3RQcm9wZXJ0eSgyKSkgIT09IC0xXG4gICAgXCJcbiAgICAobW91c2VlbnRlcik9XCJpbnB1dENsZWFyYWJsZSA9ICdzZWxlY3RQcm9wZXJ0eTInXCJcbiAgICAobW91c2VsZWF2ZSk9XCJpbnB1dENsZWFyYWJsZSA9IHVuZGVmaW5lZFwiXG4gICAgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbFwiXG4gID5cbiAgICA8aW5wdXRcbiAgICAgIG1hdElucHV0XG4gICAgICBbcGxhY2Vob2xkZXJdPVwiJ2lnby5nZW8uZmlsdGVyLnBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcbiAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b0R1YWxWYWx1ZU9wZXJhdG9yMlwiXG4gICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgIFt2YWx1ZV09XCJcbiAgICAgICAgZGV0ZWN0UHJvcGVydHkoMikgPT09ICd1cHBlckJvdW5kYXJ5J1xuICAgICAgICAgID8gY3VycmVudEZpbHRlci51cHBlckJvdW5kYXJ5XG4gICAgICAgICAgOiBjdXJyZW50RmlsdGVyLmVuZFxuICAgICAgXCJcbiAgICAgIChpbnB1dCk9XCJ1cGRhdGVWYWx1ZXNMaXN0KCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUsIDIpXCJcbiAgICAvPlxuICAgIDxtYXQtYXV0b2NvbXBsZXRlXG4gICAgICAjYXV0b0R1YWxWYWx1ZU9wZXJhdG9yMj1cIm1hdEF1dG9jb21wbGV0ZVwiXG4gICAgICAob3B0aW9uU2VsZWN0ZWQpPVwiY2hhbmdlTnVtZXJpY1Byb3BlcnR5KCRldmVudC5vcHRpb24udmFsdWUsIDIpXCJcbiAgICA+XG4gICAgICA8bWF0LW9wdGlvblxuICAgICAgICAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgZmlsdGVyZWRWYWx1ZXMkIHwgYXN5bmNcIlxuICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwidmFsdWVcIlxuICAgICAgPlxuICAgICAgICB7eyB2YWx1ZSB9fVxuICAgICAgPC9tYXQtb3B0aW9uPlxuICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdJZj1cIlxuICAgICAgICBpc0NsZWFyYWJsZSgyKSAmJlxuICAgICAgICBpbnB1dENsZWFyYWJsZSA9PT0gJ3NlbGVjdFByb3BlcnR5MicgJiZcbiAgICAgICAgY3VycmVudEZpbHRlci5hY3RpdmVcbiAgICAgIFwiXG4gICAgICBtYXRTdWZmaXhcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxuICAgICAgKGNsaWNrKT1cImNsZWFyUHJvcGVydHkoMilcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG48L2Rpdj5cblxuPGlnby1vZ2MtZmlsdGVyLXRpbWVcbiAgKm5nSWY9XCJpc1RlbXBvcmFsT3BlcmF0b3IoKVwiXG4gIFtkYXRhc291cmNlXT1cImRhdGFzb3VyY2VcIlxuICBbY3VycmVudEZpbHRlcl09XCJjdXJyZW50RmlsdGVyXCJcbiAgKGNoYW5nZVByb3BlcnR5KT1cImNoYW5nZVByb3BlcnR5KCRldmVudC52YWx1ZSwgJGV2ZW50LnBvcylcIlxuPlxuPC9pZ28tb2djLWZpbHRlci10aW1lPlxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './ogc-filter-selection.component';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9maWx0ZXIvb2djLWZpbHRlci1zZWxlY3Rpb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxrQ0FBa0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vb2djLWZpbHRlci1zZWxlY3Rpb24uY29tcG9uZW50JztcbiJdfQ==
|