@kepler.gl/constants 3.3.0-alpha.5 → 3.3.0-alpha.7

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.
Files changed (44) hide show
  1. package/dist/cjs/annotation.js +45 -0
  2. package/dist/cjs/color-palettes.js +461 -0
  3. package/dist/cjs/colors-by-theme.js +519 -0
  4. package/dist/cjs/dataset.js +82 -0
  5. package/dist/cjs/default-settings.js +1737 -0
  6. package/dist/cjs/gpu-parameters.js +125 -0
  7. package/dist/cjs/index.js +149 -0
  8. package/dist/cjs/keyevent.js +26 -0
  9. package/dist/cjs/layers.js +606 -0
  10. package/dist/{plot.js → cjs/plot.js} +1 -1
  11. package/dist/cjs/time.js +194 -0
  12. package/dist/cjs/tooltip.js +221 -0
  13. package/dist/cjs/user-feedbacks.js +15 -0
  14. package/dist/cjs/user-guides.js +19 -0
  15. package/dist/default-settings.d.ts +16 -0
  16. package/dist/esm/annotation.js +38 -0
  17. package/dist/esm/color-palettes.js +453 -0
  18. package/dist/esm/colors-by-theme.js +513 -0
  19. package/dist/esm/dataset.js +80 -0
  20. package/dist/esm/default-settings.js +1731 -0
  21. package/dist/esm/gpu-parameters.js +119 -0
  22. package/dist/esm/index.js +18 -0
  23. package/dist/esm/keyevent.js +19 -0
  24. package/dist/esm/layers.js +599 -0
  25. package/dist/esm/plot.js +9 -0
  26. package/dist/esm/time.js +190 -0
  27. package/dist/esm/tooltip.js +215 -0
  28. package/dist/esm/user-feedbacks.js +9 -0
  29. package/dist/esm/user-guides.js +13 -0
  30. package/dist/layers.d.ts +1 -0
  31. package/package.json +17 -8
  32. package/dist/annotation.js +0 -45
  33. package/dist/color-palettes.js +0 -461
  34. package/dist/colors-by-theme.js +0 -519
  35. package/dist/dataset.js +0 -82
  36. package/dist/default-settings.js +0 -1729
  37. package/dist/gpu-parameters.js +0 -125
  38. package/dist/index.js +0 -149
  39. package/dist/keyevent.js +0 -26
  40. package/dist/layers.js +0 -605
  41. package/dist/time.js +0 -194
  42. package/dist/tooltip.js +0 -221
  43. package/dist/user-feedbacks.js +0 -15
  44. package/dist/user-guides.js +0 -19
@@ -0,0 +1,1731 @@
1
+ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
2
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
3
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
4
+ var _FIELD_TYPE_DISPLAY, _FIELD_OPTS;
5
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
6
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
7
+ // SPDX-License-Identifier: MIT
8
+ // Copyright contributors to the kepler.gl project
9
+
10
+ import keyMirror from 'keymirror';
11
+ import { scaleLinear, scaleLog, scaleOrdinal, scalePoint, scaleQuantile, scaleQuantize, scaleSqrt, scaleThreshold } from 'd3-scale';
12
+ import { TOOLTIP_FORMAT_TYPES } from './tooltip';
13
+ export var ACTION_PREFIX = '@@kepler.gl/';
14
+ export var KEPLER_UNFOLDED_BUCKET = 'https://studio-public-data.foursquare.com/statics/keplergl';
15
+ export var BASEMAP_ICON_PREFIX = "geodude";
16
+ export var DEFAULT_MAPBOX_API_URL = 'https://api.mapbox.com';
17
+ export var TRANSITION_DURATION = 0;
18
+
19
+ // Modal Ids
20
+ /**
21
+ * Modal id: data table
22
+ * @constant
23
+ * @type {string}
24
+ * @public
25
+ */
26
+ export var DATA_TABLE_ID = 'dataTable';
27
+ /**
28
+ * Modal id: delete dataset confirm dialog
29
+ * @constant
30
+ * @type {string}
31
+ * @public
32
+ */
33
+ export var DELETE_DATA_ID = 'deleteData';
34
+ /**
35
+ * Modal id: add data modal
36
+ * @constant
37
+ * @type {string}
38
+ * @public
39
+ */
40
+ export var ADD_DATA_ID = 'addData';
41
+ /**
42
+ * Modal id: export image modal
43
+ * @constant
44
+ * @type {string}
45
+ * @public
46
+ */
47
+ export var EXPORT_IMAGE_ID = 'exportImage';
48
+ /**
49
+ * Modal id: export data modal
50
+ * @constant
51
+ * @type {string}
52
+ * @public
53
+ */
54
+ export var EXPORT_DATA_ID = 'exportData';
55
+ /**
56
+ * Modal id: add custom map style modal
57
+ * @constant
58
+ * @type {string}
59
+ * @public
60
+ */
61
+ export var ADD_MAP_STYLE_ID = 'addMapStyle';
62
+ /**
63
+ * Modal id: export map modal
64
+ * @constant
65
+ * @type {string}
66
+ * @public
67
+ */
68
+ export var EXPORT_MAP_ID = 'exportMap';
69
+ /**
70
+ * Modal id: export video modal
71
+ * @constant
72
+ * @type {string}
73
+ * @public
74
+ */
75
+ export var EXPORT_VIDEO_ID = 'exportVideo';
76
+ /**
77
+ * Modal id: save map modal
78
+ * @constant
79
+ * @type {string}
80
+ * @public
81
+ */
82
+ export var SAVE_MAP_ID = 'saveMap';
83
+ /**
84
+ * Modal id: confirm to overwrite saved map
85
+ * @constant
86
+ * @type {string}
87
+ * @public
88
+ */
89
+ export var OVERWRITE_MAP_ID = 'overwriteMap';
90
+ /**
91
+ * Modal id: share map url modal
92
+ * @constant
93
+ * @type {string}
94
+ * @public
95
+ */
96
+ export var SHARE_MAP_ID = 'shareMap';
97
+ export var KEPLER_GL_NAME = 'kepler.gl';
98
+
99
+ // __PACKAGE_VERSION__ is automatically injected by Babel/Esbuild during the build process
100
+ // Since we are injecting this during the build process with babel
101
+ // while developing VERSION is not defined, we capture the exception and return
102
+ // an empty string which will allow us to retrieve the latest umd version
103
+ export var KEPLER_GL_VERSION = "3.3.0-alpha.7";
104
+ export var KEPLER_GL_WEBSITE = 'http://kepler.gl/';
105
+ export var DIMENSIONS = {
106
+ sidePanel: {
107
+ width: 300,
108
+ margin: {
109
+ top: 12,
110
+ left: 12,
111
+ bottom: 12,
112
+ right: 20
113
+ },
114
+ headerHeight: 96
115
+ },
116
+ mapControl: {
117
+ width: 184,
118
+ padding: 12,
119
+ mapLegend: {
120
+ pinned: {
121
+ bottom: 22,
122
+ right: 12
123
+ }
124
+ }
125
+ }
126
+ };
127
+
128
+ /**
129
+ * Theme name that can be passed to `KeplerGl` `prop.theme`.
130
+ * Available themes are `THEME.light` and `THEME.dark`. Default theme is `THEME.dark`
131
+ * @constant
132
+ * @type {object}
133
+ * @public
134
+ * @example
135
+ * ```js
136
+ * const Map = () => <KeplerGl theme={THEME.light} id="map"/>
137
+ * ```
138
+ */
139
+ export var THEME = keyMirror({
140
+ light: null,
141
+ dark: null,
142
+ base: null
143
+ });
144
+ export var SIDEBAR_PANELS = [{
145
+ id: 'layer',
146
+ label: 'sidebar.panels.layer',
147
+ onClick: null
148
+ }, {
149
+ id: 'filter',
150
+ label: 'sidebar.panels.filter',
151
+ onClick: null
152
+ }, {
153
+ id: 'interaction',
154
+ label: 'sidebar.panels.interaction',
155
+ onClick: null
156
+ }, {
157
+ id: 'map',
158
+ label: 'sidebar.panels.basemap',
159
+ onClick: null
160
+ }];
161
+ export var PANEL_VIEW_TOGGLES = keyMirror({
162
+ list: null,
163
+ byDataset: null
164
+ });
165
+
166
+ // backward compatibility
167
+ export var PANELS = SIDEBAR_PANELS;
168
+
169
+ // MAP STYLES
170
+
171
+ export var DEFAULT_BLDG_COLOR = '#D1CEC7';
172
+ export var DEFAULT_BACKGROUND_COLOR = '#000000';
173
+
174
+ // assists in identifying basemap background layers when auto-determining the backgroundColor
175
+ export var BASE_MAP_BACKGROUND_LAYER_IDS = ['background', 'bg', 'land', 'water'];
176
+ export var BACKGROUND_LAYER_GROUP_SLUG = 'Background';
177
+ export var THREE_D_BUILDING_LAYER_GROUP_SLUG = '3d building';
178
+ export var BACKGROUND_LAYER_GROUP = {
179
+ slug: BACKGROUND_LAYER_GROUP_SLUG,
180
+ filter: function filter() {
181
+ return false;
182
+ },
183
+ defaultVisibility: false,
184
+ isVisibilityToggleAvailable: false,
185
+ isMoveToTopAvailable: false,
186
+ isColorPickerAvailable: true
187
+ };
188
+ export var DEFAULT_LAYER_GROUPS = [{
189
+ slug: 'label',
190
+ filter: function filter(_ref) {
191
+ var id = _ref.id,
192
+ type = _ref.type;
193
+ return id.match(/(?=(label|place-|poi-))/) || (type === null || type === void 0 ? void 0 : type.match(/(?=(symbol))/));
194
+ },
195
+ defaultVisibility: true,
196
+ isVisibilityToggleAvailable: true,
197
+ isMoveToTopAvailable: true,
198
+ isColorPickerAvailable: false
199
+ }, {
200
+ slug: 'road',
201
+ filter: function filter(_ref2) {
202
+ var id = _ref2.id;
203
+ return id.match(/(?=(road|railway|tunnel|street|bridge))(?!.*label)/);
204
+ },
205
+ defaultVisibility: true,
206
+ isVisibilityToggleAvailable: true,
207
+ isMoveToTopAvailable: true,
208
+ isColorPickerAvailable: false
209
+ }, {
210
+ slug: 'border',
211
+ filter: function filter(_ref3) {
212
+ var id = _ref3.id;
213
+ return id.match(/border|boundaries|boundary/);
214
+ },
215
+ defaultVisibility: false,
216
+ isVisibilityToggleAvailable: true,
217
+ isMoveToTopAvailable: true,
218
+ isColorPickerAvailable: false
219
+ }, {
220
+ slug: 'building',
221
+ filter: function filter(_ref4) {
222
+ var id = _ref4.id;
223
+ return id.match(/building/);
224
+ },
225
+ defaultVisibility: true,
226
+ isVisibilityToggleAvailable: true,
227
+ isMoveToTopAvailable: true,
228
+ isColorPickerAvailable: false
229
+ }, {
230
+ slug: 'water',
231
+ filter: function filter(_ref5) {
232
+ var id = _ref5.id;
233
+ return id.match(/(?=(water|stream|ferry))/);
234
+ },
235
+ defaultVisibility: true,
236
+ isVisibilityToggleAvailable: true,
237
+ isMoveToTopAvailable: true,
238
+ isColorPickerAvailable: false
239
+ }, {
240
+ slug: 'land',
241
+ filter: function filter(_ref6) {
242
+ var id = _ref6.id;
243
+ return id.match(/(?=(parks|landcover|industrial|sand|hillshade))/);
244
+ },
245
+ defaultVisibility: true,
246
+ isVisibilityToggleAvailable: true,
247
+ isMoveToTopAvailable: true,
248
+ isColorPickerAvailable: false
249
+ }, {
250
+ slug: THREE_D_BUILDING_LAYER_GROUP_SLUG,
251
+ filter: function filter() {
252
+ return false;
253
+ },
254
+ defaultVisibility: false,
255
+ isVisibilityToggleAvailable: true,
256
+ isMoveToTopAvailable: true,
257
+ isColorPickerAvailable: true
258
+ }];
259
+ export var BASE_MAP_COLOR_MODES = keyMirror({
260
+ NONE: null,
261
+ DARK: null,
262
+ LIGHT: null
263
+ });
264
+ export var NO_MAP_ID = 'no_map';
265
+
266
+ // Fallback style to use when styles are being fetched, or when
267
+ // a style fails to fetch
268
+ export var EMPTY_MAPBOX_STYLE = {
269
+ version: 8,
270
+ sources: {},
271
+ layers: []
272
+ };
273
+ export var MAP_LIB_OPTIONS = {
274
+ MAPBOX: 'mapbox',
275
+ MAPLIBRE: 'maplibre'
276
+ };
277
+
278
+ /** Mapbox GL JS does not support pitch above 60 degrees */
279
+ export var MAPBOX_MAX_PITCH = 60;
280
+ export var NO_BASEMAP_ICON = "".concat(BASEMAP_ICON_PREFIX, "/NO_BASEMAP.png");
281
+ export var DEFAULT_BASE_MAP_STYLE = 'dark-matter';
282
+ export var DEFAULT_NO_BASEMAP_STYLE = {
283
+ id: NO_MAP_ID,
284
+ label: 'No Basemap',
285
+ url: '',
286
+ icon: NO_BASEMAP_ICON,
287
+ layerGroups: [BACKGROUND_LAYER_GROUP],
288
+ colorMode: BASE_MAP_COLOR_MODES.NONE,
289
+ style: EMPTY_MAPBOX_STYLE
290
+ };
291
+ export var DEFAULT_MAPBOX_STYLES = [{
292
+ id: 'dark',
293
+ label: 'Dark',
294
+ url: 'mapbox://styles/uberdata/cjoqbbf6l9k302sl96tyvka09',
295
+ icon: "".concat(BASEMAP_ICON_PREFIX, "/UBER_DARK_V2.png"),
296
+ layerGroups: DEFAULT_LAYER_GROUPS,
297
+ colorMode: BASE_MAP_COLOR_MODES.DARK,
298
+ complimentaryStyleId: 'light'
299
+ }, {
300
+ id: 'light',
301
+ label: 'Light',
302
+ url: 'mapbox://styles/uberdata/cjoqb9j339k1f2sl9t5ic5bn4',
303
+ icon: "".concat(BASEMAP_ICON_PREFIX, "/UBER_LIGHT_V2.png"),
304
+ layerGroups: DEFAULT_LAYER_GROUPS,
305
+ colorMode: BASE_MAP_COLOR_MODES.LIGHT,
306
+ complimentaryStyleId: 'dark'
307
+ }, {
308
+ id: 'muted',
309
+ label: 'Muted Light',
310
+ url: 'mapbox://styles/uberdata/cjfyl03kp1tul2smf5v2tbdd4',
311
+ icon: "".concat(BASEMAP_ICON_PREFIX, "/UBER_MUTED_LIGHT.png"),
312
+ layerGroups: DEFAULT_LAYER_GROUPS,
313
+ colorMode: BASE_MAP_COLOR_MODES.LIGHT,
314
+ complimentaryStyleId: 'muted_night'
315
+ }, {
316
+ id: 'muted_night',
317
+ label: 'Muted Night',
318
+ url: 'mapbox://styles/uberdata/cjfxhlikmaj1b2soyzevnywgs',
319
+ icon: "".concat(BASEMAP_ICON_PREFIX, "/UBER_MUTED_NIGHT.png"),
320
+ layerGroups: DEFAULT_LAYER_GROUPS,
321
+ colorMode: BASE_MAP_COLOR_MODES.DARK,
322
+ complimentaryStyleId: 'muted'
323
+ }];
324
+ export var DEFAULT_MAPBOX_SATELITE_STYLES = [{
325
+ id: 'satellite',
326
+ label: 'Satellite with streets',
327
+ url: "mapbox://styles/mapbox/satellite-streets-v11",
328
+ icon: "".concat(BASEMAP_ICON_PREFIX, "/UBER_SATELLITE.png"),
329
+ layerGroups: DEFAULT_LAYER_GROUPS,
330
+ colorMode: BASE_MAP_COLOR_MODES.NONE
331
+ }];
332
+ export var DEFAULT_MAPLIBRE_STYLES = [{
333
+ id: 'dark-matter',
334
+ label: 'DarkMatter',
335
+ url: 'https://basemaps.cartocdn.com/gl/dark-matter-gl-style/style.json',
336
+ icon: "".concat(BASEMAP_ICON_PREFIX, "/DARKMATTER.png"),
337
+ layerGroups: DEFAULT_LAYER_GROUPS,
338
+ colorMode: BASE_MAP_COLOR_MODES.DARK,
339
+ complimentaryStyleId: 'positron'
340
+ }, {
341
+ id: 'positron',
342
+ label: 'Positron',
343
+ url: 'https://basemaps.cartocdn.com/gl/positron-gl-style/style.json',
344
+ icon: "".concat(BASEMAP_ICON_PREFIX, "/POSITRON.png"),
345
+ layerGroups: DEFAULT_LAYER_GROUPS,
346
+ colorMode: BASE_MAP_COLOR_MODES.LIGHT,
347
+ complimentaryStyleId: 'dark-matter'
348
+ }, {
349
+ id: 'voyager',
350
+ label: 'Voyager',
351
+ url: 'https://basemaps.cartocdn.com/gl/voyager-gl-style/style.json',
352
+ icon: "".concat(BASEMAP_ICON_PREFIX, "/VOYAGER.png"),
353
+ layerGroups: DEFAULT_LAYER_GROUPS,
354
+ colorMode: BASE_MAP_COLOR_MODES.LIGHT,
355
+ complimentaryStyleId: 'dark-matter'
356
+ }];
357
+ export var DEFAULT_MAP_STYLES = [DEFAULT_NO_BASEMAP_STYLE].concat(DEFAULT_MAPLIBRE_STYLES, DEFAULT_MAPBOX_SATELITE_STYLES, DEFAULT_MAPBOX_STYLES);
358
+ export var GEOJSON_FIELDS = {
359
+ geojson: ['_geojson', 'all_points', 'geojson']
360
+ };
361
+ export var ICON_FIELDS = {
362
+ icon: ['icon']
363
+ };
364
+ export var TRIP_POINT_FIELDS = [['lat', 'lng'], ['lat', 'lon'], ['lat', 'long'], ['latitude', 'longitude']];
365
+ export var ALTITUDE_FIELDS = ['alt', 'altitude'];
366
+ export var TRIP_ARC_FIELDS = {
367
+ lat0: 'begintrip',
368
+ lng0: 'begintrip',
369
+ lat1: 'dropoff',
370
+ lng1: 'dropoff'
371
+ };
372
+ export var FILTER_TYPES = keyMirror({
373
+ range: null,
374
+ select: null,
375
+ input: null,
376
+ timeRange: null,
377
+ multiSelect: null,
378
+ polygon: null
379
+ });
380
+ export var FILTER_VIEW_TYPES = keyMirror({
381
+ side: null,
382
+ enlarged: null,
383
+ minified: null
384
+ });
385
+ export var DEFAULT_FILTER_VIEW_TYPE = FILTER_VIEW_TYPES.side;
386
+ export var SCALE_TYPES = keyMirror({
387
+ ordinal: null,
388
+ quantile: null,
389
+ quantize: null,
390
+ linear: null,
391
+ sqrt: null,
392
+ log: null,
393
+ threshold: null,
394
+ custom: null,
395
+ customOrdinal: null,
396
+ // ordinal domain to linear range
397
+ point: null
398
+ });
399
+ export var SCALE_TYPE_NAMES = {
400
+ ordinal: 'Ordinal',
401
+ quantile: 'Quantile',
402
+ quantize: 'Quantize',
403
+ linear: 'Linear',
404
+ sqrt: 'Sqrt',
405
+ log: 'Log',
406
+ threshold: 'Threshold',
407
+ custom: 'Custom Breaks',
408
+ customOrdinal: 'Custom Ordinal',
409
+ point: 'Point'
410
+ };
411
+ export var SCALE_FUNC = _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, SCALE_TYPES.linear, scaleLinear), SCALE_TYPES.quantize, scaleQuantize), SCALE_TYPES.quantile, scaleQuantile), SCALE_TYPES.ordinal, scaleOrdinal), SCALE_TYPES.sqrt, scaleSqrt), SCALE_TYPES.log, scaleLog), SCALE_TYPES.point, scalePoint), SCALE_TYPES.threshold, scaleThreshold), SCALE_TYPES.custom, scaleThreshold), SCALE_TYPES.customOrdinal, scaleOrdinal);
412
+ export var ALL_FIELD_TYPES = keyMirror({
413
+ "boolean": null,
414
+ date: null,
415
+ geojson: null,
416
+ integer: null,
417
+ real: null,
418
+ string: null,
419
+ timestamp: null,
420
+ point: null,
421
+ array: null,
422
+ object: null,
423
+ geoarrow: null,
424
+ h3: null
425
+ });
426
+
427
+ // Data Table
428
+ export var SORT_ORDER = keyMirror({
429
+ ASCENDING: null,
430
+ DESCENDING: null,
431
+ UNSORT: null
432
+ });
433
+ export var TABLE_OPTION = keyMirror({
434
+ SORT_ASC: null,
435
+ SORT_DES: null,
436
+ UNSORT: null,
437
+ PIN: null,
438
+ UNPIN: null,
439
+ COPY: null,
440
+ FORMAT_COLUMN: null
441
+ });
442
+ export var TABLE_OPTION_LIST = [{
443
+ value: TABLE_OPTION.SORT_ASC,
444
+ display: 'Sort Ascending',
445
+ icon: 'ArrowUp',
446
+ condition: function condition(props) {
447
+ return props.sortTableColumn && props.sortMode !== SORT_ORDER.ASCENDING;
448
+ }
449
+ }, {
450
+ value: TABLE_OPTION.SORT_DES,
451
+ display: 'Sort Descending',
452
+ icon: 'ArrowDown',
453
+ condition: function condition(props) {
454
+ return props.sortTableColumn && props.sortMode !== SORT_ORDER.DESCENDING;
455
+ }
456
+ }, {
457
+ value: TABLE_OPTION.UNSORT,
458
+ display: 'Unsort Column',
459
+ icon: 'Cancel',
460
+ condition: function condition(props) {
461
+ return props.isSorted;
462
+ }
463
+ }, {
464
+ value: TABLE_OPTION.PIN,
465
+ display: 'Pin Column',
466
+ icon: 'Pin',
467
+ condition: function condition(props) {
468
+ return !props.isPinned;
469
+ }
470
+ }, {
471
+ value: TABLE_OPTION.UNPIN,
472
+ display: 'Unpin Column',
473
+ icon: 'Cancel',
474
+ condition: function condition(props) {
475
+ return props.isPinned;
476
+ }
477
+ }, {
478
+ value: TABLE_OPTION.COPY,
479
+ display: 'Copy Column',
480
+ icon: 'Clipboard'
481
+ }, {
482
+ value: TABLE_OPTION.FORMAT_COLUMN,
483
+ display: 'Format Column',
484
+ icon: 'Hash',
485
+ condition: function condition(props) {
486
+ return props.setDisplayFormat;
487
+ }
488
+ }];
489
+ var YELLOW = '248, 194, 28';
490
+ var PINK = '242, 152, 163';
491
+ var PURPLE = '160, 106, 206';
492
+ var BLUE = '140, 210, 205';
493
+ var BLUE2 = '106, 160, 206';
494
+ var BLUE3 = '0, 172, 237';
495
+ var GREEN = '106, 160, 56';
496
+ var GREEN2 = '74, 165, 150';
497
+ var RED = '237, 88, 106';
498
+ var ORANGE = '231, 110, 58';
499
+ export var FIELD_TYPE_DISPLAY = (_FIELD_TYPE_DISPLAY = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_FIELD_TYPE_DISPLAY, ALL_FIELD_TYPES["boolean"], {
500
+ label: 'bool',
501
+ color: PINK
502
+ }), ALL_FIELD_TYPES.date, {
503
+ label: 'date',
504
+ color: PURPLE
505
+ }), ALL_FIELD_TYPES.geojson, {
506
+ label: 'geo',
507
+ color: BLUE2
508
+ }), ALL_FIELD_TYPES.geoarrow, {
509
+ label: 'geo',
510
+ color: BLUE2
511
+ }), ALL_FIELD_TYPES.integer, {
512
+ label: 'int',
513
+ color: YELLOW
514
+ }), ALL_FIELD_TYPES.real, {
515
+ label: 'float',
516
+ color: YELLOW
517
+ }), ALL_FIELD_TYPES.string, {
518
+ label: 'string',
519
+ color: BLUE
520
+ }), ALL_FIELD_TYPES.timestamp, {
521
+ label: 'time',
522
+ color: GREEN
523
+ }), ALL_FIELD_TYPES.point, {
524
+ label: 'point',
525
+ color: BLUE3
526
+ }), ALL_FIELD_TYPES.array, {
527
+ label: 'array',
528
+ color: ORANGE
529
+ }), _defineProperty(_defineProperty(_FIELD_TYPE_DISPLAY, ALL_FIELD_TYPES.object, {
530
+ label: 'object',
531
+ color: GREEN2
532
+ }), ALL_FIELD_TYPES.h3, {
533
+ label: 'h3',
534
+ color: BLUE
535
+ }));
536
+ export var FIELD_COLORS = {
537
+ "default": RED
538
+ };
539
+ export var HIGHLIGH_COLOR_3D = [255, 255, 255, 60];
540
+ export var CHANNEL_SCALES = keyMirror({
541
+ color: null,
542
+ radius: null,
543
+ size: null,
544
+ colorAggr: null,
545
+ sizeAggr: null,
546
+ angle: null
547
+ });
548
+ export var AGGREGATION_TYPES = {
549
+ // default
550
+ count: 'count',
551
+ // linear
552
+ average: 'average',
553
+ maximum: 'maximum',
554
+ minimum: 'minimum',
555
+ median: 'median',
556
+ stdev: 'stdev',
557
+ sum: 'sum',
558
+ variance: 'variance',
559
+ // ordinal
560
+ mode: 'mode',
561
+ countUnique: 'countUnique'
562
+ };
563
+ export var AGGREGATION_TYPE_OPTIONS = Object.entries(AGGREGATION_TYPES).map(function (_ref7) {
564
+ var _ref8 = _slicedToArray(_ref7, 2),
565
+ key = _ref8[0],
566
+ value = _ref8[1];
567
+ return {
568
+ id: key,
569
+ label: key === 'stdev' ? 'Std Deviation' : key === 'countUnique' ? 'Count Unique' : typeof value === 'string' ? value.charAt(0).toUpperCase() + value.slice(1) : value
570
+ };
571
+ });
572
+ export var linearFieldScaleFunctions = _defineProperty(_defineProperty(_defineProperty(_defineProperty({}, CHANNEL_SCALES.color, [SCALE_TYPES.quantize, SCALE_TYPES.quantile, SCALE_TYPES.custom]), CHANNEL_SCALES.radius, [SCALE_TYPES.sqrt]), CHANNEL_SCALES.size, [SCALE_TYPES.linear, SCALE_TYPES.sqrt, SCALE_TYPES.log]), CHANNEL_SCALES.angle, [SCALE_TYPES.linear]);
573
+ var DEFAULT_AGGREGATION_COLOR_SCALES = [SCALE_TYPES.quantize, SCALE_TYPES.quantile, SCALE_TYPES.custom];
574
+ export var linearFieldAggrScaleFunctions = _defineProperty(_defineProperty({}, CHANNEL_SCALES.colorAggr, [AGGREGATION_TYPES.average, AGGREGATION_TYPES.maximum, AGGREGATION_TYPES.minimum, AGGREGATION_TYPES.median, AGGREGATION_TYPES.stdev, AGGREGATION_TYPES.sum, AGGREGATION_TYPES.variance, AGGREGATION_TYPES.count].reduce(function (prev, cur) {
575
+ prev[cur] = DEFAULT_AGGREGATION_COLOR_SCALES;
576
+ return prev;
577
+ }, {})), CHANNEL_SCALES.sizeAggr, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, AGGREGATION_TYPES.average, [SCALE_TYPES.linear, SCALE_TYPES.sqrt, SCALE_TYPES.log]), AGGREGATION_TYPES.maximum, [SCALE_TYPES.linear, SCALE_TYPES.sqrt, SCALE_TYPES.log]), AGGREGATION_TYPES.minimum, [SCALE_TYPES.linear, SCALE_TYPES.sqrt, SCALE_TYPES.log]), AGGREGATION_TYPES.median, [SCALE_TYPES.linear, SCALE_TYPES.sqrt, SCALE_TYPES.log]), AGGREGATION_TYPES.stdev, [SCALE_TYPES.linear, SCALE_TYPES.sqrt, SCALE_TYPES.log]), AGGREGATION_TYPES.sum, [SCALE_TYPES.linear, SCALE_TYPES.sqrt, SCALE_TYPES.log]), AGGREGATION_TYPES.variance, [SCALE_TYPES.linear, SCALE_TYPES.sqrt, SCALE_TYPES.log]));
578
+ export var ordinalFieldScaleFunctions = _defineProperty(_defineProperty(_defineProperty({}, CHANNEL_SCALES.color, [SCALE_TYPES.ordinal, SCALE_TYPES.customOrdinal]), CHANNEL_SCALES.radius, [SCALE_TYPES.point]), CHANNEL_SCALES.size, [SCALE_TYPES.point]);
579
+ export var ordinalFieldAggrScaleFunctions = _defineProperty(_defineProperty({}, CHANNEL_SCALES.colorAggr, _defineProperty(_defineProperty({}, AGGREGATION_TYPES.mode, [SCALE_TYPES.ordinal]), AGGREGATION_TYPES.countUnique, [SCALE_TYPES.quantize, SCALE_TYPES.quantile])), CHANNEL_SCALES.sizeAggr, {});
580
+ export var notSupportedScaleOpts = _defineProperty(_defineProperty(_defineProperty({}, CHANNEL_SCALES.color, []), CHANNEL_SCALES.radius, []), CHANNEL_SCALES.size, []);
581
+ export var notSupportAggrOpts = _defineProperty(_defineProperty({}, CHANNEL_SCALES.colorAggr, {}), CHANNEL_SCALES.sizeAggr, {});
582
+
583
+ /**
584
+ * Default aggregation are based on ocunt
585
+ */
586
+ export var DEFAULT_AGGREGATION = _defineProperty(_defineProperty({}, CHANNEL_SCALES.colorAggr, _defineProperty({}, AGGREGATION_TYPES.count, DEFAULT_AGGREGATION_COLOR_SCALES)), CHANNEL_SCALES.sizeAggr, _defineProperty({}, AGGREGATION_TYPES.count, [SCALE_TYPES.linear, SCALE_TYPES.sqrt, SCALE_TYPES.log]));
587
+
588
+ /**
589
+ * Define what type of scale operation is allowed on each type of fields
590
+ */
591
+ export var FIELD_OPTS = (_FIELD_OPTS = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_FIELD_OPTS, ALL_FIELD_TYPES.string, {
592
+ type: 'categorical',
593
+ scale: _objectSpread(_objectSpread({}, ordinalFieldScaleFunctions), ordinalFieldAggrScaleFunctions),
594
+ format: {
595
+ legend: function legend(d) {
596
+ return d;
597
+ },
598
+ tooltip: []
599
+ }
600
+ }), ALL_FIELD_TYPES.real, {
601
+ type: 'numerical',
602
+ scale: _objectSpread(_objectSpread({}, linearFieldScaleFunctions), linearFieldAggrScaleFunctions),
603
+ format: {
604
+ legend: function legend(d) {
605
+ return d;
606
+ },
607
+ tooltip: [TOOLTIP_FORMAT_TYPES.NONE, TOOLTIP_FORMAT_TYPES.DECIMAL, TOOLTIP_FORMAT_TYPES.PERCENTAGE]
608
+ }
609
+ }), ALL_FIELD_TYPES.timestamp, {
610
+ type: 'time',
611
+ scale: _objectSpread(_objectSpread({}, linearFieldScaleFunctions), notSupportAggrOpts),
612
+ format: {
613
+ legend: function legend(d) {
614
+ return d;
615
+ },
616
+ tooltip: [TOOLTIP_FORMAT_TYPES.NONE, TOOLTIP_FORMAT_TYPES.DATE, TOOLTIP_FORMAT_TYPES.DATE_TIME]
617
+ }
618
+ }), ALL_FIELD_TYPES.integer, {
619
+ type: 'numerical',
620
+ scale: _objectSpread(_objectSpread({}, _objectSpread(_objectSpread({}, linearFieldScaleFunctions), {}, _defineProperty({}, CHANNEL_SCALES.color, [].concat(_toConsumableArray(linearFieldScaleFunctions[CHANNEL_SCALES.color]), [SCALE_TYPES.customOrdinal])))), linearFieldAggrScaleFunctions),
621
+ format: {
622
+ legend: function legend(d) {
623
+ return d;
624
+ },
625
+ tooltip: [TOOLTIP_FORMAT_TYPES.NONE, TOOLTIP_FORMAT_TYPES.DECIMAL, TOOLTIP_FORMAT_TYPES.PERCENTAGE]
626
+ }
627
+ }), ALL_FIELD_TYPES["boolean"], {
628
+ type: 'boolean',
629
+ scale: _objectSpread(_objectSpread({}, ordinalFieldScaleFunctions), ordinalFieldAggrScaleFunctions),
630
+ format: {
631
+ legend: function legend(d) {
632
+ return d;
633
+ },
634
+ tooltip: [TOOLTIP_FORMAT_TYPES.NONE, TOOLTIP_FORMAT_TYPES.BOOLEAN]
635
+ }
636
+ }), ALL_FIELD_TYPES.date, {
637
+ type: 'time',
638
+ scale: _objectSpread(_objectSpread({}, ordinalFieldScaleFunctions), ordinalFieldAggrScaleFunctions),
639
+ format: {
640
+ legend: function legend(d) {
641
+ return d;
642
+ },
643
+ tooltip: [TOOLTIP_FORMAT_TYPES.NONE, TOOLTIP_FORMAT_TYPES.DATE]
644
+ }
645
+ }), ALL_FIELD_TYPES.geojson, {
646
+ type: 'geometry',
647
+ scale: _objectSpread(_objectSpread({}, notSupportedScaleOpts), notSupportAggrOpts),
648
+ format: {
649
+ legend: function legend() {
650
+ return '...';
651
+ },
652
+ tooltip: []
653
+ }
654
+ }), ALL_FIELD_TYPES.geoarrow, {
655
+ type: 'geometry',
656
+ scale: _objectSpread(_objectSpread({}, notSupportedScaleOpts), notSupportAggrOpts),
657
+ format: {
658
+ legend: function legend() {
659
+ return '...';
660
+ },
661
+ tooltip: []
662
+ }
663
+ }), ALL_FIELD_TYPES.object, {
664
+ type: 'numerical',
665
+ scale: {},
666
+ format: {
667
+ legend: function legend() {
668
+ return '...';
669
+ },
670
+ tooltip: []
671
+ }
672
+ }), ALL_FIELD_TYPES.array, {
673
+ type: 'numerical',
674
+ scale: {},
675
+ format: {
676
+ legend: function legend() {
677
+ return '...';
678
+ },
679
+ tooltip: []
680
+ }
681
+ }), _defineProperty(_FIELD_OPTS, ALL_FIELD_TYPES.h3, {
682
+ type: 'h3',
683
+ scale: _objectSpread(_objectSpread({}, notSupportedScaleOpts), notSupportAggrOpts),
684
+ format: {
685
+ legend: function legend() {
686
+ return '...';
687
+ },
688
+ tooltip: []
689
+ }
690
+ }));
691
+ export var CHANNEL_SCALE_SUPPORTED_FIELDS = Object.keys(CHANNEL_SCALES).reduce(function (accu, key) {
692
+ return _objectSpread(_objectSpread({}, accu), {}, _defineProperty({}, key, Object.keys(FIELD_OPTS).filter(function (ft) {
693
+ return FIELD_OPTS[ft].scale[key] && Object.keys(FIELD_OPTS[ft].scale[key]).length;
694
+ })));
695
+ }, {});
696
+ export var DEFAULT_LAYER_COLOR = {
697
+ tripArc: '#9226C6',
698
+ begintrip_lat: '#1E96BE',
699
+ dropoff_lat: '#FF991F',
700
+ request_lat: '#52A353'
701
+ };
702
+ export var DEFAULT_LAYER_COLOR_PALETTE = 'Global Warming';
703
+ export var DEFAULT_LAYER_COLOR_PALETTE_STEPS = 6;
704
+
705
+ // let user pass in default tooltip fields
706
+ export var DEFAULT_TOOLTIP_FIELDS = [];
707
+ export var NO_VALUE_COLOR = [0, 0, 0, 0];
708
+ export var DEFAULT_PICKING_RADIUS = 3;
709
+ export var OVERLAY_BLENDINGS = {
710
+ normal: {
711
+ label: 'overlayBlending.normal',
712
+ value: 'normal'
713
+ },
714
+ screen: {
715
+ label: 'overlayBlending.screen',
716
+ value: 'screen'
717
+ },
718
+ darken: {
719
+ label: 'overlayBlending.darken',
720
+ value: 'darken'
721
+ }
722
+ };
723
+ export var LAYER_BLENDINGS = {
724
+ additive: {
725
+ label: 'layerBlending.additive',
726
+ blendFunc: ['SRC_ALPHA', 'DST_ALPHA'],
727
+ blendEquation: 'FUNC_ADD'
728
+ },
729
+ normal: {
730
+ // reference to
731
+ // https://limnu.com/webgl-blending-youre-probably-wrong/
732
+ label: 'layerBlending.normal',
733
+ blendFunc: ['SRC_ALPHA', 'ONE_MINUS_SRC_ALPHA', 'ONE', 'ONE_MINUS_SRC_ALPHA'],
734
+ blendEquation: ['FUNC_ADD', 'FUNC_ADD']
735
+ },
736
+ subtractive: {
737
+ label: 'layerBlending.subtractive',
738
+ blendFunc: ['ONE', 'ONE_MINUS_DST_COLOR', 'SRC_ALPHA', 'DST_ALPHA'],
739
+ blendEquation: ['FUNC_SUBTRACT', 'FUNC_ADD']
740
+ }
741
+ };
742
+ export var MAX_DEFAULT_TOOLTIPS = 5;
743
+ export var RESOLUTIONS = keyMirror({
744
+ ONE_X: null,
745
+ TWO_X: null
746
+ });
747
+ export var EXPORT_IMG_RATIOS = keyMirror({
748
+ SCREEN: null,
749
+ FOUR_BY_THREE: null,
750
+ SIXTEEN_BY_NINE: null,
751
+ CUSTOM: null
752
+ });
753
+ export var ScreenRatioOption = {
754
+ id: EXPORT_IMG_RATIOS.SCREEN,
755
+ label: 'modal.exportImage.ratioOriginalScreen',
756
+ getSize: function getSize(screenW, screenH) {
757
+ return {
758
+ width: screenW,
759
+ height: screenH
760
+ };
761
+ }
762
+ };
763
+ export var CustomRatioOption = {
764
+ id: EXPORT_IMG_RATIOS.CUSTOM,
765
+ hidden: true,
766
+ label: 'modal.exportImage.ratioCustom',
767
+ getSize: function getSize(mapW, mapH) {
768
+ return {
769
+ width: mapW,
770
+ height: mapH
771
+ };
772
+ }
773
+ };
774
+ export var FourByThreeRatioOption = {
775
+ id: EXPORT_IMG_RATIOS.FOUR_BY_THREE,
776
+ label: 'modal.exportImage.ratio4_3',
777
+ getSize: function getSize(screenW) {
778
+ return {
779
+ width: screenW,
780
+ height: Math.round(screenW * 0.75)
781
+ };
782
+ }
783
+ };
784
+ export var SixteenByNineRatioOption = {
785
+ id: EXPORT_IMG_RATIOS.SIXTEEN_BY_NINE,
786
+ label: 'modal.exportImage.ratio16_9',
787
+ getSize: function getSize(screenW) {
788
+ return {
789
+ width: screenW,
790
+ height: Math.round(screenW * 0.5625)
791
+ };
792
+ }
793
+ };
794
+ export var EXPORT_IMG_RATIO_OPTIONS = [ScreenRatioOption, FourByThreeRatioOption, SixteenByNineRatioOption, CustomRatioOption];
795
+ export var OneXResolutionOption = {
796
+ id: RESOLUTIONS.ONE_X,
797
+ label: '1x',
798
+ available: true,
799
+ scale: 1,
800
+ getSize: function getSize(screenW, screenH) {
801
+ return {
802
+ width: screenW,
803
+ height: screenH
804
+ };
805
+ }
806
+ };
807
+ export var TwoXResolutionOption = {
808
+ id: RESOLUTIONS.TWO_X,
809
+ label: '2x',
810
+ available: true,
811
+ scale: 2,
812
+ getSize: function getSize(screenW, screenH) {
813
+ return {
814
+ width: screenW * 2,
815
+ height: screenH * 2
816
+ };
817
+ }
818
+ };
819
+
820
+ // Fixed dimension options
821
+ export var Resolution1920x1080Option = {
822
+ id: '1920x1080',
823
+ label: '1920 × 1080 (16:9)',
824
+ available: true,
825
+ getSize: function getSize() {
826
+ return {
827
+ width: 1920,
828
+ height: 1080
829
+ };
830
+ }
831
+ };
832
+ export var Resolution1280x720Option = {
833
+ id: '1280x720',
834
+ label: '1280 × 720 (16:9)',
835
+ available: true,
836
+ getSize: function getSize() {
837
+ return {
838
+ width: 1280,
839
+ height: 720
840
+ };
841
+ }
842
+ };
843
+ export var Resolution2560x1440Option = {
844
+ id: '2560x1440',
845
+ label: '2560 × 1440 (16:9)',
846
+ available: true,
847
+ getSize: function getSize() {
848
+ return {
849
+ width: 2560,
850
+ height: 1440
851
+ };
852
+ }
853
+ };
854
+ export var Resolution1600x900Option = {
855
+ id: '1600x900',
856
+ label: '1600 × 900 (16:9)',
857
+ available: true,
858
+ getSize: function getSize() {
859
+ return {
860
+ width: 1600,
861
+ height: 900
862
+ };
863
+ }
864
+ };
865
+ export var Resolution1024x768Option = {
866
+ id: '1024x768',
867
+ label: '1024 × 768 (4:3)',
868
+ available: true,
869
+ getSize: function getSize() {
870
+ return {
871
+ width: 1024,
872
+ height: 768
873
+ };
874
+ }
875
+ };
876
+ export var Resolution1280x960Option = {
877
+ id: '1280x960',
878
+ label: '1280 × 960 (4:3)',
879
+ available: true,
880
+ getSize: function getSize() {
881
+ return {
882
+ width: 1280,
883
+ height: 960
884
+ };
885
+ }
886
+ };
887
+ export var Resolution1600x1200Option = {
888
+ id: '1600x1200',
889
+ label: '1600 × 1200 (4:3)',
890
+ available: true,
891
+ getSize: function getSize() {
892
+ return {
893
+ width: 1600,
894
+ height: 1200
895
+ };
896
+ }
897
+ };
898
+ export var Resolution1920x1440Option = {
899
+ id: '1920x1440',
900
+ label: '1920 × 1440 (4:3)',
901
+ available: true,
902
+ getSize: function getSize() {
903
+ return {
904
+ width: 1920,
905
+ height: 1440
906
+ };
907
+ }
908
+ };
909
+ export var EXPORT_IMG_RESOLUTION_OPTIONS = [OneXResolutionOption, TwoXResolutionOption, Resolution1280x720Option, Resolution1920x1080Option, Resolution2560x1440Option, Resolution1600x900Option, Resolution1024x768Option, Resolution1280x960Option, Resolution1600x1200Option, Resolution1920x1440Option];
910
+ export var EXPORT_DATA_TYPE = keyMirror({
911
+ CSV: null
912
+ // SHAPEFILE: null,
913
+ // JSON: null,
914
+ // GEOJSON: null,
915
+ // TOPOJSON: null
916
+ });
917
+ export var EXPORT_DATA_TYPE_OPTIONS = [{
918
+ id: EXPORT_DATA_TYPE.CSV,
919
+ label: EXPORT_DATA_TYPE.CSV.toLowerCase(),
920
+ available: true
921
+ }
922
+ // {
923
+ // id: EXPORT_DATA_TYPE.SHAPEFILE,
924
+ // label: 'shapefile',
925
+ // available: false
926
+ // },
927
+ // {
928
+ // id: EXPORT_DATA_TYPE.JSON,
929
+ // label: 'json',
930
+ // available: false
931
+ // },
932
+ // {
933
+ // id: EXPORT_DATA_TYPE.GEOJSON,
934
+ // label: 'geojson',
935
+ // available: false
936
+ // },
937
+ // {
938
+ // id: EXPORT_DATA_TYPE.TOPOJSON,
939
+ // label: 'topojson',
940
+ // available: false
941
+ // }
942
+ ];
943
+
944
+ // Export map types
945
+ export var EXPORT_MAP_FORMATS = keyMirror({
946
+ HTML: null,
947
+ JSON: null
948
+ });
949
+ export var EXPORT_HTML_MAP_MODES = keyMirror({
950
+ READ: null,
951
+ EDIT: null
952
+ });
953
+
954
+ // Export map options
955
+ export var EXPORT_MAP_FORMAT_OPTIONS = Object.entries(EXPORT_MAP_FORMATS).map(function (entry) {
956
+ return {
957
+ id: entry[0],
958
+ label: entry[1].toLowerCase(),
959
+ available: true
960
+ };
961
+ });
962
+ export function getHTMLMapModeTileUrl(mode) {
963
+ return "https://d1a3f4spazzrp4.cloudfront.net/kepler.gl/documentation/map-".concat(mode.toLowerCase(), "-mode.png");
964
+ }
965
+ export var EXPORT_HTML_MAP_MODE_OPTIONS = Object.entries(EXPORT_HTML_MAP_MODES).map(function (entry) {
966
+ return {
967
+ id: entry[0],
968
+ label: "modal.exportMap.html.".concat(entry[1].toLowerCase()),
969
+ available: true,
970
+ url: getHTMLMapModeTileUrl(entry[1])
971
+ };
972
+ });
973
+ export var DEFAULT_UUID_COUNT = 6;
974
+ export var DEFAULT_NOTIFICATION_MESSAGE = 'MESSAGE_NOT_PROVIDED';
975
+ export var DEFAULT_NOTIFICATION_TYPES = keyMirror({
976
+ info: null,
977
+ error: null,
978
+ warning: null,
979
+ success: null
980
+ });
981
+ export var DEFAULT_NOTIFICATION_TOPICS = keyMirror({
982
+ global: null,
983
+ file: null
984
+ });
985
+
986
+ // Minimum time between identical notifications about deck.gl errors
987
+ export var THROTTLE_NOTIFICATION_TIME = 330;
988
+
989
+ // Animation
990
+ export var BASE_SPEED = 600;
991
+ export var FPS = 60;
992
+
993
+ /**
994
+ * 4 Animation Window Types
995
+ * 1. free
996
+ * |-> |->
997
+ * Current time is a fixed range, animation controller calls next animation frames continuously to animation a moving window
998
+ * The increment id based on domain / BASE_SPEED * SPEED
999
+ *
1000
+ * 2. incremental
1001
+ * | |->
1002
+ * Same as free, current time is a growing range, only the max value of range increment during animation.
1003
+ * The increment is also based on domain / BASE_SPEED * SPEED
1004
+ *
1005
+ * 3. point
1006
+ * o -> o
1007
+ * Current time is a point, animation controller calls next animation frame continuously to animation a moving point
1008
+ * The increment is based on domain / BASE_SPEED * SPEED
1009
+ *
1010
+ * 4. interval
1011
+ * o ~> o
1012
+ * Current time is a point. An array of sorted time steps need to be provided.
1013
+ * animation controller calls next animation at a interval when the point jumps to the next step
1014
+ */
1015
+ export var ANIMATION_WINDOW = keyMirror({
1016
+ free: null,
1017
+ incremental: null,
1018
+ point: null,
1019
+ interval: null
1020
+ });
1021
+ export var DEFAULT_TIME_FORMAT = 'MM/DD/YY HH:mm:ssa';
1022
+ export var SPEED_CONTROL_RANGE = [0, 10];
1023
+ export var SPEED_CONTROL_STEP = 0.001;
1024
+
1025
+ // Geocoder
1026
+ export var GEOCODER_DATASET_NAME = 'geocoder_dataset';
1027
+ export var GEOCODER_LAYER_ID = 'geocoder_layer';
1028
+ export var GEOCODER_GEO_OFFSET = 0.05;
1029
+ export var GEOCODER_ICON_COLOR = [255, 0, 0];
1030
+ // Base icon size before anchor normalization. The geocoder pin icon is bottom-anchored
1031
+ // and scaled to fit the ScatterplotLayer unit circle (~0.5x), so the rendered size is
1032
+ // compensated here (80 * 2 = 160).
1033
+ export var GEOCODER_ICON_SIZE = 160;
1034
+
1035
+ // Editor
1036
+ export var EDITOR_LAYER_ID = 'kepler_editor_layer';
1037
+ export var EDITOR_LAYER_PICKING_RADIUS = 6;
1038
+ export var EDITOR_MODES = {
1039
+ DRAW_POLYGON: 'DRAW_POLYGON',
1040
+ DRAW_RECTANGLE: 'DRAW_RECTANGLE',
1041
+ DRAW_LINESTRING: 'DRAW_LINESTRING',
1042
+ DRAW_POINT: 'DRAW_POINT',
1043
+ EDIT: 'EDIT_VERTEX'
1044
+ };
1045
+ export var EDITOR_DRAW_MODES = [EDITOR_MODES.DRAW_POLYGON, EDITOR_MODES.DRAW_RECTANGLE, EDITOR_MODES.DRAW_LINESTRING, EDITOR_MODES.DRAW_POINT];
1046
+ export var PLOT_TYPES = keyMirror({
1047
+ histogram: null,
1048
+ lineChart: null
1049
+ });
1050
+
1051
+ // Filter
1052
+ export var INIT_FILTER_ITEMS_IN_DROPDOWN = 100;
1053
+
1054
+ // GPU Filtering
1055
+ /**
1056
+ * Max number of filter value buffers that deck.gl provides
1057
+ */
1058
+ export var MAX_GPU_FILTERS = 4;
1059
+ export var MAP_THUMBNAIL_DIMENSION = {
1060
+ width: 300,
1061
+ height: 200
1062
+ };
1063
+ export var MAP_INFO_CHARACTER = {
1064
+ title: 100,
1065
+ description: 100
1066
+ };
1067
+
1068
+ // Load data
1069
+ export var LOADING_METHODS = keyMirror({
1070
+ upload: null,
1071
+ storage: null,
1072
+ tileset: null
1073
+ });
1074
+ export var DEFAULT_FEATURE_FLAGS = {};
1075
+ export var DATASET_FORMATS = keyMirror({
1076
+ row: null,
1077
+ geojson: null,
1078
+ csv: null,
1079
+ keplergl: null,
1080
+ arrow: null,
1081
+ duckdb: null
1082
+ });
1083
+ export var MAP_CONTROLS = keyMirror({
1084
+ visibleLayers: null,
1085
+ mapLegend: null,
1086
+ toggle3d: null,
1087
+ splitMap: null,
1088
+ mapDraw: null,
1089
+ mapLocale: null,
1090
+ mapTheme: null,
1091
+ effect: null,
1092
+ annotation: null,
1093
+ aiAssistant: null
1094
+ });
1095
+ export var MapViewMode = /*#__PURE__*/function (MapViewMode) {
1096
+ MapViewMode["MODE_2D"] = "MODE_2D";
1097
+ MapViewMode["MODE_3D"] = "MODE_3D";
1098
+ MapViewMode["MODE_GLOBE"] = "MODE_GLOBE";
1099
+ return MapViewMode;
1100
+ }({});
1101
+
1102
+ /**
1103
+ * Minimum zoom level allowed in globe mode. Negative values let the user zoom
1104
+ * out further than the web-mercator default of 0, so the whole globe can be
1105
+ * pulled back to appear smaller on screen.
1106
+ */
1107
+ export var GLOBE_MIN_ZOOM = 2;
1108
+
1109
+ /**
1110
+ * Maximum zoom in globe mode.
1111
+ *
1112
+ * The previous "empty rectangles" at high zoom were caused by the vector basemap
1113
+ * layer declaring `maxZoom: 23` while the raw tile endpoints only have data to
1114
+ * z16 (mapbox-streets-v8) / z14 (CARTO) — deck then requested non-existent tiles
1115
+ * that 404. That is fixed in `getGlobeBaseLayers` by setting `maxZoom` to each
1116
+ * source's true data max so deck overzooms instead.
1117
+ *
1118
+ * The remaining practical ceiling is float32 precision: deck's globe places
1119
+ * geometry in common space on a sphere of radius 256 with no fp64/relative-to-
1120
+ * center trick, so beyond ~visual-zoom 16 (roughly this mapState zoom minus
1121
+ * `zoomAdjust(lat)` ≈ 1.65 at the equator) geometry starts to jitter/drift.
1122
+ */
1123
+ export var GLOBE_MAX_ZOOM = 16;
1124
+
1125
+ /**
1126
+ * Maximum absolute center latitude allowed in globe mode. Constrains the camera
1127
+ * target to a band around the equator so the view can't be centered on the
1128
+ * poles (deck.gl's default clamps to ~85°, which lets the camera stare straight
1129
+ * down at a pole). Applies symmetrically to the northern and southern hemisphere.
1130
+ */
1131
+ export var GLOBE_MAX_LATITUDE = 75;
1132
+ export var DEFAULT_GLOBE_CONFIG = {
1133
+ atmosphere: true,
1134
+ hugeHalo: true,
1135
+ hugeHaloRadius: 3.5,
1136
+ hugeHaloOpacity: 0.2,
1137
+ azimuth: false,
1138
+ azimuthAngle: 45,
1139
+ terminator: true,
1140
+ terminatorOpacity: 0.35,
1141
+ basemap: true,
1142
+ labels: false,
1143
+ labelsColor: [114.75, 114.75, 114.75],
1144
+ adminLines: true,
1145
+ adminLinesColor: [40, 63, 93],
1146
+ water: true,
1147
+ waterColor: [17, 35, 48],
1148
+ surface: true,
1149
+ surfaceColor: [9, 16, 29],
1150
+ // Color of the empty space rendered around the globe (deck.gl clear color).
1151
+ // Matches the previous hardcoded clear color [0.015, 0.035, 0.065] in 0-1 space.
1152
+ backgroundColor: [4, 9, 17],
1153
+ // Starfield behind the globe is on by default in globe view.
1154
+ stars: true
1155
+ };
1156
+ export var GLOBE_SUPPORTED_LAYERS = {
1157
+ point: true,
1158
+ arc: true,
1159
+ grid: true,
1160
+ hexagon: true,
1161
+ geojson: true,
1162
+ cluster: true,
1163
+ icon: true,
1164
+ hexagonId: true,
1165
+ '3D': true,
1166
+ vectorTile: true,
1167
+ hexTile: true,
1168
+ line: true,
1169
+ trip: true,
1170
+ rasterTile: true,
1171
+ heatmap: true,
1172
+ s2: false,
1173
+ tile3d: false,
1174
+ // Flow arrows are flat quads in common space (equatorial plane) and collapse when
1175
+ // viewed edge-on on the globe, so the flow layer is not supported in Globe mode.
1176
+ flow: false
1177
+ };
1178
+ export var MapSplitMode = /*#__PURE__*/function (MapSplitMode) {
1179
+ MapSplitMode["SINGLE_MAP"] = "SINGLE_MAP";
1180
+ MapSplitMode["DUAL_MAP"] = "DUAL_MAP";
1181
+ MapSplitMode["SWIPE_COMPARE"] = "SWIPE_COMPARE";
1182
+ return MapSplitMode;
1183
+ }({});
1184
+
1185
+ /**
1186
+ * A multiplier for screen-space width/scale for Arc, Line, Icon and Text layers.
1187
+ * Required in order to maintain the same appearance after upgrading to deck.gl v8.5.
1188
+ * https://github.com/visgl/deck.gl/blob/master/docs/upgrade-guide.md
1189
+ */
1190
+ export var PROJECTED_PIXEL_SIZE_MULTIPLIER = 2 / 3;
1191
+
1192
+ /**
1193
+ * Maximum value for text outline width
1194
+ */
1195
+ export var TEXT_OUTLINE_MULTIPLIER = 5;
1196
+ export var dataTestIds = {
1197
+ infoIcon: 'info-icon',
1198
+ warningIcon: 'warning-icon',
1199
+ errorIcon: 'error-icon',
1200
+ successIcon: 'success-icon',
1201
+ checkmarkIcon: 'checkmark-icon',
1202
+ sortableLayerItem: 'sortable-layer-item',
1203
+ staticLayerItem: 'static-layer-item',
1204
+ layerTitleEditor: 'layer__title__editor',
1205
+ removeLayerAction: 'remove-layer-action',
1206
+ layerPanel: 'layer-panel',
1207
+ sortableEffectItem: 'sortable-effect-item',
1208
+ staticEffectItem: 'static-effect-item',
1209
+ providerLoading: 'provider-loading',
1210
+ providerMapInfoPanel: 'provider-map-info-panel',
1211
+ providerSelect: 'provider-select',
1212
+ cloudHeader: 'cloud-header',
1213
+ providerShareMap: 'provider-share-map'
1214
+ };
1215
+
1216
+ // Effects
1217
+ export var DEFAULT_TIMEZONE = 'UTC';
1218
+ export var DEFAULT_POST_PROCESSING_EFFECT_TYPE = 'ink';
1219
+ export var DEFAULT_LIGHT_COLOR = [255, 255, 255];
1220
+ export var DEFAULT_LIGHT_INTENSITY = 1;
1221
+ export var DEFAULT_SHADOW_INTENSITY = 0.5;
1222
+ export var DEFAULT_SHADOW_COLOR = [0, 0, 0];
1223
+ export var LIGHT_AND_SHADOW_EFFECT_TIME_MODES = {
1224
+ pick: 'pick',
1225
+ current: 'current',
1226
+ animation: 'animation'
1227
+ };
1228
+ export var DEFAULT_LIGHT_AND_SHADOW_PROPS = {
1229
+ timestamp: Date.now(),
1230
+ timeMode: LIGHT_AND_SHADOW_EFFECT_TIME_MODES.pick,
1231
+ shadowIntensity: DEFAULT_SHADOW_INTENSITY,
1232
+ shadowColor: [].concat(DEFAULT_SHADOW_COLOR),
1233
+ sunLightColor: [].concat(DEFAULT_LIGHT_COLOR),
1234
+ sunLightIntensity: DEFAULT_LIGHT_INTENSITY,
1235
+ ambientLightColor: [].concat(DEFAULT_LIGHT_COLOR),
1236
+ ambientLightIntensity: DEFAULT_LIGHT_INTENSITY
1237
+ };
1238
+ export var LIGHT_AND_SHADOW_EFFECT = {
1239
+ type: 'lightAndShadow',
1240
+ name: 'Light & Shadow',
1241
+ description: 'effectDescription.lightAndShadow',
1242
+ parameters: [{
1243
+ name: 'timestamp',
1244
+ min: 0,
1245
+ max: Number.MAX_SAFE_INTEGER
1246
+ }, {
1247
+ name: 'shadowIntensity',
1248
+ min: 0,
1249
+ max: 1,
1250
+ defaultValue: DEFAULT_SHADOW_INTENSITY
1251
+ }, {
1252
+ name: 'sunLightIntensity',
1253
+ min: 0,
1254
+ max: 5,
1255
+ defaultValue: DEFAULT_LIGHT_INTENSITY
1256
+ }, {
1257
+ name: 'ambientLightIntensity',
1258
+ min: 0,
1259
+ max: 5,
1260
+ defaultValue: DEFAULT_LIGHT_INTENSITY
1261
+ }, {
1262
+ name: 'shadowColor',
1263
+ type: 'color',
1264
+ min: 0,
1265
+ max: 255,
1266
+ defaultValue: DEFAULT_SHADOW_COLOR
1267
+ }, {
1268
+ name: 'sunLightColor',
1269
+ type: 'color',
1270
+ min: 0,
1271
+ max: 255,
1272
+ defaultValue: DEFAULT_LIGHT_COLOR
1273
+ }, {
1274
+ name: 'ambientLightColor',
1275
+ type: 'color',
1276
+ min: 0,
1277
+ max: 255,
1278
+ defaultValue: DEFAULT_LIGHT_COLOR
1279
+ }]
1280
+ };
1281
+ export var DISTANCE_FOG_TYPE = 'distanceFog';
1282
+ export var SURFACE_FOG_TYPE = 'surfaceFog';
1283
+ export var POSTPROCESSING_EFFECTS = {
1284
+ ink: {
1285
+ type: 'ink',
1286
+ name: 'Ink',
1287
+ description: 'effectDescription.ink',
1288
+ parameters: [{
1289
+ name: 'strength',
1290
+ min: 0,
1291
+ max: 1
1292
+ }]
1293
+ },
1294
+ brightnessContrast: {
1295
+ type: 'brightnessContrast',
1296
+ name: 'Brightness & Contrast',
1297
+ description: 'effectDescription.brightnessContrast',
1298
+ parameters: [{
1299
+ name: 'brightness',
1300
+ min: -1,
1301
+ max: 1
1302
+ }, {
1303
+ name: 'contrast',
1304
+ min: -1,
1305
+ max: 1
1306
+ }]
1307
+ },
1308
+ hueSaturation: {
1309
+ type: 'hueSaturation',
1310
+ name: 'Hue & Saturation',
1311
+ description: 'effectDescription.hueSaturation',
1312
+ parameters: [{
1313
+ name: 'hue',
1314
+ min: -1,
1315
+ max: 1
1316
+ }, {
1317
+ name: 'saturation',
1318
+ defaultValue: 0.25,
1319
+ min: -1,
1320
+ max: 1
1321
+ }]
1322
+ },
1323
+ vibrance: {
1324
+ type: 'vibrance',
1325
+ name: 'Vibrance',
1326
+ description: 'effectDescription.vibrance',
1327
+ parameters: [{
1328
+ name: 'amount',
1329
+ defaultValue: 0.5,
1330
+ min: -1,
1331
+ max: 1
1332
+ }]
1333
+ },
1334
+ sepia: {
1335
+ type: 'sepia',
1336
+ name: 'Sepia',
1337
+ description: 'effectDescription.sepia',
1338
+ parameters: [{
1339
+ name: 'amount',
1340
+ min: 0,
1341
+ max: 1
1342
+ }]
1343
+ },
1344
+ dotScreen: {
1345
+ type: 'dotScreen',
1346
+ name: 'Dot Screen',
1347
+ description: 'effectDescription.dotScreen',
1348
+ parameters: [{
1349
+ name: 'angle',
1350
+ min: 0,
1351
+ max: Math.PI / 2
1352
+ }, {
1353
+ name: 'size',
1354
+ min: 1,
1355
+ max: 20
1356
+ }, {
1357
+ name: 'center',
1358
+ type: 'array',
1359
+ label: ['Center X', 'Center Y'],
1360
+ defaultValue: [0.5, 0.5],
1361
+ min: 0,
1362
+ max: 1
1363
+ }]
1364
+ },
1365
+ colorHalftone: {
1366
+ type: 'colorHalftone',
1367
+ name: 'Color Halftone',
1368
+ description: 'effectDescription.colorHalftone',
1369
+ parameters: [{
1370
+ name: 'angle',
1371
+ min: 0,
1372
+ max: Math.PI / 2
1373
+ }, {
1374
+ name: 'size',
1375
+ min: 1,
1376
+ max: 20
1377
+ }, {
1378
+ name: 'center',
1379
+ type: 'array',
1380
+ label: ['Center X', 'Center Y'],
1381
+ defaultValue: [0.5, 0.5],
1382
+ min: 0,
1383
+ max: 1
1384
+ }]
1385
+ },
1386
+ noise: {
1387
+ type: 'noise',
1388
+ name: 'Noise',
1389
+ description: 'effectDescription.noise',
1390
+ parameters: [{
1391
+ name: 'amount',
1392
+ min: 0,
1393
+ max: 1
1394
+ }]
1395
+ },
1396
+ triangleBlur: {
1397
+ type: 'triangleBlur',
1398
+ name: 'Blur (Triangle)',
1399
+ description: 'effectDescription.triangleBlur',
1400
+ parameters: [{
1401
+ name: 'radius',
1402
+ min: 0,
1403
+ max: 100
1404
+ }]
1405
+ },
1406
+ zoomBlur: {
1407
+ type: 'zoomBlur',
1408
+ name: 'Blur (Zoom)',
1409
+ description: 'effectDescription.zoomBlur',
1410
+ parameters: [{
1411
+ name: 'strength',
1412
+ defaultValue: 0.05,
1413
+ min: 0,
1414
+ max: 1
1415
+ }, {
1416
+ name: 'center',
1417
+ type: 'array',
1418
+ label: ['Center X', 'Center Y'],
1419
+ defaultValue: [0.5, 0.5],
1420
+ min: 0,
1421
+ max: 1
1422
+ }]
1423
+ },
1424
+ tiltShift: {
1425
+ type: 'tiltShift',
1426
+ name: 'Blur (Tilt Shift)',
1427
+ description: 'effectDescription.tiltShift',
1428
+ parameters: [{
1429
+ name: 'blurRadius',
1430
+ label: 'Blur',
1431
+ min: 0,
1432
+ max: 50
1433
+ }, {
1434
+ name: 'gradientRadius',
1435
+ label: 'Gradient',
1436
+ min: 0,
1437
+ max: 400
1438
+ }, {
1439
+ name: 'start',
1440
+ type: 'array',
1441
+ label: ['Start', false],
1442
+ defaultValue: [0.0, 0.0],
1443
+ min: 0,
1444
+ max: 1
1445
+ }, {
1446
+ name: 'end',
1447
+ type: 'array',
1448
+ label: ['End', false],
1449
+ defaultValue: [1, 1],
1450
+ min: 0,
1451
+ max: 1
1452
+ }]
1453
+ },
1454
+ edgeWork: {
1455
+ type: 'edgeWork',
1456
+ name: 'Edge work',
1457
+ description: 'effectDescription.edgeWork',
1458
+ parameters: [{
1459
+ name: 'radius',
1460
+ min: 1,
1461
+ max: 50
1462
+ }]
1463
+ },
1464
+ vignette: {
1465
+ type: 'vignette',
1466
+ name: 'Vignette',
1467
+ description: 'effectDescription.vignette',
1468
+ parameters: [{
1469
+ name: 'amount',
1470
+ min: 0,
1471
+ max: 1
1472
+ }, {
1473
+ name: 'radius',
1474
+ min: 0,
1475
+ max: 1
1476
+ }]
1477
+ },
1478
+ magnify: {
1479
+ type: 'magnify',
1480
+ name: 'Magnify',
1481
+ description: 'effectDescription.magnify',
1482
+ parameters: [{
1483
+ name: 'screenXY',
1484
+ type: 'array',
1485
+ label: ['Position X', 'Position Y'],
1486
+ defaultValue: [0.5, 0.5],
1487
+ min: 0,
1488
+ max: 1
1489
+ }, {
1490
+ name: 'radiusPixels',
1491
+ label: 'Size',
1492
+ min: 10,
1493
+ max: 500
1494
+ }, {
1495
+ name: 'zoom',
1496
+ min: 0.5,
1497
+ max: 50
1498
+ }, {
1499
+ name: 'borderWidthPixels',
1500
+ label: 'Border Width',
1501
+ defaultValue: 3,
1502
+ min: 0,
1503
+ max: 50
1504
+ }]
1505
+ },
1506
+ hexagonalPixelate: {
1507
+ type: 'hexagonalPixelate',
1508
+ name: 'Hexagonal Pixelate',
1509
+ description: 'effectDescription.hexagonalPixelate',
1510
+ parameters: [{
1511
+ name: 'scale',
1512
+ defaultValue: 20,
1513
+ min: 1,
1514
+ max: 50
1515
+ }]
1516
+ },
1517
+ distanceFog: {
1518
+ type: DISTANCE_FOG_TYPE,
1519
+ name: 'Distance Fog',
1520
+ description: 'effectDescription.distanceFog',
1521
+ parameters: [{
1522
+ name: 'density',
1523
+ defaultValue: 0.5,
1524
+ min: 0,
1525
+ max: 1
1526
+ }, {
1527
+ name: 'fogStart',
1528
+ label: 'Start',
1529
+ defaultValue: 0.3,
1530
+ min: 0,
1531
+ max: 1
1532
+ }, {
1533
+ name: 'fogRange',
1534
+ label: 'Range',
1535
+ defaultValue: 0.5,
1536
+ min: 0.01,
1537
+ max: 1
1538
+ }, {
1539
+ name: 'fogColor',
1540
+ type: 'color',
1541
+ min: 0,
1542
+ max: 255,
1543
+ defaultValue: [217, 222, 230]
1544
+ }]
1545
+ },
1546
+ surfaceFog: {
1547
+ type: SURFACE_FOG_TYPE,
1548
+ name: 'Surface Fog',
1549
+ description: 'effectDescription.surfaceFog',
1550
+ parameters: [{
1551
+ name: 'density',
1552
+ defaultValue: 0.6,
1553
+ min: 0,
1554
+ max: 1
1555
+ }, {
1556
+ name: 'height',
1557
+ label: 'Elevation (m)',
1558
+ defaultValue: 50,
1559
+ min: -200,
1560
+ max: 6000
1561
+ }, {
1562
+ name: 'animateHeight',
1563
+ type: 'checkbox',
1564
+ label: 'Animate Elevation',
1565
+ tooltip: 'Animates elevation from start to end value during video export preview and recording.',
1566
+ defaultValue: false,
1567
+ min: 0,
1568
+ max: 1
1569
+ }, {
1570
+ name: 'heightEnd',
1571
+ label: 'End Elevation (m)',
1572
+ defaultValue: 100,
1573
+ min: -200,
1574
+ max: 6000
1575
+ }, {
1576
+ name: 'linearEasing',
1577
+ type: 'checkbox',
1578
+ label: 'Linear Easing',
1579
+ tooltip: 'Uses constant speed instead of smooth ease-in / ease-out during elevation animation.',
1580
+ defaultValue: false,
1581
+ min: 0,
1582
+ max: 1
1583
+ }, {
1584
+ name: 'thickness',
1585
+ label: 'Transition (m)',
1586
+ defaultValue: 50,
1587
+ min: 0,
1588
+ max: 1000
1589
+ }, {
1590
+ name: 'fogColor',
1591
+ type: 'color',
1592
+ label: 'Fog Color',
1593
+ min: 0,
1594
+ max: 255,
1595
+ defaultValue: [230, 235, 242]
1596
+ }, {
1597
+ name: 'pattern',
1598
+ type: 'checkbox',
1599
+ label: 'Pattern',
1600
+ tooltip: 'Adds a noise pattern to the fog for a more natural, volumetric look.',
1601
+ defaultValue: false,
1602
+ min: 0,
1603
+ max: 1
1604
+ }]
1605
+ }
1606
+ };
1607
+ export var EFFECT_DESCRIPTIONS = [LIGHT_AND_SHADOW_EFFECT].concat(_toConsumableArray(Object.keys(POSTPROCESSING_EFFECTS).map(function (keyName) {
1608
+ return POSTPROCESSING_EFFECTS[keyName];
1609
+ })));
1610
+ export var SYNC_TIMELINE_MODES = {
1611
+ start: 0,
1612
+ end: 1
1613
+ };
1614
+ export var GEOARROW_METADATA_KEY = 'ARROW:extension:name';
1615
+
1616
+ /**
1617
+ * Enum holding GeoArrow extension type names
1618
+ */
1619
+ export var GEOARROW_EXTENSIONS = /*#__PURE__*/function (GEOARROW_EXTENSIONS) {
1620
+ GEOARROW_EXTENSIONS["POINT"] = "geoarrow.point";
1621
+ GEOARROW_EXTENSIONS["LINESTRING"] = "geoarrow.linestring";
1622
+ GEOARROW_EXTENSIONS["POLYGON"] = "geoarrow.polygon";
1623
+ GEOARROW_EXTENSIONS["MULTIPOINT"] = "geoarrow.multipoint";
1624
+ GEOARROW_EXTENSIONS["MULTILINESTRING"] = "geoarrow.multilinestring";
1625
+ GEOARROW_EXTENSIONS["MULTIPOLYGON"] = "geoarrow.multipolygon";
1626
+ GEOARROW_EXTENSIONS["WKB"] = "geoarrow.wkb";
1627
+ return GEOARROW_EXTENSIONS;
1628
+ }({});
1629
+ export var LOADERS_CDN_VERSION = '4.3.2';
1630
+ export var LOADERS_CDN_URL = 'https://unpkg.com/@loaders.gl';
1631
+ export var getLoaderOptions = function getLoaderOptions() {
1632
+ return {
1633
+ mvt: {
1634
+ workerUrl: "".concat(LOADERS_CDN_URL, "/mvt@").concat(LOADERS_CDN_VERSION, "/dist/mvt-worker.js")
1635
+ },
1636
+ 'quantized-mesh': {
1637
+ workerUrl: "".concat(LOADERS_CDN_URL, "/terrain@").concat(LOADERS_CDN_VERSION, "/dist/quantized-mesh-worker.js")
1638
+ },
1639
+ npy: {
1640
+ workerUrl: "".concat(LOADERS_CDN_URL, "/textures@").concat(LOADERS_CDN_VERSION, "/dist/npy-worker.js")
1641
+ }
1642
+ };
1643
+ };
1644
+ export var CUSTOM_SCENEGRAPH_MODEL_ID = 'custom';
1645
+ var MODELS_BASE_URL = 'https://studio-public-data.foursquare.com/statics/keplergl/3d-models.2022-06-13';
1646
+ export var TRIP_LAYER_SCENEGRAPH_MODELS = [{
1647
+ id: 'airplane',
1648
+ label: 'Airplane',
1649
+ icon: null,
1650
+ url: "".concat(MODELS_BASE_URL, "/Plane.glb"),
1651
+ angles: [0, 0, 0],
1652
+ scale: 1.0
1653
+ }, {
1654
+ id: 'boeing777',
1655
+ label: 'Airliner',
1656
+ icon: null,
1657
+ url: "".concat(MODELS_BASE_URL, "/Airliner.glb"),
1658
+ angles: [0, 0, 0],
1659
+ scale: 1.0
1660
+ }, {
1661
+ id: 'uber-evtol',
1662
+ label: 'VTOL',
1663
+ icon: null,
1664
+ url: "".concat(MODELS_BASE_URL, "/evtol.glb"),
1665
+ angles: [0, 0, 0],
1666
+ scale: 1.0
1667
+ }, {
1668
+ id: 'hang-glider',
1669
+ label: 'Glider',
1670
+ icon: null,
1671
+ url: "".concat(MODELS_BASE_URL, "/Hangglider.glb"),
1672
+ angles: [0, 0, 0],
1673
+ scale: 1.0
1674
+ }, {
1675
+ id: 'helicopter',
1676
+ label: 'Helicopter',
1677
+ icon: null,
1678
+ url: "".concat(MODELS_BASE_URL, "/Helicopter.glb"),
1679
+ angles: [0, 0, 0],
1680
+ scale: 1.0
1681
+ }, {
1682
+ id: 'bicycle',
1683
+ label: 'Bicycle',
1684
+ icon: null,
1685
+ url: "".concat(MODELS_BASE_URL, "/Bicycle.glb"),
1686
+ angles: [0, 0, 0],
1687
+ scale: 1.0
1688
+ }, {
1689
+ id: 'scooter',
1690
+ label: 'Scooter',
1691
+ icon: null,
1692
+ url: "".concat(MODELS_BASE_URL, "/Scooter.glb"),
1693
+ angles: [0, 0, 0],
1694
+ scale: 1.0
1695
+ }, {
1696
+ id: 'car',
1697
+ label: 'Car',
1698
+ icon: null,
1699
+ url: "".concat(MODELS_BASE_URL, "/Car.glb"),
1700
+ angles: [0, 0, 0],
1701
+ scale: 1.0
1702
+ }, {
1703
+ id: 'truck',
1704
+ label: 'Truck',
1705
+ icon: null,
1706
+ url: "".concat(MODELS_BASE_URL, "/Truck.glb"),
1707
+ angles: [0, 0, 0],
1708
+ scale: 1.0
1709
+ }, {
1710
+ id: 'semitruck',
1711
+ label: 'Semitruck',
1712
+ icon: null,
1713
+ url: "".concat(MODELS_BASE_URL, "/Semitruck.glb"),
1714
+ angles: [0, 0, 0],
1715
+ scale: 1.0
1716
+ }, {
1717
+ id: 'cargoship',
1718
+ label: 'Cargoship',
1719
+ icon: null,
1720
+ url: "".concat(MODELS_BASE_URL, "/Cargoship.glb"),
1721
+ angles: [0, 0, 0],
1722
+ scale: 1.0
1723
+ }, {
1724
+ id: CUSTOM_SCENEGRAPH_MODEL_ID,
1725
+ label: 'Custom',
1726
+ icon: null,
1727
+ url: null,
1728
+ angles: [0, 0, 0],
1729
+ scale: 1.0
1730
+ }];
1731
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJrZXlNaXJyb3IiLCJzY2FsZUxpbmVhciIsInNjYWxlTG9nIiwic2NhbGVPcmRpbmFsIiwic2NhbGVQb2ludCIsInNjYWxlUXVhbnRpbGUiLCJzY2FsZVF1YW50aXplIiwic2NhbGVTcXJ0Iiwic2NhbGVUaHJlc2hvbGQiLCJUT09MVElQX0ZPUk1BVF9UWVBFUyIsIkFDVElPTl9QUkVGSVgiLCJLRVBMRVJfVU5GT0xERURfQlVDS0VUIiwiQkFTRU1BUF9JQ09OX1BSRUZJWCIsIkRFRkFVTFRfTUFQQk9YX0FQSV9VUkwiLCJUUkFOU0lUSU9OX0RVUkFUSU9OIiwiREFUQV9UQUJMRV9JRCIsIkRFTEVURV9EQVRBX0lEIiwiQUREX0RBVEFfSUQiLCJFWFBPUlRfSU1BR0VfSUQiLCJFWFBPUlRfREFUQV9JRCIsIkFERF9NQVBfU1RZTEVfSUQiLCJFWFBPUlRfTUFQX0lEIiwiRVhQT1JUX1ZJREVPX0lEIiwiU0FWRV9NQVBfSUQiLCJPVkVSV1JJVEVfTUFQX0lEIiwiU0hBUkVfTUFQX0lEIiwiS0VQTEVSX0dMX05BTUUiLCJLRVBMRVJfR0xfVkVSU0lPTiIsIktFUExFUl9HTF9XRUJTSVRFIiwiRElNRU5TSU9OUyIsInNpZGVQYW5lbCIsIndpZHRoIiwibWFyZ2luIiwidG9wIiwibGVmdCIsImJvdHRvbSIsInJpZ2h0IiwiaGVhZGVySGVpZ2h0IiwibWFwQ29udHJvbCIsInBhZGRpbmciLCJtYXBMZWdlbmQiLCJwaW5uZWQiLCJUSEVNRSIsImxpZ2h0IiwiZGFyayIsImJhc2UiLCJTSURFQkFSX1BBTkVMUyIsImlkIiwibGFiZWwiLCJvbkNsaWNrIiwiUEFORUxfVklFV19UT0dHTEVTIiwibGlzdCIsImJ5RGF0YXNldCIsIlBBTkVMUyIsIkRFRkFVTFRfQkxER19DT0xPUiIsIkRFRkFVTFRfQkFDS0dST1VORF9DT0xPUiIsIkJBU0VfTUFQX0JBQ0tHUk9VTkRfTEFZRVJfSURTIiwiQkFDS0dST1VORF9MQVlFUl9HUk9VUF9TTFVHIiwiVEhSRUVfRF9CVUlMRElOR19MQVlFUl9HUk9VUF9TTFVHIiwiQkFDS0dST1VORF9MQVlFUl9HUk9VUCIsInNsdWciLCJmaWx0ZXIiLCJkZWZhdWx0VmlzaWJpbGl0eSIsImlzVmlzaWJpbGl0eVRvZ2dsZUF2YWlsYWJsZSIsImlzTW92ZVRvVG9wQXZhaWxhYmxlIiwiaXNDb2xvclBpY2tlckF2YWlsYWJsZSIsIkRFRkFVTFRfTEFZRVJfR1JPVVBTIiwiX3JlZiIsInR5cGUiLCJtYXRjaCIsIl9yZWYyIiwiX3JlZjMiLCJfcmVmNCIsIl9yZWY1IiwiX3JlZjYiLCJCQVNFX01BUF9DT0xPUl9NT0RFUyIsIk5PTkUiLCJEQVJLIiwiTElHSFQiLCJOT19NQVBfSUQiLCJFTVBUWV9NQVBCT1hfU1RZTEUiLCJ2ZXJzaW9uIiwic291cmNlcyIsImxheWVycyIsIk1BUF9MSUJfT1BUSU9OUyIsIk1BUEJPWCIsIk1BUExJQlJFIiwiTUFQQk9YX01BWF9QSVRDSCIsIk5PX0JBU0VNQVBfSUNPTiIsImNvbmNhdCIsIkRFRkFVTFRfQkFTRV9NQVBfU1RZTEUiLCJERUZBVUxUX05PX0JBU0VNQVBfU1RZTEUiLCJ1cmwiLCJpY29uIiwibGF5ZXJHcm91cHMiLCJjb2xvck1vZGUiLCJzdHlsZSIsIkRFRkFVTFRfTUFQQk9YX1NUWUxFUyIsImNvbXBsaW1lbnRhcnlTdHlsZUlkIiwiREVGQVVMVF9NQVBCT1hfU0FURUxJVEVfU1RZTEVTIiwiREVGQVVMVF9NQVBMSUJSRV9TVFlMRVMiLCJERUZBVUxUX01BUF9TVFlMRVMiLCJHRU9KU09OX0ZJRUxEUyIsImdlb2pzb24iLCJJQ09OX0ZJRUxEUyIsIlRSSVBfUE9JTlRfRklFTERTIiwiQUxUSVRVREVfRklFTERTIiwiVFJJUF9BUkNfRklFTERTIiwibGF0MCIsImxuZzAiLCJsYXQxIiwibG5nMSIsIkZJTFRFUl9UWVBFUyIsInJhbmdlIiwic2VsZWN0IiwiaW5wdXQiLCJ0aW1lUmFuZ2UiLCJtdWx0aVNlbGVjdCIsInBvbHlnb24iLCJGSUxURVJfVklFV19UWVBFUyIsInNpZGUiLCJlbmxhcmdlZCIsIm1pbmlmaWVkIiwiREVGQVVMVF9GSUxURVJfVklFV19UWVBFIiwiU0NBTEVfVFlQRVMiLCJvcmRpbmFsIiwicXVhbnRpbGUiLCJxdWFudGl6ZSIsImxpbmVhciIsInNxcnQiLCJsb2ciLCJ0aHJlc2hvbGQiLCJjdXN0b20iLCJjdXN0b21PcmRpbmFsIiwicG9pbnQiLCJTQ0FMRV9UWVBFX05BTUVTIiwiU0NBTEVfRlVOQyIsIl9kZWZpbmVQcm9wZXJ0eSIsIkFMTF9GSUVMRF9UWVBFUyIsImRhdGUiLCJpbnRlZ2VyIiwicmVhbCIsInN0cmluZyIsInRpbWVzdGFtcCIsImFycmF5Iiwib2JqZWN0IiwiZ2VvYXJyb3ciLCJoMyIsIlNPUlRfT1JERVIiLCJBU0NFTkRJTkciLCJERVNDRU5ESU5HIiwiVU5TT1JUIiwiVEFCTEVfT1BUSU9OIiwiU09SVF9BU0MiLCJTT1JUX0RFUyIsIlBJTiIsIlVOUElOIiwiQ09QWSIsIkZPUk1BVF9DT0xVTU4iLCJUQUJMRV9PUFRJT05fTElTVCIsInZhbHVlIiwiZGlzcGxheSIsImNvbmRpdGlvbiIsInByb3BzIiwic29ydFRhYmxlQ29sdW1uIiwic29ydE1vZGUiLCJpc1NvcnRlZCIsImlzUGlubmVkIiwic2V0RGlzcGxheUZvcm1hdCIsIllFTExPVyIsIlBJTksiLCJQVVJQTEUiLCJCTFVFIiwiQkxVRTIiLCJCTFVFMyIsIkdSRUVOIiwiR1JFRU4yIiwiUkVEIiwiT1JBTkdFIiwiRklFTERfVFlQRV9ESVNQTEFZIiwiX0ZJRUxEX1RZUEVfRElTUExBWSIsImNvbG9yIiwiRklFTERfQ09MT1JTIiwiSElHSExJR0hfQ09MT1JfM0QiLCJDSEFOTkVMX1NDQUxFUyIsInJhZGl1cyIsInNpemUiLCJjb2xvckFnZ3IiLCJzaXplQWdnciIsImFuZ2xlIiwiQUdHUkVHQVRJT05fVFlQRVMiLCJjb3VudCIsImF2ZXJhZ2UiLCJtYXhpbXVtIiwibWluaW11bSIsIm1lZGlhbiIsInN0ZGV2Iiwic3VtIiwidmFyaWFuY2UiLCJtb2RlIiwiY291bnRVbmlxdWUiLCJBR0dSRUdBVElPTl9UWVBFX09QVElPTlMiLCJPYmplY3QiLCJlbnRyaWVzIiwibWFwIiwiX3JlZjciLCJfcmVmOCIsIl9zbGljZWRUb0FycmF5Iiwia2V5IiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJzbGljZSIsImxpbmVhckZpZWxkU2NhbGVGdW5jdGlvbnMiLCJERUZBVUxUX0FHR1JFR0FUSU9OX0NPTE9SX1NDQUxFUyIsImxpbmVhckZpZWxkQWdnclNjYWxlRnVuY3Rpb25zIiwicmVkdWNlIiwicHJldiIsImN1ciIsIm9yZGluYWxGaWVsZFNjYWxlRnVuY3Rpb25zIiwib3JkaW5hbEZpZWxkQWdnclNjYWxlRnVuY3Rpb25zIiwibm90U3VwcG9ydGVkU2NhbGVPcHRzIiwibm90U3VwcG9ydEFnZ3JPcHRzIiwiREVGQVVMVF9BR0dSRUdBVElPTiIsIkZJRUxEX09QVFMiLCJfRklFTERfT1BUUyIsInNjYWxlIiwiX29iamVjdFNwcmVhZCIsImZvcm1hdCIsImxlZ2VuZCIsImQiLCJ0b29sdGlwIiwiREVDSU1BTCIsIlBFUkNFTlRBR0UiLCJEQVRFIiwiREFURV9USU1FIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiQk9PTEVBTiIsIkNIQU5ORUxfU0NBTEVfU1VQUE9SVEVEX0ZJRUxEUyIsImtleXMiLCJhY2N1IiwiZnQiLCJsZW5ndGgiLCJERUZBVUxUX0xBWUVSX0NPTE9SIiwidHJpcEFyYyIsImJlZ2ludHJpcF9sYXQiLCJkcm9wb2ZmX2xhdCIsInJlcXVlc3RfbGF0IiwiREVGQVVMVF9MQVlFUl9DT0xPUl9QQUxFVFRFIiwiREVGQVVMVF9MQVlFUl9DT0xPUl9QQUxFVFRFX1NURVBTIiwiREVGQVVMVF9UT09MVElQX0ZJRUxEUyIsIk5PX1ZBTFVFX0NPTE9SIiwiREVGQVVMVF9QSUNLSU5HX1JBRElVUyIsIk9WRVJMQVlfQkxFTkRJTkdTIiwibm9ybWFsIiwic2NyZWVuIiwiZGFya2VuIiwiTEFZRVJfQkxFTkRJTkdTIiwiYWRkaXRpdmUiLCJibGVuZEZ1bmMiLCJibGVuZEVxdWF0aW9uIiwic3VidHJhY3RpdmUiLCJNQVhfREVGQVVMVF9UT09MVElQUyIsIlJFU09MVVRJT05TIiwiT05FX1giLCJUV09fWCIsIkVYUE9SVF9JTUdfUkFUSU9TIiwiU0NSRUVOIiwiRk9VUl9CWV9USFJFRSIsIlNJWFRFRU5fQllfTklORSIsIkNVU1RPTSIsIlNjcmVlblJhdGlvT3B0aW9uIiwiZ2V0U2l6ZSIsInNjcmVlblciLCJzY3JlZW5IIiwiaGVpZ2h0IiwiQ3VzdG9tUmF0aW9PcHRpb24iLCJoaWRkZW4iLCJtYXBXIiwibWFwSCIsIkZvdXJCeVRocmVlUmF0aW9PcHRpb24iLCJNYXRoIiwicm91bmQiLCJTaXh0ZWVuQnlOaW5lUmF0aW9PcHRpb24iLCJFWFBPUlRfSU1HX1JBVElPX09QVElPTlMiLCJPbmVYUmVzb2x1dGlvbk9wdGlvbiIsImF2YWlsYWJsZSIsIlR3b1hSZXNvbHV0aW9uT3B0aW9uIiwiUmVzb2x1dGlvbjE5MjB4MTA4ME9wdGlvbiIsIlJlc29sdXRpb24xMjgweDcyME9wdGlvbiIsIlJlc29sdXRpb24yNTYweDE0NDBPcHRpb24iLCJSZXNvbHV0aW9uMTYwMHg5MDBPcHRpb24iLCJSZXNvbHV0aW9uMTAyNHg3NjhPcHRpb24iLCJSZXNvbHV0aW9uMTI4MHg5NjBPcHRpb24iLCJSZXNvbHV0aW9uMTYwMHgxMjAwT3B0aW9uIiwiUmVzb2x1dGlvbjE5MjB4MTQ0ME9wdGlvbiIsIkVYUE9SVF9JTUdfUkVTT0xVVElPTl9PUFRJT05TIiwiRVhQT1JUX0RBVEFfVFlQRSIsIkNTViIsIkVYUE9SVF9EQVRBX1RZUEVfT1BUSU9OUyIsInRvTG93ZXJDYXNlIiwiRVhQT1JUX01BUF9GT1JNQVRTIiwiSFRNTCIsIkpTT04iLCJFWFBPUlRfSFRNTF9NQVBfTU9ERVMiLCJSRUFEIiwiRURJVCIsIkVYUE9SVF9NQVBfRk9STUFUX09QVElPTlMiLCJlbnRyeSIsImdldEhUTUxNYXBNb2RlVGlsZVVybCIsIkVYUE9SVF9IVE1MX01BUF9NT0RFX09QVElPTlMiLCJERUZBVUxUX1VVSURfQ09VTlQiLCJERUZBVUxUX05PVElGSUNBVElPTl9NRVNTQUdFIiwiREVGQVVMVF9OT1RJRklDQVRJT05fVFlQRVMiLCJpbmZvIiwiZXJyb3IiLCJ3YXJuaW5nIiwic3VjY2VzcyIsIkRFRkFVTFRfTk9USUZJQ0FUSU9OX1RPUElDUyIsImdsb2JhbCIsImZpbGUiLCJUSFJPVFRMRV9OT1RJRklDQVRJT05fVElNRSIsIkJBU0VfU1BFRUQiLCJGUFMiLCJBTklNQVRJT05fV0lORE9XIiwiZnJlZSIsImluY3JlbWVudGFsIiwiaW50ZXJ2YWwiLCJERUZBVUxUX1RJTUVfRk9STUFUIiwiU1BFRURfQ09OVFJPTF9SQU5HRSIsIlNQRUVEX0NPTlRST0xfU1RFUCIsIkdFT0NPREVSX0RBVEFTRVRfTkFNRSIsIkdFT0NPREVSX0xBWUVSX0lEIiwiR0VPQ09ERVJfR0VPX09GRlNFVCIsIkdFT0NPREVSX0lDT05fQ09MT1IiLCJHRU9DT0RFUl9JQ09OX1NJWkUiLCJFRElUT1JfTEFZRVJfSUQiLCJFRElUT1JfTEFZRVJfUElDS0lOR19SQURJVVMiLCJFRElUT1JfTU9ERVMiLCJEUkFXX1BPTFlHT04iLCJEUkFXX1JFQ1RBTkdMRSIsIkRSQVdfTElORVNUUklORyIsIkRSQVdfUE9JTlQiLCJFRElUT1JfRFJBV19NT0RFUyIsIlBMT1RfVFlQRVMiLCJoaXN0b2dyYW0iLCJsaW5lQ2hhcnQiLCJJTklUX0ZJTFRFUl9JVEVNU19JTl9EUk9QRE9XTiIsIk1BWF9HUFVfRklMVEVSUyIsIk1BUF9USFVNQk5BSUxfRElNRU5TSU9OIiwiTUFQX0lORk9fQ0hBUkFDVEVSIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsIkxPQURJTkdfTUVUSE9EUyIsInVwbG9hZCIsInN0b3JhZ2UiLCJ0aWxlc2V0IiwiREVGQVVMVF9GRUFUVVJFX0ZMQUdTIiwiREFUQVNFVF9GT1JNQVRTIiwicm93IiwiY3N2Iiwia2VwbGVyZ2wiLCJhcnJvdyIsImR1Y2tkYiIsIk1BUF9DT05UUk9MUyIsInZpc2libGVMYXllcnMiLCJ0b2dnbGUzZCIsInNwbGl0TWFwIiwibWFwRHJhdyIsIm1hcExvY2FsZSIsIm1hcFRoZW1lIiwiZWZmZWN0IiwiYW5ub3RhdGlvbiIsImFpQXNzaXN0YW50IiwiTWFwVmlld01vZGUiLCJHTE9CRV9NSU5fWk9PTSIsIkdMT0JFX01BWF9aT09NIiwiR0xPQkVfTUFYX0xBVElUVURFIiwiREVGQVVMVF9HTE9CRV9DT05GSUciLCJhdG1vc3BoZXJlIiwiaHVnZUhhbG8iLCJodWdlSGFsb1JhZGl1cyIsImh1Z2VIYWxvT3BhY2l0eSIsImF6aW11dGgiLCJhemltdXRoQW5nbGUiLCJ0ZXJtaW5hdG9yIiwidGVybWluYXRvck9wYWNpdHkiLCJiYXNlbWFwIiwibGFiZWxzIiwibGFiZWxzQ29sb3IiLCJhZG1pbkxpbmVzIiwiYWRtaW5MaW5lc0NvbG9yIiwid2F0ZXIiLCJ3YXRlckNvbG9yIiwic3VyZmFjZSIsInN1cmZhY2VDb2xvciIsImJhY2tncm91bmRDb2xvciIsInN0YXJzIiwiR0xPQkVfU1VQUE9SVEVEX0xBWUVSUyIsImFyYyIsImdyaWQiLCJoZXhhZ29uIiwiY2x1c3RlciIsImhleGFnb25JZCIsInZlY3RvclRpbGUiLCJoZXhUaWxlIiwibGluZSIsInRyaXAiLCJyYXN0ZXJUaWxlIiwiaGVhdG1hcCIsInMyIiwidGlsZTNkIiwiZmxvdyIsIk1hcFNwbGl0TW9kZSIsIlBST0pFQ1RFRF9QSVhFTF9TSVpFX01VTFRJUExJRVIiLCJURVhUX09VVExJTkVfTVVMVElQTElFUiIsImRhdGFUZXN0SWRzIiwiaW5mb0ljb24iLCJ3YXJuaW5nSWNvbiIsImVycm9ySWNvbiIsInN1Y2Nlc3NJY29uIiwiY2hlY2ttYXJrSWNvbiIsInNvcnRhYmxlTGF5ZXJJdGVtIiwic3RhdGljTGF5ZXJJdGVtIiwibGF5ZXJUaXRsZUVkaXRvciIsInJlbW92ZUxheWVyQWN0aW9uIiwibGF5ZXJQYW5lbCIsInNvcnRhYmxlRWZmZWN0SXRlbSIsInN0YXRpY0VmZmVjdEl0ZW0iLCJwcm92aWRlckxvYWRpbmciLCJwcm92aWRlck1hcEluZm9QYW5lbCIsInByb3ZpZGVyU2VsZWN0IiwiY2xvdWRIZWFkZXIiLCJwcm92aWRlclNoYXJlTWFwIiwiREVGQVVMVF9USU1FWk9ORSIsIkRFRkFVTFRfUE9TVF9QUk9DRVNTSU5HX0VGRkVDVF9UWVBFIiwiREVGQVVMVF9MSUdIVF9DT0xPUiIsIkRFRkFVTFRfTElHSFRfSU5URU5TSVRZIiwiREVGQVVMVF9TSEFET1dfSU5URU5TSVRZIiwiREVGQVVMVF9TSEFET1dfQ09MT1IiLCJMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVF9USU1FX01PREVTIiwicGljayIsImN1cnJlbnQiLCJhbmltYXRpb24iLCJERUZBVUxUX0xJR0hUX0FORF9TSEFET1dfUFJPUFMiLCJEYXRlIiwibm93IiwidGltZU1vZGUiLCJzaGFkb3dJbnRlbnNpdHkiLCJzaGFkb3dDb2xvciIsInN1bkxpZ2h0Q29sb3IiLCJzdW5MaWdodEludGVuc2l0eSIsImFtYmllbnRMaWdodENvbG9yIiwiYW1iaWVudExpZ2h0SW50ZW5zaXR5IiwiTElHSFRfQU5EX1NIQURPV19FRkZFQ1QiLCJuYW1lIiwicGFyYW1ldGVycyIsIm1pbiIsIm1heCIsIk51bWJlciIsIk1BWF9TQUZFX0lOVEVHRVIiLCJkZWZhdWx0VmFsdWUiLCJESVNUQU5DRV9GT0dfVFlQRSIsIlNVUkZBQ0VfRk9HX1RZUEUiLCJQT1NUUFJPQ0VTU0lOR19FRkZFQ1RTIiwiaW5rIiwiYnJpZ2h0bmVzc0NvbnRyYXN0IiwiaHVlU2F0dXJhdGlvbiIsInZpYnJhbmNlIiwic2VwaWEiLCJkb3RTY3JlZW4iLCJQSSIsImNvbG9ySGFsZnRvbmUiLCJub2lzZSIsInRyaWFuZ2xlQmx1ciIsInpvb21CbHVyIiwidGlsdFNoaWZ0IiwiZWRnZVdvcmsiLCJ2aWduZXR0ZSIsIm1hZ25pZnkiLCJoZXhhZ29uYWxQaXhlbGF0ZSIsImRpc3RhbmNlRm9nIiwic3VyZmFjZUZvZyIsIkVGRkVDVF9ERVNDUklQVElPTlMiLCJrZXlOYW1lIiwiU1lOQ19USU1FTElORV9NT0RFUyIsInN0YXJ0IiwiZW5kIiwiR0VPQVJST1dfTUVUQURBVEFfS0VZIiwiR0VPQVJST1dfRVhURU5TSU9OUyIsIkxPQURFUlNfQ0ROX1ZFUlNJT04iLCJMT0FERVJTX0NETl9VUkwiLCJnZXRMb2FkZXJPcHRpb25zIiwibXZ0Iiwid29ya2VyVXJsIiwibnB5IiwiQ1VTVE9NX1NDRU5FR1JBUEhfTU9ERUxfSUQiLCJNT0RFTFNfQkFTRV9VUkwiLCJUUklQX0xBWUVSX1NDRU5FR1JBUEhfTU9ERUxTIiwiYW5nbGVzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RlZmF1bHQtc2V0dGluZ3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IGtleU1pcnJvciBmcm9tICdrZXltaXJyb3InO1xuXG5pbXBvcnQge1xuICBCYXNlTWFwU3R5bGUsXG4gIEVmZmVjdERlc2NyaXB0aW9uLFxuICBSR0JBQ29sb3IsXG4gIFN5bmNUaW1lbGluZU1vZGUsXG4gIEJhc2VNYXBDb2xvck1vZGVzLFxuICBNZXJnZVxufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7XG4gIHNjYWxlTGluZWFyLFxuICBzY2FsZUxvZyxcbiAgc2NhbGVPcmRpbmFsLFxuICBzY2FsZVBvaW50LFxuICBzY2FsZVF1YW50aWxlLFxuICBzY2FsZVF1YW50aXplLFxuICBzY2FsZVNxcnQsXG4gIHNjYWxlVGhyZXNob2xkXG59IGZyb20gJ2QzLXNjYWxlJztcbmltcG9ydCB7VE9PTFRJUF9GT1JNQVRfVFlQRVN9IGZyb20gJy4vdG9vbHRpcCc7XG5cbmV4cG9ydCBjb25zdCBBQ1RJT05fUFJFRklYID0gJ0BAa2VwbGVyLmdsLyc7XG5leHBvcnQgY29uc3QgS0VQTEVSX1VORk9MREVEX0JVQ0tFVCA9ICdodHRwczovL3N0dWRpby1wdWJsaWMtZGF0YS5mb3Vyc3F1YXJlLmNvbS9zdGF0aWNzL2tlcGxlcmdsJztcbmV4cG9ydCBjb25zdCBCQVNFTUFQX0lDT05fUFJFRklYID0gYGdlb2R1ZGVgO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUFQQk9YX0FQSV9VUkwgPSAnaHR0cHM6Ly9hcGkubWFwYm94LmNvbSc7XG5leHBvcnQgY29uc3QgVFJBTlNJVElPTl9EVVJBVElPTiA9IDA7XG5cbi8vIE1vZGFsIElkc1xuLyoqXG4gKiBNb2RhbCBpZDogZGF0YSB0YWJsZVxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgREFUQV9UQUJMRV9JRCA9ICdkYXRhVGFibGUnO1xuLyoqXG4gKiBNb2RhbCBpZDogZGVsZXRlIGRhdGFzZXQgY29uZmlybSBkaWFsb2dcbiAqIEBjb25zdGFudFxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IERFTEVURV9EQVRBX0lEID0gJ2RlbGV0ZURhdGEnO1xuLyoqXG4gKiBNb2RhbCBpZDogYWRkIGRhdGEgbW9kYWxcbiAqIEBjb25zdGFudFxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IEFERF9EQVRBX0lEID0gJ2FkZERhdGEnO1xuLyoqXG4gKiBNb2RhbCBpZDogZXhwb3J0IGltYWdlIG1vZGFsXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBFWFBPUlRfSU1BR0VfSUQgPSAnZXhwb3J0SW1hZ2UnO1xuLyoqXG4gKiBNb2RhbCBpZDogZXhwb3J0IGRhdGEgbW9kYWxcbiAqIEBjb25zdGFudFxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IEVYUE9SVF9EQVRBX0lEID0gJ2V4cG9ydERhdGEnO1xuLyoqXG4gKiBNb2RhbCBpZDogYWRkIGN1c3RvbSBtYXAgc3R5bGUgbW9kYWxcbiAqIEBjb25zdGFudFxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IEFERF9NQVBfU1RZTEVfSUQgPSAnYWRkTWFwU3R5bGUnO1xuLyoqXG4gKiBNb2RhbCBpZDogZXhwb3J0IG1hcCBtb2RhbFxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgRVhQT1JUX01BUF9JRCA9ICdleHBvcnRNYXAnO1xuLyoqXG4gKiBNb2RhbCBpZDogZXhwb3J0IHZpZGVvIG1vZGFsXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBFWFBPUlRfVklERU9fSUQgPSAnZXhwb3J0VmlkZW8nO1xuLyoqXG4gKiBNb2RhbCBpZDogc2F2ZSBtYXAgbW9kYWxcbiAqIEBjb25zdGFudFxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IFNBVkVfTUFQX0lEID0gJ3NhdmVNYXAnO1xuLyoqXG4gKiBNb2RhbCBpZDogY29uZmlybSB0byBvdmVyd3JpdGUgc2F2ZWQgbWFwXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBPVkVSV1JJVEVfTUFQX0lEID0gJ292ZXJ3cml0ZU1hcCc7XG4vKipcbiAqIE1vZGFsIGlkOiBzaGFyZSBtYXAgdXJsIG1vZGFsXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBTSEFSRV9NQVBfSUQgPSAnc2hhcmVNYXAnO1xuXG5leHBvcnQgY29uc3QgS0VQTEVSX0dMX05BTUUgPSAna2VwbGVyLmdsJztcblxuLy8gX19QQUNLQUdFX1ZFUlNJT05fXyBpcyBhdXRvbWF0aWNhbGx5IGluamVjdGVkIGJ5IEJhYmVsL0VzYnVpbGQgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzXG4vLyBTaW5jZSB3ZSBhcmUgaW5qZWN0aW5nIHRoaXMgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzIHdpdGggYmFiZWxcbi8vIHdoaWxlIGRldmVsb3BpbmcgVkVSU0lPTiBpcyBub3QgZGVmaW5lZCwgd2UgY2FwdHVyZSB0aGUgZXhjZXB0aW9uIGFuZCByZXR1cm5cbi8vIGFuIGVtcHR5IHN0cmluZyB3aGljaCB3aWxsIGFsbG93IHVzIHRvIHJldHJpZXZlIHRoZSBsYXRlc3QgdW1kIHZlcnNpb25cbmV4cG9ydCBjb25zdCBLRVBMRVJfR0xfVkVSU0lPTiA9ICdfX1BBQ0tBR0VfVkVSU0lPTl9fJztcbmV4cG9ydCBjb25zdCBLRVBMRVJfR0xfV0VCU0lURSA9ICdodHRwOi8va2VwbGVyLmdsLyc7XG5cbmV4cG9ydCBjb25zdCBESU1FTlNJT05TID0ge1xuICBzaWRlUGFuZWw6IHtcbiAgICB3aWR0aDogMzAwLFxuICAgIG1hcmdpbjoge3RvcDogMTIsIGxlZnQ6IDEyLCBib3R0b206IDEyLCByaWdodDogMjB9LFxuICAgIGhlYWRlckhlaWdodDogOTZcbiAgfSxcbiAgbWFwQ29udHJvbDoge1xuICAgIHdpZHRoOiAxODQsXG4gICAgcGFkZGluZzogMTIsXG4gICAgbWFwTGVnZW5kOiB7XG4gICAgICBwaW5uZWQ6IHtcbiAgICAgICAgYm90dG9tOiAyMixcbiAgICAgICAgcmlnaHQ6IDEyXG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIFRoZW1lIG5hbWUgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIGBLZXBsZXJHbGAgYHByb3AudGhlbWVgLlxuICogQXZhaWxhYmxlIHRoZW1lcyBhcmUgYFRIRU1FLmxpZ2h0YCBhbmQgYFRIRU1FLmRhcmtgLiBEZWZhdWx0IHRoZW1lIGlzIGBUSEVNRS5kYXJrYFxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7b2JqZWN0fVxuICogQHB1YmxpY1xuICogQGV4YW1wbGVcbiAqIGBgYGpzXG4gKiBjb25zdCBNYXAgPSAoKSA9PiA8S2VwbGVyR2wgdGhlbWU9e1RIRU1FLmxpZ2h0fSBpZD1cIm1hcFwiLz5cbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgVEhFTUUgPSBrZXlNaXJyb3Ioe1xuICBsaWdodDogbnVsbCxcbiAgZGFyazogbnVsbCxcbiAgYmFzZTogbnVsbFxufSk7XG5cbmV4cG9ydCBjb25zdCBTSURFQkFSX1BBTkVMUyA9IFtcbiAge1xuICAgIGlkOiAnbGF5ZXInLFxuICAgIGxhYmVsOiAnc2lkZWJhci5wYW5lbHMubGF5ZXInLFxuICAgIG9uQ2xpY2s6IG51bGxcbiAgfSxcbiAge1xuICAgIGlkOiAnZmlsdGVyJyxcbiAgICBsYWJlbDogJ3NpZGViYXIucGFuZWxzLmZpbHRlcicsXG4gICAgb25DbGljazogbnVsbFxuICB9LFxuICB7XG4gICAgaWQ6ICdpbnRlcmFjdGlvbicsXG4gICAgbGFiZWw6ICdzaWRlYmFyLnBhbmVscy5pbnRlcmFjdGlvbicsXG4gICAgb25DbGljazogbnVsbFxuICB9LFxuICB7XG4gICAgaWQ6ICdtYXAnLFxuICAgIGxhYmVsOiAnc2lkZWJhci5wYW5lbHMuYmFzZW1hcCcsXG4gICAgb25DbGljazogbnVsbFxuICB9XG5dO1xuXG5leHBvcnQgY29uc3QgUEFORUxfVklFV19UT0dHTEVTID0ga2V5TWlycm9yKHtcbiAgbGlzdDogbnVsbCxcbiAgYnlEYXRhc2V0OiBudWxsXG59KTtcblxuLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuZXhwb3J0IGNvbnN0IFBBTkVMUyA9IFNJREVCQVJfUEFORUxTO1xuXG4vLyBNQVAgU1RZTEVTXG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0JMREdfQ09MT1IgPSAnI0QxQ0VDNyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1IgPSAnIzAwMDAwMCc7XG5cbi8vIGFzc2lzdHMgaW4gaWRlbnRpZnlpbmcgYmFzZW1hcCBiYWNrZ3JvdW5kIGxheWVycyB3aGVuIGF1dG8tZGV0ZXJtaW5pbmcgdGhlIGJhY2tncm91bmRDb2xvclxuZXhwb3J0IGNvbnN0IEJBU0VfTUFQX0JBQ0tHUk9VTkRfTEFZRVJfSURTID0gWydiYWNrZ3JvdW5kJywgJ2JnJywgJ2xhbmQnLCAnd2F0ZXInXTtcblxuZXhwb3J0IGNvbnN0IEJBQ0tHUk9VTkRfTEFZRVJfR1JPVVBfU0xVRyA9ICdCYWNrZ3JvdW5kJztcblxuZXhwb3J0IGNvbnN0IFRIUkVFX0RfQlVJTERJTkdfTEFZRVJfR1JPVVBfU0xVRyA9ICczZCBidWlsZGluZyc7XG5cbmV4cG9ydCB0eXBlIERFRkFVTFRfTEFZRVJfR1JPVVAgPSB7XG4gIHNsdWc6IHN0cmluZztcbiAgZmlsdGVyOiAodmFsdWUpID0+IGJvb2xlYW47XG4gIGRlZmF1bHRWaXNpYmlsaXR5OiBib29sZWFuO1xuICBpc1Zpc2liaWxpdHlUb2dnbGVBdmFpbGFibGU/OiBib29sZWFuO1xuICBpc01vdmVUb1RvcEF2YWlsYWJsZT86IGJvb2xlYW47XG4gIGlzQ29sb3JQaWNrZXJBdmFpbGFibGU/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGNvbnN0IEJBQ0tHUk9VTkRfTEFZRVJfR1JPVVA6IERFRkFVTFRfTEFZRVJfR1JPVVAgPSB7XG4gIHNsdWc6IEJBQ0tHUk9VTkRfTEFZRVJfR1JPVVBfU0xVRyxcbiAgZmlsdGVyOiAoKSA9PiBmYWxzZSxcbiAgZGVmYXVsdFZpc2liaWxpdHk6IGZhbHNlLFxuICBpc1Zpc2liaWxpdHlUb2dnbGVBdmFpbGFibGU6IGZhbHNlLFxuICBpc01vdmVUb1RvcEF2YWlsYWJsZTogZmFsc2UsXG4gIGlzQ29sb3JQaWNrZXJBdmFpbGFibGU6IHRydWVcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0xBWUVSX0dST1VQUzogREVGQVVMVF9MQVlFUl9HUk9VUFtdID0gW1xuICB7XG4gICAgc2x1ZzogJ2xhYmVsJyxcbiAgICBmaWx0ZXI6ICh7aWQsIHR5cGV9KSA9PiBpZC5tYXRjaCgvKD89KGxhYmVsfHBsYWNlLXxwb2ktKSkvKSB8fCB0eXBlPy5tYXRjaCgvKD89KHN5bWJvbCkpLyksXG4gICAgZGVmYXVsdFZpc2liaWxpdHk6IHRydWUsXG4gICAgaXNWaXNpYmlsaXR5VG9nZ2xlQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzTW92ZVRvVG9wQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzQ29sb3JQaWNrZXJBdmFpbGFibGU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBzbHVnOiAncm9hZCcsXG4gICAgZmlsdGVyOiAoe2lkfSkgPT4gaWQubWF0Y2goLyg/PShyb2FkfHJhaWx3YXl8dHVubmVsfHN0cmVldHxicmlkZ2UpKSg/IS4qbGFiZWwpLyksXG4gICAgZGVmYXVsdFZpc2liaWxpdHk6IHRydWUsXG4gICAgaXNWaXNpYmlsaXR5VG9nZ2xlQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzTW92ZVRvVG9wQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzQ29sb3JQaWNrZXJBdmFpbGFibGU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBzbHVnOiAnYm9yZGVyJyxcbiAgICBmaWx0ZXI6ICh7aWR9KSA9PiBpZC5tYXRjaCgvYm9yZGVyfGJvdW5kYXJpZXN8Ym91bmRhcnkvKSxcbiAgICBkZWZhdWx0VmlzaWJpbGl0eTogZmFsc2UsXG4gICAgaXNWaXNpYmlsaXR5VG9nZ2xlQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzTW92ZVRvVG9wQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzQ29sb3JQaWNrZXJBdmFpbGFibGU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBzbHVnOiAnYnVpbGRpbmcnLFxuICAgIGZpbHRlcjogKHtpZH0pID0+IGlkLm1hdGNoKC9idWlsZGluZy8pLFxuICAgIGRlZmF1bHRWaXNpYmlsaXR5OiB0cnVlLFxuICAgIGlzVmlzaWJpbGl0eVRvZ2dsZUF2YWlsYWJsZTogdHJ1ZSxcbiAgICBpc01vdmVUb1RvcEF2YWlsYWJsZTogdHJ1ZSxcbiAgICBpc0NvbG9yUGlja2VyQXZhaWxhYmxlOiBmYWxzZVxuICB9LFxuICB7XG4gICAgc2x1ZzogJ3dhdGVyJyxcbiAgICBmaWx0ZXI6ICh7aWR9KSA9PiBpZC5tYXRjaCgvKD89KHdhdGVyfHN0cmVhbXxmZXJyeSkpLyksXG4gICAgZGVmYXVsdFZpc2liaWxpdHk6IHRydWUsXG4gICAgaXNWaXNpYmlsaXR5VG9nZ2xlQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzTW92ZVRvVG9wQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzQ29sb3JQaWNrZXJBdmFpbGFibGU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBzbHVnOiAnbGFuZCcsXG4gICAgZmlsdGVyOiAoe2lkfSkgPT4gaWQubWF0Y2goLyg/PShwYXJrc3xsYW5kY292ZXJ8aW5kdXN0cmlhbHxzYW5kfGhpbGxzaGFkZSkpLyksXG4gICAgZGVmYXVsdFZpc2liaWxpdHk6IHRydWUsXG4gICAgaXNWaXNpYmlsaXR5VG9nZ2xlQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzTW92ZVRvVG9wQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzQ29sb3JQaWNrZXJBdmFpbGFibGU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBzbHVnOiBUSFJFRV9EX0JVSUxESU5HX0xBWUVSX0dST1VQX1NMVUcsXG4gICAgZmlsdGVyOiAoKSA9PiBmYWxzZSxcbiAgICBkZWZhdWx0VmlzaWJpbGl0eTogZmFsc2UsXG4gICAgaXNWaXNpYmlsaXR5VG9nZ2xlQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzTW92ZVRvVG9wQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzQ29sb3JQaWNrZXJBdmFpbGFibGU6IHRydWVcbiAgfVxuXTtcblxuZXhwb3J0IGNvbnN0IEJBU0VfTUFQX0NPTE9SX01PREVTID0ga2V5TWlycm9yKHtcbiAgTk9ORTogbnVsbCxcbiAgREFSSzogbnVsbCxcbiAgTElHSFQ6IG51bGxcbn0pO1xuXG5leHBvcnQgY29uc3QgTk9fTUFQX0lEID0gJ25vX21hcCc7XG5cbi8vIEZhbGxiYWNrIHN0eWxlIHRvIHVzZSB3aGVuIHN0eWxlcyBhcmUgYmVpbmcgZmV0Y2hlZCwgb3Igd2hlblxuLy8gYSBzdHlsZSBmYWlscyB0byBmZXRjaFxuZXhwb3J0IGNvbnN0IEVNUFRZX01BUEJPWF9TVFlMRSA9IHtcbiAgdmVyc2lvbjogOCxcbiAgc291cmNlczoge30sXG4gIGxheWVyczogW11cbn07XG5cbmV4cG9ydCBjb25zdCBNQVBfTElCX09QVElPTlMgPSB7XG4gIE1BUEJPWDogJ21hcGJveCcgYXMgY29uc3QsXG4gIE1BUExJQlJFOiAnbWFwbGlicmUnIGFzIGNvbnN0XG59O1xuXG4vKiogTWFwYm94IEdMIEpTIGRvZXMgbm90IHN1cHBvcnQgcGl0Y2ggYWJvdmUgNjAgZGVncmVlcyAqL1xuZXhwb3J0IGNvbnN0IE1BUEJPWF9NQVhfUElUQ0ggPSA2MDtcblxuZXhwb3J0IHR5cGUgQmFzZU1hcExpYnJhcnlUeXBlID0gJ21hcGJveCcgfCAnbWFwbGlicmUnO1xuXG5leHBvcnQgY29uc3QgTk9fQkFTRU1BUF9JQ09OID0gYCR7QkFTRU1BUF9JQ09OX1BSRUZJWH0vTk9fQkFTRU1BUC5wbmdgO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9CQVNFX01BUF9TVFlMRSA9ICdkYXJrLW1hdHRlcic7XG5cbnR5cGUgRGVmYXVsdEJhc2VNYXBTdHlsZSA9IE1lcmdlPFxuICBCYXNlTWFwU3R5bGUsXG4gIHtcbiAgICBjb2xvck1vZGU6IEJhc2VNYXBDb2xvck1vZGVzO1xuICB9XG4+O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9OT19CQVNFTUFQX1NUWUxFOiBEZWZhdWx0QmFzZU1hcFN0eWxlID0ge1xuICBpZDogTk9fTUFQX0lELFxuICBsYWJlbDogJ05vIEJhc2VtYXAnLFxuICB1cmw6ICcnLFxuICBpY29uOiBOT19CQVNFTUFQX0lDT04sXG4gIGxheWVyR3JvdXBzOiBbQkFDS0dST1VORF9MQVlFUl9HUk9VUF0sXG4gIGNvbG9yTW9kZTogQkFTRV9NQVBfQ09MT1JfTU9ERVMuTk9ORSxcbiAgc3R5bGU6IEVNUFRZX01BUEJPWF9TVFlMRVxufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUFQQk9YX1NUWUxFUzogRGVmYXVsdEJhc2VNYXBTdHlsZVtdID0gW1xuICB7XG4gICAgaWQ6ICdkYXJrJyxcbiAgICBsYWJlbDogJ0RhcmsnLFxuICAgIHVybDogJ21hcGJveDovL3N0eWxlcy91YmVyZGF0YS9jam9xYmJmNmw5azMwMnNsOTZ0eXZrYTA5JyxcbiAgICBpY29uOiBgJHtCQVNFTUFQX0lDT05fUFJFRklYfS9VQkVSX0RBUktfVjIucG5nYCxcbiAgICBsYXllckdyb3VwczogREVGQVVMVF9MQVlFUl9HUk9VUFMsXG4gICAgY29sb3JNb2RlOiBCQVNFX01BUF9DT0xPUl9NT0RFUy5EQVJLLFxuICAgIGNvbXBsaW1lbnRhcnlTdHlsZUlkOiAnbGlnaHQnXG4gIH0sXG4gIHtcbiAgICBpZDogJ2xpZ2h0JyxcbiAgICBsYWJlbDogJ0xpZ2h0JyxcbiAgICB1cmw6ICdtYXBib3g6Ly9zdHlsZXMvdWJlcmRhdGEvY2pvcWI5ajMzOWsxZjJzbDl0NWljNWJuNCcsXG4gICAgaWNvbjogYCR7QkFTRU1BUF9JQ09OX1BSRUZJWH0vVUJFUl9MSUdIVF9WMi5wbmdgLFxuICAgIGxheWVyR3JvdXBzOiBERUZBVUxUX0xBWUVSX0dST1VQUyxcbiAgICBjb2xvck1vZGU6IEJBU0VfTUFQX0NPTE9SX01PREVTLkxJR0hULFxuICAgIGNvbXBsaW1lbnRhcnlTdHlsZUlkOiAnZGFyaydcbiAgfSxcbiAge1xuICAgIGlkOiAnbXV0ZWQnLFxuICAgIGxhYmVsOiAnTXV0ZWQgTGlnaHQnLFxuICAgIHVybDogJ21hcGJveDovL3N0eWxlcy91YmVyZGF0YS9jamZ5bDAza3AxdHVsMnNtZjV2MnRiZGQ0JyxcbiAgICBpY29uOiBgJHtCQVNFTUFQX0lDT05fUFJFRklYfS9VQkVSX01VVEVEX0xJR0hULnBuZ2AsXG4gICAgbGF5ZXJHcm91cHM6IERFRkFVTFRfTEFZRVJfR1JPVVBTLFxuICAgIGNvbG9yTW9kZTogQkFTRV9NQVBfQ09MT1JfTU9ERVMuTElHSFQsXG4gICAgY29tcGxpbWVudGFyeVN0eWxlSWQ6ICdtdXRlZF9uaWdodCdcbiAgfSxcbiAge1xuICAgIGlkOiAnbXV0ZWRfbmlnaHQnLFxuICAgIGxhYmVsOiAnTXV0ZWQgTmlnaHQnLFxuICAgIHVybDogJ21hcGJveDovL3N0eWxlcy91YmVyZGF0YS9jamZ4aGxpa21hajFiMnNveXpldm55d2dzJyxcbiAgICBpY29uOiBgJHtCQVNFTUFQX0lDT05fUFJFRklYfS9VQkVSX01VVEVEX05JR0hULnBuZ2AsXG4gICAgbGF5ZXJHcm91cHM6IERFRkFVTFRfTEFZRVJfR1JPVVBTLFxuICAgIGNvbG9yTW9kZTogQkFTRV9NQVBfQ09MT1JfTU9ERVMuREFSSyxcbiAgICBjb21wbGltZW50YXJ5U3R5bGVJZDogJ211dGVkJ1xuICB9XG5dO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9NQVBCT1hfU0FURUxJVEVfU1RZTEVTOiBEZWZhdWx0QmFzZU1hcFN0eWxlW10gPSBbXG4gIHtcbiAgICBpZDogJ3NhdGVsbGl0ZScsXG4gICAgbGFiZWw6ICdTYXRlbGxpdGUgd2l0aCBzdHJlZXRzJyxcbiAgICB1cmw6IGBtYXBib3g6Ly9zdHlsZXMvbWFwYm94L3NhdGVsbGl0ZS1zdHJlZXRzLXYxMWAsXG4gICAgaWNvbjogYCR7QkFTRU1BUF9JQ09OX1BSRUZJWH0vVUJFUl9TQVRFTExJVEUucG5nYCxcbiAgICBsYXllckdyb3VwczogREVGQVVMVF9MQVlFUl9HUk9VUFMsXG4gICAgY29sb3JNb2RlOiBCQVNFX01BUF9DT0xPUl9NT0RFUy5OT05FXG4gIH1cbl07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX01BUExJQlJFX1NUWUxFUzogRGVmYXVsdEJhc2VNYXBTdHlsZVtdID0gW1xuICB7XG4gICAgaWQ6ICdkYXJrLW1hdHRlcicsXG4gICAgbGFiZWw6ICdEYXJrTWF0dGVyJyxcbiAgICB1cmw6ICdodHRwczovL2Jhc2VtYXBzLmNhcnRvY2RuLmNvbS9nbC9kYXJrLW1hdHRlci1nbC1zdHlsZS9zdHlsZS5qc29uJyxcbiAgICBpY29uOiBgJHtCQVNFTUFQX0lDT05fUFJFRklYfS9EQVJLTUFUVEVSLnBuZ2AsXG4gICAgbGF5ZXJHcm91cHM6IERFRkFVTFRfTEFZRVJfR1JPVVBTLFxuICAgIGNvbG9yTW9kZTogQkFTRV9NQVBfQ09MT1JfTU9ERVMuREFSSyxcbiAgICBjb21wbGltZW50YXJ5U3R5bGVJZDogJ3Bvc2l0cm9uJ1xuICB9LFxuICB7XG4gICAgaWQ6ICdwb3NpdHJvbicsXG4gICAgbGFiZWw6ICdQb3NpdHJvbicsXG4gICAgdXJsOiAnaHR0cHM6Ly9iYXNlbWFwcy5jYXJ0b2Nkbi5jb20vZ2wvcG9zaXRyb24tZ2wtc3R5bGUvc3R5bGUuanNvbicsXG4gICAgaWNvbjogYCR7QkFTRU1BUF9JQ09OX1BSRUZJWH0vUE9TSVRST04ucG5nYCxcbiAgICBsYXllckdyb3VwczogREVGQVVMVF9MQVlFUl9HUk9VUFMsXG4gICAgY29sb3JNb2RlOiBCQVNFX01BUF9DT0xPUl9NT0RFUy5MSUdIVCxcbiAgICBjb21wbGltZW50YXJ5U3R5bGVJZDogJ2RhcmstbWF0dGVyJ1xuICB9LFxuICB7XG4gICAgaWQ6ICd2b3lhZ2VyJyxcbiAgICBsYWJlbDogJ1ZveWFnZXInLFxuICAgIHVybDogJ2h0dHBzOi8vYmFzZW1hcHMuY2FydG9jZG4uY29tL2dsL3ZveWFnZXItZ2wtc3R5bGUvc3R5bGUuanNvbicsXG4gICAgaWNvbjogYCR7QkFTRU1BUF9JQ09OX1BSRUZJWH0vVk9ZQUdFUi5wbmdgLFxuICAgIGxheWVyR3JvdXBzOiBERUZBVUxUX0xBWUVSX0dST1VQUyxcbiAgICBjb2xvck1vZGU6IEJBU0VfTUFQX0NPTE9SX01PREVTLkxJR0hULFxuICAgIGNvbXBsaW1lbnRhcnlTdHlsZUlkOiAnZGFyay1tYXR0ZXInXG4gIH1cbl07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX01BUF9TVFlMRVMgPSBbXG4gIERFRkFVTFRfTk9fQkFTRU1BUF9TVFlMRSxcbiAgLi4uREVGQVVMVF9NQVBMSUJSRV9TVFlMRVMsXG4gIC4uLkRFRkFVTFRfTUFQQk9YX1NBVEVMSVRFX1NUWUxFUyxcbiAgLi4uREVGQVVMVF9NQVBCT1hfU1RZTEVTXG5dO1xuXG5leHBvcnQgY29uc3QgR0VPSlNPTl9GSUVMRFMgPSB7XG4gIGdlb2pzb246IFsnX2dlb2pzb24nLCAnYWxsX3BvaW50cycsICdnZW9qc29uJ11cbn07XG5cbmV4cG9ydCBjb25zdCBJQ09OX0ZJRUxEUyA9IHtcbiAgaWNvbjogWydpY29uJ11cbn07XG5cbmV4cG9ydCBjb25zdCBUUklQX1BPSU5UX0ZJRUxEUzogW3N0cmluZywgc3RyaW5nXVtdID0gW1xuICBbJ2xhdCcsICdsbmcnXSxcbiAgWydsYXQnLCAnbG9uJ10sXG4gIFsnbGF0JywgJ2xvbmcnXSxcbiAgWydsYXRpdHVkZScsICdsb25naXR1ZGUnXVxuXTtcblxuZXhwb3J0IGNvbnN0IEFMVElUVURFX0ZJRUxEUyA9IFsnYWx0JywgJ2FsdGl0dWRlJ107XG5leHBvcnQgY29uc3QgVFJJUF9BUkNfRklFTERTID0ge1xuICBsYXQwOiAnYmVnaW50cmlwJyxcbiAgbG5nMDogJ2JlZ2ludHJpcCcsXG4gIGxhdDE6ICdkcm9wb2ZmJyxcbiAgbG5nMTogJ2Ryb3BvZmYnXG59O1xuXG5leHBvcnQgY29uc3QgRklMVEVSX1RZUEVTID0ga2V5TWlycm9yKHtcbiAgcmFuZ2U6IG51bGwsXG4gIHNlbGVjdDogbnVsbCxcbiAgaW5wdXQ6IG51bGwsXG4gIHRpbWVSYW5nZTogbnVsbCxcbiAgbXVsdGlTZWxlY3Q6IG51bGwsXG4gIHBvbHlnb246IG51bGxcbn0pO1xuXG5leHBvcnQgY29uc3QgRklMVEVSX1ZJRVdfVFlQRVMgPSBrZXlNaXJyb3Ioe1xuICBzaWRlOiBudWxsLFxuICBlbmxhcmdlZDogbnVsbCxcbiAgbWluaWZpZWQ6IG51bGxcbn0pO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9GSUxURVJfVklFV19UWVBFID0gRklMVEVSX1ZJRVdfVFlQRVMuc2lkZTtcblxuZXhwb3J0IHR5cGUgU0NBTEVfVFlQRVNfREVGID0ge1xuICBvcmRpbmFsOiAnb3JkaW5hbCc7XG4gIHF1YW50aWxlOiAncXVhbnRpbGUnO1xuICBxdWFudGl6ZTogJ3F1YW50aXplJztcbiAgbGluZWFyOiAnbGluZWFyJztcbiAgc3FydDogJ3NxcnQnO1xuICBsb2c6ICdsb2cnO1xuICBwb2ludDogJ3BvaW50JztcbiAgdGhyZXNob2xkOiAndGhyZXNob2xkJztcbiAgY3VzdG9tOiAnY3VzdG9tJztcbiAgY3VzdG9tT3JkaW5hbDogJ2N1c3RvbU9yZGluYWwnO1xufTtcblxuZXhwb3J0IGNvbnN0IFNDQUxFX1RZUEVTOiBTQ0FMRV9UWVBFU19ERUYgPSBrZXlNaXJyb3Ioe1xuICBvcmRpbmFsOiBudWxsLFxuICBxdWFudGlsZTogbnVsbCxcbiAgcXVhbnRpemU6IG51bGwsXG4gIGxpbmVhcjogbnVsbCxcbiAgc3FydDogbnVsbCxcbiAgbG9nOiBudWxsLFxuICB0aHJlc2hvbGQ6IG51bGwsXG4gIGN1c3RvbTogbnVsbCxcbiAgY3VzdG9tT3JkaW5hbDogbnVsbCxcbiAgLy8gb3JkaW5hbCBkb21haW4gdG8gbGluZWFyIHJhbmdlXG4gIHBvaW50OiBudWxsXG59KTtcbmV4cG9ydCBjb25zdCBTQ0FMRV9UWVBFX05BTUVTOiB7W2tleSBpbiBrZXlvZiBTQ0FMRV9UWVBFU19ERUZdOiBzdHJpbmd9ID0ge1xuICBvcmRpbmFsOiAnT3JkaW5hbCcsXG4gIHF1YW50aWxlOiAnUXVhbnRpbGUnLFxuICBxdWFudGl6ZTogJ1F1YW50aXplJyxcbiAgbGluZWFyOiAnTGluZWFyJyxcbiAgc3FydDogJ1NxcnQnLFxuICBsb2c6ICdMb2cnLFxuICB0aHJlc2hvbGQ6ICdUaHJlc2hvbGQnLFxuICBjdXN0b206ICdDdXN0b20gQnJlYWtzJyxcbiAgY3VzdG9tT3JkaW5hbDogJ0N1c3RvbSBPcmRpbmFsJyxcbiAgcG9pbnQ6ICdQb2ludCdcbn07XG5cbmV4cG9ydCB0eXBlIFNDQUxFX0ZVTkNfVFlQRSA9IHtcbiAgW2tleSBpbiBrZXlvZiBTQ0FMRV9UWVBFU19ERUZdOiAoKSA9PiBudW1iZXI7XG59O1xuXG5leHBvcnQgY29uc3QgU0NBTEVfRlVOQyA9IHtcbiAgW1NDQUxFX1RZUEVTLmxpbmVhcl06IHNjYWxlTGluZWFyLFxuICBbU0NBTEVfVFlQRVMucXVhbnRpemVdOiBzY2FsZVF1YW50aXplLFxuICBbU0NBTEVfVFlQRVMucXVhbnRpbGVdOiBzY2FsZVF1YW50aWxlLFxuICBbU0NBTEVfVFlQRVMub3JkaW5hbF06IHNjYWxlT3JkaW5hbCxcbiAgW1NDQUxFX1RZUEVTLnNxcnRdOiBzY2FsZVNxcnQsXG4gIFtTQ0FMRV9UWVBFUy5sb2ddOiBzY2FsZUxvZyxcbiAgW1NDQUxFX1RZUEVTLnBvaW50XTogc2NhbGVQb2ludCxcbiAgW1NDQUxFX1RZUEVTLnRocmVzaG9sZF06IHNjYWxlVGhyZXNob2xkLFxuICBbU0NBTEVfVFlQRVMuY3VzdG9tXTogc2NhbGVUaHJlc2hvbGQsXG4gIFtTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsXTogc2NhbGVPcmRpbmFsXG59O1xuXG5leHBvcnQgY29uc3QgQUxMX0ZJRUxEX1RZUEVTID0ga2V5TWlycm9yKHtcbiAgYm9vbGVhbjogbnVsbCxcbiAgZGF0ZTogbnVsbCxcbiAgZ2VvanNvbjogbnVsbCxcbiAgaW50ZWdlcjogbnVsbCxcbiAgcmVhbDogbnVsbCxcbiAgc3RyaW5nOiBudWxsLFxuICB0aW1lc3RhbXA6IG51bGwsXG4gIHBvaW50OiBudWxsLFxuICBhcnJheTogbnVsbCxcbiAgb2JqZWN0OiBudWxsLFxuICBnZW9hcnJvdzogbnVsbCxcbiAgaDM6IG51bGxcbn0pO1xuXG4vLyBEYXRhIFRhYmxlXG5leHBvcnQgY29uc3QgU09SVF9PUkRFUiA9IGtleU1pcnJvcih7XG4gIEFTQ0VORElORzogbnVsbCxcbiAgREVTQ0VORElORzogbnVsbCxcbiAgVU5TT1JUOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IFRBQkxFX09QVElPTiA9IGtleU1pcnJvcih7XG4gIFNPUlRfQVNDOiBudWxsLFxuICBTT1JUX0RFUzogbnVsbCxcbiAgVU5TT1JUOiBudWxsLFxuICBQSU46IG51bGwsXG4gIFVOUElOOiBudWxsLFxuICBDT1BZOiBudWxsLFxuICBGT1JNQVRfQ09MVU1OOiBudWxsXG59KTtcblxuZXhwb3J0IHR5cGUgVGFibGVPcHRpb24gPSB7XG4gIHZhbHVlOiAnU09SVF9BU0MnIHwgJ1NPUlRfREVTJyB8ICdVTlNPUlQnIHwgJ1BJTicgfCAnVU5QSU4nIHwgJ0NPUFknIHwgJ0ZPUk1BVF9DT0xVTU4nO1xuICBkaXNwbGF5OiBzdHJpbmc7XG4gIGljb246IHN0cmluZztcbiAgY29uZGl0aW9uPzogKHByb3BzOiBhbnkpID0+IGJvb2xlYW47XG59O1xuZXhwb3J0IGNvbnN0IFRBQkxFX09QVElPTl9MSVNUOiBUYWJsZU9wdGlvbltdID0gW1xuICB7XG4gICAgdmFsdWU6IFRBQkxFX09QVElPTi5TT1JUX0FTQyxcbiAgICBkaXNwbGF5OiAnU29ydCBBc2NlbmRpbmcnLFxuICAgIGljb246ICdBcnJvd1VwJyxcbiAgICBjb25kaXRpb246IHByb3BzID0+IHByb3BzLnNvcnRUYWJsZUNvbHVtbiAmJiBwcm9wcy5zb3J0TW9kZSAhPT0gU09SVF9PUkRFUi5BU0NFTkRJTkdcbiAgfSxcbiAge1xuICAgIHZhbHVlOiBUQUJMRV9PUFRJT04uU09SVF9ERVMsXG4gICAgZGlzcGxheTogJ1NvcnQgRGVzY2VuZGluZycsXG4gICAgaWNvbjogJ0Fycm93RG93bicsXG4gICAgY29uZGl0aW9uOiBwcm9wcyA9PiBwcm9wcy5zb3J0VGFibGVDb2x1bW4gJiYgcHJvcHMuc29ydE1vZGUgIT09IFNPUlRfT1JERVIuREVTQ0VORElOR1xuICB9LFxuICB7XG4gICAgdmFsdWU6IFRBQkxFX09QVElPTi5VTlNPUlQsXG4gICAgZGlzcGxheTogJ1Vuc29ydCBDb2x1bW4nLFxuICAgIGljb246ICdDYW5jZWwnLFxuICAgIGNvbmRpdGlvbjogcHJvcHMgPT4gcHJvcHMuaXNTb3J0ZWRcbiAgfSxcbiAge1xuICAgIHZhbHVlOiBUQUJMRV9PUFRJT04uUElOLFxuICAgIGRpc3BsYXk6ICdQaW4gQ29sdW1uJyxcbiAgICBpY29uOiAnUGluJyxcbiAgICBjb25kaXRpb246IHByb3BzID0+ICFwcm9wcy5pc1Bpbm5lZFxuICB9LFxuICB7XG4gICAgdmFsdWU6IFRBQkxFX09QVElPTi5VTlBJTixcbiAgICBkaXNwbGF5OiAnVW5waW4gQ29sdW1uJyxcbiAgICBpY29uOiAnQ2FuY2VsJyxcbiAgICBjb25kaXRpb246IHByb3BzID0+IHByb3BzLmlzUGlubmVkXG4gIH0sXG4gIHt2YWx1ZTogVEFCTEVfT1BUSU9OLkNPUFksIGRpc3BsYXk6ICdDb3B5IENvbHVtbicsIGljb246ICdDbGlwYm9hcmQnfSxcbiAge1xuICAgIHZhbHVlOiBUQUJMRV9PUFRJT04uRk9STUFUX0NPTFVNTixcbiAgICBkaXNwbGF5OiAnRm9ybWF0IENvbHVtbicsXG4gICAgaWNvbjogJ0hhc2gnLFxuICAgIGNvbmRpdGlvbjogcHJvcHMgPT4gcHJvcHMuc2V0RGlzcGxheUZvcm1hdFxuICB9XG5dO1xuXG5jb25zdCBZRUxMT1cgPSAnMjQ4LCAxOTQsIDI4JztcbmNvbnN0IFBJTksgPSAnMjQyLCAxNTIsIDE2Myc7XG5jb25zdCBQVVJQTEUgPSAnMTYwLCAxMDYsIDIwNic7XG5jb25zdCBCTFVFID0gJzE0MCwgMjEwLCAyMDUnO1xuY29uc3QgQkxVRTIgPSAnMTA2LCAxNjAsIDIwNic7XG5jb25zdCBCTFVFMyA9ICcwLCAxNzIsIDIzNyc7XG5jb25zdCBHUkVFTiA9ICcxMDYsIDE2MCwgNTYnO1xuY29uc3QgR1JFRU4yID0gJzc0LCAxNjUsIDE1MCc7XG5jb25zdCBSRUQgPSAnMjM3LCA4OCwgMTA2JztcbmNvbnN0IE9SQU5HRSA9ICcyMzEsIDExMCwgNTgnO1xuXG5leHBvcnQgY29uc3QgRklFTERfVFlQRV9ESVNQTEFZID0ge1xuICBbQUxMX0ZJRUxEX1RZUEVTLmJvb2xlYW5dOiB7XG4gICAgbGFiZWw6ICdib29sJyxcbiAgICBjb2xvcjogUElOS1xuICB9LFxuICBbQUxMX0ZJRUxEX1RZUEVTLmRhdGVdOiB7XG4gICAgbGFiZWw6ICdkYXRlJyxcbiAgICBjb2xvcjogUFVSUExFXG4gIH0sXG4gIFtBTExfRklFTERfVFlQRVMuZ2VvanNvbl06IHtcbiAgICBsYWJlbDogJ2dlbycsXG4gICAgY29sb3I6IEJMVUUyXG4gIH0sXG4gIFtBTExfRklFTERfVFlQRVMuZ2VvYXJyb3ddOiB7XG4gICAgbGFiZWw6ICdnZW8nLFxuICAgIGNvbG9yOiBCTFVFMlxuICB9LFxuICBbQUxMX0ZJRUxEX1RZUEVTLmludGVnZXJdOiB7XG4gICAgbGFiZWw6ICdpbnQnLFxuICAgIGNvbG9yOiBZRUxMT1dcbiAgfSxcbiAgW0FMTF9GSUVMRF9UWVBFUy5yZWFsXToge1xuICAgIGxhYmVsOiAnZmxvYXQnLFxuICAgIGNvbG9yOiBZRUxMT1dcbiAgfSxcbiAgW0FMTF9GSUVMRF9UWVBFUy5zdHJpbmddOiB7XG4gICAgbGFiZWw6ICdzdHJpbmcnLFxuICAgIGNvbG9yOiBCTFVFXG4gIH0sXG4gIFtBTExfRklFTERfVFlQRVMudGltZXN0YW1wXToge1xuICAgIGxhYmVsOiAndGltZScsXG4gICAgY29sb3I6IEdSRUVOXG4gIH0sXG4gIC8vIGZpZWxkIHBhaXJzXG4gIFtBTExfRklFTERfVFlQRVMucG9pbnRdOiB7XG4gICAgbGFiZWw6ICdwb2ludCcsXG4gICAgY29sb3I6IEJMVUUzXG4gIH0sXG4gIFtBTExfRklFTERfVFlQRVMuYXJyYXldOiB7XG4gICAgbGFiZWw6ICdhcnJheScsXG4gICAgY29sb3I6IE9SQU5HRVxuICB9LFxuICBbQUxMX0ZJRUxEX1RZUEVTLm9iamVjdF06IHtcbiAgICBsYWJlbDogJ29iamVjdCcsXG4gICAgY29sb3I6IEdSRUVOMlxuICB9LFxuICBbQUxMX0ZJRUxEX1RZUEVTLmgzXToge1xuICAgIGxhYmVsOiAnaDMnLFxuICAgIGNvbG9yOiBCTFVFXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBGSUVMRF9DT0xPUlMgPSB7XG4gIGRlZmF1bHQ6IFJFRFxufTtcbmV4cG9ydCBjb25zdCBISUdITElHSF9DT0xPUl8zRDogUkdCQUNvbG9yID0gWzI1NSwgMjU1LCAyNTUsIDYwXTtcbmV4cG9ydCBjb25zdCBDSEFOTkVMX1NDQUxFUyA9IGtleU1pcnJvcih7XG4gIGNvbG9yOiBudWxsLFxuICByYWRpdXM6IG51bGwsXG4gIHNpemU6IG51bGwsXG4gIGNvbG9yQWdncjogbnVsbCxcbiAgc2l6ZUFnZ3I6IG51bGwsXG4gIGFuZ2xlOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IEFHR1JFR0FUSU9OX1RZUEVTOiB7XG4gIC8vIGRlZmF1bHRcbiAgY291bnQ6ICdjb3VudCc7XG4gIC8vIGxpbmVhclxuICBhdmVyYWdlOiAnYXZlcmFnZSc7XG4gIG1heGltdW06ICdtYXhpbXVtJztcbiAgbWluaW11bTogJ21pbmltdW0nO1xuICBtZWRpYW46ICdtZWRpYW4nO1xuICBzdGRldjogJ3N0ZGV2JztcbiAgc3VtOiAnc3VtJztcbiAgdmFyaWFuY2U6ICd2YXJpYW5jZSc7XG4gIC8vIG9yZGluYWxcbiAgbW9kZTogJ21vZGUnO1xuICBjb3VudFVuaXF1ZTogJ2NvdW50VW5pcXVlJztcbn0gPSB7XG4gIC8vIGRlZmF1bHRcbiAgY291bnQ6ICdjb3VudCcsXG4gIC8vIGxpbmVhclxuICBhdmVyYWdlOiAnYXZlcmFnZScsXG4gIG1heGltdW06ICdtYXhpbXVtJyxcbiAgbWluaW11bTogJ21pbmltdW0nLFxuICBtZWRpYW46ICdtZWRpYW4nLFxuICBzdGRldjogJ3N0ZGV2JyxcbiAgc3VtOiAnc3VtJyxcbiAgdmFyaWFuY2U6ICd2YXJpYW5jZScsXG4gIC8vIG9yZGluYWxcbiAgbW9kZTogJ21vZGUnLFxuICBjb3VudFVuaXF1ZTogJ2NvdW50VW5pcXVlJ1xufTtcblxuZXhwb3J0IGNvbnN0IEFHR1JFR0FUSU9OX1RZUEVfT1BUSU9OUzoge2lkOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmd9W10gPSBPYmplY3QuZW50cmllcyhcbiAgQUdHUkVHQVRJT05fVFlQRVNcbikubWFwKChba2V5LCB2YWx1ZV0pID0+ICh7XG4gIGlkOiBrZXksXG4gIGxhYmVsOlxuICAgIGtleSA9PT0gJ3N0ZGV2J1xuICAgICAgPyAnU3RkIERldmlhdGlvbidcbiAgICAgIDoga2V5ID09PSAnY291bnRVbmlxdWUnXG4gICAgICA/ICdDb3VudCBVbmlxdWUnXG4gICAgICA6IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZydcbiAgICAgID8gdmFsdWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB2YWx1ZS5zbGljZSgxKVxuICAgICAgOiB2YWx1ZVxufSkpO1xuXG5leHBvcnQgY29uc3QgbGluZWFyRmllbGRTY2FsZUZ1bmN0aW9ucyA9IHtcbiAgW0NIQU5ORUxfU0NBTEVTLmNvbG9yXTogW1NDQUxFX1RZUEVTLnF1YW50aXplLCBTQ0FMRV9UWVBFUy5xdWFudGlsZSwgU0NBTEVfVFlQRVMuY3VzdG9tXSxcbiAgW0NIQU5ORUxfU0NBTEVTLnJhZGl1c106IFtTQ0FMRV9UWVBFUy5zcXJ0XSxcbiAgW0NIQU5ORUxfU0NBTEVTLnNpemVdOiBbU0NBTEVfVFlQRVMubGluZWFyLCBTQ0FMRV9UWVBFUy5zcXJ0LCBTQ0FMRV9UWVBFUy5sb2ddLFxuICBbQ0hBTk5FTF9TQ0FMRVMuYW5nbGVdOiBbU0NBTEVfVFlQRVMubGluZWFyXVxufTtcblxuY29uc3QgREVGQVVMVF9BR0dSRUdBVElPTl9DT0xPUl9TQ0FMRVMgPSBbXG4gIFNDQUxFX1RZUEVTLnF1YW50aXplLFxuICBTQ0FMRV9UWVBFUy5xdWFudGlsZSxcbiAgU0NBTEVfVFlQRVMuY3VzdG9tXG5dO1xuXG5leHBvcnQgY29uc3QgbGluZWFyRmllbGRBZ2dyU2NhbGVGdW5jdGlvbnMgPSB7XG4gIFtDSEFOTkVMX1NDQUxFUy5jb2xvckFnZ3JdOiBbXG4gICAgQUdHUkVHQVRJT05fVFlQRVMuYXZlcmFnZSxcbiAgICBBR0dSRUdBVElPTl9UWVBFUy5tYXhpbXVtLFxuICAgIEFHR1JFR0FUSU9OX1RZUEVTLm1pbmltdW0sXG4gICAgQUdHUkVHQVRJT05fVFlQRVMubWVkaWFuLFxuICAgIEFHR1JFR0FUSU9OX1RZUEVTLnN0ZGV2LFxuICAgIEFHR1JFR0FUSU9OX1RZUEVTLnN1bSxcbiAgICBBR0dSRUdBVElPTl9UWVBFUy52YXJpYW5jZSxcbiAgICBBR0dSRUdBVElPTl9UWVBFUy5jb3VudFxuICBdLnJlZHVjZSgocHJldiwgY3VyKSA9PiB7XG4gICAgcHJldltjdXJdID0gREVGQVVMVF9BR0dSRUdBVElPTl9DT0xPUl9TQ0FMRVM7XG4gICAgcmV0dXJuIHByZXY7XG4gIH0sIHt9KSxcblxuICBbQ0hBTk5FTF9TQ0FMRVMuc2l6ZUFnZ3JdOiB7XG4gICAgW0FHR1JFR0FUSU9OX1RZUEVTLmF2ZXJhZ2VdOiBbU0NBTEVfVFlQRVMubGluZWFyLCBTQ0FMRV9UWVBFUy5zcXJ0LCBTQ0FMRV9UWVBFUy5sb2ddLFxuICAgIFtBR0dSRUdBVElPTl9UWVBFUy5tYXhpbXVtXTogW1NDQUxFX1RZUEVTLmxpbmVhciwgU0NBTEVfVFlQRVMuc3FydCwgU0NBTEVfVFlQRVMubG9nXSxcbiAgICBbQUdHUkVHQVRJT05fVFlQRVMubWluaW11bV06IFtTQ0FMRV9UWVBFUy5saW5lYXIsIFNDQUxFX1RZUEVTLnNxcnQsIFNDQUxFX1RZUEVTLmxvZ10sXG4gICAgW0FHR1JFR0FUSU9OX1RZUEVTLm1lZGlhbl06IFtTQ0FMRV9UWVBFUy5saW5lYXIsIFNDQUxFX1RZUEVTLnNxcnQsIFNDQUxFX1RZUEVTLmxvZ10sXG4gICAgW0FHR1JFR0FUSU9OX1RZUEVTLnN0ZGV2XTogW1NDQUxFX1RZUEVTLmxpbmVhciwgU0NBTEVfVFlQRVMuc3FydCwgU0NBTEVfVFlQRVMubG9nXSxcbiAgICBbQUdHUkVHQVRJT05fVFlQRVMuc3VtXTogW1NDQUxFX1RZUEVTLmxpbmVhciwgU0NBTEVfVFlQRVMuc3FydCwgU0NBTEVfVFlQRVMubG9nXSxcbiAgICBbQUdHUkVHQVRJT05fVFlQRVMudmFyaWFuY2VdOiBbU0NBTEVfVFlQRVMubGluZWFyLCBTQ0FMRV9UWVBFUy5zcXJ0LCBTQ0FMRV9UWVBFUy5sb2ddXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBvcmRpbmFsRmllbGRTY2FsZUZ1bmN0aW9ucyA9IHtcbiAgW0NIQU5ORUxfU0NBTEVTLmNvbG9yXTogW1NDQUxFX1RZUEVTLm9yZGluYWwsIFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWxdLFxuICBbQ0hBTk5FTF9TQ0FMRVMucmFkaXVzXTogW1NDQUxFX1RZUEVTLnBvaW50XSxcbiAgW0NIQU5ORUxfU0NBTEVTLnNpemVdOiBbU0NBTEVfVFlQRVMucG9pbnRdXG59O1xuXG5leHBvcnQgY29uc3Qgb3JkaW5hbEZpZWxkQWdnclNjYWxlRnVuY3Rpb25zID0ge1xuICAvLyBbQ0hBTk5FTF9TQ0FMRVMuY29sb3JBZ2dyXTogW1NDQUxFX1RZUEVTLm9yZGluYWwsIFNDQUxFX1RZUEVTLmxpbmVhcl0sXG4gIFtDSEFOTkVMX1NDQUxFUy5jb2xvckFnZ3JdOiB7XG4gICAgW0FHR1JFR0FUSU9OX1RZUEVTLm1vZGVdOiBbU0NBTEVfVFlQRVMub3JkaW5hbF0sXG4gICAgW0FHR1JFR0FUSU9OX1RZUEVTLmNvdW50VW5pcXVlXTogW1NDQUxFX1RZUEVTLnF1YW50aXplLCBTQ0FMRV9UWVBFUy5xdWFudGlsZV1cbiAgfSxcblxuICAvLyBDdXJyZW50bHkgZG9lc24ndCBzdXBwb3J0IHlldFxuICBbQ0hBTk5FTF9TQ0FMRVMuc2l6ZUFnZ3JdOiB7fVxufTtcblxuZXhwb3J0IGNvbnN0IG5vdFN1cHBvcnRlZFNjYWxlT3B0cyA9IHtcbiAgW0NIQU5ORUxfU0NBTEVTLmNvbG9yXTogW10sXG4gIFtDSEFOTkVMX1NDQUxFUy5yYWRpdXNdOiBbXSxcbiAgW0NIQU5ORUxfU0NBTEVTLnNpemVdOiBbXVxufTtcblxuZXhwb3J0IGNvbnN0IG5vdFN1cHBvcnRBZ2dyT3B0cyA9IHtcbiAgW0NIQU5ORUxfU0NBTEVTLmNvbG9yQWdncl06IHt9LFxuICBbQ0hBTk5FTF9TQ0FMRVMuc2l6ZUFnZ3JdOiB7fVxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGFnZ3JlZ2F0aW9uIGFyZSBiYXNlZCBvbiBvY3VudFxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9BR0dSRUdBVElPTiA9IHtcbiAgW0NIQU5ORUxfU0NBTEVTLmNvbG9yQWdncl06IHtcbiAgICBbQUdHUkVHQVRJT05fVFlQRVMuY291bnRdOiBERUZBVUxUX0FHR1JFR0FUSU9OX0NPTE9SX1NDQUxFU1xuICB9LFxuICBbQ0hBTk5FTF9TQ0FMRVMuc2l6ZUFnZ3JdOiB7XG4gICAgW0FHR1JFR0FUSU9OX1RZUEVTLmNvdW50XTogW1NDQUxFX1RZUEVTLmxpbmVhciwgU0NBTEVfVFlQRVMuc3FydCwgU0NBTEVfVFlQRVMubG9nXVxuICB9XG59O1xuXG4vKipcbiAqIERlZmluZSB3aGF0IHR5cGUgb2Ygc2NhbGUgb3BlcmF0aW9uIGlzIGFsbG93ZWQgb24gZWFjaCB0eXBlIG9mIGZpZWxkc1xuICovXG5leHBvcnQgY29uc3QgRklFTERfT1BUUyA9IHtcbiAgW0FMTF9GSUVMRF9UWVBFUy5zdHJpbmddOiB7XG4gICAgdHlwZTogJ2NhdGVnb3JpY2FsJyxcbiAgICBzY2FsZToge1xuICAgICAgLi4ub3JkaW5hbEZpZWxkU2NhbGVGdW5jdGlvbnMsXG4gICAgICAuLi5vcmRpbmFsRmllbGRBZ2dyU2NhbGVGdW5jdGlvbnNcbiAgICB9LFxuICAgIGZvcm1hdDoge1xuICAgICAgbGVnZW5kOiBkID0+IGQsXG4gICAgICB0b29sdGlwOiBbXVxuICAgIH1cbiAgfSxcbiAgW0FMTF9GSUVMRF9UWVBFUy5yZWFsXToge1xuICAgIHR5cGU6ICdudW1lcmljYWwnLFxuICAgIHNjYWxlOiB7XG4gICAgICAuLi5saW5lYXJGaWVsZFNjYWxlRnVuY3Rpb25zLFxuICAgICAgLi4ubGluZWFyRmllbGRBZ2dyU2NhbGVGdW5jdGlvbnNcbiAgICB9LFxuICAgIGZvcm1hdDoge1xuICAgICAgbGVnZW5kOiBkID0+IGQsXG4gICAgICB0b29sdGlwOiBbXG4gICAgICAgIFRPT0xUSVBfRk9STUFUX1RZUEVTLk5PTkUsXG4gICAgICAgIFRPT0xUSVBfRk9STUFUX1RZUEVTLkRFQ0lNQUwsXG4gICAgICAgIFRPT0xUSVBfRk9STUFUX1RZUEVTLlBFUkNFTlRBR0VcbiAgICAgIF1cbiAgICB9XG4gIH0sXG4gIFtBTExfRklFTERfVFlQRVMudGltZXN0YW1wXToge1xuICAgIHR5cGU6ICd0aW1lJyxcbiAgICBzY2FsZToge1xuICAgICAgLi4ubGluZWFyRmllbGRTY2FsZUZ1bmN0aW9ucyxcbiAgICAgIC4uLm5vdFN1cHBvcnRBZ2dyT3B0c1xuICAgIH0sXG4gICAgZm9ybWF0OiB7XG4gICAgICBsZWdlbmQ6IGQgPT4gZCxcbiAgICAgIHRvb2x0aXA6IFtcbiAgICAgICAgVE9PTFRJUF9GT1JNQVRfVFlQRVMuTk9ORSxcbiAgICAgICAgVE9PTFRJUF9GT1JNQVRfVFlQRVMuREFURSxcbiAgICAgICAgVE9PTFRJUF9GT1JNQVRfVFlQRVMuREFURV9USU1FXG4gICAgICBdXG4gICAgfVxuICB9LFxuICBbQUxMX0ZJRUxEX1RZUEVTLmludGVnZXJdOiB7XG4gICAgdHlwZTogJ251bWVyaWNhbCcsXG4gICAgc2NhbGU6IHtcbiAgICAgIC4uLntcbiAgICAgICAgLi4ubGluZWFyRmllbGRTY2FsZUZ1bmN0aW9ucyxcbiAgICAgICAgW0NIQU5ORUxfU0NBTEVTLmNvbG9yXTogW1xuICAgICAgICAgIC4uLmxpbmVhckZpZWxkU2NhbGVGdW5jdGlvbnNbQ0hBTk5FTF9TQ0FMRVMuY29sb3JdLFxuICAgICAgICAgIFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWxcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC4uLmxpbmVhckZpZWxkQWdnclNjYWxlRnVuY3Rpb25zXG4gICAgfSxcbiAgICBmb3JtYXQ6IHtcbiAgICAgIGxlZ2VuZDogZCA9PiBkLFxuICAgICAgdG9vbHRpcDogW1xuICAgICAgICBUT09MVElQX0ZPUk1BVF9UWVBFUy5OT05FLFxuICAgICAgICBUT09MVElQX0ZPUk1BVF9UWVBFUy5ERUNJTUFMLFxuICAgICAgICBUT09MVElQX0ZPUk1BVF9UWVBFUy5QRVJDRU5UQUdFXG4gICAgICBdXG4gICAgfVxuICB9LFxuICBbQUxMX0ZJRUxEX1RZUEVTLmJvb2xlYW5dOiB7XG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIHNjYWxlOiB7XG4gICAgICAuLi5vcmRpbmFsRmllbGRTY2FsZUZ1bmN0aW9ucyxcbiAgICAgIC4uLm9yZGluYWxGaWVsZEFnZ3JTY2FsZUZ1bmN0aW9uc1xuICAgIH0sXG4gICAgZm9ybWF0OiB7XG4gICAgICBsZWdlbmQ6IGQgPT4gZCxcbiAgICAgIHRvb2x0aXA6IFtUT09MVElQX0ZPUk1BVF9UWVBFUy5OT05FLCBUT09MVElQX0ZPUk1BVF9UWVBFUy5CT09MRUFOXVxuICAgIH1cbiAgfSxcbiAgW0FMTF9GSUVMRF9UWVBFUy5kYXRlXToge1xuICAgIHR5cGU6ICd0aW1lJyxcbiAgICBzY2FsZToge1xuICAgICAgLi4ub3JkaW5hbEZpZWxkU2NhbGVGdW5jdGlvbnMsXG4gICAgICAuLi5vcmRpbmFsRmllbGRBZ2dyU2NhbGVGdW5jdGlvbnNcbiAgICB9LFxuICAgIGZvcm1hdDoge1xuICAgICAgbGVnZW5kOiBkID0+IGQsXG4gICAgICB0b29sdGlwOiBbVE9PTFRJUF9GT1JNQVRfVFlQRVMuTk9ORSwgVE9PTFRJUF9GT1JNQVRfVFlQRVMuREFURV1cbiAgICB9XG4gIH0sXG4gIFtBTExfRklFTERfVFlQRVMuZ2VvanNvbl06IHtcbiAgICB0eXBlOiAnZ2VvbWV0cnknLFxuICAgIHNjYWxlOiB7XG4gICAgICAuLi5ub3RTdXBwb3J0ZWRTY2FsZU9wdHMsXG4gICAgICAuLi5ub3RTdXBwb3J0QWdnck9wdHNcbiAgICB9LFxuICAgIGZvcm1hdDoge1xuICAgICAgbGVnZW5kOiAoKSA9PiAnLi4uJyxcbiAgICAgIHRvb2x0aXA6IFtdXG4gICAgfVxuICB9LFxuICBbQUxMX0ZJRUxEX1RZUEVTLmdlb2Fycm93XToge1xuICAgIHR5cGU6ICdnZW9tZXRyeScsXG4gICAgc2NhbGU6IHtcbiAgICAgIC4uLm5vdFN1cHBvcnRlZFNjYWxlT3B0cyxcbiAgICAgIC4uLm5vdFN1cHBvcnRBZ2dyT3B0c1xuICAgIH0sXG4gICAgZm9ybWF0OiB7XG4gICAgICBsZWdlbmQ6ICgpID0+ICcuLi4nLFxuICAgICAgdG9vbHRpcDogW11cbiAgICB9XG4gIH0sXG4gIFtBTExfRklFTERfVFlQRVMub2JqZWN0XToge1xuICAgIHR5cGU6ICdudW1lcmljYWwnLFxuICAgIHNjYWxlOiB7fSxcbiAgICBmb3JtYXQ6IHtcbiAgICAgIGxlZ2VuZDogKCkgPT4gJy4uLicsXG4gICAgICB0b29sdGlwOiBbXVxuICAgIH1cbiAgfSxcbiAgW0FMTF9GSUVMRF9UWVBFUy5hcnJheV06IHtcbiAgICB0eXBlOiAnbnVtZXJpY2FsJyxcbiAgICBzY2FsZToge30sXG4gICAgZm9ybWF0OiB7XG4gICAgICBsZWdlbmQ6ICgpID0+ICcuLi4nLFxuICAgICAgdG9vbHRpcDogW11cbiAgICB9XG4gIH0sXG4gIFtBTExfRklFTERfVFlQRVMuaDNdOiB7XG4gICAgdHlwZTogJ2gzJyxcbiAgICBzY2FsZToge1xuICAgICAgLi4ubm90U3VwcG9ydGVkU2NhbGVPcHRzLFxuICAgICAgLi4ubm90U3VwcG9ydEFnZ3JPcHRzXG4gICAgfSxcbiAgICBmb3JtYXQ6IHtcbiAgICAgIGxlZ2VuZDogKCkgPT4gJy4uLicsXG4gICAgICB0b29sdGlwOiBbXVxuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IENIQU5ORUxfU0NBTEVfU1VQUE9SVEVEX0ZJRUxEUyA9IE9iamVjdC5rZXlzKENIQU5ORUxfU0NBTEVTKS5yZWR1Y2UoXG4gIChhY2N1LCBrZXkpID0+ICh7XG4gICAgLi4uYWNjdSxcbiAgICBba2V5XTogT2JqZWN0LmtleXMoRklFTERfT1BUUykuZmlsdGVyKFxuICAgICAgZnQgPT4gRklFTERfT1BUU1tmdF0uc2NhbGVba2V5XSAmJiBPYmplY3Qua2V5cyhGSUVMRF9PUFRTW2Z0XS5zY2FsZVtrZXldKS5sZW5ndGhcbiAgICApXG4gIH0pLFxuICB7fSBhcyB7W2lkOiBzdHJpbmddOiBzdHJpbmdbXX1cbik7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0xBWUVSX0NPTE9SID0ge1xuICB0cmlwQXJjOiAnIzkyMjZDNicsXG4gIGJlZ2ludHJpcF9sYXQ6ICcjMUU5NkJFJyxcbiAgZHJvcG9mZl9sYXQ6ICcjRkY5OTFGJyxcbiAgcmVxdWVzdF9sYXQ6ICcjNTJBMzUzJ1xufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTEFZRVJfQ09MT1JfUEFMRVRURSA9ICdHbG9iYWwgV2FybWluZyc7XG5leHBvcnQgY29uc3QgREVGQVVMVF9MQVlFUl9DT0xPUl9QQUxFVFRFX1NURVBTID0gNjtcblxuLy8gbGV0IHVzZXIgcGFzcyBpbiBkZWZhdWx0IHRvb2x0aXAgZmllbGRzXG5leHBvcnQgY29uc3QgREVGQVVMVF9UT09MVElQX0ZJRUxEUzogYW55W10gPSBbXTtcblxuZXhwb3J0IGNvbnN0IE5PX1ZBTFVFX0NPTE9SOiBSR0JBQ29sb3IgPSBbMCwgMCwgMCwgMF07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1BJQ0tJTkdfUkFESVVTID0gMztcblxuZXhwb3J0IGNvbnN0IE9WRVJMQVlfQkxFTkRJTkdTID0ge1xuICBub3JtYWw6IHtcbiAgICBsYWJlbDogJ292ZXJsYXlCbGVuZGluZy5ub3JtYWwnLFxuICAgIHZhbHVlOiAnbm9ybWFsJ1xuICB9LFxuICBzY3JlZW46IHtcbiAgICBsYWJlbDogJ292ZXJsYXlCbGVuZGluZy5zY3JlZW4nLFxuICAgIHZhbHVlOiAnc2NyZWVuJ1xuICB9LFxuICBkYXJrZW46IHtcbiAgICBsYWJlbDogJ292ZXJsYXlCbGVuZGluZy5kYXJrZW4nLFxuICAgIHZhbHVlOiAnZGFya2VuJ1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgTEFZRVJfQkxFTkRJTkdTID0ge1xuICBhZGRpdGl2ZToge1xuICAgIGxhYmVsOiAnbGF5ZXJCbGVuZGluZy5hZGRpdGl2ZScsXG4gICAgYmxlbmRGdW5jOiBbJ1NSQ19BTFBIQScsICdEU1RfQUxQSEEnXSxcbiAgICBibGVuZEVxdWF0aW9uOiAnRlVOQ19BREQnXG4gIH0sXG4gIG5vcm1hbDoge1xuICAgIC8vIHJlZmVyZW5jZSB0b1xuICAgIC8vIGh0dHBzOi8vbGltbnUuY29tL3dlYmdsLWJsZW5kaW5nLXlvdXJlLXByb2JhYmx5LXdyb25nL1xuICAgIGxhYmVsOiAnbGF5ZXJCbGVuZGluZy5ub3JtYWwnLFxuICAgIGJsZW5kRnVuYzogWydTUkNfQUxQSEEnLCAnT05FX01JTlVTX1NSQ19BTFBIQScsICdPTkUnLCAnT05FX01JTlVTX1NSQ19BTFBIQSddLFxuICAgIGJsZW5kRXF1YXRpb246IFsnRlVOQ19BREQnLCAnRlVOQ19BREQnXVxuICB9LFxuICBzdWJ0cmFjdGl2ZToge1xuICAgIGxhYmVsOiAnbGF5ZXJCbGVuZGluZy5zdWJ0cmFjdGl2ZScsXG4gICAgYmxlbmRGdW5jOiBbJ09ORScsICdPTkVfTUlOVVNfRFNUX0NPTE9SJywgJ1NSQ19BTFBIQScsICdEU1RfQUxQSEEnXSxcbiAgICBibGVuZEVxdWF0aW9uOiBbJ0ZVTkNfU1VCVFJBQ1QnLCAnRlVOQ19BREQnXVxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgTUFYX0RFRkFVTFRfVE9PTFRJUFMgPSA1O1xuXG5leHBvcnQgY29uc3QgUkVTT0xVVElPTlMgPSBrZXlNaXJyb3Ioe1xuICBPTkVfWDogbnVsbCxcbiAgVFdPX1g6IG51bGxcbn0pO1xuXG5leHBvcnQgY29uc3QgRVhQT1JUX0lNR19SQVRJT1MgPSBrZXlNaXJyb3Ioe1xuICBTQ1JFRU46IG51bGwsXG4gIEZPVVJfQllfVEhSRUU6IG51bGwsXG4gIFNJWFRFRU5fQllfTklORTogbnVsbCxcbiAgQ1VTVE9NOiBudWxsXG59KTtcblxuZXhwb3J0IHR5cGUgSW1hZ2VSYXRpb09wdGlvbiA9IHtcbiAgaWQ6IGtleW9mIHR5cGVvZiBFWFBPUlRfSU1HX1JBVElPUztcbiAgbGFiZWw6IHN0cmluZztcbiAgaGlkZGVuPzogYm9vbGVhbjtcbiAgZ2V0U2l6ZTogKHNjcmVlblc6IG51bWJlciwgc2NyZWVuSDogbnVtYmVyKSA9PiB7d2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXJ9O1xufTtcblxuZXhwb3J0IGNvbnN0IFNjcmVlblJhdGlvT3B0aW9uOiBJbWFnZVJhdGlvT3B0aW9uID0ge1xuICBpZDogRVhQT1JUX0lNR19SQVRJT1MuU0NSRUVOLFxuICBsYWJlbDogJ21vZGFsLmV4cG9ydEltYWdlLnJhdGlvT3JpZ2luYWxTY3JlZW4nLFxuICBnZXRTaXplOiAoc2NyZWVuVywgc2NyZWVuSCkgPT4gKHt3aWR0aDogc2NyZWVuVywgaGVpZ2h0OiBzY3JlZW5IfSlcbn07XG5leHBvcnQgY29uc3QgQ3VzdG9tUmF0aW9PcHRpb246IEltYWdlUmF0aW9PcHRpb24gPSB7XG4gIGlkOiBFWFBPUlRfSU1HX1JBVElPUy5DVVNUT00sXG4gIGhpZGRlbjogdHJ1ZSxcbiAgbGFiZWw6ICdtb2RhbC5leHBvcnRJbWFnZS5yYXRpb0N1c3RvbScsXG4gIGdldFNpemU6IChtYXBXLCBtYXBIKSA9PiAoe3dpZHRoOiBtYXBXLCBoZWlnaHQ6IG1hcEh9KVxufTtcbmV4cG9ydCBjb25zdCBGb3VyQnlUaHJlZVJhdGlvT3B0aW9uOiBJbWFnZVJhdGlvT3B0aW9uID0ge1xuICBpZDogRVhQT1JUX0lNR19SQVRJT1MuRk9VUl9CWV9USFJFRSxcbiAgbGFiZWw6ICdtb2RhbC5leHBvcnRJbWFnZS5yYXRpbzRfMycsXG4gIGdldFNpemU6IHNjcmVlblcgPT4gKHtcbiAgICB3aWR0aDogc2NyZWVuVyxcbiAgICBoZWlnaHQ6IE1hdGgucm91bmQoc2NyZWVuVyAqIDAuNzUpXG4gIH0pXG59O1xuZXhwb3J0IGNvbnN0IFNpeHRlZW5CeU5pbmVSYXRpb09wdGlvbjogSW1hZ2VSYXRpb09wdGlvbiA9IHtcbiAgaWQ6IEVYUE9SVF9JTUdfUkFUSU9TLlNJWFRFRU5fQllfTklORSxcbiAgbGFiZWw6ICdtb2RhbC5leHBvcnRJbWFnZS5yYXRpbzE2XzknLFxuICBnZXRTaXplOiBzY3JlZW5XID0+ICh7XG4gICAgd2lkdGg6IHNjcmVlblcsXG4gICAgaGVpZ2h0OiBNYXRoLnJvdW5kKHNjcmVlblcgKiAwLjU2MjUpXG4gIH0pXG59O1xuXG5leHBvcnQgY29uc3QgRVhQT1JUX0lNR19SQVRJT19PUFRJT05TOiBSZWFkb25seUFycmF5PEltYWdlUmF0aW9PcHRpb24+ID0gW1xuICBTY3JlZW5SYXRpb09wdGlvbixcbiAgRm91ckJ5VGhyZWVSYXRpb09wdGlvbixcbiAgU2l4dGVlbkJ5TmluZVJhdGlvT3B0aW9uLFxuICBDdXN0b21SYXRpb09wdGlvblxuXTtcblxuZXhwb3J0IHR5cGUgRXhwb3J0UmVzb2x1dGlvbk9wdGlvbiA9XG4gIHwga2V5b2YgdHlwZW9mIFJFU09MVVRJT05TXG4gIHwgJzEyODB4NzIwJ1xuICB8ICcxOTIweDEwODAnXG4gIHwgJzI1NjB4MTQ0MCdcbiAgfCAnMTYwMHg5MDAnXG4gIHwgJzEwMjR4NzY4J1xuICB8ICcxMjgweDk2MCdcbiAgfCAnMTYwMHgxMjAwJ1xuICB8ICcxOTIweDE0NDAnO1xuXG5leHBvcnQgdHlwZSBJbWFnZVJlc29sdXRpb25PcHRpb24gPSB7XG4gIGlkOiBFeHBvcnRSZXNvbHV0aW9uT3B0aW9uO1xuICBsYWJlbDogc3RyaW5nO1xuICBhdmFpbGFibGU6IGJvb2xlYW47XG4gIHNjYWxlPzogbnVtYmVyO1xuICBnZXRTaXplOiAoc2NyZWVuVzogbnVtYmVyLCBzY3JlZW5IOiBudW1iZXIpID0+IHt3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlcn07XG59O1xuXG5leHBvcnQgY29uc3QgT25lWFJlc29sdXRpb25PcHRpb246IEltYWdlUmVzb2x1dGlvbk9wdGlvbiA9IHtcbiAgaWQ6IFJFU09MVVRJT05TLk9ORV9YLFxuICBsYWJlbDogJzF4JyxcbiAgYXZhaWxhYmxlOiB0cnVlLFxuICBzY2FsZTogMSxcbiAgZ2V0U2l6ZTogKHNjcmVlblcsIHNjcmVlbkgpID0+ICh7XG4gICAgd2lkdGg6IHNjcmVlblcsXG4gICAgaGVpZ2h0OiBzY3JlZW5IXG4gIH0pXG59O1xuXG5leHBvcnQgY29uc3QgVHdvWFJlc29sdXRpb25PcHRpb246IEltYWdlUmVzb2x1dGlvbk9wdGlvbiA9IHtcbiAgaWQ6IFJFU09MVVRJT05TLlRXT19YLFxuICBsYWJlbDogJzJ4JyxcbiAgYXZhaWxhYmxlOiB0cnVlLFxuICBzY2FsZTogMixcbiAgZ2V0U2l6ZTogKHNjcmVlblcsIHNjcmVlbkgpID0+ICh7XG4gICAgd2lkdGg6IHNjcmVlblcgKiAyLFxuICAgIGhlaWdodDogc2NyZWVuSCAqIDJcbiAgfSlcbn07XG5cbi8vIEZpeGVkIGRpbWVuc2lvbiBvcHRpb25zXG5leHBvcnQgY29uc3QgUmVzb2x1dGlvbjE5MjB4MTA4ME9wdGlvbjogSW1hZ2VSZXNvbHV0aW9uT3B0aW9uID0ge1xuICBpZDogJzE5MjB4MTA4MCcsXG4gIGxhYmVsOiAnMTkyMCDDlyAxMDgwICgxNjo5KScsXG4gIGF2YWlsYWJsZTogdHJ1ZSxcbiAgZ2V0U2l6ZTogKCkgPT4gKHt3aWR0aDogMTkyMCwgaGVpZ2h0OiAxMDgwfSlcbn07XG5cbmV4cG9ydCBjb25zdCBSZXNvbHV0aW9uMTI4MHg3MjBPcHRpb246IEltYWdlUmVzb2x1dGlvbk9wdGlvbiA9IHtcbiAgaWQ6ICcxMjgweDcyMCcsXG4gIGxhYmVsOiAnMTI4MCDDlyA3MjAgKDE2OjkpJyxcbiAgYXZhaWxhYmxlOiB0cnVlLFxuICBnZXRTaXplOiAoKSA9PiAoe3dpZHRoOiAxMjgwLCBoZWlnaHQ6IDcyMH0pXG59O1xuXG5leHBvcnQgY29uc3QgUmVzb2x1dGlvbjI1NjB4MTQ0ME9wdGlvbjogSW1hZ2VSZXNvbHV0aW9uT3B0aW9uID0ge1xuICBpZDogJzI1NjB4MTQ0MCcsXG4gIGxhYmVsOiAnMjU2MCDDlyAxNDQwICgxNjo5KScsXG4gIGF2YWlsYWJsZTogdHJ1ZSxcbiAgZ2V0U2l6ZTogKCkgPT4gKHt3aWR0aDogMjU2MCwgaGVpZ2h0OiAxNDQwfSlcbn07XG5cbmV4cG9ydCBjb25zdCBSZXNvbHV0aW9uMTYwMHg5MDBPcHRpb246IEltYWdlUmVzb2x1dGlvbk9wdGlvbiA9IHtcbiAgaWQ6ICcxNjAweDkwMCcsXG4gIGxhYmVsOiAnMTYwMCDDlyA5MDAgKDE2OjkpJyxcbiAgYXZhaWxhYmxlOiB0cnVlLFxuICBnZXRTaXplOiAoKSA9PiAoe3dpZHRoOiAxNjAwLCBoZWlnaHQ6IDkwMH0pXG59O1xuXG5leHBvcnQgY29uc3QgUmVzb2x1dGlvbjEwMjR4NzY4T3B0aW9uOiBJbWFnZVJlc29sdXRpb25PcHRpb24gPSB7XG4gIGlkOiAnMTAyNHg3NjgnLFxuICBsYWJlbDogJzEwMjQgw5cgNzY4ICg0OjMpJyxcbiAgYXZhaWxhYmxlOiB0cnVlLFxuICBnZXRTaXplOiAoKSA9PiAoe3dpZHRoOiAxMDI0LCBoZWlnaHQ6IDc2OH0pXG59O1xuXG5leHBvcnQgY29uc3QgUmVzb2x1dGlvbjEyODB4OTYwT3B0aW9uOiBJbWFnZVJlc29sdXRpb25PcHRpb24gPSB7XG4gIGlkOiAnMTI4MHg5NjAnLFxuICBsYWJlbDogJzEyODAgw5cgOTYwICg0OjMpJyxcbiAgYXZhaWxhYmxlOiB0cnVlLFxuICBnZXRTaXplOiAoKSA9PiAoe3dpZHRoOiAxMjgwLCBoZWlnaHQ6IDk2MH0pXG59O1xuXG5leHBvcnQgY29uc3QgUmVzb2x1dGlvbjE2MDB4MTIwME9wdGlvbjogSW1hZ2VSZXNvbHV0aW9uT3B0aW9uID0ge1xuICBpZDogJzE2MDB4MTIwMCcsXG4gIGxhYmVsOiAnMTYwMCDDlyAxMjAwICg0OjMpJyxcbiAgYXZhaWxhYmxlOiB0cnVlLFxuICBnZXRTaXplOiAoKSA9PiAoe3dpZHRoOiAxNjAwLCBoZWlnaHQ6IDEyMDB9KVxufTtcblxuZXhwb3J0IGNvbnN0IFJlc29sdXRpb24xOTIweDE0NDBPcHRpb246IEltYWdlUmVzb2x1dGlvbk9wdGlvbiA9IHtcbiAgaWQ6ICcxOTIweDE0NDAnLFxuICBsYWJlbDogJzE5MjAgw5cgMTQ0MCAoNDozKScsXG4gIGF2YWlsYWJsZTogdHJ1ZSxcbiAgZ2V0U2l6ZTogKCkgPT4gKHt3aWR0aDogMTkyMCwgaGVpZ2h0OiAxNDQwfSlcbn07XG5cbmV4cG9ydCBjb25zdCBFWFBPUlRfSU1HX1JFU09MVVRJT05fT1BUSU9OUzogUmVhZG9ubHlBcnJheTxJbWFnZVJlc29sdXRpb25PcHRpb24+ID0gW1xuICBPbmVYUmVzb2x1dGlvbk9wdGlvbixcbiAgVHdvWFJlc29sdXRpb25PcHRpb24sXG4gIFJlc29sdXRpb24xMjgweDcyME9wdGlvbixcbiAgUmVzb2x1dGlvbjE5MjB4MTA4ME9wdGlvbixcbiAgUmVzb2x1dGlvbjI1NjB4MTQ0ME9wdGlvbixcbiAgUmVzb2x1dGlvbjE2MDB4OTAwT3B0aW9uLFxuICBSZXNvbHV0aW9uMTAyNHg3NjhPcHRpb24sXG4gIFJlc29sdXRpb24xMjgweDk2ME9wdGlvbixcbiAgUmVzb2x1dGlvbjE2MDB4MTIwME9wdGlvbixcbiAgUmVzb2x1dGlvbjE5MjB4MTQ0ME9wdGlvblxuXTtcblxuZXhwb3J0IGNvbnN0IEVYUE9SVF9EQVRBX1RZUEUgPSBrZXlNaXJyb3Ioe1xuICBDU1Y6IG51bGxcbiAgLy8gU0hBUEVGSUxFOiBudWxsLFxuICAvLyBKU09OOiBudWxsLFxuICAvLyBHRU9KU09OOiBudWxsLFxuICAvLyBUT1BPSlNPTjogbnVsbFxufSk7XG5cbmV4cG9ydCBjb25zdCBFWFBPUlRfREFUQV9UWVBFX09QVElPTlMgPSBbXG4gIHtcbiAgICBpZDogRVhQT1JUX0RBVEFfVFlQRS5DU1YsXG4gICAgbGFiZWw6IEVYUE9SVF9EQVRBX1RZUEUuQ1NWLnRvTG93ZXJDYXNlKCksXG4gICAgYXZhaWxhYmxlOiB0cnVlXG4gIH1cbiAgLy8ge1xuICAvLyAgIGlkOiBFWFBPUlRfREFUQV9UWVBFLlNIQVBFRklMRSxcbiAgLy8gICBsYWJlbDogJ3NoYXBlZmlsZScsXG4gIC8vICAgYXZhaWxhYmxlOiBmYWxzZVxuICAvLyB9LFxuICAvLyB7XG4gIC8vICAgaWQ6IEVYUE9SVF9EQVRBX1RZUEUuSlNPTixcbiAgLy8gICBsYWJlbDogJ2pzb24nLFxuICAvLyAgIGF2YWlsYWJsZTogZmFsc2VcbiAgLy8gfSxcbiAgLy8ge1xuICAvLyAgIGlkOiBFWFBPUlRfREFUQV9UWVBFLkdFT0pTT04sXG4gIC8vICAgbGFiZWw6ICdnZW9qc29uJyxcbiAgLy8gICBhdmFpbGFibGU6IGZhbHNlXG4gIC8vIH0sXG4gIC8vIHtcbiAgLy8gICBpZDogRVhQT1JUX0RBVEFfVFlQRS5UT1BPSlNPTixcbiAgLy8gICBsYWJlbDogJ3RvcG9qc29uJyxcbiAgLy8gICBhdmFpbGFibGU6IGZhbHNlXG4gIC8vIH1cbl07XG5cbi8vIEV4cG9ydCBtYXAgdHlwZXNcbmV4cG9ydCBjb25zdCBFWFBPUlRfTUFQX0ZPUk1BVFMgPSBrZXlNaXJyb3Ioe1xuICBIVE1MOiBudWxsLFxuICBKU09OOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IEVYUE9SVF9IVE1MX01BUF9NT0RFUyA9IGtleU1pcnJvcih7XG4gIFJFQUQ6IG51bGwsXG4gIEVESVQ6IG51bGxcbn0pO1xuXG4vLyBFeHBvcnQgbWFwIG9wdGlvbnNcbmV4cG9ydCBjb25zdCBFWFBPUlRfTUFQX0ZPUk1BVF9PUFRJT05TID0gT2JqZWN0LmVudHJpZXMoRVhQT1JUX01BUF9GT1JNQVRTKS5tYXAoXG4gIChlbnRyeTogW3N0cmluZywgYW55XSkgPT4gKHtcbiAgICBpZDogZW50cnlbMF0sXG4gICAgbGFiZWw6IGVudHJ5WzFdLnRvTG93ZXJDYXNlKCksXG4gICAgYXZhaWxhYmxlOiB0cnVlXG4gIH0pXG4pO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SFRNTE1hcE1vZGVUaWxlVXJsKG1vZGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgaHR0cHM6Ly9kMWEzZjRzcGF6enJwNC5jbG91ZGZyb250Lm5ldC9rZXBsZXIuZ2wvZG9jdW1lbnRhdGlvbi9tYXAtJHttb2RlLnRvTG93ZXJDYXNlKCl9LW1vZGUucG5nYDtcbn1cblxuZXhwb3J0IGNvbnN0IEVYUE9SVF9IVE1MX01BUF9NT0RFX09QVElPTlMgPSBPYmplY3QuZW50cmllcyhFWFBPUlRfSFRNTF9NQVBfTU9ERVMpLm1hcChcbiAgKGVudHJ5OiBbc3RyaW5nLCBhbnldKSA9PiAoe1xuICAgIGlkOiBlbnRyeVswXSxcbiAgICBsYWJlbDogYG1vZGFsLmV4cG9ydE1hcC5odG1sLiR7ZW50cnlbMV0udG9Mb3dlckNhc2UoKX1gLFxuICAgIGF2YWlsYWJsZTogdHJ1ZSxcbiAgICB1cmw6IGdldEhUTUxNYXBNb2RlVGlsZVVybChlbnRyeVsxXSlcbiAgfSlcbik7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1VVSURfQ09VTlQgPSA2O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9OT1RJRklDQVRJT05fTUVTU0FHRSA9ICdNRVNTQUdFX05PVF9QUk9WSURFRCc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX05PVElGSUNBVElPTl9UWVBFUyA9IGtleU1pcnJvcih7XG4gIGluZm86IG51bGwsXG4gIGVycm9yOiBudWxsLFxuICB3YXJuaW5nOiBudWxsLFxuICBzdWNjZXNzOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTk9USUZJQ0FUSU9OX1RPUElDUyA9IGtleU1pcnJvcih7XG4gIGdsb2JhbDogbnVsbCxcbiAgZmlsZTogbnVsbFxufSk7XG5cbi8vIE1pbmltdW0gdGltZSBiZXR3ZWVuIGlkZW50aWNhbCBub3RpZmljYXRpb25zIGFib3V0IGRlY2suZ2wgZXJyb3JzXG5leHBvcnQgY29uc3QgVEhST1RUTEVfTk9USUZJQ0FUSU9OX1RJTUUgPSAzMzA7XG5cbi8vIEFuaW1hdGlvblxuZXhwb3J0IGNvbnN0IEJBU0VfU1BFRUQgPSA2MDA7XG5leHBvcnQgY29uc3QgRlBTID0gNjA7XG5cbi8qKlxuICogNCBBbmltYXRpb24gV2luZG93IFR5cGVzXG4gKiAxLiBmcmVlXG4gKiAgfC0+ICB8LT5cbiAqIEN1cnJlbnQgdGltZSBpcyBhIGZpeGVkIHJhbmdlLCBhbmltYXRpb24gY29udHJvbGxlciBjYWxscyBuZXh0IGFuaW1hdGlvbiBmcmFtZXMgY29udGludW91c2x5IHRvIGFuaW1hdGlvbiBhIG1vdmluZyB3aW5kb3dcbiAqIFRoZSBpbmNyZW1lbnQgaWQgYmFzZWQgb24gZG9tYWluIC8gQkFTRV9TUEVFRCAqIFNQRUVEXG4gKlxuICogMi4gaW5jcmVtZW50YWxcbiAqIHwgICAgfC0+XG4gKiBTYW1lIGFzIGZyZWUsIGN1cnJlbnQgdGltZSBpcyBhIGdyb3dpbmcgcmFuZ2UsIG9ubHkgdGhlIG1heCB2YWx1ZSBvZiByYW5nZSBpbmNyZW1lbnQgZHVyaW5nIGFuaW1hdGlvbi5cbiAqIFRoZSBpbmNyZW1lbnQgaXMgYWxzbyBiYXNlZCBvbiBkb21haW4gLyBCQVNFX1NQRUVEICogU1BFRURcbiAqXG4gKiAzLiBwb2ludFxuICogbyAtPiBvXG4gKiBDdXJyZW50IHRpbWUgaXMgYSBwb2ludCwgYW5pbWF0aW9uIGNvbnRyb2xsZXIgY2FsbHMgbmV4dCBhbmltYXRpb24gZnJhbWUgY29udGludW91c2x5IHRvIGFuaW1hdGlvbiBhIG1vdmluZyBwb2ludFxuICogVGhlIGluY3JlbWVudCBpcyBiYXNlZCBvbiBkb21haW4gLyBCQVNFX1NQRUVEICogU1BFRURcbiAqXG4gKiA0LiBpbnRlcnZhbFxuICogbyB+PiBvXG4gKiBDdXJyZW50IHRpbWUgaXMgYSBwb2ludC4gQW4gYXJyYXkgb2Ygc29ydGVkIHRpbWUgc3RlcHMgbmVlZCB0byBiZSBwcm92aWRlZC5cbiAqIGFuaW1hdGlvbiBjb250cm9sbGVyIGNhbGxzIG5leHQgYW5pbWF0aW9uIGF0IGEgaW50ZXJ2YWwgd2hlbiB0aGUgcG9pbnQganVtcHMgdG8gdGhlIG5leHQgc3RlcFxuICovXG5leHBvcnQgY29uc3QgQU5JTUFUSU9OX1dJTkRPVyA9IGtleU1pcnJvcih7XG4gIGZyZWU6IG51bGwsXG4gIGluY3JlbWVudGFsOiBudWxsLFxuICBwb2ludDogbnVsbCxcbiAgaW50ZXJ2YWw6IG51bGxcbn0pO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfVElNRV9GT1JNQVQgPSAnTU0vREQvWVkgSEg6bW06c3NhJztcbmV4cG9ydCBjb25zdCBTUEVFRF9DT05UUk9MX1JBTkdFOiBbbnVtYmVyLCBudW1iZXJdID0gWzAsIDEwXTtcbmV4cG9ydCBjb25zdCBTUEVFRF9DT05UUk9MX1NURVAgPSAwLjAwMTtcblxuLy8gR2VvY29kZXJcbmV4cG9ydCBjb25zdCBHRU9DT0RFUl9EQVRBU0VUX05BTUUgPSAnZ2VvY29kZXJfZGF0YXNldCc7XG5leHBvcnQgY29uc3QgR0VPQ09ERVJfTEFZRVJfSUQgPSAnZ2VvY29kZXJfbGF5ZXInO1xuZXhwb3J0IGNvbnN0IEdFT0NPREVSX0dFT19PRkZTRVQgPSAwLjA1O1xuZXhwb3J0IGNvbnN0IEdFT0NPREVSX0lDT05fQ09MT1I6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9IFsyNTUsIDAsIDBdO1xuLy8gQmFzZSBpY29uIHNpemUgYmVmb3JlIGFuY2hvciBub3JtYWxpemF0aW9uLiBUaGUgZ2VvY29kZXIgcGluIGljb24gaXMgYm90dG9tLWFuY2hvcmVkXG4vLyBhbmQgc2NhbGVkIHRvIGZpdCB0aGUgU2NhdHRlcnBsb3RMYXllciB1bml0IGNpcmNsZSAofjAuNXgpLCBzbyB0aGUgcmVuZGVyZWQgc2l6ZSBpc1xuLy8gY29tcGVuc2F0ZWQgaGVyZSAoODAgKiAyID0gMTYwKS5cbmV4cG9ydCBjb25zdCBHRU9DT0RFUl9JQ09OX1NJWkUgPSAxNjA7XG5cbi8vIEVkaXRvclxuZXhwb3J0IGNvbnN0IEVESVRPUl9MQVlFUl9JRCA9ICdrZXBsZXJfZWRpdG9yX2xheWVyJztcbmV4cG9ydCBjb25zdCBFRElUT1JfTEFZRVJfUElDS0lOR19SQURJVVMgPSA2O1xuZXhwb3J0IGNvbnN0IEVESVRPUl9NT0RFUyA9IHtcbiAgRFJBV19QT0xZR09OOiAnRFJBV19QT0xZR09OJyxcbiAgRFJBV19SRUNUQU5HTEU6ICdEUkFXX1JFQ1RBTkdMRScsXG4gIERSQVdfTElORVNUUklORzogJ0RSQVdfTElORVNUUklORycsXG4gIERSQVdfUE9JTlQ6ICdEUkFXX1BPSU5UJyxcbiAgRURJVDogJ0VESVRfVkVSVEVYJ1xufTtcblxuZXhwb3J0IGNvbnN0IEVESVRPUl9EUkFXX01PREVTOiBzdHJpbmdbXSA9IFtcbiAgRURJVE9SX01PREVTLkRSQVdfUE9MWUdPTixcbiAgRURJVE9SX01PREVTLkRSQVdfUkVDVEFOR0xFLFxuICBFRElUT1JfTU9ERVMuRFJBV19MSU5FU1RSSU5HLFxuICBFRElUT1JfTU9ERVMuRFJBV19QT0lOVFxuXTtcblxuZXhwb3J0IGNvbnN0IFBMT1RfVFlQRVMgPSBrZXlNaXJyb3Ioe1xuICBoaXN0b2dyYW06IG51bGwsXG4gIGxpbmVDaGFydDogbnVsbFxufSk7XG5cbi8vIEZpbHRlclxuZXhwb3J0IGNvbnN0IElOSVRfRklMVEVSX0lURU1TX0lOX0RST1BET1dOID0gMTAwO1xuXG4vLyBHUFUgRmlsdGVyaW5nXG4vKipcbiAqIE1heCBudW1iZXIgb2YgZmlsdGVyIHZhbHVlIGJ1ZmZlcnMgdGhhdCBkZWNrLmdsIHByb3ZpZGVzXG4gKi9cbmV4cG9ydCBjb25zdCBNQVhfR1BVX0ZJTFRFUlMgPSA0O1xuZXhwb3J0IGNvbnN0IE1BUF9USFVNQk5BSUxfRElNRU5TSU9OID0ge1xuICB3aWR0aDogMzAwLFxuICBoZWlnaHQ6IDIwMFxufTtcblxuZXhwb3J0IGNvbnN0IE1BUF9JTkZPX0NIQVJBQ1RFUiA9IHtcbiAgdGl0bGU6IDEwMCxcbiAgZGVzY3JpcHRpb246IDEwMFxufTtcblxuLy8gTG9hZCBkYXRhXG5leHBvcnQgY29uc3QgTE9BRElOR19NRVRIT0RTID0ga2V5TWlycm9yKHtcbiAgdXBsb2FkOiBudWxsLFxuICBzdG9yYWdlOiBudWxsLFxuICB0aWxlc2V0OiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfRkVBVFVSRV9GTEFHUyA9IHt9O1xuXG5leHBvcnQgY29uc3QgREFUQVNFVF9GT1JNQVRTID0ga2V5TWlycm9yKHtcbiAgcm93OiBudWxsLFxuICBnZW9qc29uOiBudWxsLFxuICBjc3Y6IG51bGwsXG4gIGtlcGxlcmdsOiBudWxsLFxuICBhcnJvdzogbnVsbCxcbiAgZHVja2RiOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IE1BUF9DT05UUk9MUyA9IGtleU1pcnJvcih7XG4gIHZpc2libGVMYXllcnM6IG51bGwsXG4gIG1hcExlZ2VuZDogbnVsbCxcbiAgdG9nZ2xlM2Q6IG51bGwsXG4gIHNwbGl0TWFwOiBudWxsLFxuICBtYXBEcmF3OiBudWxsLFxuICBtYXBMb2NhbGU6IG51bGwsXG4gIG1hcFRoZW1lOiBudWxsLFxuICBlZmZlY3Q6IG51bGwsXG4gIGFubm90YXRpb246IG51bGwsXG4gIGFpQXNzaXN0YW50OiBudWxsXG59KTtcblxuZXhwb3J0IGVudW0gTWFwVmlld01vZGUge1xuICBNT0RFXzJEID0gJ01PREVfMkQnLFxuICBNT0RFXzNEID0gJ01PREVfM0QnLFxuICBNT0RFX0dMT0JFID0gJ01PREVfR0xPQkUnXG59XG5cbi8qKlxuICogTWluaW11bSB6b29tIGxldmVsIGFsbG93ZWQgaW4gZ2xvYmUgbW9kZS4gTmVnYXRpdmUgdmFsdWVzIGxldCB0aGUgdXNlciB6b29tXG4gKiBvdXQgZnVydGhlciB0aGFuIHRoZSB3ZWItbWVyY2F0b3IgZGVmYXVsdCBvZiAwLCBzbyB0aGUgd2hvbGUgZ2xvYmUgY2FuIGJlXG4gKiBwdWxsZWQgYmFjayB0byBhcHBlYXIgc21hbGxlciBvbiBzY3JlZW4uXG4gKi9cbmV4cG9ydCBjb25zdCBHTE9CRV9NSU5fWk9PTSA9IDI7XG5cbi8qKlxuICogTWF4aW11bSB6b29tIGluIGdsb2JlIG1vZGUuXG4gKlxuICogVGhlIHByZXZpb3VzIFwiZW1wdHkgcmVjdGFuZ2xlc1wiIGF0IGhpZ2ggem9vbSB3ZXJlIGNhdXNlZCBieSB0aGUgdmVjdG9yIGJhc2VtYXBcbiAqIGxheWVyIGRlY2xhcmluZyBgbWF4Wm9vbTogMjNgIHdoaWxlIHRoZSByYXcgdGlsZSBlbmRwb2ludHMgb25seSBoYXZlIGRhdGEgdG9cbiAqIHoxNiAobWFwYm94LXN0cmVldHMtdjgpIC8gejE0IChDQVJUTykg4oCUIGRlY2sgdGhlbiByZXF1ZXN0ZWQgbm9uLWV4aXN0ZW50IHRpbGVzXG4gKiB0aGF0IDQwNC4gVGhhdCBpcyBmaXhlZCBpbiBgZ2V0R2xvYmVCYXNlTGF5ZXJzYCBieSBzZXR0aW5nIGBtYXhab29tYCB0byBlYWNoXG4gKiBzb3VyY2UncyB0cnVlIGRhdGEgbWF4IHNvIGRlY2sgb3Zlcnpvb21zIGluc3RlYWQuXG4gKlxuICogVGhlIHJlbWFpbmluZyBwcmFjdGljYWwgY2VpbGluZyBpcyBmbG9hdDMyIHByZWNpc2lvbjogZGVjaydzIGdsb2JlIHBsYWNlc1xuICogZ2VvbWV0cnkgaW4gY29tbW9uIHNwYWNlIG9uIGEgc3BoZXJlIG9mIHJhZGl1cyAyNTYgd2l0aCBubyBmcDY0L3JlbGF0aXZlLXRvLVxuICogY2VudGVyIHRyaWNrLCBzbyBiZXlvbmQgfnZpc3VhbC16b29tIDE2IChyb3VnaGx5IHRoaXMgbWFwU3RhdGUgem9vbSBtaW51c1xuICogYHpvb21BZGp1c3QobGF0KWAg4omIIDEuNjUgYXQgdGhlIGVxdWF0b3IpIGdlb21ldHJ5IHN0YXJ0cyB0byBqaXR0ZXIvZHJpZnQuXG4gKi9cbmV4cG9ydCBjb25zdCBHTE9CRV9NQVhfWk9PTSA9IDE2O1xuXG4vKipcbiAqIE1heGltdW0gYWJzb2x1dGUgY2VudGVyIGxhdGl0dWRlIGFsbG93ZWQgaW4gZ2xvYmUgbW9kZS4gQ29uc3RyYWlucyB0aGUgY2FtZXJhXG4gKiB0YXJnZXQgdG8gYSBiYW5kIGFyb3VuZCB0aGUgZXF1YXRvciBzbyB0aGUgdmlldyBjYW4ndCBiZSBjZW50ZXJlZCBvbiB0aGVcbiAqIHBvbGVzIChkZWNrLmdsJ3MgZGVmYXVsdCBjbGFtcHMgdG8gfjg1wrAsIHdoaWNoIGxldHMgdGhlIGNhbWVyYSBzdGFyZSBzdHJhaWdodFxuICogZG93biBhdCBhIHBvbGUpLiBBcHBsaWVzIHN5bW1ldHJpY2FsbHkgdG8gdGhlIG5vcnRoZXJuIGFuZCBzb3V0aGVybiBoZW1pc3BoZXJlLlxuICovXG5leHBvcnQgY29uc3QgR0xPQkVfTUFYX0xBVElUVURFID0gNzU7XG5cbmV4cG9ydCB0eXBlIEdsb2JlQ29uZmlnID0ge1xuICBhdG1vc3BoZXJlOiBib29sZWFuO1xuICAvKipcbiAgICogV2hlbiB0cnVlLCBkcmF3IGEgbGFyZ2Ugc3VuLWluZGVwZW5kZW50IHVuaWZvcm0gZ2xvdyBpbiBhZGRpdGlvbiB0byB0aGVcbiAgICogcmVhbGlzdGljIHNjYXR0ZXJpbmcgc2t5IGhhbG8uXG4gICAqL1xuICBodWdlSGFsbzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE11bHRpcGxpZXIgZm9yIGh1Z2UtaGFsbyBzaGVsbCB0aGlja25lc3MuIGAxYCBpcyB0aGUgYmFzZWxpbmUgKH4xNCUgYmV5b25kXG4gICAqIHRoZSBnbG9iZSk7IHRoZSBjb25maWd1cmVkIGRlZmF1bHQgaXMgMy41LlxuICAgKi9cbiAgaHVnZUhhbG9SYWRpdXM6IG51bWJlcjtcbiAgLyoqIE9wYWNpdHkgb2YgdGhlIGh1Z2UtaGFsbyBnbG93ICgw4oCTMSkuIERlZmF1bHQ6IDAuMi4gKi9cbiAgaHVnZUhhbG9PcGFjaXR5OiBudW1iZXI7XG4gIGF6aW11dGg6IGJvb2xlYW47XG4gIGF6aW11dGhBbmdsZTogbnVtYmVyO1xuICB0ZXJtaW5hdG9yOiBib29sZWFuO1xuICB0ZXJtaW5hdG9yT3BhY2l0eTogbnVtYmVyO1xuICBiYXNlbWFwOiBib29sZWFuO1xuICBsYWJlbHM6IGJvb2xlYW47XG4gIGxhYmVsc0NvbG9yOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4gIGFkbWluTGluZXM6IGJvb2xlYW47XG4gIGFkbWluTGluZXNDb2xvcjogW251bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICB3YXRlcjogYm9vbGVhbjtcbiAgd2F0ZXJDb2xvcjogW251bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICBzdXJmYWNlQ29sb3I6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgc3VyZmFjZTogYm9vbGVhbjtcbiAgYmFja2dyb3VuZENvbG9yOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4gIHN0YXJzOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgR2xvYmUgPSB7XG4gIGVuYWJsZWQ6IGJvb2xlYW47XG4gIGNvbmZpZzogR2xvYmVDb25maWc7XG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9HTE9CRV9DT05GSUc6IEdsb2JlQ29uZmlnID0ge1xuICBhdG1vc3BoZXJlOiB0cnVlLFxuICBodWdlSGFsbzogdHJ1ZSxcbiAgaHVnZUhhbG9SYWRpdXM6IDMuNSxcbiAgaHVnZUhhbG9PcGFjaXR5OiAwLjIsXG4gIGF6aW11dGg6IGZhbHNlLFxuICBhemltdXRoQW5nbGU6IDQ1LFxuICB0ZXJtaW5hdG9yOiB0cnVlLFxuICB0ZXJtaW5hdG9yT3BhY2l0eTogMC4zNSxcbiAgYmFzZW1hcDogdHJ1ZSxcbiAgbGFiZWxzOiBmYWxzZSxcbiAgbGFiZWxzQ29sb3I6IFsxMTQuNzUsIDExNC43NSwgMTE0Ljc1XSxcbiAgYWRtaW5MaW5lczogdHJ1ZSxcbiAgYWRtaW5MaW5lc0NvbG9yOiBbNDAsIDYzLCA5M10sXG4gIHdhdGVyOiB0cnVlLFxuICB3YXRlckNvbG9yOiBbMTcsIDM1LCA0OF0sXG4gIHN1cmZhY2U6IHRydWUsXG4gIHN1cmZhY2VDb2xvcjogWzksIDE2LCAyOV0sXG4gIC8vIENvbG9yIG9mIHRoZSBlbXB0eSBzcGFjZSByZW5kZXJlZCBhcm91bmQgdGhlIGdsb2JlIChkZWNrLmdsIGNsZWFyIGNvbG9yKS5cbiAgLy8gTWF0Y2hlcyB0aGUgcHJldmlvdXMgaGFyZGNvZGVkIGNsZWFyIGNvbG9yIFswLjAxNSwgMC4wMzUsIDAuMDY1XSBpbiAwLTEgc3BhY2UuXG4gIGJhY2tncm91bmRDb2xvcjogWzQsIDksIDE3XSxcbiAgLy8gU3RhcmZpZWxkIGJlaGluZCB0aGUgZ2xvYmUgaXMgb24gYnkgZGVmYXVsdCBpbiBnbG9iZSB2aWV3LlxuICBzdGFyczogdHJ1ZVxufTtcblxuZXhwb3J0IGNvbnN0IEdMT0JFX1NVUFBPUlRFRF9MQVlFUlM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge1xuICBwb2ludDogdHJ1ZSxcbiAgYXJjOiB0cnVlLFxuICBncmlkOiB0cnVlLFxuICBoZXhhZ29uOiB0cnVlLFxuICBnZW9qc29uOiB0cnVlLFxuICBjbHVzdGVyOiB0cnVlLFxuICBpY29uOiB0cnVlLFxuICBoZXhhZ29uSWQ6IHRydWUsXG4gICczRCc6IHRydWUsXG4gIHZlY3RvclRpbGU6IHRydWUsXG4gIGhleFRpbGU6IHRydWUsXG4gIGxpbmU6IHRydWUsXG4gIHRyaXA6IHRydWUsXG4gIHJhc3RlclRpbGU6IHRydWUsXG4gIGhlYXRtYXA6IHRydWUsXG4gIHMyOiBmYWxzZSxcbiAgdGlsZTNkOiBmYWxzZSxcbiAgLy8gRmxvdyBhcnJvd3MgYXJlIGZsYXQgcXVhZHMgaW4gY29tbW9uIHNwYWNlIChlcXVhdG9yaWFsIHBsYW5lKSBhbmQgY29sbGFwc2Ugd2hlblxuICAvLyB2aWV3ZWQgZWRnZS1vbiBvbiB0aGUgZ2xvYmUsIHNvIHRoZSBmbG93IGxheWVyIGlzIG5vdCBzdXBwb3J0ZWQgaW4gR2xvYmUgbW9kZS5cbiAgZmxvdzogZmFsc2Vcbn07XG5cbmV4cG9ydCBlbnVtIE1hcFNwbGl0TW9kZSB7XG4gIFNJTkdMRV9NQVAgPSAnU0lOR0xFX01BUCcsXG4gIERVQUxfTUFQID0gJ0RVQUxfTUFQJyxcbiAgU1dJUEVfQ09NUEFSRSA9ICdTV0lQRV9DT01QQVJFJ1xufVxuXG4vKipcbiAqIEEgbXVsdGlwbGllciBmb3Igc2NyZWVuLXNwYWNlIHdpZHRoL3NjYWxlIGZvciBBcmMsIExpbmUsIEljb24gYW5kIFRleHQgbGF5ZXJzLlxuICogUmVxdWlyZWQgaW4gb3JkZXIgdG8gbWFpbnRhaW4gdGhlIHNhbWUgYXBwZWFyYW5jZSBhZnRlciB1cGdyYWRpbmcgdG8gZGVjay5nbCB2OC41LlxuICogaHR0cHM6Ly9naXRodWIuY29tL3Zpc2dsL2RlY2suZ2wvYmxvYi9tYXN0ZXIvZG9jcy91cGdyYWRlLWd1aWRlLm1kXG4gKi9cbmV4cG9ydCBjb25zdCBQUk9KRUNURURfUElYRUxfU0laRV9NVUxUSVBMSUVSID0gMiAvIDM7XG5cbi8qKlxuICogTWF4aW11bSB2YWx1ZSBmb3IgdGV4dCBvdXRsaW5lIHdpZHRoXG4gKi9cbmV4cG9ydCBjb25zdCBURVhUX09VVExJTkVfTVVMVElQTElFUiA9IDU7XG5cbmV4cG9ydCBjb25zdCBkYXRhVGVzdElkczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgaW5mb0ljb246ICdpbmZvLWljb24nLFxuICB3YXJuaW5nSWNvbjogJ3dhcm5pbmctaWNvbicsXG4gIGVycm9ySWNvbjogJ2Vycm9yLWljb24nLFxuICBzdWNjZXNzSWNvbjogJ3N1Y2Nlc3MtaWNvbicsXG4gIGNoZWNrbWFya0ljb246ICdjaGVja21hcmstaWNvbicsXG4gIHNvcnRhYmxlTGF5ZXJJdGVtOiAnc29ydGFibGUtbGF5ZXItaXRlbScsXG4gIHN0YXRpY0xheWVySXRlbTogJ3N0YXRpYy1sYXllci1pdGVtJyxcbiAgbGF5ZXJUaXRsZUVkaXRvcjogJ2xheWVyX190aXRsZV9fZWRpdG9yJyxcbiAgcmVtb3ZlTGF5ZXJBY3Rpb246ICdyZW1vdmUtbGF5ZXItYWN0aW9uJyxcbiAgbGF5ZXJQYW5lbDogJ2xheWVyLXBhbmVsJyxcbiAgc29ydGFibGVFZmZlY3RJdGVtOiAnc29ydGFibGUtZWZmZWN0LWl0ZW0nLFxuICBzdGF0aWNFZmZlY3RJdGVtOiAnc3RhdGljLWVmZmVjdC1pdGVtJyxcbiAgcHJvdmlkZXJMb2FkaW5nOiAncHJvdmlkZXItbG9hZGluZycsXG4gIHByb3ZpZGVyTWFwSW5mb1BhbmVsOiAncHJvdmlkZXItbWFwLWluZm8tcGFuZWwnLFxuICBwcm92aWRlclNlbGVjdDogJ3Byb3ZpZGVyLXNlbGVjdCcsXG4gIGNsb3VkSGVhZGVyOiAnY2xvdWQtaGVhZGVyJyxcbiAgcHJvdmlkZXJTaGFyZU1hcDogJ3Byb3ZpZGVyLXNoYXJlLW1hcCdcbn07XG5cbi8vIEVmZmVjdHNcbmV4cG9ydCBjb25zdCBERUZBVUxUX1RJTUVaT05FID0gJ1VUQyc7XG5leHBvcnQgY29uc3QgREVGQVVMVF9QT1NUX1BST0NFU1NJTkdfRUZGRUNUX1RZUEUgPSAnaW5rJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTElHSFRfQ09MT1I6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9IFsyNTUsIDI1NSwgMjU1XTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0xJR0hUX0lOVEVOU0lUWSA9IDE7XG5leHBvcnQgY29uc3QgREVGQVVMVF9TSEFET1dfSU5URU5TSVRZID0gMC41O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfU0hBRE9XX0NPTE9SOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPSBbMCwgMCwgMF07XG5cbmV4cG9ydCBjb25zdCBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVF9USU1FX01PREVTID0ge1xuICBwaWNrOiAncGljaycgYXMgY29uc3QsXG4gIGN1cnJlbnQ6ICdjdXJyZW50JyBhcyBjb25zdCxcbiAgYW5pbWF0aW9uOiAnYW5pbWF0aW9uJyBhcyBjb25zdFxufTtcbmV4cG9ydCB0eXBlIExpZ2h0QW5kU2hhZG93RWZmZWN0VGltZU1vZGUgPSAncGljaycgfCAnY3VycmVudCcgfCAnYW5pbWF0aW9uJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX0xJR0hUX0FORF9TSEFET1dfUFJPUFM6IHtcbiAgdGltZXN0YW1wOiBudW1iZXI7XG4gIHRpbWVNb2RlOiBMaWdodEFuZFNoYWRvd0VmZmVjdFRpbWVNb2RlO1xuICBzaGFkb3dJbnRlbnNpdHk6IG51bWJlcjtcbiAgc2hhZG93Q29sb3I6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgc3VuTGlnaHRDb2xvcjogW251bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICBzdW5MaWdodEludGVuc2l0eTogbnVtYmVyO1xuICBhbWJpZW50TGlnaHRDb2xvcjogW251bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICBhbWJpZW50TGlnaHRJbnRlbnNpdHk6IG51bWJlcjtcbn0gPSB7XG4gIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgdGltZU1vZGU6IExJR0hUX0FORF9TSEFET1dfRUZGRUNUX1RJTUVfTU9ERVMucGljayBhcyBMaWdodEFuZFNoYWRvd0VmZmVjdFRpbWVNb2RlLFxuICBzaGFkb3dJbnRlbnNpdHk6IERFRkFVTFRfU0hBRE9XX0lOVEVOU0lUWSxcbiAgc2hhZG93Q29sb3I6IFsuLi5ERUZBVUxUX1NIQURPV19DT0xPUl0gYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICBzdW5MaWdodENvbG9yOiBbLi4uREVGQVVMVF9MSUdIVF9DT0xPUl0gYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICBzdW5MaWdodEludGVuc2l0eTogREVGQVVMVF9MSUdIVF9JTlRFTlNJVFksXG4gIGFtYmllbnRMaWdodENvbG9yOiBbLi4uREVGQVVMVF9MSUdIVF9DT0xPUl0gYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICBhbWJpZW50TGlnaHRJbnRlbnNpdHk6IERFRkFVTFRfTElHSFRfSU5URU5TSVRZXG59O1xuXG5leHBvcnQgY29uc3QgTElHSFRfQU5EX1NIQURPV19FRkZFQ1Q6IEVmZmVjdERlc2NyaXB0aW9uID0ge1xuICB0eXBlOiAnbGlnaHRBbmRTaGFkb3cnLFxuICBuYW1lOiAnTGlnaHQgJiBTaGFkb3cnLFxuICBkZXNjcmlwdGlvbjogJ2VmZmVjdERlc2NyaXB0aW9uLmxpZ2h0QW5kU2hhZG93JyxcbiAgcGFyYW1ldGVyczogW1xuICAgIHtuYW1lOiAndGltZXN0YW1wJywgbWluOiAwLCBtYXg6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSfSxcbiAgICB7bmFtZTogJ3NoYWRvd0ludGVuc2l0eScsIG1pbjogMCwgbWF4OiAxLCBkZWZhdWx0VmFsdWU6IERFRkFVTFRfU0hBRE9XX0lOVEVOU0lUWX0sXG4gICAge25hbWU6ICdzdW5MaWdodEludGVuc2l0eScsIG1pbjogMCwgbWF4OiA1LCBkZWZhdWx0VmFsdWU6IERFRkFVTFRfTElHSFRfSU5URU5TSVRZfSxcbiAgICB7bmFtZTogJ2FtYmllbnRMaWdodEludGVuc2l0eScsIG1pbjogMCwgbWF4OiA1LCBkZWZhdWx0VmFsdWU6IERFRkFVTFRfTElHSFRfSU5URU5TSVRZfSxcbiAgICB7bmFtZTogJ3NoYWRvd0NvbG9yJywgdHlwZTogJ2NvbG9yJywgbWluOiAwLCBtYXg6IDI1NSwgZGVmYXVsdFZhbHVlOiBERUZBVUxUX1NIQURPV19DT0xPUn0sXG4gICAge25hbWU6ICdzdW5MaWdodENvbG9yJywgdHlwZTogJ2NvbG9yJywgbWluOiAwLCBtYXg6IDI1NSwgZGVmYXVsdFZhbHVlOiBERUZBVUxUX0xJR0hUX0NPTE9SfSxcbiAgICB7bmFtZTogJ2FtYmllbnRMaWdodENvbG9yJywgdHlwZTogJ2NvbG9yJywgbWluOiAwLCBtYXg6IDI1NSwgZGVmYXVsdFZhbHVlOiBERUZBVUxUX0xJR0hUX0NPTE9SfVxuICBdXG59O1xuXG5leHBvcnQgY29uc3QgRElTVEFOQ0VfRk9HX1RZUEUgPSAnZGlzdGFuY2VGb2cnO1xuZXhwb3J0IGNvbnN0IFNVUkZBQ0VfRk9HX1RZUEUgPSAnc3VyZmFjZUZvZyc7XG5cbmV4cG9ydCBjb25zdCBQT1NUUFJPQ0VTU0lOR19FRkZFQ1RTOiB7W2tleTogc3RyaW5nXTogRWZmZWN0RGVzY3JpcHRpb259ID0ge1xuICBpbms6IHtcbiAgICB0eXBlOiAnaW5rJyxcbiAgICBuYW1lOiAnSW5rJyxcbiAgICBkZXNjcmlwdGlvbjogJ2VmZmVjdERlc2NyaXB0aW9uLmluaycsXG4gICAgcGFyYW1ldGVyczogW3tuYW1lOiAnc3RyZW5ndGgnLCBtaW46IDAsIG1heDogMX1dXG4gIH0sXG4gIGJyaWdodG5lc3NDb250cmFzdDoge1xuICAgIHR5cGU6ICdicmlnaHRuZXNzQ29udHJhc3QnLFxuICAgIG5hbWU6ICdCcmlnaHRuZXNzICYgQ29udHJhc3QnLFxuICAgIGRlc2NyaXB0aW9uOiAnZWZmZWN0RGVzY3JpcHRpb24uYnJpZ2h0bmVzc0NvbnRyYXN0JyxcbiAgICBwYXJhbWV0ZXJzOiBbXG4gICAgICB7bmFtZTogJ2JyaWdodG5lc3MnLCBtaW46IC0xLCBtYXg6IDF9LFxuICAgICAge25hbWU6ICdjb250cmFzdCcsIG1pbjogLTEsIG1heDogMX1cbiAgICBdXG4gIH0sXG4gIGh1ZVNhdHVyYXRpb246IHtcbiAgICB0eXBlOiAnaHVlU2F0dXJhdGlvbicsXG4gICAgbmFtZTogJ0h1ZSAmIFNhdHVyYXRpb24nLFxuICAgIGRlc2NyaXB0aW9uOiAnZWZmZWN0RGVzY3JpcHRpb24uaHVlU2F0dXJhdGlvbicsXG4gICAgcGFyYW1ldGVyczogW1xuICAgICAge25hbWU6ICdodWUnLCBtaW46IC0xLCBtYXg6IDF9LFxuICAgICAge25hbWU6ICdzYXR1cmF0aW9uJywgZGVmYXVsdFZhbHVlOiAwLjI1LCBtaW46IC0xLCBtYXg6IDF9XG4gICAgXVxuICB9LFxuICB2aWJyYW5jZToge1xuICAgIHR5cGU6ICd2aWJyYW5jZScsXG4gICAgbmFtZTogJ1ZpYnJhbmNlJyxcbiAgICBkZXNjcmlwdGlvbjogJ2VmZmVjdERlc2NyaXB0aW9uLnZpYnJhbmNlJyxcbiAgICBwYXJhbWV0ZXJzOiBbe25hbWU6ICdhbW91bnQnLCBkZWZhdWx0VmFsdWU6IDAuNSwgbWluOiAtMSwgbWF4OiAxfV1cbiAgfSxcbiAgc2VwaWE6IHtcbiAgICB0eXBlOiAnc2VwaWEnLFxuICAgIG5hbWU6ICdTZXBpYScsXG4gICAgZGVzY3JpcHRpb246ICdlZmZlY3REZXNjcmlwdGlvbi5zZXBpYScsXG4gICAgcGFyYW1ldGVyczogW3tuYW1lOiAnYW1vdW50JywgbWluOiAwLCBtYXg6IDF9XVxuICB9LFxuICBkb3RTY3JlZW46IHtcbiAgICB0eXBlOiAnZG90U2NyZWVuJyxcbiAgICBuYW1lOiAnRG90IFNjcmVlbicsXG4gICAgZGVzY3JpcHRpb246ICdlZmZlY3REZXNjcmlwdGlvbi5kb3RTY3JlZW4nLFxuICAgIHBhcmFtZXRlcnM6IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2FuZ2xlJyxcbiAgICAgICAgbWluOiAwLFxuICAgICAgICBtYXg6IE1hdGguUEkgLyAyXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnc2l6ZScsXG4gICAgICAgIG1pbjogMSxcbiAgICAgICAgbWF4OiAyMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2NlbnRlcicsXG4gICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgIGxhYmVsOiBbJ0NlbnRlciBYJywgJ0NlbnRlciBZJ10sXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogWzAuNSwgMC41XSxcbiAgICAgICAgbWluOiAwLFxuICAgICAgICBtYXg6IDFcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIGNvbG9ySGFsZnRvbmU6IHtcbiAgICB0eXBlOiAnY29sb3JIYWxmdG9uZScsXG4gICAgbmFtZTogJ0NvbG9yIEhhbGZ0b25lJyxcbiAgICBkZXNjcmlwdGlvbjogJ2VmZmVjdERlc2NyaXB0aW9uLmNvbG9ySGFsZnRvbmUnLFxuICAgIHBhcmFtZXRlcnM6IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2FuZ2xlJyxcbiAgICAgICAgbWluOiAwLFxuICAgICAgICBtYXg6IE1hdGguUEkgLyAyXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnc2l6ZScsXG4gICAgICAgIG1pbjogMSxcbiAgICAgICAgbWF4OiAyMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2NlbnRlcicsXG4gICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgIGxhYmVsOiBbJ0NlbnRlciBYJywgJ0NlbnRlciBZJ10sXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogWzAuNSwgMC41XSxcbiAgICAgICAgbWluOiAwLFxuICAgICAgICBtYXg6IDFcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIG5vaXNlOiB7XG4gICAgdHlwZTogJ25vaXNlJyxcbiAgICBuYW1lOiAnTm9pc2UnLFxuICAgIGRlc2NyaXB0aW9uOiAnZWZmZWN0RGVzY3JpcHRpb24ubm9pc2UnLFxuICAgIHBhcmFtZXRlcnM6IFt7bmFtZTogJ2Ftb3VudCcsIG1pbjogMCwgbWF4OiAxfV1cbiAgfSxcbiAgdHJpYW5nbGVCbHVyOiB7XG4gICAgdHlwZTogJ3RyaWFuZ2xlQmx1cicsXG4gICAgbmFtZTogJ0JsdXIgKFRyaWFuZ2xlKScsXG4gICAgZGVzY3JpcHRpb246ICdlZmZlY3REZXNjcmlwdGlvbi50cmlhbmdsZUJsdXInLFxuICAgIHBhcmFtZXRlcnM6IFt7bmFtZTogJ3JhZGl1cycsIG1pbjogMCwgbWF4OiAxMDB9XVxuICB9LFxuICB6b29tQmx1cjoge1xuICAgIHR5cGU6ICd6b29tQmx1cicsXG4gICAgbmFtZTogJ0JsdXIgKFpvb20pJyxcbiAgICBkZXNjcmlwdGlvbjogJ2VmZmVjdERlc2NyaXB0aW9uLnpvb21CbHVyJyxcbiAgICBwYXJhbWV0ZXJzOiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdzdHJlbmd0aCcsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogMC4wNSxcbiAgICAgICAgbWluOiAwLFxuICAgICAgICBtYXg6IDFcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdjZW50ZXInLFxuICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICBsYWJlbDogWydDZW50ZXIgWCcsICdDZW50ZXIgWSddLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IFswLjUsIDAuNV0sXG4gICAgICAgIG1pbjogMCxcbiAgICAgICAgbWF4OiAxXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB0aWx0U2hpZnQ6IHtcbiAgICB0eXBlOiAndGlsdFNoaWZ0JyxcbiAgICBuYW1lOiAnQmx1ciAoVGlsdCBTaGlmdCknLFxuICAgIGRlc2NyaXB0aW9uOiAnZWZmZWN0RGVzY3JpcHRpb24udGlsdFNoaWZ0JyxcbiAgICBwYXJhbWV0ZXJzOiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdibHVyUmFkaXVzJyxcbiAgICAgICAgbGFiZWw6ICdCbHVyJyxcbiAgICAgICAgbWluOiAwLFxuICAgICAgICBtYXg6IDUwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnZ3JhZGllbnRSYWRpdXMnLFxuICAgICAgICBsYWJlbDogJ0dyYWRpZW50JyxcbiAgICAgICAgbWluOiAwLFxuICAgICAgICBtYXg6IDQwMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3N0YXJ0JyxcbiAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgbGFiZWw6IFsnU3RhcnQnLCBmYWxzZV0sXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogWzAuMCwgMC4wXSxcbiAgICAgICAgbWluOiAwLFxuICAgICAgICBtYXg6IDFcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdlbmQnLFxuICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICBsYWJlbDogWydFbmQnLCBmYWxzZV0sXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogWzEsIDFdLFxuICAgICAgICBtaW46IDAsXG4gICAgICAgIG1heDogMVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAgZWRnZVdvcms6IHtcbiAgICB0eXBlOiAnZWRnZVdvcmsnLFxuICAgIG5hbWU6ICdFZGdlIHdvcmsnLFxuICAgIGRlc2NyaXB0aW9uOiAnZWZmZWN0RGVzY3JpcHRpb24uZWRnZVdvcmsnLFxuICAgIHBhcmFtZXRlcnM6IFt7bmFtZTogJ3JhZGl1cycsIG1pbjogMSwgbWF4OiA1MH1dXG4gIH0sXG4gIHZpZ25ldHRlOiB7XG4gICAgdHlwZTogJ3ZpZ25ldHRlJyxcbiAgICBuYW1lOiAnVmlnbmV0dGUnLFxuICAgIGRlc2NyaXB0aW9uOiAnZWZmZWN0RGVzY3JpcHRpb24udmlnbmV0dGUnLFxuICAgIHBhcmFtZXRlcnM6IFtcbiAgICAgIHtuYW1lOiAnYW1vdW50JywgbWluOiAwLCBtYXg6IDF9LFxuICAgICAge25hbWU6ICdyYWRpdXMnLCBtaW46IDAsIG1heDogMX1cbiAgICBdXG4gIH0sXG4gIG1hZ25pZnk6IHtcbiAgICB0eXBlOiAnbWFnbmlmeScsXG4gICAgbmFtZTogJ01hZ25pZnknLFxuICAgIGRlc2NyaXB0aW9uOiAnZWZmZWN0RGVzY3JpcHRpb24ubWFnbmlmeScsXG4gICAgcGFyYW1ldGVyczogW1xuICAgICAge1xuICAgICAgICBuYW1lOiAnc2NyZWVuWFknLFxuICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICBsYWJlbDogWydQb3NpdGlvbiBYJywgJ1Bvc2l0aW9uIFknXSxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBbMC41LCAwLjVdLFxuICAgICAgICBtaW46IDAsXG4gICAgICAgIG1heDogMVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3JhZGl1c1BpeGVscycsXG4gICAgICAgIGxhYmVsOiAnU2l6ZScsXG4gICAgICAgIG1pbjogMTAsXG4gICAgICAgIG1heDogNTAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnem9vbScsXG4gICAgICAgIG1pbjogMC41LFxuICAgICAgICBtYXg6IDUwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnYm9yZGVyV2lkdGhQaXhlbHMnLFxuICAgICAgICBsYWJlbDogJ0JvcmRlciBXaWR0aCcsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogMyxcbiAgICAgICAgbWluOiAwLFxuICAgICAgICBtYXg6IDUwXG4gICAgICB9XG4gICAgXVxuICB9LFxuICBoZXhhZ29uYWxQaXhlbGF0ZToge1xuICAgIHR5cGU6ICdoZXhhZ29uYWxQaXhlbGF0ZScsXG4gICAgbmFtZTogJ0hleGFnb25hbCBQaXhlbGF0ZScsXG4gICAgZGVzY3JpcHRpb246ICdlZmZlY3REZXNjcmlwdGlvbi5oZXhhZ29uYWxQaXhlbGF0ZScsXG4gICAgcGFyYW1ldGVyczogW3tuYW1lOiAnc2NhbGUnLCBkZWZhdWx0VmFsdWU6IDIwLCBtaW46IDEsIG1heDogNTB9XVxuICB9LFxuICBkaXN0YW5jZUZvZzoge1xuICAgIHR5cGU6IERJU1RBTkNFX0ZPR19UWVBFLFxuICAgIG5hbWU6ICdEaXN0YW5jZSBGb2cnLFxuICAgIGRlc2NyaXB0aW9uOiAnZWZmZWN0RGVzY3JpcHRpb24uZGlzdGFuY2VGb2cnLFxuICAgIHBhcmFtZXRlcnM6IFtcbiAgICAgIHtuYW1lOiAnZGVuc2l0eScsIGRlZmF1bHRWYWx1ZTogMC41LCBtaW46IDAsIG1heDogMX0sXG4gICAgICB7bmFtZTogJ2ZvZ1N0YXJ0JywgbGFiZWw6ICdTdGFydCcsIGRlZmF1bHRWYWx1ZTogMC4zLCBtaW46IDAsIG1heDogMX0sXG4gICAgICB7bmFtZTogJ2ZvZ1JhbmdlJywgbGFiZWw6ICdSYW5nZScsIGRlZmF1bHRWYWx1ZTogMC41LCBtaW46IDAuMDEsIG1heDogMX0sXG4gICAgICB7bmFtZTogJ2ZvZ0NvbG9yJywgdHlwZTogJ2NvbG9yJywgbWluOiAwLCBtYXg6IDI1NSwgZGVmYXVsdFZhbHVlOiBbMjE3LCAyMjIsIDIzMF19XG4gICAgXVxuICB9LFxuICBzdXJmYWNlRm9nOiB7XG4gICAgdHlwZTogU1VSRkFDRV9GT0dfVFlQRSxcbiAgICBuYW1lOiAnU3VyZmFjZSBGb2cnLFxuICAgIGRlc2NyaXB0aW9uOiAnZWZmZWN0RGVzY3JpcHRpb24uc3VyZmFjZUZvZycsXG4gICAgcGFyYW1ldGVyczogW1xuICAgICAge25hbWU6ICdkZW5zaXR5JywgZGVmYXVsdFZhbHVlOiAwLjYsIG1pbjogMCwgbWF4OiAxfSxcbiAgICAgIHtuYW1lOiAnaGVpZ2h0JywgbGFiZWw6ICdFbGV2YXRpb24gKG0pJywgZGVmYXVsdFZhbHVlOiA1MCwgbWluOiAtMjAwLCBtYXg6IDYwMDB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnYW5pbWF0ZUhlaWdodCcsXG4gICAgICAgIHR5cGU6ICdjaGVja2JveCcsXG4gICAgICAgIGxhYmVsOiAnQW5pbWF0ZSBFbGV2YXRpb24nLFxuICAgICAgICB0b29sdGlwOlxuICAgICAgICAgICdBbmltYXRlcyBlbGV2YXRpb24gZnJvbSBzdGFydCB0byBlbmQgdmFsdWUgZHVyaW5nIHZpZGVvIGV4cG9ydCBwcmV2aWV3IGFuZCByZWNvcmRpbmcuJyxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICAgICAgbWluOiAwLFxuICAgICAgICBtYXg6IDFcbiAgICAgIH0sXG4gICAgICB7bmFtZTogJ2hlaWdodEVuZCcsIGxhYmVsOiAnRW5kIEVsZXZhdGlvbiAobSknLCBkZWZhdWx0VmFsdWU6IDEwMCwgbWluOiAtMjAwLCBtYXg6IDYwMDB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnbGluZWFyRWFzaW5nJyxcbiAgICAgICAgdHlwZTogJ2NoZWNrYm94JyxcbiAgICAgICAgbGFiZWw6ICdMaW5lYXIgRWFzaW5nJyxcbiAgICAgICAgdG9vbHRpcDpcbiAgICAgICAgICAnVXNlcyBjb25zdGFudCBzcGVlZCBpbnN0ZWFkIG9mIHNtb290aCBlYXNlLWluIC8gZWFzZS1vdXQgZHVyaW5nIGVsZXZhdGlvbiBhbmltYXRpb24uJyxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICAgICAgbWluOiAwLFxuICAgICAgICBtYXg6IDFcbiAgICAgIH0sXG4gICAgICB7bmFtZTogJ3RoaWNrbmVzcycsIGxhYmVsOiAnVHJhbnNpdGlvbiAobSknLCBkZWZhdWx0VmFsdWU6IDUwLCBtaW46IDAsIG1heDogMTAwMH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdmb2dDb2xvcicsXG4gICAgICAgIHR5cGU6ICdjb2xvcicsXG4gICAgICAgIGxhYmVsOiAnRm9nIENvbG9yJyxcbiAgICAgICAgbWluOiAwLFxuICAgICAgICBtYXg6IDI1NSxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBbMjMwLCAyMzUsIDI0Ml1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdwYXR0ZXJuJyxcbiAgICAgICAgdHlwZTogJ2NoZWNrYm94JyxcbiAgICAgICAgbGFiZWw6ICdQYXR0ZXJuJyxcbiAgICAgICAgdG9vbHRpcDogJ0FkZHMgYSBub2lzZSBwYXR0ZXJuIHRvIHRoZSBmb2cgZm9yIGEgbW9yZSBuYXR1cmFsLCB2b2x1bWV0cmljIGxvb2suJyxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICAgICAgbWluOiAwLFxuICAgICAgICBtYXg6IDFcbiAgICAgIH1cbiAgICBdXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBFRkZFQ1RfREVTQ1JJUFRJT05TOiBFZmZlY3REZXNjcmlwdGlvbltdID0gW1xuICBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCxcbiAgLi4uT2JqZWN0LmtleXMoUE9TVFBST0NFU1NJTkdfRUZGRUNUUykubWFwKGtleU5hbWUgPT4gUE9TVFBST0NFU1NJTkdfRUZGRUNUU1trZXlOYW1lXSlcbl07XG5cbmV4cG9ydCB0eXBlIEVmZmVjdFR5cGUgPVxuICB8ICdpbmsnXG4gIHwgJ2JyaWdodG5lc3NDb250cmFzdCdcbiAgfCAnaHVlU2F0dXJhdGlvbidcbiAgfCAndmlicmFuY2UnXG4gIHwgJ3NlcGlhJ1xuICB8ICdkb3RTY3JlZW4nXG4gIHwgJ2NvbG9ySGFsZnRvbmUnXG4gIHwgJ25vaXNlJ1xuICB8ICd0cmlhbmdsZUJsdXInXG4gIHwgJ3pvb21CbHVyJ1xuICB8ICd0aWx0U2hpZnQnXG4gIHwgJ2VkZ2VXb3JrJ1xuICB8ICd2aWduZXR0ZSdcbiAgfCAnbWFnbmlmeSdcbiAgfCAnaGV4YWdvbmFsUGl4ZWxhdGUnXG4gIHwgJ2Rpc3RhbmNlRm9nJ1xuICB8ICdzdXJmYWNlRm9nJ1xuICB8ICdsaWdodEFuZFNoYWRvdyc7XG5cbmV4cG9ydCBjb25zdCBTWU5DX1RJTUVMSU5FX01PREVTOiBSZWNvcmQ8c3RyaW5nLCBTeW5jVGltZWxpbmVNb2RlPiA9IHtcbiAgc3RhcnQ6IDAsXG4gIGVuZDogMVxufTtcblxuZXhwb3J0IGNvbnN0IEdFT0FSUk9XX01FVEFEQVRBX0tFWSA9ICdBUlJPVzpleHRlbnNpb246bmFtZSc7XG5cbi8qKlxuICogRW51bSBob2xkaW5nIEdlb0Fycm93IGV4dGVuc2lvbiB0eXBlIG5hbWVzXG4gKi9cbmV4cG9ydCBlbnVtIEdFT0FSUk9XX0VYVEVOU0lPTlMge1xuICBQT0lOVCA9ICdnZW9hcnJvdy5wb2ludCcsXG4gIExJTkVTVFJJTkcgPSAnZ2VvYXJyb3cubGluZXN0cmluZycsXG4gIFBPTFlHT04gPSAnZ2VvYXJyb3cucG9seWdvbicsXG4gIE1VTFRJUE9JTlQgPSAnZ2VvYXJyb3cubXVsdGlwb2ludCcsXG4gIE1VTFRJTElORVNUUklORyA9ICdnZW9hcnJvdy5tdWx0aWxpbmVzdHJpbmcnLFxuICBNVUxUSVBPTFlHT04gPSAnZ2VvYXJyb3cubXVsdGlwb2x5Z29uJyxcbiAgV0tCID0gJ2dlb2Fycm93LndrYidcbn1cblxuZXhwb3J0IGNvbnN0IExPQURFUlNfQ0ROX1ZFUlNJT04gPSAnNC4zLjInO1xuZXhwb3J0IGNvbnN0IExPQURFUlNfQ0ROX1VSTCA9ICdodHRwczovL3VucGtnLmNvbS9AbG9hZGVycy5nbCc7XG5cbmV4cG9ydCBjb25zdCBnZXRMb2FkZXJPcHRpb25zID0gKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIG12dDoge1xuICAgICAgd29ya2VyVXJsOiBgJHtMT0FERVJTX0NETl9VUkx9L212dEAke0xPQURFUlNfQ0ROX1ZFUlNJT059L2Rpc3QvbXZ0LXdvcmtlci5qc2BcbiAgICB9LFxuICAgICdxdWFudGl6ZWQtbWVzaCc6IHtcbiAgICAgIHdvcmtlclVybDogYCR7TE9BREVSU19DRE5fVVJMfS90ZXJyYWluQCR7TE9BREVSU19DRE5fVkVSU0lPTn0vZGlzdC9xdWFudGl6ZWQtbWVzaC13b3JrZXIuanNgXG4gICAgfSxcbiAgICBucHk6IHtcbiAgICAgIHdvcmtlclVybDogYCR7TE9BREVSU19DRE5fVVJMfS90ZXh0dXJlc0Ake0xPQURFUlNfQ0ROX1ZFUlNJT059L2Rpc3QvbnB5LXdvcmtlci5qc2BcbiAgICB9XG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgQ1VTVE9NX1NDRU5FR1JBUEhfTU9ERUxfSUQgPSAnY3VzdG9tJztcbmNvbnN0IE1PREVMU19CQVNFX1VSTCA9XG4gICdodHRwczovL3N0dWRpby1wdWJsaWMtZGF0YS5mb3Vyc3F1YXJlLmNvbS9zdGF0aWNzL2tlcGxlcmdsLzNkLW1vZGVscy4yMDIyLTA2LTEzJztcblxuZXhwb3J0IGNvbnN0IFRSSVBfTEFZRVJfU0NFTkVHUkFQSF9NT0RFTFM6IHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgaWNvbjogYW55O1xuICB1cmw6IHN0cmluZyB8IG51bGw7XG4gIGFuZ2xlczogW251bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICBzY2FsZTogbnVtYmVyO1xufVtdID0gW1xuICB7XG4gICAgaWQ6ICdhaXJwbGFuZScsXG4gICAgbGFiZWw6ICdBaXJwbGFuZScsXG4gICAgaWNvbjogbnVsbCxcbiAgICB1cmw6IGAke01PREVMU19CQVNFX1VSTH0vUGxhbmUuZ2xiYCxcbiAgICBhbmdsZXM6IFswLCAwLCAwXSxcbiAgICBzY2FsZTogMS4wXG4gIH0sXG4gIHtcbiAgICBpZDogJ2JvZWluZzc3NycsXG4gICAgbGFiZWw6ICdBaXJsaW5lcicsXG4gICAgaWNvbjogbnVsbCxcbiAgICB1cmw6IGAke01PREVMU19CQVNFX1VSTH0vQWlybGluZXIuZ2xiYCxcbiAgICBhbmdsZXM6IFswLCAwLCAwXSxcbiAgICBzY2FsZTogMS4wXG4gIH0sXG4gIHtcbiAgICBpZDogJ3ViZXItZXZ0b2wnLFxuICAgIGxhYmVsOiAnVlRPTCcsXG4gICAgaWNvbjogbnVsbCxcbiAgICB1cmw6IGAke01PREVMU19CQVNFX1VSTH0vZXZ0b2wuZ2xiYCxcbiAgICBhbmdsZXM6IFswLCAwLCAwXSxcbiAgICBzY2FsZTogMS4wXG4gIH0sXG4gIHtcbiAgICBpZDogJ2hhbmctZ2xpZGVyJyxcbiAgICBsYWJlbDogJ0dsaWRlcicsXG4gICAgaWNvbjogbnVsbCxcbiAgICB1cmw6IGAke01PREVMU19CQVNFX1VSTH0vSGFuZ2dsaWRlci5nbGJgLFxuICAgIGFuZ2xlczogWzAsIDAsIDBdLFxuICAgIHNjYWxlOiAxLjBcbiAgfSxcbiAge1xuICAgIGlkOiAnaGVsaWNvcHRlcicsXG4gICAgbGFiZWw6ICdIZWxpY29wdGVyJyxcbiAgICBpY29uOiBudWxsLFxuICAgIHVybDogYCR7TU9ERUxTX0JBU0VfVVJMfS9IZWxpY29wdGVyLmdsYmAsXG4gICAgYW5nbGVzOiBbMCwgMCwgMF0sXG4gICAgc2NhbGU6IDEuMFxuICB9LFxuICB7XG4gICAgaWQ6ICdiaWN5Y2xlJyxcbiAgICBsYWJlbDogJ0JpY3ljbGUnLFxuICAgIGljb246IG51bGwsXG4gICAgdXJsOiBgJHtNT0RFTFNfQkFTRV9VUkx9L0JpY3ljbGUuZ2xiYCxcbiAgICBhbmdsZXM6IFswLCAwLCAwXSxcbiAgICBzY2FsZTogMS4wXG4gIH0sXG4gIHtcbiAgICBpZDogJ3Njb290ZXInLFxuICAgIGxhYmVsOiAnU2Nvb3RlcicsXG4gICAgaWNvbjogbnVsbCxcbiAgICB1cmw6IGAke01PREVMU19CQVNFX1VSTH0vU2Nvb3Rlci5nbGJgLFxuICAgIGFuZ2xlczogWzAsIDAsIDBdLFxuICAgIHNjYWxlOiAxLjBcbiAgfSxcbiAge1xuICAgIGlkOiAnY2FyJyxcbiAgICBsYWJlbDogJ0NhcicsXG4gICAgaWNvbjogbnVsbCxcbiAgICB1cmw6IGAke01PREVMU19CQVNFX1VSTH0vQ2FyLmdsYmAsXG4gICAgYW5nbGVzOiBbMCwgMCwgMF0sXG4gICAgc2NhbGU6IDEuMFxuICB9LFxuICB7XG4gICAgaWQ6ICd0cnVjaycsXG4gICAgbGFiZWw6ICdUcnVjaycsXG4gICAgaWNvbjogbnVsbCxcbiAgICB1cmw6IGAke01PREVMU19CQVNFX1VSTH0vVHJ1Y2suZ2xiYCxcbiAgICBhbmdsZXM6IFswLCAwLCAwXSxcbiAgICBzY2FsZTogMS4wXG4gIH0sXG4gIHtcbiAgICBpZDogJ3NlbWl0cnVjaycsXG4gICAgbGFiZWw6ICdTZW1pdHJ1Y2snLFxuICAgIGljb246IG51bGwsXG4gICAgdXJsOiBgJHtNT0RFTFNfQkFTRV9VUkx9L1NlbWl0cnVjay5nbGJgLFxuICAgIGFuZ2xlczogWzAsIDAsIDBdLFxuICAgIHNjYWxlOiAxLjBcbiAgfSxcbiAge1xuICAgIGlkOiAnY2FyZ29zaGlwJyxcbiAgICBsYWJlbDogJ0Nhcmdvc2hpcCcsXG4gICAgaWNvbjogbnVsbCxcbiAgICB1cmw6IGAke01PREVMU19CQVNFX1VSTH0vQ2FyZ29zaGlwLmdsYmAsXG4gICAgYW5nbGVzOiBbMCwgMCwgMF0sXG4gICAgc2NhbGU6IDEuMFxuICB9LFxuICB7XG4gICAgaWQ6IENVU1RPTV9TQ0VORUdSQVBIX01PREVMX0lELFxuICAgIGxhYmVsOiAnQ3VzdG9tJyxcbiAgICBpY29uOiBudWxsLFxuICAgIHVybDogbnVsbCxcbiAgICBhbmdsZXM6IFswLCAwLCAwXSxcbiAgICBzY2FsZTogMS4wXG4gIH1cbl07XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7O0FBRUEs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