@igo2/geo 17.0.0 → 17.0.1-next.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +4 -4
- package/esm2022/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +6 -6
- package/esm2022/lib/catalog/catalog-browser/catalog-browser.component.mjs +4 -4
- package/esm2022/lib/catalog/catalog-browser/catalog-browser.module.mjs +4 -4
- package/esm2022/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +3 -3
- package/esm2022/lib/catalog/catalog-library/catalog-library-item.component.mjs +3 -3
- package/esm2022/lib/catalog/catalog-library/catalog-library.component.mjs +4 -4
- 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.abstract.mjs +1 -1
- package/esm2022/lib/catalog/shared/catalog.interface.mjs +1 -1
- package/esm2022/lib/catalog/shared/catalog.service.mjs +17 -21
- package/esm2022/lib/datasource/shared/capabilities.interface.mjs +3 -1
- package/esm2022/lib/datasource/shared/capabilities.service.mjs +3 -3
- package/esm2022/lib/datasource/shared/datasource.service.mjs +6 -5
- package/esm2022/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +5 -3
- package/esm2022/lib/datasource/shared/datasources/carto-datasource.mjs +4 -2
- package/esm2022/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/cluster-datasource.mjs +4 -2
- package/esm2022/lib/datasource/shared/datasources/datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/datasource.mjs +2 -2
- package/esm2022/lib/datasource/shared/datasources/feature-datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/feature-datasource.mjs +4 -2
- package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +4 -2
- package/esm2022/lib/datasource/shared/datasources/mvt-datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/mvt-datasource.mjs +4 -2
- package/esm2022/lib/datasource/shared/datasources/osm-datasource.mjs +4 -2
- package/esm2022/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +4 -2
- package/esm2022/lib/datasource/shared/datasources/tiledebug-datasource.mjs +4 -2
- package/esm2022/lib/datasource/shared/datasources/websocket-datasource.mjs +6 -5
- package/esm2022/lib/datasource/shared/datasources/wfs-datasource.mjs +4 -2
- package/esm2022/lib/datasource/shared/datasources/wfs.service.mjs +7 -6
- package/esm2022/lib/datasource/shared/datasources/wms-datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/wms-datasource.mjs +4 -2
- package/esm2022/lib/datasource/shared/datasources/wms-wfs.utils.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/wmts-datasource.mjs +4 -2
- package/esm2022/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/xyz-datasource.mjs +4 -2
- package/esm2022/lib/datasource/shared/options/options-api.service.mjs +4 -4
- package/esm2022/lib/directions/directions-buttons/directions-buttons.component.mjs +4 -4
- package/esm2022/lib/directions/directions-inputs/directions-inputs.component.mjs +4 -4
- package/esm2022/lib/directions/directions-results/directions-results.component.mjs +3 -3
- package/esm2022/lib/directions/directions-sources/osrm-directions-source.mjs +3 -3
- package/esm2022/lib/directions/directions.component.mjs +6 -7
- package/esm2022/lib/directions/directions.module.mjs +4 -4
- package/esm2022/lib/directions/shared/directions.interface.mjs +1 -1
- package/esm2022/lib/directions/shared/directions.service.mjs +12 -11
- package/esm2022/lib/directions/shared/directions.utils.mjs +3 -3
- package/esm2022/lib/directions/shared/store.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 +3 -3
- package/esm2022/lib/draw/draw/draw-layer-popup.component.mjs +4 -4
- package/esm2022/lib/draw/draw/draw-popup.component.mjs +9 -9
- package/esm2022/lib/draw/draw/draw-shorcuts.component.mjs +3 -3
- package/esm2022/lib/draw/draw/draw.component.mjs +15 -19
- 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 +4 -4
- package/esm2022/lib/draw/shared/draw.interface.mjs +1 -1
- package/esm2022/lib/draw/shared/draw.utils.mjs +3 -3
- package/esm2022/lib/feature/feature-details/feature-details.component.mjs +6 -6
- 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 +5 -6
- package/esm2022/lib/feature/feature-form/feature-form.module.mjs +4 -4
- package/esm2022/lib/feature/feature.module.mjs +4 -4
- package/esm2022/lib/feature/shared/feature.interfaces.mjs +1 -1
- package/esm2022/lib/feature/shared/feature.utils.mjs +1 -2
- package/esm2022/lib/feature/shared/store.mjs +4 -4
- package/esm2022/lib/feature/shared/strategies/geo-properties.mjs +2 -2
- package/esm2022/lib/feature/shared/strategies/loading-layer.mjs +2 -3
- package/esm2022/lib/feature/shared/strategies/search.mjs +2 -3
- package/esm2022/lib/feature/shared/strategies/selection.mjs +1 -1
- package/esm2022/lib/filter/filter.module.mjs +4 -4
- package/esm2022/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +5 -6
- package/esm2022/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +5 -5
- package/esm2022/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +9 -29
- package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +8 -9
- package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +5 -5
- package/esm2022/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +5 -6
- package/esm2022/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +4 -4
- 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 +5 -6
- package/esm2022/lib/filter/shared/filterable-datasource.pipe.mjs +3 -3
- package/esm2022/lib/filter/shared/ogc-filter-time.service.mjs +5 -6
- package/esm2022/lib/filter/shared/ogc-filter.interface.mjs +1 -1
- package/esm2022/lib/filter/shared/ogc-filter.mjs +3 -2
- package/esm2022/lib/filter/shared/ogc-filter.service.mjs +5 -6
- package/esm2022/lib/filter/shared/spatial-filter.service.mjs +7 -7
- package/esm2022/lib/filter/shared/time-filter.service.mjs +5 -6
- package/esm2022/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +5 -5
- package/esm2022/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +3 -3
- package/esm2022/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +7 -8
- package/esm2022/lib/filter/time-filter-button/time-filter-button.component.mjs +5 -6
- package/esm2022/lib/filter/time-filter-form/time-filter-form.component.mjs +17 -17
- package/esm2022/lib/filter/time-filter-item/time-filter-item.component.mjs +4 -4
- 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 +5 -9
- package/esm2022/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +7 -8
- package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +4 -4
- 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/geometry/shared/controls/draw.mjs +1 -1
- package/esm2022/lib/geometry/shared/controls/modify.mjs +1 -4
- package/esm2022/lib/geometry/shared/controls/slice.mjs +3 -3
- package/esm2022/lib/geometry/shared/geometry.errors.mjs +1 -3
- package/esm2022/lib/geometry/shared/geometry.utils.mjs +2 -11
- package/esm2022/lib/import-export/export-button/export-button.component.mjs +5 -6
- package/esm2022/lib/import-export/import-export/import-export.component.mjs +25 -18
- package/esm2022/lib/import-export/import-export.module.mjs +4 -4
- package/esm2022/lib/import-export/shared/drop-geo-file.directive.mjs +4 -4
- package/esm2022/lib/import-export/shared/export.service.mjs +5 -4
- package/esm2022/lib/import-export/shared/export.utils.mjs +2 -2
- 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 +4 -4
- package/esm2022/lib/layer/layer-legend/layer-legend.component.mjs +7 -7
- package/esm2022/lib/layer/layer-legend-item/layer-legend-item.component.mjs +4 -4
- package/esm2022/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +5 -5
- package/esm2022/lib/layer/layer-legend-list/layer-legend-list.component.mjs +5 -6
- package/esm2022/lib/layer/layer-list/layer-list-binding.directive.mjs +3 -3
- package/esm2022/lib/layer/layer-list/layer-list.component.mjs +4 -4
- package/esm2022/lib/layer/layer-list-tool/layer-list-tool.component.mjs +4 -4
- package/esm2022/lib/layer/layer-list-tool/layer-list-tool.service.mjs +5 -6
- package/esm2022/lib/layer/layer.module.mjs +4 -4
- package/esm2022/lib/layer/shared/clusterParam.mjs +1 -1
- package/esm2022/lib/layer/shared/layer.service.mjs +6 -5
- package/esm2022/lib/layer/shared/layers/image-layer.mjs +2 -2
- package/esm2022/lib/layer/shared/layers/layer.interface.mjs +1 -1
- package/esm2022/lib/layer/shared/layers/layer.mjs +1 -3
- package/esm2022/lib/layer/shared/layers/tile-layer.mjs +2 -2
- package/esm2022/lib/layer/shared/layers/vector-layer.mjs +5 -5
- package/esm2022/lib/layer/shared/layers/vectortile-layer.mjs +3 -3
- package/esm2022/lib/layer/track-feature-button/track-feature-button.component.mjs +6 -7
- package/esm2022/lib/layer/utils/outputLegend.mjs +3 -3
- package/esm2022/lib/layer/utils/vector-watcher.mjs +9 -9
- package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +3 -3
- 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 +3 -3
- package/esm2022/lib/map/info-section/info-section.component.mjs +5 -6
- package/esm2022/lib/map/map-browser/map-browser.component.mjs +3 -3
- package/esm2022/lib/map/map-center/map-center.component.mjs +9 -9
- package/esm2022/lib/map/map.module.mjs +4 -4
- package/esm2022/lib/map/menu-button/menu-button.component.mjs +3 -3
- package/esm2022/lib/map/offline-button/offline-button.component.mjs +5 -6
- package/esm2022/lib/map/rotation-button/rotation-button.component.mjs +5 -6
- package/esm2022/lib/map/shared/controllers/geolocation.mjs +10 -10
- package/esm2022/lib/map/shared/controllers/view.mjs +3 -3
- package/esm2022/lib/map/shared/hover-feature.directive.mjs +8 -11
- package/esm2022/lib/map/shared/linkedLayers.utils.mjs +5 -5
- package/esm2022/lib/map/shared/map-pointer-position.directive.mjs +4 -4
- package/esm2022/lib/map/shared/map.mjs +4 -4
- package/esm2022/lib/map/shared/map.service.mjs +5 -6
- package/esm2022/lib/map/shared/map.utils.mjs +2 -3
- package/esm2022/lib/map/shared/mapOffline.directive.mjs +3 -3
- package/esm2022/lib/map/shared/projection.service.mjs +3 -3
- package/esm2022/lib/map/shared/projection.utils.mjs +2 -3
- package/esm2022/lib/map/swipe-control/swipe-control.component.mjs +7 -6
- package/esm2022/lib/map/utils/layer-watcher.mjs +4 -2
- package/esm2022/lib/map/wake-lock-button/wake-lock-button.component.mjs +5 -4
- package/esm2022/lib/map/zoom-button/zoom-button.component.mjs +5 -6
- package/esm2022/lib/measure/measure.module.mjs +4 -4
- package/esm2022/lib/measure/measurer/measure-format.pipe.mjs +5 -5
- package/esm2022/lib/measure/measurer/measurer-dialog.component.mjs +3 -3
- package/esm2022/lib/measure/measurer/measurer-item.component.mjs +5 -6
- package/esm2022/lib/measure/measurer/measurer.component.mjs +8 -16
- package/esm2022/lib/measure/measurer/measurer.module.mjs +4 -4
- package/esm2022/lib/measure/shared/measure.interfaces.mjs +1 -1
- 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 +5 -6
- package/esm2022/lib/offline/geoDB/configFileToGeoDB.service.mjs +3 -3
- package/esm2022/lib/offline/geoDB/geoDB.service.mjs +6 -6
- package/esm2022/lib/offline/layerDB/layerDB.service.mjs +4 -4
- package/esm2022/lib/offline/shared/geo-network.service.mjs +4 -4
- package/esm2022/lib/overlay/shared/index.mjs +1 -3
- package/esm2022/lib/print/print/print.component.mjs +3 -3
- package/esm2022/lib/print/print-form/print-form.component.mjs +5 -5
- package/esm2022/lib/print/print.module.mjs +4 -4
- package/esm2022/lib/print/shared/print.service.mjs +32 -44
- package/esm2022/lib/query/query.module.mjs +4 -4
- package/esm2022/lib/query/shared/query-search-source.mjs +3 -3
- package/esm2022/lib/query/shared/query.directive.mjs +4 -4
- package/esm2022/lib/query/shared/query.enums.mjs +3 -1
- package/esm2022/lib/query/shared/query.service.mjs +23 -21
- package/esm2022/lib/search/search-bar/search-bar.component.mjs +4 -4
- package/esm2022/lib/search/search-bar/search-bar.module.mjs +4 -4
- package/esm2022/lib/search/search-results/save-feature-dialog.component.mjs +3 -3
- package/esm2022/lib/search/search-results/search-results-add-button.component.mjs +7 -9
- package/esm2022/lib/search/search-results/search-results-item.component.mjs +10 -12
- package/esm2022/lib/search/search-results/search-results.component.mjs +4 -4
- package/esm2022/lib/search/search-results/search-results.module.mjs +4 -4
- package/esm2022/lib/search/search-selector/search-selector.component.mjs +4 -4
- package/esm2022/lib/search/search-selector/search-selector.module.mjs +4 -4
- package/esm2022/lib/search/search-settings/search-settings.component.mjs +4 -4
- 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 +5 -4
- package/esm2022/lib/search/shared/search.interfaces.mjs +1 -1
- package/esm2022/lib/search/shared/search.service.mjs +4 -4
- package/esm2022/lib/search/shared/search.utils.mjs +1 -1
- package/esm2022/lib/search/shared/sources/cadastre.mjs +3 -3
- package/esm2022/lib/search/shared/sources/coordinates.mjs +6 -6
- package/esm2022/lib/search/shared/sources/coordinates.providers.mjs +2 -2
- package/esm2022/lib/search/shared/sources/icherche-icons.mjs +1 -1
- package/esm2022/lib/search/shared/sources/icherche.interfaces.mjs +1 -1
- package/esm2022/lib/search/shared/sources/icherche.mjs +14 -13
- package/esm2022/lib/search/shared/sources/ilayer.interfaces.mjs +1 -1
- package/esm2022/lib/search/shared/sources/ilayer.mjs +10 -10
- package/esm2022/lib/search/shared/sources/nominatim.mjs +4 -4
- package/esm2022/lib/search/shared/sources/source.interfaces.mjs +1 -1
- package/esm2022/lib/search/shared/sources/source.mjs +3 -2
- package/esm2022/lib/search/shared/sources/storedqueries.interfaces.mjs +1 -1
- package/esm2022/lib/search/shared/sources/storedqueries.mjs +7 -10
- package/esm2022/lib/search/shared/sources/workspace.mjs +8 -8
- package/esm2022/lib/style/shared/datasource/esri-style-generator.mjs +2 -1
- package/esm2022/lib/style/shared/feature/feature-style.mjs +3 -3
- package/esm2022/lib/style/shared/overlay/overlay-marker-style.utils.mjs +10 -16
- package/esm2022/lib/style/shared/overlay/overlay-style.utils.mjs +1 -1
- package/esm2022/lib/style/shared/vector/vector-style.interface.mjs +1 -1
- package/esm2022/lib/style/style-list/style-list.interface.mjs +1 -1
- package/esm2022/lib/style/style-list/style-list.module.mjs +4 -4
- package/esm2022/lib/style/style-list/style-list.provider.mjs +2 -2
- package/esm2022/lib/style/style-list/style-list.service.mjs +5 -5
- package/esm2022/lib/style/style-modal/drawing/style-modal-drawing.component.mjs +4 -4
- package/esm2022/lib/style/style-modal/layer/style-modal-layer.component.mjs +4 -4
- package/esm2022/lib/style/style-modal/layer-button/style-modal-layer-button.component.mjs +5 -5
- package/esm2022/lib/style/style-service/draw-style.service.mjs +5 -6
- package/esm2022/lib/style/style-service/style.service.mjs +4 -4
- package/esm2022/lib/style/style.module.mjs +4 -4
- package/esm2022/lib/toast/toast.component.mjs +5 -6
- package/esm2022/lib/toast/toast.module.mjs +4 -4
- package/esm2022/lib/utils/id-generator.mjs +6 -4
- package/esm2022/lib/utils/osmLinks.mjs +1 -1
- package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.service.mjs +3 -3
- package/esm2022/lib/wkt/shared/wkt.service.mjs +7 -8
- package/esm2022/lib/wkt/wkt.module.mjs +4 -4
- package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +3 -3
- 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 +11 -9
- package/esm2022/lib/workspace/shared/feature-workspace.mjs +1 -1
- package/esm2022/lib/workspace/shared/feature-workspace.service.mjs +3 -3
- package/esm2022/lib/workspace/shared/wfs-workspace.mjs +1 -1
- package/esm2022/lib/workspace/shared/wfs-workspace.service.mjs +3 -3
- package/esm2022/lib/workspace/shared/wms-workspace.service.mjs +7 -5
- 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/esm2022/public_api.mjs +1 -2
- package/fesm2022/igo2-geo.mjs +943 -1071
- package/fesm2022/igo2-geo.mjs.map +1 -1
- package/lib/catalog/catalog-browser/catalog-browser-layer.component.d.ts +1 -1
- package/lib/catalog/shared/catalog.abstract.d.ts +2 -6
- package/lib/catalog/shared/catalog.interface.d.ts +2 -6
- package/lib/catalog/shared/catalogs.d.ts +2 -2
- package/lib/datasource/shared/datasources/cluster-datasource.interface.d.ts +2 -2
- package/lib/datasource/shared/datasources/datasource.d.ts +2 -2
- package/lib/datasource/shared/datasources/datasource.interface.d.ts +4 -12
- package/lib/datasource/shared/datasources/feature-datasource.interface.d.ts +2 -2
- package/lib/datasource/shared/datasources/mvt-datasource.interface.d.ts +2 -2
- package/lib/datasource/shared/datasources/websocket-datasource.d.ts +3 -3
- package/lib/datasource/shared/datasources/wms-datasource.interface.d.ts +1 -1
- package/lib/datasource/shared/datasources/xyz-datasource.interface.d.ts +2 -2
- package/lib/directions/shared/directions.interface.d.ts +4 -9
- package/lib/directions/shared/directions.utils.d.ts +2 -2
- package/lib/draw/draw/draw.component.d.ts +1 -1
- package/lib/draw/shared/draw-icon.service.d.ts +1 -1
- package/lib/draw/shared/draw.interface.d.ts +1 -2
- package/lib/draw/shared/draw.utils.d.ts +1 -1
- package/lib/feature/feature-details/feature-details.component.d.ts +1 -3
- package/lib/feature/feature-details/feature-details.directive.d.ts +1 -3
- package/lib/feature/feature-form/feature-form.component.d.ts +3 -8
- package/lib/feature/shared/feature.interfaces.d.ts +11 -17
- package/lib/filter/ogc-filter-button/ogc-filter-button.component.d.ts +0 -1
- package/lib/filter/ogc-filter-form/ogc-filter-form.component.d.ts +1 -3
- package/lib/filter/ogc-filter-selection/ogc-filter-selection.component.d.ts +2 -4
- package/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.d.ts +2 -2
- package/lib/filter/ogc-filterable-form/ogc-filterable-form.component.d.ts +0 -1
- package/lib/filter/ogc-filterable-list/ogc-filterable-list.component.d.ts +0 -1
- package/lib/filter/shared/ogc-filter-time.service.d.ts +0 -1
- package/lib/filter/shared/ogc-filter.interface.d.ts +2 -4
- package/lib/filter/shared/ogc-filter.service.d.ts +0 -1
- package/lib/filter/shared/spatial-filter.service.d.ts +1 -3
- package/lib/filter/shared/time-filter.service.d.ts +0 -1
- package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +2 -6
- package/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.d.ts +2 -6
- package/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.d.ts +3 -8
- package/lib/filter/time-filter-button/time-filter-button.component.d.ts +0 -1
- package/lib/filter/time-filter-form/time-filter-form.component.d.ts +10 -10
- package/lib/geo.module.d.ts +8 -9
- package/lib/geometry/geometry-form-field/geometry-form-field-input.component.d.ts +3 -5
- package/lib/geometry/geometry-form-field/geometry-form-field.component.d.ts +1 -3
- package/lib/geometry/shared/geometry.utils.d.ts +1 -8
- package/lib/import-export/export-button/export-button.component.d.ts +0 -1
- package/lib/layer/layer-legend/layer-legend.component.d.ts +1 -3
- package/lib/layer/layer-legend-list/layer-legend-list.component.d.ts +0 -1
- package/lib/layer/layer-list-tool/layer-list-tool.service.d.ts +0 -1
- package/lib/layer/shared/clusterParam.d.ts +1 -3
- package/lib/layer/shared/layers/layer.interface.d.ts +1 -3
- package/lib/layer/shared/layers/vector-layer.d.ts +1 -1
- package/lib/layer/track-feature-button/track-feature-button.component.d.ts +0 -1
- package/lib/layer/utils/outputLegend.d.ts +2 -2
- package/lib/map/info-section/info-section.component.d.ts +0 -1
- package/lib/map/map-center/map-center.component.d.ts +0 -1
- package/lib/map/offline-button/offline-button.component.d.ts +0 -1
- package/lib/map/rotation-button/rotation-button.component.d.ts +3 -2
- package/lib/map/shared/map.d.ts +2 -2
- package/lib/map/shared/map.service.d.ts +0 -1
- package/lib/map/swipe-control/swipe-control.component.d.ts +0 -1
- package/lib/map/zoom-button/zoom-button.component.d.ts +0 -1
- package/lib/measure/measurer/measure-format.pipe.d.ts +1 -1
- package/lib/measure/measurer/measurer-item.component.d.ts +0 -1
- package/lib/measure/shared/measure.interfaces.d.ts +1 -2
- package/lib/metadata/shared/metadata.service.d.ts +0 -1
- package/lib/overlay/shared/index.d.ts +0 -2
- package/lib/print/shared/print.service.d.ts +7 -8
- package/lib/query/shared/query.service.d.ts +0 -1
- package/lib/search/search-results/search-results.component.d.ts +5 -15
- package/lib/search/shared/search.interfaces.d.ts +1 -3
- package/lib/search/shared/sources/coordinates.providers.d.ts +1 -1
- package/lib/search/shared/sources/icherche-icons.d.ts +1 -3
- package/lib/search/shared/sources/icherche.interfaces.d.ts +2 -6
- package/lib/search/shared/sources/ilayer.interfaces.d.ts +4 -8
- package/lib/search/shared/sources/source.interfaces.d.ts +2 -6
- package/lib/search/shared/sources/storedqueries.interfaces.d.ts +2 -6
- package/lib/style/shared/feature/feature-style.d.ts +2 -2
- package/lib/style/shared/vector/vector-style.interface.d.ts +12 -20
- package/lib/style/style-list/style-list.interface.d.ts +1 -3
- package/lib/style/style-list/style-list.provider.d.ts +2 -2
- package/lib/style/style-service/draw-style.service.d.ts +0 -1
- package/lib/style/style-service/style.service.d.ts +1 -3
- package/lib/toast/toast.component.d.ts +0 -1
- package/lib/utils/id-generator.d.ts +1 -2
- package/lib/wkt/shared/wkt.service.d.ts +0 -1
- package/lib/workspace/shared/edition-workspace.service.d.ts +2 -6
- package/package.json +18 -19
- package/public_api.d.ts +0 -1
- package/src/lib/catalog/catalog-browser/catalog-browser.theming.scss +1 -1
- package/src/lib/directions/directions-results/directions-results.theming.scss +1 -1
- package/src/lib/draw/draw.theming.scss +4 -4
- package/src/lib/feature/feature-details/feature-details.theming.scss +1 -1
- package/src/lib/filter/ogc-filter-selection/ogc-filter-selection.theming.scss +3 -3
- package/src/lib/layer/layer-item/layer-item.theme.scss +4 -4
- package/src/lib/layer/layer-legend/layer-legend.theming.scss +1 -1
- package/src/lib/layer/layer-list-tool/layer-list-tool.theming.scss +1 -1
- package/src/lib/map/map-browser/map-browser.theming.scss +5 -5
- package/src/lib/map/menu-button/menu-button.theming.scss +2 -2
- package/src/lib/map/zoom-button/zoom-button.theming.scss +4 -4
- package/src/lib/measure/measurer/measurer.theming.scss +2 -2
- package/src/lib/workspace/confirmation-popup/confirmation-popup.theming.scss +2 -2
- package/esm2022/lib/overlay/overlay.module.mjs +0 -24
- package/esm2022/lib/overlay/shared/overlay.directive.mjs +0 -39
- package/esm2022/lib/overlay/shared/overlay.service.mjs +0 -26
- package/lib/overlay/overlay.module.d.ts +0 -12
- package/lib/overlay/shared/overlay.directive.d.ts +0 -18
- package/lib/overlay/shared/overlay.service.d.ts +0 -14
|
@@ -442,8 +442,8 @@ export class ImportExportComponent {
|
|
|
442
442
|
!this.popupAllowed) {
|
|
443
443
|
this.handlePopup();
|
|
444
444
|
}
|
|
445
|
-
|
|
446
|
-
|
|
445
|
+
const geomTypesCSV = [];
|
|
446
|
+
const featuresCSV = [];
|
|
447
447
|
let filename = '';
|
|
448
448
|
for (const [layerIndex, layer] of data.layers.entries()) {
|
|
449
449
|
const lay = this.map.getLayerById(layer);
|
|
@@ -466,6 +466,7 @@ export class ImportExportComponent {
|
|
|
466
466
|
setTimeout(() => {
|
|
467
467
|
// better look an feel
|
|
468
468
|
const url = dSOptions.download.url || dSOptions.download.dynamicUrl;
|
|
469
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
|
|
469
470
|
url.match(/service=wfs/gi)
|
|
470
471
|
? this.downloadService.open(lay)
|
|
471
472
|
: window.open(url, '_blank');
|
|
@@ -602,12 +603,15 @@ export class ImportExportComponent {
|
|
|
602
603
|
!data.combineLayers) {
|
|
603
604
|
geomTypes.map((geomType) => this.exportService
|
|
604
605
|
.export(geomType.features, data.format, filename + geomType.geometryType, data.encoding, this.map.projection)
|
|
605
|
-
.subscribe(
|
|
606
|
-
this.
|
|
607
|
-
|
|
608
|
-
this.
|
|
609
|
-
|
|
610
|
-
|
|
606
|
+
.subscribe({
|
|
607
|
+
error: (error) => this.onFileExportError(error),
|
|
608
|
+
complete: () => {
|
|
609
|
+
this.onFileExportSuccess();
|
|
610
|
+
geomType.features.forEach((feature) => {
|
|
611
|
+
this.circleToPoint(feature);
|
|
612
|
+
});
|
|
613
|
+
this.loading$.next(false);
|
|
614
|
+
}
|
|
611
615
|
}));
|
|
612
616
|
}
|
|
613
617
|
}
|
|
@@ -617,12 +621,15 @@ export class ImportExportComponent {
|
|
|
617
621
|
data.combineLayers) {
|
|
618
622
|
this.exportService
|
|
619
623
|
.export(featuresCSV, data.format, filename, data.encoding, this.map.projection)
|
|
620
|
-
.subscribe(
|
|
621
|
-
this.
|
|
622
|
-
|
|
623
|
-
this.
|
|
624
|
-
|
|
625
|
-
|
|
624
|
+
.subscribe({
|
|
625
|
+
error: (error) => this.onFileExportError(error),
|
|
626
|
+
complete: () => {
|
|
627
|
+
this.onFileExportSuccess();
|
|
628
|
+
featuresCSV.forEach((feature) => {
|
|
629
|
+
this.circleToPoint(feature);
|
|
630
|
+
});
|
|
631
|
+
this.loading$.next(false);
|
|
632
|
+
}
|
|
626
633
|
});
|
|
627
634
|
}
|
|
628
635
|
}
|
|
@@ -930,10 +937,10 @@ export class ImportExportComponent {
|
|
|
930
937
|
onImportExportChange(event) {
|
|
931
938
|
this.selectedMode = event.value;
|
|
932
939
|
}
|
|
933
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
934
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.9", 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\">\n <mat-button-toggle-group\n [value]=\"selectedMode\"\n (change)=\"onImportExportChange($event)\"\n >\n <mat-button-toggle [value]=\"'import'\">\n {{ 'igo.geo.importExportForm.importTabTitle' | translate }}\n </mat-button-toggle>\n <mat-button-toggle [value]=\"'export'\">\n {{ 'igo.geo.importExportForm.exportTabTitle' | translate }}\n </mat-button-toggle>\n </mat-button-toggle-group>\n</div>\n\n<form\n class=\"igo-form\"\n [formGroup]=\"importForm\"\n *ngIf=\"selectedMode === 'import'\"\n>\n <div class=\"igo-input-container\">\n <mat-form-field>\n <mat-label>{{\n 'igo.geo.importExportForm.importProjPlaceholder' | translate\n }}</mat-label>\n <mat-select [(value)]=\"inputProj\">\n <mat-option\n *ngFor=\"let projection of projections$ | async\"\n [value]=\"projection\"\n (click)=\"$event.stopPropagation()\"\n >\n <p matListItemTitle *ngIf=\"projection.translateKey\">\n {{\n 'igo.geo.importExportForm.projections.' + projection.translateKey\n | translate: projection\n }}\n </p>\n <p matListItemTitle *ngIf=\"!projection.translateKey\">\n {{ projection.alias }}\n </p>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n importForm.invalid\n ? ('igo.geo.importExportForm.projections.choose' | translate)\n : ('igo.geo.importExportForm.importButton' | translate)\n \"\n class=\"igo-form-button-group\"\n >\n <button\n [disabled]=\"importForm.invalid || (loading$ | async)\"\n mat-raised-button\n type=\"button\"\n (click)=\"fileInput.click()\"\n >\n {{ 'igo.geo.importExportForm.importButton' | translate }}\n </button>\n <igo-spinner [shown]=\"loading$ | async\"></igo-spinner>\n <input\n hidden\n #fileInput\n type=\"file\"\n [style.display]=\"'none'\"\n (click)=\"fileInput.value = null\"\n (change)=\"importFiles($any($event.target).files)\"\n />\n </div>\n</form>\n<section class=\"mat-typography\" *ngIf=\"selectedMode === 'import'\">\n <div *ngIf=\"importHtmlClarifications === ''\">\n <h4>{{ 'igo.geo.importExportForm.importClarifications' | translate }}</h4>\n <ul>\n <li>\n {{\n 'igo.geo.importExportForm.importSizeMax'\n | translate: { size: fileSizeMb }\n }}\n </li>\n <li>\n {{ 'igo.geo.importExportForm.importFormatAuthorized' | translate }}\n </li>\n <li>{{ 'igo.geo.importExportForm.importShpZip' | translate }}</li>\n </ul>\n </div>\n <igo-custom-html\n *ngIf=\"importHtmlClarifications !== ''\"\n class=\"mat-typography\"\n [html]=\"importHtmlClarifications\"\n >\n </igo-custom-html>\n</section>\n\n<section\n class=\"mat-typography\"\n *ngIf=\"(exportableLayers$ | async).length === 0 && selectedMode === 'export'\"\n>\n <h4>{{ 'igo.geo.importExportForm.exportNoLayersExportable' | translate }}</h4>\n</section>\n\n<form\n class=\"igo-form\"\n [formGroup]=\"form\"\n *ngIf=\"(exportableLayers$ | async).length > 0 && selectedMode === 'export'\"\n>\n <div class=\"igo-input-container\">\n <mat-form-field>\n <mat-label>{{\n 'igo.geo.importExportForm.exportLayerPlaceholder' | translate\n }}</mat-label>\n <mat-select [(value)]=\"layers\" multiple>\n <mat-select-trigger>\n {{ layers.length ? getLayerTitleById(layers[0]) : '' }}\n <span *ngIf=\"layers.length > 1\" class=\"export-select-trigger\">\n (+{{ layers.length - 1 }}\n {{\n (layers?.length === 2\n ? 'igo.geo.importExportForm.other'\n : 'igo.geo.importExportForm.others'\n ) | translate\n }})\n </span>\n </mat-select-trigger>\n <mat-option\n *ngFor=\"let layer of exportableLayers$ | async\"\n [ngClass]=\"{\n 'igo-export-layer-mat-option': layerHasSelectedFeatures(layer)\n }\"\n [value]=\"layer.id\"\n (click)=\"$event.stopPropagation()\"\n >\n <p matListItemTitle>{{ layer.title }}</p>\n <p matListItemTitle>\n <mat-slide-toggle\n *ngIf=\"layerHasSelectedFeatures(layer)\"\n (click)=\"onlySelectedClick($event, layer.id)\"\n (checked)=\"inLayersIdToExportSelectionOnly(layer)\"\n (change)=\"onlySelected($event, layer.id)\"\n >\n <small>{{\n 'igo.geo.importExportForm.exportSelectedFeature' | translate\n }}</small>\n </mat-slide-toggle>\n </p>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"igo-input-container\">\n <mat-form-field>\n <mat-label>{{\n 'igo.geo.importExportForm.exportFormatPlaceholder' | translate\n }}</mat-label>\n <mat-select formControlName=\"format\">\n <ng-container *ngIf=\"(formats$ | async).length !== 0\">\n <mat-option\n *ngFor=\"let format of formats$ | async | keyvalue\"\n [value]=\"format.key\"\n >\n {{ 'igo.geo.export.format.' + format.value | translate }}\n </mat-option>\n </ng-container>\n <mat-option *ngIf=\"(formats$ | async).length === 0\" disabled=\"true\">\n {{ 'igo.geo.export.noFormat.title' | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div\n class=\"igo-input-container\"\n *ngIf=\"forceNaming && form.value.format !== 'URL'\"\n >\n <mat-form-field>\n <input\n matInput\n formControlName=\"name\"\n placeholder=\"{{\n 'igo.geo.importExportForm.exportFileNamePlaceholder' | translate\n }}\"\n />\n </mat-form-field>\n </div>\n\n <div\n class=\"igo-input-container\"\n *ngIf=\"\n form.value.format === 'CSVcomma' || form.value.format === 'CSVsemicolon'\n \"\n >\n <mat-form-field>\n <mat-label>{{\n 'igo.geo.importExportForm.encodingPlaceholder' | translate\n }}</mat-label>\n <mat-select formControlName=\"encoding\">\n <ng-container *ngIf=\"(encodings$ | async).length !== 0\">\n <mat-option\n *ngFor=\"let encoding of encodings$ | async | keyvalue\"\n [value]=\"encoding.key\"\n >\n {{ 'igo.geo.export.encoding.' + encoding.value | translate }}\n </mat-option>\n </ng-container>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div\n class=\"export-combine-layers mat-typography\"\n *ngIf=\"\n layers.length > 1 &&\n (form.value.format === 'CSVcomma' || form.value.format === 'CSVsemicolon')\n \"\n >\n <mat-slide-toggle\n formControlName=\"combineLayers\"\n [labelPosition]=\"'before'\"\n >\n {{ 'igo.geo.importExportForm.exportCombineResults' | translate }}\n </mat-slide-toggle>\n </div>\n\n <div\n class=\"export-separator mat-typography\"\n *ngIf=\"\n layers.length > 1 &&\n (form.value.format === 'CSVcomma' ||\n form.value.format === 'CSVsemicolon') &&\n form.value.combineLayers\n \"\n >\n <mat-slide-toggle formControlName=\"separator\" [labelPosition]=\"'before'\">\n {{ 'igo.geo.importExportForm.exportSeparator' | translate }}\n </mat-slide-toggle>\n </div>\n\n <div\n class=\"export-options mat-typography\"\n *ngIf=\"form.value.format !== 'URL'\"\n >\n <mat-slide-toggle\n formControlName=\"featureInMapExtent\"\n [labelPosition]=\"'before'\"\n >\n {{ 'igo.geo.importExportForm.exportFeatureInExtent' | translate }}\n </mat-slide-toggle>\n </div>\n\n <div class=\"igo-form-button-group\">\n <button\n mat-raised-button\n type=\"button\"\n [disabled]=\"!form.valid || (loading$ | async)\"\n (click)=\"handleExportFormSubmit(form.value)\"\n >\n {{\n form.value.format !== 'URL'\n ? ('igo.geo.importExportForm.exportButton' | translate)\n : form.value.layers.length > 1\n ? ('igo.geo.importExportForm.exportButtonLinks' | translate)\n : ('igo.geo.importExportForm.exportButtonLink' | translate)\n }}\n </button>\n <igo-spinner [shown]=\"loading$ | async\"></igo-spinner>\n </div>\n\n <igo-custom-html\n *ngIf=\"exportHtmlClarifications !== ''\"\n class=\"mat-typography\"\n [html]=\"exportHtmlClarifications\"\n >\n </igo-custom-html>\n</form>\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", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], 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: IgoLanguageModule }, { kind: "pipe", type: i21.TranslatePipe, name: "translate" }] });
|
|
940
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", 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 });
|
|
941
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.2", 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\">\n <mat-button-toggle-group\n [value]=\"selectedMode\"\n (change)=\"onImportExportChange($event)\"\n >\n <mat-button-toggle [value]=\"'import'\">\n {{ 'igo.geo.importExportForm.importTabTitle' | translate }}\n </mat-button-toggle>\n <mat-button-toggle [value]=\"'export'\">\n {{ 'igo.geo.importExportForm.exportTabTitle' | translate }}\n </mat-button-toggle>\n </mat-button-toggle-group>\n</div>\n\n<form\n class=\"igo-form\"\n [formGroup]=\"importForm\"\n *ngIf=\"selectedMode === 'import'\"\n>\n <div class=\"igo-input-container\">\n <mat-form-field>\n <mat-label>{{\n 'igo.geo.importExportForm.importProjPlaceholder' | translate\n }}</mat-label>\n <mat-select [(value)]=\"inputProj\">\n <mat-option\n *ngFor=\"let projection of projections$ | async\"\n [value]=\"projection\"\n (click)=\"$event.stopPropagation()\"\n >\n <p matListItemTitle *ngIf=\"projection.translateKey\">\n {{\n 'igo.geo.importExportForm.projections.' + projection.translateKey\n | translate: projection\n }}\n </p>\n <p matListItemTitle *ngIf=\"!projection.translateKey\">\n {{ projection.alias }}\n </p>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n importForm.invalid\n ? ('igo.geo.importExportForm.projections.choose' | translate)\n : ('igo.geo.importExportForm.importButton' | translate)\n \"\n class=\"igo-form-button-group\"\n >\n <button\n [disabled]=\"importForm.invalid || (loading$ | async)\"\n mat-raised-button\n type=\"button\"\n (click)=\"fileInput.click()\"\n >\n {{ 'igo.geo.importExportForm.importButton' | translate }}\n </button>\n <igo-spinner [shown]=\"loading$ | async\"></igo-spinner>\n <input\n hidden\n #fileInput\n type=\"file\"\n [style.display]=\"'none'\"\n (click)=\"fileInput.value = null\"\n (change)=\"importFiles($any($event.target).files)\"\n />\n </div>\n</form>\n<section class=\"mat-typography\" *ngIf=\"selectedMode === 'import'\">\n <div *ngIf=\"importHtmlClarifications === ''\">\n <h4>{{ 'igo.geo.importExportForm.importClarifications' | translate }}</h4>\n <ul>\n <li>\n {{\n 'igo.geo.importExportForm.importSizeMax'\n | translate: { size: fileSizeMb }\n }}\n </li>\n <li>\n {{ 'igo.geo.importExportForm.importFormatAuthorized' | translate }}\n </li>\n <li>{{ 'igo.geo.importExportForm.importShpZip' | translate }}</li>\n </ul>\n </div>\n <igo-custom-html\n *ngIf=\"importHtmlClarifications !== ''\"\n class=\"mat-typography\"\n [html]=\"importHtmlClarifications\"\n >\n </igo-custom-html>\n</section>\n\n<section\n class=\"mat-typography\"\n *ngIf=\"(exportableLayers$ | async).length === 0 && selectedMode === 'export'\"\n>\n <h4>{{ 'igo.geo.importExportForm.exportNoLayersExportable' | translate }}</h4>\n</section>\n\n<form\n class=\"igo-form\"\n [formGroup]=\"form\"\n *ngIf=\"(exportableLayers$ | async).length > 0 && selectedMode === 'export'\"\n>\n <div class=\"igo-input-container\">\n <mat-form-field>\n <mat-label>{{\n 'igo.geo.importExportForm.exportLayerPlaceholder' | translate\n }}</mat-label>\n <mat-select [(value)]=\"layers\" multiple>\n <mat-select-trigger>\n {{ layers.length ? getLayerTitleById(layers[0]) : '' }}\n <span *ngIf=\"layers.length > 1\" class=\"export-select-trigger\">\n (+{{ layers.length - 1 }}\n {{\n (layers?.length === 2\n ? 'igo.geo.importExportForm.other'\n : 'igo.geo.importExportForm.others'\n ) | translate\n }})\n </span>\n </mat-select-trigger>\n <mat-option\n *ngFor=\"let layer of exportableLayers$ | async\"\n [ngClass]=\"{\n 'igo-export-layer-mat-option': layerHasSelectedFeatures(layer)\n }\"\n [value]=\"layer.id\"\n (click)=\"$event.stopPropagation()\"\n >\n <p matListItemTitle>{{ layer.title }}</p>\n <p matListItemTitle>\n <mat-slide-toggle\n *ngIf=\"layerHasSelectedFeatures(layer)\"\n (click)=\"onlySelectedClick($event, layer.id)\"\n (checked)=\"inLayersIdToExportSelectionOnly(layer)\"\n (change)=\"onlySelected($event, layer.id)\"\n >\n <small>{{\n 'igo.geo.importExportForm.exportSelectedFeature' | translate\n }}</small>\n </mat-slide-toggle>\n </p>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"igo-input-container\">\n <mat-form-field>\n <mat-label>{{\n 'igo.geo.importExportForm.exportFormatPlaceholder' | translate\n }}</mat-label>\n <mat-select formControlName=\"format\">\n <ng-container *ngIf=\"(formats$ | async).length !== 0\">\n <mat-option\n *ngFor=\"let format of formats$ | async | keyvalue\"\n [value]=\"format.key\"\n >\n {{ 'igo.geo.export.format.' + format.value | translate }}\n </mat-option>\n </ng-container>\n <mat-option *ngIf=\"(formats$ | async).length === 0\" disabled=\"true\">\n {{ 'igo.geo.export.noFormat.title' | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div\n class=\"igo-input-container\"\n *ngIf=\"forceNaming && form.value.format !== 'URL'\"\n >\n <mat-form-field>\n <input\n matInput\n formControlName=\"name\"\n placeholder=\"{{\n 'igo.geo.importExportForm.exportFileNamePlaceholder' | translate\n }}\"\n />\n </mat-form-field>\n </div>\n\n <div\n class=\"igo-input-container\"\n *ngIf=\"\n form.value.format === 'CSVcomma' || form.value.format === 'CSVsemicolon'\n \"\n >\n <mat-form-field>\n <mat-label>{{\n 'igo.geo.importExportForm.encodingPlaceholder' | translate\n }}</mat-label>\n <mat-select formControlName=\"encoding\">\n <ng-container *ngIf=\"(encodings$ | async).length !== 0\">\n <mat-option\n *ngFor=\"let encoding of encodings$ | async | keyvalue\"\n [value]=\"encoding.key\"\n >\n {{ 'igo.geo.export.encoding.' + encoding.value | translate }}\n </mat-option>\n </ng-container>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div\n class=\"export-combine-layers mat-typography\"\n *ngIf=\"\n layers.length > 1 &&\n (form.value.format === 'CSVcomma' || form.value.format === 'CSVsemicolon')\n \"\n >\n <mat-slide-toggle\n formControlName=\"combineLayers\"\n [labelPosition]=\"'before'\"\n >\n {{ 'igo.geo.importExportForm.exportCombineResults' | translate }}\n </mat-slide-toggle>\n </div>\n\n <div\n class=\"export-separator mat-typography\"\n *ngIf=\"\n layers.length > 1 &&\n (form.value.format === 'CSVcomma' ||\n form.value.format === 'CSVsemicolon') &&\n form.value.combineLayers\n \"\n >\n <mat-slide-toggle formControlName=\"separator\" [labelPosition]=\"'before'\">\n {{ 'igo.geo.importExportForm.exportSeparator' | translate }}\n </mat-slide-toggle>\n </div>\n\n <div\n class=\"export-options mat-typography\"\n *ngIf=\"form.value.format !== 'URL'\"\n >\n <mat-slide-toggle\n formControlName=\"featureInMapExtent\"\n [labelPosition]=\"'before'\"\n >\n {{ 'igo.geo.importExportForm.exportFeatureInExtent' | translate }}\n </mat-slide-toggle>\n </div>\n\n <div class=\"igo-form-button-group\">\n <button\n mat-raised-button\n type=\"button\"\n [disabled]=\"!form.valid || (loading$ | async)\"\n (click)=\"handleExportFormSubmit(form.value)\"\n >\n {{\n form.value.format !== 'URL'\n ? ('igo.geo.importExportForm.exportButton' | translate)\n : form.value.layers.length > 1\n ? ('igo.geo.importExportForm.exportButtonLinks' | translate)\n : ('igo.geo.importExportForm.exportButtonLink' | translate)\n }}\n </button>\n <igo-spinner [shown]=\"loading$ | async\"></igo-spinner>\n </div>\n\n <igo-custom-html\n *ngIf=\"exportHtmlClarifications !== ''\"\n class=\"mat-typography\"\n [html]=\"exportHtmlClarifications\"\n >\n </igo-custom-html>\n</form>\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", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], 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", "disabledInteractive"], 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", "disabledInteractive"], 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: IgoLanguageModule }, { kind: "pipe", type: i21.TranslatePipe, name: "translate" }] });
|
|
935
942
|
}
|
|
936
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
943
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: ImportExportComponent, decorators: [{
|
|
937
944
|
type: Component,
|
|
938
945
|
args: [{ selector: 'igo-import-export', standalone: true, imports: [
|
|
939
946
|
MatButtonToggleModule,
|
|
@@ -974,4 +981,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
|
|
|
974
981
|
}], exportOptionsChange: [{
|
|
975
982
|
type: Output
|
|
976
983
|
}] } });
|
|
977
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LWV4cG9ydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9pbXBvcnQtZXhwb3J0L2ltcG9ydC1leHBvcnQvaW1wb3J0LWV4cG9ydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9pbXBvcnQtZXhwb3J0L2ltcG9ydC1leHBvcnQvaW1wb3J0LWV4cG9ydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hGLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxXQUFXLEVBQ1gsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUVsQixVQUFVLEVBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUVMLG9CQUFvQixFQUNyQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTdELE9B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VTtzQkFBbkIsTUFBTTtnQkFFRSxjQUFjO3NCQUF0QixLQUFLO2dCQUlJLG1CQUFtQjtzQkFBNUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzeW5jUGlwZSwgS2V5VmFsdWVQaXBlLCBOZ0NsYXNzLCBOZ0ZvciwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgRm9ybXNNb2R1bGUsXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gIFVudHlwZWRGb3JtQnVpbGRlcixcbiAgVW50eXBlZEZvcm1Hcm91cCxcbiAgVmFsaWRhdG9yc1xufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0QnV0dG9uVG9nZ2xlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uLXRvZ2dsZSc7XG5pbXBvcnQgeyBNYXRPcHRpb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHtcbiAgTWF0U2xpZGVUb2dnbGVDaGFuZ2UsXG4gIE1hdFNsaWRlVG9nZ2xlTW9kdWxlXG59IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NsaWRlLXRvZ2dsZSc7XG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5cbmltcG9ydCB7IENvbmZpcm1EaWFsb2dTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29tbW9uL2NvbmZpcm0tZGlhbG9nJztcbmltcG9ydCB7IEN1c3RvbUh0bWxDb21wb25lbnQgfSBmcm9tICdAaWdvMi9jb21tb24vY3VzdG9tLWh0bWwnO1xuaW1wb3J0IHsgRW50aXR5UmVjb3JkIH0gZnJvbSAnQGlnbzIvY29tbW9uL2VudGl0eSc7XG5pbXBvcnQgeyBTcGlubmVyQ29tcG9uZW50IH0gZnJvbSAnQGlnbzIvY29tbW9uL3NwaW5uZXInO1xuaW1wb3J0IHR5cGUgeyBXb3Jrc3BhY2VTdG9yZSB9IGZyb20gJ0BpZ28yL2NvbW1vbi93b3Jrc3BhY2UnO1xuaW1wb3J0IHsgV29ya3NwYWNlIH0gZnJvbSAnQGlnbzIvY29tbW9uL3dvcmtzcGFjZSc7XG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9jb25maWcnO1xuaW1wb3J0IHsgTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9sYW5ndWFnZSc7XG5pbXBvcnQgeyBJZ29MYW5ndWFnZU1vZHVsZSB9IGZyb20gJ0BpZ28yL2NvcmUvbGFuZ3VhZ2UnO1xuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlL21lc3NhZ2UnO1xuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlL3N0b3JhZ2UnO1xuaW1wb3J0IHsgc3RyRW51bSB9IGZyb20gJ0BpZ28yL3V0aWxzJztcblxuaW1wb3J0IG9sUG9pbnQgZnJvbSAnb2wvZ2VvbS9Qb2ludCc7XG5pbXBvcnQgeyBjaXJjdWxhciB9IGZyb20gJ29sL2dlb20vUG9seWdvbic7XG5pbXBvcnQgb2xDbHVzdGVyU291cmNlIGZyb20gJ29sL3NvdXJjZS9DbHVzdGVyJztcbmltcG9ydCBvbFZlY3RvclNvdXJjZSBmcm9tICdvbC9zb3VyY2UvVmVjdG9yJztcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHNraXBXaGlsZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQ2x1c3RlckRhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlL3NoYXJlZC9kYXRhc291cmNlcy9jbHVzdGVyLWRhdGFzb3VyY2UnO1xuaW1wb3J0IHsgRGF0YVNvdXJjZU9wdGlvbnMgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlL3NoYXJlZC9kYXRhc291cmNlcy9kYXRhc291cmNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBEb3dubG9hZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9kb3dubG9hZC9zaGFyZWQvZG93bmxvYWQuc2VydmljZSc7XG5pbXBvcnQgeyBGZWF0dXJlIH0gZnJvbSAnLi4vLi4vZmVhdHVyZS9zaGFyZWQvZmVhdHVyZS5pbnRlcmZhY2VzJztcbmltcG9ydCB7IExheWVyU2VydmljZSB9IGZyb20gJy4uLy4uL2xheWVyL3NoYXJlZC9sYXllci5zZXJ2aWNlJztcbmltcG9ydCB7IEFueUxheWVyIH0gZnJvbSAnLi4vLi4vbGF5ZXIvc2hhcmVkL2xheWVycy9hbnktbGF5ZXInO1xuaW1wb3J0IHsgTGF5ZXIgfSBmcm9tICcuLi8uLi9sYXllci9zaGFyZWQvbGF5ZXJzL2xheWVyJztcbmltcG9ydCB7IFZlY3RvckxheWVyIH0gZnJvbSAnLi4vLi4vbGF5ZXIvc2hhcmVkL2xheWVycy92ZWN0b3ItbGF5ZXInO1xuaW1wb3J0IHsgSW5wdXRQcm9qZWN0aW9ucywgUHJvamVjdGlvbnNMaW1pdGF0aW9uc09wdGlvbnMgfSBmcm9tICcuLi8uLi9tYXAvJztcbmltcG9ydCB7IGNvbXB1dGVQcm9qZWN0aW9uc0NvbnN0cmFpbnRzIH0gZnJvbSAnLi4vLi4vbWFwL3NoYXJlZCc7XG5pbXBvcnQgeyBJZ29NYXAgfSBmcm9tICcuLi8uLi9tYXAvc2hhcmVkL21hcCc7XG5pbXBvcnQgeyBTdHlsZUxpc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGUtbGlzdC9zdHlsZS1saXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgU3R5bGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGUtc2VydmljZS9zdHlsZS5zZXJ2aWNlJztcbmltcG9ydCB7IEVkaXRpb25Xb3Jrc3BhY2UgfSBmcm9tICcuLi8uLi93b3Jrc3BhY2Uvc2hhcmVkL2VkaXRpb24td29ya3NwYWNlJztcbmltcG9ydCB7IEZlYXR1cmVXb3Jrc3BhY2UgfSBmcm9tICcuLi8uLi93b3Jrc3BhY2Uvc2hhcmVkL2ZlYXR1cmUtd29ya3NwYWNlJztcbmltcG9ydCB7IFdmc1dvcmtzcGFjZSB9IGZyb20gJy4uLy4uL3dvcmtzcGFjZS9zaGFyZWQvd2ZzLXdvcmtzcGFjZSc7XG5pbXBvcnQgeyBFeHBvcnRPcHRpb25zIH0gZnJvbSAnLi4vc2hhcmVkL2V4cG9ydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRXhwb3J0U2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9leHBvcnQuc2VydmljZSc7XG5pbXBvcnQgeyBFbmNvZGluZ0Zvcm1hdCwgRXhwb3J0Rm9ybWF0IH0gZnJvbSAnLi4vc2hhcmVkL2V4cG9ydC50eXBlJztcbmltcG9ydCB7XG4gIGhhbmRsZUZpbGVFeHBvcnRFcnJvcixcbiAgaGFuZGxlRmlsZUV4cG9ydFN1Y2Nlc3Ncbn0gZnJvbSAnLi4vc2hhcmVkL2V4cG9ydC51dGlscyc7XG5pbXBvcnQgeyBJbXBvcnRFeHBvcnRTZXJ2aWNlT3B0aW9ucyB9IGZyb20gJy4uL3NoYXJlZC9pbXBvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEltcG9ydFNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvaW1wb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgaGFuZGxlRmlsZUltcG9ydEVycm9yLFxuICBoYW5kbGVGaWxlSW1wb3J0U3VjY2Vzc1xufSBmcm9tICcuLi9zaGFyZWQvaW1wb3J0LnV0aWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaWdvLWltcG9ydC1leHBvcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vaW1wb3J0LWV4cG9ydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ltcG9ydC1leHBvcnQuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE1hdEJ1dHRvblRvZ2dsZU1vZHVsZSxcbiAgICBOZ0lmLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgIE1hdFNlbGVjdE1vZHVsZSxcbiAgICBOZ0ZvcixcbiAgICBNYXRPcHRpb25Nb2R1bGUsXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgU3Bpbm5lckNvbXBvbmVudCxcbiAgICBDdXN0b21IdG1sQ29tcG9uZW50LFxuICAgIE5nQ2xhc3MsXG4gICAgTWF0U2xpZGVUb2dnbGVNb2R1bGUsXG4gICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgQXN5bmNQaXBlLFxuICAgIEtleVZhbHVlUGlwZSxcbiAgICBJZ29MYW5ndWFnZU1vZHVsZVxuICBdLFxuICBwcm92aWRlcnM6IFtDb25maXJtRGlhbG9nU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgSW1wb3J0RXhwb3J0Q29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQge1xuICBwdWJsaWMgZm9ybTogVW50eXBlZEZvcm1Hcm91cDtcbiAgcHVibGljIGltcG9ydEZvcm06IFVudHlwZWRGb3JtR3JvdXA7XG4gIHB1YmxpYyBmb3JtYXRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3QodW5kZWZpbmVkKTtcbiAgcHVibGljIGVuY29kaW5ncyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XG4gIHB1YmxpYyBleHBvcnRhYmxlTGF5ZXJzJDogQmVoYXZpb3JTdWJqZWN0PEFueUxheWVyW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChcbiAgICBbXVxuICApO1xuICBwdWJsaWMgbG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgcHVibGljIGZvcmNlTmFtaW5nID0gZmFsc2U7XG4gIHB1YmxpYyBjb250cm9sRm9ybWF0ID0gJ2Zvcm1hdCc7XG5cbiAgcHJpdmF0ZSBsYXllcnMkJDogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGV4cG9ydGFibGVMYXllcnMkJDogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGZvcm1hdHMkJDogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGVuY29kaW5ncyQkOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgZm9ybUxheWVyJCQ6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBleHBvcnRPcHRpb25zJCQ6IFN1YnNjcmlwdGlvbjtcblxuICBwdWJsaWMgaW1wb3J0SHRtbENsYXJpZmljYXRpb25zOiBzdHJpbmc7XG4gIHB1YmxpYyBleHBvcnRIdG1sQ2xhcmlmaWNhdGlvbnM6IHN0cmluZztcblxuICBwcml2YXRlIGVzcGdDb2RlUmVnZXggPSBuZXcgUmVnRXhwKCdeXFxcXGR7NCw2fScpO1xuICBwcml2YXRlIGNsaWVudFNpZGVGaWxlU2l6ZU1heDogbnVtYmVyO1xuICBwdWJsaWMgZmlsZVNpemVNYjogbnVtYmVyO1xuXG4gIHB1YmxpYyBwcm9qZWN0aW9ucyQ6IEJlaGF2aW9yU3ViamVjdDxJbnB1dFByb2plY3Rpb25zW10+ID1cbiAgICBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcbiAgcHJpdmF0ZSBwcm9qZWN0aW9uc0NvbnN0cmFpbnRzOiBQcm9qZWN0aW9uc0xpbWl0YXRpb25zT3B0aW9ucztcblxuICBwdWJsaWMgcG9wdXBDaGVja2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBwcmV2aW91c0xheWVyU3BlY3MkOiBCZWhhdmlvclN1YmplY3Q8XG4gICAge1xuICAgICAgaWQ6IHN0cmluZztcbiAgICAgIHZpc2libGU6IGJvb2xlYW47XG4gICAgICBvcGFjaXR5OiBudW1iZXI7XG4gICAgICBxdWVyeWFibGU6IGJvb2xlYW47XG4gICAgfVtdXG4gID4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XG5cbiAgQElucHV0KCkgc2VsZWN0Rmlyc3RQcm9qOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgbWFwOiBJZ29NYXA7XG5cbiAgQElucHV0KCkgY29udGV4dFVyaTogc3RyaW5nO1xuXG4gIHByaXZhdGUgX3Byb2plY3Rpb25zTGltaXRhdGlvbnM6IFByb2plY3Rpb25zTGltaXRhdGlvbnNPcHRpb25zID0ge307XG4gIEBJbnB1dCgpXG4gIHNldCBwcm9qZWN0aW9uc0xpbWl0YXRpb25zKHZhbHVlOiBQcm9qZWN0aW9uc0xpbWl0YXRpb25zT3B0aW9ucykge1xuICAgIHRoaXMuX3Byb2plY3Rpb25zTGltaXRhdGlvbnMgPSB2YWx1ZTtcbiAgICB0aGlzLmNvbXB1dGVQcm9qZWN0aW9ucygpO1xuICB9XG4gIGdldCBwcm9qZWN0aW9uc0xpbWl0YXRpb25zKCk6IFByb2plY3Rpb25zTGltaXRhdGlvbnNPcHRpb25zIHtcbiAgICByZXR1cm4gdGhpcy5fcHJvamVjdGlvbnNMaW1pdGF0aW9ucyB8fCB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZSB0aGF0IGhvbGRzIHRoZSBhdmFpbGFibGUgd29ya3NwYWNlcy5cbiAgICovXG4gIEBJbnB1dCgpIHN0b3JlOiBXb3Jrc3BhY2VTdG9yZTtcblxuICBASW5wdXQoKSBzZWxlY3RlZE1vZGUgPSAnaW1wb3J0JztcblxuICBAT3V0cHV0KCkgc2VsZWN0TW9kZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIEBJbnB1dCgpIGV4cG9ydE9wdGlvbnMkOiBCZWhhdmlvclN1YmplY3Q8RXhwb3J0T3B0aW9ucz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFxuICAgIHVuZGVmaW5lZFxuICApO1xuXG4gIEBPdXRwdXQoKSBleHBvcnRPcHRpb25zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxFeHBvcnRPcHRpb25zPigpO1xuXG4gIGdldCBsYXllcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ2xheWVycycpLnZhbHVlO1xuICB9XG4gIHNldCBsYXllcnModmFsdWUpIHtcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGxheWVyczogdmFsdWUgfSk7XG4gIH1cblxuICBnZXQgaW5wdXRQcm9qKCkge1xuICAgIHJldHVybiB0aGlzLmltcG9ydEZvcm0uZ2V0KCdpbnB1dFByb2onKS52YWx1ZTtcbiAgfVxuICBzZXQgaW5wdXRQcm9qKHZhbHVlKSB7XG4gICAgdGhpcy5pbXBvcnRGb3JtLnBhdGNoVmFsdWUoeyBpbnB1dFByb2o6IHZhbHVlIH0pO1xuICB9XG5cbiAgZ2V0IHBvcHVwQWxsb3dlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgKHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0KCdpbXBvcnRFeHBvcnRQb3B1cEFsbG93ZWQnKSBhcyBib29sZWFuKSB8fCBmYWxzZVxuICAgICk7XG4gIH1cblxuICBzZXQgcG9wdXBBbGxvd2VkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXQoJ2ltcG9ydEV4cG9ydFBvcHVwQWxsb3dlZCcsIHZhbHVlKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaW1wb3J0U2VydmljZTogSW1wb3J0U2VydmljZSxcbiAgICBwcml2YXRlIGV4cG9ydFNlcnZpY2U6IEV4cG9ydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZSxcbiAgICBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcbiAgICBwcml2YXRlIHN0eWxlTGlzdFNlcnZpY2U6IFN0eWxlTGlzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdHlsZVNlcnZpY2U6IFN0eWxlU2VydmljZSxcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBjb25maWc6IENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkb3dubG9hZFNlcnZpY2U6IERvd25sb2FkU2VydmljZSxcbiAgICBwcml2YXRlIGxheWVyU2VydmljZTogTGF5ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlybURpYWxvZ1NlcnZpY2U6IENvbmZpcm1EaWFsb2dTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMubG9hZENvbmZpZygpO1xuICAgIHRoaXMuYnVpbGRGb3JtKCk7XG4gICAgdGhpcy5jb21wdXRlUHJvamVjdGlvbnMoKTtcbiAgICB0aGlzLmltcG9ydEh0bWxDbGFyaWZpY2F0aW9ucyA9IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5pbXBvcnRIdG1sQ2xhcmlmaWNhdGlvbnMnXG4gICAgKTtcbiAgICB0aGlzLmV4cG9ydEh0bWxDbGFyaWZpY2F0aW9ucyA9IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRIdG1sQ2xhcmlmaWNhdGlvbnMnXG4gICAgKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMubGF5ZXJzJCQgPSB0aGlzLm1hcC5sYXllcnMkLnN1YnNjcmliZSgobGF5ZXJzKSA9PiB7XG4gICAgICB0aGlzLmV4cG9ydGFibGVMYXllcnMkLm5leHQoXG4gICAgICAgIGxheWVycy5maWx0ZXIoKGxheWVyOiBMYXllcikgPT4ge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAobGF5ZXIgaW5zdGFuY2VvZiBWZWN0b3JMYXllciAmJiBsYXllci5leHBvcnRhYmxlID09PSB0cnVlKSB8fFxuICAgICAgICAgICAgKGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5kb3dubG9hZCAmJlxuICAgICAgICAgICAgICBsYXllci5kYXRhU291cmNlLm9wdGlvbnMuZG93bmxvYWQudXJsKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pIGFzIEFueUxheWVyW11cbiAgICAgICk7XG4gICAgfSk7XG4gICAgY29uc3QgY29uZmlnRmlsZVNpemVNYiA9IHRoaXMuY29uZmlnLmdldENvbmZpZyhcbiAgICAgICdpbXBvcnRFeHBvcnQuY2xpZW50U2lkZUZpbGVTaXplTWF4TWInXG4gICAgKTtcbiAgICB0aGlzLmNsaWVudFNpZGVGaWxlU2l6ZU1heCA9XG4gICAgICAoY29uZmlnRmlsZVNpemVNYiA/IGNvbmZpZ0ZpbGVTaXplTWIgOiAzMCkgKiBNYXRoLnBvdygxMDI0LCAyKTtcbiAgICB0aGlzLmZpbGVTaXplTWIgPSB0aGlzLmNsaWVudFNpZGVGaWxlU2l6ZU1heCAvIE1hdGgucG93KDEwMjQsIDIpO1xuXG4gICAgdGhpcy5leHBvcnRPcHRpb25zJCQgPSB0aGlzLmV4cG9ydE9wdGlvbnMkXG4gICAgICAucGlwZShza2lwV2hpbGUoKGV4cG9ydE9wdGlvbnMpID0+ICFleHBvcnRPcHRpb25zKSlcbiAgICAgIC5zdWJzY3JpYmUoKGV4cG9ydE9wdGlvbnMpID0+IHtcbiAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoZXhwb3J0T3B0aW9ucywgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gICAgICAgIGlmIChleHBvcnRPcHRpb25zLmxheWVycykge1xuICAgICAgICAgIHRoaXMuY29tcHV0ZUZvcm1hdHMoXG4gICAgICAgICAgICBleHBvcnRPcHRpb25zLmxheWVycy5tYXAoKGwpID0+IHRoaXMubWFwLmdldExheWVyQnlJZChsKSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB0aGlzLmZvcm1MYXllciQkID0gdGhpcy5mb3JtXG4gICAgICAuZ2V0KCdmb3JtYXQnKVxuICAgICAgLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKGZvcm1hdCkgPT4ge1xuICAgICAgICBjb25zdCBvZ3JlRm9ybWF0cyA9IE9iamVjdC5rZXlzKEV4cG9ydFNlcnZpY2Uub2dyZUZvcm1hdHMpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIXRoaXMucG9wdXBDaGVja2VkICYmXG4gICAgICAgICAgdGhpcy5mb3JtLmdldCgnbGF5ZXJzJykudmFsdWU/Lmxlbmd0aCA+IDEgJiZcbiAgICAgICAgICAob2dyZUZvcm1hdHMuaW5kZXhPZihmb3JtYXQpID49IDAgfHwgZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuVVJMKVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoIXRoaXMuaGFuZGxlUG9wdXAodHJ1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgZm9ybWF0OiB1bmRlZmluZWQgfSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLmZvcm1MYXllciQkID0gdGhpcy5mb3JtXG4gICAgICAuZ2V0KCdsYXllcnMnKVxuICAgICAgLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKGxheWVyc0lkKSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlUHJldmlvdXNMYXllclNwZWNzKCk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkTGF5ZXJzID1cbiAgICAgICAgICBsYXllcnNJZCBpbnN0YW5jZW9mIEFycmF5ID8gbGF5ZXJzSWQgOiBbbGF5ZXJzSWRdO1xuICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGxheWVyczogc2VsZWN0ZWRMYXllcnMgfSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICBjb25zdCBsYXllcnMgPSBzZWxlY3RlZExheWVycy5tYXAoKGwpID0+IHRoaXMubWFwLmdldExheWVyQnlJZChsKSk7XG4gICAgICAgIHRoaXMuY29tcHV0ZUZvcm1hdHMobGF5ZXJzKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgT2JqZWN0LmtleXModGhpcy5mb3JtYXRzJC52YWx1ZSkuaW5kZXhPZih0aGlzLmZvcm0udmFsdWUuZm9ybWF0KSA9PT1cbiAgICAgICAgICAtMVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGZvcm1hdDogdW5kZWZpbmVkIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb2FkaW5nJC5uZXh0KHRydWUpO1xuICAgICAgICBjb25zdCBwcmV2aW91c1NwZWNzOiB7XG4gICAgICAgICAgaWQ6IHN0cmluZztcbiAgICAgICAgICB2aXNpYmxlOiBib29sZWFuO1xuICAgICAgICAgIG9wYWNpdHk6IG51bWJlcjtcbiAgICAgICAgICBxdWVyeWFibGU6IGJvb2xlYW47XG4gICAgICAgIH1bXSA9IFtdO1xuICAgICAgICBsYXllcnMuZm9yRWFjaCgobGF5ZXIpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBsYXllciBpbnN0YW5jZW9mIFZlY3RvckxheWVyICYmXG4gICAgICAgICAgICBsYXllci5kYXRhU291cmNlLm9sLmdldEZlYXR1cmVzKCkubGVuZ3RoID09PSAwXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBwcmV2aW91c1NwZWNzLnB1c2goe1xuICAgICAgICAgICAgICBpZDogbGF5ZXIuaWQsXG4gICAgICAgICAgICAgIHZpc2libGU6IGxheWVyLnZpc2libGUsXG4gICAgICAgICAgICAgIG9wYWNpdHk6IGxheWVyLm9wYWNpdHksXG4gICAgICAgICAgICAgIHF1ZXJ5YWJsZTogKGxheWVyIGFzIGFueSkucXVlcnlhYmxlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxheWVyLm9wYWNpdHkgPSAwO1xuICAgICAgICAgICAgbGF5ZXIudmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnByZXZpb3VzTGF5ZXJTcGVjcyQubmV4dChwcmV2aW91c1NwZWNzKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgfSwgNTAwKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5mb3JtYXRzJCQgPSB0aGlzLmZvcm1hdHMkXG4gICAgICAucGlwZShza2lwV2hpbGUoKGZvcm1hdHMpID0+ICFmb3JtYXRzKSlcbiAgICAgIC5zdWJzY3JpYmUoKGZvcm1hdHMpID0+IHtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKGZvcm1hdHMpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgZm9ybWF0OiBmb3JtYXRzW09iamVjdC5rZXlzKGZvcm1hdHMpWzBdXSB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLmVuY29kaW5ncyQkID0gdGhpcy5lbmNvZGluZ3MkXG4gICAgICAucGlwZShza2lwV2hpbGUoKGVuY29kaW5ncykgPT4gIWVuY29kaW5ncykpXG4gICAgICAuc3Vic2NyaWJlKChlbmNvZGluZ3MpID0+IHtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKGVuY29kaW5ncykubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgZW5jb2Rpbmc6IGVuY29kaW5nc1tPYmplY3Qua2V5cyhlbmNvZGluZ3MpWzBdXVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHRoaXMuZXhwb3J0YWJsZUxheWVycyQkID0gdGhpcy5leHBvcnRhYmxlTGF5ZXJzJFxuICAgICAgLnBpcGUoc2tpcFdoaWxlKChsYXllcnMpID0+ICFsYXllcnMpKVxuICAgICAgLnN1YnNjcmliZSgobGF5ZXJzKSA9PiB7XG4gICAgICAgIGlmIChsYXllcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBsYXllcnM6IGxheWVyc1swXS5pZCB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5jb250cm9sRm9ybWF0XS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChmb3JtYXQpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuQ1NWY29tbWEgfHxcbiAgICAgICAgZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuQ1NWc2VtaWNvbG9uXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBlbmNvZGluZzogRW5jb2RpbmdGb3JtYXQuTEFUSU4xIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBlbmNvZGluZzogRW5jb2RpbmdGb3JtYXQuVVRGOCB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuc2VsZWN0Rmlyc3RQcm9qKSB7XG4gICAgICBpZiAodGhpcy5wcm9qZWN0aW9ucyQudmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMuaW1wb3J0Rm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgICBpbnB1dFByb2o6IHtcbiAgICAgICAgICAgIHRyYW5zbGF0ZUtleTogJ25hZDgzJyxcbiAgICAgICAgICAgIGFsaWFzOiAnTkFEODMnLFxuICAgICAgICAgICAgY29kZTogJ0VQU0c6NDMyNicsXG4gICAgICAgICAgICB6b25lOiAnJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmltcG9ydEZvcm0ucGF0Y2hWYWx1ZSh7IGlucHV0UHJvajogdGhpcy5wcm9qZWN0aW9ucyQudmFsdWVbMF0gfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW1wb3J0Rm9ybS5wYXRjaFZhbHVlKHsgaW5wdXRQcm9qOiB1bmRlZmluZWQgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlUHJvamVjdGlvbnMoKSB7XG4gICAgdGhpcy5wcm9qZWN0aW9uc0NvbnN0cmFpbnRzID0gY29tcHV0ZVByb2plY3Rpb25zQ29uc3RyYWludHMoXG4gICAgICB0aGlzLnByb2plY3Rpb25zTGltaXRhdGlvbnNcbiAgICApO1xuICAgIGNvbnN0IHByb2plY3Rpb25zOiBJbnB1dFByb2plY3Rpb25zW10gPSBbXTtcblxuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMubmFkODMpIHtcbiAgICAgIHByb2plY3Rpb25zLnB1c2goe1xuICAgICAgICB0cmFuc2xhdGVLZXk6ICduYWQ4MycsXG4gICAgICAgIGFsaWFzOiAnTkFEODMnLFxuICAgICAgICBjb2RlOiAnRVBTRzo0MjY5JyxcbiAgICAgICAgem9uZTogJycsXG4gICAgICAgIGV4dGVudDogdW5kZWZpbmVkLFxuICAgICAgICBkZWY6IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMud2dzODQpIHtcbiAgICAgIHByb2plY3Rpb25zLnB1c2goe1xuICAgICAgICB0cmFuc2xhdGVLZXk6ICd3Z3M4NCcsXG4gICAgICAgIGFsaWFzOiAnV0dTODQnLFxuICAgICAgICBjb2RlOiAnRVBTRzo0MzI2JyxcbiAgICAgICAgem9uZTogJycsXG4gICAgICAgIGV4dGVudDogdW5kZWZpbmVkLFxuICAgICAgICBkZWY6IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMud2ViTWVyY2F0b3IpIHtcbiAgICAgIHByb2plY3Rpb25zLnB1c2goe1xuICAgICAgICB0cmFuc2xhdGVLZXk6ICd3ZWJNZXJjYXRvcicsXG4gICAgICAgIGFsaWFzOiAnV2ViIE1lcmNhdG9yJyxcbiAgICAgICAgY29kZTogJ0VQU0c6Mzg1NycsXG4gICAgICAgIHpvbmU6ICcnLFxuICAgICAgICBleHRlbnQ6IHVuZGVmaW5lZCxcbiAgICAgICAgZGVmOiB1bmRlZmluZWRcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMubXRtKSB7XG4gICAgICAvLyBhbGwgbXRtIHpvbmVzXG4gICAgICBjb25zdCBtaW5ab25lID0gdGhpcy5wcm9qZWN0aW9uc0NvbnN0cmFpbnRzLm10bVpvbmUubWluWm9uZTtcbiAgICAgIGNvbnN0IG1heFpvbmUgPSB0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMubXRtWm9uZS5tYXhab25lO1xuXG4gICAgICBmb3IgKGxldCBtdG1ab25lID0gbWluWm9uZTsgbXRtWm9uZSA8PSBtYXhab25lOyBtdG1ab25lKyspIHtcbiAgICAgICAgY29uc3QgY29kZSA9XG4gICAgICAgICAgbXRtWm9uZSA8IDEwID8gYEVQU0c6MzIxOCR7bXRtWm9uZX1gIDogYEVQU0c6MzIxJHs4MCArIG10bVpvbmV9YDtcbiAgICAgICAgcHJvamVjdGlvbnMucHVzaCh7XG4gICAgICAgICAgdHJhbnNsYXRlS2V5OiAnbXRtJyxcbiAgICAgICAgICBhbGlhczogYE1UTSAke210bVpvbmV9YCxcbiAgICAgICAgICBjb2RlLFxuICAgICAgICAgIHpvbmU6IGAke210bVpvbmV9YCxcbiAgICAgICAgICBleHRlbnQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICBkZWY6IHVuZGVmaW5lZFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9qZWN0aW9uc0NvbnN0cmFpbnRzLnV0bSkge1xuICAgICAgLy8gYWxsIHV0bSB6b25lc1xuICAgICAgY29uc3QgbWluWm9uZSA9IHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy51dG1ab25lLm1pblpvbmU7XG4gICAgICBjb25zdCBtYXhab25lID0gdGhpcy5wcm9qZWN0aW9uc0NvbnN0cmFpbnRzLnV0bVpvbmUubWF4Wm9uZTtcblxuICAgICAgZm9yIChsZXQgdXRtWm9uZSA9IG1pblpvbmU7IHV0bVpvbmUgPD0gbWF4Wm9uZTsgdXRtWm9uZSsrKSB7XG4gICAgICAgIGNvbnN0IGNvZGUgPVxuICAgICAgICAgIHV0bVpvbmUgPCAxMCA/IGBFUFNHOjMyNjAke3V0bVpvbmV9YCA6IGBFUFNHOjMyNiR7dXRtWm9uZX1gO1xuICAgICAgICBwcm9qZWN0aW9ucy5wdXNoKHtcbiAgICAgICAgICB0cmFuc2xhdGVLZXk6ICd1dG0nLFxuICAgICAgICAgIGFsaWFzOiBgVVRNICR7dXRtWm9uZX1gLFxuICAgICAgICAgIGNvZGUsXG4gICAgICAgICAgem9uZTogYCR7dXRtWm9uZX1gLFxuICAgICAgICAgIGV4dGVudDogdW5kZWZpbmVkLFxuICAgICAgICAgIGRlZjogdW5kZWZpbmVkXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBjb25maWdQcm9qZWN0aW9uOiBJbnB1dFByb2plY3Rpb25zW10gPSBbXTtcbiAgICBpZiAodGhpcy5wcm9qZWN0aW9uc0NvbnN0cmFpbnRzLnByb2pGcm9tQ29uZmlnKSB7XG4gICAgICBjb25maWdQcm9qZWN0aW9uID0gKHRoaXMuY29uZmlnLmdldENvbmZpZygncHJvamVjdGlvbnMnKSB8fFxuICAgICAgICBbXSkgYXMgSW5wdXRQcm9qZWN0aW9uc1tdO1xuICAgIH1cblxuICAgIHRoaXMucHJvamVjdGlvbnMkLm5leHQoY29uZmlnUHJvamVjdGlvbi5jb25jYXQocHJvamVjdGlvbnMpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0V29ya3NwYWNlQnlMYXllcklkKGlkOiBzdHJpbmcpOiBXb3Jrc3BhY2Uge1xuICAgIGNvbnN0IHdrc0Zyb21MYXllcklkID0gdGhpcy5zdG9yZVxuICAgICAgLmFsbCgpXG4gICAgICAuZmluZChcbiAgICAgICAgKHdvcmtzcGFjZSkgPT5cbiAgICAgICAgICAod29ya3NwYWNlIGFzIFdmc1dvcmtzcGFjZSB8IEZlYXR1cmVXb3Jrc3BhY2UgfCBFZGl0aW9uV29ya3NwYWNlKVxuICAgICAgICAgICAgLmxheWVyLmlkID09PSBpZFxuICAgICAgKTtcbiAgICBpZiAod2tzRnJvbUxheWVySWQpIHtcbiAgICAgIHJldHVybiB3a3NGcm9tTGF5ZXJJZDtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHVibGljIGdldExheWVyVGl0bGVCeUlkKGlkKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5tYXAuZ2V0TGF5ZXJCeUlkKGlkKT8udGl0bGU7XG4gIH1cblxuICBsYXllckhhc1NlbGVjdGVkRmVhdHVyZXMobGF5ZXI6IExheWVyKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgd2tzRnJvbUxheWVyID0gdGhpcy5nZXRXb3Jrc3BhY2VCeUxheWVySWQobGF5ZXIuaWQpO1xuICAgIGlmICh3a3NGcm9tTGF5ZXIpIHtcbiAgICAgIGNvbnN0IHJlY3MgPSB3a3NGcm9tTGF5ZXIuZW50aXR5U3RvcmUuc3RhdGVWaWV3LmZpcnN0QnkoXG4gICAgICAgIChyZWNvcmQ6IEVudGl0eVJlY29yZDxGZWF0dXJlPikgPT4ge1xuICAgICAgICAgIHJldHVybiByZWNvcmQuc3RhdGUuc2VsZWN0ZWQgPT09IHRydWU7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICByZXR1cm4gcmVjcyA/IHRydWUgOiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25seVNlbGVjdGVkKGV2ZW50OiBNYXRTbGlkZVRvZ2dsZUNoYW5nZSwgaWQ6IHN0cmluZykge1xuICAgIGxldCBsYXllcnNXaXRoU2VsZWN0aW9uID0gdGhpcy5mb3JtLnZhbHVlLmxheWVyc1dpdGhTZWxlY3Rpb247XG4gICAgaWYgKGV2ZW50LmNoZWNrZWQpIHtcbiAgICAgIGxheWVyc1dpdGhTZWxlY3Rpb24ucHVzaChpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxheWVyc1dpdGhTZWxlY3Rpb24gPSBsYXllcnNXaXRoU2VsZWN0aW9uLmZpbHRlcihcbiAgICAgICAgKGxheWVySWQpID0+IGxheWVySWQgIT09IGlkXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGxheWVyc1dpdGhTZWxlY3Rpb24gfSk7XG4gIH1cblxuICBwdWJsaWMgb25seVNlbGVjdGVkQ2xpY2soZXZlbnQsIGlkOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5mb3JtLnZhbHVlLmxheWVycy5maW5kKChsYXllcklkKSA9PiBsYXllcklkID09PSBpZCkpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpbkxheWVyc0lkVG9FeHBvcnRTZWxlY3Rpb25Pbmx5KGxheWVyOiBMYXllcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZvcm0udmFsdWUubGF5ZXJzV2l0aFNlbGVjdGlvbi5maW5kKFxuICAgICAgKGxheWVySWQpID0+IGxheWVySWQgPT09IGxheWVyLmlkXG4gICAgKVxuICAgICAgPyB0cnVlXG4gICAgICA6IGZhbHNlO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5sYXllcnMkJC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuZXhwb3J0YWJsZUxheWVycyQkLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5mb3JtYXRzJCQudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmVuY29kaW5ncyQkLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5mb3JtTGF5ZXIkJC51bnN1YnNjcmliZSgpO1xuICAgIGlmICh0aGlzLmV4cG9ydE9wdGlvbnMkJCkge1xuICAgICAgdGhpcy5leHBvcnRPcHRpb25zJCQudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5leHBvcnRPcHRpb25zQ2hhbmdlLmVtaXQodGhpcy5mb3JtLnZhbHVlKTtcbiAgICB0aGlzLmhhbmRsZVByZXZpb3VzTGF5ZXJTcGVjcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVQcmV2aW91c0xheWVyU3BlY3MoKSB7XG4gICAgY29uc3QgcHJldmlvdXNTcGVjcyA9IHRoaXMucHJldmlvdXNMYXllclNwZWNzJC52YWx1ZTtcbiAgICBpZiAocHJldmlvdXNTcGVjcyAmJiBwcmV2aW91c1NwZWNzLmxlbmd0aCkge1xuICAgICAgcHJldmlvdXNTcGVjcy5mb3JFYWNoKChzcGVjcykgPT4ge1xuICAgICAgICBjb25zdCBwcmV2aW91c0xheWVyID0gdGhpcy5tYXAuZ2V0TGF5ZXJCeUlkKHNwZWNzLmlkKTtcbiAgICAgICAgcHJldmlvdXNMYXllci52aXNpYmxlID0gc3BlY3MudmlzaWJsZTtcbiAgICAgICAgcHJldmlvdXNMYXllci5vcGFjaXR5ID0gc3BlY3Mub3BhY2l0eTtcbiAgICAgICAgKHByZXZpb3VzTGF5ZXIgYXMgYW55KS5xdWVyeWFibGUgPSBzcGVjcy5xdWVyeWFibGU7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5wcmV2aW91c0xheWVyU3BlY3MkLm5leHQodW5kZWZpbmVkKTtcbiAgfVxuXG4gIGltcG9ydEZpbGVzKGZpbGVzOiBGaWxlW10pIHtcbiAgICBsZXQgaW5wdXRQcm9qID0gdGhpcy5pbnB1dFByb2ouY29kZTtcbiAgICBpZiAodGhpcy5lc3BnQ29kZVJlZ2V4LnRlc3QoaW5wdXRQcm9qKSkge1xuICAgICAgaW5wdXRQcm9qID0gYEVQU0c6JHtpbnB1dFByb2p9YDtcbiAgICB9XG5cbiAgICB0aGlzLmxvYWRpbmckLm5leHQodHJ1ZSk7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICB0aGlzLmltcG9ydFNlcnZpY2UuaW1wb3J0KGZpbGUsIGlucHV0UHJvaikuc3Vic2NyaWJlKFxuICAgICAgICAoZmVhdHVyZXM6IEZlYXR1cmVbXSkgPT4gdGhpcy5vbkZpbGVJbXBvcnRTdWNjZXNzKGZpbGUsIGZlYXR1cmVzKSxcbiAgICAgICAgKGVycm9yOiBFcnJvcikgPT4gdGhpcy5vbkZpbGVJbXBvcnRFcnJvcihmaWxlLCBlcnJvciksXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVBvcHVwKHByZUNoZWNrOiBib29sZWFuID0gdHJ1ZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHAxID0gd2luZG93Lm9wZW4oJycsICdwb3B1cCcsICd3aWR0aD0xLCBoZWlnaHQ9MScpO1xuICAgIHAxLmNsb3NlKCk7XG4gICAgY29uc3QgcDIgPSB3aW5kb3cub3BlbignJywgJ3BvcHVwJywgJ3dpZHRoPTEsIGhlaWdodD0xJyk7XG4gICAgaWYgKCFwMiB8fCBwMi5jbG9zZWQgfHwgdHlwZW9mIHAyLmNsb3NlZCA9PT0gJ3VuZGVmaW5lZCcgfHwgcDIgPT09IG51bGwpIHtcbiAgICAgIHRoaXMub25Qb3B1cEJsb2NrZWRFcnJvcihwcmVDaGVjayk7XG4gICAgICB0aGlzLnBvcHVwQWxsb3dlZCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBwMi5jbG9zZSgpO1xuICAgICAgdGhpcy5wb3B1cEFsbG93ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5wb3B1cENoZWNrZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wb3B1cEFsbG93ZWQ7XG4gIH1cblxuICBoYW5kbGVFeHBvcnRGb3JtU3VibWl0KGRhdGE6IEV4cG9ydE9wdGlvbnMpIHtcbiAgICB0aGlzLmxvYWRpbmckLm5leHQodHJ1ZSk7XG5cbiAgICBjb25zdCBvZ3JlRm9ybWF0cyA9IE9iamVjdC5rZXlzKEV4cG9ydFNlcnZpY2Uub2dyZUZvcm1hdHMpO1xuICAgIGlmIChcbiAgICAgICF0aGlzLnBvcHVwQ2hlY2tlZCAmJlxuICAgICAgZGF0YS5sYXllcnMubGVuZ3RoID4gMSAmJlxuICAgICAgKG9ncmVGb3JtYXRzLmluZGV4T2YoZGF0YS5mb3JtYXQpID49IDAgfHxcbiAgICAgICAgZGF0YS5mb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5VUkwpICYmXG4gICAgICAhdGhpcy5wb3B1cEFsbG93ZWRcbiAgICApIHtcbiAgICAgIHRoaXMuaGFuZGxlUG9wdXAoKTtcbiAgICB9XG5cbiAgICBsZXQgZ2VvbVR5cGVzQ1NWOiB7IGdlb21ldHJ5VHlwZTogc3RyaW5nOyBmZWF0dXJlczogYW55W10gfVtdID0gW107XG4gICAgbGV0IGZlYXR1cmVzQ1NWOiBhbnlbXSA9IFtdO1xuICAgIGxldCBmaWxlbmFtZTogc3RyaW5nID0gJyc7XG5cbiAgICBmb3IgKGNvbnN0IFtsYXllckluZGV4LCBsYXllcl0gb2YgZGF0YS5sYXllcnMuZW50cmllcygpKSB7XG4gICAgICBjb25zdCBsYXkgPSB0aGlzLm1hcC5nZXRMYXllckJ5SWQobGF5ZXIpO1xuICAgICAgaWYgKFxuICAgICAgICAhKFxuICAgICAgICAgIGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuQ1NWc2VtaWNvbG9uIHx8XG4gICAgICAgICAgZGF0YS5mb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5DU1Zjb21tYVxuICAgICAgICApIHx8XG4gICAgICAgICFkYXRhLmNvbWJpbmVMYXllcnMgfHxcbiAgICAgICAgZGF0YS5sYXllcnMubGVuZ3RoID09PSAxXG4gICAgICApIHtcbiAgICAgICAgZmlsZW5hbWUgPSBsYXkudGl0bGU7XG4gICAgICAgIGlmIChkYXRhLm5hbWUpIHtcbiAgICAgICAgICBmaWxlbmFtZSA9IGRhdGEubmFtZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmlsZW5hbWUgPSB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAnaWdvLmdlby5leHBvcnQuY29tYmluZWRMYXllcnMnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCBkU09wdGlvbnM6IERhdGFTb3VyY2VPcHRpb25zID0gbGF5LmRhdGFTb3VyY2Uub3B0aW9ucztcbiAgICAgIGlmIChcbiAgICAgICAgZGF0YS5mb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5VUkwgJiZcbiAgICAgICAgZFNPcHRpb25zLmRvd25sb2FkICYmXG4gICAgICAgIChkU09wdGlvbnMuZG93bmxvYWQudXJsIHx8IGRTT3B0aW9ucy5kb3dubG9hZC5keW5hbWljVXJsKVxuICAgICAgKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIC8vIGJldHRlciBsb29rIGFuIGZlZWxcbiAgICAgICAgICBjb25zdCB1cmwgPSBkU09wdGlvbnMuZG93bmxvYWQudXJsIHx8IGRTT3B0aW9ucy5kb3dubG9hZC5keW5hbWljVXJsO1xuICAgICAgICAgIHVybC5tYXRjaCgvc2VydmljZT13ZnMvZ2kpXG4gICAgICAgICAgICA/IHRoaXMuZG93bmxvYWRTZXJ2aWNlLm9wZW4obGF5KVxuICAgICAgICAgICAgOiB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnKTtcbiAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICB9LCA1MDApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB3a3MgPSB0aGlzLmdldFdvcmtzcGFjZUJ5TGF5ZXJJZChsYXllcik7XG4gICAgICBsZXQgb2xGZWF0dXJlcztcbiAgICAgIGlmICh3a3MgJiYgd2tzLmVudGl0eVN0b3JlICYmIHdrcy5lbnRpdHlTdG9yZS5zdGF0ZVZpZXcuYWxsKCkubGVuZ3RoKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkYXRhLmxheWVyc1dpdGhTZWxlY3Rpb24uaW5kZXhPZihsYXllcikgIT09IC0xICYmXG4gICAgICAgICAgZGF0YS5mZWF0dXJlSW5NYXBFeHRlbnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gT25seSBleHBvcnQgc2VsZWN0ZWQgZmVhdHVyZSAmJiBpbnRvIG1hcCBleHRlbnRcbiAgICAgICAgICBvbEZlYXR1cmVzID0gd2tzLmVudGl0eVN0b3JlLnN0YXRlVmlld1xuICAgICAgICAgICAgLmFsbCgpXG4gICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAoZTogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+XG4gICAgICAgICAgICAgICAgZS5zdGF0ZS5pbk1hcEV4dGVudCAmJiBlLnN0YXRlLnNlbGVjdGVkXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAubWFwKChlKSA9PiAoZS5lbnRpdHkgYXMgRmVhdHVyZSkub2wpO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIGRhdGEubGF5ZXJzV2l0aFNlbGVjdGlvbi5pbmRleE9mKGxheWVyKSAhPT0gLTEgJiZcbiAgICAgICAgICAhZGF0YS5mZWF0dXJlSW5NYXBFeHRlbnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gT25seSBleHBvcnQgc2VsZWN0ZWQgZmVhdHVyZSAmJiAgKGludG8gbWFwIGV4dGVudCBPUiBub3QpXG4gICAgICAgICAgb2xGZWF0dXJlcyA9IHdrcy5lbnRpdHlTdG9yZS5zdGF0ZVZpZXdcbiAgICAgICAgICAgIC5hbGwoKVxuICAgICAgICAgICAgLmZpbHRlcigoZTogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+IGUuc3RhdGUuc2VsZWN0ZWQpXG4gICAgICAgICAgICAubWFwKChlKSA9PiAoZS5lbnRpdHkgYXMgRmVhdHVyZSkub2wpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEuZmVhdHVyZUluTWFwRXh0ZW50KSB7XG4gICAgICAgICAgLy8gT25seSBpbnRvIG1hcCBleHRlbnRcbiAgICAgICAgICBvbEZlYXR1cmVzID0gd2tzLmVudGl0eVN0b3JlLnN0YXRlVmlld1xuICAgICAgICAgICAgLmFsbCgpXG4gICAgICAgICAgICAuZmlsdGVyKChlOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT4gZS5zdGF0ZS5pbk1hcEV4dGVudClcbiAgICAgICAgICAgIC5tYXAoKGUpID0+IChlLmVudGl0eSBhcyBGZWF0dXJlKS5vbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQWxsIGZlYXR1cmVzXG4gICAgICAgICAgb2xGZWF0dXJlcyA9IHdrcy5lbnRpdHlTdG9yZS5zdGF0ZVZpZXdcbiAgICAgICAgICAgIC5hbGwoKVxuICAgICAgICAgICAgLm1hcCgoZSkgPT4gKGUuZW50aXR5IGFzIEZlYXR1cmUpLm9sKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgb2wgPSBsYXkuZGF0YVNvdXJjZS5vbCBhcyBvbFZlY3RvclNvdXJjZSB8IG9sQ2x1c3RlclNvdXJjZTtcbiAgICAgICAgaWYgKGRhdGEuZmVhdHVyZUluTWFwRXh0ZW50KSB7XG4gICAgICAgICAgb2xGZWF0dXJlcyA9IG9sLmdldEZlYXR1cmVzSW5FeHRlbnQoXG4gICAgICAgICAgICBsYXkubWFwLnZpZXdDb250cm9sbGVyLmdldEV4dGVudCgpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvbEZlYXR1cmVzID0gb2wuZ2V0RmVhdHVyZXMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGF5LmRhdGFTb3VyY2UgaW5zdGFuY2VvZiBDbHVzdGVyRGF0YVNvdXJjZSkge1xuICAgICAgICAgIG9sRmVhdHVyZXMgPSBvbEZlYXR1cmVzLmZsYXRNYXAoKGNsdXN0ZXI6IGFueSkgPT5cbiAgICAgICAgICAgIGNsdXN0ZXIuZ2V0KCdmZWF0dXJlcycpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsZXQgZ2VvbVR5cGVzOiB7IGdlb21ldHJ5VHlwZTogc3RyaW5nOyBmZWF0dXJlczogYW55W10gfVtdID0gW107XG4gICAgICBpZiAoXG4gICAgICAgIGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuU2hhcGVmaWxlIHx8XG4gICAgICAgIGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuR1BYXG4gICAgICApIHtcbiAgICAgICAgb2xGZWF0dXJlcy5mb3JFYWNoKChvbEZlYXR1cmUpID0+IHtcbiAgICAgICAgICBjb25zdCBmZWF0dXJlR2VvbVR5cGUgPSBvbEZlYXR1cmUuZ2V0R2VvbWV0cnkoKS5nZXRUeXBlKCk7XG4gICAgICAgICAgY29uc3QgY3VycmVudEdlb21UeXBlID0gZ2VvbVR5cGVzLmZpbmQoXG4gICAgICAgICAgICAoZ2VvbVR5cGUpID0+IGdlb21UeXBlLmdlb21ldHJ5VHlwZSA9PT0gZmVhdHVyZUdlb21UeXBlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoY3VycmVudEdlb21UeXBlKSB7XG4gICAgICAgICAgICBjdXJyZW50R2VvbVR5cGUuZmVhdHVyZXMucHVzaChvbEZlYXR1cmUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZW9tVHlwZXMucHVzaCh7XG4gICAgICAgICAgICAgIGdlb21ldHJ5VHlwZTogZmVhdHVyZUdlb21UeXBlLFxuICAgICAgICAgICAgICBmZWF0dXJlczogW29sRmVhdHVyZV1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnZW9tVHlwZXMgPSBbeyBnZW9tZXRyeVR5cGU6ICcnLCBmZWF0dXJlczogb2xGZWF0dXJlcyB9XTtcbiAgICAgIH1cblxuICAgICAgZ2VvbVR5cGVzLmZvckVhY2goKGdlb21UeXBlKSA9PiB7XG4gICAgICAgIGdlb21UeXBlLmZlYXR1cmVzLmZvckVhY2goKGZlYXR1cmUpID0+IHtcbiAgICAgICAgICBjb25zdCByYWRpdXM6IG51bWJlciA9IGZlYXR1cmUuZ2V0KCdyYWQnKTtcbiAgICAgICAgICBpZiAocmFkaXVzKSB7XG4gICAgICAgICAgICBjb25zdCBjZW50ZXI0MzI2OiBBcnJheTxudW1iZXI+ID0gW1xuICAgICAgICAgICAgICBmZWF0dXJlLmdldCgnbG9uZ2l0dWRlJyksXG4gICAgICAgICAgICAgIGZlYXR1cmUuZ2V0KCdsYXRpdHVkZScpXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgY29uc3QgY2lyY2xlID0gY2lyY3VsYXIoY2VudGVyNDMyNiwgcmFkaXVzLCA1MDApO1xuICAgICAgICAgICAgY2lyY2xlLnRyYW5zZm9ybSgnRVBTRzo0MzI2JywgZmVhdHVyZS5nZXQoJ19wcm9qZWN0aW9uJykpO1xuICAgICAgICAgICAgZmVhdHVyZS5zZXRHZW9tZXRyeShjaXJjbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuR1BYKSB7XG4gICAgICAgIGNvbnN0IGdweEZlYXR1cmVDbnQgPSBnZW9tVHlwZXMubGVuZ3RoO1xuICAgICAgICBnZW9tVHlwZXMgPSBnZW9tVHlwZXMuZmlsdGVyKChnZW9tVHlwZSkgPT5cbiAgICAgICAgICBbJ0xpbmVTdHJpbmcnLCAnUG9pbnQnXS5pbmNsdWRlcyhnZW9tVHlwZS5nZW9tZXRyeVR5cGUpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGdweEZlYXR1cmVDbnRQb2ludE9yUG9seSA9IGdlb21UeXBlcy5sZW5ndGg7XG4gICAgICAgIGlmIChncHhGZWF0dXJlQ250ID4gZ3B4RmVhdHVyZUNudFBvaW50T3JQb2x5KSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcihcbiAgICAgICAgICAgICdpZ28uZ2VvLmV4cG9ydC5ncHguZXJyb3IucG9seS50ZXh0JyxcbiAgICAgICAgICAgICdpZ28uZ2VvLmV4cG9ydC5ncHguZXJyb3IucG9seS50aXRsZScsXG4gICAgICAgICAgICB7IHRpbWVPdXQ6IDIwMDAwIH1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAoZGF0YS5mb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5DU1ZzZW1pY29sb24gfHxcbiAgICAgICAgICBkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkNTVmNvbW1hKSAmJlxuICAgICAgICBkYXRhLmNvbWJpbmVMYXllcnNcbiAgICAgICkge1xuICAgICAgICBnZW9tVHlwZXMuZm9yRWFjaCgoZ2VvbVR5cGUpID0+IGdlb21UeXBlc0NTVi5wdXNoKGdlb21UeXBlKSk7XG5cbiAgICAgICAgaWYgKGxheWVySW5kZXggIT09IGRhdGEubGF5ZXJzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgcHJldmlvdXNGZWF0dXJlID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGdlb21UeXBlc0NTVi5mb3JFYWNoKChnZW9tVHlwZSkgPT4ge1xuICAgICAgICAgICAgZ2VvbVR5cGUuZmVhdHVyZXMuZm9yRWFjaCgoY3VycmVudEZlYXR1cmUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGRhdGEuc2VwYXJhdG9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzRmVhdHVyZSkge1xuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50RmVhdHVyZS5nZXQoJ19mZWF0dXJlU3RvcmUnKS5sYXllci5vcHRpb25zLnRpdGxlICE9PVxuICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0ZlYXR1cmUuZ2V0KCdfZmVhdHVyZVN0b3JlJykubGF5ZXIub3B0aW9ucy50aXRsZVxuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpdGxlRW1wdHlSb3dzID0gdGhpcy5jcmVhdGVUaXRsZUVtcHR5Um93cyhcbiAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0ZlYXR1cmUsXG4gICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZlYXR1cmVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXNDU1YucHVzaCh0aXRsZUVtcHR5Um93c1syXSk7XG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzQ1NWLnB1c2godGl0bGVFbXB0eVJvd3NbMF0pO1xuICAgICAgICAgICAgICAgICAgICBmZWF0dXJlc0NTVi5wdXNoKHRpdGxlRW1wdHlSb3dzWzFdKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgY29uc3QgdGl0bGVFbXB0eVJvd3MgPSB0aGlzLmNyZWF0ZVRpdGxlRW1wdHlSb3dzKFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50RmVhdHVyZSxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEZlYXR1cmVcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBmZWF0dXJlc0NTVi5wdXNoKHRpdGxlRW1wdHlSb3dzWzBdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZmVhdHVyZXNDU1YucHVzaChjdXJyZW50RmVhdHVyZSk7XG4gICAgICAgICAgICAgIHByZXZpb3VzRmVhdHVyZSA9IGN1cnJlbnRGZWF0dXJlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGdlb21UeXBlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcihcbiAgICAgICAgICAnaWdvLmdlby5leHBvcnQubm90aGluZy50ZXh0JyxcbiAgICAgICAgICAnaWdvLmdlby5leHBvcnQubm90aGluZy50aXRsZScsXG4gICAgICAgICAgeyB0aW1lT3V0OiAyMDAwMCB9XG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIShcbiAgICAgICAgICAgIGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuQ1NWc2VtaWNvbG9uIHx8XG4gICAgICAgICAgICBkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkNTVmNvbW1hXG4gICAgICAgICAgKSB8fFxuICAgICAgICAgICFkYXRhLmNvbWJpbmVMYXllcnNcbiAgICAgICAgKSB7XG4gICAgICAgICAgZ2VvbVR5cGVzLm1hcCgoZ2VvbVR5cGUpID0+XG4gICAgICAgICAgICB0aGlzLmV4cG9ydFNlcnZpY2VcbiAgICAgICAgICAgICAgLmV4cG9ydChcbiAgICAgICAgICAgICAgICBnZW9tVHlwZS5mZWF0dXJlcyxcbiAgICAgICAgICAgICAgICBkYXRhLmZvcm1hdCxcbiAgICAgICAgICAgICAgICBmaWxlbmFtZSArIGdlb21UeXBlLmdlb21ldHJ5VHlwZSxcbiAgICAgICAgICAgICAgICBkYXRhLmVuY29kaW5nLFxuICAgICAgICAgICAgICAgIHRoaXMubWFwLnByb2plY3Rpb25cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICgpID0+IHt9LFxuICAgICAgICAgICAgICAgIChlcnJvcjogRXJyb3IpID0+IHRoaXMub25GaWxlRXhwb3J0RXJyb3IoZXJyb3IpLFxuICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMub25GaWxlRXhwb3J0U3VjY2VzcygpO1xuXG4gICAgICAgICAgICAgICAgICBnZW9tVHlwZS5mZWF0dXJlcy5mb3JFYWNoKChmZWF0dXJlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2lyY2xlVG9Qb2ludChmZWF0dXJlKTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgKGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuQ1NWc2VtaWNvbG9uIHx8XG4gICAgICAgIGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuQ1NWY29tbWEpICYmXG4gICAgICBkYXRhLmNvbWJpbmVMYXllcnNcbiAgICApIHtcbiAgICAgIHRoaXMuZXhwb3J0U2VydmljZVxuICAgICAgICAuZXhwb3J0KFxuICAgICAgICAgIGZlYXR1cmVzQ1NWLFxuICAgICAgICAgIGRhdGEuZm9ybWF0LFxuICAgICAgICAgIGZpbGVuYW1lLFxuICAgICAgICAgIGRhdGEuZW5jb2RpbmcsXG4gICAgICAgICAgdGhpcy5tYXAucHJvamVjdGlvblxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgKCkgPT4ge30sXG4gICAgICAgICAgKGVycm9yOiBFcnJvcikgPT4gdGhpcy5vbkZpbGVFeHBvcnRFcnJvcihlcnJvciksXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkZpbGVFeHBvcnRTdWNjZXNzKCk7XG5cbiAgICAgICAgICAgIGZlYXR1cmVzQ1NWLmZvckVhY2goKGZlYXR1cmUpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5jaXJjbGVUb1BvaW50KGZlYXR1cmUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVGl0bGVFbXB0eVJvd3MocHJldmlvdXNGZWF0dXJlLCBjdXJyZW50RmVhdHVyZSkge1xuICAgIGNvbnN0IHRpdGxlUm93ID0gY3VycmVudEZlYXR1cmUuY2xvbmUoKTtcbiAgICBjb25zdCBoZWFkZXJSb3cgPSBjdXJyZW50RmVhdHVyZS5jbG9uZSgpO1xuICAgIGNvbnN0IGVtcHR5Um93ID0gY3VycmVudEZlYXR1cmUuY2xvbmUoKTtcbiAgICBjb25zdCBwcmV2aW91c0ZlYXR1cmVLZXlzOiBBcnJheTxzdHJpbmc+ID0gcHJldmlvdXNGZWF0dXJlLmdldEtleXMoKTtcbiAgICBsZXQgZmlyc3RLZXlQcmV2aW91czogc3RyaW5nID0gJyc7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gcHJldmlvdXNGZWF0dXJlS2V5cykge1xuICAgICAgaWYgKHByZXZpb3VzRmVhdHVyZUtleXNba2V5XSAhPT0gJ2dlb21ldHJ5Jykge1xuICAgICAgICBmaXJzdEtleVByZXZpb3VzID0gcHJldmlvdXNGZWF0dXJlS2V5c1trZXldO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50RmVhdHVyZUtleXM6IEFycmF5PHN0cmluZz4gPSBjdXJyZW50RmVhdHVyZS5nZXRLZXlzKCk7XG4gICAgbGV0IGZpcnN0S2V5Q3VycmVudDogc3RyaW5nID0gJyc7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gY3VycmVudEZlYXR1cmVLZXlzKSB7XG4gICAgICBpZiAoY3VycmVudEZlYXR1cmVLZXlzW2tleV0gIT09ICdnZW9tZXRyeScpIHtcbiAgICAgICAgZmlyc3RLZXlDdXJyZW50ID0gY3VycmVudEZlYXR1cmVLZXlzW2tleV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBhbGxLZXlzOiBBcnJheTxzdHJpbmc+ID0gY3VycmVudEZlYXR1cmUuZ2V0S2V5cygpO1xuICAgIHByZXZpb3VzRmVhdHVyZUtleXMuZm9yRWFjaCgocHJldmlvdXNLZXkpID0+IHtcbiAgICAgIGlmIChhbGxLZXlzLmluY2x1ZGVzKHByZXZpb3VzS2V5KSAmJiBwcmV2aW91c0tleSAhPT0gZmlyc3RLZXlQcmV2aW91cykge1xuICAgICAgICBhbGxLZXlzLnB1c2gocHJldmlvdXNLZXkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGFsbEtleXMudW5zaGlmdChmaXJzdEtleVByZXZpb3VzKTtcblxuICAgIGxldCBmaXJzdEtleUFsbDogc3RyaW5nID0gJyc7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gYWxsS2V5cykge1xuICAgICAgaWYgKGFsbEtleXNba2V5XSAhPT0gJ2dlb21ldHJ5Jykge1xuICAgICAgICBmaXJzdEtleUFsbCA9IGFsbEtleXNba2V5XTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGFsbEtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCBzYW1lS2V5czogYm9vbGVhbiA9XG4gICAgICAgIHByZXZpb3VzRmVhdHVyZUtleXMubGVuZ3RoID09PSBjdXJyZW50RmVhdHVyZUtleXMubGVuZ3RoICYmXG4gICAgICAgIHByZXZpb3VzRmVhdHVyZUtleXMuZXZlcnkoXG4gICAgICAgICAgKHZhbHVlLCBpbmRleCkgPT4gdmFsdWUgPT09IGN1cnJlbnRGZWF0dXJlS2V5c1tpbmRleF1cbiAgICAgICAgKTtcbiAgICAgIGlmIChrZXkgPT09IGZpcnN0S2V5QWxsICYmICFzYW1lS2V5cykge1xuICAgICAgICB0aXRsZVJvdy5zZXQoXG4gICAgICAgICAga2V5LFxuICAgICAgICAgIGN1cnJlbnRGZWF0dXJlLmdldCgnX2ZlYXR1cmVTdG9yZScpLmxheWVyLm9wdGlvbnMudGl0bGUgK1xuICAgICAgICAgICAgJyA9PT09PT09PT09PT09PT0+JyxcbiAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIGhlYWRlclJvdy5zZXQoa2V5LCBrZXksIHRydWUpO1xuICAgICAgICBlbXB0eVJvdy51bnNldChrZXksIHRydWUpO1xuICAgICAgfSBlbHNlIGlmIChrZXkgPT09IGZpcnN0S2V5QWxsICYmIHNhbWVLZXlzKSB7XG4gICAgICAgIHRpdGxlUm93LnNldChcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgY3VycmVudEZlYXR1cmUuZ2V0KCdfZmVhdHVyZVN0b3JlJykubGF5ZXIub3B0aW9ucy50aXRsZSxcbiAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIGhlYWRlclJvdy5zZXQoa2V5LCBrZXksIHRydWUpO1xuICAgICAgICBlbXB0eVJvdy51bnNldChrZXksIHRydWUpO1xuICAgICAgfSBlbHNlIGlmIChrZXkgPT09IGZpcnN0S2V5Q3VycmVudCkge1xuICAgICAgICB0aXRsZVJvdy5zZXQoXG4gICAgICAgICAga2V5LFxuICAgICAgICAgIGN1cnJlbnRGZWF0dXJlLmdldCgnX2ZlYXR1cmVTdG9yZScpLmxheWVyLm9wdGlvbnMudGl0bGUsXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgICBoZWFkZXJSb3cuc2V0KGtleSwga2V5LCB0cnVlKTtcbiAgICAgICAgZW1wdHlSb3cudW5zZXQoa2V5LCB0cnVlKTtcbiAgICAgIH0gZWxzZSBpZiAoa2V5ICE9PSAnZ2VvbWV0cnknKSB7XG4gICAgICAgIHRpdGxlUm93LnVuc2V0KGtleSwgdHJ1ZSk7XG4gICAgICAgIGhlYWRlclJvdy5zZXQoa2V5LCBrZXksIHRydWUpO1xuICAgICAgICBlbXB0eVJvdy51bnNldChrZXksIHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGl0bGVSb3cudW5zZXQoa2V5LCB0cnVlKTtcbiAgICAgICAgZW1wdHlSb3cudW5zZXQoa2V5LCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFjdXJyZW50RmVhdHVyZUtleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICBoZWFkZXJSb3cudW5zZXQoa2V5LCB0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCB0aXRsZUVtcHR5Um93cyA9IFt0aXRsZVJvdywgaGVhZGVyUm93LCBlbXB0eVJvd107XG4gICAgcmV0dXJuIHRpdGxlRW1wdHlSb3dzO1xuICB9XG5cbiAgcHJpdmF0ZSBjaXJjbGVUb1BvaW50KGZlYXR1cmUpIHtcbiAgICBjb25zdCByYWRpdXM6IG51bWJlciA9IGZlYXR1cmUuZ2V0KCdyYWQnKTtcblxuICAgIGlmIChyYWRpdXMpIHtcbiAgICAgIGNvbnN0IHBvaW50ID0gbmV3IG9sUG9pbnQoW1xuICAgICAgICBmZWF0dXJlLmdldCgnbG9uZ2l0dWRlJyksXG4gICAgICAgIGZlYXR1cmUuZ2V0KCdsYXRpdHVkZScpXG4gICAgICBdKTtcbiAgICAgIHBvaW50LnRyYW5zZm9ybSgnRVBTRzo0MzI2JywgZmVhdHVyZS5nZXQoJ19wcm9qZWN0aW9uJykpO1xuICAgICAgZmVhdHVyZS5zZXRHZW9tZXRyeShwb2ludCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZvcm0oKSB7XG4gICAgdGhpcy5pbXBvcnRGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBpbnB1dFByb2o6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuZm9yY2VOYW1pbmcpIHtcbiAgICAgIHRoaXMuZm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICBmb3JtYXQ6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgICAgbGF5ZXJzOiBbW10sIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICAgIGxheWVyc1dpdGhTZWxlY3Rpb246IFtbXV0sXG4gICAgICAgIGVuY29kaW5nOiBbRW5jb2RpbmdGb3JtYXQuVVRGOCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgICAgY29tYmluZUxheWVyczogW3RydWUsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICAgIHNlcGFyYXRvcjogW2ZhbHNlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgICBmZWF0dXJlSW5NYXBFeHRlbnQ6IFtmYWxzZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgICAgbmFtZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgIGZvcm1hdDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgICBsYXllcnM6IFtbXSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgICAgbGF5ZXJzV2l0aFNlbGVjdGlvbjogW1tdXSxcbiAgICAgICAgZW5jb2Rpbmc6IFtFbmNvZGluZ0Zvcm1hdC5VVEY4LCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgICBjb21iaW5lTGF5ZXJzOiBbdHJ1ZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgICAgc2VwYXJhdG9yOiBbZmFsc2UsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICAgIGZlYXR1cmVJbk1hcEV4dGVudDogW2ZhbHNlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9uRmlsZUltcG9ydFN1Y2Nlc3MoZmlsZTogRmlsZSwgZmVhdHVyZXM6IEZlYXR1cmVbXSkge1xuICAgIGNvbnN0IGltcG9ydEV4cG9ydE9wdGlvbnMgPSB0aGlzLmNvbmZpZy5nZXRDb25maWcoXG4gICAgICAnaW1wb3J0RXhwb3J0J1xuICAgICkgYXMgSW1wb3J0RXhwb3J0U2VydmljZU9wdGlvbnM7XG4gICAgY29uc3QgY29uZmlybURpYWxvZ1NlcnZpY2UgPSBpbXBvcnRFeHBvcnRPcHRpb25zPy5hbGxvd1RvU3RvcmVMYXllclxuICAgICAgPyB0aGlzLmNvbmZpcm1EaWFsb2dTZXJ2aWNlXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBpZiAoIWltcG9ydEV4cG9ydE9wdGlvbnM/LmltcG9ydFdpdGhTdHlsZSkge1xuICAgICAgaGFuZGxlRmlsZUltcG9ydFN1Y2Nlc3MoXG4gICAgICAgIGZpbGUsXG4gICAgICAgIGZlYXR1cmVzLFxuICAgICAgICB0aGlzLm1hcCxcbiAgICAgICAgdGhpcy5jb250ZXh0VXJpLFxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLFxuICAgICAgICB0aGlzLmxheWVyU2VydmljZSxcbiAgICAgICAgY29uZmlybURpYWxvZ1NlcnZpY2VcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhhbmRsZUZpbGVJbXBvcnRTdWNjZXNzKFxuICAgICAgICBmaWxlLFxuICAgICAgICBmZWF0dXJlcyxcbiAgICAgICAgdGhpcy5tYXAsXG4gICAgICAgIHRoaXMuY29udGV4dFVyaSxcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZSxcbiAgICAgICAgdGhpcy5sYXllclNlcnZpY2UsXG4gICAgICAgIGNvbmZpcm1EaWFsb2dTZXJ2aWNlLFxuICAgICAgICB0aGlzLnN0eWxlTGlzdFNlcnZpY2UsXG4gICAgICAgIHRoaXMuc3R5bGVTZXJ2aWNlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb25GaWxlSW1wb3J0RXJyb3IoZmlsZTogRmlsZSwgZXJyb3I6IEVycm9yKSB7XG4gICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICBoYW5kbGVGaWxlSW1wb3J0RXJyb3IoZmlsZSwgZXJyb3IsIHRoaXMubWVzc2FnZVNlcnZpY2UsIHRoaXMuZmlsZVNpemVNYik7XG4gIH1cblxuICBwcml2YXRlIG9uUG9wdXBCbG9ja2VkRXJyb3IocHJlQ2hlY2s6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICBjb25zdCBleHRyYU1lc3NhZ2UgPSBwcmVDaGVja1xuICAgICAgPyAnaWdvLmdlby5leHBvcnQucG9wdXBCbG9ja2VkLnNlbGVjdEFnYWluJ1xuICAgICAgOiAnaWdvLmdlby5leHBvcnQucG9wdXBCbG9ja2VkLnJldHJ5JztcbiAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVycm9yKFxuICAgICAgJ2lnby5nZW8uZXhwb3J0LnBvcHVwQmxvY2tlZC50ZXh0JyxcbiAgICAgICdpZ28uZ2VvLmV4cG9ydC5wb3B1cEJsb2NrZWQudGl0bGUnLFxuICAgICAgeyB0aW1lT3V0OiAyMDAwMCB9LFxuICAgICAgeyBleHRyYU1lc3NhZ2UgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uRmlsZUV4cG9ydEVycm9yKGVycm9yOiBFcnJvcikge1xuICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgaGFuZGxlRmlsZUV4cG9ydEVycm9yKGVycm9yLCB0aGlzLm1lc3NhZ2VTZXJ2aWNlKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZENvbmZpZygpIHtcbiAgICBjb25zdCBmb3JjZU5hbWluZ0NvbmZpZyA9IHRoaXMuY29uZmlnLmdldENvbmZpZygnaW1wb3J0RXhwb3J0LmZvcmNlTmFtaW5nJyk7XG4gICAgdGhpcy5mb3JjZU5hbWluZyA9XG4gICAgICBmb3JjZU5hbWluZ0NvbmZpZyAhPT0gdW5kZWZpbmVkID8gZm9yY2VOYW1pbmdDb25maWcgOiBmYWxzZTtcblxuICAgIHRoaXMuY29tcHV0ZUZvcm1hdHMoKTtcbiAgICB0aGlzLmxvYWRFbmNvZGluZ3MoKTtcbiAgfVxuXG4gIHB1YmxpYyBlbmNvZGluZ0RlZmF1bHRWYWx1ZShmb3JtYXQ6IEV4cG9ydEZvcm1hdCkge1xuICAgIGlmIChcbiAgICAgIGZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkNTVmNvbW1hIHx8XG4gICAgICBmb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5DU1ZzZW1pY29sb25cbiAgICApIHtcbiAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgZW5jb2Rpbmc6IEVuY29kaW5nRm9ybWF0LkxBVElOMSB9KTtcbiAgICAgIHJldHVybiBFbmNvZGluZ0Zvcm1hdC5MQVRJTjE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgZW5jb2Rpbmc6IEVuY29kaW5nRm9ybWF0LlVURjggfSk7XG4gICAgICByZXR1cm4gRW5jb2RpbmdGb3JtYXQuVVRGODtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvYWRFbmNvZGluZ3MoKSB7XG4gICAgdGhpcy5lbmNvZGluZ3MkLm5leHQoRW5jb2RpbmdGb3JtYXQpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlRm9ybWF0cyhsYXllcnM/OiBBbnlMYXllcltdKSB7XG4gICAgbGV0IGFwcGxpZWRmb3JtYXRzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKEV4cG9ydEZvcm1hdCk7XG4gICAgY29uc3QgZm9ybWF0c1R5cGUgPSB7XG4gICAgICBvbmx5VXJsOiBmYWxzZSxcbiAgICAgIG9ubHlWZWN0b3I6IGZhbHNlLFxuICAgICAgdmVjdG9yQW5kVXJsOiBmYWxzZSxcbiAgICAgIGN1c3RvbUxpc3Q6IGZhbHNlXG4gICAgfTtcbiAgICBjb25zdCBjdXN0b21MaXN0ID0gW107XG4gICAgaWYgKGxheWVycyAmJiBsYXllcnMubGVuZ3RoKSB7XG4gICAgICBsYXllcnMuZm9yRWFjaCgobGF5ZXIpID0+IHtcbiAgICAgICAgaWYgKCFsYXllcikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmRvd25sb2FkPy5hbGxvd2VkRm9ybWF0cykge1xuICAgICAgICAgIGZvcm1hdHNUeXBlLmN1c3RvbUxpc3QgPSB0cnVlO1xuICAgICAgICAgIGN1c3RvbUxpc3QucHVzaCh7XG4gICAgICAgICAgICBsYXllcjogbGF5ZXIudGl0bGUsXG4gICAgICAgICAgICBmb3JtYXRzOiB0aGlzLnZhbGlkYXRlTGlzdEZvcm1hdChcbiAgICAgICAgICAgICAgbGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmRvd25sb2FkLmFsbG93ZWRGb3JtYXRzXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgIShsYXllciBpbnN0YW5jZW9mIFZlY3RvckxheWVyKSAmJlxuICAgICAgICAgIGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5kb3dubG9hZCAmJlxuICAgICAgICAgIGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5kb3dubG9hZC51cmxcbiAgICAgICAgKSB7XG4gICAgICAgICAgZm9ybWF0c1R5cGUub25seVVybCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgbGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmRvd25sb2FkICYmXG4gICAgICAgICAgKGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5kb3dubG9hZC51cmwgfHxcbiAgICAgICAgICAgIGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5kb3dubG9hZC5keW5hbWljVXJsKVxuICAgICAgICApIHtcbiAgICAgICAgICBmb3JtYXRzVHlwZS52ZWN0b3JBbmRVcmwgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGxheWVyIGluc3RhbmNlb2YgVmVjdG9yTGF5ZXIpIHtcbiAgICAgICAgICBmb3JtYXRzVHlwZS5vbmx5VmVjdG9yID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChmb3JtYXRzVHlwZS5vbmx5VXJsID09PSB0cnVlICYmIGZvcm1hdHNUeXBlLm9ubHlWZWN0b3IgPT09IGZhbHNlKSB7XG4gICAgICAgIGFwcGxpZWRmb3JtYXRzID0gWydVUkwnXTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGZvcm1hdHNUeXBlLm9ubHlWZWN0b3IgPT09IHRydWUgJiZcbiAgICAgICAgZm9ybWF0c1R5cGUub25seVVybCA9PT0gZmFsc2VcbiAgICAgICkge1xuICAgICAgICB0aGlzLmNvbXB1dGVGb3JtYXRzKCk7IC8vIHJlc2V0XG4gICAgICAgIGlmIChFeHBvcnRGb3JtYXQuVVJMIGluIHRoaXMuZm9ybWF0cyQudmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5mb3JtYXRzJC52YWx1ZSkuZmlsdGVyKFxuICAgICAgICAgICAgKGtleSkgPT4ga2V5ICE9PSAnVVJMJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgYXBwbGllZGZvcm1hdHMgPSBrZXlzO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBmb3JtYXRzVHlwZS52ZWN0b3JBbmRVcmwgPT09IHRydWUgJiZcbiAgICAgICAgZm9ybWF0c1R5cGUub25seVVybCA9PT0gZmFsc2UgJiZcbiAgICAgICAgZm9ybWF0c1R5cGUub25seVZlY3RvciA9PT0gZmFsc2VcbiAgICAgICkge1xuICAgICAgICB0aGlzLmNvbXB1dGVGb3JtYXRzKCk7IC8vIHJlc2V0XG4gICAgICAgIGlmICghKEV4cG9ydEZvcm1hdC5VUkwgaW4gdGhpcy5mb3JtYXRzJC52YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5mb3JtYXRzJC52YWx1ZSk7XG4gICAgICAgICAga2V5cy5wdXNoKCdVUkwnKTtcbiAgICAgICAgICBhcHBsaWVkZm9ybWF0cyA9IGtleXM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgY29uZmlnSW1wb3J0RXhwb3J0Rm9ybWF0cyA9IHRoaXMuY29uZmlnLmdldENvbmZpZyhcbiAgICAgICdpbXBvcnRFeHBvcnQuZm9ybWF0cydcbiAgICApO1xuICAgIGlmIChjb25maWdJbXBvcnRFeHBvcnRGb3JtYXRzKSB7XG4gICAgICBjb25zdCB2YWxpZGF0ZWRMaXN0Rm9ybWF0ID0gdGhpcy52YWxpZGF0ZUxpc3RGb3JtYXQoXG4gICAgICAgIGNvbmZpZ0ltcG9ydEV4cG9ydEZvcm1hdHNcbiAgICAgICk7XG4gICAgICBhcHBsaWVkZm9ybWF0cyA9IGFwcGxpZWRmb3JtYXRzLmZpbHRlcigoYWYpID0+XG4gICAgICAgIHZhbGlkYXRlZExpc3RGb3JtYXQuaW5jbHVkZXMoYWYpXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoZm9ybWF0c1R5cGUuY3VzdG9tTGlzdCkge1xuICAgICAgbGV0IGNvbW1vbkZvcm1hdHM7XG4gICAgICBjb25zdCBsYXllcnNXaXRoQ3VzdG9tRm9ybWF0cyA9IFtdO1xuICAgICAgbGV0IHByZXZpb3VzQ3VzdG9tTGlzdEZvcm1hdHMgPSBjdXN0b21MaXN0WzBdLmZvcm1hdHM7XG4gICAgICBjdXN0b21MaXN0Lm1hcCgobGlzdCkgPT4ge1xuICAgICAgICBsYXllcnNXaXRoQ3VzdG9tRm9ybWF0cy5wdXNoKGxpc3QubGF5ZXIpO1xuICAgICAgICBjb21tb25Gb3JtYXRzID0gbGlzdC5mb3JtYXRzLmZpbHRlcigodmFsdWUpID0+XG4gICAgICAgICAgcHJldmlvdXNDdXN0b21MaXN0Rm9ybWF0cy5pbmNsdWRlcyh2YWx1ZSlcbiAgICAgICAgKTtcbiAgICAgICAgcHJldmlvdXNDdXN0b21MaXN0Rm9ybWF0cyA9IGxpc3QuZm9ybWF0cztcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZmluYWxGb3JtYXRzID0gY29tbW9uRm9ybWF0cy5maWx0ZXIoKHZhbHVlKSA9PlxuICAgICAgICBhcHBsaWVkZm9ybWF0cy5pbmNsdWRlcyh2YWx1ZSlcbiAgICAgICk7XG4gICAgICBpZiAoZmluYWxGb3JtYXRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5mb3JtYXRzJC5uZXh0KHN0ckVudW0oZmluYWxGb3JtYXRzKSk7XG5cbiAgICAgICAgaWYgKGxheWVycyAmJiBsYXllcnMubGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKGxheWVycy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFsZXJ0KFxuICAgICAgICAgICAgICAnaWdvLmdlby5leHBvcnQuY3VzdG9tTGlzdC50ZXh0JyxcbiAgICAgICAgICAgICAgJ2lnby5nZW8uZXhwb3J0LmN1c3RvbUxpc3QudGl0bGUnLFxuICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIHsgdmFsdWU6IGxheWVyc1dpdGhDdXN0b21Gb3JtYXRzLmpvaW4oKSB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5mb3JtYXRzJC5uZXh0KFtdKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hbGVydChcbiAgICAgICAgICAnaWdvLmdlby5leHBvcnQubm9Gb3JtYXQudGV4dCcsXG4gICAgICAgICAgJ2lnby5nZW8uZXhwb3J0Lm5vRm9ybWF0LnRpdGxlJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvcm1hdHMkLm5leHQoc3RyRW51bShhcHBsaWVkZm9ybWF0cykpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVMaXN0Rm9ybWF0KGZvcm1hdHM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBmb3JtYXRzXG4gICAgICAuZmlsdGVyKChmb3JtYXQpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuQ1NWY29tbWEudG9VcHBlckNhc2UoKSB8fFxuICAgICAgICAgIGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuQ1NWc2VtaWNvbG9uLnRvVXBwZXJDYXNlKCkgfHxcbiAgICAgICAgICBmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LkdNTC50b1VwcGVyQ2FzZSgpIHx8XG4gICAgICAgICAgZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5HUFgudG9VcHBlckNhc2UoKSB8fFxuICAgICAgICAgIGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuR2VvSlNPTi50b1VwcGVyQ2FzZSgpIHx8XG4gICAgICAgICAgZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5LTUwudG9VcHBlckNhc2UoKSB8fFxuICAgICAgICAgIGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuU2hhcGVmaWxlLnRvVXBwZXJDYXNlKCkgfHxcbiAgICAgICAgICBmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LlVSTC50b1VwcGVyQ2FzZSgpXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAubWFwKChmb3JtYXQpID0+IHtcbiAgICAgICAgaWYgKGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuQ1NWY29tbWEudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgIGZvcm1hdCA9IEV4cG9ydEZvcm1hdC5DU1Zjb21tYTtcbiAgICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LkNTVnNlbWljb2xvbi50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgZm9ybWF0ID0gRXhwb3J0Rm9ybWF0LkNTVnNlbWljb2xvbjtcbiAgICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LkdNTC50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgZm9ybWF0ID0gRXhwb3J0Rm9ybWF0LkdNTDtcbiAgICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LkdQWC50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgZm9ybWF0ID0gRXhwb3J0Rm9ybWF0LkdQWDtcbiAgICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0Lkdlb0pTT04udG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgIGZvcm1hdCA9IEV4cG9ydEZvcm1hdC5HZW9KU09OO1xuICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuS01MLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICBmb3JtYXQgPSBFeHBvcnRGb3JtYXQuS01MO1xuICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuU2hhcGVmaWxlLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICBmb3JtYXQgPSBFeHBvcnRGb3JtYXQuU2hhcGVmaWxlO1xuICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5VUkwudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgIGZvcm1hdCA9IEV4cG9ydEZvcm1hdC5VUkw7XG4gICAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbW9kZUNoYW5nZWQobW9kZSkge1xuICAgIHRoaXMuc2VsZWN0TW9kZS5lbWl0KG1vZGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkZpbGVFeHBvcnRTdWNjZXNzKCkge1xuICAgIGhhbmRsZUZpbGVFeHBvcnRTdWNjZXNzKHRoaXMubWVzc2FnZVNlcnZpY2UpO1xuICB9XG5cbiAgb25JbXBvcnRFeHBvcnRDaGFuZ2UoZXZlbnQpIHtcbiAgICB0aGlzLnNlbGVjdGVkTW9kZSA9IGV2ZW50LnZhbHVlO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiaW1wb3J0LWV4cG9ydC10b2dnbGUgbWF0LXR5cG9ncmFwaHlcIj5cbiAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwXG4gICAgW3ZhbHVlXT1cInNlbGVjdGVkTW9kZVwiXG4gICAgKGNoYW5nZSk9XCJvbkltcG9ydEV4cG9ydENoYW5nZSgkZXZlbnQpXCJcbiAgPlxuICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSBbdmFsdWVdPVwiJ2ltcG9ydCdcIj5cbiAgICAgIHt7ICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uaW1wb3J0VGFiVGl0bGUnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cIidleHBvcnQnXCI+XG4gICAgICB7eyAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydFRhYlRpdGxlJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gIDwvbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA+XG48L2Rpdj5cblxuPGZvcm1cbiAgY2xhc3M9XCJpZ28tZm9ybVwiXG4gIFtmb3JtR3JvdXBdPVwiaW1wb3J0Rm9ybVwiXG4gICpuZ0lmPVwic2VsZWN0ZWRNb2RlID09PSAnaW1wb3J0J1wiXG4+XG4gIDxkaXYgY2xhc3M9XCJpZ28taW5wdXQtY29udGFpbmVyXCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgPG1hdC1sYWJlbD57e1xuICAgICAgICAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmltcG9ydFByb2pQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcbiAgICAgIH19PC9tYXQtbGFiZWw+XG4gICAgICA8bWF0LXNlbGVjdCBbKHZhbHVlKV09XCJpbnB1dFByb2pcIj5cbiAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAqbmdGb3I9XCJsZXQgcHJvamVjdGlvbiBvZiBwcm9qZWN0aW9ucyQgfCBhc3luY1wiXG4gICAgICAgICAgW3ZhbHVlXT1cInByb2plY3Rpb25cIlxuICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICA+XG4gICAgICAgICAgPHAgbWF0TGlzdEl0ZW1UaXRsZSAqbmdJZj1cInByb2plY3Rpb24udHJhbnNsYXRlS2V5XCI+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLnByb2plY3Rpb25zLicgKyBwcm9qZWN0aW9uLnRyYW5zbGF0ZUtleVxuICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlOiBwcm9qZWN0aW9uXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8cCBtYXRMaXN0SXRlbVRpdGxlICpuZ0lmPVwiIXByb2plY3Rpb24udHJhbnNsYXRlS2V5XCI+XG4gICAgICAgICAgICB7eyBwcm9qZWN0aW9uLmFsaWFzIH19XG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9kaXY+XG5cbiAgPGRpdlxuICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgW21hdFRvb2x0aXBdPVwiXG4gICAgICBpbXBvcnRGb3JtLmludmFsaWRcbiAgICAgICAgPyAoJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5wcm9qZWN0aW9ucy5jaG9vc2UnIHwgdHJhbnNsYXRlKVxuICAgICAgICA6ICgnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmltcG9ydEJ1dHRvbicgfCB0cmFuc2xhdGUpXG4gICAgXCJcbiAgICBjbGFzcz1cImlnby1mb3JtLWJ1dHRvbi1ncm91cFwiXG4gID5cbiAgICA8YnV0dG9uXG4gICAgICBbZGlzYWJsZWRdPVwiaW1wb3J0Rm9ybS5pbnZhbGlkIHx8IChsb2FkaW5nJCB8IGFzeW5jKVwiXG4gICAgICBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKClcIlxuICAgID5cbiAgICAgIHt7ICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uaW1wb3J0QnV0dG9uJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxpZ28tc3Bpbm5lciBbc2hvd25dPVwibG9hZGluZyQgfCBhc3luY1wiPjwvaWdvLXNwaW5uZXI+XG4gICAgPGlucHV0XG4gICAgICBoaWRkZW5cbiAgICAgICNmaWxlSW5wdXRcbiAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgIFtzdHlsZS5kaXNwbGF5XT1cIidub25lJ1wiXG4gICAgICAoY2xpY2spPVwiZmlsZUlucHV0LnZhbHVlID0gbnVsbFwiXG4gICAgICAoY2hhbmdlKT1cImltcG9ydEZpbGVzKCRhbnkoJGV2ZW50LnRhcmdldCkuZmlsZXMpXCJcbiAgICAvPlxuICA8L2Rpdj5cbjwvZm9ybT5cbjxzZWN0aW9uIGNsYXNzPVwibWF0LXR5cG9ncmFwaHlcIiAqbmdJZj1cInNlbGVjdGVkTW9kZSA9PT0gJ2ltcG9ydCdcIj5cbiAgPGRpdiAqbmdJZj1cImltcG9ydEh0bWxDbGFyaWZpY2F0aW9ucyA9PT0gJydcIj5cbiAgICA8aDQ+e3sgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5pbXBvcnRDbGFyaWZpY2F0aW9ucycgfCB0cmFuc2xhdGUgfX08L2g0PlxuICAgIDx1bD5cbiAgICAgIDxsaT5cbiAgICAgICAge3tcbiAgICAgICAgICAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmltcG9ydFNpemVNYXgnXG4gICAgICAgICAgICB8IHRyYW5zbGF0ZTogeyBzaXplOiBmaWxlU2l6ZU1iIH1cbiAgICAgICAgfX1cbiAgICAgIDwvbGk+XG4gICAgICA8bGk+XG4gICAgICAgIHt7ICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uaW1wb3J0Rm9ybWF0QXV0aG9yaXplZCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvbGk+XG4gICAgICA8bGk+e3sgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5pbXBvcnRTaHBaaXAnIHwgdHJhbnNsYXRlIH19PC9saT5cbiAgICA8L3VsPlxuICA8L2Rpdj5cbiAgPGlnby1jdXN0b20taHRtbFxuICAgICpuZ0lmPVwiaW1wb3J0SHRtbENsYXJpZmljYXRpb25zICE9PSAnJ1wiXG4gICAgY2xhc3M9XCJtYXQtdHlwb2dyYXBoeVwiXG4gICAgW2h0bWxdPVwiaW1wb3J0SHRtbENsYXJpZmljYXRpb25zXCJcbiAgPlxuICA8L2lnby1jdXN0b20taHRtbD5cbjwvc2VjdGlvbj5cblxuPHNlY3Rpb25cbiAgY2xhc3M9XCJtYXQtdHlwb2dyYXBoeVwiXG4gICpuZ0lmPVwiKGV4cG9ydGFibGVMYXllcnMkIHwgYXN5bmMpLmxlbmd0aCA9PT0gMCAmJiBzZWxlY3RlZE1vZGUgPT09ICdleHBvcnQnXCJcbj5cbiAgPGg0Pnt7ICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZXhwb3J0Tm9MYXllcnNFeHBvcnRhYmxlJyB8IHRyYW5zbGF0ZSB9fTwvaDQ+XG48L3NlY3Rpb24+XG5cbjxmb3JtXG4gIGNsYXNzPVwiaWdvLWZvcm1cIlxuICBbZm9ybUdyb3VwXT1cImZvcm1cIlxuICAqbmdJZj1cIihleHBvcnRhYmxlTGF5ZXJzJCB8IGFzeW5jKS5sZW5ndGggPiAwICYmIHNlbGVjdGVkTW9kZSA9PT0gJ2V4cG9ydCdcIlxuPlxuICA8ZGl2IGNsYXNzPVwiaWdvLWlucHV0LWNvbnRhaW5lclwiPlxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgIDxtYXQtbGFiZWw+e3tcbiAgICAgICAgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRMYXllclBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVxuICAgICAgfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0IFsodmFsdWUpXT1cImxheWVyc1wiIG11bHRpcGxlPlxuICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgIHt7IGxheWVycy5sZW5ndGggPyBnZXRMYXllclRpdGxlQnlJZChsYXllcnNbMF0pIDogJycgfX1cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImxheWVycy5sZW5ndGggPiAxXCIgY2xhc3M9XCJleHBvcnQtc2VsZWN0LXRyaWdnZXJcIj5cbiAgICAgICAgICAgICgre3sgbGF5ZXJzLmxlbmd0aCAtIDEgfX1cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgIChsYXllcnM/Lmxlbmd0aCA9PT0gMlxuICAgICAgICAgICAgICAgID8gJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5vdGhlcidcbiAgICAgICAgICAgICAgICA6ICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0ub3RoZXJzJ1xuICAgICAgICAgICAgICApIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICB9fSlcbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICpuZ0Zvcj1cImxldCBsYXllciBvZiBleHBvcnRhYmxlTGF5ZXJzJCB8IGFzeW5jXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnaWdvLWV4cG9ydC1sYXllci1tYXQtb3B0aW9uJzogbGF5ZXJIYXNTZWxlY3RlZEZlYXR1cmVzKGxheWVyKVxuICAgICAgICAgIH1cIlxuICAgICAgICAgIFt2YWx1ZV09XCJsYXllci5pZFwiXG4gICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8cCBtYXRMaXN0SXRlbVRpdGxlPnt7IGxheWVyLnRpdGxlIH19PC9wPlxuICAgICAgICAgIDxwIG1hdExpc3RJdGVtVGl0bGU+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZVxuICAgICAgICAgICAgICAqbmdJZj1cImxheWVySGFzU2VsZWN0ZWRGZWF0dXJlcyhsYXllcilcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib25seVNlbGVjdGVkQ2xpY2soJGV2ZW50LCBsYXllci5pZClcIlxuICAgICAgICAgICAgICAoY2hlY2tlZCk9XCJpbkxheWVyc0lkVG9FeHBvcnRTZWxlY3Rpb25Pbmx5KGxheWVyKVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwib25seVNlbGVjdGVkKCRldmVudCwgbGF5ZXIuaWQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNtYWxsPnt7XG4gICAgICAgICAgICAgICAgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRTZWxlY3RlZEZlYXR1cmUnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgIH19PC9zbWFsbD5cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiaWdvLWlucHV0LWNvbnRhaW5lclwiPlxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgIDxtYXQtbGFiZWw+e3tcbiAgICAgICAgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRGb3JtYXRQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcbiAgICAgIH19PC9tYXQtbGFiZWw+XG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJmb3JtYXRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihmb3JtYXRzJCB8IGFzeW5jKS5sZW5ndGggIT09IDBcIj5cbiAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGZvcm1hdCBvZiBmb3JtYXRzJCB8IGFzeW5jIHwga2V5dmFsdWVcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImZvcm1hdC5rZXlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7ICdpZ28uZ2VvLmV4cG9ydC5mb3JtYXQuJyArIGZvcm1hdC52YWx1ZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0lmPVwiKGZvcm1hdHMkIHwgYXN5bmMpLmxlbmd0aCA9PT0gMFwiIGRpc2FibGVkPVwidHJ1ZVwiPlxuICAgICAgICAgIHt7ICdpZ28uZ2VvLmV4cG9ydC5ub0Zvcm1hdC50aXRsZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuXG4gIDxkaXZcbiAgICBjbGFzcz1cImlnby1pbnB1dC1jb250YWluZXJcIlxuICAgICpuZ0lmPVwiZm9yY2VOYW1pbmcgJiYgZm9ybS52YWx1ZS5mb3JtYXQgIT09ICdVUkwnXCJcbiAgPlxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgIDxpbnB1dFxuICAgICAgICBtYXRJbnB1dFxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e1xuICAgICAgICAgICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZXhwb3J0RmlsZU5hbWVQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcbiAgICAgICAgfX1cIlxuICAgICAgLz5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cblxuICA8ZGl2XG4gICAgY2xhc3M9XCJpZ28taW5wdXQtY29udGFpbmVyXCJcbiAgICAqbmdJZj1cIlxuICAgICAgZm9ybS52YWx1ZS5mb3JtYXQgPT09ICdDU1Zjb21tYScgfHwgZm9ybS52YWx1ZS5mb3JtYXQgPT09ICdDU1ZzZW1pY29sb24nXG4gICAgXCJcbiAgPlxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgIDxtYXQtbGFiZWw+e3tcbiAgICAgICAgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5lbmNvZGluZ1BsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVxuICAgICAgfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImVuY29kaW5nXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoZW5jb2RpbmdzJCB8IGFzeW5jKS5sZW5ndGggIT09IDBcIj5cbiAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGVuY29kaW5nIG9mIGVuY29kaW5ncyQgfCBhc3luYyB8IGtleXZhbHVlXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJlbmNvZGluZy5rZXlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7ICdpZ28uZ2VvLmV4cG9ydC5lbmNvZGluZy4nICsgZW5jb2RpbmcudmFsdWUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuXG4gIDxkaXZcbiAgICBjbGFzcz1cImV4cG9ydC1jb21iaW5lLWxheWVycyBtYXQtdHlwb2dyYXBoeVwiXG4gICAgKm5nSWY9XCJcbiAgICAgIGxheWVycy5sZW5ndGggPiAxICYmXG4gICAgICAoZm9ybS52YWx1ZS5mb3JtYXQgPT09ICdDU1Zjb21tYScgfHwgZm9ybS52YWx1ZS5mb3JtYXQgPT09ICdDU1ZzZW1pY29sb24nKVxuICAgIFwiXG4gID5cbiAgICA8bWF0LXNsaWRlLXRvZ2dsZVxuICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY29tYmluZUxheWVyc1wiXG4gICAgICBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiXG4gICAgPlxuICAgICAge3sgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRDb21iaW5lUmVzdWx0cycgfCB0cmFuc2xhdGUgfX1cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuXG4gIDxkaXZcbiAgICBjbGFzcz1cImV4cG9ydC1zZXBhcmF0b3IgbWF0LXR5cG9ncmFwaHlcIlxuICAgICpuZ0lmPVwiXG4gICAgICBsYXllcnMubGVuZ3RoID4gMSAmJlxuICAgICAgKGZvcm0udmFsdWUuZm9ybWF0ID09PSAnQ1NWY29tbWEnIHx8XG4gICAgICAgIGZvcm0udmFsdWUuZm9ybWF0ID09PSAnQ1NWc2VtaWNvbG9uJykgJiZcbiAgICAgIGZvcm0udmFsdWUuY29tYmluZUxheWVyc1xuICAgIFwiXG4gID5cbiAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJzZXBhcmF0b3JcIiBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiPlxuICAgICAge3sgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRTZXBhcmF0b3InIHwgdHJhbnNsYXRlIH19XG4gICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICA8L2Rpdj5cblxuICA8ZGl2XG4gICAgY2xhc3M9XCJleHBvcnQtb3B0aW9ucyBtYXQtdHlwb2dyYXBoeVwiXG4gICAgKm5nSWY9XCJmb3JtLnZhbHVlLmZvcm1hdCAhPT0gJ1VSTCdcIlxuICA+XG4gICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgIGZvcm1Db250cm9sTmFtZT1cImZlYXR1cmVJbk1hcEV4dGVudFwiXG4gICAgICBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiXG4gICAgPlxuICAgICAge3sgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRGZWF0dXJlSW5FeHRlbnQnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiaWdvLWZvcm0tYnV0dG9uLWdyb3VwXCI+XG4gICAgPGJ1dHRvblxuICAgICAgbWF0LXJhaXNlZC1idXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgW2Rpc2FibGVkXT1cIiFmb3JtLnZhbGlkIHx8IChsb2FkaW5nJCB8IGFzeW5jKVwiXG4gICAgICAoY2xpY2spPVwiaGFuZGxlRXhwb3J0Rm9ybVN1Ym1pdChmb3JtLnZhbHVlKVwiXG4gICAgPlxuICAgICAge3tcbiAgICAgICAgZm9ybS52YWx1ZS5mb3JtYXQgIT09ICdVUkwnXG4gICAgICAgICAgPyAoJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRCdXR0b24nIHwgdHJhbnNsYXRlKVxuICAgICAgICAgIDogZm9ybS52YWx1ZS5sYXllcnMubGVuZ3RoID4gMVxuICAgICAgICAgICAgPyAoJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRCdXR0b25MaW5rcycgfCB0cmFuc2xhdGUpXG4gICAgICAgICAgICA6ICgnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydEJ1dHRvbkxpbmsnIHwgdHJhbnNsYXRlKVxuICAgICAgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8aWdvLXNwaW5uZXIgW3Nob3duXT1cImxvYWRpbmckIHwgYXN5bmNcIj48L2lnby1zcGlubmVyPlxuICA8L2Rpdj5cblxuICA8aWdvLWN1c3RvbS1odG1sXG4gICAgKm5nSWY9XCJleHBvcnRIdG1sQ2xhcmlmaWNhdGlvbnMgIT09ICcnXCJcbiAgICBjbGFzcz1cIm1hdC10eXBvZ3JhcGh5XCJcbiAgICBbaHRtbF09XCJleHBvcnRIdG1sQ2xhcmlmaWNhdGlvbnNcIlxuICA+XG4gIDwvaWdvLWN1c3RvbS1odG1sPlxuPC9mb3JtPlxuIl19
|
|
984
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LWV4cG9ydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9pbXBvcnQtZXhwb3J0L2ltcG9ydC1leHBvcnQvaW1wb3J0LWV4cG9ydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9pbXBvcnQtZXhwb3J0L2ltcG9ydC1leHBvcnQvaW1wb3J0LWV4cG9ydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hGLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxXQUFXLEVBQ1gsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUVsQixVQUFVLEVBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUVMLG9CQUFvQixFQUNyQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTdELE9B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Z0JBRUcsWUFBWTtzQkFBcEIsS0FBSztnQkFFSSxVQUFVO3NCQUFuQixNQUFNO2dCQUVFLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUksbUJBQW1CO3NCQUE1QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXN5bmNQaXBlLCBLZXlWYWx1ZVBpcGUsIE5nQ2xhc3MsIE5nRm9yLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBGb3Jtc01vZHVsZSxcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgVW50eXBlZEZvcm1CdWlsZGVyLFxuICBVbnR5cGVkRm9ybUdyb3VwLFxuICBWYWxpZGF0b3JzXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRCdXR0b25Ub2dnbGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24tdG9nZ2xlJztcbmltcG9ydCB7IE1hdE9wdGlvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQge1xuICBNYXRTbGlkZVRvZ2dsZUNoYW5nZSxcbiAgTWF0U2xpZGVUb2dnbGVNb2R1bGVcbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGUtdG9nZ2xlJztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcblxuaW1wb3J0IHsgQ29uZmlybURpYWxvZ1NlcnZpY2UgfSBmcm9tICdAaWdvMi9jb21tb24vY29uZmlybS1kaWFsb2cnO1xuaW1wb3J0IHsgQ3VzdG9tSHRtbENvbXBvbmVudCB9IGZyb20gJ0BpZ28yL2NvbW1vbi9jdXN0b20taHRtbCc7XG5pbXBvcnQgeyBFbnRpdHlSZWNvcmQgfSBmcm9tICdAaWdvMi9jb21tb24vZW50aXR5JztcbmltcG9ydCB7IFNwaW5uZXJDb21wb25lbnQgfSBmcm9tICdAaWdvMi9jb21tb24vc3Bpbm5lcic7XG5pbXBvcnQgdHlwZSB7IFdvcmtzcGFjZVN0b3JlIH0gZnJvbSAnQGlnbzIvY29tbW9uL3dvcmtzcGFjZSc7XG5pbXBvcnQgeyBXb3Jrc3BhY2UgfSBmcm9tICdAaWdvMi9jb21tb24vd29ya3NwYWNlJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlL2NvbmZpZyc7XG5pbXBvcnQgeyBMYW5ndWFnZVNlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlL2xhbmd1YWdlJztcbmltcG9ydCB7IElnb0xhbmd1YWdlTW9kdWxlIH0gZnJvbSAnQGlnbzIvY29yZS9sYW5ndWFnZSc7XG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUvbWVzc2FnZSc7XG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUvc3RvcmFnZSc7XG5pbXBvcnQgeyBzdHJFbnVtIH0gZnJvbSAnQGlnbzIvdXRpbHMnO1xuXG5pbXBvcnQgb2xQb2ludCBmcm9tICdvbC9nZW9tL1BvaW50JztcbmltcG9ydCB7IGNpcmN1bGFyIH0gZnJvbSAnb2wvZ2VvbS9Qb2x5Z29uJztcbmltcG9ydCBvbENsdXN0ZXJTb3VyY2UgZnJvbSAnb2wvc291cmNlL0NsdXN0ZXInO1xuaW1wb3J0IG9sVmVjdG9yU291cmNlIGZyb20gJ29sL3NvdXJjZS9WZWN0b3InO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc2tpcFdoaWxlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBDbHVzdGVyRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkL2RhdGFzb3VyY2VzL2NsdXN0ZXItZGF0YXNvdXJjZSc7XG5pbXBvcnQgeyBEYXRhU291cmNlT3B0aW9ucyB9IGZyb20gJy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkL2RhdGFzb3VyY2VzL2RhdGFzb3VyY2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IERvd25sb2FkU2VydmljZSB9IGZyb20gJy4uLy4uL2Rvd25sb2FkL3NoYXJlZC9kb3dubG9hZC5zZXJ2aWNlJztcbmltcG9ydCB7IEZlYXR1cmUgfSBmcm9tICcuLi8uLi9mZWF0dXJlL3NoYXJlZC9mZWF0dXJlLmludGVyZmFjZXMnO1xuaW1wb3J0IHsgTGF5ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbGF5ZXIvc2hhcmVkL2xheWVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQW55TGF5ZXIgfSBmcm9tICcuLi8uLi9sYXllci9zaGFyZWQvbGF5ZXJzL2FueS1sYXllcic7XG5pbXBvcnQgeyBMYXllciB9IGZyb20gJy4uLy4uL2xheWVyL3NoYXJlZC9sYXllcnMvbGF5ZXInO1xuaW1wb3J0IHsgVmVjdG9yTGF5ZXIgfSBmcm9tICcuLi8uLi9sYXllci9zaGFyZWQvbGF5ZXJzL3ZlY3Rvci1sYXllcic7XG5pbXBvcnQgeyBJbnB1dFByb2plY3Rpb25zLCBQcm9qZWN0aW9uc0xpbWl0YXRpb25zT3B0aW9ucyB9IGZyb20gJy4uLy4uL21hcC8nO1xuaW1wb3J0IHsgY29tcHV0ZVByb2plY3Rpb25zQ29uc3RyYWludHMgfSBmcm9tICcuLi8uLi9tYXAvc2hhcmVkJztcbmltcG9ydCB7IElnb01hcCB9IGZyb20gJy4uLy4uL21hcC9zaGFyZWQvbWFwJztcbmltcG9ydCB7IFN0eWxlTGlzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZS1saXN0L3N0eWxlLWxpc3Quc2VydmljZSc7XG5pbXBvcnQgeyBTdHlsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZS1zZXJ2aWNlL3N0eWxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWRpdGlvbldvcmtzcGFjZSB9IGZyb20gJy4uLy4uL3dvcmtzcGFjZS9zaGFyZWQvZWRpdGlvbi13b3Jrc3BhY2UnO1xuaW1wb3J0IHsgRmVhdHVyZVdvcmtzcGFjZSB9IGZyb20gJy4uLy4uL3dvcmtzcGFjZS9zaGFyZWQvZmVhdHVyZS13b3Jrc3BhY2UnO1xuaW1wb3J0IHsgV2ZzV29ya3NwYWNlIH0gZnJvbSAnLi4vLi4vd29ya3NwYWNlL3NoYXJlZC93ZnMtd29ya3NwYWNlJztcbmltcG9ydCB7IEV4cG9ydE9wdGlvbnMgfSBmcm9tICcuLi9zaGFyZWQvZXhwb3J0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBFeHBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL2V4cG9ydC5zZXJ2aWNlJztcbmltcG9ydCB7IEVuY29kaW5nRm9ybWF0LCBFeHBvcnRGb3JtYXQgfSBmcm9tICcuLi9zaGFyZWQvZXhwb3J0LnR5cGUnO1xuaW1wb3J0IHtcbiAgaGFuZGxlRmlsZUV4cG9ydEVycm9yLFxuICBoYW5kbGVGaWxlRXhwb3J0U3VjY2Vzc1xufSBmcm9tICcuLi9zaGFyZWQvZXhwb3J0LnV0aWxzJztcbmltcG9ydCB7IEltcG9ydEV4cG9ydFNlcnZpY2VPcHRpb25zIH0gZnJvbSAnLi4vc2hhcmVkL2ltcG9ydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSW1wb3J0U2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9pbXBvcnQuc2VydmljZSc7XG5pbXBvcnQge1xuICBoYW5kbGVGaWxlSW1wb3J0RXJyb3IsXG4gIGhhbmRsZUZpbGVJbXBvcnRTdWNjZXNzXG59IGZyb20gJy4uL3NoYXJlZC9pbXBvcnQudXRpbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpZ28taW1wb3J0LWV4cG9ydCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbXBvcnQtZXhwb3J0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaW1wb3J0LWV4cG9ydC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTWF0QnV0dG9uVG9nZ2xlTW9kdWxlLFxuICAgIE5nSWYsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxuICAgIE5nRm9yLFxuICAgIE1hdE9wdGlvbk1vZHVsZSxcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBTcGlubmVyQ29tcG9uZW50LFxuICAgIEN1c3RvbUh0bWxDb21wb25lbnQsXG4gICAgTmdDbGFzcyxcbiAgICBNYXRTbGlkZVRvZ2dsZU1vZHVsZSxcbiAgICBNYXRJbnB1dE1vZHVsZSxcbiAgICBBc3luY1BpcGUsXG4gICAgS2V5VmFsdWVQaXBlLFxuICAgIElnb0xhbmd1YWdlTW9kdWxlXG4gIF0sXG4gIHByb3ZpZGVyczogW0NvbmZpcm1EaWFsb2dTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBJbXBvcnRFeHBvcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCB7XG4gIHB1YmxpYyBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuICBwdWJsaWMgaW1wb3J0Rm9ybTogVW50eXBlZEZvcm1Hcm91cDtcbiAgcHVibGljIGZvcm1hdHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdCh1bmRlZmluZWQpO1xuICBwdWJsaWMgZW5jb2RpbmdzJCA9IG5ldyBCZWhhdmlvclN1YmplY3QodW5kZWZpbmVkKTtcbiAgcHVibGljIGV4cG9ydGFibGVMYXllcnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBbnlMYXllcltdPihbXSk7XG4gIHB1YmxpYyBsb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBwdWJsaWMgZm9yY2VOYW1pbmcgPSBmYWxzZTtcbiAgcHVibGljIGNvbnRyb2xGb3JtYXQgPSAnZm9ybWF0JztcblxuICBwcml2YXRlIGxheWVycyQkOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgZXhwb3J0YWJsZUxheWVycyQkOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgZm9ybWF0cyQkOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgZW5jb2RpbmdzJCQ6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBmb3JtTGF5ZXIkJDogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGV4cG9ydE9wdGlvbnMkJDogU3Vic2NyaXB0aW9uO1xuXG4gIHB1YmxpYyBpbXBvcnRIdG1sQ2xhcmlmaWNhdGlvbnM6IHN0cmluZztcbiAgcHVibGljIGV4cG9ydEh0bWxDbGFyaWZpY2F0aW9uczogc3RyaW5nO1xuXG4gIHByaXZhdGUgZXNwZ0NvZGVSZWdleCA9IG5ldyBSZWdFeHAoJ15cXFxcZHs0LDZ9Jyk7XG4gIHByaXZhdGUgY2xpZW50U2lkZUZpbGVTaXplTWF4OiBudW1iZXI7XG4gIHB1YmxpYyBmaWxlU2l6ZU1iOiBudW1iZXI7XG5cbiAgcHVibGljIHByb2plY3Rpb25zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SW5wdXRQcm9qZWN0aW9uc1tdPihbXSk7XG4gIHByaXZhdGUgcHJvamVjdGlvbnNDb25zdHJhaW50czogUHJvamVjdGlvbnNMaW1pdGF0aW9uc09wdGlvbnM7XG5cbiAgcHVibGljIHBvcHVwQ2hlY2tlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgcHJldmlvdXNMYXllclNwZWNzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAge1xuICAgICAgaWQ6IHN0cmluZztcbiAgICAgIHZpc2libGU6IGJvb2xlYW47XG4gICAgICBvcGFjaXR5OiBudW1iZXI7XG4gICAgICBxdWVyeWFibGU6IGJvb2xlYW47XG4gICAgfVtdXG4gID4odW5kZWZpbmVkKTtcblxuICBASW5wdXQoKSBzZWxlY3RGaXJzdFByb2ogPSBmYWxzZTtcblxuICBASW5wdXQoKSBtYXA6IElnb01hcDtcblxuICBASW5wdXQoKSBjb250ZXh0VXJpOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBfcHJvamVjdGlvbnNMaW1pdGF0aW9uczogUHJvamVjdGlvbnNMaW1pdGF0aW9uc09wdGlvbnMgPSB7fTtcbiAgQElucHV0KClcbiAgc2V0IHByb2plY3Rpb25zTGltaXRhdGlvbnModmFsdWU6IFByb2plY3Rpb25zTGltaXRhdGlvbnNPcHRpb25zKSB7XG4gICAgdGhpcy5fcHJvamVjdGlvbnNMaW1pdGF0aW9ucyA9IHZhbHVlO1xuICAgIHRoaXMuY29tcHV0ZVByb2plY3Rpb25zKCk7XG4gIH1cbiAgZ2V0IHByb2plY3Rpb25zTGltaXRhdGlvbnMoKTogUHJvamVjdGlvbnNMaW1pdGF0aW9uc09wdGlvbnMge1xuICAgIHJldHVybiB0aGlzLl9wcm9qZWN0aW9uc0xpbWl0YXRpb25zIHx8IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3JlIHRoYXQgaG9sZHMgdGhlIGF2YWlsYWJsZSB3b3Jrc3BhY2VzLlxuICAgKi9cbiAgQElucHV0KCkgc3RvcmU6IFdvcmtzcGFjZVN0b3JlO1xuXG4gIEBJbnB1dCgpIHNlbGVjdGVkTW9kZSA9ICdpbXBvcnQnO1xuXG4gIEBPdXRwdXQoKSBzZWxlY3RNb2RlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgQElucHV0KCkgZXhwb3J0T3B0aW9ucyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEV4cG9ydE9wdGlvbnM+KHVuZGVmaW5lZCk7XG5cbiAgQE91dHB1dCgpIGV4cG9ydE9wdGlvbnNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEV4cG9ydE9wdGlvbnM+KCk7XG5cbiAgZ2V0IGxheWVycygpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtLmdldCgnbGF5ZXJzJykudmFsdWU7XG4gIH1cbiAgc2V0IGxheWVycyh2YWx1ZSkge1xuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgbGF5ZXJzOiB2YWx1ZSB9KTtcbiAgfVxuXG4gIGdldCBpbnB1dFByb2ooKSB7XG4gICAgcmV0dXJuIHRoaXMuaW1wb3J0Rm9ybS5nZXQoJ2lucHV0UHJvaicpLnZhbHVlO1xuICB9XG4gIHNldCBpbnB1dFByb2oodmFsdWUpIHtcbiAgICB0aGlzLmltcG9ydEZvcm0ucGF0Y2hWYWx1ZSh7IGlucHV0UHJvajogdmFsdWUgfSk7XG4gIH1cblxuICBnZXQgcG9wdXBBbGxvd2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAodGhpcy5zdG9yYWdlU2VydmljZS5nZXQoJ2ltcG9ydEV4cG9ydFBvcHVwQWxsb3dlZCcpIGFzIGJvb2xlYW4pIHx8IGZhbHNlXG4gICAgKTtcbiAgfVxuXG4gIHNldCBwb3B1cEFsbG93ZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldCgnaW1wb3J0RXhwb3J0UG9wdXBBbGxvd2VkJywgdmFsdWUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpbXBvcnRTZXJ2aWNlOiBJbXBvcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZXhwb3J0U2VydmljZTogRXhwb3J0U2VydmljZSxcbiAgICBwcml2YXRlIGxhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3R5bGVMaXN0U2VydmljZTogU3R5bGVMaXN0U2VydmljZSxcbiAgICBwcml2YXRlIHN0eWxlU2VydmljZTogU3R5bGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGNvbmZpZzogQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZSxcbiAgICBwcml2YXRlIGRvd25sb2FkU2VydmljZTogRG93bmxvYWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgbGF5ZXJTZXJ2aWNlOiBMYXllclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maXJtRGlhbG9nU2VydmljZTogQ29uZmlybURpYWxvZ1NlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5sb2FkQ29uZmlnKCk7XG4gICAgdGhpcy5idWlsZEZvcm0oKTtcbiAgICB0aGlzLmNvbXB1dGVQcm9qZWN0aW9ucygpO1xuICAgIHRoaXMuaW1wb3J0SHRtbENsYXJpZmljYXRpb25zID0gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmltcG9ydEh0bWxDbGFyaWZpY2F0aW9ucydcbiAgICApO1xuICAgIHRoaXMuZXhwb3J0SHRtbENsYXJpZmljYXRpb25zID0gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydEh0bWxDbGFyaWZpY2F0aW9ucydcbiAgICApO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5sYXllcnMkJCA9IHRoaXMubWFwLmxheWVycyQuc3Vic2NyaWJlKChsYXllcnMpID0+IHtcbiAgICAgIHRoaXMuZXhwb3J0YWJsZUxheWVycyQubmV4dChcbiAgICAgICAgbGF5ZXJzLmZpbHRlcigobGF5ZXI6IExheWVyKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChsYXllciBpbnN0YW5jZW9mIFZlY3RvckxheWVyICYmIGxheWVyLmV4cG9ydGFibGUgPT09IHRydWUpIHx8XG4gICAgICAgICAgICAobGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmRvd25sb2FkICYmXG4gICAgICAgICAgICAgIGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5kb3dubG9hZC51cmwpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSkgYXMgQW55TGF5ZXJbXVxuICAgICAgKTtcbiAgICB9KTtcbiAgICBjb25zdCBjb25maWdGaWxlU2l6ZU1iID0gdGhpcy5jb25maWcuZ2V0Q29uZmlnKFxuICAgICAgJ2ltcG9ydEV4cG9ydC5jbGllbnRTaWRlRmlsZVNpemVNYXhNYidcbiAgICApO1xuICAgIHRoaXMuY2xpZW50U2lkZUZpbGVTaXplTWF4ID1cbiAgICAgIChjb25maWdGaWxlU2l6ZU1iID8gY29uZmlnRmlsZVNpemVNYiA6IDMwKSAqIE1hdGgucG93KDEwMjQsIDIpO1xuICAgIHRoaXMuZmlsZVNpemVNYiA9IHRoaXMuY2xpZW50U2lkZUZpbGVTaXplTWF4IC8gTWF0aC5wb3coMTAyNCwgMik7XG5cbiAgICB0aGlzLmV4cG9ydE9wdGlvbnMkJCA9IHRoaXMuZXhwb3J0T3B0aW9ucyRcbiAgICAgIC5waXBlKHNraXBXaGlsZSgoZXhwb3J0T3B0aW9ucykgPT4gIWV4cG9ydE9wdGlvbnMpKVxuICAgICAgLnN1YnNjcmliZSgoZXhwb3J0T3B0aW9ucykgPT4ge1xuICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZShleHBvcnRPcHRpb25zLCB7IGVtaXRFdmVudDogdHJ1ZSB9KTtcbiAgICAgICAgaWYgKGV4cG9ydE9wdGlvbnMubGF5ZXJzKSB7XG4gICAgICAgICAgdGhpcy5jb21wdXRlRm9ybWF0cyhcbiAgICAgICAgICAgIGV4cG9ydE9wdGlvbnMubGF5ZXJzLm1hcCgobCkgPT4gdGhpcy5tYXAuZ2V0TGF5ZXJCeUlkKGwpKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIHRoaXMuZm9ybUxheWVyJCQgPSB0aGlzLmZvcm1cbiAgICAgIC5nZXQoJ2Zvcm1hdCcpXG4gICAgICAudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoZm9ybWF0KSA9PiB7XG4gICAgICAgIGNvbnN0IG9ncmVGb3JtYXRzID0gT2JqZWN0LmtleXMoRXhwb3J0U2VydmljZS5vZ3JlRm9ybWF0cyk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhdGhpcy5wb3B1cENoZWNrZWQgJiZcbiAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdsYXllcnMnKS52YWx1ZT8ubGVuZ3RoID4gMSAmJlxuICAgICAgICAgIChvZ3JlRm9ybWF0cy5pbmRleE9mKGZvcm1hdCkgPj0gMCB8fCBmb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5VUkwpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmICghdGhpcy5oYW5kbGVQb3B1cCh0cnVlKSkge1xuICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBmb3JtYXQ6IHVuZGVmaW5lZCB9LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHRoaXMuZm9ybUxheWVyJCQgPSB0aGlzLmZvcm1cbiAgICAgIC5nZXQoJ2xheWVycycpXG4gICAgICAudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgobGF5ZXJzSWQpID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVQcmV2aW91c0xheWVyU3BlY3MoKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRMYXllcnMgPVxuICAgICAgICAgIGxheWVyc0lkIGluc3RhbmNlb2YgQXJyYXkgPyBsYXllcnNJZCA6IFtsYXllcnNJZF07XG4gICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgbGF5ZXJzOiBzZWxlY3RlZExheWVycyB9LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIGNvbnN0IGxheWVycyA9IHNlbGVjdGVkTGF5ZXJzLm1hcCgobCkgPT4gdGhpcy5tYXAuZ2V0TGF5ZXJCeUlkKGwpKTtcbiAgICAgICAgdGhpcy5jb21wdXRlRm9ybWF0cyhsYXllcnMpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmZvcm1hdHMkLnZhbHVlKS5pbmRleE9mKHRoaXMuZm9ybS52YWx1ZS5mb3JtYXQpID09PVxuICAgICAgICAgIC0xXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgZm9ybWF0OiB1bmRlZmluZWQgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQodHJ1ZSk7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzU3BlY3M6IHtcbiAgICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgICAgIHZpc2libGU6IGJvb2xlYW47XG4gICAgICAgICAgb3BhY2l0eTogbnVtYmVyO1xuICAgICAgICAgIHF1ZXJ5YWJsZTogYm9vbGVhbjtcbiAgICAgICAgfVtdID0gW107XG4gICAgICAgIGxheWVycy5mb3JFYWNoKChsYXllcikgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGxheWVyIGluc3RhbmNlb2YgVmVjdG9yTGF5ZXIgJiZcbiAgICAgICAgICAgIGxheWVyLmRhdGFTb3VyY2Uub2wuZ2V0RmVhdHVyZXMoKS5sZW5ndGggPT09IDBcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHByZXZpb3VzU3BlY3MucHVzaCh7XG4gICAgICAgICAgICAgIGlkOiBsYXllci5pZCxcbiAgICAgICAgICAgICAgdmlzaWJsZTogbGF5ZXIudmlzaWJsZSxcbiAgICAgICAgICAgICAgb3BhY2l0eTogbGF5ZXIub3BhY2l0eSxcbiAgICAgICAgICAgICAgcXVlcnlhYmxlOiAobGF5ZXIgYXMgYW55KS5xdWVyeWFibGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbGF5ZXIub3BhY2l0eSA9IDA7XG4gICAgICAgICAgICBsYXllci52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucHJldmlvdXNMYXllclNwZWNzJC5uZXh0KHByZXZpb3VzU3BlY3MpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICB9LCA1MDApO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLmZvcm1hdHMkJCA9IHRoaXMuZm9ybWF0cyRcbiAgICAgIC5waXBlKHNraXBXaGlsZSgoZm9ybWF0cykgPT4gIWZvcm1hdHMpKVxuICAgICAgLnN1YnNjcmliZSgoZm9ybWF0cykgPT4ge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMoZm9ybWF0cykubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBmb3JtYXQ6IGZvcm1hdHNbT2JqZWN0LmtleXMoZm9ybWF0cylbMF1dIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHRoaXMuZW5jb2RpbmdzJCQgPSB0aGlzLmVuY29kaW5ncyRcbiAgICAgIC5waXBlKHNraXBXaGlsZSgoZW5jb2RpbmdzKSA9PiAhZW5jb2RpbmdzKSlcbiAgICAgIC5zdWJzY3JpYmUoKGVuY29kaW5ncykgPT4ge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMoZW5jb2RpbmdzKS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICBlbmNvZGluZzogZW5jb2RpbmdzW09iamVjdC5rZXlzKGVuY29kaW5ncylbMF1dXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgdGhpcy5leHBvcnRhYmxlTGF5ZXJzJCQgPSB0aGlzLmV4cG9ydGFibGVMYXllcnMkXG4gICAgICAucGlwZShza2lwV2hpbGUoKGxheWVycykgPT4gIWxheWVycykpXG4gICAgICAuc3Vic2NyaWJlKChsYXllcnMpID0+IHtcbiAgICAgICAgaWYgKGxheWVycy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGxheWVyczogbGF5ZXJzWzBdLmlkIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLmNvbnRyb2xGb3JtYXRdLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKGZvcm1hdCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBmb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5DU1Zjb21tYSB8fFxuICAgICAgICBmb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5DU1ZzZW1pY29sb25cbiAgICAgICkge1xuICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGVuY29kaW5nOiBFbmNvZGluZ0Zvcm1hdC5MQVRJTjEgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGVuY29kaW5nOiBFbmNvZGluZ0Zvcm1hdC5VVEY4IH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5zZWxlY3RGaXJzdFByb2opIHtcbiAgICAgIGlmICh0aGlzLnByb2plY3Rpb25zJC52YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5pbXBvcnRGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgIGlucHV0UHJvajoge1xuICAgICAgICAgICAgdHJhbnNsYXRlS2V5OiAnbmFkODMnLFxuICAgICAgICAgICAgYWxpYXM6ICdOQUQ4MycsXG4gICAgICAgICAgICBjb2RlOiAnRVBTRzo0MzI2JyxcbiAgICAgICAgICAgIHpvbmU6ICcnXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW1wb3J0Rm9ybS5wYXRjaFZhbHVlKHsgaW5wdXRQcm9qOiB0aGlzLnByb2plY3Rpb25zJC52YWx1ZVswXSB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbXBvcnRGb3JtLnBhdGNoVmFsdWUoeyBpbnB1dFByb2o6IHVuZGVmaW5lZCB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVQcm9qZWN0aW9ucygpIHtcbiAgICB0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMgPSBjb21wdXRlUHJvamVjdGlvbnNDb25zdHJhaW50cyhcbiAgICAgIHRoaXMucHJvamVjdGlvbnNMaW1pdGF0aW9uc1xuICAgICk7XG4gICAgY29uc3QgcHJvamVjdGlvbnM6IElucHV0UHJvamVjdGlvbnNbXSA9IFtdO1xuXG4gICAgaWYgKHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy5uYWQ4Mykge1xuICAgICAgcHJvamVjdGlvbnMucHVzaCh7XG4gICAgICAgIHRyYW5zbGF0ZUtleTogJ25hZDgzJyxcbiAgICAgICAgYWxpYXM6ICdOQUQ4MycsXG4gICAgICAgIGNvZGU6ICdFUFNHOjQyNjknLFxuICAgICAgICB6b25lOiAnJyxcbiAgICAgICAgZXh0ZW50OiB1bmRlZmluZWQsXG4gICAgICAgIGRlZjogdW5kZWZpbmVkXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy53Z3M4NCkge1xuICAgICAgcHJvamVjdGlvbnMucHVzaCh7XG4gICAgICAgIHRyYW5zbGF0ZUtleTogJ3dnczg0JyxcbiAgICAgICAgYWxpYXM6ICdXR1M4NCcsXG4gICAgICAgIGNvZGU6ICdFUFNHOjQzMjYnLFxuICAgICAgICB6b25lOiAnJyxcbiAgICAgICAgZXh0ZW50OiB1bmRlZmluZWQsXG4gICAgICAgIGRlZjogdW5kZWZpbmVkXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy53ZWJNZXJjYXRvcikge1xuICAgICAgcHJvamVjdGlvbnMucHVzaCh7XG4gICAgICAgIHRyYW5zbGF0ZUtleTogJ3dlYk1lcmNhdG9yJyxcbiAgICAgICAgYWxpYXM6ICdXZWIgTWVyY2F0b3InLFxuICAgICAgICBjb2RlOiAnRVBTRzozODU3JyxcbiAgICAgICAgem9uZTogJycsXG4gICAgICAgIGV4dGVudDogdW5kZWZpbmVkLFxuICAgICAgICBkZWY6IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy5tdG0pIHtcbiAgICAgIC8vIGFsbCBtdG0gem9uZXNcbiAgICAgIGNvbnN0IG1pblpvbmUgPSB0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMubXRtWm9uZS5taW5ab25lO1xuICAgICAgY29uc3QgbWF4Wm9uZSA9IHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy5tdG1ab25lLm1heFpvbmU7XG5cbiAgICAgIGZvciAobGV0IG10bVpvbmUgPSBtaW5ab25lOyBtdG1ab25lIDw9IG1heFpvbmU7IG10bVpvbmUrKykge1xuICAgICAgICBjb25zdCBjb2RlID1cbiAgICAgICAgICBtdG1ab25lIDwgMTAgPyBgRVBTRzozMjE4JHttdG1ab25lfWAgOiBgRVBTRzozMjEkezgwICsgbXRtWm9uZX1gO1xuICAgICAgICBwcm9qZWN0aW9ucy5wdXNoKHtcbiAgICAgICAgICB0cmFuc2xhdGVLZXk6ICdtdG0nLFxuICAgICAgICAgIGFsaWFzOiBgTVRNICR7bXRtWm9uZX1gLFxuICAgICAgICAgIGNvZGUsXG4gICAgICAgICAgem9uZTogYCR7bXRtWm9uZX1gLFxuICAgICAgICAgIGV4dGVudDogdW5kZWZpbmVkLFxuICAgICAgICAgIGRlZjogdW5kZWZpbmVkXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMudXRtKSB7XG4gICAgICAvLyBhbGwgdXRtIHpvbmVzXG4gICAgICBjb25zdCBtaW5ab25lID0gdGhpcy5wcm9qZWN0aW9uc0NvbnN0cmFpbnRzLnV0bVpvbmUubWluWm9uZTtcbiAgICAgIGNvbnN0IG1heFpvbmUgPSB0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMudXRtWm9uZS5tYXhab25lO1xuXG4gICAgICBmb3IgKGxldCB1dG1ab25lID0gbWluWm9uZTsgdXRtWm9uZSA8PSBtYXhab25lOyB1dG1ab25lKyspIHtcbiAgICAgICAgY29uc3QgY29kZSA9XG4gICAgICAgICAgdXRtWm9uZSA8IDEwID8gYEVQU0c6MzI2MCR7dXRtWm9uZX1gIDogYEVQU0c6MzI2JHt1dG1ab25lfWA7XG4gICAgICAgIHByb2plY3Rpb25zLnB1c2goe1xuICAgICAgICAgIHRyYW5zbGF0ZUtleTogJ3V0bScsXG4gICAgICAgICAgYWxpYXM6IGBVVE0gJHt1dG1ab25lfWAsXG4gICAgICAgICAgY29kZSxcbiAgICAgICAgICB6b25lOiBgJHt1dG1ab25lfWAsXG4gICAgICAgICAgZXh0ZW50OiB1bmRlZmluZWQsXG4gICAgICAgICAgZGVmOiB1bmRlZmluZWRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGNvbmZpZ1Byb2plY3Rpb246IElucHV0UHJvamVjdGlvbnNbXSA9IFtdO1xuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMucHJvakZyb21Db25maWcpIHtcbiAgICAgIGNvbmZpZ1Byb2plY3Rpb24gPSAodGhpcy5jb25maWcuZ2V0Q29uZmlnKCdwcm9qZWN0aW9ucycpIHx8XG4gICAgICAgIFtdKSBhcyBJbnB1dFByb2plY3Rpb25zW107XG4gICAgfVxuXG4gICAgdGhpcy5wcm9qZWN0aW9ucyQubmV4dChjb25maWdQcm9qZWN0aW9uLmNvbmNhdChwcm9qZWN0aW9ucykpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRXb3Jrc3BhY2VCeUxheWVySWQoaWQ6IHN0cmluZyk6IFdvcmtzcGFjZSB7XG4gICAgY29uc3Qgd2tzRnJvbUxheWVySWQgPSB0aGlzLnN0b3JlXG4gICAgICAuYWxsKClcbiAgICAgIC5maW5kKFxuICAgICAgICAod29ya3NwYWNlKSA9PlxuICAgICAgICAgICh3b3Jrc3BhY2UgYXMgV2ZzV29ya3NwYWNlIHwgRmVhdHVyZVdvcmtzcGFjZSB8IEVkaXRpb25Xb3Jrc3BhY2UpXG4gICAgICAgICAgICAubGF5ZXIuaWQgPT09IGlkXG4gICAgICApO1xuICAgIGlmICh3a3NGcm9tTGF5ZXJJZCkge1xuICAgICAgcmV0dXJuIHdrc0Zyb21MYXllcklkO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBwdWJsaWMgZ2V0TGF5ZXJUaXRsZUJ5SWQoaWQpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm1hcC5nZXRMYXllckJ5SWQoaWQpPy50aXRsZTtcbiAgfVxuXG4gIGxheWVySGFzU2VsZWN0ZWRGZWF0dXJlcyhsYXllcjogTGF5ZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCB3a3NGcm9tTGF5ZXIgPSB0aGlzLmdldFdvcmtzcGFjZUJ5TGF5ZXJJZChsYXllci5pZCk7XG4gICAgaWYgKHdrc0Zyb21MYXllcikge1xuICAgICAgY29uc3QgcmVjcyA9IHdrc0Zyb21MYXllci5lbnRpdHlTdG9yZS5zdGF0ZVZpZXcuZmlyc3RCeShcbiAgICAgICAgKHJlY29yZDogRW50aXR5UmVjb3JkPEZlYXR1cmU+KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY29yZC5zdGF0ZS5zZWxlY3RlZCA9PT0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHJldHVybiByZWNzID8gdHJ1ZSA6IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbmx5U2VsZWN0ZWQoZXZlbnQ6IE1hdFNsaWRlVG9nZ2xlQ2hhbmdlLCBpZDogc3RyaW5nKSB7XG4gICAgbGV0IGxheWVyc1dpdGhTZWxlY3Rpb24gPSB0aGlzLmZvcm0udmFsdWUubGF5ZXJzV2l0aFNlbGVjdGlvbjtcbiAgICBpZiAoZXZlbnQuY2hlY2tlZCkge1xuICAgICAgbGF5ZXJzV2l0aFNlbGVjdGlvbi5wdXNoKGlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGF5ZXJzV2l0aFNlbGVjdGlvbiA9IGxheWVyc1dpdGhTZWxlY3Rpb24uZmlsdGVyKFxuICAgICAgICAobGF5ZXJJZCkgPT4gbGF5ZXJJZCAhPT0gaWRcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgbGF5ZXJzV2l0aFNlbGVjdGlvbiB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvbmx5U2VsZWN0ZWRDbGljayhldmVudCwgaWQ6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmZvcm0udmFsdWUubGF5ZXJzLmZpbmQoKGxheWVySWQpID0+IGxheWVySWQgPT09IGlkKSkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGluTGF5ZXJzSWRUb0V4cG9ydFNlbGVjdGlvbk9ubHkobGF5ZXI6IExheWVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybS52YWx1ZS5sYXllcnNXaXRoU2VsZWN0aW9uLmZpbmQoXG4gICAgICAobGF5ZXJJZCkgPT4gbGF5ZXJJZCA9PT0gbGF5ZXIuaWRcbiAgICApXG4gICAgICA/IHRydWVcbiAgICAgIDogZmFsc2U7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmxheWVycyQkLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5leHBvcnRhYmxlTGF5ZXJzJCQudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmZvcm1hdHMkJC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuZW5jb2RpbmdzJCQudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmZvcm1MYXllciQkLnVuc3Vic2NyaWJlKCk7XG4gICAgaWYgKHRoaXMuZXhwb3J0T3B0aW9ucyQkKSB7XG4gICAgICB0aGlzLmV4cG9ydE9wdGlvbnMkJC51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLmV4cG9ydE9wdGlvbnNDaGFuZ2UuZW1pdCh0aGlzLmZvcm0udmFsdWUpO1xuICAgIHRoaXMuaGFuZGxlUHJldmlvdXNMYXllclNwZWNzKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVByZXZpb3VzTGF5ZXJTcGVjcygpIHtcbiAgICBjb25zdCBwcmV2aW91c1NwZWNzID0gdGhpcy5wcmV2aW91c0xheWVyU3BlY3MkLnZhbHVlO1xuICAgIGlmIChwcmV2aW91c1NwZWNzICYmIHByZXZpb3VzU3BlY3MubGVuZ3RoKSB7XG4gICAgICBwcmV2aW91c1NwZWNzLmZvckVhY2goKHNwZWNzKSA9PiB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzTGF5ZXIgPSB0aGlzLm1hcC5nZXRMYXllckJ5SWQoc3BlY3MuaWQpO1xuICAgICAgICBwcmV2aW91c0xheWVyLnZpc2libGUgPSBzcGVjcy52aXNpYmxlO1xuICAgICAgICBwcmV2aW91c0xheWVyLm9wYWNpdHkgPSBzcGVjcy5vcGFjaXR5O1xuICAgICAgICAocHJldmlvdXNMYXllciBhcyBhbnkpLnF1ZXJ5YWJsZSA9IHNwZWNzLnF1ZXJ5YWJsZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnByZXZpb3VzTGF5ZXJTcGVjcyQubmV4dCh1bmRlZmluZWQpO1xuICB9XG5cbiAgaW1wb3J0RmlsZXMoZmlsZXM6IEZpbGVbXSkge1xuICAgIGxldCBpbnB1dFByb2ogPSB0aGlzLmlucHV0UHJvai5jb2RlO1xuICAgIGlmICh0aGlzLmVzcGdDb2RlUmVnZXgudGVzdChpbnB1dFByb2opKSB7XG4gICAgICBpbnB1dFByb2ogPSBgRVBTRzoke2lucHV0UHJvan1gO1xuICAgIH1cblxuICAgIHRoaXMubG9hZGluZyQubmV4dCh0cnVlKTtcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgIHRoaXMuaW1wb3J0U2VydmljZS5pbXBvcnQoZmlsZSwgaW5wdXRQcm9qKS5zdWJzY3JpYmUoXG4gICAgICAgIChmZWF0dXJlczogRmVhdHVyZVtdKSA9PiB0aGlzLm9uRmlsZUltcG9ydFN1Y2Nlc3MoZmlsZSwgZmVhdHVyZXMpLFxuICAgICAgICAoZXJyb3I6IEVycm9yKSA9PiB0aGlzLm9uRmlsZUltcG9ydEVycm9yKGZpbGUsIGVycm9yKSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlUG9wdXAocHJlQ2hlY2sgPSB0cnVlKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcDEgPSB3aW5kb3cub3BlbignJywgJ3BvcHVwJywgJ3dpZHRoPTEsIGhlaWdodD0xJyk7XG4gICAgcDEuY2xvc2UoKTtcbiAgICBjb25zdCBwMiA9IHdpbmRvdy5vcGVuKCcnLCAncG9wdXAnLCAnd2lkdGg9MSwgaGVpZ2h0PTEnKTtcbiAgICBpZiAoIXAyIHx8IHAyLmNsb3NlZCB8fCB0eXBlb2YgcDIuY2xvc2VkID09PSAndW5kZWZpbmVkJyB8fCBwMiA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5vblBvcHVwQmxvY2tlZEVycm9yKHByZUNoZWNrKTtcbiAgICAgIHRoaXMucG9wdXBBbGxvd2VkID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHAyLmNsb3NlKCk7XG4gICAgICB0aGlzLnBvcHVwQWxsb3dlZCA9IHRydWU7XG4gICAgICB0aGlzLnBvcHVwQ2hlY2tlZCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnBvcHVwQWxsb3dlZDtcbiAgfVxuXG4gIGhhbmRsZUV4cG9ydEZvcm1TdWJtaXQoZGF0YTogRXhwb3J0T3B0aW9ucykge1xuICAgIHRoaXMubG9hZGluZyQubmV4dCh0cnVlKTtcblxuICAgIGNvbnN0IG9ncmVGb3JtYXRzID0gT2JqZWN0LmtleXMoRXhwb3J0U2VydmljZS5vZ3JlRm9ybWF0cyk7XG4gICAgaWYgKFxuICAgICAgIXRoaXMucG9wdXBDaGVja2VkICYmXG4gICAgICBkYXRhLmxheWVycy5sZW5ndGggPiAxICYmXG4gICAgICAob2dyZUZvcm1hdHMuaW5kZXhPZihkYXRhLmZvcm1hdCkgPj0gMCB8fFxuICAgICAgICBkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LlVSTCkgJiZcbiAgICAgICF0aGlzLnBvcHVwQWxsb3dlZFxuICAgICkge1xuICAgICAgdGhpcy5oYW5kbGVQb3B1cCgpO1xuICAgIH1cblxuICAgIGNvbnN0IGdlb21UeXBlc0NTVjogeyBnZW9tZXRyeVR5cGU6IHN0cmluZzsgZmVhdHVyZXM6IGFueVtdIH1bXSA9IFtdO1xuICAgIGNvbnN0IGZlYXR1cmVzQ1NWOiBhbnlbXSA9IFtdO1xuICAgIGxldCBmaWxlbmFtZSA9ICcnO1xuXG4gICAgZm9yIChjb25zdCBbbGF5ZXJJbmRleCwgbGF5ZXJdIG9mIGRhdGEubGF5ZXJzLmVudHJpZXMoKSkge1xuICAgICAgY29uc3QgbGF5ID0gdGhpcy5tYXAuZ2V0TGF5ZXJCeUlkKGxheWVyKTtcbiAgICAgIGlmIChcbiAgICAgICAgIShcbiAgICAgICAgICBkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkNTVnNlbWljb2xvbiB8fFxuICAgICAgICAgIGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuQ1NWY29tbWFcbiAgICAgICAgKSB8fFxuICAgICAgICAhZGF0YS5jb21iaW5lTGF5ZXJzIHx8XG4gICAgICAgIGRhdGEubGF5ZXJzLmxlbmd0aCA9PT0gMVxuICAgICAgKSB7XG4gICAgICAgIGZpbGVuYW1lID0gbGF5LnRpdGxlO1xuICAgICAgICBpZiAoZGF0YS5uYW1lKSB7XG4gICAgICAgICAgZmlsZW5hbWUgPSBkYXRhLm5hbWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbGVuYW1lID0gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2lnby5nZW8uZXhwb3J0LmNvbWJpbmVkTGF5ZXJzJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3QgZFNPcHRpb25zOiBEYXRhU291cmNlT3B0aW9ucyA9IGxheS5kYXRhU291cmNlLm9wdGlvbnM7XG4gICAgICBpZiAoXG4gICAgICAgIGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuVVJMICYmXG4gICAgICAgIGRTT3B0aW9ucy5kb3dubG9hZCAmJlxuICAgICAgICAoZFNPcHRpb25zLmRvd25sb2FkLnVybCB8fCBkU09wdGlvbnMuZG93bmxvYWQuZHluYW1pY1VybClcbiAgICAgICkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAvLyBiZXR0ZXIgbG9vayBhbiBmZWVsXG4gICAgICAgICAgY29uc3QgdXJsID0gZFNPcHRpb25zLmRvd25sb2FkLnVybCB8fCBkU09wdGlvbnMuZG93bmxvYWQuZHluYW1pY1VybDtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC1leHByZXNzaW9uc1xuICAgICAgICAgIHVybC5tYXRjaCgvc2VydmljZT13ZnMvZ2kpXG4gICAgICAgICAgICA/IHRoaXMuZG93bmxvYWRTZXJ2aWNlLm9wZW4obGF5KVxuICAgICAgICAgICAgOiB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnKTtcbiAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICB9LCA1MDApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB3a3MgPSB0aGlzLmdldFdvcmtzcGFjZUJ5TGF5ZXJJZChsYXllcik7XG4gICAgICBsZXQgb2xGZWF0dXJlcztcbiAgICAgIGlmICh3a3MgJiYgd2tzLmVudGl0eVN0b3JlICYmIHdrcy5lbnRpdHlTdG9yZS5zdGF0ZVZpZXcuYWxsKCkubGVuZ3RoKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkYXRhLmxheWVyc1dpdGhTZWxlY3Rpb24uaW5kZXhPZihsYXllcikgIT09IC0xICYmXG4gICAgICAgICAgZGF0YS5mZWF0dXJlSW5NYXBFeHRlbnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gT25seSBleHBvcnQgc2VsZWN0ZWQgZmVhdHVyZSAmJiBpbnRvIG1hcCBleHRlbnRcbiAgICAgICAgICBvbEZlYXR1cmVzID0gd2tzLmVudGl0eVN0b3JlLnN0YXRlVmlld1xuICAgICAgICAgICAgLmFsbCgpXG4gICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAoZTogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+XG4gICAgICAgICAgICAgICAgZS5zdGF0ZS5pbk1hcEV4dGVudCAmJiBlLnN0YXRlLnNlbGVjdGVkXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAubWFwKChlKSA9PiAoZS5lbnRpdHkgYXMgRmVhdHVyZSkub2wpO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIGRhdGEubGF5ZXJzV2l0aFNlbGVjdGlvbi5pbmRleE9mKGxheWVyKSAhPT0gLTEgJiZcbiAgICAgICAgICAhZGF0YS5mZWF0dXJlSW5NYXBFeHRlbnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gT25seSBleHBvcnQgc2VsZWN0ZWQgZmVhdHVyZSAmJiAgKGludG8gbWFwIGV4dGVudCBPUiBub3QpXG4gICAgICAgICAgb2xGZWF0dXJlcyA9IHdrcy5lbnRpdHlTdG9yZS5zdGF0ZVZpZXdcbiAgICAgICAgICAgIC5hbGwoKVxuICAgICAgICAgICAgLmZpbHRlcigoZTogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+IGUuc3RhdGUuc2VsZWN0ZWQpXG4gICAgICAgICAgICAubWFwKChlKSA9PiAoZS5lbnRpdHkgYXMgRmVhdHVyZSkub2wpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEuZmVhdHVyZUluTWFwRXh0ZW50KSB7XG4gICAgICAgICAgLy8gT25seSBpbnRvIG1hcCBleHRlbnRcbiAgICAgICAgICBvbEZlYXR1cmVzID0gd2tzLmVudGl0eVN0b3JlLnN0YXRlVmlld1xuICAgICAgICAgICAgLmFsbCgpXG4gICAgICAgICAgICAuZmlsdGVyKChlOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT4gZS5zdGF0ZS5pbk1hcEV4dGVudClcbiAgICAgICAgICAgIC5tYXAoKGUpID0+IChlLmVudGl0eSBhcyBGZWF0dXJlKS5vbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQWxsIGZlYXR1cmVzXG4gICAgICAgICAgb2xGZWF0dXJlcyA9IHdrcy5lbnRpdHlTdG9yZS5zdGF0ZVZpZXdcbiAgICAgICAgICAgIC5hbGwoKVxuICAgICAgICAgICAgLm1hcCgoZSkgPT4gKGUuZW50aXR5IGFzIEZlYXR1cmUpLm9sKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgb2wgPSBsYXkuZGF0YVNvdXJjZS5vbCBhcyBvbFZlY3RvclNvdXJjZSB8IG9sQ2x1c3RlclNvdXJjZTtcbiAgICAgICAgaWYgKGRhdGEuZmVhdHVyZUluTWFwRXh0ZW50KSB7XG4gICAgICAgICAgb2xGZWF0dXJlcyA9IG9sLmdldEZlYXR1cmVzSW5FeHRlbnQoXG4gICAgICAgICAgICBsYXkubWFwLnZpZXdDb250cm9sbGVyLmdldEV4dGVudCgpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvbEZlYXR1cmVzID0gb2wuZ2V0RmVhdHVyZXMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGF5LmRhdGFTb3VyY2UgaW5zdGFuY2VvZiBDbHVzdGVyRGF0YVNvdXJjZSkge1xuICAgICAgICAgIG9sRmVhdHVyZXMgPSBvbEZlYXR1cmVzLmZsYXRNYXAoKGNsdXN0ZXI6IGFueSkgPT5cbiAgICAgICAgICAgIGNsdXN0ZXIuZ2V0KCdmZWF0dXJlcycpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsZXQgZ2VvbVR5cGVzOiB7IGdlb21ldHJ5VHlwZTogc3RyaW5nOyBmZWF0dXJlczogYW55W10gfVtdID0gW107XG4gICAgICBpZiAoXG4gICAgICAgIGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuU2hhcGVmaWxlIHx8XG4gICAgICAgIGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuR1BYXG4gICAgICApIHtcbiAgICAgICAgb2xGZWF0dXJlcy5mb3JFYWNoKChvbEZlYXR1cmUpID0+IHtcbiAgICAgICAgICBjb25zdCBmZWF0dXJlR2VvbVR5cGUgPSBvbEZlYXR1cmUuZ2V0R2VvbWV0cnkoKS5nZXRUeXBlKCk7XG4gICAgICAgICAgY29uc3QgY3VycmVudEdlb21UeXBlID0gZ2VvbVR5cGVzLmZpbmQoXG4gICAgICAgICAgICAoZ2VvbVR5cGUpID0+IGdlb21UeXBlLmdlb21ldHJ5VHlwZSA9PT0gZmVhdHVyZUdlb21UeXBlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoY3VycmVudEdlb21UeXBlKSB7XG4gICAgICAgICAgICBjdXJyZW50R2VvbVR5cGUuZmVhdHVyZXMucHVzaChvbEZlYXR1cmUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZW9tVHlwZXMucHVzaCh7XG4gICAgICAgICAgICAgIGdlb21ldHJ5VHlwZTogZmVhdHVyZUdlb21UeXBlLFxuICAgICAgICAgICAgICBmZWF0dXJlczogW29sRmVhdHVyZV1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnZW9tVHlwZXMgPSBbeyBnZW9tZXRyeVR5cGU6ICcnLCBmZWF0dXJlczogb2xGZWF0dXJlcyB9XTtcbiAgICAgIH1cblxuICAgICAgZ2VvbVR5cGVzLmZvckVhY2goKGdlb21UeXBlKSA9PiB7XG4gICAgICAgIGdlb21UeXBlLmZlYXR1cmVzLmZvckVhY2goKGZlYXR1cmUpID0+IHtcbiAgICAgICAgICBjb25zdCByYWRpdXM6IG51bWJlciA9IGZlYXR1cmUuZ2V0KCdyYWQnKTtcbiAgICAgICAgICBpZiAocmFkaXVzKSB7XG4gICAgICAgICAgICBjb25zdCBjZW50ZXI0MzI2OiBudW1iZXJbXSA9IFtcbiAgICAgICAgICAgICAgZmVhdHVyZS5nZXQoJ2xvbmdpdHVkZScpLFxuICAgICAgICAgICAgICBmZWF0dXJlLmdldCgnbGF0aXR1ZGUnKVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGNvbnN0IGNpcmNsZSA9IGNpcmN1bGFyKGNlbnRlcjQzMjYsIHJhZGl1cywgNTAwKTtcbiAgICAgICAgICAgIGNpcmNsZS50cmFuc2Zvcm0oJ0VQU0c6NDMyNicsIGZlYXR1cmUuZ2V0KCdfcHJvamVjdGlvbicpKTtcbiAgICAgICAgICAgIGZlYXR1cmUuc2V0R2VvbWV0cnkoY2lyY2xlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkdQWCkge1xuICAgICAgICBjb25zdCBncHhGZWF0dXJlQ250ID0gZ2VvbVR5cGVzLmxlbmd0aDtcbiAgICAgICAgZ2VvbVR5cGVzID0gZ2VvbVR5cGVzLmZpbHRlcigoZ2VvbVR5cGUpID0+XG4gICAgICAgICAgWydMaW5lU3RyaW5nJywgJ1BvaW50J10uaW5jbHVkZXMoZ2VvbVR5cGUuZ2VvbWV0cnlUeXBlKVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBncHhGZWF0dXJlQ250UG9pbnRPclBvbHkgPSBnZW9tVHlwZXMubGVuZ3RoO1xuICAgICAgICBpZiAoZ3B4RmVhdHVyZUNudCA+IGdweEZlYXR1cmVDbnRQb2ludE9yUG9seSkge1xuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IoXG4gICAgICAgICAgICAnaWdvLmdlby5leHBvcnQuZ3B4LmVycm9yLnBvbHkudGV4dCcsXG4gICAgICAgICAgICAnaWdvLmdlby5leHBvcnQuZ3B4LmVycm9yLnBvbHkudGl0bGUnLFxuICAgICAgICAgICAgeyB0aW1lT3V0OiAyMDAwMCB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgKGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuQ1NWc2VtaWNvbG9uIHx8XG4gICAgICAgICAgZGF0YS5mb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5DU1Zjb21tYSkgJiZcbiAgICAgICAgZGF0YS5jb21iaW5lTGF5ZXJzXG4gICAgICApIHtcbiAgICAgICAgZ2VvbVR5cGVzLmZvckVhY2goKGdlb21UeXBlKSA9PiBnZW9tVHlwZXNDU1YucHVzaChnZW9tVHlwZSkpO1xuXG4gICAgICAgIGlmIChsYXllckluZGV4ICE9PSBkYXRhLmxheWVycy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IHByZXZpb3VzRmVhdHVyZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBnZW9tVHlwZXNDU1YuZm9yRWFjaCgoZ2VvbVR5cGUpID0+IHtcbiAgICAgICAgICAgIGdlb21UeXBlLmZlYXR1cmVzLmZvckVhY2goKGN1cnJlbnRGZWF0dXJlKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChkYXRhLnNlcGFyYXRvcikge1xuICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c0ZlYXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEZlYXR1cmUuZ2V0KCdfZmVhdHVyZVN0b3JlJykubGF5ZXIub3B0aW9ucy50aXRsZSAhPT1cbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNGZWF0dXJlLmdldCgnX2ZlYXR1cmVTdG9yZScpLmxheWVyLm9wdGlvbnMudGl0bGVcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0aXRsZUVtcHR5Um93cyA9IHRoaXMuY3JlYXRlVGl0bGVFbXB0eVJvd3MoXG4gICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNGZWF0dXJlLFxuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGZWF0dXJlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzQ1NWLnB1c2godGl0bGVFbXB0eVJvd3NbMl0pO1xuICAgICAgICAgICAgICAgICAgICBmZWF0dXJlc0NTVi5wdXNoKHRpdGxlRW1wdHlSb3dzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXNDU1YucHVzaCh0aXRsZUVtcHR5Um93c1sxXSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHRpdGxlRW1wdHlSb3dzID0gdGhpcy5jcmVhdGVUaXRsZUVtcHR5Um93cyhcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEZlYXR1cmUsXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGZWF0dXJlXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgZmVhdHVyZXNDU1YucHVzaCh0aXRsZUVtcHR5Um93c1swXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGZlYXR1cmVzQ1NWLnB1c2goY3VycmVudEZlYXR1cmUpO1xuICAgICAgICAgICAgICBwcmV2aW91c0ZlYXR1cmUgPSBjdXJyZW50RmVhdHVyZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChnZW9tVHlwZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IoXG4gICAgICAgICAgJ2lnby5nZW8uZXhwb3J0Lm5vdGhpbmcudGV4dCcsXG4gICAgICAgICAgJ2lnby5nZW8uZXhwb3J0Lm5vdGhpbmcudGl0bGUnLFxuICAgICAgICAgIHsgdGltZU91dDogMjAwMDAgfVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICEoXG4gICAgICAgICAgICBkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkNTVnNlbWljb2xvbiB8fFxuICAgICAgICAgICAgZGF0YS5mb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5DU1Zjb21tYVxuICAgICAgICAgICkgfHxcbiAgICAgICAgICAhZGF0YS5jb21iaW5lTGF5ZXJzXG4gICAgICAgICkge1xuICAgICAgICAgIGdlb21UeXBlcy5tYXAoKGdlb21UeXBlKSA9PlxuICAgICAgICAgICAgdGhpcy5leHBvcnRTZXJ2aWNlXG4gICAgICAgICAgICAgIC5leHBvcnQoXG4gICAgICAgICAgICAgICAgZ2VvbVR5cGUuZmVhdHVyZXMsXG4gICAgICAgICAgICAgICAgZGF0YS5mb3JtYXQsXG4gICAgICAgICAgICAgICAgZmlsZW5hbWUgKyBnZW9tVHlwZS5nZW9tZXRyeVR5cGUsXG4gICAgICAgICAgICAgICAgZGF0YS5lbmNvZGluZyxcbiAgICAgICAgICAgICAgICB0aGlzLm1hcC5wcm9qZWN0aW9uXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcjogRXJyb3IpID0+IHRoaXMub25GaWxlRXhwb3J0RXJyb3IoZXJyb3IpLFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLm9uRmlsZUV4cG9ydFN1Y2Nlc3MoKTtcblxuICAgICAgICAgICAgICAgICAgZ2VvbVR5cGUuZmVhdHVyZXMuZm9yRWFjaCgoZmVhdHVyZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNpcmNsZVRvUG9pbnQoZmVhdHVyZSk7XG4gICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoXG4gICAgICAoZGF0YS5mb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5DU1ZzZW1pY29sb24gfHxcbiAgICAgICAgZGF0YS5mb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5DU1Zjb21tYSkgJiZcbiAgICAgIGRhdGEuY29tYmluZUxheWVyc1xuICAgICkge1xuICAgICAgdGhpcy5leHBvcnRTZXJ2aWNlXG4gICAgICAgIC5leHBvcnQoXG4gICAgICAgICAgZmVhdHVyZXNDU1YsXG4gICAgICAgICAgZGF0YS5mb3JtYXQsXG4gICAgICAgICAgZmlsZW5hbWUsXG4gICAgICAgICAgZGF0YS5lbmNvZGluZyxcbiAgICAgICAgICB0aGlzLm1hcC5wcm9qZWN0aW9uXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgZXJyb3I6IChlcnJvcjogRXJyb3IpID0+IHRoaXMub25GaWxlRXhwb3J0RXJyb3IoZXJyb3IpLFxuICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uRmlsZUV4cG9ydFN1Y2Nlc3MoKTtcblxuICAgICAgICAgICAgZmVhdHVyZXNDU1YuZm9yRWFjaCgoZmVhdHVyZSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmNpcmNsZVRvUG9pbnQoZmVhdHVyZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVGl0bGVFbXB0eVJvd3MocHJldmlvdXNGZWF0dXJlLCBjdXJyZW50RmVhdHVyZSkge1xuICAgIGNvbnN0IHRpdGxlUm93ID0gY3VycmVudEZlYXR1cmUuY2xvbmUoKTtcbiAgICBjb25zdCBoZWFkZXJSb3cgPSBjdXJyZW50RmVhdHVyZS5jbG9uZSgpO1xuICAgIGNvbnN0IGVtcHR5Um93ID0gY3VycmVudEZlYXR1cmUuY2xvbmUoKTtcbiAgICBjb25zdCBwcmV2aW91c0ZlYXR1cmVLZXlzOiBzdHJpbmdbXSA9IHByZXZpb3VzRmVhdHVyZS5nZXRLZXlzKCk7XG4gICAgbGV0IGZpcnN0S2V5UHJldmlvdXMgPSAnJztcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBwcmV2aW91c0ZlYXR1cmVLZXlzKSB7XG4gICAgICBpZiAocHJldmlvdXNGZWF0dXJlS2V5c1trZXldICE9PSAnZ2VvbWV0cnknKSB7XG4gICAgICAgIGZpcnN0S2V5UHJldmlvdXMgPSBwcmV2aW91c0ZlYXR1cmVLZXlzW2tleV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRGZWF0dXJlS2V5czogc3RyaW5nW10gPSBjdXJyZW50RmVhdHVyZS5nZXRLZXlzKCk7XG4gICAgbGV0IGZpcnN0S2V5Q3VycmVudCA9ICcnO1xuICAgIGZvciAoY29uc3Qga2V5IGluIGN1cnJlbnRGZWF0dXJlS2V5cykge1xuICAgICAgaWYgKGN1cnJlbnRGZWF0dXJlS2V5c1trZXldICE9PSAnZ2VvbWV0cnknKSB7XG4gICAgICAgIGZpcnN0S2V5Q3VycmVudCA9IGN1cnJlbnRGZWF0dXJlS2V5c1trZXldO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYWxsS2V5czogc3RyaW5nW10gPSBjdXJyZW50RmVhdHVyZS5nZXRLZXlzKCk7XG4gICAgcHJldmlvdXNGZWF0dXJlS2V5cy5mb3JFYWNoKChwcmV2aW91c0tleSkgPT4ge1xuICAgICAgaWYgKGFsbEtleXMuaW5jbHVkZXMocHJldmlvdXNLZXkpICYmIHByZXZpb3VzS2V5ICE9PSBmaXJzdEtleVByZXZpb3VzKSB7XG4gICAgICAgIGFsbEtleXMucHVzaChwcmV2aW91c0tleSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgYWxsS2V5cy51bnNoaWZ0KGZpcnN0S2V5UHJldmlvdXMpO1xuXG4gICAgbGV0IGZpcnN0S2V5QWxsID0gJyc7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gYWxsS2V5cykge1xuICAgICAgaWYgKGFsbEtleXNba2V5XSAhPT0gJ2dlb21ldHJ5Jykge1xuICAgICAgICBmaXJzdEtleUFsbCA9IGFsbEtleXNba2V5XTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGFsbEtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCBzYW1lS2V5czogYm9vbGVhbiA9XG4gICAgICAgIHByZXZpb3VzRmVhdHVyZUtleXMubGVuZ3RoID09PSBjdXJyZW50RmVhdHVyZUtleXMubGVuZ3RoICYmXG4gICAgICAgIHByZXZpb3VzRmVhdHVyZUtleXMuZXZlcnkoXG4gICAgICAgICAgKHZhbHVlLCBpbmRleCkgPT4gdmFsdWUgPT09IGN1cnJlbnRGZWF0dXJlS2V5c1tpbmRleF1cbiAgICAgICAgKTtcbiAgICAgIGlmIChrZXkgPT09IGZpcnN0S2V5QWxsICYmICFzYW1lS2V5cykge1xuICAgICAgICB0aXRsZVJvdy5zZXQoXG4gICAgICAgICAga2V5LFxuICAgICAgICAgIGN1cnJlbnRGZWF0dXJlLmdldCgnX2ZlYXR1cmVTdG9yZScpLmxheWVyLm9wdGlvbnMudGl0bGUgK1xuICAgICAgICAgICAgJyA9PT09PT09PT09PT09PT0+JyxcbiAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIGhlYWRlclJvdy5zZXQoa2V5LCBrZXksIHRydWUpO1xuICAgICAgICBlbXB0eVJvdy51bnNldChrZXksIHRydWUpO1xuICAgICAgfSBlbHNlIGlmIChrZXkgPT09IGZpcnN0S2V5QWxsICYmIHNhbWVLZXlzKSB7XG4gICAgICAgIHRpdGxlUm93LnNldChcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgY3VycmVudEZlYXR1cmUuZ2V0KCdfZmVhdHVyZVN0b3JlJykubGF5ZXIub3B0aW9ucy50aXRsZSxcbiAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIGhlYWRlclJvdy5zZXQoa2V5LCBrZXksIHRydWUpO1xuICAgICAgICBlbXB0eVJvdy51bnNldChrZXksIHRydWUpO1xuICAgICAgfSBlbHNlIGlmIChrZXkgPT09IGZpcnN0S2V5Q3VycmVudCkge1xuICAgICAgICB0aXRsZVJvdy5zZXQoXG4gICAgICAgICAga2V5LFxuICAgICAgICAgIGN1cnJlbnRGZWF0dXJlLmdldCgnX2ZlYXR1cmVTdG9yZScpLmxheWVyLm9wdGlvbnMudGl0bGUsXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgICBoZWFkZXJSb3cuc2V0KGtleSwga2V5LCB0cnVlKTtcbiAgICAgICAgZW1wdHlSb3cudW5zZXQoa2V5LCB0cnVlKTtcbiAgICAgIH0gZWxzZSBpZiAoa2V5ICE9PSAnZ2VvbWV0cnknKSB7XG4gICAgICAgIHRpdGxlUm93LnVuc2V0KGtleSwgdHJ1ZSk7XG4gICAgICAgIGhlYWRlclJvdy5zZXQoa2V5LCBrZXksIHRydWUpO1xuICAgICAgICBlbXB0eVJvdy51bnNldChrZXksIHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGl0bGVSb3cudW5zZXQoa2V5LCB0cnVlKTtcbiAgICAgICAgZW1wdHlSb3cudW5zZXQoa2V5LCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFjdXJyZW50RmVhdHVyZUtleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICBoZWFkZXJSb3cudW5zZXQoa2V5LCB0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCB0aXRsZUVtcHR5Um93cyA9IFt0aXRsZVJvdywgaGVhZGVyUm93LCBlbXB0eVJvd107XG4gICAgcmV0dXJuIHRpdGxlRW1wdHlSb3dzO1xuICB9XG5cbiAgcHJpdmF0ZSBjaXJjbGVUb1BvaW50KGZlYXR1cmUpIHtcbiAgICBjb25zdCByYWRpdXM6IG51bWJlciA9IGZlYXR1cmUuZ2V0KCdyYWQnKTtcblxuICAgIGlmIChyYWRpdXMpIHtcbiAgICAgIGNvbnN0IHBvaW50ID0gbmV3IG9sUG9pbnQoW1xuICAgICAgICBmZWF0dXJlLmdldCgnbG9uZ2l0dWRlJyksXG4gICAgICAgIGZlYXR1cmUuZ2V0KCdsYXRpdHVkZScpXG4gICAgICBdKTtcbiAgICAgIHBvaW50LnRyYW5zZm9ybSgnRVBTRzo0MzI2JywgZmVhdHVyZS5nZXQoJ19wcm9qZWN0aW9uJykpO1xuICAgICAgZmVhdHVyZS5zZXRHZW9tZXRyeShwb2ludCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZvcm0oKSB7XG4gICAgdGhpcy5pbXBvcnRGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBpbnB1dFByb2o6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuZm9yY2VOYW1pbmcpIHtcbiAgICAgIHRoaXMuZm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICBmb3JtYXQ6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgICAgbGF5ZXJzOiBbW10sIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICAgIGxheWVyc1dpdGhTZWxlY3Rpb246IFtbXV0sXG4gICAgICAgIGVuY29kaW5nOiBbRW5jb2RpbmdGb3JtYXQuVVRGOCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgICAgY29tYmluZUxheWVyczogW3RydWUsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICAgIHNlcGFyYXRvcjogW2ZhbHNlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgICBmZWF0dXJlSW5NYXBFeHRlbnQ6IFtmYWxzZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgICAgbmFtZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgIGZvcm1hdDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgICBsYXllcnM6IFtbXSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgICAgbGF5ZXJzV2l0aFNlbGVjdGlvbjogW1tdXSxcbiAgICAgICAgZW5jb2Rpbmc6IFtFbmNvZGluZ0Zvcm1hdC5VVEY4LCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgICBjb21iaW5lTGF5ZXJzOiBbdHJ1ZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgICAgc2VwYXJhdG9yOiBbZmFsc2UsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICAgIGZlYXR1cmVJbk1hcEV4dGVudDogW2ZhbHNlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9uRmlsZUltcG9ydFN1Y2Nlc3MoZmlsZTogRmlsZSwgZmVhdHVyZXM6IEZlYXR1cmVbXSkge1xuICAgIGNvbnN0IGltcG9ydEV4cG9ydE9wdGlvbnMgPSB0aGlzLmNvbmZpZy5nZXRDb25maWcoXG4gICAgICAnaW1wb3J0RXhwb3J0J1xuICAgICkgYXMgSW1wb3J0RXhwb3J0U2VydmljZU9wdGlvbnM7XG4gICAgY29uc3QgY29uZmlybURpYWxvZ1NlcnZpY2UgPSBpbXBvcnRFeHBvcnRPcHRpb25zPy5hbGxvd1RvU3RvcmVMYXllclxuICAgICAgPyB0aGlzLmNvbmZpcm1EaWFsb2dTZXJ2aWNlXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBpZiAoIWltcG9ydEV4cG9ydE9wdGlvbnM/LmltcG9ydFdpdGhTdHlsZSkge1xuICAgICAgaGFuZGxlRmlsZUltcG9ydFN1Y2Nlc3MoXG4gICAgICAgIGZpbGUsXG4gICAgICAgIGZlYXR1cmVzLFxuICAgICAgICB0aGlzLm1hcCxcbiAgICAgICAgdGhpcy5jb250ZXh0VXJpLFxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLFxuICAgICAgICB0aGlzLmxheWVyU2VydmljZSxcbiAgICAgICAgY29uZmlybURpYWxvZ1NlcnZpY2VcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhhbmRsZUZpbGVJbXBvcnRTdWNjZXNzKFxuICAgICAgICBmaWxlLFxuICAgICAgICBmZWF0dXJlcyxcbiAgICAgICAgdGhpcy5tYXAsXG4gICAgICAgIHRoaXMuY29udGV4dFVyaSxcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZSxcbiAgICAgICAgdGhpcy5sYXllclNlcnZpY2UsXG4gICAgICAgIGNvbmZpcm1EaWFsb2dTZXJ2aWNlLFxuICAgICAgICB0aGlzLnN0eWxlTGlzdFNlcnZpY2UsXG4gICAgICAgIHRoaXMuc3R5bGVTZXJ2aWNlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb25GaWxlSW1wb3J0RXJyb3IoZmlsZTogRmlsZSwgZXJyb3I6IEVycm9yKSB7XG4gICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICBoYW5kbGVGaWxlSW1wb3J0RXJyb3IoZmlsZSwgZXJyb3IsIHRoaXMubWVzc2FnZVNlcnZpY2UsIHRoaXMuZmlsZVNpemVNYik7XG4gIH1cblxuICBwcml2YXRlIG9uUG9wdXBCbG9ja2VkRXJyb3IocHJlQ2hlY2sgPSB0cnVlKSB7XG4gICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICBjb25zdCBleHRyYU1lc3NhZ2UgPSBwcmVDaGVja1xuICAgICAgPyAnaWdvLmdlby5leHBvcnQucG9wdXBCbG9ja2VkLnNlbGVjdEFnYWluJ1xuICAgICAgOiAnaWdvLmdlby5leHBvcnQucG9wdXBCbG9ja2VkLnJldHJ5JztcbiAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVycm9yKFxuICAgICAgJ2lnby5nZW8uZXhwb3J0LnBvcHVwQmxvY2tlZC50ZXh0JyxcbiAgICAgICdpZ28uZ2VvLmV4cG9ydC5wb3B1cEJsb2NrZWQudGl0bGUnLFxuICAgICAgeyB0aW1lT3V0OiAyMDAwMCB9LFxuICAgICAgeyBleHRyYU1lc3NhZ2UgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uRmlsZUV4cG9ydEVycm9yKGVycm9yOiBFcnJvcikge1xuICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgaGFuZGxlRmlsZUV4cG9ydEVycm9yKGVycm9yLCB0aGlzLm1lc3NhZ2VTZXJ2aWNlKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZENvbmZpZygpIHtcbiAgICBjb25zdCBmb3JjZU5hbWluZ0NvbmZpZyA9IHRoaXMuY29uZmlnLmdldENvbmZpZygnaW1wb3J0RXhwb3J0LmZvcmNlTmFtaW5nJyk7XG4gICAgdGhpcy5mb3JjZU5hbWluZyA9XG4gICAgICBmb3JjZU5hbWluZ0NvbmZpZyAhPT0gdW5kZWZpbmVkID8gZm9yY2VOYW1pbmdDb25maWcgOiBmYWxzZTtcblxuICAgIHRoaXMuY29tcHV0ZUZvcm1hdHMoKTtcbiAgICB0aGlzLmxvYWRFbmNvZGluZ3MoKTtcbiAgfVxuXG4gIHB1YmxpYyBlbmNvZGluZ0RlZmF1bHRWYWx1ZShmb3JtYXQ6IEV4cG9ydEZvcm1hdCkge1xuICAgIGlmIChcbiAgICAgIGZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkNTVmNvbW1hIHx8XG4gICAgICBmb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5DU1ZzZW1pY29sb25cbiAgICApIHtcbiAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgZW5jb2Rpbmc6IEVuY29kaW5nRm9ybWF0LkxBVElOMSB9KTtcbiAgICAgIHJldHVybiBFbmNvZGluZ0Zvcm1hdC5MQVRJTjE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgZW5jb2Rpbmc6IEVuY29kaW5nRm9ybWF0LlVURjggfSk7XG4gICAgICByZXR1cm4gRW5jb2RpbmdGb3JtYXQuVVRGODtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvYWRFbmNvZGluZ3MoKSB7XG4gICAgdGhpcy5lbmNvZGluZ3MkLm5leHQoRW5jb2RpbmdGb3JtYXQpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlRm9ybWF0cyhsYXllcnM/OiBBbnlMYXllcltdKSB7XG4gICAgbGV0IGFwcGxpZWRmb3JtYXRzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKEV4cG9ydEZvcm1hdCk7XG4gICAgY29uc3QgZm9ybWF0c1R5cGUgPSB7XG4gICAgICBvbmx5VXJsOiBmYWxzZSxcbiAgICAgIG9ubHlWZWN0b3I6IGZhbHNlLFxuICAgICAgdmVjdG9yQW5kVXJsOiBmYWxzZSxcbiAgICAgIGN1c3RvbUxpc3Q6IGZhbHNlXG4gICAgfTtcbiAgICBjb25zdCBjdXN0b21MaXN0ID0gW107XG4gICAgaWYgKGxheWVycyAmJiBsYXllcnMubGVuZ3RoKSB7XG4gICAgICBsYXllcnMuZm9yRWFjaCgobGF5ZXIpID0+IHtcbiAgICAgICAgaWYgKCFsYXllcikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmRvd25sb2FkPy5hbGxvd2VkRm9ybWF0cykge1xuICAgICAgICAgIGZvcm1hdHNUeXBlLmN1c3RvbUxpc3QgPSB0cnVlO1xuICAgICAgICAgIGN1c3RvbUxpc3QucHVzaCh7XG4gICAgICAgICAgICBsYXllcjogbGF5ZXIudGl0bGUsXG4gICAgICAgICAgICBmb3JtYXRzOiB0aGlzLnZhbGlkYXRlTGlzdEZvcm1hdChcbiAgICAgICAgICAgICAgbGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmRvd25sb2FkLmFsbG93ZWRGb3JtYXRzXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgIShsYXllciBpbnN0YW5jZW9mIFZlY3RvckxheWVyKSAmJlxuICAgICAgICAgIGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5kb3dubG9hZCAmJlxuICAgICAgICAgIGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5kb3dubG9hZC51cmxcbiAgICAgICAgKSB7XG4gICAgICAgICAgZm9ybWF0c1R5cGUub25seVVybCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgbGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmRvd25sb2FkICYmXG4gICAgICAgICAgKGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5kb3dubG9hZC51cmwgfHxcbiAgICAgICAgICAgIGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5kb3dubG9hZC5keW5hbWljVXJsKVxuICAgICAgICApIHtcbiAgICAgICAgICBmb3JtYXRzVHlwZS52ZWN0b3JBbmRVcmwgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGxheWVyIGluc3RhbmNlb2YgVmVjdG9yTGF5ZXIpIHtcbiAgICAgICAgICBmb3JtYXRzVHlwZS5vbmx5VmVjdG9yID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChmb3JtYXRzVHlwZS5vbmx5VXJsID09PSB0cnVlICYmIGZvcm1hdHNUeXBlLm9ubHlWZWN0b3IgPT09IGZhbHNlKSB7XG4gICAgICAgIGFwcGxpZWRmb3JtYXRzID0gWydVUkwnXTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGZvcm1hdHNUeXBlLm9ubHlWZWN0b3IgPT09IHRydWUgJiZcbiAgICAgICAgZm9ybWF0c1R5cGUub25seVVybCA9PT0gZmFsc2VcbiAgICAgICkge1xuICAgICAgICB0aGlzLmNvbXB1dGVGb3JtYXRzKCk7IC8vIHJlc2V0XG4gICAgICAgIGlmIChFeHBvcnRGb3JtYXQuVVJMIGluIHRoaXMuZm9ybWF0cyQudmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5mb3JtYXRzJC52YWx1ZSkuZmlsdGVyKFxuICAgICAgICAgICAgKGtleSkgPT4ga2V5ICE9PSAnVVJMJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgYXBwbGllZGZvcm1hdHMgPSBrZXlzO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBmb3JtYXRzVHlwZS52ZWN0b3JBbmRVcmwgPT09IHRydWUgJiZcbiAgICAgICAgZm9ybWF0c1R5cGUub25seVVybCA9PT0gZmFsc2UgJiZcbiAgICAgICAgZm9ybWF0c1R5cGUub25seVZlY3RvciA9PT0gZmFsc2VcbiAgICAgICkge1xuICAgICAgICB0aGlzLmNvbXB1dGVGb3JtYXRzKCk7IC8vIHJlc2V0XG4gICAgICAgIGlmICghKEV4cG9ydEZvcm1hdC5VUkwgaW4gdGhpcy5mb3JtYXRzJC52YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5mb3JtYXRzJC52YWx1ZSk7XG4gICAgICAgICAga2V5cy5wdXNoKCdVUkwnKTtcbiAgICAgICAgICBhcHBsaWVkZm9ybWF0cyA9IGtleXM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgY29uZmlnSW1wb3J0RXhwb3J0Rm9ybWF0cyA9IHRoaXMuY29uZmlnLmdldENvbmZpZyhcbiAgICAgICdpbXBvcnRFeHBvcnQuZm9ybWF0cydcbiAgICApO1xuICAgIGlmIChjb25maWdJbXBvcnRFeHBvcnRGb3JtYXRzKSB7XG4gICAgICBjb25zdCB2YWxpZGF0ZWRMaXN0Rm9ybWF0ID0gdGhpcy52YWxpZGF0ZUxpc3RGb3JtYXQoXG4gICAgICAgIGNvbmZpZ0ltcG9ydEV4cG9ydEZvcm1hdHNcbiAgICAgICk7XG4gICAgICBhcHBsaWVkZm9ybWF0cyA9IGFwcGxpZWRmb3JtYXRzLmZpbHRlcigoYWYpID0+XG4gICAgICAgIHZhbGlkYXRlZExpc3RGb3JtYXQuaW5jbHVkZXMoYWYpXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoZm9ybWF0c1R5cGUuY3VzdG9tTGlzdCkge1xuICAgICAgbGV0IGNvbW1vbkZvcm1hdHM7XG4gICAgICBjb25zdCBsYXllcnNXaXRoQ3VzdG9tRm9ybWF0cyA9IFtdO1xuICAgICAgbGV0IHByZXZpb3VzQ3VzdG9tTGlzdEZvcm1hdHMgPSBjdXN0b21MaXN0WzBdLmZvcm1hdHM7XG4gICAgICBjdXN0b21MaXN0Lm1hcCgobGlzdCkgPT4ge1xuICAgICAgICBsYXllcnNXaXRoQ3VzdG9tRm9ybWF0cy5wdXNoKGxpc3QubGF5ZXIpO1xuICAgICAgICBjb21tb25Gb3JtYXRzID0gbGlzdC5mb3JtYXRzLmZpbHRlcigodmFsdWUpID0+XG4gICAgICAgICAgcHJldmlvdXNDdXN0b21MaXN0Rm9ybWF0cy5pbmNsdWRlcyh2YWx1ZSlcbiAgICAgICAgKTtcbiAgICAgICAgcHJldmlvdXNDdXN0b21MaXN0Rm9ybWF0cyA9IGxpc3QuZm9ybWF0cztcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZmluYWxGb3JtYXRzID0gY29tbW9uRm9ybWF0cy5maWx0ZXIoKHZhbHVlKSA9PlxuICAgICAgICBhcHBsaWVkZm9ybWF0cy5pbmNsdWRlcyh2YWx1ZSlcbiAgICAgICk7XG4gICAgICBpZiAoZmluYWxGb3JtYXRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5mb3JtYXRzJC5uZXh0KHN0ckVudW0oZmluYWxGb3JtYXRzKSk7XG5cbiAgICAgICAgaWYgKGxheWVycyAmJiBsYXllcnMubGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKGxheWVycy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFsZXJ0KFxuICAgICAgICAgICAgICAnaWdvLmdlby5leHBvcnQuY3VzdG9tTGlzdC50ZXh0JyxcbiAgICAgICAgICAgICAgJ2lnby5nZW8uZXhwb3J0LmN1c3RvbUxpc3QudGl0bGUnLFxuICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIHsgdmFsdWU6IGxheWVyc1dpdGhDdXN0b21Gb3JtYXRzLmpvaW4oKSB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5mb3JtYXRzJC5uZXh0KFtdKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hbGVydChcbiAgICAgICAgICAnaWdvLmdlby5leHBvcnQubm9Gb3JtYXQudGV4dCcsXG4gICAgICAgICAgJ2lnby5nZW8uZXhwb3J0Lm5vRm9ybWF0LnRpdGxlJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvcm1hdHMkLm5leHQoc3RyRW51bShhcHBsaWVkZm9ybWF0cykpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVMaXN0Rm9ybWF0KGZvcm1hdHM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBmb3JtYXRzXG4gICAgICAuZmlsdGVyKChmb3JtYXQpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuQ1NWY29tbWEudG9VcHBlckNhc2UoKSB8fFxuICAgICAgICAgIGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuQ1NWc2VtaWNvbG9uLnRvVXBwZXJDYXNlKCkgfHxcbiAgICAgICAgICBmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LkdNTC50b1VwcGVyQ2FzZSgpIHx8XG4gICAgICAgICAgZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5HUFgudG9VcHBlckNhc2UoKSB8fFxuICAgICAgICAgIGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuR2VvSlNPTi50b1VwcGVyQ2FzZSgpIHx8XG4gICAgICAgICAgZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5LTUwudG9VcHBlckNhc2UoKSB8fFxuICAgICAgICAgIGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuU2hhcGVmaWxlLnRvVXBwZXJDYXNlKCkgfHxcbiAgICAgICAgICBmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LlVSTC50b1VwcGVyQ2FzZSgpXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAubWFwKChmb3JtYXQpID0+IHtcbiAgICAgICAgaWYgKGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuQ1NWY29tbWEudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgIGZvcm1hdCA9IEV4cG9ydEZvcm1hdC5DU1Zjb21tYTtcbiAgICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LkNTVnNlbWljb2xvbi50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgZm9ybWF0ID0gRXhwb3J0Rm9ybWF0LkNTVnNlbWljb2xvbjtcbiAgICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LkdNTC50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgZm9ybWF0ID0gRXhwb3J0Rm9ybWF0LkdNTDtcbiAgICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LkdQWC50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgZm9ybWF0ID0gRXhwb3J0Rm9ybWF0LkdQWDtcbiAgICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0Lkdlb0pTT04udG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgIGZvcm1hdCA9IEV4cG9ydEZvcm1hdC5HZW9KU09OO1xuICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuS01MLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICBmb3JtYXQgPSBFeHBvcnRGb3JtYXQuS01MO1xuICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuU2hhcGVmaWxlLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICBmb3JtYXQgPSBFeHBvcnRGb3JtYXQuU2hhcGVmaWxlO1xuICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5VUkwudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgIGZvcm1hdCA9IEV4cG9ydEZvcm1hdC5VUkw7XG4gICAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbW9kZUNoYW5nZWQobW9kZSkge1xuICAgIHRoaXMuc2VsZWN0TW9kZS5lbWl0KG1vZGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkZpbGVFeHBvcnRTdWNjZXNzKCkge1xuICAgIGhhbmRsZUZpbGVFeHBvcnRTdWNjZXNzKHRoaXMubWVzc2FnZVNlcnZpY2UpO1xuICB9XG5cbiAgb25JbXBvcnRFeHBvcnRDaGFuZ2UoZXZlbnQpIHtcbiAgICB0aGlzLnNlbGVjdGVkTW9kZSA9IGV2ZW50LnZhbHVlO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiaW1wb3J0LWV4cG9ydC10b2dnbGUgbWF0LXR5cG9ncmFwaHlcIj5cbiAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwXG4gICAgW3ZhbHVlXT1cInNlbGVjdGVkTW9kZVwiXG4gICAgKGNoYW5nZSk9XCJvbkltcG9ydEV4cG9ydENoYW5nZSgkZXZlbnQpXCJcbiAgPlxuICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSBbdmFsdWVdPVwiJ2ltcG9ydCdcIj5cbiAgICAgIHt7ICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uaW1wb3J0VGFiVGl0bGUnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cIidleHBvcnQnXCI+XG4gICAgICB7eyAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydFRhYlRpdGxlJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gIDwvbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA+XG48L2Rpdj5cblxuPGZvcm1cbiAgY2xhc3M9XCJpZ28tZm9ybVwiXG4gIFtmb3JtR3JvdXBdPVwiaW1wb3J0Rm9ybVwiXG4gICpuZ0lmPVwic2VsZWN0ZWRNb2RlID09PSAnaW1wb3J0J1wiXG4+XG4gIDxkaXYgY2xhc3M9XCJpZ28taW5wdXQtY29udGFpbmVyXCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgPG1hdC1sYWJlbD57e1xuICAgICAgICAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmltcG9ydFByb2pQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcbiAgICAgIH19PC9tYXQtbGFiZWw+XG4gICAgICA8bWF0LXNlbGVjdCBbKHZhbHVlKV09XCJpbnB1dFByb2pcIj5cbiAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAqbmdGb3I9XCJsZXQgcHJvamVjdGlvbiBvZiBwcm9qZWN0aW9ucyQgfCBhc3luY1wiXG4gICAgICAgICAgW3ZhbHVlXT1cInByb2plY3Rpb25cIlxuICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICA+XG4gICAgICAgICAgPHAgbWF0TGlzdEl0ZW1UaXRsZSAqbmdJZj1cInByb2plY3Rpb24udHJhbnNsYXRlS2V5XCI+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLnByb2plY3Rpb25zLicgKyBwcm9qZWN0aW9uLnRyYW5zbGF0ZUtleVxuICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlOiBwcm9qZWN0aW9uXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8cCBtYXRMaXN0SXRlbVRpdGxlICpuZ0lmPVwiIXByb2plY3Rpb24udHJhbnNsYXRlS2V5XCI+XG4gICAgICAgICAgICB7eyBwcm9qZWN0aW9uLmFsaWFzIH19XG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9kaXY+XG5cbiAgPGRpdlxuICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgW21hdFRvb2x0aXBdPVwiXG4gICAgICBpbXBvcnRGb3JtLmludmFsaWRcbiAgICAgICAgPyAoJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5wcm9qZWN0aW9ucy5jaG9vc2UnIHwgdHJhbnNsYXRlKVxuICAgICAgICA6ICgnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmltcG9ydEJ1dHRvbicgfCB0cmFuc2xhdGUpXG4gICAgXCJcbiAgICBjbGFzcz1cImlnby1mb3JtLWJ1dHRvbi1ncm91cFwiXG4gID5cbiAgICA8YnV0dG9uXG4gICAgICBbZGlzYWJsZWRdPVwiaW1wb3J0Rm9ybS5pbnZhbGlkIHx8IChsb2FkaW5nJCB8IGFzeW5jKVwiXG4gICAgICBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKClcIlxuICAgID5cbiAgICAgIHt7ICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uaW1wb3J0QnV0dG9uJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxpZ28tc3Bpbm5lciBbc2hvd25dPVwibG9hZGluZyQgfCBhc3luY1wiPjwvaWdvLXNwaW5uZXI+XG4gICAgPGlucHV0XG4gICAgICBoaWRkZW5cbiAgICAgICNmaWxlSW5wdXRcbiAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgIFtzdHlsZS5kaXNwbGF5XT1cIidub25lJ1wiXG4gICAgICAoY2xpY2spPVwiZmlsZUlucHV0LnZhbHVlID0gbnVsbFwiXG4gICAgICAoY2hhbmdlKT1cImltcG9ydEZpbGVzKCRhbnkoJGV2ZW50LnRhcmdldCkuZmlsZXMpXCJcbiAgICAvPlxuICA8L2Rpdj5cbjwvZm9ybT5cbjxzZWN0aW9uIGNsYXNzPVwibWF0LXR5cG9ncmFwaHlcIiAqbmdJZj1cInNlbGVjdGVkTW9kZSA9PT0gJ2ltcG9ydCdcIj5cbiAgPGRpdiAqbmdJZj1cImltcG9ydEh0bWxDbGFyaWZpY2F0aW9ucyA9PT0gJydcIj5cbiAgICA8aDQ+e3sgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5pbXBvcnRDbGFyaWZpY2F0aW9ucycgfCB0cmFuc2xhdGUgfX08L2g0PlxuICAgIDx1bD5cbiAgICAgIDxsaT5cbiAgICAgICAge3tcbiAgICAgICAgICAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmltcG9ydFNpemVNYXgnXG4gICAgICAgICAgICB8IHRyYW5zbGF0ZTogeyBzaXplOiBmaWxlU2l6ZU1iIH1cbiAgICAgICAgfX1cbiAgICAgIDwvbGk+XG4gICAgICA8bGk+XG4gICAgICAgIHt7ICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uaW1wb3J0Rm9ybWF0QXV0aG9yaXplZCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvbGk+XG4gICAgICA8bGk+e3sgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5pbXBvcnRTaHBaaXAnIHwgdHJhbnNsYXRlIH19PC9saT5cbiAgICA8L3VsPlxuICA8L2Rpdj5cbiAgPGlnby1jdXN0b20taHRtbFxuICAgICpuZ0lmPVwiaW1wb3J0SHRtbENsYXJpZmljYXRpb25zICE9PSAnJ1wiXG4gICAgY2xhc3M9XCJtYXQtdHlwb2dyYXBoeVwiXG4gICAgW2h0bWxdPVwiaW1wb3J0SHRtbENsYXJpZmljYXRpb25zXCJcbiAgPlxuICA8L2lnby1jdXN0b20taHRtbD5cbjwvc2VjdGlvbj5cblxuPHNlY3Rpb25cbiAgY2xhc3M9XCJtYXQtdHlwb2dyYXBoeVwiXG4gICpuZ0lmPVwiKGV4cG9ydGFibGVMYXllcnMkIHwgYXN5bmMpLmxlbmd0aCA9PT0gMCAmJiBzZWxlY3RlZE1vZGUgPT09ICdleHBvcnQnXCJcbj5cbiAgPGg0Pnt7ICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZXhwb3J0Tm9MYXllcnNFeHBvcnRhYmxlJyB8IHRyYW5zbGF0ZSB9fTwvaDQ+XG48L3NlY3Rpb24+XG5cbjxmb3JtXG4gIGNsYXNzPVwiaWdvLWZvcm1cIlxuICBbZm9ybUdyb3VwXT1cImZvcm1cIlxuICAqbmdJZj1cIihleHBvcnRhYmxlTGF5ZXJzJCB8IGFzeW5jKS5sZW5ndGggPiAwICYmIHNlbGVjdGVkTW9kZSA9PT0gJ2V4cG9ydCdcIlxuPlxuICA8ZGl2IGNsYXNzPVwiaWdvLWlucHV0LWNvbnRhaW5lclwiPlxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgIDxtYXQtbGFiZWw+e3tcbiAgICAgICAgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRMYXllclBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVxuICAgICAgfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0IFsodmFsdWUpXT1cImxheWVyc1wiIG11bHRpcGxlPlxuICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgIHt7IGxheWVycy5sZW5ndGggPyBnZXRMYXllclRpdGxlQnlJZChsYXllcnNbMF0pIDogJycgfX1cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImxheWVycy5sZW5ndGggPiAxXCIgY2xhc3M9XCJleHBvcnQtc2VsZWN0LXRyaWdnZXJcIj5cbiAgICAgICAgICAgICgre3sgbGF5ZXJzLmxlbmd0aCAtIDEgfX1cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgIChsYXllcnM/Lmxlbmd0aCA9PT0gMlxuICAgICAgICAgICAgICAgID8gJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5vdGhlcidcbiAgICAgICAgICAgICAgICA6ICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0ub3RoZXJzJ1xuICAgICAgICAgICAgICApIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICB9fSlcbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICpuZ0Zvcj1cImxldCBsYXllciBvZiBleHBvcnRhYmxlTGF5ZXJzJCB8IGFzeW5jXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnaWdvLWV4cG9ydC1sYXllci1tYXQtb3B0aW9uJzogbGF5ZXJIYXNTZWxlY3RlZEZlYXR1cmVzKGxheWVyKVxuICAgICAgICAgIH1cIlxuICAgICAgICAgIFt2YWx1ZV09XCJsYXllci5pZFwiXG4gICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8cCBtYXRMaXN0SXRlbVRpdGxlPnt7IGxheWVyLnRpdGxlIH19PC9wPlxuICAgICAgICAgIDxwIG1hdExpc3RJdGVtVGl0bGU+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZVxuICAgICAgICAgICAgICAqbmdJZj1cImxheWVySGFzU2VsZWN0ZWRGZWF0dXJlcyhsYXllcilcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib25seVNlbGVjdGVkQ2xpY2soJGV2ZW50LCBsYXllci5pZClcIlxuICAgICAgICAgICAgICAoY2hlY2tlZCk9XCJpbkxheWVyc0lkVG9FeHBvcnRTZWxlY3Rpb25Pbmx5KGxheWVyKVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwib25seVNlbGVjdGVkKCRldmVudCwgbGF5ZXIuaWQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNtYWxsPnt7XG4gICAgICAgICAgICAgICAgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRTZWxlY3RlZEZlYXR1cmUnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgIH19PC9zbWFsbD5cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiaWdvLWlucHV0LWNvbnRhaW5lclwiPlxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgIDxtYXQtbGFiZWw+e3tcbiAgICAgICAgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRGb3JtYXRQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcbiAgICAgIH19PC9tYXQtbGFiZWw+XG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJmb3JtYXRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihmb3JtYXRzJCB8IGFzeW5jKS5sZW5ndGggIT09IDBcIj5cbiAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGZvcm1hdCBvZiBmb3JtYXRzJCB8IGFzeW5jIHwga2V5dmFsdWVcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImZvcm1hdC5rZXlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7ICdpZ28uZ2VvLmV4cG9ydC5mb3JtYXQuJyArIGZvcm1hdC52YWx1ZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0lmPVwiKGZvcm1hdHMkIHwgYXN5bmMpLmxlbmd0aCA9PT0gMFwiIGRpc2FibGVkPVwidHJ1ZVwiPlxuICAgICAgICAgIHt7ICdpZ28uZ2VvLmV4cG9ydC5ub0Zvcm1hdC50aXRsZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuXG4gIDxkaXZcbiAgICBjbGFzcz1cImlnby1pbnB1dC1jb250YWluZXJcIlxuICAgICpuZ0lmPVwiZm9yY2VOYW1pbmcgJiYgZm9ybS52YWx1ZS5mb3JtYXQgIT09ICdVUkwnXCJcbiAgPlxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgIDxpbnB1dFxuICAgICAgICBtYXRJbnB1dFxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e1xuICAgICAgICAgICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZXhwb3J0RmlsZU5hbWVQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcbiAgICAgICAgfX1cIlxuICAgICAgLz5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cblxuICA8ZGl2XG4gICAgY2xhc3M9XCJpZ28taW5wdXQtY29udGFpbmVyXCJcbiAgICAqbmdJZj1cIlxuICAgICAgZm9ybS52YWx1ZS5mb3JtYXQgPT09ICdDU1Zjb21tYScgfHwgZm9ybS52YWx1ZS5mb3JtYXQgPT09ICdDU1ZzZW1pY29sb24nXG4gICAgXCJcbiAgPlxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgIDxtYXQtbGFiZWw+e3tcbiAgICAgICAgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5lbmNvZGluZ1BsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVxuICAgICAgfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImVuY29kaW5nXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoZW5jb2RpbmdzJCB8IGFzeW5jKS5sZW5ndGggIT09IDBcIj5cbiAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGVuY29kaW5nIG9mIGVuY29kaW5ncyQgfCBhc3luYyB8IGtleXZhbHVlXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJlbmNvZGluZy5rZXlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7ICdpZ28uZ2VvLmV4cG9ydC5lbmNvZGluZy4nICsgZW5jb2RpbmcudmFsdWUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuXG4gIDxkaXZcbiAgICBjbGFzcz1cImV4cG9ydC1jb21iaW5lLWxheWVycyBtYXQtdHlwb2dyYXBoeVwiXG4gICAgKm5nSWY9XCJcbiAgICAgIGxheWVycy5sZW5ndGggPiAxICYmXG4gICAgICAoZm9ybS52YWx1ZS5mb3JtYXQgPT09ICdDU1Zjb21tYScgfHwgZm9ybS52YWx1ZS5mb3JtYXQgPT09ICdDU1ZzZW1pY29sb24nKVxuICAgIFwiXG4gID5cbiAgICA8bWF0LXNsaWRlLXRvZ2dsZVxuICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY29tYmluZUxheWVyc1wiXG4gICAgICBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiXG4gICAgPlxuICAgICAge3sgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRDb21iaW5lUmVzdWx0cycgfCB0cmFuc2xhdGUgfX1cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuXG4gIDxkaXZcbiAgICBjbGFzcz1cImV4cG9ydC1zZXBhcmF0b3IgbWF0LXR5cG9ncmFwaHlcIlxuICAgICpuZ0lmPVwiXG4gICAgICBsYXllcnMubGVuZ3RoID4gMSAmJlxuICAgICAgKGZvcm0udmFsdWUuZm9ybWF0ID09PSAnQ1NWY29tbWEnIHx8XG4gICAgICAgIGZvcm0udmFsdWUuZm9ybWF0ID09PSAnQ1NWc2VtaWNvbG9uJykgJiZcbiAgICAgIGZvcm0udmFsdWUuY29tYmluZUxheWVyc1xuICAgIFwiXG4gID5cbiAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJzZXBhcmF0b3JcIiBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiPlxuICAgICAge3sgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRTZXBhcmF0b3InIHwgdHJhbnNsYXRlIH19XG4gICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICA8L2Rpdj5cblxuICA8ZGl2XG4gICAgY2xhc3M9XCJleHBvcnQtb3B0aW9ucyBtYXQtdHlwb2dyYXBoeVwiXG4gICAgKm5nSWY9XCJmb3JtLnZhbHVlLmZvcm1hdCAhPT0gJ1VSTCdcIlxuICA+XG4gICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgIGZvcm1Db250cm9sTmFtZT1cImZlYXR1cmVJbk1hcEV4dGVudFwiXG4gICAgICBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiXG4gICAgPlxuICAgICAge3sgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRGZWF0dXJlSW5FeHRlbnQnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiaWdvLWZvcm0tYnV0dG9uLWdyb3VwXCI+XG4gICAgPGJ1dHRvblxuICAgICAgbWF0LXJhaXNlZC1idXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgW2Rpc2FibGVkXT1cIiFmb3JtLnZhbGlkIHx8IChsb2FkaW5nJCB8IGFzeW5jKVwiXG4gICAgICAoY2xpY2spPVwiaGFuZGxlRXhwb3J0Rm9ybVN1Ym1pdChmb3JtLnZhbHVlKVwiXG4gICAgPlxuICAgICAge3tcbiAgICAgICAgZm9ybS52YWx1ZS5mb3JtYXQgIT09ICdVUkwnXG4gICAgICAgICAgPyAoJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRCdXR0b24nIHwgdHJhbnNsYXRlKVxuICAgICAgICAgIDogZm9ybS52YWx1ZS5sYXllcnMubGVuZ3RoID4gMVxuICAgICAgICAgICAgPyAoJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRCdXR0b25MaW5rcycgfCB0cmFuc2xhdGUpXG4gICAgICAgICAgICA6ICgnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydEJ1dHRvbkxpbmsnIHwgdHJhbnNsYXRlKVxuICAgICAgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8aWdvLXNwaW5uZXIgW3Nob3duXT1cImxvYWRpbmckIHwgYXN5bmNcIj48L2lnby1zcGlubmVyPlxuICA8L2Rpdj5cblxuICA8aWdvLWN1c3RvbS1odG1sXG4gICAgKm5nSWY9XCJleHBvcnRIdG1sQ2xhcmlmaWNhdGlvbnMgIT09ICcnXCJcbiAgICBjbGFzcz1cIm1hdC10eXBvZ3JhcGh5XCJcbiAgICBbaHRtbF09XCJleHBvcnRIdG1sQ2xhcmlmaWNhdGlvbnNcIlxuICA+XG4gIDwvaWdvLWN1c3RvbS1odG1sPlxuPC9mb3JtPlxuIl19
|