@kepler.gl/components 3.1.8 → 3.1.10
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/common/image-preview.d.ts +3 -3
- package/dist/common/image-preview.js +17 -13
- package/dist/common/link-renderer.d.ts +6 -2
- package/dist/common/link-renderer.js +1 -1
- package/dist/common/loading-spinner.js +2 -2
- package/dist/index.d.ts +1 -0
- package/dist/index.js +44 -1
- package/dist/kepler-gl.d.ts +28 -10
- package/dist/kepler-gl.js +19 -8
- package/dist/map/layer-hover-info.js +38 -15
- package/dist/map-container.d.ts +1 -0
- package/dist/map-container.js +7 -2
- package/dist/modal-container.d.ts +1 -1
- package/dist/modals/export-data-modal.js +2 -2
- package/dist/modals/export-image-modal.d.ts +1 -1
- package/dist/modals/export-image-modal.js +1 -1
- package/dist/modals/save-map-modal.d.ts +1 -2
- package/dist/modals/save-map-modal.js +1 -1
- package/dist/modals/tilesets-modals/common.d.ts +2 -1
- package/dist/modals/tilesets-modals/common.js +1 -1
- package/dist/modals/tilesets-modals/load-data-footer.d.ts +1 -1
- package/dist/modals/tilesets-modals/load-data-footer.js +11 -5
- package/dist/modals/tilesets-modals/load-tileset.js +21 -3
- package/dist/modals/tilesets-modals/tileset-raster-form.js +20 -14
- package/dist/modals/tilesets-modals/tileset-wms-form.d.ts +7 -0
- package/dist/modals/tilesets-modals/tileset-wms-form.js +163 -0
- package/dist/plot-container.d.ts +10 -7
- package/dist/plot-container.js +171 -170
- package/dist/side-panel/common/dataset-info.js +2 -2
- package/dist/side-panel/layer-manager.d.ts +1 -0
- package/dist/side-panel/layer-manager.js +25 -10
- package/dist/side-panel/layer-panel/color-scale-selector.js +16 -9
- package/dist/side-panel/layer-panel/custom-palette.d.ts +1 -6
- package/dist/side-panel/layer-panel/custom-palette.js +132 -88
- package/dist/side-panel/layer-panel/dataset-layer-section.js +21 -8
- package/dist/side-panel/layer-panel/layer-configurator.js +56 -14
- package/dist/side-panel/layer-panel/raster-tile-layer-configurator.js +10 -10
- package/package.json +17 -16
package/dist/kepler-gl.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, { Dispatch } from 'react';
|
|
2
2
|
import { FeatureFlags } from './context';
|
|
3
|
-
import { AttributionWithStyle, DatasetAttribution, OnErrorCallBack, OnSuccessCallBack, Viewport } from '@kepler.gl/types';
|
|
3
|
+
import { AttributionWithStyle, DatasetAttribution, OnErrorCallBack, OnSuccessCallBack, Viewport, MapState } from '@kepler.gl/types';
|
|
4
4
|
import { MapStateActions, MapStyleActions, ProviderActions, UIStateActions, VisStateActions } from '@kepler.gl/actions';
|
|
5
5
|
declare type KeplerGlActions = {
|
|
6
6
|
visStateActions: typeof VisStateActions;
|
|
@@ -22,12 +22,19 @@ import DndContextFactory from './dnd-context';
|
|
|
22
22
|
import { KeplerGlState } from '@kepler.gl/reducers';
|
|
23
23
|
import { Provider } from '@kepler.gl/cloud-providers';
|
|
24
24
|
export declare const isViewportDisjointed: (props: any) => any;
|
|
25
|
-
|
|
25
|
+
declare type MapStateProps = {
|
|
26
|
+
mapState: MapState;
|
|
27
|
+
};
|
|
28
|
+
export declare const mapStateSelector: ((state: MapStateProps, index?: number | undefined) => MapState) & import("reselect").OutputSelectorFields<(args_0: MapState, args_1: number | undefined) => MapState, {
|
|
29
|
+
clearCache: () => void;
|
|
30
|
+
}> & {
|
|
31
|
+
clearCache: () => void;
|
|
32
|
+
};
|
|
26
33
|
export declare const mapFieldsSelector: (props: KeplerGLProps, index?: number) => {
|
|
27
34
|
getMapboxRef: (() => React.RefObject<any>) | undefined;
|
|
28
35
|
mapboxApiAccessToken: string;
|
|
29
36
|
mapboxApiUrl: string;
|
|
30
|
-
mapState:
|
|
37
|
+
mapState: MapState;
|
|
31
38
|
datasetAttributions: DatasetAttribution[];
|
|
32
39
|
mapStyle: import("@kepler.gl/reducers").MapStyle;
|
|
33
40
|
onDeckInitialized: (() => void) | undefined;
|
|
@@ -84,6 +91,7 @@ export declare const sidePanelSelector: (props: KeplerGLProps, availableProvider
|
|
|
84
91
|
s2: typeof import("@kepler.gl/layers/dist/s2-geometry-layer/s2-geometry-layer").default;
|
|
85
92
|
vectorTile: typeof import("@kepler.gl/layers").VectorTileLayer;
|
|
86
93
|
rasterTile: typeof import("@kepler.gl/layers").RasterTileLayer;
|
|
94
|
+
wms: typeof import("@kepler.gl/layers/dist/wms-layer/wms-layer").default;
|
|
87
95
|
};
|
|
88
96
|
interactionConfig: import("@kepler.gl/types").InteractionConfig;
|
|
89
97
|
mapInfo: import("@kepler.gl/types").MapInfo;
|
|
@@ -96,12 +104,22 @@ export declare const sidePanelSelector: (props: KeplerGLProps, availableProvider
|
|
|
96
104
|
export declare const plotContainerSelector: (props: KeplerGLProps) => {
|
|
97
105
|
width: number | undefined;
|
|
98
106
|
height: number | undefined;
|
|
99
|
-
|
|
107
|
+
ratio: "CUSTOM" | "SCREEN" | "FOUR_BY_THREE" | "SIXTEEN_BY_NINE";
|
|
108
|
+
resolution: "ONE_X" | "TWO_X";
|
|
109
|
+
legend: boolean;
|
|
110
|
+
center: boolean;
|
|
111
|
+
imageSize: {
|
|
112
|
+
zoomOffset: number;
|
|
113
|
+
scale: number;
|
|
114
|
+
imageW: number;
|
|
115
|
+
imageH: number;
|
|
116
|
+
};
|
|
117
|
+
escapeXhtmlForWebpack: boolean | undefined;
|
|
100
118
|
mapFields: {
|
|
101
119
|
getMapboxRef: (() => React.RefObject<any>) | undefined;
|
|
102
120
|
mapboxApiAccessToken: string;
|
|
103
121
|
mapboxApiUrl: string;
|
|
104
|
-
mapState:
|
|
122
|
+
mapState: MapState;
|
|
105
123
|
datasetAttributions: DatasetAttribution[];
|
|
106
124
|
mapStyle: import("@kepler.gl/reducers").MapStyle;
|
|
107
125
|
onDeckInitialized: (() => void) | undefined;
|
|
@@ -130,8 +148,8 @@ export declare const plotContainerSelector: (props: KeplerGLProps) => {
|
|
|
130
148
|
payload: object;
|
|
131
149
|
type: "@@kepler.gl/ADD_NOTIFICATION";
|
|
132
150
|
};
|
|
133
|
-
setExportImageSetting: (newSetting: Partial<import("@kepler.gl/
|
|
134
|
-
payload: Partial<import("@kepler.gl/
|
|
151
|
+
setExportImageSetting: (newSetting: Partial<import("@kepler.gl/types").ExportImage>) => {
|
|
152
|
+
payload: Partial<import("@kepler.gl/types").ExportImage>;
|
|
135
153
|
type: "@@kepler.gl/SET_EXPORT_IMAGE_SETTING";
|
|
136
154
|
};
|
|
137
155
|
setExportImageDataUri: (dataUri: string) => {
|
|
@@ -162,7 +180,7 @@ export declare const modalContainerSelector: (props: KeplerGLProps, rootNode: an
|
|
|
162
180
|
appName: string;
|
|
163
181
|
mapStyle: import("@kepler.gl/reducers").MapStyle;
|
|
164
182
|
visState: import("@kepler.gl/schemas").VisState;
|
|
165
|
-
mapState:
|
|
183
|
+
mapState: MapState;
|
|
166
184
|
uiState: import("@kepler.gl/types").UiState;
|
|
167
185
|
providerState: import("@kepler.gl/reducers").ProviderState;
|
|
168
186
|
mapboxApiAccessToken: string;
|
|
@@ -184,7 +202,7 @@ export declare const geoCoderPanelSelector: (props: KeplerGLProps, dimensions: {
|
|
|
184
202
|
}) => {
|
|
185
203
|
isGeocoderEnabled: boolean;
|
|
186
204
|
mapboxApiAccessToken: string;
|
|
187
|
-
mapState:
|
|
205
|
+
mapState: MapState;
|
|
188
206
|
uiState: import("@kepler.gl/types").UiState;
|
|
189
207
|
layerOrder: string[];
|
|
190
208
|
updateVisData: typeof VisStateActions.updateVisData;
|
|
@@ -296,7 +314,7 @@ declare namespace KeplerGlFactory {
|
|
|
296
314
|
export declare function mapStateToProps(state: KeplerGlState, props: KeplerGLProps): {
|
|
297
315
|
visState: import("@kepler.gl/schemas").VisState;
|
|
298
316
|
mapStyle: import("@kepler.gl/reducers").MapStyle;
|
|
299
|
-
mapState:
|
|
317
|
+
mapState: MapState;
|
|
300
318
|
uiState: import("@kepler.gl/types").UiState;
|
|
301
319
|
providerState: import("@kepler.gl/reducers").ProviderState;
|
|
302
320
|
visStateActions: typeof VisStateActions;
|
package/dist/kepler-gl.js
CHANGED
|
@@ -77,18 +77,24 @@ var BottomWidgetOuter = _styledComponents["default"].div(function (_ref) {
|
|
|
77
77
|
var isViewportDisjointed = exports.isViewportDisjointed = function isViewportDisjointed(props) {
|
|
78
78
|
return props.mapState.isSplit && !props.mapState.isViewportSynced && props.mapState.splitMapViewports.length > 1;
|
|
79
79
|
};
|
|
80
|
-
var mapStateSelector = exports.mapStateSelector = function
|
|
80
|
+
var mapStateSelector = exports.mapStateSelector = (0, _reselect.createSelector)([function (props) {
|
|
81
|
+
return props.mapState;
|
|
82
|
+
}, function (_, index) {
|
|
83
|
+
return index;
|
|
84
|
+
}], function (mapState, index) {
|
|
81
85
|
if (!Number.isFinite(index)) {
|
|
82
86
|
// either no index arg or an invalid index was provided
|
|
83
87
|
// it is expected to be either 0 or 1 when in split mode
|
|
84
88
|
// only use the mapState
|
|
85
|
-
return
|
|
89
|
+
return mapState;
|
|
86
90
|
}
|
|
87
|
-
return isViewportDisjointed(
|
|
88
|
-
|
|
91
|
+
return isViewportDisjointed({
|
|
92
|
+
mapState: mapState
|
|
93
|
+
}) ? // mix together the viewport properties intended for this disjointed <MapContainer> with the other necessary mapState properties
|
|
94
|
+
_objectSpread(_objectSpread({}, mapState), mapState.splitMapViewports[index || 0]) :
|
|
89
95
|
// otherwise only use the mapState
|
|
90
|
-
|
|
91
|
-
};
|
|
96
|
+
mapState;
|
|
97
|
+
});
|
|
92
98
|
var mapFieldsSelector = exports.mapFieldsSelector = function mapFieldsSelector(props) {
|
|
93
99
|
var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
94
100
|
return {
|
|
@@ -157,7 +163,12 @@ var plotContainerSelector = exports.plotContainerSelector = function plotContain
|
|
|
157
163
|
return {
|
|
158
164
|
width: props.width,
|
|
159
165
|
height: props.height,
|
|
160
|
-
|
|
166
|
+
ratio: props.uiState.exportImage.ratio,
|
|
167
|
+
resolution: props.uiState.exportImage.resolution,
|
|
168
|
+
legend: props.uiState.exportImage.legend,
|
|
169
|
+
center: props.uiState.exportImage.center,
|
|
170
|
+
imageSize: props.uiState.exportImage.imageSize,
|
|
171
|
+
escapeXhtmlForWebpack: props.uiState.exportImage.escapeXhtmlForWebpack,
|
|
161
172
|
mapFields: mapFieldsSelector(props),
|
|
162
173
|
addNotification: props.uiStateActions.addNotification,
|
|
163
174
|
setExportImageSetting: props.uiStateActions.setExportImageSetting,
|
|
@@ -571,4 +582,4 @@ function mergeActions(actions, userActions) {
|
|
|
571
582
|
return _objectSpread(_objectSpread({}, actions), overrides);
|
|
572
583
|
}
|
|
573
584
|
var _default = exports["default"] = KeplerGlFactory;
|
|
574
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfY29uc29sZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcmVkdXgiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9yZXNlbGVjdCIsIl9rZXBsZXJnbENvbm5lY3QiLCJfcmVhY3RJbnRsIiwiX2xvY2FsaXphdGlvbiIsIl9jb250ZXh0IiwiX2FjdGlvbnMiLCJfY29tbW9uVXRpbHMiLCJfc3R5bGVkQ29tcG9uZW50czIiLCJfY29uc3RhbnRzIiwiX3NpZGVQYW5lbCIsIl9tYXBDb250YWluZXIyIiwiX21hcHNMYXlvdXQiLCJfYm90dG9tV2lkZ2V0IiwiX21vZGFsQ29udGFpbmVyIiwiX3Bsb3RDb250YWluZXIiLCJfbm90aWZpY2F0aW9uUGFuZWwiLCJfZ2VvY29kZXJQYW5lbCIsIl9lZmZlY3RNYW5hZ2VyIiwiX2RuZENvbnRleHQiLCJfdXNlQ2xvdWRMaXN0UHJvdmlkZXIiLCJfdXRpbHMiLCJfc3R5bGVzIiwiX3RlbXBsYXRlT2JqZWN0IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mMyIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIl9jYWxsU3VwZXIiLCJvIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJhcHBseSIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiR2xvYmFsU3R5bGUiLCJzdHlsZWQiLCJkaXYiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsInByb3BzIiwidGhlbWUiLCJmb250RmFtaWx5IiwiZm9udFdlaWdodCIsImZvbnRTaXplIiwibGluZUhlaWdodCIsImxhYmVsQ29sb3IiLCJCb3R0b21XaWRnZXRPdXRlciIsIl9yZWYiLCJhYnNvbHV0ZSIsImNvbmNhdCIsImlzVmlld3BvcnREaXNqb2ludGVkIiwiZXhwb3J0cyIsIm1hcFN0YXRlIiwiaXNTcGxpdCIsImlzVmlld3BvcnRTeW5jZWQiLCJzcGxpdE1hcFZpZXdwb3J0cyIsIm1hcFN0YXRlU2VsZWN0b3IiLCJpbmRleCIsIk51bWJlciIsImlzRmluaXRlIiwibWFwRmllbGRzU2VsZWN0b3IiLCJ1bmRlZmluZWQiLCJnZXRNYXBib3hSZWYiLCJtYXBib3hBcGlBY2Nlc3NUb2tlbiIsIm1hcGJveEFwaVVybCIsIkRFRkFVTFRfS0VQTEVSX0dMX1BST1BTIiwiZGF0YXNldEF0dHJpYnV0aW9ucyIsImF0dHJpYnV0aW9uU2VsZWN0b3IiLCJzb3VyY2VzIiwibWFwU3R5bGUiLCJvbkRlY2tJbml0aWFsaXplZCIsIm9uVmlld1N0YXRlQ2hhbmdlIiwib25Nb3VzZU1vdmUiLCJkZWNrR2xQcm9wcyIsInVpU3RhdGVBY3Rpb25zIiwidmlzU3RhdGVBY3Rpb25zIiwibWFwU3RhdGVBY3Rpb25zIiwidmlzU3RhdGUiLCJhY3RpdmVTaWRlUGFuZWwiLCJ1aVN0YXRlIiwibWFwQ29udHJvbHMiLCJyZWFkT25seSIsImxvY2FsZSIsImlzTG9hZGluZ0luZGljYXRvclZpc2libGUiLCJsb2FkaW5nSW5kaWNhdG9yVmFsdWUiLCJzaWRlUGFuZWxXaWR0aCIsIndpZHRoIiwidG9wTWFwQ29udGFpbmVyUHJvcHMiLCJib3R0b21NYXBDb250YWluZXJQcm9wcyIsInRyYW5zZm9ybVJlcXVlc3QiLCJnZXRWaXNpYmxlRGF0YXNldHMiLCJkYXRhc2V0cyIsImZpbHRlck9iamVjdEJ5UHJlZGljYXRlIiwia2V5IiwiR0VPQ09ERVJfREFUQVNFVF9OQU1FIiwic2lkZVBhbmVsU2VsZWN0b3IiLCJhdmFpbGFibGVQcm92aWRlcnMiLCJmaWx0ZXJlZERhdGFzZXRzIiwiYXBwTmFtZSIsInZlcnNpb24iLCJhcHBXZWJzaXRlIiwib25TYXZlTWFwIiwibWFwU3R5bGVBY3Rpb25zIiwiZmlsdGVycyIsImxheWVycyIsImxheWVyT3JkZXIiLCJsYXllckNsYXNzZXMiLCJpbnRlcmFjdGlvbkNvbmZpZyIsIm1hcEluZm8iLCJsYXllckJsZW5kaW5nIiwib3ZlcmxheUJsZW5kaW5nIiwibWFwU2F2ZWQiLCJwcm92aWRlclN0YXRlIiwicGxvdENvbnRhaW5lclNlbGVjdG9yIiwiaGVpZ2h0IiwiZXhwb3J0SW1hZ2VTZXR0aW5nIiwiZXhwb3J0SW1hZ2UiLCJtYXBGaWVsZHMiLCJhZGROb3RpZmljYXRpb24iLCJzZXRFeHBvcnRJbWFnZVNldHRpbmciLCJzZXRFeHBvcnRJbWFnZURhdGFVcmkiLCJzZXRFeHBvcnRJbWFnZUVycm9yIiwic3BsaXRNYXBzIiwiaXNTcGxpdFNlbGVjdG9yIiwiYm90dG9tV2lkZ2V0U2VsZWN0b3IiLCJhbmltYXRpb25Db25maWciLCJ0b2dnbGVNb2RhbCIsInNpZGVQYW5lbCIsIm1hcmdpbiIsImxlZnQiLCJtb2RhbENvbnRhaW5lclNlbGVjdG9yIiwicm9vdE5vZGUiLCJwcm92aWRlckFjdGlvbnMiLCJjbG91ZFByb3ZpZGVycyIsIm9uRXhwb3J0VG9DbG91ZFN1Y2Nlc3MiLCJvbkxvYWRDbG91ZE1hcFN1Y2Nlc3MiLCJvbkxvYWRDbG91ZE1hcEVycm9yIiwib25FeHBvcnRUb0Nsb3VkRXJyb3IiLCJnZW9Db2RlclBhbmVsU2VsZWN0b3IiLCJkaW1lbnNpb25zIiwiaXNHZW9jb2RlckVuYWJsZWQiLCJnZW9jb2RlciIsImVuYWJsZWQiLCJ1cGRhdGVWaXNEYXRhIiwicmVtb3ZlRGF0YXNldCIsInVwZGF0ZU1hcCIsImFwcFdpZHRoIiwiZGF0YXNldEF0dHJpYnV0aW9uU2VsZWN0b3IiLCJjcmVhdGVTZWxlY3RvciIsInN0YXRlIiwidW5pcXVlQXR0cmlidXRpb25zIiwiX2RzJG1ldGFkYXRhIiwiZHMiLCJhdHRyaWJ1dGlvbnMiLCJtZXRhZGF0YSIsIkFycmF5IiwiaXNBcnJheSIsImF0dHJpYnV0aW9uIiwibGlua3MiLCJtYXRjaCIsImxpbmsiLCJfbGluayRtYXRjaCIsIl9saW5rJG1hdGNoMiIsImhyZWYiLCJ0aXRsZSIsImluZGV4T2YiLCJ1cmwiLCJlcnJvciIsInVuaXF1ZVRleHRBdHRyaWJ1dGlvbnMiLCJsb2dvcyIsIm5vdGlmaWNhdGlvblBhbmVsU2VsZWN0b3IiLCJyZW1vdmVOb3RpZmljYXRpb24iLCJub3RpZmljYXRpb25zIiwibWFwU3R5bGVzIiwibWFwU3R5bGVzUmVwbGFjZURlZmF1bHQiLCJERUZBVUxUX01BUEJPWF9BUElfVVJMIiwiS0VQTEVSX0dMX05BTUUiLCJLRVBMRVJfR0xfVkVSU0lPTiIsIkRJTUVOU0lPTlMiLCJmZWF0dXJlRmxhZ3MiLCJLZXBsZXJHbEZhY3RvcnkiLCJkZXBzIiwiQm90dG9tV2lkZ2V0RmFjdG9yeSIsIkdlb0NvZGVyUGFuZWxGYWN0b3J5IiwiTWFwQ29udGFpbmVyRmFjdG9yeSIsIk1hcHNMYXlvdXRGYWN0b3J5IiwiTW9kYWxDb250YWluZXJGYWN0b3J5IiwiU2lkZVBhbmVsRmFjdG9yeSIsIlBsb3RDb250YWluZXJGYWN0b3J5IiwiTm90aWZpY2F0aW9uUGFuZWxGYWN0b3J5IiwiRG5kQ29udGV4dEZhY3RvcnkiLCJFZmZlY3RNYW5hZ2VyRmFjdG9yeSIsIkJvdHRvbVdpZGdldCIsIkdlb0NvZGVyUGFuZWwiLCJNYXBDb250YWluZXIiLCJNYXBzTGF5b3V0IiwiTW9kYWxDb250YWluZXIiLCJTaWRlUGFuZWwiLCJQbG90Q29udGFpbmVyIiwiTm90aWZpY2F0aW9uUGFuZWwiLCJEbmRDb250ZXh0IiwiS2VwbGVyR0wiLCJfQ29tcG9uZW50IiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2xlbiIsImFyZ3MiLCJfa2V5Iiwic2V0U3RhdGUiLCJjcmVhdGVSZWYiLCJ0aGVtZVNlbGVjdG9yIiwiX3R5cGVvZjIiLCJiYXNpY1RoZW1lIiwiVEhFTUUiLCJsaWdodCIsInRoZW1lTFQiLCJiYXNlIiwidGhlbWVCUyIsImRhdGFzZXRzU2VsZWN0b3IiLCJwcm92aWRlcnMiLCJoYXNTdG9yYWdlIiwic29tZSIsInAiLCJoYXNQcml2YXRlU3RvcmFnZSIsImhhc1NoYXJlIiwiaGFzU2hhcmluZ1VybCIsImxvY2FsZU1lc3NhZ2VzIiwiY3VzdG9tTWVzc2FnZXMiLCJtZXJnZU1lc3NhZ2VzIiwibWVzc2FnZXMiLCJkZWZhdWx0U3R5bGVzIiwidmFsdWVzIiwiY3VzdG9tU3R5bGVzIiwibWFwIiwibXMiLCJpZCIsImdlbmVyYXRlSGFzaElkIiwiYWxsU3R5bGVzIiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsInJlZHVjZSIsImFjY3UiLCJzdHlsZSIsImxvYWRNYXBTdHlsZXMiLCJjb250YWluZXJJZCIsImxheWVySWQiLCJ0b2dnbGVMYXllckZvck1hcCIsIl9pbmhlcml0czIiLCJfY3JlYXRlQ2xhc3MyIiwidmFsdWUiLCJjb21wb25lbnREaWRNb3VudCIsIl9nZXRBcHBsaWNhdGlvbkNvbmZpZyIsImdldEFwcGxpY2F0aW9uQ29uZmlnIiwiYmFzZU1hcExpYnJhcnlDb25maWciLCJtYXBMaWJOYW1lIiwiX3ZhbGlkYXRlTWFwYm94VG9rZW4iLCJfbG9hZE1hcFN0eWxlIiwib25LZXBsZXJHbEluaXRpYWxpemVkIiwicm9vdCIsImN1cnJlbnQiLCJIVE1MRWxlbWVudCIsIm9ic2VydmVEaW1lbnNpb25zIiwiX2hhbmRsZVJlc2l6ZSIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwidW5vYnNlcnZlRGltZW5zaW9ucyIsInZhbGlkYXRlVG9rZW4iLCJDb25zb2xlIiwid2FybiIsIk1JU1NJTkdfTUFQQk9YX1RPS0VOIiwicmVuZGVyIiwiX3RoaXMyIiwiX3RoaXMkcHJvcHMiLCJfdGhpcyRwcm9wcyRpZCIsIl90aGlzJHByb3BzJHdpZHRoIiwiX3RoaXMkcHJvcHMkaGVpZ2h0IiwiX3RoaXMkcHJvcHMkY2xvdWRQcm92IiwiYXZhaWxhYmxlVGhlbWVTZWxlY3RvciIsImxvY2FsZU1lc3NhZ2VzU2VsZWN0b3IiLCJpc0V4cG9ydGluZ0ltYWdlIiwiZXhwb3J0aW5nIiwiZmlsdGVyZWREYXRhc2V0c1NlbGVjdG9yIiwic2lkZUZpZWxkcyIsInBsb3RDb250YWluZXJGaWVsZHMiLCJib3R0b21XaWRnZXRGaWVsZHMiLCJtb2RhbENvbnRhaW5lckZpZWxkcyIsImdlb0NvZGVyUGFuZWxGaWVsZHMiLCJub3RpZmljYXRpb25QYW5lbEZpZWxkcyIsIm1hcENvbnRhaW5lcnMiLCJjcmVhdGVFbGVtZW50IiwiX2V4dGVuZHMyIiwicHJpbWFyeSIsImRlbGV0ZU1hcExhYmVscyIsIl9kZWxldGVNYXBMYWJlbHMiLCJzZXR0aW5ncyIsIlJvb3RDb250ZXh0IiwiUHJvdmlkZXIiLCJGZWF0dXJlRmxhZ3NDb250ZXh0UHJvdmlkZXIiLCJJbnRsUHJvdmlkZXIiLCJTdHlsZVNoZWV0TWFuYWdlciIsInNob3VsZEZvcndhcmRQcm9wIiwiVGhlbWVQcm92aWRlciIsIkNsb3VkTGlzdFByb3ZpZGVyIiwiY2xhc3NOYW1lIiwiZGlzcGxheSIsImZsZXhEaXJlY3Rpb24iLCJwb3NpdGlvbiIsInJlZiIsInVuc3luY2VkVmlld3BvcnRzIiwiX21hcENvbnRhaW5lciIsImhhc1BvcnRhYmxlV2lkdGgiLCJicmVha1BvaW50VmFsdWVzIiwicm9vdFJlZiIsImJvdHRvbVdpZGdldFJlZiIsImNvbnRhaW5lclciLCJjb250YWluZXJIIiwiQ29tcG9uZW50Iiwia2VwbGVyR2xDb25uZWN0IiwibWFwU3RhdGVUb1Byb3BzIiwibWFrZU1hcERpc3BhdGNoVG9Qcm9wcyIsIndpdGhUaGVtZSIsImRlZmF1bHRVc2VyQWN0aW9ucyIsImdldERpc3BhdGNoIiwiZGlzcGF0Y2giLCJnZXRVc2VyQWN0aW9ucyIsImFjdGlvbnMiLCJtYWtlR2V0QWN0aW9uQ3JlYXRvcnMiLCJ1c2VyQWN0aW9ucyIsIl9tYXAiLCJWaXNTdGF0ZUFjdGlvbnMiLCJNYXBTdGF0ZUFjdGlvbnMiLCJNYXBTdHlsZUFjdGlvbnMiLCJVSVN0YXRlQWN0aW9ucyIsIlByb3ZpZGVyQWN0aW9ucyIsImJpbmRBY3Rpb25DcmVhdG9ycyIsIm1lcmdlQWN0aW9ucyIsIl9tYXAyIiwiX3NsaWNlZFRvQXJyYXkyIiwiZ2V0QWN0aW9uQ3JlYXRvcnMiLCJtYXBEaXNwYXRjaFRvUHJvcHMiLCJvd25Qcm9wcyIsImdyb3VwZWRBY3Rpb25DcmVhdG9ycyIsIm92ZXJyaWRlcyIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vc3JjL2tlcGxlci1nbC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50LCBjcmVhdGVSZWYsIERpc3BhdGNofSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ29uc29sZSBmcm9tICdnbG9iYWwvY29uc29sZSc7XG5pbXBvcnQge2JpbmRBY3Rpb25DcmVhdG9yc30gZnJvbSAncmVkdXgnO1xuaW1wb3J0IHN0eWxlZCwge3dpdGhUaGVtZSwgU3R5bGVTaGVldE1hbmFnZXIsIFRoZW1lUHJvdmlkZXJ9IGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7Y3JlYXRlU2VsZWN0b3J9IGZyb20gJ3Jlc2VsZWN0JztcbmltcG9ydCB7Y29ubmVjdCBhcyBrZXBsZXJHbENvbm5lY3R9IGZyb20gJy4vY29ubmVjdC9rZXBsZXJnbC1jb25uZWN0JztcbmltcG9ydCB7SW50bFByb3ZpZGVyfSBmcm9tICdyZWFjdC1pbnRsJztcbmltcG9ydCB7bWVzc2FnZXN9IGZyb20gJ0BrZXBsZXIuZ2wvbG9jYWxpemF0aW9uJztcbmltcG9ydCB7Um9vdENvbnRleHQsIEZlYXR1cmVGbGFnc0NvbnRleHRQcm92aWRlciwgRmVhdHVyZUZsYWdzfSBmcm9tICcuL2NvbnRleHQnO1xuaW1wb3J0IHtcbiAgQXR0cmlidXRpb25XaXRoU3R5bGUsXG4gIERhdGFzZXRBdHRyaWJ1dGlvbixcbiAgT25FcnJvckNhbGxCYWNrLFxuICBPblN1Y2Nlc3NDYWxsQmFjayxcbiAgVmlld3BvcnRcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5cbmltcG9ydCB7XG4gIE1hcFN0YXRlQWN0aW9ucyxcbiAgTWFwU3R5bGVBY3Rpb25zLFxuICBQcm92aWRlckFjdGlvbnMsXG4gIFVJU3RhdGVBY3Rpb25zLFxuICBWaXNTdGF0ZUFjdGlvbnNcbn0gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcblxuaW1wb3J0IHtnZW5lcmF0ZUhhc2hJZH0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuXG5pbXBvcnQge3Nob3VsZEZvcndhcmRQcm9wfSBmcm9tICcuL2NvbW1vbi9zdHlsZWQtY29tcG9uZW50cyc7XG5cbnR5cGUgS2VwbGVyR2xBY3Rpb25zID0ge1xuICB2aXNTdGF0ZUFjdGlvbnM6IHR5cGVvZiBWaXNTdGF0ZUFjdGlvbnM7XG4gIG1hcFN0YXRlQWN0aW9uczogdHlwZW9mIE1hcFN0YXRlQWN0aW9ucztcbiAgbWFwU3R5bGVBY3Rpb25zOiB0eXBlb2YgTWFwU3R5bGVBY3Rpb25zO1xuICB1aVN0YXRlQWN0aW9uczogdHlwZW9mIFVJU3RhdGVBY3Rpb25zO1xuICBwcm92aWRlckFjdGlvbnM6IHR5cGVvZiBQcm92aWRlckFjdGlvbnM7XG59O1xuXG5pbXBvcnQge1xuICBESU1FTlNJT05TLFxuICBLRVBMRVJfR0xfTkFNRSxcbiAgS0VQTEVSX0dMX1ZFUlNJT04sXG4gIFRIRU1FLFxuICBERUZBVUxUX01BUEJPWF9BUElfVVJMLFxuICBHRU9DT0RFUl9EQVRBU0VUX05BTUUsXG4gIE1JU1NJTkdfTUFQQk9YX1RPS0VOXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcblxuaW1wb3J0IFNpZGVQYW5lbEZhY3RvcnkgZnJvbSAnLi9zaWRlLXBhbmVsJztcbmltcG9ydCBNYXBDb250YWluZXJGYWN0b3J5IGZyb20gJy4vbWFwLWNvbnRhaW5lcic7XG5pbXBvcnQgTWFwc0xheW91dEZhY3RvcnkgZnJvbSAnLi9tYXBzLWxheW91dCc7XG5pbXBvcnQgQm90dG9tV2lkZ2V0RmFjdG9yeSBmcm9tICcuL2JvdHRvbS13aWRnZXQnO1xuaW1wb3J0IE1vZGFsQ29udGFpbmVyRmFjdG9yeSBmcm9tICcuL21vZGFsLWNvbnRhaW5lcic7XG5pbXBvcnQgUGxvdENvbnRhaW5lckZhY3RvcnkgZnJvbSAnLi9wbG90LWNvbnRhaW5lcic7XG5pbXBvcnQgTm90aWZpY2F0aW9uUGFuZWxGYWN0b3J5IGZyb20gJy4vbm90aWZpY2F0aW9uLXBhbmVsJztcbmltcG9ydCBHZW9Db2RlclBhbmVsRmFjdG9yeSBmcm9tICcuL2dlb2NvZGVyLXBhbmVsJztcbmltcG9ydCBFZmZlY3RNYW5hZ2VyRmFjdG9yeSBmcm9tICcuL2VmZmVjdHMvZWZmZWN0LW1hbmFnZXInO1xuaW1wb3J0IERuZENvbnRleHRGYWN0b3J5IGZyb20gJy4vZG5kLWNvbnRleHQnO1xuaW1wb3J0IHtDbG91ZExpc3RQcm92aWRlcn0gZnJvbSAnLi9ob29rcy91c2UtY2xvdWQtbGlzdC1wcm92aWRlcic7XG5cbmltcG9ydCB7XG4gIGZpbHRlck9iamVjdEJ5UHJlZGljYXRlLFxuICB2YWxpZGF0ZVRva2VuLFxuICBtZXJnZU1lc3NhZ2VzLFxuICBvYnNlcnZlRGltZW5zaW9ucyxcbiAgdW5vYnNlcnZlRGltZW5zaW9ucyxcbiAgaGFzUG9ydGFibGVXaWR0aCxcbiAgZ2V0QXBwbGljYXRpb25Db25maWdcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5cbmltcG9ydCB7dGhlbWUgYXMgYmFzaWNUaGVtZSwgdGhlbWVMVCwgdGhlbWVCUywgYnJlYWtQb2ludFZhbHVlc30gZnJvbSAnQGtlcGxlci5nbC9zdHlsZXMnO1xuaW1wb3J0IHtLZXBsZXJHbFN0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3JlZHVjZXJzJztcbmltcG9ydCB7UHJvdmlkZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvY2xvdWQtcHJvdmlkZXJzJztcblxuLy8gTWF5YmUgd2Ugc2hvdWxkIHRoaW5rIGFib3V0IGV4cG9ydGluZyB0aGlzIG9yIGNyZWF0aW5nIGEgdmFyaWFibGVcbi8vIGFzIHBhcnQgb2YgdGhlIGJhc2UuanMgdGhlbWVcbmNvbnN0IEdsb2JhbFN0eWxlID0gc3R5bGVkLmRpdmBcbiAgZm9udC1mYW1pbHk6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuZm9udEZhbWlseX07XG4gIGZvbnQtd2VpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmZvbnRXZWlnaHR9O1xuICBmb250LXNpemU6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuZm9udFNpemV9O1xuICBsaW5lLWhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5saW5lSGVpZ2h0fTtcblxuICAqLFxuICAqOmJlZm9yZSxcbiAgKjphZnRlciB7XG4gICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB9XG5cbiAgdWwge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG5cbiAgbGkge1xuICAgIG1hcmdpbjogMDtcbiAgfVxuXG4gIGEge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5sYWJlbENvbG9yfTtcbiAgfVxuXG4gIDpmb2N1cyB7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgfVxuXG4gIC5tYXBsaWJyZWdsLWN0cmwgLm1hcGxpYnJlZ2wtY3RybC1sb2dvIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLm1hcGJveGdsLWN0cmwgLm1hcGJveGdsLWN0cmwtbG9nbyB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuYDtcblxudHlwZSBCb3R0b21XaWRnZXRPdXRlclByb3BzID0ge1xuICBhYnNvbHV0ZT86IGJvb2xlYW47XG59O1xuXG5jb25zdCBCb3R0b21XaWRnZXRPdXRlciA9IHN0eWxlZC5kaXY8Qm90dG9tV2lkZ2V0T3V0ZXJQcm9wcz4oXG4gICh7YWJzb2x1dGV9KSA9PiBgXG4gICR7YWJzb2x1dGUgPyAncG9zaXRpb246IGFic29sdXRlOyBib3R0b206IDA7IHJpZ2h0OiAwOycgOiAnJ31cbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7IC8qIHByZXZlbnQgcGFkZGluZyBmcm9tIGJsb2NraW5nIGlucHV0ICovXG4gICYgPiAqIHtcbiAgICAvKiBhbGwgY2hpbGRyZW4gc2hvdWxkIGFsbG93IGlucHV0ICovXG4gICAgcG9pbnRlci1ldmVudHM6IGFsbDtcbiAgfWBcbik7XG5cbmV4cG9ydCBjb25zdCBpc1ZpZXdwb3J0RGlzam9pbnRlZCA9IHByb3BzID0+IHtcbiAgcmV0dXJuIChcbiAgICBwcm9wcy5tYXBTdGF0ZS5pc1NwbGl0ICYmXG4gICAgIXByb3BzLm1hcFN0YXRlLmlzVmlld3BvcnRTeW5jZWQgJiZcbiAgICBwcm9wcy5tYXBTdGF0ZS5zcGxpdE1hcFZpZXdwb3J0cy5sZW5ndGggPiAxXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgbWFwU3RhdGVTZWxlY3RvciA9IChwcm9wczogYW55LCBpbmRleDogbnVtYmVyKTogYW55ID0+IHtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoaW5kZXgpKSB7XG4gICAgLy8gZWl0aGVyIG5vIGluZGV4IGFyZyBvciBhbiBpbnZhbGlkIGluZGV4IHdhcyBwcm92aWRlZFxuICAgIC8vIGl0IGlzIGV4cGVjdGVkIHRvIGJlIGVpdGhlciAwIG9yIDEgd2hlbiBpbiBzcGxpdCBtb2RlXG4gICAgLy8gb25seSB1c2UgdGhlIG1hcFN0YXRlXG4gICAgcmV0dXJuIHByb3BzLm1hcFN0YXRlO1xuICB9XG5cbiAgcmV0dXJuIGlzVmlld3BvcnREaXNqb2ludGVkKHByb3BzKVxuICAgID8gLy8gbWl4IHRvZ2V0aGVyIHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzIGludGVuZGVkIGZvciB0aGlzIGRpc2pvaW50ZWQgPE1hcENvbnRhaW5lcj4gd2l0aCB0aGUgb3RoZXIgbmVjZXNzYXJ5IG1hcFN0YXRlIHByb3BlcnRpZXNcbiAgICAgIHsuLi5wcm9wcy5tYXBTdGF0ZSwgLi4ucHJvcHMubWFwU3RhdGUuc3BsaXRNYXBWaWV3cG9ydHNbaW5kZXhdfVxuICAgIDogLy8gb3RoZXJ3aXNlIG9ubHkgdXNlIHRoZSBtYXBTdGF0ZVxuICAgICAgcHJvcHMubWFwU3RhdGU7XG59O1xuXG5leHBvcnQgY29uc3QgbWFwRmllbGRzU2VsZWN0b3IgPSAocHJvcHM6IEtlcGxlckdMUHJvcHMsIGluZGV4ID0gMCkgPT4gKHtcbiAgZ2V0TWFwYm94UmVmOiBwcm9wcy5nZXRNYXBib3hSZWYsXG4gIG1hcGJveEFwaUFjY2Vzc1Rva2VuOiBwcm9wcy5tYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgbWFwYm94QXBpVXJsOiBwcm9wcy5tYXBib3hBcGlVcmwgPyBwcm9wcy5tYXBib3hBcGlVcmwgOiBERUZBVUxUX0tFUExFUl9HTF9QUk9QUy5tYXBib3hBcGlVcmwsXG4gIG1hcFN0YXRlOiBtYXBTdGF0ZVNlbGVjdG9yKHByb3BzLCBpbmRleCksXG4gIGRhdGFzZXRBdHRyaWJ1dGlvbnM6IGF0dHJpYnV0aW9uU2VsZWN0b3IocHJvcHMpLnNvdXJjZXMsXG4gIG1hcFN0eWxlOiBwcm9wcy5tYXBTdHlsZSxcbiAgb25EZWNrSW5pdGlhbGl6ZWQ6IHByb3BzLm9uRGVja0luaXRpYWxpemVkLFxuICBvblZpZXdTdGF0ZUNoYW5nZTogcHJvcHMub25WaWV3U3RhdGVDaGFuZ2UsXG4gIG9uTW91c2VNb3ZlOiBwcm9wcy5vbk1vdXNlTW92ZSxcbiAgZGVja0dsUHJvcHM6IHByb3BzLmRlY2tHbFByb3BzLFxuICB1aVN0YXRlQWN0aW9uczogcHJvcHMudWlTdGF0ZUFjdGlvbnMsXG4gIHZpc1N0YXRlQWN0aW9uczogcHJvcHMudmlzU3RhdGVBY3Rpb25zLFxuICBtYXBTdGF0ZUFjdGlvbnM6IHByb3BzLm1hcFN0YXRlQWN0aW9ucyxcblxuICAvLyB2aXNTdGF0ZVxuICB2aXNTdGF0ZTogcHJvcHMudmlzU3RhdGUsXG5cbiAgLy8gdWlTdGF0ZVxuICBhY3RpdmVTaWRlUGFuZWw6IHByb3BzLnVpU3RhdGUuYWN0aXZlU2lkZVBhbmVsLFxuICBtYXBDb250cm9sczogcHJvcHMudWlTdGF0ZS5tYXBDb250cm9scyxcbiAgcmVhZE9ubHk6IHByb3BzLnVpU3RhdGUucmVhZE9ubHksXG4gIGxvY2FsZTogcHJvcHMudWlTdGF0ZS5sb2NhbGUsXG4gIGlzTG9hZGluZ0luZGljYXRvclZpc2libGU6IE51bWJlcihwcm9wcy52aXNTdGF0ZS5sb2FkaW5nSW5kaWNhdG9yVmFsdWUpID4gMCxcbiAgc2lkZVBhbmVsV2lkdGg6IHByb3BzLnNpZGVQYW5lbFdpZHRoID8gcHJvcHMuc2lkZVBhbmVsV2lkdGggOiBERUZBVUxUX0tFUExFUl9HTF9QUk9QUy53aWR0aCxcblxuICAvLyBtYXBTdHlsZVxuICB0b3BNYXBDb250YWluZXJQcm9wczogcHJvcHMudG9wTWFwQ29udGFpbmVyUHJvcHMsXG4gIGJvdHRvbU1hcENvbnRhaW5lclByb3BzOiBwcm9wcy5ib3R0b21NYXBDb250YWluZXJQcm9wcyxcblxuICAvLyB0cmFuc2Zvcm1SZXF1ZXN0IGZvciBNYXBib3ggYmFzZW1hcHNcbiAgdHJhbnNmb3JtUmVxdWVzdDogcHJvcHMudHJhbnNmb3JtUmVxdWVzdFxufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaXNpYmxlRGF0YXNldHMoZGF0YXNldHMpIHtcbiAgLy8gV2UgZG9uJ3Qgd2FudCBHZW9jb2RlciBkYXRhc2V0IHRvIGJlIHByZXNlbnQgaW4gU2lkZVBhbmVsIGRhdGFzZXQgbGlzdFxuICByZXR1cm4gZmlsdGVyT2JqZWN0QnlQcmVkaWNhdGUoZGF0YXNldHMsIGtleSA9PiBrZXkgIT09IEdFT0NPREVSX0RBVEFTRVRfTkFNRSk7XG59XG5cbmV4cG9ydCBjb25zdCBzaWRlUGFuZWxTZWxlY3RvciA9IChwcm9wczogS2VwbGVyR0xQcm9wcywgYXZhaWxhYmxlUHJvdmlkZXJzLCBmaWx0ZXJlZERhdGFzZXRzKSA9PiAoe1xuICBhcHBOYW1lOiBwcm9wcy5hcHBOYW1lID8gcHJvcHMuYXBwTmFtZSA6IERFRkFVTFRfS0VQTEVSX0dMX1BST1BTLmFwcE5hbWUsXG4gIHZlcnNpb246IHByb3BzLnZlcnNpb24gPyBwcm9wcy52ZXJzaW9uIDogREVGQVVMVF9LRVBMRVJfR0xfUFJPUFMudmVyc2lvbixcbiAgYXBwV2Vic2l0ZTogcHJvcHMuYXBwV2Vic2l0ZSxcbiAgbWFwU3R5bGU6IHByb3BzLm1hcFN0eWxlLFxuICBvblNhdmVNYXA6IHByb3BzLm9uU2F2ZU1hcCxcbiAgdWlTdGF0ZTogcHJvcHMudWlTdGF0ZSxcbiAgbWFwU3R5bGVBY3Rpb25zOiBwcm9wcy5tYXBTdHlsZUFjdGlvbnMsXG4gIHZpc1N0YXRlQWN0aW9uczogcHJvcHMudmlzU3RhdGVBY3Rpb25zLFxuICB1aVN0YXRlQWN0aW9uczogcHJvcHMudWlTdGF0ZUFjdGlvbnMsXG4gIG1hcFN0YXRlQWN0aW9uczogcHJvcHMubWFwU3RhdGVBY3Rpb25zLFxuXG4gIGRhdGFzZXRzOiBmaWx0ZXJlZERhdGFzZXRzLFxuICBmaWx0ZXJzOiBwcm9wcy52aXNTdGF0ZS5maWx0ZXJzLFxuICBsYXllcnM6IHByb3BzLnZpc1N0YXRlLmxheWVycyxcbiAgbGF5ZXJPcmRlcjogcHJvcHMudmlzU3RhdGUubGF5ZXJPcmRlcixcbiAgbGF5ZXJDbGFzc2VzOiBwcm9wcy52aXNTdGF0ZS5sYXllckNsYXNzZXMsXG4gIGludGVyYWN0aW9uQ29uZmlnOiBwcm9wcy52aXNTdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgbWFwSW5mbzogcHJvcHMudmlzU3RhdGUubWFwSW5mbyxcbiAgbGF5ZXJCbGVuZGluZzogcHJvcHMudmlzU3RhdGUubGF5ZXJCbGVuZGluZyxcbiAgb3ZlcmxheUJsZW5kaW5nOiBwcm9wcy52aXNTdGF0ZS5vdmVybGF5QmxlbmRpbmcsXG5cbiAgd2lkdGg6IHByb3BzLnNpZGVQYW5lbFdpZHRoID8gcHJvcHMuc2lkZVBhbmVsV2lkdGggOiBERUZBVUxUX0tFUExFUl9HTF9QUk9QUy53aWR0aCxcbiAgYXZhaWxhYmxlUHJvdmlkZXJzLFxuICBtYXBTYXZlZDogcHJvcHMucHJvdmlkZXJTdGF0ZS5tYXBTYXZlZFxufSk7XG5cbmV4cG9ydCBjb25zdCBwbG90Q29udGFpbmVyU2VsZWN0b3IgPSAocHJvcHM6IEtlcGxlckdMUHJvcHMpID0+ICh7XG4gIHdpZHRoOiBwcm9wcy53aWR0aCxcbiAgaGVpZ2h0OiBwcm9wcy5oZWlnaHQsXG4gIGV4cG9ydEltYWdlU2V0dGluZzogcHJvcHMudWlTdGF0ZS5leHBvcnRJbWFnZSxcbiAgbWFwRmllbGRzOiBtYXBGaWVsZHNTZWxlY3Rvcihwcm9wcyksXG4gIGFkZE5vdGlmaWNhdGlvbjogcHJvcHMudWlTdGF0ZUFjdGlvbnMuYWRkTm90aWZpY2F0aW9uLFxuICBzZXRFeHBvcnRJbWFnZVNldHRpbmc6IHByb3BzLnVpU3RhdGVBY3Rpb25zLnNldEV4cG9ydEltYWdlU2V0dGluZyxcbiAgc2V0RXhwb3J0SW1hZ2VEYXRhVXJpOiBwcm9wcy51aVN0YXRlQWN0aW9ucy5zZXRFeHBvcnRJbWFnZURhdGFVcmksXG4gIHNldEV4cG9ydEltYWdlRXJyb3I6IHByb3BzLnVpU3RhdGVBY3Rpb25zLnNldEV4cG9ydEltYWdlRXJyb3IsXG4gIHNwbGl0TWFwczogcHJvcHMudmlzU3RhdGUuc3BsaXRNYXBzXG59KTtcblxuZXhwb3J0IGNvbnN0IGlzU3BsaXRTZWxlY3RvciA9IChwcm9wczogS2VwbGVyR0xQcm9wcykgPT5cbiAgcHJvcHMudmlzU3RhdGUuc3BsaXRNYXBzICYmIHByb3BzLnZpc1N0YXRlLnNwbGl0TWFwcy5sZW5ndGggPiAxO1xuXG5leHBvcnQgY29uc3QgYm90dG9tV2lkZ2V0U2VsZWN0b3IgPSAocHJvcHM6IEtlcGxlckdMUHJvcHMsIHRoZW1lKSA9PiAoe1xuICBmaWx0ZXJzOiBwcm9wcy52aXNTdGF0ZS5maWx0ZXJzLFxuICBkYXRhc2V0czogcHJvcHMudmlzU3RhdGUuZGF0YXNldHMsXG4gIHVpU3RhdGU6IHByb3BzLnVpU3RhdGUsXG4gIGxheWVyczogcHJvcHMudmlzU3RhdGUubGF5ZXJzLFxuICBhbmltYXRpb25Db25maWc6IHByb3BzLnZpc1N0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgdmlzU3RhdGVBY3Rpb25zOiBwcm9wcy52aXNTdGF0ZUFjdGlvbnMsXG4gIHRvZ2dsZU1vZGFsOiBwcm9wcy51aVN0YXRlQWN0aW9ucy50b2dnbGVNb2RhbCxcbiAgc2lkZVBhbmVsV2lkdGg6IHByb3BzLnVpU3RhdGUucmVhZE9ubHkgPyAwIDogcHJvcHMuc2lkZVBhbmVsV2lkdGggKyB0aGVtZS5zaWRlUGFuZWwubWFyZ2luLmxlZnRcbn0pO1xuXG5leHBvcnQgY29uc3QgbW9kYWxDb250YWluZXJTZWxlY3RvciA9IChwcm9wczogS2VwbGVyR0xQcm9wcywgcm9vdE5vZGUpID0+ICh7XG4gIGFwcE5hbWU6IHByb3BzLmFwcE5hbWUgPyBwcm9wcy5hcHBOYW1lIDogREVGQVVMVF9LRVBMRVJfR0xfUFJPUFMuYXBwTmFtZSxcbiAgbWFwU3R5bGU6IHByb3BzLm1hcFN0eWxlLFxuICB2aXNTdGF0ZTogcHJvcHMudmlzU3RhdGUsXG4gIG1hcFN0YXRlOiBwcm9wcy5tYXBTdGF0ZSxcbiAgdWlTdGF0ZTogcHJvcHMudWlTdGF0ZSxcbiAgcHJvdmlkZXJTdGF0ZTogcHJvcHMucHJvdmlkZXJTdGF0ZSxcblxuICBtYXBib3hBcGlBY2Nlc3NUb2tlbjogcHJvcHMubWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gIG1hcGJveEFwaVVybDogcHJvcHMubWFwYm94QXBpVXJsLFxuICB2aXNTdGF0ZUFjdGlvbnM6IHByb3BzLnZpc1N0YXRlQWN0aW9ucyxcbiAgdWlTdGF0ZUFjdGlvbnM6IHByb3BzLnVpU3RhdGVBY3Rpb25zLFxuICBtYXBTdHlsZUFjdGlvbnM6IHByb3BzLm1hcFN0eWxlQWN0aW9ucyxcbiAgcHJvdmlkZXJBY3Rpb25zOiBwcm9wcy5wcm92aWRlckFjdGlvbnMsXG5cbiAgcm9vdE5vZGUsXG4gIC8vIFVzZXIgZGVmaW5lZCBjbG91ZCBwcm92aWRlciBwcm9wc1xuICBjbG91ZFByb3ZpZGVyczogcHJvcHMuY2xvdWRQcm92aWRlcnNcbiAgICA/IHByb3BzLmNsb3VkUHJvdmlkZXJzXG4gICAgOiBERUZBVUxUX0tFUExFUl9HTF9QUk9QUy5jbG91ZFByb3ZpZGVycyxcbiAgb25FeHBvcnRUb0Nsb3VkU3VjY2VzczogcHJvcHMub25FeHBvcnRUb0Nsb3VkU3VjY2VzcyxcbiAgb25Mb2FkQ2xvdWRNYXBTdWNjZXNzOiBwcm9wcy5vbkxvYWRDbG91ZE1hcFN1Y2Nlc3MsXG4gIG9uTG9hZENsb3VkTWFwRXJyb3I6IHByb3BzLm9uTG9hZENsb3VkTWFwRXJyb3IsXG4gIG9uRXhwb3J0VG9DbG91ZEVycm9yOiBwcm9wcy5vbkV4cG9ydFRvQ2xvdWRFcnJvclxufSk7XG5cbmV4cG9ydCBjb25zdCBnZW9Db2RlclBhbmVsU2VsZWN0b3IgPSAoXG4gIHByb3BzOiBLZXBsZXJHTFByb3BzLFxuICBkaW1lbnNpb25zOiB7d2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXJ9XG4pID0+ICh7XG4gIGlzR2VvY29kZXJFbmFibGVkOiBwcm9wcy52aXNTdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZy5nZW9jb2Rlci5lbmFibGVkLFxuICBtYXBib3hBcGlBY2Nlc3NUb2tlbjogcHJvcHMubWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gIG1hcFN0YXRlOiBwcm9wcy5tYXBTdGF0ZSxcbiAgdWlTdGF0ZTogcHJvcHMudWlTdGF0ZSxcbiAgbGF5ZXJPcmRlcjogcHJvcHMudmlzU3RhdGUubGF5ZXJPcmRlcixcbiAgdXBkYXRlVmlzRGF0YTogcHJvcHMudmlzU3RhdGVBY3Rpb25zLnVwZGF0ZVZpc0RhdGEsXG4gIHJlbW92ZURhdGFzZXQ6IHByb3BzLnZpc1N0YXRlQWN0aW9ucy5yZW1vdmVEYXRhc2V0LFxuICB1cGRhdGVNYXA6IHByb3BzLm1hcFN0YXRlQWN0aW9ucy51cGRhdGVNYXAsXG4gIGFwcFdpZHRoOiBkaW1lbnNpb25zLndpZHRoXG59KTtcblxuLyoqXG4gKiBSZXR1cm5zIGFycmF5IG9mIHVuaXF1ZSBkYXRhc2V0IGF0dHJpYnV0aW9ucywgZWFjaCB3aXRoIHRpdGxlIGFuZCB1cmwgcHJvcGVydGllcy5cbiAqL1xuZXhwb3J0IGNvbnN0IGRhdGFzZXRBdHRyaWJ1dGlvblNlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gIFtzdGF0ZSA9PiBzdGF0ZS52aXNTdGF0ZS5kYXRhc2V0c10sXG4gIGRhdGFzZXRzID0+IHtcbiAgICBjb25zdCB1bmlxdWVBdHRyaWJ1dGlvbnM6IERhdGFzZXRBdHRyaWJ1dGlvbltdID0gW107XG4gICAgT2JqZWN0LmtleXMoZGF0YXNldHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGNvbnN0IGRzID0gZGF0YXNldHNba2V5XTtcbiAgICAgIGNvbnN0IGF0dHJpYnV0aW9ucyA9IGRzPy5tZXRhZGF0YT8uYXR0cmlidXRpb25zO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXR0cmlidXRpb25zKSkge1xuICAgICAgICBhdHRyaWJ1dGlvbnMuZm9yRWFjaChhdHRyaWJ1dGlvbiA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBhdHRyaWJ1dGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIC8vIGF0dHJpYnV0aW9uIGNhbiBiZSBhIHJhdyBzdHJpbmcgb3IgYSBzdHJpbmcgd2l0aCBsaW5rIHRhZ3NcbiAgICAgICAgICAgIGNvbnN0IGxpbmtzID0gYXR0cmlidXRpb24ubWF0Y2goLzxhW15dKz9hPi9nKTtcbiAgICAgICAgICAgIGlmIChsaW5rcykge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxpbmtzPy5mb3JFYWNoKGxpbmsgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgaHJlZiA9IGxpbmsubWF0Y2goL2hyZWY9XCIoW15cIl0qKS8pPy5bMV07XG4gICAgICAgICAgICAgICAgICBjb25zdCB0aXRsZSA9IGxpbmsubWF0Y2goL3RpdGxlPVwiKFteXCJdKikvKT8uWzFdO1xuICAgICAgICAgICAgICAgICAgaWYgKGhyZWYgJiYgdGl0bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdW5pcXVlQXR0cmlidXRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBgJHtsaW5rLmluZGV4T2YoJyZjb3B5OycpID49IDAgPyAnwqkgJyA6ICcnfSR7dGl0bGV9YCxcbiAgICAgICAgICAgICAgICAgICAgICB1cmw6IGhyZWZcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgLy8ganVzdCBpZ25vcmUgZm9yIG5vd1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB1bmlxdWVBdHRyaWJ1dGlvbnMucHVzaCh7dGl0bGU6IGF0dHJpYnV0aW9uLCB1cmw6IG51bGx9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB1bmlxdWVBdHRyaWJ1dGlvbnM7XG4gIH1cbik7XG5cbi8qKlxuICogRGVkdXBsaWNhdGVkIGRhdGFzZXQgYW5kIGxheWVyIHRleHQgYXR0cmlidXRpb25zIGFuZCBsb2dvcy5cbiAqIFJldHVybnMgdGV4dCBhdHRyaWJ1dGlvbnMgYW5kIGxvZ29zIHRvIGRpc3BsYXkuXG4gKi9cbmV4cG9ydCBjb25zdCBhdHRyaWJ1dGlvblNlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gIFtkYXRhc2V0QXR0cmlidXRpb25TZWxlY3Rvcl0sXG4gIGRhdGFzZXRBdHRyaWJ1dGlvbnMgPT4ge1xuICAgIC8vIFRPRE8gY29sbGVjdCBhdHRyaWJ1dGlvbnMgZnJvbSBsYXllcnMsIGFuZCBtZXJnZSB3aXRoIGRhdGFzZXQgYXR0cmlidXRpb25zIGhlcmVcbiAgICBjb25zdCB1bmlxdWVUZXh0QXR0cmlidXRpb25zID0gZGF0YXNldEF0dHJpYnV0aW9ucztcbiAgICBjb25zdCBsb2dvczogQXR0cmlidXRpb25XaXRoU3R5bGVbXSA9IFtdO1xuXG4gICAgcmV0dXJuIHtzb3VyY2VzOiB1bmlxdWVUZXh0QXR0cmlidXRpb25zLCBsb2dvc307XG4gIH1cbik7XG5cbmV4cG9ydCBjb25zdCBub3RpZmljYXRpb25QYW5lbFNlbGVjdG9yID0gKHByb3BzOiBLZXBsZXJHTFByb3BzKSA9PiAoe1xuICByZW1vdmVOb3RpZmljYXRpb246IHByb3BzLnVpU3RhdGVBY3Rpb25zLnJlbW92ZU5vdGlmaWNhdGlvbixcbiAgbm90aWZpY2F0aW9uczogcHJvcHMudWlTdGF0ZS5ub3RpZmljYXRpb25zXG59KTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfS0VQTEVSX0dMX1BST1BTID0ge1xuICBtYXBTdHlsZXM6IFtdLFxuICBtYXBTdHlsZXNSZXBsYWNlRGVmYXVsdDogZmFsc2UsXG4gIG1hcGJveEFwaVVybDogREVGQVVMVF9NQVBCT1hfQVBJX1VSTCxcbiAgd2lkdGg6IDgwMCxcbiAgaGVpZ2h0OiA4MDAsXG4gIGFwcE5hbWU6IEtFUExFUl9HTF9OQU1FLFxuICB2ZXJzaW9uOiBLRVBMRVJfR0xfVkVSU0lPTixcbiAgc2lkZVBhbmVsV2lkdGg6IERJTUVOU0lPTlMuc2lkZVBhbmVsLndpZHRoLFxuICB0aGVtZToge30sXG4gIGNsb3VkUHJvdmlkZXJzOiBbXSxcbiAgcmVhZE9ubHk6IGZhbHNlLFxuICBmZWF0dXJlRmxhZ3M6IHt9XG59O1xuXG50eXBlIEtlcGxlckdMQmFzaWNQcm9wcyA9IHtcbiAgbWFwYm94QXBpQWNjZXNzVG9rZW46IHN0cmluZztcbiAgbWFwYm94QXBpVXJsPzogc3RyaW5nO1xuICBpZDogc3RyaW5nO1xuICB3aWR0aD86IG51bWJlcjtcbiAgaGVpZ2h0PzogbnVtYmVyO1xuXG4gIGFwcFdlYnNpdGU/OiBhbnk7XG4gIG9uU2F2ZU1hcD86ICgpID0+IHZvaWQ7XG4gIG9uVmlld1N0YXRlQ2hhbmdlPzogKHZpZXdTdGF0ZTogVmlld3BvcnQpID0+IHZvaWQ7XG4gIG9uRGVja0luaXRpYWxpemVkPzogKCkgPT4gdm9pZDtcbiAgb25LZXBsZXJHbEluaXRpYWxpemVkPzogKCkgPT4gdm9pZDtcbiAgZ2V0TWFwYm94UmVmPzogKCkgPT4gUmVhY3QuUmVmT2JqZWN0PGFueT47XG4gIG1hcFN0eWxlcz86IHtpZDogc3RyaW5nOyBzdHlsZT86IG9iamVjdH1bXTtcbiAgbWFwU3R5bGVzUmVwbGFjZURlZmF1bHQ/OiBib29sZWFuO1xuICBhcHBOYW1lPzogc3RyaW5nO1xuICB2ZXJzaW9uPzogc3RyaW5nO1xuICBzaWRlUGFuZWxXaWR0aD86IG51bWJlcjtcbiAgdGhlbWU/OiBvYmplY3Q7XG4gIGNsb3VkUHJvdmlkZXJzPzogUHJvdmlkZXJbXTtcbiAgZGVja0dsUHJvcHM/OiBvYmplY3Q7XG4gIG9uTG9hZENsb3VkTWFwU3VjY2Vzcz86IE9uU3VjY2Vzc0NhbGxCYWNrO1xuICBvbkxvYWRDbG91ZE1hcEVycm9yPzogT25FcnJvckNhbGxCYWNrO1xuICBvbk1vdXNlTW92ZT86IChldmVudDogUmVhY3QuTW91c2VFdmVudCAmIHtsbmdMYXQ/OiBbbnVtYmVyLCBudW1iZXJdfSkgPT4gdm9pZDtcbiAgb25FeHBvcnRUb0Nsb3VkU3VjY2Vzcz86IE9uU3VjY2Vzc0NhbGxCYWNrO1xuICBvbkV4cG9ydFRvQ2xvdWRFcnJvcj86IE9uRXJyb3JDYWxsQmFjaztcbiAgcmVhZE9ubHk/OiBib29sZWFuO1xuICBmZWF0dXJlRmxhZ3M/OiBGZWF0dXJlRmxhZ3M7XG5cbiAgbG9jYWxlTWVzc2FnZXM/OiB7W2tleTogc3RyaW5nXToge1trZXk6IHN0cmluZ106IHN0cmluZ319O1xuICBkaXNwYXRjaDogRGlzcGF0Y2g8YW55PjtcblxuICB0b3BNYXBDb250YWluZXJQcm9wcz86IG9iamVjdDtcbiAgYm90dG9tTWFwQ29udGFpbmVyUHJvcHM/OiBvYmplY3Q7XG5cbiAgdHJhbnNmb3JtUmVxdWVzdD86ICh1cmw6IHN0cmluZykgPT4ge3VybDogc3RyaW5nfTtcbn07XG5cbnR5cGUgS2VwbGVyR0xQcm9wcyA9IEtlcGxlckdsU3RhdGUgJiBLZXBsZXJHbEFjdGlvbnMgJiBLZXBsZXJHTEJhc2ljUHJvcHM7XG50eXBlIEtlcGxlckdMQ29tcFN0YXRlID0ge1xuICBkaW1lbnNpb25zOiB7d2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXJ9IHwgbnVsbDtcbn07XG5cbktlcGxlckdsRmFjdG9yeS5kZXBzID0gW1xuICBCb3R0b21XaWRnZXRGYWN0b3J5LFxuICBHZW9Db2RlclBhbmVsRmFjdG9yeSxcbiAgTWFwQ29udGFpbmVyRmFjdG9yeSxcbiAgTWFwc0xheW91dEZhY3RvcnksXG4gIE1vZGFsQ29udGFpbmVyRmFjdG9yeSxcbiAgU2lkZVBhbmVsRmFjdG9yeSxcbiAgUGxvdENvbnRhaW5lckZhY3RvcnksXG4gIE5vdGlmaWNhdGlvblBhbmVsRmFjdG9yeSxcbiAgRG5kQ29udGV4dEZhY3RvcnksXG4gIEVmZmVjdE1hbmFnZXJGYWN0b3J5XG5dO1xuXG5mdW5jdGlvbiBLZXBsZXJHbEZhY3RvcnkoXG4gIEJvdHRvbVdpZGdldDogUmV0dXJuVHlwZTx0eXBlb2YgQm90dG9tV2lkZ2V0RmFjdG9yeT4sXG4gIEdlb0NvZGVyUGFuZWw6IFJldHVyblR5cGU8dHlwZW9mIEdlb0NvZGVyUGFuZWxGYWN0b3J5PixcbiAgTWFwQ29udGFpbmVyOiBSZXR1cm5UeXBlPHR5cGVvZiBNYXBDb250YWluZXJGYWN0b3J5PixcbiAgTWFwc0xheW91dDogUmV0dXJuVHlwZTx0eXBlb2YgTWFwc0xheW91dEZhY3Rvcnk+LFxuICBNb2RhbENvbnRhaW5lcjogUmV0dXJuVHlwZTx0eXBlb2YgTW9kYWxDb250YWluZXJGYWN0b3J5PixcbiAgU2lkZVBhbmVsOiBSZXR1cm5UeXBlPHR5cGVvZiBTaWRlUGFuZWxGYWN0b3J5PixcbiAgUGxvdENvbnRhaW5lcjogUmV0dXJuVHlwZTx0eXBlb2YgUGxvdENvbnRhaW5lckZhY3Rvcnk+LFxuICBOb3RpZmljYXRpb25QYW5lbDogUmV0dXJuVHlwZTx0eXBlb2YgTm90aWZpY2F0aW9uUGFuZWxGYWN0b3J5PixcbiAgRG5kQ29udGV4dDogUmV0dXJuVHlwZTx0eXBlb2YgRG5kQ29udGV4dEZhY3Rvcnk+XG4pOiBSZWFjdC5Db21wb25lbnRUeXBlPEtlcGxlckdMQmFzaWNQcm9wcyAmIHtzZWxlY3RvcjogKC4uLmFyZ3M6IGFueVtdKSA9PiBLZXBsZXJHbFN0YXRlfT4ge1xuICAvKiogQHR5cGVkZWYge2ltcG9ydCgnLi9rZXBsZXItZ2wnKS5VbmNvbm5lY3RlZEtlcGxlckdsUHJvcHN9IEtlcGxlckdsUHJvcHMgKi9cbiAgLyoqIEBhdWdtZW50cyBSZWFjdC5Db21wb25lbnQ8S2VwbGVyR2xQcm9wcz4gKi9cbiAgY2xhc3MgS2VwbGVyR0wgZXh0ZW5kcyBDb21wb25lbnQ8XG4gICAgS2VwbGVyR0xQcm9wcyAmIHtzZWxlY3RvcjogKC4uLmFyZ3M6IGFueVtdKSA9PiBLZXBsZXJHbFN0YXRlfSxcbiAgICBLZXBsZXJHTENvbXBTdGF0ZVxuICA+IHtcbiAgICBzdGF0aWMgZGVmYXVsdFByb3BzID0gREVGQVVMVF9LRVBMRVJfR0xfUFJPUFM7XG5cbiAgICBzdGF0ZTogS2VwbGVyR0xDb21wU3RhdGUgPSB7XG4gICAgICBkaW1lbnNpb25zOiBudWxsXG4gICAgfTtcblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgaWYgKGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuYmFzZU1hcExpYnJhcnlDb25maWc/LlsnbWFwYm94J10/Lm1hcExpYk5hbWUgPT09ICdNYXBib3gnKSB7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlTWFwYm94VG9rZW4oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2xvYWRNYXBTdHlsZSgpO1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLm9uS2VwbGVyR2xJbml0aWFsaXplZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnByb3BzLm9uS2VwbGVyR2xJbml0aWFsaXplZCgpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucm9vdC5jdXJyZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgb2JzZXJ2ZURpbWVuc2lvbnModGhpcy5yb290LmN1cnJlbnQsIHRoaXMuX2hhbmRsZVJlc2l6ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5yb290LmN1cnJlbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICB1bm9ic2VydmVEaW1lbnNpb25zKHRoaXMucm9vdC5jdXJyZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBfaGFuZGxlUmVzaXplID0gZGltZW5zaW9ucyA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtkaW1lbnNpb25zfSk7XG4gICAgfTtcblxuICAgIHN0YXRpYyBjb250ZXh0VHlwZSA9IFJvb3RDb250ZXh0O1xuXG4gICAgcm9vdCA9IGNyZWF0ZVJlZjxIVE1MRGl2RWxlbWVudD4oKTtcbiAgICBib3R0b21XaWRnZXRSZWYgPSBjcmVhdGVSZWY8SFRNTERpdkVsZW1lbnQ+KCk7XG5cbiAgICAvKiBzZWxlY3RvcnMgKi9cbiAgICB0aGVtZVNlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMudGhlbWU7XG4gICAgYXZhaWxhYmxlVGhlbWVTZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKHRoaXMudGhlbWVTZWxlY3RvciwgdGhlbWUgPT5cbiAgICAgIHR5cGVvZiB0aGVtZSA9PT0gJ29iamVjdCdcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5iYXNpY1RoZW1lLFxuICAgICAgICAgICAgLi4udGhlbWVcbiAgICAgICAgICB9XG4gICAgICAgIDogdGhlbWUgPT09IFRIRU1FLmxpZ2h0XG4gICAgICAgID8gdGhlbWVMVFxuICAgICAgICA6IHRoZW1lID09PSBUSEVNRS5iYXNlXG4gICAgICAgID8gdGhlbWVCU1xuICAgICAgICA6IHRoZW1lXG4gICAgKTtcblxuICAgIGRhdGFzZXRzU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy52aXNTdGF0ZS5kYXRhc2V0cztcbiAgICBmaWx0ZXJlZERhdGFzZXRzU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3Rvcih0aGlzLmRhdGFzZXRzU2VsZWN0b3IsIGdldFZpc2libGVEYXRhc2V0cyk7XG5cbiAgICBhdmFpbGFibGVQcm92aWRlcnMgPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIChwcm9wczogS2VwbGVyR0xQcm9wcykgPT4gcHJvcHMuY2xvdWRQcm92aWRlcnMsXG4gICAgICBwcm92aWRlcnMgPT5cbiAgICAgICAgQXJyYXkuaXNBcnJheShwcm92aWRlcnMpICYmIHByb3ZpZGVycy5sZW5ndGhcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgaGFzU3RvcmFnZTogcHJvdmlkZXJzLnNvbWUocCA9PiBwLmhhc1ByaXZhdGVTdG9yYWdlKCkpLFxuICAgICAgICAgICAgICBoYXNTaGFyZTogcHJvdmlkZXJzLnNvbWUocCA9PiBwLmhhc1NoYXJpbmdVcmwoKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHt9XG4gICAgKTtcblxuICAgIGxvY2FsZU1lc3NhZ2VzU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIChwcm9wczogS2VwbGVyR0xQcm9wcykgPT4gcHJvcHMubG9jYWxlTWVzc2FnZXMsXG4gICAgICBjdXN0b21NZXNzYWdlcyA9PiAoY3VzdG9tTWVzc2FnZXMgPyBtZXJnZU1lc3NhZ2VzKG1lc3NhZ2VzLCBjdXN0b21NZXNzYWdlcykgOiBtZXNzYWdlcylcbiAgICApO1xuXG4gICAgLyogcHJpdmF0ZSBtZXRob2RzICovXG4gICAgX3ZhbGlkYXRlTWFwYm94VG9rZW4oKSB7XG4gICAgICBjb25zdCB7bWFwYm94QXBpQWNjZXNzVG9rZW59ID0gdGhpcy5wcm9wcztcbiAgICAgIGlmICghdmFsaWRhdGVUb2tlbihtYXBib3hBcGlBY2Nlc3NUb2tlbikpIHtcbiAgICAgICAgQ29uc29sZS53YXJuKE1JU1NJTkdfTUFQQk9YX1RPS0VOKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBfbG9hZE1hcFN0eWxlID0gKCkgPT4ge1xuICAgICAgY29uc3QgZGVmYXVsdFN0eWxlcyA9IE9iamVjdC52YWx1ZXModGhpcy5wcm9wcy5tYXBTdHlsZS5tYXBTdHlsZXMpO1xuICAgICAgLy8gYWRkIGlkIHRvIGN1c3RvbSBtYXAgc3R5bGVzIGlmIG5vdCBnaXZlblxuICAgICAgY29uc3QgY3VzdG9tU3R5bGVzID0gKHRoaXMucHJvcHMubWFwU3R5bGVzIHx8IFtdKS5tYXAobXMgPT4gKHtcbiAgICAgICAgLi4ubXMsXG4gICAgICAgIGlkOiBtcy5pZCB8fCBnZW5lcmF0ZUhhc2hJZCgpXG4gICAgICB9KSk7XG5cbiAgICAgIGNvbnN0IGFsbFN0eWxlcyA9IFsuLi5jdXN0b21TdHlsZXMsIC4uLmRlZmF1bHRTdHlsZXNdLnJlZHVjZSgoYWNjdSwgc3R5bGUpID0+IHtcbiAgICAgICAgYWNjdVtzdHlsZS5pZF0gPSBzdHlsZTtcbiAgICAgICAgcmV0dXJuIGFjY3U7XG4gICAgICB9LCB7fSk7XG5cbiAgICAgIHRoaXMucHJvcHMubWFwU3R5bGVBY3Rpb25zLmxvYWRNYXBTdHlsZXMoYWxsU3R5bGVzKTtcbiAgICB9O1xuXG4gICAgX2RlbGV0ZU1hcExhYmVscyA9IChjb250YWluZXJJZCwgbGF5ZXJJZCkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMudG9nZ2xlTGF5ZXJGb3JNYXAoY29udGFpbmVySWQsIGxheWVySWQpO1xuICAgIH07XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgaWQgPSAnbWFwJyxcbiAgICAgICAgd2lkdGggPSBERUZBVUxUX0tFUExFUl9HTF9QUk9QUy53aWR0aCxcbiAgICAgICAgaGVpZ2h0ID0gREVGQVVMVF9LRVBMRVJfR0xfUFJPUFMuaGVpZ2h0LFxuICAgICAgICB1aVN0YXRlLFxuICAgICAgICB2aXNTdGF0ZSxcbiAgICAgICAgLy8gcmVhZE9ubHkgb3ZlcnJpZGVcbiAgICAgICAgcmVhZE9ubHksXG5cbiAgICAgICAgLy8gZmVhdHVyZXNcbiAgICAgICAgZmVhdHVyZUZsYWdzLFxuXG4gICAgICAgIC8vIGNsb3VkIHByb3ZpZGVyc1xuICAgICAgICBjbG91ZFByb3ZpZGVycyA9IFtdXG4gICAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgY29uc3QgZGltZW5zaW9ucyA9IHRoaXMuc3RhdGUuZGltZW5zaW9ucyB8fCB7d2lkdGgsIGhlaWdodH07XG4gICAgICBjb25zdCB7XG4gICAgICAgIHNwbGl0TWFwcywgLy8gdGhpcyB3aWxsIHN0b3JlIHN1cHBvcnQgZm9yIHNwbGl0IG1hcCB2aWV3IGlzIG5lY2Vzc2FyeVxuICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZ1xuICAgICAgfSA9IHZpc1N0YXRlO1xuXG4gICAgICBjb25zdCBpc1NwbGl0ID0gaXNTcGxpdFNlbGVjdG9yKHRoaXMucHJvcHMpO1xuICAgICAgY29uc3QgdGhlbWUgPSB0aGlzLmF2YWlsYWJsZVRoZW1lU2VsZWN0b3IodGhpcy5wcm9wcyk7XG4gICAgICBjb25zdCBsb2NhbGVNZXNzYWdlcyA9IHRoaXMubG9jYWxlTWVzc2FnZXNTZWxlY3Rvcih0aGlzLnByb3BzKTtcbiAgICAgIGNvbnN0IGlzRXhwb3J0aW5nSW1hZ2UgPSB1aVN0YXRlLmV4cG9ydEltYWdlLmV4cG9ydGluZztcbiAgICAgIGNvbnN0IGF2YWlsYWJsZVByb3ZpZGVycyA9IHRoaXMuYXZhaWxhYmxlUHJvdmlkZXJzKHRoaXMucHJvcHMpO1xuXG4gICAgICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gdGhpcy5maWx0ZXJlZERhdGFzZXRzU2VsZWN0b3IodGhpcy5wcm9wcyk7XG4gICAgICBjb25zdCBzaWRlRmllbGRzID0gc2lkZVBhbmVsU2VsZWN0b3IodGhpcy5wcm9wcywgYXZhaWxhYmxlUHJvdmlkZXJzLCBmaWx0ZXJlZERhdGFzZXRzKTtcbiAgICAgIGNvbnN0IHBsb3RDb250YWluZXJGaWVsZHMgPSBwbG90Q29udGFpbmVyU2VsZWN0b3IodGhpcy5wcm9wcyk7XG4gICAgICBjb25zdCBib3R0b21XaWRnZXRGaWVsZHMgPSBib3R0b21XaWRnZXRTZWxlY3Rvcih0aGlzLnByb3BzLCB0aGVtZSk7XG4gICAgICBjb25zdCBtb2RhbENvbnRhaW5lckZpZWxkcyA9IG1vZGFsQ29udGFpbmVyU2VsZWN0b3IodGhpcy5wcm9wcywgdGhpcy5yb290LmN1cnJlbnQpO1xuICAgICAgY29uc3QgZ2VvQ29kZXJQYW5lbEZpZWxkcyA9IGdlb0NvZGVyUGFuZWxTZWxlY3Rvcih0aGlzLnByb3BzLCBkaW1lbnNpb25zKTtcbiAgICAgIGNvbnN0IG5vdGlmaWNhdGlvblBhbmVsRmllbGRzID0gbm90aWZpY2F0aW9uUGFuZWxTZWxlY3Rvcih0aGlzLnByb3BzKTtcblxuICAgICAgY29uc3QgbWFwQ29udGFpbmVycyA9ICFpc1NwbGl0XG4gICAgICAgID8gW1xuICAgICAgICAgICAgPE1hcENvbnRhaW5lclxuICAgICAgICAgICAgICBwcmltYXJ5PXt0cnVlfVxuICAgICAgICAgICAgICBrZXk9ezB9XG4gICAgICAgICAgICAgIGluZGV4PXswfVxuICAgICAgICAgICAgICB7Li4ubWFwRmllbGRzU2VsZWN0b3IodGhpcy5wcm9wcyl9XG4gICAgICAgICAgICAgIGNvbnRhaW5lcklkPXswfVxuICAgICAgICAgICAgICBkZWxldGVNYXBMYWJlbHM9e3RoaXMuX2RlbGV0ZU1hcExhYmVsc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgXVxuICAgICAgICA6IHNwbGl0TWFwcy5tYXAoKHNldHRpbmdzLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPE1hcENvbnRhaW5lclxuICAgICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgICAgICAgIHByaW1hcnk9e2luZGV4ID09PSAxfVxuICAgICAgICAgICAgICB7Li4ubWFwRmllbGRzU2VsZWN0b3IodGhpcy5wcm9wcywgaW5kZXgpfVxuICAgICAgICAgICAgICBjb250YWluZXJJZD17aW5kZXh9XG4gICAgICAgICAgICAgIGRlbGV0ZU1hcExhYmVscz17dGhpcy5fZGVsZXRlTWFwTGFiZWxzfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApKTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFJvb3RDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt0aGlzLnJvb3R9PlxuICAgICAgICAgIDxGZWF0dXJlRmxhZ3NDb250ZXh0UHJvdmlkZXIgZmVhdHVyZUZsYWdzPXtmZWF0dXJlRmxhZ3N9PlxuICAgICAgICAgICAgPEludGxQcm92aWRlciBsb2NhbGU9e3VpU3RhdGUubG9jYWxlfSBtZXNzYWdlcz17bG9jYWxlTWVzc2FnZXNbdWlTdGF0ZS5sb2NhbGVdfT5cbiAgICAgICAgICAgICAgPFN0eWxlU2hlZXRNYW5hZ2VyIHNob3VsZEZvcndhcmRQcm9wPXtzaG91bGRGb3J3YXJkUHJvcH0+XG4gICAgICAgICAgICAgICAgPFRoZW1lUHJvdmlkZXIgdGhlbWU9e3RoZW1lfT5cbiAgICAgICAgICAgICAgICAgIDxDbG91ZExpc3RQcm92aWRlciBwcm92aWRlcnM9e2Nsb3VkUHJvdmlkZXJzfT5cbiAgICAgICAgICAgICAgICAgICAgPEdsb2JhbFN0eWxlXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwia2VwbGVyLWdsXCJcbiAgICAgICAgICAgICAgICAgICAgICBpZD17YGtlcGxlci1nbF9fJHtpZH1gfVxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGAke3dpZHRofXB4YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogYCR7aGVpZ2h0fXB4YFxuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgcmVmPXt0aGlzLnJvb3R9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8Tm90aWZpY2F0aW9uUGFuZWwgey4uLm5vdGlmaWNhdGlvblBhbmVsRmllbGRzfSAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxEbmRDb250ZXh0IHZpc1N0YXRlPXt2aXNTdGF0ZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7IXVpU3RhdGUucmVhZE9ubHkgJiYgIXJlYWRPbmx5ICYmIDxTaWRlUGFuZWwgey4uLnNpZGVGaWVsZHN9IC8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgPE1hcHNMYXlvdXQgY2xhc3NOYW1lPVwibWFwc1wiIG1hcFN0YXRlPXt0aGlzLnByb3BzLm1hcFN0YXRlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge21hcENvbnRhaW5lcnN9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L01hcHNMYXlvdXQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9EbmRDb250ZXh0PlxuICAgICAgICAgICAgICAgICAgICAgIHtpc0V4cG9ydGluZ0ltYWdlICYmIDxQbG90Q29udGFpbmVyIHsuLi5wbG90Q29udGFpbmVyRmllbGRzfSAvPn1cbiAgICAgICAgICAgICAgICAgICAgICB7LyogMSBnZW9jb2Rlcjogc2luZ2xlIG1vZGUgT1Igc3BsaXQgbW9kZSBhbmQgc3luY2VkIHZpZXdwb3J0cyAqL31cbiAgICAgICAgICAgICAgICAgICAgICB7IWlzVmlld3BvcnREaXNqb2ludGVkKHRoaXMucHJvcHMpICYmIGludGVyYWN0aW9uQ29uZmlnLmdlb2NvZGVyLmVuYWJsZWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPEdlb0NvZGVyUGFuZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgey4uLmdlb0NvZGVyUGFuZWxGaWVsZHN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4PXswfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB1bnN5bmNlZFZpZXdwb3J0cz17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgey8qIDIgZ2VvY29kZXJzOiBzcGxpdCBtb2RlIGFuZCB1bnN5bmNlZCB2aWV3cG9ydHMgKi99XG4gICAgICAgICAgICAgICAgICAgICAge2lzVmlld3BvcnREaXNqb2ludGVkKHRoaXMucHJvcHMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZy5nZW9jb2Rlci5lbmFibGVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXBDb250YWluZXJzLm1hcCgoX21hcENvbnRhaW5lciwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEdlb0NvZGVyUGFuZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsuLi5nZW9Db2RlclBhbmVsRmllbGRzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnN5bmNlZFZpZXdwb3J0cz17dHJ1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICAgIDxCb3R0b21XaWRnZXRPdXRlciBhYnNvbHV0ZT17IWhhc1BvcnRhYmxlV2lkdGgoYnJlYWtQb2ludFZhbHVlcyl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPEJvdHRvbVdpZGdldFxuICAgICAgICAgICAgICAgICAgICAgICAgICByb290UmVmPXt0aGlzLmJvdHRvbVdpZGdldFJlZn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgey4uLmJvdHRvbVdpZGdldEZpZWxkc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyVz17ZGltZW5zaW9ucy53aWR0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWU9e3RoZW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L0JvdHRvbVdpZGdldE91dGVyPlxuICAgICAgICAgICAgICAgICAgICAgIDxNb2RhbENvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgey4uLm1vZGFsQ29udGFpbmVyRmllbGRzfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyVz17ZGltZW5zaW9ucy53aWR0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckg9e2RpbWVuc2lvbnMuaGVpZ2h0fVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvR2xvYmFsU3R5bGU+XG4gICAgICAgICAgICAgICAgICA8L0Nsb3VkTGlzdFByb3ZpZGVyPlxuICAgICAgICAgICAgICAgIDwvVGhlbWVQcm92aWRlcj5cbiAgICAgICAgICAgICAgPC9TdHlsZVNoZWV0TWFuYWdlcj5cbiAgICAgICAgICAgIDwvSW50bFByb3ZpZGVyPlxuICAgICAgICAgIDwvRmVhdHVyZUZsYWdzQ29udGV4dFByb3ZpZGVyPlxuICAgICAgICA8L1Jvb3RDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ga2VwbGVyR2xDb25uZWN0KFxuICAgIG1hcFN0YXRlVG9Qcm9wcyxcbiAgICBtYWtlTWFwRGlzcGF0Y2hUb1Byb3BzXG4gICkod2l0aFRoZW1lKEtlcGxlckdMKSkgYXMgUmV0dXJuVHlwZTx0eXBlb2YgS2VwbGVyR2xGYWN0b3J5Pjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZTogS2VwbGVyR2xTdGF0ZSwgcHJvcHM6IEtlcGxlckdMUHJvcHMpIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5wcm9wcyxcbiAgICB2aXNTdGF0ZTogc3RhdGUudmlzU3RhdGUsXG4gICAgbWFwU3R5bGU6IHN0YXRlLm1hcFN0eWxlLFxuICAgIG1hcFN0YXRlOiBzdGF0ZS5tYXBTdGF0ZSxcbiAgICB1aVN0YXRlOiBzdGF0ZS51aVN0YXRlLFxuICAgIHByb3ZpZGVyU3RhdGU6IHN0YXRlLnByb3ZpZGVyU3RhdGVcbiAgfTtcbn1cblxuY29uc3QgZGVmYXVsdFVzZXJBY3Rpb25zID0ge307XG5cbmNvbnN0IGdldERpc3BhdGNoID0gZGlzcGF0Y2ggPT4gZGlzcGF0Y2g7XG5jb25zdCBnZXRVc2VyQWN0aW9ucyA9IChkaXNwYXRjaCwgcHJvcHMpID0+IHByb3BzLmFjdGlvbnMgfHwgZGVmYXVsdFVzZXJBY3Rpb25zO1xuXG4vKiogQHR5cGUgeygpID0+IGltcG9ydCgncmVzZWxlY3QnKS5PdXRwdXRQYXJhbWV0cmljU2VsZWN0b3I8YW55LCBhbnksIGFueSwgYW55Pn0gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWtlR2V0QWN0aW9uQ3JlYXRvcnMoKSB7XG4gIHJldHVybiBjcmVhdGVTZWxlY3RvcihbZ2V0RGlzcGF0Y2gsIGdldFVzZXJBY3Rpb25zXSwgKGRpc3BhdGNoLCB1c2VyQWN0aW9ucykgPT4ge1xuICAgIGNvbnN0IFt2aXNTdGF0ZUFjdGlvbnMsIG1hcFN0YXRlQWN0aW9ucywgbWFwU3R5bGVBY3Rpb25zLCB1aVN0YXRlQWN0aW9ucywgcHJvdmlkZXJBY3Rpb25zXSA9IFtcbiAgICAgIFZpc1N0YXRlQWN0aW9ucyxcbiAgICAgIE1hcFN0YXRlQWN0aW9ucyxcbiAgICAgIE1hcFN0eWxlQWN0aW9ucyxcbiAgICAgIFVJU3RhdGVBY3Rpb25zLFxuICAgICAgUHJvdmlkZXJBY3Rpb25zXG4gICAgXS5tYXAoYWN0aW9ucyA9PiBiaW5kQWN0aW9uQ3JlYXRvcnMobWVyZ2VBY3Rpb25zKGFjdGlvbnMsIHVzZXJBY3Rpb25zKSwgZGlzcGF0Y2gpKTtcblxuICAgIHJldHVybiB7XG4gICAgICB2aXNTdGF0ZUFjdGlvbnMsXG4gICAgICBtYXBTdGF0ZUFjdGlvbnMsXG4gICAgICBtYXBTdHlsZUFjdGlvbnMsXG4gICAgICB1aVN0YXRlQWN0aW9ucyxcbiAgICAgIHByb3ZpZGVyQWN0aW9ucyxcbiAgICAgIGRpc3BhdGNoXG4gICAgfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG1ha2VNYXBEaXNwYXRjaFRvUHJvcHMoKSB7XG4gIGNvbnN0IGdldEFjdGlvbkNyZWF0b3JzID0gbWFrZUdldEFjdGlvbkNyZWF0b3JzKCk7XG4gIGNvbnN0IG1hcERpc3BhdGNoVG9Qcm9wcyA9IChkaXNwYXRjaCwgb3duUHJvcHMpID0+IHtcbiAgICBjb25zdCBncm91cGVkQWN0aW9uQ3JlYXRvcnMgPSBnZXRBY3Rpb25DcmVhdG9ycyhkaXNwYXRjaCwgb3duUHJvcHMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmdyb3VwZWRBY3Rpb25DcmVhdG9ycyxcbiAgICAgIGRpc3BhdGNoXG4gICAgfTtcbiAgfTtcblxuICByZXR1cm4gbWFwRGlzcGF0Y2hUb1Byb3BzO1xufVxuXG4vKipcbiAqIE92ZXJyaWRlIGRlZmF1bHQga2VwbGVyLmdsIGFjdGlvbnMgd2l0aCB1c2VyIGRlZmluZWQgYWN0aW9ucyB1c2luZyB0aGUgc2FtZSBrZXlcbiAqL1xuZnVuY3Rpb24gbWVyZ2VBY3Rpb25zKGFjdGlvbnMsIHVzZXJBY3Rpb25zKSB7XG4gIGNvbnN0IG92ZXJyaWRlcyA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBpbiB1c2VyQWN0aW9ucykge1xuICAgIGlmIChcbiAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh1c2VyQWN0aW9ucywga2V5KSAmJlxuICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFjdGlvbnMsIGtleSlcbiAgICApIHtcbiAgICAgIG92ZXJyaWRlc1trZXldID0gdXNlckFjdGlvbnNba2V5XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gey4uLmFjdGlvbnMsIC4uLm92ZXJyaWRlc307XG59XG5cbmV4cG9ydCBkZWZhdWx0IEtlcGxlckdsRmFjdG9yeTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFFBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLE1BQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLGlCQUFBLEdBQUFMLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxTQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxnQkFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sVUFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsYUFBQSxHQUFBUixPQUFBO0FBQ0EsSUFBQVMsUUFBQSxHQUFBVCxPQUFBO0FBU0EsSUFBQVUsUUFBQSxHQUFBVixPQUFBO0FBUUEsSUFBQVcsWUFBQSxHQUFBWCxPQUFBO0FBRUEsSUFBQVksa0JBQUEsR0FBQVosT0FBQTtBQVVBLElBQUFhLFVBQUEsR0FBQWIsT0FBQTtBQVVBLElBQUFjLFVBQUEsR0FBQVosc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFl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
|
|
585
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfY29uc29sZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcmVkdXgiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9yZXNlbGVjdCIsIl9rZXBsZXJnbENvbm5lY3QiLCJfcmVhY3RJbnRsIiwiX2xvY2FsaXphdGlvbiIsIl9jb250ZXh0IiwiX2FjdGlvbnMiLCJfY29tbW9uVXRpbHMiLCJfc3R5bGVkQ29tcG9uZW50czIiLCJfY29uc3RhbnRzIiwiX3NpZGVQYW5lbCIsIl9tYXBDb250YWluZXIyIiwiX21hcHNMYXlvdXQiLCJfYm90dG9tV2lkZ2V0IiwiX21vZGFsQ29udGFpbmVyIiwiX3Bsb3RDb250YWluZXIiLCJfbm90aWZpY2F0aW9uUGFuZWwiLCJfZ2VvY29kZXJQYW5lbCIsIl9lZmZlY3RNYW5hZ2VyIiwiX2RuZENvbnRleHQiLCJfdXNlQ2xvdWRMaXN0UHJvdmlkZXIiLCJfdXRpbHMiLCJfc3R5bGVzIiwiX3RlbXBsYXRlT2JqZWN0IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mMyIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIl9jYWxsU3VwZXIiLCJvIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJhcHBseSIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiR2xvYmFsU3R5bGUiLCJzdHlsZWQiLCJkaXYiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsInByb3BzIiwidGhlbWUiLCJmb250RmFtaWx5IiwiZm9udFdlaWdodCIsImZvbnRTaXplIiwibGluZUhlaWdodCIsImxhYmVsQ29sb3IiLCJCb3R0b21XaWRnZXRPdXRlciIsIl9yZWYiLCJhYnNvbHV0ZSIsImNvbmNhdCIsImlzVmlld3BvcnREaXNqb2ludGVkIiwiZXhwb3J0cyIsIm1hcFN0YXRlIiwiaXNTcGxpdCIsImlzVmlld3BvcnRTeW5jZWQiLCJzcGxpdE1hcFZpZXdwb3J0cyIsIm1hcFN0YXRlU2VsZWN0b3IiLCJjcmVhdGVTZWxlY3RvciIsIl8iLCJpbmRleCIsIk51bWJlciIsImlzRmluaXRlIiwibWFwRmllbGRzU2VsZWN0b3IiLCJ1bmRlZmluZWQiLCJnZXRNYXBib3hSZWYiLCJtYXBib3hBcGlBY2Nlc3NUb2tlbiIsIm1hcGJveEFwaVVybCIsIkRFRkFVTFRfS0VQTEVSX0dMX1BST1BTIiwiZGF0YXNldEF0dHJpYnV0aW9ucyIsImF0dHJpYnV0aW9uU2VsZWN0b3IiLCJzb3VyY2VzIiwibWFwU3R5bGUiLCJvbkRlY2tJbml0aWFsaXplZCIsIm9uVmlld1N0YXRlQ2hhbmdlIiwib25Nb3VzZU1vdmUiLCJkZWNrR2xQcm9wcyIsInVpU3RhdGVBY3Rpb25zIiwidmlzU3RhdGVBY3Rpb25zIiwibWFwU3RhdGVBY3Rpb25zIiwidmlzU3RhdGUiLCJhY3RpdmVTaWRlUGFuZWwiLCJ1aVN0YXRlIiwibWFwQ29udHJvbHMiLCJyZWFkT25seSIsImxvY2FsZSIsImlzTG9hZGluZ0luZGljYXRvclZpc2libGUiLCJsb2FkaW5nSW5kaWNhdG9yVmFsdWUiLCJzaWRlUGFuZWxXaWR0aCIsIndpZHRoIiwidG9wTWFwQ29udGFpbmVyUHJvcHMiLCJib3R0b21NYXBDb250YWluZXJQcm9wcyIsInRyYW5zZm9ybVJlcXVlc3QiLCJnZXRWaXNpYmxlRGF0YXNldHMiLCJkYXRhc2V0cyIsImZpbHRlck9iamVjdEJ5UHJlZGljYXRlIiwia2V5IiwiR0VPQ09ERVJfREFUQVNFVF9OQU1FIiwic2lkZVBhbmVsU2VsZWN0b3IiLCJhdmFpbGFibGVQcm92aWRlcnMiLCJmaWx0ZXJlZERhdGFzZXRzIiwiYXBwTmFtZSIsInZlcnNpb24iLCJhcHBXZWJzaXRlIiwib25TYXZlTWFwIiwibWFwU3R5bGVBY3Rpb25zIiwiZmlsdGVycyIsImxheWVycyIsImxheWVyT3JkZXIiLCJsYXllckNsYXNzZXMiLCJpbnRlcmFjdGlvbkNvbmZpZyIsIm1hcEluZm8iLCJsYXllckJsZW5kaW5nIiwib3ZlcmxheUJsZW5kaW5nIiwibWFwU2F2ZWQiLCJwcm92aWRlclN0YXRlIiwicGxvdENvbnRhaW5lclNlbGVjdG9yIiwiaGVpZ2h0IiwicmF0aW8iLCJleHBvcnRJbWFnZSIsInJlc29sdXRpb24iLCJsZWdlbmQiLCJjZW50ZXIiLCJpbWFnZVNpemUiLCJlc2NhcGVYaHRtbEZvcldlYnBhY2siLCJtYXBGaWVsZHMiLCJhZGROb3RpZmljYXRpb24iLCJzZXRFeHBvcnRJbWFnZVNldHRpbmciLCJzZXRFeHBvcnRJbWFnZURhdGFVcmkiLCJzZXRFeHBvcnRJbWFnZUVycm9yIiwic3BsaXRNYXBzIiwiaXNTcGxpdFNlbGVjdG9yIiwiYm90dG9tV2lkZ2V0U2VsZWN0b3IiLCJhbmltYXRpb25Db25maWciLCJ0b2dnbGVNb2RhbCIsInNpZGVQYW5lbCIsIm1hcmdpbiIsImxlZnQiLCJtb2RhbENvbnRhaW5lclNlbGVjdG9yIiwicm9vdE5vZGUiLCJwcm92aWRlckFjdGlvbnMiLCJjbG91ZFByb3ZpZGVycyIsIm9uRXhwb3J0VG9DbG91ZFN1Y2Nlc3MiLCJvbkxvYWRDbG91ZE1hcFN1Y2Nlc3MiLCJvbkxvYWRDbG91ZE1hcEVycm9yIiwib25FeHBvcnRUb0Nsb3VkRXJyb3IiLCJnZW9Db2RlclBhbmVsU2VsZWN0b3IiLCJkaW1lbnNpb25zIiwiaXNHZW9jb2RlckVuYWJsZWQiLCJnZW9jb2RlciIsImVuYWJsZWQiLCJ1cGRhdGVWaXNEYXRhIiwicmVtb3ZlRGF0YXNldCIsInVwZGF0ZU1hcCIsImFwcFdpZHRoIiwiZGF0YXNldEF0dHJpYnV0aW9uU2VsZWN0b3IiLCJzdGF0ZSIsInVuaXF1ZUF0dHJpYnV0aW9ucyIsIl9kcyRtZXRhZGF0YSIsImRzIiwiYXR0cmlidXRpb25zIiwibWV0YWRhdGEiLCJBcnJheSIsImlzQXJyYXkiLCJhdHRyaWJ1dGlvbiIsImxpbmtzIiwibWF0Y2giLCJsaW5rIiwiX2xpbmskbWF0Y2giLCJfbGluayRtYXRjaDIiLCJocmVmIiwidGl0bGUiLCJpbmRleE9mIiwidXJsIiwiZXJyb3IiLCJ1bmlxdWVUZXh0QXR0cmlidXRpb25zIiwibG9nb3MiLCJub3RpZmljYXRpb25QYW5lbFNlbGVjdG9yIiwicmVtb3ZlTm90aWZpY2F0aW9uIiwibm90aWZpY2F0aW9ucyIsIm1hcFN0eWxlcyIsIm1hcFN0eWxlc1JlcGxhY2VEZWZhdWx0IiwiREVGQVVMVF9NQVBCT1hfQVBJX1VSTCIsIktFUExFUl9HTF9OQU1FIiwiS0VQTEVSX0dMX1ZFUlNJT04iLCJESU1FTlNJT05TIiwiZmVhdHVyZUZsYWdzIiwiS2VwbGVyR2xGYWN0b3J5IiwiZGVwcyIsIkJvdHRvbVdpZGdldEZhY3RvcnkiLCJHZW9Db2RlclBhbmVsRmFjdG9yeSIsIk1hcENvbnRhaW5lckZhY3RvcnkiLCJNYXBzTGF5b3V0RmFjdG9yeSIsIk1vZGFsQ29udGFpbmVyRmFjdG9yeSIsIlNpZGVQYW5lbEZhY3RvcnkiLCJQbG90Q29udGFpbmVyRmFjdG9yeSIsIk5vdGlmaWNhdGlvblBhbmVsRmFjdG9yeSIsIkRuZENvbnRleHRGYWN0b3J5IiwiRWZmZWN0TWFuYWdlckZhY3RvcnkiLCJCb3R0b21XaWRnZXQiLCJHZW9Db2RlclBhbmVsIiwiTWFwQ29udGFpbmVyIiwiTWFwc0xheW91dCIsIk1vZGFsQ29udGFpbmVyIiwiU2lkZVBhbmVsIiwiUGxvdENvbnRhaW5lciIsIk5vdGlmaWNhdGlvblBhbmVsIiwiRG5kQ29udGV4dCIsIktlcGxlckdMIiwiX0NvbXBvbmVudCIsIl90aGlzIiwiX2NsYXNzQ2FsbENoZWNrMiIsIl9sZW4iLCJhcmdzIiwiX2tleSIsInNldFN0YXRlIiwiY3JlYXRlUmVmIiwidGhlbWVTZWxlY3RvciIsIl90eXBlb2YyIiwiYmFzaWNUaGVtZSIsIlRIRU1FIiwibGlnaHQiLCJ0aGVtZUxUIiwiYmFzZSIsInRoZW1lQlMiLCJkYXRhc2V0c1NlbGVjdG9yIiwicHJvdmlkZXJzIiwiaGFzU3RvcmFnZSIsInNvbWUiLCJwIiwiaGFzUHJpdmF0ZVN0b3JhZ2UiLCJoYXNTaGFyZSIsImhhc1NoYXJpbmdVcmwiLCJsb2NhbGVNZXNzYWdlcyIsImN1c3RvbU1lc3NhZ2VzIiwibWVyZ2VNZXNzYWdlcyIsIm1lc3NhZ2VzIiwiZGVmYXVsdFN0eWxlcyIsInZhbHVlcyIsImN1c3RvbVN0eWxlcyIsIm1hcCIsIm1zIiwiaWQiLCJnZW5lcmF0ZUhhc2hJZCIsImFsbFN0eWxlcyIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJyZWR1Y2UiLCJhY2N1Iiwic3R5bGUiLCJsb2FkTWFwU3R5bGVzIiwiY29udGFpbmVySWQiLCJsYXllcklkIiwidG9nZ2xlTGF5ZXJGb3JNYXAiLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsInZhbHVlIiwiY29tcG9uZW50RGlkTW91bnQiLCJfZ2V0QXBwbGljYXRpb25Db25maWciLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsImJhc2VNYXBMaWJyYXJ5Q29uZmlnIiwibWFwTGliTmFtZSIsIl92YWxpZGF0ZU1hcGJveFRva2VuIiwiX2xvYWRNYXBTdHlsZSIsIm9uS2VwbGVyR2xJbml0aWFsaXplZCIsInJvb3QiLCJjdXJyZW50IiwiSFRNTEVsZW1lbnQiLCJvYnNlcnZlRGltZW5zaW9ucyIsIl9oYW5kbGVSZXNpemUiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsInVub2JzZXJ2ZURpbWVuc2lvbnMiLCJ2YWxpZGF0ZVRva2VuIiwiQ29uc29sZSIsIndhcm4iLCJNSVNTSU5HX01BUEJPWF9UT0tFTiIsInJlbmRlciIsIl90aGlzMiIsIl90aGlzJHByb3BzIiwiX3RoaXMkcHJvcHMkaWQiLCJfdGhpcyRwcm9wcyR3aWR0aCIsIl90aGlzJHByb3BzJGhlaWdodCIsIl90aGlzJHByb3BzJGNsb3VkUHJvdiIsImF2YWlsYWJsZVRoZW1lU2VsZWN0b3IiLCJsb2NhbGVNZXNzYWdlc1NlbGVjdG9yIiwiaXNFeHBvcnRpbmdJbWFnZSIsImV4cG9ydGluZyIsImZpbHRlcmVkRGF0YXNldHNTZWxlY3RvciIsInNpZGVGaWVsZHMiLCJwbG90Q29udGFpbmVyRmllbGRzIiwiYm90dG9tV2lkZ2V0RmllbGRzIiwibW9kYWxDb250YWluZXJGaWVsZHMiLCJnZW9Db2RlclBhbmVsRmllbGRzIiwibm90aWZpY2F0aW9uUGFuZWxGaWVsZHMiLCJtYXBDb250YWluZXJzIiwiY3JlYXRlRWxlbWVudCIsIl9leHRlbmRzMiIsInByaW1hcnkiLCJkZWxldGVNYXBMYWJlbHMiLCJfZGVsZXRlTWFwTGFiZWxzIiwic2V0dGluZ3MiLCJSb290Q29udGV4dCIsIlByb3ZpZGVyIiwiRmVhdHVyZUZsYWdzQ29udGV4dFByb3ZpZGVyIiwiSW50bFByb3ZpZGVyIiwiU3R5bGVTaGVldE1hbmFnZXIiLCJzaG91bGRGb3J3YXJkUHJvcCIsIlRoZW1lUHJvdmlkZXIiLCJDbG91ZExpc3RQcm92aWRlciIsImNsYXNzTmFtZSIsImRpc3BsYXkiLCJmbGV4RGlyZWN0aW9uIiwicG9zaXRpb24iLCJyZWYiLCJ1bnN5bmNlZFZpZXdwb3J0cyIsIl9tYXBDb250YWluZXIiLCJoYXNQb3J0YWJsZVdpZHRoIiwiYnJlYWtQb2ludFZhbHVlcyIsInJvb3RSZWYiLCJib3R0b21XaWRnZXRSZWYiLCJjb250YWluZXJXIiwiY29udGFpbmVySCIsIkNvbXBvbmVudCIsImtlcGxlckdsQ29ubmVjdCIsIm1hcFN0YXRlVG9Qcm9wcyIsIm1ha2VNYXBEaXNwYXRjaFRvUHJvcHMiLCJ3aXRoVGhlbWUiLCJkZWZhdWx0VXNlckFjdGlvbnMiLCJnZXREaXNwYXRjaCIsImRpc3BhdGNoIiwiZ2V0VXNlckFjdGlvbnMiLCJhY3Rpb25zIiwibWFrZUdldEFjdGlvbkNyZWF0b3JzIiwidXNlckFjdGlvbnMiLCJfbWFwIiwiVmlzU3RhdGVBY3Rpb25zIiwiTWFwU3RhdGVBY3Rpb25zIiwiTWFwU3R5bGVBY3Rpb25zIiwiVUlTdGF0ZUFjdGlvbnMiLCJQcm92aWRlckFjdGlvbnMiLCJiaW5kQWN0aW9uQ3JlYXRvcnMiLCJtZXJnZUFjdGlvbnMiLCJfbWFwMiIsIl9zbGljZWRUb0FycmF5MiIsImdldEFjdGlvbkNyZWF0b3JzIiwibWFwRGlzcGF0Y2hUb1Byb3BzIiwib3duUHJvcHMiLCJncm91cGVkQWN0aW9uQ3JlYXRvcnMiLCJvdmVycmlkZXMiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9rZXBsZXItZ2wudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge0NvbXBvbmVudCwgY3JlYXRlUmVmLCBEaXNwYXRjaH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IENvbnNvbGUgZnJvbSAnZ2xvYmFsL2NvbnNvbGUnO1xuaW1wb3J0IHtiaW5kQWN0aW9uQ3JlYXRvcnN9IGZyb20gJ3JlZHV4JztcbmltcG9ydCBzdHlsZWQsIHt3aXRoVGhlbWUsIFN0eWxlU2hlZXRNYW5hZ2VyLCBUaGVtZVByb3ZpZGVyfSBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQge2NyZWF0ZVNlbGVjdG9yfSBmcm9tICdyZXNlbGVjdCc7XG5pbXBvcnQge2Nvbm5lY3QgYXMga2VwbGVyR2xDb25uZWN0fSBmcm9tICcuL2Nvbm5lY3Qva2VwbGVyZ2wtY29ubmVjdCc7XG5pbXBvcnQge0ludGxQcm92aWRlcn0gZnJvbSAncmVhY3QtaW50bCc7XG5pbXBvcnQge21lc3NhZ2VzfSBmcm9tICdAa2VwbGVyLmdsL2xvY2FsaXphdGlvbic7XG5pbXBvcnQge1Jvb3RDb250ZXh0LCBGZWF0dXJlRmxhZ3NDb250ZXh0UHJvdmlkZXIsIEZlYXR1cmVGbGFnc30gZnJvbSAnLi9jb250ZXh0JztcbmltcG9ydCB7XG4gIEF0dHJpYnV0aW9uV2l0aFN0eWxlLFxuICBEYXRhc2V0QXR0cmlidXRpb24sXG4gIE9uRXJyb3JDYWxsQmFjayxcbiAgT25TdWNjZXNzQ2FsbEJhY2ssXG4gIFZpZXdwb3J0LFxuICBNYXBTdGF0ZVxufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxuaW1wb3J0IHtcbiAgTWFwU3RhdGVBY3Rpb25zLFxuICBNYXBTdHlsZUFjdGlvbnMsXG4gIFByb3ZpZGVyQWN0aW9ucyxcbiAgVUlTdGF0ZUFjdGlvbnMsXG4gIFZpc1N0YXRlQWN0aW9uc1xufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuXG5pbXBvcnQge2dlbmVyYXRlSGFzaElkfSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG5cbmltcG9ydCB7c2hvdWxkRm9yd2FyZFByb3B9IGZyb20gJy4vY29tbW9uL3N0eWxlZC1jb21wb25lbnRzJztcblxudHlwZSBLZXBsZXJHbEFjdGlvbnMgPSB7XG4gIHZpc1N0YXRlQWN0aW9uczogdHlwZW9mIFZpc1N0YXRlQWN0aW9ucztcbiAgbWFwU3RhdGVBY3Rpb25zOiB0eXBlb2YgTWFwU3RhdGVBY3Rpb25zO1xuICBtYXBTdHlsZUFjdGlvbnM6IHR5cGVvZiBNYXBTdHlsZUFjdGlvbnM7XG4gIHVpU3RhdGVBY3Rpb25zOiB0eXBlb2YgVUlTdGF0ZUFjdGlvbnM7XG4gIHByb3ZpZGVyQWN0aW9uczogdHlwZW9mIFByb3ZpZGVyQWN0aW9ucztcbn07XG5cbmltcG9ydCB7XG4gIERJTUVOU0lPTlMsXG4gIEtFUExFUl9HTF9OQU1FLFxuICBLRVBMRVJfR0xfVkVSU0lPTixcbiAgVEhFTUUsXG4gIERFRkFVTFRfTUFQQk9YX0FQSV9VUkwsXG4gIEdFT0NPREVSX0RBVEFTRVRfTkFNRSxcbiAgTUlTU0lOR19NQVBCT1hfVE9LRU5cbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuXG5pbXBvcnQgU2lkZVBhbmVsRmFjdG9yeSBmcm9tICcuL3NpZGUtcGFuZWwnO1xuaW1wb3J0IE1hcENvbnRhaW5lckZhY3RvcnkgZnJvbSAnLi9tYXAtY29udGFpbmVyJztcbmltcG9ydCBNYXBzTGF5b3V0RmFjdG9yeSBmcm9tICcuL21hcHMtbGF5b3V0JztcbmltcG9ydCBCb3R0b21XaWRnZXRGYWN0b3J5IGZyb20gJy4vYm90dG9tLXdpZGdldCc7XG5pbXBvcnQgTW9kYWxDb250YWluZXJGYWN0b3J5IGZyb20gJy4vbW9kYWwtY29udGFpbmVyJztcbmltcG9ydCBQbG90Q29udGFpbmVyRmFjdG9yeSBmcm9tICcuL3Bsb3QtY29udGFpbmVyJztcbmltcG9ydCBOb3RpZmljYXRpb25QYW5lbEZhY3RvcnkgZnJvbSAnLi9ub3RpZmljYXRpb24tcGFuZWwnO1xuaW1wb3J0IEdlb0NvZGVyUGFuZWxGYWN0b3J5IGZyb20gJy4vZ2VvY29kZXItcGFuZWwnO1xuaW1wb3J0IEVmZmVjdE1hbmFnZXJGYWN0b3J5IGZyb20gJy4vZWZmZWN0cy9lZmZlY3QtbWFuYWdlcic7XG5pbXBvcnQgRG5kQ29udGV4dEZhY3RvcnkgZnJvbSAnLi9kbmQtY29udGV4dCc7XG5pbXBvcnQge0Nsb3VkTGlzdFByb3ZpZGVyfSBmcm9tICcuL2hvb2tzL3VzZS1jbG91ZC1saXN0LXByb3ZpZGVyJztcblxuaW1wb3J0IHtcbiAgZmlsdGVyT2JqZWN0QnlQcmVkaWNhdGUsXG4gIHZhbGlkYXRlVG9rZW4sXG4gIG1lcmdlTWVzc2FnZXMsXG4gIG9ic2VydmVEaW1lbnNpb25zLFxuICB1bm9ic2VydmVEaW1lbnNpb25zLFxuICBoYXNQb3J0YWJsZVdpZHRoLFxuICBnZXRBcHBsaWNhdGlvbkNvbmZpZ1xufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcblxuaW1wb3J0IHt0aGVtZSBhcyBiYXNpY1RoZW1lLCB0aGVtZUxULCB0aGVtZUJTLCBicmVha1BvaW50VmFsdWVzfSBmcm9tICdAa2VwbGVyLmdsL3N0eWxlcyc7XG5pbXBvcnQge0tlcGxlckdsU3RhdGV9IGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuaW1wb3J0IHtQcm92aWRlcn0gZnJvbSAnQGtlcGxlci5nbC9jbG91ZC1wcm92aWRlcnMnO1xuXG4vLyBNYXliZSB3ZSBzaG91bGQgdGhpbmsgYWJvdXQgZXhwb3J0aW5nIHRoaXMgb3IgY3JlYXRpbmcgYSB2YXJpYWJsZVxuLy8gYXMgcGFydCBvZiB0aGUgYmFzZS5qcyB0aGVtZVxuY29uc3QgR2xvYmFsU3R5bGUgPSBzdHlsZWQuZGl2YFxuICBmb250LWZhbWlseTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5mb250RmFtaWx5fTtcbiAgZm9udC13ZWlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuZm9udFdlaWdodH07XG4gIGZvbnQtc2l6ZTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5mb250U2l6ZX07XG4gIGxpbmUtaGVpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmxpbmVIZWlnaHR9O1xuXG4gICosXG4gICo6YmVmb3JlLFxuICAqOmFmdGVyIHtcbiAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIH1cblxuICB1bCB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cblxuICBsaSB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG5cbiAgYSB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmxhYmVsQ29sb3J9O1xuICB9XG5cbiAgOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuICB9XG5cbiAgLm1hcGxpYnJlZ2wtY3RybCAubWFwbGlicmVnbC1jdHJsLWxvZ28ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICAubWFwYm94Z2wtY3RybCAubWFwYm94Z2wtY3RybC1sb2dvIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5gO1xuXG50eXBlIEJvdHRvbVdpZGdldE91dGVyUHJvcHMgPSB7XG4gIGFic29sdXRlPzogYm9vbGVhbjtcbn07XG5cbmNvbnN0IEJvdHRvbVdpZGdldE91dGVyID0gc3R5bGVkLmRpdjxCb3R0b21XaWRnZXRPdXRlclByb3BzPihcbiAgKHthYnNvbHV0ZX0pID0+IGBcbiAgJHthYnNvbHV0ZSA/ICdwb3NpdGlvbjogYWJzb2x1dGU7IGJvdHRvbTogMDsgcmlnaHQ6IDA7JyA6ICcnfVxuICBwb2ludGVyLWV2ZW50czogbm9uZTsgLyogcHJldmVudCBwYWRkaW5nIGZyb20gYmxvY2tpbmcgaW5wdXQgKi9cbiAgJiA+ICoge1xuICAgIC8qIGFsbCBjaGlsZHJlbiBzaG91bGQgYWxsb3cgaW5wdXQgKi9cbiAgICBwb2ludGVyLWV2ZW50czogYWxsO1xuICB9YFxuKTtcblxuZXhwb3J0IGNvbnN0IGlzVmlld3BvcnREaXNqb2ludGVkID0gcHJvcHMgPT4ge1xuICByZXR1cm4gKFxuICAgIHByb3BzLm1hcFN0YXRlLmlzU3BsaXQgJiZcbiAgICAhcHJvcHMubWFwU3RhdGUuaXNWaWV3cG9ydFN5bmNlZCAmJlxuICAgIHByb3BzLm1hcFN0YXRlLnNwbGl0TWFwVmlld3BvcnRzLmxlbmd0aCA+IDFcbiAgKTtcbn07XG5cbnR5cGUgTWFwU3RhdGVQcm9wcyA9IHtcbiAgbWFwU3RhdGU6IE1hcFN0YXRlO1xufTtcblxuZXhwb3J0IGNvbnN0IG1hcFN0YXRlU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgWyhwcm9wczogTWFwU3RhdGVQcm9wcykgPT4gcHJvcHMubWFwU3RhdGUsIChfOiBNYXBTdGF0ZVByb3BzLCBpbmRleD86IG51bWJlcikgPT4gaW5kZXhdLFxuICAobWFwU3RhdGU6IE1hcFN0YXRlLCBpbmRleD86IG51bWJlcik6IE1hcFN0YXRlID0+IHtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShpbmRleCkpIHtcbiAgICAgIC8vIGVpdGhlciBubyBpbmRleCBhcmcgb3IgYW4gaW52YWxpZCBpbmRleCB3YXMgcHJvdmlkZWRcbiAgICAgIC8vIGl0IGlzIGV4cGVjdGVkIHRvIGJlIGVpdGhlciAwIG9yIDEgd2hlbiBpbiBzcGxpdCBtb2RlXG4gICAgICAvLyBvbmx5IHVzZSB0aGUgbWFwU3RhdGVcbiAgICAgIHJldHVybiBtYXBTdGF0ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXNWaWV3cG9ydERpc2pvaW50ZWQoe21hcFN0YXRlfSlcbiAgICAgID8gLy8gbWl4IHRvZ2V0aGVyIHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzIGludGVuZGVkIGZvciB0aGlzIGRpc2pvaW50ZWQgPE1hcENvbnRhaW5lcj4gd2l0aCB0aGUgb3RoZXIgbmVjZXNzYXJ5IG1hcFN0YXRlIHByb3BlcnRpZXNcbiAgICAgICAgey4uLm1hcFN0YXRlLCAuLi5tYXBTdGF0ZS5zcGxpdE1hcFZpZXdwb3J0c1tpbmRleCB8fCAwXX1cbiAgICAgIDogLy8gb3RoZXJ3aXNlIG9ubHkgdXNlIHRoZSBtYXBTdGF0ZVxuICAgICAgICBtYXBTdGF0ZTtcbiAgfVxuKTtcblxuZXhwb3J0IGNvbnN0IG1hcEZpZWxkc1NlbGVjdG9yID0gKHByb3BzOiBLZXBsZXJHTFByb3BzLCBpbmRleCA9IDApID0+ICh7XG4gIGdldE1hcGJveFJlZjogcHJvcHMuZ2V0TWFwYm94UmVmLFxuICBtYXBib3hBcGlBY2Nlc3NUb2tlbjogcHJvcHMubWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gIG1hcGJveEFwaVVybDogcHJvcHMubWFwYm94QXBpVXJsID8gcHJvcHMubWFwYm94QXBpVXJsIDogREVGQVVMVF9LRVBMRVJfR0xfUFJPUFMubWFwYm94QXBpVXJsLFxuICBtYXBTdGF0ZTogbWFwU3RhdGVTZWxlY3Rvcihwcm9wcywgaW5kZXgpLFxuICBkYXRhc2V0QXR0cmlidXRpb25zOiBhdHRyaWJ1dGlvblNlbGVjdG9yKHByb3BzKS5zb3VyY2VzLFxuICBtYXBTdHlsZTogcHJvcHMubWFwU3R5bGUsXG4gIG9uRGVja0luaXRpYWxpemVkOiBwcm9wcy5vbkRlY2tJbml0aWFsaXplZCxcbiAgb25WaWV3U3RhdGVDaGFuZ2U6IHByb3BzLm9uVmlld1N0YXRlQ2hhbmdlLFxuICBvbk1vdXNlTW92ZTogcHJvcHMub25Nb3VzZU1vdmUsXG4gIGRlY2tHbFByb3BzOiBwcm9wcy5kZWNrR2xQcm9wcyxcbiAgdWlTdGF0ZUFjdGlvbnM6IHByb3BzLnVpU3RhdGVBY3Rpb25zLFxuICB2aXNTdGF0ZUFjdGlvbnM6IHByb3BzLnZpc1N0YXRlQWN0aW9ucyxcbiAgbWFwU3RhdGVBY3Rpb25zOiBwcm9wcy5tYXBTdGF0ZUFjdGlvbnMsXG5cbiAgLy8gdmlzU3RhdGVcbiAgdmlzU3RhdGU6IHByb3BzLnZpc1N0YXRlLFxuXG4gIC8vIHVpU3RhdGVcbiAgYWN0aXZlU2lkZVBhbmVsOiBwcm9wcy51aVN0YXRlLmFjdGl2ZVNpZGVQYW5lbCxcbiAgbWFwQ29udHJvbHM6IHByb3BzLnVpU3RhdGUubWFwQ29udHJvbHMsXG4gIHJlYWRPbmx5OiBwcm9wcy51aVN0YXRlLnJlYWRPbmx5LFxuICBsb2NhbGU6IHByb3BzLnVpU3RhdGUubG9jYWxlLFxuICBpc0xvYWRpbmdJbmRpY2F0b3JWaXNpYmxlOiBOdW1iZXIocHJvcHMudmlzU3RhdGUubG9hZGluZ0luZGljYXRvclZhbHVlKSA+IDAsXG4gIHNpZGVQYW5lbFdpZHRoOiBwcm9wcy5zaWRlUGFuZWxXaWR0aCA/IHByb3BzLnNpZGVQYW5lbFdpZHRoIDogREVGQVVMVF9LRVBMRVJfR0xfUFJPUFMud2lkdGgsXG5cbiAgLy8gbWFwU3R5bGVcbiAgdG9wTWFwQ29udGFpbmVyUHJvcHM6IHByb3BzLnRvcE1hcENvbnRhaW5lclByb3BzLFxuICBib3R0b21NYXBDb250YWluZXJQcm9wczogcHJvcHMuYm90dG9tTWFwQ29udGFpbmVyUHJvcHMsXG5cbiAgLy8gdHJhbnNmb3JtUmVxdWVzdCBmb3IgTWFwYm94IGJhc2VtYXBzXG4gIHRyYW5zZm9ybVJlcXVlc3Q6IHByb3BzLnRyYW5zZm9ybVJlcXVlc3Rcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmlzaWJsZURhdGFzZXRzKGRhdGFzZXRzKSB7XG4gIC8vIFdlIGRvbid0IHdhbnQgR2VvY29kZXIgZGF0YXNldCB0byBiZSBwcmVzZW50IGluIFNpZGVQYW5lbCBkYXRhc2V0IGxpc3RcbiAgcmV0dXJuIGZpbHRlck9iamVjdEJ5UHJlZGljYXRlKGRhdGFzZXRzLCBrZXkgPT4ga2V5ICE9PSBHRU9DT0RFUl9EQVRBU0VUX05BTUUpO1xufVxuXG5leHBvcnQgY29uc3Qgc2lkZVBhbmVsU2VsZWN0b3IgPSAocHJvcHM6IEtlcGxlckdMUHJvcHMsIGF2YWlsYWJsZVByb3ZpZGVycywgZmlsdGVyZWREYXRhc2V0cykgPT4gKHtcbiAgYXBwTmFtZTogcHJvcHMuYXBwTmFtZSA/IHByb3BzLmFwcE5hbWUgOiBERUZBVUxUX0tFUExFUl9HTF9QUk9QUy5hcHBOYW1lLFxuICB2ZXJzaW9uOiBwcm9wcy52ZXJzaW9uID8gcHJvcHMudmVyc2lvbiA6IERFRkFVTFRfS0VQTEVSX0dMX1BST1BTLnZlcnNpb24sXG4gIGFwcFdlYnNpdGU6IHByb3BzLmFwcFdlYnNpdGUsXG4gIG1hcFN0eWxlOiBwcm9wcy5tYXBTdHlsZSxcbiAgb25TYXZlTWFwOiBwcm9wcy5vblNhdmVNYXAsXG4gIHVpU3RhdGU6IHByb3BzLnVpU3RhdGUsXG4gIG1hcFN0eWxlQWN0aW9uczogcHJvcHMubWFwU3R5bGVBY3Rpb25zLFxuICB2aXNTdGF0ZUFjdGlvbnM6IHByb3BzLnZpc1N0YXRlQWN0aW9ucyxcbiAgdWlTdGF0ZUFjdGlvbnM6IHByb3BzLnVpU3RhdGVBY3Rpb25zLFxuICBtYXBTdGF0ZUFjdGlvbnM6IHByb3BzLm1hcFN0YXRlQWN0aW9ucyxcblxuICBkYXRhc2V0czogZmlsdGVyZWREYXRhc2V0cyxcbiAgZmlsdGVyczogcHJvcHMudmlzU3RhdGUuZmlsdGVycyxcbiAgbGF5ZXJzOiBwcm9wcy52aXNTdGF0ZS5sYXllcnMsXG4gIGxheWVyT3JkZXI6IHByb3BzLnZpc1N0YXRlLmxheWVyT3JkZXIsXG4gIGxheWVyQ2xhc3NlczogcHJvcHMudmlzU3RhdGUubGF5ZXJDbGFzc2VzLFxuICBpbnRlcmFjdGlvbkNvbmZpZzogcHJvcHMudmlzU3RhdGUuaW50ZXJhY3Rpb25Db25maWcsXG4gIG1hcEluZm86IHByb3BzLnZpc1N0YXRlLm1hcEluZm8sXG4gIGxheWVyQmxlbmRpbmc6IHByb3BzLnZpc1N0YXRlLmxheWVyQmxlbmRpbmcsXG4gIG92ZXJsYXlCbGVuZGluZzogcHJvcHMudmlzU3RhdGUub3ZlcmxheUJsZW5kaW5nLFxuXG4gIHdpZHRoOiBwcm9wcy5zaWRlUGFuZWxXaWR0aCA/IHByb3BzLnNpZGVQYW5lbFdpZHRoIDogREVGQVVMVF9LRVBMRVJfR0xfUFJPUFMud2lkdGgsXG4gIGF2YWlsYWJsZVByb3ZpZGVycyxcbiAgbWFwU2F2ZWQ6IHByb3BzLnByb3ZpZGVyU3RhdGUubWFwU2F2ZWRcbn0pO1xuXG5leHBvcnQgY29uc3QgcGxvdENvbnRhaW5lclNlbGVjdG9yID0gKHByb3BzOiBLZXBsZXJHTFByb3BzKSA9PiAoe1xuICB3aWR0aDogcHJvcHMud2lkdGgsXG4gIGhlaWdodDogcHJvcHMuaGVpZ2h0LFxuICByYXRpbzogcHJvcHMudWlTdGF0ZS5leHBvcnRJbWFnZS5yYXRpbyxcbiAgcmVzb2x1dGlvbjogcHJvcHMudWlTdGF0ZS5leHBvcnRJbWFnZS5yZXNvbHV0aW9uLFxuICBsZWdlbmQ6IHByb3BzLnVpU3RhdGUuZXhwb3J0SW1hZ2UubGVnZW5kLFxuICBjZW50ZXI6IHByb3BzLnVpU3RhdGUuZXhwb3J0SW1hZ2UuY2VudGVyLFxuICBpbWFnZVNpemU6IHByb3BzLnVpU3RhdGUuZXhwb3J0SW1hZ2UuaW1hZ2VTaXplLFxuICBlc2NhcGVYaHRtbEZvcldlYnBhY2s6IHByb3BzLnVpU3RhdGUuZXhwb3J0SW1hZ2UuZXNjYXBlWGh0bWxGb3JXZWJwYWNrLFxuXG4gIG1hcEZpZWxkczogbWFwRmllbGRzU2VsZWN0b3IocHJvcHMpLFxuICBhZGROb3RpZmljYXRpb246IHByb3BzLnVpU3RhdGVBY3Rpb25zLmFkZE5vdGlmaWNhdGlvbixcbiAgc2V0RXhwb3J0SW1hZ2VTZXR0aW5nOiBwcm9wcy51aVN0YXRlQWN0aW9ucy5zZXRFeHBvcnRJbWFnZVNldHRpbmcsXG4gIHNldEV4cG9ydEltYWdlRGF0YVVyaTogcHJvcHMudWlTdGF0ZUFjdGlvbnMuc2V0RXhwb3J0SW1hZ2VEYXRhVXJpLFxuICBzZXRFeHBvcnRJbWFnZUVycm9yOiBwcm9wcy51aVN0YXRlQWN0aW9ucy5zZXRFeHBvcnRJbWFnZUVycm9yLFxuICBzcGxpdE1hcHM6IHByb3BzLnZpc1N0YXRlLnNwbGl0TWFwc1xufSk7XG5cbmV4cG9ydCBjb25zdCBpc1NwbGl0U2VsZWN0b3IgPSAocHJvcHM6IEtlcGxlckdMUHJvcHMpID0+XG4gIHByb3BzLnZpc1N0YXRlLnNwbGl0TWFwcyAmJiBwcm9wcy52aXNTdGF0ZS5zcGxpdE1hcHMubGVuZ3RoID4gMTtcblxuZXhwb3J0IGNvbnN0IGJvdHRvbVdpZGdldFNlbGVjdG9yID0gKHByb3BzOiBLZXBsZXJHTFByb3BzLCB0aGVtZSkgPT4gKHtcbiAgZmlsdGVyczogcHJvcHMudmlzU3RhdGUuZmlsdGVycyxcbiAgZGF0YXNldHM6IHByb3BzLnZpc1N0YXRlLmRhdGFzZXRzLFxuICB1aVN0YXRlOiBwcm9wcy51aVN0YXRlLFxuICBsYXllcnM6IHByb3BzLnZpc1N0YXRlLmxheWVycyxcbiAgYW5pbWF0aW9uQ29uZmlnOiBwcm9wcy52aXNTdGF0ZS5hbmltYXRpb25Db25maWcsXG4gIHZpc1N0YXRlQWN0aW9uczogcHJvcHMudmlzU3RhdGVBY3Rpb25zLFxuICB0b2dnbGVNb2RhbDogcHJvcHMudWlTdGF0ZUFjdGlvbnMudG9nZ2xlTW9kYWwsXG4gIHNpZGVQYW5lbFdpZHRoOiBwcm9wcy51aVN0YXRlLnJlYWRPbmx5ID8gMCA6IHByb3BzLnNpZGVQYW5lbFdpZHRoICsgdGhlbWUuc2lkZVBhbmVsLm1hcmdpbi5sZWZ0XG59KTtcblxuZXhwb3J0IGNvbnN0IG1vZGFsQ29udGFpbmVyU2VsZWN0b3IgPSAocHJvcHM6IEtlcGxlckdMUHJvcHMsIHJvb3ROb2RlKSA9PiAoe1xuICBhcHBOYW1lOiBwcm9wcy5hcHBOYW1lID8gcHJvcHMuYXBwTmFtZSA6IERFRkFVTFRfS0VQTEVSX0dMX1BST1BTLmFwcE5hbWUsXG4gIG1hcFN0eWxlOiBwcm9wcy5tYXBTdHlsZSxcbiAgdmlzU3RhdGU6IHByb3BzLnZpc1N0YXRlLFxuICBtYXBTdGF0ZTogcHJvcHMubWFwU3RhdGUsXG4gIHVpU3RhdGU6IHByb3BzLnVpU3RhdGUsXG4gIHByb3ZpZGVyU3RhdGU6IHByb3BzLnByb3ZpZGVyU3RhdGUsXG5cbiAgbWFwYm94QXBpQWNjZXNzVG9rZW46IHByb3BzLm1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICBtYXBib3hBcGlVcmw6IHByb3BzLm1hcGJveEFwaVVybCxcbiAgdmlzU3RhdGVBY3Rpb25zOiBwcm9wcy52aXNTdGF0ZUFjdGlvbnMsXG4gIHVpU3RhdGVBY3Rpb25zOiBwcm9wcy51aVN0YXRlQWN0aW9ucyxcbiAgbWFwU3R5bGVBY3Rpb25zOiBwcm9wcy5tYXBTdHlsZUFjdGlvbnMsXG4gIHByb3ZpZGVyQWN0aW9uczogcHJvcHMucHJvdmlkZXJBY3Rpb25zLFxuXG4gIHJvb3ROb2RlLFxuICAvLyBVc2VyIGRlZmluZWQgY2xvdWQgcHJvdmlkZXIgcHJvcHNcbiAgY2xvdWRQcm92aWRlcnM6IHByb3BzLmNsb3VkUHJvdmlkZXJzXG4gICAgPyBwcm9wcy5jbG91ZFByb3ZpZGVyc1xuICAgIDogREVGQVVMVF9LRVBMRVJfR0xfUFJPUFMuY2xvdWRQcm92aWRlcnMsXG4gIG9uRXhwb3J0VG9DbG91ZFN1Y2Nlc3M6IHByb3BzLm9uRXhwb3J0VG9DbG91ZFN1Y2Nlc3MsXG4gIG9uTG9hZENsb3VkTWFwU3VjY2VzczogcHJvcHMub25Mb2FkQ2xvdWRNYXBTdWNjZXNzLFxuICBvbkxvYWRDbG91ZE1hcEVycm9yOiBwcm9wcy5vbkxvYWRDbG91ZE1hcEVycm9yLFxuICBvbkV4cG9ydFRvQ2xvdWRFcnJvcjogcHJvcHMub25FeHBvcnRUb0Nsb3VkRXJyb3Jcbn0pO1xuXG5leHBvcnQgY29uc3QgZ2VvQ29kZXJQYW5lbFNlbGVjdG9yID0gKFxuICBwcm9wczogS2VwbGVyR0xQcm9wcyxcbiAgZGltZW5zaW9uczoge3dpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyfVxuKSA9PiAoe1xuICBpc0dlb2NvZGVyRW5hYmxlZDogcHJvcHMudmlzU3RhdGUuaW50ZXJhY3Rpb25Db25maWcuZ2VvY29kZXIuZW5hYmxlZCxcbiAgbWFwYm94QXBpQWNjZXNzVG9rZW46IHByb3BzLm1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICBtYXBTdGF0ZTogcHJvcHMubWFwU3RhdGUsXG4gIHVpU3RhdGU6IHByb3BzLnVpU3RhdGUsXG4gIGxheWVyT3JkZXI6IHByb3BzLnZpc1N0YXRlLmxheWVyT3JkZXIsXG4gIHVwZGF0ZVZpc0RhdGE6IHByb3BzLnZpc1N0YXRlQWN0aW9ucy51cGRhdGVWaXNEYXRhLFxuICByZW1vdmVEYXRhc2V0OiBwcm9wcy52aXNTdGF0ZUFjdGlvbnMucmVtb3ZlRGF0YXNldCxcbiAgdXBkYXRlTWFwOiBwcm9wcy5tYXBTdGF0ZUFjdGlvbnMudXBkYXRlTWFwLFxuICBhcHBXaWR0aDogZGltZW5zaW9ucy53aWR0aFxufSk7XG5cbi8qKlxuICogUmV0dXJucyBhcnJheSBvZiB1bmlxdWUgZGF0YXNldCBhdHRyaWJ1dGlvbnMsIGVhY2ggd2l0aCB0aXRsZSBhbmQgdXJsIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBkYXRhc2V0QXR0cmlidXRpb25TZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICBbc3RhdGUgPT4gc3RhdGUudmlzU3RhdGUuZGF0YXNldHNdLFxuICBkYXRhc2V0cyA9PiB7XG4gICAgY29uc3QgdW5pcXVlQXR0cmlidXRpb25zOiBEYXRhc2V0QXR0cmlidXRpb25bXSA9IFtdO1xuICAgIE9iamVjdC5rZXlzKGRhdGFzZXRzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBjb25zdCBkcyA9IGRhdGFzZXRzW2tleV07XG4gICAgICBjb25zdCBhdHRyaWJ1dGlvbnMgPSBkcz8ubWV0YWRhdGE/LmF0dHJpYnV0aW9ucztcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGF0dHJpYnV0aW9ucykpIHtcbiAgICAgICAgYXR0cmlidXRpb25zLmZvckVhY2goYXR0cmlidXRpb24gPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgYXR0cmlidXRpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAvLyBhdHRyaWJ1dGlvbiBjYW4gYmUgYSByYXcgc3RyaW5nIG9yIGEgc3RyaW5nIHdpdGggbGluayB0YWdzXG4gICAgICAgICAgICBjb25zdCBsaW5rcyA9IGF0dHJpYnV0aW9uLm1hdGNoKC88YVteXSs/YT4vZyk7XG4gICAgICAgICAgICBpZiAobGlua3MpIHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBsaW5rcz8uZm9yRWFjaChsaW5rID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGhyZWYgPSBsaW5rLm1hdGNoKC9ocmVmPVwiKFteXCJdKikvKT8uWzFdO1xuICAgICAgICAgICAgICAgICAgY29uc3QgdGl0bGUgPSBsaW5rLm1hdGNoKC90aXRsZT1cIihbXlwiXSopLyk/LlsxXTtcbiAgICAgICAgICAgICAgICAgIGlmIChocmVmICYmIHRpdGxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHVuaXF1ZUF0dHJpYnV0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYCR7bGluay5pbmRleE9mKCcmY29weTsnKSA+PSAwID8gJ8KpICcgOiAnJ30ke3RpdGxlfWAsXG4gICAgICAgICAgICAgICAgICAgICAgdXJsOiBocmVmXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIC8vIGp1c3QgaWdub3JlIGZvciBub3dcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdW5pcXVlQXR0cmlidXRpb25zLnB1c2goe3RpdGxlOiBhdHRyaWJ1dGlvbiwgdXJsOiBudWxsfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdW5pcXVlQXR0cmlidXRpb25zO1xuICB9XG4pO1xuXG4vKipcbiAqIERlZHVwbGljYXRlZCBkYXRhc2V0IGFuZCBsYXllciB0ZXh0IGF0dHJpYnV0aW9ucyBhbmQgbG9nb3MuXG4gKiBSZXR1cm5zIHRleHQgYXR0cmlidXRpb25zIGFuZCBsb2dvcyB0byBkaXNwbGF5LlxuICovXG5leHBvcnQgY29uc3QgYXR0cmlidXRpb25TZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICBbZGF0YXNldEF0dHJpYnV0aW9uU2VsZWN0b3JdLFxuICBkYXRhc2V0QXR0cmlidXRpb25zID0+IHtcbiAgICAvLyBUT0RPIGNvbGxlY3QgYXR0cmlidXRpb25zIGZyb20gbGF5ZXJzLCBhbmQgbWVyZ2Ugd2l0aCBkYXRhc2V0IGF0dHJpYnV0aW9ucyBoZXJlXG4gICAgY29uc3QgdW5pcXVlVGV4dEF0dHJpYnV0aW9ucyA9IGRhdGFzZXRBdHRyaWJ1dGlvbnM7XG4gICAgY29uc3QgbG9nb3M6IEF0dHJpYnV0aW9uV2l0aFN0eWxlW10gPSBbXTtcblxuICAgIHJldHVybiB7c291cmNlczogdW5pcXVlVGV4dEF0dHJpYnV0aW9ucywgbG9nb3N9O1xuICB9XG4pO1xuXG5leHBvcnQgY29uc3Qgbm90aWZpY2F0aW9uUGFuZWxTZWxlY3RvciA9IChwcm9wczogS2VwbGVyR0xQcm9wcykgPT4gKHtcbiAgcmVtb3ZlTm90aWZpY2F0aW9uOiBwcm9wcy51aVN0YXRlQWN0aW9ucy5yZW1vdmVOb3RpZmljYXRpb24sXG4gIG5vdGlmaWNhdGlvbnM6IHByb3BzLnVpU3RhdGUubm90aWZpY2F0aW9uc1xufSk7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0tFUExFUl9HTF9QUk9QUyA9IHtcbiAgbWFwU3R5bGVzOiBbXSxcbiAgbWFwU3R5bGVzUmVwbGFjZURlZmF1bHQ6IGZhbHNlLFxuICBtYXBib3hBcGlVcmw6IERFRkFVTFRfTUFQQk9YX0FQSV9VUkwsXG4gIHdpZHRoOiA4MDAsXG4gIGhlaWdodDogODAwLFxuICBhcHBOYW1lOiBLRVBMRVJfR0xfTkFNRSxcbiAgdmVyc2lvbjogS0VQTEVSX0dMX1ZFUlNJT04sXG4gIHNpZGVQYW5lbFdpZHRoOiBESU1FTlNJT05TLnNpZGVQYW5lbC53aWR0aCxcbiAgdGhlbWU6IHt9LFxuICBjbG91ZFByb3ZpZGVyczogW10sXG4gIHJlYWRPbmx5OiBmYWxzZSxcbiAgZmVhdHVyZUZsYWdzOiB7fVxufTtcblxudHlwZSBLZXBsZXJHTEJhc2ljUHJvcHMgPSB7XG4gIG1hcGJveEFwaUFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gIG1hcGJveEFwaVVybD86IHN0cmluZztcbiAgaWQ6IHN0cmluZztcbiAgd2lkdGg/OiBudW1iZXI7XG4gIGhlaWdodD86IG51bWJlcjtcblxuICBhcHBXZWJzaXRlPzogYW55O1xuICBvblNhdmVNYXA/OiAoKSA9PiB2b2lkO1xuICBvblZpZXdTdGF0ZUNoYW5nZT86ICh2aWV3U3RhdGU6IFZpZXdwb3J0KSA9PiB2b2lkO1xuICBvbkRlY2tJbml0aWFsaXplZD86ICgpID0+IHZvaWQ7XG4gIG9uS2VwbGVyR2xJbml0aWFsaXplZD86ICgpID0+IHZvaWQ7XG4gIGdldE1hcGJveFJlZj86ICgpID0+IFJlYWN0LlJlZk9iamVjdDxhbnk+O1xuICBtYXBTdHlsZXM/OiB7aWQ6IHN0cmluZzsgc3R5bGU/OiBvYmplY3R9W107XG4gIG1hcFN0eWxlc1JlcGxhY2VEZWZhdWx0PzogYm9vbGVhbjtcbiAgYXBwTmFtZT86IHN0cmluZztcbiAgdmVyc2lvbj86IHN0cmluZztcbiAgc2lkZVBhbmVsV2lkdGg/OiBudW1iZXI7XG4gIHRoZW1lPzogb2JqZWN0O1xuICBjbG91ZFByb3ZpZGVycz86IFByb3ZpZGVyW107XG4gIGRlY2tHbFByb3BzPzogb2JqZWN0O1xuICBvbkxvYWRDbG91ZE1hcFN1Y2Nlc3M/OiBPblN1Y2Nlc3NDYWxsQmFjaztcbiAgb25Mb2FkQ2xvdWRNYXBFcnJvcj86IE9uRXJyb3JDYWxsQmFjaztcbiAgb25Nb3VzZU1vdmU/OiAoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQgJiB7bG5nTGF0PzogW251bWJlciwgbnVtYmVyXX0pID0+IHZvaWQ7XG4gIG9uRXhwb3J0VG9DbG91ZFN1Y2Nlc3M/OiBPblN1Y2Nlc3NDYWxsQmFjaztcbiAgb25FeHBvcnRUb0Nsb3VkRXJyb3I/OiBPbkVycm9yQ2FsbEJhY2s7XG4gIHJlYWRPbmx5PzogYm9vbGVhbjtcbiAgZmVhdHVyZUZsYWdzPzogRmVhdHVyZUZsYWdzO1xuXG4gIGxvY2FsZU1lc3NhZ2VzPzoge1trZXk6IHN0cmluZ106IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9fTtcbiAgZGlzcGF0Y2g6IERpc3BhdGNoPGFueT47XG5cbiAgdG9wTWFwQ29udGFpbmVyUHJvcHM/OiBvYmplY3Q7XG4gIGJvdHRvbU1hcENvbnRhaW5lclByb3BzPzogb2JqZWN0O1xuXG4gIHRyYW5zZm9ybVJlcXVlc3Q/OiAodXJsOiBzdHJpbmcpID0+IHt1cmw6IHN0cmluZ307XG59O1xuXG50eXBlIEtlcGxlckdMUHJvcHMgPSBLZXBsZXJHbFN0YXRlICYgS2VwbGVyR2xBY3Rpb25zICYgS2VwbGVyR0xCYXNpY1Byb3BzO1xudHlwZSBLZXBsZXJHTENvbXBTdGF0ZSA9IHtcbiAgZGltZW5zaW9uczoge3dpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyfSB8IG51bGw7XG59O1xuXG5LZXBsZXJHbEZhY3RvcnkuZGVwcyA9IFtcbiAgQm90dG9tV2lkZ2V0RmFjdG9yeSxcbiAgR2VvQ29kZXJQYW5lbEZhY3RvcnksXG4gIE1hcENvbnRhaW5lckZhY3RvcnksXG4gIE1hcHNMYXlvdXRGYWN0b3J5LFxuICBNb2RhbENvbnRhaW5lckZhY3RvcnksXG4gIFNpZGVQYW5lbEZhY3RvcnksXG4gIFBsb3RDb250YWluZXJGYWN0b3J5LFxuICBOb3RpZmljYXRpb25QYW5lbEZhY3RvcnksXG4gIERuZENvbnRleHRGYWN0b3J5LFxuICBFZmZlY3RNYW5hZ2VyRmFjdG9yeVxuXTtcblxuZnVuY3Rpb24gS2VwbGVyR2xGYWN0b3J5KFxuICBCb3R0b21XaWRnZXQ6IFJldHVyblR5cGU8dHlwZW9mIEJvdHRvbVdpZGdldEZhY3Rvcnk+LFxuICBHZW9Db2RlclBhbmVsOiBSZXR1cm5UeXBlPHR5cGVvZiBHZW9Db2RlclBhbmVsRmFjdG9yeT4sXG4gIE1hcENvbnRhaW5lcjogUmV0dXJuVHlwZTx0eXBlb2YgTWFwQ29udGFpbmVyRmFjdG9yeT4sXG4gIE1hcHNMYXlvdXQ6IFJldHVyblR5cGU8dHlwZW9mIE1hcHNMYXlvdXRGYWN0b3J5PixcbiAgTW9kYWxDb250YWluZXI6IFJldHVyblR5cGU8dHlwZW9mIE1vZGFsQ29udGFpbmVyRmFjdG9yeT4sXG4gIFNpZGVQYW5lbDogUmV0dXJuVHlwZTx0eXBlb2YgU2lkZVBhbmVsRmFjdG9yeT4sXG4gIFBsb3RDb250YWluZXI6IFJldHVyblR5cGU8dHlwZW9mIFBsb3RDb250YWluZXJGYWN0b3J5PixcbiAgTm90aWZpY2F0aW9uUGFuZWw6IFJldHVyblR5cGU8dHlwZW9mIE5vdGlmaWNhdGlvblBhbmVsRmFjdG9yeT4sXG4gIERuZENvbnRleHQ6IFJldHVyblR5cGU8dHlwZW9mIERuZENvbnRleHRGYWN0b3J5PlxuKTogUmVhY3QuQ29tcG9uZW50VHlwZTxLZXBsZXJHTEJhc2ljUHJvcHMgJiB7c2VsZWN0b3I6ICguLi5hcmdzOiBhbnlbXSkgPT4gS2VwbGVyR2xTdGF0ZX0+IHtcbiAgLyoqIEB0eXBlZGVmIHtpbXBvcnQoJy4va2VwbGVyLWdsJykuVW5jb25uZWN0ZWRLZXBsZXJHbFByb3BzfSBLZXBsZXJHbFByb3BzICovXG4gIC8qKiBAYXVnbWVudHMgUmVhY3QuQ29tcG9uZW50PEtlcGxlckdsUHJvcHM+ICovXG4gIGNsYXNzIEtlcGxlckdMIGV4dGVuZHMgQ29tcG9uZW50PFxuICAgIEtlcGxlckdMUHJvcHMgJiB7c2VsZWN0b3I6ICguLi5hcmdzOiBhbnlbXSkgPT4gS2VwbGVyR2xTdGF0ZX0sXG4gICAgS2VwbGVyR0xDb21wU3RhdGVcbiAgPiB7XG4gICAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IERFRkFVTFRfS0VQTEVSX0dMX1BST1BTO1xuXG4gICAgc3RhdGU6IEtlcGxlckdMQ29tcFN0YXRlID0ge1xuICAgICAgZGltZW5zaW9uczogbnVsbFxuICAgIH07XG5cbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIGlmIChnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmJhc2VNYXBMaWJyYXJ5Q29uZmlnPy5bJ21hcGJveCddPy5tYXBMaWJOYW1lID09PSAnTWFwYm94Jykge1xuICAgICAgICB0aGlzLl92YWxpZGF0ZU1hcGJveFRva2VuKCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9sb2FkTWFwU3R5bGUoKTtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vbktlcGxlckdsSW5pdGlhbGl6ZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbktlcGxlckdsSW5pdGlhbGl6ZWQoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnJvb3QuY3VycmVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgIG9ic2VydmVEaW1lbnNpb25zKHRoaXMucm9vdC5jdXJyZW50LCB0aGlzLl9oYW5kbGVSZXNpemUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgaWYgKHRoaXMucm9vdC5jdXJyZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgdW5vYnNlcnZlRGltZW5zaW9ucyh0aGlzLnJvb3QuY3VycmVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX2hhbmRsZVJlc2l6ZSA9IGRpbWVuc2lvbnMgPT4ge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7ZGltZW5zaW9uc30pO1xuICAgIH07XG5cbiAgICBzdGF0aWMgY29udGV4dFR5cGUgPSBSb290Q29udGV4dDtcblxuICAgIHJvb3QgPSBjcmVhdGVSZWY8SFRNTERpdkVsZW1lbnQ+KCk7XG4gICAgYm90dG9tV2lkZ2V0UmVmID0gY3JlYXRlUmVmPEhUTUxEaXZFbGVtZW50PigpO1xuXG4gICAgLyogc2VsZWN0b3JzICovXG4gICAgdGhlbWVTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLnRoZW1lO1xuICAgIGF2YWlsYWJsZVRoZW1lU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3Rvcih0aGlzLnRoZW1lU2VsZWN0b3IsIHRoZW1lID0+XG4gICAgICB0eXBlb2YgdGhlbWUgPT09ICdvYmplY3QnXG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uYmFzaWNUaGVtZSxcbiAgICAgICAgICAgIC4uLnRoZW1lXG4gICAgICAgICAgfVxuICAgICAgICA6IHRoZW1lID09PSBUSEVNRS5saWdodFxuICAgICAgICA/IHRoZW1lTFRcbiAgICAgICAgOiB0aGVtZSA9PT0gVEhFTUUuYmFzZVxuICAgICAgICA/IHRoZW1lQlNcbiAgICAgICAgOiB0aGVtZVxuICAgICk7XG5cbiAgICBkYXRhc2V0c1NlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMudmlzU3RhdGUuZGF0YXNldHM7XG4gICAgZmlsdGVyZWREYXRhc2V0c1NlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IodGhpcy5kYXRhc2V0c1NlbGVjdG9yLCBnZXRWaXNpYmxlRGF0YXNldHMpO1xuXG4gICAgYXZhaWxhYmxlUHJvdmlkZXJzID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICAocHJvcHM6IEtlcGxlckdMUHJvcHMpID0+IHByb3BzLmNsb3VkUHJvdmlkZXJzLFxuICAgICAgcHJvdmlkZXJzID0+XG4gICAgICAgIEFycmF5LmlzQXJyYXkocHJvdmlkZXJzKSAmJiBwcm92aWRlcnMubGVuZ3RoXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGhhc1N0b3JhZ2U6IHByb3ZpZGVycy5zb21lKHAgPT4gcC5oYXNQcml2YXRlU3RvcmFnZSgpKSxcbiAgICAgICAgICAgICAgaGFzU2hhcmU6IHByb3ZpZGVycy5zb21lKHAgPT4gcC5oYXNTaGFyaW5nVXJsKCkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7fVxuICAgICk7XG5cbiAgICBsb2NhbGVNZXNzYWdlc1NlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICAocHJvcHM6IEtlcGxlckdMUHJvcHMpID0+IHByb3BzLmxvY2FsZU1lc3NhZ2VzLFxuICAgICAgY3VzdG9tTWVzc2FnZXMgPT4gKGN1c3RvbU1lc3NhZ2VzID8gbWVyZ2VNZXNzYWdlcyhtZXNzYWdlcywgY3VzdG9tTWVzc2FnZXMpIDogbWVzc2FnZXMpXG4gICAgKTtcblxuICAgIC8qIHByaXZhdGUgbWV0aG9kcyAqL1xuICAgIF92YWxpZGF0ZU1hcGJveFRva2VuKCkge1xuICAgICAgY29uc3Qge21hcGJveEFwaUFjY2Vzc1Rva2VufSA9IHRoaXMucHJvcHM7XG4gICAgICBpZiAoIXZhbGlkYXRlVG9rZW4obWFwYm94QXBpQWNjZXNzVG9rZW4pKSB7XG4gICAgICAgIENvbnNvbGUud2FybihNSVNTSU5HX01BUEJPWF9UT0tFTik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX2xvYWRNYXBTdHlsZSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGRlZmF1bHRTdHlsZXMgPSBPYmplY3QudmFsdWVzKHRoaXMucHJvcHMubWFwU3R5bGUubWFwU3R5bGVzKTtcbiAgICAgIC8vIGFkZCBpZCB0byBjdXN0b20gbWFwIHN0eWxlcyBpZiBub3QgZ2l2ZW5cbiAgICAgIGNvbnN0IGN1c3RvbVN0eWxlcyA9ICh0aGlzLnByb3BzLm1hcFN0eWxlcyB8fCBbXSkubWFwKG1zID0+ICh7XG4gICAgICAgIC4uLm1zLFxuICAgICAgICBpZDogbXMuaWQgfHwgZ2VuZXJhdGVIYXNoSWQoKVxuICAgICAgfSkpO1xuXG4gICAgICBjb25zdCBhbGxTdHlsZXMgPSBbLi4uY3VzdG9tU3R5bGVzLCAuLi5kZWZhdWx0U3R5bGVzXS5yZWR1Y2UoKGFjY3UsIHN0eWxlKSA9PiB7XG4gICAgICAgIGFjY3Vbc3R5bGUuaWRdID0gc3R5bGU7XG4gICAgICAgIHJldHVybiBhY2N1O1xuICAgICAgfSwge30pO1xuXG4gICAgICB0aGlzLnByb3BzLm1hcFN0eWxlQWN0aW9ucy5sb2FkTWFwU3R5bGVzKGFsbFN0eWxlcyk7XG4gICAgfTtcblxuICAgIF9kZWxldGVNYXBMYWJlbHMgPSAoY29udGFpbmVySWQsIGxheWVySWQpID0+IHtcbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLnRvZ2dsZUxheWVyRm9yTWFwKGNvbnRhaW5lcklkLCBsYXllcklkKTtcbiAgICB9O1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGlkID0gJ21hcCcsXG4gICAgICAgIHdpZHRoID0gREVGQVVMVF9LRVBMRVJfR0xfUFJPUFMud2lkdGgsXG4gICAgICAgIGhlaWdodCA9IERFRkFVTFRfS0VQTEVSX0dMX1BST1BTLmhlaWdodCxcbiAgICAgICAgdWlTdGF0ZSxcbiAgICAgICAgdmlzU3RhdGUsXG4gICAgICAgIC8vIHJlYWRPbmx5IG92ZXJyaWRlXG4gICAgICAgIHJlYWRPbmx5LFxuXG4gICAgICAgIC8vIGZlYXR1cmVzXG4gICAgICAgIGZlYXR1cmVGbGFncyxcblxuICAgICAgICAvLyBjbG91ZCBwcm92aWRlcnNcbiAgICAgICAgY2xvdWRQcm92aWRlcnMgPSBbXVxuICAgICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB0aGlzLnN0YXRlLmRpbWVuc2lvbnMgfHwge3dpZHRoLCBoZWlnaHR9O1xuICAgICAgY29uc3Qge1xuICAgICAgICBzcGxpdE1hcHMsIC8vIHRoaXMgd2lsbCBzdG9yZSBzdXBwb3J0IGZvciBzcGxpdCBtYXAgdmlldyBpcyBuZWNlc3NhcnlcbiAgICAgICAgaW50ZXJhY3Rpb25Db25maWdcbiAgICAgIH0gPSB2aXNTdGF0ZTtcblxuICAgICAgY29uc3QgaXNTcGxpdCA9IGlzU3BsaXRTZWxlY3Rvcih0aGlzLnByb3BzKTtcbiAgICAgIGNvbnN0IHRoZW1lID0gdGhpcy5hdmFpbGFibGVUaGVtZVNlbGVjdG9yKHRoaXMucHJvcHMpO1xuICAgICAgY29uc3QgbG9jYWxlTWVzc2FnZXMgPSB0aGlzLmxvY2FsZU1lc3NhZ2VzU2VsZWN0b3IodGhpcy5wcm9wcyk7XG4gICAgICBjb25zdCBpc0V4cG9ydGluZ0ltYWdlID0gdWlTdGF0ZS5leHBvcnRJbWFnZS5leHBvcnRpbmc7XG4gICAgICBjb25zdCBhdmFpbGFibGVQcm92aWRlcnMgPSB0aGlzLmF2YWlsYWJsZVByb3ZpZGVycyh0aGlzLnByb3BzKTtcblxuICAgICAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IHRoaXMuZmlsdGVyZWREYXRhc2V0c1NlbGVjdG9yKHRoaXMucHJvcHMpO1xuICAgICAgY29uc3Qgc2lkZUZpZWxkcyA9IHNpZGVQYW5lbFNlbGVjdG9yKHRoaXMucHJvcHMsIGF2YWlsYWJsZVByb3ZpZGVycywgZmlsdGVyZWREYXRhc2V0cyk7XG4gICAgICBjb25zdCBwbG90Q29udGFpbmVyRmllbGRzID0gcGxvdENvbnRhaW5lclNlbGVjdG9yKHRoaXMucHJvcHMpO1xuICAgICAgY29uc3QgYm90dG9tV2lkZ2V0RmllbGRzID0gYm90dG9tV2lkZ2V0U2VsZWN0b3IodGhpcy5wcm9wcywgdGhlbWUpO1xuICAgICAgY29uc3QgbW9kYWxDb250YWluZXJGaWVsZHMgPSBtb2RhbENvbnRhaW5lclNlbGVjdG9yKHRoaXMucHJvcHMsIHRoaXMucm9vdC5jdXJyZW50KTtcbiAgICAgIGNvbnN0IGdlb0NvZGVyUGFuZWxGaWVsZHMgPSBnZW9Db2RlclBhbmVsU2VsZWN0b3IodGhpcy5wcm9wcywgZGltZW5zaW9ucyk7XG4gICAgICBjb25zdCBub3RpZmljYXRpb25QYW5lbEZpZWxkcyA9IG5vdGlmaWNhdGlvblBhbmVsU2VsZWN0b3IodGhpcy5wcm9wcyk7XG5cbiAgICAgIGNvbnN0IG1hcENvbnRhaW5lcnMgPSAhaXNTcGxpdFxuICAgICAgICA/IFtcbiAgICAgICAgICAgIDxNYXBDb250YWluZXJcbiAgICAgICAgICAgICAgcHJpbWFyeT17dHJ1ZX1cbiAgICAgICAgICAgICAga2V5PXswfVxuICAgICAgICAgICAgICBpbmRleD17MH1cbiAgICAgICAgICAgICAgey4uLm1hcEZpZWxkc1NlbGVjdG9yKHRoaXMucHJvcHMpfVxuICAgICAgICAgICAgICBjb250YWluZXJJZD17MH1cbiAgICAgICAgICAgICAgZGVsZXRlTWFwTGFiZWxzPXt0aGlzLl9kZWxldGVNYXBMYWJlbHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIF1cbiAgICAgICAgOiBzcGxpdE1hcHMubWFwKChzZXR0aW5ncywgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxNYXBDb250YWluZXJcbiAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICAgICAgICBwcmltYXJ5PXtpbmRleCA9PT0gMX1cbiAgICAgICAgICAgICAgey4uLm1hcEZpZWxkc1NlbGVjdG9yKHRoaXMucHJvcHMsIGluZGV4KX1cbiAgICAgICAgICAgICAgY29udGFpbmVySWQ9e2luZGV4fVxuICAgICAgICAgICAgICBkZWxldGVNYXBMYWJlbHM9e3RoaXMuX2RlbGV0ZU1hcExhYmVsc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSk7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxSb290Q29udGV4dC5Qcm92aWRlciB2YWx1ZT17dGhpcy5yb290fT5cbiAgICAgICAgICA8RmVhdHVyZUZsYWdzQ29udGV4dFByb3ZpZGVyIGZlYXR1cmVGbGFncz17ZmVhdHVyZUZsYWdzfT5cbiAgICAgICAgICAgIDxJbnRsUHJvdmlkZXIgbG9jYWxlPXt1aVN0YXRlLmxvY2FsZX0gbWVzc2FnZXM9e2xvY2FsZU1lc3NhZ2VzW3VpU3RhdGUubG9jYWxlXX0+XG4gICAgICAgICAgICAgIDxTdHlsZVNoZWV0TWFuYWdlciBzaG91bGRGb3J3YXJkUHJvcD17c2hvdWxkRm9yd2FyZFByb3B9PlxuICAgICAgICAgICAgICAgIDxUaGVtZVByb3ZpZGVyIHRoZW1lPXt0aGVtZX0+XG4gICAgICAgICAgICAgICAgICA8Q2xvdWRMaXN0UHJvdmlkZXIgcHJvdmlkZXJzPXtjbG91ZFByb3ZpZGVyc30+XG4gICAgICAgICAgICAgICAgICAgIDxHbG9iYWxTdHlsZVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImtlcGxlci1nbFwiXG4gICAgICAgICAgICAgICAgICAgICAgaWQ9e2BrZXBsZXItZ2xfXyR7aWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBgJHt3aWR0aH1weGAsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGAke2hlaWdodH1weGBcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIHJlZj17dGhpcy5yb290fVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPE5vdGlmaWNhdGlvblBhbmVsIHsuLi5ub3RpZmljYXRpb25QYW5lbEZpZWxkc30gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8RG5kQ29udGV4dCB2aXNTdGF0ZT17dmlzU3RhdGV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgeyF1aVN0YXRlLnJlYWRPbmx5ICYmICFyZWFkT25seSAmJiA8U2lkZVBhbmVsIHsuLi5zaWRlRmllbGRzfSAvPn1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxNYXBzTGF5b3V0IGNsYXNzTmFtZT1cIm1hcHNcIiBtYXBTdGF0ZT17dGhpcy5wcm9wcy5tYXBTdGF0ZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHttYXBDb250YWluZXJzfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9NYXBzTGF5b3V0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvRG5kQ29udGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICB7aXNFeHBvcnRpbmdJbWFnZSAmJiA8UGxvdENvbnRhaW5lciB7Li4ucGxvdENvbnRhaW5lckZpZWxkc30gLz59XG4gICAgICAgICAgICAgICAgICAgICAgey8qIDEgZ2VvY29kZXI6IHNpbmdsZSBtb2RlIE9SIHNwbGl0IG1vZGUgYW5kIHN5bmNlZCB2aWV3cG9ydHMgKi99XG4gICAgICAgICAgICAgICAgICAgICAgeyFpc1ZpZXdwb3J0RGlzam9pbnRlZCh0aGlzLnByb3BzKSAmJiBpbnRlcmFjdGlvbkNvbmZpZy5nZW9jb2Rlci5lbmFibGVkICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxHZW9Db2RlclBhbmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHsuLi5nZW9Db2RlclBhbmVsRmllbGRzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleD17MH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zeW5jZWRWaWV3cG9ydHM9e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIHsvKiAyIGdlb2NvZGVyczogc3BsaXQgbW9kZSBhbmQgdW5zeW5jZWQgdmlld3BvcnRzICovfVxuICAgICAgICAgICAgICAgICAgICAgIHtpc1ZpZXdwb3J0RGlzam9pbnRlZCh0aGlzLnByb3BzKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3Rpb25Db25maWcuZ2VvY29kZXIuZW5hYmxlZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgbWFwQ29udGFpbmVycy5tYXAoKF9tYXBDb250YWluZXIsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxHZW9Db2RlclBhbmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Li4uZ2VvQ29kZXJQYW5lbEZpZWxkc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zeW5jZWRWaWV3cG9ydHM9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAgICA8Qm90dG9tV2lkZ2V0T3V0ZXIgYWJzb2x1dGU9eyFoYXNQb3J0YWJsZVdpZHRoKGJyZWFrUG9pbnRWYWx1ZXMpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxCb3R0b21XaWRnZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdFJlZj17dGhpcy5ib3R0b21XaWRnZXRSZWZ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHsuLi5ib3R0b21XaWRnZXRGaWVsZHN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lclc9e2RpbWVuc2lvbnMud2lkdGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lPXt0aGVtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9Cb3R0b21XaWRnZXRPdXRlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8TW9kYWxDb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsuLi5tb2RhbENvbnRhaW5lckZpZWxkc31cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lclc9e2RpbWVuc2lvbnMud2lkdGh9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJIPXtkaW1lbnNpb25zLmhlaWdodH1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L0dsb2JhbFN0eWxlPlxuICAgICAgICAgICAgICAgICAgPC9DbG91ZExpc3RQcm92aWRlcj5cbiAgICAgICAgICAgICAgICA8L1RoZW1lUHJvdmlkZXI+XG4gICAgICAgICAgICAgIDwvU3R5bGVTaGVldE1hbmFnZXI+XG4gICAgICAgICAgICA8L0ludGxQcm92aWRlcj5cbiAgICAgICAgICA8L0ZlYXR1cmVGbGFnc0NvbnRleHRQcm92aWRlcj5cbiAgICAgICAgPC9Sb290Q29udGV4dC5Qcm92aWRlcj5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGtlcGxlckdsQ29ubmVjdChcbiAgICBtYXBTdGF0ZVRvUHJvcHMsXG4gICAgbWFrZU1hcERpc3BhdGNoVG9Qcm9wc1xuICApKHdpdGhUaGVtZShLZXBsZXJHTCkpIGFzIFJldHVyblR5cGU8dHlwZW9mIEtlcGxlckdsRmFjdG9yeT47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXBTdGF0ZVRvUHJvcHMoc3RhdGU6IEtlcGxlckdsU3RhdGUsIHByb3BzOiBLZXBsZXJHTFByb3BzKSB7XG4gIHJldHVybiB7XG4gICAgLi4ucHJvcHMsXG4gICAgdmlzU3RhdGU6IHN0YXRlLnZpc1N0YXRlLFxuICAgIG1hcFN0eWxlOiBzdGF0ZS5tYXBTdHlsZSxcbiAgICBtYXBTdGF0ZTogc3RhdGUubWFwU3RhdGUsXG4gICAgdWlTdGF0ZTogc3RhdGUudWlTdGF0ZSxcbiAgICBwcm92aWRlclN0YXRlOiBzdGF0ZS5wcm92aWRlclN0YXRlXG4gIH07XG59XG5cbmNvbnN0IGRlZmF1bHRVc2VyQWN0aW9ucyA9IHt9O1xuXG5jb25zdCBnZXREaXNwYXRjaCA9IGRpc3BhdGNoID0+IGRpc3BhdGNoO1xuY29uc3QgZ2V0VXNlckFjdGlvbnMgPSAoZGlzcGF0Y2gsIHByb3BzKSA9PiBwcm9wcy5hY3Rpb25zIHx8IGRlZmF1bHRVc2VyQWN0aW9ucztcblxuLyoqIEB0eXBlIHsoKSA9PiBpbXBvcnQoJ3Jlc2VsZWN0JykuT3V0cHV0UGFyYW1ldHJpY1NlbGVjdG9yPGFueSwgYW55LCBhbnksIGFueT59ICovXG5leHBvcnQgZnVuY3Rpb24gbWFrZUdldEFjdGlvbkNyZWF0b3JzKCkge1xuICByZXR1cm4gY3JlYXRlU2VsZWN0b3IoW2dldERpc3BhdGNoLCBnZXRVc2VyQWN0aW9uc10sIChkaXNwYXRjaCwgdXNlckFjdGlvbnMpID0+IHtcbiAgICBjb25zdCBbdmlzU3RhdGVBY3Rpb25zLCBtYXBTdGF0ZUFjdGlvbnMsIG1hcFN0eWxlQWN0aW9ucywgdWlTdGF0ZUFjdGlvbnMsIHByb3ZpZGVyQWN0aW9uc10gPSBbXG4gICAgICBWaXNTdGF0ZUFjdGlvbnMsXG4gICAgICBNYXBTdGF0ZUFjdGlvbnMsXG4gICAgICBNYXBTdHlsZUFjdGlvbnMsXG4gICAgICBVSVN0YXRlQWN0aW9ucyxcbiAgICAgIFByb3ZpZGVyQWN0aW9uc1xuICAgIF0ubWFwKGFjdGlvbnMgPT4gYmluZEFjdGlvbkNyZWF0b3JzKG1lcmdlQWN0aW9ucyhhY3Rpb25zLCB1c2VyQWN0aW9ucyksIGRpc3BhdGNoKSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdmlzU3RhdGVBY3Rpb25zLFxuICAgICAgbWFwU3RhdGVBY3Rpb25zLFxuICAgICAgbWFwU3R5bGVBY3Rpb25zLFxuICAgICAgdWlTdGF0ZUFjdGlvbnMsXG4gICAgICBwcm92aWRlckFjdGlvbnMsXG4gICAgICBkaXNwYXRjaFxuICAgIH07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBtYWtlTWFwRGlzcGF0Y2hUb1Byb3BzKCkge1xuICBjb25zdCBnZXRBY3Rpb25DcmVhdG9ycyA9IG1ha2VHZXRBY3Rpb25DcmVhdG9ycygpO1xuICBjb25zdCBtYXBEaXNwYXRjaFRvUHJvcHMgPSAoZGlzcGF0Y2gsIG93blByb3BzKSA9PiB7XG4gICAgY29uc3QgZ3JvdXBlZEFjdGlvbkNyZWF0b3JzID0gZ2V0QWN0aW9uQ3JlYXRvcnMoZGlzcGF0Y2gsIG93blByb3BzKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5ncm91cGVkQWN0aW9uQ3JlYXRvcnMsXG4gICAgICBkaXNwYXRjaFxuICAgIH07XG4gIH07XG5cbiAgcmV0dXJuIG1hcERpc3BhdGNoVG9Qcm9wcztcbn1cblxuLyoqXG4gKiBPdmVycmlkZSBkZWZhdWx0IGtlcGxlci5nbCBhY3Rpb25zIHdpdGggdXNlciBkZWZpbmVkIGFjdGlvbnMgdXNpbmcgdGhlIHNhbWUga2V5XG4gKi9cbmZ1bmN0aW9uIG1lcmdlQWN0aW9ucyhhY3Rpb25zLCB1c2VyQWN0aW9ucykge1xuICBjb25zdCBvdmVycmlkZXMgPSB7fTtcbiAgZm9yIChjb25zdCBrZXkgaW4gdXNlckFjdGlvbnMpIHtcbiAgICBpZiAoXG4gICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodXNlckFjdGlvbnMsIGtleSkgJiZcbiAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhY3Rpb25zLCBrZXkpXG4gICAgKSB7XG4gICAgICBvdmVycmlkZXNba2V5XSA9IHVzZXJBY3Rpb25zW2tleV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsuLi5hY3Rpb25zLCAuLi5vdmVy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
|