@igo2/geo 17.0.0-next.0 → 17.0.0-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/esm2022/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +3 -3
- package/esm2022/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +3 -3
- package/esm2022/lib/catalog/catalog-browser/catalog-browser.component.mjs +3 -3
- package/esm2022/lib/catalog/catalog-browser/catalog-browser.module.mjs +4 -4
- package/esm2022/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +19 -17
- package/esm2022/lib/catalog/catalog-library/catalog-library-item.component.mjs +3 -3
- package/esm2022/lib/catalog/catalog-library/catalog-library.component.mjs +14 -12
- package/esm2022/lib/catalog/catalog-library/catalog-library.module.mjs +4 -4
- package/esm2022/lib/catalog/catalog.module.mjs +4 -4
- package/esm2022/lib/catalog/shared/catalog.service.mjs +12 -8
- package/esm2022/lib/datasource/shared/capabilities.service.mjs +3 -3
- package/esm2022/lib/datasource/shared/datasource.service.mjs +10 -8
- package/esm2022/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/feature-datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/feature-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/websocket-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/wfs-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/wfs.service.mjs +3 -3
- package/esm2022/lib/datasource/shared/options/options-api.providers.mjs +2 -2
- package/esm2022/lib/datasource/shared/options/options-api.service.mjs +3 -3
- package/esm2022/lib/directions/directions-buttons/directions-buttons.component.mjs +17 -13
- package/esm2022/lib/directions/directions-inputs/directions-inputs.component.mjs +6 -6
- package/esm2022/lib/directions/directions-results/directions-results.component.mjs +6 -6
- package/esm2022/lib/directions/directions-sources/directions-source.provider.mjs +2 -2
- package/esm2022/lib/directions/directions-sources/osrm-directions-source.mjs +6 -6
- package/esm2022/lib/directions/directions.component.mjs +6 -6
- package/esm2022/lib/directions/directions.module.mjs +4 -4
- package/esm2022/lib/directions/shared/directions.service.mjs +13 -9
- package/esm2022/lib/directions/shared/directions.utils.mjs +1 -1
- package/esm2022/lib/download/download-button/download-button.component.mjs +3 -3
- package/esm2022/lib/download/download.module.mjs +4 -4
- package/esm2022/lib/download/shared/download.service.mjs +6 -6
- package/esm2022/lib/draw/draw/draw-layer-popup.component.mjs +3 -3
- package/esm2022/lib/draw/draw/draw-popup.component.mjs +6 -6
- package/esm2022/lib/draw/draw/draw-shorcuts.component.mjs +3 -3
- package/esm2022/lib/draw/draw/draw.component.mjs +6 -6
- package/esm2022/lib/draw/draw/draw.module.mjs +4 -4
- package/esm2022/lib/draw/drawingTool.module.mjs +4 -4
- package/esm2022/lib/draw/shared/draw-icon.service.mjs +6 -6
- package/esm2022/lib/feature/feature-details/feature-details.component.mjs +13 -10
- package/esm2022/lib/feature/feature-details/feature-details.directive.mjs +3 -3
- package/esm2022/lib/feature/feature-details/feature-details.module.mjs +4 -4
- package/esm2022/lib/feature/feature-form/feature-form.component.mjs +3 -3
- package/esm2022/lib/feature/feature-form/feature-form.module.mjs +4 -4
- package/esm2022/lib/feature/feature.module.mjs +4 -4
- package/esm2022/lib/filter/filter.module.mjs +4 -4
- package/esm2022/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +3 -3
- package/esm2022/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +3 -3
- package/esm2022/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +6 -6
- package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +3 -3
- package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +3 -3
- package/esm2022/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +3 -3
- package/esm2022/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +3 -3
- package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +3 -3
- package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +3 -3
- package/esm2022/lib/filter/shared/filterable-datasource.pipe.mjs +3 -3
- package/esm2022/lib/filter/shared/ogc-filter-time.service.mjs +3 -3
- package/esm2022/lib/filter/shared/ogc-filter.service.mjs +3 -3
- package/esm2022/lib/filter/shared/spatial-filter.service.mjs +9 -7
- package/esm2022/lib/filter/shared/time-filter.service.mjs +3 -3
- package/esm2022/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +23 -21
- package/esm2022/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +6 -6
- package/esm2022/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +3 -3
- package/esm2022/lib/filter/time-filter-button/time-filter-button.component.mjs +3 -3
- package/esm2022/lib/filter/time-filter-form/time-filter-form.component.mjs +3 -3
- package/esm2022/lib/filter/time-filter-item/time-filter-item.component.mjs +3 -3
- package/esm2022/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +3 -3
- package/esm2022/lib/filter/time-filter-list/time-filter-list.component.mjs +3 -3
- package/esm2022/lib/geo.module.mjs +4 -4
- package/esm2022/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +3 -3
- package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +3 -3
- package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +4 -4
- package/esm2022/lib/geometry/geometry.module.mjs +4 -4
- package/esm2022/lib/import-export/export-button/export-button.component.mjs +3 -3
- package/esm2022/lib/import-export/import-export/import-export.component.mjs +28 -22
- package/esm2022/lib/import-export/import-export.module.mjs +4 -4
- package/esm2022/lib/import-export/shared/drop-geo-file.directive.mjs +11 -9
- package/esm2022/lib/import-export/shared/export.service.mjs +6 -6
- package/esm2022/lib/import-export/shared/export.utils.mjs +1 -1
- package/esm2022/lib/import-export/shared/import.service.mjs +6 -6
- package/esm2022/lib/import-export/shared/import.utils.mjs +1 -1
- package/esm2022/lib/layer/layer-item/layer-item.component.mjs +6 -6
- package/esm2022/lib/layer/layer-legend/layer-legend.component.mjs +18 -16
- package/esm2022/lib/layer/layer-legend-item/layer-legend-item.component.mjs +6 -6
- package/esm2022/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +3 -3
- package/esm2022/lib/layer/layer-legend-list/layer-legend-list.component.mjs +3 -3
- package/esm2022/lib/layer/layer-list/layer-list-binding.directive.mjs +6 -6
- package/esm2022/lib/layer/layer-list/layer-list.component.mjs +3 -3
- package/esm2022/lib/layer/layer-list-tool/layer-list-tool.component.mjs +3 -3
- package/esm2022/lib/layer/layer-list-tool/layer-list-tool.service.mjs +3 -3
- package/esm2022/lib/layer/layer.module.mjs +4 -4
- package/esm2022/lib/layer/shared/layer.service.mjs +6 -6
- package/esm2022/lib/layer/shared/layers/image-layer.mjs +1 -1
- package/esm2022/lib/layer/shared/layers/layer.interface.mjs +1 -1
- package/esm2022/lib/layer/shared/layers/layer.mjs +1 -1
- package/esm2022/lib/layer/shared/layers/tile-layer.mjs +1 -1
- package/esm2022/lib/layer/shared/layers/vector-layer.mjs +1 -1
- package/esm2022/lib/layer/shared/layers/vectortile-layer.mjs +1 -1
- package/esm2022/lib/layer/track-feature-button/track-feature-button.component.mjs +3 -3
- package/esm2022/lib/layer/utils/image-watcher.mjs +1 -1
- package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +6 -6
- package/esm2022/lib/map/baselayers-switcher/mini-basemap.component.mjs +3 -3
- package/esm2022/lib/map/geolocate-button/geolocate-button.component.mjs +7 -7
- package/esm2022/lib/map/home-extent-button/home-extent-button.component.mjs +6 -6
- package/esm2022/lib/map/info-section/info-section.component.mjs +3 -3
- package/esm2022/lib/map/map-browser/map-browser.component.mjs +6 -6
- package/esm2022/lib/map/map-center/map-center.component.mjs +3 -3
- package/esm2022/lib/map/map.module.mjs +4 -4
- package/esm2022/lib/map/menu-button/menu-button.component.mjs +6 -6
- package/esm2022/lib/map/offline-button/offline-button.component.mjs +3 -3
- package/esm2022/lib/map/rotation-button/rotation-button.component.mjs +3 -3
- package/esm2022/lib/map/shared/controllers/geolocation.mjs +1 -1
- package/esm2022/lib/map/shared/hover-feature.directive.mjs +6 -6
- package/esm2022/lib/map/shared/map-pointer-position.directive.mjs +6 -6
- package/esm2022/lib/map/shared/map.mjs +1 -1
- package/esm2022/lib/map/shared/map.service.mjs +3 -3
- package/esm2022/lib/map/shared/mapOffline.directive.mjs +9 -7
- package/esm2022/lib/map/shared/projection.service.mjs +6 -6
- package/esm2022/lib/map/shared/projection.utils.mjs +1 -1
- package/esm2022/lib/map/swipe-control/swipe-control.component.mjs +3 -3
- package/esm2022/lib/map/wake-lock-button/wake-lock-button.component.mjs +6 -6
- package/esm2022/lib/map/zoom-button/zoom-button.component.mjs +3 -3
- package/esm2022/lib/measure/measure.module.mjs +4 -4
- package/esm2022/lib/measure/measurer/measure-format.pipe.mjs +3 -3
- package/esm2022/lib/measure/measurer/measurer-dialog.component.mjs +3 -3
- package/esm2022/lib/measure/measurer/measurer-item.component.mjs +3 -3
- package/esm2022/lib/measure/measurer/measurer.component.mjs +16 -14
- package/esm2022/lib/measure/measurer/measurer.module.mjs +4 -4
- package/esm2022/lib/measure/shared/measure.utils.mjs +1 -1
- package/esm2022/lib/metadata/metadata-button/metadata-button.component.mjs +6 -6
- package/esm2022/lib/metadata/metadata.module.mjs +4 -4
- package/esm2022/lib/metadata/shared/metadata.service.mjs +3 -3
- package/esm2022/lib/offline/geoDB/configFileToGeoDB.service.mjs +6 -6
- package/esm2022/lib/offline/geoDB/geoDB.service.mjs +8 -10
- package/esm2022/lib/offline/layerDB/layerDB.service.mjs +3 -3
- package/esm2022/lib/offline/shared/geo-network.service.mjs +6 -6
- package/esm2022/lib/overlay/overlay.module.mjs +4 -4
- package/esm2022/lib/overlay/shared/overlay.directive.mjs +3 -3
- package/esm2022/lib/overlay/shared/overlay.service.mjs +3 -3
- package/esm2022/lib/print/print/print.component.mjs +3 -3
- package/esm2022/lib/print/print-form/print-form.component.mjs +6 -6
- package/esm2022/lib/print/print.module.mjs +4 -4
- package/esm2022/lib/print/shared/print.service.mjs +13 -7
- package/esm2022/lib/query/query.module.mjs +6 -6
- package/esm2022/lib/query/shared/query-search-source.mjs +3 -3
- package/esm2022/lib/query/shared/query-search-source.providers.mjs +2 -2
- package/esm2022/lib/query/shared/query.directive.mjs +3 -3
- package/esm2022/lib/query/shared/query.service.mjs +6 -6
- package/esm2022/lib/search/search-bar/search-bar.component.mjs +6 -6
- package/esm2022/lib/search/search-bar/search-bar.module.mjs +4 -4
- package/esm2022/lib/search/search-results/save-feature-dialog.component.mjs +6 -6
- package/esm2022/lib/search/search-results/search-results-add-button.component.mjs +6 -6
- package/esm2022/lib/search/search-results/search-results-item.component.mjs +3 -3
- package/esm2022/lib/search/search-results/search-results.component.mjs +6 -6
- package/esm2022/lib/search/search-results/search-results.module.mjs +4 -4
- package/esm2022/lib/search/search-selector/search-selector.component.mjs +3 -3
- package/esm2022/lib/search/search-selector/search-selector.module.mjs +4 -4
- package/esm2022/lib/search/search-settings/search-settings.component.mjs +18 -16
- package/esm2022/lib/search/search-settings/search-settings.module.mjs +4 -4
- package/esm2022/lib/search/search.module.mjs +4 -4
- package/esm2022/lib/search/shared/search-pointer-summary.directive.mjs +6 -6
- package/esm2022/lib/search/shared/search.service.mjs +6 -6
- package/esm2022/lib/search/shared/sources/cadastre.mjs +9 -7
- package/esm2022/lib/search/shared/sources/cadastre.providers.mjs +4 -2
- package/esm2022/lib/search/shared/sources/coordinates.mjs +12 -10
- package/esm2022/lib/search/shared/sources/coordinates.providers.mjs +4 -2
- package/esm2022/lib/search/shared/sources/icherche.mjs +16 -14
- package/esm2022/lib/search/shared/sources/icherche.providers.mjs +4 -2
- package/esm2022/lib/search/shared/sources/ilayer.mjs +12 -10
- package/esm2022/lib/search/shared/sources/ilayer.providers.mjs +4 -2
- package/esm2022/lib/search/shared/sources/nominatim.mjs +6 -6
- package/esm2022/lib/search/shared/sources/nominatim.providers.mjs +3 -2
- package/esm2022/lib/search/shared/sources/source.mjs +1 -1
- package/esm2022/lib/search/shared/sources/storedqueries.mjs +13 -11
- package/esm2022/lib/search/shared/sources/storedqueries.providers.mjs +4 -2
- package/esm2022/lib/search/shared/sources/workspace.mjs +9 -7
- package/esm2022/lib/search/shared/sources/workspace.providers.mjs +4 -2
- package/esm2022/lib/style/style-list/style-list.module.mjs +4 -4
- package/esm2022/lib/style/style-list/style-list.service.mjs +3 -3
- package/esm2022/lib/style/style-modal/drawing/style-modal-drawing.component.mjs +3 -3
- package/esm2022/lib/style/style-modal/layer/style-modal-layer.component.mjs +3 -3
- package/esm2022/lib/style/style-modal/layer-button/style-modal-layer-button.component.mjs +3 -3
- package/esm2022/lib/style/style-service/draw-style.service.mjs +3 -3
- package/esm2022/lib/style/style-service/style.service.mjs +3 -3
- package/esm2022/lib/style/style.module.mjs +4 -4
- package/esm2022/lib/toast/toast.component.mjs +3 -3
- package/esm2022/lib/toast/toast.module.mjs +4 -4
- package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.service.mjs +6 -6
- package/esm2022/lib/wkt/shared/wkt.service.mjs +3 -3
- package/esm2022/lib/wkt/wkt.module.mjs +4 -4
- package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +6 -6
- package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +4 -4
- package/esm2022/lib/workspace/shared/edition-workspace.mjs +1 -1
- package/esm2022/lib/workspace/shared/edition-workspace.service.mjs +15 -11
- package/esm2022/lib/workspace/shared/feature-workspace.service.mjs +12 -10
- package/esm2022/lib/workspace/shared/wfs-workspace.service.mjs +12 -10
- package/esm2022/lib/workspace/shared/wms-workspace.service.mjs +10 -8
- package/esm2022/lib/workspace/shared/workspace.utils.mjs +2 -2
- package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +3 -3
- package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +4 -4
- package/esm2022/lib/workspace/workspace-selector/workspace-selector.directive.mjs +3 -3
- package/esm2022/lib/workspace/workspace-selector/workspace-selector.module.mjs +4 -4
- package/esm2022/lib/workspace/workspace-updator/workspace-updator.directive.mjs +3 -3
- package/esm2022/lib/workspace/workspace-updator/workspace-updator.module.mjs +4 -4
- package/esm2022/lib/workspace/workspace.module.mjs +4 -4
- package/fesm2022/igo2-geo.mjs +701 -690
- package/fesm2022/igo2-geo.mjs.map +1 -1
- package/lib/catalog/catalog-library/add-catalog-dialog.component.d.ts +2 -1
- package/lib/catalog/catalog-library/catalog-library.component.d.ts +2 -1
- package/lib/catalog/shared/catalog.service.d.ts +3 -1
- package/lib/datasource/shared/datasource.service.d.ts +2 -1
- package/lib/datasource/shared/options/options-api.providers.d.ts +1 -1
- package/lib/directions/directions-buttons/directions-buttons.component.d.ts +3 -1
- package/lib/directions/directions-inputs/directions-inputs.component.d.ts +1 -1
- package/lib/directions/directions-results/directions-results.component.d.ts +1 -1
- package/lib/directions/directions-sources/directions-source.provider.d.ts +1 -1
- package/lib/directions/directions-sources/osrm-directions-source.d.ts +1 -1
- package/lib/directions/directions.component.d.ts +1 -1
- package/lib/directions/shared/directions.service.d.ts +3 -1
- package/lib/directions/shared/directions.utils.d.ts +1 -1
- package/lib/download/shared/download.service.d.ts +1 -1
- package/lib/draw/draw/draw-popup.component.d.ts +1 -1
- package/lib/draw/draw/draw.component.d.ts +1 -1
- package/lib/draw/shared/draw-icon.service.d.ts +1 -1
- package/lib/feature/feature-details/feature-details.component.d.ts +3 -2
- package/lib/filter/ogc-filter-selection/ogc-filter-selection.component.d.ts +1 -1
- package/lib/filter/shared/spatial-filter.service.d.ts +2 -1
- package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +2 -1
- package/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.d.ts +1 -1
- package/lib/import-export/import-export/import-export.component.d.ts +4 -1
- package/lib/import-export/shared/drop-geo-file.directive.d.ts +2 -1
- package/lib/import-export/shared/export.service.d.ts +1 -1
- package/lib/import-export/shared/export.utils.d.ts +1 -1
- package/lib/import-export/shared/import.service.d.ts +1 -1
- package/lib/import-export/shared/import.utils.d.ts +1 -1
- package/lib/layer/layer-item/layer-item.component.d.ts +1 -1
- package/lib/layer/layer-legend/layer-legend.component.d.ts +2 -1
- package/lib/layer/layer-legend-item/layer-legend-item.component.d.ts +1 -1
- package/lib/layer/layer-list/layer-list-binding.directive.d.ts +1 -1
- package/lib/layer/shared/layer.service.d.ts +1 -1
- package/lib/layer/shared/layers/image-layer.d.ts +1 -1
- package/lib/layer/shared/layers/layer.d.ts +1 -1
- package/lib/layer/shared/layers/layer.interface.d.ts +1 -1
- package/lib/layer/shared/layers/tile-layer.d.ts +1 -1
- package/lib/layer/shared/layers/vector-layer.d.ts +1 -1
- package/lib/layer/shared/layers/vectortile-layer.d.ts +1 -1
- package/lib/layer/utils/image-watcher.d.ts +1 -1
- package/lib/map/baselayers-switcher/baselayers-switcher.component.d.ts +1 -1
- package/lib/map/geolocate-button/geolocate-button.component.d.ts +1 -1
- package/lib/map/home-extent-button/home-extent-button.component.d.ts +1 -1
- package/lib/map/map-browser/map-browser.component.d.ts +1 -1
- package/lib/map/menu-button/menu-button.component.d.ts +1 -1
- package/lib/map/shared/controllers/geolocation.d.ts +2 -1
- package/lib/map/shared/hover-feature.directive.d.ts +1 -1
- package/lib/map/shared/map-pointer-position.directive.d.ts +1 -1
- package/lib/map/shared/map.d.ts +2 -1
- package/lib/map/shared/mapOffline.directive.d.ts +2 -1
- package/lib/map/shared/projection.service.d.ts +1 -1
- package/lib/map/wake-lock-button/wake-lock-button.component.d.ts +1 -1
- package/lib/measure/measurer/measurer.component.d.ts +2 -1
- package/lib/measure/shared/measure.utils.d.ts +1 -1
- package/lib/offline/geoDB/configFileToGeoDB.service.d.ts +1 -1
- package/lib/offline/geoDB/geoDB.service.d.ts +2 -3
- package/lib/offline/shared/geo-network.service.d.ts +1 -1
- package/lib/print/print-form/print-form.component.d.ts +1 -1
- package/lib/print/shared/print.service.d.ts +4 -1
- package/lib/query/query.module.d.ts +1 -1
- package/lib/query/shared/query-search-source.providers.d.ts +1 -1
- package/lib/query/shared/query.service.d.ts +1 -1
- package/lib/search/search-bar/search-bar.component.d.ts +1 -1
- package/lib/search/search-results/save-feature-dialog.component.d.ts +1 -1
- package/lib/search/search-results/search-results-add-button.component.d.ts +1 -1
- package/lib/search/search-results/search-results.component.d.ts +1 -1
- package/lib/search/search-settings/search-settings.component.d.ts +2 -1
- package/lib/search/shared/search-pointer-summary.directive.d.ts +1 -1
- package/lib/search/shared/search.service.d.ts +1 -1
- package/lib/search/shared/sources/cadastre.d.ts +2 -1
- package/lib/search/shared/sources/cadastre.providers.d.ts +3 -1
- package/lib/search/shared/sources/coordinates.d.ts +2 -1
- package/lib/search/shared/sources/coordinates.providers.d.ts +3 -1
- package/lib/search/shared/sources/icherche.d.ts +2 -1
- package/lib/search/shared/sources/icherche.providers.d.ts +3 -1
- package/lib/search/shared/sources/ilayer.d.ts +2 -1
- package/lib/search/shared/sources/ilayer.providers.d.ts +3 -1
- package/lib/search/shared/sources/nominatim.d.ts +1 -1
- package/lib/search/shared/sources/nominatim.providers.d.ts +2 -1
- package/lib/search/shared/sources/source.d.ts +1 -1
- package/lib/search/shared/sources/storedqueries.d.ts +2 -1
- package/lib/search/shared/sources/storedqueries.providers.d.ts +3 -1
- package/lib/search/shared/sources/workspace.d.ts +2 -1
- package/lib/search/shared/sources/workspace.providers.d.ts +3 -1
- package/lib/utils/propertyTypeDetector/propertyTypeDetector.service.d.ts +1 -1
- package/lib/workspace/confirmation-popup/confirmation-popup.component.d.ts +1 -1
- package/lib/workspace/shared/edition-workspace.d.ts +1 -1
- package/lib/workspace/shared/edition-workspace.service.d.ts +3 -1
- package/lib/workspace/shared/feature-workspace.service.d.ts +2 -1
- package/lib/workspace/shared/wfs-workspace.service.d.ts +2 -1
- package/lib/workspace/shared/wms-workspace.service.d.ts +2 -1
- package/package.json +5 -5
|
@@ -10,7 +10,10 @@ import { MatSelectModule } from '@angular/material/select';
|
|
|
10
10
|
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
|
|
11
11
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
12
12
|
import { ConfirmDialogService, CustomHtmlComponent, SpinnerComponent } from '@igo2/common';
|
|
13
|
-
import { ConfigService
|
|
13
|
+
import { ConfigService } from '@igo2/core/config';
|
|
14
|
+
import { LanguageService } from '@igo2/core/language';
|
|
15
|
+
import { MessageService } from '@igo2/core/message';
|
|
16
|
+
import { StorageService } from '@igo2/core/storage';
|
|
14
17
|
import { strEnum } from '@igo2/utils';
|
|
15
18
|
import olPoint from 'ol/geom/Point';
|
|
16
19
|
import { circular } from 'ol/geom/Polygon';
|
|
@@ -33,22 +36,25 @@ import { handleFileImportError, handleFileImportSuccess } from '../shared/import
|
|
|
33
36
|
import * as i0 from "@angular/core";
|
|
34
37
|
import * as i1 from "../shared/import.service";
|
|
35
38
|
import * as i2 from "../shared/export.service";
|
|
36
|
-
import * as i3 from "@igo2/core";
|
|
37
|
-
import * as i4 from "
|
|
38
|
-
import * as i5 from "../../style/style-
|
|
39
|
-
import * as i6 from "
|
|
40
|
-
import * as i7 from "
|
|
41
|
-
import * as i8 from "
|
|
42
|
-
import * as i9 from "@igo2/
|
|
43
|
-
import * as i10 from "
|
|
44
|
-
import * as i11 from "
|
|
45
|
-
import * as i12 from "@
|
|
46
|
-
import * as i13 from "@angular/material/
|
|
47
|
-
import * as i14 from "@angular/material/
|
|
48
|
-
import * as i15 from "@angular/material/
|
|
49
|
-
import * as i16 from "@angular/material/
|
|
50
|
-
import * as i17 from "@angular/material/
|
|
51
|
-
import * as i18 from "@
|
|
39
|
+
import * as i3 from "@igo2/core/language";
|
|
40
|
+
import * as i4 from "@igo2/core/message";
|
|
41
|
+
import * as i5 from "../../style/style-list/style-list.service";
|
|
42
|
+
import * as i6 from "../../style/style-service/style.service";
|
|
43
|
+
import * as i7 from "@angular/forms";
|
|
44
|
+
import * as i8 from "@igo2/core/config";
|
|
45
|
+
import * as i9 from "@igo2/core/storage";
|
|
46
|
+
import * as i10 from "../../download/shared/download.service";
|
|
47
|
+
import * as i11 from "../../layer/shared/layer.service";
|
|
48
|
+
import * as i12 from "@igo2/common";
|
|
49
|
+
import * as i13 from "@angular/material/button-toggle";
|
|
50
|
+
import * as i14 from "@angular/material/form-field";
|
|
51
|
+
import * as i15 from "@angular/material/select";
|
|
52
|
+
import * as i16 from "@angular/material/core";
|
|
53
|
+
import * as i17 from "@angular/material/tooltip";
|
|
54
|
+
import * as i18 from "@angular/material/button";
|
|
55
|
+
import * as i19 from "@angular/material/slide-toggle";
|
|
56
|
+
import * as i20 from "@angular/material/input";
|
|
57
|
+
import * as i21 from "@ngx-translate/core";
|
|
52
58
|
export class ImportExportComponent {
|
|
53
59
|
importService;
|
|
54
60
|
exportService;
|
|
@@ -922,10 +928,10 @@ export class ImportExportComponent {
|
|
|
922
928
|
onImportExportChange(event) {
|
|
923
929
|
this.selectedMode = event.value;
|
|
924
930
|
}
|
|
925
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.
|
|
926
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: ImportExportComponent, isStandalone: true, selector: "igo-import-export", inputs: { selectFirstProj: "selectFirstProj", map: "map", contextUri: "contextUri", projectionsLimitations: "projectionsLimitations", store: "store", selectedMode: "selectedMode", exportOptions$: "exportOptions$" }, outputs: { selectMode: "selectMode", exportOptionsChange: "exportOptionsChange" }, providers: [ConfirmDialogService], ngImport: i0, template: "<div class=\"import-export-toggle mat-typography\">\r\n <mat-button-toggle-group\r\n [value]=\"selectedMode\"\r\n (change)=\"onImportExportChange($event)\"\r\n >\r\n <mat-button-toggle [value]=\"'import'\">\r\n {{ 'igo.geo.importExportForm.importTabTitle' | translate }}\r\n </mat-button-toggle>\r\n <mat-button-toggle [value]=\"'export'\">\r\n {{ 'igo.geo.importExportForm.exportTabTitle' | translate }}\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n</div>\r\n\r\n<form\r\n class=\"igo-form\"\r\n [formGroup]=\"importForm\"\r\n *ngIf=\"selectedMode === 'import'\"\r\n>\r\n <div class=\"igo-input-container\">\r\n <mat-form-field>\r\n <mat-label>{{\r\n 'igo.geo.importExportForm.importProjPlaceholder' | translate\r\n }}</mat-label>\r\n <mat-select [(value)]=\"inputProj\">\r\n <mat-option\r\n *ngFor=\"let projection of projections$ | async\"\r\n [value]=\"projection\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <p matListItemTitle *ngIf=\"projection.translateKey\">\r\n {{\r\n 'igo.geo.importExportForm.projections.' + projection.translateKey\r\n | translate: projection\r\n }}\r\n </p>\r\n <p matListItemTitle *ngIf=\"!projection.translateKey\">\r\n {{ projection.alias }}\r\n </p>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"\r\n importForm.invalid\r\n ? ('igo.geo.importExportForm.projections.choose' | translate)\r\n : ('igo.geo.importExportForm.importButton' | translate)\r\n \"\r\n class=\"igo-form-button-group\"\r\n >\r\n <button\r\n [disabled]=\"importForm.invalid || (loading$ | async)\"\r\n mat-raised-button\r\n type=\"button\"\r\n (click)=\"fileInput.click()\"\r\n >\r\n {{ 'igo.geo.importExportForm.importButton' | translate }}\r\n </button>\r\n <igo-spinner [shown]=\"loading$ | async\"></igo-spinner>\r\n <input\r\n hidden\r\n #fileInput\r\n type=\"file\"\r\n [style.display]=\"'none'\"\r\n (click)=\"fileInput.value = null\"\r\n (change)=\"importFiles($any($event.target).files)\"\r\n />\r\n </div>\r\n</form>\r\n<section class=\"mat-typography\" *ngIf=\"selectedMode === 'import'\">\r\n <div *ngIf=\"importHtmlClarifications === ''\">\r\n <h4>{{ 'igo.geo.importExportForm.importClarifications' | translate }}</h4>\r\n <ul>\r\n <li>\r\n {{\r\n 'igo.geo.importExportForm.importSizeMax'\r\n | translate: { size: fileSizeMb }\r\n }}\r\n </li>\r\n <li>\r\n {{ 'igo.geo.importExportForm.importFormatAuthorized' | translate }}\r\n </li>\r\n <li>{{ 'igo.geo.importExportForm.importShpZip' | translate }}</li>\r\n </ul>\r\n </div>\r\n <igo-custom-html\r\n *ngIf=\"importHtmlClarifications !== ''\"\r\n class=\"mat-typography\"\r\n [html]=\"importHtmlClarifications\"\r\n >\r\n </igo-custom-html>\r\n</section>\r\n\r\n<section\r\n class=\"mat-typography\"\r\n *ngIf=\"(exportableLayers$ | async).length === 0 && selectedMode === 'export'\"\r\n>\r\n <h4>{{ 'igo.geo.importExportForm.exportNoLayersExportable' | translate }}</h4>\r\n</section>\r\n\r\n<form\r\n class=\"igo-form\"\r\n [formGroup]=\"form\"\r\n *ngIf=\"(exportableLayers$ | async).length > 0 && selectedMode === 'export'\"\r\n>\r\n <div class=\"igo-input-container\">\r\n <mat-form-field>\r\n <mat-label>{{\r\n 'igo.geo.importExportForm.exportLayerPlaceholder' | translate\r\n }}</mat-label>\r\n <mat-select [(value)]=\"layers\" multiple>\r\n <mat-select-trigger>\r\n {{ layers.length ? getLayerTitleById(layers[0]) : '' }}\r\n <span *ngIf=\"layers.length > 1\" class=\"export-select-trigger\">\r\n (+{{ layers.length - 1 }}\r\n {{\r\n (layers?.length === 2\r\n ? 'igo.geo.importExportForm.other'\r\n : 'igo.geo.importExportForm.others'\r\n ) | translate\r\n }})\r\n </span>\r\n </mat-select-trigger>\r\n <mat-option\r\n *ngFor=\"let layer of exportableLayers$ | async\"\r\n [ngClass]=\"{\r\n 'igo-export-layer-mat-option': layerHasSelectedFeatures(layer)\r\n }\"\r\n [value]=\"layer.id\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <p matListItemTitle>{{ layer.title }}</p>\r\n <p matListItemTitle>\r\n <mat-slide-toggle\r\n *ngIf=\"layerHasSelectedFeatures(layer)\"\r\n (click)=\"onlySelectedClick($event, layer.id)\"\r\n (checked)=\"inLayersIdToExportSelectionOnly(layer)\"\r\n (change)=\"onlySelected($event, layer.id)\"\r\n >\r\n <small>{{\r\n 'igo.geo.importExportForm.exportSelectedFeature' | translate\r\n }}</small>\r\n </mat-slide-toggle>\r\n </p>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"igo-input-container\">\r\n <mat-form-field>\r\n <mat-label>{{\r\n 'igo.geo.importExportForm.exportFormatPlaceholder' | translate\r\n }}</mat-label>\r\n <mat-select formControlName=\"format\">\r\n <ng-container *ngIf=\"(formats$ | async).length !== 0\">\r\n <mat-option\r\n *ngFor=\"let format of formats$ | async | keyvalue\"\r\n [value]=\"format.key\"\r\n >\r\n {{ 'igo.geo.export.format.' + format.value | translate }}\r\n </mat-option>\r\n </ng-container>\r\n <mat-option *ngIf=\"(formats$ | async).length === 0\" disabled=\"true\">\r\n {{ 'igo.geo.export.noFormat.title' | translate }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div\r\n class=\"igo-input-container\"\r\n *ngIf=\"forceNaming && form.value.format !== 'URL'\"\r\n >\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"name\"\r\n placeholder=\"{{\r\n 'igo.geo.importExportForm.exportFileNamePlaceholder' | translate\r\n }}\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div\r\n class=\"igo-input-container\"\r\n *ngIf=\"\r\n form.value.format === 'CSVcomma' || form.value.format === 'CSVsemicolon'\r\n \"\r\n >\r\n <mat-form-field>\r\n <mat-label>{{\r\n 'igo.geo.importExportForm.encodingPlaceholder' | translate\r\n }}</mat-label>\r\n <mat-select formControlName=\"encoding\">\r\n <ng-container *ngIf=\"(encodings$ | async).length !== 0\">\r\n <mat-option\r\n *ngFor=\"let encoding of encodings$ | async | keyvalue\"\r\n [value]=\"encoding.key\"\r\n >\r\n {{ 'igo.geo.export.encoding.' + encoding.value | translate }}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div\r\n class=\"export-combine-layers mat-typography\"\r\n *ngIf=\"\r\n layers.length > 1 &&\r\n (form.value.format === 'CSVcomma' || form.value.format === 'CSVsemicolon')\r\n \"\r\n >\r\n <mat-slide-toggle\r\n formControlName=\"combineLayers\"\r\n [labelPosition]=\"'before'\"\r\n >\r\n {{ 'igo.geo.importExportForm.exportCombineResults' | translate }}\r\n </mat-slide-toggle>\r\n </div>\r\n\r\n <div\r\n class=\"export-separator mat-typography\"\r\n *ngIf=\"\r\n layers.length > 1 &&\r\n (form.value.format === 'CSVcomma' ||\r\n form.value.format === 'CSVsemicolon') &&\r\n form.value.combineLayers\r\n \"\r\n >\r\n <mat-slide-toggle formControlName=\"separator\" [labelPosition]=\"'before'\">\r\n {{ 'igo.geo.importExportForm.exportSeparator' | translate }}\r\n </mat-slide-toggle>\r\n </div>\r\n\r\n <div\r\n class=\"export-options mat-typography\"\r\n *ngIf=\"form.value.format !== 'URL'\"\r\n >\r\n <mat-slide-toggle\r\n formControlName=\"featureInMapExtent\"\r\n [labelPosition]=\"'before'\"\r\n >\r\n {{ 'igo.geo.importExportForm.exportFeatureInExtent' | translate }}\r\n </mat-slide-toggle>\r\n </div>\r\n\r\n <div class=\"igo-form-button-group\">\r\n <button\r\n mat-raised-button\r\n type=\"button\"\r\n [disabled]=\"!form.valid || (loading$ | async)\"\r\n (click)=\"handleExportFormSubmit(form.value)\"\r\n >\r\n {{\r\n form.value.format !== 'URL'\r\n ? ('igo.geo.importExportForm.exportButton' | translate)\r\n : form.value.layers.length > 1\r\n ? ('igo.geo.importExportForm.exportButtonLinks' | translate)\r\n : ('igo.geo.importExportForm.exportButtonLink' | translate)\r\n }}\r\n </button>\r\n <igo-spinner [shown]=\"loading$ | async\"></igo-spinner>\r\n </div>\r\n\r\n <igo-custom-html\r\n *ngIf=\"exportHtmlClarifications !== ''\"\r\n class=\"mat-typography\"\r\n [html]=\"exportHtmlClarifications\"\r\n >\r\n </igo-custom-html>\r\n</form>\r\n", styles: [":host mat-option.igo-export-layer-mat-option{height:5em;line-height:1em}:host .import-export-toggle{padding:10px;text-align:center}:host .import-export-toggle mat-button-toggle-group{width:100%}:host .import-export-toggle mat-button-toggle-group mat-button-toggle{width:50%}:host h4{padding:0 5px}:host .igo-form{padding:15px 5px}:host .igo-input-container mat-form-field{width:100%}:host .igo-form-button-group{text-align:center;padding-top:10px}:host igo-spinner{position:absolute;padding-left:10px}:host .export-options mat-slide-toggle,:host .export-combine-layers mat-slide-toggle,:host .export-separator mat-slide-toggle{width:100%;padding:10px}:host .export-options mat-slide-toggle ::ng-deep .mdc-form-field,:host .export-combine-layers mat-slide-toggle ::ng-deep .mdc-form-field,:host .export-separator mat-slide-toggle ::ng-deep .mdc-form-field{width:100%}:host .export-options mat-slide-toggle ::ng-deep .mdc-label,:host .export-combine-layers mat-slide-toggle ::ng-deep .mdc-label,:host .export-separator mat-slide-toggle ::ng-deep .mdc-label{margin-left:0;width:calc(100% - 60px)}:host .export-select-trigger{opacity:.75;font-size:.75em}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonToggleModule }, { kind: "directive", type: i10.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i10.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i6.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i11.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i11.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i12.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: "directive", type: i12.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i13.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i14.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i15.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: SpinnerComponent, selector: "igo-spinner", inputs: ["shown"] }, { kind: "component", type: CustomHtmlComponent, selector: "igo-custom-html", inputs: ["html"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i16.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i17.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: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i18.TranslatePipe, name: "translate" }] });
|
|
931
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ImportExportComponent, deps: [{ token: i1.ImportService }, { token: i2.ExportService }, { token: i3.LanguageService }, { token: i4.MessageService }, { token: i5.StyleListService }, { token: i6.StyleService }, { token: i7.UntypedFormBuilder }, { token: i8.ConfigService }, { token: i0.ChangeDetectorRef }, { token: i9.StorageService }, { token: i10.DownloadService }, { token: i11.LayerService }, { token: i12.ConfirmDialogService }], target: i0.ɵɵFactoryTarget.Component });
|
|
932
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: ImportExportComponent, isStandalone: true, selector: "igo-import-export", inputs: { selectFirstProj: "selectFirstProj", map: "map", contextUri: "contextUri", projectionsLimitations: "projectionsLimitations", store: "store", selectedMode: "selectedMode", exportOptions$: "exportOptions$" }, outputs: { selectMode: "selectMode", exportOptionsChange: "exportOptionsChange" }, providers: [ConfirmDialogService], ngImport: i0, template: "<div class=\"import-export-toggle mat-typography\">\r\n <mat-button-toggle-group\r\n [value]=\"selectedMode\"\r\n (change)=\"onImportExportChange($event)\"\r\n >\r\n <mat-button-toggle [value]=\"'import'\">\r\n {{ 'igo.geo.importExportForm.importTabTitle' | translate }}\r\n </mat-button-toggle>\r\n <mat-button-toggle [value]=\"'export'\">\r\n {{ 'igo.geo.importExportForm.exportTabTitle' | translate }}\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n</div>\r\n\r\n<form\r\n class=\"igo-form\"\r\n [formGroup]=\"importForm\"\r\n *ngIf=\"selectedMode === 'import'\"\r\n>\r\n <div class=\"igo-input-container\">\r\n <mat-form-field>\r\n <mat-label>{{\r\n 'igo.geo.importExportForm.importProjPlaceholder' | translate\r\n }}</mat-label>\r\n <mat-select [(value)]=\"inputProj\">\r\n <mat-option\r\n *ngFor=\"let projection of projections$ | async\"\r\n [value]=\"projection\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <p matListItemTitle *ngIf=\"projection.translateKey\">\r\n {{\r\n 'igo.geo.importExportForm.projections.' + projection.translateKey\r\n | translate: projection\r\n }}\r\n </p>\r\n <p matListItemTitle *ngIf=\"!projection.translateKey\">\r\n {{ projection.alias }}\r\n </p>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"\r\n importForm.invalid\r\n ? ('igo.geo.importExportForm.projections.choose' | translate)\r\n : ('igo.geo.importExportForm.importButton' | translate)\r\n \"\r\n class=\"igo-form-button-group\"\r\n >\r\n <button\r\n [disabled]=\"importForm.invalid || (loading$ | async)\"\r\n mat-raised-button\r\n type=\"button\"\r\n (click)=\"fileInput.click()\"\r\n >\r\n {{ 'igo.geo.importExportForm.importButton' | translate }}\r\n </button>\r\n <igo-spinner [shown]=\"loading$ | async\"></igo-spinner>\r\n <input\r\n hidden\r\n #fileInput\r\n type=\"file\"\r\n [style.display]=\"'none'\"\r\n (click)=\"fileInput.value = null\"\r\n (change)=\"importFiles($any($event.target).files)\"\r\n />\r\n </div>\r\n</form>\r\n<section class=\"mat-typography\" *ngIf=\"selectedMode === 'import'\">\r\n <div *ngIf=\"importHtmlClarifications === ''\">\r\n <h4>{{ 'igo.geo.importExportForm.importClarifications' | translate }}</h4>\r\n <ul>\r\n <li>\r\n {{\r\n 'igo.geo.importExportForm.importSizeMax'\r\n | translate: { size: fileSizeMb }\r\n }}\r\n </li>\r\n <li>\r\n {{ 'igo.geo.importExportForm.importFormatAuthorized' | translate }}\r\n </li>\r\n <li>{{ 'igo.geo.importExportForm.importShpZip' | translate }}</li>\r\n </ul>\r\n </div>\r\n <igo-custom-html\r\n *ngIf=\"importHtmlClarifications !== ''\"\r\n class=\"mat-typography\"\r\n [html]=\"importHtmlClarifications\"\r\n >\r\n </igo-custom-html>\r\n</section>\r\n\r\n<section\r\n class=\"mat-typography\"\r\n *ngIf=\"(exportableLayers$ | async).length === 0 && selectedMode === 'export'\"\r\n>\r\n <h4>{{ 'igo.geo.importExportForm.exportNoLayersExportable' | translate }}</h4>\r\n</section>\r\n\r\n<form\r\n class=\"igo-form\"\r\n [formGroup]=\"form\"\r\n *ngIf=\"(exportableLayers$ | async).length > 0 && selectedMode === 'export'\"\r\n>\r\n <div class=\"igo-input-container\">\r\n <mat-form-field>\r\n <mat-label>{{\r\n 'igo.geo.importExportForm.exportLayerPlaceholder' | translate\r\n }}</mat-label>\r\n <mat-select [(value)]=\"layers\" multiple>\r\n <mat-select-trigger>\r\n {{ layers.length ? getLayerTitleById(layers[0]) : '' }}\r\n <span *ngIf=\"layers.length > 1\" class=\"export-select-trigger\">\r\n (+{{ layers.length - 1 }}\r\n {{\r\n (layers?.length === 2\r\n ? 'igo.geo.importExportForm.other'\r\n : 'igo.geo.importExportForm.others'\r\n ) | translate\r\n }})\r\n </span>\r\n </mat-select-trigger>\r\n <mat-option\r\n *ngFor=\"let layer of exportableLayers$ | async\"\r\n [ngClass]=\"{\r\n 'igo-export-layer-mat-option': layerHasSelectedFeatures(layer)\r\n }\"\r\n [value]=\"layer.id\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <p matListItemTitle>{{ layer.title }}</p>\r\n <p matListItemTitle>\r\n <mat-slide-toggle\r\n *ngIf=\"layerHasSelectedFeatures(layer)\"\r\n (click)=\"onlySelectedClick($event, layer.id)\"\r\n (checked)=\"inLayersIdToExportSelectionOnly(layer)\"\r\n (change)=\"onlySelected($event, layer.id)\"\r\n >\r\n <small>{{\r\n 'igo.geo.importExportForm.exportSelectedFeature' | translate\r\n }}</small>\r\n </mat-slide-toggle>\r\n </p>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"igo-input-container\">\r\n <mat-form-field>\r\n <mat-label>{{\r\n 'igo.geo.importExportForm.exportFormatPlaceholder' | translate\r\n }}</mat-label>\r\n <mat-select formControlName=\"format\">\r\n <ng-container *ngIf=\"(formats$ | async).length !== 0\">\r\n <mat-option\r\n *ngFor=\"let format of formats$ | async | keyvalue\"\r\n [value]=\"format.key\"\r\n >\r\n {{ 'igo.geo.export.format.' + format.value | translate }}\r\n </mat-option>\r\n </ng-container>\r\n <mat-option *ngIf=\"(formats$ | async).length === 0\" disabled=\"true\">\r\n {{ 'igo.geo.export.noFormat.title' | translate }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div\r\n class=\"igo-input-container\"\r\n *ngIf=\"forceNaming && form.value.format !== 'URL'\"\r\n >\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"name\"\r\n placeholder=\"{{\r\n 'igo.geo.importExportForm.exportFileNamePlaceholder' | translate\r\n }}\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div\r\n class=\"igo-input-container\"\r\n *ngIf=\"\r\n form.value.format === 'CSVcomma' || form.value.format === 'CSVsemicolon'\r\n \"\r\n >\r\n <mat-form-field>\r\n <mat-label>{{\r\n 'igo.geo.importExportForm.encodingPlaceholder' | translate\r\n }}</mat-label>\r\n <mat-select formControlName=\"encoding\">\r\n <ng-container *ngIf=\"(encodings$ | async).length !== 0\">\r\n <mat-option\r\n *ngFor=\"let encoding of encodings$ | async | keyvalue\"\r\n [value]=\"encoding.key\"\r\n >\r\n {{ 'igo.geo.export.encoding.' + encoding.value | translate }}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div\r\n class=\"export-combine-layers mat-typography\"\r\n *ngIf=\"\r\n layers.length > 1 &&\r\n (form.value.format === 'CSVcomma' || form.value.format === 'CSVsemicolon')\r\n \"\r\n >\r\n <mat-slide-toggle\r\n formControlName=\"combineLayers\"\r\n [labelPosition]=\"'before'\"\r\n >\r\n {{ 'igo.geo.importExportForm.exportCombineResults' | translate }}\r\n </mat-slide-toggle>\r\n </div>\r\n\r\n <div\r\n class=\"export-separator mat-typography\"\r\n *ngIf=\"\r\n layers.length > 1 &&\r\n (form.value.format === 'CSVcomma' ||\r\n form.value.format === 'CSVsemicolon') &&\r\n form.value.combineLayers\r\n \"\r\n >\r\n <mat-slide-toggle formControlName=\"separator\" [labelPosition]=\"'before'\">\r\n {{ 'igo.geo.importExportForm.exportSeparator' | translate }}\r\n </mat-slide-toggle>\r\n </div>\r\n\r\n <div\r\n class=\"export-options mat-typography\"\r\n *ngIf=\"form.value.format !== 'URL'\"\r\n >\r\n <mat-slide-toggle\r\n formControlName=\"featureInMapExtent\"\r\n [labelPosition]=\"'before'\"\r\n >\r\n {{ 'igo.geo.importExportForm.exportFeatureInExtent' | translate }}\r\n </mat-slide-toggle>\r\n </div>\r\n\r\n <div class=\"igo-form-button-group\">\r\n <button\r\n mat-raised-button\r\n type=\"button\"\r\n [disabled]=\"!form.valid || (loading$ | async)\"\r\n (click)=\"handleExportFormSubmit(form.value)\"\r\n >\r\n {{\r\n form.value.format !== 'URL'\r\n ? ('igo.geo.importExportForm.exportButton' | translate)\r\n : form.value.layers.length > 1\r\n ? ('igo.geo.importExportForm.exportButtonLinks' | translate)\r\n : ('igo.geo.importExportForm.exportButtonLink' | translate)\r\n }}\r\n </button>\r\n <igo-spinner [shown]=\"loading$ | async\"></igo-spinner>\r\n </div>\r\n\r\n <igo-custom-html\r\n *ngIf=\"exportHtmlClarifications !== ''\"\r\n class=\"mat-typography\"\r\n [html]=\"exportHtmlClarifications\"\r\n >\r\n </igo-custom-html>\r\n</form>\r\n", styles: [":host mat-option.igo-export-layer-mat-option{height:5em;line-height:1em}:host .import-export-toggle{padding:10px;text-align:center}:host .import-export-toggle mat-button-toggle-group{width:100%}:host .import-export-toggle mat-button-toggle-group mat-button-toggle{width:50%}:host h4{padding:0 5px}:host .igo-form{padding:15px 5px}:host .igo-input-container mat-form-field{width:100%}:host .igo-form-button-group{text-align:center;padding-top:10px}:host igo-spinner{position:absolute;padding-left:10px}:host .export-options mat-slide-toggle,:host .export-combine-layers mat-slide-toggle,:host .export-separator mat-slide-toggle{width:100%;padding:10px}:host .export-options mat-slide-toggle ::ng-deep .mdc-form-field,:host .export-combine-layers mat-slide-toggle ::ng-deep .mdc-form-field,:host .export-separator mat-slide-toggle ::ng-deep .mdc-form-field{width:100%}:host .export-options mat-slide-toggle ::ng-deep .mdc-label,:host .export-combine-layers mat-slide-toggle ::ng-deep .mdc-label,:host .export-separator mat-slide-toggle ::ng-deep .mdc-label{margin-left:0;width:calc(100% - 60px)}:host .export-select-trigger{opacity:.75;font-size:.75em}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonToggleModule }, { kind: "directive", type: i13.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i13.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i7.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i14.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i14.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i15.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: "directive", type: i15.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i16.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i17.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i18.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: SpinnerComponent, selector: "igo-spinner", inputs: ["shown"] }, { kind: "component", type: CustomHtmlComponent, selector: "igo-custom-html", inputs: ["html"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i19.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i20.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: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i21.TranslatePipe, name: "translate" }] });
|
|
927
933
|
}
|
|
928
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.
|
|
934
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ImportExportComponent, decorators: [{
|
|
929
935
|
type: Component,
|
|
930
936
|
args: [{ selector: 'igo-import-export', standalone: true, imports: [
|
|
931
937
|
MatButtonToggleModule,
|
|
@@ -947,7 +953,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImpor
|
|
|
947
953
|
KeyValuePipe,
|
|
948
954
|
TranslateModule
|
|
949
955
|
], providers: [ConfirmDialogService], template: "<div class=\"import-export-toggle mat-typography\">\r\n <mat-button-toggle-group\r\n [value]=\"selectedMode\"\r\n (change)=\"onImportExportChange($event)\"\r\n >\r\n <mat-button-toggle [value]=\"'import'\">\r\n {{ 'igo.geo.importExportForm.importTabTitle' | translate }}\r\n </mat-button-toggle>\r\n <mat-button-toggle [value]=\"'export'\">\r\n {{ 'igo.geo.importExportForm.exportTabTitle' | translate }}\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n</div>\r\n\r\n<form\r\n class=\"igo-form\"\r\n [formGroup]=\"importForm\"\r\n *ngIf=\"selectedMode === 'import'\"\r\n>\r\n <div class=\"igo-input-container\">\r\n <mat-form-field>\r\n <mat-label>{{\r\n 'igo.geo.importExportForm.importProjPlaceholder' | translate\r\n }}</mat-label>\r\n <mat-select [(value)]=\"inputProj\">\r\n <mat-option\r\n *ngFor=\"let projection of projections$ | async\"\r\n [value]=\"projection\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <p matListItemTitle *ngIf=\"projection.translateKey\">\r\n {{\r\n 'igo.geo.importExportForm.projections.' + projection.translateKey\r\n | translate: projection\r\n }}\r\n </p>\r\n <p matListItemTitle *ngIf=\"!projection.translateKey\">\r\n {{ projection.alias }}\r\n </p>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"\r\n importForm.invalid\r\n ? ('igo.geo.importExportForm.projections.choose' | translate)\r\n : ('igo.geo.importExportForm.importButton' | translate)\r\n \"\r\n class=\"igo-form-button-group\"\r\n >\r\n <button\r\n [disabled]=\"importForm.invalid || (loading$ | async)\"\r\n mat-raised-button\r\n type=\"button\"\r\n (click)=\"fileInput.click()\"\r\n >\r\n {{ 'igo.geo.importExportForm.importButton' | translate }}\r\n </button>\r\n <igo-spinner [shown]=\"loading$ | async\"></igo-spinner>\r\n <input\r\n hidden\r\n #fileInput\r\n type=\"file\"\r\n [style.display]=\"'none'\"\r\n (click)=\"fileInput.value = null\"\r\n (change)=\"importFiles($any($event.target).files)\"\r\n />\r\n </div>\r\n</form>\r\n<section class=\"mat-typography\" *ngIf=\"selectedMode === 'import'\">\r\n <div *ngIf=\"importHtmlClarifications === ''\">\r\n <h4>{{ 'igo.geo.importExportForm.importClarifications' | translate }}</h4>\r\n <ul>\r\n <li>\r\n {{\r\n 'igo.geo.importExportForm.importSizeMax'\r\n | translate: { size: fileSizeMb }\r\n }}\r\n </li>\r\n <li>\r\n {{ 'igo.geo.importExportForm.importFormatAuthorized' | translate }}\r\n </li>\r\n <li>{{ 'igo.geo.importExportForm.importShpZip' | translate }}</li>\r\n </ul>\r\n </div>\r\n <igo-custom-html\r\n *ngIf=\"importHtmlClarifications !== ''\"\r\n class=\"mat-typography\"\r\n [html]=\"importHtmlClarifications\"\r\n >\r\n </igo-custom-html>\r\n</section>\r\n\r\n<section\r\n class=\"mat-typography\"\r\n *ngIf=\"(exportableLayers$ | async).length === 0 && selectedMode === 'export'\"\r\n>\r\n <h4>{{ 'igo.geo.importExportForm.exportNoLayersExportable' | translate }}</h4>\r\n</section>\r\n\r\n<form\r\n class=\"igo-form\"\r\n [formGroup]=\"form\"\r\n *ngIf=\"(exportableLayers$ | async).length > 0 && selectedMode === 'export'\"\r\n>\r\n <div class=\"igo-input-container\">\r\n <mat-form-field>\r\n <mat-label>{{\r\n 'igo.geo.importExportForm.exportLayerPlaceholder' | translate\r\n }}</mat-label>\r\n <mat-select [(value)]=\"layers\" multiple>\r\n <mat-select-trigger>\r\n {{ layers.length ? getLayerTitleById(layers[0]) : '' }}\r\n <span *ngIf=\"layers.length > 1\" class=\"export-select-trigger\">\r\n (+{{ layers.length - 1 }}\r\n {{\r\n (layers?.length === 2\r\n ? 'igo.geo.importExportForm.other'\r\n : 'igo.geo.importExportForm.others'\r\n ) | translate\r\n }})\r\n </span>\r\n </mat-select-trigger>\r\n <mat-option\r\n *ngFor=\"let layer of exportableLayers$ | async\"\r\n [ngClass]=\"{\r\n 'igo-export-layer-mat-option': layerHasSelectedFeatures(layer)\r\n }\"\r\n [value]=\"layer.id\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <p matListItemTitle>{{ layer.title }}</p>\r\n <p matListItemTitle>\r\n <mat-slide-toggle\r\n *ngIf=\"layerHasSelectedFeatures(layer)\"\r\n (click)=\"onlySelectedClick($event, layer.id)\"\r\n (checked)=\"inLayersIdToExportSelectionOnly(layer)\"\r\n (change)=\"onlySelected($event, layer.id)\"\r\n >\r\n <small>{{\r\n 'igo.geo.importExportForm.exportSelectedFeature' | translate\r\n }}</small>\r\n </mat-slide-toggle>\r\n </p>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"igo-input-container\">\r\n <mat-form-field>\r\n <mat-label>{{\r\n 'igo.geo.importExportForm.exportFormatPlaceholder' | translate\r\n }}</mat-label>\r\n <mat-select formControlName=\"format\">\r\n <ng-container *ngIf=\"(formats$ | async).length !== 0\">\r\n <mat-option\r\n *ngFor=\"let format of formats$ | async | keyvalue\"\r\n [value]=\"format.key\"\r\n >\r\n {{ 'igo.geo.export.format.' + format.value | translate }}\r\n </mat-option>\r\n </ng-container>\r\n <mat-option *ngIf=\"(formats$ | async).length === 0\" disabled=\"true\">\r\n {{ 'igo.geo.export.noFormat.title' | translate }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div\r\n class=\"igo-input-container\"\r\n *ngIf=\"forceNaming && form.value.format !== 'URL'\"\r\n >\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"name\"\r\n placeholder=\"{{\r\n 'igo.geo.importExportForm.exportFileNamePlaceholder' | translate\r\n }}\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div\r\n class=\"igo-input-container\"\r\n *ngIf=\"\r\n form.value.format === 'CSVcomma' || form.value.format === 'CSVsemicolon'\r\n \"\r\n >\r\n <mat-form-field>\r\n <mat-label>{{\r\n 'igo.geo.importExportForm.encodingPlaceholder' | translate\r\n }}</mat-label>\r\n <mat-select formControlName=\"encoding\">\r\n <ng-container *ngIf=\"(encodings$ | async).length !== 0\">\r\n <mat-option\r\n *ngFor=\"let encoding of encodings$ | async | keyvalue\"\r\n [value]=\"encoding.key\"\r\n >\r\n {{ 'igo.geo.export.encoding.' + encoding.value | translate }}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div\r\n class=\"export-combine-layers mat-typography\"\r\n *ngIf=\"\r\n layers.length > 1 &&\r\n (form.value.format === 'CSVcomma' || form.value.format === 'CSVsemicolon')\r\n \"\r\n >\r\n <mat-slide-toggle\r\n formControlName=\"combineLayers\"\r\n [labelPosition]=\"'before'\"\r\n >\r\n {{ 'igo.geo.importExportForm.exportCombineResults' | translate }}\r\n </mat-slide-toggle>\r\n </div>\r\n\r\n <div\r\n class=\"export-separator mat-typography\"\r\n *ngIf=\"\r\n layers.length > 1 &&\r\n (form.value.format === 'CSVcomma' ||\r\n form.value.format === 'CSVsemicolon') &&\r\n form.value.combineLayers\r\n \"\r\n >\r\n <mat-slide-toggle formControlName=\"separator\" [labelPosition]=\"'before'\">\r\n {{ 'igo.geo.importExportForm.exportSeparator' | translate }}\r\n </mat-slide-toggle>\r\n </div>\r\n\r\n <div\r\n class=\"export-options mat-typography\"\r\n *ngIf=\"form.value.format !== 'URL'\"\r\n >\r\n <mat-slide-toggle\r\n formControlName=\"featureInMapExtent\"\r\n [labelPosition]=\"'before'\"\r\n >\r\n {{ 'igo.geo.importExportForm.exportFeatureInExtent' | translate }}\r\n </mat-slide-toggle>\r\n </div>\r\n\r\n <div class=\"igo-form-button-group\">\r\n <button\r\n mat-raised-button\r\n type=\"button\"\r\n [disabled]=\"!form.valid || (loading$ | async)\"\r\n (click)=\"handleExportFormSubmit(form.value)\"\r\n >\r\n {{\r\n form.value.format !== 'URL'\r\n ? ('igo.geo.importExportForm.exportButton' | translate)\r\n : form.value.layers.length > 1\r\n ? ('igo.geo.importExportForm.exportButtonLinks' | translate)\r\n : ('igo.geo.importExportForm.exportButtonLink' | translate)\r\n }}\r\n </button>\r\n <igo-spinner [shown]=\"loading$ | async\"></igo-spinner>\r\n </div>\r\n\r\n <igo-custom-html\r\n *ngIf=\"exportHtmlClarifications !== ''\"\r\n class=\"mat-typography\"\r\n [html]=\"exportHtmlClarifications\"\r\n >\r\n </igo-custom-html>\r\n</form>\r\n", styles: [":host mat-option.igo-export-layer-mat-option{height:5em;line-height:1em}:host .import-export-toggle{padding:10px;text-align:center}:host .import-export-toggle mat-button-toggle-group{width:100%}:host .import-export-toggle mat-button-toggle-group mat-button-toggle{width:50%}:host h4{padding:0 5px}:host .igo-form{padding:15px 5px}:host .igo-input-container mat-form-field{width:100%}:host .igo-form-button-group{text-align:center;padding-top:10px}:host igo-spinner{position:absolute;padding-left:10px}:host .export-options mat-slide-toggle,:host .export-combine-layers mat-slide-toggle,:host .export-separator mat-slide-toggle{width:100%;padding:10px}:host .export-options mat-slide-toggle ::ng-deep .mdc-form-field,:host .export-combine-layers mat-slide-toggle ::ng-deep .mdc-form-field,:host .export-separator mat-slide-toggle ::ng-deep .mdc-form-field{width:100%}:host .export-options mat-slide-toggle ::ng-deep .mdc-label,:host .export-combine-layers mat-slide-toggle ::ng-deep .mdc-label,:host .export-separator mat-slide-toggle ::ng-deep .mdc-label{margin-left:0;width:calc(100% - 60px)}:host .export-select-trigger{opacity:.75;font-size:.75em}\n"] }]
|
|
950
|
-
}], ctorParameters: () => [{ type: i1.ImportService }, { type: i2.ExportService }, { type: i3.LanguageService }, { type:
|
|
956
|
+
}], ctorParameters: () => [{ type: i1.ImportService }, { type: i2.ExportService }, { type: i3.LanguageService }, { type: i4.MessageService }, { type: i5.StyleListService }, { type: i6.StyleService }, { type: i7.UntypedFormBuilder }, { type: i8.ConfigService }, { type: i0.ChangeDetectorRef }, { type: i9.StorageService }, { type: i10.DownloadService }, { type: i11.LayerService }, { type: i12.ConfirmDialogService }], propDecorators: { selectFirstProj: [{
|
|
951
957
|
type: Input
|
|
952
958
|
}], map: [{
|
|
953
959
|
type: Input
|
|
@@ -966,4 +972,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImpor
|
|
|
966
972
|
}], exportOptionsChange: [{
|
|
967
973
|
type: Output
|
|
968
974
|
}] } });
|
|
969
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LWV4cG9ydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9pbXBvcnQtZXhwb3J0L2ltcG9ydC1leHBvcnQvaW1wb3J0LWV4cG9ydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9pbXBvcnQtZXhwb3J0L2ltcG9ydC1leHBvcnQvaW1wb3J0LWV4cG9ydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hGLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxXQUFXLEVBQ1gsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUVsQixVQUFVLEVBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUVMLG9CQUFvQixFQUNyQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTdELE9B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cUJBQXFCLDJXQUZyQixDQUFDLG9CQUFvQixDQUFDLDBCQzlHbkMsZ25TQXNSQSx5ckNEM0xJLHFCQUFxQix5aEJBQ3JCLElBQUksNEZBQ0osV0FBVywycEJBQ1gsbUJBQW1CLCtVQUNuQixrQkFBa0IsNFNBQ2xCLGVBQWUseXdCQUNmLEtBQUssa0hBQ0wsZUFBZSw4QkFDZixnQkFBZ0IsNlRBQ2hCLGVBQWUsNk5BQ2YsZ0JBQWdCLDJFQUNoQixtQkFBbUIsOEVBQ25CLE9BQU8sbUZBQ1Asb0JBQW9CLG1XQUNwQixjQUFjLHVXQUNkLFNBQVMseUNBQ1QsWUFBWSxnREFDWixlQUFlOzsyRkFJTixxQkFBcUI7a0JBM0JqQyxTQUFTOytCQUNFLG1CQUFtQixjQUdqQixJQUFJLFdBQ1A7d0JBQ1AscUJBQXFCO3dCQUNyQixJQUFJO3dCQUNKLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLGVBQWU7d0JBQ2YsS0FBSzt3QkFDTCxlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIsZUFBZTt3QkFDZixnQkFBZ0I7d0JBQ2hCLG1CQUFtQjt3QkFDbkIsT0FBTzt3QkFDUCxvQkFBb0I7d0JBQ3BCLGNBQWM7d0JBQ2QsU0FBUzt3QkFDVCxZQUFZO3dCQUNaLGVBQWU7cUJBQ2hCLGFBQ1UsQ0FBQyxvQkFBb0IsQ0FBQzt5YkEyQ3hCLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUcsR0FBRztzQkFBWCxLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBSUYsc0JBQXNCO3NCQUR6QixLQUFLO2dCQVlHLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVJLFVBQVU7c0JBQW5CLE1BQU07Z0JBRUUsY0FBYztzQkFBdEIsS0FBSztnQkFJSSxtQkFBbUI7c0JBQTVCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3luY1BpcGUsIEtleVZhbHVlUGlwZSwgTmdDbGFzcywgTmdGb3IsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBGb3Jtc01vZHVsZSxcclxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gIFVudHlwZWRGb3JtQnVpbGRlcixcclxuICBVbnR5cGVkRm9ybUdyb3VwLFxyXG4gIFZhbGlkYXRvcnNcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdEJ1dHRvblRvZ2dsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbi10b2dnbGUnO1xyXG5pbXBvcnQgeyBNYXRPcHRpb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5pbXBvcnQge1xyXG4gIE1hdFNsaWRlVG9nZ2xlQ2hhbmdlLFxyXG4gIE1hdFNsaWRlVG9nZ2xlTW9kdWxlXHJcbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGUtdG9nZ2xlJztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5cclxuaW1wb3J0IHtcclxuICBDb25maXJtRGlhbG9nU2VydmljZSxcclxuICBDdXN0b21IdG1sQ29tcG9uZW50LFxyXG4gIEVudGl0eVJlY29yZCxcclxuICBTcGlubmVyQ29tcG9uZW50LFxyXG4gIFdvcmtzcGFjZVxyXG59IGZyb20gJ0BpZ28yL2NvbW1vbic7XHJcbmltcG9ydCB0eXBlIHsgV29ya3NwYWNlU3RvcmUgfSBmcm9tICdAaWdvMi9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIENvbmZpZ1NlcnZpY2UsXHJcbiAgTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gIE1lc3NhZ2VTZXJ2aWNlLFxyXG4gIFN0b3JhZ2VTZXJ2aWNlXHJcbn0gZnJvbSAnQGlnbzIvY29yZSc7XHJcbmltcG9ydCB7IHN0ckVudW0gfSBmcm9tICdAaWdvMi91dGlscyc7XHJcblxyXG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT2xHZW9tZXRyeSB9IGZyb20gJ29sL2dlb20vR2VvbWV0cnknO1xyXG5pbXBvcnQgb2xQb2ludCBmcm9tICdvbC9nZW9tL1BvaW50JztcclxuaW1wb3J0IHsgY2lyY3VsYXIgfSBmcm9tICdvbC9nZW9tL1BvbHlnb24nO1xyXG5pbXBvcnQgb2xDbHVzdGVyU291cmNlIGZyb20gJ29sL3NvdXJjZS9DbHVzdGVyJztcclxuaW1wb3J0IG9sVmVjdG9yU291cmNlIGZyb20gJ29sL3NvdXJjZS9WZWN0b3InO1xyXG5cclxuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHNraXBXaGlsZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IENsdXN0ZXJEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vZGF0YXNvdXJjZS9zaGFyZWQvZGF0YXNvdXJjZXMvY2x1c3Rlci1kYXRhc291cmNlJztcclxuaW1wb3J0IHsgRGF0YVNvdXJjZU9wdGlvbnMgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlL3NoYXJlZC9kYXRhc291cmNlcy9kYXRhc291cmNlLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IERvd25sb2FkU2VydmljZSB9IGZyb20gJy4uLy4uL2Rvd25sb2FkL3NoYXJlZC9kb3dubG9hZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRmVhdHVyZSB9IGZyb20gJy4uLy4uL2ZlYXR1cmUvc2hhcmVkL2ZlYXR1cmUuaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IExheWVyU2VydmljZSB9IGZyb20gJy4uLy4uL2xheWVyL3NoYXJlZC9sYXllci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQW55TGF5ZXIgfSBmcm9tICcuLi8uLi9sYXllci9zaGFyZWQvbGF5ZXJzL2FueS1sYXllcic7XHJcbmltcG9ydCB7IExheWVyIH0gZnJvbSAnLi4vLi4vbGF5ZXIvc2hhcmVkL2xheWVycy9sYXllcic7XHJcbmltcG9ydCB7IFZlY3RvckxheWVyIH0gZnJvbSAnLi4vLi4vbGF5ZXIvc2hhcmVkL2xheWVycy92ZWN0b3ItbGF5ZXInO1xyXG5pbXBvcnQgeyBJbnB1dFByb2plY3Rpb25zLCBQcm9qZWN0aW9uc0xpbWl0YXRpb25zT3B0aW9ucyB9IGZyb20gJy4uLy4uL21hcC8nO1xyXG5pbXBvcnQgeyBjb21wdXRlUHJvamVjdGlvbnNDb25zdHJhaW50cyB9IGZyb20gJy4uLy4uL21hcC9zaGFyZWQnO1xyXG5pbXBvcnQgeyBJZ29NYXAgfSBmcm9tICcuLi8uLi9tYXAvc2hhcmVkL21hcCc7XHJcbmltcG9ydCB7IFN0eWxlTGlzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZS1saXN0L3N0eWxlLWxpc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IFN0eWxlU2VydmljZSB9IGZyb20gJy4uLy4uL3N0eWxlL3N0eWxlLXNlcnZpY2Uvc3R5bGUuc2VydmljZSc7XHJcbmltcG9ydCB7IEVkaXRpb25Xb3Jrc3BhY2UgfSBmcm9tICcuLi8uLi93b3Jrc3BhY2Uvc2hhcmVkL2VkaXRpb24td29ya3NwYWNlJztcclxuaW1wb3J0IHsgRmVhdHVyZVdvcmtzcGFjZSB9IGZyb20gJy4uLy4uL3dvcmtzcGFjZS9zaGFyZWQvZmVhdHVyZS13b3Jrc3BhY2UnO1xyXG5pbXBvcnQgeyBXZnNXb3Jrc3BhY2UgfSBmcm9tICcuLi8uLi93b3Jrc3BhY2Uvc2hhcmVkL3dmcy13b3Jrc3BhY2UnO1xyXG5pbXBvcnQgeyBFeHBvcnRPcHRpb25zIH0gZnJvbSAnLi4vc2hhcmVkL2V4cG9ydC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBFeHBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL2V4cG9ydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW5jb2RpbmdGb3JtYXQsIEV4cG9ydEZvcm1hdCB9IGZyb20gJy4uL3NoYXJlZC9leHBvcnQudHlwZSc7XHJcbmltcG9ydCB7XHJcbiAgaGFuZGxlRmlsZUV4cG9ydEVycm9yLFxyXG4gIGhhbmRsZUZpbGVFeHBvcnRTdWNjZXNzXHJcbn0gZnJvbSAnLi4vc2hhcmVkL2V4cG9ydC51dGlscyc7XHJcbmltcG9ydCB7IEltcG9ydEV4cG9ydFNlcnZpY2VPcHRpb25zIH0gZnJvbSAnLi4vc2hhcmVkL2ltcG9ydC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBJbXBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL2ltcG9ydC5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBoYW5kbGVGaWxlSW1wb3J0RXJyb3IsXHJcbiAgaGFuZGxlRmlsZUltcG9ydFN1Y2Nlc3NcclxufSBmcm9tICcuLi9zaGFyZWQvaW1wb3J0LnV0aWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWdvLWltcG9ydC1leHBvcnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9pbXBvcnQtZXhwb3J0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9pbXBvcnQtZXhwb3J0LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBNYXRCdXR0b25Ub2dnbGVNb2R1bGUsXHJcbiAgICBOZ0lmLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxyXG4gICAgTmdGb3IsXHJcbiAgICBNYXRPcHRpb25Nb2R1bGUsXHJcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgU3Bpbm5lckNvbXBvbmVudCxcclxuICAgIEN1c3RvbUh0bWxDb21wb25lbnQsXHJcbiAgICBOZ0NsYXNzLFxyXG4gICAgTWF0U2xpZGVUb2dnbGVNb2R1bGUsXHJcbiAgICBNYXRJbnB1dE1vZHVsZSxcclxuICAgIEFzeW5jUGlwZSxcclxuICAgIEtleVZhbHVlUGlwZSxcclxuICAgIFRyYW5zbGF0ZU1vZHVsZVxyXG4gIF0sXHJcbiAgcHJvdmlkZXJzOiBbQ29uZmlybURpYWxvZ1NlcnZpY2VdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbXBvcnRFeHBvcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCB7XHJcbiAgcHVibGljIGZvcm06IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAgcHVibGljIGltcG9ydEZvcm06IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAgcHVibGljIGZvcm1hdHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdCh1bmRlZmluZWQpO1xyXG4gIHB1YmxpYyBlbmNvZGluZ3MkID0gbmV3IEJlaGF2aW9yU3ViamVjdCh1bmRlZmluZWQpO1xyXG4gIHB1YmxpYyBleHBvcnRhYmxlTGF5ZXJzJDogQmVoYXZpb3JTdWJqZWN0PEFueUxheWVyW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChcclxuICAgIFtdXHJcbiAgKTtcclxuICBwdWJsaWMgbG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcclxuICBwdWJsaWMgZm9yY2VOYW1pbmcgPSBmYWxzZTtcclxuICBwdWJsaWMgY29udHJvbEZvcm1hdCA9ICdmb3JtYXQnO1xyXG5cclxuICBwcml2YXRlIGxheWVycyQkOiBTdWJzY3JpcHRpb247XHJcbiAgcHJpdmF0ZSBleHBvcnRhYmxlTGF5ZXJzJCQ6IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIGZvcm1hdHMkJDogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgZW5jb2RpbmdzJCQ6IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIGZvcm1MYXllciQkOiBTdWJzY3JpcHRpb247XHJcbiAgcHJpdmF0ZSBleHBvcnRPcHRpb25zJCQ6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgcHVibGljIGltcG9ydEh0bWxDbGFyaWZpY2F0aW9uczogc3RyaW5nO1xyXG4gIHB1YmxpYyBleHBvcnRIdG1sQ2xhcmlmaWNhdGlvbnM6IHN0cmluZztcclxuXHJcbiAgcHJpdmF0ZSBlc3BnQ29kZVJlZ2V4ID0gbmV3IFJlZ0V4cCgnXlxcXFxkezQsNn0nKTtcclxuICBwcml2YXRlIGNsaWVudFNpZGVGaWxlU2l6ZU1heDogbnVtYmVyO1xyXG4gIHB1YmxpYyBmaWxlU2l6ZU1iOiBudW1iZXI7XHJcblxyXG4gIHB1YmxpYyBwcm9qZWN0aW9ucyQ6IEJlaGF2aW9yU3ViamVjdDxJbnB1dFByb2plY3Rpb25zW10+ID1cclxuICAgIG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xyXG4gIHByaXZhdGUgcHJvamVjdGlvbnNDb25zdHJhaW50czogUHJvamVjdGlvbnNMaW1pdGF0aW9uc09wdGlvbnM7XHJcblxyXG4gIHB1YmxpYyBwb3B1cENoZWNrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBwcmV2aW91c0xheWVyU3BlY3MkOiBCZWhhdmlvclN1YmplY3Q8XHJcbiAgICB7XHJcbiAgICAgIGlkOiBzdHJpbmc7XHJcbiAgICAgIHZpc2libGU6IGJvb2xlYW47XHJcbiAgICAgIG9wYWNpdHk6IG51bWJlcjtcclxuICAgICAgcXVlcnlhYmxlOiBib29sZWFuO1xyXG4gICAgfVtdXHJcbiAgPiA9IG5ldyBCZWhhdmlvclN1YmplY3QodW5kZWZpbmVkKTtcclxuXHJcbiAgQElucHV0KCkgc2VsZWN0Rmlyc3RQcm9qOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIG1hcDogSWdvTWFwO1xyXG5cclxuICBASW5wdXQoKSBjb250ZXh0VXJpOiBzdHJpbmc7XHJcblxyXG4gIHByaXZhdGUgX3Byb2plY3Rpb25zTGltaXRhdGlvbnM6IFByb2plY3Rpb25zTGltaXRhdGlvbnNPcHRpb25zID0ge307XHJcbiAgQElucHV0KClcclxuICBzZXQgcHJvamVjdGlvbnNMaW1pdGF0aW9ucyh2YWx1ZTogUHJvamVjdGlvbnNMaW1pdGF0aW9uc09wdGlvbnMpIHtcclxuICAgIHRoaXMuX3Byb2plY3Rpb25zTGltaXRhdGlvbnMgPSB2YWx1ZTtcclxuICAgIHRoaXMuY29tcHV0ZVByb2plY3Rpb25zKCk7XHJcbiAgfVxyXG4gIGdldCBwcm9qZWN0aW9uc0xpbWl0YXRpb25zKCk6IFByb2plY3Rpb25zTGltaXRhdGlvbnNPcHRpb25zIHtcclxuICAgIHJldHVybiB0aGlzLl9wcm9qZWN0aW9uc0xpbWl0YXRpb25zIHx8IHt9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcmUgdGhhdCBob2xkcyB0aGUgYXZhaWxhYmxlIHdvcmtzcGFjZXMuXHJcbiAgICovXHJcbiAgQElucHV0KCkgc3RvcmU6IFdvcmtzcGFjZVN0b3JlO1xyXG5cclxuICBASW5wdXQoKSBzZWxlY3RlZE1vZGUgPSAnaW1wb3J0JztcclxuXHJcbiAgQE91dHB1dCgpIHNlbGVjdE1vZGUgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcbiAgQElucHV0KCkgZXhwb3J0T3B0aW9ucyQ6IEJlaGF2aW9yU3ViamVjdDxFeHBvcnRPcHRpb25zPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoXHJcbiAgICB1bmRlZmluZWRcclxuICApO1xyXG5cclxuICBAT3V0cHV0KCkgZXhwb3J0T3B0aW9uc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RXhwb3J0T3B0aW9ucz4oKTtcclxuXHJcbiAgZ2V0IGxheWVycygpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KCdsYXllcnMnKS52YWx1ZTtcclxuICB9XHJcbiAgc2V0IGxheWVycyh2YWx1ZSkge1xyXG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBsYXllcnM6IHZhbHVlIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlucHV0UHJvaigpIHtcclxuICAgIHJldHVybiB0aGlzLmltcG9ydEZvcm0uZ2V0KCdpbnB1dFByb2onKS52YWx1ZTtcclxuICB9XHJcbiAgc2V0IGlucHV0UHJvaih2YWx1ZSkge1xyXG4gICAgdGhpcy5pbXBvcnRGb3JtLnBhdGNoVmFsdWUoeyBpbnB1dFByb2o6IHZhbHVlIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHBvcHVwQWxsb3dlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICh0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldCgnaW1wb3J0RXhwb3J0UG9wdXBBbGxvd2VkJykgYXMgYm9vbGVhbikgfHwgZmFsc2VcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzZXQgcG9wdXBBbGxvd2VkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldCgnaW1wb3J0RXhwb3J0UG9wdXBBbGxvd2VkJywgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGltcG9ydFNlcnZpY2U6IEltcG9ydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGV4cG9ydFNlcnZpY2U6IEV4cG9ydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHN0eWxlTGlzdFNlcnZpY2U6IFN0eWxlTGlzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHN0eWxlU2VydmljZTogU3R5bGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBjb25maWc6IENvbmZpZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkb3dubG9hZFNlcnZpY2U6IERvd25sb2FkU2VydmljZSxcclxuICAgIHByaXZhdGUgbGF5ZXJTZXJ2aWNlOiBMYXllclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbmZpcm1EaWFsb2dTZXJ2aWNlOiBDb25maXJtRGlhbG9nU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5sb2FkQ29uZmlnKCk7XHJcbiAgICB0aGlzLmJ1aWxkRm9ybSgpO1xyXG4gICAgdGhpcy5jb21wdXRlUHJvamVjdGlvbnMoKTtcclxuICAgIHRoaXMuaW1wb3J0SHRtbENsYXJpZmljYXRpb25zID0gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXHJcbiAgICAgICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uaW1wb3J0SHRtbENsYXJpZmljYXRpb25zJ1xyXG4gICAgKTtcclxuICAgIHRoaXMuZXhwb3J0SHRtbENsYXJpZmljYXRpb25zID0gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXHJcbiAgICAgICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZXhwb3J0SHRtbENsYXJpZmljYXRpb25zJ1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5sYXllcnMkJCA9IHRoaXMubWFwLmxheWVycyQuc3Vic2NyaWJlKChsYXllcnMpID0+IHtcclxuICAgICAgdGhpcy5leHBvcnRhYmxlTGF5ZXJzJC5uZXh0KFxyXG4gICAgICAgIGxheWVycy5maWx0ZXIoKGxheWVyOiBMYXllcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgKGxheWVyIGluc3RhbmNlb2YgVmVjdG9yTGF5ZXIgJiYgbGF5ZXIuZXhwb3J0YWJsZSA9PT0gdHJ1ZSkgfHxcclxuICAgICAgICAgICAgKGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5kb3dubG9hZCAmJlxyXG4gICAgICAgICAgICAgIGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5kb3dubG9hZC51cmwpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pIGFzIEFueUxheWVyW11cclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gICAgY29uc3QgY29uZmlnRmlsZVNpemVNYiA9IHRoaXMuY29uZmlnLmdldENvbmZpZyhcclxuICAgICAgJ2ltcG9ydEV4cG9ydC5jbGllbnRTaWRlRmlsZVNpemVNYXhNYidcclxuICAgICk7XHJcbiAgICB0aGlzLmNsaWVudFNpZGVGaWxlU2l6ZU1heCA9XHJcbiAgICAgIChjb25maWdGaWxlU2l6ZU1iID8gY29uZmlnRmlsZVNpemVNYiA6IDMwKSAqIE1hdGgucG93KDEwMjQsIDIpO1xyXG4gICAgdGhpcy5maWxlU2l6ZU1iID0gdGhpcy5jbGllbnRTaWRlRmlsZVNpemVNYXggLyBNYXRoLnBvdygxMDI0LCAyKTtcclxuXHJcbiAgICB0aGlzLmV4cG9ydE9wdGlvbnMkJCA9IHRoaXMuZXhwb3J0T3B0aW9ucyRcclxuICAgICAgLnBpcGUoc2tpcFdoaWxlKChleHBvcnRPcHRpb25zKSA9PiAhZXhwb3J0T3B0aW9ucykpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGV4cG9ydE9wdGlvbnMpID0+IHtcclxuICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZShleHBvcnRPcHRpb25zLCB7IGVtaXRFdmVudDogdHJ1ZSB9KTtcclxuICAgICAgICBpZiAoZXhwb3J0T3B0aW9ucy5sYXllcnMpIHtcclxuICAgICAgICAgIHRoaXMuY29tcHV0ZUZvcm1hdHMoXHJcbiAgICAgICAgICAgIGV4cG9ydE9wdGlvbnMubGF5ZXJzLm1hcCgobCkgPT4gdGhpcy5tYXAuZ2V0TGF5ZXJCeUlkKGwpKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5mb3JtTGF5ZXIkJCA9IHRoaXMuZm9ybVxyXG4gICAgICAuZ2V0KCdmb3JtYXQnKVxyXG4gICAgICAudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoZm9ybWF0KSA9PiB7XHJcbiAgICAgICAgY29uc3Qgb2dyZUZvcm1hdHMgPSBPYmplY3Qua2V5cyhFeHBvcnRTZXJ2aWNlLm9ncmVGb3JtYXRzKTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAhdGhpcy5wb3B1cENoZWNrZWQgJiZcclxuICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2xheWVycycpLnZhbHVlPy5sZW5ndGggPiAxICYmXHJcbiAgICAgICAgICAob2dyZUZvcm1hdHMuaW5kZXhPZihmb3JtYXQpID49IDAgfHwgZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuVVJMKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgaWYgKCF0aGlzLmhhbmRsZVBvcHVwKHRydWUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgZm9ybWF0OiB1bmRlZmluZWQgfSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5mb3JtTGF5ZXIkJCA9IHRoaXMuZm9ybVxyXG4gICAgICAuZ2V0KCdsYXllcnMnKVxyXG4gICAgICAudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgobGF5ZXJzSWQpID0+IHtcclxuICAgICAgICB0aGlzLmhhbmRsZVByZXZpb3VzTGF5ZXJTcGVjcygpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkTGF5ZXJzID1cclxuICAgICAgICAgIGxheWVyc0lkIGluc3RhbmNlb2YgQXJyYXkgPyBsYXllcnNJZCA6IFtsYXllcnNJZF07XHJcbiAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBsYXllcnM6IHNlbGVjdGVkTGF5ZXJzIH0sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICBjb25zdCBsYXllcnMgPSBzZWxlY3RlZExheWVycy5tYXAoKGwpID0+IHRoaXMubWFwLmdldExheWVyQnlJZChsKSk7XHJcbiAgICAgICAgdGhpcy5jb21wdXRlRm9ybWF0cyhsYXllcnMpO1xyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmZvcm1hdHMkLnZhbHVlKS5pbmRleE9mKHRoaXMuZm9ybS52YWx1ZS5mb3JtYXQpID09PVxyXG4gICAgICAgICAgLTFcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgZm9ybWF0OiB1bmRlZmluZWQgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgY29uc3QgcHJldmlvdXNTcGVjczoge1xyXG4gICAgICAgICAgaWQ6IHN0cmluZztcclxuICAgICAgICAgIHZpc2libGU6IGJvb2xlYW47XHJcbiAgICAgICAgICBvcGFjaXR5OiBudW1iZXI7XHJcbiAgICAgICAgICBxdWVyeWFibGU6IGJvb2xlYW47XHJcbiAgICAgICAgfVtdID0gW107XHJcbiAgICAgICAgbGF5ZXJzLmZvckVhY2goKGxheWVyKSA9PiB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGxheWVyIGluc3RhbmNlb2YgVmVjdG9yTGF5ZXIgJiZcclxuICAgICAgICAgICAgbGF5ZXIuZGF0YVNvdXJjZS5vbC5nZXRGZWF0dXJlcygpLmxlbmd0aCA9PT0gMFxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHByZXZpb3VzU3BlY3MucHVzaCh7XHJcbiAgICAgICAgICAgICAgaWQ6IGxheWVyLmlkLFxyXG4gICAgICAgICAgICAgIHZpc2libGU6IGxheWVyLnZpc2libGUsXHJcbiAgICAgICAgICAgICAgb3BhY2l0eTogbGF5ZXIub3BhY2l0eSxcclxuICAgICAgICAgICAgICBxdWVyeWFibGU6IChsYXllciBhcyBhbnkpLnF1ZXJ5YWJsZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbGF5ZXIub3BhY2l0eSA9IDA7XHJcbiAgICAgICAgICAgIGxheWVyLnZpc2libGUgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnByZXZpb3VzTGF5ZXJTcGVjcyQubmV4dChwcmV2aW91c1NwZWNzKTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgfSwgNTAwKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5mb3JtYXRzJCQgPSB0aGlzLmZvcm1hdHMkXHJcbiAgICAgIC5waXBlKHNraXBXaGlsZSgoZm9ybWF0cykgPT4gIWZvcm1hdHMpKVxyXG4gICAgICAuc3Vic2NyaWJlKChmb3JtYXRzKSA9PiB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKGZvcm1hdHMpLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBmb3JtYXQ6IGZvcm1hdHNbT2JqZWN0LmtleXMoZm9ybWF0cylbMF1dIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5lbmNvZGluZ3MkJCA9IHRoaXMuZW5jb2RpbmdzJFxyXG4gICAgICAucGlwZShza2lwV2hpbGUoKGVuY29kaW5ncykgPT4gIWVuY29kaW5ncykpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGVuY29kaW5ncykgPT4ge1xyXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhlbmNvZGluZ3MpLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgICAgICBlbmNvZGluZzogZW5jb2RpbmdzW09iamVjdC5rZXlzKGVuY29kaW5ncylbMF1dXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZXhwb3J0YWJsZUxheWVycyQkID0gdGhpcy5leHBvcnRhYmxlTGF5ZXJzJFxyXG4gICAgICAucGlwZShza2lwV2hpbGUoKGxheWVycykgPT4gIWxheWVycykpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGxheWVycykgPT4ge1xyXG4gICAgICAgIGlmIChsYXllcnMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGxheWVyczogbGF5ZXJzWzBdLmlkIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMuY29udHJvbEZvcm1hdF0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoZm9ybWF0KSA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBmb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5DU1Zjb21tYSB8fFxyXG4gICAgICAgIGZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkNTVnNlbWljb2xvblxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGVuY29kaW5nOiBFbmNvZGluZ0Zvcm1hdC5MQVRJTjEgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBlbmNvZGluZzogRW5jb2RpbmdGb3JtYXQuVVRGOCB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLnNlbGVjdEZpcnN0UHJvaikge1xyXG4gICAgICBpZiAodGhpcy5wcm9qZWN0aW9ucyQudmFsdWUubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgdGhpcy5pbXBvcnRGb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgICAgaW5wdXRQcm9qOiB7XHJcbiAgICAgICAgICAgIHRyYW5zbGF0ZUtleTogJ25hZDgzJyxcclxuICAgICAgICAgICAgYWxpYXM6ICdOQUQ4MycsXHJcbiAgICAgICAgICAgIGNvZGU6ICdFUFNHOjQzMjYnLFxyXG4gICAgICAgICAgICB6b25lOiAnJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaW1wb3J0Rm9ybS5wYXRjaFZhbHVlKHsgaW5wdXRQcm9qOiB0aGlzLnByb2plY3Rpb25zJC52YWx1ZVswXSB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pbXBvcnRGb3JtLnBhdGNoVmFsdWUoeyBpbnB1dFByb2o6IHVuZGVmaW5lZCB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29tcHV0ZVByb2plY3Rpb25zKCkge1xyXG4gICAgdGhpcy5wcm9qZWN0aW9uc0NvbnN0cmFpbnRzID0gY29tcHV0ZVByb2plY3Rpb25zQ29uc3RyYWludHMoXHJcbiAgICAgIHRoaXMucHJvamVjdGlvbnNMaW1pdGF0aW9uc1xyXG4gICAgKTtcclxuICAgIGNvbnN0IHByb2plY3Rpb25zOiBJbnB1dFByb2plY3Rpb25zW10gPSBbXTtcclxuXHJcbiAgICBpZiAodGhpcy5wcm9qZWN0aW9uc0NvbnN0cmFpbnRzLm5hZDgzKSB7XHJcbiAgICAgIHByb2plY3Rpb25zLnB1c2goe1xyXG4gICAgICAgIHRyYW5zbGF0ZUtleTogJ25hZDgzJyxcclxuICAgICAgICBhbGlhczogJ05BRDgzJyxcclxuICAgICAgICBjb2RlOiAnRVBTRzo0MjY5JyxcclxuICAgICAgICB6b25lOiAnJyxcclxuICAgICAgICBleHRlbnQ6IHVuZGVmaW5lZCxcclxuICAgICAgICBkZWY6IHVuZGVmaW5lZFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMud2dzODQpIHtcclxuICAgICAgcHJvamVjdGlvbnMucHVzaCh7XHJcbiAgICAgICAgdHJhbnNsYXRlS2V5OiAnd2dzODQnLFxyXG4gICAgICAgIGFsaWFzOiAnV0dTODQnLFxyXG4gICAgICAgIGNvZGU6ICdFUFNHOjQzMjYnLFxyXG4gICAgICAgIHpvbmU6ICcnLFxyXG4gICAgICAgIGV4dGVudDogdW5kZWZpbmVkLFxyXG4gICAgICAgIGRlZjogdW5kZWZpbmVkXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy53ZWJNZXJjYXRvcikge1xyXG4gICAgICBwcm9qZWN0aW9ucy5wdXNoKHtcclxuICAgICAgICB0cmFuc2xhdGVLZXk6ICd3ZWJNZXJjYXRvcicsXHJcbiAgICAgICAgYWxpYXM6ICdXZWIgTWVyY2F0b3InLFxyXG4gICAgICAgIGNvZGU6ICdFUFNHOjM4NTcnLFxyXG4gICAgICAgIHpvbmU6ICcnLFxyXG4gICAgICAgIGV4dGVudDogdW5kZWZpbmVkLFxyXG4gICAgICAgIGRlZjogdW5kZWZpbmVkXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMubXRtKSB7XHJcbiAgICAgIC8vIGFsbCBtdG0gem9uZXNcclxuICAgICAgY29uc3QgbWluWm9uZSA9IHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy5tdG1ab25lLm1pblpvbmU7XHJcbiAgICAgIGNvbnN0IG1heFpvbmUgPSB0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMubXRtWm9uZS5tYXhab25lO1xyXG5cclxuICAgICAgZm9yIChsZXQgbXRtWm9uZSA9IG1pblpvbmU7IG10bVpvbmUgPD0gbWF4Wm9uZTsgbXRtWm9uZSsrKSB7XHJcbiAgICAgICAgY29uc3QgY29kZSA9XHJcbiAgICAgICAgICBtdG1ab25lIDwgMTAgPyBgRVBTRzozMjE4JHttdG1ab25lfWAgOiBgRVBTRzozMjEkezgwICsgbXRtWm9uZX1gO1xyXG4gICAgICAgIHByb2plY3Rpb25zLnB1c2goe1xyXG4gICAgICAgICAgdHJhbnNsYXRlS2V5OiAnbXRtJyxcclxuICAgICAgICAgIGFsaWFzOiBgTVRNICR7bXRtWm9uZX1gLFxyXG4gICAgICAgICAgY29kZSxcclxuICAgICAgICAgIHpvbmU6IGAke210bVpvbmV9YCxcclxuICAgICAgICAgIGV4dGVudDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgZGVmOiB1bmRlZmluZWRcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMudXRtKSB7XHJcbiAgICAgIC8vIGFsbCB1dG0gem9uZXNcclxuICAgICAgY29uc3QgbWluWm9uZSA9IHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy51dG1ab25lLm1pblpvbmU7XHJcbiAgICAgIGNvbnN0IG1heFpvbmUgPSB0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMudXRtWm9uZS5tYXhab25lO1xyXG5cclxuICAgICAgZm9yIChsZXQgdXRtWm9uZSA9IG1pblpvbmU7IHV0bVpvbmUgPD0gbWF4Wm9uZTsgdXRtWm9uZSsrKSB7XHJcbiAgICAgICAgY29uc3QgY29kZSA9XHJcbiAgICAgICAgICB1dG1ab25lIDwgMTAgPyBgRVBTRzozMjYwJHt1dG1ab25lfWAgOiBgRVBTRzozMjYke3V0bVpvbmV9YDtcclxuICAgICAgICBwcm9qZWN0aW9ucy5wdXNoKHtcclxuICAgICAgICAgIHRyYW5zbGF0ZUtleTogJ3V0bScsXHJcbiAgICAgICAgICBhbGlhczogYFVUTSAke3V0bVpvbmV9YCxcclxuICAgICAgICAgIGNvZGUsXHJcbiAgICAgICAgICB6b25lOiBgJHt1dG1ab25lfWAsXHJcbiAgICAgICAgICBleHRlbnQ6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIGRlZjogdW5kZWZpbmVkXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgY29uZmlnUHJvamVjdGlvbjogSW5wdXRQcm9qZWN0aW9uc1tdID0gW107XHJcbiAgICBpZiAodGhpcy5wcm9qZWN0aW9uc0NvbnN0cmFpbnRzLnByb2pGcm9tQ29uZmlnKSB7XHJcbiAgICAgIGNvbmZpZ1Byb2plY3Rpb24gPSAodGhpcy5jb25maWcuZ2V0Q29uZmlnKCdwcm9qZWN0aW9ucycpIHx8XHJcbiAgICAgICAgW10pIGFzIElucHV0UHJvamVjdGlvbnNbXTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnByb2plY3Rpb25zJC5uZXh0KGNvbmZpZ1Byb2plY3Rpb24uY29uY2F0KHByb2plY3Rpb25zKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFdvcmtzcGFjZUJ5TGF5ZXJJZChpZDogc3RyaW5nKTogV29ya3NwYWNlIHtcclxuICAgIGNvbnN0IHdrc0Zyb21MYXllcklkID0gdGhpcy5zdG9yZVxyXG4gICAgICAuYWxsKClcclxuICAgICAgLmZpbmQoXHJcbiAgICAgICAgKHdvcmtzcGFjZSkgPT5cclxuICAgICAgICAgICh3b3Jrc3BhY2UgYXMgV2ZzV29ya3NwYWNlIHwgRmVhdHVyZVdvcmtzcGFjZSB8IEVkaXRpb25Xb3Jrc3BhY2UpXHJcbiAgICAgICAgICAgIC5sYXllci5pZCA9PT0gaWRcclxuICAgICAgKTtcclxuICAgIGlmICh3a3NGcm9tTGF5ZXJJZCkge1xyXG4gICAgICByZXR1cm4gd2tzRnJvbUxheWVySWQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0TGF5ZXJUaXRsZUJ5SWQoaWQpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMubWFwLmdldExheWVyQnlJZChpZCk/LnRpdGxlO1xyXG4gIH1cclxuXHJcbiAgbGF5ZXJIYXNTZWxlY3RlZEZlYXR1cmVzKGxheWVyOiBMYXllcik6IGJvb2xlYW4ge1xyXG4gICAgY29uc3Qgd2tzRnJvbUxheWVyID0gdGhpcy5nZXRXb3Jrc3BhY2VCeUxheWVySWQobGF5ZXIuaWQpO1xyXG4gICAgaWYgKHdrc0Zyb21MYXllcikge1xyXG4gICAgICBjb25zdCByZWNzID0gd2tzRnJvbUxheWVyLmVudGl0eVN0b3JlLnN0YXRlVmlldy5maXJzdEJ5KFxyXG4gICAgICAgIChyZWNvcmQ6IEVudGl0eVJlY29yZDxGZWF0dXJlPikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlY29yZC5zdGF0ZS5zZWxlY3RlZCA9PT0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiByZWNzID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9ubHlTZWxlY3RlZChldmVudDogTWF0U2xpZGVUb2dnbGVDaGFuZ2UsIGlkOiBzdHJpbmcpIHtcclxuICAgIGxldCBsYXllcnNXaXRoU2VsZWN0aW9uID0gdGhpcy5mb3JtLnZhbHVlLmxheWVyc1dpdGhTZWxlY3Rpb247XHJcbiAgICBpZiAoZXZlbnQuY2hlY2tlZCkge1xyXG4gICAgICBsYXllcnNXaXRoU2VsZWN0aW9uLnB1c2goaWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGF5ZXJzV2l0aFNlbGVjdGlvbiA9IGxheWVyc1dpdGhTZWxlY3Rpb24uZmlsdGVyKFxyXG4gICAgICAgIChsYXllcklkKSA9PiBsYXllcklkICE9PSBpZFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBsYXllcnNXaXRoU2VsZWN0aW9uIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9ubHlTZWxlY3RlZENsaWNrKGV2ZW50LCBpZDogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5mb3JtLnZhbHVlLmxheWVycy5maW5kKChsYXllcklkKSA9PiBsYXllcklkID09PSBpZCkpIHtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaW5MYXllcnNJZFRvRXhwb3J0U2VsZWN0aW9uT25seShsYXllcjogTGF5ZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm0udmFsdWUubGF5ZXJzV2l0aFNlbGVjdGlvbi5maW5kKFxyXG4gICAgICAobGF5ZXJJZCkgPT4gbGF5ZXJJZCA9PT0gbGF5ZXIuaWRcclxuICAgIClcclxuICAgICAgPyB0cnVlXHJcbiAgICAgIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMubGF5ZXJzJCQudW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuZXhwb3J0YWJsZUxheWVycyQkLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLmZvcm1hdHMkJC51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5lbmNvZGluZ3MkJC51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5mb3JtTGF5ZXIkJC51bnN1YnNjcmliZSgpO1xyXG4gICAgaWYgKHRoaXMuZXhwb3J0T3B0aW9ucyQkKSB7XHJcbiAgICAgIHRoaXMuZXhwb3J0T3B0aW9ucyQkLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmV4cG9ydE9wdGlvbnNDaGFuZ2UuZW1pdCh0aGlzLmZvcm0udmFsdWUpO1xyXG4gICAgdGhpcy5oYW5kbGVQcmV2aW91c0xheWVyU3BlY3MoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlUHJldmlvdXNMYXllclNwZWNzKCkge1xyXG4gICAgY29uc3QgcHJldmlvdXNTcGVjcyA9IHRoaXMucHJldmlvdXNMYXllclNwZWNzJC52YWx1ZTtcclxuICAgIGlmIChwcmV2aW91c1NwZWNzICYmIHByZXZpb3VzU3BlY3MubGVuZ3RoKSB7XHJcbiAgICAgIHByZXZpb3VzU3BlY3MuZm9yRWFjaCgoc3BlY3MpID0+IHtcclxuICAgICAgICBjb25zdCBwcmV2aW91c0xheWVyID0gdGhpcy5tYXAuZ2V0TGF5ZXJCeUlkKHNwZWNzLmlkKTtcclxuICAgICAgICBwcmV2aW91c0xheWVyLnZpc2libGUgPSBzcGVjcy52aXNpYmxlO1xyXG4gICAgICAgIHByZXZpb3VzTGF5ZXIub3BhY2l0eSA9IHNwZWNzLm9wYWNpdHk7XHJcbiAgICAgICAgKHByZXZpb3VzTGF5ZXIgYXMgYW55KS5xdWVyeWFibGUgPSBzcGVjcy5xdWVyeWFibGU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wcmV2aW91c0xheWVyU3BlY3MkLm5leHQodW5kZWZpbmVkKTtcclxuICB9XHJcblxyXG4gIGltcG9ydEZpbGVzKGZpbGVzOiBGaWxlW10pIHtcclxuICAgIGxldCBpbnB1dFByb2ogPSB0aGlzLmlucHV0UHJvai5jb2RlO1xyXG4gICAgaWYgKHRoaXMuZXNwZ0NvZGVSZWdleC50ZXN0KGlucHV0UHJvaikpIHtcclxuICAgICAgaW5wdXRQcm9qID0gYEVQU0c6JHtpbnB1dFByb2p9YDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvYWRpbmckLm5leHQodHJ1ZSk7XHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuICAgICAgdGhpcy5pbXBvcnRTZXJ2aWNlLmltcG9ydChmaWxlLCBpbnB1dFByb2opLnN1YnNjcmliZShcclxuICAgICAgICAoZmVhdHVyZXM6IEZlYXR1cmVbXSkgPT4gdGhpcy5vbkZpbGVJbXBvcnRTdWNjZXNzKGZpbGUsIGZlYXR1cmVzKSxcclxuICAgICAgICAoZXJyb3I6IEVycm9yKSA9PiB0aGlzLm9uRmlsZUltcG9ydEVycm9yKGZpbGUsIGVycm9yKSxcclxuICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZVBvcHVwKHByZUNoZWNrOiBib29sZWFuID0gdHJ1ZSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgcDEgPSB3aW5kb3cub3BlbignJywgJ3BvcHVwJywgJ3dpZHRoPTEsIGhlaWdodD0xJyk7XHJcbiAgICBwMS5jbG9zZSgpO1xyXG4gICAgY29uc3QgcDIgPSB3aW5kb3cub3BlbignJywgJ3BvcHVwJywgJ3dpZHRoPTEsIGhlaWdodD0xJyk7XHJcbiAgICBpZiAoIXAyIHx8IHAyLmNsb3NlZCB8fCB0eXBlb2YgcDIuY2xvc2VkID09PSAndW5kZWZpbmVkJyB8fCBwMiA9PT0gbnVsbCkge1xyXG4gICAgICB0aGlzLm9uUG9wdXBCbG9ja2VkRXJyb3IocHJlQ2hlY2spO1xyXG4gICAgICB0aGlzLnBvcHVwQWxsb3dlZCA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcDIuY2xvc2UoKTtcclxuICAgICAgdGhpcy5wb3B1cEFsbG93ZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLnBvcHVwQ2hlY2tlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5wb3B1cEFsbG93ZWQ7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFeHBvcnRGb3JtU3VibWl0KGRhdGE6IEV4cG9ydE9wdGlvbnMpIHtcclxuICAgIHRoaXMubG9hZGluZyQubmV4dCh0cnVlKTtcclxuXHJcbiAgICBjb25zdCBvZ3JlRm9ybWF0cyA9IE9iamVjdC5rZXlzKEV4cG9ydFNlcnZpY2Uub2dyZUZvcm1hdHMpO1xyXG4gICAgaWYgKFxyXG4gICAgICAhdGhpcy5wb3B1cENoZWNrZWQgJiZcclxuICAgICAgZGF0YS5sYXllcnMubGVuZ3RoID4gMSAmJlxyXG4gICAgICAob2dyZUZvcm1hdHMuaW5kZXhPZihkYXRhLmZvcm1hdCkgPj0gMCB8fFxyXG4gICAgICAgIGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuVVJMKSAmJlxyXG4gICAgICAhdGhpcy5wb3B1cEFsbG93ZWRcclxuICAgICkge1xyXG4gICAgICB0aGlzLmhhbmRsZVBvcHVwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGdlb21UeXBlc0NTVjogeyBnZW9tZXRyeVR5cGU6IHN0cmluZzsgZmVhdHVyZXM6IGFueVtdIH1bXSA9IFtdO1xyXG4gICAgbGV0IGZlYXR1cmVzQ1NWOiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IGZpbGVuYW1lOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgICBmb3IgKGNvbnN0IFtsYXllckluZGV4LCBsYXllcl0gb2YgZGF0YS5sYXllcnMuZW50cmllcygpKSB7XHJcbiAgICAgIGNvbnN0IGxheSA9IHRoaXMubWFwLmdldExheWVyQnlJZChsYXllcik7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAhKFxyXG4gICAgICAgICAgZGF0YS5mb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5DU1ZzZW1pY29sb24gfHxcclxuICAgICAgICAgIGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuQ1NWY29tbWFcclxuICAgICAgICApIHx8XHJcbiAgICAgICAgIWRhdGEuY29tYmluZUxheWVycyB8fFxyXG4gICAgICAgIGRhdGEubGF5ZXJzLmxlbmd0aCA9PT0gMVxyXG4gICAgICApIHtcclxuICAgICAgICBmaWxlbmFtZSA9IGxheS50aXRsZTtcclxuICAgICAgICBpZiAoZGF0YS5uYW1lKSB7XHJcbiAgICAgICAgICBmaWxlbmFtZSA9IGRhdGEubmFtZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZmlsZW5hbWUgPSB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcclxuICAgICAgICAgICdpZ28uZ2VvLmV4cG9ydC5jb21iaW5lZExheWVycydcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGRTT3B0aW9uczogRGF0YVNvdXJjZU9wdGlvbnMgPSBsYXkuZGF0YVNvdXJjZS5vcHRpb25zO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgZGF0YS5mb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5VUkwgJiZcclxuICAgICAgICBkU09wdGlvbnMuZG93bmxvYWQgJiZcclxuICAgICAgICAoZFNPcHRpb25zLmRvd25sb2FkLnVybCB8fCBkU09wdGlvbnMuZG93bmxvYWQuZHluYW1pY1VybClcclxuICAgICAgKSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAvLyBiZXR0ZXIgbG9vayBhbiBmZWVsXHJcbiAgICAgICAgICBjb25zdCB1cmwgPSBkU09wdGlvbnMuZG93bmxvYWQudXJsIHx8IGRTT3B0aW9ucy5kb3dubG9hZC5keW5hbWljVXJsO1xyXG4gICAgICAgICAgdXJsLm1hdGNoKC9zZXJ2aWNlPXdmcy9naSlcclxuICAgICAgICAgICAgPyB0aGlzLmRvd25sb2FkU2VydmljZS5vcGVuKGxheSlcclxuICAgICAgICAgICAgOiB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnKTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgfSwgNTAwKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3Qgd2tzID0gdGhpcy5nZXRXb3Jrc3BhY2VCeUxheWVySWQobGF5ZXIpO1xyXG4gICAgICBsZXQgb2xGZWF0dXJlcztcclxuICAgICAgaWYgKHdrcyAmJiB3a3MuZW50aXR5U3RvcmUgJiYgd2tzLmVudGl0eVN0b3JlLnN0YXRlVmlldy5hbGwoKS5sZW5ndGgpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBkYXRhLmxheWVyc1dpdGhTZWxlY3Rpb24uaW5kZXhPZihsYXllcikgIT09IC0xICYmXHJcbiAgICAgICAgICBkYXRhLmZlYXR1cmVJbk1hcEV4dGVudFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgLy8gT25seSBleHBvcnQgc2VsZWN0ZWQgZmVhdHVyZSAmJiBpbnRvIG1hcCBleHRlbnRcclxuICAgICAgICAgIG9sRmVhdHVyZXMgPSB3a3MuZW50aXR5U3RvcmUuc3RhdGVWaWV3XHJcbiAgICAgICAgICAgIC5hbGwoKVxyXG4gICAgICAgICAgICAuZmlsdGVyKFxyXG4gICAgICAgICAgICAgIChlOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT5cclxuICAgICAgICAgICAgICAgIGUuc3RhdGUuaW5NYXBFeHRlbnQgJiYgZS5zdGF0ZS5zZWxlY3RlZFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5tYXAoKGUpID0+IChlLmVudGl0eSBhcyBGZWF0dXJlKS5vbCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgIGRhdGEubGF5ZXJzV2l0aFNlbGVjdGlvbi5pbmRleE9mKGxheWVyKSAhPT0gLTEgJiZcclxuICAgICAgICAgICFkYXRhLmZlYXR1cmVJbk1hcEV4dGVudFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgLy8gT25seSBleHBvcnQgc2VsZWN0ZWQgZmVhdHVyZSAmJiAgKGludG8gbWFwIGV4dGVudCBPUiBub3QpXHJcbiAgICAgICAgICBvbEZlYXR1cmVzID0gd2tzLmVudGl0eVN0b3JlLnN0YXRlVmlld1xyXG4gICAgICAgICAgICAuYWxsKClcclxuICAgICAgICAgICAgLmZpbHRlcigoZTogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+IGUuc3RhdGUuc2VsZWN0ZWQpXHJcbiAgICAgICAgICAgIC5tYXAoKGUpID0+IChlLmVudGl0eSBhcyBGZWF0dXJlKS5vbCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLmZlYXR1cmVJbk1hcEV4dGVudCkge1xyXG4gICAgICAgICAgLy8gT25seSBpbnRvIG1hcCBleHRlbnRcclxuICAgICAgICAgIG9sRmVhdHVyZXMgPSB3a3MuZW50aXR5U3RvcmUuc3RhdGVWaWV3XHJcbiAgICAgICAgICAgIC5hbGwoKVxyXG4gICAgICAgICAgICAuZmlsdGVyKChlOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT4gZS5zdGF0ZS5pbk1hcEV4dGVudClcclxuICAgICAgICAgICAgLm1hcCgoZSkgPT4gKGUuZW50aXR5IGFzIEZlYXR1cmUpLm9sKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gQWxsIGZlYXR1cmVzXHJcbiAgICAgICAgICBvbEZlYXR1cmVzID0gd2tzLmVudGl0eVN0b3JlLnN0YXRlVmlld1xyXG4gICAgICAgICAgICAuYWxsKClcclxuICAgICAgICAgICAgLm1hcCgoZSkgPT4gKGUuZW50aXR5IGFzIEZlYXR1cmUpLm9sKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3Qgb2wgPSBsYXkuZGF0YVNvdXJjZS5vbCBhc1xyXG4gICAgICAgICAgfCBvbFZlY3RvclNvdXJjZTxPbEdlb21ldHJ5PlxyXG4gICAgICAgICAgfCBvbENsdXN0ZXJTb3VyY2U7XHJcbiAgICAgICAgaWYgKGRhdGEuZmVhdHVyZUluTWFwRXh0ZW50KSB7XHJcbiAgICAgICAgICBvbEZlYXR1cmVzID0gb2wuZ2V0RmVhdHVyZXNJbkV4dGVudChcclxuICAgICAgICAgICAgbGF5Lm1hcC52aWV3Q29udHJvbGxlci5nZXRFeHRlbnQoKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgb2xGZWF0dXJlcyA9IG9sLmdldEZlYXR1cmVzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChsYXkuZGF0YVNvdXJjZSBpbnN0YW5jZW9mIENsdXN0ZXJEYXRhU291cmNlKSB7XHJcbiAgICAgICAgICBvbEZlYXR1cmVzID0gb2xGZWF0dXJlcy5mbGF0TWFwKChjbHVzdGVyOiBhbnkpID0+XHJcbiAgICAgICAgICAgIGNsdXN0ZXIuZ2V0KCdmZWF0dXJlcycpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGdlb21UeXBlczogeyBnZW9tZXRyeVR5cGU6IHN0cmluZzsgZmVhdHVyZXM6IGFueVtdIH1bXSA9IFtdO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgZGF0YS5mb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5TaGFwZWZpbGUgfHxcclxuICAgICAgICBkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkdQWFxyXG4gICAgICApIHtcclxuICAgICAgICBvbEZlYXR1cmVzLmZvckVhY2goKG9sRmVhdHVyZSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZmVhdHVyZUdlb21UeXBlID0gb2xGZWF0dXJlLmdldEdlb21ldHJ5KCkuZ2V0VHlwZSgpO1xyXG4gICAgICAgICAgY29uc3QgY3VycmVudEdlb21UeXBlID0gZ2VvbVR5cGVzLmZpbmQoXHJcbiAgICAgICAgICAgIChnZW9tVHlwZSkgPT4gZ2VvbVR5cGUuZ2VvbWV0cnlUeXBlID09PSBmZWF0dXJlR2VvbVR5cGVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpZiAoY3VycmVudEdlb21UeXBlKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRHZW9tVHlwZS5mZWF0dXJlcy5wdXNoKG9sRmVhdHVyZSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBnZW9tVHlwZXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgZ2VvbWV0cnlUeXBlOiBmZWF0dXJlR2VvbVR5cGUsXHJcbiAgICAgICAgICAgICAgZmVhdHVyZXM6IFtvbEZlYXR1cmVdXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGdlb21UeXBlcyA9IFt7IGdlb21ldHJ5VHlwZTogJycsIGZlYXR1cmVzOiBvbEZlYXR1cmVzIH1dO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBnZW9tVHlwZXMuZm9yRWFjaCgoZ2VvbVR5cGUpID0+IHtcclxuICAgICAgICBnZW9tVHlwZS5mZWF0dXJlcy5mb3JFYWNoKChmZWF0dXJlKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCByYWRpdXM6IG51bWJlciA9IGZlYXR1cmUuZ2V0KCdyYWQnKTtcclxuICAgICAgICAgIGlmIChyYWRpdXMpIHtcclxuICAgICAgICAgICAgY29uc3QgY2VudGVyNDMyNjogQXJyYXk8bnVtYmVyPiA9IFtcclxuICAgICAgICAgICAgICBmZWF0dXJlLmdldCgnbG9uZ2l0dWRlJyksXHJcbiAgICAgICAgICAgICAgZmVhdHVyZS5nZXQoJ2xhdGl0dWRlJylcclxuICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgY29uc3QgY2lyY2xlID0gY2lyY3VsYXIoY2VudGVyNDMyNiwgcmFkaXVzLCA1MDApO1xyXG4gICAgICAgICAgICBjaXJjbGUudHJhbnNmb3JtKCdFUFNHOjQzMjYnLCBmZWF0dXJlLmdldCgnX3Byb2plY3Rpb24nKSk7XHJcbiAgICAgICAgICAgIGZlYXR1cmUuc2V0R2VvbWV0cnkoY2lyY2xlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAoZGF0YS5mb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5HUFgpIHtcclxuICAgICAgICBjb25zdCBncHhGZWF0dXJlQ250ID0gZ2VvbVR5cGVzLmxlbmd0aDtcclxuICAgICAgICBnZW9tVHlwZXMgPSBnZW9tVHlwZXMuZmlsdGVyKChnZW9tVHlwZSkgPT5cclxuICAgICAgICAgIFsnTGluZVN0cmluZycsICdQb2ludCddLmluY2x1ZGVzKGdlb21UeXBlLmdlb21ldHJ5VHlwZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGdweEZlYXR1cmVDbnRQb2ludE9yUG9seSA9IGdlb21UeXBlcy5sZW5ndGg7XHJcbiAgICAgICAgaWYgKGdweEZlYXR1cmVDbnQgPiBncHhGZWF0dXJlQ250UG9pbnRPclBvbHkpIHtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgICdpZ28uZ2VvLmV4cG9ydC5ncHguZXJyb3IucG9seS50ZXh0JyxcclxuICAgICAgICAgICAgJ2lnby5nZW8uZXhwb3J0LmdweC5lcnJvci5wb2x5LnRpdGxlJyxcclxuICAgICAgICAgICAgeyB0aW1lT3V0OiAyMDAwMCB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAoZGF0YS5mb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5DU1ZzZW1pY29sb24gfHxcclxuICAgICAgICAgIGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuQ1NWY29tbWEpICYmXHJcbiAgICAgICAgZGF0YS5jb21iaW5lTGF5ZXJzXHJcbiAgICAgICkge1xyXG4gICAgICAgIGdlb21UeXBlcy5mb3JFYWNoKChnZW9tVHlwZSkgPT4gZ2VvbVR5cGVzQ1NWLnB1c2goZ2VvbVR5cGUpKTtcclxuXHJcbiAgICAgICAgaWYgKGxheWVySW5kZXggIT09IGRhdGEubGF5ZXJzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgcHJldmlvdXNGZWF0dXJlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgZ2VvbVR5cGVzQ1NWLmZvckVhY2goKGdlb21UeXBlKSA9PiB7XHJcbiAgICAgICAgICAgIGdlb21UeXBlLmZlYXR1cmVzLmZvckVhY2goKGN1cnJlbnRGZWF0dXJlKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGRhdGEuc2VwYXJhdG9yKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNGZWF0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50RmVhdHVyZS5nZXQoJ19mZWF0dXJlU3RvcmUnKS5sYXllci5vcHRpb25zLnRpdGxlICE9PVxyXG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzRmVhdHVyZS5nZXQoJ19mZWF0dXJlU3RvcmUnKS5sYXllci5vcHRpb25zLnRpdGxlXHJcbiAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpdGxlRW1wdHlSb3dzID0gdGhpcy5jcmVhdGVUaXRsZUVtcHR5Um93cyhcclxuICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzRmVhdHVyZSxcclxuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGZWF0dXJlXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBmZWF0dXJlc0NTVi5wdXNoKHRpdGxlRW1wdHlSb3dzWzJdKTtcclxuICAgICAgICAgICAgICAgICAgICBmZWF0dXJlc0NTVi5wdXNoKHRpdGxlRW1wdHlSb3dzWzBdKTtcclxuICAgICAgICAgICAgICAgICAgICBmZWF0dXJlc0NTVi5wdXNoKHRpdGxlRW1wdHlSb3dzWzFdKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgdGl0bGVFbXB0eVJvd3MgPSB0aGlzLmNyZWF0ZVRpdGxlRW1wdHlSb3dzKFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGZWF0dXJlLFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGZWF0dXJlXHJcbiAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgIGZlYXR1cmVzQ1NWLnB1c2godGl0bGVFbXB0eVJvd3NbMF0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBmZWF0dXJlc0NTVi5wdXNoKGN1cnJlbnRGZWF0dXJlKTtcclxuICAgICAgICAgICAgICBwcmV2aW91c0ZlYXR1cmUgPSBjdXJyZW50RmVhdHVyZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChnZW9tVHlwZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgJ2lnby5nZW8uZXhwb3J0Lm5vdGhpbmcudGV4dCcsXHJcbiAgICAgICAgICAnaWdvLmdlby5leHBvcnQubm90aGluZy50aXRsZScsXHJcbiAgICAgICAgICB7IHRpbWVPdXQ6IDIwMDAwIH1cclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICEoXHJcbiAgICAgICAgICAgIGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuQ1NWc2VtaWNvbG9uIHx8XHJcbiAgICAgICAgICAgIGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuQ1NWY29tbWFcclxuICAgICAgICAgICkgfHxcclxuICAgICAgICAgICFkYXRhLmNvbWJpbmVMYXllcnNcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGdlb21UeXBlcy5tYXAoKGdlb21UeXBlKSA9PlxyXG4gICAgICAgICAgICB0aGlzLmV4cG9ydFNlcnZpY2VcclxuICAgICAgICAgICAgICAuZXhwb3J0KFxyXG4gICAgICAgICAgICAgICAgZ2VvbVR5cGUuZmVhdHVyZXMsXHJcbiAgICAgICAgICAgICAgICBkYXRhLmZvcm1hdCxcclxuICAgICAgICAgICAgICAgIGZpbGVuYW1lICsgZ2VvbVR5cGUuZ2VvbWV0cnlUeXBlLFxyXG4gICAgICAgICAgICAgICAgZGF0YS5lbmNvZGluZyxcclxuICAgICAgICAgICAgICAgIHRoaXMubWFwLnByb2plY3Rpb25cclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICgpID0+IHt9LFxyXG4gICAgICAgICAgICAgICAgKGVycm9yOiBFcnJvcikgPT4gdGhpcy5vbkZpbGVFeHBvcnRFcnJvcihlcnJvciksXHJcbiAgICAgICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMub25GaWxlRXhwb3J0U3VjY2VzcygpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgZ2VvbVR5cGUuZmVhdHVyZXMuZm9yRWFjaCgoZmVhdHVyZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2lyY2xlVG9Qb2ludChmZWF0dXJlKTtcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIChkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkNTVnNlbWljb2xvbiB8fFxyXG4gICAgICAgIGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuQ1NWY29tbWEpICYmXHJcbiAgICAgIGRhdGEuY29tYmluZUxheWVyc1xyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZXhwb3J0U2VydmljZVxyXG4gICAgICAgIC5leHBvcnQoXHJcbiAgICAgICAgICBmZWF0dXJlc0NTVixcclxuICAgICAgICAgIGRhdGEuZm9ybWF0LFxyXG4gICAgICAgICAgZmlsZW5hbWUsXHJcbiAgICAgICAgICBkYXRhLmVuY29kaW5nLFxyXG4gICAgICAgICAgdGhpcy5tYXAucHJvamVjdGlvblxyXG4gICAgICAgIClcclxuICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgKCkgPT4ge30sXHJcbiAgICAgICAgICAoZXJyb3I6IEVycm9yKSA9PiB0aGlzLm9uRmlsZUV4cG9ydEVycm9yKGVycm9yKSxcclxuICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5vbkZpbGVFeHBvcnRTdWNjZXNzKCk7XHJcblxyXG4gICAgICAgICAgICBmZWF0dXJlc0NTVi5mb3JFYWNoKChmZWF0dXJlKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jaXJjbGVUb1BvaW50KGZlYXR1cmUpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlVGl0bGVFbXB0eVJvd3MocHJldmlvdXNGZWF0dXJlLCBjdXJyZW50RmVhdHVyZSkge1xyXG4gICAgY29uc3QgdGl0bGVSb3cgPSBjdXJyZW50RmVhdHVyZS5jbG9uZSgpO1xyXG4gICAgY29uc3QgaGVhZGVyUm93ID0gY3VycmVudEZlYXR1cmUuY2xvbmUoKTtcclxuICAgIGNvbnN0IGVtcHR5Um93ID0gY3VycmVudEZlYXR1cmUuY2xvbmUoKTtcclxuICAgIGNvbnN0IHByZXZpb3VzRmVhdHVyZUtleXM6IEFycmF5PHN0cmluZz4gPSBwcmV2aW91c0ZlYXR1cmUuZ2V0S2V5cygpO1xyXG4gICAgbGV0IGZpcnN0S2V5UHJldmlvdXM6IHN0cmluZyA9ICcnO1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gcHJldmlvdXNGZWF0dXJlS2V5cykge1xyXG4gICAgICBpZiAocHJldmlvdXNGZWF0dXJlS2V5c1trZXldICE9PSAnZ2VvbWV0cnknKSB7XHJcbiAgICAgICAgZmlyc3RLZXlQcmV2aW91cyA9IHByZXZpb3VzRmVhdHVyZUtleXNba2V5XTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGN1cnJlbnRGZWF0dXJlS2V5czogQXJyYXk8c3RyaW5nPiA9IGN1cnJlbnRGZWF0dXJlLmdldEtleXMoKTtcclxuICAgIGxldCBmaXJzdEtleUN1cnJlbnQ6IHN0cmluZyA9ICcnO1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gY3VycmVudEZlYXR1cmVLZXlzKSB7XHJcbiAgICAgIGlmIChjdXJyZW50RmVhdHVyZUtleXNba2V5XSAhPT0gJ2dlb21ldHJ5Jykge1xyXG4gICAgICAgIGZpcnN0S2V5Q3VycmVudCA9IGN1cnJlbnRGZWF0dXJlS2V5c1trZXldO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBhbGxLZXlzOiBBcnJheTxzdHJpbmc+ID0gY3VycmVudEZlYXR1cmUuZ2V0S2V5cygpO1xyXG4gICAgcHJldmlvdXNGZWF0dXJlS2V5cy5mb3JFYWNoKChwcmV2aW91c0tleSkgPT4ge1xyXG4gICAgICBpZiAoYWxsS2V5cy5pbmNsdWRlcyhwcmV2aW91c0tleSkgJiYgcHJldmlvdXNLZXkgIT09IGZpcnN0S2V5UHJldmlvdXMpIHtcclxuICAgICAgICBhbGxLZXlzLnB1c2gocHJldmlvdXNLZXkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGFsbEtleXMudW5zaGlmdChmaXJzdEtleVByZXZpb3VzKTtcclxuXHJcbiAgICBsZXQgZmlyc3RLZXlBbGw6IHN0cmluZyA9ICcnO1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gYWxsS2V5cykge1xyXG4gICAgICBpZiAoYWxsS2V5c1trZXldICE9PSAnZ2VvbWV0cnknKSB7XHJcbiAgICAgICAgZmlyc3RLZXlBbGwgPSBhbGxLZXlzW2tleV07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGFsbEtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgIGNvbnN0IHNhbWVLZXlzOiBib29sZWFuID1cclxuICAgICAgICBwcmV2aW91c0ZlYXR1cmVLZXlzLmxlbmd0aCA9PT0gY3VycmVudEZlYXR1cmVLZXlzLmxlbmd0aCAmJlxyXG4gICAgICAgIHByZXZpb3VzRmVhdHVyZUtleXMuZXZlcnkoXHJcbiAgICAgICAgICAodmFsdWUsIGluZGV4KSA9PiB2YWx1ZSA9PT0gY3VycmVudEZlYXR1cmVLZXlzW2luZGV4XVxyXG4gICAgICAgICk7XHJcbiAgICAgIGlmIChrZXkgPT09IGZpcnN0S2V5QWxsICYmICFzYW1lS2V5cykge1xyXG4gICAgICAgIHRpdGxlUm93LnNldChcclxuICAgICAgICAgIGtleSxcclxuICAgICAgICAgIGN1cnJlbnRGZWF0dXJlLmdldCgnX2ZlYXR1cmVTdG9yZScpLmxheWVyLm9wdGlvbnMudGl0bGUgK1xyXG4gICAgICAgICAgICAnID09PT09PT09PT09PT09PT4nLFxyXG4gICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaGVhZGVyUm93LnNldChrZXksIGtleSwgdHJ1ZSk7XHJcbiAgICAgICAgZW1wdHlSb3cudW5zZXQoa2V5LCB0cnVlKTtcclxuICAgICAgfSBlbHNlIGlmIChrZXkgPT09IGZpcnN0S2V5QWxsICYmIHNhbWVLZXlzKSB7XHJcbiAgICAgICAgdGl0bGVSb3cuc2V0KFxyXG4gICAgICAgICAga2V5LFxyXG4gICAgICAgICAgY3VycmVudEZlYXR1cmUuZ2V0KCdfZmVhdHVyZVN0b3JlJykubGF5ZXIub3B0aW9ucy50aXRsZSxcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApO1xyXG4gICAgICAgIGhlYWRlclJvdy5zZXQoa2V5LCBrZXksIHRydWUpO1xyXG4gICAgICAgIGVtcHR5Um93LnVuc2V0KGtleSwgdHJ1ZSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBmaXJzdEtleUN1cnJlbnQpIHtcclxuICAgICAgICB0aXRsZVJvdy5zZXQoXHJcbiAgICAgICAgICBrZXksXHJcbiAgICAgICAgICBjdXJyZW50RmVhdHVyZS5nZXQoJ19mZWF0dXJlU3RvcmUnKS5sYXllci5vcHRpb25zLnRpdGxlLFxyXG4gICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaGVhZGVyUm93LnNldChrZXksIGtleSwgdHJ1ZSk7XHJcbiAgICAgICAgZW1wdHlSb3cudW5zZXQoa2V5LCB0cnVlKTtcclxuICAgICAgfSBlbHNlIGlmIChrZXkgIT09ICdnZW9tZXRyeScpIHtcclxuICAgICAgICB0aXRsZVJvdy51bnNldChrZXksIHRydWUpO1xyXG4gICAgICAgIGhlYWRlclJvdy5zZXQoa2V5LCBrZXksIHRydWUpO1xyXG4gICAgICAgIGVtcHR5Um93LnVuc2V0KGtleSwgdHJ1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGl0bGVSb3cudW5zZXQoa2V5LCB0cnVlKTtcclxuICAgICAgICBlbXB0eVJvdy51bnNldChrZXksIHRydWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWN1cnJlbnRGZWF0dXJlS2V5cy5pbmNsdWRlcyhrZXkpKSB7XHJcbiAgICAgICAgaGVhZGVyUm93LnVuc2V0KGtleSwgdHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgY29uc3QgdGl0bGVFbXB0eVJvd3MgPSBbdGl0bGVSb3csIGhlYWRlclJvdywgZW1wdHlSb3ddO1xyXG4gICAgcmV0dXJuIHRpdGxlRW1wdHlSb3dzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaXJjbGVUb1BvaW50KGZlYXR1cmUpIHtcclxuICAgIGNvbnN0IHJhZGl1czogbnVtYmVyID0gZmVhdHVyZS5nZXQoJ3JhZCcpO1xyXG5cclxuICAgIGlmIChyYWRpdXMpIHtcclxuICAgICAgY29uc3QgcG9pbnQgPSBuZXcgb2xQb2ludChbXHJcbiAgICAgICAgZmVhdHVyZS5nZXQoJ2xvbmdpdHVkZScpLFxyXG4gICAgICAgIGZlYXR1cmUuZ2V0KCdsYXRpdHVkZScpXHJcbiAgICAgIF0pO1xyXG4gICAgICBwb2ludC50cmFuc2Zvcm0oJ0VQU0c6NDMyNicsIGZlYXR1cmUuZ2V0KCdfcHJvamVjdGlvbicpKTtcclxuICAgICAgZmVhdHVyZS5zZXRHZW9tZXRyeShwb2ludCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkRm9ybSgpIHtcclxuICAgIHRoaXMuaW1wb3J0Rm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBpbnB1dFByb2o6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuZm9yY2VOYW1pbmcpIHtcclxuICAgICAgdGhpcy5mb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgICAgZm9ybWF0OiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgICAgbGF5ZXJzOiBbW10sIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgICAgbGF5ZXJzV2l0aFNlbGVjdGlvbjogW1tdXSxcclxuICAgICAgICBlbmNvZGluZzogW0VuY29kaW5nRm9ybWF0LlVURjgsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgICAgY29tYmluZUxheWVyczogW3RydWUsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgICAgc2VwYXJhdG9yOiBbZmFsc2UsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgICAgZmVhdHVyZUluTWFwRXh0ZW50OiBbZmFsc2UsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgICAgbmFtZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5mb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgICAgZm9ybWF0OiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgICAgbGF5ZXJzOiBbW10sIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgICAgbGF5ZXJzV2l0aFNlbGVjdGlvbjogW1tdXSxcclxuICAgICAgICBlbmNvZGluZzogW0VuY29kaW5nRm9ybWF0LlVURjgsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgICAgY29tYmluZUxheWVyczogW3RydWUsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgICAgc2VwYXJhdG9yOiBbZmFsc2UsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgICAgZmVhdHVyZUluTWFwRXh0ZW50OiBbZmFsc2UsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uRmlsZUltcG9ydFN1Y2Nlc3MoZmlsZTogRmlsZSwgZmVhdHVyZXM6IEZlYXR1cmVbXSkge1xyXG4gICAgY29uc3QgaW1wb3J0RXhwb3J0T3B0aW9ucyA9IHRoaXMuY29uZmlnLmdldENvbmZpZyhcclxuICAgICAgJ2ltcG9ydEV4cG9ydCdcclxuICAgICkgYXMgSW1wb3J0RXhwb3J0U2VydmljZU9wdGlvbnM7XHJcbiAgICBjb25zdCBjb25maXJtRGlhbG9nU2VydmljZSA9IGltcG9ydEV4cG9ydE9wdGlvbnM/LmFsbG93VG9TdG9yZUxheWVyXHJcbiAgICAgID8gdGhpcy5jb25maXJtRGlhbG9nU2VydmljZVxyXG4gICAgICA6IHVuZGVmaW5lZDtcclxuICAgIGlmICghaW1wb3J0RXhwb3J0T3B0aW9ucz8uaW1wb3J0V2l0aFN0eWxlKSB7XHJcbiAgICAgIGhhbmRsZUZpbGVJbXBvcnRTdWNjZXNzKFxyXG4gICAgICAgIGZpbGUsXHJcbiAgICAgICAgZmVhdHVyZXMsXHJcbiAgICAgICAgdGhpcy5tYXAsXHJcbiAgICAgICAgdGhpcy5jb250ZXh0VXJpLFxyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UsXHJcbiAgICAgICAgdGhpcy5sYXllclNlcnZpY2UsXHJcbiAgICAgICAgY29uZmlybURpYWxvZ1NlcnZpY2VcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGhhbmRsZUZpbGVJbXBvcnRTdWNjZXNzKFxyXG4gICAgICAgIGZpbGUsXHJcbiAgICAgICAgZmVhdHVyZXMsXHJcbiAgICAgICAgdGhpcy5tYXAsXHJcbiAgICAgICAgdGhpcy5jb250ZXh0VXJpLFxyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UsXHJcbiAgICAgICAgdGhpcy5sYXllclNlcnZpY2UsXHJcbiAgICAgICAgY29uZmlybURpYWxvZ1NlcnZpY2UsXHJcbiAgICAgICAgdGhpcy5zdHlsZUxpc3RTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMuc3R5bGVTZXJ2aWNlXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uRmlsZUltcG9ydEVycm9yKGZpbGU6IEZpbGUsIGVycm9yOiBFcnJvcikge1xyXG4gICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcclxuICAgIGhhbmRsZUZpbGVJbXBvcnRFcnJvcihmaWxlLCBlcnJvciwgdGhpcy5tZXNzYWdlU2VydmljZSwgdGhpcy5maWxlU2l6ZU1iKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25Qb3B1cEJsb2NrZWRFcnJvcihwcmVDaGVjazogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XHJcbiAgICBjb25zdCBleHRyYU1lc3NhZ2UgPSBwcmVDaGVja1xyXG4gICAgICA/ICdpZ28uZ2VvLmV4cG9ydC5wb3B1cEJsb2NrZWQuc2VsZWN0QWdhaW4nXHJcbiAgICAgIDogJ2lnby5nZW8uZXhwb3J0LnBvcHVwQmxvY2tlZC5yZXRyeSc7XHJcbiAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAnaWdvLmdlby5leHBvcnQucG9wdXBCbG9ja2VkLnRleHQnLFxyXG4gICAgICAnaWdvLmdlby5leHBvcnQucG9wdXBCbG9ja2VkLnRpdGxlJyxcclxuICAgICAgeyB0aW1lT3V0OiAyMDAwMCB9LFxyXG4gICAgICB7IGV4dHJhTWVzc2FnZSB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkZpbGVFeHBvcnRFcnJvcihlcnJvcjogRXJyb3IpIHtcclxuICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XHJcbiAgICBoYW5kbGVGaWxlRXhwb3J0RXJyb3IoZXJyb3IsIHRoaXMubWVzc2FnZVNlcnZpY2UpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkQ29uZmlnKCkge1xyXG4gICAgY29uc3QgZm9yY2VOYW1pbmdDb25maWcgPSB0aGlzLmNvbmZpZy5nZXRDb25maWcoJ2ltcG9ydEV4cG9ydC5mb3JjZU5hbWluZycpO1xyXG4gICAgdGhpcy5mb3JjZU5hbWluZyA9XHJcbiAgICAgIGZvcmNlTmFtaW5nQ29uZmlnICE9PSB1bmRlZmluZWQgPyBmb3JjZU5hbWluZ0NvbmZpZyA6IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuY29tcHV0ZUZvcm1hdHMoKTtcclxuICAgIHRoaXMubG9hZEVuY29kaW5ncygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGVuY29kaW5nRGVmYXVsdFZhbHVlKGZvcm1hdDogRXhwb3J0Rm9ybWF0KSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIGZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkNTVmNvbW1hIHx8XHJcbiAgICAgIGZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkNTVnNlbWljb2xvblxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgZW5jb2Rpbmc6IEVuY29kaW5nRm9ybWF0LkxBVElOMSB9KTtcclxuICAgICAgcmV0dXJuIEVuY29kaW5nRm9ybWF0LkxBVElOMTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgZW5jb2Rpbmc6IEVuY29kaW5nRm9ybWF0LlVURjggfSk7XHJcbiAgICAgIHJldHVybiBFbmNvZGluZ0Zvcm1hdC5VVEY4O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkRW5jb2RpbmdzKCkge1xyXG4gICAgdGhpcy5lbmNvZGluZ3MkLm5leHQoRW5jb2RpbmdGb3JtYXQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb21wdXRlRm9ybWF0cyhsYXllcnM/OiBBbnlMYXllcltdKSB7XHJcbiAgICBsZXQgYXBwbGllZGZvcm1hdHM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMoRXhwb3J0Rm9ybWF0KTtcclxuICAgIGNvbnN0IGZvcm1hdHNUeXBlID0ge1xyXG4gICAgICBvbmx5VXJsOiBmYWxzZSxcclxuICAgICAgb25seVZlY3RvcjogZmFsc2UsXHJcbiAgICAgIHZlY3RvckFuZFVybDogZmFsc2UsXHJcbiAgICAgIGN1c3RvbUxpc3Q6IGZhbHNlXHJcbiAgICB9O1xyXG4gICAgY29uc3QgY3VzdG9tTGlzdCA9IFtdO1xyXG4gICAgaWYgKGxheWVycyAmJiBsYXllcnMubGVuZ3RoKSB7XHJcbiAgICAgIGxheWVycy5mb3JFYWNoKChsYXllcikgPT4ge1xyXG4gICAgICAgIGlmICghbGF5ZXIpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5kb3dubG9hZD8uYWxsb3dlZEZvcm1hdHMpIHtcclxuICAgICAgICAgIGZvcm1hdHNUeXBlLmN1c3RvbUxpc3QgPSB0cnVlO1xyXG4gICAgICAgICAgY3VzdG9tTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgbGF5ZXI6IGxheWVyLnRpdGxlLFxyXG4gICAgICAgICAgICBmb3JtYXRzOiB0aGlzLnZhbGlkYXRlTGlzdEZvcm1hdChcclxuICAgICAgICAgICAgICBsYXllci5kYXRhU291cmNlLm9wdGlvbnMuZG93bmxvYWQuYWxsb3dlZEZvcm1hdHNcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICEobGF5ZXIgaW5zdGFuY2VvZiBWZWN0b3JMYXllcikgJiZcclxuICAgICAgICAgIGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5kb3dubG9hZCAmJlxyXG4gICAgICAgICAgbGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmRvd25sb2FkLnVybFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgZm9ybWF0c1R5cGUub25seVVybCA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgIGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5kb3dubG9hZCAmJlxyXG4gICAgICAgICAgKGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5kb3dubG9hZC51cmwgfHxcclxuICAgICAgICAgICAgbGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmRvd25sb2FkLmR5bmFtaWNVcmwpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBmb3JtYXRzVHlwZS52ZWN0b3JBbmRVcmwgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobGF5ZXIgaW5zdGFuY2VvZiBWZWN0b3JMYXllcikge1xyXG4gICAgICAgICAgZm9ybWF0c1R5cGUub25seVZlY3RvciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmIChmb3JtYXRzVHlwZS5vbmx5VXJsID09PSB0cnVlICYmIGZvcm1hdHNUeXBlLm9ubHlWZWN0b3IgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgYXBwbGllZGZvcm1hdHMgPSBbJ1VSTCddO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIGZvcm1hdHNUeXBlLm9ubHlWZWN0b3IgPT09IHRydWUgJiZcclxuICAgICAgICBmb3JtYXRzVHlwZS5vbmx5VXJsID09PSBmYWxzZVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmNvbXB1dGVGb3JtYXRzKCk7IC8vIHJlc2V0XHJcbiAgICAgICAgaWYgKEV4cG9ydEZvcm1hdC5VUkwgaW4gdGhpcy5mb3JtYXRzJC52YWx1ZSkge1xyXG4gICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZm9ybWF0cyQudmFsdWUpLmZpbHRlcihcclxuICAgICAgICAgICAgKGtleSkgPT4ga2V5ICE9PSAnVVJMJ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGFwcGxpZWRmb3JtYXRzID0ga2V5cztcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgZm9ybWF0c1R5cGUudmVjdG9yQW5kVXJsID09PSB0cnVlICYmXHJcbiAgICAgICAgZm9ybWF0c1R5cGUub25seVVybCA9PT0gZmFsc2UgJiZcclxuICAgICAgICBmb3JtYXRzVHlwZS5vbmx5VmVjdG9yID09PSBmYWxzZVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmNvbXB1dGVGb3JtYXRzKCk7IC8vIHJlc2V0XHJcbiAgICAgICAgaWYgKCEoRXhwb3J0Rm9ybWF0LlVSTCBpbiB0aGlzLmZvcm1hdHMkLnZhbHVlKSkge1xyXG4gICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZm9ybWF0cyQudmFsdWUpO1xyXG4gICAgICAgICAga2V5cy5wdXNoKCdVUkwnKTtcclxuICAgICAgICAgIGFwcGxpZWRmb3JtYXRzID0ga2V5cztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGNvbmZpZ0ltcG9ydEV4cG9ydEZvcm1hdHMgPSB0aGlzLmNvbmZpZy5nZXRDb25maWcoXHJcbiAgICAgICdpbXBvcnRFeHBvcnQuZm9ybWF0cydcclxuICAgICk7XHJcbiAgICBpZiAoY29uZmlnSW1wb3J0RXhwb3J0Rm9ybWF0cykge1xyXG4gICAgICBjb25zdCB2YWxpZGF0ZWRMaXN0Rm9ybWF0ID0gdGhpcy52YWxpZGF0ZUxpc3RGb3JtYXQoXHJcbiAgICAgICAgY29uZmlnSW1wb3J0RXhwb3J0Rm9ybWF0c1xyXG4gICAgICApO1xyXG4gICAgICBhcHBsaWVkZm9ybWF0cyA9IGFwcGxpZWRmb3JtYXRzLmZpbHRlcigoYWYpID0+XHJcbiAgICAgICAgdmFsaWRhdGVkTGlzdEZvcm1hdC5pbmNsdWRlcyhhZilcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmIChmb3JtYXRzVHlwZS5jdXN0b21MaXN0KSB7XHJcbiAgICAgIGxldCBjb21tb25Gb3JtYXRzO1xyXG4gICAgICBjb25zdCBsYXllcnNXaXRoQ3VzdG9tRm9ybWF0cyA9IFtdO1xyXG4gICAgICBsZXQgcHJldmlvdXNDdXN0b21MaXN0Rm9ybWF0cyA9IGN1c3RvbUxpc3RbMF0uZm9ybWF0cztcclxuICAgICAgY3VzdG9tTGlzdC5tYXAoKGxpc3QpID0+IHtcclxuICAgICAgICBsYXllcnNXaXRoQ3VzdG9tRm9ybWF0cy5wdXNoKGxpc3QubGF5ZXIpO1xyXG4gICAgICAgIGNvbW1vbkZvcm1hdHMgPSBsaXN0LmZvcm1hdHMuZmlsdGVyKCh2YWx1ZSkgPT5cclxuICAgICAgICAgIHByZXZpb3VzQ3VzdG9tTGlzdEZvcm1hdHMuaW5jbHVkZXModmFsdWUpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBwcmV2aW91c0N1c3RvbUxpc3RGb3JtYXRzID0gbGlzdC5mb3JtYXRzO1xyXG4gICAgICB9KTtcclxuICAgICAgY29uc3QgZmluYWxGb3JtYXRzID0gY29tbW9uRm9ybWF0cy5maWx0ZXIoKHZhbHVlKSA9PlxyXG4gICAgICAgIGFwcGxpZWRmb3JtYXRzLmluY2x1ZGVzKHZhbHVlKVxyXG4gICAgICApO1xyXG4gICAgICBpZiAoZmluYWxGb3JtYXRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLmZvcm1hdHMkLm5leHQoc3RyRW51bShmaW5hbEZvcm1hdHMpKTtcclxuXHJcbiAgICAgICAgaWYgKGxheWVycyAmJiBsYXllcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICBpZiAobGF5ZXJzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hbGVydChcclxuICAgICAgICAgICAgICAnaWdvLmdlby5leHBvcnQuY3VzdG9tTGlzdC50ZXh0JyxcclxuICAgICAgICAgICAgICAnaWdvLmdlby5leHBvcnQuY3VzdG9tTGlzdC50aXRsZScsXHJcbiAgICAgICAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgIHsgdmFsdWU6IGxheWVyc1dpdGhDdXN0b21Gb3JtYXRzLmpvaW4oKSB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZm9ybWF0cyQubmV4dChbXSk7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hbGVydChcclxuICAgICAgICAgICdpZ28uZ2VvLmV4cG9ydC5ub0Zvcm1hdC50ZXh0JyxcclxuICAgICAgICAgICdpZ28uZ2VvLmV4cG9ydC5ub0Zvcm1hdC50aXRsZSdcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybWF0cyQubmV4dChzdHJFbnVtKGFwcGxpZWRmb3JtYXRzKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZhbGlkYXRlTGlzdEZvcm1hdChmb3JtYXRzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiBmb3JtYXRzXHJcbiAgICAgIC5maWx0ZXIoKGZvcm1hdCkgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuQ1NWY29tbWEudG9VcHBlckNhc2UoKSB8fFxyXG4gICAgICAgICAgZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5DU1ZzZW1pY29sb24udG9VcHBlckNhc2UoKSB8fFxyXG4gICAgICAgICAgZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5HTUwudG9VcHBlckNhc2UoKSB8fFxyXG4gICAgICAgICAgZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5HUFgudG9VcHBlckNhc2UoKSB8fFxyXG4gICAgICAgICAgZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5HZW9KU09OLnRvVXBwZXJDYXNlKCkgfHxcclxuICAgICAgICAgIGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuS01MLnRvVXBwZXJDYXNlKCkgfHxcclxuICAgICAgICAgIGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuU2hhcGVmaWxlLnRvVXBwZXJDYXNlKCkgfHxcclxuICAgICAgICAgIGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuVVJMLnRvVXBwZXJDYXNlKClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHJldHVybiBmb3JtYXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAubWFwKChmb3JtYXQpID0+IHtcclxuICAgICAgICBpZiAoZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5DU1Zjb21tYS50b1VwcGVyQ2FzZSgpKSB7XHJcbiAgICAgICAgICBmb3JtYXQgPSBFeHBvcnRGb3JtYXQuQ1NWY29tbWE7XHJcbiAgICAgICAgICByZXR1cm4gZm9ybWF0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5DU1ZzZW1pY29sb24udG9VcHBlckNhc2UoKSkge1xyXG4gICAgICAgICAgZm9ybWF0ID0gRXhwb3J0Rm9ybWF0LkNTVnNlbWljb2xvbjtcclxuICAgICAgICAgIHJldHVybiBmb3JtYXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LkdNTC50b1VwcGVyQ2FzZSgpKSB7XHJcbiAgICAgICAgICBmb3JtYXQgPSBFeHBvcnRGb3JtYXQuR01MO1xyXG4gICAgICAgICAgcmV0dXJuIGZvcm1hdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuR1BYLnRvVXBwZXJDYXNlKCkpIHtcclxuICAgICAgICAgIGZvcm1hdCA9IEV4cG9ydEZvcm1hdC5HUFg7XHJcbiAgICAgICAgICByZXR1cm4gZm9ybWF0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5HZW9KU09OLnRvVXBwZXJDYXNlKCkpIHtcclxuICAgICAgICAgIGZvcm1hdCA9IEV4cG9ydEZvcm1hdC5HZW9KU09OO1xyXG4gICAgICAgICAgcmV0dXJuIGZvcm1hdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuS01MLnRvVXBwZXJDYXNlKCkpIHtcclxuICAgICAgICAgIGZvcm1hdCA9IEV4cG9ydEZvcm1hdC5LTUw7XHJcbiAgICAgICAgICByZXR1cm4gZm9ybWF0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5TaGFwZWZpbGUudG9VcHBlckNhc2UoKSkge1xyXG4gICAgICAgICAgZm9ybWF0ID0gRXhwb3J0Rm9ybWF0LlNoYXBlZmlsZTtcclxuICAgICAgICAgIHJldHVybiBmb3JtYXQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5VUkwudG9VcHBlckNhc2UoKSkge1xyXG4gICAgICAgICAgZm9ybWF0ID0gRXhwb3J0Rm9ybWF0LlVSTDtcclxuICAgICAgICAgIHJldHVybiBmb3JtYXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBtb2RlQ2hhbmdlZChtb2RlKSB7XHJcbiAgICB0aGlzLnNlbGVjdE1vZGUuZW1pdChtb2RlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25GaWxlRXhwb3J0U3VjY2VzcygpIHtcclxuICAgIGhhbmRsZUZpbGVFeHBvcnRTdWNjZXNzKHRoaXMubWVzc2FnZVNlcnZpY2UpO1xyXG4gIH1cclxuXHJcbiAgb25JbXBvcnRFeHBvcnRDaGFuZ2UoZXZlbnQpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRNb2RlID0gZXZlbnQudmFsdWU7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJpbXBvcnQtZXhwb3J0LXRvZ2dsZSBtYXQtdHlwb2dyYXBoeVwiPlxyXG4gIDxtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cFxyXG4gICAgW3ZhbHVlXT1cInNlbGVjdGVkTW9kZVwiXHJcbiAgICAoY2hhbmdlKT1cIm9uSW1wb3J0RXhwb3J0Q2hhbmdlKCRldmVudClcIlxyXG4gID5cclxuICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSBbdmFsdWVdPVwiJ2ltcG9ydCdcIj5cclxuICAgICAge3sgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5pbXBvcnRUYWJUaXRsZScgfCB0cmFuc2xhdGUgfX1cclxuICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XHJcbiAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cIidleHBvcnQnXCI+XHJcbiAgICAgIHt7ICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZXhwb3J0VGFiVGl0bGUnIHwgdHJhbnNsYXRlIH19XHJcbiAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxyXG4gIDwvbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA+XHJcbjwvZGl2PlxyXG5cclxuPGZvcm1cclxuICBjbGFzcz1cImlnby1mb3JtXCJcclxuICBbZm9ybUdyb3VwXT1cImltcG9ydEZvcm1cIlxyXG4gICpuZ0lmPVwic2VsZWN0ZWRNb2RlID09PSAnaW1wb3J0J1wiXHJcbj5cclxuICA8ZGl2IGNsYXNzPVwiaWdvLWlucHV0LWNvbnRhaW5lclwiPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LWxhYmVsPnt7XHJcbiAgICAgICAgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5pbXBvcnRQcm9qUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXHJcbiAgICAgIH19PC9tYXQtbGFiZWw+XHJcbiAgICAgIDxtYXQtc2VsZWN0IFsodmFsdWUpXT1cImlucHV0UHJvalwiPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uXHJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgcHJvamVjdGlvbiBvZiBwcm9qZWN0aW9ucyQgfCBhc3luY1wiXHJcbiAgICAgICAgICBbdmFsdWVdPVwicHJvamVjdGlvblwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8cCBtYXRMaXN0SXRlbVRpdGxlICpuZ0lmPVwicHJvamVjdGlvbi50cmFuc2xhdGVLZXlcIj5cclxuICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLnByb2plY3Rpb25zLicgKyBwcm9qZWN0aW9uLnRyYW5zbGF0ZUtleVxyXG4gICAgICAgICAgICAgICAgfCB0cmFuc2xhdGU6IHByb2plY3Rpb25cclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgIDwvcD5cclxuICAgICAgICAgIDxwIG1hdExpc3RJdGVtVGl0bGUgKm5nSWY9XCIhcHJvamVjdGlvbi50cmFuc2xhdGVLZXlcIj5cclxuICAgICAgICAgICAge3sgcHJvamVjdGlvbi5hbGlhcyB9fVxyXG4gICAgICAgICAgPC9wPlxyXG4gICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdlxyXG4gICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcclxuICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgW21hdFRvb2x0aXBdPVwiXHJcbiAgICAgIGltcG9ydEZvcm0uaW52YWxpZFxyXG4gICAgICAgID8gKCdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0ucHJvamVjdGlvbnMuY2hvb3NlJyB8IHRyYW5zbGF0ZSlcclxuICAgICAgICA6ICgnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmltcG9ydEJ1dHRvbicgfCB0cmFuc2xhdGUpXHJcbiAgICBcIlxyXG4gICAgY2xhc3M9XCJpZ28tZm9ybS1idXR0b24tZ3JvdXBcIlxyXG4gID5cclxuICAgIDxidXR0b25cclxuICAgICAgW2Rpc2FibGVkXT1cImltcG9ydEZvcm0uaW52YWxpZCB8fCAobG9hZGluZyQgfCBhc3luYylcIlxyXG4gICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgKGNsaWNrKT1cImZpbGVJbnB1dC5jbGljaygpXCJcclxuICAgID5cclxuICAgICAge3sgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5pbXBvcnRCdXR0b24nIHwgdHJhbnNsYXRlIH19XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxpZ28tc3Bpbm5lciBbc2hvd25dPVwibG9hZGluZyQgfCBhc3luY1wiPjwvaWdvLXNwaW5uZXI+XHJcbiAgICA8aW5wdXRcclxuICAgICAgaGlkZGVuXHJcbiAgICAgICNmaWxlSW5wdXRcclxuICAgICAgdHlwZT1cImZpbGVcIlxyXG4gICAgICBbc3R5bGUuZGlzcGxheV09XCInbm9uZSdcIlxyXG4gICAgICAoY2xpY2spPVwiZmlsZUlucHV0LnZhbHVlID0gbnVsbFwiXHJcbiAgICAgIChjaGFuZ2UpPVwiaW1wb3J0RmlsZXMoJGFueSgkZXZlbnQudGFyZ2V0KS5maWxlcylcIlxyXG4gICAgLz5cclxuICA8L2Rpdj5cclxuPC9mb3JtPlxyXG48c2VjdGlvbiBjbGFzcz1cIm1hdC10eXBvZ3JhcGh5XCIgKm5nSWY9XCJzZWxlY3RlZE1vZGUgPT09ICdpbXBvcnQnXCI+XHJcbiAgPGRpdiAqbmdJZj1cImltcG9ydEh0bWxDbGFyaWZpY2F0aW9ucyA9PT0gJydcIj5cclxuICAgIDxoND57eyAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmltcG9ydENsYXJpZmljYXRpb25zJyB8IHRyYW5zbGF0ZSB9fTwvaDQ+XHJcbiAgICA8dWw+XHJcbiAgICAgIDxsaT5cclxuICAgICAgICB7e1xyXG4gICAgICAgICAgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5pbXBvcnRTaXplTWF4J1xyXG4gICAgICAgICAgICB8IHRyYW5zbGF0ZTogeyBzaXplOiBmaWxlU2l6ZU1iIH1cclxuICAgICAgICB9fVxyXG4gICAgICA8L2xpPlxyXG4gICAgICA8bGk+XHJcbiAgICAgICAge3sgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5pbXBvcnRGb3JtYXRBdXRob3JpemVkJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICA8L2xpPlxyXG4gICAgICA8bGk+e3sgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5pbXBvcnRTaHBaaXAnIHwgdHJhbnNsYXRlIH19PC9saT5cclxuICAgIDwvdWw+XHJcbiAgPC9kaXY+XHJcbiAgPGlnby1jdXN0b20taHRtbFxyXG4gICAgKm5nSWY9XCJpbXBvcnRIdG1sQ2xhcmlmaWNhdGlvbnMgIT09ICcnXCJcclxuICAgIGNsYXNzPVwibWF0LXR5cG9ncmFwaHlcIlxyXG4gICAgW2h0bWxdPVwiaW1wb3J0SHRtbENsYXJpZmljYXRpb25zXCJcclxuICA+XHJcbiAgPC9pZ28tY3VzdG9tLWh0bWw+XHJcbjwvc2VjdGlvbj5cclxuXHJcbjxzZWN0aW9uXHJcbiAgY2xhc3M9XCJtYXQtdHlwb2dyYXBoeVwiXHJcbiAgKm5nSWY9XCIoZXhwb3J0YWJsZUxheWVycyQgfCBhc3luYykubGVuZ3RoID09PSAwICYmIHNlbGVjdGVkTW9kZSA9PT0gJ2V4cG9ydCdcIlxyXG4+XHJcbiAgPGg0Pnt7ICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZXhwb3J0Tm9MYXllcnNFeHBvcnRhYmxlJyB8IHRyYW5zbGF0ZSB9fTwvaDQ+XHJcbjwvc2VjdGlvbj5cclxuXHJcbjxmb3JtXHJcbiAgY2xhc3M9XCJpZ28tZm9ybVwiXHJcbiAgW2Zvcm1Hcm91cF09XCJmb3JtXCJcclxuICAqbmdJZj1cIihleHBvcnRhYmxlTGF5ZXJzJCB8IGFzeW5jKS5sZW5ndGggPiAwICYmIHNlbGVjdGVkTW9kZSA9PT0gJ2V4cG9ydCdcIlxyXG4+XHJcbiAgPGRpdiBjbGFzcz1cImlnby1pbnB1dC1jb250YWluZXJcIj5cclxuICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgPG1hdC1sYWJlbD57e1xyXG4gICAgICAgICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZXhwb3J0TGF5ZXJQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcclxuICAgICAgfX08L21hdC1sYWJlbD5cclxuICAgICAgPG1hdC1zZWxlY3QgWyh2YWx1ZSldPVwibGF5ZXJzXCIgbXVsdGlwbGU+XHJcbiAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlcj5cclxuICAgICAgICAgIHt7IGxheWVycy5sZW5ndGggPyBnZXRMYXllclRpdGxlQnlJZChsYXllcnNbMF0pIDogJycgfX1cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwibGF5ZXJzLmxlbmd0aCA+IDFcIiBjbGFzcz1cImV4cG9ydC1zZWxlY3QtdHJpZ2dlclwiPlxyXG4gICAgICAgICAgICAoK3t7IGxheWVycy5sZW5ndGggLSAxIH19XHJcbiAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgKGxheWVycz8ubGVuZ3RoID09PSAyXHJcbiAgICAgICAgICAgICAgICA/ICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0ub3RoZXInXHJcbiAgICAgICAgICAgICAgICA6ICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0ub3RoZXJzJ1xyXG4gICAgICAgICAgICAgICkgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgfX0pXHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XHJcbiAgICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBsYXllciBvZiBleHBvcnRhYmxlTGF5ZXJzJCB8IGFzeW5jXCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgJ2lnby1leHBvcnQtbGF5ZXItbWF0LW9wdGlvbic6IGxheWVySGFzU2VsZWN0ZWRGZWF0dXJlcyhsYXllcilcclxuICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgW3ZhbHVlXT1cImxheWVyLmlkXCJcclxuICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxwIG1hdExpc3RJdGVtVGl0bGU+e3sgbGF5ZXIudGl0bGUgfX08L3A+XHJcbiAgICAgICAgICA8cCBtYXRMaXN0SXRlbVRpdGxlPlxyXG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZVxyXG4gICAgICAgICAgICAgICpuZ0lmPVwibGF5ZXJIYXNTZWxlY3RlZEZlYXR1cmVzKGxheWVyKVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9ubHlTZWxlY3RlZENsaWNrKCRldmVudCwgbGF5ZXIuaWQpXCJcclxuICAgICAgICAgICAgICAoY2hlY2tlZCk9XCJpbkxheWVyc0lkVG9FeHBvcnRTZWxlY3Rpb25Pbmx5KGxheWVyKVwiXHJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbmx5U2VsZWN0ZWQoJGV2ZW50LCBsYXllci5pZClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHNtYWxsPnt7XHJcbiAgICAgICAgICAgICAgICAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydFNlbGVjdGVkRmVhdHVyZScgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICB9fTwvc21hbGw+XHJcbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICAgIDwvcD5cclxuICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJpZ28taW5wdXQtY29udGFpbmVyXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3tcclxuICAgICAgICAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydEZvcm1hdFBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVxyXG4gICAgICB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJmb3JtYXRcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGZvcm1hdHMkIHwgYXN5bmMpLmxlbmd0aCAhPT0gMFwiPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGZvcm1hdCBvZiBmb3JtYXRzJCB8IGFzeW5jIHwga2V5dmFsdWVcIlxyXG4gICAgICAgICAgICBbdmFsdWVdPVwiZm9ybWF0LmtleVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7ICdpZ28uZ2VvLmV4cG9ydC5mb3JtYXQuJyArIGZvcm1hdC52YWx1ZSB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0lmPVwiKGZvcm1hdHMkIHwgYXN5bmMpLmxlbmd0aCA9PT0gMFwiIGRpc2FibGVkPVwidHJ1ZVwiPlxyXG4gICAgICAgICAge3sgJ2lnby5nZW8uZXhwb3J0Lm5vRm9ybWF0LnRpdGxlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJpZ28taW5wdXQtY29udGFpbmVyXCJcclxuICAgICpuZ0lmPVwiZm9yY2VOYW1pbmcgJiYgZm9ybS52YWx1ZS5mb3JtYXQgIT09ICdVUkwnXCJcclxuICA+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiXHJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e1xyXG4gICAgICAgICAgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRGaWxlTmFtZVBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgIH19XCJcclxuICAgICAgLz5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwiaWdvLWlucHV0LWNvbnRhaW5lclwiXHJcbiAgICAqbmdJZj1cIlxyXG4gICAgICBmb3JtLnZhbHVlLmZvcm1hdCA9PT0gJ0NTVmNvbW1hJyB8fCBmb3JtLnZhbHVlLmZvcm1hdCA9PT0gJ0NTVnNlbWljb2xvbidcclxuICAgIFwiXHJcbiAgPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LWxhYmVsPnt7XHJcbiAgICAgICAgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5lbmNvZGluZ1BsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVxyXG4gICAgICB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJlbmNvZGluZ1wiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoZW5jb2RpbmdzJCB8IGFzeW5jKS5sZW5ndGggIT09IDBcIj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uXHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBlbmNvZGluZyBvZiBlbmNvZGluZ3MkIHwgYXN5bmMgfCBrZXl2YWx1ZVwiXHJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJlbmNvZGluZy5rZXlcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7eyAnaWdvLmdlby5leHBvcnQuZW5jb2RpbmcuJyArIGVuY29kaW5nLnZhbHVlIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwiZXhwb3J0LWNvbWJpbmUtbGF5ZXJzIG1hdC10eXBvZ3JhcGh5XCJcclxuICAgICpuZ0lmPVwiXHJcbiAgICAgIGxheWVycy5sZW5ndGggPiAxICYmXHJcbiAgICAgIChmb3JtLnZhbHVlLmZvcm1hdCA9PT0gJ0NTVmNvbW1hJyB8fCBmb3JtLnZhbHVlLmZvcm1hdCA9PT0gJ0NTVnNlbWljb2xvbicpXHJcbiAgICBcIlxyXG4gID5cclxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlXHJcbiAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvbWJpbmVMYXllcnNcIlxyXG4gICAgICBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiXHJcbiAgICA+XHJcbiAgICAgIHt7ICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZXhwb3J0Q29tYmluZVJlc3VsdHMnIHwgdHJhbnNsYXRlIH19XHJcbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwiZXhwb3J0LXNlcGFyYXRvciBtYXQtdHlwb2dyYXBoeVwiXHJcbiAgICAqbmdJZj1cIlxyXG4gICAgICBsYXllcnMubGVuZ3RoID4gMSAmJlxyXG4gICAgICAoZm9ybS52YWx1ZS5mb3JtYXQgPT09ICdDU1Zjb21tYScgfHxcclxuICAgICAgICBmb3JtLnZhbHVlLmZvcm1hdCA9PT0gJ0NTVnNlbWljb2xvbicpICYmXHJcbiAgICAgIGZvcm0udmFsdWUuY29tYmluZUxheWVyc1xyXG4gICAgXCJcclxuICA+XHJcbiAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJzZXBhcmF0b3JcIiBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiPlxyXG4gICAgICB7eyAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydFNlcGFyYXRvcicgfCB0cmFuc2xhdGUgfX1cclxuICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJleHBvcnQtb3B0aW9ucyBtYXQtdHlwb2dyYXBoeVwiXHJcbiAgICAqbmdJZj1cImZvcm0udmFsdWUuZm9ybWF0ICE9PSAnVVJMJ1wiXHJcbiAgPlxyXG4gICAgPG1hdC1zbGlkZS10b2dnbGVcclxuICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZmVhdHVyZUluTWFwRXh0ZW50XCJcclxuICAgICAgW2xhYmVsUG9zaXRpb25dPVwiJ2JlZm9yZSdcIlxyXG4gICAgPlxyXG4gICAgICB7eyAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydEZlYXR1cmVJbkV4dGVudCcgfCB0cmFuc2xhdGUgfX1cclxuICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImlnby1mb3JtLWJ1dHRvbi1ncm91cFwiPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgW2Rpc2FibGVkXT1cIiFmb3JtLnZhbGlkIHx8IChsb2FkaW5nJCB8IGFzeW5jKVwiXHJcbiAgICAgIChjbGljayk9XCJoYW5kbGVFeHBvcnRGb3JtU3VibWl0KGZvcm0udmFsdWUpXCJcclxuICAgID5cclxuICAgICAge3tcclxuICAgICAgICBmb3JtLnZhbHVlLmZvcm1hdCAhPT0gJ1VSTCdcclxuICAgICAgICAgID8gKCdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZXhwb3J0QnV0dG9uJyB8IHRyYW5zbGF0ZSlcclxuICAgICAgICAgIDogZm9ybS52YWx1ZS5sYXllcnMubGVuZ3RoID4gMVxyXG4gICAgICAgICAgICA/ICgnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydEJ1dHRvbkxpbmtzJyB8IHRyYW5zbGF0ZSlcclxuICAgICAgICAgICAgOiAoJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRCdXR0b25MaW5rJyB8IHRyYW5zbGF0ZSlcclxuICAgICAgfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGlnby1zcGlubmVyIFtzaG93bl09XCJsb2FkaW5nJCB8IGFzeW5jXCI+PC9pZ28tc3Bpbm5lcj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGlnby1jdXN0b20taHRtbFxyXG4gICAgKm5nSWY9XCJleHBvcnRIdG1sQ2xhcmlmaWNhdGlvbnMgIT09ICcnXCJcclxuICAgIGNsYXNzPVwibWF0LXR5cG9ncmFwaHlcIlxyXG4gICAgW2h0bWxdPVwiZXhwb3J0SHRtbENsYXJpZmljYXRpb25zXCJcclxuICA+XHJcbiAgPC9pZ28tY3VzdG9tLWh0bWw+XHJcbjwvZm9ybT5cclxuIl19
|
|
975
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LWV4cG9ydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9pbXBvcnQtZXhwb3J0L2ltcG9ydC1leHBvcnQvaW1wb3J0LWV4cG9ydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9pbXBvcnQtZXhwb3J0L2ltcG9ydC1leHBvcnQvaW1wb3J0LWV4cG9ydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hGLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxXQUFXLEVBQ1gsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUVsQixVQUFVLEVBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUVMLG9CQUFvQixFQUNyQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTdELE9B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b250ZW50IjpbImltcG9ydCB7IEFzeW5jUGlwZSwgS2V5VmFsdWVQaXBlLCBOZ0NsYXNzLCBOZ0ZvciwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEZvcm1zTW9kdWxlLFxyXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgVW50eXBlZEZvcm1CdWlsZGVyLFxyXG4gIFVudHlwZWRGb3JtR3JvdXAsXHJcbiAgVmFsaWRhdG9yc1xyXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgTWF0QnV0dG9uVG9nZ2xlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uLXRvZ2dsZSc7XHJcbmltcG9ydCB7IE1hdE9wdGlvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XHJcbmltcG9ydCB7IE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XHJcbmltcG9ydCB7XHJcbiAgTWF0U2xpZGVUb2dnbGVDaGFuZ2UsXHJcbiAgTWF0U2xpZGVUb2dnbGVNb2R1bGVcclxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbGlkZS10b2dnbGUnO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIENvbmZpcm1EaWFsb2dTZXJ2aWNlLFxyXG4gIEN1c3RvbUh0bWxDb21wb25lbnQsXHJcbiAgRW50aXR5UmVjb3JkLFxyXG4gIFNwaW5uZXJDb21wb25lbnQsXHJcbiAgV29ya3NwYWNlXHJcbn0gZnJvbSAnQGlnbzIvY29tbW9uJztcclxuaW1wb3J0IHR5cGUgeyBXb3Jrc3BhY2VTdG9yZSB9IGZyb20gJ0BpZ28yL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlL2NvbmZpZyc7XHJcbmltcG9ydCB7IExhbmd1YWdlU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUvbGFuZ3VhZ2UnO1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUvbWVzc2FnZSc7XHJcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9zdG9yYWdlJztcclxuaW1wb3J0IHsgc3RyRW51bSB9IGZyb20gJ0BpZ28yL3V0aWxzJztcclxuXHJcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPbEdlb21ldHJ5IH0gZnJvbSAnb2wvZ2VvbS9HZW9tZXRyeSc7XHJcbmltcG9ydCBvbFBvaW50IGZyb20gJ29sL2dlb20vUG9pbnQnO1xyXG5pbXBvcnQgeyBjaXJjdWxhciB9IGZyb20gJ29sL2dlb20vUG9seWdvbic7XHJcbmltcG9ydCBvbENsdXN0ZXJTb3VyY2UgZnJvbSAnb2wvc291cmNlL0NsdXN0ZXInO1xyXG5pbXBvcnQgb2xWZWN0b3JTb3VyY2UgZnJvbSAnb2wvc291cmNlL1ZlY3Rvcic7XHJcblxyXG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgc2tpcFdoaWxlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgQ2x1c3RlckRhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlL3NoYXJlZC9kYXRhc291cmNlcy9jbHVzdGVyLWRhdGFzb3VyY2UnO1xyXG5pbXBvcnQgeyBEYXRhU291cmNlT3B0aW9ucyB9IGZyb20gJy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkL2RhdGFzb3VyY2VzL2RhdGFzb3VyY2UuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgRG93bmxvYWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZG93bmxvYWQvc2hhcmVkL2Rvd25sb2FkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGZWF0dXJlIH0gZnJvbSAnLi4vLi4vZmVhdHVyZS9zaGFyZWQvZmVhdHVyZS5pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgTGF5ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbGF5ZXIvc2hhcmVkL2xheWVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBbnlMYXllciB9IGZyb20gJy4uLy4uL2xheWVyL3NoYXJlZC9sYXllcnMvYW55LWxheWVyJztcclxuaW1wb3J0IHsgTGF5ZXIgfSBmcm9tICcuLi8uLi9sYXllci9zaGFyZWQvbGF5ZXJzL2xheWVyJztcclxuaW1wb3J0IHsgVmVjdG9yTGF5ZXIgfSBmcm9tICcuLi8uLi9sYXllci9zaGFyZWQvbGF5ZXJzL3ZlY3Rvci1sYXllcic7XHJcbmltcG9ydCB7IElucHV0UHJvamVjdGlvbnMsIFByb2plY3Rpb25zTGltaXRhdGlvbnNPcHRpb25zIH0gZnJvbSAnLi4vLi4vbWFwLyc7XHJcbmltcG9ydCB7IGNvbXB1dGVQcm9qZWN0aW9uc0NvbnN0cmFpbnRzIH0gZnJvbSAnLi4vLi4vbWFwL3NoYXJlZCc7XHJcbmltcG9ydCB7IElnb01hcCB9IGZyb20gJy4uLy4uL21hcC9zaGFyZWQvbWFwJztcclxuaW1wb3J0IHsgU3R5bGVMaXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3N0eWxlL3N0eWxlLWxpc3Qvc3R5bGUtbGlzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3R5bGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGUtc2VydmljZS9zdHlsZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRWRpdGlvbldvcmtzcGFjZSB9IGZyb20gJy4uLy4uL3dvcmtzcGFjZS9zaGFyZWQvZWRpdGlvbi13b3Jrc3BhY2UnO1xyXG5pbXBvcnQgeyBGZWF0dXJlV29ya3NwYWNlIH0gZnJvbSAnLi4vLi4vd29ya3NwYWNlL3NoYXJlZC9mZWF0dXJlLXdvcmtzcGFjZSc7XHJcbmltcG9ydCB7IFdmc1dvcmtzcGFjZSB9IGZyb20gJy4uLy4uL3dvcmtzcGFjZS9zaGFyZWQvd2ZzLXdvcmtzcGFjZSc7XHJcbmltcG9ydCB7IEV4cG9ydE9wdGlvbnMgfSBmcm9tICcuLi9zaGFyZWQvZXhwb3J0LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEV4cG9ydFNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvZXhwb3J0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbmNvZGluZ0Zvcm1hdCwgRXhwb3J0Rm9ybWF0IH0gZnJvbSAnLi4vc2hhcmVkL2V4cG9ydC50eXBlJztcclxuaW1wb3J0IHtcclxuICBoYW5kbGVGaWxlRXhwb3J0RXJyb3IsXHJcbiAgaGFuZGxlRmlsZUV4cG9ydFN1Y2Nlc3NcclxufSBmcm9tICcuLi9zaGFyZWQvZXhwb3J0LnV0aWxzJztcclxuaW1wb3J0IHsgSW1wb3J0RXhwb3J0U2VydmljZU9wdGlvbnMgfSBmcm9tICcuLi9zaGFyZWQvaW1wb3J0LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEltcG9ydFNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvaW1wb3J0LnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIGhhbmRsZUZpbGVJbXBvcnRFcnJvcixcclxuICBoYW5kbGVGaWxlSW1wb3J0U3VjY2Vzc1xyXG59IGZyb20gJy4uL3NoYXJlZC9pbXBvcnQudXRpbHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZ28taW1wb3J0LWV4cG9ydCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ltcG9ydC1leHBvcnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2ltcG9ydC1leHBvcnQuY29tcG9uZW50LnNjc3MnXSxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIE1hdEJ1dHRvblRvZ2dsZU1vZHVsZSxcclxuICAgIE5nSWYsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXHJcbiAgICBNYXRTZWxlY3RNb2R1bGUsXHJcbiAgICBOZ0ZvcixcclxuICAgIE1hdE9wdGlvbk1vZHVsZSxcclxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXHJcbiAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICBTcGlubmVyQ29tcG9uZW50LFxyXG4gICAgQ3VzdG9tSHRtbENvbXBvbmVudCxcclxuICAgIE5nQ2xhc3MsXHJcbiAgICBNYXRTbGlkZVRvZ2dsZU1vZHVsZSxcclxuICAgIE1hdElucHV0TW9kdWxlLFxyXG4gICAgQXN5bmNQaXBlLFxyXG4gICAgS2V5VmFsdWVQaXBlLFxyXG4gICAgVHJhbnNsYXRlTW9kdWxlXHJcbiAgXSxcclxuICBwcm92aWRlcnM6IFtDb25maXJtRGlhbG9nU2VydmljZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEltcG9ydEV4cG9ydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25Jbml0IHtcclxuICBwdWJsaWMgZm9ybTogVW50eXBlZEZvcm1Hcm91cDtcclxuICBwdWJsaWMgaW1wb3J0Rm9ybTogVW50eXBlZEZvcm1Hcm91cDtcclxuICBwdWJsaWMgZm9ybWF0cyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XHJcbiAgcHVibGljIGVuY29kaW5ncyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XHJcbiAgcHVibGljIGV4cG9ydGFibGVMYXllcnMkOiBCZWhhdmlvclN1YmplY3Q8QW55TGF5ZXJbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFxyXG4gICAgW11cclxuICApO1xyXG4gIHB1YmxpYyBsb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xyXG4gIHB1YmxpYyBmb3JjZU5hbWluZyA9IGZhbHNlO1xyXG4gIHB1YmxpYyBjb250cm9sRm9ybWF0ID0gJ2Zvcm1hdCc7XHJcblxyXG4gIHByaXZhdGUgbGF5ZXJzJCQ6IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIGV4cG9ydGFibGVMYXllcnMkJDogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgZm9ybWF0cyQkOiBTdWJzY3JpcHRpb247XHJcbiAgcHJpdmF0ZSBlbmNvZGluZ3MkJDogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgZm9ybUxheWVyJCQ6IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIGV4cG9ydE9wdGlvbnMkJDogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBwdWJsaWMgaW1wb3J0SHRtbENsYXJpZmljYXRpb25zOiBzdHJpbmc7XHJcbiAgcHVibGljIGV4cG9ydEh0bWxDbGFyaWZpY2F0aW9uczogc3RyaW5nO1xyXG5cclxuICBwcml2YXRlIGVzcGdDb2RlUmVnZXggPSBuZXcgUmVnRXhwKCdeXFxcXGR7NCw2fScpO1xyXG4gIHByaXZhdGUgY2xpZW50U2lkZUZpbGVTaXplTWF4OiBudW1iZXI7XHJcbiAgcHVibGljIGZpbGVTaXplTWI6IG51bWJlcjtcclxuXHJcbiAgcHVibGljIHByb2plY3Rpb25zJDogQmVoYXZpb3JTdWJqZWN0PElucHV0UHJvamVjdGlvbnNbXT4gPVxyXG4gICAgbmV3IEJlaGF2aW9yU3ViamVjdChbXSk7XHJcbiAgcHJpdmF0ZSBwcm9qZWN0aW9uc0NvbnN0cmFpbnRzOiBQcm9qZWN0aW9uc0xpbWl0YXRpb25zT3B0aW9ucztcclxuXHJcbiAgcHVibGljIHBvcHVwQ2hlY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIHByZXZpb3VzTGF5ZXJTcGVjcyQ6IEJlaGF2aW9yU3ViamVjdDxcclxuICAgIHtcclxuICAgICAgaWQ6IHN0cmluZztcclxuICAgICAgdmlzaWJsZTogYm9vbGVhbjtcclxuICAgICAgb3BhY2l0eTogbnVtYmVyO1xyXG4gICAgICBxdWVyeWFibGU6IGJvb2xlYW47XHJcbiAgICB9W11cclxuICA+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh1bmRlZmluZWQpO1xyXG5cclxuICBASW5wdXQoKSBzZWxlY3RGaXJzdFByb2o6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgbWFwOiBJZ29NYXA7XHJcblxyXG4gIEBJbnB1dCgpIGNvbnRleHRVcmk6IHN0cmluZztcclxuXHJcbiAgcHJpdmF0ZSBfcHJvamVjdGlvbnNMaW1pdGF0aW9uczogUHJvamVjdGlvbnNMaW1pdGF0aW9uc09wdGlvbnMgPSB7fTtcclxuICBASW5wdXQoKVxyXG4gIHNldCBwcm9qZWN0aW9uc0xpbWl0YXRpb25zKHZhbHVlOiBQcm9qZWN0aW9uc0xpbWl0YXRpb25zT3B0aW9ucykge1xyXG4gICAgdGhpcy5fcHJvamVjdGlvbnNMaW1pdGF0aW9ucyA9IHZhbHVlO1xyXG4gICAgdGhpcy5jb21wdXRlUHJvamVjdGlvbnMoKTtcclxuICB9XHJcbiAgZ2V0IHByb2plY3Rpb25zTGltaXRhdGlvbnMoKTogUHJvamVjdGlvbnNMaW1pdGF0aW9uc09wdGlvbnMge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Byb2plY3Rpb25zTGltaXRhdGlvbnMgfHwge307XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9yZSB0aGF0IGhvbGRzIHRoZSBhdmFpbGFibGUgd29ya3NwYWNlcy5cclxuICAgKi9cclxuICBASW5wdXQoKSBzdG9yZTogV29ya3NwYWNlU3RvcmU7XHJcblxyXG4gIEBJbnB1dCgpIHNlbGVjdGVkTW9kZSA9ICdpbXBvcnQnO1xyXG5cclxuICBAT3V0cHV0KCkgc2VsZWN0TW9kZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG5cclxuICBASW5wdXQoKSBleHBvcnRPcHRpb25zJDogQmVoYXZpb3JTdWJqZWN0PEV4cG9ydE9wdGlvbnM+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChcclxuICAgIHVuZGVmaW5lZFxyXG4gICk7XHJcblxyXG4gIEBPdXRwdXQoKSBleHBvcnRPcHRpb25zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxFeHBvcnRPcHRpb25zPigpO1xyXG5cclxuICBnZXQgbGF5ZXJzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ2xheWVycycpLnZhbHVlO1xyXG4gIH1cclxuICBzZXQgbGF5ZXJzKHZhbHVlKSB7XHJcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGxheWVyczogdmFsdWUgfSk7XHJcbiAgfVxyXG5cclxuICBnZXQgaW5wdXRQcm9qKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaW1wb3J0Rm9ybS5nZXQoJ2lucHV0UHJvaicpLnZhbHVlO1xyXG4gIH1cclxuICBzZXQgaW5wdXRQcm9qKHZhbHVlKSB7XHJcbiAgICB0aGlzLmltcG9ydEZvcm0ucGF0Y2hWYWx1ZSh7IGlucHV0UHJvajogdmFsdWUgfSk7XHJcbiAgfVxyXG5cclxuICBnZXQgcG9wdXBBbGxvd2VkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgKHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0KCdpbXBvcnRFeHBvcnRQb3B1cEFsbG93ZWQnKSBhcyBib29sZWFuKSB8fCBmYWxzZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNldCBwb3B1cEFsbG93ZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0KCdpbXBvcnRFeHBvcnRQb3B1cEFsbG93ZWQnLCB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgaW1wb3J0U2VydmljZTogSW1wb3J0U2VydmljZSxcclxuICAgIHByaXZhdGUgZXhwb3J0U2VydmljZTogRXhwb3J0U2VydmljZSxcclxuICAgIHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgc3R5bGVMaXN0U2VydmljZTogU3R5bGVMaXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgc3R5bGVTZXJ2aWNlOiBTdHlsZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIGNvbmZpZzogQ29uZmlnU2VydmljZSxcclxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRvd25sb2FkU2VydmljZTogRG93bmxvYWRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBsYXllclNlcnZpY2U6IExheWVyU2VydmljZSxcclxuICAgIHByaXZhdGUgY29uZmlybURpYWxvZ1NlcnZpY2U6IENvbmZpcm1EaWFsb2dTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLmxvYWRDb25maWcoKTtcclxuICAgIHRoaXMuYnVpbGRGb3JtKCk7XHJcbiAgICB0aGlzLmNvbXB1dGVQcm9qZWN0aW9ucygpO1xyXG4gICAgdGhpcy5pbXBvcnRIdG1sQ2xhcmlmaWNhdGlvbnMgPSB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcclxuICAgICAgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5pbXBvcnRIdG1sQ2xhcmlmaWNhdGlvbnMnXHJcbiAgICApO1xyXG4gICAgdGhpcy5leHBvcnRIdG1sQ2xhcmlmaWNhdGlvbnMgPSB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcclxuICAgICAgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRIdG1sQ2xhcmlmaWNhdGlvbnMnXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmxheWVycyQkID0gdGhpcy5tYXAubGF5ZXJzJC5zdWJzY3JpYmUoKGxheWVycykgPT4ge1xyXG4gICAgICB0aGlzLmV4cG9ydGFibGVMYXllcnMkLm5leHQoXHJcbiAgICAgICAgbGF5ZXJzLmZpbHRlcigobGF5ZXI6IExheWVyKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAobGF5ZXIgaW5zdGFuY2VvZiBWZWN0b3JMYXllciAmJiBsYXllci5leHBvcnRhYmxlID09PSB0cnVlKSB8fFxyXG4gICAgICAgICAgICAobGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmRvd25sb2FkICYmXHJcbiAgICAgICAgICAgICAgbGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmRvd25sb2FkLnVybClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSkgYXMgQW55TGF5ZXJbXVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCBjb25maWdGaWxlU2l6ZU1iID0gdGhpcy5jb25maWcuZ2V0Q29uZmlnKFxyXG4gICAgICAnaW1wb3J0RXhwb3J0LmNsaWVudFNpZGVGaWxlU2l6ZU1heE1iJ1xyXG4gICAgKTtcclxuICAgIHRoaXMuY2xpZW50U2lkZUZpbGVTaXplTWF4ID1cclxuICAgICAgKGNvbmZpZ0ZpbGVTaXplTWIgPyBjb25maWdGaWxlU2l6ZU1iIDogMzApICogTWF0aC5wb3coMTAyNCwgMik7XHJcbiAgICB0aGlzLmZpbGVTaXplTWIgPSB0aGlzLmNsaWVudFNpZGVGaWxlU2l6ZU1heCAvIE1hdGgucG93KDEwMjQsIDIpO1xyXG5cclxuICAgIHRoaXMuZXhwb3J0T3B0aW9ucyQkID0gdGhpcy5leHBvcnRPcHRpb25zJFxyXG4gICAgICAucGlwZShza2lwV2hpbGUoKGV4cG9ydE9wdGlvbnMpID0+ICFleHBvcnRPcHRpb25zKSlcclxuICAgICAgLnN1YnNjcmliZSgoZXhwb3J0T3B0aW9ucykgPT4ge1xyXG4gICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKGV4cG9ydE9wdGlvbnMsIHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xyXG4gICAgICAgIGlmIChleHBvcnRPcHRpb25zLmxheWVycykge1xyXG4gICAgICAgICAgdGhpcy5jb21wdXRlRm9ybWF0cyhcclxuICAgICAgICAgICAgZXhwb3J0T3B0aW9ucy5sYXllcnMubWFwKChsKSA9PiB0aGlzLm1hcC5nZXRMYXllckJ5SWQobCkpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB0aGlzLmZvcm1MYXllciQkID0gdGhpcy5mb3JtXHJcbiAgICAgIC5nZXQoJ2Zvcm1hdCcpXHJcbiAgICAgIC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChmb3JtYXQpID0+IHtcclxuICAgICAgICBjb25zdCBvZ3JlRm9ybWF0cyA9IE9iamVjdC5rZXlzKEV4cG9ydFNlcnZpY2Uub2dyZUZvcm1hdHMpO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICF0aGlzLnBvcHVwQ2hlY2tlZCAmJlxyXG4gICAgICAgICAgdGhpcy5mb3JtLmdldCgnbGF5ZXJzJykudmFsdWU/Lmxlbmd0aCA+IDEgJiZcclxuICAgICAgICAgIChvZ3JlRm9ybWF0cy5pbmRleE9mKGZvcm1hdCkgPj0gMCB8fCBmb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5VUkwpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuaGFuZGxlUG9wdXAodHJ1ZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBmb3JtYXQ6IHVuZGVmaW5lZCB9LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLmZvcm1MYXllciQkID0gdGhpcy5mb3JtXHJcbiAgICAgIC5nZXQoJ2xheWVycycpXHJcbiAgICAgIC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChsYXllcnNJZCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlUHJldmlvdXNMYXllclNwZWNzKCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRMYXllcnMgPVxyXG4gICAgICAgICAgbGF5ZXJzSWQgaW5zdGFuY2VvZiBBcnJheSA/IGxheWVyc0lkIDogW2xheWVyc0lkXTtcclxuICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGxheWVyczogc2VsZWN0ZWRMYXllcnMgfSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgIGNvbnN0IGxheWVycyA9IHNlbGVjdGVkTGF5ZXJzLm1hcCgobCkgPT4gdGhpcy5tYXAuZ2V0TGF5ZXJCeUlkKGwpKTtcclxuICAgICAgICB0aGlzLmNvbXB1dGVGb3JtYXRzKGxheWVycyk7XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZm9ybWF0cyQudmFsdWUpLmluZGV4T2YodGhpcy5mb3JtLnZhbHVlLmZvcm1hdCkgPT09XHJcbiAgICAgICAgICAtMVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBmb3JtYXQ6IHVuZGVmaW5lZCB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG9hZGluZyQubmV4dCh0cnVlKTtcclxuICAgICAgICBjb25zdCBwcmV2aW91c1NwZWNzOiB7XHJcbiAgICAgICAgICBpZDogc3RyaW5nO1xyXG4gICAgICAgICAgdmlzaWJsZTogYm9vbGVhbjtcclxuICAgICAgICAgIG9wYWNpdHk6IG51bWJlcjtcclxuICAgICAgICAgIHF1ZXJ5YWJsZTogYm9vbGVhbjtcclxuICAgICAgICB9W10gPSBbXTtcclxuICAgICAgICBsYXllcnMuZm9yRWFjaCgobGF5ZXIpID0+IHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgbGF5ZXIgaW5zdGFuY2VvZiBWZWN0b3JMYXllciAmJlxyXG4gICAgICAgICAgICBsYXllci5kYXRhU291cmNlLm9sLmdldEZlYXR1cmVzKCkubGVuZ3RoID09PSAwXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgcHJldmlvdXNTcGVjcy5wdXNoKHtcclxuICAgICAgICAgICAgICBpZDogbGF5ZXIuaWQsXHJcbiAgICAgICAgICAgICAgdmlzaWJsZTogbGF5ZXIudmlzaWJsZSxcclxuICAgICAgICAgICAgICBvcGFjaXR5OiBsYXllci5vcGFjaXR5LFxyXG4gICAgICAgICAgICAgIHF1ZXJ5YWJsZTogKGxheWVyIGFzIGFueSkucXVlcnlhYmxlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBsYXllci5vcGFjaXR5ID0gMDtcclxuICAgICAgICAgICAgbGF5ZXIudmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucHJldmlvdXNMYXllclNwZWNzJC5uZXh0KHByZXZpb3VzU3BlY3MpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcclxuICAgICAgICB9LCA1MDApO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLmZvcm1hdHMkJCA9IHRoaXMuZm9ybWF0cyRcclxuICAgICAgLnBpcGUoc2tpcFdoaWxlKChmb3JtYXRzKSA9PiAhZm9ybWF0cykpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGZvcm1hdHMpID0+IHtcclxuICAgICAgICBpZiAoT2JqZWN0LmtleXMoZm9ybWF0cykubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGZvcm1hdDogZm9ybWF0c1tPYmplY3Qua2V5cyhmb3JtYXRzKVswXV0gfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLmVuY29kaW5ncyQkID0gdGhpcy5lbmNvZGluZ3MkXHJcbiAgICAgIC5waXBlKHNraXBXaGlsZSgoZW5jb2RpbmdzKSA9PiAhZW5jb2RpbmdzKSlcclxuICAgICAgLnN1YnNjcmliZSgoZW5jb2RpbmdzKSA9PiB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKGVuY29kaW5ncykubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICAgIGVuY29kaW5nOiBlbmNvZGluZ3NbT2JqZWN0LmtleXMoZW5jb2RpbmdzKVswXV1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5leHBvcnRhYmxlTGF5ZXJzJCQgPSB0aGlzLmV4cG9ydGFibGVMYXllcnMkXHJcbiAgICAgIC5waXBlKHNraXBXaGlsZSgobGF5ZXJzKSA9PiAhbGF5ZXJzKSlcclxuICAgICAgLnN1YnNjcmliZSgobGF5ZXJzKSA9PiB7XHJcbiAgICAgICAgaWYgKGxheWVycy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgbGF5ZXJzOiBsYXllcnNbMF0uaWQgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5jb250cm9sRm9ybWF0XS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChmb3JtYXQpID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkNTVmNvbW1hIHx8XHJcbiAgICAgICAgZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuQ1NWc2VtaWNvbG9uXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgZW5jb2Rpbmc6IEVuY29kaW5nRm9ybWF0LkxBVElOMSB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGVuY29kaW5nOiBFbmNvZGluZ0Zvcm1hdC5VVEY4IH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0Rmlyc3RQcm9qKSB7XHJcbiAgICAgIGlmICh0aGlzLnByb2plY3Rpb25zJC52YWx1ZS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICB0aGlzLmltcG9ydEZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICBpbnB1dFByb2o6IHtcclxuICAgICAgICAgICAgdHJhbnNsYXRlS2V5OiAnbmFkODMnLFxyXG4gICAgICAgICAgICBhbGlhczogJ05BRDgzJyxcclxuICAgICAgICAgICAgY29kZTogJ0VQU0c6NDMyNicsXHJcbiAgICAgICAgICAgIHpvbmU6ICcnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5pbXBvcnRGb3JtLnBhdGNoVmFsdWUoeyBpbnB1dFByb2o6IHRoaXMucHJvamVjdGlvbnMkLnZhbHVlWzBdIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmltcG9ydEZvcm0ucGF0Y2hWYWx1ZSh7IGlucHV0UHJvajogdW5kZWZpbmVkIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb21wdXRlUHJvamVjdGlvbnMoKSB7XHJcbiAgICB0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMgPSBjb21wdXRlUHJvamVjdGlvbnNDb25zdHJhaW50cyhcclxuICAgICAgdGhpcy5wcm9qZWN0aW9uc0xpbWl0YXRpb25zXHJcbiAgICApO1xyXG4gICAgY29uc3QgcHJvamVjdGlvbnM6IElucHV0UHJvamVjdGlvbnNbXSA9IFtdO1xyXG5cclxuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMubmFkODMpIHtcclxuICAgICAgcHJvamVjdGlvbnMucHVzaCh7XHJcbiAgICAgICAgdHJhbnNsYXRlS2V5OiAnbmFkODMnLFxyXG4gICAgICAgIGFsaWFzOiAnTkFEODMnLFxyXG4gICAgICAgIGNvZGU6ICdFUFNHOjQyNjknLFxyXG4gICAgICAgIHpvbmU6ICcnLFxyXG4gICAgICAgIGV4dGVudDogdW5kZWZpbmVkLFxyXG4gICAgICAgIGRlZjogdW5kZWZpbmVkXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy53Z3M4NCkge1xyXG4gICAgICBwcm9qZWN0aW9ucy5wdXNoKHtcclxuICAgICAgICB0cmFuc2xhdGVLZXk6ICd3Z3M4NCcsXHJcbiAgICAgICAgYWxpYXM6ICdXR1M4NCcsXHJcbiAgICAgICAgY29kZTogJ0VQU0c6NDMyNicsXHJcbiAgICAgICAgem9uZTogJycsXHJcbiAgICAgICAgZXh0ZW50OiB1bmRlZmluZWQsXHJcbiAgICAgICAgZGVmOiB1bmRlZmluZWRcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5wcm9qZWN0aW9uc0NvbnN0cmFpbnRzLndlYk1lcmNhdG9yKSB7XHJcbiAgICAgIHByb2plY3Rpb25zLnB1c2goe1xyXG4gICAgICAgIHRyYW5zbGF0ZUtleTogJ3dlYk1lcmNhdG9yJyxcclxuICAgICAgICBhbGlhczogJ1dlYiBNZXJjYXRvcicsXHJcbiAgICAgICAgY29kZTogJ0VQU0c6Mzg1NycsXHJcbiAgICAgICAgem9uZTogJycsXHJcbiAgICAgICAgZXh0ZW50OiB1bmRlZmluZWQsXHJcbiAgICAgICAgZGVmOiB1bmRlZmluZWRcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy5tdG0pIHtcclxuICAgICAgLy8gYWxsIG10bSB6b25lc1xyXG4gICAgICBjb25zdCBtaW5ab25lID0gdGhpcy5wcm9qZWN0aW9uc0NvbnN0cmFpbnRzLm10bVpvbmUubWluWm9uZTtcclxuICAgICAgY29uc3QgbWF4Wm9uZSA9IHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy5tdG1ab25lLm1heFpvbmU7XHJcblxyXG4gICAgICBmb3IgKGxldCBtdG1ab25lID0gbWluWm9uZTsgbXRtWm9uZSA8PSBtYXhab25lOyBtdG1ab25lKyspIHtcclxuICAgICAgICBjb25zdCBjb2RlID1cclxuICAgICAgICAgIG10bVpvbmUgPCAxMCA/IGBFUFNHOjMyMTgke210bVpvbmV9YCA6IGBFUFNHOjMyMSR7ODAgKyBtdG1ab25lfWA7XHJcbiAgICAgICAgcHJvamVjdGlvbnMucHVzaCh7XHJcbiAgICAgICAgICB0cmFuc2xhdGVLZXk6ICdtdG0nLFxyXG4gICAgICAgICAgYWxpYXM6IGBNVE0gJHttdG1ab25lfWAsXHJcbiAgICAgICAgICBjb2RlLFxyXG4gICAgICAgICAgem9uZTogYCR7bXRtWm9uZX1gLFxyXG4gICAgICAgICAgZXh0ZW50OiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBkZWY6IHVuZGVmaW5lZFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy51dG0pIHtcclxuICAgICAgLy8gYWxsIHV0bSB6b25lc1xyXG4gICAgICBjb25zdCBtaW5ab25lID0gdGhpcy5wcm9qZWN0aW9uc0NvbnN0cmFpbnRzLnV0bVpvbmUubWluWm9uZTtcclxuICAgICAgY29uc3QgbWF4Wm9uZSA9IHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy51dG1ab25lLm1heFpvbmU7XHJcblxyXG4gICAgICBmb3IgKGxldCB1dG1ab25lID0gbWluWm9uZTsgdXRtWm9uZSA8PSBtYXhab25lOyB1dG1ab25lKyspIHtcclxuICAgICAgICBjb25zdCBjb2RlID1cclxuICAgICAgICAgIHV0bVpvbmUgPCAxMCA/IGBFUFNHOjMyNjAke3V0bVpvbmV9YCA6IGBFUFNHOjMyNiR7dXRtWm9uZX1gO1xyXG4gICAgICAgIHByb2plY3Rpb25zLnB1c2goe1xyXG4gICAgICAgICAgdHJhbnNsYXRlS2V5OiAndXRtJyxcclxuICAgICAgICAgIGFsaWFzOiBgVVRNICR7dXRtWm9uZX1gLFxyXG4gICAgICAgICAgY29kZSxcclxuICAgICAgICAgIHpvbmU6IGAke3V0bVpvbmV9YCxcclxuICAgICAgICAgIGV4dGVudDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgZGVmOiB1bmRlZmluZWRcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBjb25maWdQcm9qZWN0aW9uOiBJbnB1dFByb2plY3Rpb25zW10gPSBbXTtcclxuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMucHJvakZyb21Db25maWcpIHtcclxuICAgICAgY29uZmlnUHJvamVjdGlvbiA9ICh0aGlzLmNvbmZpZy5nZXRDb25maWcoJ3Byb2plY3Rpb25zJykgfHxcclxuICAgICAgICBbXSkgYXMgSW5wdXRQcm9qZWN0aW9uc1tdO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucHJvamVjdGlvbnMkLm5leHQoY29uZmlnUHJvamVjdGlvbi5jb25jYXQocHJvamVjdGlvbnMpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0V29ya3NwYWNlQnlMYXllcklkKGlkOiBzdHJpbmcpOiBXb3Jrc3BhY2Uge1xyXG4gICAgY29uc3Qgd2tzRnJvbUxheWVySWQgPSB0aGlzLnN0b3JlXHJcbiAgICAgIC5hbGwoKVxyXG4gICAgICAuZmluZChcclxuICAgICAgICAod29ya3NwYWNlKSA9PlxyXG4gICAgICAgICAgKHdvcmtzcGFjZSBhcyBXZnNXb3Jrc3BhY2UgfCBGZWF0dXJlV29ya3NwYWNlIHwgRWRpdGlvbldvcmtzcGFjZSlcclxuICAgICAgICAgICAgLmxheWVyLmlkID09PSBpZFxyXG4gICAgICApO1xyXG4gICAgaWYgKHdrc0Zyb21MYXllcklkKSB7XHJcbiAgICAgIHJldHVybiB3a3NGcm9tTGF5ZXJJZDtcclxuICAgIH1cclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRMYXllclRpdGxlQnlJZChpZCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5tYXAuZ2V0TGF5ZXJCeUlkKGlkKT8udGl0bGU7XHJcbiAgfVxyXG5cclxuICBsYXllckhhc1NlbGVjdGVkRmVhdHVyZXMobGF5ZXI6IExheWVyKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB3a3NGcm9tTGF5ZXIgPSB0aGlzLmdldFdvcmtzcGFjZUJ5TGF5ZXJJZChsYXllci5pZCk7XHJcbiAgICBpZiAod2tzRnJvbUxheWVyKSB7XHJcbiAgICAgIGNvbnN0IHJlY3MgPSB3a3NGcm9tTGF5ZXIuZW50aXR5U3RvcmUuc3RhdGVWaWV3LmZpcnN0QnkoXHJcbiAgICAgICAgKHJlY29yZDogRW50aXR5UmVjb3JkPEZlYXR1cmU+KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVjb3JkLnN0YXRlLnNlbGVjdGVkID09PSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIHJlY3MgPyB0cnVlIDogZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25seVNlbGVjdGVkKGV2ZW50OiBNYXRTbGlkZVRvZ2dsZUNoYW5nZSwgaWQ6IHN0cmluZykge1xyXG4gICAgbGV0IGxheWVyc1dpdGhTZWxlY3Rpb24gPSB0aGlzLmZvcm0udmFsdWUubGF5ZXJzV2l0aFNlbGVjdGlvbjtcclxuICAgIGlmIChldmVudC5jaGVja2VkKSB7XHJcbiAgICAgIGxheWVyc1dpdGhTZWxlY3Rpb24ucHVzaChpZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsYXllcnNXaXRoU2VsZWN0aW9uID0gbGF5ZXJzV2l0aFNlbGVjdGlvbi5maWx0ZXIoXHJcbiAgICAgICAgKGxheWVySWQpID0+IGxheWVySWQgIT09IGlkXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGxheWVyc1dpdGhTZWxlY3Rpb24gfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25seVNlbGVjdGVkQ2xpY2soZXZlbnQsIGlkOiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLmZvcm0udmFsdWUubGF5ZXJzLmZpbmQoKGxheWVySWQpID0+IGxheWVySWQgPT09IGlkKSkge1xyXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbkxheWVyc0lkVG9FeHBvcnRTZWxlY3Rpb25Pbmx5KGxheWVyOiBMYXllcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybS52YWx1ZS5sYXllcnNXaXRoU2VsZWN0aW9uLmZpbmQoXHJcbiAgICAgIChsYXllcklkKSA9PiBsYXllcklkID09PSBsYXllci5pZFxyXG4gICAgKVxyXG4gICAgICA/IHRydWVcclxuICAgICAgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5sYXllcnMkJC51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5leHBvcnRhYmxlTGF5ZXJzJCQudW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuZm9ybWF0cyQkLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLmVuY29kaW5ncyQkLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLmZvcm1MYXllciQkLnVuc3Vic2NyaWJlKCk7XHJcbiAgICBpZiAodGhpcy5leHBvcnRPcHRpb25zJCQpIHtcclxuICAgICAgdGhpcy5leHBvcnRPcHRpb25zJCQudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgIHRoaXMuZXhwb3J0T3B0aW9uc0NoYW5nZS5lbWl0KHRoaXMuZm9ybS52YWx1ZSk7XHJcbiAgICB0aGlzLmhhbmRsZVByZXZpb3VzTGF5ZXJTcGVjcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVQcmV2aW91c0xheWVyU3BlY3MoKSB7XHJcbiAgICBjb25zdCBwcmV2aW91c1NwZWNzID0gdGhpcy5wcmV2aW91c0xheWVyU3BlY3MkLnZhbHVlO1xyXG4gICAgaWYgKHByZXZpb3VzU3BlY3MgJiYgcHJldmlvdXNTcGVjcy5sZW5ndGgpIHtcclxuICAgICAgcHJldmlvdXNTcGVjcy5mb3JFYWNoKChzcGVjcykgPT4ge1xyXG4gICAgICAgIGNvbnN0IHByZXZpb3VzTGF5ZXIgPSB0aGlzLm1hcC5nZXRMYXllckJ5SWQoc3BlY3MuaWQpO1xyXG4gICAgICAgIHByZXZpb3VzTGF5ZXIudmlzaWJsZSA9IHNwZWNzLnZpc2libGU7XHJcbiAgICAgICAgcHJldmlvdXNMYXllci5vcGFjaXR5ID0gc3BlY3Mub3BhY2l0eTtcclxuICAgICAgICAocHJldmlvdXNMYXllciBhcyBhbnkpLnF1ZXJ5YWJsZSA9IHNwZWNzLnF1ZXJ5YWJsZTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnByZXZpb3VzTGF5ZXJTcGVjcyQubmV4dCh1bmRlZmluZWQpO1xyXG4gIH1cclxuXHJcbiAgaW1wb3J0RmlsZXMoZmlsZXM6IEZpbGVbXSkge1xyXG4gICAgbGV0IGlucHV0UHJvaiA9IHRoaXMuaW5wdXRQcm9qLmNvZGU7XHJcbiAgICBpZiAodGhpcy5lc3BnQ29kZVJlZ2V4LnRlc3QoaW5wdXRQcm9qKSkge1xyXG4gICAgICBpbnB1dFByb2ogPSBgRVBTRzoke2lucHV0UHJvan1gO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubG9hZGluZyQubmV4dCh0cnVlKTtcclxuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG4gICAgICB0aGlzLmltcG9ydFNlcnZpY2UuaW1wb3J0KGZpbGUsIGlucHV0UHJvaikuc3Vic2NyaWJlKFxyXG4gICAgICAgIChmZWF0dXJlczogRmVhdHVyZVtdKSA9PiB0aGlzLm9uRmlsZUltcG9ydFN1Y2Nlc3MoZmlsZSwgZmVhdHVyZXMpLFxyXG4gICAgICAgIChlcnJvcjogRXJyb3IpID0+IHRoaXMub25GaWxlSW1wb3J0RXJyb3IoZmlsZSwgZXJyb3IpLFxyXG4gICAgICAgICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlUG9wdXAocHJlQ2hlY2s6IGJvb2xlYW4gPSB0cnVlKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBwMSA9IHdpbmRvdy5vcGVuKCcnLCAncG9wdXAnLCAnd2lkdGg9MSwgaGVpZ2h0PTEnKTtcclxuICAgIHAxLmNsb3NlKCk7XHJcbiAgICBjb25zdCBwMiA9IHdpbmRvdy5vcGVuKCcnLCAncG9wdXAnLCAnd2lkdGg9MSwgaGVpZ2h0PTEnKTtcclxuICAgIGlmICghcDIgfHwgcDIuY2xvc2VkIHx8IHR5cGVvZiBwMi5jbG9zZWQgPT09ICd1bmRlZmluZWQnIHx8IHAyID09PSBudWxsKSB7XHJcbiAgICAgIHRoaXMub25Qb3B1cEJsb2NrZWRFcnJvcihwcmVDaGVjayk7XHJcbiAgICAgIHRoaXMucG9wdXBBbGxvd2VkID0gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwMi5jbG9zZSgpO1xyXG4gICAgICB0aGlzLnBvcHVwQWxsb3dlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMucG9wdXBDaGVja2VkID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLnBvcHVwQWxsb3dlZDtcclxuICB9XHJcblxyXG4gIGhhbmRsZUV4cG9ydEZvcm1TdWJtaXQoZGF0YTogRXhwb3J0T3B0aW9ucykge1xyXG4gICAgdGhpcy5sb2FkaW5nJC5uZXh0KHRydWUpO1xyXG5cclxuICAgIGNvbnN0IG9ncmVGb3JtYXRzID0gT2JqZWN0LmtleXMoRXhwb3J0U2VydmljZS5vZ3JlRm9ybWF0cyk7XHJcbiAgICBpZiAoXHJcbiAgICAgICF0aGlzLnBvcHVwQ2hlY2tlZCAmJlxyXG4gICAgICBkYXRhLmxheWVycy5sZW5ndGggPiAxICYmXHJcbiAgICAgIChvZ3JlRm9ybWF0cy5pbmRleE9mKGRhdGEuZm9ybWF0KSA+PSAwIHx8XHJcbiAgICAgICAgZGF0YS5mb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5VUkwpICYmXHJcbiAgICAgICF0aGlzLnBvcHVwQWxsb3dlZFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlUG9wdXAoKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZ2VvbVR5cGVzQ1NWOiB7IGdlb21ldHJ5VHlwZTogc3RyaW5nOyBmZWF0dXJlczogYW55W10gfVtdID0gW107XHJcbiAgICBsZXQgZmVhdHVyZXNDU1Y6IGFueVtdID0gW107XHJcbiAgICBsZXQgZmlsZW5hbWU6IHN0cmluZyA9ICcnO1xyXG5cclxuICAgIGZvciAoY29uc3QgW2xheWVySW5kZXgsIGxheWVyXSBvZiBkYXRhLmxheWVycy5lbnRyaWVzKCkpIHtcclxuICAgICAgY29uc3QgbGF5ID0gdGhpcy5tYXAuZ2V0TGF5ZXJCeUlkKGxheWVyKTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICEoXHJcbiAgICAgICAgICBkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkNTVnNlbWljb2xvbiB8fFxyXG4gICAgICAgICAgZGF0YS5mb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5DU1Zjb21tYVxyXG4gICAgICAgICkgfHxcclxuICAgICAgICAhZGF0YS5jb21iaW5lTGF5ZXJzIHx8XHJcbiAgICAgICAgZGF0YS5sYXllcnMubGVuZ3RoID09PSAxXHJcbiAgICAgICkge1xyXG4gICAgICAgIGZpbGVuYW1lID0gbGF5LnRpdGxlO1xyXG4gICAgICAgIGlmIChkYXRhLm5hbWUpIHtcclxuICAgICAgICAgIGZpbGVuYW1lID0gZGF0YS5uYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmaWxlbmFtZSA9IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KFxyXG4gICAgICAgICAgJ2lnby5nZW8uZXhwb3J0LmNvbWJpbmVkTGF5ZXJzJ1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZFNPcHRpb25zOiBEYXRhU291cmNlT3B0aW9ucyA9IGxheS5kYXRhU291cmNlLm9wdGlvbnM7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LlVSTCAmJlxyXG4gICAgICAgIGRTT3B0aW9ucy5kb3dubG9hZCAmJlxyXG4gICAgICAgIChkU09wdGlvbnMuZG93bmxvYWQudXJsIHx8IGRTT3B0aW9ucy5kb3dubG9hZC5keW5hbWljVXJsKVxyXG4gICAgICApIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIC8vIGJldHRlciBsb29rIGFuIGZlZWxcclxuICAgICAgICAgIGNvbnN0IHVybCA9IGRTT3B0aW9ucy5kb3dubG9hZC51cmwgfHwgZFNPcHRpb25zLmRvd25sb2FkLmR5bmFtaWNVcmw7XHJcbiAgICAgICAgICB1cmwubWF0Y2goL3NlcnZpY2U9d2ZzL2dpKVxyXG4gICAgICAgICAgICA/IHRoaXMuZG93bmxvYWRTZXJ2aWNlLm9wZW4obGF5KVxyXG4gICAgICAgICAgICA6IHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcclxuICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCB3a3MgPSB0aGlzLmdldFdvcmtzcGFjZUJ5TGF5ZXJJZChsYXllcik7XHJcbiAgICAgIGxldCBvbEZlYXR1cmVzO1xyXG4gICAgICBpZiAod2tzICYmIHdrcy5lbnRpdHlTdG9yZSAmJiB3a3MuZW50aXR5U3RvcmUuc3RhdGVWaWV3LmFsbCgpLmxlbmd0aCkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGRhdGEubGF5ZXJzV2l0aFNlbGVjdGlvbi5pbmRleE9mKGxheWVyKSAhPT0gLTEgJiZcclxuICAgICAgICAgIGRhdGEuZmVhdHVyZUluTWFwRXh0ZW50XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAvLyBPbmx5IGV4cG9ydCBzZWxlY3RlZCBmZWF0dXJlICYmIGludG8gbWFwIGV4dGVudFxyXG4gICAgICAgICAgb2xGZWF0dXJlcyA9IHdrcy5lbnRpdHlTdG9yZS5zdGF0ZVZpZXdcclxuICAgICAgICAgICAgLmFsbCgpXHJcbiAgICAgICAgICAgIC5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgKGU6IEVudGl0eVJlY29yZDxvYmplY3Q+KSA9PlxyXG4gICAgICAgICAgICAgICAgZS5zdGF0ZS5pbk1hcEV4dGVudCAmJiBlLnN0YXRlLnNlbGVjdGVkXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLm1hcCgoZSkgPT4gKGUuZW50aXR5IGFzIEZlYXR1cmUpLm9sKTtcclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgZGF0YS5sYXllcnNXaXRoU2VsZWN0aW9uLmluZGV4T2YobGF5ZXIpICE9PSAtMSAmJlxyXG4gICAgICAgICAgIWRhdGEuZmVhdHVyZUluTWFwRXh0ZW50XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAvLyBPbmx5IGV4cG9ydCBzZWxlY3RlZCBmZWF0dXJlICYmICAoaW50byBtYXAgZXh0ZW50IE9SIG5vdClcclxuICAgICAgICAgIG9sRmVhdHVyZXMgPSB3a3MuZW50aXR5U3RvcmUuc3RhdGVWaWV3XHJcbiAgICAgICAgICAgIC5hbGwoKVxyXG4gICAgICAgICAgICAuZmlsdGVyKChlOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT4gZS5zdGF0ZS5zZWxlY3RlZClcclxuICAgICAgICAgICAgLm1hcCgoZSkgPT4gKGUuZW50aXR5IGFzIEZlYXR1cmUpLm9sKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGRhdGEuZmVhdHVyZUluTWFwRXh0ZW50KSB7XHJcbiAgICAgICAgICAvLyBPbmx5IGludG8gbWFwIGV4dGVudFxyXG4gICAgICAgICAgb2xGZWF0dXJlcyA9IHdrcy5lbnRpdHlTdG9yZS5zdGF0ZVZpZXdcclxuICAgICAgICAgICAgLmFsbCgpXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKGU6IEVudGl0eVJlY29yZDxvYmplY3Q+KSA9PiBlLnN0YXRlLmluTWFwRXh0ZW50KVxyXG4gICAgICAgICAgICAubWFwKChlKSA9PiAoZS5lbnRpdHkgYXMgRmVhdHVyZSkub2wpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBBbGwgZmVhdHVyZXNcclxuICAgICAgICAgIG9sRmVhdHVyZXMgPSB3a3MuZW50aXR5U3RvcmUuc3RhdGVWaWV3XHJcbiAgICAgICAgICAgIC5hbGwoKVxyXG4gICAgICAgICAgICAubWFwKChlKSA9PiAoZS5lbnRpdHkgYXMgRmVhdHVyZSkub2wpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBvbCA9IGxheS5kYXRhU291cmNlLm9sIGFzXHJcbiAgICAgICAgICB8IG9sVmVjdG9yU291cmNlPE9sR2VvbWV0cnk+XHJcbiAgICAgICAgICB8IG9sQ2x1c3RlclNvdXJjZTtcclxuICAgICAgICBpZiAoZGF0YS5mZWF0dXJlSW5NYXBFeHRlbnQpIHtcclxuICAgICAgICAgIG9sRmVhdHVyZXMgPSBvbC5nZXRGZWF0dXJlc0luRXh0ZW50KFxyXG4gICAgICAgICAgICBsYXkubWFwLnZpZXdDb250cm9sbGVyLmdldEV4dGVudCgpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBvbEZlYXR1cmVzID0gb2wuZ2V0RmVhdHVyZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxheS5kYXRhU291cmNlIGluc3RhbmNlb2YgQ2x1c3RlckRhdGFTb3VyY2UpIHtcclxuICAgICAgICAgIG9sRmVhdHVyZXMgPSBvbEZlYXR1cmVzLmZsYXRNYXAoKGNsdXN0ZXI6IGFueSkgPT5cclxuICAgICAgICAgICAgY2x1c3Rlci5nZXQoJ2ZlYXR1cmVzJylcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgZ2VvbVR5cGVzOiB7IGdlb21ldHJ5VHlwZTogc3RyaW5nOyBmZWF0dXJlczogYW55W10gfVtdID0gW107XHJcbiAgICAgIGlmIChcclxuICAgICAgICBkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LlNoYXBlZmlsZSB8fFxyXG4gICAgICAgIGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuR1BYXHJcbiAgICAgICkge1xyXG4gICAgICAgIG9sRmVhdHVyZXMuZm9yRWFjaCgob2xGZWF0dXJlKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBmZWF0dXJlR2VvbVR5cGUgPSBvbEZlYXR1cmUuZ2V0R2VvbWV0cnkoKS5nZXRUeXBlKCk7XHJcbiAgICAgICAgICBjb25zdCBjdXJyZW50R2VvbVR5cGUgPSBnZW9tVHlwZXMuZmluZChcclxuICAgICAgICAgICAgKGdlb21UeXBlKSA9PiBnZW9tVHlwZS5nZW9tZXRyeVR5cGUgPT09IGZlYXR1cmVHZW9tVHlwZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmIChjdXJyZW50R2VvbVR5cGUpIHtcclxuICAgICAgICAgICAgY3VycmVudEdlb21UeXBlLmZlYXR1cmVzLnB1c2gob2xGZWF0dXJlKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGdlb21UeXBlcy5wdXNoKHtcclxuICAgICAgICAgICAgICBnZW9tZXRyeVR5cGU6IGZlYXR1cmVHZW9tVHlwZSxcclxuICAgICAgICAgICAgICBmZWF0dXJlczogW29sRmVhdHVyZV1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZ2VvbVR5cGVzID0gW3sgZ2VvbWV0cnlUeXBlOiAnJywgZmVhdHVyZXM6IG9sRmVhdHVyZXMgfV07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGdlb21UeXBlcy5mb3JFYWNoKChnZW9tVHlwZSkgPT4ge1xyXG4gICAgICAgIGdlb21UeXBlLmZlYXR1cmVzLmZvckVhY2goKGZlYXR1cmUpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHJhZGl1czogbnVtYmVyID0gZmVhdHVyZS5nZXQoJ3JhZCcpO1xyXG4gICAgICAgICAgaWYgKHJhZGl1cykge1xyXG4gICAgICAgICAgICBjb25zdCBjZW50ZXI0MzI2OiBBcnJheTxudW1iZXI+ID0gW1xyXG4gICAgICAgICAgICAgIGZlYXR1cmUuZ2V0KCdsb25naXR1ZGUnKSxcclxuICAgICAgICAgICAgICBmZWF0dXJlLmdldCgnbGF0aXR1ZGUnKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICBjb25zdCBjaXJjbGUgPSBjaXJjdWxhcihjZW50ZXI0MzI2LCByYWRpdXMsIDUwMCk7XHJcbiAgICAgICAgICAgIGNpcmNsZS50cmFuc2Zvcm0oJ0VQU0c6NDMyNicsIGZlYXR1cmUuZ2V0KCdfcHJvamVjdGlvbicpKTtcclxuICAgICAgICAgICAgZmVhdHVyZS5zZXRHZW9tZXRyeShjaXJjbGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmIChkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkdQWCkge1xyXG4gICAgICAgIGNvbnN0IGdweEZlYXR1cmVDbnQgPSBnZW9tVHlwZXMubGVuZ3RoO1xyXG4gICAgICAgIGdlb21UeXBlcyA9IGdlb21UeXBlcy5maWx0ZXIoKGdlb21UeXBlKSA9PlxyXG4gICAgICAgICAgWydMaW5lU3RyaW5nJywgJ1BvaW50J10uaW5jbHVkZXMoZ2VvbVR5cGUuZ2VvbWV0cnlUeXBlKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgZ3B4RmVhdHVyZUNudFBvaW50T3JQb2x5ID0gZ2VvbVR5cGVzLmxlbmd0aDtcclxuICAgICAgICBpZiAoZ3B4RmVhdHVyZUNudCA+IGdweEZlYXR1cmVDbnRQb2ludE9yUG9seSkge1xyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgJ2lnby5nZW8uZXhwb3J0LmdweC5lcnJvci5wb2x5LnRleHQnLFxyXG4gICAgICAgICAgICAnaWdvLmdlby5leHBvcnQuZ3B4LmVycm9yLnBvbHkudGl0bGUnLFxyXG4gICAgICAgICAgICB7IHRpbWVPdXQ6IDIwMDAwIH1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIChkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkNTVnNlbWljb2xvbiB8fFxyXG4gICAgICAgICAgZGF0YS5mb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5DU1Zjb21tYSkgJiZcclxuICAgICAgICBkYXRhLmNvbWJpbmVMYXllcnNcclxuICAgICAgKSB7XHJcbiAgICAgICAgZ2VvbVR5cGVzLmZvckVhY2goKGdlb21UeXBlKSA9PiBnZW9tVHlwZXNDU1YucHVzaChnZW9tVHlwZSkpO1xyXG5cclxuICAgICAgICBpZiAobGF5ZXJJbmRleCAhPT0gZGF0YS5sYXllcnMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCBwcmV2aW91c0ZlYXR1cmUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICBnZW9tVHlwZXNDU1YuZm9yRWFjaCgoZ2VvbVR5cGUpID0+IHtcclxuICAgICAgICAgICAgZ2VvbVR5cGUuZmVhdHVyZXMuZm9yRWFjaCgoY3VycmVudEZlYXR1cmUpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoZGF0YS5zZXBhcmF0b3IpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c0ZlYXR1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGZWF0dXJlLmdldCgnX2ZlYXR1cmVTdG9yZScpLmxheWVyLm9wdGlvbnMudGl0bGUgIT09XHJcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNGZWF0dXJlLmdldCgnX2ZlYXR1cmVTdG9yZScpLmxheWVyLm9wdGlvbnMudGl0bGVcclxuICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGl0bGVFbXB0eVJvd3MgPSB0aGlzLmNyZWF0ZVRpdGxlRW1wdHlSb3dzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNGZWF0dXJlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZlYXR1cmVcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzQ1NWLnB1c2godGl0bGVFbXB0eVJvd3NbMl0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzQ1NWLnB1c2godGl0bGVFbXB0eVJvd3NbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzQ1NWLnB1c2godGl0bGVFbXB0eVJvd3NbMV0pO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCB0aXRsZUVtcHR5Um93cyA9IHRoaXMuY3JlYXRlVGl0bGVFbXB0eVJvd3MoXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEZlYXR1cmUsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEZlYXR1cmVcclxuICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgZmVhdHVyZXNDU1YucHVzaCh0aXRsZUVtcHR5Um93c1swXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGZlYXR1cmVzQ1NWLnB1c2goY3VycmVudEZlYXR1cmUpO1xyXG4gICAgICAgICAgICAgIHByZXZpb3VzRmVhdHVyZSA9IGN1cnJlbnRGZWF0dXJlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGdlb21UeXBlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAnaWdvLmdlby5leHBvcnQubm90aGluZy50ZXh0JyxcclxuICAgICAgICAgICdpZ28uZ2VvLmV4cG9ydC5ub3RoaW5nLnRpdGxlJyxcclxuICAgICAgICAgIHsgdGltZU91dDogMjAwMDAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgIShcclxuICAgICAgICAgICAgZGF0YS5mb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5DU1ZzZW1pY29sb24gfHxcclxuICAgICAgICAgICAgZGF0YS5mb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5DU1Zjb21tYVxyXG4gICAgICAgICAgKSB8fFxyXG4gICAgICAgICAgIWRhdGEuY29tYmluZUxheWVyc1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgZ2VvbVR5cGVzLm1hcCgoZ2VvbVR5cGUpID0+XHJcbiAgICAgICAgICAgIHRoaXMuZXhwb3J0U2VydmljZVxyXG4gICAgICAgICAgICAgIC5leHBvcnQoXHJcbiAgICAgICAgICAgICAgICBnZW9tVHlwZS5mZWF0dXJlcyxcclxuICAgICAgICAgICAgICAgIGRhdGEuZm9ybWF0LFxyXG4gICAgICAgICAgICAgICAgZmlsZW5hbWUgKyBnZW9tVHlwZS5nZW9tZXRyeVR5cGUsXHJcbiAgICAgICAgICAgICAgICBkYXRhLmVuY29kaW5nLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXAucHJvamVjdGlvblxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKCkgPT4ge30sXHJcbiAgICAgICAgICAgICAgICAoZXJyb3I6IEVycm9yKSA9PiB0aGlzLm9uRmlsZUV4cG9ydEVycm9yKGVycm9yKSxcclxuICAgICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5vbkZpbGVFeHBvcnRTdWNjZXNzKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICBnZW9tVHlwZS5mZWF0dXJlcy5mb3JFYWNoKChmZWF0dXJlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaXJjbGVUb1BvaW50KGZlYXR1cmUpO1xyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgKGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuQ1NWc2VtaWNvbG9uIHx8XHJcbiAgICAgICAgZGF0YS5mb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5DU1Zjb21tYSkgJiZcclxuICAgICAgZGF0YS5jb21iaW5lTGF5ZXJzXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5leHBvcnRTZXJ2aWNlXHJcbiAgICAgICAgLmV4cG9ydChcclxuICAgICAgICAgIGZlYXR1cmVzQ1NWLFxyXG4gICAgICAgICAgZGF0YS5mb3JtYXQsXHJcbiAgICAgICAgICBmaWxlbmFtZSxcclxuICAgICAgICAgIGRhdGEuZW5jb2RpbmcsXHJcbiAgICAgICAgICB0aGlzLm1hcC5wcm9qZWN0aW9uXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAoKSA9PiB7fSxcclxuICAgICAgICAgIChlcnJvcjogRXJyb3IpID0+IHRoaXMub25GaWxlRXhwb3J0RXJyb3IoZXJyb3IpLFxyXG4gICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm9uRmlsZUV4cG9ydFN1Y2Nlc3MoKTtcclxuXHJcbiAgICAgICAgICAgIGZlYXR1cmVzQ1NWLmZvckVhY2goKGZlYXR1cmUpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmNpcmNsZVRvUG9pbnQoZmVhdHVyZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVUaXRsZUVtcHR5Um93cyhwcmV2aW91c0ZlYXR1cmUsIGN1cnJlbnRGZWF0dXJlKSB7XHJcbiAgICBjb25zdCB0aXRsZVJvdyA9IGN1cnJlbnRGZWF0dXJlLmNsb25lKCk7XHJcbiAgICBjb25zdCBoZWFkZXJSb3cgPSBjdXJyZW50RmVhdHVyZS5jbG9uZSgpO1xyXG4gICAgY29uc3QgZW1wdHlSb3cgPSBjdXJyZW50RmVhdHVyZS5jbG9uZSgpO1xyXG4gICAgY29uc3QgcHJldmlvdXNGZWF0dXJlS2V5czogQXJyYXk8c3RyaW5nPiA9IHByZXZpb3VzRmVhdHVyZS5nZXRLZXlzKCk7XHJcbiAgICBsZXQgZmlyc3RLZXlQcmV2aW91czogc3RyaW5nID0gJyc7XHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBwcmV2aW91c0ZlYXR1cmVLZXlzKSB7XHJcbiAgICAgIGlmIChwcmV2aW91c0ZlYXR1cmVLZXlzW2tleV0gIT09ICdnZW9tZXRyeScpIHtcclxuICAgICAgICBmaXJzdEtleVByZXZpb3VzID0gcHJldmlvdXNGZWF0dXJlS2V5c1trZXldO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY3VycmVudEZlYXR1cmVLZXlzOiBBcnJheTxzdHJpbmc+ID0gY3VycmVudEZlYXR1cmUuZ2V0S2V5cygpO1xyXG4gICAgbGV0IGZpcnN0S2V5Q3VycmVudDogc3RyaW5nID0gJyc7XHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBjdXJyZW50RmVhdHVyZUtleXMpIHtcclxuICAgICAgaWYgKGN1cnJlbnRGZWF0dXJlS2V5c1trZXldICE9PSAnZ2VvbWV0cnknKSB7XHJcbiAgICAgICAgZmlyc3RLZXlDdXJyZW50ID0gY3VycmVudEZlYXR1cmVLZXlzW2tleV07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGFsbEtleXM6IEFycmF5PHN0cmluZz4gPSBjdXJyZW50RmVhdHVyZS5nZXRLZXlzKCk7XHJcbiAgICBwcmV2aW91c0ZlYXR1cmVLZXlzLmZvckVhY2goKHByZXZpb3VzS2V5KSA9PiB7XHJcbiAgICAgIGlmIChhbGxLZXlzLmluY2x1ZGVzKHByZXZpb3VzS2V5KSAmJiBwcmV2aW91c0tleSAhPT0gZmlyc3RLZXlQcmV2aW91cykge1xyXG4gICAgICAgIGFsbEtleXMucHVzaChwcmV2aW91c0tleSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgYWxsS2V5cy51bnNoaWZ0KGZpcnN0S2V5UHJldmlvdXMpO1xyXG5cclxuICAgIGxldCBmaXJzdEtleUFsbDogc3RyaW5nID0gJyc7XHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBhbGxLZXlzKSB7XHJcbiAgICAgIGlmIChhbGxLZXlzW2tleV0gIT09ICdnZW9tZXRyeScpIHtcclxuICAgICAgICBmaXJzdEtleUFsbCA9IGFsbEtleXNba2V5XTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgYWxsS2V5cy5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgY29uc3Qgc2FtZUtleXM6IGJvb2xlYW4gPVxyXG4gICAgICAgIHByZXZpb3VzRmVhdHVyZUtleXMubGVuZ3RoID09PSBjdXJyZW50RmVhdHVyZUtleXMubGVuZ3RoICYmXHJcbiAgICAgICAgcHJldmlvdXNGZWF0dXJlS2V5cy5ldmVyeShcclxuICAgICAgICAgICh2YWx1ZSwgaW5kZXgpID0+IHZhbHVlID09PSBjdXJyZW50RmVhdHVyZUtleXNbaW5kZXhdXHJcbiAgICAgICAgKTtcclxuICAgICAgaWYgKGtleSA9PT0gZmlyc3RLZXlBbGwgJiYgIXNhbWVLZXlzKSB7XHJcbiAgICAgICAgdGl0bGVSb3cuc2V0KFxyXG4gICAgICAgICAga2V5LFxyXG4gICAgICAgICAgY3VycmVudEZlYXR1cmUuZ2V0KCdfZmVhdHVyZVN0b3JlJykubGF5ZXIub3B0aW9ucy50aXRsZSArXHJcbiAgICAgICAgICAgICcgPT09PT09PT09PT09PT09PicsXHJcbiAgICAgICAgICB0cnVlXHJcbiAgICAgICAgKTtcclxuICAgICAgICBoZWFkZXJSb3cuc2V0KGtleSwga2V5LCB0cnVlKTtcclxuICAgICAgICBlbXB0eVJvdy51bnNldChrZXksIHRydWUpO1xyXG4gICAgICB9IGVsc2UgaWYgKGtleSA9PT0gZmlyc3RLZXlBbGwgJiYgc2FtZUtleXMpIHtcclxuICAgICAgICB0aXRsZVJvdy5zZXQoXHJcbiAgICAgICAgICBrZXksXHJcbiAgICAgICAgICBjdXJyZW50RmVhdHVyZS5nZXQoJ19mZWF0dXJlU3RvcmUnKS5sYXllci5vcHRpb25zLnRpdGxlLFxyXG4gICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaGVhZGVyUm93LnNldChrZXksIGtleSwgdHJ1ZSk7XHJcbiAgICAgICAgZW1wdHlSb3cudW5zZXQoa2V5LCB0cnVlKTtcclxuICAgICAgfSBlbHNlIGlmIChrZXkgPT09IGZpcnN0S2V5Q3VycmVudCkge1xyXG4gICAgICAgIHRpdGxlUm93LnNldChcclxuICAgICAgICAgIGtleSxcclxuICAgICAgICAgIGN1cnJlbnRGZWF0dXJlLmdldCgnX2ZlYXR1cmVTdG9yZScpLmxheWVyLm9wdGlvbnMudGl0bGUsXHJcbiAgICAgICAgICB0cnVlXHJcbiAgICAgICAgKTtcclxuICAgICAgICBoZWFkZXJSb3cuc2V0KGtleSwga2V5LCB0cnVlKTtcclxuICAgICAgICBlbXB0eVJvdy51bnNldChrZXksIHRydWUpO1xyXG4gICAgICB9IGVsc2UgaWYgKGtleSAhPT0gJ2dlb21ldHJ5Jykge1xyXG4gICAgICAgIHRpdGxlUm93LnVuc2V0KGtleSwgdHJ1ZSk7XHJcbiAgICAgICAgaGVhZGVyUm93LnNldChrZXksIGtleSwgdHJ1ZSk7XHJcbiAgICAgICAgZW1wdHlSb3cudW5zZXQoa2V5LCB0cnVlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aXRsZVJvdy51bnNldChrZXksIHRydWUpO1xyXG4gICAgICAgIGVtcHR5Um93LnVuc2V0KGtleSwgdHJ1ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghY3VycmVudEZlYXR1cmVLZXlzLmluY2x1ZGVzKGtleSkpIHtcclxuICAgICAgICBoZWFkZXJSb3cudW5zZXQoa2V5LCB0cnVlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBjb25zdCB0aXRsZUVtcHR5Um93cyA9IFt0aXRsZVJvdywgaGVhZGVyUm93LCBlbXB0eVJvd107XHJcbiAgICByZXR1cm4gdGl0bGVFbXB0eVJvd3M7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNpcmNsZVRvUG9pbnQoZmVhdHVyZSkge1xyXG4gICAgY29uc3QgcmFkaXVzOiBudW1iZXIgPSBmZWF0dXJlLmdldCgncmFkJyk7XHJcblxyXG4gICAgaWYgKHJhZGl1cykge1xyXG4gICAgICBjb25zdCBwb2ludCA9IG5ldyBvbFBvaW50KFtcclxuICAgICAgICBmZWF0dXJlLmdldCgnbG9uZ2l0dWRlJyksXHJcbiAgICAgICAgZmVhdHVyZS5nZXQoJ2xhdGl0dWRlJylcclxuICAgICAgXSk7XHJcbiAgICAgIHBvaW50LnRyYW5zZm9ybSgnRVBTRzo0MzI2JywgZmVhdHVyZS5nZXQoJ19wcm9qZWN0aW9uJykpO1xyXG4gICAgICBmZWF0dXJlLnNldEdlb21ldHJ5KHBvaW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRGb3JtKCkge1xyXG4gICAgdGhpcy5pbXBvcnRGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgIGlucHV0UHJvajogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JjZU5hbWluZykge1xyXG4gICAgICB0aGlzLmZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICBmb3JtYXQ6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICBsYXllcnM6IFtbXSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICBsYXllcnNXaXRoU2VsZWN0aW9uOiBbW11dLFxyXG4gICAgICAgIGVuY29kaW5nOiBbRW5jb2RpbmdGb3JtYXQuVVRGOCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICBjb21iaW5lTGF5ZXJzOiBbdHJ1ZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICBzZXBhcmF0b3I6IFtmYWxzZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICBmZWF0dXJlSW5NYXBFeHRlbnQ6IFtmYWxzZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICBuYW1lOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICBmb3JtYXQ6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICBsYXllcnM6IFtbXSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICBsYXllcnNXaXRoU2VsZWN0aW9uOiBbW11dLFxyXG4gICAgICAgIGVuY29kaW5nOiBbRW5jb2RpbmdGb3JtYXQuVVRGOCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICBjb21iaW5lTGF5ZXJzOiBbdHJ1ZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICBzZXBhcmF0b3I6IFtmYWxzZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICBmZWF0dXJlSW5NYXBFeHRlbnQ6IFtmYWxzZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25GaWxlSW1wb3J0U3VjY2VzcyhmaWxlOiBGaWxlLCBmZWF0dXJlczogRmVhdHVyZVtdKSB7XHJcbiAgICBjb25zdCBpbXBvcnRFeHBvcnRPcHRpb25zID0gdGhpcy5jb25maWcuZ2V0Q29uZmlnKFxyXG4gICAgICAnaW1wb3J0RXhwb3J0J1xyXG4gICAgKSBhcyBJbXBvcnRFeHBvcnRTZXJ2aWNlT3B0aW9ucztcclxuICAgIGNvbnN0IGNvbmZpcm1EaWFsb2dTZXJ2aWNlID0gaW1wb3J0RXhwb3J0T3B0aW9ucz8uYWxsb3dUb1N0b3JlTGF5ZXJcclxuICAgICAgPyB0aGlzLmNvbmZpcm1EaWFsb2dTZXJ2aWNlXHJcbiAgICAgIDogdW5kZWZpbmVkO1xyXG4gICAgaWYgKCFpbXBvcnRFeHBvcnRPcHRpb25zPy5pbXBvcnRXaXRoU3R5bGUpIHtcclxuICAgICAgaGFuZGxlRmlsZUltcG9ydFN1Y2Nlc3MoXHJcbiAgICAgICAgZmlsZSxcclxuICAgICAgICBmZWF0dXJlcyxcclxuICAgICAgICB0aGlzLm1hcCxcclxuICAgICAgICB0aGlzLmNvbnRleHRVcmksXHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZSxcclxuICAgICAgICB0aGlzLmxheWVyU2VydmljZSxcclxuICAgICAgICBjb25maXJtRGlhbG9nU2VydmljZVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaGFuZGxlRmlsZUltcG9ydFN1Y2Nlc3MoXHJcbiAgICAgICAgZmlsZSxcclxuICAgICAgICBmZWF0dXJlcyxcclxuICAgICAgICB0aGlzLm1hcCxcclxuICAgICAgICB0aGlzLmNvbnRleHRVcmksXHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZSxcclxuICAgICAgICB0aGlzLmxheWVyU2VydmljZSxcclxuICAgICAgICBjb25maXJtRGlhbG9nU2VydmljZSxcclxuICAgICAgICB0aGlzLnN0eWxlTGlzdFNlcnZpY2UsXHJcbiAgICAgICAgdGhpcy5zdHlsZVNlcnZpY2VcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25GaWxlSW1wb3J0RXJyb3IoZmlsZTogRmlsZSwgZXJyb3I6IEVycm9yKSB7XHJcbiAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xyXG4gICAgaGFuZGxlRmlsZUltcG9ydEVycm9yKGZpbGUsIGVycm9yLCB0aGlzLm1lc3NhZ2VTZXJ2aWNlLCB0aGlzLmZpbGVTaXplTWIpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvblBvcHVwQmxvY2tlZEVycm9yKHByZUNoZWNrOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcclxuICAgIGNvbnN0IGV4dHJhTWVzc2FnZSA9IHByZUNoZWNrXHJcbiAgICAgID8gJ2lnby5nZW8uZXhwb3J0LnBvcHVwQmxvY2tlZC5zZWxlY3RBZ2FpbidcclxuICAgICAgOiAnaWdvLmdlby5leHBvcnQucG9wdXBCbG9ja2VkLnJldHJ5JztcclxuICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICdpZ28uZ2VvLmV4cG9ydC5wb3B1cEJsb2NrZWQudGV4dCcsXHJcbiAgICAgICdpZ28uZ2VvLmV4cG9ydC5wb3B1cEJsb2NrZWQudGl0bGUnLFxyXG4gICAgICB7IHRpbWVPdXQ6IDIwMDAwIH0sXHJcbiAgICAgIHsgZXh0cmFNZXNzYWdlIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uRmlsZUV4cG9ydEVycm9yKGVycm9yOiBFcnJvcikge1xyXG4gICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcclxuICAgIGhhbmRsZUZpbGVFeHBvcnRFcnJvcihlcnJvciwgdGhpcy5tZXNzYWdlU2VydmljZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWRDb25maWcoKSB7XHJcbiAgICBjb25zdCBmb3JjZU5hbWluZ0NvbmZpZyA9IHRoaXMuY29uZmlnLmdldENvbmZpZygnaW1wb3J0RXhwb3J0LmZvcmNlTmFtaW5nJyk7XHJcbiAgICB0aGlzLmZvcmNlTmFtaW5nID1cclxuICAgICAgZm9yY2VOYW1pbmdDb25maWcgIT09IHVuZGVmaW5lZCA/IGZvcmNlTmFtaW5nQ29uZmlnIDogZmFsc2U7XHJcblxyXG4gICAgdGhpcy5jb21wdXRlRm9ybWF0cygpO1xyXG4gICAgdGhpcy5sb2FkRW5jb2RpbmdzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZW5jb2RpbmdEZWZhdWx0VmFsdWUoZm9ybWF0OiBFeHBvcnRGb3JtYXQpIHtcclxuICAgIGlmIChcclxuICAgICAgZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuQ1NWY29tbWEgfHxcclxuICAgICAgZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuQ1NWc2VtaWNvbG9uXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBlbmNvZGluZzogRW5jb2RpbmdGb3JtYXQuTEFUSU4xIH0pO1xyXG4gICAgICByZXR1cm4gRW5jb2RpbmdGb3JtYXQuTEFUSU4xO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBlbmNvZGluZzogRW5jb2RpbmdGb3JtYXQuVVRGOCB9KTtcclxuICAgICAgcmV0dXJuIEVuY29kaW5nRm9ybWF0LlVURjg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWRFbmNvZGluZ3MoKSB7XHJcbiAgICB0aGlzLmVuY29kaW5ncyQubmV4dChFbmNvZGluZ0Zvcm1hdCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbXB1dGVGb3JtYXRzKGxheWVycz86IEFueUxheWVyW10pIHtcclxuICAgIGxldCBhcHBsaWVkZm9ybWF0czogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhFeHBvcnRGb3JtYXQpO1xyXG4gICAgY29uc3QgZm9ybWF0c1R5cGUgPSB7XHJcbiAgICAgIG9ubHlVcmw6IGZhbHNlLFxyXG4gICAgICBvbmx5VmVjdG9yOiBmYWxzZSxcclxuICAgICAgdmVjdG9yQW5kVXJsOiBmYWxzZSxcclxuICAgICAgY3VzdG9tTGlzdDogZmFsc2VcclxuICAgIH07XHJcbiAgICBjb25zdCBjdXN0b21MaXN0ID0gW107XHJcbiAgICBpZiAobGF5ZXJzICYmIGxheWVycy5sZW5ndGgpIHtcclxuICAgICAgbGF5ZXJzLmZvckVhY2goKGxheWVyKSA9PiB7XHJcbiAgICAgICAgaWYgKCFsYXllcikge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmRvd25sb2FkPy5hbGxvd2VkRm9ybWF0cykge1xyXG4gICAgICAgICAgZm9ybWF0c1R5cGUuY3VzdG9tTGlzdCA9IHRydWU7XHJcbiAgICAgICAgICBjdXN0b21MaXN0LnB1c2goe1xyXG4gICAgICAgICAgICBsYXllcjogbGF5ZXIudGl0bGUsXHJcbiAgICAgICAgICAgIGZvcm1hdHM6IHRoaXMudmFsaWRhdGVMaXN0Rm9ybWF0KFxyXG4gICAgICAgICAgICAgIGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5kb3dubG9hZC5hbGxvd2VkRm9ybWF0c1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgIShsYXllciBpbnN0YW5jZW9mIFZlY3RvckxheWVyKSAmJlxyXG4gICAgICAgICAgbGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmRvd25sb2FkICYmXHJcbiAgICAgICAgICBsYXllci5kYXRhU291cmNlLm9wdGlvbnMuZG93bmxvYWQudXJsXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBmb3JtYXRzVHlwZS5vbmx5VXJsID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgbGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmRvd25sb2FkICYmXHJcbiAgICAgICAgICAobGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmRvd25sb2FkLnVybCB8fFxyXG4gICAgICAgICAgICBsYXllci5kYXRhU291cmNlLm9wdGlvbnMuZG93bmxvYWQuZHluYW1pY1VybClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGZvcm1hdHNUeXBlLnZlY3RvckFuZFVybCA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChsYXllciBpbnN0YW5jZW9mIFZlY3RvckxheWVyKSB7XHJcbiAgICAgICAgICBmb3JtYXRzVHlwZS5vbmx5VmVjdG9yID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKGZvcm1hdHNUeXBlLm9ubHlVcmwgPT09IHRydWUgJiYgZm9ybWF0c1R5cGUub25seVZlY3RvciA9PT0gZmFsc2UpIHtcclxuICAgICAgICBhcHBsaWVkZm9ybWF0cyA9IFsnVVJMJ107XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgZm9ybWF0c1R5cGUub25seVZlY3RvciA9PT0gdHJ1ZSAmJlxyXG4gICAgICAgIGZvcm1hdHNUeXBlLm9ubHlVcmwgPT09IGZhbHNlXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuY29tcHV0ZUZvcm1hdHMoKTsgLy8gcmVzZXRcclxuICAgICAgICBpZiAoRXhwb3J0Rm9ybWF0LlVSTCBpbiB0aGlzLmZvcm1hdHMkLnZhbHVlKSB7XHJcbiAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5mb3JtYXRzJC52YWx1ZSkuZmlsdGVyKFxyXG4gICAgICAgICAgICAoa2V5KSA9PiBrZXkgIT09ICdVUkwnXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYXBwbGllZGZvcm1hdHMgPSBrZXlzO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICBmb3JtYXRzVHlwZS52ZWN0b3JBbmRVcmwgPT09IHRydWUgJiZcclxuICAgICAgICBmb3JtYXRzVHlwZS5vbmx5VXJsID09PSBmYWxzZSAmJlxyXG4gICAgICAgIGZvcm1hdHNUeXBlLm9ubHlWZWN0b3IgPT09IGZhbHNlXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuY29tcHV0ZUZvcm1hdHMoKTsgLy8gcmVzZXRcclxuICAgICAgICBpZiAoIShFeHBvcnRGb3JtYXQuVVJMIGluIHRoaXMuZm9ybWF0cyQudmFsdWUpKSB7XHJcbiAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5mb3JtYXRzJC52YWx1ZSk7XHJcbiAgICAgICAgICBrZXlzLnB1c2goJ1VSTCcpO1xyXG4gICAgICAgICAgYXBwbGllZGZvcm1hdHMgPSBrZXlzO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgY29uZmlnSW1wb3J0RXhwb3J0Rm9ybWF0cyA9IHRoaXMuY29uZmlnLmdldENvbmZpZyhcclxuICAgICAgJ2ltcG9ydEV4cG9ydC5mb3JtYXRzJ1xyXG4gICAgKTtcclxuICAgIGlmIChjb25maWdJbXBvcnRFeHBvcnRGb3JtYXRzKSB7XHJcbiAgICAgIGNvbnN0IHZhbGlkYXRlZExpc3RGb3JtYXQgPSB0aGlzLnZhbGlkYXRlTGlzdEZvcm1hdChcclxuICAgICAgICBjb25maWdJbXBvcnRFeHBvcnRGb3JtYXRzXHJcbiAgICAgICk7XHJcbiAgICAgIGFwcGxpZWRmb3JtYXRzID0gYXBwbGllZGZvcm1hdHMuZmlsdGVyKChhZikgPT5cclxuICAgICAgICB2YWxpZGF0ZWRMaXN0Rm9ybWF0LmluY2x1ZGVzKGFmKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKGZvcm1hdHNUeXBlLmN1c3RvbUxpc3QpIHtcclxuICAgICAgbGV0IGNvbW1vbkZvcm1hdHM7XHJcbiAgICAgIGNvbnN0IGxheWVyc1dpdGhDdXN0b21Gb3JtYXRzID0gW107XHJcbiAgICAgIGxldCBwcmV2aW91c0N1c3RvbUxpc3RGb3JtYXRzID0gY3VzdG9tTGlzdFswXS5mb3JtYXRzO1xyXG4gICAgICBjdXN0b21MaXN0Lm1hcCgobGlzdCkgPT4ge1xyXG4gICAgICAgIGxheWVyc1dpdGhDdXN0b21Gb3JtYXRzLnB1c2gobGlzdC5sYXllcik7XHJcbiAgICAgICAgY29tbW9uRm9ybWF0cyA9IGxpc3QuZm9ybWF0cy5maWx0ZXIoKHZhbHVlKSA9PlxyXG4gICAgICAgICAgcHJldmlvdXNDdXN0b21MaXN0Rm9ybWF0cy5pbmNsdWRlcyh2YWx1ZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHByZXZpb3VzQ3VzdG9tTGlzdEZvcm1hdHMgPSBsaXN0LmZvcm1hdHM7XHJcbiAgICAgIH0pO1xyXG4gICAgICBjb25zdCBmaW5hbEZvcm1hdHMgPSBjb21tb25Gb3JtYXRzLmZpbHRlcigodmFsdWUpID0+XHJcbiAgICAgICAgYXBwbGllZGZvcm1hdHMuaW5jbHVkZXModmFsdWUpXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChmaW5hbEZvcm1hdHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuZm9ybWF0cyQubmV4dChzdHJFbnVtKGZpbmFsRm9ybWF0cykpO1xyXG5cclxuICAgICAgICBpZiAobGF5ZXJzICYmIGxheWVycy5sZW5ndGgpIHtcclxuICAgICAgICAgIGlmIChsYXllcnMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFsZXJ0KFxyXG4gICAgICAgICAgICAgICdpZ28uZ2VvLmV4cG9ydC5jdXN0b21MaXN0LnRleHQnLFxyXG4gICAgICAgICAgICAgICdpZ28uZ2VvLmV4cG9ydC5jdXN0b21MaXN0LnRpdGxlJyxcclxuICAgICAgICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgeyB2YWx1ZTogbGF5ZXJzV2l0aEN1c3RvbUZvcm1hdHMuam9pbigpIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5mb3JtYXRzJC5uZXh0KFtdKTtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFsZXJ0KFxyXG4gICAgICAgICAgJ2lnby5nZW8uZXhwb3J0Lm5vRm9ybWF0LnRleHQnLFxyXG4gICAgICAgICAgJ2lnby5nZW8uZXhwb3J0Lm5vRm9ybWF0LnRpdGxlJ1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5mb3JtYXRzJC5uZXh0KHN0ckVudW0oYXBwbGllZGZvcm1hdHMpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdmFsaWRhdGVMaXN0Rm9ybWF0KGZvcm1hdHM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIGZvcm1hdHNcclxuICAgICAgLmZpbHRlcigoZm9ybWF0KSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5DU1Zjb21tYS50b1VwcGVyQ2FzZSgpIHx8XHJcbiAgICAgICAgICBmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LkNTVnNlbWljb2xvbi50b1VwcGVyQ2FzZSgpIHx8XHJcbiAgICAgICAgICBmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LkdNTC50b1VwcGVyQ2FzZSgpIHx8XHJcbiAgICAgICAgICBmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LkdQWC50b1VwcGVyQ2FzZSgpIHx8XHJcbiAgICAgICAgICBmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0Lkdlb0pTT04udG9VcHBlckNhc2UoKSB8fFxyXG4gICAgICAgICAgZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5LTUwudG9VcHBlckNhc2UoKSB8fFxyXG4gICAgICAgICAgZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5TaGFwZWZpbGUudG9VcHBlckNhc2UoKSB8fFxyXG4gICAgICAgICAgZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5VUkwudG9VcHBlckNhc2UoKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgcmV0dXJuIGZvcm1hdDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5tYXAoKGZvcm1hdCkgPT4ge1xyXG4gICAgICAgIGlmIChmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LkNTVmNvbW1hLnRvVXBwZXJDYXNlKCkpIHtcclxuICAgICAgICAgIGZvcm1hdCA9IEV4cG9ydEZvcm1hdC5DU1Zjb21tYTtcclxuICAgICAgICAgIHJldHVybiBmb3JtYXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LkNTVnNlbWljb2xvbi50b1VwcGVyQ2FzZSgpKSB7XHJcbiAgICAgICAgICBmb3JtYXQgPSBFeHBvcnRGb3JtYXQuQ1NWc2VtaWNvbG9uO1xyXG4gICAgICAgICAgcmV0dXJuIGZvcm1hdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuR01MLnRvVXBwZXJDYXNlKCkpIHtcclxuICAgICAgICAgIGZvcm1hdCA9IEV4cG9ydEZvcm1hdC5HTUw7XHJcbiAgICAgICAgICByZXR1cm4gZm9ybWF0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5HUFgudG9VcHBlckNhc2UoKSkge1xyXG4gICAgICAgICAgZm9ybWF0ID0gRXhwb3J0Rm9ybWF0LkdQWDtcclxuICAgICAgICAgIHJldHVybiBmb3JtYXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0Lkdlb0pTT04udG9VcHBlckNhc2UoKSkge1xyXG4gICAgICAgICAgZm9ybWF0ID0gRXhwb3J0Rm9ybWF0Lkdlb0pTT047XHJcbiAgICAgICAgICByZXR1cm4gZm9ybWF0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5LTUwudG9VcHBlckNhc2UoKSkge1xyXG4gICAgICAgICAgZm9ybWF0ID0gRXhwb3J0Rm9ybWF0LktNTDtcclxuICAgICAgICAgIHJldHVybiBmb3JtYXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LlNoYXBlZmlsZS50b1VwcGVyQ2FzZSgpKSB7XHJcbiAgICAgICAgICBmb3JtYXQgPSBFeHBvcnRGb3JtYXQuU2hhcGVmaWxlO1xyXG4gICAgICAgICAgcmV0dXJuIGZvcm1hdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LlVSTC50b1VwcGVyQ2FzZSgpKSB7XHJcbiAgICAgICAgICBmb3JtYXQgPSBFeHBvcnRGb3JtYXQuVVJMO1xyXG4gICAgICAgICAgcmV0dXJuIGZvcm1hdDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG1vZGVDaGFuZ2VkKG1vZGUpIHtcclxuICAgIHRoaXMuc2VsZWN0TW9kZS5lbWl0KG1vZGUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkZpbGVFeHBvcnRTdWNjZXNzKCkge1xyXG4gICAgaGFuZGxlRmlsZUV4cG9ydFN1Y2Nlc3ModGhpcy5tZXNzYWdlU2VydmljZSk7XHJcbiAgfVxyXG5cclxuICBvbkltcG9ydEV4cG9ydENoYW5nZShldmVudCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZE1vZGUgPSBldmVudC52YWx1ZTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImltcG9ydC1leHBvcnQtdG9nZ2xlIG1hdC10eXBvZ3JhcGh5XCI+XHJcbiAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwXHJcbiAgICBbdmFsdWVdPVwic2VsZWN0ZWRNb2RlXCJcclxuICAgIChjaGFuZ2UpPVwib25JbXBvcnRFeHBvcnRDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgPlxyXG4gICAgPG1hdC1idXR0b24tdG9nZ2xlIFt2YWx1ZV09XCInaW1wb3J0J1wiPlxyXG4gICAgICB7eyAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmltcG9ydFRhYlRpdGxlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cclxuICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSBbdmFsdWVdPVwiJ2V4cG9ydCdcIj5cclxuICAgICAge3sgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRUYWJUaXRsZScgfCB0cmFuc2xhdGUgfX1cclxuICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XHJcbiAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cclxuPC9kaXY+XHJcblxyXG48Zm9ybVxyXG4gIGNsYXNzPVwiaWdvLWZvcm1cIlxyXG4gIFtmb3JtR3JvdXBdPVwiaW1wb3J0Rm9ybVwiXHJcbiAgKm5nSWY9XCJzZWxlY3RlZE1vZGUgPT09ICdpbXBvcnQnXCJcclxuPlxyXG4gIDxkaXYgY2xhc3M9XCJpZ28taW5wdXQtY29udGFpbmVyXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3tcclxuICAgICAgICAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmltcG9ydFByb2pQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcclxuICAgICAgfX08L21hdC1sYWJlbD5cclxuICAgICAgPG1hdC1zZWxlY3QgWyh2YWx1ZSldPVwiaW5wdXRQcm9qXCI+XHJcbiAgICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBwcm9qZWN0aW9uIG9mIHByb2plY3Rpb25zJCB8IGFzeW5jXCJcclxuICAgICAgICAgIFt2YWx1ZV09XCJwcm9qZWN0aW9uXCJcclxuICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxwIG1hdExpc3RJdGVtVGl0bGUgKm5nSWY9XCJwcm9qZWN0aW9uLnRyYW5zbGF0ZUtleVwiPlxyXG4gICAgICAgICAgICB7e1xyXG4gICAgICAgICAgICAgICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0ucHJvamVjdGlvbnMuJyArIHByb2plY3Rpb24udHJhbnNsYXRlS2V5XHJcbiAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZTogcHJvamVjdGlvblxyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgPHAgbWF0TGlzdEl0ZW1UaXRsZSAqbmdJZj1cIiFwcm9qZWN0aW9uLnRyYW5zbGF0ZUtleVwiPlxyXG4gICAgICAgICAgICB7eyBwcm9qZWN0aW9uLmFsaWFzIH19XHJcbiAgICAgICAgICA8L3A+XHJcbiAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2XHJcbiAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxyXG4gICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICBbbWF0VG9vbHRpcF09XCJcclxuICAgICAgaW1wb3J0Rm9ybS5pbnZhbGlkXHJcbiAgICAgICAgPyAoJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5wcm9qZWN0aW9ucy5jaG9vc2UnIHwgdHJhbnNsYXRlKVxyXG4gICAgICAgIDogKCdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uaW1wb3J0QnV0dG9uJyB8IHRyYW5zbGF0ZSlcclxuICAgIFwiXHJcbiAgICBjbGFzcz1cImlnby1mb3JtLWJ1dHRvbi1ncm91cFwiXHJcbiAgPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICBbZGlzYWJsZWRdPVwiaW1wb3J0Rm9ybS5pbnZhbGlkIHx8IChsb2FkaW5nJCB8IGFzeW5jKVwiXHJcbiAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKClcIlxyXG4gICAgPlxyXG4gICAgICB7eyAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmltcG9ydEJ1dHRvbicgfCB0cmFuc2xhdGUgfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGlnby1zcGlubmVyIFtzaG93bl09XCJsb2FkaW5nJCB8IGFzeW5jXCI+PC9pZ28tc3Bpbm5lcj5cclxuICAgIDxpbnB1dFxyXG4gICAgICBoaWRkZW5cclxuICAgICAgI2ZpbGVJbnB1dFxyXG4gICAgICB0eXBlPVwiZmlsZVwiXHJcbiAgICAgIFtzdHlsZS5kaXNwbGF5XT1cIidub25lJ1wiXHJcbiAgICAgIChjbGljayk9XCJmaWxlSW5wdXQudmFsdWUgPSBudWxsXCJcclxuICAgICAgKGNoYW5nZSk9XCJpbXBvcnRGaWxlcygkYW55KCRldmVudC50YXJnZXQpLmZpbGVzKVwiXHJcbiAgICAvPlxyXG4gIDwvZGl2PlxyXG48L2Zvcm0+XHJcbjxzZWN0aW9uIGNsYXNzPVwibWF0LXR5cG9ncmFwaHlcIiAqbmdJZj1cInNlbGVjdGVkTW9kZSA9PT0gJ2ltcG9ydCdcIj5cclxuICA8ZGl2ICpuZ0lmPVwiaW1wb3J0SHRtbENsYXJpZmljYXRpb25zID09PSAnJ1wiPlxyXG4gICAgPGg0Pnt7ICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uaW1wb3J0Q2xhcmlmaWNhdGlvbnMnIHwgdHJhbnNsYXRlIH19PC9oND5cclxuICAgIDx1bD5cclxuICAgICAgPGxpPlxyXG4gICAgICAgIHt7XHJcbiAgICAgICAgICAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmltcG9ydFNpemVNYXgnXHJcbiAgICAgICAgICAgIHwgdHJhbnNsYXRlOiB7IHNpemU6IGZpbGVTaXplTWIgfVxyXG4gICAgICAgIH19XHJcbiAgICAgIDwvbGk+XHJcbiAgICAgIDxsaT5cclxuICAgICAgICB7eyAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmltcG9ydEZvcm1hdEF1dGhvcml6ZWQnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgIDwvbGk+XHJcbiAgICAgIDxsaT57eyAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmltcG9ydFNocFppcCcgfCB0cmFuc2xhdGUgfX08L2xpPlxyXG4gICAgPC91bD5cclxuICA8L2Rpdj5cclxuICA8aWdvLWN1c3RvbS1odG1sXHJcbiAgICAqbmdJZj1cImltcG9ydEh0bWxDbGFyaWZpY2F0aW9ucyAhPT0gJydcIlxyXG4gICAgY2xhc3M9XCJtYXQtdHlwb2dyYXBoeVwiXHJcbiAgICBbaHRtbF09XCJpbXBvcnRIdG1sQ2xhcmlmaWNhdGlvbnNcIlxyXG4gID5cclxuICA8L2lnby1jdXN0b20taHRtbD5cclxuPC9zZWN0aW9uPlxyXG5cclxuPHNlY3Rpb25cclxuICBjbGFzcz1cIm1hdC10eXBvZ3JhcGh5XCJcclxuICAqbmdJZj1cIihleHBvcnRhYmxlTGF5ZXJzJCB8IGFzeW5jKS5sZW5ndGggPT09IDAgJiYgc2VsZWN0ZWRNb2RlID09PSAnZXhwb3J0J1wiXHJcbj5cclxuICA8aDQ+e3sgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnROb0xheWVyc0V4cG9ydGFibGUnIHwgdHJhbnNsYXRlIH19PC9oND5cclxuPC9zZWN0aW9uPlxyXG5cclxuPGZvcm1cclxuICBjbGFzcz1cImlnby1mb3JtXCJcclxuICBbZm9ybUdyb3VwXT1cImZvcm1cIlxyXG4gICpuZ0lmPVwiKGV4cG9ydGFibGVMYXllcnMkIHwgYXN5bmMpLmxlbmd0aCA+IDAgJiYgc2VsZWN0ZWRNb2RlID09PSAnZXhwb3J0J1wiXHJcbj5cclxuICA8ZGl2IGNsYXNzPVwiaWdvLWlucHV0LWNvbnRhaW5lclwiPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LWxhYmVsPnt7XHJcbiAgICAgICAgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRMYXllclBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVxyXG4gICAgICB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8bWF0LXNlbGVjdCBbKHZhbHVlKV09XCJsYXllcnNcIiBtdWx0aXBsZT5cclxuICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyPlxyXG4gICAgICAgICAge3sgbGF5ZXJzLmxlbmd0aCA/IGdldExheWVyVGl0bGVCeUlkKGxheWVyc1swXSkgOiAnJyB9fVxyXG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJsYXllcnMubGVuZ3RoID4gMVwiIGNsYXNzPVwiZXhwb3J0LXNlbGVjdC10cmlnZ2VyXCI+XHJcbiAgICAgICAgICAgICgre3sgbGF5ZXJzLmxlbmd0aCAtIDEgfX1cclxuICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAobGF5ZXJzPy5sZW5ndGggPT09IDJcclxuICAgICAgICAgICAgICAgID8gJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5vdGhlcidcclxuICAgICAgICAgICAgICAgIDogJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5vdGhlcnMnXHJcbiAgICAgICAgICAgICAgKSB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICB9fSlcclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L21hdC1zZWxlY3QtdHJpZ2dlcj5cclxuICAgICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGxheWVyIG9mIGV4cG9ydGFibGVMYXllcnMkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAnaWdvLWV4cG9ydC1sYXllci1tYXQtb3B0aW9uJzogbGF5ZXJIYXNTZWxlY3RlZEZlYXR1cmVzKGxheWVyKVxyXG4gICAgICAgICAgfVwiXHJcbiAgICAgICAgICBbdmFsdWVdPVwibGF5ZXIuaWRcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPHAgbWF0TGlzdEl0ZW1UaXRsZT57eyBsYXllci50aXRsZSB9fTwvcD5cclxuICAgICAgICAgIDxwIG1hdExpc3RJdGVtVGl0bGU+XHJcbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJsYXllckhhc1NlbGVjdGVkRmVhdHVyZXMobGF5ZXIpXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwib25seVNlbGVjdGVkQ2xpY2soJGV2ZW50LCBsYXllci5pZClcIlxyXG4gICAgICAgICAgICAgIChjaGVja2VkKT1cImluTGF5ZXJzSWRUb0V4cG9ydFNlbGVjdGlvbk9ubHkobGF5ZXIpXCJcclxuICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9ubHlTZWxlY3RlZCgkZXZlbnQsIGxheWVyLmlkKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c21hbGw+e3tcclxuICAgICAgICAgICAgICAgICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZXhwb3J0U2VsZWN0ZWRGZWF0dXJlJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgIH19PC9zbWFsbD5cclxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgPC9wPlxyXG4gICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImlnby1pbnB1dC1jb250YWluZXJcIj5cclxuICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgPG1hdC1sYWJlbD57e1xyXG4gICAgICAgICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZXhwb3J0Rm9ybWF0UGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXHJcbiAgICAgIH19PC9tYXQtbGFiZWw+XHJcbiAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImZvcm1hdFwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoZm9ybWF0cyQgfCBhc3luYykubGVuZ3RoICE9PSAwXCI+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgZm9ybWF0IG9mIGZvcm1hdHMkIHwgYXN5bmMgfCBrZXl2YWx1ZVwiXHJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJmb3JtYXQua2V5XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3sgJ2lnby5nZW8uZXhwb3J0LmZvcm1hdC4nICsgZm9ybWF0LnZhbHVlIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gKm5nSWY9XCIoZm9ybWF0cyQgfCBhc3luYykubGVuZ3RoID09PSAwXCIgZGlzYWJsZWQ9XCJ0cnVlXCI+XHJcbiAgICAgICAgICB7eyAnaWdvLmdlby5leHBvcnQubm9Gb3JtYXQudGl0bGUnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2XHJcbiAgICBjbGFzcz1cImlnby1pbnB1dC1jb250YWluZXJcIlxyXG4gICAgKm5nSWY9XCJmb3JjZU5hbWluZyAmJiBmb3JtLnZhbHVlLmZvcm1hdCAhPT0gJ1VSTCdcIlxyXG4gID5cclxuICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgPGlucHV0XHJcbiAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCJcclxuICAgICAgICBwbGFjZWhvbGRlcj1cInt7XHJcbiAgICAgICAgICAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydEZpbGVOYW1lUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgfX1cIlxyXG4gICAgICAvPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJpZ28taW5wdXQtY29udGFpbmVyXCJcclxuICAgICpuZ0lmPVwiXHJcbiAgICAgIGZvcm0udmFsdWUuZm9ybWF0ID09PSAnQ1NWY29tbWEnIHx8IGZvcm0udmFsdWUuZm9ybWF0ID09PSAnQ1NWc2VtaWNvbG9uJ1xyXG4gICAgXCJcclxuICA+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3tcclxuICAgICAgICAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmVuY29kaW5nUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXHJcbiAgICAgIH19PC9tYXQtbGFiZWw+XHJcbiAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImVuY29kaW5nXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihlbmNvZGluZ3MkIHwgYXN5bmMpLmxlbmd0aCAhPT0gMFwiPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGVuY29kaW5nIG9mIGVuY29kaW5ncyQgfCBhc3luYyB8IGtleXZhbHVlXCJcclxuICAgICAgICAgICAgW3ZhbHVlXT1cImVuY29kaW5nLmtleVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7ICdpZ28uZ2VvLmV4cG9ydC5lbmNvZGluZy4nICsgZW5jb2RpbmcudmFsdWUgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJleHBvcnQtY29tYmluZS1sYXllcnMgbWF0LXR5cG9ncmFwaHlcIlxyXG4gICAgKm5nSWY9XCJcclxuICAgICAgbGF5ZXJzLmxlbmd0aCA+IDEgJiZcclxuICAgICAgKGZvcm0udmFsdWUuZm9ybWF0ID09PSAnQ1NWY29tbWEnIHx8IGZvcm0udmFsdWUuZm9ybWF0ID09PSAnQ1NWc2VtaWNvbG9uJylcclxuICAgIFwiXHJcbiAgPlxyXG4gICAgPG1hdC1zbGlkZS10b2dnbGVcclxuICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY29tYmluZUxheWVyc1wiXHJcbiAgICAgIFtsYWJlbFBvc2l0aW9uXT1cIidiZWZvcmUnXCJcclxuICAgID5cclxuICAgICAge3sgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRDb21iaW5lUmVzdWx0cycgfCB0cmFuc2xhdGUgfX1cclxuICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJleHBvcnQtc2VwYXJhdG9yIG1hdC10eXBvZ3JhcGh5XCJcclxuICAgICpuZ0lmPVwiXHJcbiAgICAgIGxheWVycy5sZW5ndGggPiAxICYmXHJcbiAgICAgIChmb3JtLnZhbHVlLmZvcm1hdCA9PT0gJ0NTVmNvbW1hJyB8fFxyXG4gICAgICAgIGZvcm0udmFsdWUuZm9ybWF0ID09PSAnQ1NWc2VtaWNvbG9uJykgJiZcclxuICAgICAgZm9ybS52YWx1ZS5jb21iaW5lTGF5ZXJzXHJcbiAgICBcIlxyXG4gID5cclxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cInNlcGFyYXRvclwiIFtsYWJlbFBvc2l0aW9uXT1cIidiZWZvcmUnXCI+XHJcbiAgICAgIHt7ICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZXhwb3J0U2VwYXJhdG9yJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2XHJcbiAgICBjbGFzcz1cImV4cG9ydC1vcHRpb25zIG1hdC10eXBvZ3JhcGh5XCJcclxuICAgICpuZ0lmPVwiZm9ybS52YWx1ZS5mb3JtYXQgIT09ICdVUkwnXCJcclxuICA+XHJcbiAgICA8bWF0LXNsaWRlLXRvZ2dsZVxyXG4gICAgICBmb3JtQ29udHJvbE5hbWU9XCJmZWF0dXJlSW5NYXBFeHRlbnRcIlxyXG4gICAgICBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiXHJcbiAgICA+XHJcbiAgICAgIHt7ICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZXhwb3J0RmVhdHVyZUluRXh0ZW50JyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiaWdvLWZvcm0tYnV0dG9uLWdyb3VwXCI+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiIWZvcm0udmFsaWQgfHwgKGxvYWRpbmckIHwgYXN5bmMpXCJcclxuICAgICAgKGNsaWNrKT1cImhhbmRsZUV4cG9ydEZvcm1TdWJtaXQoZm9ybS52YWx1ZSlcIlxyXG4gICAgPlxyXG4gICAgICB7e1xyXG4gICAgICAgIGZvcm0udmFsdWUuZm9ybWF0ICE9PSAnVVJMJ1xyXG4gICAgICAgICAgPyAoJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRCdXR0b24nIHwgdHJhbnNsYXRlKVxyXG4gICAgICAgICAgOiBmb3JtLnZhbHVlLmxheWVycy5sZW5ndGggPiAxXHJcbiAgICAgICAgICAgID8gKCdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZXhwb3J0QnV0dG9uTGlua3MnIHwgdHJhbnNsYXRlKVxyXG4gICAgICAgICAgICA6ICgnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydEJ1dHRvbkxpbmsnIHwgdHJhbnNsYXRlKVxyXG4gICAgICB9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8aWdvLXNwaW5uZXIgW3Nob3duXT1cImxvYWRpbmckIHwgYXN5bmNcIj48L2lnby1zcGlubmVyPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8aWdvLWN1c3RvbS1odG1sXHJcbiAgICAqbmdJZj1cImV4cG9ydEh0bWxDbGFyaWZpY2F0aW9ucyAhPT0gJydcIlxyXG4gICAgY2xhc3M9XCJtYXQtdHlwb2dyYXBoeVwiXHJcbiAgICBbaHRtbF09XCJleHBvcnRIdG1sQ2xhcmlmaWNhdGlvbnNcIlxyXG4gID5cclxuICA8L2lnby1jdXN0b20taHRtbD5cclxuPC9mb3JtPlxyXG4iXX0=
|