@igo2/geo 18.0.0 → 18.0.1-next.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/fesm2022/igo2-geo.mjs +684 -709
- package/fesm2022/igo2-geo.mjs.map +1 -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 +1 -8
- package/lib/style/style-list/style-list.service.d.ts +1 -1
- package/package.json +15 -17
- package/src/lib/layer/layer-list/layer-list.theme.scss +2 -1
- package/src/lib/map/menu-button/menu-button.theming.scss +3 -3
- package/src/style/style.scss +1 -1
- package/esm2022/igo2-geo.mjs +0 -5
- package/esm2022/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +0 -234
- package/esm2022/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +0 -272
- package/esm2022/lib/catalog/catalog-browser/catalog-browser.component.mjs +0 -246
- package/esm2022/lib/catalog/catalog-browser/catalog-browser.module.mjs +0 -19
- package/esm2022/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +0 -136
- package/esm2022/lib/catalog/catalog-library/catalog-library-item.component.mjs +0 -60
- package/esm2022/lib/catalog/catalog-library/catalog-library.component.mjs +0 -232
- package/esm2022/lib/catalog/catalog-library/catalog-library.module.mjs +0 -24
- package/esm2022/lib/catalog/catalog-library/index.mjs +0 -4
- package/esm2022/lib/catalog/catalog.module.mjs +0 -26
- package/esm2022/lib/catalog/index.mjs +0 -6
- package/esm2022/lib/catalog/shared/catalog.abstract.mjs +0 -32
- package/esm2022/lib/catalog/shared/catalog.enum.mjs +0 -16
- package/esm2022/lib/catalog/shared/catalog.interface.mjs +0 -2
- package/esm2022/lib/catalog/shared/catalog.service.mjs +0 -706
- package/esm2022/lib/catalog/shared/catalogs.mjs +0 -75
- package/esm2022/lib/catalog/shared/index.mjs +0 -5
- package/esm2022/lib/datasource/index.mjs +0 -3
- package/esm2022/lib/datasource/shared/capabilities.interface.mjs +0 -17
- package/esm2022/lib/datasource/shared/capabilities.service.mjs +0 -441
- package/esm2022/lib/datasource/shared/datasource.service.mjs +0 -258
- package/esm2022/lib/datasource/shared/datasources/any-datasource.interface.mjs +0 -2
- package/esm2022/lib/datasource/shared/datasources/any-datasource.mjs +0 -2
- package/esm2022/lib/datasource/shared/datasources/arcgisrest-datasource.interface.mjs +0 -2
- package/esm2022/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +0 -222
- package/esm2022/lib/datasource/shared/datasources/carto-datasource.interface.mjs +0 -2
- package/esm2022/lib/datasource/shared/datasources/carto-datasource.mjs +0 -118
- package/esm2022/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +0 -2
- package/esm2022/lib/datasource/shared/datasources/cluster-datasource.mjs +0 -24
- package/esm2022/lib/datasource/shared/datasources/data.service.mjs +0 -3
- package/esm2022/lib/datasource/shared/datasources/datasource.interface.mjs +0 -2
- package/esm2022/lib/datasource/shared/datasources/datasource.mjs +0 -41
- package/esm2022/lib/datasource/shared/datasources/feature-datasource.interface.mjs +0 -2
- package/esm2022/lib/datasource/shared/datasources/feature-datasource.mjs +0 -52
- package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs +0 -2
- package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +0 -70
- package/esm2022/lib/datasource/shared/datasources/index.mjs +0 -36
- package/esm2022/lib/datasource/shared/datasources/mvt-datasource.interface.mjs +0 -2
- package/esm2022/lib/datasource/shared/datasources/mvt-datasource.mjs +0 -33
- package/esm2022/lib/datasource/shared/datasources/osm-datasource.interface.mjs +0 -2
- package/esm2022/lib/datasource/shared/datasources/osm-datasource.mjs +0 -14
- package/esm2022/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.mjs +0 -2
- package/esm2022/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +0 -60
- package/esm2022/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs +0 -2
- package/esm2022/lib/datasource/shared/datasources/tiledebug-datasource.mjs +0 -17
- package/esm2022/lib/datasource/shared/datasources/websocket-datasource.interface.mjs +0 -2
- package/esm2022/lib/datasource/shared/datasources/websocket-datasource.mjs +0 -56
- package/esm2022/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +0 -2
- package/esm2022/lib/datasource/shared/datasources/wfs-datasource.mjs +0 -137
- package/esm2022/lib/datasource/shared/datasources/wfs.service.mjs +0 -170
- package/esm2022/lib/datasource/shared/datasources/wms-datasource.interface.mjs +0 -2
- package/esm2022/lib/datasource/shared/datasources/wms-datasource.mjs +0 -227
- package/esm2022/lib/datasource/shared/datasources/wms-wfs.utils.mjs +0 -224
- package/esm2022/lib/datasource/shared/datasources/wmts-datasource.interface.mjs +0 -2
- package/esm2022/lib/datasource/shared/datasources/wmts-datasource.mjs +0 -18
- package/esm2022/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +0 -2
- package/esm2022/lib/datasource/shared/datasources/xyz-datasource.mjs +0 -11
- package/esm2022/lib/datasource/shared/index.mjs +0 -6
- package/esm2022/lib/datasource/shared/options/index.mjs +0 -5
- package/esm2022/lib/datasource/shared/options/options-api.interface.mjs +0 -2
- package/esm2022/lib/datasource/shared/options/options-api.providers.mjs +0 -15
- package/esm2022/lib/datasource/shared/options/options-api.service.mjs +0 -85
- package/esm2022/lib/datasource/shared/options/options.service.mjs +0 -3
- package/esm2022/lib/datasource/utils/index.mjs +0 -2
- package/esm2022/lib/datasource/utils/tilegrid.mjs +0 -20
- package/esm2022/lib/directions/directions-buttons/directions-buttons.component.mjs +0 -246
- package/esm2022/lib/directions/directions-buttons/index.mjs +0 -2
- package/esm2022/lib/directions/directions-inputs/directions-inputs.component.mjs +0 -312
- package/esm2022/lib/directions/directions-inputs/index.mjs +0 -2
- package/esm2022/lib/directions/directions-results/directions-results.component.mjs +0 -192
- package/esm2022/lib/directions/directions-results/index.mjs +0 -2
- package/esm2022/lib/directions/directions-sources/directions-source.interface.mjs +0 -5
- package/esm2022/lib/directions/directions-sources/directions-source.mjs +0 -3
- package/esm2022/lib/directions/directions-sources/directions-source.provider.mjs +0 -23
- package/esm2022/lib/directions/directions-sources/index.mjs +0 -5
- package/esm2022/lib/directions/directions-sources/osrm-directions-source.mjs +0 -159
- package/esm2022/lib/directions/directions.component.mjs +0 -437
- package/esm2022/lib/directions/directions.module.mjs +0 -46
- package/esm2022/lib/directions/directions.provider.mjs +0 -16
- package/esm2022/lib/directions/index.mjs +0 -8
- package/esm2022/lib/directions/shared/directions-source.service.mjs +0 -18
- package/esm2022/lib/directions/shared/directions.enum.mjs +0 -72
- package/esm2022/lib/directions/shared/directions.interface.mjs +0 -2
- package/esm2022/lib/directions/shared/directions.service.mjs +0 -239
- package/esm2022/lib/directions/shared/directions.utils.mjs +0 -522
- package/esm2022/lib/directions/shared/index.mjs +0 -6
- package/esm2022/lib/directions/shared/store.mjs +0 -21
- package/esm2022/lib/download/download-button/download-button.component.mjs +0 -48
- package/esm2022/lib/download/download-button/index.mjs +0 -2
- package/esm2022/lib/download/download.module.mjs +0 -24
- package/esm2022/lib/download/index.mjs +0 -3
- package/esm2022/lib/download/shared/download.interface.mjs +0 -2
- package/esm2022/lib/download/shared/download.service.mjs +0 -67
- package/esm2022/lib/download/shared/index.mjs +0 -3
- package/esm2022/lib/draw/draw/draw-layer-popup.component.mjs +0 -42
- package/esm2022/lib/draw/draw/draw-popup.component.mjs +0 -421
- package/esm2022/lib/draw/draw/draw-shorcuts.component.mjs +0 -28
- package/esm2022/lib/draw/draw/draw.component.mjs +0 -1136
- package/esm2022/lib/draw/draw/draw.module.mjs +0 -19
- package/esm2022/lib/draw/drawingTool.module.mjs +0 -18
- package/esm2022/lib/draw/index.mjs +0 -3
- package/esm2022/lib/draw/shared/draw-icon.service.mjs +0 -30
- package/esm2022/lib/draw/shared/draw.enum.mjs +0 -21
- package/esm2022/lib/draw/shared/draw.interface.mjs +0 -2
- package/esm2022/lib/draw/shared/draw.utils.mjs +0 -125
- package/esm2022/lib/draw/shared/index.mjs +0 -5
- package/esm2022/lib/environment/environment.interface.mjs +0 -2
- package/esm2022/lib/environment/index.mjs +0 -2
- package/esm2022/lib/feature/feature-details/feature-details.component.mjs +0 -306
- package/esm2022/lib/feature/feature-details/feature-details.directive.mjs +0 -56
- package/esm2022/lib/feature/feature-details/feature-details.module.mjs +0 -26
- package/esm2022/lib/feature/feature-details/index.mjs +0 -4
- package/esm2022/lib/feature/feature-form/feature-form.component.mjs +0 -101
- package/esm2022/lib/feature/feature-form/feature-form.module.mjs +0 -19
- package/esm2022/lib/feature/feature.module.mjs +0 -26
- package/esm2022/lib/feature/index.mjs +0 -5
- package/esm2022/lib/feature/shared/feature-store.utils.mjs +0 -28
- package/esm2022/lib/feature/shared/feature.enums.mjs +0 -9
- package/esm2022/lib/feature/shared/feature.interfaces.mjs +0 -2
- package/esm2022/lib/feature/shared/feature.utils.mjs +0 -332
- package/esm2022/lib/feature/shared/index.mjs +0 -8
- package/esm2022/lib/feature/shared/store.mjs +0 -143
- package/esm2022/lib/feature/shared/strategies/geo-properties.mjs +0 -216
- package/esm2022/lib/feature/shared/strategies/in-map-extent.mjs +0 -119
- package/esm2022/lib/feature/shared/strategies/in-map-resolution.mjs +0 -99
- package/esm2022/lib/feature/shared/strategies/index.mjs +0 -8
- package/esm2022/lib/feature/shared/strategies/loading-layer.mjs +0 -103
- package/esm2022/lib/feature/shared/strategies/loading.mjs +0 -136
- package/esm2022/lib/feature/shared/strategies/search.mjs +0 -158
- package/esm2022/lib/feature/shared/strategies/selection.mjs +0 -385
- package/esm2022/lib/feature/shared/strategies.utils.mjs +0 -37
- package/esm2022/lib/filter/filter.module.mjs +0 -131
- package/esm2022/lib/filter/index.mjs +0 -17
- package/esm2022/lib/filter/ogc-filter-button/index.mjs +0 -2
- package/esm2022/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +0 -141
- package/esm2022/lib/filter/ogc-filter-form/index.mjs +0 -2
- package/esm2022/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +0 -325
- package/esm2022/lib/filter/ogc-filter-selection/index.mjs +0 -2
- package/esm2022/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +0 -787
- package/esm2022/lib/filter/ogc-filter-time/index.mjs +0 -3
- package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +0 -201
- package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +0 -665
- package/esm2022/lib/filter/ogc-filterable-form/index.mjs +0 -2
- package/esm2022/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +0 -66
- package/esm2022/lib/filter/ogc-filterable-item/index.mjs +0 -2
- package/esm2022/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +0 -244
- package/esm2022/lib/filter/ogc-filterable-list/index.mjs +0 -3
- package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +0 -39
- package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +0 -32
- package/esm2022/lib/filter/shared/filterable-datasource.pipe.mjs +0 -63
- package/esm2022/lib/filter/shared/index.mjs +0 -12
- package/esm2022/lib/filter/shared/ogc-filter-time.service.mjs +0 -72
- package/esm2022/lib/filter/shared/ogc-filter.enum.mjs +0 -30
- package/esm2022/lib/filter/shared/ogc-filter.interface.mjs +0 -2
- package/esm2022/lib/filter/shared/ogc-filter.mjs +0 -756
- package/esm2022/lib/filter/shared/ogc-filter.service.mjs +0 -47
- package/esm2022/lib/filter/shared/spatial-filter.enum.mjs +0 -23
- package/esm2022/lib/filter/shared/spatial-filter.interface.mjs +0 -2
- package/esm2022/lib/filter/shared/spatial-filter.service.mjs +0 -282
- package/esm2022/lib/filter/shared/time-filter.enum.mjs +0 -13
- package/esm2022/lib/filter/shared/time-filter.interface.mjs +0 -2
- package/esm2022/lib/filter/shared/time-filter.service.mjs +0 -107
- package/esm2022/lib/filter/spatial-filter/spatial-filter-item/index.mjs +0 -2
- package/esm2022/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +0 -875
- package/esm2022/lib/filter/spatial-filter/spatial-filter-list/index.mjs +0 -2
- package/esm2022/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +0 -191
- package/esm2022/lib/filter/spatial-filter/spatial-filter-type/index.mjs +0 -2
- package/esm2022/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +0 -120
- package/esm2022/lib/filter/time-filter-button/index.mjs +0 -2
- package/esm2022/lib/filter/time-filter-button/time-filter-button.component.mjs +0 -70
- package/esm2022/lib/filter/time-filter-form/index.mjs +0 -2
- package/esm2022/lib/filter/time-filter-form/time-filter-form.component.mjs +0 -537
- package/esm2022/lib/filter/time-filter-item/index.mjs +0 -2
- package/esm2022/lib/filter/time-filter-item/time-filter-item.component.mjs +0 -90
- package/esm2022/lib/filter/time-filter-list/index.mjs +0 -3
- package/esm2022/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +0 -39
- package/esm2022/lib/filter/time-filter-list/time-filter-list.component.mjs +0 -24
- package/esm2022/lib/geo.module.mjs +0 -63
- package/esm2022/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +0 -559
- package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +0 -170
- package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +0 -24
- package/esm2022/lib/geometry/geometry-form-field/index.mjs +0 -4
- package/esm2022/lib/geometry/geometry.module.mjs +0 -18
- package/esm2022/lib/geometry/index.mjs +0 -3
- package/esm2022/lib/geometry/shared/controls/draw.mjs +0 -340
- package/esm2022/lib/geometry/shared/controls/index.mjs +0 -4
- package/esm2022/lib/geometry/shared/controls/modify.mjs +0 -538
- package/esm2022/lib/geometry/shared/controls/slice.mjs +0 -190
- package/esm2022/lib/geometry/shared/geometry.errors.mjs +0 -24
- package/esm2022/lib/geometry/shared/geometry.interfaces.mjs +0 -2
- package/esm2022/lib/geometry/shared/geometry.utils.mjs +0 -113
- package/esm2022/lib/geometry/shared/index.mjs +0 -5
- package/esm2022/lib/import-export/export-button/export-button.component.mjs +0 -49
- package/esm2022/lib/import-export/export-button/index.mjs +0 -2
- package/esm2022/lib/import-export/import-export/import-export.component.mjs +0 -876
- package/esm2022/lib/import-export/import-export/index.mjs +0 -2
- package/esm2022/lib/import-export/import-export.module.mjs +0 -31
- package/esm2022/lib/import-export/index.mjs +0 -5
- package/esm2022/lib/import-export/shared/drop-geo-file.directive.mjs +0 -114
- package/esm2022/lib/import-export/shared/export.errors.mjs +0 -15
- package/esm2022/lib/import-export/shared/export.interface.mjs +0 -2
- package/esm2022/lib/import-export/shared/export.service.mjs +0 -378
- package/esm2022/lib/import-export/shared/export.type.mjs +0 -13
- package/esm2022/lib/import-export/shared/export.utils.mjs +0 -51
- package/esm2022/lib/import-export/shared/import.errors.mjs +0 -39
- package/esm2022/lib/import-export/shared/import.interface.mjs +0 -2
- package/esm2022/lib/import-export/shared/import.service.mjs +0 -221
- package/esm2022/lib/import-export/shared/import.utils.mjs +0 -203
- package/esm2022/lib/import-export/shared/index.mjs +0 -11
- package/esm2022/lib/layer/index.mjs +0 -16
- package/esm2022/lib/layer/layer-group/index.mjs +0 -2
- package/esm2022/lib/layer/layer-group/layer-group.component.mjs +0 -103
- package/esm2022/lib/layer/layer-item/index.mjs +0 -2
- package/esm2022/lib/layer/layer-item/layer-item.component.mjs +0 -196
- package/esm2022/lib/layer/layer-legend/index.mjs +0 -2
- package/esm2022/lib/layer/layer-legend/layer-legend.component.mjs +0 -287
- package/esm2022/lib/layer/layer-legend-item/index.mjs +0 -2
- package/esm2022/lib/layer/layer-legend-item/layer-legend-item.component.mjs +0 -85
- package/esm2022/lib/layer/layer-legend-list/index.mjs +0 -3
- package/esm2022/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +0 -54
- package/esm2022/lib/layer/layer-legend-list/layer-legend-list.component.mjs +0 -104
- package/esm2022/lib/layer/layer-list/index.mjs +0 -2
- package/esm2022/lib/layer/layer-list/layer-list.component.mjs +0 -232
- package/esm2022/lib/layer/layer-list-tool/index.mjs +0 -4
- package/esm2022/lib/layer/layer-list-tool/layer-list-tool.component.mjs +0 -92
- package/esm2022/lib/layer/layer-list-tool/layer-list-tool.interface.mjs +0 -7
- package/esm2022/lib/layer/layer-list-tool/layer-list-tool.service.mjs +0 -61
- package/esm2022/lib/layer/layer-search/index.mjs +0 -2
- package/esm2022/lib/layer/layer-search/layer-search.component.mjs +0 -65
- package/esm2022/lib/layer/layer-unavailable/index.mjs +0 -3
- package/esm2022/lib/layer/layer-unavailable/layer-unavailable-list/layer-unavailable-list.component.mjs +0 -25
- package/esm2022/lib/layer/layer-unavailable/layer-unavailable.component.mjs +0 -35
- package/esm2022/lib/layer/layer-viewer/index.mjs +0 -3
- package/esm2022/lib/layer/layer-viewer/layer-viewer.component.mjs +0 -226
- package/esm2022/lib/layer/layer-viewer/layer-viewer.interface.mjs +0 -2
- package/esm2022/lib/layer/layer-viewer-bottom-actions/index.mjs +0 -2
- package/esm2022/lib/layer/layer-viewer-bottom-actions/layer-viewer-bottom-actions.component.mjs +0 -207
- package/esm2022/lib/layer/layer-visibility-button/index.mjs +0 -2
- package/esm2022/lib/layer/layer-visibility-button/layer-visibility-button.component.mjs +0 -83
- package/esm2022/lib/layer/layer.module.mjs +0 -107
- package/esm2022/lib/layer/shared/clusterParam.mjs +0 -2
- package/esm2022/lib/layer/shared/index.mjs +0 -6
- package/esm2022/lib/layer/shared/layer-controller.mjs +0 -316
- package/esm2022/lib/layer/shared/layer-selection.mjs +0 -38
- package/esm2022/lib/layer/shared/layer.enums.mjs +0 -2
- package/esm2022/lib/layer/shared/layer.service.mjs +0 -315
- package/esm2022/lib/layer/shared/layers/any-layer.interface.mjs +0 -2
- package/esm2022/lib/layer/shared/layers/any-layer.mjs +0 -2
- package/esm2022/lib/layer/shared/layers/image-layer.interface.mjs +0 -2
- package/esm2022/lib/layer/shared/layers/image-layer.mjs +0 -75
- package/esm2022/lib/layer/shared/layers/index.mjs +0 -18
- package/esm2022/lib/layer/shared/layers/layer-base.mjs +0 -199
- package/esm2022/lib/layer/shared/layers/layer-group.interface.mjs +0 -2
- package/esm2022/lib/layer/shared/layers/layer-group.mjs +0 -120
- package/esm2022/lib/layer/shared/layers/layer.interface.mjs +0 -7
- package/esm2022/lib/layer/shared/layers/layer.mjs +0 -178
- package/esm2022/lib/layer/shared/layers/legend.interface.mjs +0 -2
- package/esm2022/lib/layer/shared/layers/linked/index.mjs +0 -4
- package/esm2022/lib/layer/shared/layers/linked/linked-layer.interface.mjs +0 -12
- package/esm2022/lib/layer/shared/layers/linked/linked-layer.mjs +0 -242
- package/esm2022/lib/layer/shared/layers/linked/linked-layer.utils.mjs +0 -70
- package/esm2022/lib/layer/shared/layers/tile-layer.interface.mjs +0 -2
- package/esm2022/lib/layer/shared/layers/tile-layer.mjs +0 -55
- package/esm2022/lib/layer/shared/layers/vector-layer.interface.mjs +0 -2
- package/esm2022/lib/layer/shared/layers/vector-layer.mjs +0 -576
- package/esm2022/lib/layer/shared/layers/vectortile-layer.interface.mjs +0 -2
- package/esm2022/lib/layer/shared/layers/vectortile-layer.mjs +0 -112
- package/esm2022/lib/layer/track-feature-button/index.mjs +0 -2
- package/esm2022/lib/layer/track-feature-button/track-feature-button.component.mjs +0 -54
- package/esm2022/lib/layer/utils/image-watcher.mjs +0 -62
- package/esm2022/lib/layer/utils/index.mjs +0 -6
- package/esm2022/lib/layer/utils/layer.utils.mjs +0 -57
- package/esm2022/lib/layer/utils/outputLegend.mjs +0 -32
- package/esm2022/lib/layer/utils/tile-watcher.mjs +0 -52
- package/esm2022/lib/layer/utils/vector-watcher.mjs +0 -50
- package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.animation.mjs +0 -20
- package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +0 -87
- package/esm2022/lib/map/baselayers-switcher/index.mjs +0 -3
- package/esm2022/lib/map/baselayers-switcher/mini-basemap.component.mjs +0 -122
- package/esm2022/lib/map/geolocate-button/geolocate-button.component.mjs +0 -78
- package/esm2022/lib/map/geolocate-button/index.mjs +0 -2
- package/esm2022/lib/map/home-extent-button/home-extent-button.component.mjs +0 -73
- package/esm2022/lib/map/home-extent-button/home-extent-button.interface.mjs +0 -2
- package/esm2022/lib/map/home-extent-button/index.mjs +0 -3
- package/esm2022/lib/map/index.mjs +0 -14
- package/esm2022/lib/map/info-section/index.mjs +0 -2
- package/esm2022/lib/map/info-section/info-section.component.mjs +0 -15
- package/esm2022/lib/map/map-browser/index.mjs +0 -2
- package/esm2022/lib/map/map-browser/map-browser.component.mjs +0 -67
- package/esm2022/lib/map/map-center/index.mjs +0 -2
- package/esm2022/lib/map/map-center/map-center.component.mjs +0 -56
- package/esm2022/lib/map/map.module.mjs +0 -89
- package/esm2022/lib/map/menu-button/index.mjs +0 -2
- package/esm2022/lib/map/menu-button/menu-button.component.mjs +0 -57
- package/esm2022/lib/map/offline-button/index.mjs +0 -2
- package/esm2022/lib/map/offline-button/offline-button.component.mjs +0 -53
- package/esm2022/lib/map/rotation-button/index.mjs +0 -2
- package/esm2022/lib/map/rotation-button/rotation-button.component.mjs +0 -58
- package/esm2022/lib/map/shared/controllers/controller.mjs +0 -44
- package/esm2022/lib/map/shared/controllers/geolocation.interface.mjs +0 -8
- package/esm2022/lib/map/shared/controllers/geolocation.mjs +0 -431
- package/esm2022/lib/map/shared/controllers/index.mjs +0 -5
- package/esm2022/lib/map/shared/controllers/view.mjs +0 -361
- package/esm2022/lib/map/shared/hover-feature.directive.mjs +0 -481
- package/esm2022/lib/map/shared/index.mjs +0 -15
- package/esm2022/lib/map/shared/linkedLayers.utils.mjs +0 -238
- package/esm2022/lib/map/shared/map-pointer-position.directive.mjs +0 -122
- package/esm2022/lib/map/shared/map.abstract.mjs +0 -24
- package/esm2022/lib/map/shared/map.enums.mjs +0 -6
- package/esm2022/lib/map/shared/map.interface.mjs +0 -2
- package/esm2022/lib/map/shared/map.mjs +0 -201
- package/esm2022/lib/map/shared/map.service.mjs +0 -29
- package/esm2022/lib/map/shared/map.utils.mjs +0 -455
- package/esm2022/lib/map/shared/mapOffline.directive.mjs +0 -114
- package/esm2022/lib/map/shared/projection.interfaces.mjs +0 -2
- package/esm2022/lib/map/shared/projection.service.mjs +0 -67
- package/esm2022/lib/map/shared/projection.utils.mjs +0 -122
- package/esm2022/lib/map/swipe-control/index.mjs +0 -2
- package/esm2022/lib/map/swipe-control/swipe-control.component.mjs +0 -211
- package/esm2022/lib/map/utils/index.mjs +0 -2
- package/esm2022/lib/map/utils/layer-watcher.mjs +0 -112
- package/esm2022/lib/map/wake-lock-button/index.mjs +0 -2
- package/esm2022/lib/map/wake-lock-button/wake-lock-button.component.mjs +0 -103
- package/esm2022/lib/map/zoom-button/index.mjs +0 -2
- package/esm2022/lib/map/zoom-button/zoom-button.component.mjs +0 -35
- package/esm2022/lib/measure/index.mjs +0 -3
- package/esm2022/lib/measure/measure.module.mjs +0 -20
- package/esm2022/lib/measure/measurer/index.mjs +0 -6
- package/esm2022/lib/measure/measurer/measure-format.pipe.mjs +0 -40
- package/esm2022/lib/measure/measurer/measurer-dialog.component.mjs +0 -38
- package/esm2022/lib/measure/measurer/measurer-item.component.mjs +0 -143
- package/esm2022/lib/measure/measurer/measurer.component.mjs +0 -948
- package/esm2022/lib/measure/measurer/measurer.module.mjs +0 -20
- package/esm2022/lib/measure/shared/index.mjs +0 -4
- package/esm2022/lib/measure/shared/measure.enum.mjs +0 -37
- package/esm2022/lib/measure/shared/measure.interfaces.mjs +0 -2
- package/esm2022/lib/measure/shared/measure.utils.mjs +0 -497
- package/esm2022/lib/metadata/index.mjs +0 -4
- package/esm2022/lib/metadata/metadata-button/index.mjs +0 -2
- package/esm2022/lib/metadata/metadata-button/metadata-button.component.mjs +0 -96
- package/esm2022/lib/metadata/metadata.module.mjs +0 -29
- package/esm2022/lib/metadata/shared/index.mjs +0 -3
- package/esm2022/lib/metadata/shared/metadata.interface.mjs +0 -2
- package/esm2022/lib/metadata/shared/metadata.service.mjs +0 -18
- package/esm2022/lib/offline/geoDB/configFileToGeoDB.service.mjs +0 -130
- package/esm2022/lib/offline/geoDB/geoDB.enums.mjs +0 -6
- package/esm2022/lib/offline/geoDB/geoDB.interface.mjs +0 -2
- package/esm2022/lib/offline/geoDB/geoDB.service.mjs +0 -172
- package/esm2022/lib/offline/geoDB/index.mjs +0 -5
- package/esm2022/lib/offline/index.mjs +0 -6
- package/esm2022/lib/offline/layerDB/index.mjs +0 -3
- package/esm2022/lib/offline/layerDB/layerDB.interface.mjs +0 -2
- package/esm2022/lib/offline/layerDB/layerDB.service.mjs +0 -83
- package/esm2022/lib/offline/offline.interface.mjs +0 -2
- package/esm2022/lib/offline/offline.provider.mjs +0 -50
- package/esm2022/lib/offline/shared/geo-network.service.mjs +0 -79
- package/esm2022/lib/offline/shared/index.mjs +0 -2
- package/esm2022/lib/overlay/index.mjs +0 -2
- package/esm2022/lib/overlay/shared/index.mjs +0 -4
- package/esm2022/lib/overlay/shared/overlay.enum.mjs +0 -8
- package/esm2022/lib/overlay/shared/overlay.mjs +0 -139
- package/esm2022/lib/overlay/shared/overlay.utils.mjs +0 -17
- package/esm2022/lib/print/index.mjs +0 -4
- package/esm2022/lib/print/print/print.component.mjs +0 -116
- package/esm2022/lib/print/print-form/index.mjs +0 -2
- package/esm2022/lib/print/print-form/print-form.component.mjs +0 -320
- package/esm2022/lib/print/print.module.mjs +0 -20
- package/esm2022/lib/print/shared/geopdf.mjs +0 -68
- package/esm2022/lib/print/shared/index.mjs +0 -5
- package/esm2022/lib/print/shared/print.interface.mjs +0 -2
- package/esm2022/lib/print/shared/print.service.mjs +0 -1136
- package/esm2022/lib/print/shared/print.type.mjs +0 -30
- package/esm2022/lib/query/index.mjs +0 -2
- package/esm2022/lib/query/query.module.mjs +0 -27
- package/esm2022/lib/query/shared/index.mjs +0 -8
- package/esm2022/lib/query/shared/query-search-source.mjs +0 -35
- package/esm2022/lib/query/shared/query-search-source.providers.mjs +0 -22
- package/esm2022/lib/query/shared/query.directive.mjs +0 -290
- package/esm2022/lib/query/shared/query.enums.mjs +0 -32
- package/esm2022/lib/query/shared/query.interfaces.mjs +0 -2
- package/esm2022/lib/query/shared/query.service.mjs +0 -753
- package/esm2022/lib/query/shared/query.utils.mjs +0 -45
- package/esm2022/lib/search/index.mjs +0 -10
- package/esm2022/lib/search/search-bar/search-bar.component.mjs +0 -483
- package/esm2022/lib/search/search-bar/search-bar.module.mjs +0 -19
- package/esm2022/lib/search/search-results/index.mjs +0 -5
- package/esm2022/lib/search/search-results/save-feature-dialog.component.mjs +0 -101
- package/esm2022/lib/search/search-results/search-results-add-button.component.mjs +0 -433
- package/esm2022/lib/search/search-results/search-results-item.component.mjs +0 -119
- package/esm2022/lib/search/search-results/search-results.component.mjs +0 -297
- package/esm2022/lib/search/search-results/search-results.directive.mjs +0 -7
- package/esm2022/lib/search/search-results/search-results.module.mjs +0 -20
- package/esm2022/lib/search/search-selector/search-selector.component.mjs +0 -118
- package/esm2022/lib/search/search-selector/search-selector.module.mjs +0 -19
- package/esm2022/lib/search/search-settings/search-settings.component.mjs +0 -264
- package/esm2022/lib/search/search-settings/search-settings.module.mjs +0 -19
- package/esm2022/lib/search/search.module.mjs +0 -77
- package/esm2022/lib/search/shared/index.mjs +0 -10
- package/esm2022/lib/search/shared/search-pointer-summary.directive.mjs +0 -328
- package/esm2022/lib/search/shared/search-source-service.providers.mjs +0 -20
- package/esm2022/lib/search/shared/search-source.service.mjs +0 -56
- package/esm2022/lib/search/shared/search.enums.mjs +0 -4
- package/esm2022/lib/search/shared/search.interfaces.mjs +0 -2
- package/esm2022/lib/search/shared/search.provider.mjs +0 -20
- package/esm2022/lib/search/shared/search.service.mjs +0 -149
- package/esm2022/lib/search/shared/search.utils.mjs +0 -92
- package/esm2022/lib/search/shared/sources/cadastre.mjs +0 -142
- package/esm2022/lib/search/shared/sources/cadastre.providers.mjs +0 -32
- package/esm2022/lib/search/shared/sources/coordinates.interfaces.mjs +0 -2
- package/esm2022/lib/search/shared/sources/coordinates.mjs +0 -168
- package/esm2022/lib/search/shared/sources/coordinates.providers.mjs +0 -52
- package/esm2022/lib/search/shared/sources/icherche-icons.mjs +0 -32
- package/esm2022/lib/search/shared/sources/icherche.interfaces.mjs +0 -2
- package/esm2022/lib/search/shared/sources/icherche.mjs +0 -816
- package/esm2022/lib/search/shared/sources/icherche.providers.mjs +0 -87
- package/esm2022/lib/search/shared/sources/ilayer.interfaces.mjs +0 -2
- package/esm2022/lib/search/shared/sources/ilayer.mjs +0 -339
- package/esm2022/lib/search/shared/sources/ilayer.providers.mjs +0 -58
- package/esm2022/lib/search/shared/sources/index.mjs +0 -23
- package/esm2022/lib/search/shared/sources/nominatim.interfaces.mjs +0 -2
- package/esm2022/lib/search/shared/sources/nominatim.mjs +0 -263
- package/esm2022/lib/search/shared/sources/nominatim.providers.mjs +0 -31
- package/esm2022/lib/search/shared/sources/source.interfaces.mjs +0 -13
- package/esm2022/lib/search/shared/sources/source.mjs +0 -221
- package/esm2022/lib/search/shared/sources/storedqueries.interfaces.mjs +0 -2
- package/esm2022/lib/search/shared/sources/storedqueries.mjs +0 -454
- package/esm2022/lib/search/shared/sources/storedqueries.providers.mjs +0 -56
- package/esm2022/lib/search/shared/sources/workspace.interfaces.mjs +0 -2
- package/esm2022/lib/search/shared/sources/workspace.mjs +0 -192
- package/esm2022/lib/search/shared/sources/workspace.providers.mjs +0 -31
- package/esm2022/lib/style/index.mjs +0 -5
- package/esm2022/lib/style/shared/datasource/esri-style-generator.mjs +0 -360
- package/esm2022/lib/style/shared/datasource/index.mjs +0 -2
- package/esm2022/lib/style/shared/feature/feature-style.mjs +0 -162
- package/esm2022/lib/style/shared/feature/index.mjs +0 -2
- package/esm2022/lib/style/shared/font.enum.mjs +0 -17
- package/esm2022/lib/style/shared/index.mjs +0 -5
- package/esm2022/lib/style/shared/overlay/index.mjs +0 -3
- package/esm2022/lib/style/shared/overlay/overlay-marker-style.utils.mjs +0 -39
- package/esm2022/lib/style/shared/overlay/overlay-style.utils.mjs +0 -88
- package/esm2022/lib/style/shared/vector/commonVectorStyle.mjs +0 -78
- package/esm2022/lib/style/shared/vector/conversion.utils.mjs +0 -27
- package/esm2022/lib/style/shared/vector/index.mjs +0 -4
- package/esm2022/lib/style/shared/vector/vector-style.interface.mjs +0 -2
- package/esm2022/lib/style/style-list/index.mjs +0 -5
- package/esm2022/lib/style/style-list/style-list.interface.mjs +0 -2
- package/esm2022/lib/style/style-list/style-list.module.mjs +0 -23
- package/esm2022/lib/style/style-list/style-list.provider.mjs +0 -21
- package/esm2022/lib/style/style-list/style-list.service.mjs +0 -52
- package/esm2022/lib/style/style-modal/drawing/index.mjs +0 -2
- package/esm2022/lib/style/style-modal/drawing/style-modal-drawing.component.mjs +0 -193
- package/esm2022/lib/style/style-modal/index.mjs +0 -5
- package/esm2022/lib/style/style-modal/layer/index.mjs +0 -2
- package/esm2022/lib/style/style-modal/layer/style-modal-layer.component.mjs +0 -142
- package/esm2022/lib/style/style-modal/layer-button/index.mjs +0 -2
- package/esm2022/lib/style/style-modal/layer-button/style-modal-layer-button.component.mjs +0 -44
- package/esm2022/lib/style/style-modal/shared/index.mjs +0 -2
- package/esm2022/lib/style/style-modal/shared/style-modal.interface.mjs +0 -2
- package/esm2022/lib/style/style-service/draw-style.service.mjs +0 -255
- package/esm2022/lib/style/style-service/index.mjs +0 -3
- package/esm2022/lib/style/style-service/style.service.mjs +0 -393
- package/esm2022/lib/style/style.module.mjs +0 -46
- package/esm2022/lib/toast/index.mjs +0 -2
- package/esm2022/lib/toast/toast.component.mjs +0 -99
- package/esm2022/lib/toast/toast.module.mjs +0 -24
- package/esm2022/lib/utils/googleLinks.mjs +0 -13
- package/esm2022/lib/utils/id-generator.mjs +0 -112
- package/esm2022/lib/utils/index.mjs +0 -5
- package/esm2022/lib/utils/osmLinks.mjs +0 -9
- package/esm2022/lib/utils/propertyTypeDetector/index.mjs +0 -3
- package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.interface.mjs +0 -2
- package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.service.mjs +0 -64
- package/esm2022/lib/wkt/index.mjs +0 -2
- package/esm2022/lib/wkt/shared/index.mjs +0 -2
- package/esm2022/lib/wkt/shared/wkt.service.mjs +0 -235
- package/esm2022/lib/wkt/wkt.module.mjs +0 -25
- package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +0 -36
- package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +0 -19
- package/esm2022/lib/workspace/confirmation-popup/index.mjs +0 -3
- package/esm2022/lib/workspace/index.mjs +0 -8
- package/esm2022/lib/workspace/shared/edition-workspace.mjs +0 -301
- package/esm2022/lib/workspace/shared/edition-workspace.service.mjs +0 -720
- package/esm2022/lib/workspace/shared/feature-workspace.mjs +0 -41
- package/esm2022/lib/workspace/shared/feature-workspace.service.mjs +0 -113
- package/esm2022/lib/workspace/shared/index.mjs +0 -8
- package/esm2022/lib/workspace/shared/wfs-workspace.mjs +0 -41
- package/esm2022/lib/workspace/shared/wfs-workspace.service.mjs +0 -121
- package/esm2022/lib/workspace/shared/wms-workspace.service.mjs +0 -248
- package/esm2022/lib/workspace/shared/workspace.utils.mjs +0 -188
- package/esm2022/lib/workspace/widgets/index.mjs +0 -4
- package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +0 -48
- package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +0 -19
- package/esm2022/lib/workspace/widgets/widgets.mjs +0 -15
- package/esm2022/lib/workspace/workspace-selector/workspace-selector.directive.mjs +0 -172
- package/esm2022/lib/workspace/workspace-selector/workspace-selector.module.mjs +0 -19
- package/esm2022/lib/workspace/workspace-updator/workspace-updator.directive.mjs +0 -137
- package/esm2022/lib/workspace/workspace-updator/workspace-updator.module.mjs +0 -19
- package/esm2022/lib/workspace/workspace.module.mjs +0 -32
- package/esm2022/public_api.mjs +0 -56
|
@@ -1,559 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, Optional, Self } from '@angular/core';
|
|
2
|
-
import { NgControl } from '@angular/forms';
|
|
3
|
-
import OlFeature from 'ol/Feature';
|
|
4
|
-
import OlOverlay from 'ol/Overlay';
|
|
5
|
-
import OlGeoJSON from 'ol/format/GeoJSON';
|
|
6
|
-
import Point from 'ol/geom/Point';
|
|
7
|
-
import OlVectorLayer from 'ol/layer/Vector';
|
|
8
|
-
import * as olproj from 'ol/proj';
|
|
9
|
-
import OlVectorSource from 'ol/source/Vector';
|
|
10
|
-
import { IgoMap } from '../../map/shared/map';
|
|
11
|
-
import { MeasureLengthUnit, formatMeasure, measureOlGeometry, updateOlGeometryMidpoints } from '../../measure';
|
|
12
|
-
import { DrawControl, ModifyControl } from '../shared/controls';
|
|
13
|
-
import { createDrawInteractionStyle } from '../shared/geometry.utils';
|
|
14
|
-
import * as i0 from "@angular/core";
|
|
15
|
-
import * as i1 from "@angular/forms";
|
|
16
|
-
/**
|
|
17
|
-
* This input allows a user to draw a new geometry or to edit
|
|
18
|
-
* an existing one on a map. A text input is also displayed in the
|
|
19
|
-
* form with some instructions.
|
|
20
|
-
* This is still WIP.
|
|
21
|
-
*/
|
|
22
|
-
export class GeometryFormFieldInputComponent {
|
|
23
|
-
cdRef;
|
|
24
|
-
ngControl;
|
|
25
|
-
olOverlayLayer;
|
|
26
|
-
olGeoJSON = new OlGeoJSON();
|
|
27
|
-
ready = false;
|
|
28
|
-
drawControl;
|
|
29
|
-
modifyControl;
|
|
30
|
-
defaultDrawStyleRadius;
|
|
31
|
-
olGeometryEnds$$;
|
|
32
|
-
olGeometryChanges$$;
|
|
33
|
-
olTooltip = this.createMeasureTooltip();
|
|
34
|
-
/**
|
|
35
|
-
* Active control
|
|
36
|
-
* @internal
|
|
37
|
-
*/
|
|
38
|
-
activeControl;
|
|
39
|
-
/**
|
|
40
|
-
* The map to draw the geometry on
|
|
41
|
-
*/
|
|
42
|
-
map;
|
|
43
|
-
/**
|
|
44
|
-
* The geometry type
|
|
45
|
-
*/
|
|
46
|
-
set geometryType(value) {
|
|
47
|
-
this._geometryType = value;
|
|
48
|
-
if (this.ready === false) {
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
this.deactivateControl();
|
|
52
|
-
this.createDrawControl();
|
|
53
|
-
this.drawControl.freehand$.next(this.freehandDrawIsActive);
|
|
54
|
-
this.toggleControl();
|
|
55
|
-
}
|
|
56
|
-
get geometryType() {
|
|
57
|
-
return this._geometryType;
|
|
58
|
-
}
|
|
59
|
-
_geometryType;
|
|
60
|
-
/**
|
|
61
|
-
* The drawGuide around the mouse pointer to help drawing
|
|
62
|
-
*/
|
|
63
|
-
drawGuide = null;
|
|
64
|
-
/**
|
|
65
|
-
* Whether a measure tooltip should be displayed
|
|
66
|
-
*/
|
|
67
|
-
measure = false;
|
|
68
|
-
/**
|
|
69
|
-
* Whether draw control should be active or not
|
|
70
|
-
*/
|
|
71
|
-
get drawControlIsActive() {
|
|
72
|
-
return this._drawControlIsActive;
|
|
73
|
-
}
|
|
74
|
-
set drawControlIsActive(value) {
|
|
75
|
-
this._drawControlIsActive = value;
|
|
76
|
-
if (this.ready === false) {
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
this.deactivateControl();
|
|
80
|
-
if (!this._drawControlIsActive) {
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
this.toggleControl();
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
_drawControlIsActive = true;
|
|
88
|
-
/**
|
|
89
|
-
* Whether freehand draw control should be active or not
|
|
90
|
-
*/
|
|
91
|
-
get freehandDrawIsActive() {
|
|
92
|
-
return this._freehandDrawIsActive;
|
|
93
|
-
}
|
|
94
|
-
set freehandDrawIsActive(value) {
|
|
95
|
-
this._freehandDrawIsActive = value;
|
|
96
|
-
this.deactivateControl();
|
|
97
|
-
this.createDrawControl();
|
|
98
|
-
this.createModifyControl();
|
|
99
|
-
this.drawControl.freehand$.next(this.freehandDrawIsActive);
|
|
100
|
-
if (this.ready === false) {
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
if (!this.drawControlIsActive) {
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
106
|
-
this.toggleControl();
|
|
107
|
-
}
|
|
108
|
-
_freehandDrawIsActive;
|
|
109
|
-
/**
|
|
110
|
-
* Whether freehand draw control should be active or not
|
|
111
|
-
*/
|
|
112
|
-
get predefinedRadius() {
|
|
113
|
-
return this._predefinedRadius;
|
|
114
|
-
}
|
|
115
|
-
set predefinedRadius(value) {
|
|
116
|
-
this._predefinedRadius = value;
|
|
117
|
-
this.drawControl.ispredefinedRadius$.next(value);
|
|
118
|
-
}
|
|
119
|
-
_predefinedRadius;
|
|
120
|
-
/**
|
|
121
|
-
* Control options
|
|
122
|
-
*/
|
|
123
|
-
controlOptions = {};
|
|
124
|
-
/**
|
|
125
|
-
* Style for the draw control (applies while the geometry is being drawn)
|
|
126
|
-
*/
|
|
127
|
-
set drawStyle(value) {
|
|
128
|
-
if (value === undefined) {
|
|
129
|
-
value = createDrawInteractionStyle();
|
|
130
|
-
}
|
|
131
|
-
this._drawStyle = value;
|
|
132
|
-
const olGuideStyle = this.getGuideStyleFromDrawStyle(value);
|
|
133
|
-
if (olGuideStyle !== undefined) {
|
|
134
|
-
this.defaultDrawStyleRadius = olGuideStyle.getRadius();
|
|
135
|
-
}
|
|
136
|
-
else {
|
|
137
|
-
this.defaultDrawStyleRadius = null;
|
|
138
|
-
}
|
|
139
|
-
if (this.ready === false) {
|
|
140
|
-
return;
|
|
141
|
-
}
|
|
142
|
-
this.deactivateControl();
|
|
143
|
-
this.createDrawControl();
|
|
144
|
-
this.createModifyControl();
|
|
145
|
-
this.drawControl.freehand$.next(this.freehandDrawIsActive);
|
|
146
|
-
this.toggleControl();
|
|
147
|
-
}
|
|
148
|
-
get drawStyle() {
|
|
149
|
-
return this._drawStyle;
|
|
150
|
-
}
|
|
151
|
-
_drawStyle;
|
|
152
|
-
/**
|
|
153
|
-
* Style for the overlay layer (applies once the geometry is added to the map)
|
|
154
|
-
* If not specified, drawStyle applies
|
|
155
|
-
*/
|
|
156
|
-
set overlayStyle(value) {
|
|
157
|
-
this._overlayStyle = value;
|
|
158
|
-
}
|
|
159
|
-
get overlayStyle() {
|
|
160
|
-
return this._overlayStyle;
|
|
161
|
-
}
|
|
162
|
-
_overlayStyle;
|
|
163
|
-
/**
|
|
164
|
-
* The geometry value (GeoJSON)
|
|
165
|
-
* Implemented as part of ControlValueAccessor.
|
|
166
|
-
*/
|
|
167
|
-
set value(value) {
|
|
168
|
-
this._value = value;
|
|
169
|
-
if (this.ready === false) {
|
|
170
|
-
return;
|
|
171
|
-
}
|
|
172
|
-
if (value) {
|
|
173
|
-
this.addGeoJSONToOverlay(value);
|
|
174
|
-
}
|
|
175
|
-
else {
|
|
176
|
-
this.olOverlaySource.clear(true);
|
|
177
|
-
}
|
|
178
|
-
this.onChange(value);
|
|
179
|
-
this.toggleControl();
|
|
180
|
-
this.cdRef.detectChanges();
|
|
181
|
-
}
|
|
182
|
-
get value() {
|
|
183
|
-
return this._value;
|
|
184
|
-
}
|
|
185
|
-
_value;
|
|
186
|
-
/**
|
|
187
|
-
* The vector source to add the geometry to
|
|
188
|
-
* @internal
|
|
189
|
-
*/
|
|
190
|
-
get olOverlaySource() {
|
|
191
|
-
return this.olOverlayLayer.getSource();
|
|
192
|
-
}
|
|
193
|
-
set radius(value) {
|
|
194
|
-
if (this.ready === false) {
|
|
195
|
-
return;
|
|
196
|
-
}
|
|
197
|
-
if (this.modifyControl.getSource()) {
|
|
198
|
-
this.modifyControl.getSource().refresh();
|
|
199
|
-
}
|
|
200
|
-
if (this.freehandDrawIsActive) {
|
|
201
|
-
let olModify;
|
|
202
|
-
setTimeout(() => {
|
|
203
|
-
olModify = this.modifyControl.olModifyInteraction;
|
|
204
|
-
if (olModify) {
|
|
205
|
-
if (olModify.features_) {
|
|
206
|
-
olModify.features_.clear();
|
|
207
|
-
this.addGeoJSONToOverlay(this.value);
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
}, 0);
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
constructor(cdRef, ngControl) {
|
|
214
|
-
this.cdRef = cdRef;
|
|
215
|
-
this.ngControl = ngControl;
|
|
216
|
-
if (this.ngControl !== undefined) {
|
|
217
|
-
// Setting the value accessor directly (instead of using
|
|
218
|
-
// the providers) to avoid running into a circular import.
|
|
219
|
-
this.ngControl.valueAccessor = this;
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
/**
|
|
223
|
-
* Create an overlay layer, add the initial geometry to it (if any)
|
|
224
|
-
* and toggle the right interaction.
|
|
225
|
-
* @internal
|
|
226
|
-
*/
|
|
227
|
-
ngOnInit() {
|
|
228
|
-
if (this.drawStyle === undefined) {
|
|
229
|
-
this.drawStyle = createDrawInteractionStyle();
|
|
230
|
-
}
|
|
231
|
-
if (this.overlayStyle === undefined) {
|
|
232
|
-
this.overlayStyle = this.drawStyle;
|
|
233
|
-
}
|
|
234
|
-
this.addOlOverlayLayer();
|
|
235
|
-
this.createDrawControl();
|
|
236
|
-
this.createModifyControl();
|
|
237
|
-
if (this.value) {
|
|
238
|
-
this.addGeoJSONToOverlay(this.value);
|
|
239
|
-
}
|
|
240
|
-
this.toggleControl();
|
|
241
|
-
this.ready = true;
|
|
242
|
-
}
|
|
243
|
-
/**
|
|
244
|
-
* Clear the overlay layer and any interaction added by this component.
|
|
245
|
-
* @internal
|
|
246
|
-
*/
|
|
247
|
-
ngOnDestroy() {
|
|
248
|
-
// This is mandatory when the form control is reused after
|
|
249
|
-
// this component has been destroyed. It seems like the control
|
|
250
|
-
// keeps a reference to this component even after it's destroyed
|
|
251
|
-
// and it attempts to set it's value
|
|
252
|
-
this.ready = false;
|
|
253
|
-
this.deactivateControl();
|
|
254
|
-
this.olOverlaySource.clear();
|
|
255
|
-
this.map.ol.removeLayer(this.olOverlayLayer);
|
|
256
|
-
}
|
|
257
|
-
/**
|
|
258
|
-
* Implemented as part of ControlValueAccessor.
|
|
259
|
-
*/
|
|
260
|
-
registerOnChange(fn) {
|
|
261
|
-
this.onChange = fn;
|
|
262
|
-
}
|
|
263
|
-
onChange = () => void 1;
|
|
264
|
-
/**
|
|
265
|
-
* Implemented as part of ControlValueAccessor.
|
|
266
|
-
*/
|
|
267
|
-
registerOnTouched(fn) {
|
|
268
|
-
this.onTouched = fn;
|
|
269
|
-
}
|
|
270
|
-
onTouched = () => void 1;
|
|
271
|
-
/**
|
|
272
|
-
* Implemented as part of ControlValueAccessor.
|
|
273
|
-
*/
|
|
274
|
-
writeValue(value) {
|
|
275
|
-
this.value = value;
|
|
276
|
-
}
|
|
277
|
-
/**
|
|
278
|
-
* Add an overlay layer to the map
|
|
279
|
-
*/
|
|
280
|
-
addOlOverlayLayer() {
|
|
281
|
-
this.olOverlayLayer = new OlVectorLayer({
|
|
282
|
-
source: new OlVectorSource(),
|
|
283
|
-
zIndex: 500,
|
|
284
|
-
style: null
|
|
285
|
-
});
|
|
286
|
-
this.map.ol.addLayer(this.olOverlayLayer);
|
|
287
|
-
}
|
|
288
|
-
/**
|
|
289
|
-
* Create a draw control and subscribe to it's geometry
|
|
290
|
-
*/
|
|
291
|
-
createDrawControl() {
|
|
292
|
-
const controlOptions = Object.assign({}, this.controlOptions, {
|
|
293
|
-
geometryType: this.geometryType || 'Point',
|
|
294
|
-
drawingLayer: this.olOverlayLayer,
|
|
295
|
-
interactionStyle: typeof this.drawStyle === 'function'
|
|
296
|
-
? this.drawStyle
|
|
297
|
-
: (olFeature, resolution) => {
|
|
298
|
-
const style = this.drawStyle;
|
|
299
|
-
this.updateDrawStyleWithDrawGuide(style, resolution);
|
|
300
|
-
return style;
|
|
301
|
-
}
|
|
302
|
-
});
|
|
303
|
-
this.drawControl = new DrawControl(controlOptions);
|
|
304
|
-
}
|
|
305
|
-
/**
|
|
306
|
-
* Create a modify control and subscribe to it's geometry
|
|
307
|
-
*/
|
|
308
|
-
createModifyControl() {
|
|
309
|
-
const controlOptions = Object.assign({}, this.controlOptions, {
|
|
310
|
-
layer: this.olOverlayLayer,
|
|
311
|
-
drawStyle: typeof this.drawStyle === 'function'
|
|
312
|
-
? this.drawStyle
|
|
313
|
-
: (olFeature, resolution) => {
|
|
314
|
-
const style = this.drawStyle;
|
|
315
|
-
this.updateDrawStyleWithDrawGuide(style, resolution);
|
|
316
|
-
return style;
|
|
317
|
-
}
|
|
318
|
-
});
|
|
319
|
-
this.modifyControl = new ModifyControl(controlOptions);
|
|
320
|
-
}
|
|
321
|
-
/**
|
|
322
|
-
* Toggle the proper control (draw or modify)
|
|
323
|
-
*/
|
|
324
|
-
toggleControl() {
|
|
325
|
-
let activate;
|
|
326
|
-
if (!this.value && this.geometryType) {
|
|
327
|
-
activate = this.drawControl;
|
|
328
|
-
}
|
|
329
|
-
else {
|
|
330
|
-
activate = this.modifyControl;
|
|
331
|
-
}
|
|
332
|
-
// If the control that should be activated
|
|
333
|
-
// is not the same as the current active control,
|
|
334
|
-
// deactivate the current control and activate the new one
|
|
335
|
-
// Otherwise, do nothing and keep the current control active
|
|
336
|
-
if (activate !== this.activeControl) {
|
|
337
|
-
this.deactivateControl();
|
|
338
|
-
this.activateControl(activate);
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
/**
|
|
342
|
-
* Activate a given control
|
|
343
|
-
* @param control Control
|
|
344
|
-
*/
|
|
345
|
-
activateControl(control) {
|
|
346
|
-
this.activeControl = control;
|
|
347
|
-
this.olGeometryEnds$$ = control.end$.subscribe((olGeometry) => this.onOlGeometryEnds(olGeometry));
|
|
348
|
-
if (this.measure === true && control === this.drawControl) {
|
|
349
|
-
this.olGeometryChanges$$ = control.changes$.subscribe((olGeometry) => this.onOlGeometryChanges(olGeometry));
|
|
350
|
-
}
|
|
351
|
-
control.setOlMap(this.map.ol, false);
|
|
352
|
-
}
|
|
353
|
-
/**
|
|
354
|
-
* Deactivate the active control
|
|
355
|
-
*/
|
|
356
|
-
deactivateControl() {
|
|
357
|
-
this.removeMeasureTooltip();
|
|
358
|
-
if (this.activeControl !== undefined) {
|
|
359
|
-
this.activeControl.setOlMap(undefined);
|
|
360
|
-
}
|
|
361
|
-
if (this.olGeometryEnds$$ !== undefined) {
|
|
362
|
-
this.olGeometryEnds$$.unsubscribe();
|
|
363
|
-
}
|
|
364
|
-
if (this.olGeometryChanges$$ !== undefined) {
|
|
365
|
-
this.olGeometryChanges$$.unsubscribe();
|
|
366
|
-
}
|
|
367
|
-
this.activeControl = undefined;
|
|
368
|
-
}
|
|
369
|
-
/**
|
|
370
|
-
* Update measures observables and map tooltips
|
|
371
|
-
* @param olGeometry Ol linestring or polygon
|
|
372
|
-
*/
|
|
373
|
-
onOlGeometryEnds(olGeometry) {
|
|
374
|
-
this.removeMeasureTooltip();
|
|
375
|
-
this.setOlGeometry(olGeometry);
|
|
376
|
-
}
|
|
377
|
-
/**
|
|
378
|
-
* Update measures observables and map tooltips
|
|
379
|
-
* @param olGeometry Ol linestring or polygon
|
|
380
|
-
*/
|
|
381
|
-
onOlGeometryChanges(olGeometry) {
|
|
382
|
-
if (olGeometry.getType() !== 'Point') {
|
|
383
|
-
this.updateMeasureTooltip(olGeometry);
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
/**
|
|
387
|
-
* When drawing ends, convert the output value to GeoJSON and keep it.
|
|
388
|
-
* Restore the double click interaction.
|
|
389
|
-
* @param olGeometry OL geometry
|
|
390
|
-
*/
|
|
391
|
-
setOlGeometry(olGeometry) {
|
|
392
|
-
if (olGeometry === undefined) {
|
|
393
|
-
return;
|
|
394
|
-
}
|
|
395
|
-
if (olGeometry.getType() === 'Circle') {
|
|
396
|
-
// Because Circle doesn't exist as a GeoJSON object
|
|
397
|
-
olGeometry = this.circleToPoint(olGeometry);
|
|
398
|
-
}
|
|
399
|
-
const value = this.olGeoJSON.writeGeometryObject(olGeometry, {
|
|
400
|
-
featureProjection: this.map.projection,
|
|
401
|
-
dataProjection: 'EPSG:4326'
|
|
402
|
-
});
|
|
403
|
-
if (olGeometry.get('radius')) {
|
|
404
|
-
value.radius = olGeometry.get('radius');
|
|
405
|
-
olGeometry.set('radius', value.radius);
|
|
406
|
-
}
|
|
407
|
-
this.writeValue(value);
|
|
408
|
-
}
|
|
409
|
-
circleToPoint(olGeometry) {
|
|
410
|
-
const center = olGeometry.getCenter();
|
|
411
|
-
const coordinates = olproj.transform(center, this.map.projection, 'EPSG:4326');
|
|
412
|
-
const radius = Math.round(olGeometry.getRadius() * Math.cos((Math.PI / 180) * coordinates[1]));
|
|
413
|
-
// Convert it to a point object
|
|
414
|
-
olGeometry = new Point(center);
|
|
415
|
-
olGeometry.set('radius', radius, true);
|
|
416
|
-
return olGeometry;
|
|
417
|
-
}
|
|
418
|
-
/**
|
|
419
|
-
* Add a GeoJSON geometry to the overlay
|
|
420
|
-
* @param geometry GeoJSON geometry
|
|
421
|
-
*/
|
|
422
|
-
addGeoJSONToOverlay(geometry) {
|
|
423
|
-
const olGeometry = this.olGeoJSON.readGeometry(geometry, {
|
|
424
|
-
dataProjection: 'EPSG:4326',
|
|
425
|
-
featureProjection: this.map.projection
|
|
426
|
-
});
|
|
427
|
-
const olFeature = new OlFeature({
|
|
428
|
-
geometry: olGeometry
|
|
429
|
-
});
|
|
430
|
-
olFeature.setStyle(this.overlayStyle);
|
|
431
|
-
this.olOverlaySource.clear();
|
|
432
|
-
this.olOverlaySource.addFeature(olFeature);
|
|
433
|
-
}
|
|
434
|
-
/**
|
|
435
|
-
* Create the measure tooltip
|
|
436
|
-
*/
|
|
437
|
-
createMeasureTooltip() {
|
|
438
|
-
return new OlOverlay({
|
|
439
|
-
element: document.createElement('div'),
|
|
440
|
-
offset: [-30, -10],
|
|
441
|
-
className: ['igo-map-tooltip', 'igo-map-tooltip-measure'].join(' '),
|
|
442
|
-
stopEvent: false
|
|
443
|
-
});
|
|
444
|
-
}
|
|
445
|
-
/**
|
|
446
|
-
* Update the measure tooltip of an OL geometry
|
|
447
|
-
* @param olGeometry OL Geometry
|
|
448
|
-
*/
|
|
449
|
-
updateMeasureTooltip(olGeometry) {
|
|
450
|
-
const measure = measureOlGeometry(olGeometry, this.map.projection);
|
|
451
|
-
const lengths = measure.lengths;
|
|
452
|
-
const lastIndex = olGeometry.getType() === 'Polygon'
|
|
453
|
-
? lengths.length - 2
|
|
454
|
-
: lengths.length - 1;
|
|
455
|
-
const lastLength = lengths[lastIndex];
|
|
456
|
-
const olMidpoints = updateOlGeometryMidpoints(olGeometry);
|
|
457
|
-
const olLastMidpoint = olMidpoints[lastIndex];
|
|
458
|
-
if (olMidpoints.length === 0 || olLastMidpoint === undefined) {
|
|
459
|
-
this.removeMeasureTooltip();
|
|
460
|
-
return;
|
|
461
|
-
}
|
|
462
|
-
this.olTooltip.setPosition(olLastMidpoint.getFlatCoordinates());
|
|
463
|
-
const innerHtml = formatMeasure(lastLength, {
|
|
464
|
-
decimal: 1,
|
|
465
|
-
unit: MeasureLengthUnit.Meters,
|
|
466
|
-
unitAbbr: true,
|
|
467
|
-
locale: 'fr'
|
|
468
|
-
});
|
|
469
|
-
this.olTooltip.getElement().innerHTML = innerHtml;
|
|
470
|
-
if (this.olTooltip.getMap() === undefined) {
|
|
471
|
-
this.map.ol.addOverlay(this.olTooltip);
|
|
472
|
-
}
|
|
473
|
-
}
|
|
474
|
-
/**
|
|
475
|
-
* Remove the measure tooltip from the map
|
|
476
|
-
*/
|
|
477
|
-
removeMeasureTooltip() {
|
|
478
|
-
if (this.olTooltip.getMap && this.olTooltip.getMap() !== undefined) {
|
|
479
|
-
this.map.ol.removeOverlay(this.olTooltip);
|
|
480
|
-
this.olTooltip.setMap(undefined);
|
|
481
|
-
}
|
|
482
|
-
}
|
|
483
|
-
/**
|
|
484
|
-
* Adjust the draw style with the specified draw guide distance, if possible
|
|
485
|
-
* @param olStyle Draw style to update
|
|
486
|
-
* @param resolution Resolution (to make the screen size of symbol fit the drawGuide value)
|
|
487
|
-
*/
|
|
488
|
-
updateDrawStyleWithDrawGuide(olStyle, resolution) {
|
|
489
|
-
const olGuideStyle = this.getGuideStyleFromDrawStyle(olStyle);
|
|
490
|
-
if (olGuideStyle === undefined) {
|
|
491
|
-
return;
|
|
492
|
-
}
|
|
493
|
-
const drawGuide = this.drawGuide;
|
|
494
|
-
let radius;
|
|
495
|
-
if (!drawGuide || drawGuide < 0) {
|
|
496
|
-
radius = this.defaultDrawStyleRadius;
|
|
497
|
-
}
|
|
498
|
-
else {
|
|
499
|
-
radius = drawGuide > 0 ? drawGuide / resolution : drawGuide;
|
|
500
|
-
}
|
|
501
|
-
olGuideStyle.setRadius(radius);
|
|
502
|
-
}
|
|
503
|
-
/**
|
|
504
|
-
* Returns wether a given Open Layers style has a radius property that can be set (used to set draw guide)
|
|
505
|
-
* @param olStyle The style on which to perform the check
|
|
506
|
-
*/
|
|
507
|
-
getGuideStyleFromDrawStyle(olStyle) {
|
|
508
|
-
let baseStyle;
|
|
509
|
-
if (Array.isArray(olStyle)) {
|
|
510
|
-
baseStyle = olStyle[0];
|
|
511
|
-
}
|
|
512
|
-
else {
|
|
513
|
-
baseStyle = olStyle;
|
|
514
|
-
}
|
|
515
|
-
if (typeof baseStyle.getImage === 'function') {
|
|
516
|
-
baseStyle = baseStyle.getImage();
|
|
517
|
-
}
|
|
518
|
-
let guideStyle;
|
|
519
|
-
if (typeof baseStyle.setRadius === 'function') {
|
|
520
|
-
guideStyle = baseStyle;
|
|
521
|
-
}
|
|
522
|
-
return guideStyle;
|
|
523
|
-
}
|
|
524
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GeometryFormFieldInputComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
525
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: GeometryFormFieldInputComponent, isStandalone: true, selector: "igo-geometry-form-field-input", inputs: { map: "map", geometryType: "geometryType", drawGuide: "drawGuide", measure: "measure", drawControlIsActive: "drawControlIsActive", freehandDrawIsActive: "freehandDrawIsActive", predefinedRadius: "predefinedRadius", controlOptions: "controlOptions", drawStyle: "drawStyle", overlayStyle: "overlayStyle", value: "value", radius: "radius" }, ngImport: i0, template: "<ng-template></ng-template>\n", changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
526
|
-
}
|
|
527
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GeometryFormFieldInputComponent, decorators: [{
|
|
528
|
-
type: Component,
|
|
529
|
-
args: [{ selector: 'igo-geometry-form-field-input', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<ng-template></ng-template>\n" }]
|
|
530
|
-
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.NgControl, decorators: [{
|
|
531
|
-
type: Optional
|
|
532
|
-
}, {
|
|
533
|
-
type: Self
|
|
534
|
-
}] }], propDecorators: { map: [{
|
|
535
|
-
type: Input
|
|
536
|
-
}], geometryType: [{
|
|
537
|
-
type: Input
|
|
538
|
-
}], drawGuide: [{
|
|
539
|
-
type: Input
|
|
540
|
-
}], measure: [{
|
|
541
|
-
type: Input
|
|
542
|
-
}], drawControlIsActive: [{
|
|
543
|
-
type: Input
|
|
544
|
-
}], freehandDrawIsActive: [{
|
|
545
|
-
type: Input
|
|
546
|
-
}], predefinedRadius: [{
|
|
547
|
-
type: Input
|
|
548
|
-
}], controlOptions: [{
|
|
549
|
-
type: Input
|
|
550
|
-
}], drawStyle: [{
|
|
551
|
-
type: Input
|
|
552
|
-
}], overlayStyle: [{
|
|
553
|
-
type: Input
|
|
554
|
-
}], value: [{
|
|
555
|
-
type: Input
|
|
556
|
-
}], radius: [{
|
|
557
|
-
type: Input
|
|
558
|
-
}] } });
|
|
559
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvbWV0cnktZm9ybS1maWVsZC1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9nZW9tZXRyeS9nZW9tZXRyeS1mb3JtLWZpZWxkL2dlb21ldHJ5LWZvcm0tZmllbGQtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvZ2VvbWV0cnkvZ2VvbWV0cnktZm9ybS1maWVsZC9nZW9tZXRyeS1mb3JtLWZpZWxkLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxLQUFLLEVBR0wsUUFBUSxFQUNSLElBQUksRUFDTCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpFLE9BQU8sU0FBUyxNQUFNLFlBQVksQ0FBQztBQUNuQyxPQUFPLFNBQVMsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxTQUFTLE1BQU0sbUJBQW1CLENBQUM7QUFLMUMsT0FBTyxLQUFLLE1BQU0sZUFBZSxDQUFDO0FBR2xDLE9BQU8sYUFBYSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxNQUFNLE1BQU0sU0FBUyxDQUFDO0FBQ2xDLE9BQU8sY0FBYyxNQUFNLGtCQUFrQixDQUFDO0FBTTlDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QyxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLGFBQWEsRUFDYixpQkFBaUIsRUFDakIseUJBQXlCLEVBQzFCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxXQUFXLEVBQ1gsYUFBYSxFQUVkLE1BQU0sb0JBQW9CLENBQUM7QUFFNUIsT0FBTyxFQUFFLDBCQUEwQixF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LEdBQUcsT0FBTyxDQUFDO1FBQ3RCLENBQUM7UUFFRCxJQUFJLE9BQVEsU0FBaUIsQ0FBQyxRQUFRLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDdEQsU0FBUyxHQUFJLFNBQWlCLENBQUMsUUFBUSxFQUFtQixDQUFDO1FBQzdELENBQUM7UUFFRCxJQUFJLFVBQXFCLENBQUM7UUFDMUIsSUFBSSxPQUFRLFNBQWlCLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ3ZELFVBQVUsR0FBRyxTQUFzQixDQUFDO1FBQ3RDLENBQUM7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO3dHQTdrQlUsK0JBQStCOzRGQUEvQiwrQkFBK0IscWJDL0Q1QywrQkFDQTs7NEZEOERhLCtCQUErQjtrQkFOM0MsU0FBUzsrQkFDRSwrQkFBK0IsbUJBRXhCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSTs7MEJBa09iLFFBQVE7OzBCQUFJLElBQUk7eUNBek1WLEdBQUc7c0JBQVgsS0FBSztnQkFNRixZQUFZO3NCQURmLEtBQUs7Z0JBb0JHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBS0csT0FBTztzQkFBZixLQUFLO2dCQU1GLG1CQUFtQjtzQkFEdEIsS0FBSztnQkFzQkYsb0JBQW9CO3NCQUR2QixLQUFLO2dCQTRCRixnQkFBZ0I7c0JBRG5CLEtBQUs7Z0JBYUcsY0FBYztzQkFBdEIsS0FBSztnQkFNRixTQUFTO3NCQURaLEtBQUs7Z0JBbUNGLFlBQVk7c0JBRGYsS0FBSztnQkFjRixLQUFLO3NCQURSLEtBQUs7Z0JBOEJGLE1BQU07c0JBRFQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBTZWxmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IE9sRmVhdHVyZSBmcm9tICdvbC9GZWF0dXJlJztcbmltcG9ydCBPbE92ZXJsYXkgZnJvbSAnb2wvT3ZlcmxheSc7XG5pbXBvcnQgT2xHZW9KU09OIGZyb20gJ29sL2Zvcm1hdC9HZW9KU09OJztcbmltcG9ydCBPbENpcmNsZSBmcm9tICdvbC9nZW9tL0NpcmNsZSc7XG5pbXBvcnQgT2xHZW9tZXRyeSBmcm9tICdvbC9nZW9tL0dlb21ldHJ5JztcbmltcG9ydCB0eXBlIHsgVHlwZSB9IGZyb20gJ29sL2dlb20vR2VvbWV0cnknO1xuaW1wb3J0IE9sTGluZVN0cmluZyBmcm9tICdvbC9nZW9tL0xpbmVTdHJpbmcnO1xuaW1wb3J0IFBvaW50IGZyb20gJ29sL2dlb20vUG9pbnQnO1xuaW1wb3J0IE9sUG9pbnQgZnJvbSAnb2wvZ2VvbS9Qb2ludCc7XG5pbXBvcnQgT2xQb2x5Z29uIGZyb20gJ29sL2dlb20vUG9seWdvbic7XG5pbXBvcnQgT2xWZWN0b3JMYXllciBmcm9tICdvbC9sYXllci9WZWN0b3InO1xuaW1wb3J0ICogYXMgb2xwcm9qIGZyb20gJ29sL3Byb2onO1xuaW1wb3J0IE9sVmVjdG9yU291cmNlIGZyb20gJ29sL3NvdXJjZS9WZWN0b3InO1xuaW1wb3J0ICogYXMgT2xTdHlsZSBmcm9tICdvbC9zdHlsZSc7XG5pbXBvcnQgeyBTdHlsZUxpa2UgYXMgT2xTdHlsZUxpa2UgfSBmcm9tICdvbC9zdHlsZS9TdHlsZSc7XG5cbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBJZ29NYXAgfSBmcm9tICcuLi8uLi9tYXAvc2hhcmVkL21hcCc7XG5pbXBvcnQge1xuICBNZWFzdXJlTGVuZ3RoVW5pdCxcbiAgZm9ybWF0TWVhc3VyZSxcbiAgbWVhc3VyZU9sR2VvbWV0cnksXG4gIHVwZGF0ZU9sR2VvbWV0cnlNaWRwb2ludHNcbn0gZnJvbSAnLi4vLi4vbWVhc3VyZSc7XG5pbXBvcnQge1xuICBEcmF3Q29udHJvbCxcbiAgTW9kaWZ5Q29udHJvbCxcbiAgTW9kaWZ5Q29udHJvbE9wdGlvbnNcbn0gZnJvbSAnLi4vc2hhcmVkL2NvbnRyb2xzJztcbmltcG9ydCB7IEdlb0pTT05HZW9tZXRyeSB9IGZyb20gJy4uL3NoYXJlZC9nZW9tZXRyeS5pbnRlcmZhY2VzJztcbmltcG9ydCB7IGNyZWF0ZURyYXdJbnRlcmFjdGlvblN0eWxlIH0gZnJvbSAnLi4vc2hhcmVkL2dlb21ldHJ5LnV0aWxzJztcbmltcG9ydCB7IERyYXdDb250cm9sT3B0aW9ucyB9IGZyb20gJy4vLi4vc2hhcmVkL2NvbnRyb2xzL2RyYXcnO1xuXG5pbnRlcmZhY2UgSGFzUmFkaXVzIHtcbiAgZ2V0UmFkaXVzOiAoKSA9PiBudW1iZXI7XG4gIHNldFJhZGl1czogKHJhZGl1czogbnVtYmVyKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIFRoaXMgaW5wdXQgYWxsb3dzIGEgdXNlciB0byBkcmF3IGEgbmV3IGdlb21ldHJ5IG9yIHRvIGVkaXRcbiAqIGFuIGV4aXN0aW5nIG9uZSBvbiBhIG1hcC4gQSB0ZXh0IGlucHV0IGlzIGFsc28gZGlzcGxheWVkIGluIHRoZVxuICogZm9ybSB3aXRoIHNvbWUgaW5zdHJ1Y3Rpb25zLlxuICogVGhpcyBpcyBzdGlsbCBXSVAuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2lnby1nZW9tZXRyeS1mb3JtLWZpZWxkLWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dlb21ldHJ5LWZvcm0tZmllbGQtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBHZW9tZXRyeUZvcm1GaWVsZElucHV0Q29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yXG57XG4gIHByaXZhdGUgb2xPdmVybGF5TGF5ZXI6IE9sVmVjdG9yTGF5ZXI8T2xWZWN0b3JTb3VyY2U+O1xuICBwcml2YXRlIG9sR2VvSlNPTiA9IG5ldyBPbEdlb0pTT04oKTtcbiAgcHJpdmF0ZSByZWFkeSA9IGZhbHNlO1xuXG4gIHByaXZhdGUgZHJhd0NvbnRyb2w6IERyYXdDb250cm9sO1xuICBwcml2YXRlIG1vZGlmeUNvbnRyb2w6IE1vZGlmeUNvbnRyb2w7XG4gIHByaXZhdGUgZGVmYXVsdERyYXdTdHlsZVJhZGl1czogbnVtYmVyO1xuICBwcml2YXRlIG9sR2VvbWV0cnlFbmRzJCQ6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBvbEdlb21ldHJ5Q2hhbmdlcyQkOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgb2xUb29sdGlwID0gdGhpcy5jcmVhdGVNZWFzdXJlVG9vbHRpcCgpO1xuXG4gIC8qKlxuICAgKiBBY3RpdmUgY29udHJvbFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBhY3RpdmVDb250cm9sOiBEcmF3Q29udHJvbCB8IE1vZGlmeUNvbnRyb2w7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXAgdG8gZHJhdyB0aGUgZ2VvbWV0cnkgb25cbiAgICovXG4gIEBJbnB1dCgpIG1hcDogSWdvTWFwO1xuXG4gIC8qKlxuICAgKiBUaGUgZ2VvbWV0cnkgdHlwZVxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGdlb21ldHJ5VHlwZSh2YWx1ZTogVHlwZSkge1xuICAgIHRoaXMuX2dlb21ldHJ5VHlwZSA9IHZhbHVlO1xuICAgIGlmICh0aGlzLnJlYWR5ID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGVhY3RpdmF0ZUNvbnRyb2woKTtcbiAgICB0aGlzLmNyZWF0ZURyYXdDb250cm9sKCk7XG4gICAgdGhpcy5kcmF3Q29udHJvbC5mcmVlaGFuZCQubmV4dCh0aGlzLmZyZWVoYW5kRHJhd0lzQWN0aXZlKTtcbiAgICB0aGlzLnRvZ2dsZUNvbnRyb2woKTtcbiAgfVxuICBnZXQgZ2VvbWV0cnlUeXBlKCk6IFR5cGUge1xuICAgIHJldHVybiB0aGlzLl9nZW9tZXRyeVR5cGU7XG4gIH1cbiAgcHJpdmF0ZSBfZ2VvbWV0cnlUeXBlOiBUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgZHJhd0d1aWRlIGFyb3VuZCB0aGUgbW91c2UgcG9pbnRlciB0byBoZWxwIGRyYXdpbmdcbiAgICovXG4gIEBJbnB1dCgpIGRyYXdHdWlkZTogbnVtYmVyID0gbnVsbDtcblxuICAvKipcbiAgICogV2hldGhlciBhIG1lYXN1cmUgdG9vbHRpcCBzaG91bGQgYmUgZGlzcGxheWVkXG4gICAqL1xuICBASW5wdXQoKSBtZWFzdXJlID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgZHJhdyBjb250cm9sIHNob3VsZCBiZSBhY3RpdmUgb3Igbm90XG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgZHJhd0NvbnRyb2xJc0FjdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZHJhd0NvbnRyb2xJc0FjdGl2ZTtcbiAgfVxuICBzZXQgZHJhd0NvbnRyb2xJc0FjdGl2ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2RyYXdDb250cm9sSXNBY3RpdmUgPSB2YWx1ZTtcbiAgICBpZiAodGhpcy5yZWFkeSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kZWFjdGl2YXRlQ29udHJvbCgpO1xuICAgIGlmICghdGhpcy5fZHJhd0NvbnRyb2xJc0FjdGl2ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRvZ2dsZUNvbnRyb2woKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfZHJhd0NvbnRyb2xJc0FjdGl2ZSA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgZnJlZWhhbmQgZHJhdyBjb250cm9sIHNob3VsZCBiZSBhY3RpdmUgb3Igbm90XG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgZnJlZWhhbmREcmF3SXNBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZyZWVoYW5kRHJhd0lzQWN0aXZlO1xuICB9XG4gIHNldCBmcmVlaGFuZERyYXdJc0FjdGl2ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2ZyZWVoYW5kRHJhd0lzQWN0aXZlID0gdmFsdWU7XG4gICAgdGhpcy5kZWFjdGl2YXRlQ29udHJvbCgpO1xuXG4gICAgdGhpcy5jcmVhdGVEcmF3Q29udHJvbCgpO1xuICAgIHRoaXMuY3JlYXRlTW9kaWZ5Q29udHJvbCgpO1xuXG4gICAgdGhpcy5kcmF3Q29udHJvbC5mcmVlaGFuZCQubmV4dCh0aGlzLmZyZWVoYW5kRHJhd0lzQWN0aXZlKTtcblxuICAgIGlmICh0aGlzLnJlYWR5ID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5kcmF3Q29udHJvbElzQWN0aXZlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudG9nZ2xlQ29udHJvbCgpO1xuICB9XG4gIHByaXZhdGUgX2ZyZWVoYW5kRHJhd0lzQWN0aXZlOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGZyZWVoYW5kIGRyYXcgY29udHJvbCBzaG91bGQgYmUgYWN0aXZlIG9yIG5vdFxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IHByZWRlZmluZWRSYWRpdXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3ByZWRlZmluZWRSYWRpdXM7XG4gIH1cbiAgc2V0IHByZWRlZmluZWRSYWRpdXModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9wcmVkZWZpbmVkUmFkaXVzID0gdmFsdWU7XG4gICAgdGhpcy5kcmF3Q29udHJvbC5pc3ByZWRlZmluZWRSYWRpdXMkLm5leHQodmFsdWUpO1xuICB9XG4gIHByaXZhdGUgX3ByZWRlZmluZWRSYWRpdXM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbnRyb2wgb3B0aW9uc1xuICAgKi9cbiAgQElucHV0KCkgY29udHJvbE9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICAvKipcbiAgICogU3R5bGUgZm9yIHRoZSBkcmF3IGNvbnRyb2wgKGFwcGxpZXMgd2hpbGUgdGhlIGdlb21ldHJ5IGlzIGJlaW5nIGRyYXduKVxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGRyYXdTdHlsZSh2YWx1ZTogT2xTdHlsZUxpa2UgfCBPbFN0eWxlLlJlZ3VsYXJTaGFwZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWx1ZSA9IGNyZWF0ZURyYXdJbnRlcmFjdGlvblN0eWxlKCk7XG4gICAgfVxuICAgIHRoaXMuX2RyYXdTdHlsZSA9IHZhbHVlO1xuXG4gICAgY29uc3Qgb2xHdWlkZVN0eWxlID0gdGhpcy5nZXRHdWlkZVN0eWxlRnJvbURyYXdTdHlsZSh2YWx1ZSk7XG4gICAgaWYgKG9sR3VpZGVTdHlsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmRlZmF1bHREcmF3U3R5bGVSYWRpdXMgPSBvbEd1aWRlU3R5bGUuZ2V0UmFkaXVzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVmYXVsdERyYXdTdHlsZVJhZGl1cyA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVhZHkgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kZWFjdGl2YXRlQ29udHJvbCgpO1xuICAgIHRoaXMuY3JlYXRlRHJhd0NvbnRyb2woKTtcbiAgICB0aGlzLmNyZWF0ZU1vZGlmeUNvbnRyb2woKTtcblxuICAgIHRoaXMuZHJhd0NvbnRyb2wuZnJlZWhhbmQkLm5leHQodGhpcy5mcmVlaGFuZERyYXdJc0FjdGl2ZSk7XG4gICAgdGhpcy50b2dnbGVDb250cm9sKCk7XG4gIH1cbiAgZ2V0IGRyYXdTdHlsZSgpOiBPbFN0eWxlTGlrZSB8IE9sU3R5bGUuUmVndWxhclNoYXBlIHtcbiAgICByZXR1cm4gdGhpcy5fZHJhd1N0eWxlO1xuICB9XG4gIHByaXZhdGUgX2RyYXdTdHlsZTogT2xTdHlsZUxpa2UgfCBPbFN0eWxlLlJlZ3VsYXJTaGFwZTtcblxuICAvKipcbiAgICogU3R5bGUgZm9yIHRoZSBvdmVybGF5IGxheWVyIChhcHBsaWVzIG9uY2UgdGhlIGdlb21ldHJ5IGlzIGFkZGVkIHRvIHRoZSBtYXApXG4gICAqIElmIG5vdCBzcGVjaWZpZWQsIGRyYXdTdHlsZSBhcHBsaWVzXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgb3ZlcmxheVN0eWxlKHZhbHVlOiBPbFN0eWxlTGlrZSB8IE9sU3R5bGUuUmVndWxhclNoYXBlKSB7XG4gICAgdGhpcy5fb3ZlcmxheVN0eWxlID0gdmFsdWU7XG4gIH1cbiAgZ2V0IG92ZXJsYXlTdHlsZSgpOiBPbFN0eWxlTGlrZSB8IE9sU3R5bGUuUmVndWxhclNoYXBlIHtcbiAgICByZXR1cm4gdGhpcy5fb3ZlcmxheVN0eWxlO1xuICB9XG4gIHByaXZhdGUgX292ZXJsYXlTdHlsZTogT2xTdHlsZUxpa2UgfCBPbFN0eWxlLlJlZ3VsYXJTaGFwZTtcblxuICAvKipcbiAgICogVGhlIGdlb21ldHJ5IHZhbHVlIChHZW9KU09OKVxuICAgKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IHZhbHVlKHZhbHVlOiBHZW9KU09OR2VvbWV0cnkpIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIGlmICh0aGlzLnJlYWR5ID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5hZGRHZW9KU09OVG9PdmVybGF5KHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vbE92ZXJsYXlTb3VyY2UuY2xlYXIodHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICAgIHRoaXMudG9nZ2xlQ29udHJvbCgpO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG4gIGdldCB2YWx1ZSgpOiBHZW9KU09OR2VvbWV0cnkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuICBwcml2YXRlIF92YWx1ZTogR2VvSlNPTkdlb21ldHJ5O1xuXG4gIC8qKlxuICAgKiBUaGUgdmVjdG9yIHNvdXJjZSB0byBhZGQgdGhlIGdlb21ldHJ5IHRvXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0IG9sT3ZlcmxheVNvdXJjZSgpOiBPbFZlY3RvclNvdXJjZSB7XG4gICAgcmV0dXJuIHRoaXMub2xPdmVybGF5TGF5ZXIuZ2V0U291cmNlKCk7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgcmFkaXVzKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodGhpcy5yZWFkeSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMubW9kaWZ5Q29udHJvbC5nZXRTb3VyY2UoKSkge1xuICAgICAgdGhpcy5tb2RpZnlDb250cm9sLmdldFNvdXJjZSgpLnJlZnJlc2goKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZnJlZWhhbmREcmF3SXNBY3RpdmUpIHtcbiAgICAgIGxldCBvbE1vZGlmeTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBvbE1vZGlmeSA9IHRoaXMubW9kaWZ5Q29udHJvbC5vbE1vZGlmeUludGVyYWN0aW9uO1xuICAgICAgICBpZiAob2xNb2RpZnkpIHtcbiAgICAgICAgICBpZiAob2xNb2RpZnkuZmVhdHVyZXNfKSB7XG4gICAgICAgICAgICBvbE1vZGlmeS5mZWF0dXJlc18uY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuYWRkR2VvSlNPTlRvT3ZlcmxheSh0aGlzLnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIDApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIG5nQ29udHJvbDogTmdDb250cm9sXG4gICkge1xuICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBTZXR0aW5nIHRoZSB2YWx1ZSBhY2Nlc3NvciBkaXJlY3RseSAoaW5zdGVhZCBvZiB1c2luZ1xuICAgICAgLy8gdGhlIHByb3ZpZGVycykgdG8gYXZvaWQgcnVubmluZyBpbnRvIGEgY2lyY3VsYXIgaW1wb3J0LlxuICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBvdmVybGF5IGxheWVyLCBhZGQgdGhlIGluaXRpYWwgZ2VvbWV0cnkgdG8gaXQgKGlmIGFueSlcbiAgICogYW5kIHRvZ2dsZSB0aGUgcmlnaHQgaW50ZXJhY3Rpb24uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuZHJhd1N0eWxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZHJhd1N0eWxlID0gY3JlYXRlRHJhd0ludGVyYWN0aW9uU3R5bGUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vdmVybGF5U3R5bGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5vdmVybGF5U3R5bGUgPSB0aGlzLmRyYXdTdHlsZTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZE9sT3ZlcmxheUxheWVyKCk7XG4gICAgdGhpcy5jcmVhdGVEcmF3Q29udHJvbCgpO1xuICAgIHRoaXMuY3JlYXRlTW9kaWZ5Q29udHJvbCgpO1xuXG4gICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgIHRoaXMuYWRkR2VvSlNPTlRvT3ZlcmxheSh0aGlzLnZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy50b2dnbGVDb250cm9sKCk7XG5cbiAgICB0aGlzLnJlYWR5ID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciB0aGUgb3ZlcmxheSBsYXllciBhbmQgYW55IGludGVyYWN0aW9uIGFkZGVkIGJ5IHRoaXMgY29tcG9uZW50LlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG5nT25EZXN0cm95KCkge1xuICAgIC8vIFRoaXMgaXMgbWFuZGF0b3J5IHdoZW4gdGhlIGZvcm0gY29udHJvbCBpcyByZXVzZWQgYWZ0ZXJcbiAgICAvLyB0aGlzIGNvbXBvbmVudCBoYXMgYmVlbiBkZXN0cm95ZWQuIEl0IHNlZW1zIGxpa2UgdGhlIGNvbnRyb2xcbiAgICAvLyBrZWVwcyBhIHJlZmVyZW5jZSB0byB0aGlzIGNvbXBvbmVudCBldmVuIGFmdGVyIGl0J3MgZGVzdHJveWVkXG4gICAgLy8gYW5kIGl0IGF0dGVtcHRzIHRvIHNldCBpdCdzIHZhbHVlXG4gICAgdGhpcy5yZWFkeSA9IGZhbHNlO1xuXG4gICAgdGhpcy5kZWFjdGl2YXRlQ29udHJvbCgpO1xuICAgIHRoaXMub2xPdmVybGF5U291cmNlLmNsZWFyKCk7XG4gICAgdGhpcy5tYXAub2wucmVtb3ZlTGF5ZXIodGhpcy5vbE92ZXJsYXlMYXllcik7XG4gIH1cblxuICAvKipcbiAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgICovXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cbiAgcHJpdmF0ZSBvbkNoYW5nZTogYW55ID0gKCkgPT4gdm9pZCAxO1xuXG4gIC8qKlxuICAgKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICAgKi9cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG4gIHByaXZhdGUgb25Ub3VjaGVkOiBhbnkgPSAoKSA9PiB2b2lkIDE7XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gICAqL1xuICB3cml0ZVZhbHVlKHZhbHVlOiBHZW9KU09OR2VvbWV0cnkpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIG92ZXJsYXkgbGF5ZXIgdG8gdGhlIG1hcFxuICAgKi9cbiAgcHJpdmF0ZSBhZGRPbE92ZXJsYXlMYXllcigpIHtcbiAgICB0aGlzLm9sT3ZlcmxheUxheWVyID0gbmV3IE9sVmVjdG9yTGF5ZXIoe1xuICAgICAgc291cmNlOiBuZXcgT2xWZWN0b3JTb3VyY2UoKSxcbiAgICAgIHpJbmRleDogNTAwLFxuICAgICAgc3R5bGU6IG51bGxcbiAgICB9KTtcbiAgICB0aGlzLm1hcC5vbC5hZGRMYXllcih0aGlzLm9sT3ZlcmxheUxheWVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBkcmF3IGNvbnRyb2wgYW5kIHN1YnNjcmliZSB0byBpdCdzIGdlb21ldHJ5XG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZURyYXdDb250cm9sKCkge1xuICAgIGNvbnN0IGNvbnRyb2xPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jb250cm9sT3B0aW9ucywge1xuICAgICAgZ2VvbWV0cnlUeXBlOiB0aGlzLmdlb21ldHJ5VHlwZSB8fCAnUG9pbnQnLFxuICAgICAgZHJhd2luZ0xheWVyOiB0aGlzLm9sT3ZlcmxheUxheWVyLFxuICAgICAgaW50ZXJhY3Rpb25TdHlsZTpcbiAgICAgICAgdHlwZW9mIHRoaXMuZHJhd1N0eWxlID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgPyB0aGlzLmRyYXdTdHlsZVxuICAgICAgICAgIDogKG9sRmVhdHVyZTogT2xGZWF0dXJlPE9sR2VvbWV0cnk+LCByZXNvbHV0aW9uOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgc3R5bGUgPSB0aGlzLmRyYXdTdHlsZTtcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVEcmF3U3R5bGVXaXRoRHJhd0d1aWRlKHN0eWxlLCByZXNvbHV0aW9uKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgICAgICAgfVxuICAgIH0pIGFzIERyYXdDb250cm9sT3B0aW9ucztcbiAgICB0aGlzLmRyYXdDb250cm9sID0gbmV3IERyYXdDb250cm9sKGNvbnRyb2xPcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBtb2RpZnkgY29udHJvbCBhbmQgc3Vic2NyaWJlIHRvIGl0J3MgZ2VvbWV0cnlcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlTW9kaWZ5Q29udHJvbCgpIHtcbiAgICBjb25zdCBjb250cm9sT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY29udHJvbE9wdGlvbnMsIHtcbiAgICAgIGxheWVyOiB0aGlzLm9sT3ZlcmxheUxheWVyLFxuICAgICAgZHJhd1N0eWxlOlxuICAgICAgICB0eXBlb2YgdGhpcy5kcmF3U3R5bGUgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICA/IHRoaXMuZHJhd1N0eWxlXG4gICAgICAgICAgOiAob2xGZWF0dXJlOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT4sIHJlc29sdXRpb246IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBzdHlsZSA9IHRoaXMuZHJhd1N0eWxlO1xuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZURyYXdTdHlsZVdpdGhEcmF3R3VpZGUoc3R5bGUsIHJlc29sdXRpb24pO1xuICAgICAgICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICAgICAgICB9XG4gICAgfSkgYXMgTW9kaWZ5Q29udHJvbE9wdGlvbnM7XG4gICAgdGhpcy5tb2RpZnlDb250cm9sID0gbmV3IE1vZGlmeUNvbnRyb2woY29udHJvbE9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB0aGUgcHJvcGVyIGNvbnRyb2wgKGRyYXcgb3IgbW9kaWZ5KVxuICAgKi9cbiAgcHJpdmF0ZSB0b2dnbGVDb250cm9sKCkge1xuICAgIGxldCBhY3RpdmF0ZTtcbiAgICBpZiAoIXRoaXMudmFsdWUgJiYgdGhpcy5nZW9tZXRyeVR5cGUpIHtcbiAgICAgIGFjdGl2YXRlID0gdGhpcy5kcmF3Q29udHJvbDtcbiAgICB9IGVsc2Uge1xuICAgICAgYWN0aXZhdGUgPSB0aGlzLm1vZGlmeUNvbnRyb2w7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGNvbnRyb2wgdGhhdCBzaG91bGQgYmUgYWN0aXZhdGVkXG4gICAgLy8gaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50IGFjdGl2ZSBjb250cm9sLFxuICAgIC8vIGRlYWN0aXZhdGUgdGhlIGN1cnJlbnQgY29udHJvbCBhbmQgYWN0aXZhdGUgdGhlIG5ldyBvbmVcbiAgICAvLyBPdGhlcndpc2UsIGRvIG5vdGhpbmcgYW5kIGtlZXAgdGhlIGN1cnJlbnQgY29udHJvbCBhY3RpdmVcbiAgICBpZiAoYWN0aXZhdGUgIT09IHRoaXMuYWN0aXZlQ29udHJvbCkge1xuICAgICAgdGhpcy5kZWFjdGl2YXRlQ29udHJvbCgpO1xuICAgICAgdGhpcy5hY3RpdmF0ZUNvbnRyb2woYWN0aXZhdGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBY3RpdmF0ZSBhIGdpdmVuIGNvbnRyb2xcbiAgICogQHBhcmFtIGNvbnRyb2wgQ29udHJvbFxuICAgKi9cbiAgcHJpdmF0ZSBhY3RpdmF0ZUNvbnRyb2woY29udHJvbDogRHJhd0NvbnRyb2wgfCBNb2RpZnlDb250cm9sKSB7XG4gICAgdGhpcy5hY3RpdmVDb250cm9sID0gY29udHJvbDtcbiAgICB0aGlzLm9sR2VvbWV0cnlFbmRzJCQgPSBjb250cm9sLmVuZCQuc3Vic2NyaWJlKChvbEdlb21ldHJ5OiBPbEdlb21ldHJ5KSA9PlxuICAgICAgdGhpcy5vbk9sR2VvbWV0cnlFbmRzKG9sR2VvbWV0cnkpXG4gICAgKTtcbiAgICBpZiAodGhpcy5tZWFzdXJlID09PSB0cnVlICYmIGNvbnRyb2wgPT09IHRoaXMuZHJhd0NvbnRyb2wpIHtcbiAgICAgIHRoaXMub2xHZW9tZXRyeUNoYW5nZXMkJCA9IGNvbnRyb2wuY2hhbmdlcyQuc3Vic2NyaWJlKFxuICAgICAgICAob2xHZW9tZXRyeTogT2xQb2x5Z29uIHwgT2xQb2ludCB8IE9sTGluZVN0cmluZyB8IE9sQ2lyY2xlKSA9PlxuICAgICAgICAgIHRoaXMub25PbEdlb21ldHJ5Q2hhbmdlcyhvbEdlb21ldHJ5KVxuICAgICAgKTtcbiAgICB9XG4gICAgY29udHJvbC5zZXRPbE1hcCh0aGlzLm1hcC5vbCwgZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlYWN0aXZhdGUgdGhlIGFjdGl2ZSBjb250cm9sXG4gICAqL1xuICBwcml2YXRlIGRlYWN0aXZhdGVDb250cm9sKCkge1xuICAgIHRoaXMucmVtb3ZlTWVhc3VyZVRvb2x0aXAoKTtcbiAgICBpZiAodGhpcy5hY3RpdmVDb250cm9sICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYWN0aXZlQ29udHJvbC5zZXRPbE1hcCh1bmRlZmluZWQpO1xuICAgIH1cbiAgICBpZiAodGhpcy5vbEdlb21ldHJ5RW5kcyQkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMub2xHZW9tZXRyeUVuZHMkJC51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5vbEdlb21ldHJ5Q2hhbmdlcyQkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMub2xHZW9tZXRyeUNoYW5nZXMkJC51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLmFjdGl2ZUNvbnRyb2wgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIG1lYXN1cmVzIG9ic2VydmFibGVzIGFuZCBtYXAgdG9vbHRpcHNcbiAgICogQHBhcmFtIG9sR2VvbWV0cnkgT2wgbGluZXN0cmluZyBvciBwb2x5Z29uXG4gICAqL1xuICBwcml2YXRlIG9uT2xHZW9tZXRyeUVuZHMob2xHZW9tZXRyeTogT2xHZW9tZXRyeSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMucmVtb3ZlTWVhc3VyZVRvb2x0aXAoKTtcbiAgICB0aGlzLnNldE9sR2VvbWV0cnkob2xHZW9tZXRyeSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIG1lYXN1cmVzIG9ic2VydmFibGVzIGFuZCBtYXAgdG9vbHRpcHNcbiAgICogQHBhcmFtIG9sR2VvbWV0cnkgT2wgbGluZXN0cmluZyBvciBwb2x5Z29uXG4gICAqL1xuICBwcml2YXRlIG9uT2xHZW9tZXRyeUNoYW5nZXMoXG4gICAgb2xHZW9tZXRyeTogT2xQb2x5Z29uIHwgT2xQb2ludCB8IE9sTGluZVN0cmluZyB8IE9sQ2lyY2xlXG4gICkge1xuICAgIGlmIChvbEdlb21ldHJ5LmdldFR5cGUoKSAhPT0gJ1BvaW50Jykge1xuICAgICAgdGhpcy51cGRhdGVNZWFzdXJlVG9vbHRpcChvbEdlb21ldHJ5KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2hlbiBkcmF3aW5nIGVuZHMsIGNvbnZlcnQgdGhlIG91dHB1dCB2YWx1ZSB0byBHZW9KU09OIGFuZCBrZWVwIGl0LlxuICAgKiBSZXN0b3JlIHRoZSBkb3VibGUgY2xpY2sgaW50ZXJhY3Rpb24uXG4gICAqIEBwYXJhbSBvbEdlb21ldHJ5IE9MIGdlb21ldHJ5XG4gICAqL1xuICBwcml2YXRlIHNldE9sR2VvbWV0cnkob2xHZW9tZXRyeTogT2xHZW9tZXRyeSB8IHVuZGVmaW5lZCkge1xuICAgIGlmIChvbEdlb21ldHJ5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAob2xHZW9tZXRyeS5nZXRUeXBlKCkgPT09ICdDaXJjbGUnKSB7XG4gICAgICAvLyBCZWNhdXNlIENpcmNsZSBkb2Vzbid0IGV4aXN0IGFzIGEgR2VvSlNPTiBvYmplY3RcbiAgICAgIG9sR2VvbWV0cnkgPSB0aGlzLmNpcmNsZVRvUG9pbnQob2xHZW9tZXRyeSk7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLm9sR2VvSlNPTi53cml0ZUdlb21ldHJ5T2JqZWN0KG9sR2VvbWV0cnksIHtcbiAgICAgIGZlYXR1cmVQcm9qZWN0aW9uOiB0aGlzLm1hcC5wcm9qZWN0aW9uLFxuICAgICAgZGF0YVByb2plY3Rpb246ICdFUFNHOjQzMjYnXG4gICAgfSkgYXMgYW55O1xuICAgIGlmIChvbEdlb21ldHJ5LmdldCgncmFkaXVzJykpIHtcbiAgICAgIHZhbHVlLnJhZGl1cyA9IG9sR2VvbWV0cnkuZ2V0KCdyYWRpdXMnKTtcbiAgICAgIG9sR2VvbWV0cnkuc2V0KCdyYWRpdXMnLCB2YWx1ZS5yYWRpdXMpO1xuICAgIH1cbiAgICB0aGlzLndyaXRlVmFsdWUodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaXJjbGVUb1BvaW50KG9sR2VvbWV0cnkpIHtcbiAgICBjb25zdCBjZW50ZXIgPSBvbEdlb21ldHJ5LmdldENlbnRlcigpO1xuICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gb2xwcm9qLnRyYW5zZm9ybShcbiAgICAgIGNlbnRlcixcbiAgICAgIHRoaXMubWFwLnByb2plY3Rpb24sXG4gICAgICAnRVBTRzo0MzI2J1xuICAgICk7XG4gICAgY29uc3QgcmFkaXVzID0gTWF0aC5yb3VuZChcbiAgICAgIG9sR2VvbWV0cnkuZ2V0UmFkaXVzKCkgKiBNYXRoLmNvcygoTWF0aC5QSSAvIDE4MCkgKiBjb29yZGluYXRlc1sxXSlcbiAgICApO1xuXG4gICAgLy8gQ29udmVydCBpdCB0byBhIHBvaW50IG9iamVjdFxuICAgIG9sR2VvbWV0cnkgPSBuZXcgUG9pbnQoY2VudGVyKTtcbiAgICBvbEdlb21ldHJ5LnNldCgncmFkaXVzJywgcmFkaXVzLCB0cnVlKTtcbiAgICByZXR1cm4gb2xHZW9tZXRyeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBHZW9KU09OIGdlb21ldHJ5IHRvIHRoZSBvdmVybGF5XG4gICAqIEBwYXJhbSBnZW9tZXRyeSBHZW9KU09OIGdlb21ldHJ5XG4gICAqL1xuICBwcml2YXRlIGFkZEdlb0pTT05Ub092ZXJsYXkoZ2VvbWV0cnk6IEdlb0pTT05HZW9tZXRyeSkge1xuICAgIGNvbnN0IG9sR2VvbWV0cnkgPSB0aGlzLm9sR2VvSlNPTi5yZWFkR2VvbWV0cnkoZ2VvbWV0cnksIHtcbiAgICAgIGRhdGFQcm9qZWN0aW9uOiAnRVBTRzo0MzI2JyxcbiAgICAgIGZlYXR1cmVQcm9qZWN0aW9uOiB0aGlzLm1hcC5wcm9qZWN0aW9uXG4gICAgfSk7XG4gICAgY29uc3Qgb2xGZWF0dXJlID0gbmV3IE9sRmVhdHVyZSh7XG4gICAgICBnZW9tZXRyeTogb2xHZW9tZXRyeVxuICAgIH0pO1xuICAgIG9sRmVhdHVyZS5zZXRTdHlsZSh0aGlzLm92ZXJsYXlTdHlsZSBhcyBPbFN0eWxlLlN0eWxlKTtcbiAgICB0aGlzLm9sT3ZlcmxheVNvdXJjZS5jbGVhcigpO1xuICAgIHRoaXMub2xPdmVybGF5U291cmNlLmFkZEZlYXR1cmUob2xGZWF0dXJlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIG1lYXN1cmUgdG9vbHRpcFxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVNZWFzdXJlVG9vbHRpcCgpIHtcbiAgICByZXR1cm4gbmV3IE9sT3ZlcmxheSh7XG4gICAgICBlbGVtZW50OiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSxcbiAgICAgIG9mZnNldDogWy0zMCwgLTEwXSxcbiAgICAgIGNsYXNzTmFtZTogWydpZ28tbWFwLXRvb2x0aXAnLCAnaWdvLW1hcC10b29sdGlwLW1lYXN1cmUnXS5qb2luKCcgJyksXG4gICAgICBzdG9wRXZlbnQ6IGZhbHNlXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBtZWFzdXJlIHRvb2x0aXAgb2YgYW4gT0wgZ2VvbWV0cnlcbiAgICogQHBhcmFtIG9sR2VvbWV0cnkgT0wgR2VvbWV0cnlcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlTWVhc3VyZVRvb2x0aXAoXG4gICAgb2xHZW9tZXRyeTogT2xQb2x5Z29uIHwgT2xQb2ludCB8IE9sTGluZVN0cmluZyB8IE9sQ2lyY2xlXG4gICkge1xuICAgIGNvbnN0IG1lYXN1cmUgPSBtZWFzdXJlT2xHZW9tZXRyeShvbEdlb21ldHJ5LCB0aGlzLm1hcC5wcm9qZWN0aW9uKTtcbiAgICBjb25zdCBsZW5ndGhzID0gbWVhc3VyZS5sZW5ndGhzO1xuICAgIGNvbnN0IGxhc3RJbmRleCA9XG4gICAgICBvbEdlb21ldHJ5LmdldFR5cGUoKSA9PT0gJ1BvbHlnb24nXG4gICAgICAgID8gbGVuZ3Rocy5sZW5ndGggLSAyXG4gICAgICAgIDogbGVuZ3Rocy5sZW5ndGggLSAxO1xuICAgIGNvbnN0IGxhc3RMZW5ndGggPSBsZW5ndGhzW2xhc3RJbmRleF07XG5cbiAgICBjb25zdCBvbE1pZHBvaW50cyA9IHVwZGF0ZU9sR2VvbWV0cnlNaWRwb2ludHMob2xHZW9tZXRyeSk7XG4gICAgY29uc3Qgb2xMYXN0TWlkcG9pbnQgPSBvbE1pZHBvaW50c1tsYXN0SW5kZXhdO1xuICAgIGlmIChvbE1pZHBvaW50cy5sZW5ndGggPT09IDAgfHwgb2xMYXN0TWlkcG9pbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5yZW1vdmVNZWFzdXJlVG9vbHRpcCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub2xUb29sdGlwLnNldFBvc2l0aW9uKG9sTGFzdE1pZHBvaW50LmdldEZsYXRDb29yZGluYXRlcygpKTtcblxuICAgIGNvbnN0IGlubmVySHRtbCA9IGZvcm1hdE1lYXN1cmUobGFzdExlbmd0aCwge1xuICAgICAgZGVjaW1hbDogMSxcbiAgICAgIHVuaXQ6IE1lYXN1cmVMZW5ndGhVbml0Lk1ldGVycyxcbiAgICAgIHVuaXRBYmJyOiB0cnVlLFxuICAgICAgbG9jYWxlOiAnZnInXG4gICAgfSk7XG4gICAgdGhpcy5vbFRvb2x0aXAuZ2V0RWxlbWVudCgpLmlubmVySFRNTCA9IGlubmVySHRtbDtcbiAgICBpZiAodGhpcy5vbFRvb2x0aXAuZ2V0TWFwKCkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5tYXAub2wuYWRkT3ZlcmxheSh0aGlzLm9sVG9vbHRpcCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSB0aGUgbWVhc3VyZSB0b29sdGlwIGZyb20gdGhlIG1hcFxuICAgKi9cbiAgcHJpdmF0ZSByZW1vdmVNZWFzdXJlVG9vbHRpcCgpIHtcbiAgICBpZiAodGhpcy5vbFRvb2x0aXAuZ2V0TWFwICYmIHRoaXMub2xUb29sdGlwLmdldE1hcCgpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMubWFwLm9sLnJlbW92ZU92ZXJsYXkodGhpcy5vbFRvb2x0aXApO1xuICAgICAgdGhpcy5vbFRvb2x0aXAuc2V0TWFwKHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkanVzdCB0aGUgZHJhdyBzdHlsZSB3aXRoIHRoZSBzcGVjaWZpZWQgZHJhdyBndWlkZSBkaXN0YW5jZSwgaWYgcG9zc2libGVcbiAgICogQHBhcmFtIG9sU3R5bGUgRHJhdyBzdHlsZSB0byB1cGRhdGVcbiAgICogQHBhcmFtIHJlc29sdXRpb24gUmVzb2x1dGlvbiAodG8gbWFrZSB0aGUgc2NyZWVuIHNpemUgb2Ygc3ltYm9sIGZpdCB0aGUgZHJhd0d1aWRlIHZhbHVlKVxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVEcmF3U3R5bGVXaXRoRHJhd0d1aWRlKFxuICAgIG9sU3R5bGU6IE9sU3R5bGVMaWtlIHwgT2xTdHlsZS5SZWd1bGFyU2hhcGUsXG4gICAgcmVzb2x1dGlvbjogbnVtYmVyXG4gICkge1xuICAgIGNvbnN0IG9sR3VpZGVTdHlsZSA9IHRoaXMuZ2V0R3VpZGVTdHlsZUZyb21EcmF3U3R5bGUob2xTdHlsZSk7XG4gICAgaWYgKG9sR3VpZGVTdHlsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRyYXdHdWlkZSA9IHRoaXMuZHJhd0d1aWRlO1xuICAgIGxldCByYWRpdXM7XG4gICAgaWYgKCFkcmF3R3VpZGUgfHwgZHJhd0d1aWRlIDwgMCkge1xuICAgICAgcmFkaXVzID0gdGhpcy5kZWZhdWx0RHJhd1N0eWxlUmFkaXVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByYWRpdXMgPSBkcmF3R3VpZGUgPiAwID8gZHJhd0d1aWRlIC8gcmVzb2x1dGlvbiA6IGRyYXdHdWlkZTtcbiAgICB9XG4gICAgb2xHdWlkZVN0eWxlLnNldFJhZGl1cyhyYWRpdXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2V0aGVyIGEgZ2l2ZW4gT3BlbiBMYXllcnMgc3R5bGUgaGFzIGEgcmFkaXVzIHByb3BlcnR5IHRoYXQgY2FuIGJlIHNldCAodXNlZCB0byBzZXQgZHJhdyBndWlkZSlcbiAgICogQHBhcmFtIG9sU3R5bGUgVGhlIHN0eWxlIG9uIHdoaWNoIHRvIHBlcmZvcm0gdGhlIGNoZWNrXG4gICAqL1xuICBwcml2YXRlIGdldEd1aWRlU3R5bGVGcm9tRHJhd1N0eWxlKFxuICAgIG9sU3R5bGU6IE9sU3R5bGVMaWtlIHwgT2xTdHlsZS5SZWd1bGFyU2hhcGVcbiAgKTogSGFzUmFkaXVzIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgYmFzZVN0eWxlOiB1bmtub3duO1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9sU3R5bGUpKSB7XG4gICAgICBiYXNlU3R5bGUgPSBvbFN0eWxlWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBiYXNlU3R5bGUgPSBvbFN0eWxlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgKGJhc2VTdHlsZSBhcyBhbnkpLmdldEltYWdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBiYXNlU3R5bGUgPSAoYmFzZVN0eWxlIGFzIGFueSkuZ2V0SW1hZ2UoKSBhcyBPbFN0eWxlLkltYWdlO1xuICAgIH1cblxuICAgIGxldCBndWlkZVN0eWxlOiBIYXNSYWRpdXM7XG4gICAgaWYgKHR5cGVvZiAoYmFzZVN0eWxlIGFzIGFueSkuc2V0UmFkaXVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBndWlkZVN0eWxlID0gYmFzZVN0eWxlIGFzIEhhc1JhZGl1cztcbiAgICB9XG5cbiAgICByZXR1cm4gZ3VpZGVTdHlsZTtcbiAgfVxufVxuIiwiPG5nLXRlbXBsYXRlPjwvbmctdGVtcGxhdGU+XG4iXX0=
|