@kepler.gl/components 3.0.0 → 3.1.0-alpha.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/package.json +26 -27
- package/dist/bottom-widget.d.ts +0 -19
- package/dist/bottom-widget.js +0 -166
- package/dist/common/action-panel.d.ts +0 -27
- package/dist/common/action-panel.js +0 -132
- package/dist/common/animation-control/animation-control.d.ts +0 -25
- package/dist/common/animation-control/animation-control.js +0 -113
- package/dist/common/animation-control/animation-controller.d.ts +0 -19
- package/dist/common/animation-control/animation-controller.js +0 -318
- package/dist/common/animation-control/animation-speed-slider.d.ts +0 -12
- package/dist/common/animation-control/animation-speed-slider.js +0 -100
- package/dist/common/animation-control/animation-window-control.d.ts +0 -20
- package/dist/common/animation-control/animation-window-control.js +0 -68
- package/dist/common/animation-control/floating-time-display.d.ts +0 -9
- package/dist/common/animation-control/floating-time-display.js +0 -161
- package/dist/common/animation-control/play-control.d.ts +0 -12
- package/dist/common/animation-control/play-control.js +0 -63
- package/dist/common/animation-control/playback-controls.d.ts +0 -55
- package/dist/common/animation-control/playback-controls.js +0 -182
- package/dist/common/animation-control/reset-control.d.ts +0 -9
- package/dist/common/animation-control/reset-control.js +0 -53
- package/dist/common/animation-control/speed-control.d.ts +0 -12
- package/dist/common/animation-control/speed-control.js +0 -68
- package/dist/common/animation-control/window-action-control.d.ts +0 -11
- package/dist/common/animation-control/window-action-control.js +0 -69
- package/dist/common/checkbox.d.ts +0 -35
- package/dist/common/checkbox.js +0 -139
- package/dist/common/color-legend.d.ts +0 -39
- package/dist/common/color-legend.js +0 -231
- package/dist/common/data-table/button.d.ts +0 -8
- package/dist/common/data-table/button.js +0 -46
- package/dist/common/data-table/canvas.d.ts +0 -2
- package/dist/common/data-table/canvas.js +0 -32
- package/dist/common/data-table/cell-size.d.ts +0 -43
- package/dist/common/data-table/cell-size.js +0 -206
- package/dist/common/data-table/display-format.d.ts +0 -25
- package/dist/common/data-table/display-format.js +0 -149
- package/dist/common/data-table/grid.d.ts +0 -10
- package/dist/common/data-table/grid.js +0 -139
- package/dist/common/data-table/header-cell.d.ts +0 -28
- package/dist/common/data-table/header-cell.js +0 -169
- package/dist/common/data-table/index.d.ts +0 -101
- package/dist/common/data-table/index.js +0 -523
- package/dist/common/data-table/option-dropdown.d.ts +0 -28
- package/dist/common/data-table/option-dropdown.js +0 -195
- package/dist/common/dataset-label.d.ts +0 -10
- package/dist/common/dataset-label.js +0 -36
- package/dist/common/error-boundary.d.ts +0 -16
- package/dist/common/error-boundary.js +0 -83
- package/dist/common/field-selector.d.ts +0 -50
- package/dist/common/field-selector.js +0 -202
- package/dist/common/field-token.d.ts +0 -58
- package/dist/common/field-token.js +0 -54
- package/dist/common/file-uploader/file-drop.d.ts +0 -54
- package/dist/common/file-uploader/file-drop.js +0 -232
- package/dist/common/file-uploader/file-upload-progress.d.ts +0 -8
- package/dist/common/file-uploader/file-upload-progress.js +0 -103
- package/dist/common/file-uploader/file-upload.d.ts +0 -23
- package/dist/common/file-uploader/file-upload.js +0 -304
- package/dist/common/file-uploader/upload-button.d.ts +0 -8
- package/dist/common/file-uploader/upload-button.js +0 -74
- package/dist/common/flex-container.d.ts +0 -3
- package/dist/common/flex-container.js +0 -23
- package/dist/common/histogram-plot.d.ts +0 -3
- package/dist/common/histogram-plot.js +0 -120
- package/dist/common/icon-button.d.ts +0 -13
- package/dist/common/icon-button.js +0 -32
- package/dist/common/icons/add.d.ts +0 -9
- package/dist/common/icons/add.js +0 -58
- package/dist/common/icons/anchor_window.d.ts +0 -11
- package/dist/common/icons/anchor_window.js +0 -39
- package/dist/common/icons/arrow-down-alt.d.ts +0 -9
- package/dist/common/icons/arrow-down-alt.js +0 -58
- package/dist/common/icons/arrow-down-small.d.ts +0 -14
- package/dist/common/icons/arrow-down-small.js +0 -72
- package/dist/common/icons/arrow-down-solid.d.ts +0 -9
- package/dist/common/icons/arrow-down-solid.js +0 -58
- package/dist/common/icons/arrow-down.d.ts +0 -9
- package/dist/common/icons/arrow-down.js +0 -58
- package/dist/common/icons/arrow-left.d.ts +0 -9
- package/dist/common/icons/arrow-left.js +0 -61
- package/dist/common/icons/arrow-right.d.ts +0 -9
- package/dist/common/icons/arrow-right.js +0 -58
- package/dist/common/icons/arrow-up-alt.d.ts +0 -9
- package/dist/common/icons/arrow-up-alt.js +0 -59
- package/dist/common/icons/arrow-up-solid.d.ts +0 -9
- package/dist/common/icons/arrow-up-solid.js +0 -58
- package/dist/common/icons/arrow-up.d.ts +0 -9
- package/dist/common/icons/arrow-up.js +0 -58
- package/dist/common/icons/base.d.ts +0 -29
- package/dist/common/icons/base.js +0 -96
- package/dist/common/icons/bug.d.ts +0 -9
- package/dist/common/icons/bug.js +0 -60
- package/dist/common/icons/calendar.d.ts +0 -10
- package/dist/common/icons/calendar.js +0 -66
- package/dist/common/icons/cancel.d.ts +0 -9
- package/dist/common/icons/cancel.js +0 -58
- package/dist/common/icons/checkmark.d.ts +0 -10
- package/dist/common/icons/checkmark.js +0 -65
- package/dist/common/icons/clipboard.d.ts +0 -9
- package/dist/common/icons/clipboard.js +0 -59
- package/dist/common/icons/clock.d.ts +0 -9
- package/dist/common/icons/clock.js +0 -60
- package/dist/common/icons/close.d.ts +0 -9
- package/dist/common/icons/close.js +0 -63
- package/dist/common/icons/code-alt.d.ts +0 -9
- package/dist/common/icons/code-alt.js +0 -62
- package/dist/common/icons/copy.d.ts +0 -9
- package/dist/common/icons/copy.js +0 -64
- package/dist/common/icons/crosshairs.d.ts +0 -9
- package/dist/common/icons/crosshairs.js +0 -62
- package/dist/common/icons/cube-3d.d.ts +0 -9
- package/dist/common/icons/cube-3d.js +0 -62
- package/dist/common/icons/cursor-click.d.ts +0 -9
- package/dist/common/icons/cursor-click.js +0 -62
- package/dist/common/icons/cursor-point.d.ts +0 -14
- package/dist/common/icons/cursor-point.js +0 -69
- package/dist/common/icons/data-table.d.ts +0 -10
- package/dist/common/icons/data-table.js +0 -59
- package/dist/common/icons/db.d.ts +0 -10
- package/dist/common/icons/db.js +0 -59
- package/dist/common/icons/delete.d.ts +0 -9
- package/dist/common/icons/delete.js +0 -60
- package/dist/common/icons/docs.d.ts +0 -9
- package/dist/common/icons/docs.js +0 -74
- package/dist/common/icons/drag-n-drop.d.ts +0 -9
- package/dist/common/icons/drag-n-drop.js +0 -60
- package/dist/common/icons/draw-polygon.d.ts +0 -10
- package/dist/common/icons/draw-polygon.js +0 -78
- package/dist/common/icons/effects/brightness-contrast.d.ts +0 -14
- package/dist/common/icons/effects/brightness-contrast.js +0 -88
- package/dist/common/icons/effects/color-halftone.d.ts +0 -14
- package/dist/common/icons/effects/color-halftone.js +0 -127
- package/dist/common/icons/effects/dot-screen.d.ts +0 -14
- package/dist/common/icons/effects/dot-screen.js +0 -122
- package/dist/common/icons/effects/edge-work.d.ts +0 -14
- package/dist/common/icons/effects/edge-work.js +0 -81
- package/dist/common/icons/effects/hexagonal-pixelate.d.ts +0 -14
- package/dist/common/icons/effects/hexagonal-pixelate.js +0 -148
- package/dist/common/icons/effects/hue-saturation.d.ts +0 -14
- package/dist/common/icons/effects/hue-saturation.js +0 -79
- package/dist/common/icons/effects/ink.d.ts +0 -14
- package/dist/common/icons/effects/ink.js +0 -78
- package/dist/common/icons/effects/light-and-shadow.d.ts +0 -14
- package/dist/common/icons/effects/light-and-shadow.js +0 -67
- package/dist/common/icons/effects/magic-wand.d.ts +0 -14
- package/dist/common/icons/effects/magic-wand.js +0 -79
- package/dist/common/icons/effects/magnify.d.ts +0 -14
- package/dist/common/icons/effects/magnify.js +0 -86
- package/dist/common/icons/effects/noise.d.ts +0 -14
- package/dist/common/icons/effects/noise.js +0 -132
- package/dist/common/icons/effects/sepia.d.ts +0 -14
- package/dist/common/icons/effects/sepia.js +0 -79
- package/dist/common/icons/effects/tilt-shift.d.ts +0 -14
- package/dist/common/icons/effects/tilt-shift.js +0 -88
- package/dist/common/icons/effects/triangle-blur.d.ts +0 -14
- package/dist/common/icons/effects/triangle-blur.js +0 -83
- package/dist/common/icons/effects/vibrance.d.ts +0 -14
- package/dist/common/icons/effects/vibrance.js +0 -79
- package/dist/common/icons/effects/vignette.d.ts +0 -14
- package/dist/common/icons/effects/vignette.js +0 -72
- package/dist/common/icons/effects/zoom-blur.d.ts +0 -14
- package/dist/common/icons/effects/zoom-blur.js +0 -107
- package/dist/common/icons/email.d.ts +0 -9
- package/dist/common/icons/email.js +0 -62
- package/dist/common/icons/expand.d.ts +0 -9
- package/dist/common/icons/expand.js +0 -60
- package/dist/common/icons/eye-seen.d.ts +0 -9
- package/dist/common/icons/eye-seen.js +0 -60
- package/dist/common/icons/eye-unseen.d.ts +0 -9
- package/dist/common/icons/eye-unseen.js +0 -60
- package/dist/common/icons/file-type.d.ts +0 -8
- package/dist/common/icons/file-type.js +0 -45
- package/dist/common/icons/file.d.ts +0 -9
- package/dist/common/icons/file.js +0 -58
- package/dist/common/icons/files.d.ts +0 -9
- package/dist/common/icons/files.js +0 -60
- package/dist/common/icons/filter-funnel.d.ts +0 -9
- package/dist/common/icons/filter-funnel.js +0 -58
- package/dist/common/icons/free-window.d.ts +0 -11
- package/dist/common/icons/free-window.js +0 -39
- package/dist/common/icons/gear.d.ts +0 -9
- package/dist/common/icons/gear.js +0 -60
- package/dist/common/icons/globe.d.ts +0 -15
- package/dist/common/icons/globe.js +0 -72
- package/dist/common/icons/hash.d.ts +0 -9
- package/dist/common/icons/hash.js +0 -58
- package/dist/common/icons/histogram.d.ts +0 -9
- package/dist/common/icons/histogram.js +0 -59
- package/dist/common/icons/index.d.ts +0 -102
- package/dist/common/icons/index.js +0 -812
- package/dist/common/icons/info.d.ts +0 -12
- package/dist/common/icons/info.js +0 -72
- package/dist/common/icons/layers.d.ts +0 -9
- package/dist/common/icons/layers.js +0 -58
- package/dist/common/icons/left-arrow.d.ts +0 -9
- package/dist/common/icons/left-arrow.js +0 -62
- package/dist/common/icons/legend.d.ts +0 -9
- package/dist/common/icons/legend.js +0 -58
- package/dist/common/icons/line-chart.d.ts +0 -9
- package/dist/common/icons/line-chart.js +0 -58
- package/dist/common/icons/location-marker.d.ts +0 -14
- package/dist/common/icons/location-marker.js +0 -77
- package/dist/common/icons/login.d.ts +0 -9
- package/dist/common/icons/login.js +0 -61
- package/dist/common/icons/logout.d.ts +0 -9
- package/dist/common/icons/logout.js +0 -60
- package/dist/common/icons/map-icon.d.ts +0 -11
- package/dist/common/icons/map-icon.js +0 -66
- package/dist/common/icons/map.d.ts +0 -11
- package/dist/common/icons/map.js +0 -66
- package/dist/common/icons/messages.d.ts +0 -9
- package/dist/common/icons/messages.js +0 -58
- package/dist/common/icons/minus.d.ts +0 -9
- package/dist/common/icons/minus.js +0 -58
- package/dist/common/icons/moon.d.ts +0 -14
- package/dist/common/icons/moon.js +0 -77
- package/dist/common/icons/order-by-dataset.d.ts +0 -12
- package/dist/common/icons/order-by-dataset.js +0 -39
- package/dist/common/icons/order-by-list.d.ts +0 -12
- package/dist/common/icons/order-by-list.js +0 -31
- package/dist/common/icons/pause.d.ts +0 -9
- package/dist/common/icons/pause.js +0 -58
- package/dist/common/icons/picture.d.ts +0 -9
- package/dist/common/icons/picture.js +0 -60
- package/dist/common/icons/pin.d.ts +0 -9
- package/dist/common/icons/pin.js +0 -66
- package/dist/common/icons/play.d.ts +0 -9
- package/dist/common/icons/play.js +0 -58
- package/dist/common/icons/polygon.d.ts +0 -10
- package/dist/common/icons/polygon.js +0 -80
- package/dist/common/icons/rectangle.d.ts +0 -10
- package/dist/common/icons/rectangle.js +0 -81
- package/dist/common/icons/reduce.d.ts +0 -9
- package/dist/common/icons/reduce.js +0 -61
- package/dist/common/icons/reset.d.ts +0 -9
- package/dist/common/icons/reset.js +0 -58
- package/dist/common/icons/rocket.d.ts +0 -9
- package/dist/common/icons/rocket.js +0 -58
- package/dist/common/icons/save.d.ts +0 -9
- package/dist/common/icons/save.js +0 -60
- package/dist/common/icons/save2.d.ts +0 -9
- package/dist/common/icons/save2.js +0 -64
- package/dist/common/icons/search.d.ts +0 -9
- package/dist/common/icons/search.js +0 -60
- package/dist/common/icons/settings.d.ts +0 -9
- package/dist/common/icons/settings.js +0 -60
- package/dist/common/icons/share.d.ts +0 -9
- package/dist/common/icons/share.js +0 -58
- package/dist/common/icons/split.d.ts +0 -9
- package/dist/common/icons/split.js +0 -86
- package/dist/common/icons/square-select.d.ts +0 -9
- package/dist/common/icons/square-select.js +0 -60
- package/dist/common/icons/sun.d.ts +0 -14
- package/dist/common/icons/sun.js +0 -93
- package/dist/common/icons/sunrise.d.ts +0 -14
- package/dist/common/icons/sunrise.js +0 -89
- package/dist/common/icons/sunset.d.ts +0 -14
- package/dist/common/icons/sunset.js +0 -89
- package/dist/common/icons/trash.d.ts +0 -9
- package/dist/common/icons/trash.js +0 -60
- package/dist/common/icons/vert-dots.d.ts +0 -9
- package/dist/common/icons/vert-dots.js +0 -96
- package/dist/common/icons/vert-three-dots.d.ts +0 -9
- package/dist/common/icons/vert-three-dots.js +0 -71
- package/dist/common/icons/warning-sign.d.ts +0 -15
- package/dist/common/icons/warning-sign.js +0 -80
- package/dist/common/icons/warning.d.ts +0 -10
- package/dist/common/icons/warning.js +0 -73
- package/dist/common/image-preview.d.ts +0 -15
- package/dist/common/image-preview.js +0 -71
- package/dist/common/index.d.ts +0 -3
- package/dist/common/index.js +0 -273
- package/dist/common/info-helper.d.ts +0 -10
- package/dist/common/info-helper.js +0 -75
- package/dist/common/item-selector/accessor.d.ts +0 -7
- package/dist/common/item-selector/accessor.js +0 -39
- package/dist/common/item-selector/chickleted-input.d.ts +0 -22
- package/dist/common/item-selector/chickleted-input.js +0 -176
- package/dist/common/item-selector/dropdown-list.d.ts +0 -72
- package/dist/common/item-selector/dropdown-list.js +0 -295
- package/dist/common/item-selector/item-selector.d.ts +0 -47
- package/dist/common/item-selector/item-selector.js +0 -351
- package/dist/common/item-selector/typeahead.d.ts +0 -117
- package/dist/common/item-selector/typeahead.js +0 -498
- package/dist/common/line-chart.d.ts +0 -34
- package/dist/common/line-chart.js +0 -126
- package/dist/common/loading-spinner.d.ts +0 -9
- package/dist/common/loading-spinner.js +0 -56
- package/dist/common/logo.d.ts +0 -8
- package/dist/common/logo.js +0 -82
- package/dist/common/map-layer-selector.d.ts +0 -13
- package/dist/common/map-layer-selector.js +0 -48
- package/dist/common/modal.d.ts +0 -64
- package/dist/common/modal.js +0 -208
- package/dist/common/portaled.d.ts +0 -578
- package/dist/common/portaled.js +0 -340
- package/dist/common/progress-bar.d.ts +0 -12
- package/dist/common/progress-bar.js +0 -54
- package/dist/common/range-brush.d.ts +0 -19
- package/dist/common/range-brush.js +0 -326
- package/dist/common/range-plot.d.ts +0 -39
- package/dist/common/range-plot.js +0 -137
- package/dist/common/range-slider.d.ts +0 -34
- package/dist/common/range-slider.js +0 -329
- package/dist/common/slider/mouse-event.d.ts +0 -27
- package/dist/common/slider/mouse-event.js +0 -129
- package/dist/common/slider/slider-bar-handle.d.ts +0 -29
- package/dist/common/slider/slider-bar-handle.js +0 -115
- package/dist/common/slider/slider-handle.d.ts +0 -33
- package/dist/common/slider/slider-handle.js +0 -162
- package/dist/common/slider/slider.d.ts +0 -72
- package/dist/common/slider/slider.js +0 -247
- package/dist/common/styled-components.d.ts +0 -128
- package/dist/common/styled-components.js +0 -531
- package/dist/common/switch.d.ts +0 -16
- package/dist/common/switch.js +0 -30
- package/dist/common/time-range-slider-time-title.d.ts +0 -9
- package/dist/common/time-range-slider-time-title.js +0 -74
- package/dist/common/time-range-slider.d.ts +0 -35
- package/dist/common/time-range-slider.js +0 -131
- package/dist/common/time-slider-marker.d.ts +0 -21
- package/dist/common/time-slider-marker.js +0 -141
- package/dist/common/timeline-slider.d.ts +0 -13
- package/dist/common/timeline-slider.js +0 -153
- package/dist/common/tippy-tooltip.d.ts +0 -6
- package/dist/common/tippy-tooltip.js +0 -134
- package/dist/common/toolbar-item.d.ts +0 -14
- package/dist/common/toolbar-item.js +0 -73
- package/dist/common/toolbar.d.ts +0 -5
- package/dist/common/toolbar.js +0 -33
- package/dist/common/vertical-toolbar.d.ts +0 -3
- package/dist/common/vertical-toolbar.js +0 -22
- package/dist/connect/keplergl-connect.d.ts +0 -9
- package/dist/connect/keplergl-connect.js +0 -51
- package/dist/connect/with-local-selector.d.ts +0 -6
- package/dist/connect/with-local-selector.js +0 -110
- package/dist/container.d.ts +0 -39
- package/dist/container.js +0 -222
- package/dist/context.d.ts +0 -27
- package/dist/context.js +0 -49
- package/dist/dnd-context.d.ts +0 -13
- package/dist/dnd-context.js +0 -157
- package/dist/editor/editor.d.ts +0 -31
- package/dist/editor/editor.js +0 -253
- package/dist/editor/feature-action-panel.d.ts +0 -32
- package/dist/editor/feature-action-panel.js +0 -171
- package/dist/effects/compact-color-picker.d.ts +0 -10
- package/dist/effects/compact-color-picker.js +0 -130
- package/dist/effects/effect-configurator.d.ts +0 -17
- package/dist/effects/effect-configurator.js +0 -302
- package/dist/effects/effect-list.d.ts +0 -15
- package/dist/effects/effect-list.js +0 -153
- package/dist/effects/effect-manager.d.ts +0 -22
- package/dist/effects/effect-manager.js +0 -142
- package/dist/effects/effect-panel-header.d.ts +0 -45
- package/dist/effects/effect-panel-header.js +0 -206
- package/dist/effects/effect-panel.d.ts +0 -24
- package/dist/effects/effect-panel.js +0 -149
- package/dist/effects/effect-time-configurator.d.ts +0 -20
- package/dist/effects/effect-time-configurator.js +0 -340
- package/dist/effects/effect-time-selector.d.ts +0 -16
- package/dist/effects/effect-time-selector.js +0 -181
- package/dist/effects/effect-time-slider.d.ts +0 -34
- package/dist/effects/effect-time-slider.js +0 -220
- package/dist/effects/effect-type-dropdown-list.d.ts +0 -18
- package/dist/effects/effect-type-dropdown-list.js +0 -77
- package/dist/effects/effect-type-list-item.d.ts +0 -22
- package/dist/effects/effect-type-list-item.js +0 -105
- package/dist/effects/effect-type-selector.d.ts +0 -30
- package/dist/effects/effect-type-selector.js +0 -92
- package/dist/effects/side-panel-title.d.ts +0 -7
- package/dist/effects/side-panel-title.js +0 -47
- package/dist/effects/timezone-selector.d.ts +0 -19
- package/dist/effects/timezone-selector.js +0 -71
- package/dist/filter-animation-controller.d.ts +0 -17
- package/dist/filter-animation-controller.js +0 -73
- package/dist/filters/components.d.ts +0 -3
- package/dist/filters/components.js +0 -20
- package/dist/filters/filter-panels/filter-panel-with-field-select.d.ts +0 -10
- package/dist/filters/filter-panels/filter-panel-with-field-select.js +0 -90
- package/dist/filters/filter-panels/multi-select-filter-panel.d.ts +0 -9
- package/dist/filters/filter-panels/multi-select-filter-panel.js +0 -56
- package/dist/filters/filter-panels/new-filter-panel.d.ts +0 -12
- package/dist/filters/filter-panels/new-filter-panel.js +0 -78
- package/dist/filters/filter-panels/polygon-filter-panel.d.ts +0 -9
- package/dist/filters/filter-panels/polygon-filter-panel.js +0 -80
- package/dist/filters/filter-panels/range-filter-panel.d.ts +0 -9
- package/dist/filters/filter-panels/range-filter-panel.js +0 -56
- package/dist/filters/filter-panels/single-select-filter-panel.d.ts +0 -9
- package/dist/filters/filter-panels/single-select-filter-panel.js +0 -56
- package/dist/filters/filter-panels/time-range-filter-panel.d.ts +0 -8
- package/dist/filters/filter-panels/time-range-filter-panel.js +0 -84
- package/dist/filters/filter-panels/types.d.ts +0 -36
- package/dist/filters/filter-panels/types.js +0 -6
- package/dist/filters/index.d.ts +0 -7
- package/dist/filters/index.js +0 -64
- package/dist/filters/multi-select-filter.d.ts +0 -3
- package/dist/filters/multi-select-filter.js +0 -37
- package/dist/filters/polygon-filter.d.ts +0 -4
- package/dist/filters/polygon-filter.js +0 -88
- package/dist/filters/range-filter.d.ts +0 -8
- package/dist/filters/range-filter.js +0 -38
- package/dist/filters/single-select-filter.d.ts +0 -3
- package/dist/filters/single-select-filter.js +0 -46
- package/dist/filters/time-range-filter.d.ts +0 -29
- package/dist/filters/time-range-filter.js +0 -72
- package/dist/filters/time-widget-top.d.ts +0 -8
- package/dist/filters/time-widget-top.js +0 -103
- package/dist/filters/time-widget.d.ts +0 -10
- package/dist/filters/time-widget.js +0 -115
- package/dist/filters/types.d.ts +0 -58
- package/dist/filters/types.js +0 -6
- package/dist/geocoder/geocoder.d.ts +0 -31
- package/dist/geocoder/geocoder.js +0 -319
- package/dist/geocoder-panel.d.ts +0 -31
- package/dist/geocoder-panel.js +0 -232
- package/dist/hooks/use-cloud-list-provider.d.ts +0 -11
- package/dist/hooks/use-cloud-list-provider.js +0 -57
- package/dist/hooks/use-dnd-effects.d.ts +0 -9
- package/dist/hooks/use-dnd-effects.js +0 -88
- package/dist/hooks/use-dnd-layers.d.ts +0 -9
- package/dist/hooks/use-dnd-layers.js +0 -95
- package/dist/hooks/use-feature-flags.d.ts +0 -5
- package/dist/hooks/use-feature-flags.js +0 -21
- package/dist/index.d.ts +0 -233
- package/dist/index.js +0 -2514
- package/dist/injector.d.ts +0 -29
- package/dist/injector.js +0 -178
- package/dist/kepler-gl.d.ts +0 -323
- package/dist/kepler-gl.js +0 -603
- package/dist/layer-animation-controller.d.ts +0 -13
- package/dist/layer-animation-controller.js +0 -58
- package/dist/map/coordinate-info.d.ts +0 -7
- package/dist/map/coordinate-info.js +0 -51
- package/dist/map/effects/effect-control.d.ts +0 -16
- package/dist/map/effects/effect-control.js +0 -62
- package/dist/map/layer-hover-info.d.ts +0 -13
- package/dist/map/layer-hover-info.js +0 -224
- package/dist/map/layer-selector-panel.d.ts +0 -21
- package/dist/map/layer-selector-panel.js +0 -98
- package/dist/map/lazy-tippy.d.ts +0 -7
- package/dist/map/lazy-tippy.js +0 -74
- package/dist/map/locale-panel.d.ts +0 -16
- package/dist/map/locale-panel.js +0 -91
- package/dist/map/map-control-panel.d.ts +0 -19
- package/dist/map/map-control-panel.js +0 -152
- package/dist/map/map-control-toolbar.d.ts +0 -2
- package/dist/map/map-control-toolbar.js +0 -25
- package/dist/map/map-control-tooltip.d.ts +0 -8
- package/dist/map/map-control-tooltip.js +0 -41
- package/dist/map/map-control.d.ts +0 -53
- package/dist/map/map-control.js +0 -80
- package/dist/map/map-draw-panel.d.ts +0 -20
- package/dist/map/map-draw-panel.js +0 -114
- package/dist/map/map-legend-panel.d.ts +0 -35
- package/dist/map/map-legend-panel.js +0 -178
- package/dist/map/map-legend.d.ts +0 -55
- package/dist/map/map-legend.js +0 -254
- package/dist/map/map-popover-content.d.ts +0 -28
- package/dist/map/map-popover-content.js +0 -35
- package/dist/map/map-popover.d.ts +0 -33
- package/dist/map/map-popover.js +0 -276
- package/dist/map/split-map-button.d.ts +0 -20
- package/dist/map/split-map-button.js +0 -76
- package/dist/map/toggle-3d-button.d.ts +0 -17
- package/dist/map/toggle-3d-button.js +0 -65
- package/dist/map-container.d.ts +0 -72
- package/dist/map-container.js +0 -1003
- package/dist/map-view-state-context.d.ts +0 -17
- package/dist/map-view-state-context.js +0 -117
- package/dist/maps-layout.d.ts +0 -12
- package/dist/maps-layout.js +0 -64
- package/dist/modal-container.d.ts +0 -59
- package/dist/modal-container.js +0 -473
- package/dist/modals/add-map-style-modal.d.ts +0 -16
- package/dist/modals/add-map-style-modal.js +0 -242
- package/dist/modals/cloud-components/cloud-header.d.ts +0 -8
- package/dist/modals/cloud-components/cloud-header.js +0 -65
- package/dist/modals/cloud-components/cloud-item.d.ts +0 -5
- package/dist/modals/cloud-components/cloud-item.js +0 -72
- package/dist/modals/cloud-components/cloud-item.spec.d.ts +0 -1
- package/dist/modals/cloud-components/cloud-item.spec.js +0 -105
- package/dist/modals/cloud-components/cloud-maps.d.ts +0 -8
- package/dist/modals/cloud-components/cloud-maps.js +0 -63
- package/dist/modals/cloud-components/cloud-maps.spec.d.ts +0 -1
- package/dist/modals/cloud-components/cloud-maps.spec.js +0 -112
- package/dist/modals/cloud-components/provider-loading.d.ts +0 -2
- package/dist/modals/cloud-components/provider-loading.js +0 -29
- package/dist/modals/cloud-components/provider-select.d.ts +0 -7
- package/dist/modals/cloud-components/provider-select.js +0 -40
- package/dist/modals/cloud-tile.d.ts +0 -15
- package/dist/modals/cloud-tile.js +0 -253
- package/dist/modals/data-table-modal.d.ts +0 -37
- package/dist/modals/data-table-modal.js +0 -316
- package/dist/modals/delete-data-modal.d.ts +0 -10
- package/dist/modals/delete-data-modal.js +0 -54
- package/dist/modals/error-display.d.ts +0 -6
- package/dist/modals/error-display.js +0 -39
- package/dist/modals/export-data-modal.d.ts +0 -23
- package/dist/modals/export-data-modal.js +0 -212
- package/dist/modals/export-image-modal.d.ts +0 -16
- package/dist/modals/export-image-modal.js +0 -136
- package/dist/modals/export-map-modal/components.d.ts +0 -8
- package/dist/modals/export-map-modal/components.js +0 -51
- package/dist/modals/export-map-modal/export-html-map.d.ts +0 -12
- package/dist/modals/export-map-modal/export-html-map.js +0 -138
- package/dist/modals/export-map-modal/export-json-map.d.ts +0 -9
- package/dist/modals/export-map-modal/export-json-map.js +0 -100
- package/dist/modals/export-map-modal/export-map-modal.d.ts +0 -27
- package/dist/modals/export-map-modal/export-map-modal.js +0 -103
- package/dist/modals/image-modal-container.d.ts +0 -16
- package/dist/modals/image-modal-container.js +0 -64
- package/dist/modals/load-data-modal.d.ts +0 -36
- package/dist/modals/load-data-modal.js +0 -98
- package/dist/modals/load-storage-map.d.ts +0 -5
- package/dist/modals/load-storage-map.js +0 -95
- package/dist/modals/load-storage-map.spec.d.ts +0 -1
- package/dist/modals/load-storage-map.spec.js +0 -237
- package/dist/modals/loading-dialog.d.ts +0 -7
- package/dist/modals/loading-dialog.js +0 -48
- package/dist/modals/modal-dialog.d.ts +0 -2
- package/dist/modals/modal-dialog.js +0 -20
- package/dist/modals/modal-tabs.d.ts +0 -27
- package/dist/modals/modal-tabs.js +0 -99
- package/dist/modals/overwrite-map-modal.d.ts +0 -16
- package/dist/modals/overwrite-map-modal.js +0 -107
- package/dist/modals/save-map-modal.d.ts +0 -28
- package/dist/modals/save-map-modal.js +0 -206
- package/dist/modals/save-map-modal.spec.d.ts +0 -1
- package/dist/modals/save-map-modal.spec.js +0 -218
- package/dist/modals/share-map-modal.d.ts +0 -26
- package/dist/modals/share-map-modal.js +0 -195
- package/dist/modals/share-map-modal.spec.d.ts +0 -1
- package/dist/modals/share-map-modal.spec.js +0 -202
- package/dist/modals/status-panel.d.ts +0 -13
- package/dist/modals/status-panel.js +0 -83
- package/dist/modals/storage-map-viewer.d.ts +0 -21
- package/dist/modals/storage-map-viewer.js +0 -127
- package/dist/notification-panel/notification-item.d.ts +0 -67
- package/dist/notification-panel/notification-item.js +0 -185
- package/dist/notification-panel.d.ts +0 -13
- package/dist/notification-panel.js +0 -86
- package/dist/plot-container.d.ts +0 -24
- package/dist/plot-container.js +0 -268
- package/dist/side-panel/add-by-dataset-button.d.ts +0 -12
- package/dist/side-panel/add-by-dataset-button.js +0 -153
- package/dist/side-panel/cloud-storage-dropdown.d.ts +0 -6
- package/dist/side-panel/cloud-storage-dropdown.js +0 -46
- package/dist/side-panel/common/dataset-info.d.ts +0 -10
- package/dist/side-panel/common/dataset-info.js +0 -43
- package/dist/side-panel/common/dataset-tag.d.ts +0 -17
- package/dist/side-panel/common/dataset-tag.js +0 -72
- package/dist/side-panel/common/dataset-title.d.ts +0 -22
- package/dist/side-panel/common/dataset-title.js +0 -171
- package/dist/side-panel/common/source-data-catalog.d.ts +0 -28
- package/dist/side-panel/common/source-data-catalog.js +0 -62
- package/dist/side-panel/common/source-data-selector.d.ts +0 -8
- package/dist/side-panel/common/source-data-selector.js +0 -80
- package/dist/side-panel/common/types.d.ts +0 -43
- package/dist/side-panel/common/types.js +0 -6
- package/dist/side-panel/custom-panel.d.ts +0 -8
- package/dist/side-panel/custom-panel.js +0 -43
- package/dist/side-panel/filter-manager.d.ts +0 -32
- package/dist/side-panel/filter-manager.js +0 -223
- package/dist/side-panel/filter-panel/add-filter-button.d.ts +0 -8
- package/dist/side-panel/filter-panel/add-filter-button.js +0 -34
- package/dist/side-panel/filter-panel/filter-panel-header.d.ts +0 -24
- package/dist/side-panel/filter-panel/filter-panel-header.js +0 -67
- package/dist/side-panel/filter-panel/filter-panel.d.ts +0 -23
- package/dist/side-panel/filter-panel/filter-panel.js +0 -131
- package/dist/side-panel/interaction-manager.d.ts +0 -18
- package/dist/side-panel/interaction-manager.js +0 -54
- package/dist/side-panel/interaction-panel/brush-config.d.ts +0 -15
- package/dist/side-panel/interaction-panel/brush-config.js +0 -54
- package/dist/side-panel/interaction-panel/interaction-panel.d.ts +0 -21
- package/dist/side-panel/interaction-panel/interaction-panel.js +0 -143
- package/dist/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.d.ts +0 -30
- package/dist/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.js +0 -266
- package/dist/side-panel/interaction-panel/tooltip-config.d.ts +0 -37
- package/dist/side-panel/interaction-panel/tooltip-config.js +0 -176
- package/dist/side-panel/layer-manager.d.ts +0 -42
- package/dist/side-panel/layer-manager.js +0 -240
- package/dist/side-panel/layer-panel/add-layer-button.d.ts +0 -8
- package/dist/side-panel/layer-panel/add-layer-button.js +0 -34
- package/dist/side-panel/layer-panel/color-palette.d.ts +0 -11
- package/dist/side-panel/layer-panel/color-palette.js +0 -71
- package/dist/side-panel/layer-panel/color-range-selector.d.ts +0 -47
- package/dist/side-panel/layer-panel/color-range-selector.js +0 -270
- package/dist/side-panel/layer-panel/color-selector.d.ts +0 -33
- package/dist/side-panel/layer-panel/color-selector.js +0 -253
- package/dist/side-panel/layer-panel/column-selector.d.ts +0 -22
- package/dist/side-panel/layer-panel/column-selector.js +0 -65
- package/dist/side-panel/layer-panel/custom-palette.d.ts +0 -43
- package/dist/side-panel/layer-panel/custom-palette.js +0 -293
- package/dist/side-panel/layer-panel/custom-picker.d.ts +0 -24
- package/dist/side-panel/layer-panel/custom-picker.js +0 -116
- package/dist/side-panel/layer-panel/dataset-layer-group.d.ts +0 -22
- package/dist/side-panel/layer-panel/dataset-layer-group.js +0 -71
- package/dist/side-panel/layer-panel/dataset-layer-section.d.ts +0 -24
- package/dist/side-panel/layer-panel/dataset-layer-section.js +0 -70
- package/dist/side-panel/layer-panel/dataset-section.d.ts +0 -23
- package/dist/side-panel/layer-panel/dataset-section.js +0 -91
- package/dist/side-panel/layer-panel/dimension-scale-selector.d.ts +0 -10
- package/dist/side-panel/layer-panel/dimension-scale-selector.js +0 -44
- package/dist/side-panel/layer-panel/how-to-button.d.ts +0 -6
- package/dist/side-panel/layer-panel/how-to-button.js +0 -38
- package/dist/side-panel/layer-panel/layer-color-selector.d.ts +0 -42
- package/dist/side-panel/layer-panel/layer-color-selector.js +0 -118
- package/dist/side-panel/layer-panel/layer-column-config.d.ts +0 -25
- package/dist/side-panel/layer-panel/layer-column-config.js +0 -109
- package/dist/side-panel/layer-panel/layer-config-group.d.ts +0 -44
- package/dist/side-panel/layer-panel/layer-config-group.js +0 -176
- package/dist/side-panel/layer-panel/layer-configurator.d.ts +0 -75
- package/dist/side-panel/layer-panel/layer-configurator.js +0 -735
- package/dist/side-panel/layer-panel/layer-error-message.d.ts +0 -6
- package/dist/side-panel/layer-panel/layer-error-message.js +0 -38
- package/dist/side-panel/layer-panel/layer-list.d.ts +0 -20
- package/dist/side-panel/layer-panel/layer-list.js +0 -191
- package/dist/side-panel/layer-panel/layer-panel-header.d.ts +0 -75
- package/dist/side-panel/layer-panel/layer-panel-header.js +0 -310
- package/dist/side-panel/layer-panel/layer-panel.d.ts +0 -38
- package/dist/side-panel/layer-panel/layer-panel.js +0 -194
- package/dist/side-panel/layer-panel/layer-type-dropdown-list.d.ts +0 -22
- package/dist/side-panel/layer-panel/layer-type-dropdown-list.js +0 -89
- package/dist/side-panel/layer-panel/layer-type-list-item.d.ts +0 -22
- package/dist/side-panel/layer-panel/layer-type-list-item.js +0 -77
- package/dist/side-panel/layer-panel/layer-type-selector.d.ts +0 -22
- package/dist/side-panel/layer-panel/layer-type-selector.js +0 -73
- package/dist/side-panel/layer-panel/single-color-palette.d.ts +0 -9
- package/dist/side-panel/layer-panel/single-color-palette.js +0 -61
- package/dist/side-panel/layer-panel/text-label-panel.d.ts +0 -17
- package/dist/side-panel/layer-panel/text-label-panel.js +0 -198
- package/dist/side-panel/layer-panel/vis-config-by-field-selector.d.ts +0 -27
- package/dist/side-panel/layer-panel/vis-config-by-field-selector.js +0 -117
- package/dist/side-panel/layer-panel/vis-config-slider.d.ts +0 -20
- package/dist/side-panel/layer-panel/vis-config-slider.js +0 -190
- package/dist/side-panel/layer-panel/vis-config-switch.d.ts +0 -16
- package/dist/side-panel/layer-panel/vis-config-switch.js +0 -71
- package/dist/side-panel/map-manager.d.ts +0 -27
- package/dist/side-panel/map-manager.js +0 -159
- package/dist/side-panel/map-style-panel/map-layer-group-color-picker.d.ts +0 -14
- package/dist/side-panel/map-style-panel/map-layer-group-color-picker.js +0 -96
- package/dist/side-panel/map-style-panel/map-layer-group-item.d.ts +0 -29
- package/dist/side-panel/map-style-panel/map-layer-group-item.js +0 -111
- package/dist/side-panel/map-style-panel/map-layer-selector.d.ts +0 -23
- package/dist/side-panel/map-style-panel/map-layer-selector.js +0 -91
- package/dist/side-panel/map-style-panel/map-style-selector.d.ts +0 -23
- package/dist/side-panel/map-style-panel/map-style-selector.js +0 -112
- package/dist/side-panel/panel-dropdown.d.ts +0 -18
- package/dist/side-panel/panel-dropdown.js +0 -79
- package/dist/side-panel/panel-header-action.d.ts +0 -22
- package/dist/side-panel/panel-header-action.js +0 -87
- package/dist/side-panel/panel-header.d.ts +0 -84
- package/dist/side-panel/panel-header.js +0 -341
- package/dist/side-panel/panel-tab.d.ts +0 -20
- package/dist/side-panel/panel-tab.js +0 -68
- package/dist/side-panel/panel-title.d.ts +0 -7
- package/dist/side-panel/panel-title.js +0 -51
- package/dist/side-panel/panel-toggle.d.ts +0 -13
- package/dist/side-panel/panel-toggle.js +0 -60
- package/dist/side-panel/panel-view-list-toggle.d.ts +0 -47
- package/dist/side-panel/panel-view-list-toggle.js +0 -123
- package/dist/side-panel/side-bar.d.ts +0 -78
- package/dist/side-panel/side-bar.js +0 -159
- package/dist/side-panel.d.ts +0 -19
- package/dist/side-panel.js +0 -239
- package/dist/types.d.ts +0 -47
- package/dist/types.js +0 -6
|
@@ -1,735 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
|
|
6
|
-
|
|
7
|
-
Object.defineProperty(exports, "__esModule", {
|
|
8
|
-
value: true
|
|
9
|
-
});
|
|
10
|
-
exports["default"] = LayerConfiguratorFactory;
|
|
11
|
-
exports.ChannelByValueSelectorFactory = ChannelByValueSelectorFactory;
|
|
12
|
-
exports.AggregationTypeSelector = exports.AggregationScaleSelector = exports.getLayerChannelConfigProps = exports.getVisConfiguratorProps = exports.getLayerConfiguratorProps = exports.getLayerDataset = exports.getLayerFields = void 0;
|
|
13
|
-
|
|
14
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
15
|
-
|
|
16
|
-
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
17
|
-
|
|
18
|
-
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
19
|
-
|
|
20
|
-
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
21
|
-
|
|
22
|
-
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
23
|
-
|
|
24
|
-
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
25
|
-
|
|
26
|
-
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
27
|
-
|
|
28
|
-
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
29
|
-
|
|
30
|
-
var _react = _interopRequireWildcard(require("react"));
|
|
31
|
-
|
|
32
|
-
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
33
|
-
|
|
34
|
-
var _localization = require("@kepler.gl/localization");
|
|
35
|
-
|
|
36
|
-
var _styledComponents2 = require("../../common/styled-components");
|
|
37
|
-
|
|
38
|
-
var _itemSelector = _interopRequireDefault(require("../../common/item-selector/item-selector"));
|
|
39
|
-
|
|
40
|
-
var _visConfigByFieldSelector = _interopRequireDefault(require("./vis-config-by-field-selector"));
|
|
41
|
-
|
|
42
|
-
var _layerColumnConfig = _interopRequireDefault(require("./layer-column-config"));
|
|
43
|
-
|
|
44
|
-
var _layerTypeSelector = _interopRequireDefault(require("./layer-type-selector"));
|
|
45
|
-
|
|
46
|
-
var _dimensionScaleSelector = _interopRequireDefault(require("./dimension-scale-selector"));
|
|
47
|
-
|
|
48
|
-
var _sourceDataSelector = _interopRequireDefault(require("../common/source-data-selector"));
|
|
49
|
-
|
|
50
|
-
var _visConfigSwitch = _interopRequireDefault(require("./vis-config-switch"));
|
|
51
|
-
|
|
52
|
-
var _visConfigSlider = _interopRequireDefault(require("./vis-config-slider"));
|
|
53
|
-
|
|
54
|
-
var _layerConfigGroup = _interopRequireWildcard(require("./layer-config-group"));
|
|
55
|
-
|
|
56
|
-
var _textLabelPanel = _interopRequireDefault(require("./text-label-panel"));
|
|
57
|
-
|
|
58
|
-
var _layerColorSelector = require("./layer-color-selector");
|
|
59
|
-
|
|
60
|
-
var _howToButton = _interopRequireDefault(require("./how-to-button"));
|
|
61
|
-
|
|
62
|
-
var _layerErrorMessage = _interopRequireDefault(require("./layer-error-message"));
|
|
63
|
-
|
|
64
|
-
var _utils = require("@kepler.gl/utils");
|
|
65
|
-
|
|
66
|
-
var _constants = require("@kepler.gl/constants");
|
|
67
|
-
|
|
68
|
-
var _templateObject, _templateObject2;
|
|
69
|
-
|
|
70
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
71
|
-
|
|
72
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
73
|
-
|
|
74
|
-
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
|
|
75
|
-
|
|
76
|
-
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
77
|
-
|
|
78
|
-
var StyledLayerConfigurator = _styledComponents["default"].div.attrs({
|
|
79
|
-
className: 'layer-panel__config'
|
|
80
|
-
})(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n position: relative;\n margin-top: ", ";\n padding: ", ";\n border-left: ", " dashed\n ", ";\n"])), function (props) {
|
|
81
|
-
return props.theme.layerConfiguratorMargin;
|
|
82
|
-
}, function (props) {
|
|
83
|
-
return props.theme.layerConfiguratorPadding;
|
|
84
|
-
}, function (props) {
|
|
85
|
-
return props.theme.layerConfiguratorBorder;
|
|
86
|
-
}, function (props) {
|
|
87
|
-
return props.theme.layerConfiguratorBorderColor;
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
var StyledLayerVisualConfigurator = _styledComponents["default"].div.attrs({
|
|
91
|
-
className: 'layer-panel__config__visualC-config'
|
|
92
|
-
})(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n margin-top: 12px;\n"])));
|
|
93
|
-
|
|
94
|
-
var getLayerFields = function getLayerFields(datasets, layer) {
|
|
95
|
-
var _layer$config;
|
|
96
|
-
|
|
97
|
-
return (_layer$config = layer.config) !== null && _layer$config !== void 0 && _layer$config.dataId && datasets[layer.config.dataId] ? datasets[layer.config.dataId].fields : [];
|
|
98
|
-
};
|
|
99
|
-
/** Return any to be able to customize the Dataset entity */
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
exports.getLayerFields = getLayerFields;
|
|
103
|
-
|
|
104
|
-
var getLayerDataset = function getLayerDataset(datasets, layer) {
|
|
105
|
-
var _layer$config2;
|
|
106
|
-
|
|
107
|
-
return (_layer$config2 = layer.config) !== null && _layer$config2 !== void 0 && _layer$config2.dataId && datasets[layer.config.dataId] ? datasets[layer.config.dataId] : null;
|
|
108
|
-
};
|
|
109
|
-
|
|
110
|
-
exports.getLayerDataset = getLayerDataset;
|
|
111
|
-
|
|
112
|
-
var getLayerConfiguratorProps = function getLayerConfiguratorProps(props) {
|
|
113
|
-
return {
|
|
114
|
-
layer: props.layer,
|
|
115
|
-
fields: getLayerFields(props.datasets, props.layer),
|
|
116
|
-
onChange: props.updateLayerConfig,
|
|
117
|
-
setColorUI: props.updateLayerColorUI
|
|
118
|
-
};
|
|
119
|
-
};
|
|
120
|
-
|
|
121
|
-
exports.getLayerConfiguratorProps = getLayerConfiguratorProps;
|
|
122
|
-
|
|
123
|
-
var getVisConfiguratorProps = function getVisConfiguratorProps(props) {
|
|
124
|
-
return {
|
|
125
|
-
layer: props.layer,
|
|
126
|
-
fields: getLayerFields(props.datasets, props.layer),
|
|
127
|
-
onChange: props.updateLayerVisConfig,
|
|
128
|
-
setColorUI: props.updateLayerColorUI
|
|
129
|
-
};
|
|
130
|
-
};
|
|
131
|
-
|
|
132
|
-
exports.getVisConfiguratorProps = getVisConfiguratorProps;
|
|
133
|
-
|
|
134
|
-
var getLayerChannelConfigProps = function getLayerChannelConfigProps(props) {
|
|
135
|
-
return {
|
|
136
|
-
layer: props.layer,
|
|
137
|
-
fields: getLayerFields(props.datasets, props.layer),
|
|
138
|
-
onChange: props.updateLayerVisualChannelConfig
|
|
139
|
-
};
|
|
140
|
-
};
|
|
141
|
-
|
|
142
|
-
exports.getLayerChannelConfigProps = getLayerChannelConfigProps;
|
|
143
|
-
LayerConfiguratorFactory.deps = [_sourceDataSelector["default"], _visConfigSlider["default"], _textLabelPanel["default"], _layerConfigGroup["default"], ChannelByValueSelectorFactory, _layerColumnConfig["default"], _layerTypeSelector["default"], _visConfigSwitch["default"], _layerColorSelector.LayerColorSelectorFactory, _layerColorSelector.LayerColorRangeSelectorFactory, _layerColorSelector.ArcLayerColorSelectorFactory];
|
|
144
|
-
|
|
145
|
-
function LayerConfiguratorFactory(SourceDataSelector, VisConfigSlider, TextLabelPanel, LayerConfigGroup, ChannelByValueSelector, LayerColumnConfig, LayerTypeSelector, VisConfigSwitch, LayerColorSelector, LayerColorRangeSelector, ArcLayerColorSelector) {
|
|
146
|
-
var LayerConfigurator = /*#__PURE__*/function (_Component) {
|
|
147
|
-
(0, _inherits2["default"])(LayerConfigurator, _Component);
|
|
148
|
-
|
|
149
|
-
var _super = _createSuper(LayerConfigurator);
|
|
150
|
-
|
|
151
|
-
function LayerConfigurator() {
|
|
152
|
-
(0, _classCallCheck2["default"])(this, LayerConfigurator);
|
|
153
|
-
return _super.apply(this, arguments);
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
(0, _createClass2["default"])(LayerConfigurator, [{
|
|
157
|
-
key: "_renderPointLayerConfig",
|
|
158
|
-
value: function _renderPointLayerConfig(props) {
|
|
159
|
-
return this._renderScatterplotLayerConfig(props);
|
|
160
|
-
}
|
|
161
|
-
}, {
|
|
162
|
-
key: "_renderIconLayerConfig",
|
|
163
|
-
value: function _renderIconLayerConfig(props) {
|
|
164
|
-
return this._renderScatterplotLayerConfig(props);
|
|
165
|
-
}
|
|
166
|
-
}, {
|
|
167
|
-
key: "_renderScatterplotLayerConfig",
|
|
168
|
-
value: function _renderScatterplotLayerConfig(_ref) {
|
|
169
|
-
var layer = _ref.layer,
|
|
170
|
-
visConfiguratorProps = _ref.visConfiguratorProps,
|
|
171
|
-
layerChannelConfigProps = _ref.layerChannelConfigProps,
|
|
172
|
-
layerConfiguratorProps = _ref.layerConfiguratorProps;
|
|
173
|
-
return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.filled || {
|
|
174
|
-
label: 'layer.color'
|
|
175
|
-
}, visConfiguratorProps, {
|
|
176
|
-
collapsible: true
|
|
177
|
-
}), layer.config.colorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, layerConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
178
|
-
channel: layer.visualChannels.color
|
|
179
|
-
}, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), layer.type === _constants.LAYER_TYPES.point ? /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.outline, visConfiguratorProps, {
|
|
180
|
-
collapsible: true
|
|
181
|
-
}), layer.config.strokeColorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
|
|
182
|
-
property: "strokeColorRange"
|
|
183
|
-
})) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
|
|
184
|
-
selectedColor: layer.config.visConfig.strokeColor,
|
|
185
|
-
property: "strokeColor"
|
|
186
|
-
})), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
187
|
-
channel: layer.visualChannels.strokeColor
|
|
188
|
-
}, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.thickness, visConfiguratorProps, {
|
|
189
|
-
disabled: !layer.config.visConfig.outline
|
|
190
|
-
})))) : null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
191
|
-
label: 'layer.radius',
|
|
192
|
-
collapsible: true
|
|
193
|
-
}, !layer.config.sizeField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.radius, visConfiguratorProps, {
|
|
194
|
-
label: false,
|
|
195
|
-
disabled: Boolean(layer.config.sizeField)
|
|
196
|
-
})) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.radiusRange, visConfiguratorProps, {
|
|
197
|
-
label: false,
|
|
198
|
-
disabled: !layer.config.sizeField || layer.config.visConfig.fixedRadius
|
|
199
|
-
})), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
200
|
-
channel: layer.visualChannels.size
|
|
201
|
-
}, layerChannelConfigProps)), layer.config.sizeField ? /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, layer.visConfigSettings.fixedRadius, visConfiguratorProps)) : null)), /*#__PURE__*/_react["default"].createElement(TextLabelPanel, {
|
|
202
|
-
id: layer.id,
|
|
203
|
-
fields: visConfiguratorProps.fields,
|
|
204
|
-
updateLayerTextLabel: this.props.updateLayerTextLabel,
|
|
205
|
-
textLabel: layer.config.textLabel
|
|
206
|
-
}));
|
|
207
|
-
}
|
|
208
|
-
}, {
|
|
209
|
-
key: "_renderClusterLayerConfig",
|
|
210
|
-
value: function _renderClusterLayerConfig(_ref2) {
|
|
211
|
-
var layer = _ref2.layer,
|
|
212
|
-
visConfiguratorProps = _ref2.visConfiguratorProps,
|
|
213
|
-
layerConfiguratorProps = _ref2.layerConfiguratorProps,
|
|
214
|
-
layerChannelConfigProps = _ref2.layerChannelConfigProps;
|
|
215
|
-
return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
216
|
-
label: 'layer.color',
|
|
217
|
-
collapsible: true
|
|
218
|
-
}, /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(AggregationScaleSelector, (0, _extends2["default"])({}, layerConfiguratorProps, {
|
|
219
|
-
channel: layer.visualChannels.color
|
|
220
|
-
})), /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
221
|
-
channel: layer.visualChannels.color
|
|
222
|
-
}, layerChannelConfigProps)), layer.visConfigSettings.colorAggregation.condition(layer.config) ? /*#__PURE__*/_react["default"].createElement(AggregationTypeSelector, (0, _extends2["default"])({}, layer.visConfigSettings.colorAggregation, layerChannelConfigProps, {
|
|
223
|
-
channel: layer.visualChannels.color
|
|
224
|
-
})) : null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
225
|
-
label: 'layer.radius',
|
|
226
|
-
collapsible: true
|
|
227
|
-
}, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.clusterRadius, visConfiguratorProps)), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.radiusRange, visConfiguratorProps)))));
|
|
228
|
-
}
|
|
229
|
-
}, {
|
|
230
|
-
key: "_renderHeatmapLayerConfig",
|
|
231
|
-
value: function _renderHeatmapLayerConfig(_ref3) {
|
|
232
|
-
var layer = _ref3.layer,
|
|
233
|
-
visConfiguratorProps = _ref3.visConfiguratorProps,
|
|
234
|
-
layerConfiguratorProps = _ref3.layerConfiguratorProps,
|
|
235
|
-
layerChannelConfigProps = _ref3.layerChannelConfigProps;
|
|
236
|
-
return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
237
|
-
label: 'layer.color',
|
|
238
|
-
collapsible: true
|
|
239
|
-
}, /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
240
|
-
label: 'layer.radius'
|
|
241
|
-
}, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.radius, visConfiguratorProps, {
|
|
242
|
-
label: false
|
|
243
|
-
}))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
244
|
-
label: 'layer.weight'
|
|
245
|
-
}, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
246
|
-
channel: layer.visualChannels.weight
|
|
247
|
-
}, layerChannelConfigProps))));
|
|
248
|
-
}
|
|
249
|
-
}, {
|
|
250
|
-
key: "_renderGridLayerConfig",
|
|
251
|
-
value: function _renderGridLayerConfig(props) {
|
|
252
|
-
return this._renderAggregationLayerConfig(props);
|
|
253
|
-
}
|
|
254
|
-
}, {
|
|
255
|
-
key: "_renderHexagonLayerConfig",
|
|
256
|
-
value: function _renderHexagonLayerConfig(props) {
|
|
257
|
-
return this._renderAggregationLayerConfig(props);
|
|
258
|
-
}
|
|
259
|
-
}, {
|
|
260
|
-
key: "_renderAggregationLayerConfig",
|
|
261
|
-
value: function _renderAggregationLayerConfig(_ref4) {
|
|
262
|
-
var layer = _ref4.layer,
|
|
263
|
-
visConfiguratorProps = _ref4.visConfiguratorProps,
|
|
264
|
-
layerConfiguratorProps = _ref4.layerConfiguratorProps,
|
|
265
|
-
layerChannelConfigProps = _ref4.layerChannelConfigProps;
|
|
266
|
-
var config = layer.config;
|
|
267
|
-
var enable3d = config.visConfig.enable3d;
|
|
268
|
-
var elevationByDescription = 'layer.elevationByDescription';
|
|
269
|
-
var colorByDescription = 'layer.colorByDescription';
|
|
270
|
-
return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
271
|
-
label: 'layer.color',
|
|
272
|
-
collapsible: true
|
|
273
|
-
}, /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(AggregationScaleSelector, (0, _extends2["default"])({}, layerConfiguratorProps, {
|
|
274
|
-
channel: layer.visualChannels.color
|
|
275
|
-
})), /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
276
|
-
channel: layer.visualChannels.color
|
|
277
|
-
}, layerChannelConfigProps)), layer.visConfigSettings.colorAggregation.condition(layer.config) ? /*#__PURE__*/_react["default"].createElement(AggregationTypeSelector, (0, _extends2["default"])({}, layer.visConfigSettings.colorAggregation, layerChannelConfigProps, {
|
|
278
|
-
description: colorByDescription,
|
|
279
|
-
channel: layer.visualChannels.color
|
|
280
|
-
})) : null, layer.visConfigSettings.percentile && layer.visConfigSettings.percentile.condition(layer.config) ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.percentile, visConfiguratorProps)) : null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
281
|
-
label: 'layer.radius',
|
|
282
|
-
collapsible: true
|
|
283
|
-
}, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.worldUnitSize, visConfiguratorProps)), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.coverage, visConfiguratorProps)))), layer.visConfigSettings.enable3d ? /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.enable3d, visConfiguratorProps, {
|
|
284
|
-
collapsible: true
|
|
285
|
-
}), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.elevationScale, visConfiguratorProps, {
|
|
286
|
-
label: "layerVisConfigs.heightMultiplier"
|
|
287
|
-
})), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({}, layerChannelConfigProps, {
|
|
288
|
-
channel: layer.visualChannels.size,
|
|
289
|
-
description: elevationByDescription,
|
|
290
|
-
disabled: !enable3d
|
|
291
|
-
})), /*#__PURE__*/_react["default"].createElement(AggregationScaleSelector, (0, _extends2["default"])({}, layerConfiguratorProps, {
|
|
292
|
-
channel: layer.visualChannels.size
|
|
293
|
-
})), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeRange, visConfiguratorProps, {
|
|
294
|
-
label: "layerVisConfigs.heightRange"
|
|
295
|
-
})), /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, layer.visConfigSettings.enableElevationZoomFactor, visConfiguratorProps, {
|
|
296
|
-
label: "layerVisConfigs.enableHeightZoomFactor"
|
|
297
|
-
})), layer.visConfigSettings.sizeAggregation.condition(layer.config) ? /*#__PURE__*/_react["default"].createElement(AggregationTypeSelector, (0, _extends2["default"])({}, layer.visConfigSettings.sizeAggregation, layerChannelConfigProps, {
|
|
298
|
-
channel: layer.visualChannels.size
|
|
299
|
-
})) : null, layer.visConfigSettings.elevationPercentile.condition(layer.config) ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.elevationPercentile, visConfiguratorProps)) : null)) : null);
|
|
300
|
-
} // TODO: Shan move these into layer class
|
|
301
|
-
|
|
302
|
-
}, {
|
|
303
|
-
key: "_renderHexagonIdLayerConfig",
|
|
304
|
-
value: function _renderHexagonIdLayerConfig(_ref5) {
|
|
305
|
-
var layer = _ref5.layer,
|
|
306
|
-
visConfiguratorProps = _ref5.visConfiguratorProps,
|
|
307
|
-
layerConfiguratorProps = _ref5.layerConfiguratorProps,
|
|
308
|
-
layerChannelConfigProps = _ref5.layerChannelConfigProps;
|
|
309
|
-
return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.filled, visConfiguratorProps, {
|
|
310
|
-
label: 'layer.fillColor',
|
|
311
|
-
collapsible: true
|
|
312
|
-
}), layer.config.colorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, layerConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
313
|
-
channel: layer.visualChannels.color
|
|
314
|
-
}, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps, {
|
|
315
|
-
disabled: !layer.config.visConfig.filled
|
|
316
|
-
})))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.outline, visConfiguratorProps, {
|
|
317
|
-
collapsible: true
|
|
318
|
-
}), /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
319
|
-
channel: layer.visualChannels.strokeColor
|
|
320
|
-
}, layerChannelConfigProps)), layer.config.strokeColorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
|
|
321
|
-
property: "strokeColorRange"
|
|
322
|
-
})) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
|
|
323
|
-
selectedColor: layer.config.visConfig.strokeColor,
|
|
324
|
-
property: "strokeColor"
|
|
325
|
-
})), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.strokeOpacity, visConfiguratorProps, {
|
|
326
|
-
disabled: !layer.config.visConfig.outline
|
|
327
|
-
})), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.thickness, visConfiguratorProps, {
|
|
328
|
-
disabled: !layer.config.visConfig.outline
|
|
329
|
-
})))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
330
|
-
label: 'layer.coverage',
|
|
331
|
-
collapsible: true
|
|
332
|
-
}, !layer.config.coverageField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.coverage, visConfiguratorProps, {
|
|
333
|
-
label: false
|
|
334
|
-
})) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.coverageRange, visConfiguratorProps, {
|
|
335
|
-
label: false
|
|
336
|
-
})), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
337
|
-
channel: layer.visualChannels.coverage
|
|
338
|
-
}, layerChannelConfigProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.enable3d, visConfiguratorProps, {
|
|
339
|
-
collapsible: true
|
|
340
|
-
}), /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
341
|
-
channel: layer.visualChannels.size
|
|
342
|
-
}, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.elevationScale, visConfiguratorProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeRange, visConfiguratorProps, {
|
|
343
|
-
label: "layerVisConfigs.heightRange"
|
|
344
|
-
})), /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, layer.visConfigSettings.enableElevationZoomFactor, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(TextLabelPanel, {
|
|
345
|
-
id: layer.id,
|
|
346
|
-
fields: visConfiguratorProps.fields,
|
|
347
|
-
updateLayerTextLabel: this.props.updateLayerTextLabel,
|
|
348
|
-
textLabel: layer.config.textLabel
|
|
349
|
-
}));
|
|
350
|
-
}
|
|
351
|
-
}, {
|
|
352
|
-
key: "_renderArcLayerConfig",
|
|
353
|
-
value: function _renderArcLayerConfig(args) {
|
|
354
|
-
return this._renderLineLayerConfig(args);
|
|
355
|
-
}
|
|
356
|
-
}, {
|
|
357
|
-
key: "_renderLineLayerConfig",
|
|
358
|
-
value: function _renderLineLayerConfig(_ref6) {
|
|
359
|
-
var layer = _ref6.layer,
|
|
360
|
-
visConfiguratorProps = _ref6.visConfiguratorProps,
|
|
361
|
-
layerConfiguratorProps = _ref6.layerConfiguratorProps,
|
|
362
|
-
layerChannelConfigProps = _ref6.layerChannelConfigProps;
|
|
363
|
-
return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
364
|
-
label: 'layer.color',
|
|
365
|
-
collapsible: true
|
|
366
|
-
}, layer.config.colorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps) : /*#__PURE__*/_react["default"].createElement(ArcLayerColorSelector, {
|
|
367
|
-
layer: layer,
|
|
368
|
-
setColorUI: layerConfiguratorProps.setColorUI,
|
|
369
|
-
onChangeConfig: layerConfiguratorProps.onChange,
|
|
370
|
-
onChangeVisConfig: visConfiguratorProps.onChange
|
|
371
|
-
}), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
372
|
-
channel: layer.visualChannels.sourceColor
|
|
373
|
-
}, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
374
|
-
label: 'layer.stroke',
|
|
375
|
-
collapsible: true
|
|
376
|
-
}, layer.config.sizeField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeRange, visConfiguratorProps, {
|
|
377
|
-
disabled: !layer.config.sizeField,
|
|
378
|
-
label: false
|
|
379
|
-
})) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.thickness, visConfiguratorProps, {
|
|
380
|
-
label: false
|
|
381
|
-
})), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
382
|
-
channel: layer.visualChannels.size
|
|
383
|
-
}, layerChannelConfigProps)))), layer.visConfigSettings.elevationScale ? /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
384
|
-
label: "layerVisConfigs.elevationScale",
|
|
385
|
-
collapsible: true
|
|
386
|
-
}, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.elevationScale, visConfiguratorProps))) : null);
|
|
387
|
-
}
|
|
388
|
-
}, {
|
|
389
|
-
key: "_renderTripLayerConfig",
|
|
390
|
-
value: function _renderTripLayerConfig(_ref7) {
|
|
391
|
-
var layer = _ref7.layer,
|
|
392
|
-
visConfiguratorProps = _ref7.visConfiguratorProps,
|
|
393
|
-
layerConfiguratorProps = _ref7.layerConfiguratorProps,
|
|
394
|
-
layerChannelConfigProps = _ref7.layerChannelConfigProps;
|
|
395
|
-
var _layer$meta$featureTy = layer.meta.featureTypes,
|
|
396
|
-
featureTypes = _layer$meta$featureTy === void 0 ? {} : _layer$meta$featureTy;
|
|
397
|
-
return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
398
|
-
label: 'layer.color',
|
|
399
|
-
collapsible: true
|
|
400
|
-
}, layer.config.colorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, layerConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
401
|
-
channel: layer.visualChannels.color
|
|
402
|
-
}, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, {
|
|
403
|
-
label: "layer.strokeWidth",
|
|
404
|
-
collapsible: true
|
|
405
|
-
}), layer.config.sizeField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeRange, visConfiguratorProps, {
|
|
406
|
-
label: false
|
|
407
|
-
})) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.thickness, visConfiguratorProps, {
|
|
408
|
-
label: false
|
|
409
|
-
})), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
410
|
-
channel: layer.visualChannels.size
|
|
411
|
-
}, layerChannelConfigProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, featureTypes.polygon ? layer.visConfigSettings.stroked : {}, {
|
|
412
|
-
label: "layer.trailLength",
|
|
413
|
-
description: "layer.trailLengthDescription"
|
|
414
|
-
}), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.trailLength, visConfiguratorProps, {
|
|
415
|
-
label: false
|
|
416
|
-
}))));
|
|
417
|
-
}
|
|
418
|
-
}, {
|
|
419
|
-
key: "_renderGeojsonLayerConfig",
|
|
420
|
-
value: function _renderGeojsonLayerConfig(_ref8) {
|
|
421
|
-
var layer = _ref8.layer,
|
|
422
|
-
visConfiguratorProps = _ref8.visConfiguratorProps,
|
|
423
|
-
layerConfiguratorProps = _ref8.layerConfiguratorProps,
|
|
424
|
-
layerChannelConfigProps = _ref8.layerChannelConfigProps;
|
|
425
|
-
var _layer$meta$featureTy2 = layer.meta.featureTypes,
|
|
426
|
-
featureTypes = _layer$meta$featureTy2 === void 0 ? {} : _layer$meta$featureTy2,
|
|
427
|
-
visConfig = layer.config.visConfig;
|
|
428
|
-
return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, featureTypes.polygon || featureTypes.point ? /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.filled, visConfiguratorProps, {
|
|
429
|
-
label: "layer.fillColor",
|
|
430
|
-
collapsible: true
|
|
431
|
-
}), layer.config.colorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, layerConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
432
|
-
channel: layer.visualChannels.color
|
|
433
|
-
}, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))) : null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.stroked, visConfiguratorProps, {
|
|
434
|
-
label: "layer.strokeColor",
|
|
435
|
-
collapsible: true
|
|
436
|
-
}), layer.config.strokeColorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
|
|
437
|
-
property: "strokeColorRange"
|
|
438
|
-
})) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
|
|
439
|
-
selectedColor: layer.config.visConfig.strokeColor,
|
|
440
|
-
property: "strokeColor"
|
|
441
|
-
})), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
442
|
-
channel: layer.visualChannels.strokeColor
|
|
443
|
-
}, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.strokeOpacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, featureTypes.polygon ? layer.visConfigSettings.stroked : {}, {
|
|
444
|
-
label: "layer.strokeWidth",
|
|
445
|
-
collapsible: true
|
|
446
|
-
}), layer.config.sizeField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeRange, visConfiguratorProps, {
|
|
447
|
-
label: false
|
|
448
|
-
})) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.thickness, visConfiguratorProps, {
|
|
449
|
-
label: false
|
|
450
|
-
})), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
451
|
-
channel: layer.visualChannels.size
|
|
452
|
-
}, layerChannelConfigProps)))), featureTypes.polygon ? /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, layer.visConfigSettings.enable3d, {
|
|
453
|
-
disabled: !visConfig.filled,
|
|
454
|
-
collapsible: true
|
|
455
|
-
}), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.elevationScale, visConfiguratorProps, {
|
|
456
|
-
label: false
|
|
457
|
-
})), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
458
|
-
channel: layer.visualChannels.height
|
|
459
|
-
}, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, layer.visConfigSettings.enableElevationZoomFactor, visConfiguratorProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, visConfiguratorProps, layer.visConfigSettings.wireframe)))) : null, featureTypes.point ? /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
460
|
-
label: 'layer.radius',
|
|
461
|
-
collapsible: true
|
|
462
|
-
}, !layer.config.radiusField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.radius, visConfiguratorProps, {
|
|
463
|
-
label: false,
|
|
464
|
-
disabled: Boolean(layer.config.radiusField)
|
|
465
|
-
})) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.radiusRange, visConfiguratorProps, {
|
|
466
|
-
label: false,
|
|
467
|
-
disabled: !layer.config.radiusField
|
|
468
|
-
})), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
469
|
-
channel: layer.visualChannels.radius
|
|
470
|
-
}, layerChannelConfigProps)))) : null);
|
|
471
|
-
}
|
|
472
|
-
}, {
|
|
473
|
-
key: "_render3DLayerConfig",
|
|
474
|
-
value: function _render3DLayerConfig(_ref9) {
|
|
475
|
-
var layer = _ref9.layer,
|
|
476
|
-
visConfiguratorProps = _ref9.visConfiguratorProps;
|
|
477
|
-
return /*#__PURE__*/_react["default"].createElement(_react.Fragment, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
478
|
-
label: 'layer.3DModel',
|
|
479
|
-
collapsible: true
|
|
480
|
-
}, /*#__PURE__*/_react["default"].createElement(_styledComponents2.Input, {
|
|
481
|
-
type: "file",
|
|
482
|
-
accept: ".glb,.gltf",
|
|
483
|
-
onChange: function onChange(e) {
|
|
484
|
-
if (e.target.files && e.target.files[0]) {
|
|
485
|
-
var url = URL.createObjectURL(e.target.files[0]);
|
|
486
|
-
visConfiguratorProps.onChange({
|
|
487
|
-
scenegraph: url
|
|
488
|
-
});
|
|
489
|
-
}
|
|
490
|
-
}
|
|
491
|
-
})), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
492
|
-
label: 'layer.3DModelOptions',
|
|
493
|
-
collapsible: true
|
|
494
|
-
}, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeScale, visConfiguratorProps, {
|
|
495
|
-
disabled: false
|
|
496
|
-
})), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.angleX, visConfiguratorProps, {
|
|
497
|
-
disabled: false
|
|
498
|
-
})), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.angleY, visConfiguratorProps, {
|
|
499
|
-
disabled: false
|
|
500
|
-
})), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.angleZ, visConfiguratorProps, {
|
|
501
|
-
disabled: false
|
|
502
|
-
}))));
|
|
503
|
-
}
|
|
504
|
-
}, {
|
|
505
|
-
key: "_renderS2LayerConfig",
|
|
506
|
-
value: function _renderS2LayerConfig(_ref10) {
|
|
507
|
-
var layer = _ref10.layer,
|
|
508
|
-
visConfiguratorProps = _ref10.visConfiguratorProps,
|
|
509
|
-
layerConfiguratorProps = _ref10.layerConfiguratorProps,
|
|
510
|
-
layerChannelConfigProps = _ref10.layerChannelConfigProps;
|
|
511
|
-
var visConfig = layer.config.visConfig;
|
|
512
|
-
return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.filled, visConfiguratorProps, {
|
|
513
|
-
label: "layer.fillColor",
|
|
514
|
-
collapsible: true
|
|
515
|
-
}), layer.config.colorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, layerConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
516
|
-
channel: layer.visualChannels.color
|
|
517
|
-
}, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.stroked, visConfiguratorProps, {
|
|
518
|
-
label: "layer.strokeColor",
|
|
519
|
-
collapsible: true
|
|
520
|
-
}), layer.config.strokeColorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
|
|
521
|
-
property: "strokeColorRange"
|
|
522
|
-
})) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
|
|
523
|
-
selectedColor: layer.config.visConfig.strokeColor,
|
|
524
|
-
property: "strokeColor"
|
|
525
|
-
})), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
526
|
-
channel: layer.visualChannels.strokeColor
|
|
527
|
-
}, layerChannelConfigProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, {
|
|
528
|
-
label: "layer.strokeWidth",
|
|
529
|
-
collapsible: true
|
|
530
|
-
}), layer.config.sizeField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeRange, visConfiguratorProps, {
|
|
531
|
-
label: false
|
|
532
|
-
})) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.thickness, visConfiguratorProps, {
|
|
533
|
-
label: false
|
|
534
|
-
})), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
535
|
-
channel: layer.visualChannels.size
|
|
536
|
-
}, layerChannelConfigProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, layer.visConfigSettings.enable3d, {
|
|
537
|
-
disabled: !visConfig.filled,
|
|
538
|
-
collapsible: true
|
|
539
|
-
}), /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
540
|
-
channel: layer.visualChannels.height
|
|
541
|
-
}, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.elevationScale, visConfiguratorProps, {
|
|
542
|
-
label: "layerVisConfigs.elevationScale"
|
|
543
|
-
})), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.heightRange, visConfiguratorProps, {
|
|
544
|
-
label: "layerVisConfigs.heightRange"
|
|
545
|
-
})), /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, layer.visConfigSettings.enableElevationZoomFactor, visConfiguratorProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, visConfiguratorProps, layer.visConfigSettings.wireframe)))));
|
|
546
|
-
}
|
|
547
|
-
}, {
|
|
548
|
-
key: "render",
|
|
549
|
-
value: function render() {
|
|
550
|
-
var _this = this;
|
|
551
|
-
|
|
552
|
-
var _this$props = this.props,
|
|
553
|
-
layer = _this$props.layer,
|
|
554
|
-
datasets = _this$props.datasets,
|
|
555
|
-
updateLayerConfig = _this$props.updateLayerConfig,
|
|
556
|
-
layerTypeOptions = _this$props.layerTypeOptions,
|
|
557
|
-
updateLayerType = _this$props.updateLayerType,
|
|
558
|
-
_this$props$disableTy = _this$props.disableTypeSelect,
|
|
559
|
-
disableTypeSelect = _this$props$disableTy === void 0 ? false : _this$props$disableTy;
|
|
560
|
-
|
|
561
|
-
var _ref11 = layer.config.dataId ? datasets[layer.config.dataId] : {},
|
|
562
|
-
_ref11$fields = _ref11.fields,
|
|
563
|
-
fields = _ref11$fields === void 0 ? [] : _ref11$fields,
|
|
564
|
-
_ref11$fieldPairs = _ref11.fieldPairs,
|
|
565
|
-
fieldPairs = _ref11$fieldPairs === void 0 ? undefined : _ref11$fieldPairs;
|
|
566
|
-
|
|
567
|
-
var config = layer.config;
|
|
568
|
-
var visConfiguratorProps = getVisConfiguratorProps(this.props);
|
|
569
|
-
var layerConfiguratorProps = getLayerConfiguratorProps(this.props);
|
|
570
|
-
var layerChannelConfigProps = getLayerChannelConfigProps(this.props);
|
|
571
|
-
var dataset = getLayerDataset(datasets, layer);
|
|
572
|
-
var renderTemplate = layer.type && "_render".concat((0, _utils.capitalizeFirstLetter)(layer.type), "LayerConfig");
|
|
573
|
-
return /*#__PURE__*/_react["default"].createElement(StyledLayerConfigurator, null, layer.layerInfoModal ? /*#__PURE__*/_react["default"].createElement(_howToButton["default"], {
|
|
574
|
-
onClick: function onClick() {
|
|
575
|
-
return _this.props.openModal(layer.layerInfoModal);
|
|
576
|
-
}
|
|
577
|
-
}) : null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
578
|
-
label: 'layer.basic',
|
|
579
|
-
collapsible: true,
|
|
580
|
-
expanded: !layer.hasAllColumns()
|
|
581
|
-
}, /*#__PURE__*/_react["default"].createElement(LayerTypeSelector, {
|
|
582
|
-
selected: layer.type,
|
|
583
|
-
disabled: disableTypeSelect,
|
|
584
|
-
options: layerTypeOptions // @ts-ignore
|
|
585
|
-
,
|
|
586
|
-
onSelect: updateLayerType
|
|
587
|
-
}), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(SourceDataSelector, {
|
|
588
|
-
datasets: datasets,
|
|
589
|
-
id: layer.id,
|
|
590
|
-
dataId: config.dataId // @ts-ignore
|
|
591
|
-
,
|
|
592
|
-
onSelect: function onSelect(value) {
|
|
593
|
-
return updateLayerConfig({
|
|
594
|
-
dataId: value
|
|
595
|
-
});
|
|
596
|
-
}
|
|
597
|
-
}), /*#__PURE__*/_react["default"].createElement(LayerColumnConfig, {
|
|
598
|
-
columnPairs: layer.columnPairs,
|
|
599
|
-
columns: layer.config.columns,
|
|
600
|
-
assignColumnPairs: layer.assignColumnPairs.bind(layer),
|
|
601
|
-
assignColumn: layer.assignColumn.bind(layer) // @ts-ignore
|
|
602
|
-
,
|
|
603
|
-
columnLabels: layer.columnLabels,
|
|
604
|
-
fields: fields,
|
|
605
|
-
fieldPairs: fieldPairs,
|
|
606
|
-
updateLayerConfig: updateLayerConfig
|
|
607
|
-
})), layer.errorMessage ? /*#__PURE__*/_react["default"].createElement(_layerErrorMessage["default"], {
|
|
608
|
-
errorMessage: layer.errorMessage
|
|
609
|
-
}) : null), renderTemplate && this[renderTemplate] && this[renderTemplate]({
|
|
610
|
-
layer: layer,
|
|
611
|
-
dataset: dataset,
|
|
612
|
-
visConfiguratorProps: visConfiguratorProps,
|
|
613
|
-
layerChannelConfigProps: layerChannelConfigProps,
|
|
614
|
-
layerConfiguratorProps: layerConfiguratorProps
|
|
615
|
-
}));
|
|
616
|
-
}
|
|
617
|
-
}]);
|
|
618
|
-
return LayerConfigurator;
|
|
619
|
-
}(_react.Component);
|
|
620
|
-
|
|
621
|
-
return LayerConfigurator;
|
|
622
|
-
}
|
|
623
|
-
|
|
624
|
-
ChannelByValueSelectorFactory.deps = [_visConfigByFieldSelector["default"]];
|
|
625
|
-
|
|
626
|
-
function ChannelByValueSelectorFactory(VisConfigByFieldSelector) {
|
|
627
|
-
var ChannelByValueSelector = function ChannelByValueSelector(_ref12) {
|
|
628
|
-
var layer = _ref12.layer,
|
|
629
|
-
channel = _ref12.channel,
|
|
630
|
-
onChange = _ref12.onChange,
|
|
631
|
-
fields = _ref12.fields,
|
|
632
|
-
description = _ref12.description;
|
|
633
|
-
var channelScaleType = channel.channelScaleType,
|
|
634
|
-
field = channel.field,
|
|
635
|
-
key = channel.key,
|
|
636
|
-
property = channel.property,
|
|
637
|
-
scale = channel.scale,
|
|
638
|
-
defaultMeasure = channel.defaultMeasure,
|
|
639
|
-
supportedFieldTypes = channel.supportedFieldTypes;
|
|
640
|
-
var channelSupportedFieldTypes = supportedFieldTypes || _constants.CHANNEL_SCALE_SUPPORTED_FIELDS[channelScaleType];
|
|
641
|
-
var supportedFields = fields.filter(function (_ref13) {
|
|
642
|
-
var type = _ref13.type;
|
|
643
|
-
return channelSupportedFieldTypes.includes(type);
|
|
644
|
-
});
|
|
645
|
-
var scaleOptions = layer.getScaleOptions(channel.key);
|
|
646
|
-
var showScale = !layer.isAggregated && layer.config[scale] && scaleOptions.length > 1;
|
|
647
|
-
var defaultDescription = 'layerConfiguration.defaultDescription';
|
|
648
|
-
return /*#__PURE__*/_react["default"].createElement(VisConfigByFieldSelector, {
|
|
649
|
-
channel: channel.key,
|
|
650
|
-
description: description || defaultDescription,
|
|
651
|
-
fields: supportedFields,
|
|
652
|
-
id: layer.id,
|
|
653
|
-
key: "".concat(key, "-channel-selector"),
|
|
654
|
-
property: property,
|
|
655
|
-
placeholder: defaultMeasure || 'placeholder.selectField',
|
|
656
|
-
scaleOptions: scaleOptions,
|
|
657
|
-
scaleType: scale ? layer.config[scale] : null,
|
|
658
|
-
selectedField: layer.config[field],
|
|
659
|
-
showScale: showScale,
|
|
660
|
-
updateField: function updateField(val) {
|
|
661
|
-
return onChange((0, _defineProperty2["default"])({}, field, val), key);
|
|
662
|
-
},
|
|
663
|
-
updateScale: function updateScale(val) {
|
|
664
|
-
return onChange((0, _defineProperty2["default"])({}, scale, val), key);
|
|
665
|
-
}
|
|
666
|
-
});
|
|
667
|
-
};
|
|
668
|
-
|
|
669
|
-
return ChannelByValueSelector;
|
|
670
|
-
}
|
|
671
|
-
|
|
672
|
-
var AggregationScaleSelector = function AggregationScaleSelector(_ref14) {
|
|
673
|
-
var channel = _ref14.channel,
|
|
674
|
-
layer = _ref14.layer,
|
|
675
|
-
onChange = _ref14.onChange;
|
|
676
|
-
var scale = channel.scale,
|
|
677
|
-
key = channel.key;
|
|
678
|
-
var scaleOptions = layer.getScaleOptions(key);
|
|
679
|
-
return Array.isArray(scaleOptions) && scaleOptions.length > 1 ? /*#__PURE__*/_react["default"].createElement(_dimensionScaleSelector["default"], {
|
|
680
|
-
label: "".concat(key, " Scale"),
|
|
681
|
-
options: scaleOptions,
|
|
682
|
-
scaleType: layer.config[scale],
|
|
683
|
-
onSelect: function onSelect(val) {
|
|
684
|
-
return onChange((0, _defineProperty2["default"])({}, scale, val), key);
|
|
685
|
-
}
|
|
686
|
-
}) : null;
|
|
687
|
-
};
|
|
688
|
-
|
|
689
|
-
exports.AggregationScaleSelector = AggregationScaleSelector;
|
|
690
|
-
|
|
691
|
-
var AggregationTypeSelector = function AggregationTypeSelector(_ref15) {
|
|
692
|
-
var channel = _ref15.channel,
|
|
693
|
-
layer = _ref15.layer,
|
|
694
|
-
_onChange4 = _ref15.onChange;
|
|
695
|
-
var field = channel.field,
|
|
696
|
-
aggregation = channel.aggregation,
|
|
697
|
-
key = channel.key;
|
|
698
|
-
var selectedField = layer.config[field];
|
|
699
|
-
var visConfig = layer.config.visConfig; // aggregation should only be selectable when field is selected
|
|
700
|
-
|
|
701
|
-
var layerAggregationTypes = layer.getAggregationOptions(key);
|
|
702
|
-
|
|
703
|
-
var aggregationOptions = _constants.AGGREGATION_TYPE_OPTIONS.filter(function (_ref16) {
|
|
704
|
-
var id = _ref16.id;
|
|
705
|
-
return layerAggregationTypes.includes(id);
|
|
706
|
-
});
|
|
707
|
-
|
|
708
|
-
var selectedAggregation = aggregation ? aggregationOptions.find(function (_ref17) {
|
|
709
|
-
var id = _ref17.id;
|
|
710
|
-
return id === visConfig[aggregation];
|
|
711
|
-
}) : [];
|
|
712
|
-
return /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
|
|
713
|
-
id: 'layer.aggregateBy',
|
|
714
|
-
values: {
|
|
715
|
-
field: selectedField.displayName
|
|
716
|
-
}
|
|
717
|
-
})), /*#__PURE__*/_react["default"].createElement(_itemSelector["default"], {
|
|
718
|
-
selectedItems: selectedAggregation,
|
|
719
|
-
options: aggregationOptions,
|
|
720
|
-
displayOption: "label",
|
|
721
|
-
getOptionValue: "id",
|
|
722
|
-
multiSelect: false,
|
|
723
|
-
searchable: false,
|
|
724
|
-
onChange: function onChange(value) {
|
|
725
|
-
return _onChange4({
|
|
726
|
-
visConfig: _objectSpread(_objectSpread({}, layer.config.visConfig), {}, (0, _defineProperty2["default"])({}, aggregation, value))
|
|
727
|
-
}, channel.key);
|
|
728
|
-
}
|
|
729
|
-
}));
|
|
730
|
-
};
|
|
731
|
-
/* eslint-enable max-params */
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
exports.AggregationTypeSelector = AggregationTypeSelector;
|
|
735
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zaWRlLXBhbmVsL2xheWVyLXBhbmVsL2xheWVyLWNvbmZpZ3VyYXRvci50c3giXSwibmFtZXMiOlsiU3R5bGVkTGF5ZXJDb25maWd1cmF0b3IiLCJzdHlsZWQiLCJkaXYiLCJhdHRycyIsImNsYXNzTmFtZSIsInByb3BzIiwidGhlbWUiLCJsYXllckNvbmZpZ3VyYXRvck1hcmdpbiIsImxheWVyQ29uZmlndXJhdG9yUGFkZGluZyIsImxheWVyQ29uZmlndXJhdG9yQm9yZGVyIiwibGF5ZXJDb25maWd1cmF0b3JCb3JkZXJDb2xvciIsIlN0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yIiwiZ2V0TGF5ZXJGaWVsZHMiLCJkYXRhc2V0cyIsImxheWVyIiwiY29uZmlnIiwiZGF0YUlkIiwiZmllbGRzIiwiZ2V0TGF5ZXJEYXRhc2V0IiwiZ2V0TGF5ZXJDb25maWd1cmF0b3JQcm9wcyIsIm9uQ2hhbmdlIiwidXBkYXRlTGF5ZXJDb25maWciLCJzZXRDb2xvclVJIiwidXBkYXRlTGF5ZXJDb2xvclVJIiwiZ2V0VmlzQ29uZmlndXJhdG9yUHJvcHMiLCJ1cGRhdGVMYXllclZpc0NvbmZpZyIsImdldExheWVyQ2hhbm5lbENvbmZpZ1Byb3BzIiwidXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnIiwiTGF5ZXJDb25maWd1cmF0b3JGYWN0b3J5IiwiZGVwcyIsIlNvdXJjZURhdGFTZWxlY3RvckZhY3RvcnkiLCJWaXNDb25maWdTbGlkZXJGYWN0b3J5IiwiVGV4dExhYmVsUGFuZWxGYWN0b3J5IiwiTGF5ZXJDb25maWdHcm91cEZhY3RvcnkiLCJDaGFubmVsQnlWYWx1ZVNlbGVjdG9yRmFjdG9yeSIsIkxheWVyQ29sdW1uQ29uZmlnRmFjdG9yeSIsIkxheWVyVHlwZVNlbGVjdG9yRmFjdG9yeSIsIlZpc0NvbmZpZ1N3aXRjaEZhY3RvcnkiLCJMYXllckNvbG9yU2VsZWN0b3JGYWN0b3J5IiwiTGF5ZXJDb2xvclJhbmdlU2VsZWN0b3JGYWN0b3J5IiwiQXJjTGF5ZXJDb2xvclNlbGVjdG9yRmFjdG9yeSIsIlNvdXJjZURhdGFTZWxlY3RvciIsIlZpc0NvbmZpZ1NsaWRlciIsIlRleHRMYWJlbFBhbmVsIiwiTGF5ZXJDb25maWdHcm91cCIsIkNoYW5uZWxCeVZhbHVlU2VsZWN0b3IiLCJMYXllckNvbHVtbkNvbmZpZyIsIkxheWVyVHlwZVNlbGVjdG9yIiwiVmlzQ29uZmlnU3dpdGNoIiwiTGF5ZXJDb2xvclNlbGVjdG9yIiwiTGF5ZXJDb2xvclJhbmdlU2VsZWN0b3IiLCJBcmNMYXllckNvbG9yU2VsZWN0b3IiLCJMYXllckNvbmZpZ3VyYXRvciIsIl9yZW5kZXJTY2F0dGVycGxvdExheWVyQ29uZmlnIiwidmlzQ29uZmlndXJhdG9yUHJvcHMiLCJsYXllckNoYW5uZWxDb25maWdQcm9wcyIsImxheWVyQ29uZmlndXJhdG9yUHJvcHMiLCJ2aXNDb25maWdTZXR0aW5ncyIsImZpbGxlZCIsImxhYmVsIiwiY29sb3JGaWVsZCIsInZpc3VhbENoYW5uZWxzIiwiY29sb3IiLCJvcGFjaXR5IiwidHlwZSIsIkxBWUVSX1RZUEVTIiwicG9pbnQiLCJvdXRsaW5lIiwic3Ryb2tlQ29sb3JGaWVsZCIsInZpc0NvbmZpZyIsInN0cm9rZUNvbG9yIiwidGhpY2tuZXNzIiwic2l6ZUZpZWxkIiwicmFkaXVzIiwiQm9vbGVhbiIsInJhZGl1c1JhbmdlIiwiZml4ZWRSYWRpdXMiLCJzaXplIiwiaWQiLCJ1cGRhdGVMYXllclRleHRMYWJlbCIsInRleHRMYWJlbCIsImNvbG9yQWdncmVnYXRpb24iLCJjb25kaXRpb24iLCJjbHVzdGVyUmFkaXVzIiwid2VpZ2h0IiwiX3JlbmRlckFnZ3JlZ2F0aW9uTGF5ZXJDb25maWciLCJlbmFibGUzZCIsImVsZXZhdGlvbkJ5RGVzY3JpcHRpb24iLCJjb2xvckJ5RGVzY3JpcHRpb24iLCJwZXJjZW50aWxlIiwid29ybGRVbml0U2l6ZSIsImNvdmVyYWdlIiwiZWxldmF0aW9uU2NhbGUiLCJzaXplUmFuZ2UiLCJlbmFibGVFbGV2YXRpb25ab29tRmFjdG9yIiwic2l6ZUFnZ3JlZ2F0aW9uIiwiZWxldmF0aW9uUGVyY2VudGlsZSIsInN0cm9rZU9wYWNpdHkiLCJjb3ZlcmFnZUZpZWxkIiwiY292ZXJhZ2VSYW5nZSIsImFyZ3MiLCJfcmVuZGVyTGluZUxheWVyQ29uZmlnIiwic291cmNlQ29sb3IiLCJtZXRhIiwiZmVhdHVyZVR5cGVzIiwicG9seWdvbiIsInN0cm9rZWQiLCJ0cmFpbExlbmd0aCIsImhlaWdodCIsIndpcmVmcmFtZSIsInJhZGl1c0ZpZWxkIiwiZSIsInRhcmdldCIsImZpbGVzIiwidXJsIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwic2NlbmVncmFwaCIsInNpemVTY2FsZSIsImFuZ2xlWCIsImFuZ2xlWSIsImFuZ2xlWiIsImhlaWdodFJhbmdlIiwibGF5ZXJUeXBlT3B0aW9ucyIsInVwZGF0ZUxheWVyVHlwZSIsImRpc2FibGVUeXBlU2VsZWN0IiwiZmllbGRQYWlycyIsInVuZGVmaW5lZCIsImRhdGFzZXQiLCJyZW5kZXJUZW1wbGF0ZSIsImxheWVySW5mb01vZGFsIiwib3Blbk1vZGFsIiwiaGFzQWxsQ29sdW1ucyIsInZhbHVlIiwiY29sdW1uUGFpcnMiLCJjb2x1bW5zIiwiYXNzaWduQ29sdW1uUGFpcnMiLCJiaW5kIiwiYXNzaWduQ29sdW1uIiwiY29sdW1uTGFiZWxzIiwiZXJyb3JNZXNzYWdlIiwiQ29tcG9uZW50IiwiVmlzQ29uZmlnQnlGaWVsZFNlbGVjdG9yRmFjdG9yeSIsIlZpc0NvbmZpZ0J5RmllbGRTZWxlY3RvciIsImNoYW5uZWwiLCJkZXNjcmlwdGlvbiIsImNoYW5uZWxTY2FsZVR5cGUiLCJmaWVsZCIsImtleSIsInByb3BlcnR5Iiwic2NhbGUiLCJkZWZhdWx0TWVhc3VyZSIsInN1cHBvcnRlZEZpZWxkVHlwZXMiLCJjaGFubmVsU3VwcG9ydGVkRmllbGRUeXBlcyIsIkNIQU5ORUxfU0NBTEVfU1VQUE9SVEVEX0ZJRUxEUyIsInN1cHBvcnRlZEZpZWxkcyIsImZpbHRlciIsImluY2x1ZGVzIiwic2NhbGVPcHRpb25zIiwiZ2V0U2NhbGVPcHRpb25zIiwic2hvd1NjYWxlIiwiaXNBZ2dyZWdhdGVkIiwibGVuZ3RoIiwiZGVmYXVsdERlc2NyaXB0aW9uIiwidmFsIiwiQWdncmVnYXRpb25TY2FsZVNlbGVjdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiQWdncmVnYXRpb25UeXBlU2VsZWN0b3IiLCJhZ2dyZWdhdGlvbiIsInNlbGVjdGVkRmllbGQiLCJsYXllckFnZ3JlZ2F0aW9uVHlwZXMiLCJnZXRBZ2dyZWdhdGlvbk9wdGlvbnMiLCJhZ2dyZWdhdGlvbk9wdGlvbnMiLCJBR0dSRUdBVElPTl9UWVBFX09QVElPTlMiLCJzZWxlY3RlZEFnZ3JlZ2F0aW9uIiwiZmluZCIsImRpc3BsYXlOYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUlBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUtBOztBQUNBOztBQUVBOztBQUVBOzs7Ozs7Ozs7Ozs7QUE0REEsSUFBTUEsdUJBQXVCLEdBQUdDLDZCQUFPQyxHQUFQLENBQVdDLEtBQVgsQ0FBaUI7QUFDL0NDLEVBQUFBLFNBQVMsRUFBRTtBQURvQyxDQUFqQixDQUFILDhMQUliLFVBQUFDLEtBQUs7QUFBQSxTQUFJQSxLQUFLLENBQUNDLEtBQU4sQ0FBWUMsdUJBQWhCO0FBQUEsQ0FKUSxFQUtoQixVQUFBRixLQUFLO0FBQUEsU0FBSUEsS0FBSyxDQUFDQyxLQUFOLENBQVlFLHdCQUFoQjtBQUFBLENBTFcsRUFNWixVQUFBSCxLQUFLO0FBQUEsU0FBSUEsS0FBSyxDQUFDQyxLQUFOLENBQVlHLHVCQUFoQjtBQUFBLENBTk8sRUFPdkIsVUFBQUosS0FBSztBQUFBLFNBQUlBLEtBQUssQ0FBQ0MsS0FBTixDQUFZSSw0QkFBaEI7QUFBQSxDQVBrQixDQUE3Qjs7QUFVQSxJQUFNQyw2QkFBNkIsR0FBR1YsNkJBQU9DLEdBQVAsQ0FBV0MsS0FBWCxDQUFpQjtBQUNyREMsRUFBQUEsU0FBUyxFQUFFO0FBRDBDLENBQWpCLENBQUgsK0dBQW5DOztBQU1PLElBQU1RLGNBQWMsR0FBRyxTQUFqQkEsY0FBaUIsQ0FBQ0MsUUFBRCxFQUFxQkMsS0FBckI7QUFBQTs7QUFBQSxTQUM1QixpQkFBQUEsS0FBSyxDQUFDQyxNQUFOLHdEQUFjQyxNQUFkLElBQXdCSCxRQUFRLENBQUNDLEtBQUssQ0FBQ0MsTUFBTixDQUFhQyxNQUFkLENBQWhDLEdBQXdESCxRQUFRLENBQUNDLEtBQUssQ0FBQ0MsTUFBTixDQUFhQyxNQUFkLENBQVIsQ0FBOEJDLE1BQXRGLEdBQStGLEVBRG5FO0FBQUEsQ0FBdkI7QUFHUDs7Ozs7QUFDTyxJQUFNQyxlQUFlLEdBQUcsU0FBbEJBLGVBQWtCLENBQUNMLFFBQUQsRUFBcUJDLEtBQXJCO0FBQUE7O0FBQUEsU0FDN0Isa0JBQUFBLEtBQUssQ0FBQ0MsTUFBTiwwREFBY0MsTUFBZCxJQUF3QkgsUUFBUSxDQUFDQyxLQUFLLENBQUNDLE1BQU4sQ0FBYUMsTUFBZCxDQUFoQyxHQUF3REgsUUFBUSxDQUFDQyxLQUFLLENBQUNDLE1BQU4sQ0FBYUMsTUFBZCxDQUFoRSxHQUF3RixJQUQzRDtBQUFBLENBQXhCOzs7O0FBR0EsSUFBTUcseUJBQXlCLEdBQUcsU0FBNUJBLHlCQUE0QixDQUFDZCxLQUFEO0FBQUEsU0FBb0M7QUFDM0VTLElBQUFBLEtBQUssRUFBRVQsS0FBSyxDQUFDUyxLQUQ4RDtBQUUzRUcsSUFBQUEsTUFBTSxFQUFFTCxjQUFjLENBQUNQLEtBQUssQ0FBQ1EsUUFBUCxFQUFpQlIsS0FBSyxDQUFDUyxLQUF2QixDQUZxRDtBQUczRU0sSUFBQUEsUUFBUSxFQUFFZixLQUFLLENBQUNnQixpQkFIMkQ7QUFJM0VDLElBQUFBLFVBQVUsRUFBRWpCLEtBQUssQ0FBQ2tCO0FBSnlELEdBQXBDO0FBQUEsQ0FBbEM7Ozs7QUFPQSxJQUFNQyx1QkFBdUIsR0FBRyxTQUExQkEsdUJBQTBCLENBQUNuQixLQUFEO0FBQUEsU0FBb0M7QUFDekVTLElBQUFBLEtBQUssRUFBRVQsS0FBSyxDQUFDUyxLQUQ0RDtBQUV6RUcsSUFBQUEsTUFBTSxFQUFFTCxjQUFjLENBQUNQLEtBQUssQ0FBQ1EsUUFBUCxFQUFpQlIsS0FBSyxDQUFDUyxLQUF2QixDQUZtRDtBQUd6RU0sSUFBQUEsUUFBUSxFQUFFZixLQUFLLENBQUNvQixvQkFIeUQ7QUFJekVILElBQUFBLFVBQVUsRUFBRWpCLEtBQUssQ0FBQ2tCO0FBSnVELEdBQXBDO0FBQUEsQ0FBaEM7Ozs7QUFPQSxJQUFNRywwQkFBMEIsR0FBRyxTQUE3QkEsMEJBQTZCLENBQUNyQixLQUFEO0FBQUEsU0FBb0M7QUFDNUVTLElBQUFBLEtBQUssRUFBRVQsS0FBSyxDQUFDUyxLQUQrRDtBQUU1RUcsSUFBQUEsTUFBTSxFQUFFTCxjQUFjLENBQUNQLEtBQUssQ0FBQ1EsUUFBUCxFQUFpQlIsS0FBSyxDQUFDUyxLQUF2QixDQUZzRDtBQUc1RU0sSUFBQUEsUUFBUSxFQUFFZixLQUFLLENBQUNzQjtBQUg0RCxHQUFwQztBQUFBLENBQW5DOzs7QUFNUEMsd0JBQXdCLENBQUNDLElBQXpCLEdBQWdDLENBQzlCQyw4QkFEOEIsRUFFOUJDLDJCQUY4QixFQUc5QkMsMEJBSDhCLEVBSTlCQyw0QkFKOEIsRUFLOUJDLDZCQUw4QixFQU05QkMsNkJBTjhCLEVBTzlCQyw2QkFQOEIsRUFROUJDLDJCQVI4QixFQVM5QkMsNkNBVDhCLEVBVTlCQyxrREFWOEIsRUFXOUJDLGdEQVg4QixDQUFoQzs7QUFjZSxTQUFTWix3QkFBVCxDQUNiYSxrQkFEYSxFQUViQyxlQUZhLEVBR2JDLGNBSGEsRUFJYkMsZ0JBSmEsRUFLYkMsc0JBTGEsRUFNYkMsaUJBTmEsRUFPYkMsaUJBUGEsRUFRYkMsZUFSYSxFQVNiQyxrQkFUYSxFQVViQyx1QkFWYSxFQVdiQyxxQkFYYSxFQVlnQztBQUFBLE1BQ3ZDQyxpQkFEdUM7QUFBQTs7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUEsYUFFM0MsaUNBQXdCL0MsS0FBeEIsRUFBK0I7QUFDN0IsZUFBTyxLQUFLZ0QsNkJBQUwsQ0FBbUNoRCxLQUFuQyxDQUFQO0FBQ0Q7QUFKMEM7QUFBQTtBQUFBLGFBTTNDLGdDQUF1QkEsS0FBdkIsRUFBOEI7QUFDNUIsZUFBTyxLQUFLZ0QsNkJBQUwsQ0FBbUNoRCxLQUFuQyxDQUFQO0FBQ0Q7QUFSMEM7QUFBQTtBQUFBLGFBVTNDLDZDQUtHO0FBQUEsWUFKRFMsS0FJQyxRQUpEQSxLQUlDO0FBQUEsWUFIRHdDLG9CQUdDLFFBSERBLG9CQUdDO0FBQUEsWUFGREMsdUJBRUMsUUFGREEsdUJBRUM7QUFBQSxZQUREQyxzQkFDQyxRQUREQSxzQkFDQztBQUNELDRCQUNFLGdDQUFDLDZCQUFELHFCQUVFLGdDQUFDLGdCQUFELGdDQUNPMUMsS0FBSyxDQUFDMkMsaUJBQU4sQ0FBd0JDLE1BQXhCLElBQWtDO0FBQUNDLFVBQUFBLEtBQUssRUFBRTtBQUFSLFNBRHpDLEVBRU1MLG9CQUZOO0FBR0UsVUFBQSxXQUFXO0FBSGIsWUFLR3hDLEtBQUssQ0FBQ0MsTUFBTixDQUFhNkMsVUFBYixnQkFDQyxnQ0FBQyx1QkFBRCxFQUE2Qk4sb0JBQTdCLENBREQsZ0JBR0MsZ0NBQUMsa0JBQUQsRUFBd0JFLHNCQUF4QixDQVJKLGVBVUUsZ0NBQUMsK0NBQUQscUJBQ0UsZ0NBQUMsc0JBQUQ7QUFDRSxVQUFBLE9BQU8sRUFBRTFDLEtBQUssQ0FBQytDLGNBQU4sQ0FBcUJDO0FBRGhDLFdBRU1QLHVCQUZOLEVBREYsZUFLRSxnQ0FBQyxlQUFELGdDQUFxQnpDLEtBQUssQ0FBQzJDLGlCQUFOLENBQXdCTSxPQUE3QyxFQUEwRFQsb0JBQTFELEVBTEYsQ0FWRixDQUZGLEVBc0JHeEMsS0FBSyxDQUFDa0QsSUFBTixLQUFlQyx1QkFBWUMsS0FBM0IsZ0JBQ0MsZ0NBQUMsZ0JBQUQsZ0NBQ01wRCxLQUFLLENBQUMyQyxpQkFBTixDQUF3QlUsT0FEOUIsRUFFTWIsb0JBRk47QUFHRSxVQUFBLFdBQVc7QUFIYixZQUtHeEMsS0FBSyxDQUFDQyxNQUFOLENBQWFxRCxnQkFBYixnQkFDQyxnQ0FBQyx1QkFBRCxnQ0FBNkJkLG9CQUE3QjtBQUFtRCxVQUFBLFFBQVEsRUFBQztBQUE1RCxXQURELGdCQUdDLGdDQUFDLGtCQUFELGdDQUNNQSxvQkFETjtBQUVFLFVBQUEsYUFBYSxFQUFFeEMsS0FBSyxDQUFDQyxNQUFOLENBQWFzRCxTQUFiLENBQXVCQyxXQUZ4QztBQUdFLFVBQUEsUUFBUSxFQUFDO0FBSFgsV0FSSixlQWNFLGdDQUFDLCtDQUFELHFCQUNFLGdDQUFDLHNCQUFEO0FBQ0UsVUFBQSxPQUFPLEVBQUV4RCxLQUFLLENBQUMrQyxjQUFOLENBQXFCUztBQURoQyxXQUVNZix1QkFGTixFQURGLGVBS0UsZ0NBQUMsZUFBRCxnQ0FDTXpDLEtBQUssQ0FBQzJDLGlCQUFOLENBQXdCYyxTQUQ5QixFQUVNakIsb0JBRk47QUFHRSxVQUFBLFFBQVEsRUFBRSxDQUFDeEMsS0FBSyxDQUFDQyxNQUFOLENBQWFzRCxTQUFiLENBQXVCRjtBQUhwQyxXQUxGLENBZEYsQ0FERCxHQTJCRyxJQWpETixlQW9ERSxnQ0FBQyxnQkFBRDtBQUFrQixVQUFBLEtBQUssRUFBRSxjQUF6QjtBQUF5QyxVQUFBLFdBQVc7QUFBcEQsV0FDRyxDQUFDckQsS0FBSyxDQUFDQyxNQUFOLENBQWF5RCxTQUFkLGdCQUNDLGdDQUFDLGVBQUQsZ0NBQ00xRCxLQUFLLENBQUMyQyxpQkFBTixDQUF3QmdCLE1BRDlCLEVBRU1uQixvQkFGTjtBQUdFLFVBQUEsS0FBSyxFQUFFLEtBSFQ7QUFJRSxVQUFBLFFBQVEsRUFBRW9CLE9BQU8sQ0FBQzVELEtBQUssQ0FBQ0MsTUFBTixDQUFheUQsU0FBZDtBQUpuQixXQURELGdCQVFDLGdDQUFDLGVBQUQsZ0NBQ00xRCxLQUFLLENBQUMyQyxpQkFBTixDQUF3QmtCLFdBRDlCLEVBRU1yQixvQkFGTjtBQUdFLFVBQUEsS0FBSyxFQUFFLEtBSFQ7QUFJRSxVQUFBLFFBQVEsRUFBRSxDQUFDeEMsS0FBSyxDQUFDQyxNQUFOLENBQWF5RCxTQUFkLElBQTJCMUQsS0FBSyxDQUFDQyxNQUFOLENBQWFzRCxTQUFiLENBQXVCTztBQUo5RCxXQVRKLGVBZ0JFLGdDQUFDLCtDQUFELHFCQUNFLGdDQUFDLHNCQUFEO0FBQ0UsVUFBQSxPQUFPLEVBQUU5RCxLQUFLLENBQUMrQyxjQUFOLENBQXFCZ0I7QUFEaEMsV0FFTXRCLHVCQUZOLEVBREYsRUFLR3pDLEtBQUssQ0FBQ0MsTUFBTixDQUFheUQsU0FBYixnQkFDQyxnQ0FBQyxlQUFELGdDQUNNMUQsS0FBSyxDQUFDMkMsaUJBQU4sQ0FBd0JtQixXQUQ5QixFQUVNdEIsb0JBRk4sRUFERCxHQUtHLElBVk4sQ0FoQkYsQ0FwREYsZUFtRkUsZ0NBQUMsY0FBRDtBQUNFLFVBQUEsRUFBRSxFQUFFeEMsS0FBSyxDQUFDZ0UsRUFEWjtBQUVFLFVBQUEsTUFBTSxFQUFFeEIsb0JBQW9CLENBQUNyQyxNQUYvQjtBQUdFLFVBQUEsb0JBQW9CLEVBQUUsS0FBS1osS0FBTCxDQUFXMEUsb0JBSG5DO0FBSUUsVUFBQSxTQUFTLEVBQUVqRSxLQUFLLENBQUNDLE1BQU4sQ0FBYWlFO0FBSjFCLFVBbkZGLENBREY7QUE0RkQ7QUE1RzBDO0FBQUE7QUFBQSxhQThHM0MsMENBS0c7QUFBQSxZQUpEbEUsS0FJQyxTQUpEQSxLQUlDO0FBQUEsWUFIRHdDLG9CQUdDLFNBSERBLG9CQUdDO0FBQUEsWUFGREUsc0JBRUMsU0FGREEsc0JBRUM7QUFBQSxZQURERCx1QkFDQyxTQUREQSx1QkFDQztBQUNELDRCQUNFLGdDQUFDLDZCQUFELHFCQUVFLGdDQUFDLGdCQUFEO0FBQWtCLFVBQUEsS0FBSyxFQUFFLGFBQXpCO0FBQXdDLFVBQUEsV0FBVztBQUFuRCx3QkFDRSxnQ0FBQyx1QkFBRCxFQUE2QkQsb0JBQTdCLENBREYsZUFFRSxnQ0FBQywrQ0FBRCxxQkFDRSxnQ0FBQyx3QkFBRCxnQ0FDTUUsc0JBRE47QUFFRSxVQUFBLE9BQU8sRUFBRTFDLEtBQUssQ0FBQytDLGNBQU4sQ0FBcUJDO0FBRmhDLFdBREYsZUFLRSxnQ0FBQyxzQkFBRDtBQUNFLFVBQUEsT0FBTyxFQUFFaEQsS0FBSyxDQUFDK0MsY0FBTixDQUFxQkM7QUFEaEMsV0FFTVAsdUJBRk4sRUFMRixFQVNHekMsS0FBSyxDQUFDMkMsaUJBQU4sQ0FBd0J3QixnQkFBeEIsQ0FBeUNDLFNBQXpDLENBQW1EcEUsS0FBSyxDQUFDQyxNQUF6RCxpQkFDQyxnQ0FBQyx1QkFBRCxnQ0FDTUQsS0FBSyxDQUFDMkMsaUJBQU4sQ0FBd0J3QixnQkFEOUIsRUFFTTFCLHVCQUZOO0FBR0UsVUFBQSxPQUFPLEVBQUV6QyxLQUFLLENBQUMrQyxjQUFOLENBQXFCQztBQUhoQyxXQURELEdBTUcsSUFmTixlQWdCRSxnQ0FBQyxlQUFELGdDQUFxQmhELEtBQUssQ0FBQzJDLGlCQUFOLENBQXdCTSxPQUE3QyxFQUEwRFQsb0JBQTFELEVBaEJGLENBRkYsQ0FGRixlQXlCRSxnQ0FBQyxnQkFBRDtBQUFrQixVQUFBLEtBQUssRUFBRSxjQUF6QjtBQUF5QyxVQUFBLFdBQVc7QUFBcEQsd0JBQ0UsZ0NBQUMsZUFBRCxnQ0FBcUJ4QyxLQUFLLENBQUMyQyxpQkFBTixDQUF3QjBCLGFBQTdDLEVBQWdFN0Isb0JBQWhFLEVBREYsZUFFRSxnQ0FBQywrQ0FBRCxxQkFDRSxnQ0FBQyxlQUFELGdDQUFxQnhDLEtBQUssQ0FBQzJDLGlCQUFOLENBQXdCa0IsV0FBN0MsRUFBOERyQixvQkFBOUQsRUFERixDQUZGLENBekJGLENBREY7QUFrQ0Q7QUF0SjBDO0FBQUE7QUFBQSxhQXdKM0MsMENBS0c7QUFBQSxZQUpEeEMsS0FJQyxTQUpEQSxLQUlDO0FBQUEsWUFIRHdDLG9CQUdDLFNBSERBLG9CQUdDO0FBQUEsWUFGREUsc0JBRUMsU0FGREEsc0JBRUM7QUFBQSxZQURERCx1QkFDQyxTQUREQSx1QkFDQztBQUNELDRCQUNFLGdDQUFDLDZCQUFELHFCQUVFLGdDQUFDLGdCQUFEO0FBQWtCLFVBQUEsS0FBSyxFQUFFLGFBQXpCO0FBQXdDLFVBQUEsV0FBVztBQUFuRCx3QkFDRSxnQ0FBQyx1QkFBRCxFQUE2QkQsb0JBQTdCLENBREYsZUFFRSxnQ0FBQywrQ0FBRCxxQkFDRSxnQ0FBQyxlQUFELGdDQUFxQnhDLEtBQUssQ0FBQzJDLGlCQUFOLENBQXdCTSxPQUE3QyxFQUEwRFQsb0JBQTFELEVBREYsQ0FGRixDQUZGLGVBU0UsZ0NBQUMsZ0JBQUQ7QUFBa0IsVUFBQSxLQUFLLEVBQUU7QUFBekIsd0JBQ0UsZ0NBQUMsZUFBRCxnQ0FDTXhDLEtBQUssQ0FBQzJDLGlCQUFOLENBQXdCZ0IsTUFEOUIsRUFFTW5CLG9CQUZOO0FBR0UsVUFBQSxLQUFLLEVBQUU7QUFIVCxXQURGLENBVEYsZUFpQkUsZ0NBQUMsZ0JBQUQ7QUFBa0IsVUFBQSxLQUFLLEVBQUU7QUFBekIsd0JBQ0UsZ0NBQUMsc0JBQUQ7QUFDRSxVQUFBLE9BQU8sRUFBRXhDLEtBQUssQ0FBQytDLGNBQU4sQ0FBcUJ1QjtBQURoQyxXQUVNN0IsdUJBRk4sRUFERixDQWpCRixDQURGO0FBMEJEO0FBeEwwQztBQUFBO0FBQUEsYUEwTDNDLGdDQUF1QmxELEtBQXZCLEVBQThCO0FBQzVCLGVBQU8sS0FBS2dGLDZCQUFMLENBQW1DaEYsS0FBbkMsQ0FBUDtBQUNEO0FBNUwwQztBQUFBO0FBQUEsYUE4TDNDLG1DQUEwQkEsS0FBMUIsRUFBaUM7QUFDL0IsZUFBTyxLQUFLZ0YsNkJBQUwsQ0FBbUNoRixLQUFuQyxDQUFQO0FBQ0Q7QUFoTTBDO0FBQUE7QUFBQSxhQWtNM0MsOENBS0c7QUFBQSxZQUpEUyxLQUlDLFNBSkRBLEtBSUM7QUFBQSxZQUhEd0Msb0JBR0MsU0FIREEsb0JBR0M7QUFBQSxZQUZERSxzQkFFQyxTQUZEQSxzQkFFQztBQUFBLFlBRERELHVCQUNDLFNBRERBLHVCQUNDO0FBQUEsWUFDTXhDLE1BRE4sR0FDZ0JELEtBRGhCLENBQ01DLE1BRE47QUFBQSxZQUdhdUUsUUFIYixHQUlHdkUsTUFKSCxDQUdDc0QsU0FIRCxDQUdhaUIsUUFIYjtBQUtELFlBQU1DLHNCQUFzQixHQUFHLDhCQUEvQjtBQUNBLFlBQU1DLGtCQUFrQixHQUFHLDBCQUEzQjtBQUVBLDRCQUNFLGdDQUFDLDZCQUFELHFCQUVFLGdDQUFDLGdCQUFEO0FBQWtCLFVBQUEsS0FBSyxFQUFFLGFBQXpCO0FBQXdDLFVBQUEsV0FBVztBQUFuRCx3QkFDRSxnQ0FBQyx1QkFBRCxFQUE2QmxDLG9CQUE3QixDQURGLGVBRUUsZ0NBQUMsK0NBQUQscUJBQ0UsZ0NBQUMsd0JBQUQsZ0NBQ01FLHNCQUROO0FBRUUsVUFBQSxPQUFPLEVBQUUxQyxLQUFLLENBQUMrQyxjQUFOLENBQXFCQztBQUZoQyxXQURGLGVBS0UsZ0NBQUMsc0JBQUQ7QUFDRSxVQUFBLE9BQU8sRUFBRWhELEtBQUssQ0FBQytDLGNBQU4sQ0FBcUJDO0FBRGhDLFdBRU1QLHVCQUZOLEVBTEYsRUFTR3pDLEtBQUssQ0FBQzJDLGlCQUFOLENBQXdCd0IsZ0JBQXhCLENBQXlDQyxTQUF6QyxDQUFtRHBFLEtBQUssQ0FBQ0MsTUFBekQsaUJBQ0MsZ0NBQUMsdUJBQUQsZ0NBQ01ELEtBQUssQ0FBQzJDLGlCQUFOLENBQXdCd0IsZ0JBRDlCLEVBRU0xQix1QkFGTjtBQUdFLFVBQUEsV0FBVyxFQUFFaUMsa0JBSGY7QUFJRSxVQUFBLE9BQU8sRUFBRTFFLEtBQUssQ0FBQytDLGNBQU4sQ0FBcUJDO0FBSmhDLFdBREQsR0FPRyxJQWhCTixFQWlCR2hELEtBQUssQ0FBQzJDLGlCQUFOLENBQXdCZ0MsVUFBeEIsSUFDRDNFLEtBQUssQ0FBQzJDLGlCQUFOLENBQXdCZ0MsVUFBeEIsQ0FBbUNQLFNBQW5DLENBQTZDcEUsS0FBSyxDQUFDQyxNQUFuRCxDQURDLGdCQUVDLGdDQUFDLGVBQUQsZ0NBQ01ELEtBQUssQ0FBQzJDLGlCQUFOLENBQXdCZ0MsVUFEOUIsRUFFTW5DLG9CQUZOLEVBRkQsR0FNRyxJQXZCTixlQXdCRSxnQ0FBQyxlQUFELGdDQUFxQnhDLEtBQUssQ0FBQzJDLGlCQUFOLENBQXdCTSxPQUE3QyxFQUEwRFQsb0JBQTFELEVBeEJGLENBRkYsQ0FGRixlQWlDRSxnQ0FBQyxnQkFBRDtBQUFrQixVQUFBLEtBQUssRUFBRSxjQUF6QjtBQUF5QyxVQUFBLFdBQVc7QUFBcEQsd0JBQ0UsZ0NBQUMsZUFBRCxnQ0FBcUJ4QyxLQUFLLENBQUMyQyxpQkFBTixDQUF3QmlDLGFBQTdDLEVBQWdFcEMsb0JBQWhFLEVBREYsZUFFRSxnQ0FBQywrQ0FBRCxxQkFDRSxnQ0FBQyxlQUFELGdDQUFxQnhDLEtBQUssQ0FBQzJDLGlCQUFOLENBQXdCa0MsUUFBN0MsRUFBMkRyQyxvQkFBM0QsRUFERixDQUZGLENBakNGLEVBeUNHeEMsS0FBSyxDQUFDMkMsaUJBQU4sQ0FBd0I2QixRQUF4QixnQkFDQyxnQ0FBQyxnQkFBRCxnQ0FDTXhFLEtBQUssQ0FBQzJDLGlCQUFOLENBQXdCNkIsUUFEOUIsRUFFTWhDLG9CQUZOO0FBR0UsVUFBQSxXQUFXO0FBSGIseUJBS0UsZ0NBQUMsZUFBRCxnQ0FDTXhDLEtBQUssQ0FBQzJDLGlCQUFOLENBQXdCbUMsY0FEOUIsRUFFTXRDLG9CQUZOO0FBR0UsVUFBQSxLQUFLLEVBQUM7QUFIUixXQUxGLGVBVUUsZ0NBQUMsK0NBQUQscUJBQ0UsZ0NBQUMsc0JBQUQsZ0NBQ01DLHVCQUROO0FBRUUsVUFBQSxPQUFPLEVBQUV6QyxLQUFLLENBQUMrQyxjQUFOLENBQXFCZ0IsSUFGaEM7QUFHRSxVQUFBLFdBQVcsRUFBRVUsc0JBSGY7QUFJRSxVQUFBLFFBQVEsRUFBRSxDQUFDRDtBQUpiLFdBREYsZUFPRSxnQ0FBQyx3QkFBRCxnQ0FDTTlCLHNCQUROO0FBRUUsVUFBQSxPQUFPLEVBQUUxQyxLQUFLLENBQUMrQyxjQUFOLENBQXFCZ0I7QUFGaEMsV0FQRixlQVdFLGdDQUFDLGVBQUQsZ0NBQ00vRCxLQUFLLENBQUMyQyxpQkFBTixDQUF3Qm9DLFNBRDlCLEVBRU12QyxvQkFGTjtBQUdFLFVBQUEsS0FBSyxFQUFDO0FBSFIsV0FYRixlQWdCRSxnQ0FBQyxlQUFELGdDQUNNeEMsS0FBSyxDQUFDMkMsaUJBQU4sQ0FBd0JxQyx5QkFEOUIsRUFFTXhDLG9CQUZOO0FBR0UsVUFBQSxLQUFLLEVBQUM7QUFIUixXQWhCRixFQXFCR3hDLEtBQUssQ0FBQzJDLGlCQUFOLENBQXdCc0MsZUFBeEIsQ0FBd0NiLFNBQXhDLENBQWtEcEUsS0FBSyxDQUFDQyxNQUF4RCxpQkFDQyxnQ0FBQyx1QkFBRCxnQ0FDTUQsS0FBSyxDQUFDMkMsaUJBQU4sQ0FBd0JzQyxlQUQ5QixFQUVNeEMsdUJBRk47QUFHRSxVQUFBLE9BQU8sRUFBRXpDLEtBQUssQ0FBQytDLGNBQU4sQ0FBcUJnQjtBQUhoQyxXQURELEdBTUcsSUEzQk4sRUE0QkcvRCxLQUFLLENBQUMyQyxpQkFBTixDQUF3QnVDLG1CQUF4QixDQUE0Q2QsU0FBNUMsQ0FBc0RwRSxLQUFLLENBQUNDLE1BQTVELGlCQUNDLGdDQUFDLGVBQUQsZ0NBQ01ELEtBQUssQ0FBQzJDLGlCQUFOLENBQXdCdUMsbUJBRDlCLEVBRU0xQyxvQkFGTixFQURELEdBS0csSUFqQ04sQ0FWRixDQURELEdBK0NHLElBeEZOLENBREY7QUE0RkQsT0EzUzBDLENBNlMzQzs7QUE3UzJDO0FBQUE7QUFBQSxhQThTM0MsNENBS0c7QUFBQSxZQUpEeEMsS0FJQyxTQUpEQSxLQUlDO0FBQUEsWUFIRHdDLG9CQUdDLFNBSERBLG9CQUdDO0FBQUEsWUFGREUsc0JBRUMsU0FGREEsc0JBRUM7QUFBQSxZQURERCx1QkFDQyxTQUREQSx1QkFDQztBQUNELDRCQUNFLGdDQUFDLDZCQUFELHFCQUVFLGdDQUFDLGdCQUFELGdDQUNNekMsS0FBSyxDQUFDMkMsaUJBQU4sQ0FBd0JDLE1BRDlCLEVBRU1KLG9CQUZOO0FBR0UsVUFBQSxLQUFLLEVBQUUsaUJBSFQ7QUFJRSxVQUFBLFdBQVc7QUFKYixZQU1HeEMsS0FBSyxDQUFDQyxNQUFOLENBQWE2QyxVQUFiLGdCQUNDLGdDQUFDLHVCQUFELEVBQTZCTixvQkFBN0IsQ0FERCxnQkFHQyxnQ0FBQyxrQkFBRCxFQUF3QkUsc0JBQXhCLENBVEosZUFXRSxnQ0FBQywrQ0FBRCxxQkFDRSxnQ0FBQyxzQkFBRDtBQUNFLFVBQUEsT0FBTyxFQUFFMUMsS0FBSyxDQUFDK0MsY0FBTixDQUFxQkM7QUFEaEMsV0FFTVAsdUJBRk4sRUFERixlQUtFLGdDQUFDLGVBQUQsZ0NBQ016QyxLQUFLLENBQUMyQyxpQkFBTixDQUF3Qk0sT0FEOUIsRUFFTVQsb0JBRk47QUFHRSxVQUFBLFFBQVEsRUFBRSxDQUFDeEMsS0FBSyxDQUFDQyxNQUFOLENBQWFzRCxTQUFiLENBQXVCWDtBQUhwQyxXQUxGLENBWEYsQ0FGRixlQTJCRSxnQ0FBQyxnQkFBRCxnQ0FDTTVDLEtBQUssQ0FBQzJDLGlCQUFOLENBQXdCVSxPQUQ5QixFQUVNYixvQkFGTjtBQUdFLFVBQUEsV0FBVztBQUhiLHlCQUtFLGdDQUFDLHNCQUFEO0FBQ0UsVUFBQSxPQUFPLEVBQUV4QyxLQUFLLENBQUMrQyxjQUFOLENBQXFCUztBQURoQyxXQUVNZix1QkFGTixFQUxGLEVBU0d6QyxLQUFLLENBQUNDLE1BQU4sQ0FBYXFELGdCQUFiLGdCQUNDLGdDQUFDLHVCQUFELGdDQUE2QmQsb0JBQTdCO0FBQW1ELFVBQUEsUUFBUSxFQUFDO0FBQTVELFdBREQsZ0JBR0MsZ0NBQUMsa0JBQUQsZ0NBQ01BLG9CQUROO0FBRUUsVUFBQSxhQUFhLEVBQUV4QyxLQUFLLENBQUNDLE1BQU4sQ0FBYXNELFNBQWIsQ0FBdUJDLFdBRnhDO0FBR0UsVUFBQSxRQUFRLEVBQUM7QUFIWCxXQVpKLGVBa0JFLGdDQUFDLCtDQUFELHFCQUNFLGdDQUFDLGVBQUQsZ0NBQ014RCxLQUFLLENBQUMyQyxpQkFBTixDQUF3QndDLGFBRDlCLEVBRU0zQyxvQkFGTjtBQUdFLFVBQUEsUUFBUSxFQUFFLENBQUN4QyxLQUFLLENBQUNDLE1BQU4sQ0FBYXNELFNBQWIsQ0FBdUJGO0FBSHBDLFdBREYsZUFNRSxnQ0FBQyxlQUFELGdDQUNNckQsS0FBSyxDQUFDMkMsaUJBQU4sQ0FBd0JjLFNBRDlCLEVBRU1qQixvQkFGTjtBQUdFLFVBQUEsUUFBUSxFQUFFLENBQUN4QyxLQUFLLENBQUNDLE1BQU4sQ0FBYXNELFNBQWIsQ0FBdUJGO0FBSHBDLFdBTkYsQ0FsQkYsQ0EzQkYsZUE0REUsZ0NBQUMsZ0JBQUQ7QUFBa0IsVUFBQSxLQUFLLEVBQUUsZ0JBQXpCO0FBQTJDLFVBQUEsV0FBVztBQUF0RCxXQUNHLENBQUNyRCxLQUFLLENBQUNDLE1BQU4sQ0FBYW1GLGFBQWQsZ0JBQ0MsZ0NBQUMsZUFBRCxnQ0FDTXBGLEtBQUssQ0FBQzJDLGlCQUFOLENBQXdCa0MsUUFEOUIsRUFFTXJDLG9CQUZOO0FBR0UsVUFBQSxLQUFLLEVBQUU7QUFIVCxXQURELGdCQU9DLGdDQUFDLGVBQUQsZ0NBQ014QyxLQUFLLENBQUMyQyxpQkFBTixDQUF3QjBDLGFBRDlCLEVBRU03QyxvQkFGTjtBQUdFLFVBQUEsS0FBSyxFQUFFO0FBSFQsV0FSSixlQWNFLGdDQUFDLCtDQUFELHFCQUNFLGdDQUFDLHNCQUFEO0FBQ0UsVUFBQSxPQUFPLEVBQUV4QyxLQUFLLENBQUMrQyxjQUFOLENBQXFCOEI7QUFEaEMsV0FFTXBDLHVCQUZOLEVBREYsQ0FkRixDQTVERixlQW1GRSxnQ0FBQyxnQkFBRCxnQ0FDTXpDLEtBQUssQ0FBQzJDLGlCQUFOLENBQXdCNkIsUUFEOUIsRUFFTWhDLG9CQUZOO0FBR0UsVUFBQSxXQUFXO0FBSGIseUJBS0UsZ0NBQUMsc0JBQUQ7QUFDRSxVQUFBLE9BQU8sRUFBRXhDLEtBQUssQ0FBQytDLGNBQU4sQ0FBcUJnQjtBQURoQyxXQUVNdEIsdUJBRk4sRUFMRixlQVNFLGdDQUFDLCtDQUFELHFCQUNFLGdDQUFDLGVBQUQsZ0NBQ016QyxLQUFLLENBQUMyQyxpQkFBTixDQUF3Qm1DLGNBRDlCLEVBRU10QyxvQkFGTixFQURGLGVBS0UsZ0NBQUMsZUFBRCxnQ0FDTXhDLEtBQUssQ0FBQzJDLGlCQUFOLENBQXdCb0MsU0FEOUIsRUFFTXZDLG9CQUZOO0FBR0UsVUFBQSxLQUFLLEVBQUM7QUFIUixXQUxGLGVBVUUsZ0NBQUMsZUFBRCxnQ0FDTXhDLEtBQUssQ0FBQzJDLGlCQUFOLENBQXdCcUMseUJBRDlCLEVBRU14QyxvQkFGTixFQVZGLENBVEYsQ0FuRkYsZUE4R0UsZ0NBQUMsY0FBRDtBQUNFLFVBQUEsRUFBRSxFQUFFeEMsS0FBSyxDQUFDZ0UsRUFEWjtBQUVFLFVBQUEsTUFBTSxFQUFFeEIsb0JBQW9CLENBQUNyQyxNQUYvQjtBQUdFLFVBQUEsb0JBQW9CLEVBQUUsS0FBS1osS0FBTCxDQUFXMEUsb0JBSG5DO0FBSUUsVUFBQSxTQUFTLEVBQUVqRSxLQUFLLENBQUNDLE1BQU4sQ0FBYWlFO0FBSjFCLFVBOUdGLENBREY7QUF1SEQ7QUEzYTBDO0FBQUE7QUFBQSxhQTZhM0MsK0JBQXNCb0IsSUFBdEIsRUFBNEI7QUFDMUIsZUFBTyxLQUFLQyxzQkFBTCxDQUE0QkQsSUFBNUIsQ0FBUDtBQUNEO0FBL2EwQztBQUFBO0FBQUEsYUFpYjNDLHVDQUtHO0FBQUEsWUFKRHRGLEtBSUMsU0FKREEsS0FJQztBQUFBLFlBSER3QyxvQkFHQyxTQUhEQSxvQkFHQztBQUFBLFlBRkRFLHNCQUVDLFNBRkRBLHNCQUVDO0FBQUEsWUFEREQsdUJBQ0MsU0FEREEsdUJBQ0M7QUFDRCw0QkFDRSxnQ0FBQyw2QkFBRCxxQkFFRSxnQ0FBQyxnQkFBRDtBQUFrQixVQUFBLEtBQUssRUFBRSxhQUF6QjtBQUF3QyxVQUFBLFdBQVc7QUFBbkQsV0FDR3pDLEtBQUssQ0FBQ0MsTUFBTixDQUFhNkMsVUFBYixnQkFDQyxnQ0FBQyx1QkFBRCxFQUE2Qk4sb0JBQTdCLENBREQsZ0JBR0MsZ0NBQUMscUJBQUQ7QUFDRSxVQUFBLEtBQUssRUFBRXhDLEtBRFQ7QUFFRSxVQUFBLFVBQVUsRUFBRTBDLHNCQUFzQixDQUFDbEMsVUFGckM7QUFHRSxVQUFBLGNBQWMsRUFBRWtDLHNCQUFzQixDQUFDcEMsUUFIekM7QUFJRSxVQUFBLGlCQUFpQixFQUFFa0Msb0JBQW9CLENBQUNsQztBQUoxQyxVQUpKLGVBV0UsZ0NBQUMsK0NBQUQscUJBQ0UsZ0NBQUMsc0JBQUQ7QUFDRSxVQUFBLE9BQU8sRUFBRU4sS0FBSyxDQUFDK0MsY0FBTixDQUFxQnlDO0FBRGhDLFdBRU0vQyx1QkFGTixFQURGLGVBS0UsZ0NBQUMsZUFBRCxnQ0FBcUJ6QyxLQUFLLENBQUMyQyxpQkFBTixDQUF3Qk0sT0FBN0MsRUFBMERULG9CQUExRCxFQUxGLENBWEYsQ0FGRixlQXVCRSxnQ0FBQyxnQkFBRDtBQUFrQixVQUFBLEtBQUssRUFBRSxjQUF6QjtBQUF5QyxVQUFBLFdBQVc7QUFBcEQsV0FDR3hDLEtBQUssQ0FBQ0MsTUFBTixDQUFheUQsU0FBYixnQkFDQyxnQ0FBQyxlQUFELGdDQUNNMUQsS0FBSyxDQUFDMkMsaUJBQU4sQ0FBd0JvQyxTQUQ5QixFQUVNdkMsb0JBRk47QUFHRSxVQUFBLFFBQVEsRUFBRSxDQUFDeEMsS0FBSyxDQUFDQyxNQUFOLENBQWF5RCxTQUgxQjtBQUlFLFVBQUEsS0FBSyxFQUFFO0FBSlQsV0FERCxnQkFRQyxnQ0FBQyxlQUFELGdDQUNNMUQsS0FBSyxDQUFDMkMsaUJBQU4sQ0FBd0JjLFNBRDlCLEVBRU1qQixvQkFGTjtBQUdFLFVBQUEsS0FBSyxFQUFFO0FBSFQsV0FUSixlQWVFLGdDQUFDLCtDQUFELHFCQUNFLGdDQUFDLHNCQUFEO0FBQ0UsVUFBQSxPQUFPLEVBQUV4QyxLQUFLLENBQUMrQyxjQUFOLENBQXFCZ0I7QUFEaEMsV0FFTXRCLHVCQUZOLEVBREYsQ0FmRixDQXZCRixFQStDR3pDLEtBQUssQ0FBQzJDLGlCQUFOLENBQXdCbUMsY0FBeEIsZ0JBQ0MsZ0NBQUMsZ0JBQUQ7QUFBa0IsVUFBQSxLQUFLLEVBQUMsZ0NBQXhCO0FBQXlELFVBQUEsV0FBVztBQUFwRSx3QkFDRSxnQ0FBQyxlQUFELGdDQUNNOUUsS0FBSyxDQUFDMkMsaUJBQU4sQ0FBd0JtQyxjQUQ5QixFQUVNdEMsb0JBRk4sRUFERixDQURELEdBT0csSUF0RE4sQ0FERjtBQTBERDtBQWpmMEM7QUFBQTtBQUFBLGFBbWYzQyx1Q0FLRztBQUFBLFlBSkR4QyxLQUlDLFNBSkRBLEtBSUM7QUFBQSxZQUhEd0Msb0JBR0MsU0FIREEsb0JBR0M7QUFBQSxZQUZERSxzQkFFQyxTQUZEQSxzQkFFQztBQUFBLFlBRERELHVCQUNDLFNBRERBLHVCQUNDO0FBQUEsb0NBR0d6QyxLQUhILENBRUN5RixJQUZELENBRVFDLFlBRlI7QUFBQSxZQUVRQSxZQUZSLHNDQUV1QixFQUZ2QjtBQUtELDRCQUNFLGdDQUFDLDZCQUFELHFCQUVFLGdDQUFDLGdCQUFEO0FBQWtCLFVBQUEsS0FBSyxFQUFFLGFBQXpCO0FBQXdDLFVBQUEsV0FBVztBQUFuRCxXQUNHMUYsS0FBSyxDQUFDQyxNQUFOLENBQWE2QyxVQUFiLGdCQUNDLGdDQUFDLHVCQUFELEVBQTZCTixvQkFBN0IsQ0FERCxnQkFHQyxnQ0FBQyxrQkFBRCxFQUF3QkUsc0JBQXhCLENBSkosZUFNRSxnQ0FBQywrQ0FBRCxxQkFDRSxnQ0FBQyxzQkFBRDtBQUNFLFVBQUEsT0FBTyxFQUFFMUMsS0FBSyxDQUFDK0MsY0FBTixDQUFxQkM7QUFEaEMsV0FFTVAsdUJBRk4sRUFERixlQUtFLGdDQUFDLGVBQUQsZ0NBQXFCekMsS0FBSyxDQUFDMkMsaUJBQU4sQ0FBd0JNLE9BQTdDLEVBQTBEVCxvQkFBMUQsRUFMRixDQU5GLENBRkYsZUFrQkUsZ0NBQUMsZ0JBQUQsZ0NBQXNCQSxvQkFBdEI7QUFBNEMsVUFBQSxLQUFLLEVBQUMsbUJBQWxEO0FBQXNFLFVBQUEsV0FBVztBQUFqRixZQUNHeEMsS0FBSyxDQUFDQyxNQUFOLENBQWF5RCxTQUFiLGdCQUNDLGdDQUFDLGVBQUQsZ0NBQ00xRCxLQUFLLENBQUMyQyxpQkFBTixDQUF3Qm9DLFNBRDlCLEVBRU12QyxvQkFGTjtBQUdFLFVBQUEsS0FBSyxFQUFFO0FBSFQsV0FERCxnQkFPQyxnQ0FBQyxlQUFELGdDQUNNeEMsS0FBSyxDQUFDMkMsaUJBQU4sQ0FBd0JjLFNBRDlCLEVBRU1qQixvQkFGTjtBQUdFLFVBQUEsS0FBSyxFQUFFO0FBSFQsV0FSSixlQWVFLGdDQUFDLCtDQUFELHFCQUNFLGdDQUFDLHNCQUFEO0FBQ0UsVUFBQSxPQUFPLEVBQUV4QyxLQUFLLENBQUMrQyxjQUFOLENBQXFCZ0I7QUFEaEMsV0FFTXRCLHVCQUZOLEVBREYsQ0FmRixDQWxCRixlQTBDRSxnQ0FBQyxnQkFBRCxnQ0FDTUQsb0JBRE4sRUFFT2tELFlBQVksQ0FBQ0MsT0FBYixHQUF1QjNGLEtBQUssQ0FBQzJDLGlCQUFOLENBQXdCaUQsT0FBL0MsR0FBeUQsRUFGaEU7QUFHRSxVQUFBLEtBQUssRUFBQyxtQkFIUjtBQUlFLFVBQUEsV0FBVyxFQUFDO0FBSmQseUJBTUUsZ0NBQUMsZUFBRCxnQ0FDTTVGLEtBQUssQ0FBQzJDLGlCQUFOLENBQXdCa0QsV0FEOUIsRUFFTXJELG9CQUZOO0FBR0UsVUFBQSxLQUFLLEVBQUU7QUFIVCxXQU5GLENBMUNGLENBREY7QUF5REQ7QUF0akIwQztBQUFBO0FBQUEsYUF3akIzQywwQ0FLRztBQUFBLFlBSkR4QyxLQUlDLFNBSkRBLEtBSUM7QUFBQSxZQUhEd0Msb0JBR0MsU0FIREEsb0JBR0M7QUFBQSxZQUZERSxzQkFFQyxTQUZEQSxzQkFFQztBQUFBLFlBRERELHVCQUNDLFNBRERBLHVCQUNDO0FBQUEscUNBSUd6QyxLQUpILENBRUN5RixJQUZELENBRVFDLFlBRlI7QUFBQSxZQUVRQSxZQUZSLHVDQUV1QixFQUZ2QjtBQUFBLFlBR1VuQyxTQUhWLEdBSUd2RCxLQUpILENBR0NDLE1BSEQsQ0FHVXNELFNBSFY7QUFNRCw0QkFDRSxnQ0FBQyw2QkFBRCxRQUVHbUMsWUFBWSxDQUFDQyxPQUFiLElBQXdCRCxZQUFZLENBQUN0QyxLQUFyQyxnQkFDQyxnQ0FBQyxnQkFBRCxnQ0FDTXBELEtBQUssQ0FBQzJDLGlCQUFOLENBQXdCQyxNQUQ5QixFQUVNSixvQkFGTjtBQUdFLFVBQUEsS0FBSyxFQUFDLGlCQUhSO0FBSUUsVUFBQSxXQUFXO0FBSmIsWUFNR3hDLEtBQUssQ0FBQ0MsTUFBTixDQUFhNkMsVUFBYixnQkFDQyxnQ0FBQyx1QkFBRCxFQUE2Qk4sb0JBQTdCLENBREQsZ0JBR0MsZ0NBQUMsa0JBQUQsRUFBd0JFLHNCQUF4QixDQVRKLGVBV0UsZ0NBQUMsK0NBQUQscUJBQ0UsZ0NBQUMsc0JBQUQ7QUFDRSxVQUFBLE9BQU8sRUFBRTFDLEtBQUssQ0FBQytDLGNBQU4sQ0FBcUJDO0FBRGhDLFdBRU1QLHVCQUZOLEVBREYsZUFLRSxnQ0FBQyxlQUFELGdDQUFxQnpDLEtBQUssQ0FBQzJDLGlCQUFOLENBQXdCTSxPQUE3QyxFQUEwRFQsb0JBQTFELEVBTEYsQ0FYRixDQURELEdBb0JHLElBdEJOLGVBeUJFLGdDQUFDLGdCQUFELGdDQUNNeEMsS0FBSyxDQUFDMkMsaUJBQU4sQ0FBd0JpRCxPQUQ5QixFQUVNcEQsb0JBRk47QUFHRSxVQUFBLEtBQUssRUFBQyxtQkFIUjtBQUlFLFVBQUEsV0FBVztBQUpiLFlBTUd4QyxLQUFLLENBQUNDLE1BQU4sQ0FBYXFELGdCQUFiLGdCQUNDLGdDQUFDLHVCQUFELGdDQUE2QmQsb0JBQTdCO0FBQW1ELFVBQUEsUUFBUSxFQUFDO0FBQTVELFdBREQsZ0JBR0MsZ0NBQUMsa0JBQUQsZ0NBQ01BLG9CQUROO0FBRUUsVUFBQSxhQUFhLEVBQUV4QyxLQUFLLENBQUNDLE1BQU4sQ0FBYXNELFNBQWIsQ0FBdUJDLFdBRnhDO0FBR0UsVUFBQSxRQUFRLEVBQUM7QUFIWCxXQVRKLGVBZUUsZ0NBQUMsK0NBQUQscUJBQ0UsZ0NBQUMsc0JBQUQ7QUFDRSxVQUFBLE9BQU8sRUFBRXhELEtBQUssQ0FBQytDLGNBQU4sQ0FBcUJTO0FBRGhDLFdBRU1mLHVCQUZOLEVBREYsZUFLRSxnQ0FBQyxlQUFELGdDQUNNekMsS0FBSyxDQUFDMkMsaUJBQU4sQ0FBd0J3QyxhQUQ5QixFQUVNM0Msb0JBRk4sRUFMRixDQWZGLENBekJGLGVBcURFLGdDQUFDLGdCQUFELGdDQUNNQSxvQkFETixFQUVPa0QsWUFBWSxDQUFDQyxPQUFiLEdBQXVCM0YsS0FBSyxDQUFDMkMsaUJBQU4sQ0FBd0JpRCxPQUEvQyxHQUF5RCxFQUZoRTtBQUdFLFVBQUEsS0FBSyxFQUFDLG1CQUhSO0FBSUUsVUFBQSxXQUFXO0FBSmIsWUFNRzVGLEtBQUssQ0FBQ0MsTUFBTixDQUFheUQsU0FBYixnQkFDQyxnQ0FBQyxlQUFELGdDQUNNMUQsS0FBSyxDQUFDMkMsaUJBQU4sQ0FBd0JvQyxTQUQ5QixFQUVNdkMsb0JBRk47QUFHRSxVQUFBLEtBQUssRUFBRTtBQUhULFdBREQsZ0JBT0MsZ0NBQUMsZUFBRCxnQ0FDTXhDLEtBQUssQ0FBQzJDLGlCQUFOLENBQXdCYyxTQUQ5QixFQUVNakIsb0JBRk47QUFHRSxVQUFBLEtBQUssRUFBRTtBQUhULFdBYkosZUFtQkUsZ0NBQUMsK0NBQUQscUJBQ0UsZ0NBQUMsc0JBQUQ7QUFDRSxVQUFBLE9BQU8sRUFBRXhDLEtBQUssQ0FBQytDLGNBQU4sQ0FBcUJnQjtBQURoQyxXQUVNdEIsdUJBRk4sRUFERixDQW5CRixDQXJERixFQWlGR2lELFlBQVksQ0FBQ0MsT0FBYixnQkFDQyxnQ0FBQyxnQkFBRCxnQ0FDTW5ELG9CQUROLEVBRU14QyxLQUFLLENBQUMyQyxpQkFBTixDQUF3QjZCLFFBRjlCO0FBR0UsVUFBQSxRQUFRLEVBQUUsQ0FBQ2pCLFNBQVMsQ0FBQ1gsTUFIdkI7QUFJRSxVQUFBLFdBQVc7QUFKYix5QkFNRSxnQ0FBQyxlQUFELGdDQUNNNUMsS0FBSyxDQUFDMkMsaUJBQU4sQ0FBd0JtQyxjQUQ5QixFQUVNdEMsb0JBRk47QUFHRSxVQUFBLEtBQUssRUFBRTtBQUhULFdBTkYsZUFXRSxnQ0FBQywrQ0FBRCxxQkFDRSxnQ0FBQyxzQkFBRDtBQUNFLFVBQUEsT0FBTyxFQUFFeEMsS0FBSyxDQUFDK0MsY0FBTixDQUFxQitDO0FBRGhDLFdBRU1yRCx1QkFGTixFQURGLGVBS0UsZ0NBQUMsZUFBRCxnQ0FDTXpDLEtBQUssQ0FBQzJDLGlCQUFOLENBQXdCcUMseUJBRDlCLEVBRU14QyxvQkFGTixFQUxGLGVBU0UsZ0NBQUMsZUFBRCxnQ0FBcUJBLG9CQUFyQixFQUErQ3hDLEtBQUssQ0FBQzJDLGlCQUFOLENBQXdCb0QsU0FBdkUsRUFURixDQVhGLENBREQsR0F3QkcsSUF6R04sRUE0R0dMLFlBQVksQ0FBQ3RDLEtBQWIsZ0JBQ0MsZ0NBQUMsZ0JBQUQ7QUFBa0IsVUFBQSxLQUFLLEVBQUUsY0FBekI7QUFBeUMsVUFBQSxXQUFXO0FBQXBELFdBQ0csQ0FBQ3BELEtBQUssQ0FBQ0MsTUFBTixDQUFhK0YsV0FBZCxnQkFDQyxnQ0FBQyxlQUFELGdDQUNNaEcsS0FBSyxDQUFDMkMsaUJBQU4sQ0FBd0JnQixNQUQ5QixFQUVNbkIsb0JBRk47QUFHRSxVQUFBLEtBQUssRUFBRSxLQUhUO0FBSUUsVUFBQSxRQUFRLEVBQUVvQixPQUFPLENBQUM1RCxLQUFLLENBQUNDLE1BQU4sQ0FBYStGLFdBQWQ7QUFKbkIsV0FERCxnQkFRQyxnQ0FBQyxlQUFELGdDQUNNaEcsS0FBSyxDQUFDMkMsaUJBQU4sQ0FBd0JrQixXQUQ5QixFQUVNckIsb0JBRk47QUFHRSxVQUFBLEtBQUssRUFBRSxLQUhUO0FBSUUsVUFBQSxRQUFRLEVBQUUsQ0FBQ3hDLEtBQUssQ0FBQ0MsTUFBTixDQUFhK0Y7QUFKMUIsV0FUSixlQWdCRSxnQ0FBQywrQ0FBRCxxQkFDRSxnQ0FBQyxzQkFBRDtBQUNFLFVBQUEsT0FBTyxFQUFFaEcsS0FBSyxDQUFDK0MsY0FBTixDQUFxQlk7QUFEaEMsV0FFTWxCLHVCQUZOLEVBREYsQ0FoQkYsQ0FERCxHQXdCRyxJQXBJTixDQURGO0FBd0lEO0FBM3NCMEM7QUFBQTtBQUFBLGFBNnNCM0MscUNBQW9EO0FBQUEsWUFBOUJ6QyxLQUE4QixTQUE5QkEsS0FBOEI7QUFBQSxZQUF2QndDLG9CQUF1QixTQUF2QkEsb0JBQXVCO0FBQ2xELDRCQUNFLGdDQUFDLGVBQUQscUJBQ0UsZ0NBQUMsZ0JBQUQ7QUFBa0IsVUFBQSxLQUFLLEVBQUUsZUFBekI7QUFBMEMsVUFBQSxXQUFXO0FBQXJELHdCQUNFLGdDQUFDLHdCQUFEO0FBQ0UsVUFBQSxJQUFJLEVBQUMsTUFEUDtBQUVFLFVBQUEsTUFBTSxFQUFDLFlBRlQ7QUFHRSxVQUFBLFFBQVEsRUFBRSxrQkFBQXlELENBQUMsRUFBSTtBQUNiLGdCQUFJQSxDQUFDLENBQUNDLE1BQUYsQ0FBU0MsS0FBVCxJQUFrQkYsQ0FBQyxDQUFDQyxNQUFGLENBQVNDLEtBQVQsQ0FBZSxDQUFmLENBQXRCLEVBQXlDO0FBQ3ZDLGtCQUFNQyxHQUFHLEdBQUdDLEdBQUcsQ0FBQ0MsZUFBSixDQUFvQkwsQ0FBQyxDQUFDQyxNQUFGLENBQVNDLEtBQVQsQ0FBZSxDQUFmLENBQXBCLENBQVo7QUFDQTNELGNBQUFBLG9CQUFvQixDQUFDbEMsUUFBckIsQ0FBOEI7QUFBQ2lHLGdCQUFBQSxVQUFVLEVBQUVIO0FBQWIsZUFBOUI7QUFDRDtBQUNGO0FBUkgsVUFERixDQURGLGVBYUUsZ0NBQUMsZ0JBQUQ7QUFBa0IsVUFBQSxLQUFLLEVBQUUsc0JBQXpCO0FBQWlELFVBQUEsV0FBVztBQUE1RCx3QkFDRSxnQ0FBQyxlQUFELGdDQUNNcEcsS0FBSyxDQUFDMkMsaUJBQU4sQ0FBd0I2RCxTQUQ5QixFQUVNaEUsb0JBRk47QUFHRSxVQUFBLFFBQVEsRUFBRTtBQUhaLFdBREYsZUFNRSxnQ0FBQyxlQUFELGdDQUNNeEMsS0FBSyxDQUFDMkMsaUJBQU4sQ0FBd0I4RCxNQUQ5QixFQUVNakUsb0JBRk47QUFHRSxVQUFBLFFBQVEsRUFBRTtBQUhaLFdBTkYsZUFXRSxnQ0FBQyxlQUFELGdDQUNNeEMsS0FBSyxDQUFDMkMsaUJBQU4sQ0FBd0IrRCxNQUQ5QixFQUVNbEUsb0JBRk47QUFHRSxVQUFBLFFBQVEsRUFBRTtBQUhaLFdBWEYsZUFnQkUsZ0NBQUMsZUFBRCxnQ0FDTXhDLEtBQUssQ0FBQzJDLGlCQUFOLENBQXdCZ0UsTUFEOUIsRUFFTW5FLG9CQUZOO0FBR0UsVUFBQSxRQUFRLEVBQUU7QUFIWixXQWhCRixDQWJGLENBREY7QUFzQ0Q7QUFwdkIwQztBQUFBO0FBQUEsYUFzdkIzQyxzQ0FLRztBQUFBLFlBSkR4QyxLQUlDLFVBSkRBLEtBSUM7QUFBQSxZQUhEd0Msb0JBR0MsVUFIREEsb0JBR0M7QUFBQSxZQUZERSxzQkFFQyxVQUZEQSxzQkFFQztBQUFBLFlBRERELHVCQUNDLFVBRERBLHVCQUNDO0FBQUEsWUFFVWMsU0FGVixHQUdHdkQsS0FISCxDQUVDQyxNQUZELENBRVVzRCxTQUZWO0FBS0QsNEJBQ0UsZ0NBQUMsNkJBQUQscUJBRUUsZ0NBQUMsZ0JBQUQsZ0NBQ012RCxLQUFLLENBQUMyQyxpQkFBTixDQUF3QkMsTUFEOUIsRUFFTUosb0JBRk47QUFHRSxVQUFBLEtBQUssRUFBQyxpQkFIUjtBQUlFLFVBQUEsV0FBVztBQUpiLFlBTUd4QyxLQUFLLENBQUNDLE1BQU4sQ0FBYTZDLFVBQWIsZ0JBQ0MsZ0NBQUMsdUJBQUQsRUFBNkJOLG9CQUE3QixDQURELGdCQUdDLGdDQUFDLGtCQUFELEVBQXdCRSxzQkFBeEIsQ0FUSixlQVdFLGdDQUFDLCtDQUFELHFCQUNFLGdDQUFDLHNCQUFEO0FBQ0UsVUFBQSxPQUFPLEVBQUUxQyxLQUFLLENBQUMrQyxjQUFOLENBQXFCQztBQURoQyxXQUVNUCx1QkFGTixFQURGLGVBS0UsZ0NBQUMsZUFBRCxnQ0FBcUJ6QyxLQUFLLENBQUMyQyxpQkFBTixDQUF3Qk0sT0FBN0MsRUFBMERULG9CQUExRCxFQUxGLENBWEYsQ0FGRixlQXVCRSxnQ0FBQyxnQkFBRCxnQ0FDTXhDLEtBQUssQ0FBQzJDLGlCQUFOLENBQXdCaUQsT0FEOUIsRUFFTXBELG9CQUZOO0FBR0UsVUFBQSxLQUFLLEVBQUMsbUJBSFI7QUFJRSxVQUFBLFdBQVc7QUFKYixZQU1HeEMsS0FBSyxDQUFDQyxNQUFOLENBQWFxRCxnQkFBYixnQkFDQyxnQ0FBQyx1QkFBRCxnQ0FBNkJkLG9CQUE3QjtBQUFtRCxVQUFBLFFBQVEsRUFBQztBQUE1RCxXQURELGdCQUdDLGdDQUFDLGtCQUFELGdDQUNNQSxvQkFETjtBQUVFLFVBQUEsYUFBYSxFQUFFeEMsS0FBSyxDQUFDQyxNQUFOLENBQWFzRCxTQUFiLENBQXVCQyxXQUZ4QztBQUdFLFVBQUEsUUFBUSxFQUFDO0FBSFgsV0FUSixlQWVFLGdDQUFDLCtDQUFELHFCQUNFLGdDQUFDLHNCQUFEO0FBQ0UsVUFBQSxPQUFPLEVBQUV4RCxLQUFLLENBQUMrQyxjQUFOLENBQXFCUztBQURoQyxXQUVNZix1QkFGTixFQURGLENBZkYsQ0F2QkYsZUErQ0UsZ0NBQUMsZ0JBQUQsZ0NBQXNCRCxvQkFBdEI7QUFBNEMsVUFBQSxLQUFLLEVBQUMsbUJBQWxEO0FBQXNFLFVBQUEsV0FBVztBQUFqRixZQUNHeEMsS0FBSyxDQUFDQyxNQUFOLENBQWF5RCxTQUFiLGdCQUNDLGdDQUFDLGVBQUQsZ0NBQ00xRCxLQUFLLENBQUMyQyxpQkFBTixDQUF3Qm9DLFNBRDlCLEVBRU12QyxvQkFGTjtBQUdFLFVBQUEsS0FBSyxFQUFFO0FBSFQsV0FERCxnQkFPQyxnQ0FBQyxlQUFELGdDQUNNeEMsS0FBSyxDQUFDMkMsaUJBQU4sQ0FBd0JjLFNBRDlCLEVBRU1qQixvQkFGTjtBQUdFLFVBQUEsS0FBSyxFQUFFO0FBSFQsV0FSSixlQWNFLGdDQUFDLCtDQUFELHFCQUNFLGdDQUFDLHNCQUFEO0FBQ0UsVUFBQSxPQUFPLEVBQUV4QyxLQUFLLENBQUMrQyxjQUFOLENBQXFCZ0I7QUFEaEMsV0FFTXRCLHVCQUZOLEVBREYsQ0FkRixDQS9DRixlQXNFRSxnQ0FBQyxnQkFBRCxnQ0FDTUQsb0JBRE4sRUFFTXhDLEtBQUssQ0FBQzJDLGlCQUFOLENBQXdCNkIsUUFGOUI7QUFHRSxVQUFBLFFBQVEsRUFBRSxDQUFDakIsU0FBUyxDQUFDWCxNQUh2QjtBQUlFLFVBQUEsV0FBVztBQUpiLHlCQU1FLGdDQUFDLHNCQUFEO0FBQ0UsVUFBQSxPQUFPLEVBQUU1QyxLQUFLLENBQUMrQyxjQUFOLENBQXFCK0M7QUFEaEMsV0FFTXJELHVCQUZOLEVBTkYsZUFVRSxnQ0FBQyxlQUFELGdDQUNNekMsS0FBSyxDQUFDMkMsaUJBQU4sQ0FBd0JtQyxjQUQ5QixFQUVNdEMsb0JBRk47QUFHRSxVQUFBLEtBQUssRUFBQztBQUhSLFdBVkYsZUFlRSxnQ0FBQywrQ0FBRCxxQkFDRSxnQ0FBQyxlQUFELGdDQUNNeEMsS0FBSyxDQUFDMkMsaUJBQU4sQ0FBd0JpRSxXQUQ5QixFQUVNcEUsb0JBRk47QUFHRSxVQUFBLEtBQUssRUFBQztBQUhSLFdBREYsZUFNRSxnQ0FBQyxlQUFELGdDQUNNeEMsS0FBSyxDQUFDMkMsaUJBQU4sQ0FBd0JxQyx5QkFEOUIsRUFFTXhDLG9CQUZOLEVBTkYsZUFVRSxnQ0FBQyxlQUFELGdDQUFxQkEsb0JBQXJCLEVBQStDeEMsS0FBSyxDQUFDMkMsaUJBQU4sQ0FBd0JvRCxTQUF2RSxFQVZGLENBZkYsQ0F0RUYsQ0FERjtBQXFHRDtBQXIyQjBDO0FBQUE7QUFBQSxhQXUyQjNDLGtCQUFTO0FBQUE7O0FBQUEsMEJBUUgsS0FBS3hHLEtBUkY7QUFBQSxZQUVMUyxLQUZLLGVBRUxBLEtBRks7QUFBQSxZQUdMRCxRQUhLLGVBR0xBLFFBSEs7QUFBQSxZQUlMUSxpQkFKSyxlQUlMQSxpQkFKSztBQUFBLFlBS0xzRyxnQkFMSyxlQUtMQSxnQkFMSztBQUFBLFlBTUxDLGVBTkssZUFNTEEsZUFOSztBQUFBLGdEQU9MQyxpQkFQSztBQUFBLFlBT0xBLGlCQVBLLHNDQU9lLEtBUGY7O0FBQUEscUJBU3VDL0csS0FBSyxDQUFDQyxNQUFOLENBQWFDLE1BQWIsR0FDMUNILFFBQVEsQ0FBQ0MsS0FBSyxDQUFDQyxNQUFOLENBQWFDLE1BQWQsQ0FEa0MsR0FFMUMsRUFYRztBQUFBLG1DQVNBQyxNQVRBO0FBQUEsWUFTQUEsTUFUQSw4QkFTUyxFQVRUO0FBQUEsdUNBU2E2RyxVQVRiO0FBQUEsWUFTYUEsVUFUYixrQ0FTMEJDLFNBVDFCOztBQUFBLFlBWUFoSCxNQVpBLEdBWVVELEtBWlYsQ0FZQUMsTUFaQTtBQWNQLFlBQU11QyxvQkFBb0IsR0FBRzlCLHVCQUF1QixDQUFDLEtBQUtuQixLQUFOLENBQXBEO0FBQ0EsWUFBTW1ELHNCQUFzQixHQUFHckMseUJBQXlCLENBQUMsS0FBS2QsS0FBTixDQUF4RDtBQUNBLFlBQU1rRCx1QkFBdUIsR0FBRzdCLDBCQUEwQixDQUFDLEtBQUtyQixLQUFOLENBQTFEO0FBQ0EsWUFBTTJILE9BQU8sR0FBRzlHLGVBQWUsQ0FBQ0wsUUFBRCxFQUFXQyxLQUFYLENBQS9CO0FBQ0EsWUFBTW1ILGNBQWMsR0FBR25ILEtBQUssQ0FBQ2tELElBQU4scUJBQXdCLGtDQUFzQmxELEtBQUssQ0FBQ2tELElBQTVCLENBQXhCLGdCQUF2QjtBQUVBLDRCQUNFLGdDQUFDLHVCQUFELFFBQ0dsRCxLQUFLLENBQUNvSCxjQUFOLGdCQUNDLGdDQUFDLHVCQUFEO0FBQWEsVUFBQSxPQUFPLEVBQUU7QUFBQSxtQkFBTSxLQUFJLENBQUM3SCxLQUFMLENBQVc4SCxTQUFYLENBQXFCckgsS0FBSyxDQUFDb0gsY0FBM0IsQ0FBTjtBQUFBO0FBQXRCLFVBREQsR0FFRyxJQUhOLGVBSUUsZ0NBQUMsZ0JBQUQ7QUFBa0IsVUFBQSxLQUFLLEVBQUUsYUFBekI7QUFBd0MsVUFBQSxXQUFXLE1BQW5EO0FBQW9ELFVBQUEsUUFBUSxFQUFFLENBQUNwSCxLQUFLLENBQUNzSCxhQUFOO0FBQS9ELHdCQUNFLGdDQUFDLGlCQUFEO0FBQ0UsVUFBQSxRQUFRLEVBQUV0SCxLQUFLLENBQUNrRCxJQURsQjtBQUVFLFVBQUEsUUFBUSxFQUFFNkQsaUJBRlo7QUFHRSxVQUFBLE9BQU8sRUFBRUYsZ0JBSFgsQ0FJRTtBQUpGO0FBS0UsVUFBQSxRQUFRLEVBQUVDO0FBTFosVUFERixlQVFFLGdDQUFDLCtDQUFELHFCQUNFLGdDQUFDLGtCQUFEO0FBQ0UsVUFBQSxRQUFRLEVBQUUvRyxRQURaO0FBRUUsVUFBQSxFQUFFLEVBQUVDLEtBQUssQ0FBQ2dFLEVBRlo7QUFHRSxVQUFBLE1BQU0sRUFBRS9ELE1BQU0sQ0FBQ0MsTUFIakIsQ0FJRTtBQUpGO0FBS0UsVUFBQSxRQUFRLEVBQUUsa0JBQUNxSCxLQUFEO0FBQUEsbUJBQW1CaEgsaUJBQWlCLENBQUM7QUFBQ0wsY0FBQUEsTUFBTSxFQUFFcUg7QUFBVCxhQUFELENBQXBDO0FBQUE7QUFMWixVQURGLGVBUUUsZ0NBQUMsaUJBQUQ7QUFDRSxVQUFBLFdBQVcsRUFBRXZILEtBQUssQ0FBQ3dILFdBRHJCO0FBRUUsVUFBQSxPQUFPLEVBQUV4SCxLQUFLLENBQUNDLE1BQU4sQ0FBYXdILE9BRnhCO0FBR0UsVUFBQSxpQkFBaUIsRUFBRXpILEtBQUssQ0FBQzBILGlCQUFOLENBQXdCQyxJQUF4QixDQUE2QjNILEtBQTdCLENBSHJCO0FBSUUsVUFBQSxZQUFZLEVBQUVBLEtBQUssQ0FBQzRILFlBQU4sQ0FBbUJELElBQW5CLENBQXdCM0gsS0FBeEIsQ0FKaEIsQ0FLRTtBQUxGO0FBTUUsVUFBQSxZQUFZLEVBQUVBLEtBQUssQ0FBQzZILFlBTnRCO0FBT0UsVUFBQSxNQUFNLEVBQUUxSCxNQVBWO0FBUUUsVUFBQSxVQUFVLEVBQUU2RyxVQVJkO0FBU0UsVUFBQSxpQkFBaUIsRUFBRXpHO0FBVHJCLFVBUkYsQ0FSRixFQTRCR1AsS0FBSyxDQUFDOEgsWUFBTixnQkFBcUIsZ0NBQUMsNkJBQUQ7QUFBbUIsVUFBQSxZQUFZLEVBQUU5SCxLQUFLLENBQUM4SDtBQUF2QyxVQUFyQixHQUErRSxJQTVCbEYsQ0FKRixFQWtDR1gsY0FBYyxJQUNiLEtBQUtBLGNBQUwsQ0FERCxJQUVDLEtBQUtBLGNBQUwsRUFBcUI7QUFDbkJuSCxVQUFBQSxLQUFLLEVBQUxBLEtBRG1CO0FBRW5Ca0gsVUFBQUEsT0FBTyxFQUFQQSxPQUZtQjtBQUduQjFFLFVBQUFBLG9CQUFvQixFQUFwQkEsb0JBSG1CO0FBSW5CQyxVQUFBQSx1QkFBdUIsRUFBdkJBLHVCQUptQjtBQUtuQkMsVUFBQUEsc0JBQXNCLEVBQXRCQTtBQUxtQixTQUFyQixDQXBDSixDQURGO0FBOENEO0FBejZCMEM7QUFBQTtBQUFBLElBQ2JxRixnQkFEYTs7QUE0NkI3QyxTQUFPekYsaUJBQVA7QUFDRDs7QUFFRGxCLDZCQUE2QixDQUFDTCxJQUE5QixHQUFxQyxDQUFDaUgsb0NBQUQsQ0FBckM7O0FBRU8sU0FBUzVHLDZCQUFULENBQ0w2Ryx3QkFESyxFQUVMO0FBQ0EsTUFBTWxHLHNCQUFzQixHQUFHLFNBQXpCQSxzQkFBeUIsU0FNSTtBQUFBLFFBTGpDL0IsS0FLaUMsVUFMakNBLEtBS2lDO0FBQUEsUUFKakNrSSxPQUlpQyxVQUpqQ0EsT0FJaUM7QUFBQSxRQUhqQzVILFFBR2lDLFVBSGpDQSxRQUdpQztBQUFBLFFBRmpDSCxNQUVpQyxVQUZqQ0EsTUFFaUM7QUFBQSxRQURqQ2dJLFdBQ2lDLFVBRGpDQSxXQUNpQztBQUFBLFFBRS9CQyxnQkFGK0IsR0FTN0JGLE9BVDZCLENBRS9CRSxnQkFGK0I7QUFBQSxRQUcvQkMsS0FIK0IsR0FTN0JILE9BVDZCLENBRy9CRyxLQUgrQjtBQUFBLFFBSS9CQyxHQUorQixHQVM3QkosT0FUNkIsQ0FJL0JJLEdBSitCO0FBQUEsUUFLL0JDLFFBTCtCLEdBUzdCTCxPQVQ2QixDQUsvQkssUUFMK0I7QUFBQSxRQU0vQkMsS0FOK0IsR0FTN0JOLE9BVDZCLENBTS9CTSxLQU4rQjtBQUFBLFFBTy9CQyxjQVArQixHQVM3QlAsT0FUNkIsQ0FPL0JPLGNBUCtCO0FBQUEsUUFRL0JDLG1CQVIrQixHQVM3QlIsT0FUNkIsQ0FRL0JRLG1CQVIrQjtBQVVqQyxRQUFNQywwQkFBMEIsR0FDOUJELG1CQUFtQixJQUFJRSwwQ0FBK0JSLGdCQUEvQixDQUR6QjtBQUVBLFFBQU1TLGVBQWUsR0FBRzFJLE1BQU0sQ0FBQzJJLE1BQVAsQ0FBYztBQUFBLFVBQUU1RixJQUFGLFVBQUVBLElBQUY7QUFBQSxhQUFZeUYsMEJBQTBCLENBQUNJLFFBQTNCLENBQW9DN0YsSUFBcEMsQ0FBWjtBQUFBLEtBQWQsQ0FBeEI7QUFDQSxRQUFNOEYsWUFBWSxHQUFHaEosS0FBSyxDQUFDaUosZUFBTixDQUFzQmYsT0FBTyxDQUFDSSxHQUE5QixDQUFyQjtBQUNBLFFBQU1ZLFNBQVMsR0FBRyxDQUFDbEosS0FBSyxDQUFDbUosWUFBUCxJQUF1Qm5KLEtBQUssQ0FBQ0MsTUFBTixDQUFhdUksS0FBYixDQUF2QixJQUE4Q1EsWUFBWSxDQUFDSSxNQUFiLEdBQXNCLENBQXRGO0FBQ0EsUUFBTUMsa0JBQWtCLEdBQUcsdUNBQTNCO0FBRUEsd0JBQ0UsZ0NBQUMsd0JBQUQ7QUFDRSxNQUFBLE9BQU8sRUFBRW5CLE9BQU8sQ0FBQ0ksR0FEbkI7QUFFRSxNQUFBLFdBQVcsRUFBRUgsV0FBVyxJQUFJa0Isa0JBRjlCO0FBR0UsTUFBQSxNQUFNLEVBQUVSLGVBSFY7QUFJRSxNQUFBLEVBQUUsRUFBRTdJLEtBQUssQ0FBQ2dFLEVBSlo7QUFLRSxNQUFBLEdBQUcsWUFBS3NFLEdBQUwsc0JBTEw7QUFNRSxNQUFBLFFBQVEsRUFBRUMsUUFOWjtBQU9FLE1BQUEsV0FBVyxFQUFFRSxjQUFjLElBQUkseUJBUGpDO0FBUUUsTUFBQSxZQUFZLEVBQUVPLFlBUmhCO0FBU0UsTUFBQSxTQUFTLEVBQUVSLEtBQUssR0FBR3hJLEtBQUssQ0FBQ0MsTUFBTixDQUFhdUksS0FBYixDQUFILEdBQXlCLElBVDNDO0FBVUUsTUFBQSxhQUFhLEVBQUV4SSxLQUFLLENBQUNDLE1BQU4sQ0FBYW9JLEtBQWIsQ0FWakI7QUFXRSxNQUFBLFNBQVMsRUFBRWEsU0FYYjtBQVlFLE1BQUEsV0FBVyxFQUFFLHFCQUFBSSxHQUFHO0FBQUEsZUFBSWhKLFFBQVEsc0NBQUcrSCxLQUFILEVBQVdpQixHQUFYLEdBQWlCaEIsR0FBakIsQ0FBWjtBQUFBLE9BWmxCO0FBYUUsTUFBQSxXQUFXLEVBQUUscUJBQUFnQixHQUFHO0FBQUEsZUFBSWhKLFFBQVEsc0NBQUdrSSxLQUFILEVBQVdjLEdBQVgsR0FBaUJoQixHQUFqQixDQUFaO0FBQUE7QUFibEIsTUFERjtBQWlCRCxHQXhDRDs7QUEwQ0EsU0FBT3ZHLHNCQUFQO0FBQ0Q7O0FBRU0sSUFBTXdILHdCQUF3QixHQUFHLFNBQTNCQSx3QkFBMkIsU0FBMEQ7QUFBQSxNQUF4RHJCLE9BQXdELFVBQXhEQSxPQUF3RDtBQUFBLE1BQS9DbEksS0FBK0MsVUFBL0NBLEtBQStDO0FBQUEsTUFBeENNLFFBQXdDLFVBQXhDQSxRQUF3QztBQUFBLE1BQ3pGa0ksS0FEeUYsR0FDM0VOLE9BRDJFLENBQ3pGTSxLQUR5RjtBQUFBLE1BQ2xGRixHQURrRixHQUMzRUosT0FEMkUsQ0FDbEZJLEdBRGtGO0FBRWhHLE1BQU1VLFlBQVksR0FBR2hKLEtBQUssQ0FBQ2lKLGVBQU4sQ0FBc0JYLEdBQXRCLENBQXJCO0FBRUEsU0FBT2tCLEtBQUssQ0FBQ0MsT0FBTixDQUFjVCxZQUFkLEtBQStCQSxZQUFZLENBQUNJLE1BQWIsR0FBc0IsQ0FBckQsZ0JBQ0wsZ0NBQUMsa0NBQUQ7QUFDRSxJQUFBLEtBQUssWUFBS2QsR0FBTCxXQURQO0FBRUUsSUFBQSxPQUFPLEVBQUVVLFlBRlg7QUFHRSxJQUFBLFNBQVMsRUFBRWhKLEtBQUssQ0FBQ0MsTUFBTixDQUFhdUksS0FBYixDQUhiO0FBSUUsSUFBQSxRQUFRLEVBQUUsa0JBQUFjLEdBQUc7QUFBQSxhQUFJaEosUUFBUSxzQ0FBR2tJLEtBQUgsRUFBV2MsR0FBWCxHQUFpQmhCLEdBQWpCLENBQVo7QUFBQTtBQUpmLElBREssR0FPSCxJQVBKO0FBUUQsQ0FaTTs7OztBQWNBLElBQU1vQix1QkFBdUIsR0FBRyxTQUExQkEsdUJBQTBCLFNBQTBEO0FBQUEsTUFBeER4QixPQUF3RCxVQUF4REEsT0FBd0Q7QUFBQSxNQUEvQ2xJLEtBQStDLFVBQS9DQSxLQUErQztBQUFBLE1BQXhDTSxVQUF3QyxVQUF4Q0EsUUFBd0M7QUFBQSxNQUN4RitILEtBRHdGLEdBQzdESCxPQUQ2RCxDQUN4RkcsS0FEd0Y7QUFBQSxNQUNqRnNCLFdBRGlGLEdBQzdEekIsT0FENkQsQ0FDakZ5QixXQURpRjtBQUFBLE1BQ3BFckIsR0FEb0UsR0FDN0RKLE9BRDZELENBQ3BFSSxHQURvRTtBQUUvRixNQUFNc0IsYUFBYSxHQUFHNUosS0FBSyxDQUFDQyxNQUFOLENBQWFvSSxLQUFiLENBQXRCO0FBRitGLE1BR3hGOUUsU0FId0YsR0FHM0V2RCxLQUFLLENBQUNDLE1BSHFFLENBR3hGc0QsU0FId0YsRUFLL0Y7O0FBQ0EsTUFBTXNHLHFCQUFxQixHQUFHN0osS0FBSyxDQUFDOEoscUJBQU4sQ0FBNEJ4QixHQUE1QixDQUE5Qjs7QUFFQSxNQUFNeUIsa0JBQWtCLEdBQUdDLG9DQUF5QmxCLE1BQXpCLENBQWdDO0FBQUEsUUFBRTlFLEVBQUYsVUFBRUEsRUFBRjtBQUFBLFdBQ3pENkYscUJBQXFCLENBQUNkLFFBQXRCLENBQStCL0UsRUFBL0IsQ0FEeUQ7QUFBQSxHQUFoQyxDQUEzQjs7QUFJQSxNQUFNaUcsbUJBQW1CLEdBQUdOLFdBQVcsR0FDbkNJLGtCQUFrQixDQUFDRyxJQUFuQixDQUF3QjtBQUFBLFFBQUVsRyxFQUFGLFVBQUVBLEVBQUY7QUFBQSxXQUFVQSxFQUFFLEtBQUtULFNBQVMsQ0FBQ29HLFdBQUQsQ0FBMUI7QUFBQSxHQUF4QixDQURtQyxHQUVuQyxFQUZKO0FBSUEsc0JBQ0UsZ0NBQUMsbUNBQUQscUJBQ0UsZ0NBQUMsNkJBQUQscUJBQ0UsZ0NBQUMsOEJBQUQ7QUFDRSxJQUFBLEVBQUUsRUFBRSxtQkFETjtBQUVFLElBQUEsTUFBTSxFQUFFO0FBQ050QixNQUFBQSxLQUFLLEVBQUV1QixhQUFhLENBQUNPO0FBRGY7QUFGVixJQURGLENBREYsZUFTRSxnQ0FBQyx3QkFBRDtBQUNFLElBQUEsYUFBYSxFQUFFRixtQkFEakI7QUFFRSxJQUFBLE9BQU8sRUFBRUYsa0JBRlg7QUFHRSxJQUFBLGFBQWEsRUFBQyxPQUhoQjtBQUlFLElBQUEsY0FBYyxFQUFDLElBSmpCO0FBS0UsSUFBQSxXQUFXLEVBQUUsS0FMZjtBQU1FLElBQUEsVUFBVSxFQUFFLEtBTmQ7QUFPRSxJQUFBLFFBQVEsRUFBRSxrQkFBQXhDLEtBQUs7QUFBQSxhQUNiakgsVUFBUSxDQUNOO0FBQ0VpRCxRQUFBQSxTQUFTLGtDQUNKdkQsS0FBSyxDQUFDQyxNQUFOLENBQWFzRCxTQURULDRDQUVOb0csV0FGTSxFQUVrQnBDLEtBRmxCO0FBRFgsT0FETSxFQU9OVyxPQUFPLENBQUNJLEdBUEYsQ0FESztBQUFBO0FBUGpCLElBVEYsQ0FERjtBQStCRCxDQS9DTTtBQWdEUCIsInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbi8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cbmltcG9ydCBSZWFjdCwge0NvbXBvbmVudCwgRnJhZ21lbnR9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtGb3JtYXR0ZWRNZXNzYWdlfSBmcm9tICdAa2VwbGVyLmdsL2xvY2FsaXphdGlvbic7XG5cbmltcG9ydCB7SW5wdXQsIFBhbmVsTGFiZWwsIFNpZGVQYW5lbFNlY3Rpb259IGZyb20gJy4uLy4uL2NvbW1vbi9zdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQgSXRlbVNlbGVjdG9yIGZyb20gJy4uLy4uL2NvbW1vbi9pdGVtLXNlbGVjdG9yL2l0ZW0tc2VsZWN0b3InO1xuXG5pbXBvcnQgVmlzQ29uZmlnQnlGaWVsZFNlbGVjdG9yRmFjdG9yeSBmcm9tICcuL3Zpcy1jb25maWctYnktZmllbGQtc2VsZWN0b3InO1xuaW1wb3J0IExheWVyQ29sdW1uQ29uZmlnRmFjdG9yeSBmcm9tICcuL2xheWVyLWNvbHVtbi1jb25maWcnO1xuaW1wb3J0IExheWVyVHlwZVNlbGVjdG9yRmFjdG9yeSBmcm9tICcuL2xheWVyLXR5cGUtc2VsZWN0b3InO1xuaW1wb3J0IERpbWVuc2lvblNjYWxlU2VsZWN0b3IgZnJvbSAnLi9kaW1lbnNpb24tc2NhbGUtc2VsZWN0b3InO1xuaW1wb3J0IFNvdXJjZURhdGFTZWxlY3RvckZhY3RvcnkgZnJvbSAnLi4vY29tbW9uL3NvdXJjZS1kYXRhLXNlbGVjdG9yJztcbmltcG9ydCBWaXNDb25maWdTd2l0Y2hGYWN0b3J5IGZyb20gJy4vdmlzLWNvbmZpZy1zd2l0Y2gnO1xuaW1wb3J0IFZpc0NvbmZpZ1NsaWRlckZhY3RvcnkgZnJvbSAnLi92aXMtY29uZmlnLXNsaWRlcic7XG5pbXBvcnQgTGF5ZXJDb25maWdHcm91cEZhY3RvcnksIHtDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudH0gZnJvbSAnLi9sYXllci1jb25maWctZ3JvdXAnO1xuaW1wb3J0IFRleHRMYWJlbFBhbmVsRmFjdG9yeSBmcm9tICcuL3RleHQtbGFiZWwtcGFuZWwnO1xuaW1wb3J0IHtcbiAgTGF5ZXJDb2xvclNlbGVjdG9yRmFjdG9yeSxcbiAgTGF5ZXJDb2xvclJhbmdlU2VsZWN0b3JGYWN0b3J5LFxuICBBcmNMYXllckNvbG9yU2VsZWN0b3JGYWN0b3J5XG59IGZyb20gJy4vbGF5ZXItY29sb3Itc2VsZWN0b3InO1xuaW1wb3J0IEhvd1RvQnV0dG9uIGZyb20gJy4vaG93LXRvLWJ1dHRvbic7XG5pbXBvcnQgTGF5ZXJFcnJvck1lc3NhZ2UgZnJvbSAnLi9sYXllci1lcnJvci1tZXNzYWdlJztcblxuaW1wb3J0IHtjYXBpdGFsaXplRmlyc3RMZXR0ZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuXG5pbXBvcnQge1xuICBDSEFOTkVMX1NDQUxFX1NVUFBPUlRFRF9GSUVMRFMsXG4gIExBWUVSX1RZUEVTLFxuICBBR0dSRUdBVElPTl9UWVBFX09QVElPTlNcbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtMYXllciwgTGF5ZXJCYXNlQ29uZmlnLCBWaXN1YWxDaGFubmVsLCBBZ2dyZWdhdGlvbkxheWVyfSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5cbmltcG9ydCB7TmVzdGVkUGFydGlhbCwgTGF5ZXJWaXNDb25maWcsIENvbG9yVUksIEZpZWxkfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7dG9nZ2xlTW9kYWwsIEFjdGlvbkhhbmRsZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5pbXBvcnQge0RhdGFzZXRzfSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcblxudHlwZSBMYXllckNvbmZpZ3VyYXRvclByb3BzID0ge1xuICBsYXllcjogTGF5ZXI7XG4gIGRhdGFzZXRzOiBEYXRhc2V0cztcbiAgbGF5ZXJUeXBlT3B0aW9uczoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBpY29uOiBSZWFjdC5FbGVtZW50VHlwZTtcbiAgICByZXF1aXJlRGF0YTogYm9vbGVhbjtcbiAgfVtdO1xuICBvcGVuTW9kYWw6IEFjdGlvbkhhbmRsZXI8dHlwZW9mIHRvZ2dsZU1vZGFsPjtcbiAgdXBkYXRlTGF5ZXJDb25maWc6IChuZXdDb25maWc6IFBhcnRpYWw8TGF5ZXJCYXNlQ29uZmlnPikgPT4gdm9pZDtcbiAgdXBkYXRlTGF5ZXJUeXBlOiAobmV3VHlwZTogc3RyaW5nKSA9PiB2b2lkO1xuICB1cGRhdGVMYXllclZpc0NvbmZpZzogKG5ld1Zpc0NvbmZpZzogUGFydGlhbDxMYXllclZpc0NvbmZpZz4pID0+IHZvaWQ7XG4gIHVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZzogKFxuICAgIG5ld0NvbmZpZzogUGFydGlhbDxMYXllckJhc2VDb25maWc+LFxuICAgIGNoYW5uZWw6IHN0cmluZyxcbiAgICBuZXdWaXNDb25maWc/OiBQYXJ0aWFsPExheWVyVmlzQ29uZmlnPlxuICApID0+IHZvaWQ7XG4gIHVwZGF0ZUxheWVyQ29sb3JVSTogKHByb3A6IHN0cmluZywgbmV3Q29uZmlnOiBOZXN0ZWRQYXJ0aWFsPENvbG9yVUk+KSA9PiB2b2lkO1xuICB1cGRhdGVMYXllclRleHRMYWJlbDogKGlkeDogbnVtYmVyIHwgJ2FsbCcsIHByb3A6IHN0cmluZywgdmFsdWU6IGFueSkgPT4gdm9pZDtcbiAgZGlzYWJsZVR5cGVTZWxlY3Q/OiBib29sZWFuO1xufTtcblxudHlwZSBDaGFubmVsQnlWYWx1ZVNlbGVjdG9yUHJvcHMgPSB7XG4gIGxheWVyOiBMYXllcjtcbiAgY2hhbm5lbDogVmlzdWFsQ2hhbm5lbDtcbiAgb25DaGFuZ2U6IChcbiAgICB2YWw6IFJlY29yZDxcbiAgICAgIHN0cmluZyxcbiAgICAgIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBvYmplY3QgfCByZWFkb25seSAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG9iamVjdClbXSB8IG51bGxcbiAgICA+LFxuICAgIGtleTogc3RyaW5nXG4gICkgPT4gdm9pZDtcbiAgZmllbGRzOiBGaWVsZFtdO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xufTtcblxudHlwZSBBZ2dyZWdhdGlvblNlbGVjdG9yUHJvcHMgPSB7XG4gIGNoYW5uZWw6IFZpc3VhbENoYW5uZWw7XG4gIGxheWVyOiBBZ2dyZWdhdGlvbkxheWVyO1xuICBvbkNoYW5nZTogKFxuICAgIHZhbDogUmVjb3JkPFxuICAgICAgc3RyaW5nLFxuICAgICAgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG9iamVjdCB8IHJlYWRvbmx5IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgb2JqZWN0KVtdIHwgbnVsbFxuICAgID4sXG4gICAga2V5OiBzdHJpbmdcbiAgKSA9PiB2b2lkO1xufTtcblxuY29uc3QgU3R5bGVkTGF5ZXJDb25maWd1cmF0b3IgPSBzdHlsZWQuZGl2LmF0dHJzKHtcbiAgY2xhc3NOYW1lOiAnbGF5ZXItcGFuZWxfX2NvbmZpZydcbn0pYFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbi10b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUubGF5ZXJDb25maWd1cmF0b3JNYXJnaW59O1xuICBwYWRkaW5nOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmxheWVyQ29uZmlndXJhdG9yUGFkZGluZ307XG4gIGJvcmRlci1sZWZ0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmxheWVyQ29uZmlndXJhdG9yQm9yZGVyfSBkYXNoZWRcbiAgICAke3Byb3BzID0+IHByb3BzLnRoZW1lLmxheWVyQ29uZmlndXJhdG9yQm9yZGVyQ29sb3J9O1xuYDtcblxuY29uc3QgU3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3IgPSBzdHlsZWQuZGl2LmF0dHJzKHtcbiAgY2xhc3NOYW1lOiAnbGF5ZXItcGFuZWxfX2NvbmZpZ19fdmlzdWFsQy1jb25maWcnXG59KWBcbiAgbWFyZ2luLXRvcDogMTJweDtcbmA7XG5cbmV4cG9ydCBjb25zdCBnZXRMYXllckZpZWxkcyA9IChkYXRhc2V0czogRGF0YXNldHMsIGxheWVyOiBMYXllcikgPT5cbiAgbGF5ZXIuY29uZmlnPy5kYXRhSWQgJiYgZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF0gPyBkYXRhc2V0c1tsYXllci5jb25maWcuZGF0YUlkXS5maWVsZHMgOiBbXTtcblxuLyoqIFJldHVybiBhbnkgdG8gYmUgYWJsZSB0byBjdXN0b21pemUgdGhlIERhdGFzZXQgZW50aXR5ICovXG5leHBvcnQgY29uc3QgZ2V0TGF5ZXJEYXRhc2V0ID0gKGRhdGFzZXRzOiBEYXRhc2V0cywgbGF5ZXI6IExheWVyKTogYW55ID0+XG4gIGxheWVyLmNvbmZpZz8uZGF0YUlkICYmIGRhdGFzZXRzW2xheWVyLmNvbmZpZy5kYXRhSWRdID8gZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF0gOiBudWxsO1xuXG5leHBvcnQgY29uc3QgZ2V0TGF5ZXJDb25maWd1cmF0b3JQcm9wcyA9IChwcm9wczogTGF5ZXJDb25maWd1cmF0b3JQcm9wcykgPT4gKHtcbiAgbGF5ZXI6IHByb3BzLmxheWVyLFxuICBmaWVsZHM6IGdldExheWVyRmllbGRzKHByb3BzLmRhdGFzZXRzLCBwcm9wcy5sYXllciksXG4gIG9uQ2hhbmdlOiBwcm9wcy51cGRhdGVMYXllckNvbmZpZyxcbiAgc2V0Q29sb3JVSTogcHJvcHMudXBkYXRlTGF5ZXJDb2xvclVJXG59KTtcblxuZXhwb3J0IGNvbnN0IGdldFZpc0NvbmZpZ3VyYXRvclByb3BzID0gKHByb3BzOiBMYXllckNvbmZpZ3VyYXRvclByb3BzKSA9PiAoe1xuICBsYXllcjogcHJvcHMubGF5ZXIsXG4gIGZpZWxkczogZ2V0TGF5ZXJGaWVsZHMocHJvcHMuZGF0YXNldHMsIHByb3BzLmxheWVyKSxcbiAgb25DaGFuZ2U6IHByb3BzLnVwZGF0ZUxheWVyVmlzQ29uZmlnLFxuICBzZXRDb2xvclVJOiBwcm9wcy51cGRhdGVMYXllckNvbG9yVUlcbn0pO1xuXG5leHBvcnQgY29uc3QgZ2V0TGF5ZXJDaGFubmVsQ29uZmlnUHJvcHMgPSAocHJvcHM6IExheWVyQ29uZmlndXJhdG9yUHJvcHMpID0+ICh7XG4gIGxheWVyOiBwcm9wcy5sYXllcixcbiAgZmllbGRzOiBnZXRMYXllckZpZWxkcyhwcm9wcy5kYXRhc2V0cywgcHJvcHMubGF5ZXIpLFxuICBvbkNoYW5nZTogcHJvcHMudXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnXG59KTtcblxuTGF5ZXJDb25maWd1cmF0b3JGYWN0b3J5LmRlcHMgPSBbXG4gIFNvdXJjZURhdGFTZWxlY3RvckZhY3RvcnksXG4gIFZpc0NvbmZpZ1NsaWRlckZhY3RvcnksXG4gIFRleHRMYWJlbFBhbmVsRmFjdG9yeSxcbiAgTGF5ZXJDb25maWdHcm91cEZhY3RvcnksXG4gIENoYW5uZWxCeVZhbHVlU2VsZWN0b3JGYWN0b3J5LFxuICBMYXllckNvbHVtbkNvbmZpZ0ZhY3RvcnksXG4gIExheWVyVHlwZVNlbGVjdG9yRmFjdG9yeSxcbiAgVmlzQ29uZmlnU3dpdGNoRmFjdG9yeSxcbiAgTGF5ZXJDb2xvclNlbGVjdG9yRmFjdG9yeSxcbiAgTGF5ZXJDb2xvclJhbmdlU2VsZWN0b3JGYWN0b3J5LFxuICBBcmNMYXllckNvbG9yU2VsZWN0b3JGYWN0b3J5XG5dO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBMYXllckNvbmZpZ3VyYXRvckZhY3RvcnkoXG4gIFNvdXJjZURhdGFTZWxlY3RvcjogUmV0dXJuVHlwZTx0eXBlb2YgU291cmNlRGF0YVNlbGVjdG9yRmFjdG9yeT4sXG4gIFZpc0NvbmZpZ1NsaWRlcjogUmV0dXJuVHlwZTx0eXBlb2YgVmlzQ29uZmlnU2xpZGVyRmFjdG9yeT4sXG4gIFRleHRMYWJlbFBhbmVsOiBSZXR1cm5UeXBlPHR5cGVvZiBUZXh0TGFiZWxQYW5lbEZhY3Rvcnk+LFxuICBMYXllckNvbmZpZ0dyb3VwOiBSZXR1cm5UeXBlPHR5cGVvZiBMYXllckNvbmZpZ0dyb3VwRmFjdG9yeT4sXG4gIENoYW5uZWxCeVZhbHVlU2VsZWN0b3I6IFJldHVyblR5cGU8dHlwZW9mIENoYW5uZWxCeVZhbHVlU2VsZWN0b3JGYWN0b3J5PixcbiAgTGF5ZXJDb2x1bW5Db25maWc6IFJldHVyblR5cGU8dHlwZW9mIExheWVyQ29sdW1uQ29uZmlnRmFjdG9yeT4sXG4gIExheWVyVHlwZVNlbGVjdG9yOiBSZXR1cm5UeXBlPHR5cGVvZiBMYXllclR5cGVTZWxlY3RvckZhY3Rvcnk+LFxuICBWaXNDb25maWdTd2l0Y2g6IFJldHVyblR5cGU8dHlwZW9mIFZpc0NvbmZpZ1N3aXRjaEZhY3Rvcnk+LFxuICBMYXllckNvbG9yU2VsZWN0b3I6IFJldHVyblR5cGU8dHlwZW9mIExheWVyQ29sb3JTZWxlY3RvckZhY3Rvcnk+LFxuICBMYXllckNvbG9yUmFuZ2VTZWxlY3RvcjogUmV0dXJuVHlwZTx0eXBlb2YgTGF5ZXJDb2xvclJhbmdlU2VsZWN0b3JGYWN0b3J5PixcbiAgQXJjTGF5ZXJDb2xvclNlbGVjdG9yOiBSZXR1cm5UeXBlPHR5cGVvZiBBcmNMYXllckNvbG9yU2VsZWN0b3JGYWN0b3J5PlxuKTogUmVhY3QuQ29tcG9uZW50VHlwZTxMYXllckNvbmZpZ3VyYXRvclByb3BzPiB7XG4gIGNsYXNzIExheWVyQ29uZmlndXJhdG9yIGV4dGVuZHMgQ29tcG9uZW50PExheWVyQ29uZmlndXJhdG9yUHJvcHM+IHtcbiAgICBfcmVuZGVyUG9pbnRMYXllckNvbmZpZyhwcm9wcykge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlclNjYXR0ZXJwbG90TGF5ZXJDb25maWcocHJvcHMpO1xuICAgIH1cblxuICAgIF9yZW5kZXJJY29uTGF5ZXJDb25maWcocHJvcHMpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJTY2F0dGVycGxvdExheWVyQ29uZmlnKHByb3BzKTtcbiAgICB9XG5cbiAgICBfcmVuZGVyU2NhdHRlcnBsb3RMYXllckNvbmZpZyh7XG4gICAgICBsYXllcixcbiAgICAgIHZpc0NvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHMsXG4gICAgICBsYXllckNvbmZpZ3VyYXRvclByb3BzXG4gICAgfSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgICAgIHsvKiBGaWxsIENvbG9yICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICB7Li4uKGxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmZpbGxlZCB8fCB7bGFiZWw6ICdsYXllci5jb2xvcid9KX1cbiAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgIGNvbGxhcHNpYmxlXG4gICAgICAgICAgPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5jb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3Igey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JTZWxlY3RvciB7Li4ubGF5ZXJDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuY29sb3J9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5vcGFjaXR5fSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBvdXRsaW5lIGNvbG9yICovfVxuICAgICAgICAgIHtsYXllci50eXBlID09PSBMQVlFUl9UWVBFUy5wb2ludCA/IChcbiAgICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5vdXRsaW5lfVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGNvbGxhcHNpYmxlXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtsYXllci5jb25maWcuc3Ryb2tlQ29sb3JGaWVsZCA/IChcbiAgICAgICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3Igey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSBwcm9wZXJ0eT1cInN0cm9rZUNvbG9yUmFuZ2VcIiAvPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxMYXllckNvbG9yU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29sb3I9e2xheWVyLmNvbmZpZy52aXNDb25maWcuc3Ryb2tlQ29sb3J9XG4gICAgICAgICAgICAgICAgICBwcm9wZXJ0eT1cInN0cm9rZUNvbG9yXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnN0cm9rZUNvbG9yfVxuICAgICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnRoaWNrbmVzc31cbiAgICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshbGF5ZXIuY29uZmlnLnZpc0NvbmZpZy5vdXRsaW5lfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgICB7LyogUmFkaXVzICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIucmFkaXVzJ30gY29sbGFwc2libGU+XG4gICAgICAgICAgICB7IWxheWVyLmNvbmZpZy5zaXplRmllbGQgPyAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MucmFkaXVzfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e0Jvb2xlYW4obGF5ZXIuY29uZmlnLnNpemVGaWVsZCl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnJhZGl1c1JhbmdlfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFsYXllci5jb25maWcuc2l6ZUZpZWxkIHx8IGxheWVyLmNvbmZpZy52aXNDb25maWcuZml4ZWRSYWRpdXN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnNpemV9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICB7bGF5ZXIuY29uZmlnLnNpemVGaWVsZCA/IChcbiAgICAgICAgICAgICAgICA8VmlzQ29uZmlnU3dpdGNoXG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZml4ZWRSYWRpdXN9XG4gICAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiB0ZXh0IGxhYmVsICovfVxuICAgICAgICAgIDxUZXh0TGFiZWxQYW5lbFxuICAgICAgICAgICAgaWQ9e2xheWVyLmlkfVxuICAgICAgICAgICAgZmllbGRzPXt2aXNDb25maWd1cmF0b3JQcm9wcy5maWVsZHN9XG4gICAgICAgICAgICB1cGRhdGVMYXllclRleHRMYWJlbD17dGhpcy5wcm9wcy51cGRhdGVMYXllclRleHRMYWJlbH1cbiAgICAgICAgICAgIHRleHRMYWJlbD17bGF5ZXIuY29uZmlnLnRleHRMYWJlbH1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1N0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBfcmVuZGVyQ2x1c3RlckxheWVyQ29uZmlnKHtcbiAgICAgIGxheWVyLFxuICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHNcbiAgICB9KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICAgICAgey8qIENvbG9yICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIuY29sb3InfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgIDxMYXllckNvbG9yUmFuZ2VTZWxlY3RvciB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxBZ2dyZWdhdGlvblNjYWxlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIHtsYXllci52aXNDb25maWdTZXR0aW5ncy5jb2xvckFnZ3JlZ2F0aW9uLmNvbmRpdGlvbihsYXllci5jb25maWcpID8gKFxuICAgICAgICAgICAgICAgIDxBZ2dyZWdhdGlvblR5cGVTZWxlY3RvclxuICAgICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmNvbG9yQWdncmVnYXRpb259XG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlciB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Mub3BhY2l0eX0gey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogQ2x1c3RlciBSYWRpdXMgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5yYWRpdXMnfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmNsdXN0ZXJSYWRpdXN9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlciB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MucmFkaXVzUmFuZ2V9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICA8L1N0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBfcmVuZGVySGVhdG1hcExheWVyQ29uZmlnKHtcbiAgICAgIGxheWVyLFxuICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHNcbiAgICB9KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICAgICAgey8qIENvbG9yICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIuY29sb3InfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgIDxMYXllckNvbG9yUmFuZ2VTZWxlY3RvciB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLm9wYWNpdHl9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICAgIHsvKiBSYWRpdXMgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5yYWRpdXMnfT5cbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnJhZGl1c31cbiAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgICB7LyogV2VpZ2h0ICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIud2VpZ2h0J30+XG4gICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy53ZWlnaHR9XG4gICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICA8L1N0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBfcmVuZGVyR3JpZExheWVyQ29uZmlnKHByb3BzKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVuZGVyQWdncmVnYXRpb25MYXllckNvbmZpZyhwcm9wcyk7XG4gICAgfVxuXG4gICAgX3JlbmRlckhleGFnb25MYXllckNvbmZpZyhwcm9wcykge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlckFnZ3JlZ2F0aW9uTGF5ZXJDb25maWcocHJvcHMpO1xuICAgIH1cblxuICAgIF9yZW5kZXJBZ2dyZWdhdGlvbkxheWVyQ29uZmlnKHtcbiAgICAgIGxheWVyLFxuICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHNcbiAgICB9KSB7XG4gICAgICBjb25zdCB7Y29uZmlnfSA9IGxheWVyO1xuICAgICAgY29uc3Qge1xuICAgICAgICB2aXNDb25maWc6IHtlbmFibGUzZH1cbiAgICAgIH0gPSBjb25maWc7XG4gICAgICBjb25zdCBlbGV2YXRpb25CeURlc2NyaXB0aW9uID0gJ2xheWVyLmVsZXZhdGlvbkJ5RGVzY3JpcHRpb24nO1xuICAgICAgY29uc3QgY29sb3JCeURlc2NyaXB0aW9uID0gJ2xheWVyLmNvbG9yQnlEZXNjcmlwdGlvbic7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICAgICB7LyogQ29sb3IgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5jb2xvcid9IGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAgPExheWVyQ29sb3JSYW5nZVNlbGVjdG9yIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPEFnZ3JlZ2F0aW9uU2NhbGVTZWxlY3RvclxuICAgICAgICAgICAgICAgIHsuLi5sYXllckNvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmNvbG9yfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmNvbG9yfVxuICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAge2xheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmNvbG9yQWdncmVnYXRpb24uY29uZGl0aW9uKGxheWVyLmNvbmZpZykgPyAoXG4gICAgICAgICAgICAgICAgPEFnZ3JlZ2F0aW9uVHlwZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuY29sb3JBZ2dyZWdhdGlvbn1cbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPXtjb2xvckJ5RGVzY3JpcHRpb259XG4gICAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAge2xheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnBlcmNlbnRpbGUgJiZcbiAgICAgICAgICAgICAgbGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MucGVyY2VudGlsZS5jb25kaXRpb24obGF5ZXIuY29uZmlnKSA/IChcbiAgICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MucGVyY2VudGlsZX1cbiAgICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlciB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Mub3BhY2l0eX0gey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogQ2VsbCBzaXplICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIucmFkaXVzJ30gY29sbGFwc2libGU+XG4gICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy53b3JsZFVuaXRTaXplfSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmNvdmVyYWdlfSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBFbGV2YXRpb24gKi99XG4gICAgICAgICAge2xheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVuYWJsZTNkID8gKFxuICAgICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVuYWJsZTNkfVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGNvbGxhcHNpYmxlXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZWxldmF0aW9uU2NhbGV9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPVwibGF5ZXJWaXNDb25maWdzLmhlaWdodE11bHRpcGxpZXJcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnNpemV9XG4gICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj17ZWxldmF0aW9uQnlEZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshZW5hYmxlM2R9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8QWdncmVnYXRpb25TY2FsZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnNpemV9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc2l6ZVJhbmdlfVxuICAgICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgICAgbGFiZWw9XCJsYXllclZpc0NvbmZpZ3MuaGVpZ2h0UmFuZ2VcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPFZpc0NvbmZpZ1N3aXRjaFxuICAgICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVuYWJsZUVsZXZhdGlvblpvb21GYWN0b3J9XG4gICAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgICBsYWJlbD1cImxheWVyVmlzQ29uZmlncy5lbmFibGVIZWlnaHRab29tRmFjdG9yXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIHtsYXllci52aXNDb25maWdTZXR0aW5ncy5zaXplQWdncmVnYXRpb24uY29uZGl0aW9uKGxheWVyLmNvbmZpZykgPyAoXG4gICAgICAgICAgICAgICAgICA8QWdncmVnYXRpb25UeXBlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnNpemVBZ2dyZWdhdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5zaXplfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICB7bGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZWxldmF0aW9uUGVyY2VudGlsZS5jb25kaXRpb24obGF5ZXIuY29uZmlnKSA/IChcbiAgICAgICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVsZXZhdGlvblBlcmNlbnRpbGV9XG4gICAgICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDwvU3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFRPRE86IFNoYW4gbW92ZSB0aGVzZSBpbnRvIGxheWVyIGNsYXNzXG4gICAgX3JlbmRlckhleGFnb25JZExheWVyQ29uZmlnKHtcbiAgICAgIGxheWVyLFxuICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHNcbiAgICB9KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICAgICAgey8qIEZpbGwgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5maWxsZWR9XG4gICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICBsYWJlbD17J2xheWVyLmZpbGxDb2xvcid9XG4gICAgICAgICAgICBjb2xsYXBzaWJsZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtsYXllci5jb25maWcuY29sb3JGaWVsZCA/IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JSYW5nZVNlbGVjdG9yIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxMYXllckNvbG9yU2VsZWN0b3Igey4uLmxheWVyQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmNvbG9yfVxuICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5vcGFjaXR5fVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWxheWVyLmNvbmZpZy52aXNDb25maWcuZmlsbGVkfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogT3V0bGluZSAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cFxuICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLm91dGxpbmV9XG4gICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICBjb2xsYXBzaWJsZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnN0cm9rZUNvbG9yfVxuICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5zdHJva2VDb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3Igey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSBwcm9wZXJ0eT1cInN0cm9rZUNvbG9yUmFuZ2VcIiAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JTZWxlY3RvclxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBzZWxlY3RlZENvbG9yPXtsYXllci5jb25maWcudmlzQ29uZmlnLnN0cm9rZUNvbG9yfVxuICAgICAgICAgICAgICAgIHByb3BlcnR5PVwic3Ryb2tlQ29sb3JcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zdHJva2VPcGFjaXR5fVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWxheWVyLmNvbmZpZy52aXNDb25maWcub3V0bGluZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy50aGlja25lc3N9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXshbGF5ZXIuY29uZmlnLnZpc0NvbmZpZy5vdXRsaW5lfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogQ292ZXJhZ2UgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5jb3ZlcmFnZSd9IGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAgeyFsYXllci5jb25maWcuY292ZXJhZ2VGaWVsZCA/IChcbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5jb3ZlcmFnZX1cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgbGFiZWw9e2ZhbHNlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5jb3ZlcmFnZVJhbmdlfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmNvdmVyYWdlfVxuICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgICAgey8qIGhlaWdodCAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cFxuICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVuYWJsZTNkfVxuICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5zaXplfVxuICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVsZXZhdGlvblNjYWxlfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zaXplUmFuZ2V9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPVwibGF5ZXJWaXNDb25maWdzLmhlaWdodFJhbmdlXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1N3aXRjaFxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5lbmFibGVFbGV2YXRpb25ab29tRmFjdG9yfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgICAgey8qIHRleHQgbGFiZWwgKi99XG4gICAgICAgICAgPFRleHRMYWJlbFBhbmVsXG4gICAgICAgICAgICBpZD17bGF5ZXIuaWR9XG4gICAgICAgICAgICBmaWVsZHM9e3Zpc0NvbmZpZ3VyYXRvclByb3BzLmZpZWxkc31cbiAgICAgICAgICAgIHVwZGF0ZUxheWVyVGV4dExhYmVsPXt0aGlzLnByb3BzLnVwZGF0ZUxheWVyVGV4dExhYmVsfVxuICAgICAgICAgICAgdGV4dExhYmVsPXtsYXllci5jb25maWcudGV4dExhYmVsfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICApO1xuICAgIH1cblxuICAgIF9yZW5kZXJBcmNMYXllckNvbmZpZyhhcmdzKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVuZGVyTGluZUxheWVyQ29uZmlnKGFyZ3MpO1xuICAgIH1cblxuICAgIF9yZW5kZXJMaW5lTGF5ZXJDb25maWcoe1xuICAgICAgbGF5ZXIsXG4gICAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNoYW5uZWxDb25maWdQcm9wc1xuICAgIH0pIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICAgICB7LyogQ29sb3IgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5jb2xvcid9IGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5jb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3Igey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPEFyY0xheWVyQ29sb3JTZWxlY3RvclxuICAgICAgICAgICAgICAgIGxheWVyPXtsYXllcn1cbiAgICAgICAgICAgICAgICBzZXRDb2xvclVJPXtsYXllckNvbmZpZ3VyYXRvclByb3BzLnNldENvbG9yVUl9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2VDb25maWc9e2xheWVyQ29uZmlndXJhdG9yUHJvcHMub25DaGFuZ2V9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2VWaXNDb25maWc9e3Zpc0NvbmZpZ3VyYXRvclByb3BzLm9uQ2hhbmdlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5zb3VyY2VDb2xvcn1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLm9wYWNpdHl9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgICAgey8qIHRoaWNrbmVzcyAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCBsYWJlbD17J2xheWVyLnN0cm9rZSd9IGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5zaXplRmllbGQgPyAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc2l6ZVJhbmdlfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWxheWVyLmNvbmZpZy5zaXplRmllbGR9XG4gICAgICAgICAgICAgICAgbGFiZWw9e2ZhbHNlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy50aGlja25lc3N9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuc2l6ZX1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBlbGV2YXRpb24gc2NhbGUgKi99XG4gICAgICAgICAge2xheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVsZXZhdGlvblNjYWxlID8gKFxuICAgICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9XCJsYXllclZpc0NvbmZpZ3MuZWxldmF0aW9uU2NhbGVcIiBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5lbGV2YXRpb25TY2FsZX1cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDwvU3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICApO1xuICAgIH1cblxuICAgIF9yZW5kZXJUcmlwTGF5ZXJDb25maWcoe1xuICAgICAgbGF5ZXIsXG4gICAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNoYW5uZWxDb25maWdQcm9wc1xuICAgIH0pIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWV0YToge2ZlYXR1cmVUeXBlcyA9IHt9fVxuICAgICAgfSA9IGxheWVyO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICAgICAgey8qIENvbG9yICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIuY29sb3InfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgIHtsYXllci5jb25maWcuY29sb3JGaWVsZCA/IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JSYW5nZVNlbGVjdG9yIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxMYXllckNvbG9yU2VsZWN0b3Igey4uLmxheWVyQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmNvbG9yfVxuICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlciB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Mub3BhY2l0eX0gey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogU3Ryb2tlIFdpZHRoICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gbGFiZWw9XCJsYXllci5zdHJva2VXaWR0aFwiIGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5zaXplRmllbGQgPyAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc2l6ZVJhbmdlfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnRoaWNrbmVzc31cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgbGFiZWw9e2ZhbHNlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnNpemV9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogVHJhaWwgTGVuZ3RoKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgIHsuLi4oZmVhdHVyZVR5cGVzLnBvbHlnb24gPyBsYXllci52aXNDb25maWdTZXR0aW5ncy5zdHJva2VkIDoge30pfVxuICAgICAgICAgICAgbGFiZWw9XCJsYXllci50cmFpbExlbmd0aFwiXG4gICAgICAgICAgICBkZXNjcmlwdGlvbj1cImxheWVyLnRyYWlsTGVuZ3RoRGVzY3JpcHRpb25cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnRyYWlsTGVuZ3RofVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICA8L1N0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBfcmVuZGVyR2VvanNvbkxheWVyQ29uZmlnKHtcbiAgICAgIGxheWVyLFxuICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHNcbiAgICB9KSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1ldGE6IHtmZWF0dXJlVHlwZXMgPSB7fX0sXG4gICAgICAgIGNvbmZpZzoge3Zpc0NvbmZpZ31cbiAgICAgIH0gPSBsYXllcjtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgICAgIHsvKiBGaWxsIENvbG9yICovfVxuICAgICAgICAgIHtmZWF0dXJlVHlwZXMucG9seWdvbiB8fCBmZWF0dXJlVHlwZXMucG9pbnQgPyAoXG4gICAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cFxuICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZmlsbGVkfVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGxhYmVsPVwibGF5ZXIuZmlsbENvbG9yXCJcbiAgICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2xheWVyLmNvbmZpZy5jb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgICAgIDxMYXllckNvbG9yUmFuZ2VTZWxlY3RvciB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPExheWVyQ29sb3JTZWxlY3RvciB7Li4ubGF5ZXJDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLm9wYWNpdHl9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgICApIDogbnVsbH1cblxuICAgICAgICAgIHsvKiBzdHJva2UgY29sb3IgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zdHJva2VkfVxuICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgbGFiZWw9XCJsYXllci5zdHJva2VDb2xvclwiXG4gICAgICAgICAgICBjb2xsYXBzaWJsZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtsYXllci5jb25maWcuc3Ryb2tlQ29sb3JGaWVsZCA/IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JSYW5nZVNlbGVjdG9yIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gcHJvcGVydHk9XCJzdHJva2VDb2xvclJhbmdlXCIgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxMYXllckNvbG9yU2VsZWN0b3JcbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDb2xvcj17bGF5ZXIuY29uZmlnLnZpc0NvbmZpZy5zdHJva2VDb2xvcn1cbiAgICAgICAgICAgICAgICBwcm9wZXJ0eT1cInN0cm9rZUNvbG9yXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuc3Ryb2tlQ29sb3J9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnN0cm9rZU9wYWNpdHl9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogU3Ryb2tlIFdpZHRoICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICB7Li4uKGZlYXR1cmVUeXBlcy5wb2x5Z29uID8gbGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc3Ryb2tlZCA6IHt9KX1cbiAgICAgICAgICAgIGxhYmVsPVwibGF5ZXIuc3Ryb2tlV2lkdGhcIlxuICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7bGF5ZXIuY29uZmlnLnNpemVGaWVsZCA/IChcbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zaXplUmFuZ2V9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MudGhpY2tuZXNzfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnNpemV9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogRWxldmF0aW9uICovfVxuICAgICAgICAgIHtmZWF0dXJlVHlwZXMucG9seWdvbiA/IChcbiAgICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVuYWJsZTNkfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17IXZpc0NvbmZpZy5maWxsZWR9XG4gICAgICAgICAgICAgIGNvbGxhcHNpYmxlXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZWxldmF0aW9uU2NhbGV9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5oZWlnaHR9XG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8VmlzQ29uZmlnU3dpdGNoXG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZW5hYmxlRWxldmF0aW9uWm9vbUZhY3Rvcn1cbiAgICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxWaXNDb25maWdTd2l0Y2ggey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Mud2lyZWZyYW1lfSAvPlxuICAgICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgICAgey8qIFJhZGl1cyAqL31cbiAgICAgICAgICB7ZmVhdHVyZVR5cGVzLnBvaW50ID8gKFxuICAgICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5yYWRpdXMnfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgICAgeyFsYXllci5jb25maWcucmFkaXVzRmllbGQgPyAoXG4gICAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnJhZGl1c31cbiAgICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtCb29sZWFuKGxheWVyLmNvbmZpZy5yYWRpdXNGaWVsZCl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MucmFkaXVzUmFuZ2V9XG4gICAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWxheWVyLmNvbmZpZy5yYWRpdXNGaWVsZH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnJhZGl1c31cbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8L1N0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBfcmVuZGVyM0RMYXllckNvbmZpZyh7bGF5ZXIsIHZpc0NvbmZpZ3VyYXRvclByb3BzfSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIuM0RNb2RlbCd9IGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgYWNjZXB0PVwiLmdsYiwuZ2x0ZlwiXG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZS50YXJnZXQuZmlsZXMgJiYgZS50YXJnZXQuZmlsZXNbMF0pIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZS50YXJnZXQuZmlsZXNbMF0pO1xuICAgICAgICAgICAgICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMub25DaGFuZ2Uoe3NjZW5lZ3JhcGg6IHVybH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIuM0RNb2RlbE9wdGlvbnMnfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnNpemVTY2FsZX1cbiAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17ZmFsc2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuYW5nbGVYfVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtmYWxzZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5hbmdsZVl9XG4gICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmFuZ2xlWn1cbiAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17ZmFsc2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgX3JlbmRlclMyTGF5ZXJDb25maWcoe1xuICAgICAgbGF5ZXIsXG4gICAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNoYW5uZWxDb25maWdQcm9wc1xuICAgIH0pIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29uZmlnOiB7dmlzQ29uZmlnfVxuICAgICAgfSA9IGxheWVyO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICAgICAgey8qIENvbG9yICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZmlsbGVkfVxuICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgbGFiZWw9XCJsYXllci5maWxsQ29sb3JcIlxuICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7bGF5ZXIuY29uZmlnLmNvbG9yRmllbGQgPyAoXG4gICAgICAgICAgICAgIDxMYXllckNvbG9yUmFuZ2VTZWxlY3RvciB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclNlbGVjdG9yIHsuLi5sYXllckNvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLm9wYWNpdHl9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgICAgey8qIFN0cm9rZSAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cFxuICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnN0cm9rZWR9XG4gICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICBsYWJlbD1cImxheWVyLnN0cm9rZUNvbG9yXCJcbiAgICAgICAgICAgIGNvbGxhcHNpYmxlXG4gICAgICAgICAgPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5zdHJva2VDb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3Igey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSBwcm9wZXJ0eT1cInN0cm9rZUNvbG9yUmFuZ2VcIiAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JTZWxlY3RvclxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBzZWxlY3RlZENvbG9yPXtsYXllci5jb25maWcudmlzQ29uZmlnLnN0cm9rZUNvbG9yfVxuICAgICAgICAgICAgICAgIHByb3BlcnR5PVwic3Ryb2tlQ29sb3JcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5zdHJva2VDb2xvcn1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBTdHJva2UgV2lkdGggKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSBsYWJlbD1cImxheWVyLnN0cm9rZVdpZHRoXCIgY29sbGFwc2libGU+XG4gICAgICAgICAgICB7bGF5ZXIuY29uZmlnLnNpemVGaWVsZCA/IChcbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zaXplUmFuZ2V9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MudGhpY2tuZXNzfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnNpemV9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogRWxldmF0aW9uICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZW5hYmxlM2R9XG4gICAgICAgICAgICBkaXNhYmxlZD17IXZpc0NvbmZpZy5maWxsZWR9XG4gICAgICAgICAgICBjb2xsYXBzaWJsZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmhlaWdodH1cbiAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVsZXZhdGlvblNjYWxlfVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGxhYmVsPVwibGF5ZXJWaXNDb25maWdzLmVsZXZhdGlvblNjYWxlXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuaGVpZ2h0UmFuZ2V9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPVwibGF5ZXJWaXNDb25maWdzLmhlaWdodFJhbmdlXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1N3aXRjaFxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5lbmFibGVFbGV2YXRpb25ab29tRmFjdG9yfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1N3aXRjaCB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy53aXJlZnJhbWV9IC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgPC9TdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBsYXllcixcbiAgICAgICAgZGF0YXNldHMsXG4gICAgICAgIHVwZGF0ZUxheWVyQ29uZmlnLFxuICAgICAgICBsYXllclR5cGVPcHRpb25zLFxuICAgICAgICB1cGRhdGVMYXllclR5cGUsXG4gICAgICAgIGRpc2FibGVUeXBlU2VsZWN0ID0gZmFsc2VcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3Qge2ZpZWxkcyA9IFtdLCBmaWVsZFBhaXJzID0gdW5kZWZpbmVkfSA9IGxheWVyLmNvbmZpZy5kYXRhSWRcbiAgICAgICAgPyBkYXRhc2V0c1tsYXllci5jb25maWcuZGF0YUlkXVxuICAgICAgICA6IHt9O1xuICAgICAgY29uc3Qge2NvbmZpZ30gPSBsYXllcjtcblxuICAgICAgY29uc3QgdmlzQ29uZmlndXJhdG9yUHJvcHMgPSBnZXRWaXNDb25maWd1cmF0b3JQcm9wcyh0aGlzLnByb3BzKTtcbiAgICAgIGNvbnN0IGxheWVyQ29uZmlndXJhdG9yUHJvcHMgPSBnZXRMYXllckNvbmZpZ3VyYXRvclByb3BzKHRoaXMucHJvcHMpO1xuICAgICAgY29uc3QgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHMgPSBnZXRMYXllckNoYW5uZWxDb25maWdQcm9wcyh0aGlzLnByb3BzKTtcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSBnZXRMYXllckRhdGFzZXQoZGF0YXNldHMsIGxheWVyKTtcbiAgICAgIGNvbnN0IHJlbmRlclRlbXBsYXRlID0gbGF5ZXIudHlwZSAmJiBgX3JlbmRlciR7Y2FwaXRhbGl6ZUZpcnN0TGV0dGVyKGxheWVyLnR5cGUpfUxheWVyQ29uZmlnYDtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZExheWVyQ29uZmlndXJhdG9yPlxuICAgICAgICAgIHtsYXllci5sYXllckluZm9Nb2RhbCA/IChcbiAgICAgICAgICAgIDxIb3dUb0J1dHRvbiBvbkNsaWNrPXsoKSA9PiB0aGlzLnByb3BzLm9wZW5Nb2RhbChsYXllci5sYXllckluZm9Nb2RhbCl9IC8+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5iYXNpYyd9IGNvbGxhcHNpYmxlIGV4cGFuZGVkPXshbGF5ZXIuaGFzQWxsQ29sdW1ucygpfT5cbiAgICAgICAgICAgIDxMYXllclR5cGVTZWxlY3RvclxuICAgICAgICAgICAgICBzZWxlY3RlZD17bGF5ZXIudHlwZX1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVUeXBlU2VsZWN0fVxuICAgICAgICAgICAgICBvcHRpb25zPXtsYXllclR5cGVPcHRpb25zfVxuICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgIG9uU2VsZWN0PXt1cGRhdGVMYXllclR5cGV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8U291cmNlRGF0YVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgZGF0YXNldHM9e2RhdGFzZXRzfVxuICAgICAgICAgICAgICAgIGlkPXtsYXllci5pZH1cbiAgICAgICAgICAgICAgICBkYXRhSWQ9e2NvbmZpZy5kYXRhSWR9XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIG9uU2VsZWN0PXsodmFsdWU6IHN0cmluZykgPT4gdXBkYXRlTGF5ZXJDb25maWcoe2RhdGFJZDogdmFsdWV9KX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPExheWVyQ29sdW1uQ29uZmlnXG4gICAgICAgICAgICAgICAgY29sdW1uUGFpcnM9e2xheWVyLmNvbHVtblBhaXJzfVxuICAgICAgICAgICAgICAgIGNvbHVtbnM9e2xheWVyLmNvbmZpZy5jb2x1bW5zfVxuICAgICAgICAgICAgICAgIGFzc2lnbkNvbHVtblBhaXJzPXtsYXllci5hc3NpZ25Db2x1bW5QYWlycy5iaW5kKGxheWVyKX1cbiAgICAgICAgICAgICAgICBhc3NpZ25Db2x1bW49e2xheWVyLmFzc2lnbkNvbHVtbi5iaW5kKGxheWVyKX1cbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgY29sdW1uTGFiZWxzPXtsYXllci5jb2x1bW5MYWJlbHN9XG4gICAgICAgICAgICAgICAgZmllbGRzPXtmaWVsZHN9XG4gICAgICAgICAgICAgICAgZmllbGRQYWlycz17ZmllbGRQYWlyc31cbiAgICAgICAgICAgICAgICB1cGRhdGVMYXllckNvbmZpZz17dXBkYXRlTGF5ZXJDb25maWd9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAge2xheWVyLmVycm9yTWVzc2FnZSA/IDxMYXllckVycm9yTWVzc2FnZSBlcnJvck1lc3NhZ2U9e2xheWVyLmVycm9yTWVzc2FnZX0gLz4gOiBudWxsfVxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgICB7cmVuZGVyVGVtcGxhdGUgJiZcbiAgICAgICAgICAgIHRoaXNbcmVuZGVyVGVtcGxhdGVdICYmXG4gICAgICAgICAgICB0aGlzW3JlbmRlclRlbXBsYXRlXSh7XG4gICAgICAgICAgICAgIGxheWVyLFxuICAgICAgICAgICAgICBkYXRhc2V0LFxuICAgICAgICAgICAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgICAgICAgICAgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHMsXG4gICAgICAgICAgICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHNcbiAgICAgICAgICAgIH0pfVxuICAgICAgICA8L1N0eWxlZExheWVyQ29uZmlndXJhdG9yPlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gTGF5ZXJDb25maWd1cmF0b3I7XG59XG5cbkNoYW5uZWxCeVZhbHVlU2VsZWN0b3JGYWN0b3J5LmRlcHMgPSBbVmlzQ29uZmlnQnlGaWVsZFNlbGVjdG9yRmFjdG9yeV07XG5cbmV4cG9ydCBmdW5jdGlvbiBDaGFubmVsQnlWYWx1ZVNlbGVjdG9yRmFjdG9yeShcbiAgVmlzQ29uZmlnQnlGaWVsZFNlbGVjdG9yOiBSZXR1cm5UeXBlPHR5cGVvZiBWaXNDb25maWdCeUZpZWxkU2VsZWN0b3JGYWN0b3J5PlxuKSB7XG4gIGNvbnN0IENoYW5uZWxCeVZhbHVlU2VsZWN0b3IgPSAoe1xuICAgIGxheWVyLFxuICAgIGNoYW5uZWwsXG4gICAgb25DaGFuZ2UsXG4gICAgZmllbGRzLFxuICAgIGRlc2NyaXB0aW9uXG4gIH06IENoYW5uZWxCeVZhbHVlU2VsZWN0b3JQcm9wcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNoYW5uZWxTY2FsZVR5cGUsXG4gICAgICBmaWVsZCxcbiAgICAgIGtleSxcbiAgICAgIHByb3BlcnR5LFxuICAgICAgc2NhbGUsXG4gICAgICBkZWZhdWx0TWVhc3VyZSxcbiAgICAgIHN1cHBvcnRlZEZpZWxkVHlwZXNcbiAgICB9ID0gY2hhbm5lbDtcbiAgICBjb25zdCBjaGFubmVsU3VwcG9ydGVkRmllbGRUeXBlcyA9XG4gICAgICBzdXBwb3J0ZWRGaWVsZFR5cGVzIHx8IENIQU5ORUxfU0NBTEVfU1VQUE9SVEVEX0ZJRUxEU1tjaGFubmVsU2NhbGVUeXBlXTtcbiAgICBjb25zdCBzdXBwb3J0ZWRGaWVsZHMgPSBmaWVsZHMuZmlsdGVyKCh7dHlwZX0pID0+IGNoYW5uZWxTdXBwb3J0ZWRGaWVsZFR5cGVzLmluY2x1ZGVzKHR5cGUpKTtcbiAgICBjb25zdCBzY2FsZU9wdGlvbnMgPSBsYXllci5nZXRTY2FsZU9wdGlvbnMoY2hhbm5lbC5rZXkpO1xuICAgIGNvbnN0IHNob3dTY2FsZSA9ICFsYXllci5pc0FnZ3JlZ2F0ZWQgJiYgbGF5ZXIuY29uZmlnW3NjYWxlXSAmJiBzY2FsZU9wdGlvbnMubGVuZ3RoID4gMTtcbiAgICBjb25zdCBkZWZhdWx0RGVzY3JpcHRpb24gPSAnbGF5ZXJDb25maWd1cmF0aW9uLmRlZmF1bHREZXNjcmlwdGlvbic7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpc0NvbmZpZ0J5RmllbGRTZWxlY3RvclxuICAgICAgICBjaGFubmVsPXtjaGFubmVsLmtleX1cbiAgICAgICAgZGVzY3JpcHRpb249e2Rlc2NyaXB0aW9uIHx8IGRlZmF1bHREZXNjcmlwdGlvbn1cbiAgICAgICAgZmllbGRzPXtzdXBwb3J0ZWRGaWVsZHN9XG4gICAgICAgIGlkPXtsYXllci5pZH1cbiAgICAgICAga2V5PXtgJHtrZXl9LWNoYW5uZWwtc2VsZWN0b3JgfVxuICAgICAgICBwcm9wZXJ0eT17cHJvcGVydHl9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtkZWZhdWx0TWVhc3VyZSB8fCAncGxhY2Vob2xkZXIuc2VsZWN0RmllbGQnfVxuICAgICAgICBzY2FsZU9wdGlvbnM9e3NjYWxlT3B0aW9uc31cbiAgICAgICAgc2NhbGVUeXBlPXtzY2FsZSA/IGxheWVyLmNvbmZpZ1tzY2FsZV0gOiBudWxsfVxuICAgICAgICBzZWxlY3RlZEZpZWxkPXtsYXllci5jb25maWdbZmllbGRdfVxuICAgICAgICBzaG93U2NhbGU9e3Nob3dTY2FsZX1cbiAgICAgICAgdXBkYXRlRmllbGQ9e3ZhbCA9PiBvbkNoYW5nZSh7W2ZpZWxkXTogdmFsfSwga2V5KX1cbiAgICAgICAgdXBkYXRlU2NhbGU9e3ZhbCA9PiBvbkNoYW5nZSh7W3NjYWxlXTogdmFsfSwga2V5KX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4gQ2hhbm5lbEJ5VmFsdWVTZWxlY3Rvcjtcbn1cblxuZXhwb3J0IGNvbnN0IEFnZ3JlZ2F0aW9uU2NhbGVTZWxlY3RvciA9ICh7Y2hhbm5lbCwgbGF5ZXIsIG9uQ2hhbmdlfTogQWdncmVnYXRpb25TZWxlY3RvclByb3BzKSA9PiB7XG4gIGNvbnN0IHtzY2FsZSwga2V5fSA9IGNoYW5uZWw7XG4gIGNvbnN0IHNjYWxlT3B0aW9ucyA9IGxheWVyLmdldFNjYWxlT3B0aW9ucyhrZXkpO1xuXG4gIHJldHVybiBBcnJheS5pc0FycmF5KHNjYWxlT3B0aW9ucykgJiYgc2NhbGVPcHRpb25zLmxlbmd0aCA+IDEgPyAoXG4gICAgPERpbWVuc2lvblNjYWxlU2VsZWN0b3JcbiAgICAgIGxhYmVsPXtgJHtrZXl9IFNjYWxlYH1cbiAgICAgIG9wdGlvbnM9e3NjYWxlT3B0aW9uc31cbiAgICAgIHNjYWxlVHlwZT17bGF5ZXIuY29uZmlnW3NjYWxlXX1cbiAgICAgIG9uU2VsZWN0PXt2YWwgPT4gb25DaGFuZ2Uoe1tzY2FsZV06IHZhbH0sIGtleSl9XG4gICAgLz5cbiAgKSA6IG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgQWdncmVnYXRpb25UeXBlU2VsZWN0b3IgPSAoe2NoYW5uZWwsIGxheWVyLCBvbkNoYW5nZX06IEFnZ3JlZ2F0aW9uU2VsZWN0b3JQcm9wcykgPT4ge1xuICBjb25zdCB7ZmllbGQsIGFnZ3JlZ2F0aW9uLCBrZXl9ID0gY2hhbm5lbDtcbiAgY29uc3Qgc2VsZWN0ZWRGaWVsZCA9IGxheWVyLmNvbmZpZ1tmaWVsZF07XG4gIGNvbnN0IHt2aXNDb25maWd9ID0gbGF5ZXIuY29uZmlnO1xuXG4gIC8vIGFnZ3JlZ2F0aW9uIHNob3VsZCBvbmx5IGJlIHNlbGVjdGFibGUgd2hlbiBmaWVsZCBpcyBzZWxlY3RlZFxuICBjb25zdCBsYXllckFnZ3JlZ2F0aW9uVHlwZXMgPSBsYXllci5nZXRBZ2dyZWdhdGlvbk9wdGlvbnMoa2V5KTtcblxuICBjb25zdCBhZ2dyZWdhdGlvbk9wdGlvbnMgPSBBR0dSRUdBVElPTl9UWVBFX09QVElPTlMuZmlsdGVyKCh7aWR9KSA9PlxuICAgIGxheWVyQWdncmVnYXRpb25UeXBlcy5pbmNsdWRlcyhpZClcbiAgKTtcblxuICBjb25zdCBzZWxlY3RlZEFnZ3JlZ2F0aW9uID0gYWdncmVnYXRpb25cbiAgICA/IGFnZ3JlZ2F0aW9uT3B0aW9ucy5maW5kKCh7aWR9KSA9PiBpZCA9PT0gdmlzQ29uZmlnW2FnZ3JlZ2F0aW9uXSlcbiAgICA6IFtdO1xuXG4gIHJldHVybiAoXG4gICAgPFNpZGVQYW5lbFNlY3Rpb24+XG4gICAgICA8UGFuZWxMYWJlbD5cbiAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2VcbiAgICAgICAgICBpZD17J2xheWVyLmFnZ3JlZ2F0ZUJ5J31cbiAgICAgICAgICB2YWx1ZXM9e3tcbiAgICAgICAgICAgIGZpZWxkOiBzZWxlY3RlZEZpZWxkLmRpc3BsYXlOYW1lXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgIDwvUGFuZWxMYWJlbD5cbiAgICAgIDxJdGVtU2VsZWN0b3JcbiAgICAgICAgc2VsZWN0ZWRJdGVtcz17c2VsZWN0ZWRBZ2dyZWdhdGlvbn1cbiAgICAgICAgb3B0aW9ucz17YWdncmVnYXRpb25PcHRpb25zfVxuICAgICAgICBkaXNwbGF5T3B0aW9uPVwibGFiZWxcIlxuICAgICAgICBnZXRPcHRpb25WYWx1ZT1cImlkXCJcbiAgICAgICAgbXVsdGlTZWxlY3Q9e2ZhbHNlfVxuICAgICAgICBzZWFyY2hhYmxlPXtmYWxzZX1cbiAgICAgICAgb25DaGFuZ2U9e3ZhbHVlID0+XG4gICAgICAgICAgb25DaGFuZ2UoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZpc0NvbmZpZzoge1xuICAgICAgICAgICAgICAgIC4uLmxheWVyLmNvbmZpZy52aXNDb25maWcsXG4gICAgICAgICAgICAgICAgW2FnZ3JlZ2F0aW9uIGFzIHN0cmluZ106IHZhbHVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjaGFubmVsLmtleVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgLz5cbiAgICA8L1NpZGVQYW5lbFNlY3Rpb24+XG4gICk7XG59O1xuLyogZXNsaW50LWVuYWJsZSBtYXgtcGFyYW1zICovXG4iXX0=
|