@kepler.gl/components 3.3.0-alpha.6 → 3.3.0-alpha.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/common/data-table/cell-size.js +40 -23
- package/dist/cjs/common/data-table/column-statistics-categoric.js +40 -0
- package/dist/cjs/common/data-table/column-statistics-components.js +65 -0
- package/dist/cjs/common/data-table/column-statistics-numeric.js +87 -0
- package/dist/cjs/common/data-table/column-statistics-time.js +69 -0
- package/dist/cjs/common/data-table/grid.js +2 -2
- package/dist/cjs/common/data-table/header-cell.js +123 -44
- package/dist/cjs/common/data-table/index.js +104 -31
- package/dist/cjs/common/file-uploader/file-upload.js +250 -40
- package/dist/cjs/common/histogram-plot.js +1 -1
- package/dist/cjs/common/icons/circle.js +54 -0
- package/dist/cjs/common/icons/{arrow-down-solid.js → draw-point.js} +21 -11
- package/dist/cjs/common/icons/index.js +22 -1
- package/dist/cjs/common/icons/line-string.js +60 -0
- package/dist/cjs/common/item-selector/item-selector.js +2 -2
- package/dist/cjs/common/portaled.js +3 -3
- package/dist/cjs/common/time-range-slider.js +2 -2
- package/dist/cjs/common/timeline-slider.js +2 -2
- package/dist/cjs/common/toolbar-item.js +24 -3
- package/dist/cjs/editor/editor.js +27 -9
- package/dist/cjs/editor/feature-action-panel.js +34 -12
- package/dist/cjs/editor/feature-properties-editor.js +215 -0
- package/dist/cjs/editor/filter-feature-badges.js +92 -0
- package/dist/cjs/filters/filter-panels/polygon-filter-panel.js +2 -2
- package/dist/cjs/filters/time-widget.js +2 -2
- package/dist/cjs/index.js +33 -1
- package/dist/cjs/kepler-gl.js +20 -3
- package/dist/cjs/map/layer-hover-info.js +2 -2
- package/dist/cjs/map/map-control-toolbar.js +2 -2
- package/dist/cjs/map/map-control.js +14 -8
- package/dist/cjs/map/map-draw-panel.js +74 -15
- package/dist/cjs/map/theme-toggle-button.js +64 -0
- package/dist/cjs/map-container.js +17 -6
- package/dist/cjs/map-view-state-context.js +3 -3
- package/dist/cjs/modal-container.js +3 -2
- package/dist/cjs/modals/cloud-components/cloud-item.js +55 -7
- package/dist/cjs/modals/cloud-components/cloud-item.spec.js +75 -3
- package/dist/cjs/modals/cloud-components/cloud-maps.js +2 -1
- package/dist/cjs/modals/cloud-components/cloud-storage-disclaimer.js +24 -0
- package/dist/cjs/modals/cloud-tile.js +82 -39
- package/dist/cjs/modals/data-table-modal.js +37 -25
- package/dist/cjs/modals/export-video-modal.js +28 -1
- package/dist/cjs/modals/export-video-modal.spec.js +56 -10
- package/dist/cjs/modals/globe-export-video-container.js +19 -3
- package/dist/cjs/modals/globe-export-video-preview.js +25 -7
- package/dist/cjs/modals/hubble-utils.js +8 -3
- package/dist/cjs/modals/image-modal-container.js +2 -2
- package/dist/cjs/modals/load-data-modal.js +3 -3
- package/dist/cjs/modals/load-storage-map.js +9 -6
- package/dist/cjs/modals/save-map-modal.js +4 -3
- package/dist/cjs/modals/share-map-modal.js +5 -4
- package/dist/cjs/modals/swipe-composite-utils.js +9 -1
- package/dist/cjs/modals/swipe-composite-utils.spec.js +69 -0
- package/dist/cjs/modals/swipe-export-video-preview.js +9 -5
- package/dist/cjs/plot-container.js +12 -5
- package/dist/cjs/side-panel/common/dataset-info.js +2 -2
- package/dist/cjs/side-panel/filter-panel/filter-panel.js +2 -2
- package/dist/cjs/side-panel/layer-manager.js +11 -3
- package/dist/cjs/side-panel/layer-panel/custom-palette.js +2 -2
- package/dist/cjs/side-panel/layer-panel/dataset-layer-section.js +11 -3
- package/dist/cjs/side-panel/layer-panel/layer-configurator.js +74 -31
- package/dist/cjs/side-panel/map-style-panel/globe-config-panel.js +90 -25
- package/dist/common/data-table/column-statistics-categoric.d.ts +9 -0
- package/dist/common/data-table/column-statistics-components.d.ts +31 -0
- package/dist/common/data-table/column-statistics-numeric.d.ts +18 -0
- package/dist/common/data-table/column-statistics-time.d.ts +19 -0
- package/dist/common/data-table/header-cell.d.ts +7 -5
- package/dist/common/data-table/index.d.ts +7 -24
- package/dist/common/histogram-plot.d.ts +24 -1
- package/dist/common/icons/{arrow-down-solid.d.ts → circle.d.ts} +2 -1
- package/dist/common/icons/draw-point.d.ts +10 -0
- package/dist/common/icons/index.d.ts +3 -0
- package/dist/common/icons/line-string.d.ts +10 -0
- package/dist/common/toolbar-item.d.ts +2 -0
- package/dist/editor/editor.d.ts +1 -0
- package/dist/editor/feature-action-panel.d.ts +1 -0
- package/dist/editor/feature-properties-editor.d.ts +8 -0
- package/dist/editor/filter-feature-badges.d.ts +12 -0
- package/dist/esm/common/data-table/cell-size.js +40 -23
- package/dist/esm/common/data-table/column-statistics-categoric.js +33 -0
- package/dist/esm/common/data-table/column-statistics-components.js +59 -0
- package/dist/esm/common/data-table/column-statistics-numeric.js +78 -0
- package/dist/esm/common/data-table/column-statistics-time.js +60 -0
- package/dist/esm/common/data-table/grid.js +2 -2
- package/dist/esm/common/data-table/header-cell.js +125 -46
- package/dist/esm/common/data-table/index.js +104 -31
- package/dist/esm/common/file-uploader/file-upload.js +251 -41
- package/dist/esm/common/histogram-plot.js +1 -1
- package/dist/esm/common/icons/circle.js +48 -0
- package/dist/esm/common/icons/draw-point.js +44 -0
- package/dist/esm/common/icons/index.js +4 -1
- package/dist/esm/common/icons/line-string.js +54 -0
- package/dist/esm/common/item-selector/item-selector.js +2 -2
- package/dist/esm/common/portaled.js +3 -3
- package/dist/esm/common/time-range-slider.js +2 -2
- package/dist/esm/common/timeline-slider.js +2 -2
- package/dist/esm/common/toolbar-item.js +24 -3
- package/dist/esm/editor/editor.js +27 -9
- package/dist/esm/editor/feature-action-panel.js +37 -15
- package/dist/esm/editor/feature-properties-editor.js +208 -0
- package/dist/esm/editor/filter-feature-badges.js +85 -0
- package/dist/esm/filters/filter-panels/polygon-filter-panel.js +2 -2
- package/dist/esm/filters/time-widget.js +2 -2
- package/dist/esm/index.js +5 -1
- package/dist/esm/kepler-gl.js +20 -3
- package/dist/esm/map/layer-hover-info.js +2 -2
- package/dist/esm/map/map-control-toolbar.js +2 -2
- package/dist/esm/map/map-control.js +14 -8
- package/dist/esm/map/map-draw-panel.js +72 -11
- package/dist/esm/map/theme-toggle-button.js +55 -0
- package/dist/esm/map-container.js +17 -6
- package/dist/esm/map-view-state-context.js +3 -3
- package/dist/esm/modal-container.js +3 -2
- package/dist/esm/modals/cloud-components/cloud-item.js +53 -7
- package/dist/esm/modals/cloud-components/cloud-item.spec.js +76 -4
- package/dist/esm/modals/cloud-components/cloud-maps.js +2 -1
- package/dist/esm/modals/cloud-components/cloud-storage-disclaimer.js +19 -0
- package/dist/esm/modals/cloud-tile.js +82 -39
- package/dist/esm/modals/data-table-modal.js +38 -26
- package/dist/esm/modals/export-video-modal.js +29 -2
- package/dist/esm/modals/export-video-modal.spec.js +56 -10
- package/dist/esm/modals/globe-export-video-container.js +20 -4
- package/dist/esm/modals/globe-export-video-preview.js +26 -8
- package/dist/esm/modals/hubble-utils.js +8 -3
- package/dist/esm/modals/image-modal-container.js +2 -2
- package/dist/esm/modals/load-data-modal.js +3 -3
- package/dist/esm/modals/load-storage-map.js +8 -3
- package/dist/esm/modals/save-map-modal.js +4 -3
- package/dist/esm/modals/share-map-modal.js +5 -4
- package/dist/esm/modals/swipe-composite-utils.js +9 -1
- package/dist/esm/modals/swipe-composite-utils.spec.js +67 -0
- package/dist/esm/modals/swipe-export-video-preview.js +8 -4
- package/dist/esm/plot-container.js +12 -5
- package/dist/esm/side-panel/common/dataset-info.js +2 -2
- package/dist/esm/side-panel/filter-panel/filter-panel.js +2 -2
- package/dist/esm/side-panel/layer-manager.js +11 -3
- package/dist/esm/side-panel/layer-panel/custom-palette.js +2 -2
- package/dist/esm/side-panel/layer-panel/dataset-layer-section.js +11 -3
- package/dist/esm/side-panel/layer-panel/layer-configurator.js +74 -31
- package/dist/esm/side-panel/map-style-panel/globe-config-panel.js +90 -25
- package/dist/index.d.ts +8 -0
- package/dist/kepler-gl.d.ts +3 -0
- package/dist/map/map-control.d.ts +6 -2
- package/dist/map/map-draw-panel.d.ts +1 -0
- package/dist/map/theme-toggle-button.d.ts +18 -0
- package/dist/map-container.d.ts +1 -0
- package/dist/modals/cloud-components/cloud-item.d.ts +2 -1
- package/dist/modals/cloud-components/cloud-storage-disclaimer.d.ts +2 -0
- package/dist/modals/data-table-modal.d.ts +1 -0
- package/dist/modals/globe-export-video-container.d.ts +2 -0
- package/dist/modals/globe-export-video-preview.d.ts +3 -0
- package/dist/modals/hubble-utils.d.ts +2 -1
- package/dist/modals/swipe-composite-utils.d.ts +1 -1
- package/dist/modals/swipe-composite-utils.spec.d.ts +1 -0
- package/package.json +20 -21
- package/dist/cjs/modals/cloud-components/provider-loading.js +0 -20
- package/dist/cjs/modals/storage-map-viewer.js +0 -98
- package/dist/cjs/side-panel/cloud-storage-dropdown.js +0 -40
- package/dist/esm/common/icons/arrow-down-solid.js +0 -34
- package/dist/esm/modals/cloud-components/provider-loading.js +0 -15
- package/dist/esm/modals/storage-map-viewer.js +0 -93
- package/dist/esm/side-panel/cloud-storage-dropdown.js +0 -33
- package/dist/modals/cloud-components/provider-loading.d.ts +0 -2
- package/dist/modals/storage-map-viewer.d.ts +0 -21
- package/dist/side-panel/cloud-storage-dropdown.d.ts +0 -6
|
@@ -24,7 +24,7 @@ import { MapView } from '@deck.gl/core';
|
|
|
24
24
|
import DeckGL from '@deck.gl/react';
|
|
25
25
|
import { createSelector } from 'reselect';
|
|
26
26
|
import { useDroppable } from '@dnd-kit/core';
|
|
27
|
-
import debounce from '
|
|
27
|
+
import debounce from 'es-toolkit/compat/debounce';
|
|
28
28
|
// components
|
|
29
29
|
import MapPopoverFactory from './map/map-popover';
|
|
30
30
|
import MapControlFactory from './map/map-control';
|
|
@@ -32,6 +32,7 @@ import MapScaleFactory from './map/map-scale';
|
|
|
32
32
|
import { StyledMapContainer } from './common/styled-components';
|
|
33
33
|
import { Attribution, AttributionLogos, renderBasemapAttribution, dedupeBasemapAttributions } from './map/attribution';
|
|
34
34
|
import EditorFactory from './editor/editor';
|
|
35
|
+
import FilterFeatureBadges from './editor/filter-feature-badges';
|
|
35
36
|
import { AnnotationOverlay } from './annotations';
|
|
36
37
|
|
|
37
38
|
// utils
|
|
@@ -1060,7 +1061,7 @@ export default function MapContainerFactory(MapPopover, MapControl, Editor, MapS
|
|
|
1060
1061
|
key: "_renderMap",
|
|
1061
1062
|
value: /* eslint-disable complexity */
|
|
1062
1063
|
function _renderMap() {
|
|
1063
|
-
var _mapStyle$mapStyles2, _this$props$MapCompon, _this$context3, _mapState$maxPitch, _this$props$isExport, _mapState$globe2, _mapStyle$bottomMapSt, _mapControls$annotati, _mapState$
|
|
1064
|
+
var _mapStyle$mapStyles2, _this$props$MapCompon, _this$context3, _mapState$maxPitch, _this$props$isExport, _mapState$globe2, _mapStyle$bottomMapSt, _mapState$globe3, _mapControls$annotati, _mapState$globe4, _mapState$globe5, _theme$sidePanel$marg, _theme$sidePanel, _theme$sidePanel$marg2, _theme$sidePanel2;
|
|
1064
1065
|
var _this$props7 = this.props,
|
|
1065
1066
|
visState = _this$props7.visState,
|
|
1066
1067
|
mapState = _this$props7.mapState,
|
|
@@ -1070,6 +1071,7 @@ export default function MapContainerFactory(MapPopover, MapControl, Editor, MapS
|
|
|
1070
1071
|
mapControls = _this$props7.mapControls,
|
|
1071
1072
|
isExport = _this$props7.isExport,
|
|
1072
1073
|
locale = _this$props7.locale,
|
|
1074
|
+
uiTheme = _this$props7.uiTheme,
|
|
1073
1075
|
uiStateActions = _this$props7.uiStateActions,
|
|
1074
1076
|
visStateActions = _this$props7.visStateActions,
|
|
1075
1077
|
index = _this$props7.index,
|
|
@@ -1165,6 +1167,7 @@ export default function MapContainerFactory(MapPopover, MapControl, Editor, MapS
|
|
|
1165
1167
|
top: interactionConfig.geocoder && interactionConfig.geocoder.enabled ? theme.mapControlTop : 0,
|
|
1166
1168
|
editor: editor,
|
|
1167
1169
|
locale: locale,
|
|
1170
|
+
themeName: uiTheme,
|
|
1168
1171
|
onTogglePerspective: mapStateActions.togglePerspective,
|
|
1169
1172
|
onSetMapViewMode: mapStateActions.setMapViewMode,
|
|
1170
1173
|
mapViewMode: mapState.mapViewMode,
|
|
@@ -1174,7 +1177,9 @@ export default function MapContainerFactory(MapPopover, MapControl, Editor, MapS
|
|
|
1174
1177
|
onToggleSplitMapViewport: mapStateActions.toggleSplitMapViewport,
|
|
1175
1178
|
onSetEditorMode: visStateActions.setEditorMode,
|
|
1176
1179
|
onSetLocale: uiStateActions.setLocale,
|
|
1180
|
+
onSetTheme: uiStateActions.setTheme,
|
|
1177
1181
|
onToggleEditorVisibility: visStateActions.toggleEditorVisibility,
|
|
1182
|
+
onConvertEditorFeaturesToLayer: visStateActions.convertEditorFeaturesToLayer,
|
|
1178
1183
|
onLayerVisConfigChange: visStateActions.layerVisConfigChange,
|
|
1179
1184
|
onToggleLayerVisibility: this._handleToggleLayerVisibility,
|
|
1180
1185
|
mapHeight: mapState.height,
|
|
@@ -1191,6 +1196,7 @@ export default function MapContainerFactory(MapPopover, MapControl, Editor, MapS
|
|
|
1191
1196
|
filters: this.polygonFiltersSelector(this.props),
|
|
1192
1197
|
layers: layers,
|
|
1193
1198
|
onDeleteFeature: visStateActions.deleteFeature,
|
|
1199
|
+
onSetFeatureProperties: visStateActions.setEditorFeatureProperties,
|
|
1194
1200
|
onSelect: visStateActions.setSelectedFeature,
|
|
1195
1201
|
onTogglePolygonFilter: visStateActions.setPolygonFilterLayer,
|
|
1196
1202
|
onSetEditorMode: visStateActions.setEditorMode,
|
|
@@ -1199,17 +1205,22 @@ export default function MapContainerFactory(MapPopover, MapControl, Editor, MapS
|
|
|
1199
1205
|
position: 'absolute',
|
|
1200
1206
|
display: editor.visible ? 'block' : 'none'
|
|
1201
1207
|
}
|
|
1202
|
-
}), /*#__PURE__*/React.createElement(
|
|
1208
|
+
}), editor.visible ? /*#__PURE__*/React.createElement(FilterFeatureBadges, {
|
|
1209
|
+
filters: this.polygonFiltersSelector(this.props),
|
|
1210
|
+
viewport: this._getAnnotationViewport(mapState, internalViewState),
|
|
1211
|
+
isGlobeEnabled: Boolean((_mapState$globe3 = mapState.globe) === null || _mapState$globe3 === void 0 ? void 0 : _mapState$globe3.enabled),
|
|
1212
|
+
onSelect: visStateActions.setSelectedFeature
|
|
1213
|
+
}) : null, /*#__PURE__*/React.createElement(AnnotationOverlay, {
|
|
1203
1214
|
annotations: visState.annotations,
|
|
1204
1215
|
selectedAnnotationId: visState.selectedAnnotationId,
|
|
1205
1216
|
isEditingAnnotationText: visState.isEditingAnnotationText,
|
|
1206
1217
|
isAnnotationMode: Boolean(mapControls === null || mapControls === void 0 || (_mapControls$annotati = mapControls.annotation) === null || _mapControls$annotati === void 0 ? void 0 : _mapControls$annotati.active),
|
|
1207
1218
|
mapIndex: index || 0,
|
|
1208
1219
|
viewport: this._getAnnotationViewport(mapState, internalViewState),
|
|
1209
|
-
isGlobeEnabled: Boolean((_mapState$
|
|
1220
|
+
isGlobeEnabled: Boolean((_mapState$globe4 = mapState.globe) === null || _mapState$globe4 === void 0 ? void 0 : _mapState$globe4.enabled),
|
|
1210
1221
|
updateAnnotation: visStateActions.updateAnnotation,
|
|
1211
1222
|
setSelectedAnnotation: visStateActions.setSelectedAnnotation
|
|
1212
|
-
}), this.props.children, mapStyle.topMapStyle && !((_mapState$
|
|
1223
|
+
}), this.props.children, mapStyle.topMapStyle && !((_mapState$globe5 = mapState.globe) !== null && _mapState$globe5 !== void 0 && _mapState$globe5.enabled) ? /*#__PURE__*/React.createElement(ResolvedMapComponent, _extends({
|
|
1213
1224
|
key: "top-".concat(baseMapLibraryName),
|
|
1214
1225
|
viewState: internalViewState,
|
|
1215
1226
|
maxPitch: effectiveMaxPitch,
|
|
@@ -1289,4 +1300,4 @@ export default function MapContainerFactory(MapPopover, MapControl, Editor, MapS
|
|
|
1289
1300
|
});
|
|
1290
1301
|
return withTheme(MapContainer);
|
|
1291
1302
|
}
|
|
1292
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIkNvbXBvbmVudCIsImNyZWF0ZVJlZiIsInN0eWxlZCIsIndpdGhUaGVtZSIsIk1hcCIsIk1hcGJveExlZ2FjeU1hcCIsIk1hcGxpYnJlTWFwIiwiTWFwVmlldyIsIkRlY2tHTCIsImNyZWF0ZVNlbGVjdG9yIiwidXNlRHJvcHBhYmxlIiwiZGVib3VuY2UiLCJNYXBQb3BvdmVyRmFjdG9yeSIsIk1hcENvbnRyb2xGYWN0b3J5IiwiTWFwU2NhbGVGYWN0b3J5IiwiU3R5bGVkTWFwQ29udGFpbmVyIiwiQXR0cmlidXRpb24iLCJBdHRyaWJ1dGlvbkxvZ29zIiwicmVuZGVyQmFzZW1hcEF0dHJpYnV0aW9uIiwiZGVkdXBlQmFzZW1hcEF0dHJpYnV0aW9ucyIsIkVkaXRvckZhY3RvcnkiLCJBbm5vdGF0aW9uT3ZlcmxheSIsImdlbmVyYXRlTWFwYm94TGF5ZXJzIiwidXBkYXRlTWFwYm94TGF5ZXJzIiwiRWRpdG9yTGF5ZXJVdGlscyIsImVycm9yTm90aWZpY2F0aW9uIiwiaXNTdHlsZVVzaW5nTWFwYm94VGlsZXMiLCJpc1N0eWxlVXNpbmdPcGVuU3RyZWV0TWFwVGlsZXMiLCJnZXRCYXNlTWFwQXR0cmlidXRpb25zIiwiZ2V0QmFzZU1hcExpYnJhcnkiLCJ0cmFuc2Zvcm1SZXF1ZXN0Iiwib2JzZXJ2ZURpbWVuc2lvbnMiLCJ1bm9ic2VydmVEaW1lbnNpb25zIiwiZ2V0TWFwTGF5ZXJzRnJvbVNwbGl0TWFwcyIsIm9uVmlld1BvcnRDaGFuZ2UiLCJnZXRWaWV3cG9ydEZyb21NYXBTdGF0ZSIsIm5vcm1hbGl6ZUV2ZW50IiwicmdiVG9IZXgiLCJjb21wdXRlRGVja0VmZmVjdHMiLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsImdldExheWVyQmxlbmRpbmdQYXJhbWV0ZXJzIiwicGF0Y2hEZWNrUmVuZGVyZXJGb3JQb3N0UHJvY2Vzc2luZyIsIkZJTFRFUl9UWVBFUyIsIkdFT0NPREVSX0xBWUVSX0lEIiwiVEhST1RUTEVfTk9USUZJQ0FUSU9OX1RJTUUiLCJERUZBVUxUX1BJQ0tJTkdfUkFESVVTIiwiTk9fTUFQX0lEIiwiRU1QVFlfTUFQQk9YX1NUWUxFIiwiTUFQQk9YX01BWF9QSVRDSCIsIk1BUF9MSUJfT1BUSU9OUyIsIkdMT0JFX01JTl9aT09NIiwiR0xPQkVfTUFYX1pPT00iLCJnZXRHbG9iZUJhc2VMYXllcnMiLCJnZXRHbG9iZVRvcExheWVycyIsImdldEdsb2JlQ2xlYXJDb2xvciIsImdldEdsb2JlQmFzZW1hcEF0dHJpYnV0aW9ucyIsInJlc29sdmVHbG9iZUJhc2VtYXBQcm92aWRlciIsImdldFN0YXJzQmFja2dyb3VuZEltYWdlIiwiS2VwbGVyR2xvYmVWaWV3IiwiRFJPUFBBQkxFX01BUF9DT05UQUlORVJfVFlQRSIsIk1hcFZpZXdTdGF0ZUNvbnRleHQiLCJFcnJvckJvdW5kYXJ5IiwiTE9DQUxFX0NPREVTIiwiYXJlQW55RGVja0xheWVyc0xvYWRpbmciLCJjb21wdXRlRGVja0xheWVycyIsImdldExheWVySG92ZXJQcm9wIiwicHJlcGFyZUxheWVyc0ZvckRlY2siLCJwcmVwYXJlTGF5ZXJzVG9SZW5kZXIiLCJMb2FkaW5nSW5kaWNhdG9yIiwiREVCT1VOQ0VfVklFV1BPUlRfUFJPUEFHQVRFIiwiREVCT1VOQ0VfTU9VU0VfTU9WRV9QUk9QQUdBVEUiLCJERUJPVU5DRV9MT0FESU5HX1NUQVRFX1BST1BBR0FURSIsIk1BUF9TVFlMRSIsImNvbnRhaW5lciIsImRpc3BsYXkiLCJwb3NpdGlvbiIsIndpZHRoIiwiaGVpZ2h0IiwidG9wIiwicG9pbnRlckV2ZW50cyIsIkxPQ0FMRV9DT0RFU19BUlJBWSIsIk9iamVjdCIsImtleXMiLCJTdHlsZWRNYXAiLCJfcmVmIiwiX3JlZiQkbWl4QmxlbmRNb2RlIiwiJG1peEJsZW5kTW9kZSIsIiRtYXBMaWJDc3NDbGFzcyIsImNvbmNhdCIsIk1BUEJPWEdMX1NUWUxFX1VQREFURSIsIk1BUEJPWEdMX1JFTkRFUiIsIk9TTV9BVFRSSUJVVElPTl9IVE1MIiwiU3R5bGVkRHJvcHBhYmxlIiwiZGl2IiwiX3RlbXBsYXRlT2JqZWN0IiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCIsInByb3BzIiwiJGlzT3ZlciIsInRoZW1lIiwiZG5kT3ZlckJhY2tncm91bmRDb2xvciIsIlN0eWxlZE1hcFNjYWxlQ29udGFpbmVyIiwiX3RlbXBsYXRlT2JqZWN0MiIsInNpZGVQYW5lbCIsIm1hcmdpbiIsImxlZnQiLCIkYm90dG9tT2Zmc2V0IiwiJGxlZnQiLCJpc1NwbGl0U2VsZWN0b3IiLCJ2aXNTdGF0ZSIsInNwbGl0TWFwcyIsImxlbmd0aCIsIkRyb3BwYWJsZSIsIl9yZWYyIiwiY29udGFpbmVySWQiLCJfdXNlRHJvcHBhYmxlIiwiaWQiLCJkYXRhIiwidHlwZSIsImluZGV4IiwiZGlzYWJsZWQiLCJpc092ZXIiLCJzZXROb2RlUmVmIiwiY3JlYXRlRWxlbWVudCIsInJlZiIsIk1hcENvbnRhaW5lckZhY3RvcnkiLCJkZXBzIiwiTWFwUG9wb3ZlciIsIk1hcENvbnRyb2wiLCJFZGl0b3IiLCJNYXBTY2FsZSIsIk1hcENvbnRhaW5lciIsIl9Db21wb25lbnQiLCJfdGhpcyIsIl9jbGFzc0NhbGxDaGVjayIsIl9jYWxsU3VwZXIiLCJfZGVmaW5lUHJvcGVydHkiLCJzaG93QmFzZU1hcExpYkxvZ28iLCJiYXNlbWFwQXR0cmlidXRpb25zIiwib25NYXBSZW5kZXIiLCJfbWFwIiwiZGltZW5zaW9ucyIsIl90aGlzJHByb3BzIiwicHJpbWFyeSIsIm1hcFN0YXRlQWN0aW9ucyIsInVwZGF0ZU1hcCIsImxheWVycyIsImxheWVyRGF0YSIsInNwbGl0TWFwU2VsZWN0b3IiLCJzcGxpdE1hcEluZGV4U2VsZWN0b3IiLCJsYXllck9yZGVyIiwibGF5ZXJzU2VsZWN0b3IiLCJsYXllckRhdGFTZWxlY3RvciIsIm1hcExheWVyc1NlbGVjdG9yIiwiZmlsdGVycyIsImZpbHRlcnNTZWxlY3RvciIsImZpbHRlciIsImYiLCJwb2x5Z29uIiwiZW5hYmxlZCIsImVkaXRvciIsImZlYXR1cmVzIiwic2VsZWN0ZWRGZWF0dXJlIiwicG9seWdvbkZpbHRlcnNTZWxlY3RvciIsImZlYXR1cmVzU2VsZWN0b3IiLCJwb2x5Z29uRmlsdGVycyIsIm1hcCIsInZhbHVlIiwiZmVhdHVyZUNvbGxlY3Rpb25TZWxlY3RvciIsInNlbGVjdGVkRmVhdHVyZVNlbGVjdG9yIiwiY29sbGVjdGlvbiIsImZpbmRJbmRleCIsIl9wcm9wcyRnZW5lcmF0ZU1hcGJveCIsImxheWVyT3JkZXJTZWxlY3RvciIsImxheWVyc1RvUmVuZGVyU2VsZWN0b3IiLCJnZW5lcmF0ZU1hcGJveExheWVyTWV0aG9kU2VsZWN0b3IiLCJsYXllciIsImxheWVyc1RvUmVuZGVyIiwiZ2VuZXJhdGVNYXBib3hMYXllck1ldGhvZCIsIm1hcFN0eWxlIiwic3R5bGVUeXBlIiwiYmFja2dyb3VuZENvbG9yIiwiX3Byb3BzJG1hcFN0YXRlIiwiQm9vbGVhbiIsIm1hcFN0YXRlIiwiZ2xvYmUiLCJfcHJvcHMkbWFwU3RhdGUyIiwiY29uZmlnIiwiX3Byb3BzJG1hcFN0YXRlMyIsInN0YXJzIiwibWFwU3R5bGVUeXBlU2VsZWN0b3IiLCJtYXBTdHlsZUJhY2tncm91bmRDb2xvclNlbGVjdG9yIiwiZ2xvYmVNb2RlU2VsZWN0b3IiLCJnbG9iZUJhY2tncm91bmRDb2xvclNlbGVjdG9yIiwiZ2xvYmVTdGFyc1NlbGVjdG9yIiwiaXNHbG9iZU1vZGUiLCJnbG9iZUJhY2tncm91bmRDb2xvciIsImdsb2JlU3RhcnMiLCJfb2JqZWN0U3ByZWFkIiwic2xpY2UiLCJiYWNrZ3JvdW5kSW1hZ2UiLCJiYWNrZ3JvdW5kUmVwZWF0IiwidmlzU3RhdGVBY3Rpb25zIiwib25MYXllckNsaWNrIiwiX2lkeCIsImluZm8iLCJvbkxheWVySG92ZXIiLCJpZHgiLCJBcnJheSIsImlzQXJyYXkiLCJjb2xvckRvbWFpbiIsImRvbWFpbiIsImFnZ3JlZ2F0ZWRCaW5zIiwibGF5ZXJDb25maWdDaGFuZ2UiLCJfdGhpcyRwcm9wczIiLCJib3VuZHMiLCJmaXRCb3VuZHMiLCJldmVudCIsImxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZSIsIndtc0ZlYXR1cmVJbmZvIiwiZmVhdHVyZUluZm8iLCJjb29yZGluYXRlIiwibGF5ZXJJZCIsIl90aGlzJHByb3BzMyIsIl90aGlzJHByb3BzMyRpbmRleCIsIm1hcEluZGV4IiwidG9nZ2xlTGF5ZXJGb3JNYXAiLCJ1cGRhdGUiLCJwcmV2aW91c0xheWVycyIsIl91cGRhdGVNYXBib3hMYXllcnMiLCJfdXBkYXRlQXR0cmlidXRpb24iLCJvbk1hcFN0eWxlTG9hZGVkIiwiX3RoaXMkcHJvcHMkbWFwU3R5bGUiLCJfdGhpcyRwcm9wcyRtYXBTdHlsZTIiLCJfcmVtb3ZlQmFzZW1hcEF0dHJpYnV0aW9uTGlzdGVuZXJzIiwic3R5bGVPYmoiLCJzdHlsZSIsIl90aGlzJF9tYXAkaXNTdHlsZUxvYSIsIl90aGlzJF9tYXAiLCJfdGhpcyRfbWFwJGdldFN0eWxlIiwiX3RoaXMkX21hcDIiLCJyYXdTdHlsZSIsImlzU3R5bGVMb2FkZWQiLCJjYWxsIiwiZ2V0U3R5bGUiLCJzdHlsZXNoZWV0IiwiX3VudXNlZCIsInVzZXNNYXBib3giLCJ1c2VzT3NtIiwicHVzaCIsImN1cnJlbnRTdHlsZSIsIm1hcFN0eWxlcyIsImlzVXNlckN1c3RvbVN0eWxlIiwiY3VzdG9tIiwic2V0U3RhdGUiLCJfY29sbGVjdEJhc2VtYXBBdHRyaWJ1dGlvbnMiLCJfYmFzZW1hcFNvdXJjZURhdGFMaXN0ZW5lciIsIm9mZiIsIl9iYXNlbWFwSWRsZUxpc3RlbmVyIiwiYXR0ZW1wdHMiLCJNQVhfQVRURU1QVFMiLCJ0cnlDb2xsZWN0Iiwib25Tb3VyY2VEYXRhIiwiZSIsImlzU291cmNlTG9hZGVkIiwic291cmNlRGF0YVR5cGUiLCJvbklkbGUiLCJvbiIsIm1hcFJlZiIsImdldE1hcCIsIl9vbk1hcGJveFN0eWxlVXBkYXRlIiwiX29uTWFwUmVuZGVyIiwiZ2V0TWFwYm94UmVmIiwiZXJyb3IiLCJlcnJvck1lc3NhZ2UiLCJtZXNzYWdlIiwibGF5ZXJNZXNzYWdlIiwiZXJyb3JNZXNzYWdlRnVsbCIsImxhc3RTaG93biIsIl9kZWNrR0xFcnJvcnNFbGFwc2VkIiwiRGF0ZSIsIm5vdyIsImV4dHJhTGF5ZXJNZXNzYWdlIiwiX3RvcE1vc3RMYXllciRwcm9wcyIsInRvcE1vc3RMYXllciIsInBhcmVudCIsImxheWVyU2V0SXNWYWxpZCIsInVpU3RhdGVBY3Rpb25zIiwiYWRkTm90aWZpY2F0aW9uIiwiX3RoaXMkY29udGV4dCIsInZpZXdTdGF0ZSIsImNvbnRleHQiLCJnZXRJbnRlcm5hbFZpZXdTdGF0ZSIsIm9uVmlld1N0YXRlQ2hhbmdlIiwidmlld3BvcnQiLCJfdGhpcyRwcm9wcyRtYXBTdGF0ZSIsImludGVyYWN0aW9uU3RhdGUiLCJpc0V4cG9ydCIsInNldEludGVybmFsVmlld1N0YXRlIiwiX3dhc0ludGVyYWN0aW5nIiwiX29uVmlld3BvcnRDaGFuZ2VQcm9wYWdhdGVEZWJvdW5jZWQiLCJpc1VzZXJJbnRlcmFjdGlvbiIsImlzWm9vbWluZyIsImlzUGFubmluZyIsImlzUm90YXRpbmciLCJpc0RyYWdnaW5nIiwiaW5UcmFuc2l0aW9uIiwiaXNJbnRlcmFjdGlvblNldHRsZSIsInNldFRpbWVvdXQiLCJvbk1vdXNlTW92ZSIsInNldExvYWRpbmdJbmRpY2F0b3IiLCJjaGFuZ2UiLCJpc1Zpc2libGUiLCJwYW5lbElkIiwiX3RoaXMkcHJvcHM0IiwidG9nZ2xlTWFwQ29udHJvbCIsIk51bWJlciIsIl9pbmhlcml0cyIsIl9jcmVhdGVDbGFzcyIsImtleSIsImNvbXBvbmVudERpZE1vdW50IiwiY3VycmVudCIsIl9oYW5kbGVSZXNpemUiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsImNvbXBvbmVudERpZFVwZGF0ZSIsInByZXZQcm9wcyIsIl9vbkRlY2tJbml0aWFsaXplZCIsImRldmljZSIsIm9uRGVja0luaXRpYWxpemVkIiwiX2RlY2siLCJfaXNPS1RvUmVuZGVyRWZmZWN0cyIsInZpZXdJbmRleCIsIl90aGlzJF9kZWNrIiwidmlld01hbmFnZXIiLCJfdmlld3BvcnRzIiwiX2dldEFubm90YXRpb25WaWV3cG9ydCIsImludGVybmFsVmlld1N0YXRlIiwiX2ludGVybmFsVmlld1N0YXRlJGxvIiwiX2ludGVybmFsVmlld1N0YXRlJGxhIiwiX2ludGVybmFsVmlld1N0YXRlJHpvIiwiX3JlZjMiLCJfaW50ZXJuYWxWaWV3U3RhdGUkcGkiLCJfcmVmNCIsIl9pbnRlcm5hbFZpZXdTdGF0ZSRiZSIsIl90aGlzJF9hbm5vdGF0aW9uVmlldyIsImxvbmdpdHVkZSIsImxhdGl0dWRlIiwiem9vbSIsInBpdGNoIiwiYmVhcmluZyIsIl9hbm5vdGF0aW9uVmlld3BvcnRDYWNoZSIsIm1lcmdlZFN0YXRlIiwidnAiLCJwcm9qZWN0IiwibG5nTGF0IiwidW5wcm9qZWN0IiwieHkiLCJfcmVuZGVyTWFwUG9wb3ZlciIsIl90aGlzJHByb3BzJHZpc1N0YXRlJCIsImhvdmVySW5mbyIsIl90aGlzJHByb3BzNSIsIl90aGlzJHByb3BzNSR2aXNTdGF0ZSIsImNsaWNrZWQiLCJkYXRhc2V0cyIsImludGVyYWN0aW9uQ29uZmlnIiwiYW5pbWF0aW9uQ29uZmlnIiwiX3RoaXMkcHJvcHM1JHZpc1N0YXRlMiIsIm1vdXNlUG9zIiwibW91c2VQb3NpdGlvbiIsInBpbm5lZCIsInRvb2x0aXAiLCJsYXllckhvdmVyUHJvcCIsImNvbXBhcmVNb2RlIiwicGlubmVkUG9zaXRpb24iLCJ4IiwieSIsImxheWVyUGlubmVkUHJvcCIsIl9nZXRIb3ZlclhZIiwicHJpbWFyeURhdGEiLCJjb21wYXJlVHlwZSIsImNvbW1vblByb3AiLCJvbkNsb3NlIiwiX29uQ2xvc2VNYXBQb3BvdmVyIiwiY2FudmFzIiwidW5kZWZpbmVkIiwiX2V4dGVuZHMiLCJmcm96ZW4iLCJpc0Jhc2UiLCJvblNldEZlYXR1cmVzIiwic2V0RmVhdHVyZXMiLCJzZXRTZWxlY3RlZEZlYXR1cmUiLCJmZWF0dXJlQ29sbGVjdGlvbiIsInNjcmVlbkNvb3JkIiwiX3JlbmRlckRlY2tPdmVybGF5IiwibGF5ZXJzRm9yRGVjayIsIl90aGlzJGNvbnRleHQyIiwiX21hcFN0YXRlJGdsb2JlIiwiX21hcFN0eWxlJG1hcFN0eWxlcyIsIl90aGlzMiIsIl90aGlzJHByb3BzJG1hcFN0YXRlJCIsIm9wdGlvbnMiLCJhcmd1bWVudHMiLCJwcmltYXJ5TWFwIiwiX3RoaXMkcHJvcHM2IiwibWFwYm94QXBpQWNjZXNzVG9rZW4iLCJtYXBib3hBcGlVcmwiLCJkZWNrR2xQcm9wcyIsIm1hcENvbnRyb2xzIiwiZGVja1JlbmRlckNhbGxiYWNrcyIsImdlbmVyYXRlRGVja0dMTGF5ZXJzIiwiaXNJbnRlcmFjdGl2ZSIsImNoaWxkcmVuIiwibWFwRHJhdyIsIl9yZWY1IiwiX3JlZjUkYWN0aXZlIiwiYWN0aXZlIiwiZWRpdG9yTWVudUFjdGl2ZSIsImlzRWRpdG9yRHJhd2luZ01vZGUiLCJpc0RyYXdpbmdBY3RpdmUiLCJtb2RlIiwiaW50ZXJuYWxNYXBTdGF0ZSIsImVkaXRvckZlYXR1cmVTZWxlY3RlZEluZGV4Iiwic2VsZWN0ZWRQb2x5Z29uSW5kZXhTZWxlY3RvciIsImdlbmVyYXRlRGVja0dMTGF5ZXJzTWV0aG9kIiwiZXh0cmFEZWNrUGFyYW1zIiwiZ2V0VG9vbHRpcCIsImlzTmFOIiwiZ2V0Q3Vyc29yIiwiX3JlZjYiLCJlZGl0b3JDdXJzb3IiLCJlZmZlY3RzIiwibGF5ZXJCbGVuZGluZ1BhcmFtcyIsImxheWVyQmxlbmRpbmciLCJkZWNrTGF5ZXJzTWFwU3RhdGUiLCJsYXllclBhcmFtZXRlcnMiLCJkZWNrR2xMYXllcnMiLCJlZGl0b3JJbmZvIiwib25BcHBseVBvbHlnb25GaWx0ZXJBbGwiLCJzZXRQb2x5Z29uRmlsdGVyQWxsTGF5ZXJzIiwic2VsZWN0ZWRGZWF0dXJlSW5kZXhlcyIsInNlbGVjdGVkRmVhdHVyZUluZGV4QXJyYXlTZWxlY3RvciIsIl9vbkxheWVySG92ZXIiLCJvblNldExheWVyRG9tYWluIiwiX29uTGF5ZXJTZXREb21haW4iLCJvbkZpbHRlcmVkSXRlbXNDaGFuZ2UiLCJfb25MYXllckZpbHRlcmVkSXRlbXNDaGFuZ2UiLCJvbldNU0ZlYXR1cmVJbmZvIiwiX29uV01TRmVhdHVyZUluZm8iLCJvblJlZHJhd05lZWRlZCIsIl9vblJlZHJhd05lZWRlZCIsIm9uRml0Qm91bmRzIiwiX29uRml0Qm91bmRzIiwiZ2xvYmVCYXNlbWFwUHJvdmlkZXIiLCJnbG9iZUJhc2VMYXllcnMiLCJtYXBTdHlsZVR5cGUiLCJiYXNlbWFwUHJvdmlkZXIiLCJnbG9iZVRvcExheWVycyIsImZpbmFsRGVja0dsTGF5ZXJzIiwiX3RvQ29uc3VtYWJsZUFycmF5Iiwidmlld3MiLCJyZXNvbHV0aW9uIiwiY2xlYXIiLCJjbGVhckNvbG9yIiwiZmFyWk11bHRpcGxpZXIiLCJhbGxEZWNrR2xQcm9wcyIsInBpY2tpbmdSYWRpdXMiLCJwYXJhbWV0ZXJzIiwiY3VsbCIsIm9uRGVja1JlbmRlciIsIl9vbk1vdXNlTW92ZURlYm91bmNlZCIsIm9uTG9hZCIsIm9uRGVja0xvYWQiLCJjb250cm9sbGVyIiwiZG91YmxlQ2xpY2tab29tIiwiZHJhZ1JvdGF0ZSIsIm1heFBpdGNoIiwibWluWm9vbSIsIm1heFpvb20iLCJvbkJlZm9yZVJlbmRlciIsIl9vbkJlZm9yZVJlbmRlciIsIl9vblZpZXdwb3J0Q2hhbmdlIiwib25Ib3ZlciIsInJlcyIsIl9vbkxheWVySG92ZXJEZWJvdW5jZWQiLCJvbkNsaWNrIiwic3JjRXZlbnQiLCJhbGlnbmluZ0xheWVyIiwiZmluZCIsImwiLCJhbGlnbldhaXRpbmdGb3JNYXAiLCJvbkFsaWduTWFwQ2xpY2siLCJvbkVycm9yIiwiX29uRGVja0Vycm9yIiwiY29tcCIsImRlY2siLCJvbkRldmljZUluaXRpYWxpemVkIiwib25BZnRlclJlbmRlciIsIm9uRGVja0FmdGVyUmVuZGVyIiwiYW55QWN0aXZlTGF5ZXJMb2FkaW5nIiwiX29uTGF5ZXJMb2FkaW5nU3RhdGVDaGFuZ2UiLCJtYXBib3hMYXllcnMiLCJtYXBib3hMYXllcnNTZWxlY3RvciIsIl9yZW5kZXJNYXBib3hPdmVybGF5cyIsIl9yZW5kZXJNYXAiLCJfbWFwU3R5bGUkbWFwU3R5bGVzMiIsIl90aGlzJHByb3BzJE1hcENvbXBvbiIsIl90aGlzJGNvbnRleHQzIiwiX21hcFN0YXRlJG1heFBpdGNoIiwiX3RoaXMkcHJvcHMkaXNFeHBvcnQiLCJfbWFwU3RhdGUkZ2xvYmUyIiwiX21hcFN0eWxlJGJvdHRvbU1hcFN0IiwiX21hcENvbnRyb2xzJGFubm90YXRpIiwiX21hcFN0YXRlJGdsb2JlMyIsIl9tYXBTdGF0ZSRnbG9iZTQiLCJfdGhlbWUkc2lkZVBhbmVsJG1hcmciLCJfdGhlbWUkc2lkZVBhbmVsIiwiX3RoZW1lJHNpZGVQYW5lbCRtYXJnMiIsIl90aGVtZSRzaWRlUGFuZWwyIiwiX3RoaXMkcHJvcHM3IiwibG9jYWxlIiwiYm90dG9tTWFwQ29udGFpbmVyUHJvcHMiLCJ0b3BNYXBDb250YWluZXJQcm9wcyIsIl90aGlzJHByb3BzNyRkYXRhc2V0QSIsImRhdGFzZXRBdHRyaWJ1dGlvbnMiLCJfdGhpcyRwcm9wczckYXR0cmlidXQiLCJhdHRyaWJ1dGlvbkxvZ29zIiwiX3RoaXMkcHJvcHM3JGNvbnRhaW5lIiwiaXNMb2FkaW5nSW5kaWNhdG9yVmlzaWJsZSIsImFjdGl2ZVNpZGVQYW5lbCIsInNpZGVQYW5lbFdpZHRoIiwibGF5ZXJzRm9yRGVja1NlbGVjdG9yIiwiYmFzZU1hcExpYnJhcnlOYW1lIiwiYmFzZU1hcExpYnJhcnlDb25maWciLCJSZXNvbHZlZE1hcENvbXBvbmVudCIsIk1hcENvbXBvbmVudCIsIk1BUEJPWCIsInVzZU1hcGJveEFkYXB0ZXIiLCJjb25maWdNYXhQaXRjaCIsImVmZmVjdGl2ZU1heFBpdGNoIiwiTWF0aCIsIm1pbiIsIm1hcFByb3BzIiwicHJlc2VydmVEcmF3aW5nQnVmZmVyIiwibWFwYm94QWNjZXNzVG9rZW4iLCJhY2Nlc3NUb2tlbiIsIlJUTFRleHRQbHVnaW4iLCJtYXBib3hDb25maWciLCJtYXBMaWIiLCJnZXRNYXBMaWIiLCJoYXNHZW9jb2RlckxheWVyIiwiaXNTcGxpdCIsImJvdHRvbU1hcFN0eWxlIiwiX3NldE1hcFJlZiIsInNob3dNYXBDb250cm9sIiwiRnJhZ21lbnQiLCJhdmFpbGFibGVMb2NhbGVzIiwicmVhZE9ubHkiLCJzY2FsZSIsImxvZ29Db21wb25lbnQiLCJnZW9jb2RlciIsIm1hcENvbnRyb2xUb3AiLCJvblRvZ2dsZVBlcnNwZWN0aXZlIiwidG9nZ2xlUGVyc3BlY3RpdmUiLCJvblNldE1hcFZpZXdNb2RlIiwic2V0TWFwVmlld01vZGUiLCJtYXBWaWV3TW9kZSIsIm9uVG9nZ2xlU3BsaXRNYXAiLCJ0b2dnbGVTcGxpdE1hcCIsIm9uTWFwVG9nZ2xlTGF5ZXIiLCJfaGFuZGxlTWFwVG9nZ2xlTGF5ZXIiLCJvblRvZ2dsZU1hcENvbnRyb2wiLCJfdG9nZ2xlTWFwQ29udHJvbCIsIm9uVG9nZ2xlU3BsaXRNYXBWaWV3cG9ydCIsInRvZ2dsZVNwbGl0TWFwVmlld3BvcnQiLCJvblNldEVkaXRvck1vZGUiLCJzZXRFZGl0b3JNb2RlIiwib25TZXRMb2NhbGUiLCJzZXRMb2NhbGUiLCJvblRvZ2dsZUVkaXRvclZpc2liaWxpdHkiLCJ0b2dnbGVFZGl0b3JWaXNpYmlsaXR5Iiwib25MYXllclZpc0NvbmZpZ0NoYW5nZSIsImxheWVyVmlzQ29uZmlnQ2hhbmdlIiwib25Ub2dnbGVMYXllclZpc2liaWxpdHkiLCJfaGFuZGxlVG9nZ2xlTGF5ZXJWaXNpYmlsaXR5IiwibWFwSGVpZ2h0Iiwic2V0TWFwQ29udHJvbFNldHRpbmdzIiwib25Ub2dnbGVMYXllckZvck1hcCIsIm9uRGVsZXRlRmVhdHVyZSIsImRlbGV0ZUZlYXR1cmUiLCJvblNlbGVjdCIsIm9uVG9nZ2xlUG9seWdvbkZpbHRlciIsInNldFBvbHlnb25GaWx0ZXJMYXllciIsInZpc2libGUiLCJhbm5vdGF0aW9ucyIsInNlbGVjdGVkQW5ub3RhdGlvbklkIiwiaXNFZGl0aW5nQW5ub3RhdGlvblRleHQiLCJpc0Fubm90YXRpb25Nb2RlIiwiYW5ub3RhdGlvbiIsImlzR2xvYmVFbmFibGVkIiwidXBkYXRlQW5ub3RhdGlvbiIsInNldFNlbGVjdGVkQW5ub3RhdGlvbiIsInRvcE1hcFN0eWxlIiwiaGFzQXR0cmlidXRpb25Mb2dvcyIsImhhc01hcFNjYWxlIiwiZW5hYmxlTWFwU2NhbGUiLCJzdGF0ZSIsImdsb2JlQXR0cmlidXRpb25zIiwibG9nb3MiLCJyZW5kZXIiLCJfbWFwU3R5bGUkbWFwU3R5bGVzMyIsIl90aGlzJHByb3BzOCIsIm1hcENvbnRlbnQiLCJzdHlsZVNlbGVjdG9yIiwib25Db250ZXh0TWVudSIsInByZXZlbnREZWZhdWx0Iiwib3ZlcmxheUJsZW5kaW5nIiwibWFwTGliQ3NzQ2xhc3MiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbWFwLWNvbnRhaW5lci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuLy8gbGlicmFyaWVzXG5pbXBvcnQgUmVhY3QsIHtDb21wb25lbnQsIGNyZWF0ZVJlZn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHN0eWxlZCwge3dpdGhUaGVtZX0gZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtNYXAgYXMgTWFwYm94TGVnYWN5TWFwLCBNYXBSZWZ9IGZyb20gJ3JlYWN0LW1hcC1nbC9tYXBib3gtbGVnYWN5JztcbmltcG9ydCB7TWFwIGFzIE1hcGxpYnJlTWFwfSBmcm9tICdAdmlzLmdsL3JlYWN0LW1hcGxpYnJlJztcbmltcG9ydCB7UGlja2luZ0luZm8sIE1hcFZpZXd9IGZyb20gJ0BkZWNrLmdsL2NvcmUnO1xuaW1wb3J0IERlY2tHTCBmcm9tICdAZGVjay5nbC9yZWFjdCc7XG5pbXBvcnQge2NyZWF0ZVNlbGVjdG9yLCBTZWxlY3Rvcn0gZnJvbSAncmVzZWxlY3QnO1xuaW1wb3J0IHt1c2VEcm9wcGFibGV9IGZyb20gJ0BkbmQta2l0L2NvcmUnO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gJ2xvZGFzaC9kZWJvdW5jZSc7XG5cbmltcG9ydCB7VmlzU3RhdGVBY3Rpb25zLCBNYXBTdGF0ZUFjdGlvbnMsIFVJU3RhdGVBY3Rpb25zfSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuXG4vLyBjb21wb25lbnRzXG5pbXBvcnQgTWFwUG9wb3ZlckZhY3RvcnkgZnJvbSAnLi9tYXAvbWFwLXBvcG92ZXInO1xuaW1wb3J0IE1hcENvbnRyb2xGYWN0b3J5IGZyb20gJy4vbWFwL21hcC1jb250cm9sJztcbmltcG9ydCBNYXBTY2FsZUZhY3RvcnkgZnJvbSAnLi9tYXAvbWFwLXNjYWxlJztcbmltcG9ydCB7U3R5bGVkTWFwQ29udGFpbmVyfSBmcm9tICcuL2NvbW1vbi9zdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBBdHRyaWJ1dGlvbixcbiAgQXR0cmlidXRpb25Mb2dvcyxcbiAgcmVuZGVyQmFzZW1hcEF0dHJpYnV0aW9uLFxuICBkZWR1cGVCYXNlbWFwQXR0cmlidXRpb25zXG59IGZyb20gJy4vbWFwL2F0dHJpYnV0aW9uJztcblxuaW1wb3J0IEVkaXRvckZhY3RvcnkgZnJvbSAnLi9lZGl0b3IvZWRpdG9yJztcbmltcG9ydCB7QW5ub3RhdGlvbk92ZXJsYXl9IGZyb20gJy4vYW5ub3RhdGlvbnMnO1xuXG4vLyB1dGlsc1xuaW1wb3J0IHtcbiAgZ2VuZXJhdGVNYXBib3hMYXllcnMsXG4gIHVwZGF0ZU1hcGJveExheWVycyxcbiAgTGF5ZXIsXG4gIExheWVyQmFzZUNvbmZpZyxcbiAgVmlzdWFsQ2hhbm5lbERvbWFpbixcbiAgRWRpdG9yTGF5ZXJVdGlscyxcbiAgQWdncmVnYXRlZEJpblxufSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge1xuICBBdHRyaWJ1dGlvbldpdGhTdHlsZSxcbiAgRGF0YXNldEF0dHJpYnV0aW9uLFxuICBNYXBTdGF0ZSxcbiAgTWFwQ29udHJvbHMsXG4gIFZpZXdwb3J0LFxuICBTcGxpdE1hcCxcbiAgU3BsaXRNYXBMYXllcnNcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge1xuICBlcnJvck5vdGlmaWNhdGlvbixcbiAgaXNTdHlsZVVzaW5nTWFwYm94VGlsZXMsXG4gIGlzU3R5bGVVc2luZ09wZW5TdHJlZXRNYXBUaWxlcyxcbiAgZ2V0QmFzZU1hcEF0dHJpYnV0aW9ucyxcbiAgZ2V0QmFzZU1hcExpYnJhcnksXG4gIHRyYW5zZm9ybVJlcXVlc3QsXG4gIG9ic2VydmVEaW1lbnNpb25zLFxuICB1bm9ic2VydmVEaW1lbnNpb25zLFxuICBnZXRNYXBMYXllcnNGcm9tU3BsaXRNYXBzLFxuICBvblZpZXdQb3J0Q2hhbmdlLFxuICBnZXRWaWV3cG9ydEZyb21NYXBTdGF0ZSxcbiAgbm9ybWFsaXplRXZlbnQsXG4gIHJnYlRvSGV4LFxuICBjb21wdXRlRGVja0VmZmVjdHMsXG4gIGdldEFwcGxpY2F0aW9uQ29uZmlnLFxuICBHZXRNYXBSZWYsXG4gIGdldExheWVyQmxlbmRpbmdQYXJhbWV0ZXJzLFxuICBwYXRjaERlY2tSZW5kZXJlckZvclBvc3RQcm9jZXNzaW5nXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuXG4vLyBkZWZhdWx0LXNldHRpbmdzXG5pbXBvcnQge1xuICBGSUxURVJfVFlQRVMsXG4gIEdFT0NPREVSX0xBWUVSX0lELFxuICBUSFJPVFRMRV9OT1RJRklDQVRJT05fVElNRSxcbiAgREVGQVVMVF9QSUNLSU5HX1JBRElVUyxcbiAgTk9fTUFQX0lELFxuICBFTVBUWV9NQVBCT1hfU1RZTEUsXG4gIE1BUEJPWF9NQVhfUElUQ0gsXG4gIE1BUF9MSUJfT1BUSU9OUyxcbiAgR0xPQkVfTUlOX1pPT00sXG4gIEdMT0JFX01BWF9aT09NXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcblxuaW1wb3J0IHtcbiAgZ2V0R2xvYmVCYXNlTGF5ZXJzLFxuICBnZXRHbG9iZVRvcExheWVycyxcbiAgZ2V0R2xvYmVDbGVhckNvbG9yLFxuICBnZXRHbG9iZUJhc2VtYXBBdHRyaWJ1dGlvbnMsXG4gIHJlc29sdmVHbG9iZUJhc2VtYXBQcm92aWRlcixcbiAgZ2V0U3RhcnNCYWNrZ3JvdW5kSW1hZ2UsXG4gIEtlcGxlckdsb2JlVmlld1xufSBmcm9tICdAa2VwbGVyLmdsL2RlY2tnbC1sYXllcnMnO1xuXG5pbXBvcnQge0RST1BQQUJMRV9NQVBfQ09OVEFJTkVSX1RZUEV9IGZyb20gJy4vY29tbW9uL2RuZC1sYXllci1pdGVtcyc7XG4vLyBDb250ZXh0c1xuaW1wb3J0IHtNYXBWaWV3U3RhdGVDb250ZXh0fSBmcm9tICcuL21hcC12aWV3LXN0YXRlLWNvbnRleHQnO1xuXG5pbXBvcnQgRXJyb3JCb3VuZGFyeSBmcm9tICcuL2NvbW1vbi9lcnJvci1ib3VuZGFyeSc7XG5pbXBvcnQge0xPQ0FMRV9DT0RFU30gZnJvbSAnQGtlcGxlci5nbC9sb2NhbGl6YXRpb24nO1xuaW1wb3J0IHtcbiAgTWFwU3R5bGUsXG4gIGFyZUFueURlY2tMYXllcnNMb2FkaW5nLFxuICBjb21wdXRlRGVja0xheWVycyxcbiAgZ2V0TGF5ZXJIb3ZlclByb3AsXG4gIExheWVySG92ZXJQcm9wLFxuICBwcmVwYXJlTGF5ZXJzRm9yRGVjayxcbiAgcHJlcGFyZUxheWVyc1RvUmVuZGVyLFxuICBMYXllcnNUb1JlbmRlclxufSBmcm9tICdAa2VwbGVyLmdsL3JlZHVjZXJzJztcbmltcG9ydCB7VmlzU3RhdGV9IGZyb20gJ0BrZXBsZXIuZ2wvc2NoZW1hcyc7XG5cbmltcG9ydCBMb2FkaW5nSW5kaWNhdG9yIGZyb20gJy4vbG9hZGluZy1pbmRpY2F0b3InO1xuXG4vLyBEZWJvdW5jZSB0aGUgcHJvcGFnYXRpb24gb2Ygdmlld3BvcnQgY2hhbmdlIGFuZCBtb3VzZSBtb3ZlcyB0byByZWR1eCBzdG9yZS5cbi8vIFRoaXMgaXMgdG8gYXZvaWQgdG9vIG1hbnkgcmVuZGVycyBvZiBvdGhlciBjb21wb25lbnRzIHdoZW4gdGhlIG1hcCBpc1xuLy8gYmVpbmcgcGFubmVkL3pvb21lZCAobGVhZGluZyB0byBsYWdneSBiYXNlbWFwL2RlY2sgc3luY2luZykuXG5jb25zdCBERUJPVU5DRV9WSUVXUE9SVF9QUk9QQUdBVEUgPSAxMDtcbmNvbnN0IERFQk9VTkNFX01PVVNFX01PVkVfUFJPUEFHQVRFID0gMTA7XG5cbi8vIEhvdyBsb25nIHNob3VsZCB3ZSB3YWl0IGJldHdlZW4gbGF5ZXIgbG9hZGluZyBzdGF0ZSBjaGFuZ2VzIGJlZm9yZSB0cmlnZ2VyaW5nIGEgVUkgdXBkYXRlXG5jb25zdCBERUJPVU5DRV9MT0FESU5HX1NUQVRFX1BST1BBR0FURSA9IDEwMDtcblxuY29uc3QgTUFQX1NUWUxFOiB7W2tleTogc3RyaW5nXTogUmVhY3QuQ1NTUHJvcGVydGllc30gPSB7XG4gIGNvbnRhaW5lcjoge1xuICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgaGVpZ2h0OiAnMTAwJSdcbiAgfSxcbiAgdG9wOiB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgdG9wOiAwLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgcG9pbnRlckV2ZW50czogJ25vbmUnXG4gIH1cbn07XG5cbmNvbnN0IExPQ0FMRV9DT0RFU19BUlJBWSA9IE9iamVjdC5rZXlzKExPQ0FMRV9DT0RFUyk7XG5cbmludGVyZmFjZSBTdHlsZWRNYXBDb250YWluZXJQcm9wcyB7XG4gICRtaXhCbGVuZE1vZGU/OiBzdHJpbmc7XG4gICRtYXBMaWJDc3NDbGFzczogc3RyaW5nO1xufVxuXG5jb25zdCBTdHlsZWRNYXAgPSBzdHlsZWQoU3R5bGVkTWFwQ29udGFpbmVyKTxTdHlsZWRNYXBDb250YWluZXJQcm9wcz4oXG4gICh7JG1peEJsZW5kTW9kZSA9ICdub3JtYWwnLCAkbWFwTGliQ3NzQ2xhc3N9KSA9PiBgXG4gICNkZWZhdWx0LWRlY2tnbC1vdmVybGF5IHtcbiAgICBtaXgtYmxlbmQtbW9kZTogJHskbWl4QmxlbmRNb2RlfTtcbiAgfTtcbiAgKlskeyRtYXBMaWJDc3NDbGFzc30tY2hpbGRyZW5dIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIH1cbmBcbik7XG5cbmNvbnN0IE1BUEJPWEdMX1NUWUxFX1VQREFURSA9ICdzdHlsZS5sb2FkJztcbmNvbnN0IE1BUEJPWEdMX1JFTkRFUiA9ICdyZW5kZXInO1xuXG4vLyBDYW5vbmljYWwgT3BlblN0cmVldE1hcCBhdHRyaWJ1dGlvbiwgaW5qZWN0ZWQgaW50byB0aGUgY29sbGVjdGVkIGxpc3Qgd2hlbiBhXG4vLyBzdHlsZSBpcyBkZXRlY3RlZCB0byB1c2UgT1NNIHRpbGVzIGJ1dCB0aGUgcmVzb2x2ZWQgc291cmNlcyBoYXZlbid0IHlpZWxkZWRcbi8vIGFuIGF0dHJpYnV0aW9uIHN0cmluZyBvZiB0aGVpciBvd24gKGUuZy4gcmF3IHN0eWxlIGRlY2xhcmVzIE9TTSBidXQgdGhlXG4vLyBUaWxlSlNPTiBoYXNuJ3QgZXhwb3NlZCBpdCkuIFJlbmRlcmVkIHRocm91Z2ggdGhlIHNhbWUgc2FmZSBsaW5rIHBhcnNlciBhc1xuLy8gZXZlcnkgb3RoZXIgY29sbGVjdGVkIGF0dHJpYnV0aW9uLlxuY29uc3QgT1NNX0FUVFJJQlVUSU9OX0hUTUwgPVxuICAnwqkgPGEgaHJlZj1cImh0dHBzOi8vd3d3Lm9wZW5zdHJlZXRtYXAub3JnL2NvcHlyaWdodFwiPk9wZW5TdHJlZXRNYXA8L2E+JztcblxuaW50ZXJmYWNlIFN0eWxlZERyb3BwYWJsZVByb3BzIHtcbiAgJGlzT3ZlcjogYm9vbGVhbjtcbn1cblxuY29uc3QgU3R5bGVkRHJvcHBhYmxlID0gc3R5bGVkLmRpdjxTdHlsZWREcm9wcGFibGVQcm9wcz5gXG4gIGJhY2tncm91bmQtY29sb3I6ICR7cHJvcHMgPT4gKHByb3BzLiRpc092ZXIgPyBwcm9wcy50aGVtZS5kbmRPdmVyQmFja2dyb3VuZENvbG9yIDogJ25vbmUnKX07XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG5gO1xuXG5jb25zdCBTdHlsZWRNYXBTY2FsZUNvbnRhaW5lciA9IHN0eWxlZC5kaXY8eyRsZWZ0OiBudW1iZXI7ICRib3R0b21PZmZzZXQ6IG51bWJlcn0+YFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zaWRlUGFuZWwubWFyZ2luLmxlZnQgKyBwcm9wcy4kYm90dG9tT2Zmc2V0fXB4O1xuICBsZWZ0OiAke3Byb3BzID0+IHByb3BzLiRsZWZ0fXB4O1xuICB6LWluZGV4OiAxO1xuICBwb2ludGVyLWV2ZW50czogYXV0bztcbmA7XG5cbmV4cG9ydCBjb25zdCBpc1NwbGl0U2VsZWN0b3IgPSBwcm9wcyA9PlxuICBwcm9wcy52aXNTdGF0ZS5zcGxpdE1hcHMgJiYgcHJvcHMudmlzU3RhdGUuc3BsaXRNYXBzLmxlbmd0aCA+IDE7XG5cbmV4cG9ydCBjb25zdCBEcm9wcGFibGUgPSAoe2NvbnRhaW5lcklkfSkgPT4ge1xuICBjb25zdCB7aXNPdmVyLCBzZXROb2RlUmVmfSA9IHVzZURyb3BwYWJsZSh7XG4gICAgaWQ6IGNvbnRhaW5lcklkLFxuICAgIGRhdGE6IHt0eXBlOiBEUk9QUEFCTEVfTUFQX0NPTlRBSU5FUl9UWVBFLCBpbmRleDogY29udGFpbmVySWR9LFxuICAgIGRpc2FibGVkOiAhY29udGFpbmVySWRcbiAgfSk7XG5cbiAgcmV0dXJuIDxTdHlsZWREcm9wcGFibGUgcmVmPXtzZXROb2RlUmVmfSAkaXNPdmVyPXtpc092ZXJ9IC8+O1xufTtcblxuLy8gQXR0cmlidXRpb24gVUkgKHBhcnNlciArIGNvbXBvbmVudHMpIGxpdmVzIGluIC4vbWFwL2F0dHJpYnV0aW9uIGFuZCBpc1xuLy8gcmUtZXhwb3J0ZWQgaGVyZSB0byBwcmVzZXJ2ZSB0aGUgcHVibGljIGltcG9ydCBwYXRoIChAa2VwbGVyLmdsL2NvbXBvbmVudHMpLlxuZXhwb3J0IHtBdHRyaWJ1dGlvbiwgQXR0cmlidXRpb25Mb2dvcywgcmVuZGVyQmFzZW1hcEF0dHJpYnV0aW9uLCBkZWR1cGVCYXNlbWFwQXR0cmlidXRpb25zfTtcblxuTWFwQ29udGFpbmVyRmFjdG9yeS5kZXBzID0gW01hcFBvcG92ZXJGYWN0b3J5LCBNYXBDb250cm9sRmFjdG9yeSwgRWRpdG9yRmFjdG9yeSwgTWFwU2NhbGVGYWN0b3J5XTtcblxudHlwZSBNYXBib3hTdHlsZSA9IHN0cmluZyB8IG9iamVjdCB8IHVuZGVmaW5lZDtcbnR5cGUgUHJvcFNlbGVjdG9yPFI+ID0gU2VsZWN0b3I8TWFwQ29udGFpbmVyUHJvcHMsIFI+O1xuXG5leHBvcnQgaW50ZXJmYWNlIE1hcENvbnRhaW5lclByb3BzIHtcbiAgdmlzU3RhdGU6IFZpc1N0YXRlO1xuICBtYXBTdGF0ZTogTWFwU3RhdGU7XG4gIG1hcENvbnRyb2xzOiBNYXBDb250cm9scztcbiAgbWFwU3R5bGU6IHtib3R0b21NYXBTdHlsZT86IE1hcGJveFN0eWxlOyB0b3BNYXBTdHlsZT86IE1hcGJveFN0eWxlfSAmIE1hcFN0eWxlO1xuICBtYXBib3hBcGlBY2Nlc3NUb2tlbjogc3RyaW5nO1xuICBtYXBib3hBcGlVcmw6IHN0cmluZztcbiAgdmlzU3RhdGVBY3Rpb25zOiB0eXBlb2YgVmlzU3RhdGVBY3Rpb25zO1xuICBtYXBTdGF0ZUFjdGlvbnM6IHR5cGVvZiBNYXBTdGF0ZUFjdGlvbnM7XG4gIHVpU3RhdGVBY3Rpb25zOiB0eXBlb2YgVUlTdGF0ZUFjdGlvbnM7XG5cbiAgLy8gb3B0aW9uYWxcbiAgcHJpbWFyeT86IGJvb2xlYW47IC8vIHByaW1hcnkgb25lIHdpbGwgYmUgcmVwb3J0aW5nIGl0cyBzaXplIHRvIGFwcFN0YXRlXG4gIHJlYWRPbmx5PzogYm9vbGVhbjtcbiAgaXNFeHBvcnQ/OiBib29sZWFuO1xuICAvLyBvbk1hcFN0eWxlTG9hZGVkPzogKG1hcDogbWFwbGlicmVnbC5NYXAgfCBSZXR1cm5UeXBlPE1hcFJlZlsnZ2V0TWFwJ10+IHwgbnVsbCkgPT4gdm9pZDtcbiAgb25NYXBTdHlsZUxvYWRlZD86IChtYXA6IEdldE1hcFJlZiB8IG51bGwpID0+IHZvaWQ7XG4gIG9uTWFwUmVuZGVyPzogKG1hcDogR2V0TWFwUmVmIHwgbnVsbCkgPT4gdm9pZDtcbiAgZ2V0TWFwYm94UmVmPzogKG1hcGJveD86IE1hcFJlZiB8IG51bGwsIGluZGV4PzogbnVtYmVyKSA9PiB2b2lkO1xuICBpbmRleD86IG51bWJlcjtcbiAgZGVsZXRlTWFwTGFiZWxzPzogKGNvbnRhaW5lcklkOiBzdHJpbmcsIGxheWVySWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgY29udGFpbmVySWQ/OiBudW1iZXI7XG5cbiAgaXNMb2FkaW5nSW5kaWNhdG9yVmlzaWJsZT86IGJvb2xlYW47XG4gIGFjdGl2ZVNpZGVQYW5lbDogc3RyaW5nIHwgbnVsbDtcbiAgc2lkZVBhbmVsV2lkdGg/OiBudW1iZXI7XG5cbiAgbG9jYWxlPzogYW55O1xuICB0aGVtZT86IGFueTtcbiAgZWRpdG9yPzogYW55O1xuICBNYXBDb21wb25lbnQ/OiB0eXBlb2YgTWFwYm94TGVnYWN5TWFwIHwgdHlwZW9mIE1hcGxpYnJlTWFwO1xuICBkZWNrR2xQcm9wcz86IGFueTtcbiAgb25EZWNrSW5pdGlhbGl6ZWQ/OiAoYTogYW55LCBiOiBhbnkpID0+IHZvaWQ7XG4gIG9uVmlld1N0YXRlQ2hhbmdlPzogKHZpZXdwb3J0OiBWaWV3cG9ydCkgPT4gdm9pZDtcblxuICB0b3BNYXBDb250YWluZXJQcm9wczogYW55O1xuICBib3R0b21NYXBDb250YWluZXJQcm9wczogYW55O1xuICB0cmFuc2Zvcm1SZXF1ZXN0PzogKHVybDogc3RyaW5nLCByZXNvdXJjZVR5cGU/OiBzdHJpbmcpID0+IHt1cmw6IHN0cmluZ307XG5cbiAgLyoqIFBhc3MgYGZhbHNlYCB0byBkaXNhYmxlIHRoZSByZW1vdGUgUlRMIHRleHQgcGx1Z2luLCBvciBhIFVSTCBzdHJpbmcgdG8gc2VsZi1ob3N0IGl0LiAqL1xuICBSVExUZXh0UGx1Z2luPzogc3RyaW5nIHwgZmFsc2U7XG5cbiAgZGF0YXNldEF0dHJpYnV0aW9ucz86IERhdGFzZXRBdHRyaWJ1dGlvbltdO1xuICBhdHRyaWJ1dGlvbkxvZ29zPzogQXR0cmlidXRpb25XaXRoU3R5bGVbXTtcblxuICBnZW5lcmF0ZU1hcGJveExheWVycz86IHR5cGVvZiBnZW5lcmF0ZU1hcGJveExheWVycztcbiAgZ2VuZXJhdGVEZWNrR0xMYXllcnM/OiB0eXBlb2YgY29tcHV0ZURlY2tMYXllcnM7XG5cbiAgb25Nb3VzZU1vdmU/OiAoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQgJiB7bG5nTGF0PzogW251bWJlciwgbnVtYmVyXX0pID0+IHZvaWQ7XG5cbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIGRlY2tSZW5kZXJDYWxsYmFja3M/OiB7XG4gICAgb25EZWNrTG9hZD86ICgpID0+IHZvaWQ7XG4gICAgb25EZWNrUmVuZGVyPzogKGRlY2tQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbDtcbiAgICBvbkRlY2tBZnRlclJlbmRlcj86IChkZWNrUHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiBhbnk7XG4gIH07XG5cbiAgLy8gT3B0aW9uYWw6IG92ZXJyaWRlIGxlZ2VuZCBoZWFkZXIgbG9nbyBpbiBtYXAgY29udHJvbHMgKHVzZWQgYnkgaW1hZ2UgZXhwb3J0KVxuICBsb2dvQ29tcG9uZW50PzogUmVhY3QuRkMgfCBSZWFjdC5SZWFjdE5vZGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1hcENvbnRhaW5lckZhY3RvcnkoXG4gIE1hcFBvcG92ZXI6IFJldHVyblR5cGU8dHlwZW9mIE1hcFBvcG92ZXJGYWN0b3J5PixcbiAgTWFwQ29udHJvbDogUmV0dXJuVHlwZTx0eXBlb2YgTWFwQ29udHJvbEZhY3Rvcnk+LFxuICBFZGl0b3I6IFJldHVyblR5cGU8dHlwZW9mIEVkaXRvckZhY3Rvcnk+LFxuICBNYXBTY2FsZTogUmV0dXJuVHlwZTx0eXBlb2YgTWFwU2NhbGVGYWN0b3J5PlxuKTogUmVhY3QuQ29tcG9uZW50VHlwZTxNYXBDb250YWluZXJQcm9wcz4ge1xuICBjbGFzcyBNYXBDb250YWluZXIgZXh0ZW5kcyBDb21wb25lbnQ8TWFwQ29udGFpbmVyUHJvcHM+IHtcbiAgICBkaXNwbGF5TmFtZSA9ICdNYXBDb250YWluZXInO1xuXG4gICAgcHJpdmF0ZSBhbnlBY3RpdmVMYXllckxvYWRpbmcgPSBmYWxzZTtcblxuICAgIHN0YXRpYyBjb250ZXh0VHlwZSA9IE1hcFZpZXdTdGF0ZUNvbnRleHQ7XG5cbiAgICBkZWNsYXJlIGNvbnRleHQ6IFJlYWN0LkNvbnRleHRUeXBlPHR5cGVvZiBNYXBWaWV3U3RhdGVDb250ZXh0PjtcblxuICAgIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgICBkZWNrR2xQcm9wczoge30sXG4gICAgICBpbmRleDogMCxcbiAgICAgIHByaW1hcnk6IHRydWVcbiAgICB9O1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgIHBhdGNoRGVja1JlbmRlcmVyRm9yUG9zdFByb2Nlc3NpbmcoKTtcbiAgICB9XG5cbiAgICBzdGF0ZSA9IHtcbiAgICAgIC8vIHRydWUgZm9yIGJ1aWx0LWluIGtlcGxlci5nbCBzdHlsZXMgKGRhcmstbWF0dGVyLCBwb3NpdHJvbiwg4oCmKSBhbmQgd2hlbiB0aGVcbiAgICAgIC8vIGJhc2VtYXAgdXNlcyBNYXBib3gtaG9zdGVkIHRpbGVzIChtYXBib3g6Ly8gc291cmNlcykuXG4gICAgICAvLyBGb3IgdXNlci1hZGRlZCBjdXN0b20gc3R5bGVzIChPcGVuRnJlZU1hcCwgQ0FSVE8gc2VsZi1ob3N0ZWQsIOKApikgTWFwTGlicmUgaXNcbiAgICAgIC8vIG1lcmVseSB0aGUgcmVuZGVyaW5nIGVuZ2luZSwgbm90IHRoZSB0aWxlIHByb3ZpZGVyLCBzbyB0aGUgbG9nbyBpcyBoaWRkZW4gYW5kXG4gICAgICAvLyB0aGUgYmFzZW1hcCdzIG93biBUaWxlSlNPTiBhdHRyaWJ1dGlvbiBpcyBzaG93biBpbnN0ZWFkLlxuICAgICAgc2hvd0Jhc2VNYXBMaWJMb2dvOiBmYWxzZSxcbiAgICAgIC8vIGF0dHJpYnV0aW9uIHN0cmluZ3MgY29sbGVjdGVkIGZyb20gdGhlIHJlc29sdmVkIG1hcCBzb3VyY2VzIChlLmcuIENBUlRPLFxuICAgICAgLy8gT3BlbkZyZWVNYXApLiAgUG9wdWxhdGVkIGFmdGVyIFRpbGVKU09OIHJlc29sdmVzLlxuICAgICAgYmFzZW1hcEF0dHJpYnV0aW9uczogW10gYXMgc3RyaW5nW11cbiAgICB9O1xuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBpZiAoIXRoaXMuX3JlZi5jdXJyZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG9ic2VydmVEaW1lbnNpb25zKHRoaXMuX3JlZi5jdXJyZW50LCB0aGlzLl9oYW5kbGVSZXNpemUpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgaWYgKHRoaXMuX21hcCkge1xuICAgICAgICB0aGlzLl9tYXAub2ZmKE1BUEJPWEdMX1NUWUxFX1VQREFURSwgdGhpcy5fb25NYXBib3hTdHlsZVVwZGF0ZSk7XG4gICAgICAgIHRoaXMuX21hcC5vZmYoTUFQQk9YR0xfUkVOREVSLCB0aGlzLl9vbk1hcFJlbmRlcik7XG4gICAgICAgIHRoaXMuX3JlbW92ZUJhc2VtYXBBdHRyaWJ1dGlvbkxpc3RlbmVycygpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLl9yZWYuY3VycmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB1bm9ic2VydmVEaW1lbnNpb25zKHRoaXMuX3JlZi5jdXJyZW50KTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgICBpZiAocHJldlByb3BzLm1hcFN0eWxlLnN0eWxlVHlwZSAhPT0gdGhpcy5wcm9wcy5tYXBTdHlsZS5zdHlsZVR5cGUpIHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlQmFzZW1hcEF0dHJpYnV0aW9uTGlzdGVuZXJzKCk7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLm1hcFN0eWxlLnN0eWxlVHlwZSA9PT0gTk9fTUFQX0lEKSB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBzaG93QmFzZU1hcExpYkxvZ286IGZhbHNlLFxuICAgICAgICAgICAgYmFzZW1hcEF0dHJpYnV0aW9uczogW11cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl91cGRhdGVBdHRyaWJ1dGlvbigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgX2RlY2s6IGFueSA9IG51bGw7XG4gICAgX21hcDogR2V0TWFwUmVmIHwgbnVsbCA9IG51bGw7XG4gICAgX3JlZiA9IGNyZWF0ZVJlZjxIVE1MRGl2RWxlbWVudD4oKTtcbiAgICBfZGVja0dMRXJyb3JzRWxhcHNlZDoge1tpZDogc3RyaW5nXTogbnVtYmVyfSA9IHt9O1xuICAgIF9iYXNlbWFwU291cmNlRGF0YUxpc3RlbmVyOiAoKGU6IGFueSkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgICBfYmFzZW1hcElkbGVMaXN0ZW5lcjogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG5cbiAgICBfb25NYXBSZW5kZXIgPSAoKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMub25NYXBSZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbk1hcFJlbmRlcih0aGlzLl9tYXApO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBwcmV2aW91c0xheWVycyA9IHtcbiAgICAgIC8vIFtsYXllcnMuaWRdOiBtYXBib3hMYXllckNvbmZpZ1xuICAgIH07XG5cbiAgICBfaGFuZGxlUmVzaXplID0gZGltZW5zaW9ucyA9PiB7XG4gICAgICBjb25zdCB7cHJpbWFyeSwgaW5kZXh9ID0gdGhpcy5wcm9wcztcbiAgICAgIGlmIChwcmltYXJ5KSB7XG4gICAgICAgIGNvbnN0IHttYXBTdGF0ZUFjdGlvbnN9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgaWYgKGRpbWVuc2lvbnMgJiYgZGltZW5zaW9ucy53aWR0aCA+IDAgJiYgZGltZW5zaW9ucy5oZWlnaHQgPiAwKSB7XG4gICAgICAgICAgbWFwU3RhdGVBY3Rpb25zLnVwZGF0ZU1hcChkaW1lbnNpb25zLCBpbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgbGF5ZXJzU2VsZWN0b3I6IFByb3BTZWxlY3RvcjxWaXNTdGF0ZVsnbGF5ZXJzJ10+ID0gcHJvcHMgPT4gcHJvcHMudmlzU3RhdGUubGF5ZXJzO1xuICAgIGxheWVyRGF0YVNlbGVjdG9yOiBQcm9wU2VsZWN0b3I8VmlzU3RhdGVbJ2xheWVycyddPiA9IHByb3BzID0+IHByb3BzLnZpc1N0YXRlLmxheWVyRGF0YTtcbiAgICBzcGxpdE1hcFNlbGVjdG9yOiBQcm9wU2VsZWN0b3I8U3BsaXRNYXBbXT4gPSBwcm9wcyA9PiBwcm9wcy52aXNTdGF0ZS5zcGxpdE1hcHM7XG4gICAgc3BsaXRNYXBJbmRleFNlbGVjdG9yOiBQcm9wU2VsZWN0b3I8bnVtYmVyIHwgdW5kZWZpbmVkPiA9IHByb3BzID0+IHByb3BzLmluZGV4O1xuICAgIG1hcExheWVyc1NlbGVjdG9yOiBQcm9wU2VsZWN0b3I8U3BsaXRNYXBMYXllcnMgfCBudWxsIHwgdW5kZWZpbmVkPiA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5zcGxpdE1hcFNlbGVjdG9yLFxuICAgICAgdGhpcy5zcGxpdE1hcEluZGV4U2VsZWN0b3IsXG4gICAgICBnZXRNYXBMYXllcnNGcm9tU3BsaXRNYXBzXG4gICAgKTtcbiAgICBsYXllck9yZGVyU2VsZWN0b3I6IFByb3BTZWxlY3RvcjxWaXNTdGF0ZVsnbGF5ZXJPcmRlciddPiA9IHByb3BzID0+IHByb3BzLnZpc1N0YXRlLmxheWVyT3JkZXI7XG4gICAgbGF5ZXJzVG9SZW5kZXJTZWxlY3RvcjogUHJvcFNlbGVjdG9yPExheWVyc1RvUmVuZGVyPiA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5sYXllcnNTZWxlY3RvcixcbiAgICAgIHRoaXMubGF5ZXJEYXRhU2VsZWN0b3IsXG4gICAgICB0aGlzLm1hcExheWVyc1NlbGVjdG9yLFxuICAgICAgcHJlcGFyZUxheWVyc1RvUmVuZGVyXG4gICAgKTtcbiAgICBsYXllcnNGb3JEZWNrU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMubGF5ZXJzU2VsZWN0b3IsXG4gICAgICB0aGlzLmxheWVyRGF0YVNlbGVjdG9yLFxuICAgICAgcHJlcGFyZUxheWVyc0ZvckRlY2tcbiAgICApO1xuICAgIGZpbHRlcnNTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLnZpc1N0YXRlLmZpbHRlcnM7XG4gICAgcG9seWdvbkZpbHRlcnNTZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKHRoaXMuZmlsdGVyc1NlbGVjdG9yLCBmaWx0ZXJzID0+XG4gICAgICBmaWx0ZXJzLmZpbHRlcihmID0+IGYudHlwZSA9PT0gRklMVEVSX1RZUEVTLnBvbHlnb24gJiYgZi5lbmFibGVkICE9PSBmYWxzZSlcbiAgICApO1xuICAgIGZlYXR1cmVzU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy52aXNTdGF0ZS5lZGl0b3IuZmVhdHVyZXM7XG4gICAgc2VsZWN0ZWRGZWF0dXJlU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy52aXNTdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlO1xuICAgIGZlYXR1cmVDb2xsZWN0aW9uU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMucG9seWdvbkZpbHRlcnNTZWxlY3RvcixcbiAgICAgIHRoaXMuZmVhdHVyZXNTZWxlY3RvcixcbiAgICAgIChwb2x5Z29uRmlsdGVycywgZmVhdHVyZXMpID0+ICh7XG4gICAgICAgIHR5cGU6ICdGZWF0dXJlQ29sbGVjdGlvbicsXG4gICAgICAgIGZlYXR1cmVzOiBmZWF0dXJlcy5jb25jYXQocG9seWdvbkZpbHRlcnMubWFwKGYgPT4gZi52YWx1ZSkpXG4gICAgICB9KVxuICAgICk7XG4gICAgLy8gQHRzLWlnbm9yZSAtIE5vIG92ZXJsb2FkIG1hdGNoZXMgdGhpcyBjYWxsXG4gICAgc2VsZWN0ZWRQb2x5Z29uSW5kZXhTZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5mZWF0dXJlQ29sbGVjdGlvblNlbGVjdG9yLFxuICAgICAgdGhpcy5zZWxlY3RlZEZlYXR1cmVTZWxlY3RvcixcbiAgICAgIChjb2xsZWN0aW9uLCBzZWxlY3RlZEZlYXR1cmUpID0+XG4gICAgICAgIGNvbGxlY3Rpb24uZmVhdHVyZXMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gc2VsZWN0ZWRGZWF0dXJlPy5pZClcbiAgICApO1xuICAgIHNlbGVjdGVkRmVhdHVyZUluZGV4QXJyYXlTZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgKHZhbHVlOiBudW1iZXIpID0+IHZhbHVlLFxuICAgICAgdmFsdWUgPT4ge1xuICAgICAgICByZXR1cm4gdmFsdWUgPCAwID8gW10gOiBbdmFsdWVdO1xuICAgICAgfVxuICAgICk7XG5cbiAgICBnZW5lcmF0ZU1hcGJveExheWVyTWV0aG9kU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy5nZW5lcmF0ZU1hcGJveExheWVycyA/PyBnZW5lcmF0ZU1hcGJveExheWVycztcblxuICAgIG1hcGJveExheWVyc1NlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmxheWVyc1NlbGVjdG9yLFxuICAgICAgdGhpcy5sYXllckRhdGFTZWxlY3RvcixcbiAgICAgIHRoaXMubGF5ZXJPcmRlclNlbGVjdG9yLFxuICAgICAgdGhpcy5sYXllcnNUb1JlbmRlclNlbGVjdG9yLFxuICAgICAgdGhpcy5nZW5lcmF0ZU1hcGJveExheWVyTWV0aG9kU2VsZWN0b3IsXG4gICAgICAobGF5ZXIsIGxheWVyRGF0YSwgbGF5ZXJPcmRlciwgbGF5ZXJzVG9SZW5kZXIsIGdlbmVyYXRlTWFwYm94TGF5ZXJNZXRob2QpID0+XG4gICAgICAgIGdlbmVyYXRlTWFwYm94TGF5ZXJNZXRob2QobGF5ZXIsIGxheWVyRGF0YSwgbGF5ZXJPcmRlciwgbGF5ZXJzVG9SZW5kZXIpXG4gICAgKTtcblxuICAgIC8vIG1lcmdlIGluIGEgYmFja2dyb3VuZC1jb2xvciBzdHlsZSBpZiB0aGUgYmFzZW1hcCBjaG9pY2UgaXMgTk9fTUFQX0lEXG4gICAgLy8gdXNlZCBieSA8U3R5bGVkTWFwPiBpbmxpbmUgc3R5bGUgcHJvcFxuICAgIG1hcFN0eWxlVHlwZVNlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMubWFwU3R5bGUuc3R5bGVUeXBlO1xuICAgIG1hcFN0eWxlQmFja2dyb3VuZENvbG9yU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy5tYXBTdHlsZS5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgZ2xvYmVNb2RlU2VsZWN0b3IgPSBwcm9wcyA9PiBCb29sZWFuKHByb3BzLm1hcFN0YXRlPy5nbG9iZT8uZW5hYmxlZCk7XG4gICAgZ2xvYmVCYWNrZ3JvdW5kQ29sb3JTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLm1hcFN0YXRlPy5nbG9iZT8uY29uZmlnPy5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgZ2xvYmVTdGFyc1NlbGVjdG9yID0gcHJvcHMgPT4gQm9vbGVhbihwcm9wcy5tYXBTdGF0ZT8uZ2xvYmU/LmNvbmZpZz8uc3RhcnMpO1xuICAgIHN0eWxlU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMubWFwU3R5bGVUeXBlU2VsZWN0b3IsXG4gICAgICB0aGlzLm1hcFN0eWxlQmFja2dyb3VuZENvbG9yU2VsZWN0b3IsXG4gICAgICB0aGlzLmdsb2JlTW9kZVNlbGVjdG9yLFxuICAgICAgdGhpcy5nbG9iZUJhY2tncm91bmRDb2xvclNlbGVjdG9yLFxuICAgICAgdGhpcy5nbG9iZVN0YXJzU2VsZWN0b3IsXG4gICAgICAoc3R5bGVUeXBlLCBiYWNrZ3JvdW5kQ29sb3IsIGlzR2xvYmVNb2RlLCBnbG9iZUJhY2tncm91bmRDb2xvciwgZ2xvYmVTdGFycykgPT4gKHtcbiAgICAgICAgLi4uTUFQX1NUWUxFLmNvbnRhaW5lcixcbiAgICAgICAgLi4uKHN0eWxlVHlwZSA9PT0gTk9fTUFQX0lEID8ge2JhY2tncm91bmRDb2xvcjogcmdiVG9IZXgoYmFja2dyb3VuZENvbG9yKX0gOiB7fSksXG4gICAgICAgIC8vIEluIGdsb2JlIG1vZGUgdGhlIGRlY2suZ2wgY2FudmFzIGlzIHRyYW5zcGFyZW50ICh0aGUgZ2xvYmUgVmlldyB1c2VzXG4gICAgICAgIC8vIGBjbGVhckNvbG9yOiBmYWxzZWAgdG8gYXZvaWQgY29ycnVwdGluZyB0aGUgcGlja2luZyBidWZmZXIpLCBzbyB0aGVcbiAgICAgICAgLy8gYmFja2dyb3VuZCBhcm91bmQgdGhlIGdsb2JlIGlzIHBhaW50ZWQgaGVyZSBvbiB0aGUgY29udGFpbmVyIGluc3RlYWQuXG4gICAgICAgIC4uLihpc0dsb2JlTW9kZVxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAvLyBGYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgZ2xvYmUgYmFja2dyb3VuZCB3aGVuIG5vbmUgaXMgY29uZmlndXJlZC5cbiAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiByZ2JUb0hleChcbiAgICAgICAgICAgICAgICAoZ2xvYmVCYWNrZ3JvdW5kQ29sb3IgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXJdKSB8fFxuICAgICAgICAgICAgICAgICAgKGdldEdsb2JlQ2xlYXJDb2xvcigpLnNsaWNlKDAsIDMpIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSlcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgLy8gT3B0aW9uYWxseSBvdmVybGF5IGEgdGlsZWFibGUgc3Rhci1maWVsZCBwYXR0ZXJuIG9uIHRoZSBiYWNrZ3JvdW5kLlxuICAgICAgICAgICAgICAuLi4oZ2xvYmVTdGFyc1xuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6IGB1cmwoJyR7Z2V0U3RhcnNCYWNrZ3JvdW5kSW1hZ2UoKX0nKWAsXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRSZXBlYXQ6ICdyZXBlYXQnXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB7fSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHt9KVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgLyogY29tcG9uZW50IHByaXZhdGUgZnVuY3Rpb25zICovXG4gICAgX29uQ2xvc2VNYXBQb3BvdmVyID0gKCkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMub25MYXllckNsaWNrKG51bGwpO1xuICAgIH07XG5cbiAgICBfb25MYXllckhvdmVyID0gKF9pZHg6IG51bWJlciwgaW5mbzogUGlja2luZ0luZm88YW55PiB8IG51bGwpID0+IHtcbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLm9uTGF5ZXJIb3ZlcihpbmZvLCB0aGlzLnByb3BzLmluZGV4KTtcbiAgICB9O1xuXG4gICAgX29uTGF5ZXJTZXREb21haW4gPSAoXG4gICAgICBpZHg6IG51bWJlcixcbiAgICAgIHZhbHVlOiBudW1iZXJbXSB8IHtkb21haW46IFZpc3VhbENoYW5uZWxEb21haW47IGFnZ3JlZ2F0ZWRCaW5zOiBSZWNvcmQ8bnVtYmVyLCBBZ2dyZWdhdGVkQmluPn1cbiAgICApID0+IHtcbiAgICAgIC8vIGRlY2suZ2wgOSBuYXRpdmUgYWdncmVnYXRpb24gbGF5ZXJzIChHcmlkLCBIZXhhZ29uKSBwYXNzXG4gICAgICAvLyB7ZG9tYWluLCBhZ2dyZWdhdGVkQmluc30gdmlhIG91ciBTY2FsZUVuaGFuY2VkKiBvdmVycmlkZXMsXG4gICAgICAvLyB3aGlsZSBDbHVzdGVyTGF5ZXIncyBDUFVBZ2dyZWdhdG9yIGFsc28gcGFzc2VzIHtkb21haW4sIGFnZ3JlZ2F0ZWRCaW5zfS5cbiAgICAgIC8vIFBsYWluIFttaW4sIG1heF0gaXMgYSBmYWxsYmFjayBpZiB0aGUgb3ZlcnJpZGUgaXMgYnlwYXNzZWQuXG4gICAgICBjb25zdCBjb25maWcgPSBBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgICAgICA/IHtjb2xvckRvbWFpbjogdmFsdWUgYXMgVmlzdWFsQ2hhbm5lbERvbWFpbn1cbiAgICAgICAgOiB7Y29sb3JEb21haW46IHZhbHVlLmRvbWFpbiwgYWdncmVnYXRlZEJpbnM6IHZhbHVlLmFnZ3JlZ2F0ZWRCaW5zfTtcblxuICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLnByb3BzLnZpc1N0YXRlLmxheWVyc1tpZHhdO1xuICAgICAgaWYgKCFsYXllcikgcmV0dXJuO1xuXG4gICAgICB0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5sYXllckNvbmZpZ0NoYW5nZShsYXllciwgY29uZmlnIGFzIFBhcnRpYWw8TGF5ZXJCYXNlQ29uZmlnPik7XG4gICAgfTtcblxuICAgIF9vblJlZHJhd05lZWRlZCA9IChfaWR4OiBudW1iZXIpID0+IHtcbiAgICAgIC8vIHVwZGF0ZU1hcFVwZGF0ZXIgYWx3YXlzIHJldHVybnMgYSBuZXcgc3RhdGUgb2JqZWN0IHJlZmVyZW5jZSwgd2hpY2ggdHJpZ2dlcnMgcmUtcmVuZGVyXG4gICAgICBjb25zdCB7bWFwU3RhdGVBY3Rpb25zLCBpbmRleH0gPSB0aGlzLnByb3BzO1xuICAgICAgbWFwU3RhdGVBY3Rpb25zLnVwZGF0ZU1hcCh7fSwgaW5kZXgpO1xuICAgIH07XG5cbiAgICBfb25GaXRCb3VuZHMgPSAoX2lkeDogbnVtYmVyLCBib3VuZHM6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdKSA9PiB7XG4gICAgICB0aGlzLnByb3BzLm1hcFN0YXRlQWN0aW9ucy5maXRCb3VuZHMoYm91bmRzKTtcbiAgICB9O1xuXG4gICAgX29uTGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlID0gKGlkeCwgZXZlbnQpID0+IHtcbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLmxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZSh0aGlzLnByb3BzLnZpc1N0YXRlLmxheWVyc1tpZHhdLCBldmVudCk7XG4gICAgfTtcblxuICAgIF9vbldNU0ZlYXR1cmVJbmZvID0gKFxuICAgICAgaWR4OiBudW1iZXIsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGZlYXR1cmVJbmZvOiBBcnJheTx7bmFtZTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nfT4gfCBzdHJpbmcgfCBudWxsO1xuICAgICAgICBjb29yZGluYXRlPzogW251bWJlciwgbnVtYmVyXSB8IG51bGw7XG4gICAgICB9XG4gICAgKSA9PiB7XG4gICAgICB0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy53bXNGZWF0dXJlSW5mbyhcbiAgICAgICAgdGhpcy5wcm9wcy52aXNTdGF0ZS5sYXllcnNbaWR4XSxcbiAgICAgICAgZGF0YS5mZWF0dXJlSW5mbyxcbiAgICAgICAgZGF0YS5jb29yZGluYXRlXG4gICAgICApO1xuICAgIH07XG5cbiAgICBfaGFuZGxlTWFwVG9nZ2xlTGF5ZXIgPSBsYXllcklkID0+IHtcbiAgICAgIGNvbnN0IHtpbmRleDogbWFwSW5kZXggPSAwLCB2aXNTdGF0ZUFjdGlvbnN9ID0gdGhpcy5wcm9wcztcbiAgICAgIHZpc1N0YXRlQWN0aW9ucy50b2dnbGVMYXllckZvck1hcChtYXBJbmRleCwgbGF5ZXJJZCk7XG4gICAgfTtcblxuICAgIF9vbk1hcGJveFN0eWxlVXBkYXRlID0gdXBkYXRlID0+IHtcbiAgICAgIC8vIGZvcmNlIHJlZnJlc2ggbWFwYm94Z2wgbGF5ZXJzXG4gICAgICB0aGlzLnByZXZpb3VzTGF5ZXJzID0ge307XG4gICAgICB0aGlzLl91cGRhdGVNYXBib3hMYXllcnMoKTtcblxuICAgICAgdGhpcy5fdXBkYXRlQXR0cmlidXRpb24odXBkYXRlKTtcblxuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLm9uTWFwU3R5bGVMb2FkZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbk1hcFN0eWxlTG9hZGVkKHRoaXMuX21hcCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF91cGRhdGVBdHRyaWJ1dGlvbiA9ICh1cGRhdGU/OiBhbnkpID0+IHtcbiAgICAgIHRoaXMuX3JlbW92ZUJhc2VtYXBBdHRyaWJ1dGlvbkxpc3RlbmVycygpO1xuXG4gICAgICBsZXQgc3R5bGVPYmogPSB1cGRhdGU/LnN0eWxlIHx8IG51bGw7XG4gICAgICBpZiAoIXN0eWxlT2JqICYmIHRoaXMuX21hcCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJhd1N0eWxlID0gdGhpcy5fbWFwLmlzU3R5bGVMb2FkZWQ/LigpID8gdGhpcy5fbWFwLmdldFN0eWxlPy4oKSA6IG51bGw7XG4gICAgICAgICAgaWYgKHJhd1N0eWxlKSB7XG4gICAgICAgICAgICBzdHlsZU9iaiA9IHtzdHlsZXNoZWV0OiByYXdTdHlsZX07XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBtYXAgc3R5bGUgbm90IHJlYWR5IHlldFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCB1c2VzTWFwYm94ID0gc3R5bGVPYmogPyBpc1N0eWxlVXNpbmdNYXBib3hUaWxlcyhzdHlsZU9iaikgOiBmYWxzZTtcbiAgICAgIGNvbnN0IHVzZXNPc20gPSBzdHlsZU9iaiA/IGlzU3R5bGVVc2luZ09wZW5TdHJlZXRNYXBUaWxlcyhzdHlsZU9iaikgOiBmYWxzZTtcbiAgICAgIGNvbnN0IGJhc2VtYXBBdHRyaWJ1dGlvbnMgPSBnZXRCYXNlTWFwQXR0cmlidXRpb25zKHRoaXMuX21hcCk7XG5cbiAgICAgIC8vIGlmIE9TTSB0aWxlcyBhcmUgZGV0ZWN0ZWQgaW4gdGhlIHJhdyBzdHlsZSBidXQgbm8gc291cmNlLWxldmVsIGF0dHJpYnV0aW9uXG4gICAgICAvLyBzdHJpbmcgd2FzIGNvbGxlY3RlZCB5ZXQsIGZvbGQgaW4gdGhlIGNhbm9uaWNhbCBPU00gYXR0cmlidXRpb24gc28gdGhlXG4gICAgICAvLyByZW5kZXIgcGF0aCBzdGF5cyB1bmlmb3JtIChubyBzZXBhcmF0ZSBoYXJkY29kZWQgZmFsbGJhY2sgbGluaylcbiAgICAgIGlmICh1c2VzT3NtICYmICFiYXNlbWFwQXR0cmlidXRpb25zLmxlbmd0aCkge1xuICAgICAgICBiYXNlbWFwQXR0cmlidXRpb25zLnB1c2goT1NNX0FUVFJJQlVUSU9OX0hUTUwpO1xuICAgICAgfVxuXG4gICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciB0byBzaG93IHRoZSBcIkJhc2VtYXAgYnk6IE1hcExpYnJlL01hcGJveFwiIGxvZ286XG4gICAgICAvLyAgLSBBbHdheXMgc2hvdyBmb3IgYnVpbHQtaW4ga2VwbGVyLmdsIHN0eWxlcyAoZGFyay1tYXR0ZXIsIHBvc2l0cm9uLCDigKYpOlxuICAgICAgLy8gICAgdGhleSBkb24ndCBjYXJyeSB0aGVpciBvd24gXCJwcm92aWRlclwiIGJyYW5kaW5nIHNvIHRoZSByZW5kZXJpbmctZW5naW5lXG4gICAgICAvLyAgICBsb2dvIGFjdHMgYXMgdGhlIGJhc2VtYXAgY3JlZGl0LlxuICAgICAgLy8gIC0gQWx3YXlzIHNob3cgd2hlbiBNYXBib3ggdGlsZXMgYXJlIGluIHVzZSAobWFwYm94Oi8vIHNvdXJjZXMpOiBNYXBib3hcbiAgICAgIC8vICAgIGF0dHJpYnV0aW9uIGlzIHJlcXVpcmVkLlxuICAgICAgLy8gIC0gSGlkZSBmb3IgY3VzdG9tIHVzZXItYWRkZWQgc3R5bGVzIChjdXN0b20gPT09ICdMT0NBTCcgfCAnTUFOQUdFRCcpOlxuICAgICAgLy8gICAgdGhvc2Ugc3R5bGVzIHN1cHBseSB0aGVpciBvd24gVGlsZUpTT04gYXR0cmlidXRpb24gKGUuZy4gT3BlbkZyZWVNYXApLFxuICAgICAgLy8gICAgc28gc2hvd2luZyBcIkJhc2VtYXAgYnk6IE1hcExpYnJlXCIgd291bGQgYmUgbWlzbGVhZGluZy5cbiAgICAgIGNvbnN0IHN0eWxlVHlwZSA9IHRoaXMucHJvcHMubWFwU3R5bGU/LnN0eWxlVHlwZTtcbiAgICAgIGNvbnN0IGN1cnJlbnRTdHlsZSA9IHRoaXMucHJvcHMubWFwU3R5bGU/Lm1hcFN0eWxlcz8uW3N0eWxlVHlwZV07XG4gICAgICBjb25zdCBpc1VzZXJDdXN0b21TdHlsZSA9IEJvb2xlYW4oY3VycmVudFN0eWxlPy5jdXN0b20pO1xuICAgICAgY29uc3Qgc2hvd0Jhc2VNYXBMaWJMb2dvID0gdXNlc01hcGJveCB8fCAhaXNVc2VyQ3VzdG9tU3R5bGU7XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzaG93QmFzZU1hcExpYkxvZ28sXG4gICAgICAgIGJhc2VtYXBBdHRyaWJ1dGlvbnNcbiAgICAgIH0pO1xuXG4gICAgICAvLyBGb3Igbm9uLU1hcGJveCBzdHlsZXMsIFRpbGVKU09OIGF0dHJpYnV0aW9uIHJlc29sdmVzIGFzeW5jaHJvbm91c2x5XG4gICAgICAvLyBhZnRlciBzdHlsZS5sb2FkLiAgU3RhcnQgYSBsaXN0ZW5lciBzbyB3ZSBjYW4gdXBkYXRlIGJhc2VtYXBBdHRyaWJ1dGlvbnNcbiAgICAgIC8vIGFzIHNvb24gYXMgdGhlIHNvdXJjZXMgcmVzb2x2ZSB0aGVpciBUaWxlSlNPTi5cbiAgICAgIGlmICghdXNlc01hcGJveCkge1xuICAgICAgICB0aGlzLl9jb2xsZWN0QmFzZW1hcEF0dHJpYnV0aW9ucygpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcmVtb3ZlQmFzZW1hcEF0dHJpYnV0aW9uTGlzdGVuZXJzID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2Jhc2VtYXBTb3VyY2VEYXRhTGlzdGVuZXIgJiYgdGhpcy5fbWFwKSB7XG4gICAgICAgIHRoaXMuX21hcC5vZmYoJ3NvdXJjZWRhdGEnLCB0aGlzLl9iYXNlbWFwU291cmNlRGF0YUxpc3RlbmVyKTtcbiAgICAgICAgdGhpcy5fYmFzZW1hcFNvdXJjZURhdGFMaXN0ZW5lciA9IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fYmFzZW1hcElkbGVMaXN0ZW5lciAmJiB0aGlzLl9tYXApIHtcbiAgICAgICAgdGhpcy5fbWFwLm9mZignaWRsZScsIHRoaXMuX2Jhc2VtYXBJZGxlTGlzdGVuZXIpO1xuICAgICAgICB0aGlzLl9iYXNlbWFwSWRsZUxpc3RlbmVyID0gbnVsbDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX2NvbGxlY3RCYXNlbWFwQXR0cmlidXRpb25zID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9tYXApIHJldHVybjtcbiAgICAgIHRoaXMuX3JlbW92ZUJhc2VtYXBBdHRyaWJ1dGlvbkxpc3RlbmVycygpO1xuICAgICAgbGV0IGF0dGVtcHRzID0gMDtcbiAgICAgIC8vIENhcCByZXRyaWVzIHNvIGEgc3R5bGUgdGhhdCBuZXZlciB5aWVsZHMgYXR0cmlidXRpb25zIGRvZXNuJ3QgbGVhdmUgYVxuICAgICAgLy8gcGVybWFuZW50IHNvdXJjZWRhdGEgbGlzdGVuZXIgYXR0YWNoZWQuXG4gICAgICBjb25zdCBNQVhfQVRURU1QVFMgPSA1MDtcblxuICAgICAgY29uc3QgdHJ5Q29sbGVjdCA9ICgpID0+IHtcbiAgICAgICAgLy8gVGlsZUpTT04gcmVzb2x2ZXMgYXN5bmNocm9ub3VzbHk7IHJlLWNvbGxlY3QgYXR0cmlidXRpb25zIG9uY2UgYVxuICAgICAgICAvLyBzb3VyY2UncyBtZXRhZGF0YSBpcyBhdmFpbGFibGUgc28gY3VzdG9tIGJhc2VtYXAgYXR0cmlidXRpb25zIGFyZSBub3QgbG9zdC5cbiAgICAgICAgY29uc3QgYmFzZW1hcEF0dHJpYnV0aW9ucyA9IGdldEJhc2VNYXBBdHRyaWJ1dGlvbnModGhpcy5fbWFwKTtcbiAgICAgICAgaWYgKGJhc2VtYXBBdHRyaWJ1dGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5fcmVtb3ZlQmFzZW1hcEF0dHJpYnV0aW9uTGlzdGVuZXJzKCk7XG4gICAgICAgICAgLy8gRG9uJ3QgY2hhbmdlIHNob3dCYXNlTWFwTGliTG9nbyBoZXJlIOKAlCBpdCBpcyBmaXhlZCBhdCBzdHlsZS5sb2FkIHRpbWVcbiAgICAgICAgICAvLyBiYXNlZCBvbiB3aGV0aGVyIHRoZSBzdHlsZSB1c2VzIE1hcGJveCB0aWxlcy4gIFdlIG9ubHkgdXBkYXRlIHRoZVxuICAgICAgICAgIC8vIHByb3ZpZGVyIGF0dHJpYnV0aW9ucyBjb2xsZWN0ZWQgZnJvbSB0aGUgcmVzb2x2ZWQgVGlsZUpTT04uXG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7YmFzZW1hcEF0dHJpYnV0aW9uc30pO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uU291cmNlRGF0YSA9IChlOiBhbnkpID0+IHtcbiAgICAgICAgLy8gQ29sbGVjdCBhdHRyaWJ1dGlvbnMgd2hlbjpcbiAgICAgICAgLy8gICAoYSkgYSBzb3VyY2UncyBUaWxlSlNPTiBoYXMganVzdCBiZWVuIGZldGNoZWQgKHNvdXJjZURhdGFUeXBlID09PSAnbWV0YWRhdGEnKSDigJRcbiAgICAgICAgLy8gICAgICAgdGhpcyBpcyB0aGUgZWFybGllc3QgbW9tZW50IHRoZSBgYXR0cmlidXRpb25gIHByb3BlcnR5IGlzIGF2YWlsYWJsZSBvbiB0aGVcbiAgICAgICAgLy8gICAgICAgcmVzb2x2ZWQgc291cmNlIG9iamVjdCwgb3JcbiAgICAgICAgLy8gICAoYikgYSBzb3VyY2UgaXMgZnVsbHkgbG9hZGVkIChpc1NvdXJjZUxvYWRlZCA9PT0gdHJ1ZSkg4oCUIGZhbGxiYWNrIGZvciByYXN0ZXJcbiAgICAgICAgLy8gICAgICAgc291cmNlcyBvciBzdHlsZXMgdGhhdCBzZXQgYXR0cmlidXRpb24gaW5saW5lIHJhdGhlciB0aGFuIHZpYSBUaWxlSlNPTi5cbiAgICAgICAgaWYgKCFlPy5pc1NvdXJjZUxvYWRlZCAmJiBlPy5zb3VyY2VEYXRhVHlwZSAhPT0gJ21ldGFkYXRhJykgcmV0dXJuO1xuICAgICAgICBhdHRlbXB0cysrO1xuICAgICAgICB0cnlDb2xsZWN0KCk7XG4gICAgICAgIGlmIChhdHRlbXB0cyA+PSBNQVhfQVRURU1QVFMpIHtcbiAgICAgICAgICB0aGlzLl9yZW1vdmVCYXNlbWFwQXR0cmlidXRpb25MaXN0ZW5lcnMoKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgLy8gVGhlIGBpZGxlYCBldmVudCBmaXJlcyB3aGVuIHRoZSBtYXAgaGFzIGZpbmlzaGVkIGxvYWRpbmcgYWxsIHBlbmRpbmdcbiAgICAgIC8vIHJlc291cmNlcyAodGlsZXMsIFRpbGVKU09OLCBzcHJpdGVzKS4gQXQgdGhhdCBwb2ludCBhdHRyaWJ1dGlvbnMgZnJvbVxuICAgICAgLy8gYWxsIHNvdXJjZXMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgcmVzb2x2ZWQsIHNvIHRoaXMgaXMgYSByZWxpYWJsZVxuICAgICAgLy8gb25lLXNob3QgZmFsbGJhY2sgdGhhdCBjYXRjaGVzIGNhc2VzIHdoZXJlIHRoZSBzb3VyY2VkYXRhIG1ldGFkYXRhXG4gICAgICAvLyBldmVudHMgYXJlIG1pc3NlZCBvciB0aGUgc291cmNlIG5ldmVyIHJlYWNoZXMgaXNTb3VyY2VMb2FkZWQuXG4gICAgICBjb25zdCBvbklkbGUgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuX3JlbW92ZUJhc2VtYXBBdHRyaWJ1dGlvbkxpc3RlbmVycygpO1xuICAgICAgICBjb25zdCBiYXNlbWFwQXR0cmlidXRpb25zID0gZ2V0QmFzZU1hcEF0dHJpYnV0aW9ucyh0aGlzLl9tYXApO1xuICAgICAgICBpZiAoYmFzZW1hcEF0dHJpYnV0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtiYXNlbWFwQXR0cmlidXRpb25zfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX2Jhc2VtYXBTb3VyY2VEYXRhTGlzdGVuZXIgPSBvblNvdXJjZURhdGE7XG4gICAgICB0aGlzLl9iYXNlbWFwSWRsZUxpc3RlbmVyID0gb25JZGxlO1xuICAgICAgdGhpcy5fbWFwLm9uKCdzb3VyY2VkYXRhJywgb25Tb3VyY2VEYXRhKTtcbiAgICAgIHRoaXMuX21hcC5vbignaWRsZScsIG9uSWRsZSk7XG4gICAgfTtcblxuICAgIF9zZXRNYXBSZWYgPSBtYXBSZWYgPT4ge1xuICAgICAgLy8gSGFuZGxlIGNoYW5nZSBvZiB0aGUgbWFwIGxpYnJhcnlcbiAgICAgIGlmICh0aGlzLl9tYXAgJiYgbWFwUmVmKSB7XG4gICAgICAgIGNvbnN0IG1hcCA9IG1hcFJlZi5nZXRNYXAoKTtcbiAgICAgICAgaWYgKG1hcCAmJiB0aGlzLl9tYXAgIT09IG1hcCkge1xuICAgICAgICAgIHRoaXMuX21hcC5vZmYoTUFQQk9YR0xfU1RZTEVfVVBEQVRFLCB0aGlzLl9vbk1hcGJveFN0eWxlVXBkYXRlKTtcbiAgICAgICAgICB0aGlzLl9tYXAub2ZmKE1BUEJPWEdMX1JFTkRFUiwgdGhpcy5fb25NYXBSZW5kZXIpO1xuICAgICAgICAgIHRoaXMuX3JlbW92ZUJhc2VtYXBBdHRyaWJ1dGlvbkxpc3RlbmVycygpO1xuICAgICAgICAgIHRoaXMuX21hcCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLl9tYXAgJiYgbWFwUmVmKSB7XG4gICAgICAgIHRoaXMuX21hcCA9IG1hcFJlZi5nZXRNYXAoKTtcbiAgICAgICAgLy8gaSBub3RpY2VkIGluIGNlcnRhaW4gY29udGV4dCB3ZSBkb24ndCBhY2Nlc3MgdGhlIGFjdHVhbCBtYXAgZWxlbWVudFxuICAgICAgICBpZiAoIXRoaXMuX21hcCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBiaW5kIG1hcGJveGdsIGV2ZW50IGxpc3RlbmVyXG4gICAgICAgIHRoaXMuX21hcC5vbihNQVBCT1hHTF9TVFlMRV9VUERBVEUsIHRoaXMuX29uTWFwYm94U3R5bGVVcGRhdGUpO1xuICAgICAgICB0aGlzLl9tYXAub24oTUFQQk9YR0xfUkVOREVSLCB0aGlzLl9vbk1hcFJlbmRlcik7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnByb3BzLmdldE1hcGJveFJlZikge1xuICAgICAgICAvLyBUaGUgcGFyZW50IGNvbXBvbmVudCBjYW4gZ2FpbiBhY2Nlc3MgdG8gb3VyIE1hcGJveEdsTWFwIGJ5XG4gICAgICAgIC8vIHByb3ZpZGluZyB0aGlzIGNhbGxiYWNrLiBOb3RlIHRoYXQgJ21hcGJveCcgd2lsbCBiZSBudWxsIHdoZW4gdGhlXG4gICAgICAgIC8vIHJlZiBpcyB1bnNldCAoZS5nLiB3aGVuIGEgc3BsaXQgbWFwIGlzIGNsb3NlZCkuXG4gICAgICAgIHRoaXMucHJvcHMuZ2V0TWFwYm94UmVmKG1hcFJlZiwgdGhpcy5wcm9wcy5pbmRleCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9vbkRlY2tJbml0aWFsaXplZChkZXZpY2UpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLm9uRGVja0luaXRpYWxpemVkKSB7XG4gICAgICAgIHRoaXMucHJvcHMub25EZWNrSW5pdGlhbGl6ZWQodGhpcy5fZGVjaywgZGV2aWNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAxKSBBbGxvdyBlZmZlY3RzIG9ubHkgZm9yIHRoZSBmaXJzdCB2aWV3LlxuICAgICAqIDIpIFByZXZlbnQgZWZmZWN0OnByZVJlbmRlciBjYWxsIHdpdGhvdXQgdmFsaWQgZ2VuZXJhdGVkIHZpZXdwb3J0cy5cbiAgICAgKiBAcGFyYW0gdmlld0luZGV4IFZpZXcgaW5kZXguXG4gICAgICogQHJldHVybnMgUmV0dXJucyB0cnVlIGlmIGVmZmVjdHMgY2FuIGJlIHVzZWQuXG4gICAgICovXG4gICAgX2lzT0tUb1JlbmRlckVmZmVjdHModmlld0luZGV4PzogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gIXZpZXdJbmRleCAmJiBCb29sZWFuKHRoaXMuX2RlY2s/LnZpZXdNYW5hZ2VyPy5fdmlld3BvcnRzPy5sZW5ndGgpO1xuICAgIH1cblxuICAgIF9vbkJlZm9yZVJlbmRlciA9ICgpID0+IHtcbiAgICAgIC8vIG5vLW9wXG4gICAgfTtcblxuICAgIF9hbm5vdGF0aW9uVmlld3BvcnRDYWNoZToge2tleTogc3RyaW5nOyB2aWV3cG9ydDogYW55fSB8IG51bGwgPSBudWxsO1xuXG4gICAgX3dhc0ludGVyYWN0aW5nID0gZmFsc2U7XG5cbiAgICBfZ2V0QW5ub3RhdGlvblZpZXdwb3J0KG1hcFN0YXRlOiBhbnksIGludGVybmFsVmlld1N0YXRlOiBhbnkpIHtcbiAgICAgIGNvbnN0IGxvbmdpdHVkZSA9IGludGVybmFsVmlld1N0YXRlPy5sb25naXR1ZGUgPz8gbWFwU3RhdGUubG9uZ2l0dWRlO1xuICAgICAgY29uc3QgbGF0aXR1ZGUgPSBpbnRlcm5hbFZpZXdTdGF0ZT8ubGF0aXR1ZGUgPz8gbWFwU3RhdGUubGF0aXR1ZGU7XG4gICAgICBjb25zdCB6b29tID0gaW50ZXJuYWxWaWV3U3RhdGU/Lnpvb20gPz8gbWFwU3RhdGUuem9vbTtcbiAgICAgIGNvbnN0IHBpdGNoID0gaW50ZXJuYWxWaWV3U3RhdGU/LnBpdGNoID8/IG1hcFN0YXRlLnBpdGNoID8/IDA7XG4gICAgICBjb25zdCBiZWFyaW5nID0gaW50ZXJuYWxWaWV3U3RhdGU/LmJlYXJpbmcgPz8gbWFwU3RhdGUuYmVhcmluZyA/PyAwO1xuICAgICAgY29uc3Qgd2lkdGggPSBtYXBTdGF0ZS53aWR0aCB8fCAwO1xuICAgICAgY29uc3QgaGVpZ2h0ID0gbWFwU3RhdGUuaGVpZ2h0IHx8IDA7XG4gICAgICBjb25zdCBrZXkgPSBgJHtsb25naXR1ZGV9LCR7bGF0aXR1ZGV9LCR7em9vbX0sJHtwaXRjaH0sJHtiZWFyaW5nfSwke3dpZHRofSwke2hlaWdodH1gO1xuXG4gICAgICBpZiAodGhpcy5fYW5ub3RhdGlvblZpZXdwb3J0Q2FjaGU/LmtleSA9PT0ga2V5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hbm5vdGF0aW9uVmlld3BvcnRDYWNoZS52aWV3cG9ydDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWVyZ2VkU3RhdGUgPSB7Li4ubWFwU3RhdGUsIC4uLmludGVybmFsVmlld1N0YXRlLCB3aWR0aCwgaGVpZ2h0fTtcbiAgICAgIGNvbnN0IHZwID0gZ2V0Vmlld3BvcnRGcm9tTWFwU3RhdGUobWVyZ2VkU3RhdGUpIGFzIGFueTtcbiAgICAgIGNvbnN0IHZpZXdwb3J0ID0ge1xuICAgICAgICBwcm9qZWN0OiAobG5nTGF0OiBbbnVtYmVyLCBudW1iZXJdKSA9PiB2cC5wcm9qZWN0KGxuZ0xhdCkgYXMgW251bWJlciwgbnVtYmVyXSxcbiAgICAgICAgdW5wcm9qZWN0OiAoeHk6IFtudW1iZXIsIG51bWJlcl0pID0+IHZwLnVucHJvamVjdCh4eSkgYXMgW251bWJlciwgbnVtYmVyXSxcbiAgICAgICAgbG9uZ2l0dWRlLFxuICAgICAgICBsYXRpdHVkZSxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgem9vbVxuICAgICAgfTtcbiAgICAgIHRoaXMuX2Fubm90YXRpb25WaWV3cG9ydENhY2hlID0ge2tleSwgdmlld3BvcnR9O1xuICAgICAgcmV0dXJuIHZpZXdwb3J0O1xuICAgIH1cblxuICAgIF9vbkRlY2tFcnJvciA9IChlcnJvciwgbGF5ZXIpID0+IHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yPy5tZXNzYWdlIHx8ICd1bmtub3duLWVycm9yJztcbiAgICAgIGNvbnN0IGxheWVyTWVzc2FnZSA9IGxheWVyPy5pZCA/IGAgaW4gJHtsYXllci5pZH0gbGF5ZXJgIDogJyc7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2VGdWxsID1cbiAgICAgICAgZXJyb3JNZXNzYWdlID09PSAnV2ViR0wgY29udGV4dCBpcyBsb3N0J1xuICAgICAgICAgID8gJ1lvdXIgR1BVIHdhcyBkaXNjb25uZWN0ZWQuIFRoaXMgY2FuIGhhcHBlbiBpZiB5b3VyIGNvbXB1dGVyIGdvZXMgdG8gc2xlZXAuIEl0IGNhbiBhbHNvIG9jY3VyIGZvciBvdGhlciByZWFzb25zLCBzdWNoIGFzIGlmIHlvdSBhcmUgcnVubmluZyB0b28gbWFueSBHUFUgYXBwbGljYXRpb25zLidcbiAgICAgICAgICA6IGBBbiBlcnJvciBpbiBkZWNrLmdsOiAke2Vycm9yTWVzc2FnZX0ke2xheWVyTWVzc2FnZX0uYDtcblxuICAgICAgLy8gVGhyb3R0bGUgZXJyb3Igbm90aWZpY2F0aW9ucywgYXMgUmVhY3QgZG9lc24ndCBsaWtlIHRvbyBtYW55IHN0YXRlIGNoYW5nZXMgZnJvbSBoZXJlLlxuICAgICAgY29uc3QgbGFzdFNob3duID0gdGhpcy5fZGVja0dMRXJyb3JzRWxhcHNlZFtlcnJvck1lc3NhZ2VGdWxsXTtcbiAgICAgIGlmICghbGFzdFNob3duIHx8IGxhc3RTaG93biA8IERhdGUubm93KCkgLSBUSFJPVFRMRV9OT1RJRklDQVRJT05fVElNRSkge1xuICAgICAgICB0aGlzLl9kZWNrR0xFcnJvcnNFbGFwc2VkW2Vycm9yTWVzc2FnZUZ1bGxdID0gRGF0ZS5ub3coKTtcblxuICAgICAgICAvLyBNYXJrIGxheWVyIGFzIGludmFsaWRcbiAgICAgICAgbGV0IGV4dHJhTGF5ZXJNZXNzYWdlID0gJyc7XG4gICAgICAgIGNvbnN0IHt2aXNTdGF0ZUFjdGlvbnN9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgaWYgKGxheWVyKSB7XG4gICAgICAgICAgbGV0IHRvcE1vc3RMYXllciA9IGxheWVyO1xuICAgICAgICAgIHdoaWxlICh0b3BNb3N0TGF5ZXIucGFyZW50KSB7XG4gICAgICAgICAgICB0b3BNb3N0TGF5ZXIgPSB0b3BNb3N0TGF5ZXIucGFyZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodG9wTW9zdExheWVyLnByb3BzPy5pZCkge1xuICAgICAgICAgICAgdmlzU3RhdGVBY3Rpb25zLmxheWVyU2V0SXNWYWxpZCh0b3BNb3N0TGF5ZXIsIGZhbHNlKTtcbiAgICAgICAgICAgIGV4dHJhTGF5ZXJNZXNzYWdlID0gJ1RoZSBsYXllciBoYXMgYmVlbiBkaXNhYmxlZCBhbmQgaGlnaGxpZ2h0ZWQuJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgbmV3IGVycm9yIG5vdGlmaWNhdGlvbiBvciB1cGRhdGUgZXhpc3Rpbmcgb25lIHdpdGggc2FtZSBpZC5cbiAgICAgICAgLy8gVXBkYXRlIGlzIHJlcXVpcmVkIHRvIHByZXNlcnZlIHRoZSBvcmRlciBvZiBub3RpZmljYXRpb25zIGFzIHRoZXkgcHJvYmFibHkgYXJlIGdvaW5nIHRvIFwianVtcFwiIGJhc2VkIG9uIG9yZGVyIG9mIGVycm9ycy5cbiAgICAgICAgY29uc3Qge3VpU3RhdGVBY3Rpb25zfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIHVpU3RhdGVBY3Rpb25zLmFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBgJHtlcnJvck1lc3NhZ2VGdWxsfSAke2V4dHJhTGF5ZXJNZXNzYWdlfWAsXG4gICAgICAgICAgICBpZDogZXJyb3JNZXNzYWdlRnVsbCAvLyB0cmVhdCB0aGUgZXJyb3IgbWVzc2FnZSBhcyBpZFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8qIGNvbXBvbmVudCByZW5kZXIgZnVuY3Rpb25zICovXG5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG4gICAgX3JlbmRlck1hcFBvcG92ZXIoKSB7XG4gICAgICAvLyB0aGlzIGNoZWNrIGlzIGZvciBsaW1pdGluZyB0aGUgZGlzcGxheSBvZiB0aGUgYDxNYXBQb3BvdmVyPmAgdG8gdGhlIGA8TWFwQ29udGFpbmVyPmAgdGhlIHVzZXIgaXMgaW50ZXJhY3Rpbmcgd2l0aFxuICAgICAgLy8gdGhlIERlY2tHTCBvbkhvdmVyIGV2ZW50IGhhbmRsZXIgYWRkcyBhIGBtYXBJbmRleGAgcHJvcGVydHkgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBgaG92ZXJJbmZvYCBvYmplY3Qgb2YgYHZpc1N0YXRlYFxuICAgICAgaWYgKHRoaXMucHJvcHMuaW5kZXggIT09IHRoaXMucHJvcHMudmlzU3RhdGUuaG92ZXJJbmZvPy5tYXBJbmRleCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gVE9ETzogbW92ZSB0aGlzIGludG8gcmVkdWNlciBzbyBpdCBjYW4gYmUgdGVzdGVkXG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcFN0YXRlLFxuICAgICAgICB2aXNTdGF0ZToge1xuICAgICAgICAgIGhvdmVySW5mbyxcbiAgICAgICAgICBjbGlja2VkLFxuICAgICAgICAgIGRhdGFzZXRzLFxuICAgICAgICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgICBsYXllcnMsXG4gICAgICAgICAgbW91c2VQb3M6IHttb3VzZVBvc2l0aW9uLCBjb29yZGluYXRlLCBwaW5uZWR9XG4gICAgICAgIH1cbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgbGF5ZXJzVG9SZW5kZXIgPSB0aGlzLmxheWVyc1RvUmVuZGVyU2VsZWN0b3IodGhpcy5wcm9wcyk7XG5cbiAgICAgIGlmICghbW91c2VQb3NpdGlvbiB8fCAhaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbGF5ZXJIb3ZlclByb3AgPSBnZXRMYXllckhvdmVyUHJvcCh7XG4gICAgICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICAgIGhvdmVySW5mbyxcbiAgICAgICAgbGF5ZXJzLFxuICAgICAgICBsYXllcnNUb1JlbmRlcixcbiAgICAgICAgZGF0YXNldHNcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBjb21wYXJlTW9kZSA9IGludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnXG4gICAgICAgID8gaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuY29tcGFyZU1vZGVcbiAgICAgICAgOiBmYWxzZTtcblxuICAgICAgbGV0IHBpbm5lZFBvc2l0aW9uID0ge3g6IDAsIHk6IDB9O1xuICAgICAgbGV0IGxheWVyUGlubmVkUHJvcDogTGF5ZXJIb3ZlclByb3AgfCBudWxsID0gbnVsbDtcbiAgICAgIGlmIChwaW5uZWQgfHwgY2xpY2tlZCkge1xuICAgICAgICAvLyBwcm9qZWN0IGxuZ2xhdCB0byBzY3JlZW4gc28gdGhhdCB0b29sdGlwIGZvbGxvd3MgdGhlIG9iamVjdCBvbiB6b29tXG4gICAgICAgIGNvbnN0IHZpZXdwb3J0ID0gZ2V0Vmlld3BvcnRGcm9tTWFwU3RhdGUobWFwU3RhdGUpO1xuICAgICAgICBjb25zdCBsbmdMYXQgPSBjbGlja2VkID8gY2xpY2tlZC5jb29yZGluYXRlIDogcGlubmVkLmNvb3JkaW5hdGU7XG4gICAgICAgIHBpbm5lZFBvc2l0aW9uID0gdGhpcy5fZ2V0SG92ZXJYWSh2aWV3cG9ydCwgbG5nTGF0KTtcbiAgICAgICAgbGF5ZXJQaW5uZWRQcm9wID0gZ2V0TGF5ZXJIb3ZlclByb3Aoe1xuICAgICAgICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgICAgICBob3ZlckluZm86IGNsaWNrZWQsXG4gICAgICAgICAgbGF5ZXJzLFxuICAgICAgICAgIGxheWVyc1RvUmVuZGVyLFxuICAgICAgICAgIGRhdGFzZXRzXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAobGF5ZXJIb3ZlclByb3AgJiYgbGF5ZXJQaW5uZWRQcm9wKSB7XG4gICAgICAgICAgbGF5ZXJIb3ZlclByb3AucHJpbWFyeURhdGEgPSBsYXllclBpbm5lZFByb3AuZGF0YTtcbiAgICAgICAgICBsYXllckhvdmVyUHJvcC5jb21wYXJlVHlwZSA9IGludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnLmNvbXBhcmVUeXBlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbW1vblByb3AgPSB7XG4gICAgICAgIG9uQ2xvc2U6IHRoaXMuX29uQ2xvc2VNYXBQb3BvdmVyLFxuICAgICAgICB6b29tOiBtYXBTdGF0ZS56b29tLFxuICAgICAgICBjb250YWluZXI6IHRoaXMuX2RlY2sgPyB0aGlzLl9kZWNrLmNhbnZhcyA6IHVuZGVmaW5lZFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEVycm9yQm91bmRhcnk+XG4gICAgICAgICAge2xheWVyUGlubmVkUHJvcCAmJiAoXG4gICAgICAgICAgICA8TWFwUG9wb3ZlclxuICAgICAgICAgICAgICB7Li4ucGlubmVkUG9zaXRpb259XG4gICAgICAgICAgICAgIHsuLi5jb21tb25Qcm9wfVxuICAgICAgICAgICAgICBsYXllckhvdmVyUHJvcD17bGF5ZXJQaW5uZWRQcm9wfVxuICAgICAgICAgICAgICBjb29yZGluYXRlPXtpbnRlcmFjdGlvbkNvbmZpZy5jb29yZGluYXRlLmVuYWJsZWQgJiYgKHBpbm5lZCB8fCB7fSkuY29vcmRpbmF0ZX1cbiAgICAgICAgICAgICAgZnJvemVuPXt0cnVlfVxuICAgICAgICAgICAgICBpc0Jhc2U9e2NvbXBhcmVNb2RlfVxuICAgICAgICAgICAgICBvblNldEZlYXR1cmVzPXt0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5zZXRGZWF0dXJlc31cbiAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRGZWF0dXJlPXt0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5zZXRTZWxlY3RlZEZlYXR1cmV9XG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgQXJndW1lbnQgb2YgdHlwZSAnUmVhZG9ubHk8TWFwQ29udGFpbmVyUHJvcHM+JyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAnbmV2ZXInXG4gICAgICAgICAgICAgIGZlYXR1cmVDb2xsZWN0aW9uPXt0aGlzLmZlYXR1cmVDb2xsZWN0aW9uU2VsZWN0b3IodGhpcy5wcm9wcyl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAge2xheWVySG92ZXJQcm9wICYmICghbGF5ZXJQaW5uZWRQcm9wIHx8IGNvbXBhcmVNb2RlKSAmJiAoXG4gICAgICAgICAgICA8TWFwUG9wb3ZlclxuICAgICAgICAgICAgICB4PXttb3VzZVBvc2l0aW9uWzBdfVxuICAgICAgICAgICAgICB5PXttb3VzZVBvc2l0aW9uWzFdfVxuICAgICAgICAgICAgICB7Li4uY29tbW9uUHJvcH1cbiAgICAgICAgICAgICAgbGF5ZXJIb3ZlclByb3A9e2xheWVySG92ZXJQcm9wfVxuICAgICAgICAgICAgICBmcm96ZW49e2ZhbHNlfVxuICAgICAgICAgICAgICBjb29yZGluYXRlPXtpbnRlcmFjdGlvbkNvbmZpZy5jb29yZGluYXRlLmVuYWJsZWQgJiYgY29vcmRpbmF0ZX1cbiAgICAgICAgICAgICAgb25TZXRGZWF0dXJlcz17dGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMuc2V0RmVhdHVyZXN9XG4gICAgICAgICAgICAgIHNldFNlbGVjdGVkRmVhdHVyZT17dGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMuc2V0U2VsZWN0ZWRGZWF0dXJlfVxuICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlIEFyZ3VtZW50IG9mIHR5cGUgJ1JlYWRvbmx5PE1hcENvbnRhaW5lclByb3BzPicgaXMgbm90IGFzc2lnbmFibGUgdG8gcGFyYW1ldGVyIG9mIHR5cGUgJ25ldmVyJ1xuICAgICAgICAgICAgICBmZWF0dXJlQ29sbGVjdGlvbj17dGhpcy5mZWF0dXJlQ29sbGVjdGlvblNlbGVjdG9yKHRoaXMucHJvcHMpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L0Vycm9yQm91bmRhcnk+XG4gICAgICApO1xuICAgIH1cblxuICAgIC8qIGVzbGludC1lbmFibGUgY29tcGxleGl0eSAqL1xuXG4gICAgX2dldEhvdmVyWFkodmlld3BvcnQsIGxuZ0xhdCkge1xuICAgICAgY29uc3Qgc2NyZWVuQ29vcmQgPSAhdmlld3BvcnQgfHwgIWxuZ0xhdCA/IG51bGwgOiB2aWV3cG9ydC5wcm9qZWN0KGxuZ0xhdCk7XG4gICAgICByZXR1cm4gc2NyZWVuQ29vcmQgJiYge3g6IHNjcmVlbkNvb3JkWzBdLCB5OiBzY3JlZW5Db29yZFsxXX07XG4gICAgfVxuXG4gICAgX3JlbmRlckRlY2tPdmVybGF5KFxuICAgICAgbGF5ZXJzRm9yRGVjayxcbiAgICAgIG9wdGlvbnM6IHtwcmltYXJ5TWFwOiBib29sZWFuOyBpc0ludGVyYWN0aXZlPzogYm9vbGVhbjsgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGV9ID0ge1xuICAgICAgICBwcmltYXJ5TWFwOiBmYWxzZVxuICAgICAgfVxuICAgICkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBtYXBTdHlsZSxcbiAgICAgICAgdmlzU3RhdGUsXG4gICAgICAgIG1hcFN0YXRlLFxuICAgICAgICB2aXNTdGF0ZUFjdGlvbnMsXG4gICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgICAgICBtYXBib3hBcGlVcmwsXG4gICAgICAgIGRlY2tHbFByb3BzLFxuICAgICAgICBpbmRleCxcbiAgICAgICAgbWFwQ29udHJvbHMsXG4gICAgICAgIGRlY2tSZW5kZXJDYWxsYmFja3MsXG4gICAgICAgIHRoZW1lLFxuICAgICAgICBnZW5lcmF0ZURlY2tHTExheWVycyxcbiAgICAgICAgb25Nb3VzZU1vdmVcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBjb25zdCB7aG92ZXJJbmZvLCBlZGl0b3J9ID0gdmlzU3RhdGU7XG4gICAgICBjb25zdCB7cHJpbWFyeU1hcCwgaXNJbnRlcmFjdGl2ZSwgY2hpbGRyZW59ID0gb3B0aW9ucztcblxuICAgICAgLy8gZGlzYWJsZSBkb3VibGUgY2xpY2sgem9vbSB3aGVuIGVkaXRvciBpcyBpbiBhbnkgZHJhdyBtb2RlXG4gICAgICBjb25zdCB7bWFwRHJhd30gPSBtYXBDb250cm9scztcbiAgICAgIGNvbnN0IHthY3RpdmU6IGVkaXRvck1lbnVBY3RpdmUgPSBmYWxzZX0gPSBtYXBEcmF3IHx8IHt9O1xuICAgICAgY29uc3QgaXNFZGl0b3JEcmF3aW5nTW9kZSA9IEVkaXRvckxheWVyVXRpbHMuaXNEcmF3aW5nQWN0aXZlKGVkaXRvck1lbnVBY3RpdmUsIGVkaXRvci5tb2RlKTtcblxuICAgICAgY29uc3QgaW50ZXJuYWxWaWV3U3RhdGUgPSB0aGlzLmNvbnRleHQ/LmdldEludGVybmFsVmlld1N0YXRlKGluZGV4KTtcbiAgICAgIGNvbnN0IGludGVybmFsTWFwU3RhdGUgPSB7Li4ubWFwU3RhdGUsIC4uLmludGVybmFsVmlld1N0YXRlfTtcbiAgICAgIGNvbnN0IHZpZXdwb3J0ID0gZ2V0Vmlld3BvcnRGcm9tTWFwU3RhdGUoaW50ZXJuYWxNYXBTdGF0ZSk7XG5cbiAgICAgIGNvbnN0IGVkaXRvckZlYXR1cmVTZWxlY3RlZEluZGV4ID0gdGhpcy5zZWxlY3RlZFBvbHlnb25JbmRleFNlbGVjdG9yKHRoaXMucHJvcHMpO1xuXG4gICAgICBjb25zdCB7c2V0RmVhdHVyZXMsIG9uTGF5ZXJDbGljaywgc2V0U2VsZWN0ZWRGZWF0dXJlfSA9IHZpc1N0YXRlQWN0aW9ucztcblxuICAgICAgY29uc3QgZ2VuZXJhdGVEZWNrR0xMYXllcnNNZXRob2QgPSBnZW5lcmF0ZURlY2tHTExheWVycyA/PyBjb21wdXRlRGVja0xheWVycztcblxuICAgICAgY29uc3QgZXh0cmFEZWNrUGFyYW1zOiB7XG4gICAgICAgIGdldFRvb2x0aXA/OiAoaW5mbzogYW55KSA9PiBvYmplY3QgfCBudWxsO1xuICAgICAgICBnZXRDdXJzb3I/OiAoe2lzRHJhZ2dpbmd9OiB7aXNEcmFnZ2luZzogYm9vbGVhbn0pID0+IHN0cmluZztcbiAgICAgIH0gPSB7fTtcbiAgICAgIGlmIChwcmltYXJ5TWFwKSB7XG4gICAgICAgIC8vIE9taXQgaG92ZXIgdXBkYXRlcyB3aGVuIHRoZSBwb2ludGVyIHBvc2l0aW9uIGlzIGludmFsaWQsIGllLiBvdmVyIFVJIG92ZXJsYXlzIG9yXG4gICAgICAgIC8vIG91dHNpZGUgdGhlIG1hcCBjb250YWluZXIuIEluIHRob3NlIGNhc2VzIHgveSBtYXkgYmUgPCAwXG4gICAgICAgIGV4dHJhRGVja1BhcmFtcy5nZXRUb29sdGlwID0gaW5mbyA9PiB7XG4gICAgICAgICAgY29uc3QgeCA9IE51bWJlcihpbmZvPy54KTtcbiAgICAgICAgICBjb25zdCB5ID0gTnVtYmVyKGluZm8/LnkpO1xuICAgICAgICAgIGlmIChOdW1iZXIuaXNOYU4oeCkgfHwgTnVtYmVyLmlzTmFOKHkpIHx8IHggPCAwIHx8IHkgPCAwKSByZXR1cm4gbnVsbDtcblxuICAgICAgICAgIHJldHVybiBFZGl0b3JMYXllclV0aWxzLmdldFRvb2x0aXAoaW5mbywge1xuICAgICAgICAgICAgZWRpdG9yTWVudUFjdGl2ZSxcbiAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgIHRoZW1lXG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZXh0cmFEZWNrUGFyYW1zLmdldEN1cnNvciA9ICh7aXNEcmFnZ2luZ306IHtpc0RyYWdnaW5nOiBib29sZWFufSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVkaXRvckN1cnNvciA9IEVkaXRvckxheWVyVXRpbHMuZ2V0Q3Vyc29yKHtcbiAgICAgICAgICAgIGVkaXRvck1lbnVBY3RpdmUsXG4gICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICBob3ZlckluZm9cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoZWRpdG9yQ3Vyc29yKSByZXR1cm4gZWRpdG9yQ3Vyc29yO1xuXG4gICAgICAgICAgaWYgKGlzRHJhZ2dpbmcpIHJldHVybiAnZ3JhYmJpbmcnO1xuICAgICAgICAgIGlmIChob3ZlckluZm8/LmxheWVyKSByZXR1cm4gJ3BvaW50ZXInO1xuICAgICAgICAgIHJldHVybiAnZ3JhYic7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVmZmVjdHMgPSB0aGlzLl9pc09LVG9SZW5kZXJFZmZlY3RzKGluZGV4KVxuICAgICAgICA/IGNvbXB1dGVEZWNrRWZmZWN0cyh7dmlzU3RhdGUsIG1hcFN0YXRlLCBpc0V4cG9ydDogdGhpcy5wcm9wcy5pc0V4cG9ydH0pXG4gICAgICAgIDogW107XG5cbiAgICAgIGNvbnN0IGlzR2xvYmVNb2RlID0gbWFwU3RhdGUuZ2xvYmU/LmVuYWJsZWQ7XG5cbiAgICAgIC8vIEluIGdsb2JlIG1vZGUgd2l0aCBhIG5vbi1kZWZhdWx0IGJsZW5kIG1vZGUsIGZvcndhcmQgcHJlLWNvbXB1dGVkIGxheWVyXG4gICAgICAvLyByZW5kZXJpbmcgcGFyYW1ldGVycyBpbnRvIG1hcFN0YXRlIHNvIGluZGl2aWR1YWwgbGF5ZXJzIGNhbiBtZXJnZSB0aGVtIGludG9cbiAgICAgIC8vIHRoZWlyIG93biBwYXJhbWV0ZXJzIG9iamVjdHMuIFRoZSBnbG9iYWwgRGVja0dMIHBhcmFtZXRlcnMgY2Fubm90IGJlIHVzZWQgaW5cbiAgICAgIC8vIGdsb2JlIG1vZGUgYmVjYXVzZSB0aGV5IGFyZSBtZXJnZWQgaW50byBnbG9iZSBzeXN0ZW0gbGF5ZXJzIChhdG1vc3BoZXJlLFxuICAgICAgLy8gc3VyZmFjZSwgZXRjLikgYW5kIGFsdGVyIHRoZWlyIGNhcmVmdWxseSB0dW5lZCBibGVuZC9kZXB0aCBzdGF0ZS5cbiAgICAgIC8vICdub3JtYWwnIGlzIG9taXR0ZWQg4oCUIGl0IGlzIHRoZSBXZWJHTCBkZWZhdWx0IGFuZCBpbmplY3RpbmcgaXQgd291bGRcbiAgICAgIC8vIG92ZXJyaWRlIGludGVudGlvbmFsIGJsZW5kOmZhbHNlIHNldHRpbmdzIG9uIGxheWVycyBsaWtlIHRyaXAvc2NlbmVncmFwaC5cbiAgICAgIGNvbnN0IGxheWVyQmxlbmRpbmdQYXJhbXMgPVxuICAgICAgICBpc0dsb2JlTW9kZSAmJiB2aXNTdGF0ZS5sYXllckJsZW5kaW5nICYmIHZpc1N0YXRlLmxheWVyQmxlbmRpbmcgIT09ICdub3JtYWwnXG4gICAgICAgICAgPyBnZXRMYXllckJsZW5kaW5nUGFyYW1ldGVycyh2aXNTdGF0ZS5sYXllckJsZW5kaW5nKVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZGVja0xheWVyc01hcFN0YXRlID0gbGF5ZXJCbGVuZGluZ1BhcmFtc1xuICAgICAgICA/IHsuLi5pbnRlcm5hbE1hcFN0YXRlLCBsYXllclBhcmFtZXRlcnM6IGxheWVyQmxlbmRpbmdQYXJhbXN9XG4gICAgICAgIDogaW50ZXJuYWxNYXBTdGF0ZTtcblxuICAgICAgY29uc3QgZGVja0dsTGF5ZXJzID0gZ2VuZXJhdGVEZWNrR0xMYXllcnNNZXRob2QoXG4gICAgICAgIHtcbiAgICAgICAgICB2aXNTdGF0ZSxcbiAgICAgICAgICBtYXBTdGF0ZTogZGVja0xheWVyc01hcFN0YXRlLFxuICAgICAgICAgIG1hcFN0eWxlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBtYXBJbmRleDogaW5kZXgsXG4gICAgICAgICAgcHJpbWFyeU1hcCxcbiAgICAgICAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgICAgICAgICBtYXBib3hBcGlVcmwsXG4gICAgICAgICAgbGF5ZXJzRm9yRGVjayxcbiAgICAgICAgICBlZGl0b3JJbmZvOiBwcmltYXJ5TWFwXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICAgICAgZWRpdG9yTWVudUFjdGl2ZSxcbiAgICAgICAgICAgICAgICBvblNldEZlYXR1cmVzOiBzZXRGZWF0dXJlcyxcbiAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZEZlYXR1cmUsXG4gICAgICAgICAgICAgICAgb25BcHBseVBvbHlnb25GaWx0ZXJBbGw6IHZpc1N0YXRlQWN0aW9ucy5zZXRQb2x5Z29uRmlsdGVyQWxsTGF5ZXJzLFxuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgQXJndW1lbnQgb2YgdHlwZSAnUmVhZG9ubHk8TWFwQ29udGFpbmVyUHJvcHM+JyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAnbmV2ZXInXG4gICAgICAgICAgICAgICAgZmVhdHVyZUNvbGxlY3Rpb246IHRoaXMuZmVhdHVyZUNvbGxlY3Rpb25TZWxlY3Rvcih0aGlzLnByb3BzKSxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEZlYXR1cmVJbmRleGVzOiB0aGlzLnNlbGVjdGVkRmVhdHVyZUluZGV4QXJyYXlTZWxlY3RvcihcbiAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgQXJndW1lbnQgb2YgdHlwZSAndW5rbm93bicgaXMgbm90IGFzc2lnbmFibGUgdG8gcGFyYW1ldGVyIG9mIHR5cGUgJ251bWJlcicuXG4gICAgICAgICAgICAgICAgICBlZGl0b3JGZWF0dXJlU2VsZWN0ZWRJbmRleFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgdmlld3BvcnRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG9uTGF5ZXJIb3ZlcjogdGhpcy5fb25MYXllckhvdmVyLFxuICAgICAgICAgIG9uU2V0TGF5ZXJEb21haW46IHRoaXMuX29uTGF5ZXJTZXREb21haW4sXG4gICAgICAgICAgb25GaWx0ZXJlZEl0ZW1zQ2hhbmdlOiB0aGlzLl9vbkxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZSxcbiAgICAgICAgICBvbldNU0ZlYXR1cmVJbmZvOiB0aGlzLl9vbldNU0ZlYXR1cmVJbmZvLFxuICAgICAgICAgIG9uUmVkcmF3TmVlZGVkOiB0aGlzLl9vblJlZHJhd05lZWRlZCxcbiAgICAgICAgICBvbkZpdEJvdW5kczogdGhpcy5fb25GaXRCb3VuZHNcbiAgICAgICAgfSxcbiAgICAgICAgZGVja0dsUHJvcHNcbiAgICAgICk7XG5cbiAgICAgIC8vIEZvbGxvdyB0aGUgc2VsZWN0ZWQgYmFzZW1hcCBzdHlsZSdzIGxpYnJhcnkgc28gdGhlIGdsb2JlIHVzZXMgdGhlIHNhbWVcbiAgICAgIC8vIHByb3ZpZGVyIGFzIHRoZSBmbGF0IDJEIG1hcCAoQ0FSVE8gdGlsZXMgZm9yIE1hcExpYnJlIHN0eWxlcywgTWFwYm94XG4gICAgICAvLyB0aWxlcyBmb3IgTWFwYm94IHN0eWxlcykuXG4gICAgICBjb25zdCBnbG9iZUJhc2VtYXBQcm92aWRlciA9IHJlc29sdmVHbG9iZUJhc2VtYXBQcm92aWRlcihcbiAgICAgICAgZ2V0QmFzZU1hcExpYnJhcnkobWFwU3R5bGU/Lm1hcFN0eWxlcz8uW21hcFN0eWxlPy5zdHlsZVR5cGVdKSxcbiAgICAgICAgbWFwYm94QXBpQWNjZXNzVG9rZW4gfHwgJydcbiAgICAgICk7XG5cbiAgICAgIC8vIEluIGdsb2JlIG1vZGUsIHByZXBlbmQgZ2xvYmUgYmFzZSBsYXllcnMgYW5kIGFwcGVuZCB0b3AgbGF5ZXJzXG4gICAgICBjb25zdCBnbG9iZUJhc2VMYXllcnMgPVxuICAgICAgICBpc0dsb2JlTW9kZSAmJiBtYXBTdGF0ZS5nbG9iZVxuICAgICAgICAgID8gZ2V0R2xvYmVCYXNlTGF5ZXJzKHtcbiAgICAgICAgICAgICAgbWFwYm94QXBpQWNjZXNzVG9rZW46IG1hcGJveEFwaUFjY2Vzc1Rva2VuIHx8ICcnLFxuICAgICAgICAgICAgICBnbG9iZTogbWFwU3RhdGUuZ2xvYmUsXG4gICAgICAgICAgICAgIG1hcFN0eWxlVHlwZTogbWFwU3R5bGU/LnN0eWxlVHlwZSxcbiAgICAgICAgICAgICAgYmFzZW1hcFByb3ZpZGVyOiBnbG9iZUJhc2VtYXBQcm92aWRlcixcbiAgICAgICAgICAgICAgLy8gVXNlIHRoZSBsaXZlIChpbnRlcm5hbCkgbGF0aXR1ZGUgc28gdGhlIHRpbGUgTE9EIGNvbXBlbnNhdGlvblxuICAgICAgICAgICAgICAvLyBzdGF5cyBpbiBzeW5jIHdpdGggdGhlIGRlY2sgdmlld3BvcnQgZHVyaW5nIGEgZHJhZzsgbWFwU3RhdGVcbiAgICAgICAgICAgICAgLy8gbGF0aXR1ZGUgbGFncyBiZWhpbmQgd2hpbGUgcm90YXRpbmcuXG4gICAgICAgICAgICAgIGxhdGl0dWRlOiBpbnRlcm5hbE1hcFN0YXRlLmxhdGl0dWRlLFxuICAgICAgICAgICAgICB6b29tOiBpbnRlcm5hbE1hcFN0YXRlLnpvb21cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBbXTtcbiAgICAgIGNvbnN0IGdsb2JlVG9wTGF5ZXJzID1cbiAgICAgICAgaXNHbG9iZU1vZGUgJiYgbWFwU3RhdGUuZ2xvYmVcbiAgICAgICAgICA/IGdldEdsb2JlVG9wTGF5ZXJzKHtnbG9iZTogbWFwU3RhdGUuZ2xvYmUsIHpvb206IGludGVybmFsTWFwU3RhdGUuem9vbX0pXG4gICAgICAgICAgOiBbXTtcbiAgICAgIGNvbnN0IGZpbmFsRGVja0dsTGF5ZXJzID0gaXNHbG9iZU1vZGVcbiAgICAgICAgPyBbLi4uZ2xvYmVCYXNlTGF5ZXJzLCAuLi5kZWNrR2xMYXllcnMsIC4uLmdsb2JlVG9wTGF5ZXJzXVxuICAgICAgICA6IGRlY2tHbExheWVycztcblxuICAgICAgY29uc3Qgdmlld3MgPSBkZWNrR2xQcm9wcz8udmlld3NcbiAgICAgICAgPyBkZWNrR2xQcm9wcz8udmlld3MoKVxuICAgICAgICA6IGlzR2xvYmVNb2RlXG4gICAgICAgID8gbmV3IEtlcGxlckdsb2JlVmlldyh7XG4gICAgICAgICAgICByZXNvbHV0aW9uOiA1LFxuICAgICAgICAgICAgLy8gVGhlIHZpc2libGUgYmFja2dyb3VuZCBhcm91bmQgdGhlIGdsb2JlIGlzIHBhaW50ZWQgYnkgdGhlIG1hcFxuICAgICAgICAgICAgLy8gY29udGFpbmVyJ3MgQ1NTIGJhY2tncm91bmQgKHNlZSBzdHlsZVNlbGVjdG9yKSwgTk9UIGJ5IGEgcGVyLXZpZXdcbiAgICAgICAgICAgIC8vIGNvbG9yIGNsZWFyLiBkZWNrLmdsIGFwcGxpZXMgYSBWaWV3J3MgYGNsZWFyQ29sb3JgIGluICpldmVyeSogcGFzcyxcbiAgICAgICAgICAgIC8vIGluY2x1ZGluZyB0aGUgcGlja2luZyBwYXNzLCBhbmQgaXQgZm9yY2VzIHRoZSBjbGVhcmVkIGFscGhhIHRvIDI1NVxuICAgICAgICAgICAgLy8gKGBjbGVhckNvbG9yWzNdIHx8IDI1NWApLiBJbiB0aGUgcGlja2luZyBidWZmZXIgdGhlIGFscGhhIGJ5dGUgZW5jb2Rlc1xuICAgICAgICAgICAgLy8gdGhlIGxheWVyIGluZGV4LCBzbyBhIDI1NSBjbGVhciBtYWtlcyBkZWNrLmdsIGRlY29kZSBldmVyeSBwaXhlbCBhcyBhXG4gICAgICAgICAgICAvLyBub24tZXhpc3RlbnQgbGF5ZXIgKFwiUGlja2VkIG5vbi1leGlzdGVudCBsYXllci4gSXMgcGlja2luZyBidWZmZXJcbiAgICAgICAgICAgIC8vIGNvcnJ1cHQ/XCIpIG9uIGhvdmVyLiBgY2xlYXJDb2xvcjogZmFsc2VgIHNraXBzIHRoZSBwZXItdmlldyBjb2xvclxuICAgICAgICAgICAgLy8gY2xlYXIgc28gdGhlIHBpY2tpbmcgYnVmZmVyIGtlZXBzIGl0cyAwIGFscGhhOyB0aGUgY2FudmFzIHN0YXlzXG4gICAgICAgICAgICAvLyB0cmFuc3BhcmVudCBhbmQgdGhlIENTUyBiYWNrZ3JvdW5kIHNob3dzIHRocm91Z2guXG4gICAgICAgICAgICBjbGVhcjogdHJ1ZSxcbiAgICAgICAgICAgIGNsZWFyQ29sb3I6IGZhbHNlXG4gICAgICAgICAgfSlcbiAgICAgICAgOiBuZXcgTWFwVmlldyh7ZmFyWk11bHRpcGxpZXI6IDEuMn0pO1xuXG4gICAgICBsZXQgYWxsRGVja0dsUHJvcHMgPSB7XG4gICAgICAgIC4uLmRlY2tHbFByb3BzLFxuICAgICAgICBwaWNraW5nUmFkaXVzOiBERUZBVUxUX1BJQ0tJTkdfUkFESVVTLFxuICAgICAgICB2aWV3cyxcbiAgICAgICAgbGF5ZXJzOiBmaW5hbERlY2tHbExheWVycyxcbiAgICAgICAgZWZmZWN0cyxcbiAgICAgICAgcGFyYW1ldGVyczogaXNHbG9iZU1vZGUgPyB7Y3VsbDogdHJ1ZX0gOiBnZXRMYXllckJsZW5kaW5nUGFyYW1ldGVycyh2aXNTdGF0ZS5sYXllckJsZW5kaW5nKVxuICAgICAgfTtcblxuICAgICAgaWYgKHR5cGVvZiBkZWNrUmVuZGVyQ2FsbGJhY2tzPy5vbkRlY2tSZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgYWxsRGVja0dsUHJvcHMgPSBkZWNrUmVuZGVyQ2FsbGJhY2tzLm9uRGVja1JlbmRlcihhbGxEZWNrR2xQcm9wcyk7XG4gICAgICAgIGlmICghYWxsRGVja0dsUHJvcHMpIHtcbiAgICAgICAgICAvLyBpZiBvbkRlY2tSZW5kZXIgcmV0dXJucyBudWxsLCBkbyBub3QgcmVuZGVyIGRlY2suZ2xcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgey4uLihpc0ludGVyYWN0aXZlXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBvbk1vdXNlTW92ZTogcHJpbWFyeU1hcFxuICAgICAgICAgICAgICAgICAgPyBldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgb25Nb3VzZU1vdmU/LihldmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25Nb3VzZU1vdmVEZWJvdW5jZWQoZXZlbnQsIHZpZXdwb3J0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7c3R5bGU6IHtwb2ludGVyRXZlbnRzOiAnbm9uZSd9fSl9XG4gICAgICAgID5cbiAgICAgICAgICA8RGVja0dMXG4gICAgICAgICAgICBpZD1cImRlZmF1bHQtZGVja2dsLW92ZXJsYXlcIlxuICAgICAgICAgICAgb25Mb2FkPXsoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgZGVja1JlbmRlckNhbGxiYWNrcz8ub25EZWNrTG9hZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGRlY2tSZW5kZXJDYWxsYmFja3Mub25EZWNrTG9hZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgey4uLmFsbERlY2tHbFByb3BzfVxuICAgICAgICAgICAgY29udHJvbGxlcj17XG4gICAgICAgICAgICAgIGlzSW50ZXJhY3RpdmVcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgZG91YmxlQ2xpY2tab29tOiAhaXNFZGl0b3JEcmF3aW5nTW9kZSxcbiAgICAgICAgICAgICAgICAgICAgZHJhZ1JvdGF0ZTogdGhpcy5wcm9wcy5tYXBTdGF0ZS5kcmFnUm90YXRlLFxuICAgICAgICAgICAgICAgICAgICBtYXhQaXRjaDogdGhpcy5wcm9wcy5tYXBTdGF0ZS5tYXhQaXRjaCA/PyBnZXRBcHBsaWNhdGlvbkNvbmZpZygpLm1heFBpdGNoLFxuICAgICAgICAgICAgICAgICAgICAvLyBJbiBnbG9iZSBtb2RlIGFsbG93IHpvb21pbmcgb3V0IGZ1cnRoZXIgdGhhbiBkZWNrLmdsJ3MgZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAvLyBvZiAwIHNvIHRoZSB3aG9sZSBnbG9iZSBjYW4gYmUgcHVsbGVkIGJhY2sgb24gc2NyZWVuLiBTZXQgb24gdGhlXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnRyb2xsZXIgc28gaXQgc3RheXMgYXV0aG9yaXRhdGl2ZSByZWdhcmRsZXNzIG9mIHRoZSB2aWV3U3RhdGVcbiAgICAgICAgICAgICAgICAgICAgLy8gcm91bmQtdHJpcCB0aHJvdWdoIFJlZHV4L2xvY2FsIGNvbnRleHQuIENhcCB0aGUgbWF4IHpvb20gdG9vIHNvXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBiYXNlbWFwIHRpbGVzIGRvbid0IGJyZWFrIGRvd24gYXQgaGlnaCBnbG9iZSB6b29tLlxuICAgICAgICAgICAgICAgICAgICAuLi4oaXNHbG9iZU1vZGUgPyB7bWluWm9vbTogR0xPQkVfTUlOX1pPT00sIG1heFpvb206IEdMT0JFX01BWF9aT09NfSA6IHt9KVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZpZXdTdGF0ZT17XG4gICAgICAgICAgICAgIGlzR2xvYmVNb2RlXG4gICAgICAgICAgICAgICAgPyB7Li4uaW50ZXJuYWxWaWV3U3RhdGUsIG1pblpvb206IEdMT0JFX01JTl9aT09NLCBtYXhab29tOiBHTE9CRV9NQVhfWk9PTX1cbiAgICAgICAgICAgICAgICA6IGludGVybmFsVmlld1N0YXRlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvbkJlZm9yZVJlbmRlcj17dGhpcy5fb25CZWZvcmVSZW5kZXJ9XG4gICAgICAgICAgICBvblZpZXdTdGF0ZUNoYW5nZT17aXNJbnRlcmFjdGl2ZSA/IHRoaXMuX29uVmlld3BvcnRDaGFuZ2UgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICB7Li4uZXh0cmFEZWNrUGFyYW1zfVxuICAgICAgICAgICAgb25Ib3Zlcj17XG4gICAgICAgICAgICAgIGlzSW50ZXJhY3RpdmVcbiAgICAgICAgICAgICAgICA/IGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBFZGl0b3JMYXllclV0aWxzLm9uSG92ZXIoZGF0YSwge1xuICAgICAgICAgICAgICAgICAgICAgIGVkaXRvck1lbnVBY3RpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgICAgICAgICAgICAgIGhvdmVySW5mb1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcykgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uTGF5ZXJIb3ZlckRlYm91bmNlZChkYXRhLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvbkNsaWNrPXsoZGF0YSwgZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICBub3JtYWxpemVFdmVudChldmVudC5zcmNFdmVudCwgdmlld3BvcnQpO1xuXG4gICAgICAgICAgICAgIC8vIEhhbmRsZSBiaXRtYXAgbGF5ZXIgYWxpZ25tZW50IG1vZGU6IGlmIGEgYml0bWFwIGxheWVyIGlzIHdhaXRpbmdcbiAgICAgICAgICAgICAgLy8gZm9yIGEgbWFwIGNsaWNrLCByb3V0ZSB0aGUgY2xpY2sgY29vcmRpbmF0ZSB0byBpdFxuICAgICAgICAgICAgICBpZiAoZGF0YS5jb29yZGluYXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWxpZ25pbmdMYXllciA9IHZpc1N0YXRlLmxheWVycy5maW5kKFxuICAgICAgICAgICAgICAgICAgKGw6IGFueSkgPT4gbC50eXBlID09PSAnYml0bWFwJyAmJiBsLmFsaWduV2FpdGluZ0Zvck1hcCAmJiBsLmNvbmZpZy5pc1Zpc2libGVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChhbGlnbmluZ0xheWVyKSB7XG4gICAgICAgICAgICAgICAgICAoYWxpZ25pbmdMYXllciBhcyBhbnkpLm9uQWxpZ25NYXBDbGljayhkYXRhLmNvb3JkaW5hdGUgYXMgW251bWJlciwgbnVtYmVyXSk7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9vblJlZHJhd05lZWRlZCgwKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCByZXMgPSBFZGl0b3JMYXllclV0aWxzLm9uQ2xpY2soZGF0YSwgZXZlbnQsIHtcbiAgICAgICAgICAgICAgICBlZGl0b3JNZW51QWN0aXZlLFxuICAgICAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgICAgICBvbkxheWVyQ2xpY2ssXG4gICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRGZWF0dXJlLFxuICAgICAgICAgICAgICAgIG1hcEluZGV4OiBpbmRleFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgaWYgKHJlcykgcmV0dXJuO1xuXG4gICAgICAgICAgICAgIHZpc1N0YXRlQWN0aW9ucy5vbkxheWVyQ2xpY2soZGF0YSk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25FcnJvcj17dGhpcy5fb25EZWNrRXJyb3J9XG4gICAgICAgICAgICByZWY9e2NvbXAgPT4ge1xuICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgIGlmIChjb21wICYmIGNvbXAuZGVjayAmJiAhdGhpcy5fZGVjaykge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWNrID0gY29tcC5kZWNrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25EZXZpY2VJbml0aWFsaXplZD17ZGV2aWNlID0+IHRoaXMuX29uRGVja0luaXRpYWxpemVkKGRldmljZSl9XG4gICAgICAgICAgICBvbkFmdGVyUmVuZGVyPXsoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgZGVja1JlbmRlckNhbGxiYWNrcz8ub25EZWNrQWZ0ZXJSZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBkZWNrUmVuZGVyQ2FsbGJhY2tzLm9uRGVja0FmdGVyUmVuZGVyKGFsbERlY2tHbFByb3BzKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IGFueUFjdGl2ZUxheWVyTG9hZGluZyA9IGFyZUFueURlY2tMYXllcnNMb2FkaW5nKGFsbERlY2tHbFByb3BzLmxheWVycyk7XG4gICAgICAgICAgICAgIGlmIChhbnlBY3RpdmVMYXllckxvYWRpbmcgIT09IHRoaXMuYW55QWN0aXZlTGF5ZXJMb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb25MYXllckxvYWRpbmdTdGF0ZUNoYW5nZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuYW55QWN0aXZlTGF5ZXJMb2FkaW5nID0gYW55QWN0aXZlTGF5ZXJMb2FkaW5nO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICA8L0RlY2tHTD5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cblxuICAgIF91cGRhdGVNYXBib3hMYXllcnMoKSB7XG4gICAgICBjb25zdCBtYXBib3hMYXllcnMgPSB0aGlzLm1hcGJveExheWVyc1NlbGVjdG9yKHRoaXMucHJvcHMpO1xuICAgICAgaWYgKCFPYmplY3Qua2V5cyhtYXBib3hMYXllcnMpLmxlbmd0aCAmJiAhT2JqZWN0LmtleXModGhpcy5wcmV2aW91c0xheWVycykubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdXBkYXRlTWFwYm94TGF5ZXJzKHRoaXMuX21hcCwgbWFwYm94TGF5ZXJzLCB0aGlzLnByZXZpb3VzTGF5ZXJzKTtcblxuICAgICAgdGhpcy5wcmV2aW91c0xheWVycyA9IG1hcGJveExheWVycztcbiAgICB9XG5cbiAgICBfcmVuZGVyTWFwYm94T3ZlcmxheXMoKSB7XG4gICAgICBpZiAodGhpcy5fbWFwICYmIHRoaXMuX21hcC5pc1N0eWxlTG9hZGVkKCkpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlTWFwYm94TGF5ZXJzKCk7XG4gICAgICB9XG4gICAgfVxuICAgIF9vblZpZXdwb3J0Q2hhbmdlUHJvcGFnYXRlRGVib3VuY2VkID0gZGVib3VuY2UoKCkgPT4ge1xuICAgICAgY29uc3Qgdmlld1N0YXRlID0gdGhpcy5jb250ZXh0Py5nZXRJbnRlcm5hbFZpZXdTdGF0ZSh0aGlzLnByb3BzLmluZGV4KTtcbiAgICAgIG9uVmlld1BvcnRDaGFuZ2UoXG4gICAgICAgIHZpZXdTdGF0ZSxcbiAgICAgICAgdGhpcy5wcm9wcy5tYXBTdGF0ZUFjdGlvbnMudXBkYXRlTWFwLFxuICAgICAgICB0aGlzLnByb3BzLm9uVmlld1N0YXRlQ2hhbmdlLFxuICAgICAgICB0aGlzLnByb3BzLnByaW1hcnksXG4gICAgICAgIHRoaXMucHJvcHMuaW5kZXhcbiAgICAgICk7XG4gICAgfSwgREVCT1VOQ0VfVklFV1BPUlRfUFJPUEFHQVRFKTtcblxuICAgIF9vblZpZXdwb3J0Q2hhbmdlID0gdmlld3BvcnQgPT4ge1xuICAgICAgY29uc3Qge3ZpZXdTdGF0ZSwgaW50ZXJhY3Rpb25TdGF0ZX0gPSB2aWV3cG9ydDtcbiAgICAgIGlmICh0aGlzLnByb3BzLmlzRXhwb3J0KSB7XG4gICAgICAgIC8vIEltYWdlIGV4cG9ydCBtYXAgc2hvdWxkbid0IGJlIGludGVyYWN0aXZlIChvdGhlcndpc2UgdGhpcyBjYWxsYmFjayBjYW5cbiAgICAgICAgLy8gbGVhZCB0byBpbmFkdmVydGVudCBjaGFuZ2VzIHRvIHRoZSBzdGF0ZSBvZiB0aGUgbWFpbiBtYXApXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHtzZXRJbnRlcm5hbFZpZXdTdGF0ZX0gPSB0aGlzLmNvbnRleHQ7XG5cbiAgICAgIC8vIEZsYXQgbWFwICgyRC8zRCk6IGtlZXAgdGhlIG9yaWdpbmFsLCBhbHdheXMtc3luY2hyb25vdXMgYmVoYXZpb3IuIFRoZVxuICAgICAgLy8gaW50ZXJhY3Rpb24tYXdhcmUgdGltaW5nIGJlbG93IGV4aXN0cyBwdXJlbHkgdG8gZml4IGdsb2JlLXNwZWNpZmljXG4gICAgICAvLyBjb250cm9sbGVkLXZpZXdTdGF0ZSwgc28gaXQgbXVzdCBub3QgY2hhbmdlIHRoZSBtYWluIDJEIGxvZ2ljLlxuICAgICAgaWYgKCF0aGlzLnByb3BzLm1hcFN0YXRlPy5nbG9iZT8uZW5hYmxlZCkge1xuICAgICAgICBzZXRJbnRlcm5hbFZpZXdTdGF0ZSh2aWV3U3RhdGUsIHRoaXMucHJvcHMuaW5kZXgpO1xuICAgICAgICB0aGlzLl93YXNJbnRlcmFjdGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9vblZpZXdwb3J0Q2hhbmdlUHJvcGFnYXRlRGVib3VuY2VkKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXNVc2VySW50ZXJhY3Rpb24gPVxuICAgICAgICBpbnRlcmFjdGlvblN0YXRlICYmXG4gICAgICAgIChpbnRlcmFjdGlvblN0YXRlLmlzWm9vbWluZyB8fFxuICAgICAgICAgIGludGVyYWN0aW9uU3RhdGUuaXNQYW5uaW5nIHx8XG4gICAgICAgICAgaW50ZXJhY3Rpb25TdGF0ZS5pc1JvdGF0aW5nIHx8XG4gICAgICAgICAgaW50ZXJhY3Rpb25TdGF0ZS5pc0RyYWdnaW5nIHx8XG4gICAgICAgICAgaW50ZXJhY3Rpb25TdGF0ZS5pblRyYW5zaXRpb24pO1xuICAgICAgLy8gVGhlIGVtaXQgdGhhdCBlbmRzIGEgZ2VzdHVyZSAocGFuZW5kL3JvdGF0ZUVuZCwgb3IgYSBmbGluZyB0cmFuc2l0aW9uXG4gICAgICAvLyBlbmRpbmcpIGFycml2ZXMgd2l0aCBhbGwgaW50ZXJhY3Rpb24gZmxhZ3MgZmFsc2UuIElmIHdlIGRlZmVyIGl0LCB0aGVcbiAgICAgIC8vIGNvbnRyb2xsZWQgYHZpZXdTdGF0ZWAgZmVkIGJhY2sgdG8gZGVjayBsYWdzIGEgZnJhbWUgYmVoaW5kIHRoZVxuICAgICAgLy8gY29udHJvbGxlcidzIGNvbW1pdHRlZCBzdGF0ZSBhbmQgZGVjayByZS1zZWVkcyBmcm9tIHRoZSBzdGFsZSB2YWx1ZSxcbiAgICAgIC8vIG1ha2luZyB0aGUgZ2xvYmUgdmlzaWJseSBcImp1bXAgYmFja1wiIHRvIHdoZXJlIHRoZSBkcmFnIHdhcyByZWxlYXNlZCAtXG4gICAgICAvLyBtb3N0IG5vdGljZWFibGUgb24gYSB0aHJvdy9mbGluZyByZWxlYXNlLiBUcmVhdCB0aGUgZmlyc3QgYWxsLWZhbHNlIGVtaXRcbiAgICAgIC8vIHJpZ2h0IGFmdGVyIGFuIGFjdGl2ZSBnZXN0dXJlIGFzIHBhcnQgb2YgdGhhdCBnZXN0dXJlIGFuZCBhcHBseSBpdFxuICAgICAgLy8gc3luY2hyb25vdXNseSB0b28uXG4gICAgICBjb25zdCBpc0ludGVyYWN0aW9uU2V0dGxlID0gIWlzVXNlckludGVyYWN0aW9uICYmIHRoaXMuX3dhc0ludGVyYWN0aW5nO1xuICAgICAgdGhpcy5fd2FzSW50ZXJhY3RpbmcgPSBCb29sZWFuKGlzVXNlckludGVyYWN0aW9uKTtcbiAgICAgIGlmIChpc1VzZXJJbnRlcmFjdGlvbiB8fCBpc0ludGVyYWN0aW9uU2V0dGxlKSB7XG4gICAgICAgIC8vIEZvciBpbnRlcmFjdGl2ZSBnZXN0dXJlcyAocGFuL3pvb20vcm90YXRlKSBhbmQgdGhlaXIgZW5kLW9mLWdlc3R1cmVcbiAgICAgICAgLy8gc2V0dGxlLCB1cGRhdGUgc3luY2hyb25vdXNseSBzbyB0aGUgY29udHJvbGxlZCBgdmlld1N0YXRlYCBzdGF5cyBpblxuICAgICAgICAvLyBsb2Nrc3RlcCB3aXRoIHRoZSBjb250cm9sbGVyIGFuZCB0aGVyZSdzIG5vIHN0YWxlIHJlLXNlZWQuXG4gICAgICAgIHNldEludGVybmFsVmlld1N0YXRlKHZpZXdTdGF0ZSwgdGhpcy5wcm9wcy5pbmRleCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBkZWNrLmdsIGNhbiBmaXJlIG9uVmlld1N0YXRlQ2hhbmdlIHN5bmNocm9ub3VzbHkgZHVyaW5nIGl0cyBvd24gcmVuZGVyXG4gICAgICAgIC8vIChlLmcuIHdoZW4gc3dpdGNoaW5nIHZpZXcgdHlwZXMgbGlrZSBNYXBWaWV3IC0+IEdsb2JlVmlldykuIFVwZGF0aW5nIFJlYWN0XG4gICAgICAgIC8vIHN0YXRlIGR1cmluZyByZW5kZXIgdGhyb3dzIGEgd2FybmluZywgc28gZGVmZXIgbm9uLWludGVyYWN0aXZlIHVwZGF0ZXMuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHNldEludGVybmFsVmlld1N0YXRlKHZpZXdTdGF0ZSwgdGhpcy5wcm9wcy5pbmRleCk7XG4gICAgICAgIH0sIDApO1xuICAgICAgfVxuICAgICAgdGhpcy5fb25WaWV3cG9ydENoYW5nZVByb3BhZ2F0ZURlYm91bmNlZCgpO1xuICAgIH07XG5cbiAgICBfb25MYXllckhvdmVyRGVib3VuY2VkID0gZGVib3VuY2UoKGRhdGEsIGluZGV4KSA9PiB7XG4gICAgICB0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5vbkxheWVySG92ZXIoZGF0YSwgaW5kZXgpO1xuICAgIH0sIERFQk9VTkNFX01PVVNFX01PVkVfUFJPUEFHQVRFKTtcblxuICAgIF9vbk1vdXNlTW92ZURlYm91bmNlZCA9IGRlYm91bmNlKChldmVudCwgdmlld3BvcnQpID0+IHtcbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLm9uTW91c2VNb3ZlKG5vcm1hbGl6ZUV2ZW50KGV2ZW50LCB2aWV3cG9ydCkpO1xuICAgIH0sIERFQk9VTkNFX01PVVNFX01PVkVfUFJPUEFHQVRFKTtcblxuICAgIF9vbkxheWVyTG9hZGluZ1N0YXRlQ2hhbmdlID0gZGVib3VuY2UoKCkgPT4ge1xuICAgICAgLy8gdHJpZ2dlciBsb2FkaW5nIGluZGljYXRvciB1cGRhdGUgd2l0aG91dCBhbnkgY2hhbmdlIHRvIHVwZGF0ZSBVSVxuICAgICAgdGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMuc2V0TG9hZGluZ0luZGljYXRvcih7Y2hhbmdlOiAwfSk7XG4gICAgfSwgREVCT1VOQ0VfTE9BRElOR19TVEFURV9QUk9QQUdBVEUpO1xuXG4gICAgX2hhbmRsZVRvZ2dsZUxheWVyVmlzaWJpbGl0eSA9IChsYXllcjogTGF5ZXIpID0+IHtcbiAgICAgIGNvbnN0IHt2aXNTdGF0ZUFjdGlvbnN9ID0gdGhpcy5wcm9wcztcbiAgICAgIHZpc1N0YXRlQWN0aW9ucy5sYXllckNvbmZpZ0NoYW5nZShsYXllciwge2lzVmlzaWJsZTogIWxheWVyLmNvbmZpZy5pc1Zpc2libGV9KTtcbiAgICB9O1xuXG4gICAgX3RvZ2dsZU1hcENvbnRyb2wgPSBwYW5lbElkID0+IHtcbiAgICAgIGNvbnN0IHtpbmRleCwgdWlTdGF0ZUFjdGlvbnN9ID0gdGhpcy5wcm9wcztcblxuICAgICAgdWlTdGF0ZUFjdGlvbnMudG9nZ2xlTWFwQ29udHJvbChwYW5lbElkLCBOdW1iZXIoaW5kZXgpKTtcbiAgICB9O1xuXG4gICAgLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuICAgIF9yZW5kZXJNYXAoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHZpc1N0YXRlLFxuICAgICAgICBtYXBTdGF0ZSxcbiAgICAgICAgbWFwU3R5bGUsXG4gICAgICAgIG1hcFN0YXRlQWN0aW9ucyxcbiAgICAgICAgbWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gICAgICAgIC8vIG1hcGJveEFwaVVybCxcbiAgICAgICAgbWFwQ29udHJvbHMsXG4gICAgICAgIGlzRXhwb3J0LFxuICAgICAgICBsb2NhbGUsXG4gICAgICAgIHVpU3RhdGVBY3Rpb25zLFxuICAgICAgICB2aXNTdGF0ZUFjdGlvbnMsXG4gICAgICAgIGluZGV4LFxuICAgICAgICBwcmltYXJ5LFxuICAgICAgICBib3R0b21NYXBDb250YWluZXJQcm9wcyxcbiAgICAgICAgdG9wTWFwQ29udGFpbmVyUHJvcHMsXG4gICAgICAgIHRoZW1lLFxuICAgICAgICBkYXRhc2V0QXR0cmlidXRpb25zID0gW10sXG4gICAgICAgIGF0dHJpYnV0aW9uTG9nb3MgPSBbXSxcbiAgICAgICAgY29udGFpbmVySWQgPSAwLFxuICAgICAgICBpc0xvYWRpbmdJbmRpY2F0b3JWaXNpYmxlLFxuICAgICAgICBhY3RpdmVTaWRlUGFuZWwsXG4gICAgICAgIHNpZGVQYW5lbFdpZHRoXG4gICAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgY29uc3Qge2xheWVycywgZGF0YXNldHMsIGVkaXRvciwgaW50ZXJhY3Rpb25Db25maWcsIGxheWVyT3JkZXJ9ID0gdmlzU3RhdGU7XG5cbiAgICAgIGNvbnN0IGxheWVyc1RvUmVuZGVyID0gdGhpcy5sYXllcnNUb1JlbmRlclNlbGVjdG9yKHRoaXMucHJvcHMpO1xuICAgICAgY29uc3QgbGF5ZXJzRm9yRGVjayA9IHRoaXMubGF5ZXJzRm9yRGVja1NlbGVjdG9yKHRoaXMucHJvcHMpO1xuXG4gICAgICAvLyBDdXJyZW50IHN0eWxlIGNhbiBiZSBhIGN1c3RvbSBzdHlsZSwgZnJvbSB3aGljaCB3ZSBwdWxsIHRoZSBtYXBib3ggQVBJIGFjY2Nlc3MgdG9rZW5cbiAgICAgIGNvbnN0IGN1cnJlbnRTdHlsZSA9IG1hcFN0eWxlLm1hcFN0eWxlcz8uW21hcFN0eWxlLnN0eWxlVHlwZV07XG4gICAgICBjb25zdCBiYXNlTWFwTGlicmFyeU5hbWUgPSBnZXRCYXNlTWFwTGlicmFyeShjdXJyZW50U3R5bGUpO1xuICAgICAgY29uc3QgYmFzZU1hcExpYnJhcnlDb25maWcgPSBnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmJhc2VNYXBMaWJyYXJ5Q29uZmlnW2Jhc2VNYXBMaWJyYXJ5TmFtZV07XG5cbiAgICAgIC8vIFNlbGVjdCB0aGUgY29ycmVjdCBNYXAgYWRhcHRlciBiYXNlZCBvbiB0aGUgYWN0aXZlIGJhc2UgbWFwIGxpYnJhcnkuXG4gICAgICAvLyBVc2luZyB0aGUgbmF0aXZlIGFkYXB0ZXIgZm9yIGVhY2ggbGlicmFyeSBhdm9pZHMgVHJhbnNmb3JtIEFQSVxuICAgICAgLy8gaW5jb21wYXRpYmlsaXRpZXMgKGUuZy4gbWFwYm94LWxlZ2FjeSdzIGNsb25lVHJhbnNmb3JtIHdpdGggTWFwTGlicmUgdjUpLlxuICAgICAgY29uc3QgUmVzb2x2ZWRNYXBDb21wb25lbnQgPVxuICAgICAgICB0aGlzLnByb3BzLk1hcENvbXBvbmVudCA/P1xuICAgICAgICAoYmFzZU1hcExpYnJhcnlOYW1lID09PSBNQVBfTElCX09QVElPTlMuTUFQQk9YID8gTWFwYm94TGVnYWN5TWFwIDogTWFwbGlicmVNYXApO1xuXG4gICAgICBjb25zdCB1c2VNYXBib3hBZGFwdGVyID0gUmVzb2x2ZWRNYXBDb21wb25lbnQgPT09IE1hcGJveExlZ2FjeU1hcDtcblxuICAgICAgY29uc3QgaW50ZXJuYWxWaWV3U3RhdGUgPSB0aGlzLmNvbnRleHQ/LmdldEludGVybmFsVmlld1N0YXRlKGluZGV4KTtcbiAgICAgIGNvbnN0IGNvbmZpZ01heFBpdGNoID0gbWFwU3RhdGUubWF4UGl0Y2ggPz8gZ2V0QXBwbGljYXRpb25Db25maWcoKS5tYXhQaXRjaDtcbiAgICAgIGNvbnN0IGVmZmVjdGl2ZU1heFBpdGNoID0gdXNlTWFwYm94QWRhcHRlclxuICAgICAgICA/IE1hdGgubWluKGNvbmZpZ01heFBpdGNoLCBNQVBCT1hfTUFYX1BJVENIKVxuICAgICAgICA6IGNvbmZpZ01heFBpdGNoO1xuICAgICAgY29uc3QgbWFwUHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XG4gICAgICAgIC4uLmludGVybmFsVmlld1N0YXRlLFxuICAgICAgICBtYXhQaXRjaDogZWZmZWN0aXZlTWF4UGl0Y2gsXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogdGhpcy5wcm9wcy5pc0V4cG9ydCA/PyBmYWxzZSxcbiAgICAgICAgbWFwYm94QWNjZXNzVG9rZW46IGN1cnJlbnRTdHlsZT8uYWNjZXNzVG9rZW4gfHwgbWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gICAgICAgIC8vIGJhc2VBcGlVcmw6IG1hcGJveEFwaVVybCxcbiAgICAgICAgdHJhbnNmb3JtUmVxdWVzdDpcbiAgICAgICAgICB0aGlzLnByb3BzLnRyYW5zZm9ybVJlcXVlc3QgfHxcbiAgICAgICAgICB0cmFuc2Zvcm1SZXF1ZXN0KGN1cnJlbnRTdHlsZT8uYWNjZXNzVG9rZW4gfHwgbWFwYm94QXBpQWNjZXNzVG9rZW4pXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5wcm9wcy5SVExUZXh0UGx1Z2luICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbWFwUHJvcHMuUlRMVGV4dFBsdWdpbiA9IHRoaXMucHJvcHMuUlRMVGV4dFBsdWdpbjtcbiAgICAgIH1cblxuICAgICAgaWYgKHVzZU1hcGJveEFkYXB0ZXIpIHtcbiAgICAgICAgY29uc3QgbWFwYm94Q29uZmlnID0gZ2V0QXBwbGljYXRpb25Db25maWcoKS5iYXNlTWFwTGlicmFyeUNvbmZpZ1tNQVBfTElCX09QVElPTlMuTUFQQk9YXTtcbiAgICAgICAgbWFwUHJvcHMubWFwTGliID0gbWFwYm94Q29uZmlnLmdldE1hcExpYigpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBoYXNHZW9jb2RlckxheWVyID0gQm9vbGVhbihsYXllcnMuZmluZChsID0+IGwuaWQgPT09IEdFT0NPREVSX0xBWUVSX0lEKSk7XG4gICAgICBjb25zdCBpc1NwbGl0ID0gQm9vbGVhbihtYXBTdGF0ZS5pc1NwbGl0KTtcblxuICAgICAgY29uc3QgZGVjayA9IHRoaXMuX3JlbmRlckRlY2tPdmVybGF5KGxheWVyc0ZvckRlY2ssIHtcbiAgICAgICAgcHJpbWFyeU1hcDogdHJ1ZSxcbiAgICAgICAgaXNJbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgY2hpbGRyZW46IChcbiAgICAgICAgICA8UmVzb2x2ZWRNYXBDb21wb25lbnRcbiAgICAgICAgICAgIGtleT17YGJvdHRvbS0ke2Jhc2VNYXBMaWJyYXJ5TmFtZX1gfVxuICAgICAgICAgICAgey4uLm1hcFByb3BzfVxuICAgICAgICAgICAgbWFwU3R5bGU9e1xuICAgICAgICAgICAgICBtYXBTdGF0ZS5nbG9iZT8uZW5hYmxlZFxuICAgICAgICAgICAgICAgID8gRU1QVFlfTUFQQk9YX1NUWUxFXG4gICAgICAgICAgICAgICAgOiBtYXBTdHlsZS5ib3R0b21NYXBTdHlsZSA/PyBFTVBUWV9NQVBCT1hfU1RZTEVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHsuLi5ib3R0b21NYXBDb250YWluZXJQcm9wc31cbiAgICAgICAgICAgIHJlZj17dGhpcy5fc2V0TWFwUmVmfVxuICAgICAgICAgIC8+XG4gICAgICAgIClcbiAgICAgIH0pO1xuICAgICAgaWYgKCFkZWNrKSB7XG4gICAgICAgIC8vIGRlY2tPdmVybGF5IGNhbiBiZSBudWxsIGlmIG9uRGVja1JlbmRlciByZXR1cm5zIG51bGxcbiAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHdlIGRvbid0IHdhbnQgdG8gcmVuZGVyIHRoZSBtYXBcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICAvLyBJbiBzcGxpdCAoZHVhbCkgdmlldyBtb2RlLCBvbmx5IHJlbmRlciB0aGUgbWFwIGNvbnRyb2wgYnV0dG9ucyBvbiB0aGVcbiAgICAgIC8vIHJpZ2h0LXNpZGUgbWFwIChwcmltYXJ5ID09PSB0cnVlLCBpLmUuIGluZGV4ID09PSAxKS4gT3RoZXJ3aXNlIHRoZSBzYW1lXG4gICAgICAvLyBidXR0b25zIGFyZSBkdXBsaWNhdGVkIG9uIGJvdGggbWFwcyBhbmQgYW55IG9wZW5lZCBtZW51IGFwcGVhcnMgbWlycm9yZWQuXG4gICAgICBjb25zdCBzaG93TWFwQ29udHJvbCA9ICFpc1NwbGl0IHx8IEJvb2xlYW4ocHJpbWFyeSk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgIHtzaG93TWFwQ29udHJvbCAmJiAoXG4gICAgICAgICAgICA8TWFwQ29udHJvbFxuICAgICAgICAgICAgICBtYXBTdGF0ZT17bWFwU3RhdGV9XG4gICAgICAgICAgICAgIG1hcFN0YXRlQWN0aW9ucz17bWFwU3RhdGVBY3Rpb25zfVxuICAgICAgICAgICAgICBkYXRhc2V0cz17ZGF0YXNldHN9XG4gICAgICAgICAgICAgIGF2YWlsYWJsZUxvY2FsZXM9e0xPQ0FMRV9DT0RFU19BUlJBWX1cbiAgICAgICAgICAgICAgZHJhZ1JvdGF0ZT17bWFwU3RhdGUuZHJhZ1JvdGF0ZX1cbiAgICAgICAgICAgICAgaXNTcGxpdD17aXNTcGxpdH1cbiAgICAgICAgICAgICAgcHJpbWFyeT17Qm9vbGVhbihwcmltYXJ5KX1cbiAgICAgICAgICAgICAgaXNFeHBvcnQ9e2lzRXhwb3J0fVxuICAgICAgICAgICAgICBsYXllcnM9e2xheWVyc31cbiAgICAgICAgICAgICAgbGF5ZXJPcmRlcj17bGF5ZXJPcmRlcn1cbiAgICAgICAgICAgICAgbGF5ZXJzVG9SZW5kZXI9e2xheWVyc1RvUmVuZGVyfVxuICAgICAgICAgICAgICBtYXBJbmRleD17aW5kZXggfHwgMH1cbiAgICAgICAgICAgICAgbWFwQ29udHJvbHM9e21hcENvbnRyb2xzfVxuICAgICAgICAgICAgICByZWFkT25seT17dGhpcy5wcm9wcy5yZWFkT25seX1cbiAgICAgICAgICAgICAgc2NhbGU9e21hcFN0YXRlLnNjYWxlIHx8IDF9XG4gICAgICAgICAgICAgIGxvZ29Db21wb25lbnQ9e3RoaXMucHJvcHMubG9nb0NvbXBvbmVudH1cbiAgICAgICAgICAgICAgdG9wPXtcbiAgICAgICAgICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZy5nZW9jb2RlciAmJiBpbnRlcmFjdGlvbkNvbmZpZy5nZW9jb2Rlci5lbmFibGVkXG4gICAgICAgICAgICAgICAgICA/IHRoZW1lLm1hcENvbnRyb2xUb3BcbiAgICAgICAgICAgICAgICAgIDogMFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVkaXRvcj17ZWRpdG9yfVxuICAgICAgICAgICAgICBsb2NhbGU9e2xvY2FsZX1cbiAgICAgICAgICAgICAgb25Ub2dnbGVQZXJzcGVjdGl2ZT17bWFwU3RhdGVBY3Rpb25zLnRvZ2dsZVBlcnNwZWN0aXZlfVxuICAgICAgICAgICAgICBvblNldE1hcFZpZXdNb2RlPXttYXBTdGF0ZUFjdGlvbnMuc2V0TWFwVmlld01vZGV9XG4gICAgICAgICAgICAgIG1hcFZpZXdNb2RlPXttYXBTdGF0ZS5tYXBWaWV3TW9kZX1cbiAgICAgICAgICAgICAgb25Ub2dnbGVTcGxpdE1hcD17bWFwU3RhdGVBY3Rpb25zLnRvZ2dsZVNwbGl0TWFwfVxuICAgICAgICAgICAgICBvbk1hcFRvZ2dsZUxheWVyPXt0aGlzLl9oYW5kbGVNYXBUb2dnbGVMYXllcn1cbiAgICAgICAgICAgICAgb25Ub2dnbGVNYXBDb250cm9sPXt0aGlzLl90b2dnbGVNYXBDb250cm9sfVxuICAgICAgICAgICAgICBvblRvZ2dsZVNwbGl0TWFwVmlld3BvcnQ9e21hcFN0YXRlQWN0aW9ucy50b2dnbGVTcGxpdE1hcFZpZXdwb3J0fVxuICAgICAgICAgICAgICBvblNldEVkaXRvck1vZGU9e3Zpc1N0YXRlQWN0aW9ucy5zZXRFZGl0b3JNb2RlfVxuICAgICAgICAgICAgICBvblNldExvY2FsZT17dWlTdGF0ZUFjdGlvbnMuc2V0TG9jYWxlfVxuICAgICAgICAgICAgICBvblRvZ2dsZUVkaXRvclZpc2liaWxpdHk9e3Zpc1N0YXRlQWN0aW9ucy50b2dnbGVFZGl0b3JWaXNpYmlsaXR5fVxuICAgICAgICAgICAgICBvbkxheWVyVmlzQ29uZmlnQ2hhbmdlPXt2aXNTdGF0ZUFjdGlvbnMubGF5ZXJWaXNDb25maWdDaGFuZ2V9XG4gICAgICAgICAgICAgIG9uVG9nZ2xlTGF5ZXJWaXNpYmlsaXR5PXt0aGlzLl9oYW5kbGVUb2dnbGVMYXllclZpc2liaWxpdHl9XG4gICAgICAgICAgICAgIG1hcEhlaWdodD17bWFwU3RhdGUuaGVpZ2h0fVxuICAgICAgICAgICAgICBzZXRNYXBDb250cm9sU2V0dGluZ3M9e3VpU3RhdGVBY3Rpb25zLnNldE1hcENvbnRyb2xTZXR0aW5nc31cbiAgICAgICAgICAgICAgYWN0aXZlU2lkZVBhbmVsPXthY3RpdmVTaWRlUGFuZWx9XG4gICAgICAgICAgICAgIHNwbGl0TWFwcz17dGhpcy5wcm9wcy52aXNTdGF0ZS5zcGxpdE1hcHN9XG4gICAgICAgICAgICAgIG9uVG9nZ2xlTGF5ZXJGb3JNYXA9e3Zpc1N0YXRlQWN0aW9ucy50b2dnbGVMYXllckZvck1hcH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7aXNTcGxpdFNlbGVjdG9yKHRoaXMucHJvcHMpICYmIDxEcm9wcGFibGUgY29udGFpbmVySWQ9e2NvbnRhaW5lcklkfSAvPn1cblxuICAgICAgICAgIHtkZWNrfVxuICAgICAgICAgIHt0aGlzLl9yZW5kZXJNYXBib3hPdmVybGF5cygpfVxuICAgICAgICAgIDxFZGl0b3JcbiAgICAgICAgICAgIGluZGV4PXtpbmRleCB8fCAwfVxuICAgICAgICAgICAgZGF0YXNldHM9e2RhdGFzZXRzfVxuICAgICAgICAgICAgZWRpdG9yPXtlZGl0b3J9XG4gICAgICAgICAgICBmaWx0ZXJzPXt0aGlzLnBvbHlnb25GaWx0ZXJzU2VsZWN0b3IodGhpcy5wcm9wcyl9XG4gICAgICAgICAgICBsYXllcnM9e2xheWVyc31cbiAgICAgICAgICAgIG9uRGVsZXRlRmVhdHVyZT17dmlzU3RhdGVBY3Rpb25zLmRlbGV0ZUZlYXR1cmV9XG4gICAgICAgICAgICBvblNlbGVjdD17dmlzU3RhdGVBY3Rpb25zLnNldFNlbGVjdGVkRmVhdHVyZX1cbiAgICAgICAgICAgIG9uVG9nZ2xlUG9seWdvbkZpbHRlcj17dmlzU3RhdGVBY3Rpb25zLnNldFBvbHlnb25GaWx0ZXJMYXllcn1cbiAgICAgICAgICAgIG9uU2V0RWRpdG9yTW9kZT17dmlzU3RhdGVBY3Rpb25zLnNldEVkaXRvck1vZGV9XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBwb2ludGVyRXZlbnRzOiAnYWxsJyxcbiAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgIGRpc3BsYXk6IGVkaXRvci52aXNpYmxlID8gJ2Jsb2NrJyA6ICdub25lJ1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxBbm5vdGF0aW9uT3ZlcmxheVxuICAgICAgICAgICAgYW5ub3RhdGlvbnM9e3Zpc1N0YXRlLmFubm90YXRpb25zfVxuICAgICAgICAgICAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ9e3Zpc1N0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkfVxuICAgICAgICAgICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ9e3Zpc1N0YXRlLmlzRWRpdGluZ0Fubm90YXRpb25UZXh0fVxuICAgICAgICAgICAgaXNBbm5vdGF0aW9uTW9kZT17Qm9vbGVhbihtYXBDb250cm9scz8uYW5ub3RhdGlvbj8uYWN0aXZlKX1cbiAgICAgICAgICAgIG1hcEluZGV4PXtpbmRleCB8fCAwfVxuICAgICAgICAgICAgdmlld3BvcnQ9e3RoaXMuX2dldEFubm90YXRpb25WaWV3cG9ydChtYXBTdGF0ZSwgaW50ZXJuYWxWaWV3U3RhdGUpfVxuICAgICAgICAgICAgaXNHbG9iZUVuYWJsZWQ9e0Jvb2xlYW4obWFwU3RhdGUuZ2xvYmU/LmVuYWJsZWQpfVxuICAgICAgICAgICAgdXBkYXRlQW5ub3RhdGlvbj17dmlzU3RhdGVBY3Rpb25zLnVwZGF0ZUFubm90YXRpb259XG4gICAgICAgICAgICBzZXRTZWxlY3RlZEFubm90YXRpb249e3Zpc1N0YXRlQWN0aW9ucy5zZXRTZWxlY3RlZEFubm90YXRpb259XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgICB7bWFwU3R5bGUudG9wTWFwU3R5bGUgJiYgIW1hcFN0YXRlLmdsb2JlPy5lbmFibGVkID8gKFxuICAgICAgICAgICAgPFJlc29sdmVkTWFwQ29tcG9uZW50XG4gICAgICAgICAgICAgIGtleT17YHRvcC0ke2Jhc2VNYXBMaWJyYXJ5TmFtZX1gfVxuICAgICAgICAgICAgICB2aWV3U3RhdGU9e2ludGVybmFsVmlld1N0YXRlfVxuICAgICAgICAgICAgICBtYXhQaXRjaD17ZWZmZWN0aXZlTWF4UGl0Y2h9XG4gICAgICAgICAgICAgIG1hcFN0eWxlPXttYXBTdHlsZS50b3BNYXBTdHlsZX1cbiAgICAgICAgICAgICAgc3R5bGU9e01BUF9TVFlMRS50b3B9XG4gICAgICAgICAgICAgIG1hcGJveEFjY2Vzc1Rva2VuPXttYXBQcm9wcy5tYXBib3hBY2Nlc3NUb2tlbn1cbiAgICAgICAgICAgICAgdHJhbnNmb3JtUmVxdWVzdD17bWFwUHJvcHMudHJhbnNmb3JtUmVxdWVzdH1cbiAgICAgICAgICAgICAgey4uLihtYXBQcm9wcy5SVExUZXh0UGx1Z2luICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IHtSVExUZXh0UGx1Z2luOiBtYXBQcm9wcy5SVExUZXh0UGx1Z2lufVxuICAgICAgICAgICAgICAgIDoge30pfVxuICAgICAgICAgICAgICB7Li4uKHVzZU1hcGJveEFkYXB0ZXJcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgbWFwTGliOlxuICAgICAgICAgICAgICAgICAgICAgIGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuYmFzZU1hcExpYnJhcnlDb25maWdbXG4gICAgICAgICAgICAgICAgICAgICAgICBNQVBfTElCX09QVElPTlMuTUFQQk9YXG4gICAgICAgICAgICAgICAgICAgICAgXS5nZXRNYXBMaWIoKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDoge30pfVxuICAgICAgICAgICAgICB7Li4udG9wTWFwQ29udGFpbmVyUHJvcHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgICAge2hhc0dlb2NvZGVyTGF5ZXJcbiAgICAgICAgICAgID8gdGhpcy5fcmVuZGVyRGVja092ZXJsYXkoXG4gICAgICAgICAgICAgICAge1tHRU9DT0RFUl9MQVlFUl9JRF06IGhhc0dlb2NvZGVyTGF5ZXJ9LFxuICAgICAgICAgICAgICAgIHtwcmltYXJ5TWFwOiBmYWxzZSwgaXNJbnRlcmFjdGl2ZTogZmFsc2V9XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogbnVsbH1cbiAgICAgICAgICB7dGhpcy5fcmVuZGVyTWFwUG9wb3ZlcigpfVxuICAgICAgICAgIHshaXNFeHBvcnQgJiYgcHJpbWFyeSAhPT0gaXNTcGxpdCA/IChcbiAgICAgICAgICAgIDxMb2FkaW5nSW5kaWNhdG9yXG4gICAgICAgICAgICAgIGlzVmlzaWJsZT17Qm9vbGVhbihpc0xvYWRpbmdJbmRpY2F0b3JWaXNpYmxlIHx8IHRoaXMuYW55QWN0aXZlTGF5ZXJMb2FkaW5nKX1cbiAgICAgICAgICAgICAgYWN0aXZlU2lkZVBhbmVsPXtCb29sZWFuKGFjdGl2ZVNpZGVQYW5lbCl9XG4gICAgICAgICAgICAgIHNpZGVQYW5lbFdpZHRoPXtzaWRlUGFuZWxXaWR0aH1cbiAgICAgICAgICAgICAgaGFzQXR0cmlidXRpb25Mb2dvcz17YXR0cmlidXRpb25Mb2dvcy5sZW5ndGggPiAwfVxuICAgICAgICAgICAgICBoYXNNYXBTY2FsZT17Z2V0QXBwbGljYXRpb25Db25maWcoKS5lbmFibGVNYXBTY2FsZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAge3RoaXMucHJvcHMucHJpbWFyeSA/IChcbiAgICAgICAgICAgIDxBdHRyaWJ1dGlvblxuICAgICAgICAgICAgICBzaG93QmFzZU1hcExpYkxvZ289e3RoaXMuc3RhdGUuc2hvd0Jhc2VNYXBMaWJMb2dvfVxuICAgICAgICAgICAgICBiYXNlbWFwQXR0cmlidXRpb25zPXt0aGlzLnN0YXRlLmJhc2VtYXBBdHRyaWJ1dGlvbnN9XG4gICAgICAgICAgICAgIGRhdGFzZXRBdHRyaWJ1dGlvbnM9e2RhdGFzZXRBdHRyaWJ1dGlvbnN9XG4gICAgICAgICAgICAgIGJhc2VNYXBMaWJyYXJ5Q29uZmlnPXtiYXNlTWFwTGlicmFyeUNvbmZpZ31cbiAgICAgICAgICAgICAgZ2xvYmVBdHRyaWJ1dGlvbnM9e2dldEdsb2JlQmFzZW1hcEF0dHJpYnV0aW9ucyh7XG4gICAgICAgICAgICAgICAgZ2xvYmU6IG1hcFN0YXRlLmdsb2JlLFxuICAgICAgICAgICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgICAgICAgICAgICAgIG1hcFN0eWxlVHlwZTogbWFwU3R5bGU/LnN0eWxlVHlwZSxcbiAgICAgICAgICAgICAgICBiYXNlbWFwUHJvdmlkZXI6IHJlc29sdmVHbG9iZUJhc2VtYXBQcm92aWRlcihcbiAgICAgICAgICAgICAgICAgIGJhc2VNYXBMaWJyYXJ5TmFtZSxcbiAgICAgICAgICAgICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAge3RoaXMucHJvcHMucHJpbWFyeSA/IChcbiAgICAgICAgICAgIDxBdHRyaWJ1dGlvbkxvZ29zXG4gICAgICAgICAgICAgIGxvZ29zPXthdHRyaWJ1dGlvbkxvZ29zfVxuICAgICAgICAgICAgICBhY3RpdmVTaWRlUGFuZWw9e0Jvb2xlYW4oYWN0aXZlU2lkZVBhbmVsKX1cbiAgICAgICAgICAgICAgc2lkZVBhbmVsV2lkdGg9e3NpZGVQYW5lbFdpZHRofVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICB7IWlzRXhwb3J0ICYmIGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZW5hYmxlTWFwU2NhbGUgPyAoXG4gICAgICAgICAgICA8U3R5bGVkTWFwU2NhbGVDb250YWluZXJcbiAgICAgICAgICAgICAgJGxlZnQ9e1xuICAgICAgICAgICAgICAgIHByaW1hcnkgJiYgYWN0aXZlU2lkZVBhbmVsXG4gICAgICAgICAgICAgICAgICA/IChzaWRlUGFuZWxXaWR0aCB8fCAwKSArICh0aGVtZT8uc2lkZVBhbmVsPy5tYXJnaW4/LmxlZnQgPz8gOSlcbiAgICAgICAgICAgICAgICAgIDogdGhlbWU/LnNpZGVQYW5lbD8ubWFyZ2luPy5sZWZ0ID8/IDlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAkYm90dG9tT2Zmc2V0PXtwcmltYXJ5ICYmIGF0dHJpYnV0aW9uTG9nb3MubGVuZ3RoID4gMCA/IDI0IDogMH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPE1hcFNjYWxlIG1hcFN0YXRlPXttYXBTdGF0ZX0gbWFwSW5kZXg9e2luZGV4ID8/IDB9IC8+XG4gICAgICAgICAgICA8L1N0eWxlZE1hcFNjYWxlQ29udGFpbmVyPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8Lz5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge3Zpc1N0YXRlLCBtYXBTdHlsZX0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgbWFwQ29udGVudCA9IHRoaXMuX3JlbmRlck1hcCgpO1xuICAgICAgaWYgKCFtYXBDb250ZW50KSB7XG4gICAgICAgIC8vIG1hcENvbnRlbnQgY2FuIGJlIG51bGwgaWYgb25EZWNrUmVuZGVyIHJldHVybnMgbnVsbFxuICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2UgZG9uJ3Qgd2FudCB0byByZW5kZXIgdGhlIG1hcFxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY3VycmVudFN0eWxlID0gbWFwU3R5bGUubWFwU3R5bGVzPy5bbWFwU3R5bGUuc3R5bGVUeXBlXTtcbiAgICAgIGNvbnN0IGJhc2VNYXBMaWJyYXJ5TmFtZSA9IGdldEJhc2VNYXBMaWJyYXJ5KGN1cnJlbnRTdHlsZSk7XG4gICAgICBjb25zdCBiYXNlTWFwTGlicmFyeUNvbmZpZyA9IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuYmFzZU1hcExpYnJhcnlDb25maWdbYmFzZU1hcExpYnJhcnlOYW1lXTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZE1hcFxuICAgICAgICAgIHJlZj17dGhpcy5fcmVmfVxuICAgICAgICAgIHN0eWxlPXt0aGlzLnN0eWxlU2VsZWN0b3IodGhpcy5wcm9wcyl9XG4gICAgICAgICAgb25Db250ZXh0TWVudT17ZXZlbnQgPT4gZXZlbnQucHJldmVudERlZmF1bHQoKX1cbiAgICAgICAgICAkbWl4QmxlbmRNb2RlPXt2aXNTdGF0ZS5vdmVybGF5QmxlbmRpbmd9XG4gICAgICAgICAgJG1hcExpYkNzc0NsYXNzPXtiYXNlTWFwTGlicmFyeUNvbmZpZy5tYXBMaWJDc3NDbGFzc31cbiAgICAgICAgPlxuICAgICAgICAgIHttYXBDb250ZW50fVxuICAgICAgICA8L1N0eWxlZE1hcD5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdpdGhUaGVtZShNYXBDb250YWluZXIpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztB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
|
|
1303
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIkNvbXBvbmVudCIsImNyZWF0ZVJlZiIsInN0eWxlZCIsIndpdGhUaGVtZSIsIk1hcCIsIk1hcGJveExlZ2FjeU1hcCIsIk1hcGxpYnJlTWFwIiwiTWFwVmlldyIsIkRlY2tHTCIsImNyZWF0ZVNlbGVjdG9yIiwidXNlRHJvcHBhYmxlIiwiZGVib3VuY2UiLCJNYXBQb3BvdmVyRmFjdG9yeSIsIk1hcENvbnRyb2xGYWN0b3J5IiwiTWFwU2NhbGVGYWN0b3J5IiwiU3R5bGVkTWFwQ29udGFpbmVyIiwiQXR0cmlidXRpb24iLCJBdHRyaWJ1dGlvbkxvZ29zIiwicmVuZGVyQmFzZW1hcEF0dHJpYnV0aW9uIiwiZGVkdXBlQmFzZW1hcEF0dHJpYnV0aW9ucyIsIkVkaXRvckZhY3RvcnkiLCJGaWx0ZXJGZWF0dXJlQmFkZ2VzIiwiQW5ub3RhdGlvbk92ZXJsYXkiLCJnZW5lcmF0ZU1hcGJveExheWVycyIsInVwZGF0ZU1hcGJveExheWVycyIsIkVkaXRvckxheWVyVXRpbHMiLCJlcnJvck5vdGlmaWNhdGlvbiIsImlzU3R5bGVVc2luZ01hcGJveFRpbGVzIiwiaXNTdHlsZVVzaW5nT3BlblN0cmVldE1hcFRpbGVzIiwiZ2V0QmFzZU1hcEF0dHJpYnV0aW9ucyIsImdldEJhc2VNYXBMaWJyYXJ5IiwidHJhbnNmb3JtUmVxdWVzdCIsIm9ic2VydmVEaW1lbnNpb25zIiwidW5vYnNlcnZlRGltZW5zaW9ucyIsImdldE1hcExheWVyc0Zyb21TcGxpdE1hcHMiLCJvblZpZXdQb3J0Q2hhbmdlIiwiZ2V0Vmlld3BvcnRGcm9tTWFwU3RhdGUiLCJub3JtYWxpemVFdmVudCIsInJnYlRvSGV4IiwiY29tcHV0ZURlY2tFZmZlY3RzIiwiZ2V0QXBwbGljYXRpb25Db25maWciLCJnZXRMYXllckJsZW5kaW5nUGFyYW1ldGVycyIsInBhdGNoRGVja1JlbmRlcmVyRm9yUG9zdFByb2Nlc3NpbmciLCJGSUxURVJfVFlQRVMiLCJHRU9DT0RFUl9MQVlFUl9JRCIsIlRIUk9UVExFX05PVElGSUNBVElPTl9USU1FIiwiREVGQVVMVF9QSUNLSU5HX1JBRElVUyIsIk5PX01BUF9JRCIsIkVNUFRZX01BUEJPWF9TVFlMRSIsIk1BUEJPWF9NQVhfUElUQ0giLCJNQVBfTElCX09QVElPTlMiLCJHTE9CRV9NSU5fWk9PTSIsIkdMT0JFX01BWF9aT09NIiwiZ2V0R2xvYmVCYXNlTGF5ZXJzIiwiZ2V0R2xvYmVUb3BMYXllcnMiLCJnZXRHbG9iZUNsZWFyQ29sb3IiLCJnZXRHbG9iZUJhc2VtYXBBdHRyaWJ1dGlvbnMiLCJyZXNvbHZlR2xvYmVCYXNlbWFwUHJvdmlkZXIiLCJnZXRTdGFyc0JhY2tncm91bmRJbWFnZSIsIktlcGxlckdsb2JlVmlldyIsIkRST1BQQUJMRV9NQVBfQ09OVEFJTkVSX1RZUEUiLCJNYXBWaWV3U3RhdGVDb250ZXh0IiwiRXJyb3JCb3VuZGFyeSIsIkxPQ0FMRV9DT0RFUyIsImFyZUFueURlY2tMYXllcnNMb2FkaW5nIiwiY29tcHV0ZURlY2tMYXllcnMiLCJnZXRMYXllckhvdmVyUHJvcCIsInByZXBhcmVMYXllcnNGb3JEZWNrIiwicHJlcGFyZUxheWVyc1RvUmVuZGVyIiwiTG9hZGluZ0luZGljYXRvciIsIkRFQk9VTkNFX1ZJRVdQT1JUX1BST1BBR0FURSIsIkRFQk9VTkNFX01PVVNFX01PVkVfUFJPUEFHQVRFIiwiREVCT1VOQ0VfTE9BRElOR19TVEFURV9QUk9QQUdBVEUiLCJNQVBfU1RZTEUiLCJjb250YWluZXIiLCJkaXNwbGF5IiwicG9zaXRpb24iLCJ3aWR0aCIsImhlaWdodCIsInRvcCIsInBvaW50ZXJFdmVudHMiLCJMT0NBTEVfQ09ERVNfQVJSQVkiLCJPYmplY3QiLCJrZXlzIiwiU3R5bGVkTWFwIiwiX3JlZiIsIl9yZWYkJG1peEJsZW5kTW9kZSIsIiRtaXhCbGVuZE1vZGUiLCIkbWFwTGliQ3NzQ2xhc3MiLCJjb25jYXQiLCJNQVBCT1hHTF9TVFlMRV9VUERBVEUiLCJNQVBCT1hHTF9SRU5ERVIiLCJPU01fQVRUUklCVVRJT05fSFRNTCIsIlN0eWxlZERyb3BwYWJsZSIsImRpdiIsIl90ZW1wbGF0ZU9iamVjdCIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwiLCJwcm9wcyIsIiRpc092ZXIiLCJ0aGVtZSIsImRuZE92ZXJCYWNrZ3JvdW5kQ29sb3IiLCJTdHlsZWRNYXBTY2FsZUNvbnRhaW5lciIsIl90ZW1wbGF0ZU9iamVjdDIiLCJzaWRlUGFuZWwiLCJtYXJnaW4iLCJsZWZ0IiwiJGJvdHRvbU9mZnNldCIsIiRsZWZ0IiwiaXNTcGxpdFNlbGVjdG9yIiwidmlzU3RhdGUiLCJzcGxpdE1hcHMiLCJsZW5ndGgiLCJEcm9wcGFibGUiLCJfcmVmMiIsImNvbnRhaW5lcklkIiwiX3VzZURyb3BwYWJsZSIsImlkIiwiZGF0YSIsInR5cGUiLCJpbmRleCIsImRpc2FibGVkIiwiaXNPdmVyIiwic2V0Tm9kZVJlZiIsImNyZWF0ZUVsZW1lbnQiLCJyZWYiLCJNYXBDb250YWluZXJGYWN0b3J5IiwiZGVwcyIsIk1hcFBvcG92ZXIiLCJNYXBDb250cm9sIiwiRWRpdG9yIiwiTWFwU2NhbGUiLCJNYXBDb250YWluZXIiLCJfQ29tcG9uZW50IiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2siLCJfY2FsbFN1cGVyIiwiX2RlZmluZVByb3BlcnR5Iiwic2hvd0Jhc2VNYXBMaWJMb2dvIiwiYmFzZW1hcEF0dHJpYnV0aW9ucyIsIm9uTWFwUmVuZGVyIiwiX21hcCIsImRpbWVuc2lvbnMiLCJfdGhpcyRwcm9wcyIsInByaW1hcnkiLCJtYXBTdGF0ZUFjdGlvbnMiLCJ1cGRhdGVNYXAiLCJsYXllcnMiLCJsYXllckRhdGEiLCJzcGxpdE1hcFNlbGVjdG9yIiwic3BsaXRNYXBJbmRleFNlbGVjdG9yIiwibGF5ZXJPcmRlciIsImxheWVyc1NlbGVjdG9yIiwibGF5ZXJEYXRhU2VsZWN0b3IiLCJtYXBMYXllcnNTZWxlY3RvciIsImZpbHRlcnMiLCJmaWx0ZXJzU2VsZWN0b3IiLCJmaWx0ZXIiLCJmIiwicG9seWdvbiIsImVuYWJsZWQiLCJlZGl0b3IiLCJmZWF0dXJlcyIsInNlbGVjdGVkRmVhdHVyZSIsInBvbHlnb25GaWx0ZXJzU2VsZWN0b3IiLCJmZWF0dXJlc1NlbGVjdG9yIiwicG9seWdvbkZpbHRlcnMiLCJtYXAiLCJ2YWx1ZSIsImZlYXR1cmVDb2xsZWN0aW9uU2VsZWN0b3IiLCJzZWxlY3RlZEZlYXR1cmVTZWxlY3RvciIsImNvbGxlY3Rpb24iLCJmaW5kSW5kZXgiLCJfcHJvcHMkZ2VuZXJhdGVNYXBib3giLCJsYXllck9yZGVyU2VsZWN0b3IiLCJsYXllcnNUb1JlbmRlclNlbGVjdG9yIiwiZ2VuZXJhdGVNYXBib3hMYXllck1ldGhvZFNlbGVjdG9yIiwibGF5ZXIiLCJsYXllcnNUb1JlbmRlciIsImdlbmVyYXRlTWFwYm94TGF5ZXJNZXRob2QiLCJtYXBTdHlsZSIsInN0eWxlVHlwZSIsImJhY2tncm91bmRDb2xvciIsIl9wcm9wcyRtYXBTdGF0ZSIsIkJvb2xlYW4iLCJtYXBTdGF0ZSIsImdsb2JlIiwiX3Byb3BzJG1hcFN0YXRlMiIsImNvbmZpZyIsIl9wcm9wcyRtYXBTdGF0ZTMiLCJzdGFycyIsIm1hcFN0eWxlVHlwZVNlbGVjdG9yIiwibWFwU3R5bGVCYWNrZ3JvdW5kQ29sb3JTZWxlY3RvciIsImdsb2JlTW9kZVNlbGVjdG9yIiwiZ2xvYmVCYWNrZ3JvdW5kQ29sb3JTZWxlY3RvciIsImdsb2JlU3RhcnNTZWxlY3RvciIsImlzR2xvYmVNb2RlIiwiZ2xvYmVCYWNrZ3JvdW5kQ29sb3IiLCJnbG9iZVN0YXJzIiwiX29iamVjdFNwcmVhZCIsInNsaWNlIiwiYmFja2dyb3VuZEltYWdlIiwiYmFja2dyb3VuZFJlcGVhdCIsInZpc1N0YXRlQWN0aW9ucyIsIm9uTGF5ZXJDbGljayIsIl9pZHgiLCJpbmZvIiwib25MYXllckhvdmVyIiwiaWR4IiwiQXJyYXkiLCJpc0FycmF5IiwiY29sb3JEb21haW4iLCJkb21haW4iLCJhZ2dyZWdhdGVkQmlucyIsImxheWVyQ29uZmlnQ2hhbmdlIiwiX3RoaXMkcHJvcHMyIiwiYm91bmRzIiwiZml0Qm91bmRzIiwiZXZlbnQiLCJsYXllckZpbHRlcmVkSXRlbXNDaGFuZ2UiLCJ3bXNGZWF0dXJlSW5mbyIsImZlYXR1cmVJbmZvIiwiY29vcmRpbmF0ZSIsImxheWVySWQiLCJfdGhpcyRwcm9wczMiLCJfdGhpcyRwcm9wczMkaW5kZXgiLCJtYXBJbmRleCIsInRvZ2dsZUxheWVyRm9yTWFwIiwidXBkYXRlIiwicHJldmlvdXNMYXllcnMiLCJfdXBkYXRlTWFwYm94TGF5ZXJzIiwiX3VwZGF0ZUF0dHJpYnV0aW9uIiwib25NYXBTdHlsZUxvYWRlZCIsIl90aGlzJHByb3BzJG1hcFN0eWxlIiwiX3RoaXMkcHJvcHMkbWFwU3R5bGUyIiwiX3JlbW92ZUJhc2VtYXBBdHRyaWJ1dGlvbkxpc3RlbmVycyIsInN0eWxlT2JqIiwic3R5bGUiLCJfdGhpcyRfbWFwJGlzU3R5bGVMb2EiLCJfdGhpcyRfbWFwIiwiX3RoaXMkX21hcCRnZXRTdHlsZSIsIl90aGlzJF9tYXAyIiwicmF3U3R5bGUiLCJpc1N0eWxlTG9hZGVkIiwiY2FsbCIsImdldFN0eWxlIiwic3R5bGVzaGVldCIsIl91bnVzZWQiLCJ1c2VzTWFwYm94IiwidXNlc09zbSIsInB1c2giLCJjdXJyZW50U3R5bGUiLCJtYXBTdHlsZXMiLCJpc1VzZXJDdXN0b21TdHlsZSIsImN1c3RvbSIsInNldFN0YXRlIiwiX2NvbGxlY3RCYXNlbWFwQXR0cmlidXRpb25zIiwiX2Jhc2VtYXBTb3VyY2VEYXRhTGlzdGVuZXIiLCJvZmYiLCJfYmFzZW1hcElkbGVMaXN0ZW5lciIsImF0dGVtcHRzIiwiTUFYX0FUVEVNUFRTIiwidHJ5Q29sbGVjdCIsIm9uU291cmNlRGF0YSIsImUiLCJpc1NvdXJjZUxvYWRlZCIsInNvdXJjZURhdGFUeXBlIiwib25JZGxlIiwib24iLCJtYXBSZWYiLCJnZXRNYXAiLCJfb25NYXBib3hTdHlsZVVwZGF0ZSIsIl9vbk1hcFJlbmRlciIsImdldE1hcGJveFJlZiIsImVycm9yIiwiZXJyb3JNZXNzYWdlIiwibWVzc2FnZSIsImxheWVyTWVzc2FnZSIsImVycm9yTWVzc2FnZUZ1bGwiLCJsYXN0U2hvd24iLCJfZGVja0dMRXJyb3JzRWxhcHNlZCIsIkRhdGUiLCJub3ciLCJleHRyYUxheWVyTWVzc2FnZSIsIl90b3BNb3N0TGF5ZXIkcHJvcHMiLCJ0b3BNb3N0TGF5ZXIiLCJwYXJlbnQiLCJsYXllclNldElzVmFsaWQiLCJ1aVN0YXRlQWN0aW9ucyIsImFkZE5vdGlmaWNhdGlvbiIsIl90aGlzJGNvbnRleHQiLCJ2aWV3U3RhdGUiLCJjb250ZXh0IiwiZ2V0SW50ZXJuYWxWaWV3U3RhdGUiLCJvblZpZXdTdGF0ZUNoYW5nZSIsInZpZXdwb3J0IiwiX3RoaXMkcHJvcHMkbWFwU3RhdGUiLCJpbnRlcmFjdGlvblN0YXRlIiwiaXNFeHBvcnQiLCJzZXRJbnRlcm5hbFZpZXdTdGF0ZSIsIl93YXNJbnRlcmFjdGluZyIsIl9vblZpZXdwb3J0Q2hhbmdlUHJvcGFnYXRlRGVib3VuY2VkIiwiaXNVc2VySW50ZXJhY3Rpb24iLCJpc1pvb21pbmciLCJpc1Bhbm5pbmciLCJpc1JvdGF0aW5nIiwiaXNEcmFnZ2luZyIsImluVHJhbnNpdGlvbiIsImlzSW50ZXJhY3Rpb25TZXR0bGUiLCJzZXRUaW1lb3V0Iiwib25Nb3VzZU1vdmUiLCJzZXRMb2FkaW5nSW5kaWNhdG9yIiwiY2hhbmdlIiwiaXNWaXNpYmxlIiwicGFuZWxJZCIsIl90aGlzJHByb3BzNCIsInRvZ2dsZU1hcENvbnRyb2wiLCJOdW1iZXIiLCJfaW5oZXJpdHMiLCJfY3JlYXRlQ2xhc3MiLCJrZXkiLCJjb21wb25lbnREaWRNb3VudCIsImN1cnJlbnQiLCJfaGFuZGxlUmVzaXplIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJjb21wb25lbnREaWRVcGRhdGUiLCJwcmV2UHJvcHMiLCJfb25EZWNrSW5pdGlhbGl6ZWQiLCJkZXZpY2UiLCJvbkRlY2tJbml0aWFsaXplZCIsIl9kZWNrIiwiX2lzT0tUb1JlbmRlckVmZmVjdHMiLCJ2aWV3SW5kZXgiLCJfdGhpcyRfZGVjayIsInZpZXdNYW5hZ2VyIiwiX3ZpZXdwb3J0cyIsIl9nZXRBbm5vdGF0aW9uVmlld3BvcnQiLCJpbnRlcm5hbFZpZXdTdGF0ZSIsIl9pbnRlcm5hbFZpZXdTdGF0ZSRsbyIsIl9pbnRlcm5hbFZpZXdTdGF0ZSRsYSIsIl9pbnRlcm5hbFZpZXdTdGF0ZSR6byIsIl9yZWYzIiwiX2ludGVybmFsVmlld1N0YXRlJHBpIiwiX3JlZjQiLCJfaW50ZXJuYWxWaWV3U3RhdGUkYmUiLCJfdGhpcyRfYW5ub3RhdGlvblZpZXciLCJsb25naXR1ZGUiLCJsYXRpdHVkZSIsInpvb20iLCJwaXRjaCIsImJlYXJpbmciLCJfYW5ub3RhdGlvblZpZXdwb3J0Q2FjaGUiLCJtZXJnZWRTdGF0ZSIsInZwIiwicHJvamVjdCIsImxuZ0xhdCIsInVucHJvamVjdCIsInh5IiwiX3JlbmRlck1hcFBvcG92ZXIiLCJfdGhpcyRwcm9wcyR2aXNTdGF0ZSQiLCJob3ZlckluZm8iLCJfdGhpcyRwcm9wczUiLCJfdGhpcyRwcm9wczUkdmlzU3RhdGUiLCJjbGlja2VkIiwiZGF0YXNldHMiLCJpbnRlcmFjdGlvbkNvbmZpZyIsImFuaW1hdGlvbkNvbmZpZyIsIl90aGlzJHByb3BzNSR2aXNTdGF0ZTIiLCJtb3VzZVBvcyIsIm1vdXNlUG9zaXRpb24iLCJwaW5uZWQiLCJ0b29sdGlwIiwibGF5ZXJIb3ZlclByb3AiLCJjb21wYXJlTW9kZSIsInBpbm5lZFBvc2l0aW9uIiwieCIsInkiLCJsYXllclBpbm5lZFByb3AiLCJfZ2V0SG92ZXJYWSIsInByaW1hcnlEYXRhIiwiY29tcGFyZVR5cGUiLCJjb21tb25Qcm9wIiwib25DbG9zZSIsIl9vbkNsb3NlTWFwUG9wb3ZlciIsImNhbnZhcyIsInVuZGVmaW5lZCIsIl9leHRlbmRzIiwiZnJvemVuIiwiaXNCYXNlIiwib25TZXRGZWF0dXJlcyIsInNldEZlYXR1cmVzIiwic2V0U2VsZWN0ZWRGZWF0dXJlIiwiZmVhdHVyZUNvbGxlY3Rpb24iLCJzY3JlZW5Db29yZCIsIl9yZW5kZXJEZWNrT3ZlcmxheSIsImxheWVyc0ZvckRlY2siLCJfdGhpcyRjb250ZXh0MiIsIl9tYXBTdGF0ZSRnbG9iZSIsIl9tYXBTdHlsZSRtYXBTdHlsZXMiLCJfdGhpczIiLCJfdGhpcyRwcm9wcyRtYXBTdGF0ZSQiLCJvcHRpb25zIiwiYXJndW1lbnRzIiwicHJpbWFyeU1hcCIsIl90aGlzJHByb3BzNiIsIm1hcGJveEFwaUFjY2Vzc1Rva2VuIiwibWFwYm94QXBpVXJsIiwiZGVja0dsUHJvcHMiLCJtYXBDb250cm9scyIsImRlY2tSZW5kZXJDYWxsYmFja3MiLCJnZW5lcmF0ZURlY2tHTExheWVycyIsImlzSW50ZXJhY3RpdmUiLCJjaGlsZHJlbiIsIm1hcERyYXciLCJfcmVmNSIsIl9yZWY1JGFjdGl2ZSIsImFjdGl2ZSIsImVkaXRvck1lbnVBY3RpdmUiLCJpc0VkaXRvckRyYXdpbmdNb2RlIiwiaXNEcmF3aW5nQWN0aXZlIiwibW9kZSIsImludGVybmFsTWFwU3RhdGUiLCJlZGl0b3JGZWF0dXJlU2VsZWN0ZWRJbmRleCIsInNlbGVjdGVkUG9seWdvbkluZGV4U2VsZWN0b3IiLCJnZW5lcmF0ZURlY2tHTExheWVyc01ldGhvZCIsImV4dHJhRGVja1BhcmFtcyIsImdldFRvb2x0aXAiLCJpc05hTiIsImdldEN1cnNvciIsIl9yZWY2IiwiZWRpdG9yQ3Vyc29yIiwiZWZmZWN0cyIsImxheWVyQmxlbmRpbmdQYXJhbXMiLCJsYXllckJsZW5kaW5nIiwiZGVja0xheWVyc01hcFN0YXRlIiwibGF5ZXJQYXJhbWV0ZXJzIiwiZGVja0dsTGF5ZXJzIiwiZWRpdG9ySW5mbyIsIm9uQXBwbHlQb2x5Z29uRmlsdGVyQWxsIiwic2V0UG9seWdvbkZpbHRlckFsbExheWVycyIsInNlbGVjdGVkRmVhdHVyZUluZGV4ZXMiLCJzZWxlY3RlZEZlYXR1cmVJbmRleEFycmF5U2VsZWN0b3IiLCJfb25MYXllckhvdmVyIiwib25TZXRMYXllckRvbWFpbiIsIl9vbkxheWVyU2V0RG9tYWluIiwib25GaWx0ZXJlZEl0ZW1zQ2hhbmdlIiwiX29uTGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlIiwib25XTVNGZWF0dXJlSW5mbyIsIl9vbldNU0ZlYXR1cmVJbmZvIiwib25SZWRyYXdOZWVkZWQiLCJfb25SZWRyYXdOZWVkZWQiLCJvbkZpdEJvdW5kcyIsIl9vbkZpdEJvdW5kcyIsImdsb2JlQmFzZW1hcFByb3ZpZGVyIiwiZ2xvYmVCYXNlTGF5ZXJzIiwibWFwU3R5bGVUeXBlIiwiYmFzZW1hcFByb3ZpZGVyIiwiZ2xvYmVUb3BMYXllcnMiLCJmaW5hbERlY2tHbExheWVycyIsIl90b0NvbnN1bWFibGVBcnJheSIsInZpZXdzIiwicmVzb2x1dGlvbiIsImNsZWFyIiwiY2xlYXJDb2xvciIsImZhclpNdWx0aXBsaWVyIiwiYWxsRGVja0dsUHJvcHMiLCJwaWNraW5nUmFkaXVzIiwicGFyYW1ldGVycyIsImN1bGwiLCJvbkRlY2tSZW5kZXIiLCJfb25Nb3VzZU1vdmVEZWJvdW5jZWQiLCJvbkxvYWQiLCJvbkRlY2tMb2FkIiwiY29udHJvbGxlciIsImRvdWJsZUNsaWNrWm9vbSIsImRyYWdSb3RhdGUiLCJtYXhQaXRjaCIsIm1pblpvb20iLCJtYXhab29tIiwib25CZWZvcmVSZW5kZXIiLCJfb25CZWZvcmVSZW5kZXIiLCJfb25WaWV3cG9ydENoYW5nZSIsIm9uSG92ZXIiLCJyZXMiLCJfb25MYXllckhvdmVyRGVib3VuY2VkIiwib25DbGljayIsInNyY0V2ZW50IiwiYWxpZ25pbmdMYXllciIsImZpbmQiLCJsIiwiYWxpZ25XYWl0aW5nRm9yTWFwIiwib25BbGlnbk1hcENsaWNrIiwib25FcnJvciIsIl9vbkRlY2tFcnJvciIsImNvbXAiLCJkZWNrIiwib25EZXZpY2VJbml0aWFsaXplZCIsIm9uQWZ0ZXJSZW5kZXIiLCJvbkRlY2tBZnRlclJlbmRlciIsImFueUFjdGl2ZUxheWVyTG9hZGluZyIsIl9vbkxheWVyTG9hZGluZ1N0YXRlQ2hhbmdlIiwibWFwYm94TGF5ZXJzIiwibWFwYm94TGF5ZXJzU2VsZWN0b3IiLCJfcmVuZGVyTWFwYm94T3ZlcmxheXMiLCJfcmVuZGVyTWFwIiwiX21hcFN0eWxlJG1hcFN0eWxlczIiLCJfdGhpcyRwcm9wcyRNYXBDb21wb24iLCJfdGhpcyRjb250ZXh0MyIsIl9tYXBTdGF0ZSRtYXhQaXRjaCIsIl90aGlzJHByb3BzJGlzRXhwb3J0IiwiX21hcFN0YXRlJGdsb2JlMiIsIl9tYXBTdHlsZSRib3R0b21NYXBTdCIsIl9tYXBTdGF0ZSRnbG9iZTMiLCJfbWFwQ29udHJvbHMkYW5ub3RhdGkiLCJfbWFwU3RhdGUkZ2xvYmU0IiwiX21hcFN0YXRlJGdsb2JlNSIsIl90aGVtZSRzaWRlUGFuZWwkbWFyZyIsIl90aGVtZSRzaWRlUGFuZWwiLCJfdGhlbWUkc2lkZVBhbmVsJG1hcmcyIiwiX3RoZW1lJHNpZGVQYW5lbDIiLCJfdGhpcyRwcm9wczciLCJsb2NhbGUiLCJ1aVRoZW1lIiwiYm90dG9tTWFwQ29udGFpbmVyUHJvcHMiLCJ0b3BNYXBDb250YWluZXJQcm9wcyIsIl90aGlzJHByb3BzNyRkYXRhc2V0QSIsImRhdGFzZXRBdHRyaWJ1dGlvbnMiLCJfdGhpcyRwcm9wczckYXR0cmlidXQiLCJhdHRyaWJ1dGlvbkxvZ29zIiwiX3RoaXMkcHJvcHM3JGNvbnRhaW5lIiwiaXNMb2FkaW5nSW5kaWNhdG9yVmlzaWJsZSIsImFjdGl2ZVNpZGVQYW5lbCIsInNpZGVQYW5lbFdpZHRoIiwibGF5ZXJzRm9yRGVja1NlbGVjdG9yIiwiYmFzZU1hcExpYnJhcnlOYW1lIiwiYmFzZU1hcExpYnJhcnlDb25maWciLCJSZXNvbHZlZE1hcENvbXBvbmVudCIsIk1hcENvbXBvbmVudCIsIk1BUEJPWCIsInVzZU1hcGJveEFkYXB0ZXIiLCJjb25maWdNYXhQaXRjaCIsImVmZmVjdGl2ZU1heFBpdGNoIiwiTWF0aCIsIm1pbiIsIm1hcFByb3BzIiwicHJlc2VydmVEcmF3aW5nQnVmZmVyIiwibWFwYm94QWNjZXNzVG9rZW4iLCJhY2Nlc3NUb2tlbiIsIlJUTFRleHRQbHVnaW4iLCJtYXBib3hDb25maWciLCJtYXBMaWIiLCJnZXRNYXBMaWIiLCJoYXNHZW9jb2RlckxheWVyIiwiaXNTcGxpdCIsImJvdHRvbU1hcFN0eWxlIiwiX3NldE1hcFJlZiIsInNob3dNYXBDb250cm9sIiwiRnJhZ21lbnQiLCJhdmFpbGFibGVMb2NhbGVzIiwicmVhZE9ubHkiLCJzY2FsZSIsImxvZ29Db21wb25lbnQiLCJnZW9jb2RlciIsIm1hcENvbnRyb2xUb3AiLCJ0aGVtZU5hbWUiLCJvblRvZ2dsZVBlcnNwZWN0aXZlIiwidG9nZ2xlUGVyc3BlY3RpdmUiLCJvblNldE1hcFZpZXdNb2RlIiwic2V0TWFwVmlld01vZGUiLCJtYXBWaWV3TW9kZSIsIm9uVG9nZ2xlU3BsaXRNYXAiLCJ0b2dnbGVTcGxpdE1hcCIsIm9uTWFwVG9nZ2xlTGF5ZXIiLCJfaGFuZGxlTWFwVG9nZ2xlTGF5ZXIiLCJvblRvZ2dsZU1hcENvbnRyb2wiLCJfdG9nZ2xlTWFwQ29udHJvbCIsIm9uVG9nZ2xlU3BsaXRNYXBWaWV3cG9ydCIsInRvZ2dsZVNwbGl0TWFwVmlld3BvcnQiLCJvblNldEVkaXRvck1vZGUiLCJzZXRFZGl0b3JNb2RlIiwib25TZXRMb2NhbGUiLCJzZXRMb2NhbGUiLCJvblNldFRoZW1lIiwic2V0VGhlbWUiLCJvblRvZ2dsZUVkaXRvclZpc2liaWxpdHkiLCJ0b2dnbGVFZGl0b3JWaXNpYmlsaXR5Iiwib25Db252ZXJ0RWRpdG9yRmVhdHVyZXNUb0xheWVyIiwiY29udmVydEVkaXRvckZlYXR1cmVzVG9MYXllciIsIm9uTGF5ZXJWaXNDb25maWdDaGFuZ2UiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsIm9uVG9nZ2xlTGF5ZXJWaXNpYmlsaXR5IiwiX2hhbmRsZVRvZ2dsZUxheWVyVmlzaWJpbGl0eSIsIm1hcEhlaWdodCIsInNldE1hcENvbnRyb2xTZXR0aW5ncyIsIm9uVG9nZ2xlTGF5ZXJGb3JNYXAiLCJvbkRlbGV0ZUZlYXR1cmUiLCJkZWxldGVGZWF0dXJlIiwib25TZXRGZWF0dXJlUHJvcGVydGllcyIsInNldEVkaXRvckZlYXR1cmVQcm9wZXJ0aWVzIiwib25TZWxlY3QiLCJvblRvZ2dsZVBvbHlnb25GaWx0ZXIiLCJzZXRQb2x5Z29uRmlsdGVyTGF5ZXIiLCJ2aXNpYmxlIiwiaXNHbG9iZUVuYWJsZWQiLCJhbm5vdGF0aW9ucyIsInNlbGVjdGVkQW5ub3RhdGlvbklkIiwiaXNFZGl0aW5nQW5ub3RhdGlvblRleHQiLCJpc0Fubm90YXRpb25Nb2RlIiwiYW5ub3RhdGlvbiIsInVwZGF0ZUFubm90YXRpb24iLCJzZXRTZWxlY3RlZEFubm90YXRpb24iLCJ0b3BNYXBTdHlsZSIsImhhc0F0dHJpYnV0aW9uTG9nb3MiLCJoYXNNYXBTY2FsZSIsImVuYWJsZU1hcFNjYWxlIiwic3RhdGUiLCJnbG9iZUF0dHJpYnV0aW9ucyIsImxvZ29zIiwicmVuZGVyIiwiX21hcFN0eWxlJG1hcFN0eWxlczMiLCJfdGhpcyRwcm9wczgiLCJtYXBDb250ZW50Iiwic3R5bGVTZWxlY3RvciIsIm9uQ29udGV4dE1lbnUiLCJwcmV2ZW50RGVmYXVsdCIsIm92ZXJsYXlCbGVuZGluZyIsIm1hcExpYkNzc0NsYXNzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21hcC1jb250YWluZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbi8vIGxpYnJhcmllc1xuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50LCBjcmVhdGVSZWZ9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzdHlsZWQsIHt3aXRoVGhlbWV9IGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7TWFwIGFzIE1hcGJveExlZ2FjeU1hcCwgTWFwUmVmfSBmcm9tICdyZWFjdC1tYXAtZ2wvbWFwYm94LWxlZ2FjeSc7XG5pbXBvcnQge01hcCBhcyBNYXBsaWJyZU1hcH0gZnJvbSAnQHZpcy5nbC9yZWFjdC1tYXBsaWJyZSc7XG5pbXBvcnQge1BpY2tpbmdJbmZvLCBNYXBWaWV3fSBmcm9tICdAZGVjay5nbC9jb3JlJztcbmltcG9ydCBEZWNrR0wgZnJvbSAnQGRlY2suZ2wvcmVhY3QnO1xuaW1wb3J0IHtjcmVhdGVTZWxlY3RvciwgU2VsZWN0b3J9IGZyb20gJ3Jlc2VsZWN0JztcbmltcG9ydCB7dXNlRHJvcHBhYmxlfSBmcm9tICdAZG5kLWtpdC9jb3JlJztcbmltcG9ydCBkZWJvdW5jZSBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9kZWJvdW5jZSc7XG5cbmltcG9ydCB7VmlzU3RhdGVBY3Rpb25zLCBNYXBTdGF0ZUFjdGlvbnMsIFVJU3RhdGVBY3Rpb25zfSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuXG4vLyBjb21wb25lbnRzXG5pbXBvcnQgTWFwUG9wb3ZlckZhY3RvcnkgZnJvbSAnLi9tYXAvbWFwLXBvcG92ZXInO1xuaW1wb3J0IE1hcENvbnRyb2xGYWN0b3J5IGZyb20gJy4vbWFwL21hcC1jb250cm9sJztcbmltcG9ydCBNYXBTY2FsZUZhY3RvcnkgZnJvbSAnLi9tYXAvbWFwLXNjYWxlJztcbmltcG9ydCB7U3R5bGVkTWFwQ29udGFpbmVyfSBmcm9tICcuL2NvbW1vbi9zdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBBdHRyaWJ1dGlvbixcbiAgQXR0cmlidXRpb25Mb2dvcyxcbiAgcmVuZGVyQmFzZW1hcEF0dHJpYnV0aW9uLFxuICBkZWR1cGVCYXNlbWFwQXR0cmlidXRpb25zXG59IGZyb20gJy4vbWFwL2F0dHJpYnV0aW9uJztcblxuaW1wb3J0IEVkaXRvckZhY3RvcnkgZnJvbSAnLi9lZGl0b3IvZWRpdG9yJztcbmltcG9ydCBGaWx0ZXJGZWF0dXJlQmFkZ2VzIGZyb20gJy4vZWRpdG9yL2ZpbHRlci1mZWF0dXJlLWJhZGdlcyc7XG5pbXBvcnQge0Fubm90YXRpb25PdmVybGF5fSBmcm9tICcuL2Fubm90YXRpb25zJztcblxuLy8gdXRpbHNcbmltcG9ydCB7XG4gIGdlbmVyYXRlTWFwYm94TGF5ZXJzLFxuICB1cGRhdGVNYXBib3hMYXllcnMsXG4gIExheWVyLFxuICBMYXllckJhc2VDb25maWcsXG4gIFZpc3VhbENoYW5uZWxEb21haW4sXG4gIEVkaXRvckxheWVyVXRpbHMsXG4gIEFnZ3JlZ2F0ZWRCaW5cbn0gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuaW1wb3J0IHtcbiAgQXR0cmlidXRpb25XaXRoU3R5bGUsXG4gIERhdGFzZXRBdHRyaWJ1dGlvbixcbiAgTWFwU3RhdGUsXG4gIE1hcENvbnRyb2xzLFxuICBWaWV3cG9ydCxcbiAgU3BsaXRNYXAsXG4gIFNwbGl0TWFwTGF5ZXJzXG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtcbiAgZXJyb3JOb3RpZmljYXRpb24sXG4gIGlzU3R5bGVVc2luZ01hcGJveFRpbGVzLFxuICBpc1N0eWxlVXNpbmdPcGVuU3RyZWV0TWFwVGlsZXMsXG4gIGdldEJhc2VNYXBBdHRyaWJ1dGlvbnMsXG4gIGdldEJhc2VNYXBMaWJyYXJ5LFxuICB0cmFuc2Zvcm1SZXF1ZXN0LFxuICBvYnNlcnZlRGltZW5zaW9ucyxcbiAgdW5vYnNlcnZlRGltZW5zaW9ucyxcbiAgZ2V0TWFwTGF5ZXJzRnJvbVNwbGl0TWFwcyxcbiAgb25WaWV3UG9ydENoYW5nZSxcbiAgZ2V0Vmlld3BvcnRGcm9tTWFwU3RhdGUsXG4gIG5vcm1hbGl6ZUV2ZW50LFxuICByZ2JUb0hleCxcbiAgY29tcHV0ZURlY2tFZmZlY3RzLFxuICBnZXRBcHBsaWNhdGlvbkNvbmZpZyxcbiAgR2V0TWFwUmVmLFxuICBnZXRMYXllckJsZW5kaW5nUGFyYW1ldGVycyxcbiAgcGF0Y2hEZWNrUmVuZGVyZXJGb3JQb3N0UHJvY2Vzc2luZ1xufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcblxuLy8gZGVmYXVsdC1zZXR0aW5nc1xuaW1wb3J0IHtcbiAgRklMVEVSX1RZUEVTLFxuICBHRU9DT0RFUl9MQVlFUl9JRCxcbiAgVEhST1RUTEVfTk9USUZJQ0FUSU9OX1RJTUUsXG4gIERFRkFVTFRfUElDS0lOR19SQURJVVMsXG4gIE5PX01BUF9JRCxcbiAgRU1QVFlfTUFQQk9YX1NUWUxFLFxuICBNQVBCT1hfTUFYX1BJVENILFxuICBNQVBfTElCX09QVElPTlMsXG4gIEdMT0JFX01JTl9aT09NLFxuICBHTE9CRV9NQVhfWk9PTVxufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5cbmltcG9ydCB7XG4gIGdldEdsb2JlQmFzZUxheWVycyxcbiAgZ2V0R2xvYmVUb3BMYXllcnMsXG4gIGdldEdsb2JlQ2xlYXJDb2xvcixcbiAgZ2V0R2xvYmVCYXNlbWFwQXR0cmlidXRpb25zLFxuICByZXNvbHZlR2xvYmVCYXNlbWFwUHJvdmlkZXIsXG4gIGdldFN0YXJzQmFja2dyb3VuZEltYWdlLFxuICBLZXBsZXJHbG9iZVZpZXdcbn0gZnJvbSAnQGtlcGxlci5nbC9kZWNrZ2wtbGF5ZXJzJztcblxuaW1wb3J0IHtEUk9QUEFCTEVfTUFQX0NPTlRBSU5FUl9UWVBFfSBmcm9tICcuL2NvbW1vbi9kbmQtbGF5ZXItaXRlbXMnO1xuLy8gQ29udGV4dHNcbmltcG9ydCB7TWFwVmlld1N0YXRlQ29udGV4dH0gZnJvbSAnLi9tYXAtdmlldy1zdGF0ZS1jb250ZXh0JztcblxuaW1wb3J0IEVycm9yQm91bmRhcnkgZnJvbSAnLi9jb21tb24vZXJyb3ItYm91bmRhcnknO1xuaW1wb3J0IHtMT0NBTEVfQ09ERVN9IGZyb20gJ0BrZXBsZXIuZ2wvbG9jYWxpemF0aW9uJztcbmltcG9ydCB7XG4gIE1hcFN0eWxlLFxuICBhcmVBbnlEZWNrTGF5ZXJzTG9hZGluZyxcbiAgY29tcHV0ZURlY2tMYXllcnMsXG4gIGdldExheWVySG92ZXJQcm9wLFxuICBMYXllckhvdmVyUHJvcCxcbiAgcHJlcGFyZUxheWVyc0ZvckRlY2ssXG4gIHByZXBhcmVMYXllcnNUb1JlbmRlcixcbiAgTGF5ZXJzVG9SZW5kZXJcbn0gZnJvbSAnQGtlcGxlci5nbC9yZWR1Y2Vycyc7XG5pbXBvcnQge1Zpc1N0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuXG5pbXBvcnQgTG9hZGluZ0luZGljYXRvciBmcm9tICcuL2xvYWRpbmctaW5kaWNhdG9yJztcblxuLy8gRGVib3VuY2UgdGhlIHByb3BhZ2F0aW9uIG9mIHZpZXdwb3J0IGNoYW5nZSBhbmQgbW91c2UgbW92ZXMgdG8gcmVkdXggc3RvcmUuXG4vLyBUaGlzIGlzIHRvIGF2b2lkIHRvbyBtYW55IHJlbmRlcnMgb2Ygb3RoZXIgY29tcG9uZW50cyB3aGVuIHRoZSBtYXAgaXNcbi8vIGJlaW5nIHBhbm5lZC96b29tZWQgKGxlYWRpbmcgdG8gbGFnZ3kgYmFzZW1hcC9kZWNrIHN5bmNpbmcpLlxuY29uc3QgREVCT1VOQ0VfVklFV1BPUlRfUFJPUEFHQVRFID0gMTA7XG5jb25zdCBERUJPVU5DRV9NT1VTRV9NT1ZFX1BST1BBR0FURSA9IDEwO1xuXG4vLyBIb3cgbG9uZyBzaG91bGQgd2Ugd2FpdCBiZXR3ZWVuIGxheWVyIGxvYWRpbmcgc3RhdGUgY2hhbmdlcyBiZWZvcmUgdHJpZ2dlcmluZyBhIFVJIHVwZGF0ZVxuY29uc3QgREVCT1VOQ0VfTE9BRElOR19TVEFURV9QUk9QQUdBVEUgPSAxMDA7XG5cbmNvbnN0IE1BUF9TVFlMRToge1trZXk6IHN0cmluZ106IFJlYWN0LkNTU1Byb3BlcnRpZXN9ID0ge1xuICBjb250YWluZXI6IHtcbiAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGhlaWdodDogJzEwMCUnXG4gIH0sXG4gIHRvcDoge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHRvcDogMCxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGhlaWdodDogJzEwMCUnLFxuICAgIHBvaW50ZXJFdmVudHM6ICdub25lJ1xuICB9XG59O1xuXG5jb25zdCBMT0NBTEVfQ09ERVNfQVJSQVkgPSBPYmplY3Qua2V5cyhMT0NBTEVfQ09ERVMpO1xuXG5pbnRlcmZhY2UgU3R5bGVkTWFwQ29udGFpbmVyUHJvcHMge1xuICAkbWl4QmxlbmRNb2RlPzogc3RyaW5nO1xuICAkbWFwTGliQ3NzQ2xhc3M6IHN0cmluZztcbn1cblxuY29uc3QgU3R5bGVkTWFwID0gc3R5bGVkKFN0eWxlZE1hcENvbnRhaW5lcik8U3R5bGVkTWFwQ29udGFpbmVyUHJvcHM+KFxuICAoeyRtaXhCbGVuZE1vZGUgPSAnbm9ybWFsJywgJG1hcExpYkNzc0NsYXNzfSkgPT4gYFxuICAjZGVmYXVsdC1kZWNrZ2wtb3ZlcmxheSB7XG4gICAgbWl4LWJsZW5kLW1vZGU6ICR7JG1peEJsZW5kTW9kZX07XG4gIH07XG4gICpbJHskbWFwTGliQ3NzQ2xhc3N9LWNoaWxkcmVuXSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICB9XG5gXG4pO1xuXG5jb25zdCBNQVBCT1hHTF9TVFlMRV9VUERBVEUgPSAnc3R5bGUubG9hZCc7XG5jb25zdCBNQVBCT1hHTF9SRU5ERVIgPSAncmVuZGVyJztcblxuLy8gQ2Fub25pY2FsIE9wZW5TdHJlZXRNYXAgYXR0cmlidXRpb24sIGluamVjdGVkIGludG8gdGhlIGNvbGxlY3RlZCBsaXN0IHdoZW4gYVxuLy8gc3R5bGUgaXMgZGV0ZWN0ZWQgdG8gdXNlIE9TTSB0aWxlcyBidXQgdGhlIHJlc29sdmVkIHNvdXJjZXMgaGF2ZW4ndCB5aWVsZGVkXG4vLyBhbiBhdHRyaWJ1dGlvbiBzdHJpbmcgb2YgdGhlaXIgb3duIChlLmcuIHJhdyBzdHlsZSBkZWNsYXJlcyBPU00gYnV0IHRoZVxuLy8gVGlsZUpTT04gaGFzbid0IGV4cG9zZWQgaXQpLiBSZW5kZXJlZCB0aHJvdWdoIHRoZSBzYW1lIHNhZmUgbGluayBwYXJzZXIgYXNcbi8vIGV2ZXJ5IG90aGVyIGNvbGxlY3RlZCBhdHRyaWJ1dGlvbi5cbmNvbnN0IE9TTV9BVFRSSUJVVElPTl9IVE1MID1cbiAgJ8KpIDxhIGhyZWY9XCJodHRwczovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy9jb3B5cmlnaHRcIj5PcGVuU3RyZWV0TWFwPC9hPic7XG5cbmludGVyZmFjZSBTdHlsZWREcm9wcGFibGVQcm9wcyB7XG4gICRpc092ZXI6IGJvb2xlYW47XG59XG5cbmNvbnN0IFN0eWxlZERyb3BwYWJsZSA9IHN0eWxlZC5kaXY8U3R5bGVkRHJvcHBhYmxlUHJvcHM+YFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzID0+IChwcm9wcy4kaXNPdmVyID8gcHJvcHMudGhlbWUuZG5kT3ZlckJhY2tncm91bmRDb2xvciA6ICdub25lJyl9O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB6LWluZGV4OiAxO1xuYDtcblxuY29uc3QgU3R5bGVkTWFwU2NhbGVDb250YWluZXIgPSBzdHlsZWQuZGl2PHskbGVmdDogbnVtYmVyOyAkYm90dG9tT2Zmc2V0OiBudW1iZXJ9PmBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc2lkZVBhbmVsLm1hcmdpbi5sZWZ0ICsgcHJvcHMuJGJvdHRvbU9mZnNldH1weDtcbiAgbGVmdDogJHtwcm9wcyA9PiBwcm9wcy4kbGVmdH1weDtcbiAgei1pbmRleDogMTtcbiAgcG9pbnRlci1ldmVudHM6IGF1dG87XG5gO1xuXG5leHBvcnQgY29uc3QgaXNTcGxpdFNlbGVjdG9yID0gcHJvcHMgPT5cbiAgcHJvcHMudmlzU3RhdGUuc3BsaXRNYXBzICYmIHByb3BzLnZpc1N0YXRlLnNwbGl0TWFwcy5sZW5ndGggPiAxO1xuXG5leHBvcnQgY29uc3QgRHJvcHBhYmxlID0gKHtjb250YWluZXJJZH0pID0+IHtcbiAgY29uc3Qge2lzT3Zlciwgc2V0Tm9kZVJlZn0gPSB1c2VEcm9wcGFibGUoe1xuICAgIGlkOiBjb250YWluZXJJZCxcbiAgICBkYXRhOiB7dHlwZTogRFJPUFBBQkxFX01BUF9DT05UQUlORVJfVFlQRSwgaW5kZXg6IGNvbnRhaW5lcklkfSxcbiAgICBkaXNhYmxlZDogIWNvbnRhaW5lcklkXG4gIH0pO1xuXG4gIHJldHVybiA8U3R5bGVkRHJvcHBhYmxlIHJlZj17c2V0Tm9kZVJlZn0gJGlzT3Zlcj17aXNPdmVyfSAvPjtcbn07XG5cbi8vIEF0dHJpYnV0aW9uIFVJIChwYXJzZXIgKyBjb21wb25lbnRzKSBsaXZlcyBpbiAuL21hcC9hdHRyaWJ1dGlvbiBhbmQgaXNcbi8vIHJlLWV4cG9ydGVkIGhlcmUgdG8gcHJlc2VydmUgdGhlIHB1YmxpYyBpbXBvcnQgcGF0aCAoQGtlcGxlci5nbC9jb21wb25lbnRzKS5cbmV4cG9ydCB7QXR0cmlidXRpb24sIEF0dHJpYnV0aW9uTG9nb3MsIHJlbmRlckJhc2VtYXBBdHRyaWJ1dGlvbiwgZGVkdXBlQmFzZW1hcEF0dHJpYnV0aW9uc307XG5cbk1hcENvbnRhaW5lckZhY3RvcnkuZGVwcyA9IFtNYXBQb3BvdmVyRmFjdG9yeSwgTWFwQ29udHJvbEZhY3RvcnksIEVkaXRvckZhY3RvcnksIE1hcFNjYWxlRmFjdG9yeV07XG5cbnR5cGUgTWFwYm94U3R5bGUgPSBzdHJpbmcgfCBvYmplY3QgfCB1bmRlZmluZWQ7XG50eXBlIFByb3BTZWxlY3RvcjxSPiA9IFNlbGVjdG9yPE1hcENvbnRhaW5lclByb3BzLCBSPjtcblxuZXhwb3J0IGludGVyZmFjZSBNYXBDb250YWluZXJQcm9wcyB7XG4gIHZpc1N0YXRlOiBWaXNTdGF0ZTtcbiAgbWFwU3RhdGU6IE1hcFN0YXRlO1xuICBtYXBDb250cm9sczogTWFwQ29udHJvbHM7XG4gIG1hcFN0eWxlOiB7Ym90dG9tTWFwU3R5bGU/OiBNYXBib3hTdHlsZTsgdG9wTWFwU3R5bGU/OiBNYXBib3hTdHlsZX0gJiBNYXBTdHlsZTtcbiAgbWFwYm94QXBpQWNjZXNzVG9rZW46IHN0cmluZztcbiAgbWFwYm94QXBpVXJsOiBzdHJpbmc7XG4gIHZpc1N0YXRlQWN0aW9uczogdHlwZW9mIFZpc1N0YXRlQWN0aW9ucztcbiAgbWFwU3RhdGVBY3Rpb25zOiB0eXBlb2YgTWFwU3RhdGVBY3Rpb25zO1xuICB1aVN0YXRlQWN0aW9uczogdHlwZW9mIFVJU3RhdGVBY3Rpb25zO1xuXG4gIC8vIG9wdGlvbmFsXG4gIHByaW1hcnk/OiBib29sZWFuOyAvLyBwcmltYXJ5IG9uZSB3aWxsIGJlIHJlcG9ydGluZyBpdHMgc2l6ZSB0byBhcHBTdGF0ZVxuICByZWFkT25seT86IGJvb2xlYW47XG4gIGlzRXhwb3J0PzogYm9vbGVhbjtcbiAgLy8gb25NYXBTdHlsZUxvYWRlZD86IChtYXA6IG1hcGxpYnJlZ2wuTWFwIHwgUmV0dXJuVHlwZTxNYXBSZWZbJ2dldE1hcCddPiB8IG51bGwpID0+IHZvaWQ7XG4gIG9uTWFwU3R5bGVMb2FkZWQ/OiAobWFwOiBHZXRNYXBSZWYgfCBudWxsKSA9PiB2b2lkO1xuICBvbk1hcFJlbmRlcj86IChtYXA6IEdldE1hcFJlZiB8IG51bGwpID0+IHZvaWQ7XG4gIGdldE1hcGJveFJlZj86IChtYXBib3g/OiBNYXBSZWYgfCBudWxsLCBpbmRleD86IG51bWJlcikgPT4gdm9pZDtcbiAgaW5kZXg/OiBudW1iZXI7XG4gIGRlbGV0ZU1hcExhYmVscz86IChjb250YWluZXJJZDogc3RyaW5nLCBsYXllcklkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGNvbnRhaW5lcklkPzogbnVtYmVyO1xuXG4gIGlzTG9hZGluZ0luZGljYXRvclZpc2libGU/OiBib29sZWFuO1xuICBhY3RpdmVTaWRlUGFuZWw6IHN0cmluZyB8IG51bGw7XG4gIHNpZGVQYW5lbFdpZHRoPzogbnVtYmVyO1xuXG4gIGxvY2FsZT86IGFueTtcbiAgdWlUaGVtZT86IHN0cmluZztcbiAgdGhlbWU/OiBhbnk7XG4gIGVkaXRvcj86IGFueTtcbiAgTWFwQ29tcG9uZW50PzogdHlwZW9mIE1hcGJveExlZ2FjeU1hcCB8IHR5cGVvZiBNYXBsaWJyZU1hcDtcbiAgZGVja0dsUHJvcHM/OiBhbnk7XG4gIG9uRGVja0luaXRpYWxpemVkPzogKGE6IGFueSwgYjogYW55KSA9PiB2b2lkO1xuICBvblZpZXdTdGF0ZUNoYW5nZT86ICh2aWV3cG9ydDogVmlld3BvcnQpID0+IHZvaWQ7XG5cbiAgdG9wTWFwQ29udGFpbmVyUHJvcHM6IGFueTtcbiAgYm90dG9tTWFwQ29udGFpbmVyUHJvcHM6IGFueTtcbiAgdHJhbnNmb3JtUmVxdWVzdD86ICh1cmw6IHN0cmluZywgcmVzb3VyY2VUeXBlPzogc3RyaW5nKSA9PiB7dXJsOiBzdHJpbmd9O1xuXG4gIC8qKiBQYXNzIGBmYWxzZWAgdG8gZGlzYWJsZSB0aGUgcmVtb3RlIFJUTCB0ZXh0IHBsdWdpbiwgb3IgYSBVUkwgc3RyaW5nIHRvIHNlbGYtaG9zdCBpdC4gKi9cbiAgUlRMVGV4dFBsdWdpbj86IHN0cmluZyB8IGZhbHNlO1xuXG4gIGRhdGFzZXRBdHRyaWJ1dGlvbnM/OiBEYXRhc2V0QXR0cmlidXRpb25bXTtcbiAgYXR0cmlidXRpb25Mb2dvcz86IEF0dHJpYnV0aW9uV2l0aFN0eWxlW107XG5cbiAgZ2VuZXJhdGVNYXBib3hMYXllcnM/OiB0eXBlb2YgZ2VuZXJhdGVNYXBib3hMYXllcnM7XG4gIGdlbmVyYXRlRGVja0dMTGF5ZXJzPzogdHlwZW9mIGNvbXB1dGVEZWNrTGF5ZXJzO1xuXG4gIG9uTW91c2VNb3ZlPzogKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50ICYge2xuZ0xhdD86IFtudW1iZXIsIG51bWJlcl19KSA9PiB2b2lkO1xuXG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xuICBkZWNrUmVuZGVyQ2FsbGJhY2tzPzoge1xuICAgIG9uRGVja0xvYWQ/OiAoKSA9PiB2b2lkO1xuICAgIG9uRGVja1JlbmRlcj86IChkZWNrUHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGw7XG4gICAgb25EZWNrQWZ0ZXJSZW5kZXI/OiAoZGVja1Byb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gYW55O1xuICB9O1xuXG4gIC8vIE9wdGlvbmFsOiBvdmVycmlkZSBsZWdlbmQgaGVhZGVyIGxvZ28gaW4gbWFwIGNvbnRyb2xzICh1c2VkIGJ5IGltYWdlIGV4cG9ydClcbiAgbG9nb0NvbXBvbmVudD86IFJlYWN0LkZDIHwgUmVhY3QuUmVhY3ROb2RlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNYXBDb250YWluZXJGYWN0b3J5KFxuICBNYXBQb3BvdmVyOiBSZXR1cm5UeXBlPHR5cGVvZiBNYXBQb3BvdmVyRmFjdG9yeT4sXG4gIE1hcENvbnRyb2w6IFJldHVyblR5cGU8dHlwZW9mIE1hcENvbnRyb2xGYWN0b3J5PixcbiAgRWRpdG9yOiBSZXR1cm5UeXBlPHR5cGVvZiBFZGl0b3JGYWN0b3J5PixcbiAgTWFwU2NhbGU6IFJldHVyblR5cGU8dHlwZW9mIE1hcFNjYWxlRmFjdG9yeT5cbik6IFJlYWN0LkNvbXBvbmVudFR5cGU8TWFwQ29udGFpbmVyUHJvcHM+IHtcbiAgY2xhc3MgTWFwQ29udGFpbmVyIGV4dGVuZHMgQ29tcG9uZW50PE1hcENvbnRhaW5lclByb3BzPiB7XG4gICAgZGlzcGxheU5hbWUgPSAnTWFwQ29udGFpbmVyJztcblxuICAgIHByaXZhdGUgYW55QWN0aXZlTGF5ZXJMb2FkaW5nID0gZmFsc2U7XG5cbiAgICBzdGF0aWMgY29udGV4dFR5cGUgPSBNYXBWaWV3U3RhdGVDb250ZXh0O1xuXG4gICAgZGVjbGFyZSBjb250ZXh0OiBSZWFjdC5Db250ZXh0VHlwZTx0eXBlb2YgTWFwVmlld1N0YXRlQ29udGV4dD47XG5cbiAgICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgICAgZGVja0dsUHJvcHM6IHt9LFxuICAgICAgaW5kZXg6IDAsXG4gICAgICBwcmltYXJ5OiB0cnVlXG4gICAgfTtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICBzdXBlcihwcm9wcyk7XG4gICAgICBwYXRjaERlY2tSZW5kZXJlckZvclBvc3RQcm9jZXNzaW5nKCk7XG4gICAgfVxuXG4gICAgc3RhdGUgPSB7XG4gICAgICAvLyB0cnVlIGZvciBidWlsdC1pbiBrZXBsZXIuZ2wgc3R5bGVzIChkYXJrLW1hdHRlciwgcG9zaXRyb24sIOKApikgYW5kIHdoZW4gdGhlXG4gICAgICAvLyBiYXNlbWFwIHVzZXMgTWFwYm94LWhvc3RlZCB0aWxlcyAobWFwYm94Oi8vIHNvdXJjZXMpLlxuICAgICAgLy8gRm9yIHVzZXItYWRkZWQgY3VzdG9tIHN0eWxlcyAoT3BlbkZyZWVNYXAsIENBUlRPIHNlbGYtaG9zdGVkLCDigKYpIE1hcExpYnJlIGlzXG4gICAgICAvLyBtZXJlbHkgdGhlIHJlbmRlcmluZyBlbmdpbmUsIG5vdCB0aGUgdGlsZSBwcm92aWRlciwgc28gdGhlIGxvZ28gaXMgaGlkZGVuIGFuZFxuICAgICAgLy8gdGhlIGJhc2VtYXAncyBvd24gVGlsZUpTT04gYXR0cmlidXRpb24gaXMgc2hvd24gaW5zdGVhZC5cbiAgICAgIHNob3dCYXNlTWFwTGliTG9nbzogZmFsc2UsXG4gICAgICAvLyBhdHRyaWJ1dGlvbiBzdHJpbmdzIGNvbGxlY3RlZCBmcm9tIHRoZSByZXNvbHZlZCBtYXAgc291cmNlcyAoZS5nLiBDQVJUTyxcbiAgICAgIC8vIE9wZW5GcmVlTWFwKS4gIFBvcHVsYXRlZCBhZnRlciBUaWxlSlNPTiByZXNvbHZlcy5cbiAgICAgIGJhc2VtYXBBdHRyaWJ1dGlvbnM6IFtdIGFzIHN0cmluZ1tdXG4gICAgfTtcblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgaWYgKCF0aGlzLl9yZWYuY3VycmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBvYnNlcnZlRGltZW5zaW9ucyh0aGlzLl9yZWYuY3VycmVudCwgdGhpcy5faGFuZGxlUmVzaXplKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLl9tYXApIHtcbiAgICAgICAgdGhpcy5fbWFwLm9mZihNQVBCT1hHTF9TVFlMRV9VUERBVEUsIHRoaXMuX29uTWFwYm94U3R5bGVVcGRhdGUpO1xuICAgICAgICB0aGlzLl9tYXAub2ZmKE1BUEJPWEdMX1JFTkRFUiwgdGhpcy5fb25NYXBSZW5kZXIpO1xuICAgICAgICB0aGlzLl9yZW1vdmVCYXNlbWFwQXR0cmlidXRpb25MaXN0ZW5lcnMoKTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5fcmVmLmN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdW5vYnNlcnZlRGltZW5zaW9ucyh0aGlzLl9yZWYuY3VycmVudCk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgaWYgKHByZXZQcm9wcy5tYXBTdHlsZS5zdHlsZVR5cGUgIT09IHRoaXMucHJvcHMubWFwU3R5bGUuc3R5bGVUeXBlKSB7XG4gICAgICAgIHRoaXMuX3JlbW92ZUJhc2VtYXBBdHRyaWJ1dGlvbkxpc3RlbmVycygpO1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5tYXBTdHlsZS5zdHlsZVR5cGUgPT09IE5PX01BUF9JRCkge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgc2hvd0Jhc2VNYXBMaWJMb2dvOiBmYWxzZSxcbiAgICAgICAgICAgIGJhc2VtYXBBdHRyaWJ1dGlvbnM6IFtdXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlQXR0cmlidXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIF9kZWNrOiBhbnkgPSBudWxsO1xuICAgIF9tYXA6IEdldE1hcFJlZiB8IG51bGwgPSBudWxsO1xuICAgIF9yZWYgPSBjcmVhdGVSZWY8SFRNTERpdkVsZW1lbnQ+KCk7XG4gICAgX2RlY2tHTEVycm9yc0VsYXBzZWQ6IHtbaWQ6IHN0cmluZ106IG51bWJlcn0gPSB7fTtcbiAgICBfYmFzZW1hcFNvdXJjZURhdGFMaXN0ZW5lcjogKChlOiBhbnkpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gICAgX2Jhc2VtYXBJZGxlTGlzdGVuZXI6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuXG4gICAgX29uTWFwUmVuZGVyID0gKCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLm9uTWFwUmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMucHJvcHMub25NYXBSZW5kZXIodGhpcy5fbWFwKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJldmlvdXNMYXllcnMgPSB7XG4gICAgICAvLyBbbGF5ZXJzLmlkXTogbWFwYm94TGF5ZXJDb25maWdcbiAgICB9O1xuXG4gICAgX2hhbmRsZVJlc2l6ZSA9IGRpbWVuc2lvbnMgPT4ge1xuICAgICAgY29uc3Qge3ByaW1hcnksIGluZGV4fSA9IHRoaXMucHJvcHM7XG4gICAgICBpZiAocHJpbWFyeSkge1xuICAgICAgICBjb25zdCB7bWFwU3RhdGVBY3Rpb25zfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGlmIChkaW1lbnNpb25zICYmIGRpbWVuc2lvbnMud2lkdGggPiAwICYmIGRpbWVuc2lvbnMuaGVpZ2h0ID4gMCkge1xuICAgICAgICAgIG1hcFN0YXRlQWN0aW9ucy51cGRhdGVNYXAoZGltZW5zaW9ucywgaW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGxheWVyc1NlbGVjdG9yOiBQcm9wU2VsZWN0b3I8VmlzU3RhdGVbJ2xheWVycyddPiA9IHByb3BzID0+IHByb3BzLnZpc1N0YXRlLmxheWVycztcbiAgICBsYXllckRhdGFTZWxlY3RvcjogUHJvcFNlbGVjdG9yPFZpc1N0YXRlWydsYXllcnMnXT4gPSBwcm9wcyA9PiBwcm9wcy52aXNTdGF0ZS5sYXllckRhdGE7XG4gICAgc3BsaXRNYXBTZWxlY3RvcjogUHJvcFNlbGVjdG9yPFNwbGl0TWFwW10+ID0gcHJvcHMgPT4gcHJvcHMudmlzU3RhdGUuc3BsaXRNYXBzO1xuICAgIHNwbGl0TWFwSW5kZXhTZWxlY3RvcjogUHJvcFNlbGVjdG9yPG51bWJlciB8IHVuZGVmaW5lZD4gPSBwcm9wcyA9PiBwcm9wcy5pbmRleDtcbiAgICBtYXBMYXllcnNTZWxlY3RvcjogUHJvcFNlbGVjdG9yPFNwbGl0TWFwTGF5ZXJzIHwgbnVsbCB8IHVuZGVmaW5lZD4gPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMuc3BsaXRNYXBTZWxlY3RvcixcbiAgICAgIHRoaXMuc3BsaXRNYXBJbmRleFNlbGVjdG9yLFxuICAgICAgZ2V0TWFwTGF5ZXJzRnJvbVNwbGl0TWFwc1xuICAgICk7XG4gICAgbGF5ZXJPcmRlclNlbGVjdG9yOiBQcm9wU2VsZWN0b3I8VmlzU3RhdGVbJ2xheWVyT3JkZXInXT4gPSBwcm9wcyA9PiBwcm9wcy52aXNTdGF0ZS5sYXllck9yZGVyO1xuICAgIGxheWVyc1RvUmVuZGVyU2VsZWN0b3I6IFByb3BTZWxlY3RvcjxMYXllcnNUb1JlbmRlcj4gPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMubGF5ZXJzU2VsZWN0b3IsXG4gICAgICB0aGlzLmxheWVyRGF0YVNlbGVjdG9yLFxuICAgICAgdGhpcy5tYXBMYXllcnNTZWxlY3RvcixcbiAgICAgIHByZXBhcmVMYXllcnNUb1JlbmRlclxuICAgICk7XG4gICAgbGF5ZXJzRm9yRGVja1NlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmxheWVyc1NlbGVjdG9yLFxuICAgICAgdGhpcy5sYXllckRhdGFTZWxlY3RvcixcbiAgICAgIHByZXBhcmVMYXllcnNGb3JEZWNrXG4gICAgKTtcbiAgICBmaWx0ZXJzU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy52aXNTdGF0ZS5maWx0ZXJzO1xuICAgIHBvbHlnb25GaWx0ZXJzU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3Rvcih0aGlzLmZpbHRlcnNTZWxlY3RvciwgZmlsdGVycyA9PlxuICAgICAgZmlsdGVycy5maWx0ZXIoZiA9PiBmLnR5cGUgPT09IEZJTFRFUl9UWVBFUy5wb2x5Z29uICYmIGYuZW5hYmxlZCAhPT0gZmFsc2UpXG4gICAgKTtcbiAgICBmZWF0dXJlc1NlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMudmlzU3RhdGUuZWRpdG9yLmZlYXR1cmVzO1xuICAgIHNlbGVjdGVkRmVhdHVyZVNlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMudmlzU3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZTtcbiAgICBmZWF0dXJlQ29sbGVjdGlvblNlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLnBvbHlnb25GaWx0ZXJzU2VsZWN0b3IsXG4gICAgICB0aGlzLmZlYXR1cmVzU2VsZWN0b3IsXG4gICAgICAocG9seWdvbkZpbHRlcnMsIGZlYXR1cmVzKSA9PiAoe1xuICAgICAgICB0eXBlOiAnRmVhdHVyZUNvbGxlY3Rpb24nLFxuICAgICAgICBmZWF0dXJlczogZmVhdHVyZXMuY29uY2F0KHBvbHlnb25GaWx0ZXJzLm1hcChmID0+IGYudmFsdWUpKVxuICAgICAgfSlcbiAgICApO1xuICAgIC8vIEB0cy1pZ25vcmUgLSBObyBvdmVybG9hZCBtYXRjaGVzIHRoaXMgY2FsbFxuICAgIHNlbGVjdGVkUG9seWdvbkluZGV4U2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMuZmVhdHVyZUNvbGxlY3Rpb25TZWxlY3RvcixcbiAgICAgIHRoaXMuc2VsZWN0ZWRGZWF0dXJlU2VsZWN0b3IsXG4gICAgICAoY29sbGVjdGlvbiwgc2VsZWN0ZWRGZWF0dXJlKSA9PlxuICAgICAgICBjb2xsZWN0aW9uLmZlYXR1cmVzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IHNlbGVjdGVkRmVhdHVyZT8uaWQpXG4gICAgKTtcbiAgICBzZWxlY3RlZEZlYXR1cmVJbmRleEFycmF5U2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgICh2YWx1ZTogbnVtYmVyKSA9PiB2YWx1ZSxcbiAgICAgIHZhbHVlID0+IHtcbiAgICAgICAgcmV0dXJuIHZhbHVlIDwgMCA/IFtdIDogW3ZhbHVlXTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgZ2VuZXJhdGVNYXBib3hMYXllck1ldGhvZFNlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMuZ2VuZXJhdGVNYXBib3hMYXllcnMgPz8gZ2VuZXJhdGVNYXBib3hMYXllcnM7XG5cbiAgICBtYXBib3hMYXllcnNTZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5sYXllcnNTZWxlY3RvcixcbiAgICAgIHRoaXMubGF5ZXJEYXRhU2VsZWN0b3IsXG4gICAgICB0aGlzLmxheWVyT3JkZXJTZWxlY3RvcixcbiAgICAgIHRoaXMubGF5ZXJzVG9SZW5kZXJTZWxlY3RvcixcbiAgICAgIHRoaXMuZ2VuZXJhdGVNYXBib3hMYXllck1ldGhvZFNlbGVjdG9yLFxuICAgICAgKGxheWVyLCBsYXllckRhdGEsIGxheWVyT3JkZXIsIGxheWVyc1RvUmVuZGVyLCBnZW5lcmF0ZU1hcGJveExheWVyTWV0aG9kKSA9PlxuICAgICAgICBnZW5lcmF0ZU1hcGJveExheWVyTWV0aG9kKGxheWVyLCBsYXllckRhdGEsIGxheWVyT3JkZXIsIGxheWVyc1RvUmVuZGVyKVxuICAgICk7XG5cbiAgICAvLyBtZXJnZSBpbiBhIGJhY2tncm91bmQtY29sb3Igc3R5bGUgaWYgdGhlIGJhc2VtYXAgY2hvaWNlIGlzIE5PX01BUF9JRFxuICAgIC8vIHVzZWQgYnkgPFN0eWxlZE1hcD4gaW5saW5lIHN0eWxlIHByb3BcbiAgICBtYXBTdHlsZVR5cGVTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLm1hcFN0eWxlLnN0eWxlVHlwZTtcbiAgICBtYXBTdHlsZUJhY2tncm91bmRDb2xvclNlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMubWFwU3R5bGUuYmFja2dyb3VuZENvbG9yO1xuICAgIGdsb2JlTW9kZVNlbGVjdG9yID0gcHJvcHMgPT4gQm9vbGVhbihwcm9wcy5tYXBTdGF0ZT8uZ2xvYmU/LmVuYWJsZWQpO1xuICAgIGdsb2JlQmFja2dyb3VuZENvbG9yU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy5tYXBTdGF0ZT8uZ2xvYmU/LmNvbmZpZz8uYmFja2dyb3VuZENvbG9yO1xuICAgIGdsb2JlU3RhcnNTZWxlY3RvciA9IHByb3BzID0+IEJvb2xlYW4ocHJvcHMubWFwU3RhdGU/Lmdsb2JlPy5jb25maWc/LnN0YXJzKTtcbiAgICBzdHlsZVNlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLm1hcFN0eWxlVHlwZVNlbGVjdG9yLFxuICAgICAgdGhpcy5tYXBTdHlsZUJhY2tncm91bmRDb2xvclNlbGVjdG9yLFxuICAgICAgdGhpcy5nbG9iZU1vZGVTZWxlY3RvcixcbiAgICAgIHRoaXMuZ2xvYmVCYWNrZ3JvdW5kQ29sb3JTZWxlY3RvcixcbiAgICAgIHRoaXMuZ2xvYmVTdGFyc1NlbGVjdG9yLFxuICAgICAgKHN0eWxlVHlwZSwgYmFja2dyb3VuZENvbG9yLCBpc0dsb2JlTW9kZSwgZ2xvYmVCYWNrZ3JvdW5kQ29sb3IsIGdsb2JlU3RhcnMpID0+ICh7XG4gICAgICAgIC4uLk1BUF9TVFlMRS5jb250YWluZXIsXG4gICAgICAgIC4uLihzdHlsZVR5cGUgPT09IE5PX01BUF9JRCA/IHtiYWNrZ3JvdW5kQ29sb3I6IHJnYlRvSGV4KGJhY2tncm91bmRDb2xvcil9IDoge30pLFxuICAgICAgICAvLyBJbiBnbG9iZSBtb2RlIHRoZSBkZWNrLmdsIGNhbnZhcyBpcyB0cmFuc3BhcmVudCAodGhlIGdsb2JlIFZpZXcgdXNlc1xuICAgICAgICAvLyBgY2xlYXJDb2xvcjogZmFsc2VgIHRvIGF2b2lkIGNvcnJ1cHRpbmcgdGhlIHBpY2tpbmcgYnVmZmVyKSwgc28gdGhlXG4gICAgICAgIC8vIGJhY2tncm91bmQgYXJvdW5kIHRoZSBnbG9iZSBpcyBwYWludGVkIGhlcmUgb24gdGhlIGNvbnRhaW5lciBpbnN0ZWFkLlxuICAgICAgICAuLi4oaXNHbG9iZU1vZGVcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IGdsb2JlIGJhY2tncm91bmQgd2hlbiBub25lIGlzIGNvbmZpZ3VyZWQuXG4gICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogcmdiVG9IZXgoXG4gICAgICAgICAgICAgICAgKGdsb2JlQmFja2dyb3VuZENvbG9yIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSkgfHxcbiAgICAgICAgICAgICAgICAgIChnZXRHbG9iZUNsZWFyQ29sb3IoKS5zbGljZSgwLCAzKSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIC8vIE9wdGlvbmFsbHkgb3ZlcmxheSBhIHRpbGVhYmxlIHN0YXItZmllbGQgcGF0dGVybiBvbiB0aGUgYmFja2dyb3VuZC5cbiAgICAgICAgICAgICAgLi4uKGdsb2JlU3RhcnNcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZEltYWdlOiBgdXJsKCcke2dldFN0YXJzQmFja2dyb3VuZEltYWdlKCl9JylgLFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kUmVwZWF0OiAncmVwZWF0J1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDoge30pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7fSlcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8qIGNvbXBvbmVudCBwcml2YXRlIGZ1bmN0aW9ucyAqL1xuICAgIF9vbkNsb3NlTWFwUG9wb3ZlciA9ICgpID0+IHtcbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLm9uTGF5ZXJDbGljayhudWxsKTtcbiAgICB9O1xuXG4gICAgX29uTGF5ZXJIb3ZlciA9IChfaWR4OiBudW1iZXIsIGluZm86IFBpY2tpbmdJbmZvPGFueT4gfCBudWxsKSA9PiB7XG4gICAgICB0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5vbkxheWVySG92ZXIoaW5mbywgdGhpcy5wcm9wcy5pbmRleCk7XG4gICAgfTtcblxuICAgIF9vbkxheWVyU2V0RG9tYWluID0gKFxuICAgICAgaWR4OiBudW1iZXIsXG4gICAgICB2YWx1ZTogbnVtYmVyW10gfCB7ZG9tYWluOiBWaXN1YWxDaGFubmVsRG9tYWluOyBhZ2dyZWdhdGVkQmluczogUmVjb3JkPG51bWJlciwgQWdncmVnYXRlZEJpbj59XG4gICAgKSA9PiB7XG4gICAgICAvLyBkZWNrLmdsIDkgbmF0aXZlIGFnZ3JlZ2F0aW9uIGxheWVycyAoR3JpZCwgSGV4YWdvbikgcGFzc1xuICAgICAgLy8ge2RvbWFpbiwgYWdncmVnYXRlZEJpbnN9IHZpYSBvdXIgU2NhbGVFbmhhbmNlZCogb3ZlcnJpZGVzLFxuICAgICAgLy8gd2hpbGUgQ2x1c3RlckxheWVyJ3MgQ1BVQWdncmVnYXRvciBhbHNvIHBhc3NlcyB7ZG9tYWluLCBhZ2dyZWdhdGVkQmluc30uXG4gICAgICAvLyBQbGFpbiBbbWluLCBtYXhdIGlzIGEgZmFsbGJhY2sgaWYgdGhlIG92ZXJyaWRlIGlzIGJ5cGFzc2VkLlxuICAgICAgY29uc3QgY29uZmlnID0gQXJyYXkuaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgPyB7Y29sb3JEb21haW46IHZhbHVlIGFzIFZpc3VhbENoYW5uZWxEb21haW59XG4gICAgICAgIDoge2NvbG9yRG9tYWluOiB2YWx1ZS5kb21haW4sIGFnZ3JlZ2F0ZWRCaW5zOiB2YWx1ZS5hZ2dyZWdhdGVkQmluc307XG5cbiAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5wcm9wcy52aXNTdGF0ZS5sYXllcnNbaWR4XTtcbiAgICAgIGlmICghbGF5ZXIpIHJldHVybjtcblxuICAgICAgdGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMubGF5ZXJDb25maWdDaGFuZ2UobGF5ZXIsIGNvbmZpZyBhcyBQYXJ0aWFsPExheWVyQmFzZUNvbmZpZz4pO1xuICAgIH07XG5cbiAgICBfb25SZWRyYXdOZWVkZWQgPSAoX2lkeDogbnVtYmVyKSA9PiB7XG4gICAgICAvLyB1cGRhdGVNYXBVcGRhdGVyIGFsd2F5cyByZXR1cm5zIGEgbmV3IHN0YXRlIG9iamVjdCByZWZlcmVuY2UsIHdoaWNoIHRyaWdnZXJzIHJlLXJlbmRlclxuICAgICAgY29uc3Qge21hcFN0YXRlQWN0aW9ucywgaW5kZXh9ID0gdGhpcy5wcm9wcztcbiAgICAgIG1hcFN0YXRlQWN0aW9ucy51cGRhdGVNYXAoe30sIGluZGV4KTtcbiAgICB9O1xuXG4gICAgX29uRml0Qm91bmRzID0gKF9pZHg6IG51bWJlciwgYm91bmRzOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy5tYXBTdGF0ZUFjdGlvbnMuZml0Qm91bmRzKGJvdW5kcyk7XG4gICAgfTtcblxuICAgIF9vbkxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZSA9IChpZHgsIGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5sYXllckZpbHRlcmVkSXRlbXNDaGFuZ2UodGhpcy5wcm9wcy52aXNTdGF0ZS5sYXllcnNbaWR4XSwgZXZlbnQpO1xuICAgIH07XG5cbiAgICBfb25XTVNGZWF0dXJlSW5mbyA9IChcbiAgICAgIGlkeDogbnVtYmVyLFxuICAgICAgZGF0YToge1xuICAgICAgICBmZWF0dXJlSW5mbzogQXJyYXk8e25hbWU6IHN0cmluZzsgdmFsdWU6IHN0cmluZ30+IHwgc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgY29vcmRpbmF0ZT86IFtudW1iZXIsIG51bWJlcl0gfCBudWxsO1xuICAgICAgfVxuICAgICkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMud21zRmVhdHVyZUluZm8oXG4gICAgICAgIHRoaXMucHJvcHMudmlzU3RhdGUubGF5ZXJzW2lkeF0sXG4gICAgICAgIGRhdGEuZmVhdHVyZUluZm8sXG4gICAgICAgIGRhdGEuY29vcmRpbmF0ZVxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgX2hhbmRsZU1hcFRvZ2dsZUxheWVyID0gbGF5ZXJJZCA9PiB7XG4gICAgICBjb25zdCB7aW5kZXg6IG1hcEluZGV4ID0gMCwgdmlzU3RhdGVBY3Rpb25zfSA9IHRoaXMucHJvcHM7XG4gICAgICB2aXNTdGF0ZUFjdGlvbnMudG9nZ2xlTGF5ZXJGb3JNYXAobWFwSW5kZXgsIGxheWVySWQpO1xuICAgIH07XG5cbiAgICBfb25NYXBib3hTdHlsZVVwZGF0ZSA9IHVwZGF0ZSA9PiB7XG4gICAgICAvLyBmb3JjZSByZWZyZXNoIG1hcGJveGdsIGxheWVyc1xuICAgICAgdGhpcy5wcmV2aW91c0xheWVycyA9IHt9O1xuICAgICAgdGhpcy5fdXBkYXRlTWFwYm94TGF5ZXJzKCk7XG5cbiAgICAgIHRoaXMuX3VwZGF0ZUF0dHJpYnV0aW9uKHVwZGF0ZSk7XG5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vbk1hcFN0eWxlTG9hZGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMucHJvcHMub25NYXBTdHlsZUxvYWRlZCh0aGlzLl9tYXApO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfdXBkYXRlQXR0cmlidXRpb24gPSAodXBkYXRlPzogYW55KSA9PiB7XG4gICAgICB0aGlzLl9yZW1vdmVCYXNlbWFwQXR0cmlidXRpb25MaXN0ZW5lcnMoKTtcblxuICAgICAgbGV0IHN0eWxlT2JqID0gdXBkYXRlPy5zdHlsZSB8fCBudWxsO1xuICAgICAgaWYgKCFzdHlsZU9iaiAmJiB0aGlzLl9tYXApIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByYXdTdHlsZSA9IHRoaXMuX21hcC5pc1N0eWxlTG9hZGVkPy4oKSA/IHRoaXMuX21hcC5nZXRTdHlsZT8uKCkgOiBudWxsO1xuICAgICAgICAgIGlmIChyYXdTdHlsZSkge1xuICAgICAgICAgICAgc3R5bGVPYmogPSB7c3R5bGVzaGVldDogcmF3U3R5bGV9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gbWFwIHN0eWxlIG5vdCByZWFkeSB5ZXRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgdXNlc01hcGJveCA9IHN0eWxlT2JqID8gaXNTdHlsZVVzaW5nTWFwYm94VGlsZXMoc3R5bGVPYmopIDogZmFsc2U7XG4gICAgICBjb25zdCB1c2VzT3NtID0gc3R5bGVPYmogPyBpc1N0eWxlVXNpbmdPcGVuU3RyZWV0TWFwVGlsZXMoc3R5bGVPYmopIDogZmFsc2U7XG4gICAgICBjb25zdCBiYXNlbWFwQXR0cmlidXRpb25zID0gZ2V0QmFzZU1hcEF0dHJpYnV0aW9ucyh0aGlzLl9tYXApO1xuXG4gICAgICAvLyBpZiBPU00gdGlsZXMgYXJlIGRldGVjdGVkIGluIHRoZSByYXcgc3R5bGUgYnV0IG5vIHNvdXJjZS1sZXZlbCBhdHRyaWJ1dGlvblxuICAgICAgLy8gc3RyaW5nIHdhcyBjb2xsZWN0ZWQgeWV0LCBmb2xkIGluIHRoZSBjYW5vbmljYWwgT1NNIGF0dHJpYnV0aW9uIHNvIHRoZVxuICAgICAgLy8gcmVuZGVyIHBhdGggc3RheXMgdW5pZm9ybSAobm8gc2VwYXJhdGUgaGFyZGNvZGVkIGZhbGxiYWNrIGxpbmspXG4gICAgICBpZiAodXNlc09zbSAmJiAhYmFzZW1hcEF0dHJpYnV0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgYmFzZW1hcEF0dHJpYnV0aW9ucy5wdXNoKE9TTV9BVFRSSUJVVElPTl9IVE1MKTtcbiAgICAgIH1cblxuICAgICAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgdG8gc2hvdyB0aGUgXCJCYXNlbWFwIGJ5OiBNYXBMaWJyZS9NYXBib3hcIiBsb2dvOlxuICAgICAgLy8gIC0gQWx3YXlzIHNob3cgZm9yIGJ1aWx0LWluIGtlcGxlci5nbCBzdHlsZXMgKGRhcmstbWF0dGVyLCBwb3NpdHJvbiwg4oCmKTpcbiAgICAgIC8vICAgIHRoZXkgZG9uJ3QgY2FycnkgdGhlaXIgb3duIFwicHJvdmlkZXJcIiBicmFuZGluZyBzbyB0aGUgcmVuZGVyaW5nLWVuZ2luZVxuICAgICAgLy8gICAgbG9nbyBhY3RzIGFzIHRoZSBiYXNlbWFwIGNyZWRpdC5cbiAgICAgIC8vICAtIEFsd2F5cyBzaG93IHdoZW4gTWFwYm94IHRpbGVzIGFyZSBpbiB1c2UgKG1hcGJveDovLyBzb3VyY2VzKTogTWFwYm94XG4gICAgICAvLyAgICBhdHRyaWJ1dGlvbiBpcyByZXF1aXJlZC5cbiAgICAgIC8vICAtIEhpZGUgZm9yIGN1c3RvbSB1c2VyLWFkZGVkIHN0eWxlcyAoY3VzdG9tID09PSAnTE9DQUwnIHwgJ01BTkFHRUQnKTpcbiAgICAgIC8vICAgIHRob3NlIHN0eWxlcyBzdXBwbHkgdGhlaXIgb3duIFRpbGVKU09OIGF0dHJpYnV0aW9uIChlLmcuIE9wZW5GcmVlTWFwKSxcbiAgICAgIC8vICAgIHNvIHNob3dpbmcgXCJCYXNlbWFwIGJ5OiBNYXBMaWJyZVwiIHdvdWxkIGJlIG1pc2xlYWRpbmcuXG4gICAgICBjb25zdCBzdHlsZVR5cGUgPSB0aGlzLnByb3BzLm1hcFN0eWxlPy5zdHlsZVR5cGU7XG4gICAgICBjb25zdCBjdXJyZW50U3R5bGUgPSB0aGlzLnByb3BzLm1hcFN0eWxlPy5tYXBTdHlsZXM/LltzdHlsZVR5cGVdO1xuICAgICAgY29uc3QgaXNVc2VyQ3VzdG9tU3R5bGUgPSBCb29sZWFuKGN1cnJlbnRTdHlsZT8uY3VzdG9tKTtcbiAgICAgIGNvbnN0IHNob3dCYXNlTWFwTGliTG9nbyA9IHVzZXNNYXBib3ggfHwgIWlzVXNlckN1c3RvbVN0eWxlO1xuXG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgc2hvd0Jhc2VNYXBMaWJMb2dvLFxuICAgICAgICBiYXNlbWFwQXR0cmlidXRpb25zXG4gICAgICB9KTtcblxuICAgICAgLy8gRm9yIG5vbi1NYXBib3ggc3R5bGVzLCBUaWxlSlNPTiBhdHRyaWJ1dGlvbiByZXNvbHZlcyBhc3luY2hyb25vdXNseVxuICAgICAgLy8gYWZ0ZXIgc3R5bGUubG9hZC4gIFN0YXJ0IGEgbGlzdGVuZXIgc28gd2UgY2FuIHVwZGF0ZSBiYXNlbWFwQXR0cmlidXRpb25zXG4gICAgICAvLyBhcyBzb29uIGFzIHRoZSBzb3VyY2VzIHJlc29sdmUgdGhlaXIgVGlsZUpTT04uXG4gICAgICBpZiAoIXVzZXNNYXBib3gpIHtcbiAgICAgICAgdGhpcy5fY29sbGVjdEJhc2VtYXBBdHRyaWJ1dGlvbnMoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3JlbW92ZUJhc2VtYXBBdHRyaWJ1dGlvbkxpc3RlbmVycyA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9iYXNlbWFwU291cmNlRGF0YUxpc3RlbmVyICYmIHRoaXMuX21hcCkge1xuICAgICAgICB0aGlzLl9tYXAub2ZmKCdzb3VyY2VkYXRhJywgdGhpcy5fYmFzZW1hcFNvdXJjZURhdGFMaXN0ZW5lcik7XG4gICAgICAgIHRoaXMuX2Jhc2VtYXBTb3VyY2VEYXRhTGlzdGVuZXIgPSBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2Jhc2VtYXBJZGxlTGlzdGVuZXIgJiYgdGhpcy5fbWFwKSB7XG4gICAgICAgIHRoaXMuX21hcC5vZmYoJ2lkbGUnLCB0aGlzLl9iYXNlbWFwSWRsZUxpc3RlbmVyKTtcbiAgICAgICAgdGhpcy5fYmFzZW1hcElkbGVMaXN0ZW5lciA9IG51bGw7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9jb2xsZWN0QmFzZW1hcEF0dHJpYnV0aW9ucyA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5fbWFwKSByZXR1cm47XG4gICAgICB0aGlzLl9yZW1vdmVCYXNlbWFwQXR0cmlidXRpb25MaXN0ZW5lcnMoKTtcbiAgICAgIGxldCBhdHRlbXB0cyA9IDA7XG4gICAgICAvLyBDYXAgcmV0cmllcyBzbyBhIHN0eWxlIHRoYXQgbmV2ZXIgeWllbGRzIGF0dHJpYnV0aW9ucyBkb2Vzbid0IGxlYXZlIGFcbiAgICAgIC8vIHBlcm1hbmVudCBzb3VyY2VkYXRhIGxpc3RlbmVyIGF0dGFjaGVkLlxuICAgICAgY29uc3QgTUFYX0FUVEVNUFRTID0gNTA7XG5cbiAgICAgIGNvbnN0IHRyeUNvbGxlY3QgPSAoKSA9PiB7XG4gICAgICAgIC8vIFRpbGVKU09OIHJlc29sdmVzIGFzeW5jaHJvbm91c2x5OyByZS1jb2xsZWN0IGF0dHJpYnV0aW9ucyBvbmNlIGFcbiAgICAgICAgLy8gc291cmNlJ3MgbWV0YWRhdGEgaXMgYXZhaWxhYmxlIHNvIGN1c3RvbSBiYXNlbWFwIGF0dHJpYnV0aW9ucyBhcmUgbm90IGxvc3QuXG4gICAgICAgIGNvbnN0IGJhc2VtYXBBdHRyaWJ1dGlvbnMgPSBnZXRCYXNlTWFwQXR0cmlidXRpb25zKHRoaXMuX21hcCk7XG4gICAgICAgIGlmIChiYXNlbWFwQXR0cmlidXRpb25zLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuX3JlbW92ZUJhc2VtYXBBdHRyaWJ1dGlvbkxpc3RlbmVycygpO1xuICAgICAgICAgIC8vIERvbid0IGNoYW5nZSBzaG93QmFzZU1hcExpYkxvZ28gaGVyZSDigJQgaXQgaXMgZml4ZWQgYXQgc3R5bGUubG9hZCB0aW1lXG4gICAgICAgICAgLy8gYmFzZWQgb24gd2hldGhlciB0aGUgc3R5bGUgdXNlcyBNYXBib3ggdGlsZXMuICBXZSBvbmx5IHVwZGF0ZSB0aGVcbiAgICAgICAgICAvLyBwcm92aWRlciBhdHRyaWJ1dGlvbnMgY29sbGVjdGVkIGZyb20gdGhlIHJlc29sdmVkIFRpbGVKU09OLlxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe2Jhc2VtYXBBdHRyaWJ1dGlvbnN9KTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvblNvdXJjZURhdGEgPSAoZTogYW55KSA9PiB7XG4gICAgICAgIC8vIENvbGxlY3QgYXR0cmlidXRpb25zIHdoZW46XG4gICAgICAgIC8vICAgKGEpIGEgc291cmNlJ3MgVGlsZUpTT04gaGFzIGp1c3QgYmVlbiBmZXRjaGVkIChzb3VyY2VEYXRhVHlwZSA9PT0gJ21ldGFkYXRhJykg4oCUXG4gICAgICAgIC8vICAgICAgIHRoaXMgaXMgdGhlIGVhcmxpZXN0IG1vbWVudCB0aGUgYGF0dHJpYnV0aW9uYCBwcm9wZXJ0eSBpcyBhdmFpbGFibGUgb24gdGhlXG4gICAgICAgIC8vICAgICAgIHJlc29sdmVkIHNvdXJjZSBvYmplY3QsIG9yXG4gICAgICAgIC8vICAgKGIpIGEgc291cmNlIGlzIGZ1bGx5IGxvYWRlZCAoaXNTb3VyY2VMb2FkZWQgPT09IHRydWUpIOKAlCBmYWxsYmFjayBmb3IgcmFzdGVyXG4gICAgICAgIC8vICAgICAgIHNvdXJjZXMgb3Igc3R5bGVzIHRoYXQgc2V0IGF0dHJpYnV0aW9uIGlubGluZSByYXRoZXIgdGhhbiB2aWEgVGlsZUpTT04uXG4gICAgICAgIGlmICghZT8uaXNTb3VyY2VMb2FkZWQgJiYgZT8uc291cmNlRGF0YVR5cGUgIT09ICdtZXRhZGF0YScpIHJldHVybjtcbiAgICAgICAgYXR0ZW1wdHMrKztcbiAgICAgICAgdHJ5Q29sbGVjdCgpO1xuICAgICAgICBpZiAoYXR0ZW1wdHMgPj0gTUFYX0FUVEVNUFRTKSB7XG4gICAgICAgICAgdGhpcy5fcmVtb3ZlQmFzZW1hcEF0dHJpYnV0aW9uTGlzdGVuZXJzKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIC8vIFRoZSBgaWRsZWAgZXZlbnQgZmlyZXMgd2hlbiB0aGUgbWFwIGhhcyBmaW5pc2hlZCBsb2FkaW5nIGFsbCBwZW5kaW5nXG4gICAgICAvLyByZXNvdXJjZXMgKHRpbGVzLCBUaWxlSlNPTiwgc3ByaXRlcykuIEF0IHRoYXQgcG9pbnQgYXR0cmlidXRpb25zIGZyb21cbiAgICAgIC8vIGFsbCBzb3VyY2VzIGFyZSBndWFyYW50ZWVkIHRvIGJlIHJlc29sdmVkLCBzbyB0aGlzIGlzIGEgcmVsaWFibGVcbiAgICAgIC8vIG9uZS1zaG90IGZhbGxiYWNrIHRoYXQgY2F0Y2hlcyBjYXNlcyB3aGVyZSB0aGUgc291cmNlZGF0YSBtZXRhZGF0YVxuICAgICAgLy8gZXZlbnRzIGFyZSBtaXNzZWQgb3IgdGhlIHNvdXJjZSBuZXZlciByZWFjaGVzIGlzU291cmNlTG9hZGVkLlxuICAgICAgY29uc3Qgb25JZGxlID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9yZW1vdmVCYXNlbWFwQXR0cmlidXRpb25MaXN0ZW5lcnMoKTtcbiAgICAgICAgY29uc3QgYmFzZW1hcEF0dHJpYnV0aW9ucyA9IGdldEJhc2VNYXBBdHRyaWJ1dGlvbnModGhpcy5fbWFwKTtcbiAgICAgICAgaWYgKGJhc2VtYXBBdHRyaWJ1dGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7YmFzZW1hcEF0dHJpYnV0aW9uc30pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0aGlzLl9iYXNlbWFwU291cmNlRGF0YUxpc3RlbmVyID0gb25Tb3VyY2VEYXRhO1xuICAgICAgdGhpcy5fYmFzZW1hcElkbGVMaXN0ZW5lciA9IG9uSWRsZTtcbiAgICAgIHRoaXMuX21hcC5vbignc291cmNlZGF0YScsIG9uU291cmNlRGF0YSk7XG4gICAgICB0aGlzLl9tYXAub24oJ2lkbGUnLCBvbklkbGUpO1xuICAgIH07XG5cbiAgICBfc2V0TWFwUmVmID0gbWFwUmVmID0+IHtcbiAgICAgIC8vIEhhbmRsZSBjaGFuZ2Ugb2YgdGhlIG1hcCBsaWJyYXJ5XG4gICAgICBpZiAodGhpcy5fbWFwICYmIG1hcFJlZikge1xuICAgICAgICBjb25zdCBtYXAgPSBtYXBSZWYuZ2V0TWFwKCk7XG4gICAgICAgIGlmIChtYXAgJiYgdGhpcy5fbWFwICE9PSBtYXApIHtcbiAgICAgICAgICB0aGlzLl9tYXAub2ZmKE1BUEJPWEdMX1NUWUxFX1VQREFURSwgdGhpcy5fb25NYXBib3hTdHlsZVVwZGF0ZSk7XG4gICAgICAgICAgdGhpcy5fbWFwLm9mZihNQVBCT1hHTF9SRU5ERVIsIHRoaXMuX29uTWFwUmVuZGVyKTtcbiAgICAgICAgICB0aGlzLl9yZW1vdmVCYXNlbWFwQXR0cmlidXRpb25MaXN0ZW5lcnMoKTtcbiAgICAgICAgICB0aGlzLl9tYXAgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5fbWFwICYmIG1hcFJlZikge1xuICAgICAgICB0aGlzLl9tYXAgPSBtYXBSZWYuZ2V0TWFwKCk7XG4gICAgICAgIC8vIGkgbm90aWNlZCBpbiBjZXJ0YWluIGNvbnRleHQgd2UgZG9uJ3QgYWNjZXNzIHRoZSBhY3R1YWwgbWFwIGVsZW1lbnRcbiAgICAgICAgaWYgKCF0aGlzLl9tYXApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gYmluZCBtYXBib3hnbCBldmVudCBsaXN0ZW5lclxuICAgICAgICB0aGlzLl9tYXAub24oTUFQQk9YR0xfU1RZTEVfVVBEQVRFLCB0aGlzLl9vbk1hcGJveFN0eWxlVXBkYXRlKTtcbiAgICAgICAgdGhpcy5fbWFwLm9uKE1BUEJPWEdMX1JFTkRFUiwgdGhpcy5fb25NYXBSZW5kZXIpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5wcm9wcy5nZXRNYXBib3hSZWYpIHtcbiAgICAgICAgLy8gVGhlIHBhcmVudCBjb21wb25lbnQgY2FuIGdhaW4gYWNjZXNzIHRvIG91ciBNYXBib3hHbE1hcCBieVxuICAgICAgICAvLyBwcm92aWRpbmcgdGhpcyBjYWxsYmFjay4gTm90ZSB0aGF0ICdtYXBib3gnIHdpbGwgYmUgbnVsbCB3aGVuIHRoZVxuICAgICAgICAvLyByZWYgaXMgdW5zZXQgKGUuZy4gd2hlbiBhIHNwbGl0IG1hcCBpcyBjbG9zZWQpLlxuICAgICAgICB0aGlzLnByb3BzLmdldE1hcGJveFJlZihtYXBSZWYsIHRoaXMucHJvcHMuaW5kZXgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfb25EZWNrSW5pdGlhbGl6ZWQoZGV2aWNlKSB7XG4gICAgICBpZiAodGhpcy5wcm9wcy5vbkRlY2tJbml0aWFsaXplZCkge1xuICAgICAgICB0aGlzLnByb3BzLm9uRGVja0luaXRpYWxpemVkKHRoaXMuX2RlY2ssIGRldmljZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogMSkgQWxsb3cgZWZmZWN0cyBvbmx5IGZvciB0aGUgZmlyc3Qgdmlldy5cbiAgICAgKiAyKSBQcmV2ZW50IGVmZmVjdDpwcmVSZW5kZXIgY2FsbCB3aXRob3V0IHZhbGlkIGdlbmVyYXRlZCB2aWV3cG9ydHMuXG4gICAgICogQHBhcmFtIHZpZXdJbmRleCBWaWV3IGluZGV4LlxuICAgICAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiBlZmZlY3RzIGNhbiBiZSB1c2VkLlxuICAgICAqL1xuICAgIF9pc09LVG9SZW5kZXJFZmZlY3RzKHZpZXdJbmRleD86IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuICF2aWV3SW5kZXggJiYgQm9vbGVhbih0aGlzLl9kZWNrPy52aWV3TWFuYWdlcj8uX3ZpZXdwb3J0cz8ubGVuZ3RoKTtcbiAgICB9XG5cbiAgICBfb25CZWZvcmVSZW5kZXIgPSAoKSA9PiB7XG4gICAgICAvLyBuby1vcFxuICAgIH07XG5cbiAgICBfYW5ub3RhdGlvblZpZXdwb3J0Q2FjaGU6IHtrZXk6IHN0cmluZzsgdmlld3BvcnQ6IGFueX0gfCBudWxsID0gbnVsbDtcblxuICAgIF93YXNJbnRlcmFjdGluZyA9IGZhbHNlO1xuXG4gICAgX2dldEFubm90YXRpb25WaWV3cG9ydChtYXBTdGF0ZTogYW55LCBpbnRlcm5hbFZpZXdTdGF0ZTogYW55KSB7XG4gICAgICBjb25zdCBsb25naXR1ZGUgPSBpbnRlcm5hbFZpZXdTdGF0ZT8ubG9uZ2l0dWRlID8/IG1hcFN0YXRlLmxvbmdpdHVkZTtcbiAgICAgIGNvbnN0IGxhdGl0dWRlID0gaW50ZXJuYWxWaWV3U3RhdGU/LmxhdGl0dWRlID8/IG1hcFN0YXRlLmxhdGl0dWRlO1xuICAgICAgY29uc3Qgem9vbSA9IGludGVybmFsVmlld1N0YXRlPy56b29tID8/IG1hcFN0YXRlLnpvb207XG4gICAgICBjb25zdCBwaXRjaCA9IGludGVybmFsVmlld1N0YXRlPy5waXRjaCA/PyBtYXBTdGF0ZS5waXRjaCA/PyAwO1xuICAgICAgY29uc3QgYmVhcmluZyA9IGludGVybmFsVmlld1N0YXRlPy5iZWFyaW5nID8/IG1hcFN0YXRlLmJlYXJpbmcgPz8gMDtcbiAgICAgIGNvbnN0IHdpZHRoID0gbWFwU3RhdGUud2lkdGggfHwgMDtcbiAgICAgIGNvbnN0IGhlaWdodCA9IG1hcFN0YXRlLmhlaWdodCB8fCAwO1xuICAgICAgY29uc3Qga2V5ID0gYCR7bG9uZ2l0dWRlfSwke2xhdGl0dWRlfSwke3pvb219LCR7cGl0Y2h9LCR7YmVhcmluZ30sJHt3aWR0aH0sJHtoZWlnaHR9YDtcblxuICAgICAgaWYgKHRoaXMuX2Fubm90YXRpb25WaWV3cG9ydENhY2hlPy5rZXkgPT09IGtleSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYW5ub3RhdGlvblZpZXdwb3J0Q2FjaGUudmlld3BvcnQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lcmdlZFN0YXRlID0gey4uLm1hcFN0YXRlLCAuLi5pbnRlcm5hbFZpZXdTdGF0ZSwgd2lkdGgsIGhlaWdodH07XG4gICAgICBjb25zdCB2cCA9IGdldFZpZXdwb3J0RnJvbU1hcFN0YXRlKG1lcmdlZFN0YXRlKSBhcyBhbnk7XG4gICAgICBjb25zdCB2aWV3cG9ydCA9IHtcbiAgICAgICAgcHJvamVjdDogKGxuZ0xhdDogW251bWJlciwgbnVtYmVyXSkgPT4gdnAucHJvamVjdChsbmdMYXQpIGFzIFtudW1iZXIsIG51bWJlcl0sXG4gICAgICAgIHVucHJvamVjdDogKHh5OiBbbnVtYmVyLCBudW1iZXJdKSA9PiB2cC51bnByb2plY3QoeHkpIGFzIFtudW1iZXIsIG51bWJlcl0sXG4gICAgICAgIGxvbmdpdHVkZSxcbiAgICAgICAgbGF0aXR1ZGUsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIHpvb21cbiAgICAgIH07XG4gICAgICB0aGlzLl9hbm5vdGF0aW9uVmlld3BvcnRDYWNoZSA9IHtrZXksIHZpZXdwb3J0fTtcbiAgICAgIHJldHVybiB2aWV3cG9ydDtcbiAgICB9XG5cbiAgICBfb25EZWNrRXJyb3IgPSAoZXJyb3IsIGxheWVyKSA9PiB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvcj8ubWVzc2FnZSB8fCAndW5rbm93bi1lcnJvcic7XG4gICAgICBjb25zdCBsYXllck1lc3NhZ2UgPSBsYXllcj8uaWQgPyBgIGluICR7bGF5ZXIuaWR9IGxheWVyYCA6ICcnO1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlRnVsbCA9XG4gICAgICAgIGVycm9yTWVzc2FnZSA9PT0gJ1dlYkdMIGNvbnRleHQgaXMgbG9zdCdcbiAgICAgICAgICA/ICdZb3VyIEdQVSB3YXMgZGlzY29ubmVjdGVkLiBUaGlzIGNhbiBoYXBwZW4gaWYgeW91ciBjb21wdXRlciBnb2VzIHRvIHNsZWVwLiBJdCBjYW4gYWxzbyBvY2N1ciBmb3Igb3RoZXIgcmVhc29ucywgc3VjaCBhcyBpZiB5b3UgYXJlIHJ1bm5pbmcgdG9vIG1hbnkgR1BVIGFwcGxpY2F0aW9ucy4nXG4gICAgICAgICAgOiBgQW4gZXJyb3IgaW4gZGVjay5nbDogJHtlcnJvck1lc3NhZ2V9JHtsYXllck1lc3NhZ2V9LmA7XG5cbiAgICAgIC8vIFRocm90dGxlIGVycm9yIG5vdGlmaWNhdGlvbnMsIGFzIFJlYWN0IGRvZXNuJ3QgbGlrZSB0b28gbWFueSBzdGF0ZSBjaGFuZ2VzIGZyb20gaGVyZS5cbiAgICAgIGNvbnN0IGxhc3RTaG93biA9IHRoaXMuX2RlY2tHTEVycm9yc0VsYXBzZWRbZXJyb3JNZXNzYWdlRnVsbF07XG4gICAgICBpZiAoIWxhc3RTaG93biB8fCBsYXN0U2hvd24gPCBEYXRlLm5vdygpIC0gVEhST1RUTEVfTk9USUZJQ0FUSU9OX1RJTUUpIHtcbiAgICAgICAgdGhpcy5fZGVja0dMRXJyb3JzRWxhcHNlZFtlcnJvck1lc3NhZ2VGdWxsXSA9IERhdGUubm93KCk7XG5cbiAgICAgICAgLy8gTWFyayBsYXllciBhcyBpbnZhbGlkXG4gICAgICAgIGxldCBleHRyYUxheWVyTWVzc2FnZSA9ICcnO1xuICAgICAgICBjb25zdCB7dmlzU3RhdGVBY3Rpb25zfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGlmIChsYXllcikge1xuICAgICAgICAgIGxldCB0b3BNb3N0TGF5ZXIgPSBsYXllcjtcbiAgICAgICAgICB3aGlsZSAodG9wTW9zdExheWVyLnBhcmVudCkge1xuICAgICAgICAgICAgdG9wTW9zdExheWVyID0gdG9wTW9zdExheWVyLnBhcmVudDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRvcE1vc3RMYXllci5wcm9wcz8uaWQpIHtcbiAgICAgICAgICAgIHZpc1N0YXRlQWN0aW9ucy5sYXllclNldElzVmFsaWQodG9wTW9zdExheWVyLCBmYWxzZSk7XG4gICAgICAgICAgICBleHRyYUxheWVyTWVzc2FnZSA9ICdUaGUgbGF5ZXIgaGFzIGJlZW4gZGlzYWJsZWQgYW5kIGhpZ2hsaWdodGVkLic7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3JlYXRlIG5ldyBlcnJvciBub3RpZmljYXRpb24gb3IgdXBkYXRlIGV4aXN0aW5nIG9uZSB3aXRoIHNhbWUgaWQuXG4gICAgICAgIC8vIFVwZGF0ZSBpcyByZXF1aXJlZCB0byBwcmVzZXJ2ZSB0aGUgb3JkZXIgb2Ygbm90aWZpY2F0aW9ucyBhcyB0aGV5IHByb2JhYmx5IGFyZSBnb2luZyB0byBcImp1bXBcIiBiYXNlZCBvbiBvcmRlciBvZiBlcnJvcnMuXG4gICAgICAgIGNvbnN0IHt1aVN0YXRlQWN0aW9uc30gPSB0aGlzLnByb3BzO1xuICAgICAgICB1aVN0YXRlQWN0aW9ucy5hZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgbWVzc2FnZTogYCR7ZXJyb3JNZXNzYWdlRnVsbH0gJHtleHRyYUxheWVyTWVzc2FnZX1gLFxuICAgICAgICAgICAgaWQ6IGVycm9yTWVzc2FnZUZ1bGwgLy8gdHJlYXQgdGhlIGVycm9yIG1lc3NhZ2UgYXMgaWRcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvKiBjb21wb25lbnQgcmVuZGVyIGZ1bmN0aW9ucyAqL1xuXG4gICAgLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuICAgIF9yZW5kZXJNYXBQb3BvdmVyKCkge1xuICAgICAgLy8gdGhpcyBjaGVjayBpcyBmb3IgbGltaXRpbmcgdGhlIGRpc3BsYXkgb2YgdGhlIGA8TWFwUG9wb3Zlcj5gIHRvIHRoZSBgPE1hcENvbnRhaW5lcj5gIHRoZSB1c2VyIGlzIGludGVyYWN0aW5nIHdpdGhcbiAgICAgIC8vIHRoZSBEZWNrR0wgb25Ib3ZlciBldmVudCBoYW5kbGVyIGFkZHMgYSBgbWFwSW5kZXhgIHByb3BlcnR5IHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgYGhvdmVySW5mb2Agb2JqZWN0IG9mIGB2aXNTdGF0ZWBcbiAgICAgIGlmICh0aGlzLnByb3BzLmluZGV4ICE9PSB0aGlzLnByb3BzLnZpc1N0YXRlLmhvdmVySW5mbz8ubWFwSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIFRPRE86IG1vdmUgdGhpcyBpbnRvIHJlZHVjZXIgc28gaXQgY2FuIGJlIHRlc3RlZFxuICAgICAgY29uc3Qge1xuICAgICAgICBtYXBTdGF0ZSxcbiAgICAgICAgdmlzU3RhdGU6IHtcbiAgICAgICAgICBob3ZlckluZm8sXG4gICAgICAgICAgY2xpY2tlZCxcbiAgICAgICAgICBkYXRhc2V0cyxcbiAgICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgICAgICBhbmltYXRpb25Db25maWcsXG4gICAgICAgICAgbGF5ZXJzLFxuICAgICAgICAgIG1vdXNlUG9zOiB7bW91c2VQb3NpdGlvbiwgY29vcmRpbmF0ZSwgcGlubmVkfVxuICAgICAgICB9XG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IGxheWVyc1RvUmVuZGVyID0gdGhpcy5sYXllcnNUb1JlbmRlclNlbGVjdG9yKHRoaXMucHJvcHMpO1xuXG4gICAgICBpZiAoIW1vdXNlUG9zaXRpb24gfHwgIWludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxheWVySG92ZXJQcm9wID0gZ2V0TGF5ZXJIb3ZlclByb3Aoe1xuICAgICAgICBhbmltYXRpb25Db25maWcsXG4gICAgICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgICBob3ZlckluZm8sXG4gICAgICAgIGxheWVycyxcbiAgICAgICAgbGF5ZXJzVG9SZW5kZXIsXG4gICAgICAgIGRhdGFzZXRzXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgY29tcGFyZU1vZGUgPSBpbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmNvbmZpZ1xuICAgICAgICA/IGludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnLmNvbXBhcmVNb2RlXG4gICAgICAgIDogZmFsc2U7XG5cbiAgICAgIGxldCBwaW5uZWRQb3NpdGlvbiA9IHt4OiAwLCB5OiAwfTtcbiAgICAgIGxldCBsYXllclBpbm5lZFByb3A6IExheWVySG92ZXJQcm9wIHwgbnVsbCA9IG51bGw7XG4gICAgICBpZiAocGlubmVkIHx8IGNsaWNrZWQpIHtcbiAgICAgICAgLy8gcHJvamVjdCBsbmdsYXQgdG8gc2NyZWVuIHNvIHRoYXQgdG9vbHRpcCBmb2xsb3dzIHRoZSBvYmplY3Qgb24gem9vbVxuICAgICAgICBjb25zdCB2aWV3cG9ydCA9IGdldFZpZXdwb3J0RnJvbU1hcFN0YXRlKG1hcFN0YXRlKTtcbiAgICAgICAgY29uc3QgbG5nTGF0ID0gY2xpY2tlZCA/IGNsaWNrZWQuY29vcmRpbmF0ZSA6IHBpbm5lZC5jb29yZGluYXRlO1xuICAgICAgICBwaW5uZWRQb3NpdGlvbiA9IHRoaXMuX2dldEhvdmVyWFkodmlld3BvcnQsIGxuZ0xhdCk7XG4gICAgICAgIGxheWVyUGlubmVkUHJvcCA9IGdldExheWVySG92ZXJQcm9wKHtcbiAgICAgICAgICBhbmltYXRpb25Db25maWcsXG4gICAgICAgICAgaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICAgICAgaG92ZXJJbmZvOiBjbGlja2VkLFxuICAgICAgICAgIGxheWVycyxcbiAgICAgICAgICBsYXllcnNUb1JlbmRlcixcbiAgICAgICAgICBkYXRhc2V0c1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGxheWVySG92ZXJQcm9wICYmIGxheWVyUGlubmVkUHJvcCkge1xuICAgICAgICAgIGxheWVySG92ZXJQcm9wLnByaW1hcnlEYXRhID0gbGF5ZXJQaW5uZWRQcm9wLmRhdGE7XG4gICAgICAgICAgbGF5ZXJIb3ZlclByb3AuY29tcGFyZVR5cGUgPSBpbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmNvbmZpZy5jb21wYXJlVHlwZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjb21tb25Qcm9wID0ge1xuICAgICAgICBvbkNsb3NlOiB0aGlzLl9vbkNsb3NlTWFwUG9wb3ZlcixcbiAgICAgICAgem9vbTogbWFwU3RhdGUuem9vbSxcbiAgICAgICAgY29udGFpbmVyOiB0aGlzLl9kZWNrID8gdGhpcy5fZGVjay5jYW52YXMgOiB1bmRlZmluZWRcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxFcnJvckJvdW5kYXJ5PlxuICAgICAgICAgIHtsYXllclBpbm5lZFByb3AgJiYgKFxuICAgICAgICAgICAgPE1hcFBvcG92ZXJcbiAgICAgICAgICAgICAgey4uLnBpbm5lZFBvc2l0aW9ufVxuICAgICAgICAgICAgICB7Li4uY29tbW9uUHJvcH1cbiAgICAgICAgICAgICAgbGF5ZXJIb3ZlclByb3A9e2xheWVyUGlubmVkUHJvcH1cbiAgICAgICAgICAgICAgY29vcmRpbmF0ZT17aW50ZXJhY3Rpb25Db25maWcuY29vcmRpbmF0ZS5lbmFibGVkICYmIChwaW5uZWQgfHwge30pLmNvb3JkaW5hdGV9XG4gICAgICAgICAgICAgIGZyb3plbj17dHJ1ZX1cbiAgICAgICAgICAgICAgaXNCYXNlPXtjb21wYXJlTW9kZX1cbiAgICAgICAgICAgICAgb25TZXRGZWF0dXJlcz17dGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMuc2V0RmVhdHVyZXN9XG4gICAgICAgICAgICAgIHNldFNlbGVjdGVkRmVhdHVyZT17dGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMuc2V0U2VsZWN0ZWRGZWF0dXJlfVxuICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlIEFyZ3VtZW50IG9mIHR5cGUgJ1JlYWRvbmx5PE1hcENvbnRhaW5lclByb3BzPicgaXMgbm90IGFzc2lnbmFibGUgdG8gcGFyYW1ldGVyIG9mIHR5cGUgJ25ldmVyJ1xuICAgICAgICAgICAgICBmZWF0dXJlQ29sbGVjdGlvbj17dGhpcy5mZWF0dXJlQ29sbGVjdGlvblNlbGVjdG9yKHRoaXMucHJvcHMpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtsYXllckhvdmVyUHJvcCAmJiAoIWxheWVyUGlubmVkUHJvcCB8fCBjb21wYXJlTW9kZSkgJiYgKFxuICAgICAgICAgICAgPE1hcFBvcG92ZXJcbiAgICAgICAgICAgICAgeD17bW91c2VQb3NpdGlvblswXX1cbiAgICAgICAgICAgICAgeT17bW91c2VQb3NpdGlvblsxXX1cbiAgICAgICAgICAgICAgey4uLmNvbW1vblByb3B9XG4gICAgICAgICAgICAgIGxheWVySG92ZXJQcm9wPXtsYXllckhvdmVyUHJvcH1cbiAgICAgICAgICAgICAgZnJvemVuPXtmYWxzZX1cbiAgICAgICAgICAgICAgY29vcmRpbmF0ZT17aW50ZXJhY3Rpb25Db25maWcuY29vcmRpbmF0ZS5lbmFibGVkICYmIGNvb3JkaW5hdGV9XG4gICAgICAgICAgICAgIG9uU2V0RmVhdHVyZXM9e3RoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLnNldEZlYXR1cmVzfVxuICAgICAgICAgICAgICBzZXRTZWxlY3RlZEZlYXR1cmU9e3RoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLnNldFNlbGVjdGVkRmVhdHVyZX1cbiAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBBcmd1bWVudCBvZiB0eXBlICdSZWFkb25seTxNYXBDb250YWluZXJQcm9wcz4nIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHBhcmFtZXRlciBvZiB0eXBlICduZXZlcidcbiAgICAgICAgICAgICAgZmVhdHVyZUNvbGxlY3Rpb249e3RoaXMuZmVhdHVyZUNvbGxlY3Rpb25TZWxlY3Rvcih0aGlzLnByb3BzKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9FcnJvckJvdW5kYXJ5PlxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiBlc2xpbnQtZW5hYmxlIGNvbXBsZXhpdHkgKi9cblxuICAgIF9nZXRIb3ZlclhZKHZpZXdwb3J0LCBsbmdMYXQpIHtcbiAgICAgIGNvbnN0IHNjcmVlbkNvb3JkID0gIXZpZXdwb3J0IHx8ICFsbmdMYXQgPyBudWxsIDogdmlld3BvcnQucHJvamVjdChsbmdMYXQpO1xuICAgICAgcmV0dXJuIHNjcmVlbkNvb3JkICYmIHt4OiBzY3JlZW5Db29yZFswXSwgeTogc2NyZWVuQ29vcmRbMV19O1xuICAgIH1cblxuICAgIF9yZW5kZXJEZWNrT3ZlcmxheShcbiAgICAgIGxheWVyc0ZvckRlY2ssXG4gICAgICBvcHRpb25zOiB7cHJpbWFyeU1hcDogYm9vbGVhbjsgaXNJbnRlcmFjdGl2ZT86IGJvb2xlYW47IGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlfSA9IHtcbiAgICAgICAgcHJpbWFyeU1hcDogZmFsc2VcbiAgICAgIH1cbiAgICApIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFwU3R5bGUsXG4gICAgICAgIHZpc1N0YXRlLFxuICAgICAgICBtYXBTdGF0ZSxcbiAgICAgICAgdmlzU3RhdGVBY3Rpb25zLFxuICAgICAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgICAgICAgbWFwYm94QXBpVXJsLFxuICAgICAgICBkZWNrR2xQcm9wcyxcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIG1hcENvbnRyb2xzLFxuICAgICAgICBkZWNrUmVuZGVyQ2FsbGJhY2tzLFxuICAgICAgICB0aGVtZSxcbiAgICAgICAgZ2VuZXJhdGVEZWNrR0xMYXllcnMsXG4gICAgICAgIG9uTW91c2VNb3ZlXG4gICAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgY29uc3Qge2hvdmVySW5mbywgZWRpdG9yfSA9IHZpc1N0YXRlO1xuICAgICAgY29uc3Qge3ByaW1hcnlNYXAsIGlzSW50ZXJhY3RpdmUsIGNoaWxkcmVufSA9IG9wdGlvbnM7XG5cbiAgICAgIC8vIGRpc2FibGUgZG91YmxlIGNsaWNrIHpvb20gd2hlbiBlZGl0b3IgaXMgaW4gYW55IGRyYXcgbW9kZVxuICAgICAgY29uc3Qge21hcERyYXd9ID0gbWFwQ29udHJvbHM7XG4gICAgICBjb25zdCB7YWN0aXZlOiBlZGl0b3JNZW51QWN0aXZlID0gZmFsc2V9ID0gbWFwRHJhdyB8fCB7fTtcbiAgICAgIGNvbnN0IGlzRWRpdG9yRHJhd2luZ01vZGUgPSBFZGl0b3JMYXllclV0aWxzLmlzRHJhd2luZ0FjdGl2ZShlZGl0b3JNZW51QWN0aXZlLCBlZGl0b3IubW9kZSk7XG5cbiAgICAgIGNvbnN0IGludGVybmFsVmlld1N0YXRlID0gdGhpcy5jb250ZXh0Py5nZXRJbnRlcm5hbFZpZXdTdGF0ZShpbmRleCk7XG4gICAgICBjb25zdCBpbnRlcm5hbE1hcFN0YXRlID0gey4uLm1hcFN0YXRlLCAuLi5pbnRlcm5hbFZpZXdTdGF0ZX07XG4gICAgICBjb25zdCB2aWV3cG9ydCA9IGdldFZpZXdwb3J0RnJvbU1hcFN0YXRlKGludGVybmFsTWFwU3RhdGUpO1xuXG4gICAgICBjb25zdCBlZGl0b3JGZWF0dXJlU2VsZWN0ZWRJbmRleCA9IHRoaXMuc2VsZWN0ZWRQb2x5Z29uSW5kZXhTZWxlY3Rvcih0aGlzLnByb3BzKTtcblxuICAgICAgY29uc3Qge3NldEZlYXR1cmVzLCBvbkxheWVyQ2xpY2ssIHNldFNlbGVjdGVkRmVhdHVyZX0gPSB2aXNTdGF0ZUFjdGlvbnM7XG5cbiAgICAgIGNvbnN0IGdlbmVyYXRlRGVja0dMTGF5ZXJzTWV0aG9kID0gZ2VuZXJhdGVEZWNrR0xMYXllcnMgPz8gY29tcHV0ZURlY2tMYXllcnM7XG5cbiAgICAgIGNvbnN0IGV4dHJhRGVja1BhcmFtczoge1xuICAgICAgICBnZXRUb29sdGlwPzogKGluZm86IGFueSkgPT4gb2JqZWN0IHwgbnVsbDtcbiAgICAgICAgZ2V0Q3Vyc29yPzogKHtpc0RyYWdnaW5nfToge2lzRHJhZ2dpbmc6IGJvb2xlYW59KSA9PiBzdHJpbmc7XG4gICAgICB9ID0ge307XG4gICAgICBpZiAocHJpbWFyeU1hcCkge1xuICAgICAgICAvLyBPbWl0IGhvdmVyIHVwZGF0ZXMgd2hlbiB0aGUgcG9pbnRlciBwb3NpdGlvbiBpcyBpbnZhbGlkLCBpZS4gb3ZlciBVSSBvdmVybGF5cyBvclxuICAgICAgICAvLyBvdXRzaWRlIHRoZSBtYXAgY29udGFpbmVyLiBJbiB0aG9zZSBjYXNlcyB4L3kgbWF5IGJlIDwgMFxuICAgICAgICBleHRyYURlY2tQYXJhbXMuZ2V0VG9vbHRpcCA9IGluZm8gPT4ge1xuICAgICAgICAgIGNvbnN0IHggPSBOdW1iZXIoaW5mbz8ueCk7XG4gICAgICAgICAgY29uc3QgeSA9IE51bWJlcihpbmZvPy55KTtcbiAgICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKHgpIHx8IE51bWJlci5pc05hTih5KSB8fCB4IDwgMCB8fCB5IDwgMCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgICByZXR1cm4gRWRpdG9yTGF5ZXJVdGlscy5nZXRUb29sdGlwKGluZm8sIHtcbiAgICAgICAgICAgIGVkaXRvck1lbnVBY3RpdmUsXG4gICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICB0aGVtZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIGV4dHJhRGVja1BhcmFtcy5nZXRDdXJzb3IgPSAoe2lzRHJhZ2dpbmd9OiB7aXNEcmFnZ2luZzogYm9vbGVhbn0pID0+IHtcbiAgICAgICAgICBjb25zdCBlZGl0b3JDdXJzb3IgPSBFZGl0b3JMYXllclV0aWxzLmdldEN1cnNvcih7XG4gICAgICAgICAgICBlZGl0b3JNZW51QWN0aXZlLFxuICAgICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgICAgaG92ZXJJbmZvXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGVkaXRvckN1cnNvcikgcmV0dXJuIGVkaXRvckN1cnNvcjtcblxuICAgICAgICAgIGlmIChpc0RyYWdnaW5nKSByZXR1cm4gJ2dyYWJiaW5nJztcbiAgICAgICAgICBpZiAoaG92ZXJJbmZvPy5sYXllcikgcmV0dXJuICdwb2ludGVyJztcbiAgICAgICAgICByZXR1cm4gJ2dyYWInO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlZmZlY3RzID0gdGhpcy5faXNPS1RvUmVuZGVyRWZmZWN0cyhpbmRleClcbiAgICAgICAgPyBjb21wdXRlRGVja0VmZmVjdHMoe3Zpc1N0YXRlLCBtYXBTdGF0ZSwgaXNFeHBvcnQ6IHRoaXMucHJvcHMuaXNFeHBvcnR9KVxuICAgICAgICA6IFtdO1xuXG4gICAgICBjb25zdCBpc0dsb2JlTW9kZSA9IG1hcFN0YXRlLmdsb2JlPy5lbmFibGVkO1xuXG4gICAgICAvLyBJbiBnbG9iZSBtb2RlIHdpdGggYSBub24tZGVmYXVsdCBibGVuZCBtb2RlLCBmb3J3YXJkIHByZS1jb21wdXRlZCBsYXllclxuICAgICAgLy8gcmVuZGVyaW5nIHBhcmFtZXRlcnMgaW50byBtYXBTdGF0ZSBzbyBpbmRpdmlkdWFsIGxheWVycyBjYW4gbWVyZ2UgdGhlbSBpbnRvXG4gICAgICAvLyB0aGVpciBvd24gcGFyYW1ldGVycyBvYmplY3RzLiBUaGUgZ2xvYmFsIERlY2tHTCBwYXJhbWV0ZXJzIGNhbm5vdCBiZSB1c2VkIGluXG4gICAgICAvLyBnbG9iZSBtb2RlIGJlY2F1c2UgdGhleSBhcmUgbWVyZ2VkIGludG8gZ2xvYmUgc3lzdGVtIGxheWVycyAoYXRtb3NwaGVyZSxcbiAgICAgIC8vIHN1cmZhY2UsIGV0Yy4pIGFuZCBhbHRlciB0aGVpciBjYXJlZnVsbHkgdHVuZWQgYmxlbmQvZGVwdGggc3RhdGUuXG4gICAgICAvLyAnbm9ybWFsJyBpcyBvbWl0dGVkIOKAlCBpdCBpcyB0aGUgV2ViR0wgZGVmYXVsdCBhbmQgaW5qZWN0aW5nIGl0IHdvdWxkXG4gICAgICAvLyBvdmVycmlkZSBpbnRlbnRpb25hbCBibGVuZDpmYWxzZSBzZXR0aW5ncyBvbiBsYXllcnMgbGlrZSB0cmlwL3NjZW5lZ3JhcGguXG4gICAgICBjb25zdCBsYXllckJsZW5kaW5nUGFyYW1zID1cbiAgICAgICAgaXNHbG9iZU1vZGUgJiYgdmlzU3RhdGUubGF5ZXJCbGVuZGluZyAmJiB2aXNTdGF0ZS5sYXllckJsZW5kaW5nICE9PSAnbm9ybWFsJ1xuICAgICAgICAgID8gZ2V0TGF5ZXJCbGVuZGluZ1BhcmFtZXRlcnModmlzU3RhdGUubGF5ZXJCbGVuZGluZylcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGRlY2tMYXllcnNNYXBTdGF0ZSA9IGxheWVyQmxlbmRpbmdQYXJhbXNcbiAgICAgICAgPyB7Li4uaW50ZXJuYWxNYXBTdGF0ZSwgbGF5ZXJQYXJhbWV0ZXJzOiBsYXllckJsZW5kaW5nUGFyYW1zfVxuICAgICAgICA6IGludGVybmFsTWFwU3RhdGU7XG5cbiAgICAgIGNvbnN0IGRlY2tHbExheWVycyA9IGdlbmVyYXRlRGVja0dMTGF5ZXJzTWV0aG9kKFxuICAgICAgICB7XG4gICAgICAgICAgdmlzU3RhdGUsXG4gICAgICAgICAgbWFwU3RhdGU6IGRlY2tMYXllcnNNYXBTdGF0ZSxcbiAgICAgICAgICBtYXBTdHlsZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbWFwSW5kZXg6IGluZGV4LFxuICAgICAgICAgIHByaW1hcnlNYXAsXG4gICAgICAgICAgbWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gICAgICAgICAgbWFwYm94QXBpVXJsLFxuICAgICAgICAgIGxheWVyc0ZvckRlY2ssXG4gICAgICAgICAgZWRpdG9ySW5mbzogcHJpbWFyeU1hcFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgICAgICAgIGVkaXRvck1lbnVBY3RpdmUsXG4gICAgICAgICAgICAgICAgb25TZXRGZWF0dXJlczogc2V0RmVhdHVyZXMsXG4gICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRGZWF0dXJlLFxuICAgICAgICAgICAgICAgIG9uQXBwbHlQb2x5Z29uRmlsdGVyQWxsOiB2aXNTdGF0ZUFjdGlvbnMuc2V0UG9seWdvbkZpbHRlckFsbExheWVycyxcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlIEFyZ3VtZW50IG9mIHR5cGUgJ1JlYWRvbmx5PE1hcENvbnRhaW5lclByb3BzPicgaXMgbm90IGFzc2lnbmFibGUgdG8gcGFyYW1ldGVyIG9mIHR5cGUgJ25ldmVyJ1xuICAgICAgICAgICAgICAgIGZlYXR1cmVDb2xsZWN0aW9uOiB0aGlzLmZlYXR1cmVDb2xsZWN0aW9uU2VsZWN0b3IodGhpcy5wcm9wcyksXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlSW5kZXhlczogdGhpcy5zZWxlY3RlZEZlYXR1cmVJbmRleEFycmF5U2VsZWN0b3IoXG4gICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlIEFyZ3VtZW50IG9mIHR5cGUgJ3Vua25vd24nIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHBhcmFtZXRlciBvZiB0eXBlICdudW1iZXInLlxuICAgICAgICAgICAgICAgICAgZWRpdG9yRmVhdHVyZVNlbGVjdGVkSW5kZXhcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHZpZXdwb3J0XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvbkxheWVySG92ZXI6IHRoaXMuX29uTGF5ZXJIb3ZlcixcbiAgICAgICAgICBvblNldExheWVyRG9tYWluOiB0aGlzLl9vbkxheWVyU2V0RG9tYWluLFxuICAgICAgICAgIG9uRmlsdGVyZWRJdGVtc0NoYW5nZTogdGhpcy5fb25MYXllckZpbHRlcmVkSXRlbXNDaGFuZ2UsXG4gICAgICAgICAgb25XTVNGZWF0dXJlSW5mbzogdGhpcy5fb25XTVNGZWF0dXJlSW5mbyxcbiAgICAgICAgICBvblJlZHJhd05lZWRlZDogdGhpcy5fb25SZWRyYXdOZWVkZWQsXG4gICAgICAgICAgb25GaXRCb3VuZHM6IHRoaXMuX29uRml0Qm91bmRzXG4gICAgICAgIH0sXG4gICAgICAgIGRlY2tHbFByb3BzXG4gICAgICApO1xuXG4gICAgICAvLyBGb2xsb3cgdGhlIHNlbGVjdGVkIGJhc2VtYXAgc3R5bGUncyBsaWJyYXJ5IHNvIHRoZSBnbG9iZSB1c2VzIHRoZSBzYW1lXG4gICAgICAvLyBwcm92aWRlciBhcyB0aGUgZmxhdCAyRCBtYXAgKENBUlRPIHRpbGVzIGZvciBNYXBMaWJyZSBzdHlsZXMsIE1hcGJveFxuICAgICAgLy8gdGlsZXMgZm9yIE1hcGJveCBzdHlsZXMpLlxuICAgICAgY29uc3QgZ2xvYmVCYXNlbWFwUHJvdmlkZXIgPSByZXNvbHZlR2xvYmVCYXNlbWFwUHJvdmlkZXIoXG4gICAgICAgIGdldEJhc2VNYXBMaWJyYXJ5KG1hcFN0eWxlPy5tYXBTdHlsZXM/LlttYXBTdHlsZT8uc3R5bGVUeXBlXSksXG4gICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuIHx8ICcnXG4gICAgICApO1xuXG4gICAgICAvLyBJbiBnbG9iZSBtb2RlLCBwcmVwZW5kIGdsb2JlIGJhc2UgbGF5ZXJzIGFuZCBhcHBlbmQgdG9wIGxheWVyc1xuICAgICAgY29uc3QgZ2xvYmVCYXNlTGF5ZXJzID1cbiAgICAgICAgaXNHbG9iZU1vZGUgJiYgbWFwU3RhdGUuZ2xvYmVcbiAgICAgICAgICA/IGdldEdsb2JlQmFzZUxheWVycyh7XG4gICAgICAgICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuOiBtYXBib3hBcGlBY2Nlc3NUb2tlbiB8fCAnJyxcbiAgICAgICAgICAgICAgZ2xvYmU6IG1hcFN0YXRlLmdsb2JlLFxuICAgICAgICAgICAgICBtYXBTdHlsZVR5cGU6IG1hcFN0eWxlPy5zdHlsZVR5cGUsXG4gICAgICAgICAgICAgIGJhc2VtYXBQcm92aWRlcjogZ2xvYmVCYXNlbWFwUHJvdmlkZXIsXG4gICAgICAgICAgICAgIC8vIFVzZSB0aGUgbGl2ZSAoaW50ZXJuYWwpIGxhdGl0dWRlIHNvIHRoZSB0aWxlIExPRCBjb21wZW5zYXRpb25cbiAgICAgICAgICAgICAgLy8gc3RheXMgaW4gc3luYyB3aXRoIHRoZSBkZWNrIHZpZXdwb3J0IGR1cmluZyBhIGRyYWc7IG1hcFN0YXRlXG4gICAgICAgICAgICAgIC8vIGxhdGl0dWRlIGxhZ3MgYmVoaW5kIHdoaWxlIHJvdGF0aW5nLlxuICAgICAgICAgICAgICBsYXRpdHVkZTogaW50ZXJuYWxNYXBTdGF0ZS5sYXRpdHVkZSxcbiAgICAgICAgICAgICAgem9vbTogaW50ZXJuYWxNYXBTdGF0ZS56b29tXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogW107XG4gICAgICBjb25zdCBnbG9iZVRvcExheWVycyA9XG4gICAgICAgIGlzR2xvYmVNb2RlICYmIG1hcFN0YXRlLmdsb2JlXG4gICAgICAgICAgPyBnZXRHbG9iZVRvcExheWVycyh7Z2xvYmU6IG1hcFN0YXRlLmdsb2JlLCB6b29tOiBpbnRlcm5hbE1hcFN0YXRlLnpvb219KVxuICAgICAgICAgIDogW107XG4gICAgICBjb25zdCBmaW5hbERlY2tHbExheWVycyA9IGlzR2xvYmVNb2RlXG4gICAgICAgID8gWy4uLmdsb2JlQmFzZUxheWVycywgLi4uZGVja0dsTGF5ZXJzLCAuLi5nbG9iZVRvcExheWVyc11cbiAgICAgICAgOiBkZWNrR2xMYXllcnM7XG5cbiAgICAgIGNvbnN0IHZpZXdzID0gZGVja0dsUHJvcHM/LnZpZXdzXG4gICAgICAgID8gZGVja0dsUHJvcHM/LnZpZXdzKClcbiAgICAgICAgOiBpc0dsb2JlTW9kZVxuICAgICAgICA/IG5ldyBLZXBsZXJHbG9iZVZpZXcoe1xuICAgICAgICAgICAgcmVzb2x1dGlvbjogNSxcbiAgICAgICAgICAgIC8vIFRoZSB2aXNpYmxlIGJhY2tncm91bmQgYXJvdW5kIHRoZSBnbG9iZSBpcyBwYWludGVkIGJ5IHRoZSBtYXBcbiAgICAgICAgICAgIC8vIGNvbnRhaW5lcidzIENTUyBiYWNrZ3JvdW5kIChzZWUgc3R5bGVTZWxlY3RvciksIE5PVCBieSBhIHBlci12aWV3XG4gICAgICAgICAgICAvLyBjb2xvciBjbGVhci4gZGVjay5nbCBhcHBsaWVzIGEgVmlldydzIGBjbGVhckNvbG9yYCBpbiAqZXZlcnkqIHBhc3MsXG4gICAgICAgICAgICAvLyBpbmNsdWRpbmcgdGhlIHBpY2tpbmcgcGFzcywgYW5kIGl0IGZvcmNlcyB0aGUgY2xlYXJlZCBhbHBoYSB0byAyNTVcbiAgICAgICAgICAgIC8vIChgY2xlYXJDb2xvclszXSB8fCAyNTVgKS4gSW4gdGhlIHBpY2tpbmcgYnVmZmVyIHRoZSBhbHBoYSBieXRlIGVuY29kZXNcbiAgICAgICAgICAgIC8vIHRoZSBsYXllciBpbmRleCwgc28gYSAyNTUgY2xlYXIgbWFrZXMgZGVjay5nbCBkZWNvZGUgZXZlcnkgcGl4ZWwgYXMgYVxuICAgICAgICAgICAgLy8gbm9uLWV4aXN0ZW50IGxheWVyIChcIlBpY2tlZCBub24tZXhpc3RlbnQgbGF5ZXIuIElzIHBpY2tpbmcgYnVmZmVyXG4gICAgICAgICAgICAvLyBjb3JydXB0P1wiKSBvbiBob3Zlci4gYGNsZWFyQ29sb3I6IGZhbHNlYCBza2lwcyB0aGUgcGVyLXZpZXcgY29sb3JcbiAgICAgICAgICAgIC8vIGNsZWFyIHNvIHRoZSBwaWNraW5nIGJ1ZmZlciBrZWVwcyBpdHMgMCBhbHBoYTsgdGhlIGNhbnZhcyBzdGF5c1xuICAgICAgICAgICAgLy8gdHJhbnNwYXJlbnQgYW5kIHRoZSBDU1MgYmFja2dyb3VuZCBzaG93cyB0aHJvdWdoLlxuICAgICAgICAgICAgY2xlYXI6IHRydWUsXG4gICAgICAgICAgICBjbGVhckNvbG9yOiBmYWxzZVxuICAgICAgICAgIH0pXG4gICAgICAgIDogbmV3IE1hcFZpZXcoe2ZhclpNdWx0aXBsaWVyOiAxLjJ9KTtcblxuICAgICAgbGV0IGFsbERlY2tHbFByb3BzID0ge1xuICAgICAgICAuLi5kZWNrR2xQcm9wcyxcbiAgICAgICAgcGlja2luZ1JhZGl1czogREVGQVVMVF9QSUNLSU5HX1JBRElVUyxcbiAgICAgICAgdmlld3MsXG4gICAgICAgIGxheWVyczogZmluYWxEZWNrR2xMYXllcnMsXG4gICAgICAgIGVmZmVjdHMsXG4gICAgICAgIHBhcmFtZXRlcnM6IGlzR2xvYmVNb2RlID8ge2N1bGw6IHRydWV9IDogZ2V0TGF5ZXJCbGVuZGluZ1BhcmFtZXRlcnModmlzU3RhdGUubGF5ZXJCbGVuZGluZylcbiAgICAgIH07XG5cbiAgICAgIGlmICh0eXBlb2YgZGVja1JlbmRlckNhbGxiYWNrcz8ub25EZWNrUmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGFsbERlY2tHbFByb3BzID0gZGVja1JlbmRlckNhbGxiYWNrcy5vbkRlY2tSZW5kZXIoYWxsRGVja0dsUHJvcHMpO1xuICAgICAgICBpZiAoIWFsbERlY2tHbFByb3BzKSB7XG4gICAgICAgICAgLy8gaWYgb25EZWNrUmVuZGVyIHJldHVybnMgbnVsbCwgZG8gbm90IHJlbmRlciBkZWNrLmdsXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIHsuLi4oaXNJbnRlcmFjdGl2ZVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgb25Nb3VzZU1vdmU6IHByaW1hcnlNYXBcbiAgICAgICAgICAgICAgICAgID8gZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIG9uTW91c2VNb3ZlPy4oZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29uTW91c2VNb3ZlRGVib3VuY2VkKGV2ZW50LCB2aWV3cG9ydCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge3N0eWxlOiB7cG9pbnRlckV2ZW50czogJ25vbmUnfX0pfVxuICAgICAgICA+XG4gICAgICAgICAgPERlY2tHTFxuICAgICAgICAgICAgaWQ9XCJkZWZhdWx0LWRlY2tnbC1vdmVybGF5XCJcbiAgICAgICAgICAgIG9uTG9hZD17KCkgPT4ge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGRlY2tSZW5kZXJDYWxsYmFja3M/Lm9uRGVja0xvYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBkZWNrUmVuZGVyQ2FsbGJhY2tzLm9uRGVja0xvYWQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHsuLi5hbGxEZWNrR2xQcm9wc31cbiAgICAgICAgICAgIGNvbnRyb2xsZXI9e1xuICAgICAgICAgICAgICBpc0ludGVyYWN0aXZlXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGRvdWJsZUNsaWNrWm9vbTogIWlzRWRpdG9yRHJhd2luZ01vZGUsXG4gICAgICAgICAgICAgICAgICAgIGRyYWdSb3RhdGU6IHRoaXMucHJvcHMubWFwU3RhdGUuZHJhZ1JvdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgbWF4UGl0Y2g6IHRoaXMucHJvcHMubWFwU3RhdGUubWF4UGl0Y2ggPz8gZ2V0QXBwbGljYXRpb25Db25maWcoKS5tYXhQaXRjaCxcbiAgICAgICAgICAgICAgICAgICAgLy8gSW4gZ2xvYmUgbW9kZSBhbGxvdyB6b29taW5nIG91dCBmdXJ0aGVyIHRoYW4gZGVjay5nbCdzIGRlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgLy8gb2YgMCBzbyB0aGUgd2hvbGUgZ2xvYmUgY2FuIGJlIHB1bGxlZCBiYWNrIG9uIHNjcmVlbi4gU2V0IG9uIHRoZVxuICAgICAgICAgICAgICAgICAgICAvLyBjb250cm9sbGVyIHNvIGl0IHN0YXlzIGF1dGhvcml0YXRpdmUgcmVnYXJkbGVzcyBvZiB0aGUgdmlld1N0YXRlXG4gICAgICAgICAgICAgICAgICAgIC8vIHJvdW5kLXRyaXAgdGhyb3VnaCBSZWR1eC9sb2NhbCBjb250ZXh0LiBDYXAgdGhlIG1heCB6b29tIHRvbyBzb1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgYmFzZW1hcCB0aWxlcyBkb24ndCBicmVhayBkb3duIGF0IGhpZ2ggZ2xvYmUgem9vbS5cbiAgICAgICAgICAgICAgICAgICAgLi4uKGlzR2xvYmVNb2RlID8ge21pblpvb206IEdMT0JFX01JTl9aT09NLCBtYXhab29tOiBHTE9CRV9NQVhfWk9PTX0gOiB7fSlcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2aWV3U3RhdGU9e1xuICAgICAgICAgICAgICBpc0dsb2JlTW9kZVxuICAgICAgICAgICAgICAgID8gey4uLmludGVybmFsVmlld1N0YXRlLCBtaW5ab29tOiBHTE9CRV9NSU5fWk9PTSwgbWF4Wm9vbTogR0xPQkVfTUFYX1pPT019XG4gICAgICAgICAgICAgICAgOiBpbnRlcm5hbFZpZXdTdGF0ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25CZWZvcmVSZW5kZXI9e3RoaXMuX29uQmVmb3JlUmVuZGVyfVxuICAgICAgICAgICAgb25WaWV3U3RhdGVDaGFuZ2U9e2lzSW50ZXJhY3RpdmUgPyB0aGlzLl9vblZpZXdwb3J0Q2hhbmdlIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgey4uLmV4dHJhRGVja1BhcmFtc31cbiAgICAgICAgICAgIG9uSG92ZXI9e1xuICAgICAgICAgICAgICBpc0ludGVyYWN0aXZlXG4gICAgICAgICAgICAgICAgPyBkYXRhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gRWRpdG9yTGF5ZXJVdGlscy5vbkhvdmVyKGRhdGEsIHtcbiAgICAgICAgICAgICAgICAgICAgICBlZGl0b3JNZW51QWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgICAgICAgICAgICBob3ZlckluZm9cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMpIHJldHVybjtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vbkxheWVySG92ZXJEZWJvdW5jZWQoZGF0YSwgaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25DbGljaz17KGRhdGEsIGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgbm9ybWFsaXplRXZlbnQoZXZlbnQuc3JjRXZlbnQsIHZpZXdwb3J0KTtcblxuICAgICAgICAgICAgICAvLyBIYW5kbGUgYml0bWFwIGxheWVyIGFsaWdubWVudCBtb2RlOiBpZiBhIGJpdG1hcCBsYXllciBpcyB3YWl0aW5nXG4gICAgICAgICAgICAgIC8vIGZvciBhIG1hcCBjbGljaywgcm91dGUgdGhlIGNsaWNrIGNvb3JkaW5hdGUgdG8gaXRcbiAgICAgICAgICAgICAgaWYgKGRhdGEuY29vcmRpbmF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFsaWduaW5nTGF5ZXIgPSB2aXNTdGF0ZS5sYXllcnMuZmluZChcbiAgICAgICAgICAgICAgICAgIChsOiBhbnkpID0+IGwudHlwZSA9PT0gJ2JpdG1hcCcgJiYgbC5hbGlnbldhaXRpbmdGb3JNYXAgJiYgbC5jb25maWcuaXNWaXNpYmxlXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoYWxpZ25pbmdMYXllcikge1xuICAgICAgICAgICAgICAgICAgKGFsaWduaW5nTGF5ZXIgYXMgYW55KS5vbkFsaWduTWFwQ2xpY2soZGF0YS5jb29yZGluYXRlIGFzIFtudW1iZXIsIG51bWJlcl0pO1xuICAgICAgICAgICAgICAgICAgdGhpcy5fb25SZWRyYXdOZWVkZWQoMCk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgcmVzID0gRWRpdG9yTGF5ZXJVdGlscy5vbkNsaWNrKGRhdGEsIGV2ZW50LCB7XG4gICAgICAgICAgICAgICAgZWRpdG9yTWVudUFjdGl2ZSxcbiAgICAgICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICAgICAgb25MYXllckNsaWNrLFxuICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkRmVhdHVyZSxcbiAgICAgICAgICAgICAgICBtYXBJbmRleDogaW5kZXhcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGlmIChyZXMpIHJldHVybjtcblxuICAgICAgICAgICAgICB2aXNTdGF0ZUFjdGlvbnMub25MYXllckNsaWNrKGRhdGEpO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uRXJyb3I9e3RoaXMuX29uRGVja0Vycm9yfVxuICAgICAgICAgICAgcmVmPXtjb21wID0+IHtcbiAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICBpZiAoY29tcCAmJiBjb21wLmRlY2sgJiYgIXRoaXMuX2RlY2spIHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgdGhpcy5fZGVjayA9IGNvbXAuZGVjaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uRGV2aWNlSW5pdGlhbGl6ZWQ9e2RldmljZSA9PiB0aGlzLl9vbkRlY2tJbml0aWFsaXplZChkZXZpY2UpfVxuICAgICAgICAgICAgb25BZnRlclJlbmRlcj17KCkgPT4ge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGRlY2tSZW5kZXJDYWxsYmFja3M/Lm9uRGVja0FmdGVyUmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgZGVja1JlbmRlckNhbGxiYWNrcy5vbkRlY2tBZnRlclJlbmRlcihhbGxEZWNrR2xQcm9wcyk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCBhbnlBY3RpdmVMYXllckxvYWRpbmcgPSBhcmVBbnlEZWNrTGF5ZXJzTG9hZGluZyhhbGxEZWNrR2xQcm9wcy5sYXllcnMpO1xuICAgICAgICAgICAgICBpZiAoYW55QWN0aXZlTGF5ZXJMb2FkaW5nICE9PSB0aGlzLmFueUFjdGl2ZUxheWVyTG9hZGluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuX29uTGF5ZXJMb2FkaW5nU3RhdGVDaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFueUFjdGl2ZUxheWVyTG9hZGluZyA9IGFueUFjdGl2ZUxheWVyTG9hZGluZztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgPC9EZWNrR0w+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBfdXBkYXRlTWFwYm94TGF5ZXJzKCkge1xuICAgICAgY29uc3QgbWFwYm94TGF5ZXJzID0gdGhpcy5tYXBib3hMYXllcnNTZWxlY3Rvcih0aGlzLnByb3BzKTtcbiAgICAgIGlmICghT2JqZWN0LmtleXMobWFwYm94TGF5ZXJzKS5sZW5ndGggJiYgIU9iamVjdC5rZXlzKHRoaXMucHJldmlvdXNMYXllcnMpLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZU1hcGJveExheWVycyh0aGlzLl9tYXAsIG1hcGJveExheWVycywgdGhpcy5wcmV2aW91c0xheWVycyk7XG5cbiAgICAgIHRoaXMucHJldmlvdXNMYXllcnMgPSBtYXBib3hMYXllcnM7XG4gICAgfVxuXG4gICAgX3JlbmRlck1hcGJveE92ZXJsYXlzKCkge1xuICAgICAgaWYgKHRoaXMuX21hcCAmJiB0aGlzLl9tYXAuaXNTdHlsZUxvYWRlZCgpKSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZU1hcGJveExheWVycygpO1xuICAgICAgfVxuICAgIH1cbiAgICBfb25WaWV3cG9ydENoYW5nZVByb3BhZ2F0ZURlYm91bmNlZCA9IGRlYm91bmNlKCgpID0+IHtcbiAgICAgIGNvbnN0IHZpZXdTdGF0ZSA9IHRoaXMuY29udGV4dD8uZ2V0SW50ZXJuYWxWaWV3U3RhdGUodGhpcy5wcm9wcy5pbmRleCk7XG4gICAgICBvblZpZXdQb3J0Q2hhbmdlKFxuICAgICAgICB2aWV3U3RhdGUsXG4gICAgICAgIHRoaXMucHJvcHMubWFwU3RhdGVBY3Rpb25zLnVwZGF0ZU1hcCxcbiAgICAgICAgdGhpcy5wcm9wcy5vblZpZXdTdGF0ZUNoYW5nZSxcbiAgICAgICAgdGhpcy5wcm9wcy5wcmltYXJ5LFxuICAgICAgICB0aGlzLnByb3BzLmluZGV4XG4gICAgICApO1xuICAgIH0sIERFQk9VTkNFX1ZJRVdQT1JUX1BST1BBR0FURSk7XG5cbiAgICBfb25WaWV3cG9ydENoYW5nZSA9IHZpZXdwb3J0ID0+IHtcbiAgICAgIGNvbnN0IHt2aWV3U3RhdGUsIGludGVyYWN0aW9uU3RhdGV9ID0gdmlld3BvcnQ7XG4gICAgICBpZiAodGhpcy5wcm9wcy5pc0V4cG9ydCkge1xuICAgICAgICAvLyBJbWFnZSBleHBvcnQgbWFwIHNob3VsZG4ndCBiZSBpbnRlcmFjdGl2ZSAob3RoZXJ3aXNlIHRoaXMgY2FsbGJhY2sgY2FuXG4gICAgICAgIC8vIGxlYWQgdG8gaW5hZHZlcnRlbnQgY2hhbmdlcyB0byB0aGUgc3RhdGUgb2YgdGhlIG1haW4gbWFwKVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB7c2V0SW50ZXJuYWxWaWV3U3RhdGV9ID0gdGhpcy5jb250ZXh0O1xuXG4gICAgICAvLyBGbGF0IG1hcCAoMkQvM0QpOiBrZWVwIHRoZSBvcmlnaW5hbCwgYWx3YXlzLXN5bmNocm9ub3VzIGJlaGF2aW9yLiBUaGVcbiAgICAgIC8vIGludGVyYWN0aW9uLWF3YXJlIHRpbWluZyBiZWxvdyBleGlzdHMgcHVyZWx5IHRvIGZpeCBnbG9iZS1zcGVjaWZpY1xuICAgICAgLy8gY29udHJvbGxlZC12aWV3U3RhdGUsIHNvIGl0IG11c3Qgbm90IGNoYW5nZSB0aGUgbWFpbiAyRCBsb2dpYy5cbiAgICAgIGlmICghdGhpcy5wcm9wcy5tYXBTdGF0ZT8uZ2xvYmU/LmVuYWJsZWQpIHtcbiAgICAgICAgc2V0SW50ZXJuYWxWaWV3U3RhdGUodmlld1N0YXRlLCB0aGlzLnByb3BzLmluZGV4KTtcbiAgICAgICAgdGhpcy5fd2FzSW50ZXJhY3RpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fb25WaWV3cG9ydENoYW5nZVByb3BhZ2F0ZURlYm91bmNlZCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzVXNlckludGVyYWN0aW9uID1cbiAgICAgICAgaW50ZXJhY3Rpb25TdGF0ZSAmJlxuICAgICAgICAoaW50ZXJhY3Rpb25TdGF0ZS5pc1pvb21pbmcgfHxcbiAgICAgICAgICBpbnRlcmFjdGlvblN0YXRlLmlzUGFubmluZyB8fFxuICAgICAgICAgIGludGVyYWN0aW9uU3RhdGUuaXNSb3RhdGluZyB8fFxuICAgICAgICAgIGludGVyYWN0aW9uU3RhdGUuaXNEcmFnZ2luZyB8fFxuICAgICAgICAgIGludGVyYWN0aW9uU3RhdGUuaW5UcmFuc2l0aW9uKTtcbiAgICAgIC8vIFRoZSBlbWl0IHRoYXQgZW5kcyBhIGdlc3R1cmUgKHBhbmVuZC9yb3RhdGVFbmQsIG9yIGEgZmxpbmcgdHJhbnNpdGlvblxuICAgICAgLy8gZW5kaW5nKSBhcnJpdmVzIHdpdGggYWxsIGludGVyYWN0aW9uIGZsYWdzIGZhbHNlLiBJZiB3ZSBkZWZlciBpdCwgdGhlXG4gICAgICAvLyBjb250cm9sbGVkIGB2aWV3U3RhdGVgIGZlZCBiYWNrIHRvIGRlY2sgbGFncyBhIGZyYW1lIGJlaGluZCB0aGVcbiAgICAgIC8vIGNvbnRyb2xsZXIncyBjb21taXR0ZWQgc3RhdGUgYW5kIGRlY2sgcmUtc2VlZHMgZnJvbSB0aGUgc3RhbGUgdmFsdWUsXG4gICAgICAvLyBtYWtpbmcgdGhlIGdsb2JlIHZpc2libHkgXCJqdW1wIGJhY2tcIiB0byB3aGVyZSB0aGUgZHJhZyB3YXMgcmVsZWFzZWQgLVxuICAgICAgLy8gbW9zdCBub3RpY2VhYmxlIG9uIGEgdGhyb3cvZmxpbmcgcmVsZWFzZS4gVHJlYXQgdGhlIGZpcnN0IGFsbC1mYWxzZSBlbWl0XG4gICAgICAvLyByaWdodCBhZnRlciBhbiBhY3RpdmUgZ2VzdHVyZSBhcyBwYXJ0IG9mIHRoYXQgZ2VzdHVyZSBhbmQgYXBwbHkgaXRcbiAgICAgIC8vIHN5bmNocm9ub3VzbHkgdG9vLlxuICAgICAgY29uc3QgaXNJbnRlcmFjdGlvblNldHRsZSA9ICFpc1VzZXJJbnRlcmFjdGlvbiAmJiB0aGlzLl93YXNJbnRlcmFjdGluZztcbiAgICAgIHRoaXMuX3dhc0ludGVyYWN0aW5nID0gQm9vbGVhbihpc1VzZXJJbnRlcmFjdGlvbik7XG4gICAgICBpZiAoaXNVc2VySW50ZXJhY3Rpb24gfHwgaXNJbnRlcmFjdGlvblNldHRsZSkge1xuICAgICAgICAvLyBGb3IgaW50ZXJhY3RpdmUgZ2VzdHVyZXMgKHBhbi96b29tL3JvdGF0ZSkgYW5kIHRoZWlyIGVuZC1vZi1nZXN0dXJlXG4gICAgICAgIC8vIHNldHRsZSwgdXBkYXRlIHN5bmNocm9ub3VzbHkgc28gdGhlIGNvbnRyb2xsZWQgYHZpZXdTdGF0ZWAgc3RheXMgaW5cbiAgICAgICAgLy8gbG9ja3N0ZXAgd2l0aCB0aGUgY29udHJvbGxlciBhbmQgdGhlcmUncyBubyBzdGFsZSByZS1zZWVkLlxuICAgICAgICBzZXRJbnRlcm5hbFZpZXdTdGF0ZSh2aWV3U3RhdGUsIHRoaXMucHJvcHMuaW5kZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZGVjay5nbCBjYW4gZmlyZSBvblZpZXdTdGF0ZUNoYW5nZSBzeW5jaHJvbm91c2x5IGR1cmluZyBpdHMgb3duIHJlbmRlclxuICAgICAgICAvLyAoZS5nLiB3aGVuIHN3aXRjaGluZyB2aWV3IHR5cGVzIGxpa2UgTWFwVmlldyAtPiBHbG9iZVZpZXcpLiBVcGRhdGluZyBSZWFjdFxuICAgICAgICAvLyBzdGF0ZSBkdXJpbmcgcmVuZGVyIHRocm93cyBhIHdhcm5pbmcsIHNvIGRlZmVyIG5vbi1pbnRlcmFjdGl2ZSB1cGRhdGVzLlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBzZXRJbnRlcm5hbFZpZXdTdGF0ZSh2aWV3U3RhdGUsIHRoaXMucHJvcHMuaW5kZXgpO1xuICAgICAgICB9LCAwKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX29uVmlld3BvcnRDaGFuZ2VQcm9wYWdhdGVEZWJvdW5jZWQoKTtcbiAgICB9O1xuXG4gICAgX29uTGF5ZXJIb3ZlckRlYm91bmNlZCA9IGRlYm91bmNlKChkYXRhLCBpbmRleCkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMub25MYXllckhvdmVyKGRhdGEsIGluZGV4KTtcbiAgICB9LCBERUJPVU5DRV9NT1VTRV9NT1ZFX1BST1BBR0FURSk7XG5cbiAgICBfb25Nb3VzZU1vdmVEZWJvdW5jZWQgPSBkZWJvdW5jZSgoZXZlbnQsIHZpZXdwb3J0KSA9PiB7XG4gICAgICB0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5vbk1vdXNlTW92ZShub3JtYWxpemVFdmVudChldmVudCwgdmlld3BvcnQpKTtcbiAgICB9LCBERUJPVU5DRV9NT1VTRV9NT1ZFX1BST1BBR0FURSk7XG5cbiAgICBfb25MYXllckxvYWRpbmdTdGF0ZUNoYW5nZSA9IGRlYm91bmNlKCgpID0+IHtcbiAgICAgIC8vIHRyaWdnZXIgbG9hZGluZyBpbmRpY2F0b3IgdXBkYXRlIHdpdGhvdXQgYW55IGNoYW5nZSB0byB1cGRhdGUgVUlcbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLnNldExvYWRpbmdJbmRpY2F0b3Ioe2NoYW5nZTogMH0pO1xuICAgIH0sIERFQk9VTkNFX0xPQURJTkdfU1RBVEVfUFJPUEFHQVRFKTtcblxuICAgIF9oYW5kbGVUb2dnbGVMYXllclZpc2liaWxpdHkgPSAobGF5ZXI6IExheWVyKSA9PiB7XG4gICAgICBjb25zdCB7dmlzU3RhdGVBY3Rpb25zfSA9IHRoaXMucHJvcHM7XG4gICAgICB2aXNTdGF0ZUFjdGlvbnMubGF5ZXJDb25maWdDaGFuZ2UobGF5ZXIsIHtpc1Zpc2libGU6ICFsYXllci5jb25maWcuaXNWaXNpYmxlfSk7XG4gICAgfTtcblxuICAgIF90b2dnbGVNYXBDb250cm9sID0gcGFuZWxJZCA9PiB7XG4gICAgICBjb25zdCB7aW5kZXgsIHVpU3RhdGVBY3Rpb25zfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIHVpU3RhdGVBY3Rpb25zLnRvZ2dsZU1hcENvbnRyb2wocGFuZWxJZCwgTnVtYmVyKGluZGV4KSk7XG4gICAgfTtcblxuICAgIC8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cbiAgICBfcmVuZGVyTWFwKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICB2aXNTdGF0ZSxcbiAgICAgICAgbWFwU3RhdGUsXG4gICAgICAgIG1hcFN0eWxlLFxuICAgICAgICBtYXBTdGF0ZUFjdGlvbnMsXG4gICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgICAgICAvLyBtYXBib3hBcGlVcmwsXG4gICAgICAgIG1hcENvbnRyb2xzLFxuICAgICAgICBpc0V4cG9ydCxcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICB1aVRoZW1lLFxuICAgICAgICB1aVN0YXRlQWN0aW9ucyxcbiAgICAgICAgdmlzU3RhdGVBY3Rpb25zLFxuICAgICAgICBpbmRleCxcbiAgICAgICAgcHJpbWFyeSxcbiAgICAgICAgYm90dG9tTWFwQ29udGFpbmVyUHJvcHMsXG4gICAgICAgIHRvcE1hcENvbnRhaW5lclByb3BzLFxuICAgICAgICB0aGVtZSxcbiAgICAgICAgZGF0YXNldEF0dHJpYnV0aW9ucyA9IFtdLFxuICAgICAgICBhdHRyaWJ1dGlvbkxvZ29zID0gW10sXG4gICAgICAgIGNvbnRhaW5lcklkID0gMCxcbiAgICAgICAgaXNMb2FkaW5nSW5kaWNhdG9yVmlzaWJsZSxcbiAgICAgICAgYWN0aXZlU2lkZVBhbmVsLFxuICAgICAgICBzaWRlUGFuZWxXaWR0aFxuICAgICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIGNvbnN0IHtsYXllcnMsIGRhdGFzZXRzLCBlZGl0b3IsIGludGVyYWN0aW9uQ29uZmlnLCBsYXllck9yZGVyfSA9IHZpc1N0YXRlO1xuXG4gICAgICBjb25zdCBsYXllcnNUb1JlbmRlciA9IHRoaXMubGF5ZXJzVG9SZW5kZXJTZWxlY3Rvcih0aGlzLnByb3BzKTtcbiAgICAgIGNvbnN0IGxheWVyc0ZvckRlY2sgPSB0aGlzLmxheWVyc0ZvckRlY2tTZWxlY3Rvcih0aGlzLnByb3BzKTtcblxuICAgICAgLy8gQ3VycmVudCBzdHlsZSBjYW4gYmUgYSBjdXN0b20gc3R5bGUsIGZyb20gd2hpY2ggd2UgcHVsbCB0aGUgbWFwYm94IEFQSSBhY2NjZXNzIHRva2VuXG4gICAgICBjb25zdCBjdXJyZW50U3R5bGUgPSBtYXBTdHlsZS5tYXBTdHlsZXM/LlttYXBTdHlsZS5zdHlsZVR5cGVdO1xuICAgICAgY29uc3QgYmFzZU1hcExpYnJhcnlOYW1lID0gZ2V0QmFzZU1hcExpYnJhcnkoY3VycmVudFN0eWxlKTtcbiAgICAgIGNvbnN0IGJhc2VNYXBMaWJyYXJ5Q29uZmlnID0gZ2V0QXBwbGljYXRpb25Db25maWcoKS5iYXNlTWFwTGlicmFyeUNvbmZpZ1tiYXNlTWFwTGlicmFyeU5hbWVdO1xuXG4gICAgICAvLyBTZWxlY3QgdGhlIGNvcnJlY3QgTWFwIGFkYXB0ZXIgYmFzZWQgb24gdGhlIGFjdGl2ZSBiYXNlIG1hcCBsaWJyYXJ5LlxuICAgICAgLy8gVXNpbmcgdGhlIG5hdGl2ZSBhZGFwdGVyIGZvciBlYWNoIGxpYnJhcnkgYXZvaWRzIFRyYW5zZm9ybSBBUElcbiAgICAgIC8vIGluY29tcGF0aWJpbGl0aWVzIChlLmcuIG1hcGJveC1sZWdhY3kncyBjbG9uZVRyYW5zZm9ybSB3aXRoIE1hcExpYnJlIHY1KS5cbiAgICAgIGNvbnN0IFJlc29sdmVkTWFwQ29tcG9uZW50ID1cbiAgICAgICAgdGhpcy5wcm9wcy5NYXBDb21wb25lbnQgPz9cbiAgICAgICAgKGJhc2VNYXBMaWJyYXJ5TmFtZSA9PT0gTUFQX0xJQl9PUFRJT05TLk1BUEJPWCA/IE1hcGJveExlZ2FjeU1hcCA6IE1hcGxpYnJlTWFwKTtcblxuICAgICAgY29uc3QgdXNlTWFwYm94QWRhcHRlciA9IFJlc29sdmVkTWFwQ29tcG9uZW50ID09PSBNYXBib3hMZWdhY3lNYXA7XG5cbiAgICAgIGNvbnN0IGludGVybmFsVmlld1N0YXRlID0gdGhpcy5jb250ZXh0Py5nZXRJbnRlcm5hbFZpZXdTdGF0ZShpbmRleCk7XG4gICAgICBjb25zdCBjb25maWdNYXhQaXRjaCA9IG1hcFN0YXRlLm1heFBpdGNoID8/IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkubWF4UGl0Y2g7XG4gICAgICBjb25zdCBlZmZlY3RpdmVNYXhQaXRjaCA9IHVzZU1hcGJveEFkYXB0ZXJcbiAgICAgICAgPyBNYXRoLm1pbihjb25maWdNYXhQaXRjaCwgTUFQQk9YX01BWF9QSVRDSClcbiAgICAgICAgOiBjb25maWdNYXhQaXRjaDtcbiAgICAgIGNvbnN0IG1hcFByb3BzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge1xuICAgICAgICAuLi5pbnRlcm5hbFZpZXdTdGF0ZSxcbiAgICAgICAgbWF4UGl0Y2g6IGVmZmVjdGl2ZU1heFBpdGNoLFxuICAgICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IHRoaXMucHJvcHMuaXNFeHBvcnQgPz8gZmFsc2UsXG4gICAgICAgIG1hcGJveEFjY2Vzc1Rva2VuOiBjdXJyZW50U3R5bGU/LmFjY2Vzc1Rva2VuIHx8IG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgICAgICAvLyBiYXNlQXBpVXJsOiBtYXBib3hBcGlVcmwsXG4gICAgICAgIHRyYW5zZm9ybVJlcXVlc3Q6XG4gICAgICAgICAgdGhpcy5wcm9wcy50cmFuc2Zvcm1SZXF1ZXN0IHx8XG4gICAgICAgICAgdHJhbnNmb3JtUmVxdWVzdChjdXJyZW50U3R5bGU/LmFjY2Vzc1Rva2VuIHx8IG1hcGJveEFwaUFjY2Vzc1Rva2VuKVxuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMucHJvcHMuUlRMVGV4dFBsdWdpbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG1hcFByb3BzLlJUTFRleHRQbHVnaW4gPSB0aGlzLnByb3BzLlJUTFRleHRQbHVnaW47XG4gICAgICB9XG5cbiAgICAgIGlmICh1c2VNYXBib3hBZGFwdGVyKSB7XG4gICAgICAgIGNvbnN0IG1hcGJveENvbmZpZyA9IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuYmFzZU1hcExpYnJhcnlDb25maWdbTUFQX0xJQl9PUFRJT05TLk1BUEJPWF07XG4gICAgICAgIG1hcFByb3BzLm1hcExpYiA9IG1hcGJveENvbmZpZy5nZXRNYXBMaWIoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGFzR2VvY29kZXJMYXllciA9IEJvb2xlYW4obGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBHRU9DT0RFUl9MQVlFUl9JRCkpO1xuICAgICAgY29uc3QgaXNTcGxpdCA9IEJvb2xlYW4obWFwU3RhdGUuaXNTcGxpdCk7XG5cbiAgICAgIGNvbnN0IGRlY2sgPSB0aGlzLl9yZW5kZXJEZWNrT3ZlcmxheShsYXllcnNGb3JEZWNrLCB7XG4gICAgICAgIHByaW1hcnlNYXA6IHRydWUsXG4gICAgICAgIGlzSW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgIGNoaWxkcmVuOiAoXG4gICAgICAgICAgPFJlc29sdmVkTWFwQ29tcG9uZW50XG4gICAgICAgICAgICBrZXk9e2Bib3R0b20tJHtiYXNlTWFwTGlicmFyeU5hbWV9YH1cbiAgICAgICAgICAgIHsuLi5tYXBQcm9wc31cbiAgICAgICAgICAgIG1hcFN0eWxlPXtcbiAgICAgICAgICAgICAgbWFwU3RhdGUuZ2xvYmU/LmVuYWJsZWRcbiAgICAgICAgICAgICAgICA/IEVNUFRZX01BUEJPWF9TVFlMRVxuICAgICAgICAgICAgICAgIDogbWFwU3R5bGUuYm90dG9tTWFwU3R5bGUgPz8gRU1QVFlfTUFQQk9YX1NUWUxFXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB7Li4uYm90dG9tTWFwQ29udGFpbmVyUHJvcHN9XG4gICAgICAgICAgICByZWY9e3RoaXMuX3NldE1hcFJlZn1cbiAgICAgICAgICAvPlxuICAgICAgICApXG4gICAgICB9KTtcbiAgICAgIGlmICghZGVjaykge1xuICAgICAgICAvLyBkZWNrT3ZlcmxheSBjYW4gYmUgbnVsbCBpZiBvbkRlY2tSZW5kZXIgcmV0dXJucyBudWxsXG4gICAgICAgIC8vIGluIHRoaXMgY2FzZSB3ZSBkb24ndCB3YW50IHRvIHJlbmRlciB0aGUgbWFwXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgLy8gSW4gc3BsaXQgKGR1YWwpIHZpZXcgbW9kZSwgb25seSByZW5kZXIgdGhlIG1hcCBjb250cm9sIGJ1dHRvbnMgb24gdGhlXG4gICAgICAvLyByaWdodC1zaWRlIG1hcCAocHJpbWFyeSA9PT0gdHJ1ZSwgaS5lLiBpbmRleCA9PT0gMSkuIE90aGVyd2lzZSB0aGUgc2FtZVxuICAgICAgLy8gYnV0dG9ucyBhcmUgZHVwbGljYXRlZCBvbiBib3RoIG1hcHMgYW5kIGFueSBvcGVuZWQgbWVudSBhcHBlYXJzIG1pcnJvcmVkLlxuICAgICAgY29uc3Qgc2hvd01hcENvbnRyb2wgPSAhaXNTcGxpdCB8fCBCb29sZWFuKHByaW1hcnkpO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICB7c2hvd01hcENvbnRyb2wgJiYgKFxuICAgICAgICAgICAgPE1hcENvbnRyb2xcbiAgICAgICAgICAgICAgbWFwU3RhdGU9e21hcFN0YXRlfVxuICAgICAgICAgICAgICBtYXBTdGF0ZUFjdGlvbnM9e21hcFN0YXRlQWN0aW9uc31cbiAgICAgICAgICAgICAgZGF0YXNldHM9e2RhdGFzZXRzfVxuICAgICAgICAgICAgICBhdmFpbGFibGVMb2NhbGVzPXtMT0NBTEVfQ09ERVNfQVJSQVl9XG4gICAgICAgICAgICAgIGRyYWdSb3RhdGU9e21hcFN0YXRlLmRyYWdSb3RhdGV9XG4gICAgICAgICAgICAgIGlzU3BsaXQ9e2lzU3BsaXR9XG4gICAgICAgICAgICAgIHByaW1hcnk9e0Jvb2xlYW4ocHJpbWFyeSl9XG4gICAgICAgICAgICAgIGlzRXhwb3J0PXtpc0V4cG9ydH1cbiAgICAgICAgICAgICAgbGF5ZXJzPXtsYXllcnN9XG4gICAgICAgICAgICAgIGxheWVyT3JkZXI9e2xheWVyT3JkZXJ9XG4gICAgICAgICAgICAgIGxheWVyc1RvUmVuZGVyPXtsYXllcnNUb1JlbmRlcn1cbiAgICAgICAgICAgICAgbWFwSW5kZXg9e2luZGV4IHx8IDB9XG4gICAgICAgICAgICAgIG1hcENvbnRyb2xzPXttYXBDb250cm9sc31cbiAgICAgICAgICAgICAgcmVhZE9ubHk9e3RoaXMucHJvcHMucmVhZE9ubHl9XG4gICAgICAgICAgICAgIHNjYWxlPXttYXBTdGF0ZS5zY2FsZSB8fCAxfVxuICAgICAgICAgICAgICBsb2dvQ29tcG9uZW50PXt0aGlzLnByb3BzLmxvZ29Db21wb25lbnR9XG4gICAgICAgICAgICAgIHRvcD17XG4gICAgICAgICAgICAgICAgaW50ZXJhY3Rpb25Db25maWcuZ2VvY29kZXIgJiYgaW50ZXJhY3Rpb25Db25maWcuZ2VvY29kZXIuZW5hYmxlZFxuICAgICAgICAgICAgICAgICAgPyB0aGVtZS5tYXBDb250cm9sVG9wXG4gICAgICAgICAgICAgICAgICA6IDBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlZGl0b3I9e2VkaXRvcn1cbiAgICAgICAgICAgICAgbG9jYWxlPXtsb2NhbGV9XG4gICAgICAgICAgICAgIHRoZW1lTmFtZT17dWlUaGVtZX1cbiAgICAgICAgICAgICAgb25Ub2dnbGVQZXJzcGVjdGl2ZT17bWFwU3RhdGVBY3Rpb25zLnRvZ2dsZVBlcnNwZWN0aXZlfVxuICAgICAgICAgICAgICBvblNldE1hcFZpZXdNb2RlPXttYXBTdGF0ZUFjdGlvbnMuc2V0TWFwVmlld01vZGV9XG4gICAgICAgICAgICAgIG1hcFZpZXdNb2RlPXttYXBTdGF0ZS5tYXBWaWV3TW9kZX1cbiAgICAgICAgICAgICAgb25Ub2dnbGVTcGxpdE1hcD17bWFwU3RhdGVBY3Rpb25zLnRvZ2dsZVNwbGl0TWFwfVxuICAgICAgICAgICAgICBvbk1hcFRvZ2dsZUxheWVyPXt0aGlzLl9oYW5kbGVNYXBUb2dnbGVMYXllcn1cbiAgICAgICAgICAgICAgb25Ub2dnbGVNYXBDb250cm9sPXt0aGlzLl90b2dnbGVNYXBDb250cm9sfVxuICAgICAgICAgICAgICBvblRvZ2dsZVNwbGl0TWFwVmlld3BvcnQ9e21hcFN0YXRlQWN0aW9ucy50b2dnbGVTcGxpdE1hcFZpZXdwb3J0fVxuICAgICAgICAgICAgICBvblNldEVkaXRvck1vZGU9e3Zpc1N0YXRlQWN0aW9ucy5zZXRFZGl0b3JNb2RlfVxuICAgICAgICAgICAgICBvblNldExvY2FsZT17dWlTdGF0ZUFjdGlvbnMuc2V0TG9jYWxlfVxuICAgICAgICAgICAgICBvblNldFRoZW1lPXt1aVN0YXRlQWN0aW9ucy5zZXRUaGVtZX1cbiAgICAgICAgICAgICAgb25Ub2dnbGVFZGl0b3JWaXNpYmlsaXR5PXt2aXNTdGF0ZUFjdGlvbnMudG9nZ2xlRWRpdG9yVmlzaWJpbGl0eX1cbiAgICAgICAgICAgICAgb25Db252ZXJ0RWRpdG9yRmVhdHVyZXNUb0xheWVyPXt2aXNTdGF0ZUFjdGlvbnMuY29udmVydEVkaXRvckZlYXR1cmVzVG9MYXllcn1cbiAgICAgICAgICAgICAgb25MYXllclZpc0NvbmZpZ0NoYW5nZT17dmlzU3RhdGVBY3Rpb25zLmxheWVyVmlzQ29uZmlnQ2hhbmdlfVxuICAgICAgICAgICAgICBvblRvZ2dsZUxheWVyVmlzaWJpbGl0eT17dGhpcy5faGFuZGxlVG9nZ2xlTGF5ZXJWaXNpYmlsaXR5fVxuICAgICAgICAgICAgICBtYXBIZWlnaHQ9e21hcFN0YXRlLmhlaWdodH1cbiAgICAgICAgICAgICAgc2V0TWFwQ29udHJvbFNldHRpbmdzPXt1aVN0YXRlQWN0aW9ucy5zZXRNYXBDb250cm9sU2V0dGluZ3N9XG4gICAgICAgICAgICAgIGFjdGl2ZVNpZGVQYW5lbD17YWN0aXZlU2lkZVBhbmVsfVxuICAgICAgICAgICAgICBzcGxpdE1hcHM9e3RoaXMucHJvcHMudmlzU3RhdGUuc3BsaXRNYXBzfVxuICAgICAgICAgICAgICBvblRvZ2dsZUxheWVyRm9yTWFwPXt2aXNTdGF0ZUFjdGlvbnMudG9nZ2xlTGF5ZXJGb3JNYXB9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAge2lzU3BsaXRTZWxlY3Rvcih0aGlzLnByb3BzKSAmJiA8RHJvcHBhYmxlIGNvbnRhaW5lcklkPXtjb250YWluZXJJZH0gLz59XG5cbiAgICAgICAgICB7ZGVja31cbiAgICAgICAgICB7dGhpcy5fcmVuZGVyTWFwYm94T3ZlcmxheXMoKX1cbiAgICAgICAgICA8RWRpdG9yXG4gICAgICAgICAgICBpbmRleD17aW5kZXggfHwgMH1cbiAgICAgICAgICAgIGRhdGFzZXRzPXtkYXRhc2V0c31cbiAgICAgICAgICAgIGVkaXRvcj17ZWRpdG9yfVxuICAgICAgICAgICAgZmlsdGVycz17dGhpcy5wb2x5Z29uRmlsdGVyc1NlbGVjdG9yKHRoaXMucHJvcHMpfVxuICAgICAgICAgICAgbGF5ZXJzPXtsYXllcnN9XG4gICAgICAgICAgICBvbkRlbGV0ZUZlYXR1cmU9e3Zpc1N0YXRlQWN0aW9ucy5kZWxldGVGZWF0dXJlfVxuICAgICAgICAgICAgb25TZXRGZWF0dXJlUHJvcGVydGllcz17dmlzU3RhdGVBY3Rpb25zLnNldEVkaXRvckZlYXR1cmVQcm9wZXJ0aWVzfVxuICAgICAgICAgICAgb25TZWxlY3Q9e3Zpc1N0YXRlQWN0aW9ucy5zZXRTZWxlY3RlZEZlYXR1cmV9XG4gICAgICAgICAgICBvblRvZ2dsZVBvbHlnb25GaWx0ZXI9e3Zpc1N0YXRlQWN0aW9ucy5zZXRQb2x5Z29uRmlsdGVyTGF5ZXJ9XG4gICAgICAgICAgICBvblNldEVkaXRvck1vZGU9e3Zpc1N0YXRlQWN0aW9ucy5zZXRFZGl0b3JNb2RlfVxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgcG9pbnRlckV2ZW50czogJ2FsbCcsXG4gICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICBkaXNwbGF5OiBlZGl0b3IudmlzaWJsZSA/ICdibG9jaycgOiAnbm9uZSdcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7ZWRpdG9yLnZpc2libGUgPyAoXG4gICAgICAgICAgICA8RmlsdGVyRmVhdHVyZUJhZGdlc1xuICAgICAgICAgICAgICBmaWx0ZXJzPXt0aGlzLnBvbHlnb25GaWx0ZXJzU2VsZWN0b3IodGhpcy5wcm9wcyl9XG4gICAgICAgICAgICAgIHZpZXdwb3J0PXt0aGlzLl9nZXRBbm5vdGF0aW9uVmlld3BvcnQobWFwU3RhdGUsIGludGVybmFsVmlld1N0YXRlKX1cbiAgICAgICAgICAgICAgaXNHbG9iZUVuYWJsZWQ9e0Jvb2xlYW4obWFwU3RhdGUuZ2xvYmU/LmVuYWJsZWQpfVxuICAgICAgICAgICAgICBvblNlbGVjdD17dmlzU3RhdGVBY3Rpb25zLnNldFNlbGVjdGVkRmVhdHVyZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPEFubm90YXRpb25PdmVybGF5XG4gICAgICAgICAgICBhbm5vdGF0aW9ucz17dmlzU3RhdGUuYW5ub3RhdGlvbnN9XG4gICAgICAgICAgICBzZWxlY3RlZEFubm90YXRpb25JZD17dmlzU3RhdGUuc2VsZWN0ZWRBbm5vdGF0aW9uSWR9XG4gICAgICAgICAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dD17dmlzU3RhdGUuaXNFZGl0aW5nQW5ub3RhdGlvblRleHR9XG4gICAgICAgICAgICBpc0Fubm90YXRpb25Nb2RlPXtCb29sZWFuKG1hcENvbnRyb2xzPy5hbm5vdGF0aW9uPy5hY3RpdmUpfVxuICAgICAgICAgICAgbWFwSW5kZXg9e2luZGV4IHx8IDB9XG4gICAgICAgICAgICB2aWV3cG9ydD17dGhpcy5fZ2V0QW5ub3RhdGlvblZpZXdwb3J0KG1hcFN0YXRlLCBpbnRlcm5hbFZpZXdTdGF0ZSl9XG4gICAgICAgICAgICBpc0dsb2JlRW5hYmxlZD17Qm9vbGVhbihtYXBTdGF0ZS5nbG9iZT8uZW5hYmxlZCl9XG4gICAgICAgICAgICB1cGRhdGVBbm5vdGF0aW9uPXt2aXNTdGF0ZUFjdGlvbnMudXBkYXRlQW5ub3RhdGlvbn1cbiAgICAgICAgICAgIHNldFNlbGVjdGVkQW5ub3RhdGlvbj17dmlzU3RhdGVBY3Rpb25zLnNldFNlbGVjdGVkQW5ub3RhdGlvbn1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgICAgIHttYXBTdHlsZS50b3BNYXBTdHlsZSAmJiAhbWFwU3RhdGUuZ2xvYmU/LmVuYWJsZWQgPyAoXG4gICAgICAgICAgICA8UmVzb2x2ZWRNYXBDb21wb25lbnRcbiAgICAgICAgICAgICAga2V5PXtgdG9wLSR7YmFzZU1hcExpYnJhcnlOYW1lfWB9XG4gICAgICAgICAgICAgIHZpZXdTdGF0ZT17aW50ZXJuYWxWaWV3U3RhdGV9XG4gICAgICAgICAgICAgIG1heFBpdGNoPXtlZmZlY3RpdmVNYXhQaXRjaH1cbiAgICAgICAgICAgICAgbWFwU3R5bGU9e21hcFN0eWxlLnRvcE1hcFN0eWxlfVxuICAgICAgICAgICAgICBzdHlsZT17TUFQX1NUWUxFLnRvcH1cbiAgICAgICAgICAgICAgbWFwYm94QWNjZXNzVG9rZW49e21hcFByb3BzLm1hcGJveEFjY2Vzc1Rva2VufVxuICAgICAgICAgICAgICB0cmFuc2Zvcm1SZXF1ZXN0PXttYXBQcm9wcy50cmFuc2Zvcm1SZXF1ZXN0fVxuICAgICAgICAgICAgICB7Li4uKG1hcFByb3BzLlJUTFRleHRQbHVnaW4gIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8ge1JUTFRleHRQbHVnaW46IG1hcFByb3BzLlJUTFRleHRQbHVnaW59XG4gICAgICAgICAgICAgICAgOiB7fSl9XG4gICAgICAgICAgICAgIHsuLi4odXNlTWFwYm94QWRhcHRlclxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBtYXBMaWI6XG4gICAgICAgICAgICAgICAgICAgICAgZ2V0QXBwbGljYXRpb25Db25maWcoKS5iYXNlTWFwTGlicmFyeUNvbmZpZ1tcbiAgICAgICAgICAgICAgICAgICAgICAgIE1BUF9MSUJfT1BUSU9OUy5NQVBCT1hcbiAgICAgICAgICAgICAgICAgICAgICBdLmdldE1hcExpYigpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB7fSl9XG4gICAgICAgICAgICAgIHsuLi50b3BNYXBDb250YWluZXJQcm9wc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgICB7aGFzR2VvY29kZXJMYXllclxuICAgICAgICAgICAgPyB0aGlzLl9yZW5kZXJEZWNrT3ZlcmxheShcbiAgICAgICAgICAgICAgICB7W0dFT0NPREVSX0xBWUVSX0lEXTogaGFzR2VvY29kZXJMYXllcn0sXG4gICAgICAgICAgICAgICAge3ByaW1hcnlNYXA6IGZhbHNlLCBpc0ludGVyYWN0aXZlOiBmYWxzZX1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBudWxsfVxuICAgICAgICAgIHt0aGlzLl9yZW5kZXJNYXBQb3BvdmVyKCl9XG4gICAgICAgICAgeyFpc0V4cG9ydCAmJiBwcmltYXJ5ICE9PSBpc1NwbGl0ID8gKFxuICAgICAgICAgICAgPExvYWRpbmdJbmRpY2F0b3JcbiAgICAgICAgICAgICAgaXNWaXNpYmxlPXtCb29sZWFuKGlzTG9hZGluZ0luZGljYXRvclZpc2libGUgfHwgdGhpcy5hbnlBY3RpdmVMYXllckxvYWRpbmcpfVxuICAgICAgICAgICAgICBhY3RpdmVTaWRlUGFuZWw9e0Jvb2xlYW4oYWN0aXZlU2lkZVBhbmVsKX1cbiAgICAgICAgICAgICAgc2lkZVBhbmVsV2lkdGg9e3NpZGVQYW5lbFdpZHRofVxuICAgICAgICAgICAgICBoYXNBdHRyaWJ1dGlvbkxvZ29zPXthdHRyaWJ1dGlvbkxvZ29zLmxlbmd0aCA+IDB9XG4gICAgICAgICAgICAgIGhhc01hcFNjYWxlPXtnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmVuYWJsZU1hcFNjYWxlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICB7dGhpcy5wcm9wcy5wcmltYXJ5ID8gKFxuICAgICAgICAgICAgPEF0dHJpYnV0aW9uXG4gICAgICAgICAgICAgIHNob3dCYXNlTWFwTGliTG9nbz17dGhpcy5zdGF0ZS5zaG93QmFzZU1hcExpYkxvZ299XG4gICAgICAgICAgICAgIGJhc2VtYXBBdHRyaWJ1dGlvbnM9e3RoaXMuc3RhdGUuYmFzZW1hcEF0dHJpYnV0aW9uc31cbiAgICAgICAgICAgICAgZGF0YXNldEF0dHJpYnV0aW9ucz17ZGF0YXNldEF0dHJpYnV0aW9uc31cbiAgICAgICAgICAgICAgYmFzZU1hcExpYnJhcnlDb25maWc9e2Jhc2VNYXBMaWJyYXJ5Q29uZmlnfVxuICAgICAgICAgICAgICBnbG9iZUF0dHJpYnV0aW9ucz17Z2V0R2xvYmVCYXNlbWFwQXR0cmlidXRpb25zKHtcbiAgICAgICAgICAgICAgICBnbG9iZTogbWFwU3RhdGUuZ2xvYmUsXG4gICAgICAgICAgICAgICAgbWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gICAgICAgICAgICAgICAgbWFwU3R5bGVUeXBlOiBtYXBTdHlsZT8uc3R5bGVUeXBlLFxuICAgICAgICAgICAgICAgIGJhc2VtYXBQcm92aWRlcjogcmVzb2x2ZUdsb2JlQmFzZW1hcFByb3ZpZGVyKFxuICAgICAgICAgICAgICAgICAgYmFzZU1hcExpYnJhcnlOYW1lLFxuICAgICAgICAgICAgICAgICAgbWFwYm94QXBpQWNjZXNzVG9rZW5cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICB7dGhpcy5wcm9wcy5wcmltYXJ5ID8gKFxuICAgICAgICAgICAgPEF0dHJpYnV0aW9uTG9nb3NcbiAgICAgICAgICAgICAgbG9nb3M9e2F0dHJpYnV0aW9uTG9nb3N9XG4gICAgICAgICAgICAgIGFjdGl2ZVNpZGVQYW5lbD17Qm9vbGVhbihhY3RpdmVTaWRlUGFuZWwpfVxuICAgICAgICAgICAgICBzaWRlUGFuZWxXaWR0aD17c2lkZVBhbmVsV2lkdGh9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIHshaXNFeHBvcnQgJiYgZ2V0QXBwbGljYXRpb25Db25maWcoKS5lbmFibGVNYXBTY2FsZSA/IChcbiAgICAgICAgICAgIDxTdHlsZWRNYXBTY2FsZUNvbnRhaW5lclxuICAgICAgICAgICAgICAkbGVmdD17XG4gICAgICAgICAgICAgICAgcHJpbWFyeSAmJiBhY3RpdmVTaWRlUGFuZWxcbiAgICAgICAgICAgICAgICAgID8gKHNpZGVQYW5lbFdpZHRoIHx8IDApICsgKHRoZW1lPy5zaWRlUGFuZWw/Lm1hcmdpbj8ubGVmdCA/PyA5KVxuICAgICAgICAgICAgICAgICAgOiB0aGVtZT8uc2lkZVBhbmVsPy5tYXJnaW4/LmxlZnQgPz8gOVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICRib3R0b21PZmZzZXQ9e3ByaW1hcnkgJiYgYXR0cmlidXRpb25Mb2dvcy5sZW5ndGggPiAwID8gMjQgOiAwfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8TWFwU2NhbGUgbWFwU3RhdGU9e21hcFN0YXRlfSBtYXBJbmRleD17aW5kZXggPz8gMH0gLz5cbiAgICAgICAgICAgIDwvU3R5bGVkTWFwU2NhbGVDb250YWluZXI+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDwvPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7dmlzU3RhdGUsIG1hcFN0eWxlfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCBtYXBDb250ZW50ID0gdGhpcy5fcmVuZGVyTWFwKCk7XG4gICAgICBpZiAoIW1hcENvbnRlbnQpIHtcbiAgICAgICAgLy8gbWFwQ29udGVudCBjYW4gYmUgbnVsbCBpZiBvbkRlY2tSZW5kZXIgcmV0dXJucyBudWxsXG4gICAgICAgIC8vIGluIHRoaXMgY2FzZSB3ZSBkb24ndCB3YW50IHRvIHJlbmRlciB0aGUgbWFwXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjdXJyZW50U3R5bGUgPSBtYXBTdHlsZS5tYXBTdHlsZXM/LlttYXBTdHlsZS5zdHlsZVR5cGVdO1xuICAgICAgY29uc3QgYmFzZU1hcExpYnJhcnlOYW1lID0gZ2V0QmFzZU1hcExpYnJhcnkoY3VycmVudFN0eWxlKTtcbiAgICAgIGNvbnN0IGJhc2VNYXBMaWJyYXJ5Q29uZmlnID0gZ2V0QXBwbGljYXRpb25Db25maWcoKS5iYXNlTWFwTGlicmFyeUNvbmZpZ1tiYXNlTWFwTGlicmFyeU5hbWVdO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTWFwXG4gICAgICAgICAgcmVmPXt0aGlzLl9yZWZ9XG4gICAgICAgICAgc3R5bGU9e3RoaXMuc3R5bGVTZWxlY3Rvcih0aGlzLnByb3BzKX1cbiAgICAgICAgICBvbkNvbnRleHRNZW51PXtldmVudCA9PiBldmVudC5wcmV2ZW50RGVmYXVsdCgpfVxuICAgICAgICAgICRtaXhCbGVuZE1vZGU9e3Zpc1N0YXRlLm92ZXJsYXlCbGVuZGluZ31cbiAgICAgICAgICAkbWFwTGliQ3NzQ2xhc3M9e2Jhc2VNYXBMaWJyYXJ5Q29uZmlnLm1hcExpYkNzc0NsYXNzfVxuICAgICAgICA+XG4gICAgICAgICAge21hcENvbnRlbnR9XG4gICAgICAgIDwvU3R5bGVkTWFwPlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd2l0aFRoZW1lKE1hcENvbnRhaW5lcik7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTs7QUFFQTtBQUNBLE9BQU9BLEtBQUssSUFBR0MsU0FBUyxFQUFFQyxTQUFTLFFBQU8sT0FBTztBQUNqRCxPQUFPQyxNQUFNLElBQUdDLFNBQVMsUUFBTyxtQkFBbUI7QUFDbkQsU0FBUUMsR0FBRyxJQUFJQyxlQUFlLFFBQWUsNEJBQTRCO0FBQ3pFLFNBQVFELEdBQUcsSUFBSUUsV0FBVyxRQUFPLHdCQUF3QjtBQUN6RCxTQUFxQkMsT0FBTyxRQUFPLGVBQWU7QUFDbEQsT0FBT0MsTUFBTSxNQUFNLGdCQUFnQjtBQUNuQyxTQUFRQyxjQUFjLFFBQWlCLFVBQVU7QUFDakQsU0FBUUMsWUFBWSxRQUFPLGVBQWU7QUFDMUMsT0FBT0MsUUFBUSxNQUFNLDRCQUE0QjtBQUlqRDtBQUNBLE9BQU9DLGlCQUFpQixNQUFNLG1CQUFtQjtBQUNqRCxPQUFPQyxpQkFBaUIsTUFBTSxtQkFBbUI7QUFDakQsT0FBT0MsZUFBZSxNQUFNLGlCQUFpQjtBQUM3QyxTQUFRQyxrQkFBa0IsUUFBTyw0QkFBNEI7QUFDN0QsU0FDRUMsV0FBVyxFQUNYQyxnQkFBZ0IsRUFDaEJDLHdCQUF3QixFQUN4QkMseUJBQXlCLFFBQ3BCLG1CQUFtQjtBQUUxQixPQUFPQyxhQUFhLE1BQU0saUJBQWlCO0FBQzNDLE9BQU9DLG1CQUFtQixNQUFNLGdDQUFnQztBQUNoRSxTQUFRQyxpQkFBaUIsUUFBTyxlQUFlOztBQUUvQztBQUNBLFNBQ0VDLG9CQUFvQixFQUNwQkMsa0JBQWtCLEVBSWxCQyxnQkFBZ0IsUUFFWCxtQkFBbUI7QUFVMUIsU0FDRUMsaUJBQWlCLEVBQ2pCQyx1QkFBdUIsRUFDdkJDLDhCQUE4QixFQUM5QkMsc0JBQXNCLEVBQ3RCQyxpQkFBaUIsRUFDakJDLGdCQUFnQixFQUNoQkMsaUJBQWlCLEVBQ2pCQyxtQkFBbUIsRUFDbkJDLHlCQUF5QixFQUN6QkMsZ0JBQWdCLEVBQ2hCQyx1QkFBdUIsRUFDdkJDLGNBQWMsRUFDZEMsUUFBUSxFQUNSQyxrQkFBa0IsRUFDbEJDLG9CQUFvQixFQUVwQkMsMEJBQTBCLEVBQzFCQyxrQ0FBa0MsUUFDN0Isa0JBQWtCOztBQUV6QjtBQUNBLFNBQ0VDLFlBQVksRUFDWkMsaUJBQWlCLEVBQ2pCQywwQkFBMEIsRUFDMUJDLHNCQUFzQixFQUN0QkMsU0FBUyxFQUNUQyxrQkFBa0IsRUFDbEJDLGdCQUFnQixFQUNoQkMsZUFBZSxFQUNmQyxjQUFjLEVBQ2RDLGNBQWMsUUFDVCxzQkFBc0I7QUFFN0IsU0FDRUMsa0JBQWtCLEVBQ2xCQyxpQkFBaUIsRUFDakJDLGtCQUFrQixFQUNsQkMsMkJBQTJCLEVBQzNCQywyQkFBMkIsRUFDM0JDLHVCQUF1QixFQUN2QkMsZUFBZSxRQUNWLDBCQUEwQjtBQUVqQyxTQUFRQyw0QkFBNEIsUUFBTywwQkFBMEI7QUFDckU7QUFDQSxTQUFRQyxtQkFBbUIsUUFBTywwQkFBMEI7QUFFNUQsT0FBT0MsYUFBYSxNQUFNLHlCQUF5QjtBQUNuRCxTQUFRQyxZQUFZLFFBQU8seUJBQXlCO0FBQ3BELFNBRUVDLHVCQUF1QixFQUN2QkMsaUJBQWlCLEVBQ2pCQyxpQkFBaUIsRUFFakJDLG9CQUFvQixFQUNwQkMscUJBQXFCLFFBRWhCLHFCQUFxQjtBQUc1QixPQUFPQyxnQkFBZ0IsTUFBTSxxQkFBcUI7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBLElBQU1DLDJCQUEyQixHQUFHLEVBQUU7QUFDdEMsSUFBTUMsNkJBQTZCLEdBQUcsRUFBRTs7QUFFeEM7QUFDQSxJQUFNQyxnQ0FBZ0MsR0FBRyxHQUFHO0FBRTVDLElBQU1DLFNBQStDLEdBQUc7RUFDdERDLFNBQVMsRUFBRTtJQUNUQyxPQUFPLEVBQUUsY0FBYztJQUN2QkMsUUFBUSxFQUFFLFVBQVU7SUFDcEJDLEtBQUssRUFBRSxNQUFNO0lBQ2JDLE1BQU0sRUFBRTtFQUNWLENBQUM7RUFDREMsR0FBRyxFQUFFO0lBQ0hILFFBQVEsRUFBRSxVQUFVO0lBQ3BCRyxHQUFHLEVBQUUsQ0FBQztJQUNORixLQUFLLEVBQUUsTUFBTTtJQUNiQyxNQUFNLEVBQUUsTUFBTTtJQUNkRSxhQUFhLEVBQUU7RUFDakI7QUFDRixDQUFDO0FBRUQsSUFBTUMsa0JBQWtCLEdBQUdDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDcEIsWUFBWSxDQUFDO0FBT3BELElBQU1xQixTQUFTLEdBQUdsRixNQUFNLENBQUNhLGtCQUFrQixDQUFDLENBQzFDLFVBQUFzRSxJQUFBO0VBQUEsSUFBQUMsa0JBQUEsR0FBQUQsSUFBQSxDQUFFRSxhQUFhO0lBQWJBLGFBQWEsR0FBQUQsa0JBQUEsY0FBRyxRQUFRLEdBQUFBLGtCQUFBO0lBQUVFLGVBQWUsR0FBQUgsSUFBQSxDQUFmRyxlQUFlO0VBQUEsNkRBQUFDLE1BQUEsQ0FFdkJGLGFBQWEsbUJBQUFFLE1BQUEsQ0FFN0JELGVBQWU7QUFBQSxDQUlyQixDQUFDO0FBRUQsSUFBTUUscUJBQXFCLEdBQUcsWUFBWTtBQUMxQyxJQUFNQyxlQUFlLEdBQUcsUUFBUTs7QUFFaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQU1DLG9CQUFvQixHQUN4Qix1RUFBdUU7QUFNekUsSUFBTUMsZUFBZSxHQUFHM0YsTUFBTSxDQUFDNEYsR0FBRyxDQUFBQyxlQUFBLEtBQUFBLGVBQUEsR0FBQUMsc0JBQUEsc0lBQ1osVUFBQUMsS0FBSztFQUFBLE9BQUtBLEtBQUssQ0FBQ0MsT0FBTyxHQUFHRCxLQUFLLENBQUNFLEtBQUssQ0FBQ0Msc0JBQXNCLEdBQUcsTUFBTTtBQUFBLENBQUMsQ0FNM0Y7QUFFRCxJQUFNQyx1QkFBdUIsR0FBR25HLE1BQU0sQ0FBQzRGLEdBQUcsQ0FBQVEsZ0JBQUEsS0FBQUEsZ0JBQUEsR0FBQU4sc0JBQUEsOEdBRTlCLFVBQUFDLEtBQUs7RUFBQSxPQUFJQSxLQUFLLENBQUNFLEtBQUssQ0FBQ0ksU0FBUyxDQUFDQyxNQUFNLENBQUNDLElBQUksR0FBR1IsS0FBSyxDQUFDUyxhQUFhO0FBQUEsR0FDbEUsVUFBQVQsS0FBSztFQUFBLE9BQUlBLEtBQUssQ0FBQ1UsS0FBSztBQUFBLEVBRzdCO0FBRUQsT0FBTyxJQUFNQyxlQUFlLEdBQUcsU0FBbEJBLGVBQWVBLENBQUdYLEtBQUs7RUFBQSxPQUNsQ0EsS0FBSyxDQUFDWSxRQUFRLENBQUNDLFNBQVMsSUFBSWIsS0FBSyxDQUFDWSxRQUFRLENBQUNDLFNBQVMsQ0FBQ0MsTUFBTSxHQUFHLENBQUM7QUFBQTtBQUVqRSxPQUFPLElBQU1DLFNBQVMsR0FBRyxTQUFaQSxTQUFTQSxDQUFBQyxLQUFBLEVBQXNCO0VBQUEsSUFBakJDLFdBQVcsR0FBQUQsS0FBQSxDQUFYQyxXQUFXO0VBQ3BDLElBQUFDLGFBQUEsR0FBNkJ6RyxZQUFZLENBQUM7TUFDeEMwRyxFQUFFLEVBQUVGLFdBQVc7TUFDZkcsSUFBSSxFQUFFO1FBQUNDLElBQUksRUFBRTFELDRCQUE0QjtRQUFFMkQsS0FBSyxFQUFFTDtNQUFXLENBQUM7TUFDOURNLFFBQVEsRUFBRSxDQUFDTjtJQUNiLENBQUMsQ0FBQztJQUpLTyxNQUFNLEdBQUFOLGFBQUEsQ0FBTk0sTUFBTTtJQUFFQyxVQUFVLEdBQUFQLGFBQUEsQ0FBVk8sVUFBVTtFQU16QixvQkFBTzNILEtBQUEsQ0FBQTRILGFBQUEsQ0FBQzlCLGVBQWU7SUFBQytCLEdBQUcsRUFBRUYsVUFBVztJQUFDeEIsT0FBTyxFQUFFdUI7RUFBTyxDQUFFLENBQUM7QUFDOUQsQ0FBQzs7QUFFRDtBQUNBO0FBQ0EsU0FBUXpHLFdBQVcsRUFBRUMsZ0JBQWdCLEVBQUVDLHdCQUF3QixFQUFFQyx5QkFBeUI7QUFFMUYwRyxtQkFBbUIsQ0FBQ0MsSUFBSSxHQUFHLENBQUNsSCxpQkFBaUIsRUFBRUMsaUJBQWlCLEVBQUVPLGFBQWEsRUFBRU4sZUFBZSxDQUFDO0FBbUVqRyxlQUFlLFNBQVMrRyxtQkFBbUJBLENBQ3pDRSxVQUFnRCxFQUNoREMsVUFBZ0QsRUFDaERDLE1BQXdDLEVBQ3hDQyxRQUE0QyxFQUNKO0VBQUEsSUFDbENDLFlBQVksMEJBQUFDLFVBQUE7SUFlaEIsU0FBQUQsYUFBWWxDLE1BQUssRUFBRTtNQUFBLElBQUFvQyxLQUFBO01BQUFDLGVBQUEsT0FBQUgsWUFBQTtNQUNqQkUsS0FBQSxHQUFBRSxVQUFBLE9BQUFKLFlBQUEsR0FBTWxDLE1BQUs7TUFBRXVDLGVBQUEsQ0FBQUgsS0FBQSxpQkFmRCxjQUFjO01BQUFHLGVBQUEsQ0FBQUgsS0FBQSwyQkFFSSxLQUFLO01BQUFHLGVBQUEsQ0FBQUgsS0FBQSxXQWlCN0I7UUFDTjtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0FJLGtCQUFrQixFQUFFLEtBQUs7UUFDekI7UUFDQTtRQUNBQyxtQkFBbUIsRUFBRTtNQUN2QixDQUFDO01BQUFGLGVBQUEsQ0FBQUgsS0FBQSxXQW1DWSxJQUFJO01BQUFHLGVBQUEsQ0FBQUgsS0FBQSxVQUNRLElBQUk7TUFBQUcsZUFBQSxDQUFBSCxLQUFBLHVCQUN0QnBJLFNBQVMsQ0FBaUIsQ0FBQztNQUFBdUksZUFBQSxDQUFBSCxLQUFBLDBCQUNhLENBQUMsQ0FBQztNQUFBRyxlQUFBLENBQUFILEtBQUEsZ0NBQ08sSUFBSTtNQUFBRyxlQUFBLENBQUFILEtBQUEsMEJBQ2hCLElBQUk7TUFBQUcsZUFBQSxDQUFBSCxLQUFBLGtCQUVqQyxZQUFNO1FBQ25CLElBQUksT0FBT0EsS0FBQSxDQUFLcEMsS0FBSyxDQUFDMEMsV0FBVyxLQUFLLFVBQVUsRUFBRTtVQUNoRE4sS0FBQSxDQUFLcEMsS0FBSyxDQUFDMEMsV0FBVyxDQUFDTixLQUFBLENBQUtPLElBQUksQ0FBQztRQUNuQztNQUNGLENBQUM7TUFBQUosZUFBQSxDQUFBSCxLQUFBLG9CQUVnQjtRQUNmO01BQUEsQ0FDRDtNQUFBRyxlQUFBLENBQUFILEtBQUEsbUJBRWUsVUFBQVEsVUFBVSxFQUFJO1FBQzVCLElBQUFDLFdBQUEsR0FBeUJULEtBQUEsQ0FBS3BDLEtBQUs7VUFBNUI4QyxPQUFPLEdBQUFELFdBQUEsQ0FBUEMsT0FBTztVQUFFeEIsS0FBSyxHQUFBdUIsV0FBQSxDQUFMdkIsS0FBSztRQUNyQixJQUFJd0IsT0FBTyxFQUFFO1VBQ1gsSUFBT0MsZUFBZSxHQUFJWCxLQUFBLENBQUtwQyxLQUFLLENBQTdCK0MsZUFBZTtVQUN0QixJQUFJSCxVQUFVLElBQUlBLFVBQVUsQ0FBQ2hFLEtBQUssR0FBRyxDQUFDLElBQUlnRSxVQUFVLENBQUMvRCxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQy9Ea0UsZUFBZSxDQUFDQyxTQUFTLENBQUNKLFVBQVUsRUFBRXRCLEtBQUssQ0FBQztVQUM5QztRQUNGO01BQ0YsQ0FBQztNQUFBaUIsZUFBQSxDQUFBSCxLQUFBLG9CQUVrRCxVQUFBcEMsS0FBSztRQUFBLE9BQUlBLEtBQUssQ0FBQ1ksUUFBUSxDQUFDcUMsTUFBTTtNQUFBO01BQUFWLGVBQUEsQ0FBQUgsS0FBQSx1QkFDM0IsVUFBQXBDLEtBQUs7UUFBQSxPQUFJQSxLQUFLLENBQUNZLFFBQVEsQ0FBQ3NDLFNBQVM7TUFBQTtNQUFBWCxlQUFBLENBQUFILEtBQUEsc0JBQzFDLFVBQUFwQyxLQUFLO1FBQUEsT0FBSUEsS0FBSyxDQUFDWSxRQUFRLENBQUNDLFNBQVM7TUFBQTtNQUFBMEIsZUFBQSxDQUFBSCxLQUFBLDJCQUNwQixVQUFBcEMsS0FBSztRQUFBLE9BQUlBLEtBQUssQ0FBQ3NCLEtBQUs7TUFBQTtNQUFBaUIsZUFBQSxDQUFBSCxLQUFBLHVCQUNUNUgsY0FBYyxDQUNqRjRILEtBQUEsQ0FBS2UsZ0JBQWdCLEVBQ3JCZixLQUFBLENBQUtnQixxQkFBcUIsRUFDMUJuSCx5QkFDRixDQUFDO01BQUFzRyxlQUFBLENBQUFILEtBQUEsd0JBQzBELFVBQUFwQyxLQUFLO1FBQUEsT0FBSUEsS0FBSyxDQUFDWSxRQUFRLENBQUN5QyxVQUFVO01BQUE7TUFBQWQsZUFBQSxDQUFBSCxLQUFBLDRCQUN0QzVILGNBQWMsQ0FDbkU0SCxLQUFBLENBQUtrQixjQUFjLEVBQ25CbEIsS0FBQSxDQUFLbUIsaUJBQWlCLEVBQ3RCbkIsS0FBQSxDQUFLb0IsaUJBQWlCLEVBQ3RCckYscUJBQ0YsQ0FBQztNQUFBb0UsZUFBQSxDQUFBSCxLQUFBLDJCQUN1QjVILGNBQWMsQ0FDcEM0SCxLQUFBLENBQUtrQixjQUFjLEVBQ25CbEIsS0FBQSxDQUFLbUIsaUJBQWlCLEVBQ3RCckYsb0JBQ0YsQ0FBQztNQUFBcUUsZUFBQSxDQUFBSCxLQUFBLHFCQUNpQixVQUFBcEMsS0FBSztRQUFBLE9BQUlBLEtBQUssQ0FBQ1ksUUFBUSxDQUFDNkMsT0FBTztNQUFBO01BQUFsQixlQUFBLENBQUFILEtBQUEsNEJBQ3hCNUgsY0FBYyxDQUFDNEgsS0FBQSxDQUFLc0IsZUFBZSxFQUFFLFVBQUFELE9BQU87UUFBQSxPQUNuRUEsT0FBTyxDQUFDRSxNQUFNLENBQUMsVUFBQUMsQ0FBQztVQUFBLE9BQUlBLENBQUMsQ0FBQ3ZDLElBQUksS0FBSzNFLFlBQVksQ0FBQ21ILE9BQU8sSUFBSUQsQ0FBQyxDQUFDRSxPQUFPLEtBQUssS0FBSztRQUFBLEVBQUM7TUFBQSxDQUM3RSxDQUFDO01BQUF2QixlQUFBLENBQUFILEtBQUEsc0JBQ2tCLFVBQUFwQyxLQUFLO1FBQUEsT0FBSUEsS0FBSyxDQUFDWSxRQUFRLENBQUNtRCxNQUFNLENBQUNDLFFBQVE7TUFBQTtNQUFBekIsZUFBQSxDQUFBSCxLQUFBLDZCQUNoQyxVQUFBcEMsS0FBSztRQUFBLE9BQUlBLEtBQUssQ0FBQ1ksUUFBUSxDQUFDbUQsTUFBTSxDQUFDRSxlQUFlO01BQUE7TUFBQTFCLGVBQUEsQ0FBQUgsS0FBQSwrQkFDNUM1SCxjQUFjLENBQ3hDNEgsS0FBQSxDQUFLOEIsc0JBQXNCLEVBQzNCOUIsS0FBQSxDQUFLK0IsZ0JBQWdCLEVBQ3JCLFVBQUNDLGNBQWMsRUFBRUosUUFBUTtRQUFBLE9BQU07VUFDN0IzQyxJQUFJLEVBQUUsbUJBQW1CO1VBQ3pCMkMsUUFBUSxFQUFFQSxRQUFRLENBQUN4RSxNQUFNLENBQUM0RSxjQUFjLENBQUNDLEdBQUcsQ0FBQyxVQUFBVCxDQUFDO1lBQUEsT0FBSUEsQ0FBQyxDQUFDVSxLQUFLO1VBQUEsRUFBQztRQUM1RCxDQUFDO01BQUEsQ0FDSCxDQUFDO01BQ0Q7TUFBQS9CLGVBQUEsQ0FBQUgsS0FBQSxrQ0FDK0I1SCxjQUFjLENBQzNDNEgsS0FBQSxDQUFLbUMseUJBQXlCLEVBQzlCbkMsS0FBQSxDQUFLb0MsdUJBQXVCLEVBQzVCLFVBQUNDLFVBQVUsRUFBRVIsZUFBZTtRQUFBLE9BQzFCUSxVQUFVLENBQUNULFFBQVEsQ0FBQ1UsU0FBUyxDQUFDLFVBQUFkLENBQUM7VUFBQSxPQUFJQSxDQUFDLENBQUN6QyxFQUFFLE1BQUs4QyxlQUFlLGFBQWZBLGVBQWUsdUJBQWZBLGVBQWUsQ0FBRTlDLEVBQUU7UUFBQSxFQUFDO01BQUEsQ0FDcEUsQ0FBQztNQUFBb0IsZUFBQSxDQUFBSCxLQUFBLHVDQUNtQzVILGNBQWMsQ0FDaEQsVUFBQzhKLEtBQWE7UUFBQSxPQUFLQSxLQUFLO01BQUEsR0FDeEIsVUFBQUEsS0FBSyxFQUFJO1FBQ1AsT0FBT0EsS0FBSyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQ0EsS0FBSyxDQUFDO01BQ2pDLENBQ0YsQ0FBQztNQUFBL0IsZUFBQSxDQUFBSCxLQUFBLHVDQUVtQyxVQUFBcEMsS0FBSztRQUFBLElBQUEyRSxxQkFBQTtRQUFBLFFBQUFBLHFCQUFBLEdBQUkzRSxLQUFLLENBQUMxRSxvQkFBb0IsY0FBQXFKLHFCQUFBLGNBQUFBLHFCQUFBLEdBQUlySixvQkFBb0I7TUFBQTtNQUFBaUgsZUFBQSxDQUFBSCxLQUFBLDBCQUV4RTVILGNBQWMsQ0FDbkM0SCxLQUFBLENBQUtrQixjQUFjLEVBQ25CbEIsS0FBQSxDQUFLbUIsaUJBQWlCLEVBQ3RCbkIsS0FBQSxDQUFLd0Msa0JBQWtCLEVBQ3ZCeEMsS0FBQSxDQUFLeUMsc0JBQXNCLEVBQzNCekMsS0FBQSxDQUFLMEMsaUNBQWlDLEVBQ3RDLFVBQUNDLEtBQUssRUFBRTdCLFNBQVMsRUFBRUcsVUFBVSxFQUFFMkIsY0FBYyxFQUFFQyx5QkFBeUI7UUFBQSxPQUN0RUEseUJBQXlCLENBQUNGLEtBQUssRUFBRTdCLFNBQVMsRUFBRUcsVUFBVSxFQUFFMkIsY0FBYyxDQUFDO01BQUEsQ0FDM0UsQ0FBQztNQUVEO01BQ0E7TUFBQXpDLGVBQUEsQ0FBQUgsS0FBQSwwQkFDdUIsVUFBQXBDLEtBQUs7UUFBQSxPQUFJQSxLQUFLLENBQUNrRixRQUFRLENBQUNDLFNBQVM7TUFBQTtNQUFBNUMsZUFBQSxDQUFBSCxLQUFBLHFDQUN0QixVQUFBcEMsS0FBSztRQUFBLE9BQUlBLEtBQUssQ0FBQ2tGLFFBQVEsQ0FBQ0UsZUFBZTtNQUFBO01BQUE3QyxlQUFBLENBQUFILEtBQUEsdUJBQ3JELFVBQUFwQyxLQUFLO1FBQUEsSUFBQXFGLGVBQUE7UUFBQSxPQUFJQyxPQUFPLEVBQUFELGVBQUEsR0FBQ3JGLEtBQUssQ0FBQ3VGLFFBQVEsY0FBQUYsZUFBQSxnQkFBQUEsZUFBQSxHQUFkQSxlQUFBLENBQWdCRyxLQUFLLGNBQUFILGVBQUEsdUJBQXJCQSxlQUFBLENBQXVCdkIsT0FBTyxDQUFDO01BQUE7TUFBQXZCLGVBQUEsQ0FBQUgsS0FBQSxrQ0FDckMsVUFBQXBDLEtBQUs7UUFBQSxJQUFBeUYsZ0JBQUE7UUFBQSxRQUFBQSxnQkFBQSxHQUFJekYsS0FBSyxDQUFDdUYsUUFBUSxjQUFBRSxnQkFBQSxnQkFBQUEsZ0JBQUEsR0FBZEEsZ0JBQUEsQ0FBZ0JELEtBQUssY0FBQUMsZ0JBQUEsZ0JBQUFBLGdCQUFBLEdBQXJCQSxnQkFBQSxDQUF1QkMsTUFBTSxjQUFBRCxnQkFBQSx1QkFBN0JBLGdCQUFBLENBQStCTCxlQUFlO01BQUE7TUFBQTdDLGVBQUEsQ0FBQUgsS0FBQSx3QkFDakUsVUFBQXBDLEtBQUs7UUFBQSxJQUFBMkYsZ0JBQUE7UUFBQSxPQUFJTCxPQUFPLEVBQUFLLGdCQUFBLEdBQUMzRixLQUFLLENBQUN1RixRQUFRLGNBQUFJLGdCQUFBLGdCQUFBQSxnQkFBQSxHQUFkQSxnQkFBQSxDQUFnQkgsS0FBSyxjQUFBRyxnQkFBQSxnQkFBQUEsZ0JBQUEsR0FBckJBLGdCQUFBLENBQXVCRCxNQUFNLGNBQUFDLGdCQUFBLHVCQUE3QkEsZ0JBQUEsQ0FBK0JDLEtBQUssQ0FBQztNQUFBO01BQUFyRCxlQUFBLENBQUFILEtBQUEsbUJBQzNENUgsY0FBYyxDQUM1QjRILEtBQUEsQ0FBS3lELG9CQUFvQixFQUN6QnpELEtBQUEsQ0FBSzBELCtCQUErQixFQUNwQzFELEtBQUEsQ0FBSzJELGlCQUFpQixFQUN0QjNELEtBQUEsQ0FBSzRELDRCQUE0QixFQUNqQzVELEtBQUEsQ0FBSzZELGtCQUFrQixFQUN2QixVQUFDZCxTQUFTLEVBQUVDLGVBQWUsRUFBRWMsV0FBVyxFQUFFQyxvQkFBb0IsRUFBRUMsVUFBVTtRQUFBLE9BQUFDLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLEtBQ3JFN0gsU0FBUyxDQUFDQyxTQUFTLEdBQ2xCMEcsU0FBUyxLQUFLckksU0FBUyxHQUFHO1VBQUNzSSxlQUFlLEVBQUUvSSxRQUFRLENBQUMrSSxlQUFlO1FBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUkzRWMsV0FBVyxHQUFBRyxhQUFBO1VBRVQ7VUFDQWpCLGVBQWUsRUFBRS9JLFFBQVEsQ0FDdEI4SixvQkFBb0IsSUFDbEI3SSxrQkFBa0IsQ0FBQyxDQUFDLENBQUNnSixLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FDcEM7UUFBQyxHQUVHRixVQUFVLEdBQ1Y7VUFDRUcsZUFBZSxVQUFBL0csTUFBQSxDQUFVL0IsdUJBQXVCLENBQUMsQ0FBQyxPQUFJO1VBQ3REK0ksZ0JBQWdCLEVBQUU7UUFDcEIsQ0FBQyxHQUNELENBQUMsQ0FBQyxJQUVSLENBQUMsQ0FBQztNQUFBLENBRVYsQ0FBQztNQUVEO01BQUFqRSxlQUFBLENBQUFILEtBQUEsd0JBQ3FCLFlBQU07UUFDekJBLEtBQUEsQ0FBS3BDLEtBQUssQ0FBQ3lHLGVBQWUsQ0FBQ0MsWUFBWSxDQUFDLElBQUksQ0FBQztNQUMvQyxDQUFDO01BQUFuRSxlQUFBLENBQUFILEtBQUEsbUJBRWUsVUFBQ3VFLElBQVksRUFBRUMsSUFBNkIsRUFBSztRQUMvRHhFLEtBQUEsQ0FBS3BDLEtBQUssQ0FBQ3lHLGVBQWUsQ0FBQ0ksWUFBWSxDQUFDRCxJQUFJLEVBQUV4RSxLQUFBLENBQUtwQyxLQUFLLENBQUNzQixLQUFLLENBQUM7TUFDakUsQ0FBQztNQUFBaUIsZUFBQSxDQUFBSCxLQUFBLHVCQUVtQixVQUNsQjBFLEdBQVcsRUFDWHhDLEtBQThGLEVBQzNGO1FBQ0g7UUFDQTtRQUNBO1FBQ0E7UUFDQSxJQUFNb0IsTUFBTSxHQUFHcUIsS0FBSyxDQUFDQyxPQUFPLENBQUMxQyxLQUFLLENBQUMsR0FDL0I7VUFBQzJDLFdBQVcsRUFBRTNDO1FBQTRCLENBQUMsR0FDM0M7VUFBQzJDLFdBQVcsRUFBRTNDLEtBQUssQ0FBQzRDLE1BQU07VUFBRUMsY0FBYyxFQUFFN0MsS0FBSyxDQUFDNkM7UUFBYyxDQUFDO1FBRXJFLElBQU1wQyxLQUFLLEdBQUczQyxLQUFBLENBQUtwQyxLQUFLLENBQUNZLFFBQVEsQ0FBQ3FDLE1BQU0sQ0FBQzZELEdBQUcsQ0FBQztRQUM3QyxJQUFJLENBQUMvQixLQUFLLEVBQUU7UUFFWjNDLEtBQUEsQ0FBS3BDLEtBQUssQ0FBQ3lHLGVBQWUsQ0FBQ1csaUJBQWlCLENBQUNyQyxLQUFLLEVBQUVXLE1BQWtDLENBQUM7TUFDekYsQ0FBQztNQUFBbkQsZUFBQSxDQUFBSCxLQUFBLHFCQUVpQixVQUFDdUUsSUFBWSxFQUFLO1FBQ2xDO1FBQ0EsSUFBQVUsWUFBQSxHQUFpQ2pGLEtBQUEsQ0FBS3BDLEtBQUs7VUFBcEMrQyxlQUFlLEdBQUFzRSxZQUFBLENBQWZ0RSxlQUFlO1VBQUV6QixLQUFLLEdBQUErRixZQUFBLENBQUwvRixLQUFLO1FBQzdCeUIsZUFBZSxDQUFDQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUxQixLQUFLLENBQUM7TUFDdEMsQ0FBQztNQUFBaUIsZUFBQSxDQUFBSCxLQUFBLGtCQUVjLFVBQUN1RSxJQUFZLEVBQUVXLE1BQXdDLEVBQUs7UUFDekVsRixLQUFBLENBQUtwQyxLQUFLLENBQUMrQyxlQUFlLENBQUN3RSxTQUFTLENBQUNELE1BQU0sQ0FBQztNQUM5QyxDQUFDO01BQUEvRSxlQUFBLENBQUFILEtBQUEsaUNBRTZCLFVBQUMwRSxHQUFHLEVBQUVVLEtBQUssRUFBSztRQUM1Q3BGLEtBQUEsQ0FBS3BDLEtBQUssQ0FBQ3lHLGVBQWUsQ0FBQ2dCLHdCQUF3QixDQUFDckYsS0FBQSxDQUFLcEMsS0FBSyxDQUFDWSxRQUFRLENBQUNxQyxNQUFNLENBQUM2RCxHQUFHLENBQUMsRUFBRVUsS0FBSyxDQUFDO01BQzdGLENBQUM7TUFBQWpGLGVBQUEsQ0FBQUgsS0FBQSx1QkFFbUIsVUFDbEIwRSxHQUFXLEVBQ1gxRixJQUdDLEVBQ0U7UUFDSGdCLEtBQUEsQ0FBS3BDLEtBQUssQ0FBQ3lHLGVBQWUsQ0FBQ2lCLGNBQWMsQ0FDdkN0RixLQUFBLENBQUtwQyxLQUFLLENBQUNZLFFBQVEsQ0FBQ3FDLE1BQU0sQ0FBQzZELEdBQUcsQ0FBQyxFQUMvQjFGLElBQUksQ0FBQ3VHLFdBQVcsRUFDaEJ2RyxJQUFJLENBQUN3RyxVQUNQLENBQUM7TUFDSCxDQUFDO01BQUFyRixlQUFBLENBQUFILEtBQUEsMkJBRXVCLFVBQUF5RixPQUFPLEVBQUk7UUFDakMsSUFBQUMsWUFBQSxHQUErQzFGLEtBQUEsQ0FBS3BDLEtBQUs7VUFBQStILGtCQUFBLEdBQUFELFlBQUEsQ0FBbER4RyxLQUFLO1VBQUUwRyxRQUFRLEdBQUFELGtCQUFBLGNBQUcsQ0FBQyxHQUFBQSxrQkFBQTtVQUFFdEIsZUFBZSxHQUFBcUIsWUFBQSxDQUFmckIsZUFBZTtRQUMzQ0EsZUFBZSxDQUFDd0IsaUJBQWlCLENBQUNELFFBQVEsRUFBRUgsT0FBTyxDQUFDO01BQ3RELENBQUM7TUFBQXRGLGVBQUEsQ0FBQUgsS0FBQSwwQkFFc0IsVUFBQThGLE1BQU0sRUFBSTtRQUMvQjtRQUNBOUYsS0FBQSxDQUFLK0YsY0FBYyxHQUFHLENBQUMsQ0FBQztRQUN4Qi9GLEtBQUEsQ0FBS2dHLG1CQUFtQixDQUFDLENBQUM7UUFFMUJoRyxLQUFBLENBQUtpRyxrQkFBa0IsQ0FBQ0gsTUFBTSxDQUFDO1FBRS9CLElBQUksT0FBTzlGLEtBQUEsQ0FBS3BDLEtBQUssQ0FBQ3NJLGdCQUFnQixLQUFLLFVBQVUsRUFBRTtVQUNyRGxHLEtBQUEsQ0FBS3BDLEtBQUssQ0FBQ3NJLGdCQUFnQixDQUFDbEcsS0FBQSxDQUFLTyxJQUFJLENBQUM7UUFDeEM7TUFDRixDQUFDO01BQUFKLGVBQUEsQ0FBQUgsS0FBQSx3QkFFb0IsVUFBQzhGLE1BQVksRUFBSztRQUFBLElBQUFLLG9CQUFBLEVBQUFDLHFCQUFBO1FBQ3JDcEcsS0FBQSxDQUFLcUcsa0NBQWtDLENBQUMsQ0FBQztRQUV6QyxJQUFJQyxRQUFRLEdBQUcsQ0FBQVIsTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQUVTLEtBQUssS0FBSSxJQUFJO1FBQ3BDLElBQUksQ0FBQ0QsUUFBUSxJQUFJdEcsS0FBQSxDQUFLTyxJQUFJLEVBQUU7VUFDMUIsSUFBSTtZQUFBLElBQUFpRyxxQkFBQSxFQUFBQyxVQUFBLEVBQUFDLG1CQUFBLEVBQUFDLFdBQUE7WUFDRixJQUFNQyxRQUFRLEdBQUcsQ0FBQUoscUJBQUEsSUFBQUMsVUFBQSxHQUFBekcsS0FBQSxDQUFLTyxJQUFJLEVBQUNzRyxhQUFhLGNBQUFMLHFCQUFBLGVBQXZCQSxxQkFBQSxDQUFBTSxJQUFBLENBQUFMLFVBQTBCLENBQUMsSUFBQUMsbUJBQUEsR0FBRyxDQUFBQyxXQUFBLEdBQUEzRyxLQUFBLENBQUtPLElBQUksRUFBQ3dHLFFBQVEsY0FBQUwsbUJBQUEsdUJBQWxCQSxtQkFBQSxDQUFBSSxJQUFBLENBQUFILFdBQXFCLENBQUMsR0FBRyxJQUFJO1lBQzVFLElBQUlDLFFBQVEsRUFBRTtjQUNaTixRQUFRLEdBQUc7Z0JBQUNVLFVBQVUsRUFBRUo7Y0FBUSxDQUFDO1lBQ25DO1VBQ0YsQ0FBQyxDQUFDLE9BQUFLLE9BQUEsRUFBTTtZQUNOO1VBQUE7UUFFSjtRQUNBLElBQU1DLFVBQVUsR0FBR1osUUFBUSxHQUFHaE4sdUJBQXVCLENBQUNnTixRQUFRLENBQUMsR0FBRyxLQUFLO1FBQ3ZFLElBQU1hLE9BQU8sR0FBR2IsUUFBUSxHQUFHL00sOEJBQThCLENBQUMrTSxRQUFRLENBQUMsR0FBRyxLQUFLO1FBQzNFLElBQU1qRyxtQkFBbUIsR0FBRzdHLHNCQUFzQixDQUFDd0csS0FBQSxDQUFLTyxJQUFJLENBQUM7O1FBRTdEO1FBQ0E7UUFDQTtRQUNBLElBQUk0RyxPQUFPLElBQUksQ0FBQzlHLG1CQUFtQixDQUFDM0IsTUFBTSxFQUFFO1VBQzFDMkIsbUJBQW1CLENBQUMrRyxJQUFJLENBQUM3SixvQkFBb0IsQ0FBQztRQUNoRDs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxJQUFNd0YsU0FBUyxJQUFBb0Qsb0JBQUEsR0FBR25HLEtBQUEsQ0FBS3BDLEtBQUssQ0FBQ2tGLFFBQVEsY0FBQXFELG9CQUFBLHVCQUFuQkEsb0JBQUEsQ0FBcUJwRCxTQUFTO1FBQ2hELElBQU1zRSxZQUFZLElBQUFqQixxQkFBQSxHQUFHcEcsS0FBQSxDQUFLcEMsS0FBSyxDQUFDa0YsUUFBUSxjQUFBc0QscUJBQUEsZ0JBQUFBLHFCQUFBLEdBQW5CQSxxQkFBQSxDQUFxQmtCLFNBQVMsY0FBQWxCLHFCQUFBLHVCQUE5QkEscUJBQUEsQ0FBaUNyRCxTQUFTLENBQUM7UUFDaEUsSUFBTXdFLGlCQUFpQixHQUFHckUsT0FBTyxDQUFDbUUsWUFBWSxhQUFaQSxZQUFZLHVCQUFaQSxZQUFZLENBQUVHLE1BQU0sQ0FBQztRQUN2RCxJQUFNcEgsa0JBQWtCLEdBQUc4RyxVQUFVLElBQUksQ0FBQ0ssaUJBQWlCO1FBRTNEdkgsS0FBQSxDQUFLeUgsUUFBUSxDQUFDO1VBQ1pySCxrQkFBa0IsRUFBbEJBLGtCQUFrQjtVQUNsQkMsbUJBQW1CLEVBQW5CQTtRQUNGLENBQUMsQ0FBQzs7UUFFRjtRQUNBO1FBQ0E7UUFDQSxJQUFJLENBQUM2RyxVQUFVLEVBQUU7VUFDZmxILEtBQUEsQ0FBSzBILDJCQUEyQixDQUFDLENBQUM7UUFDcEM7TUFDRixDQUFDO01BQUF2SCxlQUFBLENBQUFILEtBQUEsd0NBRW9DLFlBQU07UUFDekMsSUFBSUEsS0FBQSxDQUFLMkgsMEJBQTBCLElBQUkzSCxLQUFBLENBQUtPLElBQUksRUFBRTtVQUNoRFAsS0FBQSxDQUFLTyxJQUFJLENBQUNxSCxHQUFHLENBQUMsWUFBWSxFQUFFNUgsS0FBQSxDQUFLMkgsMEJBQTBCLENBQUM7VUFDNUQzSCxLQUFBLENBQUsySCwwQkFBMEIsR0FBRyxJQUFJO1FBQ3hDO1FBQ0EsSUFBSTNILEtBQUEsQ0FBSzZILG9CQUFvQixJQUFJN0gsS0FBQSxDQUFLTyxJQUFJLEVBQUU7VUFDMUNQLEtBQUEsQ0FBS08sSUFBSSxDQUFDcUgsR0FBRyxDQUFDLE1BQU0sRUFBRTVILEtBQUEsQ0FBSzZILG9CQUFvQixDQUFDO1VBQ2hEN0gsS0FBQSxDQUFLNkgsb0JBQW9CLEdBQUcsSUFBSTtRQUNsQztNQUNGLENBQUM7TUFBQTFILGVBQUEsQ0FBQUgsS0FBQSxpQ0FFNkIsWUFBTTtRQUNsQyxJQUFJLENBQUNBLEtBQUEsQ0FBS08sSUFBSSxFQUFFO1FBQ2hCUCxLQUFBLENBQUtxRyxrQ0FBa0MsQ0FBQyxDQUFDO1FBQ3pDLElBQUl5QixRQUFRLEdBQUcsQ0FBQztRQUNoQjtRQUNBO1FBQ0EsSUFBTUMsWUFBWSxHQUFHLEVBQUU7UUFFdkIsSUFBTUMsVUFBVSxHQUFHLFNBQWJBLFVBQVVBLENBQUEsRUFBUztVQUN2QjtVQUNBO1VBQ0EsSUFBTTNILG1CQUFtQixHQUFHN0csc0JBQXNCLENBQUN3RyxLQUFBLENBQUtPLElBQUksQ0FBQztVQUM3RCxJQUFJRixtQkFBbUIsQ0FBQzNCLE1BQU0sRUFBRTtZQUM5QnNCLEtBQUEsQ0FBS3FHLGtDQUFrQyxDQUFDLENBQUM7WUFDekM7WUFDQTtZQUNBO1lBQ0FyRyxLQUFBLENBQUt5SCxRQUFRLENBQUM7Y0FBQ3BILG1CQUFtQixFQUFuQkE7WUFBbUIsQ0FBQyxDQUFDO1lBQ3BDLE9BQU8sSUFBSTtVQUNiO1VBQ0EsT0FBTyxLQUFLO1FBQ2QsQ0FBQztRQUVELElBQU00SCxZQUFZLEdBQUcsU0FBZkEsWUFBWUEsQ0FBSUMsQ0FBTSxFQUFLO1VBQy9CO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBLElBQUksRUFBQ0EsQ0FBQyxhQUFEQSxDQUFDLGVBQURBLENBQUMsQ0FBRUMsY0FBYyxLQUFJLENBQUFELENBQUMsYUFBREEsQ0FBQyx1QkFBREEsQ0FBQyxDQUFFRSxjQUFjLE1BQUssVUFBVSxFQUFFO1VBQzVETixRQUFRLEVBQUU7VUFDVkUsVUFBVSxDQUFDLENBQUM7VUFDWixJQUFJRixRQUFRLElBQUlDLFlBQVksRUFBRTtZQUM1Qi9ILEtBQUEsQ0FBS3FHLGtDQUFrQyxDQUFDLENBQUM7VUFDM0M7UUFDRixDQUFDOztRQUVEO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxJQUFNZ0MsTUFBTSxHQUFHLFNBQVRBLE1BQU1BLENBQUEsRUFBUztVQUNuQnJJLEtBQUEsQ0FBS3FHLGtDQUFrQyxDQUFDLENBQUM7VUFDekMsSUFBTWhHLG1CQUFtQixHQUFHN0csc0JBQXNCLENBQUN3RyxLQUFBLENBQUtPLElBQUksQ0FBQztVQUM3RCxJQUFJRixtQkFBbUIsQ0FBQzNCLE1BQU0sRUFBRTtZQUM5QnNCLEtBQUEsQ0FBS3lILFFBQVEsQ0FBQztjQUFDcEgsbUJBQW1CLEVBQW5CQTtZQUFtQixDQUFDLENBQUM7VUFDdEM7UUFDRixDQUFDO1FBRURMLEtBQUEsQ0FBSzJILDBCQUEwQixHQUFHTSxZQUFZO1FBQzlDakksS0FBQSxDQUFLNkgsb0JBQW9CLEdBQUdRLE1BQU07UUFDbENySSxLQUFBLENBQUtPLElBQUksQ0FBQytILEVBQUUsQ0FBQyxZQUFZLEVBQUVMLFlBQVksQ0FBQztRQUN4Q2pJLEtBQUEsQ0FBS08sSUFBSSxDQUFDK0gsRUFBRSxDQUFDLE1BQU0sRUFBRUQsTUFBTSxDQUFDO01BQzlCLENBQUM7TUFBQWxJLGVBQUEsQ0FBQUgsS0FBQSxnQkFFWSxVQUFBdUksTUFBTSxFQUFJO1FBQ3JCO1FBQ0EsSUFBSXZJLEtBQUEsQ0FBS08sSUFBSSxJQUFJZ0ksTUFBTSxFQUFFO1VBQ3ZCLElBQU10RyxHQUFHLEdBQUdzRyxNQUFNLENBQUNDLE1BQU0sQ0FBQyxDQUFDO1VBQzNCLElBQUl2RyxHQUFHLElBQUlqQyxLQUFBLENBQUtPLElBQUksS0FBSzBCLEdBQUcsRUFBRTtZQUM1QmpDLEtBQUEsQ0FBS08sSUFBSSxDQUFDcUgsR0FBRyxDQUFDdksscUJBQXFCLEVBQUUyQyxLQUFBLENBQUt5SSxvQkFBb0IsQ0FBQztZQUMvRHpJLEtBQUEsQ0FBS08sSUFBSSxDQUFDcUgsR0FBRyxDQUFDdEssZUFBZSxFQUFFMEMsS0FBQSxDQUFLMEksWUFBWSxDQUFDO1lBQ2pEMUksS0FBQSxDQUFLcUcsa0NBQWtDLENBQUMsQ0FBQztZQUN6Q3JHLEtBQUEsQ0FBS08sSUFBSSxHQUFHLElBQUk7VUFDbEI7UUFDRjtRQUVBLElBQUksQ0FBQ1AsS0FBQSxDQUFLTyxJQUFJLElBQUlnSSxNQUFNLEVBQUU7VUFDeEJ2SSxLQUFBLENBQUtPLElBQUksR0FBR2dJLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLENBQUM7VUFDM0I7VUFDQSxJQUFJLENBQUN4SSxLQUFBLENBQUtPLElBQUksRUFBRTtZQUNkO1VBQ0Y7VUFDQTtVQUNBUCxLQUFBLENBQUtPLElBQUksQ0FBQytILEVBQUUsQ0FBQ2pMLHFCQUFxQixFQUFFMkMsS0FBQSxDQUFLeUksb0JBQW9CLENBQUM7VUFDOUR6SSxLQUFBLENBQUtPLElBQUksQ0FBQytILEVBQUUsQ0FBQ2hMLGVBQWUsRUFBRTBDLEtBQUEsQ0FBSzBJLFlBQVksQ0FBQztRQUNsRDtRQUVBLElBQUkxSSxLQUFBLENBQUtwQyxLQUFLLENBQUMrSyxZQUFZLEVBQUU7VUFDM0I7VUFDQTtVQUNBO1VBQ0EzSSxLQUFBLENBQUtwQyxLQUFLLENBQUMrSyxZQUFZLENBQUNKLE1BQU0sRUFBRXZJLEtBQUEsQ0FBS3BDLEtBQUssQ0FBQ3NCLEtBQUssQ0FBQztRQUNuRDtNQUNGLENBQUM7TUFBQWlCLGVBQUEsQ0FBQUgsS0FBQSxxQkFrQmlCLFlBQU07UUFDdEI7TUFBQSxDQUNEO01BQUFHLGVBQUEsQ0FBQUgsS0FBQSw4QkFFK0QsSUFBSTtNQUFBRyxlQUFBLENBQUFILEtBQUEscUJBRWxELEtBQUs7TUFBQUcsZUFBQSxDQUFBSCxLQUFBLGtCQStCUixVQUFDNEksS0FBSyxFQUFFakcsS0FBSyxFQUFLO1FBQy9CLElBQU1rRyxZQUFZLEdBQUcsQ0FBQUQsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVFLE9BQU8sS0FBSSxlQUFlO1FBQ3RELElBQU1DLFlBQVksR0FBR3BHLEtBQUssYUFBTEEsS0FBSyxlQUFMQSxLQUFLLENBQUU1RCxFQUFFLFVBQUEzQixNQUFBLENBQVV1RixLQUFLLENBQUM1RCxFQUFFLGNBQVcsRUFBRTtRQUM3RCxJQUFNaUssZ0JBQWdCLEdBQ3BCSCxZQUFZLEtBQUssdUJBQXVCLEdBQ3BDLHVLQUF1SywyQkFBQXpMLE1BQUEsQ0FDL0l5TCxZQUFZLEVBQUF6TCxNQUFBLENBQUcyTCxZQUFZLE1BQUc7O1FBRTVEO1FBQ0EsSUFBTUUsU0FBUyxHQUFHakosS0FBQSxDQUFLa0osb0JBQW9CLENBQUNGLGdCQUFnQixDQUFDO1FBQzdELElBQUksQ0FBQ0MsU0FBUyxJQUFJQSxTQUFTLEdBQUdFLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUMsR0FBRzVPLDBCQUEwQixFQUFFO1VBQ3JFd0YsS0FBQSxDQUFLa0osb0JBQW9CLENBQUNGLGdCQUFnQixDQUFDLEdBQUdHLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7O1VBRXhEO1VBQ0EsSUFBSUMsaUJBQWlCLEdBQUcsRUFBRTtVQUMxQixJQUFPaEYsZUFBZSxHQUFJckUsS0FBQSxDQUFLcEMsS0FBSyxDQUE3QnlHLGVBQWU7VUFDdEIsSUFBSTFCLEtBQUssRUFBRTtZQUFBLElBQUEyRyxtQkFBQTtZQUNULElBQUlDLFlBQVksR0FBRzVHLEtBQUs7WUFDeEIsT0FBTzRHLFlBQVksQ0FBQ0MsTUFBTSxFQUFFO2NBQzFCRCxZQUFZLEdBQUdBLFlBQVksQ0FBQ0MsTUFBTTtZQUNwQztZQUNBLEtBQUFGLG1CQUFBLEdBQUlDLFlBQVksQ0FBQzNMLEtBQUssY0FBQTBMLG1CQUFBLGVBQWxCQSxtQkFBQSxDQUFvQnZLLEVBQUUsRUFBRTtjQUMxQnNGLGVBQWUsQ0FBQ29GLGVBQWUsQ0FBQ0YsWUFBWSxFQUFFLEtBQUssQ0FBQztjQUNwREYsaUJBQWlCLEdBQUcsOENBQThDO1lBQ3BFO1VBQ0Y7O1VBRUE7VUFDQTtVQUNBLElBQU9LLGNBQWMsR0FBSTFKLEtBQUEsQ0FBS3BDLEtBQUssQ0FBNUI4TCxjQUFjO1VBQ3JCQSxjQUFjLENBQUNDLGVBQWUsQ0FDNUJ0USxpQkFBaUIsQ0FBQztZQUNoQnlQLE9BQU8sS0FBQTFMLE1BQUEsQ0FBSzRMLGdCQUFnQixPQUFBNUwsTUFBQSxDQUFJaU0saUJBQWlCLENBQUU7WUFDbkR0SyxFQUFFLEVBQUVpSyxnQkFBZ0IsQ0FBQztVQUN2QixDQUFDLENBQ0gsQ0FBQztRQUNIO01BQ0YsQ0FBQztNQUFBN0ksZUFBQSxDQUFBSCxLQUFBLHlDQTJicUMxSCxRQUFRLENBQUMsWUFBTTtRQUFBLElBQUFzUixhQUFBO1FBQ25ELElBQU1DLFNBQVMsSUFBQUQsYUFBQSxHQUFHNUosS0FBQSxDQUFLOEosT0FBTyxjQUFBRixhQUFBLHVCQUFaQSxhQUFBLENBQWNHLG9CQUFvQixDQUFDL0osS0FBQSxDQUFLcEMsS0FBSyxDQUFDc0IsS0FBSyxDQUFDO1FBQ3RFcEYsZ0JBQWdCLENBQ2QrUCxTQUFTLEVBQ1Q3SixLQUFBLENBQUtwQyxLQUFLLENBQUMrQyxlQUFlLENBQUNDLFNBQVMsRUFDcENaLEtBQUEsQ0FBS3BDLEtBQUssQ0FBQ29NLGlCQUFpQixFQUM1QmhLLEtBQUEsQ0FBS3BDLEtBQUssQ0FBQzhDLE9BQU8sRUFDbEJWLEtBQUEsQ0FBS3BDLEtBQUssQ0FBQ3NCLEtBQ2IsQ0FBQztNQUNILENBQUMsRUFBRWpELDJCQUEyQixDQUFDO01BQUFrRSxlQUFBLENBQUFILEtBQUEsdUJBRVgsVUFBQWlLLFFBQVEsRUFBSTtRQUFBLElBQUFDLG9CQUFBO1FBQzlCLElBQU9MLFNBQVMsR0FBc0JJLFFBQVEsQ0FBdkNKLFNBQVM7VUFBRU0sZ0JBQWdCLEdBQUlGLFFBQVEsQ0FBNUJFLGdCQUFnQjtRQUNsQyxJQUFJbkssS0FBQSxDQUFLcEMsS0FBSyxDQUFDd00sUUFBUSxFQUFFO1VBQ3ZCO1VBQ0E7VUFDQTtRQUNGO1FBQ0EsSUFBT0Msb0JBQW9CLEdBQUlySyxLQUFBLENBQUs4SixPQUFPLENBQXBDTyxvQkFBb0I7O1FBRTNCO1FBQ0E7UUFDQTtRQUNBLElBQUksR0FBQUgsb0JBQUEsR0FBQ2xLLEtBQUEsQ0FBS3BDLEtBQUssQ0FBQ3VGLFFBQVEsY0FBQStHLG9CQUFBLGdCQUFBQSxvQkFBQSxHQUFuQkEsb0JBQUEsQ0FBcUI5RyxLQUFLLGNBQUE4RyxvQkFBQSxlQUExQkEsb0JBQUEsQ0FBNEJ4SSxPQUFPLEdBQUU7VUFDeEMySSxvQkFBb0IsQ0FBQ1IsU0FBUyxFQUFFN0osS0FBQSxDQUFLcEMsS0FBSyxDQUFDc0IsS0FBSyxDQUFDO1VBQ2pEYyxLQUFBLENBQUtzSyxlQUFlLEdBQUcsS0FBSztVQUM1QnRLLEtBQUEsQ0FBS3VLLG1DQUFtQyxDQUFDLENBQUM7VUFDMUM7UUFDRjtRQUVBLElBQU1DLGlCQUFpQixHQUNyQkwsZ0JBQWdCLEtBQ2ZBLGdCQUFnQixDQUFDTSxTQUFTLElBQ3pCTixnQkFBZ0IsQ0FBQ08sU0FBUyxJQUMxQlAsZ0JBQWdCLENBQUNRLFVBQVUsSUFDM0JSLGdCQUFnQixDQUFDUyxVQUFVLElBQzNCVCxnQkFBZ0IsQ0FBQ1UsWUFBWSxDQUFDO1FBQ2xDO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxJQUFNQyxtQkFBbUIsR0FBRyxDQUFDTixpQkFBaUIsSUFBSXhLLEtBQUEsQ0FBS3NLLGVBQWU7UUFDdEV0SyxLQUFBLENBQUtzSyxlQUFlLEdBQUdwSCxPQUFPLENBQUNzSCxpQkFBaUIsQ0FBQztRQUNqRCxJQUFJQSxpQkFBaUIsSUFBSU0sbUJBQW1CLEVBQUU7VUFDNUM7VUFDQTtVQUNBO1VBQ0FULG9CQUFvQixDQUFDUixTQUFTLEVBQUU3SixLQUFBLENBQUtwQyxLQUFLLENBQUNzQixLQUFLLENBQUM7UUFDbkQsQ0FBQyxNQUFNO1VBQ0w7VUFDQTtVQUNBO1VBQ0E2TCxVQUFVLENBQUMsWUFBTTtZQUNmVixvQkFBb0IsQ0FBQ1IsU0FBUyxFQUFFN0osS0FBQSxDQUFLcEMsS0FBSyxDQUFDc0IsS0FBSyxDQUFDO1VBQ25ELENBQUMsRUFBRSxDQUFDLENBQUM7UUFDUDtRQUNBYyxLQUFBLENBQUt1SyxtQ0FBbUMsQ0FBQyxDQUFDO01BQzVDLENBQUM7TUFBQXBLLGVBQUEsQ0FBQUgsS0FBQSw0QkFFd0IxSCxRQUFRLENBQUMsVUFBQzBHLElBQUksRUFBRUUsS0FBSyxFQUFLO1FBQ2pEYyxLQUFBLENBQUtwQyxLQUFLLENBQUN5RyxlQUFlLENBQUNJLFlBQVksQ0FBQ3pGLElBQUksRUFBRUUsS0FBSyxDQUFDO01BQ3RELENBQUMsRUFBRWhELDZCQUE2QixDQUFDO01BQUFpRSxlQUFBLENBQUFILEtBQUEsMkJBRVQxSCxRQUFRLENBQUMsVUFBQzhNLEtBQUssRUFBRTZFLFFBQVEsRUFBSztRQUNwRGpLLEtBQUEsQ0FBS3BDLEtBQUssQ0FBQ3lHLGVBQWUsQ0FBQzJHLFdBQVcsQ0FBQ2hSLGNBQWMsQ0FBQ29MLEtBQUssRUFBRTZFLFFBQVEsQ0FBQyxDQUFDO01BQ3pFLENBQUMsRUFBRS9OLDZCQUE2QixDQUFDO01BQUFpRSxlQUFBLENBQUFILEtBQUEsZ0NBRUoxSCxRQUFRLENBQUMsWUFBTTtRQUMxQztRQUNBMEgsS0FBQSxDQUFLcEMsS0FBSyxDQUFDeUcsZUFBZSxDQUFDNEcsbUJBQW1CLENBQUM7VUFBQ0MsTUFBTSxFQUFFO1FBQUMsQ0FBQyxDQUFDO01BQzdELENBQUMsRUFBRS9PLGdDQUFnQyxDQUFDO01BQUFnRSxlQUFBLENBQUFILEtBQUEsa0NBRUwsVUFBQzJDLEtBQVksRUFBSztRQUMvQyxJQUFPMEIsZUFBZSxHQUFJckUsS0FBQSxDQUFLcEMsS0FBSyxDQUE3QnlHLGVBQWU7UUFDdEJBLGVBQWUsQ0FBQ1csaUJBQWlCLENBQUNyQyxLQUFLLEVBQUU7VUFBQ3dJLFNBQVMsRUFBRSxDQUFDeEksS0FBSyxDQUFDVyxNQUFNLENBQUM2SDtRQUFTLENBQUMsQ0FBQztNQUNoRixDQUFDO01BQUFoTCxlQUFBLENBQUFILEtBQUEsdUJBRW1CLFVBQUFvTCxPQUFPLEVBQUk7UUFDN0IsSUFBQUMsWUFBQSxHQUFnQ3JMLEtBQUEsQ0FBS3BDLEtBQUs7VUFBbkNzQixLQUFLLEdBQUFtTSxZQUFBLENBQUxuTSxLQUFLO1VBQUV3SyxjQUFjLEdBQUEyQixZQUFBLENBQWQzQixjQUFjO1FBRTVCQSxjQUFjLENBQUM0QixnQkFBZ0IsQ0FBQ0YsT0FBTyxFQUFFRyxNQUFNLENBQUNyTSxLQUFLLENBQUMsQ0FBQztNQUN6RCxDQUFDO01Bdi9CQzdFLGtDQUFrQyxDQUFDLENBQUM7TUFBQyxPQUFBMkYsS0FBQTtJQUN2QztJQUFDd0wsU0FBQSxDQUFBMUwsWUFBQSxFQUFBQyxVQUFBO0lBQUEsT0FBQTBMLFlBQUEsQ0FBQTNMLFlBQUE7TUFBQTRMLEdBQUE7TUFBQXhKLEtBQUEsRUFjRCxTQUFBeUosaUJBQWlCQSxDQUFBLEVBQUc7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQzNPLElBQUksQ0FBQzRPLE9BQU8sRUFBRTtVQUN0QjtRQUNGO1FBQ0FqUyxpQkFBaUIsQ0FBQyxJQUFJLENBQUNxRCxJQUFJLENBQUM0TyxPQUFPLEVBQUUsSUFBSSxDQUFDQyxhQUFhLENBQUM7TUFDMUQ7SUFBQztNQUFBSCxHQUFBO01BQUF4SixLQUFBLEVBRUQsU0FBQTRKLG9CQUFvQkEsQ0FBQSxFQUFHO1FBQ3JCLElBQUksSUFBSSxDQUFDdkwsSUFBSSxFQUFFO1VBQ2IsSUFBSSxDQUFDQSxJQUFJLENBQUNxSCxHQUFHLENBQUN2SyxxQkFBcUIsRUFBRSxJQUFJLENBQUNvTCxvQkFBb0IsQ0FBQztVQUMvRCxJQUFJLENBQUNsSSxJQUFJLENBQUNxSCxHQUFHLENBQUN0SyxlQUFlLEVBQUUsSUFBSSxDQUFDb0wsWUFBWSxDQUFDO1VBQ2pELElBQUksQ0FBQ3JDLGtDQUFrQyxDQUFDLENBQUM7UUFDM0M7UUFDQSxJQUFJLENBQUMsSUFBSSxDQUFDckosSUFBSSxDQUFDNE8sT0FBTyxFQUFFO1VBQ3RCO1FBQ0Y7UUFDQWhTLG1CQUFtQixDQUFDLElBQUksQ0FBQ29ELElBQUksQ0FBQzRPLE9BQU8sQ0FBQztNQUN4QztJQUFDO01BQUFGLEdBQUE7TUFBQXhKLEtBQUEsRUFFRCxTQUFBNkosa0JBQWtCQSxDQUFDQyxTQUFTLEVBQUU7UUFDNUIsSUFBSUEsU0FBUyxDQUFDbEosUUFBUSxDQUFDQyxTQUFTLEtBQUssSUFBSSxDQUFDbkYsS0FBSyxDQUFDa0YsUUFBUSxDQUFDQyxTQUFTLEVBQUU7VUFDbEUsSUFBSSxDQUFDc0Qsa0NBQWtDLENBQUMsQ0FBQztVQUN6QyxJQUFJLElBQUksQ0FBQ3pJLEtBQUssQ0FBQ2tGLFFBQVEsQ0FBQ0MsU0FBUyxLQUFLckksU0FBUyxFQUFFO1lBQy9DLElBQUksQ0FBQytNLFFBQVEsQ0FBQztjQUNackgsa0JBQWtCLEVBQUUsS0FBSztjQUN6QkMsbUJBQW1CLEVBQUU7WUFDdkIsQ0FBQyxDQUFDO1VBQ0osQ0FBQyxNQUFNO1lBQ0wsSUFBSSxDQUFDNEYsa0JBQWtCLENBQUMsQ0FBQztVQUMzQjtRQUNGO01BQ0Y7SUFBQztNQUFBeUYsR0FBQTtNQUFBeEosS0FBQSxFQStWRCxTQUFBK0osa0JBQWtCQSxDQUFDQyxNQUFNLEVBQUU7UUFDekIsSUFBSSxJQUFJLENBQUN0TyxLQUFLLENBQUN1TyxpQkFBaUIsRUFBRTtVQUNoQyxJQUFJLENBQUN2TyxLQUFLLENBQUN1TyxpQkFBaUIsQ0FBQyxJQUFJLENBQUNDLEtBQUssRUFBRUYsTUFBTSxDQUFDO1FBQ2xEO01BQ0Y7O01BRUE7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBTEk7TUFBQVIsR0FBQTtNQUFBeEosS0FBQSxFQU1BLFNBQUFtSyxvQkFBb0JBLENBQUNDLFNBQWtCLEVBQVc7UUFBQSxJQUFBQyxXQUFBO1FBQ2hELE9BQU8sQ0FBQ0QsU0FBUyxJQUFJcEosT0FBTyxFQUFBcUosV0FBQSxHQUFDLElBQUksQ0FBQ0gsS0FBSyxjQUFBRyxXQUFBLGdCQUFBQSxXQUFBLEdBQVZBLFdBQUEsQ0FBWUMsV0FBVyxjQUFBRCxXQUFBLGdCQUFBQSxXQUFBLEdBQXZCQSxXQUFBLENBQXlCRSxVQUFVLGNBQUFGLFdBQUEsdUJBQW5DQSxXQUFBLENBQXFDN04sTUFBTSxDQUFDO01BQzNFO0lBQUM7TUFBQWdOLEdBQUE7TUFBQXhKLEtBQUEsRUFVRCxTQUFBd0ssc0JBQXNCQSxDQUFDdkosUUFBYSxFQUFFd0osaUJBQXNCLEVBQUU7UUFBQSxJQUFBQyxxQkFBQSxFQUFBQyxxQkFBQSxFQUFBQyxxQkFBQSxFQUFBQyxLQUFBLEVBQUFDLHFCQUFBLEVBQUFDLEtBQUEsRUFBQUMscUJBQUEsRUFBQUMscUJBQUE7UUFDNUQsSUFBTUMsU0FBUyxJQUFBUixxQkFBQSxHQUFHRCxpQkFBaUIsYUFBakJBLGlCQUFpQix1QkFBakJBLGlCQUFpQixDQUFFUyxTQUFTLGNBQUFSLHFCQUFBLGNBQUFBLHFCQUFBLEdBQUl6SixRQUFRLENBQUNpSyxTQUFTO1FBQ3BFLElBQU1DLFFBQVEsSUFBQVIscUJBQUEsR0FBR0YsaUJBQWlCLGFBQWpCQSxpQkFBaUIsdUJBQWpCQSxpQkFBaUIsQ0FBRVUsUUFBUSxjQUFBUixxQkFBQSxjQUFBQSxxQkFBQSxHQUFJMUosUUFBUSxDQUFDa0ssUUFBUTtRQUNqRSxJQUFNQyxJQUFJLElBQUFSLHFCQUFBLEdBQUdILGlCQUFpQixhQUFqQkEsaUJBQWlCLHVCQUFqQkEsaUJBQWlCLENBQUVXLElBQUksY0FBQVIscUJBQUEsY0FBQUEscUJBQUEsR0FBSTNKLFFBQVEsQ0FBQ21LLElBQUk7UUFDckQsSUFBTUMsS0FBSyxJQUFBUixLQUFBLElBQUFDLHFCQUFBLEdBQUdMLGlCQUFpQixhQUFqQkEsaUJBQWlCLHVCQUFqQkEsaUJBQWlCLENBQUVZLEtBQUssY0FBQVAscUJBQUEsY0FBQUEscUJBQUEsR0FBSTdKLFFBQVEsQ0FBQ29LLEtBQUssY0FBQVIsS0FBQSxjQUFBQSxLQUFBLEdBQUksQ0FBQztRQUM3RCxJQUFNUyxPQUFPLElBQUFQLEtBQUEsSUFBQUMscUJBQUEsR0FBR1AsaUJBQWlCLGFBQWpCQSxpQkFBaUIsdUJBQWpCQSxpQkFBaUIsQ0FBRWEsT0FBTyxjQUFBTixxQkFBQSxjQUFBQSxxQkFBQSxHQUFJL0osUUFBUSxDQUFDcUssT0FBTyxjQUFBUCxLQUFBLGNBQUFBLEtBQUEsR0FBSSxDQUFDO1FBQ25FLElBQU16USxLQUFLLEdBQUcyRyxRQUFRLENBQUMzRyxLQUFLLElBQUksQ0FBQztRQUNqQyxJQUFNQyxNQUFNLEdBQUcwRyxRQUFRLENBQUMxRyxNQUFNLElBQUksQ0FBQztRQUNuQyxJQUFNaVAsR0FBRyxNQUFBdE8sTUFBQSxDQUFNZ1EsU0FBUyxPQUFBaFEsTUFBQSxDQUFJaVEsUUFBUSxPQUFBalEsTUFBQSxDQUFJa1EsSUFBSSxPQUFBbFEsTUFBQSxDQUFJbVEsS0FBSyxPQUFBblEsTUFBQSxDQUFJb1EsT0FBTyxPQUFBcFEsTUFBQSxDQUFJWixLQUFLLE9BQUFZLE1BQUEsQ0FBSVgsTUFBTSxDQUFFO1FBRXJGLElBQUksRUFBQTBRLHFCQUFBLE9BQUksQ0FBQ00sd0JBQXdCLGNBQUFOLHFCQUFBLHVCQUE3QkEscUJBQUEsQ0FBK0J6QixHQUFHLE1BQUtBLEdBQUcsRUFBRTtVQUM5QyxPQUFPLElBQUksQ0FBQytCLHdCQUF3QixDQUFDeEQsUUFBUTtRQUMvQztRQUVBLElBQU15RCxXQUFXLEdBQUF6SixhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxLQUFPZCxRQUFRLEdBQUt3SixpQkFBaUI7VUFBRW5RLEtBQUssRUFBTEEsS0FBSztVQUFFQyxNQUFNLEVBQU5BO1FBQU0sRUFBQztRQUN0RSxJQUFNa1IsRUFBRSxHQUFHNVQsdUJBQXVCLENBQUMyVCxXQUFXLENBQVE7UUFDdEQsSUFBTXpELFFBQVEsR0FBRztVQUNmMkQsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUdDLE1BQXdCO1lBQUEsT0FBS0YsRUFBRSxDQUFDQyxPQUFPLENBQUNDLE1BQU0sQ0FBQztVQUFBLENBQW9CO1VBQzdFQyxTQUFTLEVBQUUsU0FBWEEsU0FBU0EsQ0FBR0MsRUFBb0I7WUFBQSxPQUFLSixFQUFFLENBQUNHLFNBQVMsQ0FBQ0MsRUFBRSxDQUFDO1VBQUEsQ0FBb0I7VUFDekVYLFNBQVMsRUFBVEEsU0FBUztVQUNUQyxRQUFRLEVBQVJBLFFBQVE7VUFDUjdRLEtBQUssRUFBTEEsS0FBSztVQUNMQyxNQUFNLEVBQU5BLE1BQU07VUFDTjZRLElBQUksRUFBSkE7UUFDRixDQUFDO1FBQ0QsSUFBSSxDQUFDRyx3QkFBd0IsR0FBRztVQUFDL0IsR0FBRyxFQUFIQSxHQUFHO1VBQUV6QixRQUFRLEVBQVJBO1FBQVEsQ0FBQztRQUMvQyxPQUFPQSxRQUFRO01BQ2pCO0lBQUM7TUFBQXlCLEdBQUE7TUFBQXhKLEtBQUEsRUF5Q0Q7O01BRUE7TUFDQSxTQUFBOEwsaUJBQWlCQSxDQUFBLEVBQUc7UUFBQSxJQUFBQyxxQkFBQTtRQUNsQjtRQUNBO1FBQ0EsSUFBSSxJQUFJLENBQUNyUSxLQUFLLENBQUNzQixLQUFLLE9BQUErTyxxQkFBQSxHQUFLLElBQUksQ0FBQ3JRLEtBQUssQ0FBQ1ksUUFBUSxDQUFDMFAsU0FBUyxjQUFBRCxxQkFBQSx1QkFBN0JBLHFCQUFBLENBQStCckksUUFBUSxHQUFFO1VBQ2hFLE9BQU8sSUFBSTtRQUNiOztRQUVBO1FBQ0EsSUFBQXVJLFlBQUEsR0FXSSxJQUFJLENBQUN2USxLQUFLO1VBVlp1RixRQUFRLEdBQUFnTCxZQUFBLENBQVJoTCxRQUFRO1VBQUFpTCxxQkFBQSxHQUFBRCxZQUFBLENBQ1IzUCxRQUFRO1VBQ04wUCxTQUFTLEdBQUFFLHFCQUFBLENBQVRGLFNBQVM7VUFDVEcsT0FBTyxHQUFBRCxxQkFBQSxDQUFQQyxPQUFPO1VBQ1BDLFFBQVEsR0FBQUYscUJBQUEsQ0FBUkUsUUFBUTtVQUNSQyxpQkFBaUIsR0FBQUgscUJBQUEsQ0FBakJHLGlCQUFpQjtVQUNqQkMsZUFBZSxHQUFBSixxQkFBQSxDQUFmSSxlQUFlO1VBQ2YzTixNQUFNLEdBQUF1TixxQkFBQSxDQUFOdk4sTUFBTTtVQUFBNE4sc0JBQUEsR0FBQUwscUJBQUEsQ0FDTk0sUUFBUTtVQUFHQyxhQUFhLEdBQUFGLHNCQUFBLENBQWJFLGFBQWE7VUFBRW5KLFVBQVUsR0FBQWlKLHNCQUFBLENBQVZqSixVQUFVO1VBQUVvSixNQUFNLEdBQUFILHNCQUFBLENBQU5HLE1BQU07UUFHaEQsSUFBTWhNLGNBQWMsR0FBRyxJQUFJLENBQUNILHNCQUFzQixDQUFDLElBQUksQ0FBQzdFLEtBQUssQ0FBQztRQUU5RCxJQUFJLENBQUMrUSxhQUFhLElBQUksQ0FBQ0osaUJBQWlCLENBQUNNLE9BQU8sRUFBRTtVQUNoRCxPQUFPLElBQUk7UUFDYjtRQUVBLElBQU1DLGNBQWMsR0FBR2pULGlCQUFpQixDQUFDO1VBQ3ZDMlMsZUFBZSxFQUFmQSxlQUFlO1VBQ2ZELGlCQUFpQixFQUFqQkEsaUJBQWlCO1VBQ2pCTCxTQUFTLEVBQVRBLFNBQVM7VUFDVHJOLE1BQU0sRUFBTkEsTUFBTTtVQUNOK0IsY0FBYyxFQUFkQSxjQUFjO1VBQ2QwTCxRQUFRLEVBQVJBO1FBQ0YsQ0FBQyxDQUFDO1FBRUYsSUFBTVMsV0FBVyxHQUFHUixpQkFBaUIsQ0FBQ00sT0FBTyxDQUFDdkwsTUFBTSxHQUNoRGlMLGlCQUFpQixDQUFDTSxPQUFPLENBQUN2TCxNQUFNLENBQUN5TCxXQUFXLEdBQzVDLEtBQUs7UUFFVCxJQUFJQyxjQUFjLEdBQUc7VUFBQ0MsQ0FBQyxFQUFFLENBQUM7VUFBRUMsQ0FBQyxFQUFFO1FBQUMsQ0FBQztRQUNqQyxJQUFJQyxlQUFzQyxHQUFHLElBQUk7UUFDakQsSUFBSVAsTUFBTSxJQUFJUCxPQUFPLEVBQUU7VUFDckI7VUFDQSxJQUFNcEUsUUFBUSxHQUFHbFEsdUJBQXVCLENBQUNvSixRQUFRLENBQUM7VUFDbEQsSUFBTTBLLE1BQU0sR0FBR1EsT0FBTyxHQUFHQSxPQUFPLENBQUM3SSxVQUFVLEdBQUdvSixNQUFNLENBQUNwSixVQUFVO1VBQy9Ed0osY0FBYyxHQUFHLElBQUksQ0FBQ0ksV0FBVyxDQUFDbkYsUUFBUSxFQUFFNEQsTUFBTSxDQUFDO1VBQ25Ec0IsZUFBZSxHQUFHdFQsaUJBQWlCLENBQUM7WUFDbEMyUyxlQUFlLEVBQWZBLGVBQWU7WUFDZkQsaUJBQWlCLEVBQWpCQSxpQkFBaUI7WUFDakJMLFNBQVMsRUFBRUcsT0FBTztZQUNsQnhOLE1BQU0sRUFBTkEsTUFBTTtZQUNOK0IsY0FBYyxFQUFkQSxjQUFjO1lBQ2QwTCxRQUFRLEVBQVJBO1VBQ0YsQ0FBQyxDQUFDO1VBQ0YsSUFBSVEsY0FBYyxJQUFJSyxlQUFlLEVBQUU7WUFDckNMLGNBQWMsQ0FBQ08sV0FBVyxHQUFHRixlQUFlLENBQUNuUSxJQUFJO1lBQ2pEOFAsY0FBYyxDQUFDUSxXQUFXLEdBQUdmLGlCQUFpQixDQUFDTSxPQUFPLENBQUN2TCxNQUFNLENBQUNnTSxXQUFXO1VBQzNFO1FBQ0Y7UUFFQSxJQUFNQyxVQUFVLEdBQUc7VUFDakJDLE9BQU8sRUFBRSxJQUFJLENBQUNDLGtCQUFrQjtVQUNoQ25DLElBQUksRUFBRW5LLFFBQVEsQ0FBQ21LLElBQUk7VUFDbkJqUixTQUFTLEVBQUUsSUFBSSxDQUFDK1AsS0FBSyxHQUFHLElBQUksQ0FBQ0EsS0FBSyxDQUFDc0QsTUFBTSxHQUFHQztRQUM5QyxDQUFDO1FBRUQsb0JBQ0VqWSxLQUFBLENBQUE0SCxhQUFBLENBQUM3RCxhQUFhLFFBQ1gwVCxlQUFlLGlCQUNkelgsS0FBQSxDQUFBNEgsYUFBQSxDQUFDSSxVQUFVLEVBQUFrUSxRQUFBLEtBQ0xaLGNBQWMsRUFDZE8sVUFBVTtVQUNkVCxjQUFjLEVBQUVLLGVBQWdCO1VBQ2hDM0osVUFBVSxFQUFFK0ksaUJBQWlCLENBQUMvSSxVQUFVLENBQUM5RCxPQUFPLElBQUksQ0FBQ2tOLE1BQU0sSUFBSSxDQUFDLENBQUMsRUFBRXBKLFVBQVc7VUFDOUVxSyxNQUFNLEVBQUUsSUFBSztVQUNiQyxNQUFNLEVBQUVmLFdBQVk7VUFDcEJnQixhQUFhLEVBQUUsSUFBSSxDQUFDblMsS0FBSyxDQUFDeUcsZUFBZSxDQUFDMkwsV0FBWTtVQUN0REMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDclMsS0FBSyxDQUFDeUcsZUFBZSxDQUFDNEw7VUFDL0M7VUFBQTtVQUNBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMvTix5QkFBeUIsQ0FBQyxJQUFJLENBQUN2RSxLQUFLO1FBQUUsRUFDL0QsQ0FDRixFQUNBa1IsY0FBYyxLQUFLLENBQUNLLGVBQWUsSUFBSUosV0FBVyxDQUFDLGlCQUNsRHJYLEtBQUEsQ0FBQTRILGFBQUEsQ0FBQ0ksVUFBVSxFQUFBa1EsUUFBQTtVQUNUWCxDQUFDLEVBQUVOLGFBQWEsQ0FBQyxDQUFDLENBQUU7VUFDcEJPLENBQUMsRUFBRVAsYUFBYSxDQUFDLENBQUM7UUFBRSxHQUNoQlksVUFBVTtVQUNkVCxjQUFjLEVBQUVBLGNBQWU7VUFDL0JlLE1BQU0sRUFBRSxLQUFNO1VBQ2RySyxVQUFVLEVBQUUrSSxpQkFBaUIsQ0FBQy9JLFVBQVUsQ0FBQzlELE9BQU8sSUFBSThELFVBQVc7VUFDL0R1SyxhQUFhLEVBQUUsSUFBSSxDQUFDblMsS0FBSyxDQUFDeUcsZUFBZSxDQUFDMkwsV0FBWTtVQUN0REMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDclMsS0FBSyxDQUFDeUcsZUFBZSxDQUFDNEw7VUFDL0M7VUFBQTtVQUNBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMvTix5QkFBeUIsQ0FBQyxJQUFJLENBQUN2RSxLQUFLO1FBQUUsRUFDL0QsQ0FFVSxDQUFDO01BRXBCOztNQUVBO0lBQUE7TUFBQThOLEdBQUE7TUFBQXhKLEtBQUEsRUFFQSxTQUFBa04sV0FBV0EsQ0FBQ25GLFFBQVEsRUFBRTRELE1BQU0sRUFBRTtRQUM1QixJQUFNc0MsV0FBVyxHQUFHLENBQUNsRyxRQUFRLElBQUksQ0FBQzRELE1BQU0sR0FBRyxJQUFJLEdBQUc1RCxRQUFRLENBQUMyRCxPQUFPLENBQUNDLE1BQU0sQ0FBQztRQUMxRSxPQUFPc0MsV0FBVyxJQUFJO1VBQUNsQixDQUFDLEVBQUVrQixXQUFXLENBQUMsQ0FBQyxDQUFDO1VBQUVqQixDQUFDLEVBQUVpQixXQUFXLENBQUMsQ0FBQztRQUFDLENBQUM7TUFDOUQ7SUFBQztNQUFBekUsR0FBQTtNQUFBeEosS0FBQSxFQUVELFNBQUFrTyxrQkFBa0JBLENBQ2hCQyxhQUFhLEVBSWI7UUFBQSxJQUFBQyxjQUFBO1VBQUFDLGVBQUE7VUFBQUMsbUJBQUE7VUFBQUMsTUFBQTtVQUFBQyxxQkFBQTtRQUFBLElBSEFDLE9BQW1GLEdBQUFDLFNBQUEsQ0FBQWxTLE1BQUEsUUFBQWtTLFNBQUEsUUFBQWpCLFNBQUEsR0FBQWlCLFNBQUEsTUFBRztVQUNwRkMsVUFBVSxFQUFFO1FBQ2QsQ0FBQztRQUVELElBQUFDLFlBQUEsR0FjSSxJQUFJLENBQUNsVCxLQUFLO1VBYlprRixRQUFRLEdBQUFnTyxZQUFBLENBQVJoTyxRQUFRO1VBQ1J0RSxRQUFRLEdBQUFzUyxZQUFBLENBQVJ0UyxRQUFRO1VBQ1IyRSxRQUFRLEdBQUEyTixZQUFBLENBQVIzTixRQUFRO1VBQ1JrQixlQUFlLEdBQUF5TSxZQUFBLENBQWZ6TSxlQUFlO1VBQ2YwTSxvQkFBb0IsR0FBQUQsWUFBQSxDQUFwQkMsb0JBQW9CO1VBQ3BCQyxZQUFZLEdBQUFGLFlBQUEsQ0FBWkUsWUFBWTtVQUNaQyxXQUFXLEdBQUFILFlBQUEsQ0FBWEcsV0FBVztVQUNYL1IsS0FBSyxHQUFBNFIsWUFBQSxDQUFMNVIsS0FBSztVQUNMZ1MsV0FBVyxHQUFBSixZQUFBLENBQVhJLFdBQVc7VUFDWEMsbUJBQW1CLEdBQUFMLFlBQUEsQ0FBbkJLLG1CQUFtQjtVQUNuQnJULEtBQUssR0FBQWdULFlBQUEsQ0FBTGhULEtBQUs7VUFDTHNULG9CQUFvQixHQUFBTixZQUFBLENBQXBCTSxvQkFBb0I7VUFDcEJwRyxXQUFXLEdBQUE4RixZQUFBLENBQVg5RixXQUFXO1FBR2IsSUFBT2tELFNBQVMsR0FBWTFQLFFBQVEsQ0FBN0IwUCxTQUFTO1VBQUV2TSxNQUFNLEdBQUluRCxRQUFRLENBQWxCbUQsTUFBTTtRQUN4QixJQUFPa1AsVUFBVSxHQUE2QkYsT0FBTyxDQUE5Q0UsVUFBVTtVQUFFUSxhQUFhLEdBQWNWLE9BQU8sQ0FBbENVLGFBQWE7VUFBRUMsUUFBUSxHQUFJWCxPQUFPLENBQW5CVyxRQUFROztRQUUxQztRQUNBLElBQU9DLE9BQU8sR0FBSUwsV0FBVyxDQUF0QkssT0FBTztRQUNkLElBQUFDLEtBQUEsR0FBMkNELE9BQU8sSUFBSSxDQUFDLENBQUM7VUFBQUUsWUFBQSxHQUFBRCxLQUFBLENBQWpERSxNQUFNO1VBQUVDLGdCQUFnQixHQUFBRixZQUFBLGNBQUcsS0FBSyxHQUFBQSxZQUFBO1FBQ3ZDLElBQU1HLG1CQUFtQixHQUFHeFksZ0JBQWdCLENBQUN5WSxlQUFlLENBQUNGLGdCQUFnQixFQUFFaFEsTUFBTSxDQUFDbVEsSUFBSSxDQUFDO1FBRTNGLElBQU1uRixpQkFBaUIsSUFBQTJELGNBQUEsR0FBRyxJQUFJLENBQUN4RyxPQUFPLGNBQUF3RyxjQUFBLHVCQUFaQSxjQUFBLENBQWN2RyxvQkFBb0IsQ0FBQzdLLEtBQUssQ0FBQztRQUNuRSxJQUFNNlMsZ0JBQWdCLEdBQUE5TixhQUFBLENBQUFBLGFBQUEsS0FBT2QsUUFBUSxHQUFLd0osaUJBQWlCLENBQUM7UUFDNUQsSUFBTTFDLFFBQVEsR0FBR2xRLHVCQUF1QixDQUFDZ1ksZ0JBQWdCLENBQUM7UUFFMUQsSUFBTUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUNyVSxLQUFLLENBQUM7UUFFaEYsSUFBT29TLFdBQVcsR0FBc0MzTCxlQUFlLENBQWhFMkwsV0FBVztVQUFFMUwsWUFBWSxHQUF3QkQsZUFBZSxDQUFuREMsWUFBWTtVQUFFMkwsa0JBQWtCLEdBQUk1TCxlQUFlLENBQXJDNEwsa0JBQWtCO1FBRXBELElBQU1pQywwQkFBMEIsR0FBR2Qsb0JBQW9CLGFBQXBCQSxvQkFBb0IsY0FBcEJBLG9CQUFvQixHQUFJeFYsaUJBQWlCO1FBRTVFLElBQU11VyxlQUdMLEdBQUcsQ0FBQyxDQUFDO1FBQ04sSUFBSXRCLFVBQVUsRUFBRTtVQUNkO1VBQ0E7VUFDQXNCLGVBQWUsQ0FBQ0MsVUFBVSxHQUFHLFVBQUE1TixJQUFJLEVBQUk7WUFDbkMsSUFBTXlLLENBQUMsR0FBRzFELE1BQU0sQ0FBQy9HLElBQUksYUFBSkEsSUFBSSx1QkFBSkEsSUFBSSxDQUFFeUssQ0FBQyxDQUFDO1lBQ3pCLElBQU1DLENBQUMsR0FBRzNELE1BQU0sQ0FBQy9HLElBQUksYUFBSkEsSUFBSSx1QkFBSkEsSUFBSSxDQUFFMEssQ0FBQyxDQUFDO1lBQ3pCLElBQUkzRCxNQUFNLENBQUM4RyxLQUFLLENBQUNwRCxDQUFDLENBQUMsSUFBSTFELE1BQU0sQ0FBQzhHLEtBQUssQ0FBQ25ELENBQUMsQ0FBQyxJQUFJRCxDQUFDLEdBQUcsQ0FBQyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sSUFBSTtZQUVyRSxPQUFPOVYsZ0JBQWdCLENBQUNnWixVQUFVLENBQUM1TixJQUFJLEVBQUU7Y0FDdkNtTixnQkFBZ0IsRUFBaEJBLGdCQUFnQjtjQUNoQmhRLE1BQU0sRUFBTkEsTUFBTTtjQUNON0QsS0FBSyxFQUFMQTtZQUNGLENBQUMsQ0FBQztVQUNKLENBQUM7VUFFRHFVLGVBQWUsQ0FBQ0csU0FBUyxHQUFHLFVBQUFDLEtBQUEsRUFBeUM7WUFBQSxJQUF2QzNILFVBQVUsR0FBQTJILEtBQUEsQ0FBVjNILFVBQVU7WUFDdEMsSUFBTTRILFlBQVksR0FBR3BaLGdCQUFnQixDQUFDa1osU0FBUyxDQUFDO2NBQzlDWCxnQkFBZ0IsRUFBaEJBLGdCQUFnQjtjQUNoQmhRLE1BQU0sRUFBTkEsTUFBTTtjQUNOdU0sU0FBUyxFQUFUQTtZQUNGLENBQUMsQ0FBQztZQUNGLElBQUlzRSxZQUFZLEVBQUUsT0FBT0EsWUFBWTtZQUVyQyxJQUFJNUgsVUFBVSxFQUFFLE9BQU8sVUFBVTtZQUNqQyxJQUFJc0QsU0FBUyxhQUFUQSxTQUFTLGVBQVRBLFNBQVMsQ0FBRXZMLEtBQUssRUFBRSxPQUFPLFNBQVM7WUFDdEMsT0FBTyxNQUFNO1VBQ2YsQ0FBQztRQUNIO1FBRUEsSUFBTThQLE9BQU8sR0FBRyxJQUFJLENBQUNwRyxvQkFBb0IsQ0FBQ25OLEtBQUssQ0FBQyxHQUM1Q2hGLGtCQUFrQixDQUFDO1VBQUNzRSxRQUFRLEVBQVJBLFFBQVE7VUFBRTJFLFFBQVEsRUFBUkEsUUFBUTtVQUFFaUgsUUFBUSxFQUFFLElBQUksQ0FBQ3hNLEtBQUssQ0FBQ3dNO1FBQVEsQ0FBQyxDQUFDLEdBQ3ZFLEVBQUU7UUFFTixJQUFNdEcsV0FBVyxJQUFBeU0sZUFBQSxHQUFHcE4sUUFBUSxDQUFDQyxLQUFLLGNBQUFtTixlQUFBLHVCQUFkQSxlQUFBLENBQWdCN08sT0FBTzs7UUFFM0M7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxJQUFNZ1IsbUJBQW1CLEdBQ3ZCNU8sV0FBVyxJQUFJdEYsUUFBUSxDQUFDbVUsYUFBYSxJQUFJblUsUUFBUSxDQUFDbVUsYUFBYSxLQUFLLFFBQVEsR0FDeEV2WSwwQkFBMEIsQ0FBQ29FLFFBQVEsQ0FBQ21VLGFBQWEsQ0FBQyxHQUNsRGhELFNBQVM7UUFDZixJQUFNaUQsa0JBQWtCLEdBQUdGLG1CQUFtQixHQUFBek8sYUFBQSxDQUFBQSxhQUFBLEtBQ3RDOE4sZ0JBQWdCO1VBQUVjLGVBQWUsRUFBRUg7UUFBbUIsS0FDMURYLGdCQUFnQjtRQUVwQixJQUFNZSxZQUFZLEdBQUdaLDBCQUEwQixDQUM3QztVQUNFMVQsUUFBUSxFQUFSQSxRQUFRO1VBQ1IyRSxRQUFRLEVBQUV5UCxrQkFBa0I7VUFDNUI5UCxRQUFRLEVBQVJBO1FBQ0YsQ0FBQyxFQUNEO1VBQ0U4QyxRQUFRLEVBQUUxRyxLQUFLO1VBQ2YyUixVQUFVLEVBQVZBLFVBQVU7VUFDVkUsb0JBQW9CLEVBQXBCQSxvQkFBb0I7VUFDcEJDLFlBQVksRUFBWkEsWUFBWTtVQUNaWCxhQUFhLEVBQWJBLGFBQWE7VUFDYjBDLFVBQVUsRUFBRWxDLFVBQVUsR0FDbEI7WUFDRWxQLE1BQU0sRUFBTkEsTUFBTTtZQUNOZ1EsZ0JBQWdCLEVBQWhCQSxnQkFBZ0I7WUFDaEI1QixhQUFhLEVBQUVDLFdBQVc7WUFDMUJDLGtCQUFrQixFQUFsQkEsa0JBQWtCO1lBQ2xCK0MsdUJBQXVCLEVBQUUzTyxlQUFlLENBQUM0Tyx5QkFBeUI7WUFDbEU7WUFDQS9DLGlCQUFpQixFQUFFLElBQUksQ0FBQy9OLHlCQUF5QixDQUFDLElBQUksQ0FBQ3ZFLEtBQUssQ0FBQztZQUM3RHNWLHNCQUFzQixFQUFFLElBQUksQ0FBQ0MsaUNBQWlDO1lBQzVEO1lBQ0FuQiwwQkFDRixDQUFDO1lBQ0QvSCxRQUFRLEVBQVJBO1VBQ0YsQ0FBQyxHQUNEMEY7UUFDTixDQUFDLEVBQ0Q7VUFDRWxMLFlBQVksRUFBRSxJQUFJLENBQUMyTyxhQUFhO1VBQ2hDQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUNDLGlCQUFpQjtVQUN4Q0MscUJBQXFCLEVBQUUsSUFBSSxDQUFDQywyQkFBMkI7VUFDdkRDLGdCQUFnQixFQUFFLElBQUksQ0FBQ0MsaUJBQWlCO1VBQ3hDQyxjQUFjLEVBQUUsSUFBSSxDQUFDQyxlQUFlO1VBQ3BDQyxXQUFXLEVBQUUsSUFBSSxDQUFDQztRQUNwQixDQUFDLEVBQ0Q3QyxXQUNGLENBQUM7O1FBRUQ7UUFDQTtRQUNBO1FBQ0EsSUFBTThDLG9CQUFvQixHQUFHM1ksMkJBQTJCLENBQ3REM0IsaUJBQWlCLENBQUNxSixRQUFRLGFBQVJBLFFBQVEsZ0JBQUEwTixtQkFBQSxHQUFSMU4sUUFBUSxDQUFFd0UsU0FBUyxjQUFBa0osbUJBQUEsdUJBQW5CQSxtQkFBQSxDQUFzQjFOLFFBQVEsYUFBUkEsUUFBUSx1QkFBUkEsUUFBUSxDQUFFQyxTQUFTLENBQUMsQ0FBQyxFQUM3RGdPLG9CQUFvQixJQUFJLEVBQzFCLENBQUM7O1FBRUQ7UUFDQSxJQUFNaUQsZUFBZSxHQUNuQmxRLFdBQVcsSUFBSVgsUUFBUSxDQUFDQyxLQUFLLEdBQ3pCcEksa0JBQWtCLENBQUM7VUFDakIrVixvQkFBb0IsRUFBRUEsb0JBQW9CLElBQUksRUFBRTtVQUNoRDNOLEtBQUssRUFBRUQsUUFBUSxDQUFDQyxLQUFLO1VBQ3JCNlEsWUFBWSxFQUFFblIsUUFBUSxhQUFSQSxRQUFRLHVCQUFSQSxRQUFRLENBQUVDLFNBQVM7VUFDakNtUixlQUFlLEVBQUVILG9CQUFvQjtVQUNyQztVQUNBO1VBQ0E7VUFDQTFHLFFBQVEsRUFBRTBFLGdCQUFnQixDQUFDMUUsUUFBUTtVQUNuQ0MsSUFBSSxFQUFFeUUsZ0JBQWdCLENBQUN6RTtRQUN6QixDQUFDLENBQUMsR0FDRixFQUFFO1FBQ1IsSUFBTTZHLGNBQWMsR0FDbEJyUSxXQUFXLElBQUlYLFFBQVEsQ0FBQ0MsS0FBSyxHQUN6Qm5JLGlCQUFpQixDQUFDO1VBQUNtSSxLQUFLLEVBQUVELFFBQVEsQ0FBQ0MsS0FBSztVQUFFa0ssSUFBSSxFQUFFeUUsZ0JBQWdCLENBQUN6RTtRQUFJLENBQUMsQ0FBQyxHQUN2RSxFQUFFO1FBQ1IsSUFBTThHLGlCQUFpQixHQUFHdFEsV0FBVyxNQUFBMUcsTUFBQSxDQUFBaVgsa0JBQUEsQ0FDN0JMLGVBQWUsR0FBQUssa0JBQUEsQ0FBS3ZCLFlBQVksR0FBQXVCLGtCQUFBLENBQUtGLGNBQWMsS0FDdkRyQixZQUFZO1FBRWhCLElBQU13QixLQUFLLEdBQUdyRCxXQUFXLGFBQVhBLFdBQVcsZUFBWEEsV0FBVyxDQUFFcUQsS0FBSyxHQUM1QnJELFdBQVcsYUFBWEEsV0FBVyx1QkFBWEEsV0FBVyxDQUFFcUQsS0FBSyxDQUFDLENBQUMsR0FDcEJ4USxXQUFXLEdBQ1gsSUFBSXhJLGVBQWUsQ0FBQztVQUNsQmlaLFVBQVUsRUFBRSxDQUFDO1VBQ2I7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQUMsS0FBSyxFQUFFLElBQUk7VUFDWEMsVUFBVSxFQUFFO1FBQ2QsQ0FBQyxDQUFDLEdBQ0YsSUFBSXZjLE9BQU8sQ0FBQztVQUFDd2MsY0FBYyxFQUFFO1FBQUcsQ0FBQyxDQUFDO1FBRXRDLElBQUlDLGNBQWMsR0FBQTFRLGFBQUEsQ0FBQUEsYUFBQSxLQUNiZ04sV0FBVztVQUNkMkQsYUFBYSxFQUFFbmEsc0JBQXNCO1VBQ3JDNlosS0FBSyxFQUFMQSxLQUFLO1VBQ0x6VCxNQUFNLEVBQUV1VCxpQkFBaUI7VUFDekIzQixPQUFPLEVBQVBBLE9BQU87VUFDUG9DLFVBQVUsRUFBRS9RLFdBQVcsR0FBRztZQUFDZ1IsSUFBSSxFQUFFO1VBQUksQ0FBQyxHQUFHMWEsMEJBQTBCLENBQUNvRSxRQUFRLENBQUNtVSxhQUFhO1FBQUMsRUFDNUY7UUFFRCxJQUFJLFFBQU94QixtQkFBbUIsYUFBbkJBLG1CQUFtQix1QkFBbkJBLG1CQUFtQixDQUFFNEQsWUFBWSxNQUFLLFVBQVUsRUFBRTtVQUMzREosY0FBYyxHQUFHeEQsbUJBQW1CLENBQUM0RCxZQUFZLENBQUNKLGNBQWMsQ0FBQztVQUNqRSxJQUFJLENBQUNBLGNBQWMsRUFBRTtZQUNuQjtZQUNBLE9BQU8sSUFBSTtVQUNiO1FBQ0Y7UUFFQSxvQkFDRWpkLEtBQUEsQ0FBQTRILGFBQUEsUUFDTytSLGFBQWEsR0FDZDtVQUNFckcsV0FBVyxFQUFFNkYsVUFBVSxHQUNuQixVQUFBekwsS0FBSyxFQUFJO1lBQ1A0RixXQUFXLGFBQVhBLFdBQVcsZUFBWEEsV0FBVyxDQUFHNUYsS0FBSyxDQUFDO1lBQ3BCcUwsTUFBSSxDQUFDdUUscUJBQXFCLENBQUM1UCxLQUFLLEVBQUU2RSxRQUFRLENBQUM7VUFDN0MsQ0FBQyxHQUNEMEY7UUFDTixDQUFDLEdBQ0Q7VUFBQ3BKLEtBQUssRUFBRTtZQUFDNUosYUFBYSxFQUFFO1VBQU07UUFBQyxDQUFDLGVBRXBDakYsS0FBQSxDQUFBNEgsYUFBQSxDQUFDbkgsTUFBTSxFQUFBeVgsUUFBQTtVQUNMN1EsRUFBRSxFQUFDLHdCQUF3QjtVQUMzQmtXLE1BQU0sRUFBRSxTQUFSQSxNQUFNQSxDQUFBLEVBQVE7WUFDWixJQUFJLFFBQU85RCxtQkFBbUIsYUFBbkJBLG1CQUFtQix1QkFBbkJBLG1CQUFtQixDQUFFK0QsVUFBVSxNQUFLLFVBQVUsRUFBRTtjQUN6RC9ELG1CQUFtQixDQUFDK0QsVUFBVSxDQUFDLENBQUM7WUFDbEM7VUFDRjtRQUFFLEdBQ0VQLGNBQWM7VUFDbEJRLFVBQVUsRUFDUjlELGFBQWEsR0FBQXBOLGFBQUE7WUFFUG1SLGVBQWUsRUFBRSxDQUFDeEQsbUJBQW1CO1lBQ3JDeUQsVUFBVSxFQUFFLElBQUksQ0FBQ3pYLEtBQUssQ0FBQ3VGLFFBQVEsQ0FBQ2tTLFVBQVU7WUFDMUNDLFFBQVEsR0FBQTVFLHFCQUFBLEdBQUUsSUFBSSxDQUFDOVMsS0FBSyxDQUFDdUYsUUFBUSxDQUFDbVMsUUFBUSxjQUFBNUUscUJBQUEsY0FBQUEscUJBQUEsR0FBSXZXLG9CQUFvQixDQUFDLENBQUMsQ0FBQ21iO1VBQVEsR0FNckV4UixXQUFXLEdBQUc7WUFBQ3lSLE9BQU8sRUFBRXphLGNBQWM7WUFBRTBhLE9BQU8sRUFBRXphO1VBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUUzRSxLQUNMO1VBQ0Q4TyxTQUFTLEVBQ1AvRixXQUFXLEdBQUFHLGFBQUEsQ0FBQUEsYUFBQSxLQUNIMEksaUJBQWlCO1lBQUU0SSxPQUFPLEVBQUV6YSxjQUFjO1lBQUUwYSxPQUFPLEVBQUV6YTtVQUFjLEtBQ3ZFNFIsaUJBQ0w7VUFDRDhJLGNBQWMsRUFBRSxJQUFJLENBQUNDLGVBQWdCO1VBQ3JDMUwsaUJBQWlCLEVBQUVxSCxhQUFhLEdBQUcsSUFBSSxDQUFDc0UsaUJBQWlCLEdBQUdoRztRQUFVLEdBQ2xFd0MsZUFBZTtVQUNuQnlELE9BQU8sRUFDTHZFLGFBQWEsR0FDVCxVQUFBclMsSUFBSSxFQUFJO1lBQ04sSUFBTTZXLEdBQUcsR0FBR3pjLGdCQUFnQixDQUFDd2MsT0FBTyxDQUFDNVcsSUFBSSxFQUFFO2NBQ3pDMlMsZ0JBQWdCLEVBQWhCQSxnQkFBZ0I7Y0FDaEJoUSxNQUFNLEVBQU5BLE1BQU07Y0FDTnVNLFNBQVMsRUFBVEE7WUFDRixDQUFDLENBQUM7WUFDRixJQUFJMkgsR0FBRyxFQUFFO1lBRVRwRixNQUFJLENBQUNxRixzQkFBc0IsQ0FBQzlXLElBQUksRUFBRUUsS0FBSyxDQUFDO1VBQzFDLENBQUMsR0FDRCxJQUNMO1VBQ0Q2VyxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBRy9XLElBQUksRUFBRW9HLEtBQUssRUFBSztZQUN4QjtZQUNBcEwsY0FBYyxDQUFDb0wsS0FBSyxDQUFDNFEsUUFBUSxFQUFFL0wsUUFBUSxDQUFDOztZQUV4QztZQUNBO1lBQ0EsSUFBSWpMLElBQUksQ0FBQ3dHLFVBQVUsRUFBRTtjQUNuQixJQUFNeVEsYUFBYSxHQUFHelgsUUFBUSxDQUFDcUMsTUFBTSxDQUFDcVYsSUFBSSxDQUN4QyxVQUFDQyxDQUFNO2dCQUFBLE9BQUtBLENBQUMsQ0FBQ2xYLElBQUksS0FBSyxRQUFRLElBQUlrWCxDQUFDLENBQUNDLGtCQUFrQixJQUFJRCxDQUFDLENBQUM3UyxNQUFNLENBQUM2SCxTQUFTO2NBQUEsQ0FDL0UsQ0FBQztjQUNELElBQUk4SyxhQUFhLEVBQUU7Z0JBQ2hCQSxhQUFhLENBQVNJLGVBQWUsQ0FBQ3JYLElBQUksQ0FBQ3dHLFVBQThCLENBQUM7Z0JBQzNFaUwsTUFBSSxDQUFDbUQsZUFBZSxDQUFDLENBQUMsQ0FBQztnQkFDdkI7Y0FDRjtZQUNGO1lBRUEsSUFBTWlDLEdBQUcsR0FBR3pjLGdCQUFnQixDQUFDMmMsT0FBTyxDQUFDL1csSUFBSSxFQUFFb0csS0FBSyxFQUFFO2NBQ2hEdU0sZ0JBQWdCLEVBQWhCQSxnQkFBZ0I7Y0FDaEJoUSxNQUFNLEVBQU5BLE1BQU07Y0FDTjJDLFlBQVksRUFBWkEsWUFBWTtjQUNaMkwsa0JBQWtCLEVBQWxCQSxrQkFBa0I7Y0FDbEJySyxRQUFRLEVBQUUxRztZQUNaLENBQUMsQ0FBQztZQUNGLElBQUkyVyxHQUFHLEVBQUU7WUFFVHhSLGVBQWUsQ0FBQ0MsWUFBWSxDQUFDdEYsSUFBSSxDQUFDO1VBQ3BDLENBQUU7VUFDRnNYLE9BQU8sRUFBRSxJQUFJLENBQUNDLFlBQWE7VUFDM0JoWCxHQUFHLEVBQUUsU0FBTEEsR0FBR0EsQ0FBRWlYLElBQUksRUFBSTtZQUNYO1lBQ0EsSUFBSUEsSUFBSSxJQUFJQSxJQUFJLENBQUNDLElBQUksSUFBSSxDQUFDaEcsTUFBSSxDQUFDckUsS0FBSyxFQUFFO2NBQ3BDO2NBQ0FxRSxNQUFJLENBQUNyRSxLQUFLLEdBQUdvSyxJQUFJLENBQUNDLElBQUk7WUFDeEI7VUFDRixDQUFFO1VBQ0ZDLG1CQUFtQixFQUFFLFNBQXJCQSxtQkFBbUJBLENBQUV4SyxNQUFNO1lBQUEsT0FBSXVFLE1BQUksQ0FBQ3hFLGtCQUFrQixDQUFDQyxNQUFNLENBQUM7VUFBQSxDQUFDO1VBQy9EeUssYUFBYSxFQUFFLFNBQWZBLGFBQWFBLENBQUEsRUFBUTtZQUNuQixJQUFJLFFBQU94RixtQkFBbUIsYUFBbkJBLG1CQUFtQix1QkFBbkJBLG1CQUFtQixDQUFFeUYsaUJBQWlCLE1BQUssVUFBVSxFQUFFO2NBQ2hFekYsbUJBQW1CLENBQUN5RixpQkFBaUIsQ0FBQ2pDLGNBQWMsQ0FBQztZQUN2RDtZQUVBLElBQU1rQyxxQkFBcUIsR0FBR2xiLHVCQUF1QixDQUFDZ1osY0FBYyxDQUFDOVQsTUFBTSxDQUFDO1lBQzVFLElBQUlnVyxxQkFBcUIsS0FBS3BHLE1BQUksQ0FBQ29HLHFCQUFxQixFQUFFO2NBQ3hEcEcsTUFBSSxDQUFDcUcsMEJBQTBCLENBQUMsQ0FBQztjQUNqQ3JHLE1BQUksQ0FBQ29HLHFCQUFxQixHQUFHQSxxQkFBcUI7WUFDcEQ7VUFDRjtRQUFFLElBRUR2RixRQUNLLENBQ0wsQ0FBQztNQUVWO0lBQUM7TUFBQTVGLEdBQUE7TUFBQXhKLEtBQUEsRUFFRCxTQUFBOEQsbUJBQW1CQSxDQUFBLEVBQUc7UUFDcEIsSUFBTStRLFlBQVksR0FBRyxJQUFJLENBQUNDLG9CQUFvQixDQUFDLElBQUksQ0FBQ3BaLEtBQUssQ0FBQztRQUMxRCxJQUFJLENBQUNmLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDaWEsWUFBWSxDQUFDLENBQUNyWSxNQUFNLElBQUksQ0FBQzdCLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQ2lKLGNBQWMsQ0FBQyxDQUFDckgsTUFBTSxFQUFFO1VBQ2pGO1FBQ0Y7UUFFQXZGLGtCQUFrQixDQUFDLElBQUksQ0FBQ29ILElBQUksRUFBRXdXLFlBQVksRUFBRSxJQUFJLENBQUNoUixjQUFjLENBQUM7UUFFaEUsSUFBSSxDQUFDQSxjQUFjLEdBQUdnUixZQUFZO01BQ3BDO0lBQUM7TUFBQXJMLEdBQUE7TUFBQXhKLEtBQUEsRUFFRCxTQUFBK1UscUJBQXFCQSxDQUFBLEVBQUc7UUFDdEIsSUFBSSxJQUFJLENBQUMxVyxJQUFJLElBQUksSUFBSSxDQUFDQSxJQUFJLENBQUNzRyxhQUFhLENBQUMsQ0FBQyxFQUFFO1VBQzFDLElBQUksQ0FBQ2IsbUJBQW1CLENBQUMsQ0FBQztRQUM1QjtNQUNGO0lBQUM7TUFBQTBGLEdBQUE7TUFBQXhKLEtBQUEsRUF3RkQ7TUFDQSxTQUFBZ1YsVUFBVUEsQ0FBQSxFQUFHO1FBQUEsSUFBQUMsb0JBQUEsRUFBQUMscUJBQUEsRUFBQUMsY0FBQSxFQUFBQyxrQkFBQSxFQUFBQyxvQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxxQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxxQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxxQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxpQkFBQTtRQUNYLElBQUFDLFlBQUEsR0F3QkksSUFBSSxDQUFDdGEsS0FBSztVQXZCWlksUUFBUSxHQUFBMFosWUFBQSxDQUFSMVosUUFBUTtVQUNSMkUsUUFBUSxHQUFBK1UsWUFBQSxDQUFSL1UsUUFBUTtVQUNSTCxRQUFRLEdBQUFvVixZQUFBLENBQVJwVixRQUFRO1VBQ1JuQyxlQUFlLEdBQUF1WCxZQUFBLENBQWZ2WCxlQUFlO1VBQ2ZvUSxvQkFBb0IsR0FBQW1ILFlBQUEsQ0FBcEJuSCxvQkFBb0I7VUFFcEJHLFdBQVcsR0FBQWdILFlBQUEsQ0FBWGhILFdBQVc7VUFDWDlHLFFBQVEsR0FBQThOLFlBQUEsQ0FBUjlOLFFBQVE7VUFDUitOLE1BQU0sR0FBQUQsWUFBQSxDQUFOQyxNQUFNO1VBQ05DLE9BQU8sR0FBQUYsWUFBQSxDQUFQRSxPQUFPO1VBQ1AxTyxjQUFjLEdBQUF3TyxZQUFBLENBQWR4TyxjQUFjO1VBQ2RyRixlQUFlLEdBQUE2VCxZQUFBLENBQWY3VCxlQUFlO1VBQ2ZuRixLQUFLLEdBQUFnWixZQUFBLENBQUxoWixLQUFLO1VBQ0x3QixPQUFPLEdBQUF3WCxZQUFBLENBQVB4WCxPQUFPO1VBQ1AyWCx1QkFBdUIsR0FBQUgsWUFBQSxDQUF2QkcsdUJBQXVCO1VBQ3ZCQyxvQkFBb0IsR0FBQUosWUFBQSxDQUFwQkksb0JBQW9CO1VBQ3BCeGEsS0FBSyxHQUFBb2EsWUFBQSxDQUFMcGEsS0FBSztVQUFBeWEscUJBQUEsR0FBQUwsWUFBQSxDQUNMTSxtQkFBbUI7VUFBbkJBLG1CQUFtQixHQUFBRCxxQkFBQSxjQUFHLEVBQUUsR0FBQUEscUJBQUE7VUFBQUUscUJBQUEsR0FBQVAsWUFBQSxDQUN4QlEsZ0JBQWdCO1VBQWhCQSxnQkFBZ0IsR0FBQUQscUJBQUEsY0FBRyxFQUFFLEdBQUFBLHFCQUFBO1VBQUFFLHFCQUFBLEdBQUFULFlBQUEsQ0FDckJyWixXQUFXO1VBQVhBLFdBQVcsR0FBQThaLHFCQUFBLGNBQUcsQ0FBQyxHQUFBQSxxQkFBQTtVQUNmQyx5QkFBeUIsR0FBQVYsWUFBQSxDQUF6QlUseUJBQXlCO1VBQ3pCQyxlQUFlLEdBQUFYLFlBQUEsQ0FBZlcsZUFBZTtVQUNmQyxjQUFjLEdBQUFaLFlBQUEsQ0FBZFksY0FBYztRQUdoQixJQUFPalksTUFBTSxHQUFxRHJDLFFBQVEsQ0FBbkVxQyxNQUFNO1VBQUV5TixRQUFRLEdBQTJDOVAsUUFBUSxDQUEzRDhQLFFBQVE7VUFBRTNNLE1BQU0sR0FBbUNuRCxRQUFRLENBQWpEbUQsTUFBTTtVQUFFNE0saUJBQWlCLEdBQWdCL1AsUUFBUSxDQUF6QytQLGlCQUFpQjtVQUFFdE4sVUFBVSxHQUFJekMsUUFBUSxDQUF0QnlDLFVBQVU7UUFFOUQsSUFBTTJCLGNBQWMsR0FBRyxJQUFJLENBQUNILHNCQUFzQixDQUFDLElBQUksQ0FBQzdFLEtBQUssQ0FBQztRQUM5RCxJQUFNeVMsYUFBYSxHQUFHLElBQUksQ0FBQzBJLHFCQUFxQixDQUFDLElBQUksQ0FBQ25iLEtBQUssQ0FBQzs7UUFFNUQ7UUFDQSxJQUFNeUosWUFBWSxJQUFBOFAsb0JBQUEsR0FBR3JVLFFBQVEsQ0FBQ3dFLFNBQVMsY0FBQTZQLG9CQUFBLHVCQUFsQkEsb0JBQUEsQ0FBcUJyVSxRQUFRLENBQUNDLFNBQVMsQ0FBQztRQUM3RCxJQUFNaVcsa0JBQWtCLEdBQUd2ZixpQkFBaUIsQ0FBQzROLFlBQVksQ0FBQztRQUMxRCxJQUFNNFIsb0JBQW9CLEdBQUc5ZSxvQkFBb0IsQ0FBQyxDQUFDLENBQUM4ZSxvQkFBb0IsQ0FBQ0Qsa0JBQWtCLENBQUM7O1FBRTVGO1FBQ0E7UUFDQTtRQUNBLElBQU1FLG9CQUFvQixJQUFBOUIscUJBQUEsR0FDeEIsSUFBSSxDQUFDeFosS0FBSyxDQUFDdWIsWUFBWSxjQUFBL0IscUJBQUEsY0FBQUEscUJBQUEsR0FDdEI0QixrQkFBa0IsS0FBS25lLGVBQWUsQ0FBQ3VlLE1BQU0sR0FBR3BoQixlQUFlLEdBQUdDLFdBQVk7UUFFakYsSUFBTW9oQixnQkFBZ0IsR0FBR0gsb0JBQW9CLEtBQUtsaEIsZUFBZTtRQUVqRSxJQUFNMlUsaUJBQWlCLElBQUEwSyxjQUFBLEdBQUcsSUFBSSxDQUFDdk4sT0FBTyxjQUFBdU4sY0FBQSx1QkFBWkEsY0FBQSxDQUFjdE4sb0JBQW9CLENBQUM3SyxLQUFLLENBQUM7UUFDbkUsSUFBTW9hLGNBQWMsSUFBQWhDLGtCQUFBLEdBQUduVSxRQUFRLENBQUNtUyxRQUFRLGNBQUFnQyxrQkFBQSxjQUFBQSxrQkFBQSxHQUFJbmQsb0JBQW9CLENBQUMsQ0FBQyxDQUFDbWIsUUFBUTtRQUMzRSxJQUFNaUUsaUJBQWlCLEdBQUdGLGdCQUFnQixHQUN0Q0csSUFBSSxDQUFDQyxHQUFHLENBQUNILGNBQWMsRUFBRTFlLGdCQUFnQixDQUFDLEdBQzFDMGUsY0FBYztRQUNsQixJQUFNSSxRQUE2QixHQUFBelYsYUFBQSxDQUFBQSxhQUFBLEtBQzlCMEksaUJBQWlCO1VBQ3BCMkksUUFBUSxFQUFFaUUsaUJBQWlCO1VBQzNCSSxxQkFBcUIsR0FBQXBDLG9CQUFBLEdBQUUsSUFBSSxDQUFDM1osS0FBSyxDQUFDd00sUUFBUSxjQUFBbU4sb0JBQUEsY0FBQUEsb0JBQUEsR0FBSSxLQUFLO1VBQ25EcUMsaUJBQWlCLEVBQUUsQ0FBQXZTLFlBQVksYUFBWkEsWUFBWSx1QkFBWkEsWUFBWSxDQUFFd1MsV0FBVyxLQUFJOUksb0JBQW9CO1VBQ3BFO1VBQ0FyWCxnQkFBZ0IsRUFDZCxJQUFJLENBQUNrRSxLQUFLLENBQUNsRSxnQkFBZ0IsSUFDM0JBLGdCQUFnQixDQUFDLENBQUEyTixZQUFZLGFBQVpBLFlBQVksdUJBQVpBLFlBQVksQ0FBRXdTLFdBQVcsS0FBSTlJLG9CQUFvQjtRQUFDLEVBQ3RFO1FBRUQsSUFBSSxJQUFJLENBQUNuVCxLQUFLLENBQUNrYyxhQUFhLEtBQUtuSyxTQUFTLEVBQUU7VUFDMUMrSixRQUFRLENBQUNJLGFBQWEsR0FBRyxJQUFJLENBQUNsYyxLQUFLLENBQUNrYyxhQUFhO1FBQ25EO1FBRUEsSUFBSVQsZ0JBQWdCLEVBQUU7VUFDcEIsSUFBTVUsWUFBWSxHQUFHNWYsb0JBQW9CLENBQUMsQ0FBQyxDQUFDOGUsb0JBQW9CLENBQUNwZSxlQUFlLENBQUN1ZSxNQUFNLENBQUM7VUFDeEZNLFFBQVEsQ0FBQ00sTUFBTSxHQUFHRCxZQUFZLENBQUNFLFNBQVMsQ0FBQyxDQUFDO1FBQzVDO1FBRUEsSUFBTUMsZ0JBQWdCLEdBQUdoWCxPQUFPLENBQUNyQyxNQUFNLENBQUNxVixJQUFJLENBQUMsVUFBQUMsQ0FBQztVQUFBLE9BQUlBLENBQUMsQ0FBQ3BYLEVBQUUsS0FBS3hFLGlCQUFpQjtRQUFBLEVBQUMsQ0FBQztRQUM5RSxJQUFNNGYsT0FBTyxHQUFHalgsT0FBTyxDQUFDQyxRQUFRLENBQUNnWCxPQUFPLENBQUM7UUFFekMsSUFBTTFELElBQUksR0FBRyxJQUFJLENBQUNyRyxrQkFBa0IsQ0FBQ0MsYUFBYSxFQUFFO1VBQ2xEUSxVQUFVLEVBQUUsSUFBSTtVQUNoQlEsYUFBYSxFQUFFLElBQUk7VUFDbkJDLFFBQVEsZUFDTjVaLEtBQUEsQ0FBQTRILGFBQUEsQ0FBQzRaLG9CQUFvQixFQUFBdEosUUFBQTtZQUNuQmxFLEdBQUcsWUFBQXRPLE1BQUEsQ0FBWTRiLGtCQUFrQjtVQUFHLEdBQ2hDVSxRQUFRO1lBQ1o1VyxRQUFRLEVBQ04sQ0FBQTBVLGdCQUFBLEdBQUFyVSxRQUFRLENBQUNDLEtBQUssY0FBQW9VLGdCQUFBLGVBQWRBLGdCQUFBLENBQWdCOVYsT0FBTyxHQUNuQi9HLGtCQUFrQixJQUFBOGMscUJBQUEsR0FDbEIzVSxRQUFRLENBQUNzWCxjQUFjLGNBQUEzQyxxQkFBQSxjQUFBQSxxQkFBQSxHQUFJOWM7VUFDaEMsR0FDRzBkLHVCQUF1QjtZQUMzQjlZLEdBQUcsRUFBRSxJQUFJLENBQUM4YTtVQUFXLEVBQ3RCO1FBRUwsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDNUQsSUFBSSxFQUFFO1VBQ1Q7VUFDQTtVQUNBLE9BQU8sSUFBSTtRQUNiO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsSUFBTTZELGNBQWMsR0FBRyxDQUFDSCxPQUFPLElBQUlqWCxPQUFPLENBQUN4QyxPQUFPLENBQUM7UUFDbkQsb0JBQ0VoSixLQUFBLENBQUE0SCxhQUFBLENBQUE1SCxLQUFBLENBQUE2aUIsUUFBQSxRQUNHRCxjQUFjLGlCQUNiNWlCLEtBQUEsQ0FBQTRILGFBQUEsQ0FBQ0ssVUFBVTtVQUNUd0QsUUFBUSxFQUFFQSxRQUFTO1VBQ25CeEMsZUFBZSxFQUFFQSxlQUFnQjtVQUNqQzJOLFFBQVEsRUFBRUEsUUFBUztVQUNuQmtNLGdCQUFnQixFQUFFNWQsa0JBQW1CO1VBQ3JDeVksVUFBVSxFQUFFbFMsUUFBUSxDQUFDa1MsVUFBVztVQUNoQzhFLE9BQU8sRUFBRUEsT0FBUTtVQUNqQnpaLE9BQU8sRUFBRXdDLE9BQU8sQ0FBQ3hDLE9BQU8sQ0FBRTtVQUMxQjBKLFFBQVEsRUFBRUEsUUFBUztVQUNuQnZKLE1BQU0sRUFBRUEsTUFBTztVQUNmSSxVQUFVLEVBQUVBLFVBQVc7VUFDdkIyQixjQUFjLEVBQUVBLGNBQWU7VUFDL0JnRCxRQUFRLEVBQUUxRyxLQUFLLElBQUksQ0FBRTtVQUNyQmdTLFdBQVcsRUFBRUEsV0FBWTtVQUN6QnVKLFFBQVEsRUFBRSxJQUFJLENBQUM3YyxLQUFLLENBQUM2YyxRQUFTO1VBQzlCQyxLQUFLLEVBQUV2WCxRQUFRLENBQUN1WCxLQUFLLElBQUksQ0FBRTtVQUMzQkMsYUFBYSxFQUFFLElBQUksQ0FBQy9jLEtBQUssQ0FBQytjLGFBQWM7VUFDeENqZSxHQUFHLEVBQ0Q2UixpQkFBaUIsQ0FBQ3FNLFFBQVEsSUFBSXJNLGlCQUFpQixDQUFDcU0sUUFBUSxDQUFDbFosT0FBTyxHQUM1RDVELEtBQUssQ0FBQytjLGFBQWEsR0FDbkIsQ0FDTDtVQUNEbFosTUFBTSxFQUFFQSxNQUFPO1VBQ2Z3VyxNQUFNLEVBQUVBLE1BQU87VUFDZjJDLFNBQVMsRUFBRTFDLE9BQVE7VUFDbkIyQyxtQkFBbUIsRUFBRXBhLGVBQWUsQ0FBQ3FhLGlCQUFrQjtVQUN2REMsZ0JBQWdCLEVBQUV0YSxlQUFlLENBQUN1YSxjQUFlO1VBQ2pEQyxXQUFXLEVBQUVoWSxRQUFRLENBQUNnWSxXQUFZO1VBQ2xDQyxnQkFBZ0IsRUFBRXphLGVBQWUsQ0FBQzBhLGNBQWU7VUFDakRDLGdCQUFnQixFQUFFLElBQUksQ0FBQ0MscUJBQXNCO1VBQzdDQyxrQkFBa0IsRUFBRSxJQUFJLENBQUNDLGlCQUFrQjtVQUMzQ0Msd0JBQXdCLEVBQUUvYSxlQUFlLENBQUNnYixzQkFBdUI7VUFDakVDLGVBQWUsRUFBRXZYLGVBQWUsQ0FBQ3dYLGFBQWM7VUFDL0NDLFdBQVcsRUFBRXBTLGNBQWMsQ0FBQ3FTLFNBQVU7VUFDdENDLFVBQVUsRUFBRXRTLGNBQWMsQ0FBQ3VTLFFBQVM7VUFDcENDLHdCQUF3QixFQUFFN1gsZUFBZSxDQUFDOFgsc0JBQXVCO1VBQ2pFQyw4QkFBOEIsRUFBRS9YLGVBQWUsQ0FBQ2dZLDRCQUE2QjtVQUM3RUMsc0JBQXNCLEVBQUVqWSxlQUFlLENBQUNrWSxvQkFBcUI7VUFDN0RDLHVCQUF1QixFQUFFLElBQUksQ0FBQ0MsNEJBQTZCO1VBQzNEQyxTQUFTLEVBQUV2WixRQUFRLENBQUMxRyxNQUFPO1VBQzNCa2dCLHFCQUFxQixFQUFFalQsY0FBYyxDQUFDaVQscUJBQXNCO1VBQzVEOUQsZUFBZSxFQUFFQSxlQUFnQjtVQUNqQ3BhLFNBQVMsRUFBRSxJQUFJLENBQUNiLEtBQUssQ0FBQ1ksUUFBUSxDQUFDQyxTQUFVO1VBQ3pDbWUsbUJBQW1CLEVBQUV2WSxlQUFlLENBQUN3QjtRQUFrQixDQUN4RCxDQUNGLEVBQ0F0SCxlQUFlLENBQUMsSUFBSSxDQUFDWCxLQUFLLENBQUMsaUJBQUlsRyxLQUFBLENBQUE0SCxhQUFBLENBQUNYLFNBQVM7VUFBQ0UsV0FBVyxFQUFFQTtRQUFZLENBQUUsQ0FBQyxFQUV0RTRYLElBQUksRUFDSixJQUFJLENBQUNRLHFCQUFxQixDQUFDLENBQUMsZUFDN0J2ZixLQUFBLENBQUE0SCxhQUFBLENBQUNNLE1BQU07VUFDTFYsS0FBSyxFQUFFQSxLQUFLLElBQUksQ0FBRTtVQUNsQm9QLFFBQVEsRUFBRUEsUUFBUztVQUNuQjNNLE1BQU0sRUFBRUEsTUFBTztVQUNmTixPQUFPLEVBQUUsSUFBSSxDQUFDUyxzQkFBc0IsQ0FBQyxJQUFJLENBQUNsRSxLQUFLLENBQUU7VUFDakRpRCxNQUFNLEVBQUVBLE1BQU87VUFDZmdjLGVBQWUsRUFBRXhZLGVBQWUsQ0FBQ3lZLGFBQWM7VUFDL0NDLHNCQUFzQixFQUFFMVksZUFBZSxDQUFDMlksMEJBQTJCO1VBQ25FQyxRQUFRLEVBQUU1WSxlQUFlLENBQUM0TCxrQkFBbUI7VUFDN0NpTixxQkFBcUIsRUFBRTdZLGVBQWUsQ0FBQzhZLHFCQUFzQjtVQUM3RHZCLGVBQWUsRUFBRXZYLGVBQWUsQ0FBQ3dYLGFBQWM7VUFDL0N0VixLQUFLLEVBQUU7WUFDTDVKLGFBQWEsRUFBRSxLQUFLO1lBQ3BCSixRQUFRLEVBQUUsVUFBVTtZQUNwQkQsT0FBTyxFQUFFcUYsTUFBTSxDQUFDeWIsT0FBTyxHQUFHLE9BQU8sR0FBRztVQUN0QztRQUFFLENBQ0gsQ0FBQyxFQUNEemIsTUFBTSxDQUFDeWIsT0FBTyxnQkFDYjFsQixLQUFBLENBQUE0SCxhQUFBLENBQUN0RyxtQkFBbUI7VUFDbEJxSSxPQUFPLEVBQUUsSUFBSSxDQUFDUyxzQkFBc0IsQ0FBQyxJQUFJLENBQUNsRSxLQUFLLENBQUU7VUFDakRxTSxRQUFRLEVBQUUsSUFBSSxDQUFDeUMsc0JBQXNCLENBQUN2SixRQUFRLEVBQUV3SixpQkFBaUIsQ0FBRTtVQUNuRTBRLGNBQWMsRUFBRW5hLE9BQU8sRUFBQXdVLGdCQUFBLEdBQUN2VSxRQUFRLENBQUNDLEtBQUssY0FBQXNVLGdCQUFBLHVCQUFkQSxnQkFBQSxDQUFnQmhXLE9BQU8sQ0FBRTtVQUNqRHViLFFBQVEsRUFBRTVZLGVBQWUsQ0FBQzRMO1FBQW1CLENBQzlDLENBQUMsR0FDQSxJQUFJLGVBQ1J2WSxLQUFBLENBQUE0SCxhQUFBLENBQUNyRyxpQkFBaUI7VUFDaEJxa0IsV0FBVyxFQUFFOWUsUUFBUSxDQUFDOGUsV0FBWTtVQUNsQ0Msb0JBQW9CLEVBQUUvZSxRQUFRLENBQUMrZSxvQkFBcUI7VUFDcERDLHVCQUF1QixFQUFFaGYsUUFBUSxDQUFDZ2YsdUJBQXdCO1VBQzFEQyxnQkFBZ0IsRUFBRXZhLE9BQU8sQ0FBQ2dPLFdBQVcsYUFBWEEsV0FBVyxnQkFBQXlHLHFCQUFBLEdBQVh6RyxXQUFXLENBQUV3TSxVQUFVLGNBQUEvRixxQkFBQSx1QkFBdkJBLHFCQUFBLENBQXlCakcsTUFBTSxDQUFFO1VBQzNEOUwsUUFBUSxFQUFFMUcsS0FBSyxJQUFJLENBQUU7VUFDckIrSyxRQUFRLEVBQUUsSUFBSSxDQUFDeUMsc0JBQXNCLENBQUN2SixRQUFRLEVBQUV3SixpQkFBaUIsQ0FBRTtVQUNuRTBRLGNBQWMsRUFBRW5hLE9BQU8sRUFBQTBVLGdCQUFBLEdBQUN6VSxRQUFRLENBQUNDLEtBQUssY0FBQXdVLGdCQUFBLHVCQUFkQSxnQkFBQSxDQUFnQmxXLE9BQU8sQ0FBRTtVQUNqRGljLGdCQUFnQixFQUFFdFosZUFBZSxDQUFDc1osZ0JBQWlCO1VBQ25EQyxxQkFBcUIsRUFBRXZaLGVBQWUsQ0FBQ3VaO1FBQXNCLENBQzlELENBQUMsRUFDRCxJQUFJLENBQUNoZ0IsS0FBSyxDQUFDMFQsUUFBUSxFQUNuQnhPLFFBQVEsQ0FBQythLFdBQVcsSUFBSSxHQUFBaEcsZ0JBQUEsR0FBQzFVLFFBQVEsQ0FBQ0MsS0FBSyxjQUFBeVUsZ0JBQUEsZUFBZEEsZ0JBQUEsQ0FBZ0JuVyxPQUFPLGlCQUMvQ2hLLEtBQUEsQ0FBQTRILGFBQUEsQ0FBQzRaLG9CQUFvQixFQUFBdEosUUFBQTtVQUNuQmxFLEdBQUcsU0FBQXRPLE1BQUEsQ0FBUzRiLGtCQUFrQixDQUFHO1VBQ2pDblAsU0FBUyxFQUFFOEMsaUJBQWtCO1VBQzdCMkksUUFBUSxFQUFFaUUsaUJBQWtCO1VBQzVCelcsUUFBUSxFQUFFQSxRQUFRLENBQUMrYSxXQUFZO1VBQy9CdFgsS0FBSyxFQUFFbkssU0FBUyxDQUFDTSxHQUFJO1VBQ3JCa2QsaUJBQWlCLEVBQUVGLFFBQVEsQ0FBQ0UsaUJBQWtCO1VBQzlDbGdCLGdCQUFnQixFQUFFZ2dCLFFBQVEsQ0FBQ2hnQjtRQUFpQixHQUN2Q2dnQixRQUFRLENBQUNJLGFBQWEsS0FBS25LLFNBQVMsR0FDckM7VUFBQ21LLGFBQWEsRUFBRUosUUFBUSxDQUFDSTtRQUFhLENBQUMsR0FDdkMsQ0FBQyxDQUFDLEVBQ0RULGdCQUFnQixHQUNqQjtVQUNFVyxNQUFNLEVBQ0o3ZixvQkFBb0IsQ0FBQyxDQUFDLENBQUM4ZSxvQkFBb0IsQ0FDekNwZSxlQUFlLENBQUN1ZSxNQUFNLENBQ3ZCLENBQUNhLFNBQVMsQ0FBQztRQUNoQixDQUFDLEdBQ0QsQ0FBQyxDQUFDLEVBQ0YzQixvQkFBb0IsQ0FDekIsQ0FBQyxHQUNBLElBQUksRUFFUDRCLGdCQUFnQixHQUNiLElBQUksQ0FBQzlKLGtCQUFrQixDQUFBalEsZUFBQSxLQUNuQjVGLGlCQUFpQixFQUFHMmYsZ0JBQWdCLEdBQ3RDO1VBQUNySixVQUFVLEVBQUUsS0FBSztVQUFFUSxhQUFhLEVBQUU7UUFBSyxDQUMxQyxDQUFDLEdBQ0QsSUFBSSxFQUNQLElBQUksQ0FBQ3JELGlCQUFpQixDQUFDLENBQUMsRUFDeEIsQ0FBQzVELFFBQVEsSUFBSTFKLE9BQU8sS0FBS3laLE9BQU8sZ0JBQy9CemlCLEtBQUEsQ0FBQTRILGFBQUEsQ0FBQ3RELGdCQUFnQjtVQUNmbVAsU0FBUyxFQUFFakksT0FBTyxDQUFDMFYseUJBQXlCLElBQUksSUFBSSxDQUFDL0IscUJBQXFCLENBQUU7VUFDNUVnQyxlQUFlLEVBQUUzVixPQUFPLENBQUMyVixlQUFlLENBQUU7VUFDMUNDLGNBQWMsRUFBRUEsY0FBZTtVQUMvQmdGLG1CQUFtQixFQUFFcEYsZ0JBQWdCLENBQUNoYSxNQUFNLEdBQUcsQ0FBRTtVQUNqRHFmLFdBQVcsRUFBRTVqQixvQkFBb0IsQ0FBQyxDQUFDLENBQUM2akI7UUFBZSxDQUNwRCxDQUFDLEdBQ0EsSUFBSSxFQUNQLElBQUksQ0FBQ3BnQixLQUFLLENBQUM4QyxPQUFPLGdCQUNqQmhKLEtBQUEsQ0FBQTRILGFBQUEsQ0FBQzNHLFdBQVc7VUFDVnlILGtCQUFrQixFQUFFLElBQUksQ0FBQzZkLEtBQUssQ0FBQzdkLGtCQUFtQjtVQUNsREMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDNGQsS0FBSyxDQUFDNWQsbUJBQW9CO1VBQ3BEbVksbUJBQW1CLEVBQUVBLG1CQUFvQjtVQUN6Q1Msb0JBQW9CLEVBQUVBLG9CQUFxQjtVQUMzQ2lGLGlCQUFpQixFQUFFL2lCLDJCQUEyQixDQUFDO1lBQzdDaUksS0FBSyxFQUFFRCxRQUFRLENBQUNDLEtBQUs7WUFDckIyTixvQkFBb0IsRUFBcEJBLG9CQUFvQjtZQUNwQmtELFlBQVksRUFBRW5SLFFBQVEsYUFBUkEsUUFBUSx1QkFBUkEsUUFBUSxDQUFFQyxTQUFTO1lBQ2pDbVIsZUFBZSxFQUFFOVksMkJBQTJCLENBQzFDNGQsa0JBQWtCLEVBQ2xCakksb0JBQ0Y7VUFDRixDQUFDO1FBQUUsQ0FDSixDQUFDLEdBQ0EsSUFBSSxFQUNQLElBQUksQ0FBQ25ULEtBQUssQ0FBQzhDLE9BQU8sZ0JBQ2pCaEosS0FBQSxDQUFBNEgsYUFBQSxDQUFDMUcsZ0JBQWdCO1VBQ2Z1bEIsS0FBSyxFQUFFekYsZ0JBQWlCO1VBQ3hCRyxlQUFlLEVBQUUzVixPQUFPLENBQUMyVixlQUFlLENBQUU7VUFDMUNDLGNBQWMsRUFBRUE7UUFBZSxDQUNoQyxDQUFDLEdBQ0EsSUFBSSxFQUNQLENBQUMxTyxRQUFRLElBQUlqUSxvQkFBb0IsQ0FBQyxDQUFDLENBQUM2akIsY0FBYyxnQkFDakR0bUIsS0FBQSxDQUFBNEgsYUFBQSxDQUFDdEIsdUJBQXVCO1VBQ3RCTSxLQUFLLEVBQ0hvQyxPQUFPLElBQUltWSxlQUFlLEdBQ3RCLENBQUNDLGNBQWMsSUFBSSxDQUFDLE1BQUFoQixxQkFBQSxHQUFLaGEsS0FBSyxhQUFMQSxLQUFLLGdCQUFBaWEsZ0JBQUEsR0FBTGphLEtBQUssQ0FBRUksU0FBUyxjQUFBNlosZ0JBQUEsZ0JBQUFBLGdCQUFBLEdBQWhCQSxnQkFBQSxDQUFrQjVaLE1BQU0sY0FBQTRaLGdCQUFBLHVCQUF4QkEsZ0JBQUEsQ0FBMEIzWixJQUFJLGNBQUEwWixxQkFBQSxjQUFBQSxxQkFBQSxHQUFJLENBQUMsQ0FBQyxJQUFBRSxzQkFBQSxHQUM3RGxhLEtBQUssYUFBTEEsS0FBSyxnQkFBQW1hLGlCQUFBLEdBQUxuYSxLQUFLLENBQUVJLFNBQVMsY0FBQStaLGlCQUFBLGdCQUFBQSxpQkFBQSxHQUFoQkEsaUJBQUEsQ0FBa0I5WixNQUFNLGNBQUE4WixpQkFBQSx1QkFBeEJBLGlCQUFBLENBQTBCN1osSUFBSSxjQUFBNFosc0JBQUEsY0FBQUEsc0JBQUEsR0FBSSxDQUN2QztVQUNEM1osYUFBYSxFQUFFcUMsT0FBTyxJQUFJZ1ksZ0JBQWdCLENBQUNoYSxNQUFNLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRztRQUFFLGdCQUUvRGhILEtBQUEsQ0FBQTRILGFBQUEsQ0FBQ08sUUFBUTtVQUFDc0QsUUFBUSxFQUFFQSxRQUFTO1VBQUN5QyxRQUFRLEVBQUUxRyxLQUFLLGFBQUxBLEtBQUssY0FBTEEsS0FBSyxHQUFJO1FBQUUsQ0FBRSxDQUM5QixDQUFDLEdBQ3hCLElBQ0osQ0FBQztNQUVQO0lBQUM7TUFBQXdNLEdBQUE7TUFBQXhKLEtBQUEsRUFFRCxTQUFBa2MsTUFBTUEsQ0FBQSxFQUFHO1FBQUEsSUFBQUMsb0JBQUE7UUFDUCxJQUFBQyxZQUFBLEdBQTZCLElBQUksQ0FBQzFnQixLQUFLO1VBQWhDWSxRQUFRLEdBQUE4ZixZQUFBLENBQVI5ZixRQUFRO1VBQUVzRSxRQUFRLEdBQUF3YixZQUFBLENBQVJ4YixRQUFRO1FBQ3pCLElBQU15YixVQUFVLEdBQUcsSUFBSSxDQUFDckgsVUFBVSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDcUgsVUFBVSxFQUFFO1VBQ2Y7VUFDQTtVQUNBLE9BQU8sSUFBSTtRQUNiO1FBRUEsSUFBTWxYLFlBQVksSUFBQWdYLG9CQUFBLEdBQUd2YixRQUFRLENBQUN3RSxTQUFTLGNBQUErVyxvQkFBQSx1QkFBbEJBLG9CQUFBLENBQXFCdmIsUUFBUSxDQUFDQyxTQUFTLENBQUM7UUFDN0QsSUFBTWlXLGtCQUFrQixHQUFHdmYsaUJBQWlCLENBQUM0TixZQUFZLENBQUM7UUFDMUQsSUFBTTRSLG9CQUFvQixHQUFHOWUsb0JBQW9CLENBQUMsQ0FBQyxDQUFDOGUsb0JBQW9CLENBQUNELGtCQUFrQixDQUFDO1FBRTVGLG9CQUNFdGhCLEtBQUEsQ0FBQTRILGFBQUEsQ0FBQ3ZDLFNBQVM7VUFDUndDLEdBQUcsRUFBRSxJQUFJLENBQUN2QyxJQUFLO1VBQ2Z1SixLQUFLLEVBQUUsSUFBSSxDQUFDaVksYUFBYSxDQUFDLElBQUksQ0FBQzVnQixLQUFLLENBQUU7VUFDdEM2Z0IsYUFBYSxFQUFFLFNBQWZBLGFBQWFBLENBQUVyWixLQUFLO1lBQUEsT0FBSUEsS0FBSyxDQUFDc1osY0FBYyxDQUFDLENBQUM7VUFBQSxDQUFDO1VBQy9DeGhCLGFBQWEsRUFBRXNCLFFBQVEsQ0FBQ21nQixlQUFnQjtVQUN4Q3hoQixlQUFlLEVBQUU4YixvQkFBb0IsQ0FBQzJGO1FBQWUsR0FFcERMLFVBQ1EsQ0FBQztNQUVoQjtJQUFDO0VBQUEsRUFqekN3QjVtQixTQUFTO0VBQUF3SSxlQUFBLENBQTlCTCxZQUFZLGlCQUtLdEUsbUJBQW1CO0VBQUEyRSxlQUFBLENBTHBDTCxZQUFZLGtCQVNNO0lBQ3BCbVIsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNmL1IsS0FBSyxFQUFFLENBQUM7SUFDUndCLE9BQU8sRUFBRTtFQUNYLENBQUM7RUF1eUNILE9BQU81SSxTQUFTLENBQUNnSSxZQUFZLENBQUM7QUFDaEMiLCJpZ25vcmVMaXN0IjpbXX0=
|