@carto/kepler.gl 0.0.74 → 0.0.75-alpha.lodash.0
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/dist/actions/action-wrapper.js +21 -49
- package/dist/actions/actions.js +10 -19
- package/dist/actions/identity-actions.js +8 -17
- package/dist/actions/index.js +7 -24
- package/dist/actions/map-state-actions.js +10 -19
- package/dist/actions/map-style-actions.js +20 -35
- package/dist/actions/provider-actions.js +26 -42
- package/dist/actions/ui-state-actions.js +42 -70
- package/dist/actions/vis-state-actions.js +102 -162
- package/dist/cloud-providers/index.js +8 -8
- package/dist/cloud-providers/provider.js +55 -94
- package/dist/components/bottom-widget.js +47 -48
- package/dist/components/common/action-panel.js +39 -38
- package/dist/components/common/animation-control/animation-control.js +40 -38
- package/dist/components/common/animation-control/animation-controller.js +47 -70
- package/dist/components/common/animation-control/animation-speed-slider.js +28 -38
- package/dist/components/common/animation-control/floating-time-display.js +56 -67
- package/dist/components/common/animation-control/playback-controls.js +64 -80
- package/dist/components/common/animation-control/speed-control.js +26 -24
- package/dist/components/common/checkbox.js +34 -55
- package/dist/components/common/color-legend.js +40 -72
- package/dist/components/common/data-table/button.js +29 -22
- package/dist/components/common/data-table/canvas.js +21 -10
- package/dist/components/common/data-table/cell-size.js +54 -58
- package/dist/components/common/data-table/grid.js +32 -33
- package/dist/components/common/data-table/index.js +96 -138
- package/dist/components/common/data-table/option-dropdown.js +29 -33
- package/dist/components/common/dataset-label.js +21 -13
- package/dist/components/common/error-boundary.js +25 -30
- package/dist/components/common/field-selector.js +35 -69
- package/dist/components/common/field-token.js +21 -16
- package/dist/components/common/file-uploader/file-drop.js +40 -55
- package/dist/components/common/file-uploader/file-upload-progress.js +32 -30
- package/dist/components/common/file-uploader/file-upload.js +52 -91
- package/dist/components/common/file-uploader/upload-button.js +31 -42
- package/dist/components/common/histogram-plot.js +32 -27
- package/dist/components/common/icons/add.js +27 -27
- package/dist/components/common/icons/anchor_window.js +3 -9
- package/dist/components/common/icons/arrow-down-alt.js +27 -27
- package/dist/components/common/icons/arrow-down-solid .js +27 -27
- package/dist/components/common/icons/arrow-down.js +27 -27
- package/dist/components/common/icons/arrow-left.js +27 -27
- package/dist/components/common/icons/arrow-right.js +27 -27
- package/dist/components/common/icons/arrow-up-alt.js +27 -27
- package/dist/components/common/icons/arrow-up-solid.js +27 -27
- package/dist/components/common/icons/arrow-up.js +27 -27
- package/dist/components/common/icons/base.js +38 -42
- package/dist/components/common/icons/bug.js +27 -27
- package/dist/components/common/icons/cancel.js +27 -27
- package/dist/components/common/icons/checkmark.js +27 -28
- package/dist/components/common/icons/chevron-right.js +27 -27
- package/dist/components/common/icons/clipboard.js +27 -27
- package/dist/components/common/icons/clock.js +27 -27
- package/dist/components/common/icons/close.js +27 -27
- package/dist/components/common/icons/code-alt.js +27 -28
- package/dist/components/common/icons/copy.js +27 -28
- package/dist/components/common/icons/crosshairs.js +27 -28
- package/dist/components/common/icons/cube-3d.js +27 -27
- package/dist/components/common/icons/cursor-click.js +27 -27
- package/dist/components/common/icons/data-table.js +27 -27
- package/dist/components/common/icons/db.js +27 -27
- package/dist/components/common/icons/delete.js +27 -27
- package/dist/components/common/icons/docs.js +27 -27
- package/dist/components/common/icons/drag-n-drop.js +27 -27
- package/dist/components/common/icons/draw-polygon.js +27 -27
- package/dist/components/common/icons/email.js +27 -27
- package/dist/components/common/icons/expand.js +27 -27
- package/dist/components/common/icons/eye-seen.js +27 -27
- package/dist/components/common/icons/eye-unseen.js +27 -27
- package/dist/components/common/icons/file-type.js +23 -16
- package/dist/components/common/icons/file.js +27 -27
- package/dist/components/common/icons/files.js +24 -26
- package/dist/components/common/icons/filter-funnel.js +27 -27
- package/dist/components/common/icons/free-window.js +3 -9
- package/dist/components/common/icons/gear.js +27 -27
- package/dist/components/common/icons/hash.js +27 -27
- package/dist/components/common/icons/histogram.js +24 -25
- package/dist/components/common/icons/index.js +63 -138
- package/dist/components/common/icons/info.js +27 -28
- package/dist/components/common/icons/layers.js +27 -27
- package/dist/components/common/icons/left-arrow.js +27 -28
- package/dist/components/common/icons/legend.js +27 -27
- package/dist/components/common/icons/line-chart.js +27 -27
- package/dist/components/common/icons/login.js +27 -27
- package/dist/components/common/icons/logout.js +27 -27
- package/dist/components/common/icons/map-icon.js +27 -28
- package/dist/components/common/icons/map.js +27 -28
- package/dist/components/common/icons/messages.js +27 -27
- package/dist/components/common/icons/minus.js +27 -27
- package/dist/components/common/icons/pause.js +27 -27
- package/dist/components/common/icons/picture.js +24 -26
- package/dist/components/common/icons/pin.js +27 -27
- package/dist/components/common/icons/play.js +27 -27
- package/dist/components/common/icons/polygon.js +27 -27
- package/dist/components/common/icons/rectangle.js +27 -27
- package/dist/components/common/icons/reduce.js +27 -27
- package/dist/components/common/icons/reset.js +27 -27
- package/dist/components/common/icons/rocket.js +27 -27
- package/dist/components/common/icons/save.js +27 -27
- package/dist/components/common/icons/save2.js +27 -27
- package/dist/components/common/icons/search.js +27 -27
- package/dist/components/common/icons/settings.js +27 -27
- package/dist/components/common/icons/share.js +27 -27
- package/dist/components/common/icons/split.js +27 -27
- package/dist/components/common/icons/square-select.js +27 -27
- package/dist/components/common/icons/swap-horizontal.js +27 -28
- package/dist/components/common/icons/table.js +27 -27
- package/dist/components/common/icons/trash.js +27 -27
- package/dist/components/common/icons/upload.js +27 -27
- package/dist/components/common/icons/vert-dots.js +27 -27
- package/dist/components/common/icons/vert-three-dots.js +27 -27
- package/dist/components/common/icons/warning.js +27 -28
- package/dist/components/common/image-preview.js +36 -29
- package/dist/components/common/info-helper.js +26 -25
- package/dist/components/common/item-selector/accessor.js +3 -5
- package/dist/components/common/item-selector/chickleted-input.js +41 -43
- package/dist/components/common/item-selector/dropdown-list.js +44 -74
- package/dist/components/common/item-selector/item-selector-submenu.js +29 -38
- package/dist/components/common/item-selector/item-selector.js +38 -86
- package/dist/components/common/item-selector/typeahead.js +37 -83
- package/dist/components/common/line-chart.js +39 -36
- package/dist/components/common/loading-spinner.js +33 -25
- package/dist/components/common/logo.js +24 -22
- package/dist/components/common/map-layer-selector.js +23 -16
- package/dist/components/common/modal.js +36 -61
- package/dist/components/common/portaled.js +61 -102
- package/dist/components/common/progress-bar.js +29 -20
- package/dist/components/common/range-brush.js +63 -104
- package/dist/components/common/range-plot.js +47 -52
- package/dist/components/common/range-slider.js +52 -78
- package/dist/components/common/slider/mouse-event.js +11 -37
- package/dist/components/common/slider/slider-bar-handle.js +31 -39
- package/dist/components/common/slider/slider-handle.js +35 -44
- package/dist/components/common/slider/slider.js +55 -82
- package/dist/components/common/styled-components.js +64 -169
- package/dist/components/common/switch.js +22 -16
- package/dist/components/common/time-range-slider-time-title.js +24 -19
- package/dist/components/common/time-range-slider.js +43 -40
- package/dist/components/common/time-slider-marker.js +36 -41
- package/dist/components/common/toolbar-item.js +22 -16
- package/dist/components/common/toolbar.js +21 -10
- package/dist/components/common/vertical-toolbar.js +21 -10
- package/dist/components/container.js +52 -73
- package/dist/components/context.js +6 -10
- package/dist/components/editor/constants.js +6 -8
- package/dist/components/editor/editor.js +45 -77
- package/dist/components/editor/feature-action-panel.js +35 -43
- package/dist/components/editor/feature-styles.js +37 -42
- package/dist/components/editor/handle-style.js +37 -39
- package/dist/components/filters/components.js +21 -10
- package/dist/components/filters/filter-panels/filter-panel-with-field-select.js +14 -25
- package/dist/components/filters/filter-panels/multi-select-filter-panel.js +14 -21
- package/dist/components/filters/filter-panels/new-filter-panel.js +13 -23
- package/dist/components/filters/filter-panels/polygon-filter-panel.js +16 -28
- package/dist/components/filters/filter-panels/range-filter-panel.js +14 -21
- package/dist/components/filters/filter-panels/single-select-filter-panel.js +14 -21
- package/dist/components/filters/filter-panels/time-range-filter-panel.js +14 -23
- package/dist/components/filters/index.js +11 -17
- package/dist/components/filters/multi-select-filter.js +3 -9
- package/dist/components/filters/polygon-filter.js +8 -18
- package/dist/components/filters/range-filter.js +3 -8
- package/dist/components/filters/single-select-filter.js +3 -9
- package/dist/components/filters/time-range-filter.js +7 -18
- package/dist/components/filters/time-widget.js +41 -51
- package/dist/components/geocoder/geocoder.js +95 -128
- package/dist/components/geocoder-panel.js +37 -62
- package/dist/components/index.js +356 -498
- package/dist/components/injector.js +42 -58
- package/dist/components/kepler-gl.js +65 -149
- package/dist/components/map/coordinate-info.js +4 -13
- package/dist/components/map/layer-hover-info.js +40 -48
- package/dist/components/map/layer-selector-panel.js +17 -30
- package/dist/components/map/locale-panel.js +13 -27
- package/dist/components/map/map-control-panel.js +27 -24
- package/dist/components/map/map-control-toolbar.js +21 -11
- package/dist/components/map/map-control-tooltip.js +4 -11
- package/dist/components/map/map-control.js +26 -27
- package/dist/components/map/map-draw-panel.js +12 -29
- package/dist/components/map/map-legend-panel.js +17 -34
- package/dist/components/map/map-legend.js +52 -70
- package/dist/components/map/map-popover.js +41 -57
- package/dist/components/map/split-map-button.js +13 -25
- package/dist/components/map/toggle-3d-button.js +10 -21
- package/dist/components/map-container.js +99 -143
- package/dist/components/maps-layout.js +24 -26
- package/dist/components/modal-container.js +62 -112
- package/dist/components/modals/add-map-style-modal.js +37 -64
- package/dist/components/modals/cloud-tile.js +36 -36
- package/dist/components/modals/data-table-modal.js +51 -81
- package/dist/components/modals/delete-data-modal.js +24 -20
- package/dist/components/modals/error-display.js +3 -10
- package/dist/components/modals/export-data-modal.js +37 -54
- package/dist/components/modals/export-image-modal.js +31 -28
- package/dist/components/modals/export-map-modal/components.js +27 -27
- package/dist/components/modals/export-map-modal/export-html-map.js +27 -27
- package/dist/components/modals/export-map-modal/export-json-map.js +22 -22
- package/dist/components/modals/export-map-modal/export-map-modal.js +20 -40
- package/dist/components/modals/image-modal-container.js +12 -19
- package/dist/components/modals/load-data-modal.js +31 -35
- package/dist/components/modals/load-storage-map.js +42 -77
- package/dist/components/modals/loading-dialog.js +24 -18
- package/dist/components/modals/modal-dialog.js +3 -7
- package/dist/components/modals/modal-tabs.js +29 -29
- package/dist/components/modals/overwrite-map-modal.js +29 -28
- package/dist/components/modals/provider-modal-container.js +27 -27
- package/dist/components/modals/save-map-modal.js +43 -48
- package/dist/components/modals/share-map-modal.js +42 -53
- package/dist/components/modals/status-panel.js +24 -25
- package/dist/components/modals/storage-map-viewer.js +30 -43
- package/dist/components/notification-panel/notification-item.js +34 -48
- package/dist/components/notification-panel.js +31 -37
- package/dist/components/performance.js +11 -36
- package/dist/components/plot-container.js +44 -74
- package/dist/components/side-panel/cloud-storage-dropdown.js +4 -10
- package/dist/components/side-panel/common/dataset-info.js +20 -13
- package/dist/components/side-panel/common/dataset-tag.js +21 -12
- package/dist/components/side-panel/common/dataset-title.js +37 -52
- package/dist/components/side-panel/common/source-data-catalog.js +26 -22
- package/dist/components/side-panel/common/source-data-selector.js +34 -40
- package/dist/components/side-panel/custom-panel.js +5 -9
- package/dist/components/side-panel/filter-manager.js +18 -29
- package/dist/components/side-panel/filter-panel/filter-panel-header.js +30 -30
- package/dist/components/side-panel/filter-panel/filter-panel.js +39 -58
- package/dist/components/side-panel/interaction-manager.js +5 -12
- package/dist/components/side-panel/interaction-panel/brush-config.js +23 -19
- package/dist/components/side-panel/interaction-panel/interaction-panel.js +37 -60
- package/dist/components/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.js +34 -74
- package/dist/components/side-panel/interaction-panel/tooltip-config.js +28 -40
- package/dist/components/side-panel/layer-manager.js +51 -82
- package/dist/components/side-panel/layer-panel/color-dimension-scale-selector.js +3 -10
- package/dist/components/side-panel/layer-panel/color-palette.js +27 -23
- package/dist/components/side-panel/layer-panel/color-range-selector.js +53 -99
- package/dist/components/side-panel/layer-panel/color-selector.js +36 -67
- package/dist/components/side-panel/layer-panel/column-selector.js +26 -25
- package/dist/components/side-panel/layer-panel/custom-markers-config-group.js +2 -6
- package/dist/components/side-panel/layer-panel/custom-palette.js +37 -71
- package/dist/components/side-panel/layer-panel/custom-picker.js +32 -45
- package/dist/components/side-panel/layer-panel/dimension-scale-selector.js +8 -16
- package/dist/components/side-panel/layer-panel/hex-column-config.js +12 -34
- package/dist/components/side-panel/layer-panel/layer-aggregation-resolution.js +2 -10
- package/dist/components/side-panel/layer-panel/layer-column-config.js +31 -27
- package/dist/components/side-panel/layer-panel/layer-config-group.js +46 -80
- package/dist/components/side-panel/layer-panel/layer-configurator.js +158 -249
- package/dist/components/side-panel/layer-panel/layer-panel-header.js +52 -66
- package/dist/components/side-panel/layer-panel/layer-panel.js +33 -54
- package/dist/components/side-panel/layer-panel/layer-type-dropdown-list.js +28 -22
- package/dist/components/side-panel/layer-panel/layer-type-list-item.js +22 -18
- package/dist/components/side-panel/layer-panel/layer-type-selector.js +29 -32
- package/dist/components/side-panel/layer-panel/layer-visibility-by-zoom.js +35 -40
- package/dist/components/side-panel/layer-panel/single-color-palette.js +32 -42
- package/dist/components/side-panel/layer-panel/text-label-panel.js +31 -42
- package/dist/components/side-panel/layer-panel/vis-config-by-field-selector.js +39 -52
- package/dist/components/side-panel/layer-panel/vis-config-slider.js +10 -19
- package/dist/components/side-panel/layer-panel/vis-config-switch.js +28 -29
- package/dist/components/side-panel/map-manager.js +32 -46
- package/dist/components/side-panel/map-style-panel/map-layer-selector.js +28 -31
- package/dist/components/side-panel/map-style-panel/map-style-selector.js +26 -24
- package/dist/components/side-panel/panel-dropdown.js +28 -35
- package/dist/components/side-panel/panel-header-action.js +38 -43
- package/dist/components/side-panel/panel-header.js +56 -94
- package/dist/components/side-panel/panel-tab.js +24 -20
- package/dist/components/side-panel/panel-title.js +21 -10
- package/dist/components/side-panel/panel-toggle.js +26 -23
- package/dist/components/side-panel/side-bar.js +39 -55
- package/dist/components/side-panel.js +58 -67
- package/dist/connect/keplergl-connect.js +5 -14
- package/dist/connect/with-local-selector.js +33 -38
- package/dist/constants/action-types.js +5 -6
- package/dist/constants/color-palette.js +12 -23
- package/dist/constants/color-ranges.js +32 -31
- package/dist/constants/custom-color-ranges.js +9 -14
- package/dist/constants/default-settings.js +154 -239
- package/dist/constants/index.js +95 -103
- package/dist/constants/keyevent.js +3 -7
- package/dist/constants/tooltip.js +7 -10
- package/dist/constants/user-feedbacks.js +5 -6
- package/dist/constants/user-guides.js +12 -20
- package/dist/deckgl-layers/3d-building-layer/3d-building-layer.js +29 -32
- package/dist/deckgl-layers/3d-building-layer/3d-building-utils.js +10 -43
- package/dist/deckgl-layers/cluster-layer/cluster-layer.js +54 -75
- package/dist/deckgl-layers/column-layer/enhanced-column-layer.js +29 -32
- package/dist/deckgl-layers/grid-layer/enhanced-cpu-grid-layer.js +29 -30
- package/dist/deckgl-layers/hexagon-layer/enhanced-hexagon-layer.js +29 -30
- package/dist/deckgl-layers/layer-utils/cluster-utils.js +12 -23
- package/dist/deckgl-layers/layer-utils/cpu-aggregator.js +75 -132
- package/dist/deckgl-layers/layer-utils/shader-utils.js +1 -5
- package/dist/deckgl-layers/line-layer/line-layer.js +27 -34
- package/dist/deckgl-layers/svg-icon-layer/scatterplot-icon-layer.js +26 -30
- package/dist/deckgl-layers/svg-icon-layer/svg-icon-layer.js +33 -39
- package/dist/index.js +4 -23
- package/dist/layers/aggregation-layer.js +66 -100
- package/dist/layers/arc-layer/arc-layer-icon.js +27 -27
- package/dist/layers/arc-layer/arc-layer.js +48 -73
- package/dist/layers/base-layer.js +255 -406
- package/dist/layers/cluster-layer/cluster-layer-icon.js +27 -27
- package/dist/layers/cluster-layer/cluster-layer.js +33 -44
- package/dist/layers/default-layer-icon.js +27 -27
- package/dist/layers/geojson-layer/geojson-layer-icon.js +27 -27
- package/dist/layers/geojson-layer/geojson-layer.js +56 -89
- package/dist/layers/geojson-layer/geojson-utils.js +35 -47
- package/dist/layers/grid-layer/grid-layer-icon.js +27 -27
- package/dist/layers/grid-layer/grid-layer.js +30 -41
- package/dist/layers/grid-layer/grid-utils.js +6 -9
- package/dist/layers/h3-hexagon-layer/h3-hexagon-layer-icon.js +27 -27
- package/dist/layers/h3-hexagon-layer/h3-hexagon-layer.js +48 -80
- package/dist/layers/h3-hexagon-layer/h3-utils.js +10 -21
- package/dist/layers/heatmap-layer/heatmap-layer-icon.js +27 -27
- package/dist/layers/heatmap-layer/heatmap-layer.js +47 -74
- package/dist/layers/hexagon-layer/hexagon-layer-icon.js +27 -27
- package/dist/layers/hexagon-layer/hexagon-layer.js +30 -42
- package/dist/layers/hexagon-layer/hexagon-utils.js +3 -15
- package/dist/layers/icon-layer/icon-info-modal.js +23 -26
- package/dist/layers/icon-layer/icon-layer-icon.js +27 -27
- package/dist/layers/icon-layer/icon-layer.js +59 -97
- package/dist/layers/index.js +38 -39
- package/dist/layers/layer-factory.js +38 -42
- package/dist/layers/layer-text-label.js +8 -18
- package/dist/layers/layer-update.js +3 -14
- package/dist/layers/line-layer/line-layer-icon.js +27 -27
- package/dist/layers/line-layer/line-layer.js +46 -66
- package/dist/layers/mapbox-utils.js +38 -51
- package/dist/layers/mapboxgl-layer.js +43 -58
- package/dist/layers/point-layer/point-layer-icon.js +27 -27
- package/dist/layers/point-layer/point-layer.js +57 -90
- package/dist/layers/s2-geometry-layer/s2-geometry-layer.js +41 -73
- package/dist/layers/s2-geometry-layer/s2-layer-icon.js +27 -27
- package/dist/layers/s2-geometry-layer/s2-utils.js +5 -11
- package/dist/layers/scenegraph-layer/scenegraph-info-modal.js +21 -15
- package/dist/layers/scenegraph-layer/scenegraph-layer-icon.js +27 -27
- package/dist/layers/scenegraph-layer/scenegraph-layer.js +52 -75
- package/dist/layers/trip-layer/trip-info-modal.js +21 -16
- package/dist/layers/trip-layer/trip-layer-icon.js +27 -27
- package/dist/layers/trip-layer/trip-layer.js +55 -97
- package/dist/layers/trip-layer/trip-utils.js +16 -39
- package/dist/layers/types.js +3 -6
- package/dist/localization/en.js +22 -11
- package/dist/localization/formatted-message.js +5 -10
- package/dist/localization/index.js +7 -13
- package/dist/localization/locales.js +7 -12
- package/dist/middleware/index.js +2 -5
- package/dist/processors/data-processor.js +113 -177
- package/dist/processors/file-handler.js +200 -276
- package/dist/processors/index.js +33 -35
- package/dist/reducers/combined-updaters.js +35 -46
- package/dist/reducers/composer-helpers.js +28 -27
- package/dist/reducers/composers.js +25 -12
- package/dist/reducers/core.js +13 -46
- package/dist/reducers/index.js +24 -38
- package/dist/reducers/map-state-updaters.js +53 -65
- package/dist/reducers/map-state.js +31 -26
- package/dist/reducers/map-style-updaters.js +94 -138
- package/dist/reducers/map-style.js +31 -26
- package/dist/reducers/provider-state-updaters.js +92 -167
- package/dist/reducers/provider-state.js +32 -25
- package/dist/reducers/root.js +44 -50
- package/dist/reducers/ui-state-updaters.js +102 -202
- package/dist/reducers/ui-state.js +32 -26
- package/dist/reducers/vis-state-merger.js +107 -171
- package/dist/reducers/vis-state-selectors.js +5 -10
- package/dist/reducers/vis-state-updaters.js +397 -674
- package/dist/reducers/vis-state.js +32 -25
- package/dist/schemas/dataset-schema.js +39 -59
- package/dist/schemas/index.js +38 -45
- package/dist/schemas/map-state-schema.js +28 -24
- package/dist/schemas/map-style-schema.js +34 -48
- package/dist/schemas/schema-manager.js +44 -62
- package/dist/schemas/schema-utils.js +11 -15
- package/dist/schemas/schema.js +32 -27
- package/dist/schemas/versions.js +5 -9
- package/dist/schemas/vis-state-schema.js +114 -314
- package/dist/styles/base.js +367 -640
- package/dist/styles/index.js +1 -5
- package/dist/styles/media-breakpoints.js +21 -9
- package/dist/tasks/tasks.js +22 -50
- package/dist/templates/export-map-html.js +3 -6
- package/dist/utils/aggregate-utils.js +23 -27
- package/dist/utils/color-utils.js +36 -38
- package/dist/utils/custom-scales.js +1 -7
- package/dist/utils/data-scale-utils.js +11 -20
- package/dist/utils/data-utils.js +78 -137
- package/dist/utils/dataset-utils.js +73 -90
- package/dist/utils/dom-to-image.js +15 -93
- package/dist/utils/dom-utils.js +34 -116
- package/dist/utils/export-utils.js +67 -104
- package/dist/utils/filter-utils.js +176 -326
- package/dist/utils/gl-utils.js +22 -13
- package/dist/utils/gpu-filter-utils.js +46 -59
- package/dist/utils/index.js +68 -80
- package/dist/utils/interaction-utils.js +26 -50
- package/dist/utils/layer-utils.js +58 -63
- package/dist/utils/locale-utils.js +23 -21
- package/dist/utils/map-info-utils.js +2 -3
- package/dist/utils/map-style-utils/mapbox-gl-style-editor.js +75 -74
- package/dist/utils/map-style-utils/mapbox-utils.js +3 -5
- package/dist/utils/mapbox-utils.js +2 -5
- package/dist/utils/notifications-utils.js +36 -35
- package/dist/utils/observe-dimensions.js +38 -43
- package/dist/utils/projection-utils.js +9 -20
- package/dist/utils/searcher-utils.js +1 -4
- package/dist/utils/split-map-utils.js +38 -34
- package/dist/utils/table-utils/data-container-utils.js +27 -23
- package/dist/utils/table-utils/data-row.js +2 -13
- package/dist/utils/table-utils/index.js +1 -2
- package/dist/utils/table-utils/indexed-data-container.js +65 -84
- package/dist/utils/table-utils/kepler-table.js +83 -126
- package/dist/utils/table-utils/row-data-container.js +62 -87
- package/dist/utils/utils.js +51 -69
- package/package.json +2 -13
- package/src/actions/action-wrapper.js +1 -1
- package/src/components/common/checkbox.js +1 -1
- package/src/components/common/data-table/grid.js +1 -1
- package/src/components/common/data-table/index.js +2 -2
- package/src/components/common/item-selector/item-selector.js +1 -1
- package/src/components/common/portaled.js +2 -2
- package/src/components/common/time-range-slider.js +1 -1
- package/src/components/container.js +1 -1
- package/src/components/editor/editor.js +1 -1
- package/src/components/editor/feature-styles.js +1 -1
- package/src/components/editor/handle-style.js +1 -1
- package/src/components/filters/filter-panels/polygon-filter-panel.js +1 -1
- package/src/components/modal-container.js +1 -1
- package/src/components/modals/image-modal-container.js +1 -1
- package/src/components/modals/load-data-modal.js +1 -1
- package/src/components/plot-container.js +1 -1
- package/src/components/side-panel/filter-panel/filter-panel.js +1 -1
- package/src/components/side-panel/layer-panel/color-range-selector.js +1 -1
- package/src/components/side-panel.js +1 -1
- package/src/deckgl-layers/layer-utils/cluster-utils.js +1 -1
- package/src/layers/aggregation-layer.js +1 -1
- package/src/layers/geojson-layer/geojson-layer.js +1 -1
- package/src/layers/heatmap-layer/heatmap-layer.js +1 -1
- package/src/layers/layer-text-label.js +1 -1
- package/src/layers/trip-layer/trip-layer.js +2 -2
- package/src/reducers/map-style-updaters.js +1 -1
- package/src/reducers/vis-state-merger.js +3 -3
- package/src/reducers/vis-state-updaters.js +4 -4
- package/src/schemas/dataset-schema.js +1 -1
- package/src/schemas/vis-state-schema.js +2 -2
- package/src/utils/dataset-utils.js +1 -1
- package/src/utils/export-utils.js +1 -1
- package/src/utils/filter-utils.js +2 -2
- package/src/utils/map-style-utils/mapbox-gl-style-editor.js +1 -1
- package/src/utils/observe-dimensions.js +1 -1
- package/src/utils/split-map-utils.js +1 -1
- package/CHANGELOG.md +0 -954
|
@@ -1,58 +1,53 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
|
|
6
|
-
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
7
5
|
Object.defineProperty(exports, "__esModule", {
|
|
8
6
|
value: true
|
|
9
7
|
});
|
|
10
|
-
exports
|
|
11
|
-
|
|
8
|
+
exports.geojsonVisConfigs = exports.geoJsonRequiredColumns = exports.featureAccessor = exports.defaultRadius = exports.defaultLineWidth = exports.defaultElevation = exports["default"] = void 0;
|
|
12
9
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
13
|
-
|
|
14
10
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
15
|
-
|
|
16
11
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
17
|
-
|
|
18
|
-
var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
|
|
19
|
-
|
|
20
|
-
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
21
|
-
|
|
22
12
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
23
|
-
|
|
13
|
+
var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
|
|
24
14
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
25
|
-
|
|
15
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
26
16
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
27
|
-
|
|
28
|
-
var _lodash = _interopRequireDefault(require("lodash.uniq"));
|
|
29
|
-
|
|
17
|
+
var _uniq = _interopRequireDefault(require("lodash/uniq"));
|
|
30
18
|
var _typeAnalyzer = require("type-analyzer");
|
|
31
|
-
|
|
32
19
|
var _baseLayer = _interopRequireWildcard(require("../base-layer"));
|
|
33
|
-
|
|
34
20
|
var _layers = require("@deck.gl/layers");
|
|
35
|
-
|
|
36
21
|
var _geojsonUtils = require("./geojson-utils");
|
|
37
|
-
|
|
38
22
|
var _geojsonLayerIcon = _interopRequireDefault(require("./geojson-layer-icon"));
|
|
39
|
-
|
|
40
23
|
var _defaultSettings = require("../../constants/default-settings");
|
|
41
|
-
|
|
42
24
|
var _layerFactory = require("../layer-factory");
|
|
43
|
-
|
|
44
|
-
var
|
|
45
|
-
|
|
46
|
-
function
|
|
47
|
-
|
|
48
|
-
function
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
25
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
26
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
|
|
27
|
+
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
|
|
28
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
29
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
30
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } // Copyright (c) 2022 Uber Technologies, Inc.
|
|
31
|
+
//
|
|
32
|
+
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
33
|
+
// of this software and associated documentation files (the "Software"), to deal
|
|
34
|
+
// in the Software without restriction, including without limitation the rights
|
|
35
|
+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
36
|
+
// copies of the Software, and to permit persons to whom the Software is
|
|
37
|
+
// furnished to do so, subject to the following conditions:
|
|
38
|
+
//
|
|
39
|
+
// The above copyright notice and this permission notice shall be included in
|
|
40
|
+
// all copies or substantial portions of the Software.
|
|
41
|
+
//
|
|
42
|
+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
43
|
+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
44
|
+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
45
|
+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
46
|
+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
47
|
+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
48
|
+
// THE SOFTWARE.
|
|
49
|
+
var SUPPORTED_ANALYZER_TYPES = (0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, _typeAnalyzer.DATA_TYPES.GEOMETRY, true), _typeAnalyzer.DATA_TYPES.GEOMETRY_FROM_STRING, true);
|
|
50
|
+
var geojsonVisConfigs = exports.geojsonVisConfigs = {
|
|
56
51
|
opacity: 'opacity',
|
|
57
52
|
strokeOpacity: _objectSpread(_objectSpread({}, _layerFactory.LAYER_VIS_CONFIGS.opacity), {}, {
|
|
58
53
|
property: 'strokeOpacity'
|
|
@@ -74,49 +69,33 @@ var geojsonVisConfigs = {
|
|
|
74
69
|
enable3d: 'enable3d',
|
|
75
70
|
wireframe: 'wireframe'
|
|
76
71
|
};
|
|
77
|
-
exports.
|
|
78
|
-
var
|
|
79
|
-
exports.geoJsonRequiredColumns = geoJsonRequiredColumns;
|
|
80
|
-
|
|
81
|
-
var featureAccessor = function featureAccessor(_ref) {
|
|
72
|
+
var geoJsonRequiredColumns = exports.geoJsonRequiredColumns = ['geojson'];
|
|
73
|
+
var featureAccessor = exports.featureAccessor = function featureAccessor(_ref) {
|
|
82
74
|
var geojson = _ref.geojson;
|
|
83
75
|
return function (dc) {
|
|
84
76
|
return function (d) {
|
|
85
77
|
return dc.valueAt(d.index, geojson.fieldIdx);
|
|
86
78
|
};
|
|
87
79
|
};
|
|
88
|
-
};
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
exports.featureAccessor = featureAccessor;
|
|
92
|
-
var defaultElevation = 500;
|
|
93
|
-
exports.defaultElevation = defaultElevation;
|
|
94
|
-
var defaultLineWidth = 1;
|
|
95
|
-
exports.defaultLineWidth = defaultLineWidth;
|
|
96
|
-
var defaultRadius = 1;
|
|
97
|
-
exports.defaultRadius = defaultRadius;
|
|
80
|
+
};
|
|
98
81
|
|
|
99
|
-
|
|
82
|
+
// access feature properties from geojson sub layer
|
|
83
|
+
var defaultElevation = exports.defaultElevation = 500;
|
|
84
|
+
var defaultLineWidth = exports.defaultLineWidth = 1;
|
|
85
|
+
var defaultRadius = exports.defaultRadius = 1;
|
|
86
|
+
var GeoJsonLayer = exports["default"] = /*#__PURE__*/function (_Layer) {
|
|
100
87
|
(0, _inherits2["default"])(GeoJsonLayer, _Layer);
|
|
101
|
-
|
|
102
|
-
var _super = _createSuper(GeoJsonLayer);
|
|
103
|
-
|
|
104
88
|
function GeoJsonLayer(props) {
|
|
105
89
|
var _this;
|
|
106
|
-
|
|
107
90
|
(0, _classCallCheck2["default"])(this, GeoJsonLayer);
|
|
108
|
-
_this =
|
|
91
|
+
_this = _callSuper(this, GeoJsonLayer, [props]);
|
|
109
92
|
_this.dataToFeature = [];
|
|
110
|
-
|
|
111
93
|
_this.registerVisConfig(geojsonVisConfigs);
|
|
112
|
-
|
|
113
94
|
_this.getPositionAccessor = function (dataContainer) {
|
|
114
95
|
return featureAccessor(_this.config.columns)(dataContainer);
|
|
115
96
|
};
|
|
116
|
-
|
|
117
97
|
return _this;
|
|
118
98
|
}
|
|
119
|
-
|
|
120
99
|
(0, _createClass2["default"])(GeoJsonLayer, [{
|
|
121
100
|
key: "type",
|
|
122
101
|
get: function get() {
|
|
@@ -260,9 +239,8 @@ var GeoJsonLayer = /*#__PURE__*/function (_Layer) {
|
|
|
260
239
|
key: "calculateDataAttribute",
|
|
261
240
|
value: function calculateDataAttribute(_ref2, getPosition) {
|
|
262
241
|
var _this2 = this;
|
|
263
|
-
|
|
264
242
|
var dataContainer = _ref2.dataContainer,
|
|
265
|
-
|
|
243
|
+
filteredIndex = _ref2.filteredIndex;
|
|
266
244
|
return filteredIndex.map(function (i) {
|
|
267
245
|
return _this2.dataToFeature[i];
|
|
268
246
|
}).filter(function (d) {
|
|
@@ -273,20 +251,16 @@ var GeoJsonLayer = /*#__PURE__*/function (_Layer) {
|
|
|
273
251
|
key: "formatLayerData",
|
|
274
252
|
value: function formatLayerData(datasets, oldLayerData) {
|
|
275
253
|
var _datasets$this$config = datasets[this.config.dataId],
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
254
|
+
gpuFilter = _datasets$this$config.gpuFilter,
|
|
255
|
+
dataContainer = _datasets$this$config.dataContainer;
|
|
279
256
|
var _this$updateData = this.updateData(datasets, oldLayerData),
|
|
280
|
-
|
|
281
|
-
|
|
257
|
+
data = _this$updateData.data;
|
|
282
258
|
var customFilterValueAccessor = function customFilterValueAccessor(dc, d, fieldIndex) {
|
|
283
259
|
return dc.valueAt(d.properties.index, fieldIndex);
|
|
284
260
|
};
|
|
285
|
-
|
|
286
261
|
var indexAccessor = function indexAccessor(f) {
|
|
287
262
|
return f.properties.index;
|
|
288
263
|
};
|
|
289
|
-
|
|
290
264
|
var dataAccessor = function dataAccessor(dc) {
|
|
291
265
|
return function (d) {
|
|
292
266
|
return {
|
|
@@ -294,7 +268,6 @@ var GeoJsonLayer = /*#__PURE__*/function (_Layer) {
|
|
|
294
268
|
};
|
|
295
269
|
};
|
|
296
270
|
};
|
|
297
|
-
|
|
298
271
|
var accessors = this.getAttributeAccessors({
|
|
299
272
|
dataAccessor: dataAccessor,
|
|
300
273
|
dataContainer: dataContainer
|
|
@@ -308,10 +281,12 @@ var GeoJsonLayer = /*#__PURE__*/function (_Layer) {
|
|
|
308
281
|
key: "updateLayerMeta",
|
|
309
282
|
value: function updateLayerMeta(dataContainer) {
|
|
310
283
|
var getFeature = this.getPositionAccessor(dataContainer);
|
|
311
|
-
this.dataToFeature = (0, _geojsonUtils.getGeojsonDataMaps)(dataContainer, getFeature);
|
|
284
|
+
this.dataToFeature = (0, _geojsonUtils.getGeojsonDataMaps)(dataContainer, getFeature);
|
|
312
285
|
|
|
313
|
-
|
|
286
|
+
// get bounds from features
|
|
287
|
+
var bounds = (0, _geojsonUtils.getGeojsonBounds)(this.dataToFeature);
|
|
314
288
|
|
|
289
|
+
// keep a record of what type of geometry the collection has
|
|
315
290
|
var featureTypes = (0, _geojsonUtils.getGeojsonFeatureTypes)(this.dataToFeature);
|
|
316
291
|
this.updateMeta({
|
|
317
292
|
bounds: bounds,
|
|
@@ -323,8 +298,8 @@ var GeoJsonLayer = /*#__PURE__*/function (_Layer) {
|
|
|
323
298
|
value: function setInitialLayerConfig(_ref3) {
|
|
324
299
|
var dataContainer = _ref3.dataContainer;
|
|
325
300
|
this.updateLayerMeta(dataContainer);
|
|
326
|
-
var featureTypes = this.meta.featureTypes;
|
|
327
|
-
|
|
301
|
+
var featureTypes = this.meta.featureTypes;
|
|
302
|
+
// default settings is stroke: true, filled: false
|
|
328
303
|
if (featureTypes && featureTypes.polygon) {
|
|
329
304
|
// set both fill and stroke to true
|
|
330
305
|
return this.updateLayerVisConfig({
|
|
@@ -339,15 +314,14 @@ var GeoJsonLayer = /*#__PURE__*/function (_Layer) {
|
|
|
339
314
|
stroked: false
|
|
340
315
|
});
|
|
341
316
|
}
|
|
342
|
-
|
|
343
317
|
return this;
|
|
344
318
|
}
|
|
345
319
|
}, {
|
|
346
320
|
key: "renderLayer",
|
|
347
321
|
value: function renderLayer(opts) {
|
|
348
322
|
var data = opts.data,
|
|
349
|
-
|
|
350
|
-
|
|
323
|
+
gpuFilter = opts.gpuFilter,
|
|
324
|
+
objectHovered = opts.objectHovered;
|
|
351
325
|
var featureTypes = this.meta.featureTypes;
|
|
352
326
|
var radiusScale = this.getRadiusScale();
|
|
353
327
|
var visConfig = this.config.visConfig;
|
|
@@ -357,11 +331,9 @@ var GeoJsonLayer = /*#__PURE__*/function (_Layer) {
|
|
|
357
331
|
pointRadiusScale: radiusScale,
|
|
358
332
|
lineMiterLimit: 4
|
|
359
333
|
};
|
|
360
|
-
|
|
361
334
|
var updateTriggers = _objectSpread(_objectSpread({}, this.getVisualChannelUpdateTriggers()), {}, {
|
|
362
335
|
getFilterValue: gpuFilter.filterValueUpdateTriggers
|
|
363
336
|
});
|
|
364
|
-
|
|
365
337
|
var defaultLayerProps = this.getDefaultDeckLayerProps(opts);
|
|
366
338
|
var opaOverwrite = {
|
|
367
339
|
opacity: visConfig.strokeOpacity
|
|
@@ -408,26 +380,23 @@ var GeoJsonLayer = /*#__PURE__*/function (_Layer) {
|
|
|
408
380
|
key: "findDefaultLayerProps",
|
|
409
381
|
value: function findDefaultLayerProps(_ref4) {
|
|
410
382
|
var _this3 = this;
|
|
411
|
-
|
|
412
383
|
var label = _ref4.label,
|
|
413
|
-
|
|
414
|
-
|
|
384
|
+
_ref4$fields = _ref4.fields,
|
|
385
|
+
fields = _ref4$fields === void 0 ? [] : _ref4$fields;
|
|
415
386
|
var geojsonColumns = fields.filter(function (f) {
|
|
416
387
|
return f.type === 'geojson' && SUPPORTED_ANALYZER_TYPES[f.analyzerType];
|
|
417
388
|
}).map(function (f) {
|
|
418
389
|
return f.name;
|
|
419
390
|
});
|
|
420
391
|
var defaultColumns = {
|
|
421
|
-
geojson: (0,
|
|
392
|
+
geojson: (0, _uniq["default"])([].concat((0, _toConsumableArray2["default"])(_defaultSettings.GEOJSON_FIELDS.geojson), (0, _toConsumableArray2["default"])(geojsonColumns)))
|
|
422
393
|
};
|
|
423
394
|
var foundColumns = this.findDefaultColumnField(defaultColumns, fields);
|
|
424
|
-
|
|
425
395
|
if (!foundColumns || !foundColumns.length) {
|
|
426
396
|
return {
|
|
427
397
|
props: []
|
|
428
398
|
};
|
|
429
399
|
}
|
|
430
|
-
|
|
431
400
|
return {
|
|
432
401
|
props: foundColumns.map(function (columns) {
|
|
433
402
|
return {
|
|
@@ -441,6 +410,4 @@ var GeoJsonLayer = /*#__PURE__*/function (_Layer) {
|
|
|
441
410
|
}]);
|
|
442
411
|
return GeoJsonLayer;
|
|
443
412
|
}(_baseLayer["default"]);
|
|
444
|
-
|
|
445
|
-
exports["default"] = GeoJsonLayer;
|
|
446
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9sYXllcnMvZ2VvanNvbi1sYXllci9nZW9qc29uLWxheWVyLmpzIl0sIm5hbWVzIjpbIlNVUFBPUlRFRF9BTkFMWVpFUl9UWVBFUyIsIkRBVEFfVFlQRVMiLCJHRU9NRVRSWSIsIkdFT01FVFJZX0ZST01fU1RSSU5HIiwiZ2VvanNvblZpc0NvbmZpZ3MiLCJvcGFjaXR5Iiwic3Ryb2tlT3BhY2l0eSIsIkxBWUVSX1ZJU19DT05GSUdTIiwicHJvcGVydHkiLCJ0aGlja25lc3MiLCJkZWZhdWx0VmFsdWUiLCJzdHJva2VDb2xvciIsImNvbG9yUmFuZ2UiLCJzdHJva2VDb2xvclJhbmdlIiwicmFkaXVzIiwic2l6ZVJhbmdlIiwicmFkaXVzUmFuZ2UiLCJoZWlnaHRSYW5nZSIsImVsZXZhdGlvblNjYWxlIiwiZW5hYmxlRWxldmF0aW9uWm9vbUZhY3RvciIsInN0cm9rZWQiLCJmaWxsZWQiLCJlbmFibGUzZCIsIndpcmVmcmFtZSIsImdlb0pzb25SZXF1aXJlZENvbHVtbnMiLCJmZWF0dXJlQWNjZXNzb3IiLCJnZW9qc29uIiwiZGMiLCJkIiwidmFsdWVBdCIsImluZGV4IiwiZmllbGRJZHgiLCJkZWZhdWx0RWxldmF0aW9uIiwiZGVmYXVsdExpbmVXaWR0aCIsImRlZmF1bHRSYWRpdXMiLCJHZW9Kc29uTGF5ZXIiLCJwcm9wcyIsImRhdGFUb0ZlYXR1cmUiLCJyZWdpc3RlclZpc0NvbmZpZyIsImdldFBvc2l0aW9uQWNjZXNzb3IiLCJkYXRhQ29udGFpbmVyIiwiY29uZmlnIiwiY29sdW1ucyIsIkdlb2pzb25MYXllckljb24iLCJ2aXN1YWxDaGFubmVscyIsImNvbG9yIiwiYWNjZXNzb3IiLCJjb25kaXRpb24iLCJ2aXNDb25maWciLCJudWxsVmFsdWUiLCJnZXRBdHRyaWJ1dGVWYWx1ZSIsInByb3BlcnRpZXMiLCJmaWxsQ29sb3IiLCJmaWVsZCIsInNjYWxlIiwiZG9tYWluIiwicmFuZ2UiLCJrZXkiLCJjaGFubmVsU2NhbGVUeXBlIiwiQ0hBTk5FTF9TQ0FMRVMiLCJsaW5lQ29sb3IiLCJzaXplIiwibGluZVdpZHRoIiwiaGVpZ2h0IiwiZWxldmF0aW9uIiwiaGVpZ2h0RmllbGQiLCJoZWlnaHREb21haW4iLCJoZWlnaHRTY2FsZSIsInJhZGl1c0ZpZWxkIiwicmFkaXVzRG9tYWluIiwicmFkaXVzU2NhbGUiLCJzdHJva2VDb2xvckZpZWxkIiwic3Ryb2tlQ29sb3JEb21haW4iLCJzdHJva2VDb2xvclNjYWxlIiwib2JqZWN0Iiwicm93IiwiZ2V0UG9zaXRpb24iLCJmaWx0ZXJlZEluZGV4IiwibWFwIiwiaSIsImZpbHRlciIsImRhdGFzZXRzIiwib2xkTGF5ZXJEYXRhIiwiZGF0YUlkIiwiZ3B1RmlsdGVyIiwidXBkYXRlRGF0YSIsImRhdGEiLCJjdXN0b21GaWx0ZXJWYWx1ZUFjY2Vzc29yIiwiZmllbGRJbmRleCIsImluZGV4QWNjZXNzb3IiLCJmIiwiZGF0YUFjY2Vzc29yIiwiYWNjZXNzb3JzIiwiZ2V0QXR0cmlidXRlQWNjZXNzb3JzIiwiZ2V0RmlsdGVyVmFsdWUiLCJmaWx0ZXJWYWx1ZUFjY2Vzc29yIiwiZ2V0RmVhdHVyZSIsImJvdW5kcyIsImZlYXR1cmVUeXBlcyIsInVwZGF0ZU1ldGEiLCJ1cGRhdGVMYXllck1ldGEiLCJtZXRhIiwicG9seWdvbiIsInVwZGF0ZUxheWVyVmlzQ29uZmlnIiwiY29sb3JNYWtlciIsIm5leHQiLCJ2YWx1ZSIsInBvaW50Iiwib3B0cyIsIm9iamVjdEhvdmVyZWQiLCJnZXRSYWRpdXNTY2FsZSIsImxheWVyUHJvcHMiLCJsaW5lV2lkdGhTY2FsZSIsInBvaW50UmFkaXVzU2NhbGUiLCJsaW5lTWl0ZXJMaW1pdCIsInVwZGF0ZVRyaWdnZXJzIiwiZ2V0VmlzdWFsQ2hhbm5lbFVwZGF0ZVRyaWdnZXJzIiwiZmlsdGVyVmFsdWVVcGRhdGVUcmlnZ2VycyIsImRlZmF1bHRMYXllclByb3BzIiwiZ2V0RGVmYXVsdERlY2tMYXllclByb3BzIiwib3BhT3ZlcndyaXRlIiwicGlja2FibGUiLCJoYXNJbnRlcmFjdGl2aXR5IiwiaG92ZXJlZE9iamVjdCIsImhhc0hvdmVyZWRPYmplY3QiLCJEZWNrR0xHZW9Kc29uTGF5ZXIiLCJoaWdobGlnaHRDb2xvciIsIkhJR0hMSUdIX0NPTE9SXzNEIiwiYXV0b0hpZ2hsaWdodCIsImV4dHJ1ZGVkIiwid3JhcExvbmdpdHVkZSIsInJvdW5kZWQiLCJyYWRpdXNVbml0cyIsImxpbmVXaWR0aFVuaXRzIiwiX3N1YkxheWVyUHJvcHMiLCJsaW5lIiwibGluZXN0cmluZ3MiLCJwb2ludHMiLCJsaW5lT3BhY2l0eSIsImdldERlZmF1bHRIb3ZlckxheWVyUHJvcHMiLCJnZXRMaW5lV2lkdGgiLCJnZXRSYWRpdXMiLCJnZXRFbGV2YXRpb24iLCJnZXRMaW5lQ29sb3IiLCJnZXRGaWxsQ29sb3IiLCJsYWJlbCIsImZpZWxkcyIsImdlb2pzb25Db2x1bW5zIiwidHlwZSIsImFuYWx5emVyVHlwZSIsIm5hbWUiLCJkZWZhdWx0Q29sdW1ucyIsIkdFT0pTT05fRklFTERTIiwiZm91bmRDb2x1bW5zIiwiZmluZERlZmF1bHRDb2x1bW5GaWVsZCIsImxlbmd0aCIsInJlcGxhY2UiLCJpc1Zpc2libGUiLCJMYXllciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7QUFFQSxJQUFNQSx3QkFBd0Isd0ZBQzNCQyx5QkFBV0MsUUFEZ0IsRUFDTCxJQURLLDJEQUUzQkQseUJBQVdFLG9CQUZnQixFQUVPLElBRlAseUJBQTlCO0FBS08sSUFBTUMsaUJBQWlCLEdBQUc7QUFDL0JDLEVBQUFBLE9BQU8sRUFBRSxTQURzQjtBQUUvQkMsRUFBQUEsYUFBYSxrQ0FDUkMsZ0NBQWtCRixPQURWO0FBRVhHLElBQUFBLFFBQVEsRUFBRTtBQUZDLElBRmtCO0FBTS9CQyxFQUFBQSxTQUFTLGtDQUNKRixnQ0FBa0JFLFNBRGQ7QUFFUEMsSUFBQUEsWUFBWSxFQUFF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M0M7QUFFbEMxRyxZQUFBQSxPQUFPLEVBQVBBLE9BRmtDO0FBR2xDbUgsWUFBQUEsU0FBUyxFQUFFO0FBSHVCLFdBQUw7QUFBQSxTQUF4QjtBQURGLE9BQVA7QUFPRDs7O0VBOUd1Q0MscUIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjIgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgdW5pcSBmcm9tICdsb2Rhc2gudW5pcSc7XG5pbXBvcnQge0RBVEFfVFlQRVN9IGZyb20gJ3R5cGUtYW5hbHl6ZXInO1xuXG5pbXBvcnQgTGF5ZXIsIHtjb2xvck1ha2VyfSBmcm9tICcuLi9iYXNlLWxheWVyJztcbmltcG9ydCB7R2VvSnNvbkxheWVyIGFzIERlY2tHTEdlb0pzb25MYXllcn0gZnJvbSAnQGRlY2suZ2wvbGF5ZXJzJztcbmltcG9ydCB7Z2V0R2VvanNvbkRhdGFNYXBzLCBnZXRHZW9qc29uQm91bmRzLCBnZXRHZW9qc29uRmVhdHVyZVR5cGVzfSBmcm9tICcuL2dlb2pzb24tdXRpbHMnO1xuaW1wb3J0IEdlb2pzb25MYXllckljb24gZnJvbSAnLi9nZW9qc29uLWxheWVyLWljb24nO1xuaW1wb3J0IHtHRU9KU09OX0ZJRUxEUywgSElHSExJR0hfQ09MT1JfM0QsIENIQU5ORUxfU0NBTEVTfSBmcm9tICdjb25zdGFudHMvZGVmYXVsdC1zZXR0aW5ncyc7XG5pbXBvcnQge0xBWUVSX1ZJU19DT05GSUdTfSBmcm9tICdsYXllcnMvbGF5ZXItZmFjdG9yeSc7XG5cbmNvbnN0IFNVUFBPUlRFRF9BTkFMWVpFUl9UWVBFUyA9IHtcbiAgW0RBVEFfVFlQRVMuR0VPTUVUUlldOiB0cnVlLFxuICBbREFUQV9UWVBFUy5HRU9NRVRSWV9GUk9NX1NUUklOR106IHRydWVcbn07XG5cbmV4cG9ydCBjb25zdCBnZW9qc29uVmlzQ29uZmlncyA9IHtcbiAgb3BhY2l0eTogJ29wYWNpdHknLFxuICBzdHJva2VPcGFjaXR5OiB7XG4gICAgLi4uTEFZRVJfVklTX0NPTkZJR1Mub3BhY2l0eSxcbiAgICBwcm9wZXJ0eTogJ3N0cm9rZU9wYWNpdHknXG4gIH0sXG4gIHRoaWNrbmVzczoge1xuICAgIC4uLkxBWUVSX1ZJU19DT05GSUdTLnRoaWNrbmVzcyxcbiAgICBkZWZhdWx0VmFsdWU6IDFcbiAgfSxcbiAgc3Ryb2tlQ29sb3I6ICdzdHJva2VDb2xvcicsXG4gIGNvbG9yUmFuZ2U6ICdjb2xvclJhbmdlJyxcbiAgc3Ryb2tlQ29sb3JSYW5nZTogJ3N0cm9rZUNvbG9yUmFuZ2UnLFxuICByYWRpdXM6ICdyYWRpdXMnLFxuXG4gIHNpemVSYW5nZTogJ3N0cm9rZVdpZHRoUmFuZ2UnLFxuICByYWRpdXNSYW5nZTogJ3JhZGl1c1JhbmdlJyxcbiAgaGVpZ2h0UmFuZ2U6ICdlbGV2YXRpb25SYW5nZScsXG4gIGVsZXZhdGlvblNjYWxlOiAnZWxldmF0aW9uU2NhbGUnLFxuICBlbmFibGVFbGV2YXRpb25ab29tRmFjdG9yOiAnZW5hYmxlRWxldmF0aW9uWm9vbUZhY3RvcicsXG4gIHN0cm9rZWQ6ICdzdHJva2VkJyxcbiAgZmlsbGVkOiAnZmlsbGVkJyxcbiAgZW5hYmxlM2Q6ICdlbmFibGUzZCcsXG4gIHdpcmVmcmFtZTogJ3dpcmVmcmFtZSdcbn07XG5cbmV4cG9ydCBjb25zdCBnZW9Kc29uUmVxdWlyZWRDb2x1bW5zID0gWydnZW9qc29uJ107XG5leHBvcnQgY29uc3QgZmVhdHVyZUFjY2Vzc29yID0gKHtnZW9qc29ufSkgPT4gZGMgPT4gZCA9PiBkYy52YWx1ZUF0KGQuaW5kZXgsIGdlb2pzb24uZmllbGRJZHgpO1xuXG4vLyBhY2Nlc3MgZmVhdHVyZSBwcm9wZXJ0aWVzIGZyb20gZ2VvanNvbiBzdWIgbGF5ZXJcbmV4cG9ydCBjb25zdCBkZWZhdWx0RWxldmF0aW9uID0gNTAwO1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRMaW5lV2lkdGggPSAxO1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRSYWRpdXMgPSAxO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHZW9Kc29uTGF5ZXIgZXh0ZW5kcyBMYXllciB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5kYXRhVG9GZWF0dXJlID0gW107XG4gICAgdGhpcy5yZWdpc3RlclZpc0NvbmZpZyhnZW9qc29uVmlzQ29uZmlncyk7XG4gICAgdGhpcy5nZXRQb3NpdGlvbkFjY2Vzc29yID0gZGF0YUNvbnRhaW5lciA9PiBmZWF0dXJlQWNjZXNzb3IodGhpcy5jb25maWcuY29sdW1ucykoZGF0YUNvbnRhaW5lcik7XG4gIH1cblxuICBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gJ2dlb2pzb24nO1xuICB9XG5cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuICdQb2x5Z29uJztcbiAgfVxuXG4gIGdldCBsYXllckljb24oKSB7XG4gICAgcmV0dXJuIEdlb2pzb25MYXllckljb247XG4gIH1cblxuICBnZXQgcmVxdWlyZWRMYXllckNvbHVtbnMoKSB7XG4gICAgcmV0dXJuIGdlb0pzb25SZXF1aXJlZENvbHVtbnM7XG4gIH1cblxuICBnZXQgdmlzdWFsQ2hhbm5lbHMoKSB7XG4gICAgY29uc3QgdmlzdWFsQ2hhbm5lbHMgPSBzdXBlci52aXN1YWxDaGFubmVscztcbiAgICByZXR1cm4ge1xuICAgICAgY29sb3I6IHtcbiAgICAgICAgLi4udmlzdWFsQ2hhbm5lbHMuY29sb3IsXG4gICAgICAgIGFjY2Vzc29yOiAnZ2V0RmlsbENvbG9yJyxcbiAgICAgICAgY29uZGl0aW9uOiBjb25maWcgPT4gY29uZmlnLnZpc0NvbmZpZy5maWxsZWQsXG4gICAgICAgIG51bGxWYWx1ZTogdmlzdWFsQ2hhbm5lbHMuY29sb3IubnVsbFZhbHVlLFxuICAgICAgICBnZXRBdHRyaWJ1dGVWYWx1ZTogY29uZmlnID0+IGQgPT4gZC5wcm9wZXJ0aWVzLmZpbGxDb2xvciB8fCBjb25maWcuY29sb3IsXG4gICAgICAgIC8vIHVzZWQgdGhpcyB0byBnZXQgdXBkYXRlVHJpZ2dlcnNcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBjb25maWcgPT4gY29uZmlnLmNvbG9yXG4gICAgICB9LFxuICAgICAgc3Ryb2tlQ29sb3I6IHtcbiAgICAgICAgcHJvcGVydHk6ICdzdHJva2VDb2xvcicsXG4gICAgICAgIGZpZWxkOiAnc3Ryb2tlQ29sb3JGaWVsZCcsXG4gICAgICAgIHNjYWxlOiAnc3Ryb2tlQ29sb3JTY2FsZScsXG4gICAgICAgIGRvbWFpbjogJ3N0cm9rZUNvbG9yRG9tYWluJyxcbiAgICAgICAgcmFuZ2U6ICdzdHJva2VDb2xvclJhbmdlJyxcbiAgICAgICAga2V5OiAnc3Ryb2tlQ29sb3InLFxuICAgICAgICBjaGFubmVsU2NhbGVUeXBlOiBDSEFOTkVMX1NDQUxFUy5jb2xvcixcbiAgICAgICAgYWNjZXNzb3I6ICdnZXRMaW5lQ29sb3InLFxuICAgICAgICBjb25kaXRpb246IGNvbmZpZyA9PiBjb25maWcudmlzQ29uZmlnLnN0cm9rZWQsXG4gICAgICAgIG51bGxWYWx1ZTogdmlzdWFsQ2hhbm5lbHMuY29sb3IubnVsbFZhbHVlLFxuICAgICAgICBnZXRBdHRyaWJ1dGVWYWx1ZTogY29uZmlnID0+IGQgPT5cbiAgICAgICAgICBkLnByb3BlcnRpZXMubGluZUNvbG9yIHx8IGNvbmZpZy52aXNDb25maWcuc3Ryb2tlQ29sb3IgfHwgY29uZmlnLmNvbG9yLFxuICAgICAgICAvLyB1c2VkIHRoaXMgdG8gZ2V0IHVwZGF0ZVRyaWdnZXJzXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogY29uZmlnID0+IGNvbmZpZy52aXNDb25maWcuc3Ryb2tlQ29sb3IgfHwgY29uZmlnLmNvbG9yXG4gICAgICB9LFxuICAgICAgc2l6ZToge1xuICAgICAgICAuLi52aXN1YWxDaGFubmVscy5zaXplLFxuICAgICAgICBwcm9wZXJ0eTogJ3N0cm9rZScsXG4gICAgICAgIGFjY2Vzc29yOiAnZ2V0TGluZVdpZHRoJyxcbiAgICAgICAgY29uZGl0aW9uOiBjb25maWcgPT4gY29uZmlnLnZpc0NvbmZpZy5zdHJva2VkLFxuICAgICAgICBudWxsVmFsdWU6IDAsXG4gICAgICAgIGdldEF0dHJpYnV0ZVZhbHVlOiAoKSA9PiBkID0+IGQucHJvcGVydGllcy5saW5lV2lkdGggfHwgZGVmYXVsdExpbmVXaWR0aFxuICAgICAgfSxcbiAgICAgIGhlaWdodDoge1xuICAgICAgICBwcm9wZXJ0eTogJ2hlaWdodCcsXG4gICAgICAgIGZpZWxkOiAnaGVpZ2h0RmllbGQnLFxuICAgICAgICBzY2FsZTogJ2hlaWdodFNjYWxlJyxcbiAgICAgICAgZG9tYWluOiAnaGVpZ2h0RG9tYWluJyxcbiAgICAgICAgcmFuZ2U6ICdoZWlnaHRSYW5nZScsXG4gICAgICAgIGtleTogJ2hlaWdodCcsXG4gICAgICAgIGNoYW5uZWxTY2FsZVR5cGU6IENIQU5ORUxfU0NBTEVTLnNpemUsXG4gICAgICAgIGFjY2Vzc29yOiAnZ2V0RWxldmF0aW9uJyxcbiAgICAgICAgY29uZGl0aW9uOiBjb25maWcgPT4gY29uZmlnLnZpc0NvbmZpZy5lbmFibGUzZCxcbiAgICAgICAgbnVsbFZhbHVlOiAwLFxuICAgICAgICBnZXRBdHRyaWJ1dGVWYWx1ZTogKCkgPT4gZCA9PiBkLnByb3BlcnRpZXMuZWxldmF0aW9uIHx8IGRlZmF1bHRFbGV2YXRpb25cbiAgICAgIH0sXG4gICAgICByYWRpdXM6IHtcbiAgICAgICAgcHJvcGVydHk6ICdyYWRpdXMnLFxuICAgICAgICBmaWVsZDogJ3JhZGl1c0ZpZWxkJyxcbiAgICAgICAgc2NhbGU6ICdyYWRpdXNTY2FsZScsXG4gICAgICAgIGRvbWFpbjogJ3JhZGl1c0RvbWFpbicsXG4gICAgICAgIHJhbmdlOiAncmFkaXVzUmFuZ2UnLFxuICAgICAgICBrZXk6ICdyYWRpdXMnLFxuICAgICAgICBjaGFubmVsU2NhbGVUeXBlOiBDSEFOTkVMX1NDQUxFUy5yYWRpdXMsXG4gICAgICAgIGFjY2Vzc29yOiAnZ2V0UmFkaXVzJyxcbiAgICAgICAgbnVsbFZhbHVlOiAwLFxuICAgICAgICBnZXRBdHRyaWJ1dGVWYWx1ZTogKCkgPT4gZCA9PiBkLnByb3BlcnRpZXMucmFkaXVzIHx8IGRlZmF1bHRSYWRpdXNcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGZpbmREZWZhdWx0TGF5ZXJQcm9wcyh7bGFiZWwsIGZpZWxkcyA9IFtdfSkge1xuICAgIGNvbnN0IGdlb2pzb25Db2x1bW5zID0gZmllbGRzXG4gICAgICAuZmlsdGVyKGYgPT4gZi50eXBlID09PSAnZ2VvanNvbicgJiYgU1VQUE9SVEVEX0FOQUxZWkVSX1RZUEVTW2YuYW5hbHl6ZXJUeXBlXSlcbiAgICAgIC5tYXAoZiA9PiBmLm5hbWUpO1xuXG4gICAgY29uc3QgZGVmYXVsdENvbHVtbnMgPSB7XG4gICAgICBnZW9qc29uOiB1bmlxKFsuLi5HRU9KU09OX0ZJRUxEUy5nZW9qc29uLCAuLi5nZW9qc29uQ29sdW1uc10pXG4gICAgfTtcblxuICAgIGNvbnN0IGZvdW5kQ29sdW1ucyA9IHRoaXMuZmluZERlZmF1bHRDb2x1bW5GaWVsZChkZWZhdWx0Q29sdW1ucywgZmllbGRzKTtcbiAgICBpZiAoIWZvdW5kQ29sdW1ucyB8fCAhZm91bmRDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHtwcm9wczogW119O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBwcm9wczogZm91bmRDb2x1bW5zLm1hcChjb2x1bW5zID0+ICh7XG4gICAgICAgIGxhYmVsOiAodHlwZW9mIGxhYmVsID09PSAnc3RyaW5nJyAmJiBsYWJlbC5yZXBsYWNlKC9cXC5bXi8uXSskLywgJycpKSB8fCB0aGlzLnR5cGUsXG4gICAgICAgIGNvbHVtbnMsXG4gICAgICAgIGlzVmlzaWJsZTogdHJ1ZVxuICAgICAgfSkpXG4gICAgfTtcbiAgfVxuXG4gIGdldERlZmF1bHRMYXllckNvbmZpZyhwcm9wcyA9IHt9KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN1cGVyLmdldERlZmF1bHRMYXllckNvbmZpZyhwcm9wcyksXG5cbiAgICAgIC8vIGFkZCBoZWlnaHQgdmlzdWFsIGNoYW5uZWxcbiAgICAgIGhlaWdodEZpZWxkOiBudWxsLFxuICAgICAgaGVpZ2h0RG9tYWluOiBbMCwgMV0sXG4gICAgICBoZWlnaHRTY2FsZTogJ2xpbmVhcicsXG5cbiAgICAgIC8vIGFkZCByYWRpdXMgdmlzdWFsIGNoYW5uZWxcbiAgICAgIHJhZGl1c0ZpZWxkOiBudWxsLFxuICAgICAgcmFkaXVzRG9tYWluOiBbMCwgMV0sXG4gICAgICByYWRpdXNTY2FsZTogJ2xpbmVhcicsXG5cbiAgICAgIC8vIGFkZCBzdHJva2UgY29sb3IgdmlzdWFsIGNoYW5uZWxcbiAgICAgIHN0cm9rZUNvbG9yRmllbGQ6IG51bGwsXG4gICAgICBzdHJva2VDb2xvckRvbWFpbjogWzAsIDFdLFxuICAgICAgc3Ryb2tlQ29sb3JTY2FsZTogJ3F1YW50aWxlJ1xuICAgIH07XG4gIH1cblxuICBnZXRIb3ZlckRhdGEob2JqZWN0LCBkYXRhQ29udGFpbmVyKSB7XG4gICAgLy8gaW5kZXggb2YgZGF0YUNvbnRhaW5lciBpcyBzYXZlZCB0byBmZWF0dXJlLnByb3BlcnRpZXNcbiAgICByZXR1cm4gZGF0YUNvbnRhaW5lci5yb3cob2JqZWN0LnByb3BlcnRpZXMuaW5kZXgpO1xuICB9XG5cbiAgY2FsY3VsYXRlRGF0YUF0dHJpYnV0ZSh7ZGF0YUNvbnRhaW5lciwgZmlsdGVyZWRJbmRleH0sIGdldFBvc2l0aW9uKSB7XG4gICAgcmV0dXJuIGZpbHRlcmVkSW5kZXgubWFwKGkgPT4gdGhpcy5kYXRhVG9GZWF0dXJlW2ldKS5maWx0ZXIoZCA9PiBkKTtcbiAgfVxuXG4gIGZvcm1hdExheWVyRGF0YShkYXRhc2V0cywgb2xkTGF5ZXJEYXRhKSB7XG4gICAgY29uc3Qge2dwdUZpbHRlciwgZGF0YUNvbnRhaW5lcn0gPSBkYXRhc2V0c1t0aGlzLmNvbmZpZy5kYXRhSWRdO1xuICAgIGNvbnN0IHtkYXRhfSA9IHRoaXMudXBkYXRlRGF0YShkYXRhc2V0cywgb2xkTGF5ZXJEYXRhKTtcblxuICAgIGNvbnN0IGN1c3RvbUZpbHRlclZhbHVlQWNjZXNzb3IgPSAoZGMsIGQsIGZpZWxkSW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBkYy52YWx1ZUF0KGQucHJvcGVydGllcy5pbmRleCwgZmllbGRJbmRleCk7XG4gICAgfTtcbiAgICBjb25zdCBpbmRleEFjY2Vzc29yID0gZiA9PiBmLnByb3BlcnRpZXMuaW5kZXg7XG5cbiAgICBjb25zdCBkYXRhQWNjZXNzb3IgPSBkYyA9PiBkID0+ICh7aW5kZXg6IGQucHJvcGVydGllcy5pbmRleH0pO1xuICAgIGNvbnN0IGFjY2Vzc29ycyA9IHRoaXMuZ2V0QXR0cmlidXRlQWNjZXNzb3JzKHtkYXRhQWNjZXNzb3IsIGRhdGFDb250YWluZXJ9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBkYXRhLFxuICAgICAgZ2V0RmlsdGVyVmFsdWU6IGdwdUZpbHRlci5maWx0ZXJWYWx1ZUFjY2Vzc29yKGRhdGFDb250YWluZXIpKFxuICAgICAgICBpbmRleEFjY2Vzc29yLFxuICAgICAgICBjdXN0b21GaWx0ZXJWYWx1ZUFjY2Vzc29yXG4gICAgICApLFxuICAgICAgLi4uYWNjZXNzb3JzXG4gICAgfTtcbiAgfVxuXG4gIHVwZGF0ZUxheWVyTWV0YShkYXRhQ29udGFpbmVyKSB7XG4gICAgY29uc3QgZ2V0RmVhdHVyZSA9IHRoaXMuZ2V0UG9zaXRpb25BY2Nlc3NvcihkYXRhQ29udGFpbmVyKTtcbiAgICB0aGlzLmRhdGFUb0ZlYXR1cmUgPSBnZXRHZW9qc29uRGF0YU1hcHMoZGF0YUNvbnRhaW5lciwgZ2V0RmVhdHVyZSk7XG5cbiAgICAvLyBnZXQgYm91bmRzIGZyb20gZmVhdHVyZXNcbiAgICBjb25zdCBib3VuZHMgPSBnZXRHZW9qc29uQm91bmRzKHRoaXMuZGF0YVRvRmVhdHVyZSk7XG5cbiAgICAvLyBrZWVwIGEgcmVjb3JkIG9mIHdoYXQgdHlwZSBvZiBnZW9tZXRyeSB0aGUgY29sbGVjdGlvbiBoYXNcbiAgICBjb25zdCBmZWF0dXJlVHlwZXMgPSBnZXRHZW9qc29uRmVhdHVyZVR5cGVzKHRoaXMuZGF0YVRvRmVhdHVyZSk7XG5cbiAgICB0aGlzLnVwZGF0ZU1ldGEoe2JvdW5kcywgZmVhdHVyZVR5cGVzfSk7XG4gIH1cblxuICBzZXRJbml0aWFsTGF5ZXJDb25maWcoe2RhdGFDb250YWluZXJ9KSB7XG4gICAgdGhpcy51cGRhdGVMYXllck1ldGEoZGF0YUNvbnRhaW5lcik7XG5cbiAgICBjb25zdCB7ZmVhdHVyZVR5cGVzfSA9IHRoaXMubWV0YTtcbiAgICAvLyBkZWZhdWx0IHNldHRpbmdzIGlzIHN0cm9rZTogdHJ1ZSwgZmlsbGVkOiBmYWxzZVxuICAgIGlmIChmZWF0dXJlVHlwZXMgJiYgZmVhdHVyZVR5cGVzLnBvbHlnb24pIHtcbiAgICAgIC8vIHNldCBib3RoIGZpbGwgYW5kIHN0cm9rZSB0byB0cnVlXG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVMYXllclZpc0NvbmZpZyh7XG4gICAgICAgIGZpbGxlZDogdHJ1ZSxcbiAgICAgICAgc3Ryb2tlZDogdHJ1ZSxcbiAgICAgICAgc3Ryb2tlQ29sb3I6IGNvbG9yTWFrZXIubmV4dCgpLnZhbHVlXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGZlYXR1cmVUeXBlcyAmJiBmZWF0dXJlVHlwZXMucG9pbnQpIHtcbiAgICAgIC8vIHNldCBmaWxsIHRvIHRydWUgaWYgZGV0ZWN0IHBvaW50XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVMYXllclZpc0NvbmZpZyh7ZmlsbGVkOiB0cnVlLCBzdHJva2VkOiBmYWxzZX0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcmVuZGVyTGF5ZXIob3B0cykge1xuICAgIGNvbnN0IHtkYXRhLCBncHVGaWx0ZXIsIG9iamVjdEhvdmVyZWR9ID0gb3B0cztcblxuICAgIGNvbnN0IHtmZWF0dXJlVHlwZXN9ID0gdGhpcy5tZXRhO1xuICAgIGNvbnN0IHJhZGl1c1NjYWxlID0gdGhpcy5nZXRSYWRpdXNTY2FsZSgpO1xuICAgIGNvbnN0IHt2aXNDb25maWd9ID0gdGhpcy5jb25maWc7XG5cbiAgICBjb25zdCBsYXllclByb3BzID0ge1xuICAgICAgbGluZVdpZHRoU2NhbGU6IHZpc0NvbmZpZy50aGlja25lc3MsXG4gICAgICBlbGV2YXRpb25TY2FsZTogdmlzQ29uZmlnLmVsZXZhdGlvblNjYWxlLFxuICAgICAgcG9pbnRSYWRpdXNTY2FsZTogcmFkaXVzU2NhbGUsXG4gICAgICBsaW5lTWl0ZXJMaW1pdDogNFxuICAgIH07XG5cbiAgICBjb25zdCB1cGRhdGVUcmlnZ2VycyA9IHtcbiAgICAgIC4uLnRoaXMuZ2V0VmlzdWFsQ2hhbm5lbFVwZGF0ZVRyaWdnZXJzKCksXG4gICAgICBnZXRGaWx0ZXJWYWx1ZTogZ3B1RmlsdGVyLmZpbHRlclZhbHVlVXBkYXRlVHJpZ2dlcnNcbiAgICB9O1xuXG4gICAgY29uc3QgZGVmYXVsdExheWVyUHJvcHMgPSB0aGlzLmdldERlZmF1bHREZWNrTGF5ZXJQcm9wcyhvcHRzKTtcbiAgICBjb25zdCBvcGFPdmVyd3JpdGUgPSB7XG4gICAgICBvcGFjaXR5OiB2aXNDb25maWcuc3Ryb2tlT3BhY2l0eVxuICAgIH07XG5cbiAgICBjb25zdCBwaWNrYWJsZSA9IHRoaXMuaGFzSW50ZXJhY3Rpdml0eTtcbiAgICBjb25zdCBob3ZlcmVkT2JqZWN0ID0gdGhpcy5oYXNIb3ZlcmVkT2JqZWN0KG9iamVjdEhvdmVyZWQpO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBEZWNrR0xHZW9Kc29uTGF5ZXIoe1xuICAgICAgICAuLi5kZWZhdWx0TGF5ZXJQcm9wcyxcbiAgICAgICAgLi4ubGF5ZXJQcm9wcyxcbiAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgcGlja2FibGUsXG4gICAgICAgIGhpZ2hsaWdodENvbG9yOiBISUdITElHSF9DT0xPUl8zRCxcbiAgICAgICAgYXV0b0hpZ2hsaWdodDogdmlzQ29uZmlnLmVuYWJsZTNkICYmIHBpY2thYmxlLFxuICAgICAgICBzdHJva2VkOiB2aXNDb25maWcuc3Ryb2tlZCxcbiAgICAgICAgZmlsbGVkOiB2aXNDb25maWcuZmlsbGVkLFxuICAgICAgICBleHRydWRlZDogdmlzQ29uZmlnLmVuYWJsZTNkLFxuICAgICAgICB3aXJlZnJhbWU6IHZpc0NvbmZpZy53aXJlZnJhbWUsXG4gICAgICAgIHdyYXBMb25naXR1ZGU6IGZhbHNlLFxuICAgICAgICBsaW5lTWl0ZXJMaW1pdDogMixcbiAgICAgICAgcm91bmRlZDogdHJ1ZSxcbiAgICAgICAgcmFkaXVzVW5pdHM6ICdwaXhlbHMnLFxuICAgICAgICBsaW5lV2lkdGhVbml0czogJ3BpeGVscycsXG4gICAgICAgIHVwZGF0ZVRyaWdnZXJzLFxuICAgICAgICBfc3ViTGF5ZXJQcm9wczoge1xuICAgICAgICAgIC4uLihmZWF0dXJlVHlwZXMucG9seWdvbiA/IHsncG9seWdvbnMtc3Ryb2tlJzogb3BhT3ZlcndyaXRlfSA6IHt9KSxcbiAgICAgICAgICAuLi4oZmVhdHVyZVR5cGVzLmxpbmUgPyB7bGluZXN0cmluZ3M6IG9wYU92ZXJ3cml0ZX0gOiB7fSksXG4gICAgICAgICAgLi4uKGZlYXR1cmVUeXBlcy5wb2ludFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgcG9pbnRzOiB7XG4gICAgICAgICAgICAgICAgICBsaW5lT3BhY2l0eTogdmlzQ29uZmlnLnN0cm9rZU9wYWNpdHlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge30pXG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgLi4uKGhvdmVyZWRPYmplY3QgJiYgIXZpc0NvbmZpZy5lbmFibGUzZFxuICAgICAgICA/IFtcbiAgICAgICAgICAgIG5ldyBEZWNrR0xHZW9Kc29uTGF5ZXIoe1xuICAgICAgICAgICAgICAuLi50aGlzLmdldERlZmF1bHRIb3ZlckxheWVyUHJvcHMoKSxcbiAgICAgICAgICAgICAgLi4ubGF5ZXJQcm9wcyxcbiAgICAgICAgICAgICAgd3JhcExvbmdpdHVkZTogZmFsc2UsXG4gICAgICAgICAgICAgIGRhdGE6IFtob3ZlcmVkT2JqZWN0XSxcbiAgICAgICAgICAgICAgZ2V0TGluZVdpZHRoOiBkYXRhLmdldExpbmVXaWR0aCxcbiAgICAgICAgICAgICAgZ2V0UmFkaXVzOiBkYXRhLmdldFJhZGl1cyxcbiAgICAgICAgICAgICAgZ2V0RWxldmF0aW9uOiBkYXRhLmdldEVsZXZhdGlvbixcbiAgICAgICAgICAgICAgZ2V0TGluZUNvbG9yOiB0aGlzLmNvbmZpZy5oaWdobGlnaHRDb2xvcixcbiAgICAgICAgICAgICAgZ2V0RmlsbENvbG9yOiB0aGlzLmNvbmZpZy5oaWdobGlnaHRDb2xvcixcbiAgICAgICAgICAgICAgLy8gYWx3YXlzIGRyYXcgb3V0bGluZVxuICAgICAgICAgICAgICBzdHJva2VkOiB0cnVlLFxuICAgICAgICAgICAgICBmaWxsZWQ6IGZhbHNlXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXSlcbiAgICBdO1xuICB9XG59XG4iXX0=
|
|
413
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdW5pcSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3R5cGVBbmFseXplciIsIl9iYXNlTGF5ZXIiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9sYXllcnMiLCJfZ2VvanNvblV0aWxzIiwiX2dlb2pzb25MYXllckljb24iLCJfZGVmYXVsdFNldHRpbmdzIiwiX2xheWVyRmFjdG9yeSIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIl9jYWxsU3VwZXIiLCJvIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJhcHBseSIsIkJvb2xlYW4iLCJ2YWx1ZU9mIiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiU1VQUE9SVEVEX0FOQUxZWkVSX1RZUEVTIiwiREFUQV9UWVBFUyIsIkdFT01FVFJZIiwiR0VPTUVUUllfRlJPTV9TVFJJTkciLCJnZW9qc29uVmlzQ29uZmlncyIsImV4cG9ydHMiLCJvcGFjaXR5Iiwic3Ryb2tlT3BhY2l0eSIsIkxBWUVSX1ZJU19DT05GSUdTIiwicHJvcGVydHkiLCJ0aGlja25lc3MiLCJkZWZhdWx0VmFsdWUiLCJzdHJva2VDb2xvciIsImNvbG9yUmFuZ2UiLCJzdHJva2VDb2xvclJhbmdlIiwicmFkaXVzIiwic2l6ZVJhbmdlIiwicmFkaXVzUmFuZ2UiLCJoZWlnaHRSYW5nZSIsImVsZXZhdGlvblNjYWxlIiwiZW5hYmxlRWxldmF0aW9uWm9vbUZhY3RvciIsInN0cm9rZWQiLCJmaWxsZWQiLCJlbmFibGUzZCIsIndpcmVmcmFtZSIsImdlb0pzb25SZXF1aXJlZENvbHVtbnMiLCJmZWF0dXJlQWNjZXNzb3IiLCJfcmVmIiwiZ2VvanNvbiIsImRjIiwiZCIsInZhbHVlQXQiLCJpbmRleCIsImZpZWxkSWR4IiwiZGVmYXVsdEVsZXZhdGlvbiIsImRlZmF1bHRMaW5lV2lkdGgiLCJkZWZhdWx0UmFkaXVzIiwiR2VvSnNvbkxheWVyIiwiX0xheWVyIiwiX2luaGVyaXRzMiIsInByb3BzIiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2syIiwiZGF0YVRvRmVhdHVyZSIsInJlZ2lzdGVyVmlzQ29uZmlnIiwiZ2V0UG9zaXRpb25BY2Nlc3NvciIsImRhdGFDb250YWluZXIiLCJjb25maWciLCJjb2x1bW5zIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsIkdlb2pzb25MYXllckljb24iLCJ2aXN1YWxDaGFubmVscyIsIl9nZXQyIiwiY29sb3IiLCJhY2Nlc3NvciIsImNvbmRpdGlvbiIsInZpc0NvbmZpZyIsIm51bGxWYWx1ZSIsImdldEF0dHJpYnV0ZVZhbHVlIiwicHJvcGVydGllcyIsImZpbGxDb2xvciIsImZpZWxkIiwic2NhbGUiLCJkb21haW4iLCJyYW5nZSIsImNoYW5uZWxTY2FsZVR5cGUiLCJDSEFOTkVMX1NDQUxFUyIsImxpbmVDb2xvciIsInNpemUiLCJsaW5lV2lkdGgiLCJoZWlnaHQiLCJlbGV2YXRpb24iLCJ2YWx1ZSIsImdldERlZmF1bHRMYXllckNvbmZpZyIsInVuZGVmaW5lZCIsImhlaWdodEZpZWxkIiwiaGVpZ2h0RG9tYWluIiwiaGVpZ2h0U2NhbGUiLCJyYWRpdXNGaWVsZCIsInJhZGl1c0RvbWFpbiIsInJhZGl1c1NjYWxlIiwic3Ryb2tlQ29sb3JGaWVsZCIsInN0cm9rZUNvbG9yRG9tYWluIiwic3Ryb2tlQ29sb3JTY2FsZSIsImdldEhvdmVyRGF0YSIsIm9iamVjdCIsInJvdyIsImNhbGN1bGF0ZURhdGFBdHRyaWJ1dGUiLCJfcmVmMiIsImdldFBvc2l0aW9uIiwiX3RoaXMyIiwiZmlsdGVyZWRJbmRleCIsIm1hcCIsImZvcm1hdExheWVyRGF0YSIsImRhdGFzZXRzIiwib2xkTGF5ZXJEYXRhIiwiX2RhdGFzZXRzJHRoaXMkY29uZmlnIiwiZGF0YUlkIiwiZ3B1RmlsdGVyIiwiX3RoaXMkdXBkYXRlRGF0YSIsInVwZGF0ZURhdGEiLCJkYXRhIiwiY3VzdG9tRmlsdGVyVmFsdWVBY2Nlc3NvciIsImZpZWxkSW5kZXgiLCJpbmRleEFjY2Vzc29yIiwiZiIsImRhdGFBY2Nlc3NvciIsImFjY2Vzc29ycyIsImdldEF0dHJpYnV0ZUFjY2Vzc29ycyIsImdldEZpbHRlclZhbHVlIiwiZmlsdGVyVmFsdWVBY2Nlc3NvciIsInVwZGF0ZUxheWVyTWV0YSIsImdldEZlYXR1cmUiLCJnZXRHZW9qc29uRGF0YU1hcHMiLCJib3VuZHMiLCJnZXRHZW9qc29uQm91bmRzIiwiZmVhdHVyZVR5cGVzIiwiZ2V0R2VvanNvbkZlYXR1cmVUeXBlcyIsInVwZGF0ZU1ldGEiLCJzZXRJbml0aWFsTGF5ZXJDb25maWciLCJfcmVmMyIsIm1ldGEiLCJwb2x5Z29uIiwidXBkYXRlTGF5ZXJWaXNDb25maWciLCJjb2xvck1ha2VyIiwibmV4dCIsInBvaW50IiwicmVuZGVyTGF5ZXIiLCJvcHRzIiwib2JqZWN0SG92ZXJlZCIsImdldFJhZGl1c1NjYWxlIiwibGF5ZXJQcm9wcyIsImxpbmVXaWR0aFNjYWxlIiwicG9pbnRSYWRpdXNTY2FsZSIsImxpbmVNaXRlckxpbWl0IiwidXBkYXRlVHJpZ2dlcnMiLCJnZXRWaXN1YWxDaGFubmVsVXBkYXRlVHJpZ2dlcnMiLCJmaWx0ZXJWYWx1ZVVwZGF0ZVRyaWdnZXJzIiwiZGVmYXVsdExheWVyUHJvcHMiLCJnZXREZWZhdWx0RGVja0xheWVyUHJvcHMiLCJvcGFPdmVyd3JpdGUiLCJwaWNrYWJsZSIsImhhc0ludGVyYWN0aXZpdHkiLCJob3ZlcmVkT2JqZWN0IiwiaGFzSG92ZXJlZE9iamVjdCIsIkRlY2tHTEdlb0pzb25MYXllciIsImhpZ2hsaWdodENvbG9yIiwiSElHSExJR0hfQ09MT1JfM0QiLCJhdXRvSGlnaGxpZ2h0IiwiZXh0cnVkZWQiLCJ3cmFwTG9uZ2l0dWRlIiwicm91bmRlZCIsInJhZGl1c1VuaXRzIiwibGluZVdpZHRoVW5pdHMiLCJfc3ViTGF5ZXJQcm9wcyIsImxpbmUiLCJsaW5lc3RyaW5ncyIsInBvaW50cyIsImxpbmVPcGFjaXR5IiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsImdldERlZmF1bHRIb3ZlckxheWVyUHJvcHMiLCJnZXRMaW5lV2lkdGgiLCJnZXRSYWRpdXMiLCJnZXRFbGV2YXRpb24iLCJnZXRMaW5lQ29sb3IiLCJnZXRGaWxsQ29sb3IiLCJmaW5kRGVmYXVsdExheWVyUHJvcHMiLCJfcmVmNCIsIl90aGlzMyIsImxhYmVsIiwiX3JlZjQkZmllbGRzIiwiZmllbGRzIiwiZ2VvanNvbkNvbHVtbnMiLCJ0eXBlIiwiYW5hbHl6ZXJUeXBlIiwibmFtZSIsImRlZmF1bHRDb2x1bW5zIiwidW5pcSIsIkdFT0pTT05fRklFTERTIiwiZm91bmRDb2x1bW5zIiwiZmluZERlZmF1bHRDb2x1bW5GaWVsZCIsInJlcGxhY2UiLCJpc1Zpc2libGUiLCJMYXllciJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9sYXllcnMvZ2VvanNvbi1sYXllci9nZW9qc29uLWxheWVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAyMiBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCB1bmlxIGZyb20gJ2xvZGFzaC91bmlxJztcbmltcG9ydCB7REFUQV9UWVBFU30gZnJvbSAndHlwZS1hbmFseXplcic7XG5cbmltcG9ydCBMYXllciwge2NvbG9yTWFrZXJ9IGZyb20gJy4uL2Jhc2UtbGF5ZXInO1xuaW1wb3J0IHtHZW9Kc29uTGF5ZXIgYXMgRGVja0dMR2VvSnNvbkxheWVyfSBmcm9tICdAZGVjay5nbC9sYXllcnMnO1xuaW1wb3J0IHtnZXRHZW9qc29uRGF0YU1hcHMsIGdldEdlb2pzb25Cb3VuZHMsIGdldEdlb2pzb25GZWF0dXJlVHlwZXN9IGZyb20gJy4vZ2VvanNvbi11dGlscyc7XG5pbXBvcnQgR2VvanNvbkxheWVySWNvbiBmcm9tICcuL2dlb2pzb24tbGF5ZXItaWNvbic7XG5pbXBvcnQge0dFT0pTT05fRklFTERTLCBISUdITElHSF9DT0xPUl8zRCwgQ0hBTk5FTF9TQ0FMRVN9IGZyb20gJ2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzJztcbmltcG9ydCB7TEFZRVJfVklTX0NPTkZJR1N9IGZyb20gJ2xheWVycy9sYXllci1mYWN0b3J5JztcblxuY29uc3QgU1VQUE9SVEVEX0FOQUxZWkVSX1RZUEVTID0ge1xuICBbREFUQV9UWVBFUy5HRU9NRVRSWV06IHRydWUsXG4gIFtEQVRBX1RZUEVTLkdFT01FVFJZX0ZST01fU1RSSU5HXTogdHJ1ZVxufTtcblxuZXhwb3J0IGNvbnN0IGdlb2pzb25WaXNDb25maWdzID0ge1xuICBvcGFjaXR5OiAnb3BhY2l0eScsXG4gIHN0cm9rZU9wYWNpdHk6IHtcbiAgICAuLi5MQVlFUl9WSVNfQ09ORklHUy5vcGFjaXR5LFxuICAgIHByb3BlcnR5OiAnc3Ryb2tlT3BhY2l0eSdcbiAgfSxcbiAgdGhpY2tuZXNzOiB7XG4gICAgLi4uTEFZRVJfVklTX0NPTkZJR1MudGhpY2tuZXNzLFxuICAgIGRlZmF1bHRWYWx1ZTogMVxuICB9LFxuICBzdHJva2VDb2xvcjogJ3N0cm9rZUNvbG9yJyxcbiAgY29sb3JSYW5nZTogJ2NvbG9yUmFuZ2UnLFxuICBzdHJva2VDb2xvclJhbmdlOiAnc3Ryb2tlQ29sb3JSYW5nZScsXG4gIHJhZGl1czogJ3JhZGl1cycsXG5cbiAgc2l6ZVJhbmdlOiAnc3Ryb2tlV2lkdGhSYW5nZScsXG4gIHJhZGl1c1JhbmdlOiAncmFkaXVzUmFuZ2UnLFxuICBoZWlnaHRSYW5nZTogJ2VsZXZhdGlvblJhbmdlJyxcbiAgZWxldmF0aW9uU2NhbGU6ICdlbGV2YXRpb25TY2FsZScsXG4gIGVuYWJsZUVsZXZhdGlvblpvb21GYWN0b3I6ICdlbmFibGVFbGV2YXRpb25ab29tRmFjdG9yJyxcbiAgc3Ryb2tlZDogJ3N0cm9rZWQnLFxuICBmaWxsZWQ6ICdmaWxsZWQnLFxuICBlbmFibGUzZDogJ2VuYWJsZTNkJyxcbiAgd2lyZWZyYW1lOiAnd2lyZWZyYW1lJ1xufTtcblxuZXhwb3J0IGNvbnN0IGdlb0pzb25SZXF1aXJlZENvbHVtbnMgPSBbJ2dlb2pzb24nXTtcbmV4cG9ydCBjb25zdCBmZWF0dXJlQWNjZXNzb3IgPSAoe2dlb2pzb259KSA9PiBkYyA9PiBkID0+IGRjLnZhbHVlQXQoZC5pbmRleCwgZ2VvanNvbi5maWVsZElkeCk7XG5cbi8vIGFjY2VzcyBmZWF0dXJlIHByb3BlcnRpZXMgZnJvbSBnZW9qc29uIHN1YiBsYXllclxuZXhwb3J0IGNvbnN0IGRlZmF1bHRFbGV2YXRpb24gPSA1MDA7XG5leHBvcnQgY29uc3QgZGVmYXVsdExpbmVXaWR0aCA9IDE7XG5leHBvcnQgY29uc3QgZGVmYXVsdFJhZGl1cyA9IDE7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdlb0pzb25MYXllciBleHRlbmRzIExheWVyIHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLmRhdGFUb0ZlYXR1cmUgPSBbXTtcbiAgICB0aGlzLnJlZ2lzdGVyVmlzQ29uZmlnKGdlb2pzb25WaXNDb25maWdzKTtcbiAgICB0aGlzLmdldFBvc2l0aW9uQWNjZXNzb3IgPSBkYXRhQ29udGFpbmVyID0+IGZlYXR1cmVBY2Nlc3Nvcih0aGlzLmNvbmZpZy5jb2x1bW5zKShkYXRhQ29udGFpbmVyKTtcbiAgfVxuXG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiAnZ2VvanNvbic7XG4gIH1cblxuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gJ1BvbHlnb24nO1xuICB9XG5cbiAgZ2V0IGxheWVySWNvbigpIHtcbiAgICByZXR1cm4gR2VvanNvbkxheWVySWNvbjtcbiAgfVxuXG4gIGdldCByZXF1aXJlZExheWVyQ29sdW1ucygpIHtcbiAgICByZXR1cm4gZ2VvSnNvblJlcXVpcmVkQ29sdW1ucztcbiAgfVxuXG4gIGdldCB2aXN1YWxDaGFubmVscygpIHtcbiAgICBjb25zdCB2aXN1YWxDaGFubmVscyA9IHN1cGVyLnZpc3VhbENoYW5uZWxzO1xuICAgIHJldHVybiB7XG4gICAgICBjb2xvcjoge1xuICAgICAgICAuLi52aXN1YWxDaGFubmVscy5jb2xvcixcbiAgICAgICAgYWNjZXNzb3I6ICdnZXRGaWxsQ29sb3InLFxuICAgICAgICBjb25kaXRpb246IGNvbmZpZyA9PiBjb25maWcudmlzQ29uZmlnLmZpbGxlZCxcbiAgICAgICAgbnVsbFZhbHVlOiB2aXN1YWxDaGFubmVscy5jb2xvci5udWxsVmFsdWUsXG4gICAgICAgIGdldEF0dHJpYnV0ZVZhbHVlOiBjb25maWcgPT4gZCA9PiBkLnByb3BlcnRpZXMuZmlsbENvbG9yIHx8IGNvbmZpZy5jb2xvcixcbiAgICAgICAgLy8gdXNlZCB0aGlzIHRvIGdldCB1cGRhdGVUcmlnZ2Vyc1xuICAgICAgICBkZWZhdWx0VmFsdWU6IGNvbmZpZyA9PiBjb25maWcuY29sb3JcbiAgICAgIH0sXG4gICAgICBzdHJva2VDb2xvcjoge1xuICAgICAgICBwcm9wZXJ0eTogJ3N0cm9rZUNvbG9yJyxcbiAgICAgICAgZmllbGQ6ICdzdHJva2VDb2xvckZpZWxkJyxcbiAgICAgICAgc2NhbGU6ICdzdHJva2VDb2xvclNjYWxlJyxcbiAgICAgICAgZG9tYWluOiAnc3Ryb2tlQ29sb3JEb21haW4nLFxuICAgICAgICByYW5nZTogJ3N0cm9rZUNvbG9yUmFuZ2UnLFxuICAgICAgICBrZXk6ICdzdHJva2VDb2xvcicsXG4gICAgICAgIGNoYW5uZWxTY2FsZVR5cGU6IENIQU5ORUxfU0NBTEVTLmNvbG9yLFxuICAgICAgICBhY2Nlc3NvcjogJ2dldExpbmVDb2xvcicsXG4gICAgICAgIGNvbmRpdGlvbjogY29uZmlnID0+IGNvbmZpZy52aXNDb25maWcuc3Ryb2tlZCxcbiAgICAgICAgbnVsbFZhbHVlOiB2aXN1YWxDaGFubmVscy5jb2xvci5udWxsVmFsdWUsXG4gICAgICAgIGdldEF0dHJpYnV0ZVZhbHVlOiBjb25maWcgPT4gZCA9PlxuICAgICAgICAgIGQucHJvcGVydGllcy5saW5lQ29sb3IgfHwgY29uZmlnLnZpc0NvbmZpZy5zdHJva2VDb2xvciB8fCBjb25maWcuY29sb3IsXG4gICAgICAgIC8vIHVzZWQgdGhpcyB0byBnZXQgdXBkYXRlVHJpZ2dlcnNcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBjb25maWcgPT4gY29uZmlnLnZpc0NvbmZpZy5zdHJva2VDb2xvciB8fCBjb25maWcuY29sb3JcbiAgICAgIH0sXG4gICAgICBzaXplOiB7XG4gICAgICAgIC4uLnZpc3VhbENoYW5uZWxzLnNpemUsXG4gICAgICAgIHByb3BlcnR5OiAnc3Ryb2tlJyxcbiAgICAgICAgYWNjZXNzb3I6ICdnZXRMaW5lV2lkdGgnLFxuICAgICAgICBjb25kaXRpb246IGNvbmZpZyA9PiBjb25maWcudmlzQ29uZmlnLnN0cm9rZWQsXG4gICAgICAgIG51bGxWYWx1ZTogMCxcbiAgICAgICAgZ2V0QXR0cmlidXRlVmFsdWU6ICgpID0+IGQgPT4gZC5wcm9wZXJ0aWVzLmxpbmVXaWR0aCB8fCBkZWZhdWx0TGluZVdpZHRoXG4gICAgICB9LFxuICAgICAgaGVpZ2h0OiB7XG4gICAgICAgIHByb3BlcnR5OiAnaGVpZ2h0JyxcbiAgICAgICAgZmllbGQ6ICdoZWlnaHRGaWVsZCcsXG4gICAgICAgIHNjYWxlOiAnaGVpZ2h0U2NhbGUnLFxuICAgICAgICBkb21haW46ICdoZWlnaHREb21haW4nLFxuICAgICAgICByYW5nZTogJ2hlaWdodFJhbmdlJyxcbiAgICAgICAga2V5OiAnaGVpZ2h0JyxcbiAgICAgICAgY2hhbm5lbFNjYWxlVHlwZTogQ0hBTk5FTF9TQ0FMRVMuc2l6ZSxcbiAgICAgICAgYWNjZXNzb3I6ICdnZXRFbGV2YXRpb24nLFxuICAgICAgICBjb25kaXRpb246IGNvbmZpZyA9PiBjb25maWcudmlzQ29uZmlnLmVuYWJsZTNkLFxuICAgICAgICBudWxsVmFsdWU6IDAsXG4gICAgICAgIGdldEF0dHJpYnV0ZVZhbHVlOiAoKSA9PiBkID0+IGQucHJvcGVydGllcy5lbGV2YXRpb24gfHwgZGVmYXVsdEVsZXZhdGlvblxuICAgICAgfSxcbiAgICAgIHJhZGl1czoge1xuICAgICAgICBwcm9wZXJ0eTogJ3JhZGl1cycsXG4gICAgICAgIGZpZWxkOiAncmFkaXVzRmllbGQnLFxuICAgICAgICBzY2FsZTogJ3JhZGl1c1NjYWxlJyxcbiAgICAgICAgZG9tYWluOiAncmFkaXVzRG9tYWluJyxcbiAgICAgICAgcmFuZ2U6ICdyYWRpdXNSYW5nZScsXG4gICAgICAgIGtleTogJ3JhZGl1cycsXG4gICAgICAgIGNoYW5uZWxTY2FsZVR5cGU6IENIQU5ORUxfU0NBTEVTLnJhZGl1cyxcbiAgICAgICAgYWNjZXNzb3I6ICdnZXRSYWRpdXMnLFxuICAgICAgICBudWxsVmFsdWU6IDAsXG4gICAgICAgIGdldEF0dHJpYnV0ZVZhbHVlOiAoKSA9PiBkID0+IGQucHJvcGVydGllcy5yYWRpdXMgfHwgZGVmYXVsdFJhZGl1c1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZmluZERlZmF1bHRMYXllclByb3BzKHtsYWJlbCwgZmllbGRzID0gW119KSB7XG4gICAgY29uc3QgZ2VvanNvbkNvbHVtbnMgPSBmaWVsZHNcbiAgICAgIC5maWx0ZXIoZiA9PiBmLnR5cGUgPT09ICdnZW9qc29uJyAmJiBTVVBQT1JURURfQU5BTFlaRVJfVFlQRVNbZi5hbmFseXplclR5cGVdKVxuICAgICAgLm1hcChmID0+IGYubmFtZSk7XG5cbiAgICBjb25zdCBkZWZhdWx0Q29sdW1ucyA9IHtcbiAgICAgIGdlb2pzb246IHVuaXEoWy4uLkdFT0pTT05fRklFTERTLmdlb2pzb24sIC4uLmdlb2pzb25Db2x1bW5zXSlcbiAgICB9O1xuXG4gICAgY29uc3QgZm91bmRDb2x1bW5zID0gdGhpcy5maW5kRGVmYXVsdENvbHVtbkZpZWxkKGRlZmF1bHRDb2x1bW5zLCBmaWVsZHMpO1xuICAgIGlmICghZm91bmRDb2x1bW5zIHx8ICFmb3VuZENvbHVtbnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4ge3Byb3BzOiBbXX07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHByb3BzOiBmb3VuZENvbHVtbnMubWFwKGNvbHVtbnMgPT4gKHtcbiAgICAgICAgbGFiZWw6ICh0eXBlb2YgbGFiZWwgPT09ICdzdHJpbmcnICYmIGxhYmVsLnJlcGxhY2UoL1xcLlteLy5dKyQvLCAnJykpIHx8IHRoaXMudHlwZSxcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAgaXNWaXNpYmxlOiB0cnVlXG4gICAgICB9KSlcbiAgICB9O1xuICB9XG5cbiAgZ2V0RGVmYXVsdExheWVyQ29uZmlnKHByb3BzID0ge30pIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3VwZXIuZ2V0RGVmYXVsdExheWVyQ29uZmlnKHByb3BzKSxcblxuICAgICAgLy8gYWRkIGhlaWdodCB2aXN1YWwgY2hhbm5lbFxuICAgICAgaGVpZ2h0RmllbGQ6IG51bGwsXG4gICAgICBoZWlnaHREb21haW46IFswLCAxXSxcbiAgICAgIGhlaWdodFNjYWxlOiAnbGluZWFyJyxcblxuICAgICAgLy8gYWRkIHJhZGl1cyB2aXN1YWwgY2hhbm5lbFxuICAgICAgcmFkaXVzRmllbGQ6IG51bGwsXG4gICAgICByYWRpdXNEb21haW46IFswLCAxXSxcbiAgICAgIHJhZGl1c1NjYWxlOiAnbGluZWFyJyxcblxuICAgICAgLy8gYWRkIHN0cm9rZSBjb2xvciB2aXN1YWwgY2hhbm5lbFxuICAgICAgc3Ryb2tlQ29sb3JGaWVsZDogbnVsbCxcbiAgICAgIHN0cm9rZUNvbG9yRG9tYWluOiBbMCwgMV0sXG4gICAgICBzdHJva2VDb2xvclNjYWxlOiAncXVhbnRpbGUnXG4gICAgfTtcbiAgfVxuXG4gIGdldEhvdmVyRGF0YShvYmplY3QsIGRhdGFDb250YWluZXIpIHtcbiAgICAvLyBpbmRleCBvZiBkYXRhQ29udGFpbmVyIGlzIHNhdmVkIHRvIGZlYXR1cmUucHJvcGVydGllc1xuICAgIHJldHVybiBkYXRhQ29udGFpbmVyLnJvdyhvYmplY3QucHJvcGVydGllcy5pbmRleCk7XG4gIH1cblxuICBjYWxjdWxhdGVEYXRhQXR0cmlidXRlKHtkYXRhQ29udGFpbmVyLCBmaWx0ZXJlZEluZGV4fSwgZ2V0UG9zaXRpb24pIHtcbiAgICByZXR1cm4gZmlsdGVyZWRJbmRleC5tYXAoaSA9PiB0aGlzLmRhdGFUb0ZlYXR1cmVbaV0pLmZpbHRlcihkID0+IGQpO1xuICB9XG5cbiAgZm9ybWF0TGF5ZXJEYXRhKGRhdGFzZXRzLCBvbGRMYXllckRhdGEpIHtcbiAgICBjb25zdCB7Z3B1RmlsdGVyLCBkYXRhQ29udGFpbmVyfSA9IGRhdGFzZXRzW3RoaXMuY29uZmlnLmRhdGFJZF07XG4gICAgY29uc3Qge2RhdGF9ID0gdGhpcy51cGRhdGVEYXRhKGRhdGFzZXRzLCBvbGRMYXllckRhdGEpO1xuXG4gICAgY29uc3QgY3VzdG9tRmlsdGVyVmFsdWVBY2Nlc3NvciA9IChkYywgZCwgZmllbGRJbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIGRjLnZhbHVlQXQoZC5wcm9wZXJ0aWVzLmluZGV4LCBmaWVsZEluZGV4KTtcbiAgICB9O1xuICAgIGNvbnN0IGluZGV4QWNjZXNzb3IgPSBmID0+IGYucHJvcGVydGllcy5pbmRleDtcblxuICAgIGNvbnN0IGRhdGFBY2Nlc3NvciA9IGRjID0+IGQgPT4gKHtpbmRleDogZC5wcm9wZXJ0aWVzLmluZGV4fSk7XG4gICAgY29uc3QgYWNjZXNzb3JzID0gdGhpcy5nZXRBdHRyaWJ1dGVBY2Nlc3NvcnMoe2RhdGFBY2Nlc3NvciwgZGF0YUNvbnRhaW5lcn0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGEsXG4gICAgICBnZXRGaWx0ZXJWYWx1ZTogZ3B1RmlsdGVyLmZpbHRlclZhbHVlQWNjZXNzb3IoZGF0YUNvbnRhaW5lcikoXG4gICAgICAgIGluZGV4QWNjZXNzb3IsXG4gICAgICAgIGN1c3RvbUZpbHRlclZhbHVlQWNjZXNzb3JcbiAgICAgICksXG4gICAgICAuLi5hY2Nlc3NvcnNcbiAgICB9O1xuICB9XG5cbiAgdXBkYXRlTGF5ZXJNZXRhKGRhdGFDb250YWluZXIpIHtcbiAgICBjb25zdCBnZXRGZWF0dXJlID0gdGhpcy5nZXRQb3NpdGlvbkFjY2Vzc29yKGRhdGFDb250YWluZXIpO1xuICAgIHRoaXMuZGF0YVRvRmVhdHVyZSA9IGdldEdlb2pzb25EYXRhTWFwcyhkYXRhQ29udGFpbmVyLCBnZXRGZWF0dXJlKTtcblxuICAgIC8vIGdldCBib3VuZHMgZnJvbSBmZWF0dXJlc1xuICAgIGNvbnN0IGJvdW5kcyA9IGdldEdlb2pzb25Cb3VuZHModGhpcy5kYXRhVG9GZWF0dXJlKTtcblxuICAgIC8vIGtlZXAgYSByZWNvcmQgb2Ygd2hhdCB0eXBlIG9mIGdlb21ldHJ5IHRoZSBjb2xsZWN0aW9uIGhhc1xuICAgIGNvbnN0IGZlYXR1cmVUeXBlcyA9IGdldEdlb2pzb25GZWF0dXJlVHlwZXModGhpcy5kYXRhVG9GZWF0dXJlKTtcblxuICAgIHRoaXMudXBkYXRlTWV0YSh7Ym91bmRzLCBmZWF0dXJlVHlwZXN9KTtcbiAgfVxuXG4gIHNldEluaXRpYWxMYXllckNvbmZpZyh7ZGF0YUNvbnRhaW5lcn0pIHtcbiAgICB0aGlzLnVwZGF0ZUxheWVyTWV0YShkYXRhQ29udGFpbmVyKTtcblxuICAgIGNvbnN0IHtmZWF0dXJlVHlwZXN9ID0gdGhpcy5tZXRhO1xuICAgIC8vIGRlZmF1bHQgc2V0dGluZ3MgaXMgc3Ryb2tlOiB0cnVlLCBmaWxsZWQ6IGZhbHNlXG4gICAgaWYgKGZlYXR1cmVUeXBlcyAmJiBmZWF0dXJlVHlwZXMucG9seWdvbikge1xuICAgICAgLy8gc2V0IGJvdGggZmlsbCBhbmQgc3Ryb2tlIHRvIHRydWVcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUxheWVyVmlzQ29uZmlnKHtcbiAgICAgICAgZmlsbGVkOiB0cnVlLFxuICAgICAgICBzdHJva2VkOiB0cnVlLFxuICAgICAgICBzdHJva2VDb2xvcjogY29sb3JNYWtlci5uZXh0KCkudmFsdWVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoZmVhdHVyZVR5cGVzICYmIGZlYXR1cmVUeXBlcy5wb2ludCkge1xuICAgICAgLy8gc2V0IGZpbGwgdG8gdHJ1ZSBpZiBkZXRlY3QgcG9pbnRcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUxheWVyVmlzQ29uZmlnKHtmaWxsZWQ6IHRydWUsIHN0cm9rZWQ6IGZhbHNlfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICByZW5kZXJMYXllcihvcHRzKSB7XG4gICAgY29uc3Qge2RhdGEsIGdwdUZpbHRlciwgb2JqZWN0SG92ZXJlZH0gPSBvcHRzO1xuXG4gICAgY29uc3Qge2ZlYXR1cmVUeXBlc30gPSB0aGlzLm1ldGE7XG4gICAgY29uc3QgcmFkaXVzU2NhbGUgPSB0aGlzLmdldFJhZGl1c1NjYWxlKCk7XG4gICAgY29uc3Qge3Zpc0NvbmZpZ30gPSB0aGlzLmNvbmZpZztcblxuICAgIGNvbnN0IGxheWVyUHJvcHMgPSB7XG4gICAgICBsaW5lV2lkdGhTY2FsZTogdmlzQ29uZmlnLnRoaWNrbmVzcyxcbiAgICAgIGVsZXZhdGlvblNjYWxlOiB2aXNDb25maWcuZWxldmF0aW9uU2NhbGUsXG4gICAgICBwb2ludFJhZGl1c1NjYWxlOiByYWRpdXNTY2FsZSxcbiAgICAgIGxpbmVNaXRlckxpbWl0OiA0XG4gICAgfTtcblxuICAgIGNvbnN0IHVwZGF0ZVRyaWdnZXJzID0ge1xuICAgICAgLi4udGhpcy5nZXRWaXN1YWxDaGFubmVsVXBkYXRlVHJpZ2dlcnMoKSxcbiAgICAgIGdldEZpbHRlclZhbHVlOiBncHVGaWx0ZXIuZmlsdGVyVmFsdWVVcGRhdGVUcmlnZ2Vyc1xuICAgIH07XG5cbiAgICBjb25zdCBkZWZhdWx0TGF5ZXJQcm9wcyA9IHRoaXMuZ2V0RGVmYXVsdERlY2tMYXllclByb3BzKG9wdHMpO1xuICAgIGNvbnN0IG9wYU92ZXJ3cml0ZSA9IHtcbiAgICAgIG9wYWNpdHk6IHZpc0NvbmZpZy5zdHJva2VPcGFjaXR5XG4gICAgfTtcblxuICAgIGNvbnN0IHBpY2thYmxlID0gdGhpcy5oYXNJbnRlcmFjdGl2aXR5O1xuICAgIGNvbnN0IGhvdmVyZWRPYmplY3QgPSB0aGlzLmhhc0hvdmVyZWRPYmplY3Qob2JqZWN0SG92ZXJlZCk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgbmV3IERlY2tHTEdlb0pzb25MYXllcih7XG4gICAgICAgIC4uLmRlZmF1bHRMYXllclByb3BzLFxuICAgICAgICAuLi5sYXllclByb3BzLFxuICAgICAgICAuLi5kYXRhLFxuICAgICAgICBwaWNrYWJsZSxcbiAgICAgICAgaGlnaGxpZ2h0Q29sb3I6IEhJR0hMSUdIX0NPTE9SXzNELFxuICAgICAgICBhdXRvSGlnaGxpZ2h0OiB2aXNDb25maWcuZW5hYmxlM2QgJiYgcGlja2FibGUsXG4gICAgICAgIHN0cm9rZWQ6IHZpc0NvbmZpZy5zdHJva2VkLFxuICAgICAgICBmaWxsZWQ6IHZpc0NvbmZpZy5maWxsZWQsXG4gICAgICAgIGV4dHJ1ZGVkOiB2aXNDb25maWcuZW5hYmxlM2QsXG4gICAgICAgIHdpcmVmcmFtZTogdmlzQ29uZmlnLndpcmVmcmFtZSxcbiAgICAgICAgd3JhcExvbmdpdHVkZTogZmFsc2UsXG4gICAgICAgIGxpbmVNaXRlckxpbWl0OiAyLFxuICAgICAgICByb3VuZGVkOiB0cnVlLFxuICAgICAgICByYWRpdXNVbml0czogJ3BpeGVscycsXG4gICAgICAgIGxpbmVXaWR0aFVuaXRzOiAncGl4ZWxzJyxcbiAgICAgICAgdXBkYXRlVHJpZ2dlcnMsXG4gICAgICAgIF9zdWJMYXllclByb3BzOiB7XG4gICAgICAgICAgLi4uKGZlYXR1cmVUeXBlcy5wb2x5Z29uID8geydwb2x5Z29ucy1zdHJva2UnOiBvcGFPdmVyd3JpdGV9IDoge30pLFxuICAgICAgICAgIC4uLihmZWF0dXJlVHlwZXMubGluZSA/IHtsaW5lc3RyaW5nczogb3BhT3ZlcndyaXRlfSA6IHt9KSxcbiAgICAgICAgICAuLi4oZmVhdHVyZVR5cGVzLnBvaW50XG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBwb2ludHM6IHtcbiAgICAgICAgICAgICAgICAgIGxpbmVPcGFjaXR5OiB2aXNDb25maWcuc3Ryb2tlT3BhY2l0eVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7fSlcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICAuLi4oaG92ZXJlZE9iamVjdCAmJiAhdmlzQ29uZmlnLmVuYWJsZTNkXG4gICAgICAgID8gW1xuICAgICAgICAgICAgbmV3IERlY2tHTEdlb0pzb25MYXllcih7XG4gICAgICAgICAgICAgIC4uLnRoaXMuZ2V0RGVmYXVsdEhvdmVyTGF5ZXJQcm9wcygpLFxuICAgICAgICAgICAgICAuLi5sYXllclByb3BzLFxuICAgICAgICAgICAgICB3cmFwTG9uZ2l0dWRlOiBmYWxzZSxcbiAgICAgICAgICAgICAgZGF0YTogW2hvdmVyZWRPYmplY3RdLFxuICAgICAgICAgICAgICBnZXRMaW5lV2lkdGg6IGRhdGEuZ2V0TGluZVdpZHRoLFxuICAgICAgICAgICAgICBnZXRSYWRpdXM6IGRhdGEuZ2V0UmFkaXVzLFxuICAgICAgICAgICAgICBnZXRFbGV2YXRpb246IGRhdGEuZ2V0RWxldmF0aW9uLFxuICAgICAgICAgICAgICBnZXRMaW5lQ29sb3I6IHRoaXMuY29uZmlnLmhpZ2hsaWdodENvbG9yLFxuICAgICAgICAgICAgICBnZXRGaWxsQ29sb3I6IHRoaXMuY29uZmlnLmhpZ2hsaWdodENvbG9yLFxuICAgICAgICAgICAgICAvLyBhbHdheXMgZHJhdyBvdXRsaW5lXG4gICAgICAgICAgICAgIHN0cm9rZWQ6IHRydWUsXG4gICAgICAgICAgICAgIGZpbGxlZDogZmFsc2VcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICA6IFtdKVxuICAgIF07XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQW9CQSxJQUFBQSxLQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxhQUFBLEdBQUFELE9BQUE7QUFFQSxJQUFBRSxVQUFBLEdBQUFDLHVCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSSxPQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxhQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxpQkFBQSxHQUFBUCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU8sZ0JBQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLGFBQUEsR0FBQVIsT0FBQTtBQUF1RCxTQUFBUyx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSx5QkFBQUMsQ0FBQSxXQUFBQSxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxLQUFBRixDQUFBO0FBQUEsU0FBQVAsd0JBQUFPLENBQUEsRUFBQUUsQ0FBQSxTQUFBQSxDQUFBLElBQUFGLENBQUEsSUFBQUEsQ0FBQSxDQUFBSSxVQUFBLFNBQUFKLENBQUEsZUFBQUEs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
|