@kepler.gl/reducers 3.3.0-alpha.6 → 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.
- package/dist/cjs/combined-updaters.js +2 -2
- package/dist/cjs/map-state-updaters.js +8 -4
- package/dist/cjs/ui-state-updaters.js +40 -11
- package/dist/cjs/ui-state.js +2 -2
- package/dist/cjs/vis-state-updaters.js +338 -47
- package/dist/cjs/vis-state.js +2 -2
- package/dist/combined-updaters.d.ts +1 -1
- package/dist/esm/combined-updaters.js +2 -2
- package/dist/esm/map-state-updaters.js +8 -4
- package/dist/esm/ui-state-updaters.js +40 -11
- package/dist/esm/ui-state.js +2 -2
- package/dist/esm/vis-state-updaters.js +334 -49
- package/dist/esm/vis-state.js +2 -2
- package/dist/ui-state-updaters.d.ts +15 -1
- package/dist/vis-state-updaters.d.ts +27 -0
- package/package.json +18 -18
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
|
|
1
2
|
import _toArray from "@babel/runtime/helpers/esm/toArray";
|
|
2
3
|
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
3
4
|
import _typeof from "@babel/runtime/helpers/esm/typeof";
|
|
@@ -6,6 +7,7 @@ import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutPr
|
|
|
6
7
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
7
8
|
var _excluded = ["dataId"],
|
|
8
9
|
_excluded2 = ["info"];
|
|
10
|
+
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
9
11
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
10
12
|
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
11
13
|
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
@@ -30,10 +32,10 @@ import Task, { disableStackCapturing, withTask } from 'react-palm/tasks';
|
|
|
30
32
|
// Tasks
|
|
31
33
|
import { DELAY_TASK, ACTION_TASK, LOAD_FILE_TASK, PROCESS_FILE_DATA, UNWRAP_TASK } from '@kepler.gl/tasks';
|
|
32
34
|
// Actions
|
|
33
|
-
import { addNotification, applyLayerConfig, createNewDatasetSuccess, layerConfigChange, layerTypeChange, layerVisConfigChange, layerVisualChannelConfigChange, loadFileStepSuccess, loadFilesErr, loadFilesSuccess, loadNextFile, nextFileBatch, setFilter, processFileContent, fitBounds as fitMapBounds, toggleLayerForMap, applyFilterConfig } from '@kepler.gl/actions';
|
|
35
|
+
import { addNotification, applyLayerConfig, createNewDatasetSuccess, layerConfigChange, layerTypeChange, layerVisConfigChange, layerVisualChannelConfigChange, loadFileStepSuccess, loadFilesErr, loadFilesSuccess, loadNextFile, nextFileBatch, setFilter, processFileContent, fitBounds as fitMapBounds, toggleLayerForMap, applyFilterConfig, loadColumnStatsSuccess, loadColumnStatsError } from '@kepler.gl/actions';
|
|
34
36
|
|
|
35
37
|
// Utils
|
|
36
|
-
import { FILTER_UPDATER_PROPS, addNewLayersToSplitMap, snapToMarks, applyFilterFieldName, applyFiltersToDatasets, arrayInsert, computeSplitMapLayers, adjustValueToFilterDomain, errorNotification, featureToFilterValue, filterDatasetCPU, generatePolygonFilter, getDefaultFilter, getFilterIdInFeature, getTimeWidgetTitleFormatter, isInRange, isObject, isPlainObject, isRgbColor, parseFieldValue, removeLayerFromSplitMaps, set, updateFilterPlot, removeFilterPlot, isLayerAnimatable, isSideFilter, getApplicationConfig } from '@kepler.gl/utils';
|
|
38
|
+
import { FILTER_UPDATER_PROPS, addNewLayersToSplitMap, snapToMarks, applyFilterFieldName, applyFiltersToDatasets, arrayInsert, computeSplitMapLayers, adjustValueToFilterDomain, errorNotification, editorFeaturesToFeatureCollection, mergeUserFeatureProperties, toSketchFeature, featureToFilterValue, filterDatasetCPU, generatePolygonFilter, getDefaultFilter, getFilterIdInFeature, getTimeWidgetTitleFormatter, isInRange, isObject, isPlainObject, isRgbColor, parseFieldValue, removeLayerFromSplitMaps, set, updateFilterPlot, removeFilterPlot, isLayerAnimatable, isSideFilter, getApplicationConfig } from '@kepler.gl/utils';
|
|
37
39
|
import { generateHashId, toArray, arrayMove } from '@kepler.gl/common-utils';
|
|
38
40
|
// Mergers
|
|
39
41
|
import { ANIMATION_WINDOW, BASE_SPEED, COMPARE_TYPES, DEFAULT_TEXT_LABEL, EDITOR_MODES, FILTER_TYPES, FILTER_VIEW_TYPES, FPS, LIGHT_AND_SHADOW_EFFECT, DISTANCE_FOG_TYPE, SURFACE_FOG_TYPE, MAX_DEFAULT_TOOLTIPS, PLOT_TYPES, SORT_ORDER, SYNC_TIMELINE_MODES, CHANNEL_SCALES, SCALE_TYPES, INITIAL_ANNOTATION_KIND, INITIAL_ANNOTATION_ANGLE, INITIAL_ANNOTATION_ARM_LENGTH, INITIAL_ANNOTATION_TEXT_WIDTH, INITIAL_ANNOTATION_TEXT_HEIGHT, INITIAL_ANNOTATION_LINE_WIDTH, INITIAL_ANNOTATION_LINE_COLOR, AnnotationKind } from '@kepler.gl/constants';
|
|
@@ -42,12 +44,13 @@ import { apply_, compose_, filterOutById, merge_, payload_, pick_, removeElement
|
|
|
42
44
|
import { isValidMerger, mergeStateFromMergers } from './merger-handler';
|
|
43
45
|
import { VIS_STATE_MERGERS, createLayerFromConfig, parseLayerConfig, serializeFilter, serializeLayer, serializeVisState, validateLayerWithData } from './vis-state-merger';
|
|
44
46
|
import KeplerGLSchema from '@kepler.gl/schemas';
|
|
47
|
+
import { processGeojson } from '@kepler.gl/processors';
|
|
45
48
|
import { assignGpuChannel, copyTableAndUpdate, createNewDataEntry, pinTableColumns, setFilterGpuMode, sortDatasetByColumn } from '@kepler.gl/table';
|
|
46
49
|
import { findFieldsToShow } from './interaction-utils';
|
|
47
50
|
import { calculateLayerData, findDefaultLayer, getLayerOrderFromLayers, mergeLayerVisConfigForNewDatasets, getNewLayerGroup, addLayerOrGroupToLayerOrder, removeElementFromLayerOrder, getLayerGroupFromLayerOrder, findParentGroupForLayer, getIndexFromLayerEntryId, updateLayerGroupInLayerOrder, getFlatLayerOrder, replaceLayerEntryInLayerOrder } from './layer-utils';
|
|
48
51
|
import { getPropValueToMerger, hasPropsToMerge } from './merger-handler';
|
|
49
52
|
import { mergeDatasetsByOrder } from './vis-state-merger';
|
|
50
|
-
import { fixEffectOrder, getAnimatableVisibleLayers, getIntervalBasedAnimationLayers, mergeTimeDomains, adjustValueToAnimationWindow, updateTimeFilterPlotType, getDefaultTimeFormat, LayerToFilterTimeInterval, TIME_INTERVALS_ORDERED, mergeFilterDomain, initCustomPaletteByCustomScale } from '@kepler.gl/utils';
|
|
53
|
+
import { fixEffectOrder, getAnimatableVisibleLayers, getIntervalBasedAnimationLayers, mergeTimeDomains, adjustValueToAnimationWindow, updateTimeFilterPlotType, getDefaultTimeFormat, LayerToFilterTimeInterval, TIME_INTERVALS_ORDERED, mergeFilterDomain, initCustomPaletteByCustomScale, collectColumnValues, getColumnStatistics } from '@kepler.gl/utils';
|
|
51
54
|
import { createEffect } from '@kepler.gl/effects';
|
|
52
55
|
import { findMapBounds } from './data-utils';
|
|
53
56
|
|
|
@@ -2725,8 +2728,9 @@ function postMergeUpdater(mergedState, postMergerPayload) {
|
|
|
2725
2728
|
if (newLayers.length && (options || {}).centerMap) {
|
|
2726
2729
|
var bounds = findMapBounds(newLayers);
|
|
2727
2730
|
if (bounds) {
|
|
2731
|
+
var padding = options === null || options === void 0 ? void 0 : options.padding;
|
|
2728
2732
|
var fitBoundsTask = ACTION_TASK_FIT_BOUNDS().map(function () {
|
|
2729
|
-
return fitMapBounds(bounds);
|
|
2733
|
+
return fitMapBounds(bounds, padding);
|
|
2730
2734
|
});
|
|
2731
2735
|
updatedState = withTask(updatedState, fitBoundsTask);
|
|
2732
2736
|
}
|
|
@@ -3223,6 +3227,10 @@ export function updateAnimationDomain(state) {
|
|
|
3223
3227
|
*/
|
|
3224
3228
|
export var setEditorModeUpdater = function setEditorModeUpdater(state, _ref28) {
|
|
3225
3229
|
var mode = _ref28.mode;
|
|
3230
|
+
var sketchesEnabled = getApplicationConfig().enableDrawOnMapSketches;
|
|
3231
|
+
if (!sketchesEnabled && (mode === EDITOR_MODES.DRAW_POINT || mode === EDITOR_MODES.DRAW_LINESTRING)) {
|
|
3232
|
+
return state;
|
|
3233
|
+
}
|
|
3226
3234
|
return _objectSpread(_objectSpread({}, state), {}, {
|
|
3227
3235
|
editor: _objectSpread(_objectSpread({}, state.editor), {}, {
|
|
3228
3236
|
mode: mode,
|
|
@@ -3282,14 +3290,81 @@ export function setFeaturesUpdater(state, _ref29) {
|
|
|
3282
3290
|
}
|
|
3283
3291
|
return newState;
|
|
3284
3292
|
}
|
|
3293
|
+
function findEditorFeature(state, feature) {
|
|
3294
|
+
var _state$editor$selecte;
|
|
3295
|
+
if (!(feature !== null && feature !== void 0 && feature.id)) {
|
|
3296
|
+
return feature || null;
|
|
3297
|
+
}
|
|
3298
|
+
if (((_state$editor$selecte = state.editor.selectedFeature) === null || _state$editor$selecte === void 0 ? void 0 : _state$editor$selecte.id) === feature.id) {
|
|
3299
|
+
return state.editor.selectedFeature;
|
|
3300
|
+
}
|
|
3301
|
+
var fromEditor = state.editor.features.find(function (item) {
|
|
3302
|
+
return item.id === feature.id;
|
|
3303
|
+
});
|
|
3304
|
+
if (fromEditor) {
|
|
3305
|
+
return fromEditor;
|
|
3306
|
+
}
|
|
3307
|
+
var filterId = getFilterIdInFeature(feature);
|
|
3308
|
+
if (filterId) {
|
|
3309
|
+
var filter = state.filters.find(function (item) {
|
|
3310
|
+
return item.id === filterId;
|
|
3311
|
+
});
|
|
3312
|
+
if (filter !== null && filter !== void 0 && filter.value) {
|
|
3313
|
+
return filter.value;
|
|
3314
|
+
}
|
|
3315
|
+
}
|
|
3316
|
+
return feature;
|
|
3317
|
+
}
|
|
3318
|
+
|
|
3319
|
+
/**
|
|
3320
|
+
* Set user-facing GeoJSON properties on a sketch or polygon-filter feature.
|
|
3321
|
+
* @memberof visStateUpdaters
|
|
3322
|
+
*/
|
|
3323
|
+
export function setEditorFeaturePropertiesUpdater(state, _ref30) {
|
|
3324
|
+
var _state$editor$selecte2;
|
|
3325
|
+
var feature = _ref30.feature,
|
|
3326
|
+
properties = _ref30.properties;
|
|
3327
|
+
if (!getApplicationConfig().enableDrawOnMapSketches) {
|
|
3328
|
+
return state;
|
|
3329
|
+
}
|
|
3330
|
+
var source = findEditorFeature(state, feature);
|
|
3331
|
+
if (!(source !== null && source !== void 0 && source.id)) {
|
|
3332
|
+
return state;
|
|
3333
|
+
}
|
|
3334
|
+
var nextFeature = mergeUserFeatureProperties(source, properties);
|
|
3335
|
+
var filterId = getFilterIdInFeature(nextFeature);
|
|
3336
|
+
var nextEditor = _objectSpread(_objectSpread({}, state.editor), {}, {
|
|
3337
|
+
features: filterId ? state.editor.features : state.editor.features.map(function (item) {
|
|
3338
|
+
return item.id === nextFeature.id ? nextFeature : item;
|
|
3339
|
+
}),
|
|
3340
|
+
selectedFeature: ((_state$editor$selecte2 = state.editor.selectedFeature) === null || _state$editor$selecte2 === void 0 ? void 0 : _state$editor$selecte2.id) === nextFeature.id ? nextFeature : state.editor.selectedFeature
|
|
3341
|
+
});
|
|
3342
|
+
var nextState = _objectSpread(_objectSpread({}, state), {}, {
|
|
3343
|
+
editor: nextEditor
|
|
3344
|
+
});
|
|
3345
|
+
if (!filterId) {
|
|
3346
|
+
return nextState;
|
|
3347
|
+
}
|
|
3348
|
+
var filterIdx = state.filters.findIndex(function (item) {
|
|
3349
|
+
return item.id === filterId;
|
|
3350
|
+
});
|
|
3351
|
+
if (filterIdx < 0) {
|
|
3352
|
+
return nextState;
|
|
3353
|
+
}
|
|
3354
|
+
return setFilterUpdater(nextState, {
|
|
3355
|
+
idx: filterIdx,
|
|
3356
|
+
prop: 'value',
|
|
3357
|
+
value: featureToFilterValue(nextFeature, filterId)
|
|
3358
|
+
});
|
|
3359
|
+
}
|
|
3285
3360
|
|
|
3286
3361
|
/**
|
|
3287
3362
|
* Set the current selected feature
|
|
3288
3363
|
* @memberof uiStateUpdaters
|
|
3289
3364
|
*/
|
|
3290
|
-
export var setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state,
|
|
3291
|
-
var feature =
|
|
3292
|
-
selectionContext =
|
|
3365
|
+
export var setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state, _ref31) {
|
|
3366
|
+
var feature = _ref31.feature,
|
|
3367
|
+
selectionContext = _ref31.selectionContext;
|
|
3293
3368
|
// add bbox for polygon filter to speed up filtering
|
|
3294
3369
|
var selectedFeature = feature;
|
|
3295
3370
|
if (feature !== null && feature !== void 0 && feature.properties) {
|
|
@@ -3311,8 +3386,8 @@ export var setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state,
|
|
|
3311
3386
|
* Delete existing feature from filters
|
|
3312
3387
|
* @memberof visStateUpdaters
|
|
3313
3388
|
*/
|
|
3314
|
-
export function deleteFeatureUpdater(state,
|
|
3315
|
-
var feature =
|
|
3389
|
+
export function deleteFeatureUpdater(state, _ref32) {
|
|
3390
|
+
var feature = _ref32.feature;
|
|
3316
3391
|
if (!feature) {
|
|
3317
3392
|
return state;
|
|
3318
3393
|
}
|
|
@@ -3385,6 +3460,20 @@ export function setPolygonFilterLayerUpdater(state, payload) {
|
|
|
3385
3460
|
layerId.filter(function (l) {
|
|
3386
3461
|
return l !== layer.id;
|
|
3387
3462
|
}) : [].concat(_toConsumableArray(layerId), [layer.id]);
|
|
3463
|
+
|
|
3464
|
+
// Last layer removed: turn the filter polygon back into a sketch
|
|
3465
|
+
if (!newLayerId.length) {
|
|
3466
|
+
var sketchFeature = toSketchFeature(feature);
|
|
3467
|
+
var stateWithoutFilter = removeFilterUpdater(newState, {
|
|
3468
|
+
idx: filterIdx
|
|
3469
|
+
});
|
|
3470
|
+
return _objectSpread(_objectSpread({}, stateWithoutFilter), {}, {
|
|
3471
|
+
editor: _objectSpread(_objectSpread({}, stateWithoutFilter.editor), {}, {
|
|
3472
|
+
features: [].concat(_toConsumableArray(stateWithoutFilter.editor.features), [sketchFeature]),
|
|
3473
|
+
selectedFeature: sketchFeature
|
|
3474
|
+
})
|
|
3475
|
+
});
|
|
3476
|
+
}
|
|
3388
3477
|
} else {
|
|
3389
3478
|
// if we haven't create the polygon filter, create it
|
|
3390
3479
|
var newFilter = generatePolygonFilter([], feature);
|
|
@@ -3443,10 +3532,10 @@ export function setPolygonFilterAllLayersUpdater(state, payload) {
|
|
|
3443
3532
|
* @memberof visStateUpdaters
|
|
3444
3533
|
* @public
|
|
3445
3534
|
*/
|
|
3446
|
-
export function sortTableColumnUpdater(state,
|
|
3447
|
-
var dataId =
|
|
3448
|
-
column =
|
|
3449
|
-
mode =
|
|
3535
|
+
export function sortTableColumnUpdater(state, _ref33) {
|
|
3536
|
+
var dataId = _ref33.dataId,
|
|
3537
|
+
column = _ref33.column,
|
|
3538
|
+
mode = _ref33.mode;
|
|
3450
3539
|
var dataset = state.datasets[dataId];
|
|
3451
3540
|
if (!dataset) {
|
|
3452
3541
|
return state;
|
|
@@ -3467,9 +3556,9 @@ export function sortTableColumnUpdater(state, _ref32) {
|
|
|
3467
3556
|
* @memberof visStateUpdaters
|
|
3468
3557
|
* @public
|
|
3469
3558
|
*/
|
|
3470
|
-
export function pinTableColumnUpdater(state,
|
|
3471
|
-
var dataId =
|
|
3472
|
-
column =
|
|
3559
|
+
export function pinTableColumnUpdater(state, _ref34) {
|
|
3560
|
+
var dataId = _ref34.dataId,
|
|
3561
|
+
column = _ref34.column;
|
|
3473
3562
|
var dataset = state.datasets[dataId];
|
|
3474
3563
|
if (!dataset) {
|
|
3475
3564
|
return state;
|
|
@@ -3483,9 +3572,9 @@ export function pinTableColumnUpdater(state, _ref33) {
|
|
|
3483
3572
|
* @memberof visStateUpdaters
|
|
3484
3573
|
* @public
|
|
3485
3574
|
*/
|
|
3486
|
-
export function copyTableColumnUpdater(state,
|
|
3487
|
-
var dataId =
|
|
3488
|
-
column =
|
|
3575
|
+
export function copyTableColumnUpdater(state, _ref35) {
|
|
3576
|
+
var dataId = _ref35.dataId,
|
|
3577
|
+
column = _ref35.column;
|
|
3489
3578
|
var dataset = state.datasets[dataId];
|
|
3490
3579
|
if (!dataset) {
|
|
3491
3580
|
return state;
|
|
@@ -3509,9 +3598,9 @@ export function copyTableColumnUpdater(state, _ref34) {
|
|
|
3509
3598
|
* @memberof visStateUpdaters
|
|
3510
3599
|
* @public
|
|
3511
3600
|
*/
|
|
3512
|
-
export function setColumnDisplayFormatUpdater(state,
|
|
3513
|
-
var dataId =
|
|
3514
|
-
formats =
|
|
3601
|
+
export function setColumnDisplayFormatUpdater(state, _ref36) {
|
|
3602
|
+
var dataId = _ref36.dataId,
|
|
3603
|
+
formats = _ref36.formats;
|
|
3515
3604
|
var dataset = state.datasets[dataId];
|
|
3516
3605
|
if (!dataset) {
|
|
3517
3606
|
return state;
|
|
@@ -3547,6 +3636,153 @@ export function setColumnDisplayFormatUpdater(state, _ref35) {
|
|
|
3547
3636
|
});
|
|
3548
3637
|
return newState;
|
|
3549
3638
|
}
|
|
3639
|
+
function getMappedValue(filterProps) {
|
|
3640
|
+
if (filterProps && 'mappedValue' in filterProps && Array.isArray(filterProps.mappedValue)) {
|
|
3641
|
+
return filterProps.mappedValue;
|
|
3642
|
+
}
|
|
3643
|
+
return undefined;
|
|
3644
|
+
}
|
|
3645
|
+
function yieldForPaint() {
|
|
3646
|
+
return new Promise(function (resolve) {
|
|
3647
|
+
setTimeout(resolve, 0);
|
|
3648
|
+
});
|
|
3649
|
+
}
|
|
3650
|
+
function requestDatasetColumnStatistics(_x) {
|
|
3651
|
+
return _requestDatasetColumnStatistics.apply(this, arguments);
|
|
3652
|
+
}
|
|
3653
|
+
function _requestDatasetColumnStatistics() {
|
|
3654
|
+
_requestDatasetColumnStatistics = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(_ref37) {
|
|
3655
|
+
var dataset, field, filterProps, mappedValue, values, result;
|
|
3656
|
+
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
3657
|
+
while (1) switch (_context.prev = _context.next) {
|
|
3658
|
+
case 0:
|
|
3659
|
+
dataset = _ref37.dataset, field = _ref37.field;
|
|
3660
|
+
_context.next = 3;
|
|
3661
|
+
return yieldForPaint();
|
|
3662
|
+
case 3:
|
|
3663
|
+
filterProps = field.filterProps || dataset.getColumnFilterProps(field.name);
|
|
3664
|
+
mappedValue = getMappedValue(filterProps);
|
|
3665
|
+
values = mappedValue !== null && mappedValue !== void 0 ? mappedValue : collectColumnValues(dataset.dataContainer, field.fieldIdx);
|
|
3666
|
+
_context.next = 8;
|
|
3667
|
+
return getColumnStatistics({
|
|
3668
|
+
values: values,
|
|
3669
|
+
fieldType: field.type
|
|
3670
|
+
});
|
|
3671
|
+
case 8:
|
|
3672
|
+
result = _context.sent;
|
|
3673
|
+
return _context.abrupt("return", {
|
|
3674
|
+
result: result,
|
|
3675
|
+
filterProps: filterProps
|
|
3676
|
+
});
|
|
3677
|
+
case 10:
|
|
3678
|
+
case "end":
|
|
3679
|
+
return _context.stop();
|
|
3680
|
+
}
|
|
3681
|
+
}, _callee);
|
|
3682
|
+
}));
|
|
3683
|
+
return _requestDatasetColumnStatistics.apply(this, arguments);
|
|
3684
|
+
}
|
|
3685
|
+
var LOAD_COLUMN_STATS_TASK = Task.fromPromise(requestDatasetColumnStatistics, 'LOAD_COLUMN_STATS_TASK');
|
|
3686
|
+
|
|
3687
|
+
/**
|
|
3688
|
+
* Start loading column statistics for one or more fields.
|
|
3689
|
+
* @memberof visStateUpdaters
|
|
3690
|
+
* @public
|
|
3691
|
+
*/
|
|
3692
|
+
export function loadColumnStatsUpdater(state, _ref38) {
|
|
3693
|
+
var dataId = _ref38.dataId,
|
|
3694
|
+
fieldName = _ref38.fieldName;
|
|
3695
|
+
var fieldNamesToLoad = toArray(fieldName);
|
|
3696
|
+
var dataset = state.datasets[dataId];
|
|
3697
|
+
var fieldsToLoad = dataset === null || dataset === void 0 ? void 0 : dataset.fields.filter(function (f) {
|
|
3698
|
+
return fieldNamesToLoad.includes(f.name);
|
|
3699
|
+
});
|
|
3700
|
+
if (!dataset || !fieldsToLoad.length) {
|
|
3701
|
+
return state;
|
|
3702
|
+
}
|
|
3703
|
+
var newFields = dataset.fields.map(function (field) {
|
|
3704
|
+
return fieldNamesToLoad.includes(field.name) ? _objectSpread(_objectSpread({}, field), {}, {
|
|
3705
|
+
isLoadingStats: true
|
|
3706
|
+
}) : field;
|
|
3707
|
+
});
|
|
3708
|
+
var newDataset = copyTableAndUpdate(dataset, {
|
|
3709
|
+
fields: newFields
|
|
3710
|
+
});
|
|
3711
|
+
var tasks = fieldsToLoad.map(function (f) {
|
|
3712
|
+
return LOAD_COLUMN_STATS_TASK({
|
|
3713
|
+
dataset: newDataset,
|
|
3714
|
+
field: f
|
|
3715
|
+
}).bimap(function (_ref39) {
|
|
3716
|
+
var result = _ref39.result,
|
|
3717
|
+
filterProps = _ref39.filterProps;
|
|
3718
|
+
return loadColumnStatsSuccess(newDataset.id, f.name, result, filterProps);
|
|
3719
|
+
}, function (error) {
|
|
3720
|
+
return loadColumnStatsError(newDataset.id, f.name, error);
|
|
3721
|
+
});
|
|
3722
|
+
});
|
|
3723
|
+
var nextState = pick_('datasets')(merge_(_defineProperty({}, dataId, newDataset)))(state);
|
|
3724
|
+
return withTask(nextState, tasks);
|
|
3725
|
+
}
|
|
3726
|
+
|
|
3727
|
+
/**
|
|
3728
|
+
* Persist loaded column statistics on the field.
|
|
3729
|
+
* @memberof visStateUpdaters
|
|
3730
|
+
* @public
|
|
3731
|
+
*/
|
|
3732
|
+
export function loadColumnStatsSuccessUpdater(state, _ref40) {
|
|
3733
|
+
var result = _ref40.result,
|
|
3734
|
+
filterProps = _ref40.filterProps,
|
|
3735
|
+
dataId = _ref40.dataId,
|
|
3736
|
+
fieldName = _ref40.fieldName;
|
|
3737
|
+
var dataset = state.datasets[dataId];
|
|
3738
|
+
var field = ((dataset === null || dataset === void 0 ? void 0 : dataset.fields) || []).find(function (f) {
|
|
3739
|
+
return f.name === fieldName;
|
|
3740
|
+
});
|
|
3741
|
+
if (!dataset || !field) {
|
|
3742
|
+
return state;
|
|
3743
|
+
}
|
|
3744
|
+
var newFilterProps = _objectSpread(_objectSpread({}, filterProps), {}, {
|
|
3745
|
+
columnStats: result
|
|
3746
|
+
});
|
|
3747
|
+
var newFields = dataset.fields.map(function (f) {
|
|
3748
|
+
return f.name === fieldName ? _objectSpread(_objectSpread({}, f), {}, {
|
|
3749
|
+
filterProps: newFilterProps,
|
|
3750
|
+
isLoadingStats: false
|
|
3751
|
+
}) : f;
|
|
3752
|
+
});
|
|
3753
|
+
var newDataset = copyTableAndUpdate(dataset, {
|
|
3754
|
+
fields: newFields
|
|
3755
|
+
});
|
|
3756
|
+
return pick_('datasets')(merge_(_defineProperty({}, dataId, newDataset)))(state);
|
|
3757
|
+
}
|
|
3758
|
+
|
|
3759
|
+
/**
|
|
3760
|
+
* Clear loading flag when column statistics fail.
|
|
3761
|
+
* @memberof visStateUpdaters
|
|
3762
|
+
* @public
|
|
3763
|
+
*/
|
|
3764
|
+
export function loadColumnStatsErrorUpdater(state, _ref41) {
|
|
3765
|
+
var error = _ref41.error,
|
|
3766
|
+
dataId = _ref41.dataId,
|
|
3767
|
+
fieldName = _ref41.fieldName;
|
|
3768
|
+
Console.error(error);
|
|
3769
|
+
var dataset = state.datasets[dataId];
|
|
3770
|
+
var field = ((dataset === null || dataset === void 0 ? void 0 : dataset.fields) || []).find(function (f) {
|
|
3771
|
+
return f.name === fieldName;
|
|
3772
|
+
});
|
|
3773
|
+
if (!dataset || !field) {
|
|
3774
|
+
return state;
|
|
3775
|
+
}
|
|
3776
|
+
var newFields = dataset.fields.map(function (f) {
|
|
3777
|
+
return f.name === fieldName ? _objectSpread(_objectSpread({}, f), {}, {
|
|
3778
|
+
isLoadingStats: false
|
|
3779
|
+
}) : f;
|
|
3780
|
+
});
|
|
3781
|
+
var newDataset = copyTableAndUpdate(dataset, {
|
|
3782
|
+
fields: newFields
|
|
3783
|
+
});
|
|
3784
|
+
return pick_('datasets')(merge_(_defineProperty({}, dataId, newDataset)))(state);
|
|
3785
|
+
}
|
|
3550
3786
|
|
|
3551
3787
|
/**
|
|
3552
3788
|
* Update editor
|
|
@@ -3560,9 +3796,58 @@ action) {
|
|
|
3560
3796
|
})
|
|
3561
3797
|
});
|
|
3562
3798
|
}
|
|
3563
|
-
|
|
3564
|
-
|
|
3565
|
-
|
|
3799
|
+
|
|
3800
|
+
/**
|
|
3801
|
+
* Convert editor sketch features into a GeoJSON dataset/layer and clear the sketches.
|
|
3802
|
+
*/
|
|
3803
|
+
export function convertEditorFeaturesToLayerUpdater(state,
|
|
3804
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
3805
|
+
_action) {
|
|
3806
|
+
if (!getApplicationConfig().enableDrawOnMapSketches) {
|
|
3807
|
+
return state;
|
|
3808
|
+
}
|
|
3809
|
+
var features = state.editor.features;
|
|
3810
|
+
if (!features.length) {
|
|
3811
|
+
return state;
|
|
3812
|
+
}
|
|
3813
|
+
var data;
|
|
3814
|
+
try {
|
|
3815
|
+
data = processGeojson(editorFeaturesToFeatureCollection(features));
|
|
3816
|
+
} catch (err) {
|
|
3817
|
+
var message = err instanceof Error ? err.message : String(err);
|
|
3818
|
+
return withTask(state, ACTION_TASK_ADD_NOTIFICATION().map(function () {
|
|
3819
|
+
return addNotification(errorNotification({
|
|
3820
|
+
message: "Failed to convert drawn geometry to a layer: ".concat(message),
|
|
3821
|
+
id: 'convert-editor-features'
|
|
3822
|
+
}));
|
|
3823
|
+
}));
|
|
3824
|
+
}
|
|
3825
|
+
var clearedState = _objectSpread(_objectSpread({}, state), {}, {
|
|
3826
|
+
editor: _objectSpread(_objectSpread({}, state.editor), {}, {
|
|
3827
|
+
features: [],
|
|
3828
|
+
selectedFeature: null,
|
|
3829
|
+
mode: EDITOR_MODES.EDIT
|
|
3830
|
+
})
|
|
3831
|
+
});
|
|
3832
|
+
var labelId = Math.floor(Math.random() * 90) + 10;
|
|
3833
|
+
return updateVisDataUpdater(clearedState, {
|
|
3834
|
+
datasets: {
|
|
3835
|
+
info: {
|
|
3836
|
+
id: "drawn-geometry-".concat(generateHashId(6)),
|
|
3837
|
+
label: "Drawn Geometry ".concat(labelId)
|
|
3838
|
+
},
|
|
3839
|
+
data: data
|
|
3840
|
+
},
|
|
3841
|
+
options: {
|
|
3842
|
+
keepExistingConfig: true,
|
|
3843
|
+
centerMap: false,
|
|
3844
|
+
autoCreateLayers: true
|
|
3845
|
+
}
|
|
3846
|
+
});
|
|
3847
|
+
}
|
|
3848
|
+
export function setFilterAnimationTimeConfigUpdater(state, _ref42) {
|
|
3849
|
+
var idx = _ref42.idx,
|
|
3850
|
+
config = _ref42.config;
|
|
3566
3851
|
var oldFilter = state.filters[idx];
|
|
3567
3852
|
if (!oldFilter) {
|
|
3568
3853
|
Console.error("filters.".concat(idx, " is undefined"));
|
|
@@ -3592,8 +3877,8 @@ function checkTimeConfigArgs(config) {
|
|
|
3592
3877
|
/**
|
|
3593
3878
|
* Update editor
|
|
3594
3879
|
*/
|
|
3595
|
-
export function setLayerAnimationTimeConfigUpdater(state,
|
|
3596
|
-
var config =
|
|
3880
|
+
export function setLayerAnimationTimeConfigUpdater(state, _ref43) {
|
|
3881
|
+
var config = _ref43.config;
|
|
3597
3882
|
if (!config) {
|
|
3598
3883
|
return state;
|
|
3599
3884
|
}
|
|
@@ -3791,8 +4076,8 @@ export function setTimeFilterTimelineModeUpdater(state, action) {
|
|
|
3791
4076
|
* @returns nextState
|
|
3792
4077
|
* @public
|
|
3793
4078
|
*/
|
|
3794
|
-
export var setLoadingIndicatorUpdater = function setLoadingIndicatorUpdater(state,
|
|
3795
|
-
var change =
|
|
4079
|
+
export var setLoadingIndicatorUpdater = function setLoadingIndicatorUpdater(state, _ref44) {
|
|
4080
|
+
var change = _ref44.payload.change;
|
|
3796
4081
|
var loadingIndicatorValue = state.loadingIndicatorValue;
|
|
3797
4082
|
if (!loadingIndicatorValue) {
|
|
3798
4083
|
loadingIndicatorValue = 0;
|
|
@@ -3912,10 +4197,10 @@ function findChildDatasetIds(value) {
|
|
|
3912
4197
|
}
|
|
3913
4198
|
|
|
3914
4199
|
// moved unmerged layers, filters, interactions
|
|
3915
|
-
function moveValueToBeMerged(state, propValues,
|
|
3916
|
-
var prop =
|
|
3917
|
-
toMergeProp =
|
|
3918
|
-
saveUnmerged =
|
|
4200
|
+
function moveValueToBeMerged(state, propValues, _ref46) {
|
|
4201
|
+
var prop = _ref46.prop,
|
|
4202
|
+
toMergeProp = _ref46.toMergeProp,
|
|
4203
|
+
saveUnmerged = _ref46.saveUnmerged;
|
|
3919
4204
|
// remove prop value from state
|
|
3920
4205
|
// TODO: should we add remove updater to merger as well?
|
|
3921
4206
|
if (!propValues) {
|
|
@@ -3972,17 +4257,17 @@ export function prepareStateForDatasetReplace(state, dataId, dataIdToUse) {
|
|
|
3972
4257
|
}
|
|
3973
4258
|
return nextState;
|
|
3974
4259
|
}
|
|
3975
|
-
export function replaceDatasetDepsInState(state,
|
|
3976
|
-
var dataId =
|
|
3977
|
-
dataIdToUse =
|
|
4260
|
+
export function replaceDatasetDepsInState(state, _ref47) {
|
|
4261
|
+
var dataId = _ref47.dataId,
|
|
4262
|
+
dataIdToUse = _ref47.dataIdToUse;
|
|
3978
4263
|
var serializedState = serializeVisState(state, state.schema);
|
|
3979
|
-
var nextState = state.mergers.reduce(function (accuState,
|
|
3980
|
-
var prop =
|
|
3981
|
-
toMergeProp =
|
|
3982
|
-
replaceParentDatasetIds =
|
|
3983
|
-
getChildDatasetIds =
|
|
3984
|
-
saveUnmerged =
|
|
3985
|
-
preserveOrder =
|
|
4264
|
+
var nextState = state.mergers.reduce(function (accuState, _ref48) {
|
|
4265
|
+
var prop = _ref48.prop,
|
|
4266
|
+
toMergeProp = _ref48.toMergeProp,
|
|
4267
|
+
replaceParentDatasetIds = _ref48.replaceParentDatasetIds,
|
|
4268
|
+
getChildDatasetIds = _ref48.getChildDatasetIds,
|
|
4269
|
+
saveUnmerged = _ref48.saveUnmerged,
|
|
4270
|
+
preserveOrder = _ref48.preserveOrder;
|
|
3986
4271
|
// get dataset ids that are depends on this dataset
|
|
3987
4272
|
var props = toArray(prop);
|
|
3988
4273
|
var toMergeProps = toArray(toMergeProp);
|
|
@@ -4010,11 +4295,11 @@ export function replaceDatasetDepsInState(state, _ref41) {
|
|
|
4010
4295
|
}, state);
|
|
4011
4296
|
return nextState;
|
|
4012
4297
|
}
|
|
4013
|
-
function replacePropValueInState(state, replacedItem,
|
|
4014
|
-
var prop =
|
|
4015
|
-
toMergeProp =
|
|
4016
|
-
getChildDatasetIds =
|
|
4017
|
-
saveUnmerged =
|
|
4298
|
+
function replacePropValueInState(state, replacedItem, _ref49) {
|
|
4299
|
+
var prop = _ref49.prop,
|
|
4300
|
+
toMergeProp = _ref49.toMergeProp,
|
|
4301
|
+
getChildDatasetIds = _ref49.getChildDatasetIds,
|
|
4302
|
+
saveUnmerged = _ref49.saveUnmerged;
|
|
4018
4303
|
// prop is depends on the dataset to be replaced
|
|
4019
4304
|
// remove prop from state, and move it to toBeMerged
|
|
4020
4305
|
var nextState = moveValueToBeMerged(state, replacedItem, {
|
|
@@ -4032,4 +4317,4 @@ function replacePropValueInState(state, replacedItem, _ref43) {
|
|
|
4032
4317
|
}
|
|
4033
4318
|
return nextState;
|
|
4034
4319
|
}
|
|
4035
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJiYm94IiwiY29weSIsImRlZXBtZXJnZSIsImNvbnNvbGUiLCJDb25zb2xlIiwiY2xvbmVEZWVwIiwiZ2V0IiwiaXNFcXVhbCIsInBpY2siLCJ1bmlxIiwieG9yIiwiVGFzayIsImRpc2FibGVTdGFja0NhcHR1cmluZyIsIndpdGhUYXNrIiwiREVMQVlfVEFTSyIsIkFDVElPTl9UQVNLIiwiTE9BRF9GSUxFX1RBU0siLCJQUk9DRVNTX0ZJTEVfREFUQSIsIlVOV1JBUF9UQVNLIiwiYWRkTm90aWZpY2F0aW9uIiwiYXBwbHlMYXllckNvbmZpZyIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzIiwibGF5ZXJDb25maWdDaGFuZ2UiLCJsYXllclR5cGVDaGFuZ2UiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsImxvYWRGaWxlU3RlcFN1Y2Nlc3MiLCJsb2FkRmlsZXNFcnIiLCJsb2FkRmlsZXNTdWNjZXNzIiwibG9hZE5leHRGaWxlIiwibmV4dEZpbGVCYXRjaCIsInNldEZpbHRlciIsInByb2Nlc3NGaWxlQ29udGVudCIsImZpdEJvdW5kcyIsImZpdE1hcEJvdW5kcyIsInRvZ2dsZUxheWVyRm9yTWFwIiwiYXBwbHlGaWx0ZXJDb25maWciLCJGSUxURVJfVVBEQVRFUl9QUk9QUyIsImFkZE5ld0xheWVyc1RvU3BsaXRNYXAiLCJzbmFwVG9NYXJrcyIsImFwcGx5RmlsdGVyRmllbGROYW1lIiwiYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyIsImFycmF5SW5zZXJ0IiwiY29tcHV0ZVNwbGl0TWFwTGF5ZXJzIiwiYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbiIsImVycm9yTm90aWZpY2F0aW9uIiwiZmVhdHVyZVRvRmlsdGVyVmFsdWUiLCJmaWx0ZXJEYXRhc2V0Q1BVIiwiZ2VuZXJhdGVQb2x5Z29uRmlsdGVyIiwiZ2V0RGVmYXVsdEZpbHRlciIsImdldEZpbHRlcklkSW5GZWF0dXJlIiwiZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyIiwiaXNJblJhbmdlIiwiaXNPYmplY3QiLCJpc1BsYWluT2JqZWN0IiwiaXNSZ2JDb2xvciIsInBhcnNlRmllbGRWYWx1ZSIsInJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyIsInNldCIsInVwZGF0ZUZpbHRlclBsb3QiLCJyZW1vdmVGaWx0ZXJQbG90IiwiaXNMYXllckFuaW1hdGFibGUiLCJpc1NpZGVGaWx0ZXIiLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsImdlbmVyYXRlSGFzaElkIiwidG9BcnJheSIsImFycmF5TW92ZSIsIkFOSU1BVElPTl9XSU5ET1ciLCJCQVNFX1NQRUVEIiwiQ09NUEFSRV9UWVBFUyIsIkRFRkFVTFRfVEVYVF9MQUJFTCIsIkVESVRPUl9NT0RFUyIsIkZJTFRFUl9UWVBFUyIsIkZJTFRFUl9WSUVXX1RZUEVTIiwiRlBTIiwiTElHSFRfQU5EX1NIQURPV19FRkZFQ1QiLCJESVNUQU5DRV9GT0dfVFlQRSIsIlNVUkZBQ0VfRk9HX1RZUEUiLCJNQVhfREVGQVVMVF9UT09MVElQUyIsIlBMT1RfVFlQRVMiLCJTT1JUX09SREVSIiwiU1lOQ19USU1FTElORV9NT0RFUyIsIkNIQU5ORUxfU0NBTEVTIiwiU0NBTEVfVFlQRVMiLCJJTklUSUFMX0FOTk9UQVRJT05fS0lORCIsIklOSVRJQUxfQU5OT1RBVElPTl9BTkdMRSIsIklOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RIIiwiSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfV0lEVEgiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9IRUlHSFQiLCJJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCIsIklOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SIiwiQW5ub3RhdGlvbktpbmQiLCJMQVlFUl9JRF9MRU5HVEgiLCJMYXllciIsIkxheWVyQ2xhc3NlcyIsImFwcGx5XyIsImNvbXBvc2VfIiwiZmlsdGVyT3V0QnlJZCIsIm1lcmdlXyIsInBheWxvYWRfIiwicGlja18iLCJyZW1vdmVFbGVtZW50QXRJbmRleCIsInN3YXBfIiwiaXNWYWxpZE1lcmdlciIsIm1lcmdlU3RhdGVGcm9tTWVyZ2VycyIsIlZJU19TVEFURV9NRVJHRVJTIiwiY3JlYXRlTGF5ZXJGcm9tQ29uZmlnIiwicGFyc2VMYXllckNvbmZpZyIsInNlcmlhbGl6ZUZpbHRlciIsInNlcmlhbGl6ZUxheWVyIiwic2VyaWFsaXplVmlzU3RhdGUiLCJ2YWxpZGF0ZUxheWVyV2l0aERhdGEiLCJLZXBsZXJHTFNjaGVtYSIsImFzc2lnbkdwdUNoYW5uZWwiLCJjb3B5VGFibGVBbmRVcGRhdGUiLCJjcmVhdGVOZXdEYXRhRW50cnkiLCJwaW5UYWJsZUNvbHVtbnMiLCJzZXRGaWx0ZXJHcHVNb2RlIiwic29ydERhdGFzZXRCeUNvbHVtbiIsImZpbmRGaWVsZHNUb1Nob3ciLCJjYWxjdWxhdGVMYXllckRhdGEiLCJmaW5kRGVmYXVsdExheWVyIiwiZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMiLCJtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMiLCJnZXROZXdMYXllckdyb3VwIiwiYWRkTGF5ZXJPckdyb3VwVG9MYXllck9yZGVyIiwicmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyIiwiZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyIiwiZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIiLCJnZXRJbmRleEZyb21MYXllckVudHJ5SWQiLCJ1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyIiwiZ2V0RmxhdExheWVyT3JkZXIiLCJyZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlciIsImdldFByb3BWYWx1ZVRvTWVyZ2VyIiwiaGFzUHJvcHNUb01lcmdlIiwibWVyZ2VEYXRhc2V0c0J5T3JkZXIiLCJmaXhFZmZlY3RPcmRlciIsImdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzIiwiZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyIsIm1lcmdlVGltZURvbWFpbnMiLCJhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93IiwidXBkYXRlVGltZUZpbHRlclBsb3RUeXBlIiwiZ2V0RGVmYXVsdFRpbWVGb3JtYXQiLCJMYXllclRvRmlsdGVyVGltZUludGVydmFsIiwiVElNRV9JTlRFUlZBTFNfT1JERVJFRCIsIm1lcmdlRmlsdGVyRG9tYWluIiwiaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlIiwiY3JlYXRlRWZmZWN0IiwiZmluZE1hcEJvdW5kcyIsInZpc1N0YXRlVXBkYXRlcnMiLCJkZWZhdWx0SW50ZXJhY3Rpb25Db25maWciLCJ0b29sdGlwIiwiaWQiLCJsYWJlbCIsImVuYWJsZWQiLCJjb25maWciLCJmaWVsZHNUb1Nob3ciLCJjb21wYXJlTW9kZSIsImNvbXBhcmVUeXBlIiwiQUJTT0xVVEUiLCJnZW9jb2RlciIsInBvc2l0aW9uIiwibGltaXRTZWFyY2giLCJicnVzaCIsInNpemUiLCJjb29yZGluYXRlIiwiREVGQVVMVF9BTklNQVRJT05fQ09ORklHIiwiZG9tYWluIiwiY3VycmVudFRpbWUiLCJzcGVlZCIsImlzQW5pbWF0aW5nIiwidGltZVN0ZXBzIiwidGltZUZvcm1hdCIsInRpbWV6b25lIiwiZGVmYXVsdFRpbWVGb3JtYXQiLCJoaWRlQ29udHJvbCIsImR1cmF0aW9uIiwiREVGQVVMVF9FRElUT1IiLCJtb2RlIiwiRFJBV19QT0xZR09OIiwiZmVhdHVyZXMiLCJzZWxlY3RlZEZlYXR1cmUiLCJ2aXNpYmxlIiwiSU5JVElBTF9WSVNfU1RBVEUiLCJtYXBJbmZvIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsImxheWVycyIsImxheWVyRGF0YSIsImxheWVyVG9CZU1lcmdlZCIsImxheWVyT3JkZXIiLCJsYXllck9yZGVyVG9CZU1lcmdlZCIsImZpbHRlcnMiLCJmaWx0ZXJUb0JlTWVyZ2VkIiwiZGF0YXNldHMiLCJlZGl0aW5nRGF0YXNldCIsInVuZGVmaW5lZCIsImVmZmVjdHMiLCJlZmZlY3RPcmRlciIsImFubm90YXRpb25zIiwiYW5ub3RhdGlvbnNUb0JlTWVyZ2VkIiwic2VsZWN0ZWRBbm5vdGF0aW9uSWQiLCJpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dCIsImludGVyYWN0aW9uQ29uZmlnIiwiaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkIiwibGF5ZXJCbGVuZGluZyIsIm92ZXJsYXlCbGVuZGluZyIsImhvdmVySW5mbyIsImNsaWNrZWQiLCJtb3VzZVBvcyIsIm1heERlZmF1bHRUb29sdGlwcyIsInNwbGl0TWFwcyIsInNwbGl0TWFwc1RvQmVNZXJnZWQiLCJpc01lcmdpbmdEYXRhc2V0cyIsImxheWVyQ2xhc3NlcyIsImFuaW1hdGlvbkNvbmZpZyIsImVkaXRvciIsImZpbGVMb2FkaW5nIiwiZmlsZUxvYWRpbmdQcm9ncmVzcyIsImxvYWRpbmdJbmRpY2F0b3JWYWx1ZSIsImxvYWRlcnMiLCJsb2FkT3B0aW9ucyIsIm1lcmdlcnMiLCJzY2hlbWEiLCJBQ1RJT05fVEFTS19GSVRfQk9VTkRTIiwiZnJvbUNhbGxiYWNrIiwiXyIsImNiIiwiQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTiIsInVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YSIsInN0YXRlIiwiX3JlZiIsImxheWVyIiwiaWR4IiwiX29iamVjdFNwcmVhZCIsIm1hcCIsImx5ciIsImkiLCJkIiwidXBkYXRlU3RhdGVPbkxheWVyVmlzaWJpbGl0eUNoYW5nZSIsIm5ld1N0YXRlIiwibGVuZ3RoIiwiaXNWaXNpYmxlIiwiYW5pbWF0aW9uIiwidXBkYXRlQW5pbWF0aW9uRG9tYWluIiwicGlja0NoYW5nZWRQcm9wcyIsInByZXYiLCJuZXh0IiwiY2hhbmdlZFByb3BzIiwicGlja1Byb3BzT2YiLCJvYmoiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIlZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMiLCJhcHBseUxheWVyQ29uZmlnVXBkYXRlciIsImFjdGlvbiIsIl9zZXJpYWxpemVMYXllciIsIm9sZExheWVySWQiLCJuZXdMYXllckNvbmZpZyIsImxheWVySW5kZXgiLCJuZXdQYXJzZWRMYXllciIsIm9sZExheWVyIiwiZmluZCIsImwiLCJkYXRhc2V0IiwiZGF0YUlkIiwibmV3TGF5ZXIiLCJuZXh0U3RhdGUiLCJ0eXBlIiwib2xkTGF5ZXJJbmRleCIsImZpbmRJbmRleCIsImxheWVyVHlwZUNoYW5nZVVwZGF0ZXIiLCJuZXdMYXllcklkIiwic2VyaWFsaXplZE9sZExheWVyIiwic2VyaWFsaXplZE5ld0xheWVyIiwiY2hhbmdlZCIsInZpc0NvbmZpZyIsImxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlciIsInZpc3VhbENoYW5uZWxzIiwiY2hhbm5lbE5hbWUiLCJjaGFubmVsIiwiY2hhbm5lbFByb3BOYW1lcyIsInByb3AiLCJzb21lIiwibGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlciIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImVyciIsImUiLCJmIiwibGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyIiwidXBkYXRlbGF5ZXJWaXNpYmlsdHkiLCJmaWx0ZXJJbmRleCIsImZpbHRlclN5bmNlZFdpdGhUaW1lbGluZSIsInN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyIiwiZW5hYmxlIiwicHJvcHMiLCJuZXdDb25maWciLCJfYWN0aW9uJG5ld0NvbmZpZyIsInJlc3RDb25maWciLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJzdGF0ZVdpdGhEYXRhSWQiLCJsYXllckRhdGFJZENoYW5nZVVwZGF0ZXIiLCJuZXh0TGF5ZXIiLCJ1cGRhdGVMYXllckNvbmZpZyIsInNob3VsZENhbGN1bGF0ZUxheWVyRGF0YSIsIm9sZExheWVyRGF0YSIsInVwZGF0ZUxheWVyRGF0YVJlc3VsdCIsImxheWVyQW5pbWF0aW9uQ2hhbmdlVXBkYXRlciIsIl9kZWZpbmVQcm9wZXJ0eSIsIl9jYWxjdWxhdGVMYXllckRhdGEiLCJsYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyIiwibGF5ZXJJZCIsInNwbGl0TWFwSWQiLCJtYXBJbmRleCIsInNtIiwidG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyIiwic3luY2VkV2l0aExheWVyVGltZWxpbmUiLCJsYXllclNldElzVmFsaWRVcGRhdGVyIiwiaXNWYWxpZCIsImxheWVyVG9VcGRhdGUiLCJuZXdEYXRhIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTIiLCJhZGRPclJlbW92ZVRleHRMYWJlbHMiLCJuZXdGaWVsZHMiLCJ0ZXh0TGFiZWwiLCJkZWZhdWx0VGV4dExhYmVsIiwiYXJndW1lbnRzIiwibmV3VGV4dExhYmVsIiwic2xpY2UiLCJjdXJyZW50RmllbGRzIiwidGwiLCJmaWVsZCIsIm5hbWUiLCJmaWx0ZXIiLCJhZGRGaWVsZHMiLCJpbmNsdWRlcyIsImRlbGV0ZUZpZWxkcyIsImZkIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiYWYiLCJ1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUiLCJzcGxpY2UiLCJsYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXIiLCJfb2xkTGF5ZXIkZ2V0RGVmYXVsdEwiLCJfb2xkTGF5ZXIkZ2V0RGVmYXVsdEwyIiwiZ2V0RGVmYXVsdExheWVyQ29uZmlnIiwidmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEiLCJsb2FkZWRMYXllciIsImFsbG93RW1wdHlDb2x1bW4iLCJpc1ZhbGlkVG9TYXZlIiwidmFsaWRhdGVkIiwib2xkTGF5ZXJUeXBlIiwibmV3RGF0YXNldEZpZWxkcyIsImZpZWxkcyIsInJlbWFwcGVkRmllbGRzIiwidmFsdWVzIiwiX3JlZjIiLCJmaWVsZEtleSIsImN1cnJlbnRGaWVsZCIsIm1hdGNoZWQiLCJfcmVmMyIsInZhbGlkYXRlVmlzdWFsQ2hhbm5lbCIsImlzQ29uZmlnQWN0aXZlIiwidXBkYXRlTGF5ZXJEb21haW4iLCJfY2FsY3VsYXRlTGF5ZXJEYXRhMyIsInNldEluaXRpYWxMYXllckNvbmZpZyIsInJlc3VsdCIsImZpbmREZWZhdWx0TGF5ZXJQcm9wcyIsIkFycmF5IiwiaXNBcnJheSIsIm5ld1R5cGUiLCJvbGRJZCIsImVycm9yIiwiZGVmYXVsdExheWVyUHJvcHMiLCJhc3NpZ25Db25maWdUb0xheWVyIiwidmlzQ29uZmlnU2V0dGluZ3MiLCJpc0xheWVySG92ZXJlZCIsIl9jYWxjdWxhdGVMYXllckRhdGE0Iiwic2V0dGluZ3MiLCJfc2V0dGluZ3MkbGF5ZXJzIiwib2xkTGF5ZXJNYXAiLCJvdGhlckxheWVycyIsIl90b1Byb3BlcnR5S2V5IiwibmV3VmlzQ29uZmlnIiwidXBkYXRlTGF5ZXJWaXNDb25maWciLCJ1cGRhdGVMYXllclZpc3VhbENoYW5uZWwiLCJ1cGRhdGVkU3RhdGUiLCJ2aXN1YWxDaGFubmVsIiwiY2hhbm5lbFNjYWxlVHlwZSIsImNvbG9yIiwidXBkYXRlTGF5ZXJDb2xvclVJIiwicmFuZ2UiLCJjb2xvclJhbmdlQ29uZmlnIiwiY29sb3JVSSIsImN1c3RvbUJyZWFrcyIsIl9jYWxjdWxhdGVMYXllckRhdGE1Iiwic2NhbGUiLCJjdXN0b21PcmRpbmFsIiwiY3VzdG9tUGFsZXR0ZSIsIm9yZGluYWxEb21haW4iLCJjb2xvckJyZWFrcyIsInNob3dDb2xvckNoYXJ0IiwiZWRpdEJvdW5kcyIsIl9jYWxjdWxhdGVMYXllckRhdGE2Iiwic2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlciIsIl9yZWY0IiwicmVkdWNlIiwiYWNjdSIsInNldEZpbHRlckFuaW1hdGlvblRpbWVVcGRhdGVyIiwic2V0RmlsdGVyVXBkYXRlciIsInNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXIiLCJfcmVmNSIsImFuaW1hdGlvbldpbmRvdyIsIm5ld0ZpbHRlciIsIm5ld1N5bmNUaW1lbGluZU1vZGUiLCJnZXRTeW5jQW5pbWF0aW9uTW9kZSIsInNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyIiwiYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyIiwiX3NlcmlhbGl6ZUZpbHRlciIsImZpbHRlcklkIiwib2xkRmlsdGVyIiwic2VyaWFsaXplZE9sZEZpbHRlciIsInNlcmlhbGl6ZWROZXdGaWx0ZXIiLCJfYWN0aW9uJHZhbHVlSW5kZXgiLCJ2YWx1ZUluZGV4IiwiZGF0YXNldElkc1RvRmlsdGVyIiwiX2xvb3AiLCJyZXMiLCJ2IiwiX3VwZGF0ZUZpbHRlclByb3AiLCJlbmxhcmdlZEZpbHRlciIsInZpZXciLCJlbmxhcmdlZCIsInNpZGUiLCJmaWx0ZXJlZERhdGFzZXRzIiwiZmlsdGVyV2l0aFBMb3QiLCJ1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEiLCJ0aW1lUmFuZ2UiLCJhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyIiwiX3VwZGF0ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleCIsIl9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgiLCJuZXh0VmFsdWUiLCJfaSIsIl9hcnIiLCJuZXh0VmFsIiwiZG9tYWluU3RlcHMiLCJuZXh0RmlsdGVyIiwic3RlcCIsImRhdGFzZXRJZHMiLCJvbGREYXRhSWQiLCJkYXRhc2V0SWQiLCJfYXBwbHlGaWx0ZXJGaWVsZE5hbWUiLCJtZXJnZURvbWFpbiIsInVwZGF0ZWRGaWx0ZXIiLCJuZXdEYXRhc2V0IiwiZ3B1IiwibGF5ZXJJZERpZmZlcmVuY2UiLCJsYXllckRhdGFJZHMiLCJsaWQiLCJuZXdEYXRhSWRzIiwic2V0RmlsdGVyUGxvdFVwZGF0ZXIiLCJfcmVmNiIsIm5ld1Byb3AiLCJwbG90VHlwZSIsImNoYXJ0VHlwZSIsInlBeGlzIiwibGluZUNoYXJ0IiwiaGlzdG9ncmFtIiwiYWRkRmlsdGVyVXBkYXRlciIsImNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlciIsIm9yaWdpbmFsSW5kZXgiLCJpbmRleCIsImxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXIiLCJfcmVmNyIsIm9sZFZpeENvbmZpZyIsInRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIiLCJpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyIsInNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXIiLCJ0b2dnbGVMYXllckFuaW1hdGlvblVwZGF0ZXIiLCJ0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2xVcGRhdGVyIiwidXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyIiwidXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIiLCJfcmVmOCIsInNldEZpbHRlclZpZXdVcGRhdGVyIiwic2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3IiwidG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXIiLCJyZW1vdmVGaWx0ZXJVcGRhdGVyIiwiX3N0YXRlJGZpbHRlcnMkaWR4IiwibmV3RmlsdGVycyIsIm5ld0VkaXRvciIsImFkZExheWVyVXBkYXRlciIsIm5ld0xheWVyRGF0YSIsIndhcm4iLCJfYWN0aW9uJGRhdGFzZXRJZCIsImRlZmF1bHREYXRhc2V0IiwicmVtb3ZlTGF5ZXJVcGRhdGVyIiwiX3JlZjkiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsImxheWVyVG9SZW1vdmUiLCJyZW9yZGVyTGF5ZXJVcGRhdGVyIiwiX3JlZjAiLCJvcmRlciIsImFkZExheWVyR3JvdXBVcGRhdGVyIiwibGF5ZXJHcm91cCIsIm5ld0xheWVyT3JkZXIiLCJyZW1vdmVMYXllckdyb3VwVXBkYXRlciIsImxheWVyR3JvdXBUb1JlbW92ZSIsImxheWVySWRzVG9SZW1vdmUiLCJ1cGRhdGVMYXllckdyb3VwVXBkYXRlciIsIm9wdGlvbnMiLCJuZXdMYXllckdyb3VwIiwibGF5ZXJJZHMiLCJhY2MiLCJhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwSWQiLCJlbnRyeSIsIm5ld0dyb3VwTGF5ZXJPcmRlciIsInJlbW92ZUxheWVyRnJvbUxheWVyR3JvdXBVcGRhdGVyIiwibmV3TGF5ZXJHcm91cE9yZGVyIiwic3dhcExheWVyT3JkZXJFbnRyaWVzVXBkYXRlciIsIm9yaWdpbkxheWVySWQiLCJkZXN0aW5hdGlvbkxheWVySWQiLCJvcmlnaW5MYXllckdyb3VwSWQiLCJkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCIsIm9yaWdpbkluZGV4IiwiZGVzdGluYXRpb25JbmRleCIsImRlc3RJbmRleCIsImR1cGxpY2F0ZUxheWVyVXBkYXRlciIsIl9yZWYxIiwib3JpZ2luYWwiLCJvcmlnaW5hbExheWVyT3JkZXJJZHgiLCJuZXdMYWJlbCIsInBvc3RmaXgiLCJwYXJlbnRHcm91cCIsImxheWVyT3JkZXJXaXRob3V0UHJlcGVuZGVkIiwiaWR4SW5Hcm91cCIsInVwZGF0ZWRHcm91cCIsImFkZEVmZmVjdFVwZGF0ZXIiLCJfYWN0aW9uJGNvbmZpZyIsIl9hY3Rpb24kY29uZmlnMiIsIl9hY3Rpb24kY29uZmlnMyIsImVmZmVjdCIsIm5ld0VmZmVjdCIsInNldFByb3BzIiwicmVtb3ZlRWZmZWN0VXBkYXRlciIsIl9yZWYxMCIsImVmZmVjdFRvUmVtb3ZlIiwiZWZmZWN0SWQiLCJyZW9yZGVyRWZmZWN0VXBkYXRlciIsIl9yZWYxMSIsInVwZGF0ZUVmZmVjdFVwZGF0ZXIiLCJfcmVmMTIiLCJpZHgyIiwiZWZmZWN0T3JkZXJJZCIsIm5ld0VmZmVjdHMiLCJtYWtlTmV3QW5ub3RhdGlvbiIsIl9jb25maWcka2luZCIsIl9jb25maWckaWQiLCJfY29uZmlnJGlzVmlzaWJsZSIsIl9jb25maWckYXV0b1NpemUiLCJfY29uZmlnJGF1dG9TaXplWSIsIl9jb25maWckYW5jaG9yUG9pbnQiLCJfY29uZmlnJGxhYmVsIiwiX2NvbmZpZyRsaW5lQ29sb3IiLCJfY29uZmlnJGxpbmVXaWR0aCIsIl9jb25maWckdGV4dFdpZHRoIiwiX2NvbmZpZyR0ZXh0SGVpZ2h0IiwiX2NvbmZpZyR0ZXh0VmVydGljYWxBIiwiX2FybUxlbmd0aCIsIl9hbmdsZSIsIl9hcm1MZW5ndGgyIiwiX2FuZ2xlMiIsIl9hcm1MZW5ndGgzIiwiX2FuZ2xlMyIsIl9yYWRpdXNJbk1ldGVycyIsImtpbmQiLCJiYXNlIiwiYXV0b1NpemUiLCJhdXRvU2l6ZVkiLCJhbmNob3JQb2ludCIsImxpbmVDb2xvciIsImxpbmVXaWR0aCIsInRleHRXaWR0aCIsInRleHRIZWlnaHQiLCJ0ZXh0VmVydGljYWxBbGlnbiIsIlBPSU5UIiwiYXJtTGVuZ3RoIiwiYW5nbGUiLCJBUlJPVyIsIkNJUkNMRSIsInJhZGl1c0luTWV0ZXJzIiwiVEVYVCIsImFkZEFubm90YXRpb25VcGRhdGVyIiwibmV3QW5ub3RhdGlvbiIsInJlbW92ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjEzIiwiYSIsInVwZGF0ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjE0IiwibmV4dEFubm90YXRpb24iLCJuZXdBbm5vdGF0aW9ucyIsImR1cGxpY2F0ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjE1Iiwic2V0U2VsZWN0ZWRBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYxNiIsImlzRWRpdGluZ1RleHQiLCJyZW1vdmVEYXRhc2V0VXBkYXRlciIsImRhdGFzZXRLZXkiLCJfc3RhdGUkZGF0YXNldHMiLCJuZXdEYXRhc2V0cyIsImxheWVyc1RvUmVtb3ZlIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsImluZGV4T2YiLCJwdXNoIiwicmVtb3ZlRGF0YXNldEZyb21JbnRlcmFjdGlvbkNvbmZpZyIsIl9yZWYxNyIsIl9pbnRlcmFjdGlvbkNvbmZpZyIsIl9jb25maWckZmllbGRzVG9TaG93IiwidXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXIiLCJ1cGRhdGVPdmVybGF5QmxlbmRpbmdVcGRhdGVyIiwic2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXIiLCJ1cGRhdGVUYWJsZUNvbG9yVXBkYXRlciIsInVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIiLCJuZXdDb2xvciIsInJlc2V0TWFwQ29uZmlnVXBkYXRlciIsImluaXRpYWxTdGF0ZSIsInJlY2VpdmVNYXBDb25maWdVcGRhdGVyIiwiX3JlZjE4IiwiX3JlZjE4JHBheWxvYWQiLCJwYXlsb2FkIiwiX3JlZjE4JHBheWxvYWQkY29uZmlnIiwiX3JlZjE4JHBheWxvYWQkb3B0aW9uIiwidmlzU3RhdGUiLCJrZWVwRXhpc3RpbmdDb25maWciLCJtZXJnZWRTdGF0ZSIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJtZXJnZXIiLCJtZXJnZSIsInRvTWVyZ2VQcm9wIiwibGF5ZXJIb3ZlclVwZGF0ZXIiLCJpbmZvIiwiaW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyIiwiY29udHJhZGljdCIsImsiLCJsYXllckNsaWNrVXBkYXRlciIsInBpbm5lZCIsInBpY2tlZCIsIm1hcENsaWNrVXBkYXRlciIsIm1vdXNlTW92ZVVwZGF0ZXIiLCJfcmVmMTkiLCJldnQiLCJwb2ludCIsIm1vdXNlUG9zaXRpb24iLCJsbmdMYXQiLCJ0b2dnbGVTcGxpdE1hcFVwZGF0ZXIiLCJkdXBsaWNhdGUiLCJjbG9zZVNwZWNpZmljTWFwQXRJbmRleCIsIl9yZWYyMCIsInVwZGF0ZVZpc0RhdGFVcGRhdGVyIiwiY3JlYXRlRGF0YXNldFRhc2tzIiwibm90aWZpY2F0aW9uVGFza3MiLCJfcmVmMjEiLCJkYXRhc2V0SW5kZXgiLCJfcmVmMjEkaW5mbyIsInJlc3QiLCJfZXhjbHVkZWQyIiwidGFzayIsIm1lc3NhZ2UiLCJkYXRhc2V0c0FsbFNldHRsZWRUYXNrIiwiYWxsU2V0dGxlZCIsInJlc3VsdHMiLCJhZGRUb01hcE9wdGlvbnMiLCJzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlciIsImNoYW5nZSIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzVXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZCIsIm5ld0RhdGFFbnRyaWVzIiwic3RhdHVzIiwicmVhc29uIiwibGF5ZXJNZXJnZXJzIiwibSIsIndhaXRGb3JMYXllckRhdGEiLCJkYXRhc2V0TWVyZ2VycyIsInBvc3RNZXJnZXJQYXlsb2FkIiwiYXBwbHlNZXJnZXJzVXBkYXRlciIsIm1lcmdlU3RhdGVSZXN1bHQiLCJhbGxNZXJnZWQiLCJwb3N0TWVyZ2VVcGRhdGVyIiwibGF5ZXJWaXNDb25maWdGcm9tQWRkRGF0YU9wdGlvbnMiLCJwYXRjaCIsImxheWVyVmlzQ29uZmlnIiwiX3R5cGVvZiIsImZEYXRhSWQiLCJkYXRhc2V0RmlsdGVyZWQiLCJkYXRhRW1wdHkiLCJuZXdMYXllcnMiLCJhdXRvQ3JlYXRlTGF5ZXJzIiwiYWRkRGVmYXVsdExheWVycyIsInRvb2x0aXBGaWVsZHMiLCJhdXRvQ3JlYXRlVG9vbHRpcHMiLCJhZGREZWZhdWx0VG9vbHRpcHMiLCJ1cGRhdGVkRGF0YXNldHMiLCJjZW50ZXJNYXAiLCJib3VuZHMiLCJmaXRCb3VuZHNUYXNrIiwicmVuYW1lRGF0YXNldFVwZGF0ZXIiLCJBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTIiwidmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMiLCJ2YWxpZGF0ZWRQcm9wcyIsImVudHJpZXMiLCJfZW50cnkiLCJfc2xpY2VkVG9BcnJheSIsImV4aXN0aW5nIiwiX3N0YXRlJHNwbGl0TWFwcyRpbmRlIiwiaW5kZXhUb1JldHJpZXZlIiwibWFwTGF5ZXJzIiwibG9hZEZpbGVzVXBkYXRlciIsImZpbGVzIiwiX2FjdGlvbiRvbkZpbmlzaCIsIm9uRmluaXNoIiwiZnJvbSIsImluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzIiwiZmlsZUNhY2hlIiwiZmlsZXNUb0xvYWQiLCJsb2FkTmV4dEZpbGVVcGRhdGVyIiwibG9hZEZpbGVTdGVwU3VjY2Vzc1VwZGF0ZXIiLCJmaWxlTmFtZSIsIl9zdGF0ZSRmaWxlTG9hZGluZyIsInN0YXRlV2l0aFByb2dyZXNzIiwidXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIiLCJwcm9ncmVzcyIsInBlcmNlbnQiLCJzdGF0ZVdpdGhDYWNoZSIsIl9maWxlc1RvTG9hZCIsIl90b0FycmF5IiwiZmlsZSIsInJlbWFpbmluZ0ZpbGVzVG9Mb2FkIiwibWFrZUxvYWRGaWxlVGFzayIsImJpbWFwIiwiZ2VuIiwiY29udGVudCIsInByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXIiLCJfYWN0aW9uJHBheWxvYWQyIiwicGFyc2VQcm9ncmVzcyIsInByZXZQcm9ncmVzcyIsIm5leHRGaWxlQmF0Y2hVcGRhdGVyIiwiX3JlZjIyIiwiX2FjY3VtdWxhdGVkJGRhdGEiLCJfcmVmMjIkcGF5bG9hZCIsImFjY3VtdWxhdGVkIiwidXNlQXJyb3dQcm9ncmVzc2l2ZUxvYWRpbmciLCJlbmRzV2l0aCIsImRhdGEiLCJfcmVmMjMiLCJsb2FkRmlsZXNFcnJVcGRhdGVyIiwiX3JlZjI0IiwiX3N0YXRlJGZpbGVMb2FkaW5nMiIsImFwcGx5Q1BVRmlsdGVyVXBkYXRlciIsIl9yZWYyNSIsImRhdGFJZHMiLCJzZXRNYXBJbmZvVXBkYXRlciIsImVtcHR5IiwiZGVmYXVsdExheWVycyIsImZvdW5kTGF5ZXJzIiwibWVyZ2VkIiwiX3JlZjI3IiwiZml4ZWREb21haW4iLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNyIsIl9zdGF0ZSRmaWx0ZXJzIiwiYW5pbWF0YWJsZUxheWVycyIsImxheWVyRG9tYWlucyIsIm1lcmdlZERvbWFpbiIsIm1lcmdlZFRpbWVTdGVwcyIsImFwcGx5Iiwic29ydCIsInN5bmNlZEZpbHRlciIsIm5ld0FuaW1hdGlvbkRvbWFpbiIsInNldEVkaXRvck1vZGVVcGRhdGVyIiwiX3JlZjI4Iiwic2V0RmVhdHVyZXNVcGRhdGVyIiwiX3JlZjI5IiwiX2xhc3RGZWF0dXJlJHByb3BlcnRpIiwiX2xhc3RGZWF0dXJlJHByb3BlcnRpMiIsIl9yZWYyOSRmZWF0dXJlcyIsImxhc3RGZWF0dXJlIiwicHJvcGVydGllcyIsImlzQ2xvc2VkIiwic2hhcGUiLCJFRElUIiwiZmVhdHVyZSIsImZlYXR1cmVWYWx1ZSIsImZpbHRlcklkeCIsImZpbCIsInNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXIiLCJfcmVmMzAiLCJzZWxlY3Rpb25Db250ZXh0IiwiZGVsZXRlRmVhdHVyZVVwZGF0ZXIiLCJfcmVmMzEiLCJzZXRQb2x5Z29uRmlsdGVyTGF5ZXJVcGRhdGVyIiwibm9uZUZpbHRlckZlYXR1cmUiLCJfZmlsdGVyJGxheWVySWQiLCJpc0xheWVySW5jbHVkZWQiLCJzZXRQb2x5Z29uRmlsdGVyQWxsTGF5ZXJzVXBkYXRlciIsInZpc2libGVMYXllcklkcyIsImFsbExheWVySWRzIiwic29ydFRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWYzMiIsImNvbHVtbiIsInNvcnRNb2RlIiwiY3VycmVudE1vZGUiLCJBU0NFTkRJTkciLCJzb3J0ZWQiLCJwaW5UYWJsZUNvbHVtblVwZGF0ZXIiLCJfcmVmMzMiLCJjb3B5VGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjM0IiwiZmllbGRJZHgiLCJ0ZXh0IiwiZGF0YUNvbnRhaW5lciIsInJvdyIsInZhbHVlQXQiLCJqb2luIiwic2V0Q29sdW1uRGlzcGxheUZvcm1hdFVwZGF0ZXIiLCJfcmVmMzUiLCJmb3JtYXRzIiwiZGlzcGxheUZvcm1hdCIsIl9sYXllciRjb25maWciLCJjb2xvckZpZWxkIiwidG9nZ2xlRWRpdG9yVmlzaWJpbGl0eVVwZGF0ZXIiLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlciIsIl9yZWYzNiIsInVwZGF0ZXMiLCJjaGVja1RpbWVDb25maWdBcmdzIiwiYWxsb3dlZCIsInNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIiLCJfcmVmMzciLCJsYXllckZpbHRlcmVkSXRlbXNDaGFuZ2VVcGRhdGVyIiwiX2xheWVyJGZpbHRlcmVkSXRlbUNvIiwiZXZlbnQiLCJkZWNrZ2xMYXllcklkIiwiY291bnQiLCJmaWx0ZXJlZEl0ZW1Db3VudCIsIndtc0ZlYXR1cmVJbmZvVXBkYXRlciIsImZlYXR1cmVJbmZvIiwib2JqZWN0Iiwid21zRmVhdHVyZUluZm8iLCJfbmV3U3RhdGUkYW5pbWF0aW9uQ28iLCJfbmV3U3RhdGUkYW5pbWF0aW9uQ28yIiwiX2FjdGlvbiRlbmFibGUiLCJpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzIiwiaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyIiwiQm9vbGVhbiIsIm5ld0ZpbHRlckRvbWFpbiIsImludGVydmFsIiwiYWRqdXN0VGltZUZpbHRlckludGVydmFsIiwibmV3RmlsdGVyVmFsdWUiLCJzeW5jVGltZWxpbmVNb2RlIiwiZW5kIiwidmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZSIsIl9yZWYzOCIsIk1hdGgiLCJtYXgiLCJ0aW1lbGluZVZhbHVlIiwiZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIiLCJmcmVlIiwiX2ZpbHRlciRzeW5jVGltZWxpbmVNIiwibmV3TW9kZSIsInN0YXJ0IiwiaW50ZXJ2YWxJbmRleCIsImN1cnJlbnRJbmRleCIsIm1ldGEiLCJ0YXJnZXRUaW1lSW50ZXJ2YWwiLCJuZXdJbmRleCIsImhleFRpbGVJbnRlcnZhbCIsInVwZGF0ZWRQbG90VHlwZSIsImRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyIsImRhdGFJZFRvUmVwbGFjZSIsIl92YWx1ZSRjb25maWciLCJfdmFsdWUkY29uZmlnMiIsInJlcGxhY2VkIiwiZmluZENoaWxkRGF0YXNldElkcyIsIl92YWx1ZSRuZXdEYXRhc2V0IiwiY2hpbGREYXRhSWRzIiwibW92ZVZhbHVlVG9CZU1lcmdlZCIsInByb3BWYWx1ZXMiLCJfcmVmNDAiLCJzYXZlVW5tZXJnZWQiLCJzdGF0ZVJlbW92ZWQiLCJwcm9wVmFsdWUiLCJwIiwidG9CZU1lcmdlZCIsInJlcGxhY2VEYXRhc2V0QW5kRGVwcyIsImRhdGFJZFRvVXNlIiwicmVwbGFjZURhdGFzZXREZXBzSW5TdGF0ZSIsInByZXBhcmVTdGF0ZUZvckRhdGFzZXRSZXBsYWNlIiwiX25leHRTdGF0ZSRsYXllclRvQmVNIiwic2VyaWFsaXplZFN0YXRlIiwicHJlc2VydmVMYXllck9yZGVyIiwicHJlc2VydmVEYXRhc2V0T3JkZXIiLCJfc2VyaWFsaXplZFN0YXRlJHNwbGkiLCJfcmVmNDEiLCJhY2N1U3RhdGUiLCJfcmVmNDIiLCJyZXBsYWNlUGFyZW50RGF0YXNldElkcyIsImdldENoaWxkRGF0YXNldElkcyIsInByZXNlcnZlT3JkZXIiLCJ0b01lcmdlUHJvcHMiLCJzYXZlZFByb3BzIiwicmVwbGFjZWRTdGF0ZSIsIl9yZXBsYWNlZFN0YXRlJG1lcmdlciIsIm1lcmdlck9wdGlvbnMiLCJyZXBsYWNlZEl0ZW0iLCJyZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZSIsIml0ZW0iLCJfcmVmNDMiLCJjaGlsZERhdGFJZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92aXMtc3RhdGUtdXBkYXRlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtiYm94fSBmcm9tICdAdHVyZi9iYm94JztcbmltcG9ydCB0eXBlIHtBbGxHZW9KU09OfSBmcm9tICdAdHVyZi9oZWxwZXJzJztcbmltcG9ydCBjb3B5IGZyb20gJ2NvcHktdG8tY2xpcGJvYXJkJztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnZGVlcG1lcmdlJztcbmltcG9ydCB7Y29uc29sZSBhcyBDb25zb2xlfSBmcm9tICdnbG9iYWwvd2luZG93JztcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnbG9kYXNoL2Nsb25lRGVlcCc7XG5pbXBvcnQgZ2V0IGZyb20gJ2xvZGFzaC9nZXQnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoL2lzRXF1YWwnO1xuaW1wb3J0IHBpY2sgZnJvbSAnbG9kYXNoL3BpY2snO1xuaW1wb3J0IHVuaXEgZnJvbSAnbG9kYXNoL3VuaXEnO1xuaW1wb3J0IHhvciBmcm9tICdsb2Rhc2gveG9yJztcbmltcG9ydCBUYXNrLCB7ZGlzYWJsZVN0YWNrQ2FwdHVyaW5nLCB3aXRoVGFza30gZnJvbSAncmVhY3QtcGFsbS90YXNrcyc7XG4vLyBUYXNrc1xuaW1wb3J0IHtcbiAgREVMQVlfVEFTSyxcbiAgQUNUSU9OX1RBU0ssXG4gIExPQURfRklMRV9UQVNLLFxuICBQUk9DRVNTX0ZJTEVfREFUQSxcbiAgVU5XUkFQX1RBU0tcbn0gZnJvbSAnQGtlcGxlci5nbC90YXNrcyc7XG4vLyBBY3Rpb25zXG5pbXBvcnQge1xuICBhZGROb3RpZmljYXRpb24sXG4gIEFjdGlvblR5cGVzLFxuICBDcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1BheWxvYWQsXG4gIE1hcFN0YXRlQWN0aW9ucyxcbiAgUmVjZWl2ZU1hcENvbmZpZ1BheWxvYWQsXG4gIFZpc1N0YXRlQWN0aW9ucyxcbiAgYXBwbHlMYXllckNvbmZpZyxcbiAgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3MsXG4gIGxheWVyQ29uZmlnQ2hhbmdlLFxuICBsYXllclR5cGVDaGFuZ2UsXG4gIGxheWVyVmlzQ29uZmlnQ2hhbmdlLFxuICBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UsXG4gIGxvYWRGaWxlU3RlcFN1Y2Nlc3MsXG4gIGxvYWRGaWxlc0VycixcbiAgbG9hZEZpbGVzU3VjY2VzcyxcbiAgbG9hZE5leHRGaWxlLFxuICBuZXh0RmlsZUJhdGNoLFxuICBzZXRGaWx0ZXIsXG4gIHByb2Nlc3NGaWxlQ29udGVudCxcbiAgZml0Qm91bmRzIGFzIGZpdE1hcEJvdW5kcyxcbiAgdG9nZ2xlTGF5ZXJGb3JNYXAsXG4gIGFwcGx5RmlsdGVyQ29uZmlnLFxuICBTZXRMb2FkaW5nSW5kaWNhdG9yUGF5bG9hZFxufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuXG4vLyBVdGlsc1xuaW1wb3J0IHtcbiAgRklMVEVSX1VQREFURVJfUFJPUFMsXG4gIGFkZE5ld0xheWVyc1RvU3BsaXRNYXAsXG4gIHNuYXBUb01hcmtzLFxuICBhcHBseUZpbHRlckZpZWxkTmFtZSxcbiAgYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyxcbiAgYXJyYXlJbnNlcnQsXG4gIGNvbXB1dGVTcGxpdE1hcExheWVycyxcbiAgYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbixcbiAgZXJyb3JOb3RpZmljYXRpb24sXG4gIGZlYXR1cmVUb0ZpbHRlclZhbHVlLFxuICBmaWx0ZXJEYXRhc2V0Q1BVLFxuICBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIsXG4gIGdldERlZmF1bHRGaWx0ZXIsXG4gIGdldEZpbHRlcklkSW5GZWF0dXJlLFxuICBnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIsXG4gIGlzSW5SYW5nZSxcbiAgaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzUmdiQ29sb3IsXG4gIHBhcnNlRmllbGRWYWx1ZSxcbiAgcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzLFxuICBzZXQsXG4gIHVwZGF0ZUZpbHRlclBsb3QsXG4gIHJlbW92ZUZpbHRlclBsb3QsXG4gIGlzTGF5ZXJBbmltYXRhYmxlLFxuICBpc1NpZGVGaWx0ZXIsXG4gIGdldEFwcGxpY2F0aW9uQ29uZmlnXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtnZW5lcmF0ZUhhc2hJZCwgdG9BcnJheSwgYXJyYXlNb3ZlfSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG4vLyBNZXJnZXJzXG5pbXBvcnQge1xuICBBTklNQVRJT05fV0lORE9XLFxuICBCQVNFX1NQRUVELFxuICBDT01QQVJFX1RZUEVTLFxuICBERUZBVUxUX1RFWFRfTEFCRUwsXG4gIEVESVRPUl9NT0RFUyxcbiAgRklMVEVSX1RZUEVTLFxuICBGSUxURVJfVklFV19UWVBFUyxcbiAgRlBTLFxuICBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCxcbiAgRElTVEFOQ0VfRk9HX1RZUEUsXG4gIFNVUkZBQ0VfRk9HX1RZUEUsXG4gIE1BWF9ERUZBVUxUX1RPT0xUSVBTLFxuICBQTE9UX1RZUEVTLFxuICBTT1JUX09SREVSLFxuICBTWU5DX1RJTUVMSU5FX01PREVTLFxuICBDSEFOTkVMX1NDQUxFUyxcbiAgU0NBTEVfVFlQRVMsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9LSU5ELFxuICBJTklUSUFMX0FOTk9UQVRJT05fQU5HTEUsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RILFxuICBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9XSURUSCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfSEVJR0hULFxuICBJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IsXG4gIEFubm90YXRpb25LaW5kXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7TEFZRVJfSURfTEVOR1RILCBMYXllciwgTGF5ZXJDbGFzc2VzfSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge1xuICBhcHBseV8sXG4gIGNvbXBvc2VfLFxuICBmaWx0ZXJPdXRCeUlkLFxuICBtZXJnZV8sXG4gIHBheWxvYWRfLFxuICBwaWNrXyxcbiAgcmVtb3ZlRWxlbWVudEF0SW5kZXgsXG4gIHN3YXBfXG59IGZyb20gJy4vY29tcG9zZXItaGVscGVycyc7XG5pbXBvcnQge2lzVmFsaWRNZXJnZXIsIG1lcmdlU3RhdGVGcm9tTWVyZ2Vyc30gZnJvbSAnLi9tZXJnZXItaGFuZGxlcic7XG5pbXBvcnQge1xuICBWSVNfU1RBVEVfTUVSR0VSUyxcbiAgY3JlYXRlTGF5ZXJGcm9tQ29uZmlnLFxuICBwYXJzZUxheWVyQ29uZmlnLFxuICBzZXJpYWxpemVGaWx0ZXIsXG4gIHNlcmlhbGl6ZUxheWVyLFxuICBzZXJpYWxpemVWaXNTdGF0ZSxcbiAgdmFsaWRhdGVMYXllcldpdGhEYXRhXG59IGZyb20gJy4vdmlzLXN0YXRlLW1lcmdlcic7XG5cbmltcG9ydCBLZXBsZXJHTFNjaGVtYSwge01lcmdlciwgUG9zdE1lcmdlclBheWxvYWQsIFZpc1N0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuXG5pbXBvcnQge1xuICBGaWx0ZXIsXG4gIEludGVyYWN0aW9uQ29uZmlnLFxuICBBbmltYXRpb25Db25maWcsXG4gIEZpbHRlckFuaW1hdGlvbkNvbmZpZyxcbiAgRWRpdG9yLFxuICBGaWVsZCxcbiAgTGF5ZXJWaXNDb25maWcsXG4gIFRpbWVSYW5nZUZpbHRlcixcbiAgQW5ub3RhdGlvbixcbiAgQW5ub3RhdGlvblByb3BzUGFydGlhbFxufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7TG9hZGVyfSBmcm9tICdAbG9hZGVycy5nbC9sb2FkZXItdXRpbHMnO1xuXG5pbXBvcnQge1xuICBEYXRhc2V0cyxcbiAgYXNzaWduR3B1Q2hhbm5lbCxcbiAgY29weVRhYmxlQW5kVXBkYXRlLFxuICBjcmVhdGVOZXdEYXRhRW50cnksXG4gIHBpblRhYmxlQ29sdW1ucyxcbiAgc2V0RmlsdGVyR3B1TW9kZSxcbiAgc29ydERhdGFzZXRCeUNvbHVtblxufSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7ZmluZEZpZWxkc1RvU2hvd30gZnJvbSAnLi9pbnRlcmFjdGlvbi11dGlscyc7XG5pbXBvcnQge1xuICBjYWxjdWxhdGVMYXllckRhdGEsXG4gIGZpbmREZWZhdWx0TGF5ZXIsXG4gIGdldExheWVyT3JkZXJGcm9tTGF5ZXJzLFxuICBtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMsXG4gIGdldE5ld0xheWVyR3JvdXAsXG4gIGFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlcixcbiAgcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyLFxuICBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIsXG4gIGZpbmRQYXJlbnRHcm91cEZvckxheWVyLFxuICBnZXRJbmRleEZyb21MYXllckVudHJ5SWQsXG4gIHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIsXG4gIGdldEZsYXRMYXllck9yZGVyLFxuICByZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlclxufSBmcm9tICcuL2xheWVyLXV0aWxzJztcbmltcG9ydCB7Z2V0UHJvcFZhbHVlVG9NZXJnZXIsIGhhc1Byb3BzVG9NZXJnZX0gZnJvbSAnLi9tZXJnZXItaGFuZGxlcic7XG5pbXBvcnQge21lcmdlRGF0YXNldHNCeU9yZGVyfSBmcm9tICcuL3Zpcy1zdGF0ZS1tZXJnZXInO1xuaW1wb3J0IHtcbiAgZml4RWZmZWN0T3JkZXIsXG4gIGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzLFxuICBnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLFxuICBtZXJnZVRpbWVEb21haW5zLFxuICBhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93LFxuICB1cGRhdGVUaW1lRmlsdGVyUGxvdFR5cGUsXG4gIGdldERlZmF1bHRUaW1lRm9ybWF0LFxuICBMYXllclRvRmlsdGVyVGltZUludGVydmFsLFxuICBUSU1FX0lOVEVSVkFMU19PUkRFUkVELFxuICBtZXJnZUZpbHRlckRvbWFpbixcbiAgaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtjcmVhdGVFZmZlY3R9IGZyb20gJ0BrZXBsZXIuZ2wvZWZmZWN0cyc7XG5pbXBvcnQge1BheWxvYWRBY3Rpb259IGZyb20gJ0ByZWR1eGpzL3Rvb2xraXQnO1xuXG5pbXBvcnQge2ZpbmRNYXBCb3VuZHN9IGZyb20gJy4vZGF0YS11dGlscyc7XG5cbi8vIHJlYWN0LXBhbG1cbi8vIGRpc2FibGUgY2FwdHVyZSBleGNlcHRpb24gZm9yIHJlYWN0LXBhbG0gY2FsbCB0byB3aXRoVGFza1xuZGlzYWJsZVN0YWNrQ2FwdHVyaW5nKCk7XG5cbi8qKlxuICogVXBkYXRlcnMgZm9yIGB2aXNTdGF0ZWAgcmVkdWNlci4gQ2FuIGJlIHVzZWQgaW4geW91ciByb290IHJlZHVjZXIgdG8gZGlyZWN0bHkgbW9kaWZ5IGtlcGxlci5nbCdzIHN0YXRlLlxuICogUmVhZCBtb3JlIGFib3V0IFtVc2luZyB1cGRhdGVyc10oLi4vYWR2YW5jZWQtdXNhZ2UvdXNpbmctdXBkYXRlcnMubWQpXG4gKlxuICogQHB1YmxpY1xuICogQGV4YW1wbGVcbiAqXG4gKiBpbXBvcnQga2VwbGVyR2xSZWR1Y2VyLCB7dmlzU3RhdGVVcGRhdGVyc30gZnJvbSAnQGtlcGxlci5nbC9yZWR1Y2Vycyc7XG4gKiAvLyBSb290IFJlZHVjZXJcbiAqIGNvbnN0IHJlZHVjZXJzID0gY29tYmluZVJlZHVjZXJzKHtcbiAqICBrZXBsZXJHbDoga2VwbGVyR2xSZWR1Y2VyLFxuICogIGFwcDogYXBwUmVkdWNlclxuICogfSk7XG4gKlxuICogY29uc3QgY29tcG9zZWRSZWR1Y2VyID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAqICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gKiAgICBjYXNlICdDTElDS19CVVRUT04nOlxuICogICAgICByZXR1cm4ge1xuICogICAgICAgIC4uLnN0YXRlLFxuICogICAgICAgIGtlcGxlckdsOiB7XG4gKiAgICAgICAgICAuLi5zdGF0ZS5rZXBsZXJHbCxcbiAqICAgICAgICAgIGZvbzoge1xuICogICAgICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wuZm9vLFxuICogICAgICAgICAgICAgdmlzU3RhdGU6IHZpc1N0YXRlVXBkYXRlcnMuZW5sYXJnZUZpbHRlclVwZGF0ZXIoXG4gKiAgICAgICAgICAgICAgIHN0YXRlLmtlcGxlckdsLmZvby52aXNTdGF0ZSxcbiAqICAgICAgICAgICAgICAge2lkeDogMH1cbiAqICAgICAgICAgICAgIClcbiAqICAgICAgICAgIH1cbiAqICAgICAgICB9XG4gKiAgICAgIH07XG4gKiAgfVxuICogIHJldHVybiByZWR1Y2VycyhzdGF0ZSwgYWN0aW9uKTtcbiAqIH07XG4gKlxuICogZXhwb3J0IGRlZmF1bHQgY29tcG9zZWRSZWR1Y2VyO1xuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbi8vIEB0cy1pZ25vcmVcbmNvbnN0IHZpc1N0YXRlVXBkYXRlcnMgPSBudWxsO1xuLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRJbnRlcmFjdGlvbkNvbmZpZzogSW50ZXJhY3Rpb25Db25maWcgPSB7XG4gIHRvb2x0aXA6IHtcbiAgICBpZDogJ3Rvb2x0aXAnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLnRvb2x0aXAnLFxuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgY29uZmlnOiB7XG4gICAgICBmaWVsZHNUb1Nob3c6IHt9LFxuICAgICAgY29tcGFyZU1vZGU6IGZhbHNlLFxuICAgICAgY29tcGFyZVR5cGU6IENPTVBBUkVfVFlQRVMuQUJTT0xVVEVcbiAgICB9XG4gIH0sXG4gIGdlb2NvZGVyOiB7XG4gICAgaWQ6ICdnZW9jb2RlcicsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuZ2VvY29kZXInLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIHBvc2l0aW9uOiBudWxsLFxuICAgIGNvbmZpZzoge1xuICAgICAgbGltaXRTZWFyY2g6IGZhbHNlXG4gICAgfVxuICB9LFxuICBicnVzaDoge1xuICAgIGlkOiAnYnJ1c2gnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmJydXNoJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBjb25maWc6IHtcbiAgICAgIC8vIHNpemUgaXMgaW4ga21cbiAgICAgIHNpemU6IDAuNVxuICAgIH1cbiAgfSxcbiAgY29vcmRpbmF0ZToge1xuICAgIGlkOiAnY29vcmRpbmF0ZScsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuY29vcmRpbmF0ZScsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgcG9zaXRpb246IG51bGxcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQU5JTUFUSU9OX0NPTkZJRzogQW5pbWF0aW9uQ29uZmlnID0ge1xuICBkb21haW46IG51bGwsXG4gIGN1cnJlbnRUaW1lOiBudWxsLFxuICBzcGVlZDogMSxcbiAgaXNBbmltYXRpbmc6IGZhbHNlLFxuICB0aW1lU3RlcHM6IG51bGwsXG4gIHRpbWVGb3JtYXQ6IG51bGwsXG4gIHRpbWV6b25lOiBudWxsLFxuICBkZWZhdWx0VGltZUZvcm1hdDogbnVsbCxcbiAgaGlkZUNvbnRyb2w6IGZhbHNlLFxuICBkdXJhdGlvbjogbnVsbFxufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfRURJVE9SOiBFZGl0b3IgPSB7XG4gIG1vZGU6IEVESVRPUl9NT0RFUy5EUkFXX1BPTFlHT04sXG4gIGZlYXR1cmVzOiBbXSxcbiAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsLFxuICB2aXNpYmxlOiB0cnVlXG59O1xuXG4vKipcbiAqIERlZmF1bHQgaW5pdGlhbCBgdmlzU3RhdGVgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQGNvbnN0YW50XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBJTklUSUFMX1ZJU19TVEFURTogVmlzU3RhdGUgPSB7XG4gIC8vIG1hcCBpbmZvXG4gIG1hcEluZm86IHtcbiAgICB0aXRsZTogJycsXG4gICAgZGVzY3JpcHRpb246ICcnXG4gIH0sXG4gIC8vIGxheWVyc1xuICBsYXllcnM6IFtdLFxuICBsYXllckRhdGE6IFtdLFxuICBsYXllclRvQmVNZXJnZWQ6IFtdLFxuICBsYXllck9yZGVyOiBbXSxcbiAgbGF5ZXJPcmRlclRvQmVNZXJnZWQ6IG51bGwsXG5cbiAgLy8gZmlsdGVyc1xuICBmaWx0ZXJzOiBbXSxcbiAgZmlsdGVyVG9CZU1lcmdlZDogW10sXG5cbiAgLy8gYSBjb2xsZWN0aW9uIG9mIG11bHRpcGxlIGRhdGFzZXRcbiAgZGF0YXNldHM6IHt9LFxuICBlZGl0aW5nRGF0YXNldDogdW5kZWZpbmVkLFxuXG4gIC8vIGVmZmVjdHNcbiAgZWZmZWN0czogW10sXG4gIGVmZmVjdE9yZGVyOiBbXSxcblxuICAvLyBhbm5vdGF0aW9uc1xuICBhbm5vdGF0aW9uczogW10sXG4gIGFubm90YXRpb25zVG9CZU1lcmdlZDogW10sXG4gIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBudWxsLFxuICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDogZmFsc2UsXG5cbiAgaW50ZXJhY3Rpb25Db25maWc6IGRlZmF1bHRJbnRlcmFjdGlvbkNvbmZpZyxcbiAgaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkOiB7fSxcblxuICBsYXllckJsZW5kaW5nOiAnbm9ybWFsJyxcbiAgb3ZlcmxheUJsZW5kaW5nOiAnbm9ybWFsJyxcbiAgaG92ZXJJbmZvOiB1bmRlZmluZWQsXG4gIGNsaWNrZWQ6IHVuZGVmaW5lZCxcbiAgbW91c2VQb3M6IHt9LFxuICBtYXhEZWZhdWx0VG9vbHRpcHM6IE1BWF9ERUZBVUxUX1RPT0xUSVBTLFxuXG4gIC8vIHRoaXMgaXMgdXNlZCB3aGVuIHVzZXIgc3BsaXQgbWFwc1xuICBzcGxpdE1hcHM6IFtcbiAgICAvLyB0aGlzIHdpbGwgY29udGFpbiBhIGxpc3Qgb2Ygb2JqZWN0cyB0b1xuICAgIC8vIGRlc2NyaWJlIHRoZSBzdGF0ZSBvZiBsYXllciBhdmFpbGFiaWxpdHkgYW5kIHZpc2liaWxpdHkgZm9yIGVhY2ggbWFwXG4gICAgLy8gW1xuICAgIC8vICAge1xuICAgIC8vICAgICAgbGF5ZXJzOiB7bGF5ZXJfaWQ6IHRydWUgfCBmYWxzZX1cbiAgICAvLyAgIH1cbiAgICAvLyBdXG4gIF0sXG4gIHNwbGl0TWFwc1RvQmVNZXJnZWQ6IFtdLFxuICBpc01lcmdpbmdEYXRhc2V0czoge30sXG4gIC8vIGRlZmF1bHRzIGxheWVyIGNsYXNzZXNcbiAgbGF5ZXJDbGFzc2VzOiBMYXllckNsYXNzZXMsXG5cbiAgLy8gZGVmYXVsdCBhbmltYXRpb25cbiAgLy8gdGltZSBpbiB1bml4IHRpbWVzdGFtcCAobWlsbGlzZWNvbmRzKSAodGhlIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIHRoZSBVbml4IEVwb2NoKVxuICBhbmltYXRpb25Db25maWc6IERFRkFVTFRfQU5JTUFUSU9OX0NPTkZJRyxcblxuICBlZGl0b3I6IERFRkFVTFRfRURJVE9SLFxuXG4gIGZpbGVMb2FkaW5nOiBmYWxzZSxcbiAgZmlsZUxvYWRpbmdQcm9ncmVzczoge30sXG4gIC8vIGZvciBsb2FkaW5nIGRhdGFzZXRzXG4gIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZTogMCxcblxuICBsb2FkZXJzOiBbXSxcbiAgbG9hZE9wdGlvbnM6IHt9LFxuXG4gIC8vIHZpc1N0YXRlTWVyZ2Vyc1xuICBtZXJnZXJzOiBWSVNfU1RBVEVfTUVSR0VSUyxcblxuICAvLyBrZXBsZXIgc2NoZW1hc1xuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hXG59O1xuXG5leHBvcnQgY29uc3QgQUNUSU9OX1RBU0tfRklUX0JPVU5EUyA9IFRhc2suZnJvbUNhbGxiYWNrKFxuICAoXywgY2IpID0+IGNiKCksXG5cbiAgJ0FDVElPTl9UQVNLX0ZJVF9CT1VORFMnXG4pO1xuXG5leHBvcnQgY29uc3QgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTiA9IFRhc2suZnJvbUNhbGxiYWNrKFxuICAoXywgY2IpID0+IGNiKCksXG5cbiAgJ0FDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04nXG4pO1xuXG50eXBlIFVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YVR5cGUgPSB7XG4gIGxheWVyczogTGF5ZXJbXTtcbiAgbGF5ZXJEYXRhOiBhbnlbXTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHN0YXRlIHdpdGggdXBkYXRlZCBsYXllciBhbmQgbGF5ZXJEYXRhXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhPFMgZXh0ZW5kcyBVcGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGFUeXBlPihcbiAgc3RhdGU6IFMsXG4gIHtsYXllckRhdGEsIGxheWVyLCBpZHh9OiB7bGF5ZXJEYXRhPzogYW55OyBsYXllcjogTGF5ZXI7IGlkeDogbnVtYmVyfVxuKTogUyB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBzdGF0ZS5sYXllcnMubWFwKChseXIsIGkpID0+IChpID09PSBpZHggPyBsYXllciA6IGx5cikpLFxuICAgIGxheWVyRGF0YTogbGF5ZXJEYXRhXG4gICAgICA/IHN0YXRlLmxheWVyRGF0YS5tYXAoKGQsIGkpID0+IChpID09PSBpZHggPyBsYXllckRhdGEgOiBkKSlcbiAgICAgIDogc3RhdGUubGF5ZXJEYXRhXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIGxheWVyOiBMYXllcik6IFMge1xuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgaWYgKHN0YXRlLnNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgc3BsaXRNYXBzOiBsYXllci5jb25maWcuaXNWaXNpYmxlXG4gICAgICAgID8gYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcChzdGF0ZS5zcGxpdE1hcHMsIGxheWVyKVxuICAgICAgICA6IHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyhzdGF0ZS5zcGxpdE1hcHMsIGxheWVyKVxuICAgIH07XG4gIH1cblxuICBpZiAobGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIENvbXBhcmVzIHR3byBvYmplY3RzIChvciBhcnJheXMpIGFuZCByZXR1cm5zIGEgbmV3IG9iamVjdCB3aXRoIG9ubHkgdGhlXG4gKiBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSBjaGFuZ2VkIGJldHdlZW4gdGhlIHR3byBvYmplY3RzLlxuICovXG5mdW5jdGlvbiBwaWNrQ2hhbmdlZFByb3BzPFQ+KHByZXY6IFQsIG5leHQ6IFQpOiBQYXJ0aWFsPFQ+IHtcbiAgY29uc3QgY2hhbmdlZFByb3BzOiBQYXJ0aWFsPFQ+ID0ge307XG4gIGNvbnN0IHBpY2tQcm9wc09mID0gb2JqID0+IHtcbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VkUHJvcHMsIGtleSkgJiZcbiAgICAgICAgIWlzRXF1YWwocHJldltrZXldLCBuZXh0W2tleV0pXG4gICAgICApIHtcbiAgICAgICAgY2hhbmdlZFByb3BzW2tleV0gPSBuZXh0W2tleV07XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIHBpY2tQcm9wc09mKHByZXYpO1xuICBwaWNrUHJvcHNPZihuZXh0KTtcbiAgcmV0dXJuIGNoYW5nZWRQcm9wcztcbn1cblxuY29uc3QgVklTVUFMX0NIQU5ORUxfUFJPUF9UWVBFUyA9IFsnZmllbGQnLCAnc2NhbGUnLCAnZG9tYWluJywgJ2FnZ3JlZ2F0aW9uJ107XG5cbi8qKlxuICogQXBwbHkgbGF5ZXIgY29uZmlnXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5LCBtYXgtc3RhdGVtZW50c1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5TGF5ZXJDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFwcGx5TGF5ZXJDb25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllcklkLCBuZXdMYXllckNvbmZpZywgbGF5ZXJJbmRleH0gPSBhY3Rpb247XG4gIGNvbnN0IG5ld1BhcnNlZExheWVyID1cbiAgICAvLyB3aWxsIG1vdmUgdmlzdWFsQ2hhbm5lbHMgdG8gdGhlIGNvbmZpZyBwcm9wXG4gICAgcGFyc2VMYXllckNvbmZpZyhzdGF0ZS5zY2hlbWEsIG5ld0xheWVyQ29uZmlnKTtcbiAgY29uc3Qgb2xkTGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IG9sZExheWVySWQpO1xuICBpZiAoIW9sZExheWVyIHx8ICFuZXdQYXJzZWRMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAobGF5ZXJJbmRleCAhPT0gbnVsbCAmJiBsYXllckluZGV4ICE9PSB1bmRlZmluZWQgJiYgc3RhdGUubGF5ZXJzW2xheWVySW5kZXhdICE9PSBvbGRMYXllcikge1xuICAgIC8vIGxheWVySW5kZXggaXMgcHJvdmlkZWQsIGJ1dCBpdCBkb2Vzbid0IG1hdGNoIHRoZSBvbGRMYXllclxuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbbmV3UGFyc2VkTGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyIGlzIHZhbGlkIGFuZCBjb252ZXJ0IGl0IHRvIExheWVyXG4gIGNvbnN0IG5ld0xheWVyID0gdmFsaWRhdGVMYXllcldpdGhEYXRhKGRhdGFzZXQsIG5ld1BhcnNlZExheWVyLCBzdGF0ZS5sYXllckNsYXNzZXMpO1xuICBpZiAoIW5ld0xheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IG5leHRTdGF0ZSA9IHN0YXRlO1xuXG4gIGlmIChuZXdMYXllci50eXBlICYmIG5ld0xheWVyLnR5cGUgIT09IG9sZExheWVyLnR5cGUpIHtcbiAgICBjb25zdCBvbGRMYXllckluZGV4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVySWQpO1xuICAgIGlmIChvbGRMYXllckluZGV4ID49IDApIHtcbiAgICAgIG5leHRTdGF0ZSA9IGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIobmV4dFN0YXRlLCBsYXllclR5cGVDaGFuZ2Uob2xkTGF5ZXIsIG5ld0xheWVyLnR5cGUpKTtcbiAgICAgIC8vIGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIgY2hhbmdlcyB0aGUgaWQgb2YgdGhlIGxheWVyLCBzbyB3ZSBuZWVkIHRvIG9idGFpbiB0aGUgbmV3IGlkXG4gICAgICAvLyBidXQgZmlyc3QgbWFrZSBzdXJlIHRoYXQgdGhlIGxheWVyIHdhcyBub3QgcmVtb3ZlZFxuICAgICAgaWYgKG5leHRTdGF0ZS5sYXllcnMubGVuZ3RoID09PSBzdGF0ZS5sYXllcnMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IG5ld0xheWVySWQgPSBuZXh0U3RhdGUubGF5ZXJzW29sZExheWVySW5kZXhdLmlkO1xuICAgICAgICBuZXh0U3RhdGUgPSBhcHBseUxheWVyQ29uZmlnVXBkYXRlcihcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgYXBwbHlMYXllckNvbmZpZyhuZXdMYXllcklkLCB7Li4ubmV3TGF5ZXJDb25maWcsIGlkOiBuZXdMYXllcklkfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgfVxuXG4gIC8vIHNlcmlhbGl6ZUxheWVyKCkgbWlnaHQgcmV0dXJuIG51bGwgaWYgdGhlIG9sZCBsYXllciBpcyBub3QgdmFsaWQsXG4gIC8vIHdlIHNob3VsZCBzdGlsbCBhcHBseSB0aGUgY2hhbmdlcyBpbiB0aGF0IGNhc2VcbiAgY29uc3Qgc2VyaWFsaXplZE9sZExheWVyID0gc2VyaWFsaXplTGF5ZXIob2xkTGF5ZXIsIHN0YXRlLnNjaGVtYSkgPz8ge2NvbmZpZzoge319O1xuICBjb25zdCBzZXJpYWxpemVkTmV3TGF5ZXIgPSBzZXJpYWxpemVMYXllcihuZXdMYXllciwgc3RhdGUuc2NoZW1hKTtcbiAgaWYgKCFzZXJpYWxpemVkTmV3TGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKCFpc0VxdWFsKHNlcmlhbGl6ZWRPbGRMYXllciwgc2VyaWFsaXplZE5ld0xheWVyKSkge1xuICAgIGNvbnN0IGNoYW5nZWQgPSBwaWNrQ2hhbmdlZFByb3BzKHNlcmlhbGl6ZWRPbGRMYXllci5jb25maWcsIHNlcmlhbGl6ZWROZXdMYXllci5jb25maWcpO1xuXG4gICAgaWYgKCd2aXNDb25maWcnIGluIGNoYW5nZWQpIHtcbiAgICAgIGlmIChjaGFuZ2VkLnZpc0NvbmZpZykge1xuICAgICAgICBuZXh0U3RhdGUgPSBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgIGxheWVyVmlzQ29uZmlnQ2hhbmdlKG9sZExheWVyLCBjaGFuZ2VkLnZpc0NvbmZpZylcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGRlbGV0ZSBjaGFuZ2VkLnZpc0NvbmZpZztcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyhvbGRMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaChjaGFubmVsTmFtZSA9PiB7XG4gICAgICBjb25zdCBjaGFubmVsID0gb2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbE5hbWVdO1xuICAgICAgY29uc3QgY2hhbm5lbFByb3BOYW1lcyA9IFZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMubWFwKHByb3AgPT4gY2hhbm5lbFtwcm9wXSk7XG4gICAgICBpZiAoY2hhbm5lbFByb3BOYW1lcy5zb21lKHByb3AgPT4gcHJvcCBpbiBjaGFuZ2VkKSkge1xuICAgICAgICBuZXh0U3RhdGUgPSBsYXllclZpc3VhbENoYW5uZWxDaGFuZ2VVcGRhdGVyKFxuICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UoXG4gICAgICAgICAgICBvbGRMYXllcixcbiAgICAgICAgICAgIHBpY2sobmV3TGF5ZXIuY29uZmlnLCBjaGFubmVsUHJvcE5hbWVzKSxcbiAgICAgICAgICAgIGNoYW5uZWxOYW1lXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgY2hhbm5lbFByb3BOYW1lcykge1xuICAgICAgICAgIGRlbGV0ZSBjaGFuZ2VkW3Byb3BdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoY2hhbmdlZCkubGVuZ3RoID4gMCkge1xuICAgICAgbmV4dFN0YXRlID0gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKFxuICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgIGxheWVyQ29uZmlnQ2hhbmdlKG9sZExheWVyLCBwaWNrKG5ld0xheWVyLmNvbmZpZywgT2JqZWN0LmtleXMoY2hhbmdlZCkpKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVsYXllclZpc2liaWx0eShzdGF0ZTogVmlzU3RhdGUsIG5ld0xheWVyOiBMYXllciwgaXNWaXNpYmxlPzogYm9vbGVhbik6IFZpc1N0YXRlIHtcbiAgbGV0IG5ld1N0YXRlID0gdXBkYXRlU3RhdGVPbkxheWVyVmlzaWJpbGl0eUNoYW5nZShzdGF0ZSwgbmV3TGF5ZXIpO1xuICBjb25zdCBmaWx0ZXJJbmRleCA9IGZpbHRlclN5bmNlZFdpdGhUaW1lbGluZShzdGF0ZSk7XG4gIGlmIChpc0xheWVyQW5pbWF0YWJsZShuZXdMYXllcikgJiYgZmlsdGVySW5kZXggIT09IC0xKSB7XG4gICAgLy8gaWYgbGF5ZXIgaXMgZ29pbmcgdG8gYmUgdmlzaWJsZSB3ZSBzeW5jIHdpdGggZmlsdGVyIG90aGVyd2lzZSB3ZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgb3RoZXIgYW5pbWF0YWJsZSBsYXllcnMgZXhpc3RzIGFuZCBhcmUgdmlzaWJsZVxuICAgIG5ld1N0YXRlID0gc3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySW5kZXgsXG4gICAgICBlbmFibGU6IGlzVmlzaWJsZSA/IGlzVmlzaWJsZSA6IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKHN0YXRlLmxheWVycykubGVuZ3RoID4gMFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYmFzZSBjb25maWc6IGRhdGFJZCwgbGFiZWwsIGNvbHVtbiwgaXNWaXNpYmxlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBwcm9wcyA9IE9iamVjdC5rZXlzKGFjdGlvbi5uZXdDb25maWcpO1xuICBpZiAoXG4gICAgdHlwZW9mIGFjdGlvbi5uZXdDb25maWcuZGF0YUlkID09PSAnc3RyaW5nJyAmJlxuICAgIGFjdGlvbi5uZXdDb25maWcuZGF0YUlkICE9PSBvbGRMYXllci5jb25maWcuZGF0YUlkXG4gICkge1xuICAgIGNvbnN0IHtkYXRhSWQsIC4uLnJlc3RDb25maWd9ID0gYWN0aW9uLm5ld0NvbmZpZztcbiAgICBjb25zdCBzdGF0ZVdpdGhEYXRhSWQgPSBsYXllckRhdGFJZENoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICAgIG9sZExheWVyLFxuICAgICAgbmV3Q29uZmlnOiB7ZGF0YUlkfVxuICAgIH0pO1xuICAgIGNvbnN0IG5leHRMYXllciA9IHN0YXRlV2l0aERhdGFJZC5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgICByZXR1cm4gbmV4dExheWVyICYmIE9iamVjdC5rZXlzKHJlc3RDb25maWcpLmxlbmd0aFxuICAgICAgPyBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGVXaXRoRGF0YUlkLCB7b2xkTGF5ZXI6IG5leHRMYXllciwgbmV3Q29uZmlnOiByZXN0Q29uZmlnfSlcbiAgICAgIDogc3RhdGVXaXRoRGF0YUlkO1xuICB9XG5cbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoYWN0aW9uLm5ld0NvbmZpZyk7XG5cbiAgbGV0IGxheWVyRGF0YTtcblxuICBpZiAobmV3TGF5ZXIuc2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhKHByb3BzKSkge1xuICAgIGNvbnN0IG9sZExheWVyRGF0YSA9IHN0YXRlLmxheWVyRGF0YVtpZHhdO1xuXG4gICAgY29uc3QgdXBkYXRlTGF5ZXJEYXRhUmVzdWx0ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcbiAgICBuZXdMYXllciA9IHVwZGF0ZUxheWVyRGF0YVJlc3VsdC5sYXllcjtcbiAgICBsYXllckRhdGEgPSB1cGRhdGVMYXllckRhdGFSZXN1bHQubGF5ZXJEYXRhO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGlmICgnaXNWaXNpYmxlJyBpbiBhY3Rpb24ubmV3Q29uZmlnKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVsYXllclZpc2liaWx0eShuZXdTdGF0ZSwgbmV3TGF5ZXIsIGFjdGlvbi5uZXdDb25maWcuaXNWaXNpYmxlKTtcbiAgfVxuXG4gIGlmICgnY29sdW1ucycgaW4gYWN0aW9uLm5ld0NvbmZpZyAmJiBuZXdMYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICAvLyBUT0RPOiBTaGFuLCBtYWtlIHRoZSBhbmltYXRpb24gY29uZmlnIGZ1bmN0aW9uIG1vcmUgcm9idXN0XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge1xuICAgIGxheWVyOiBuZXdMYXllcixcbiAgICBsYXllckRhdGEsXG4gICAgaWR4XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIGFjdGlvbik6IFMge1xuICBjb25zdCB7b2xkTGF5ZXIsIHByb3AsIHZhbHVlfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcblxuICBjb25zdCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICBhbmltYXRpb246IHtcbiAgICAgIC4uLm9sZExheWVyLmNvbmZpZy5hbmltYXRpb24sXG4gICAgICBbcHJvcF06IHZhbHVlXG4gICAgfVxuICB9KTtcblxuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCBzdGF0ZS5sYXllckRhdGFbaWR4XSk7XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllcklkLCBpc1Zpc2libGUsIHNwbGl0TWFwSWRcbiAqIGhhbmRsZXMgdHdvIGNhc2VzOlxuICogMSkgdG9nZ2xlIHRoZSB2aXNpYmlsaXR5IG9mIGxvY2FsIFNwbGl0TWFwIGxheWVyICh2aXNTdGF0ZS5zcGxpdE1hcC5sYXllcnMpXG4gKiAyKSB0b2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgZ2xvYmFsIGxheWVyICh2aXNTdGF0ZS5sYXllcnMpXG5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUb2dnbGVWaXNpYmlsaXR5VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bGF5ZXJJZCwgaXNWaXNpYmxlLCBzcGxpdE1hcElkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChkID0+IGQuaWQgPT09IGxheWVySWQpO1xuXG4gIGlmICghbGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcblxuICBpZiAoc3BsaXRNYXBJZCkge1xuICAgIC8vIFtjYXNlIDFdOiB0b2dnbGUgbG9jYWwgbGF5ZXIgdmlzaWJpbGl0eSBmb3IgZWFjaCBTcGxpdE1hcFxuICAgIGNvbnN0IG1hcEluZGV4ID0gbmV3U3RhdGUuc3BsaXRNYXBzLmZpbmRJbmRleChzbSA9PiBzbS5pZCA9PT0gc3BsaXRNYXBJZCk7XG4gICAgaWYgKGlzVmlzaWJsZSkge1xuICAgICAgLy8gMSkgaWYgdGhlIGxheWVyIGlzIGludmlzaWJsZSBnbG9iYWxseVxuICAgICAgLy8gLT4gc2V0IGdsb2JhbCB2aXNpYmlsaXR5IHRvIHRydWVcbiAgICAgIG5ld1N0YXRlID0gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKG5ld1N0YXRlLCBsYXllckNvbmZpZ0NoYW5nZShsYXllciwge2lzVmlzaWJsZTogdHJ1ZX0pKTtcblxuICAgICAgLy8gLT4gc2V0IGxvY2FsIHZpc2liaWxpdHkgdG8gdHJ1ZSBhbmQgdGhlIGxvY2FsIHZpc2liaWxpdGllcyBvZiBhbGwgb3RoZXIgU3BsaXRNYXBzIHRvIGZhbHNlXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgc3BsaXRNYXBzOiBuZXdTdGF0ZS5zcGxpdE1hcHMubWFwKHNtID0+XG4gICAgICAgICAgc20uaWQgIT09IHNwbGl0TWFwSWRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIC4uLnNtLFxuICAgICAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAgICAgLi4uc20ubGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgW2xheWVySWRdOiBmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgLi4uc20sXG4gICAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgICAuLi5zbS5sYXllcnMsXG4gICAgICAgICAgICAgICAgICBbbGF5ZXJJZF06IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfTtcbiAgICB9XG4gICAgLy8gMikgZWxzZSB3aGVuIHRoZSBsYXllciBpcyB2aXNpYmxlIGdsb2JhbGx5XG4gICAgcmV0dXJuIHRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlcihuZXdTdGF0ZSwgdG9nZ2xlTGF5ZXJGb3JNYXAobWFwSW5kZXgsIGxheWVySWQpKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBbY2FzZSAyXTogdG9nZ2xlIGdsb2JhbCBsYXllciB2aXNpYmlsaXR5XG4gICAgY29uc3QgbmV3TGF5ZXIgPSBsYXllci51cGRhdGVMYXllckNvbmZpZyh7aXNWaXNpYmxlfSk7XG4gICAgY29uc3QgaWR4ID0gbmV3U3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGxheWVySWQpO1xuXG4gICAgbmV3U3RhdGUgPSB1cGRhdGVsYXllclZpc2liaWx0eShuZXdTdGF0ZSwgbmV3TGF5ZXIsIGlzVmlzaWJsZSk7XG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge1xuICAgICAgbGF5ZXI6IG5ld0xheWVyLFxuICAgICAgaWR4XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHN0YXRlXG4gKiBAcmV0dXJucyBpbmRleCBvZiB0aGUgZmlsdGVyIHN5bmNlZCB0byB0aW1lbGluZSBvciAtMVxuICovXG5mdW5jdGlvbiBmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUoc3RhdGU6IFZpc1N0YXRlKTogbnVtYmVyIHtcbiAgcmV0dXJuIHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gKGYgYXMgVGltZVJhbmdlRmlsdGVyKS5zeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSk7XG59XG5cbi8qKlxuICogVXBkYXRlcyBpc1ZhbGlkIGZsYWcgb2YgYSBsYXllci5cbiAqIFVwZGF0ZXMgaXNWaXNpYmxlIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiBpc1ZhbGlkLlxuICogVHJpZ2dlcnMgdXBkYXRlIG9mIGRhdGEgZm9yIHRoZSBsYXllciBpbiBvcmRlciB0byBnZXQgZXJyb3JzIGFnYWluIGR1cmluZyBuZXh0IHVwZGF0ZSBpdGVyYXRpb24uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclNldElzVmFsaWRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyU2V0SXNWYWxpZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBpc1ZhbGlkfSA9IGFjdGlvbjtcblxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBsYXllclRvVXBkYXRlID0gc3RhdGUubGF5ZXJzW2lkeF07XG4gIGlmIChsYXllclRvVXBkYXRlKSB7XG4gICAgbGV0IG5ld0xheWVyO1xuICAgIGxldCBuZXdEYXRhID0gbnVsbDtcblxuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAvLyBUcmlnZ2VyIGRhdGEgdXBkYXRlIGluIG9yZGVyIHRvIHNob3cgZXJyb3JzIGFnYWluIGlmIHByZXNlbnQuXG4gICAgICBjb25zdCB7bGF5ZXIsIGxheWVyRGF0YX0gPSBjYWxjdWxhdGVMYXllckRhdGEobGF5ZXJUb1VwZGF0ZSwgc3RhdGUsIHVuZGVmaW5lZCk7XG4gICAgICBuZXdMYXllciA9IGxheWVyO1xuICAgICAgbmV3RGF0YSA9IGxheWVyRGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXIgPSBsYXllclRvVXBkYXRlLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgICBuZXdMYXllci5pc1ZhbGlkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2lkeCwgbGF5ZXI6IG5ld0xheWVyLCBsYXllckRhdGE6IG5ld0RhdGF9KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gYWRkT3JSZW1vdmVUZXh0TGFiZWxzKG5ld0ZpZWxkcywgdGV4dExhYmVsLCBkZWZhdWx0VGV4dExhYmVsID0gREVGQVVMVF9URVhUX0xBQkVMKSB7XG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcblxuICBjb25zdCBjdXJyZW50RmllbGRzID0gdGV4dExhYmVsLm1hcCh0bCA9PiB0bC5maWVsZCAmJiB0bC5maWVsZC5uYW1lKS5maWx0ZXIoZCA9PiBkKTtcblxuICBjb25zdCBhZGRGaWVsZHMgPSBuZXdGaWVsZHMuZmlsdGVyKGYgPT4gIWN1cnJlbnRGaWVsZHMuaW5jbHVkZXMoZi5uYW1lKSk7XG4gIGNvbnN0IGRlbGV0ZUZpZWxkcyA9IGN1cnJlbnRGaWVsZHMuZmlsdGVyKGYgPT4gIW5ld0ZpZWxkcy5maW5kKGZkID0+IGZkLm5hbWUgPT09IGYpKTtcblxuICAvLyBkZWxldGVcbiAgbmV3VGV4dExhYmVsID0gbmV3VGV4dExhYmVsLmZpbHRlcih0bCA9PiB0bC5maWVsZCAmJiAhZGVsZXRlRmllbGRzLmluY2x1ZGVzKHRsLmZpZWxkLm5hbWUpKTtcbiAgbmV3VGV4dExhYmVsID0gIW5ld1RleHRMYWJlbC5sZW5ndGggPyBbZGVmYXVsdFRleHRMYWJlbF0gOiBuZXdUZXh0TGFiZWw7XG5cbiAgLy8gYWRkXG4gIG5ld1RleHRMYWJlbCA9IFtcbiAgICAuLi5uZXdUZXh0TGFiZWwuZmlsdGVyKHRsID0+IHRsLmZpZWxkKSxcbiAgICAuLi5hZGRGaWVsZHMubWFwKGFmID0+ICh7XG4gICAgICAuLi5kZWZhdWx0VGV4dExhYmVsLFxuICAgICAgZmllbGQ6IGFmXG4gICAgfSkpXG4gIF07XG5cbiAgcmV0dXJuIG5ld1RleHRMYWJlbDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlKGlkeCwgcHJvcCwgdmFsdWUsIHRleHRMYWJlbCkge1xuICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0ZXh0TGFiZWxbaWR4XSwgcHJvcCkpIHtcbiAgICByZXR1cm4gdGV4dExhYmVsO1xuICB9XG5cbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuXG4gIGlmIChwcm9wID09PSAnZmllbGQnICYmIHZhbHVlID09PSBudWxsICYmIHRleHRMYWJlbC5sZW5ndGggPiAxKSB7XG4gICAgLy8gcmVtb3ZlIGxhYmVsIHdoZW4gZmllbGQgdmFsdWUgaXMgc2V0IHRvIG51bGxcbiAgICBuZXdUZXh0TGFiZWwuc3BsaWNlKGlkeCwgMSk7XG4gIH0gZWxzZSBpZiAocHJvcCkge1xuICAgIG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5tYXAoKHRsLCBpKSA9PiAoaSA9PT0gaWR4ID8gey4uLnRsLCBbcHJvcF06IHZhbHVlfSA6IHRsKSk7XG4gIH1cblxuICByZXR1cm4gbmV3VGV4dExhYmVsO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBiYXNlIGNvbmZpZzogZGF0YUlkLCBsYWJlbCwgY29sdW1uLCBpc1Zpc2libGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBpZHgsIHByb3AsIHZhbHVlfSA9IGFjdGlvbjtcbiAgY29uc3Qge3RleHRMYWJlbH0gPSBvbGRMYXllci5jb25maWc7XG5cbiAgLy8gd2hlbiBhZGRpbmcgYSBuZXcgZW1wdHkgdGV4dCBsYWJlbCxcbiAgLy8gcmVseSBvbiB0aGUgbGF5ZXIncyBkZWZhdWx0IGNvbmZpZywgb3IgdXNlIHRoZSBjb25zdGFudCBERUZBVUxUX1RFWFRfTEFCRUxcbiAgY29uc3QgZGVmYXVsdFRleHRMYWJlbCA9XG4gICAgb2xkTGF5ZXIuZ2V0RGVmYXVsdExheWVyQ29uZmlnKHtkYXRhSWQ6ICcnfSk/LnRleHRMYWJlbD8uWzBdID8/IERFRkFVTFRfVEVYVF9MQUJFTDtcblxuICBsZXQgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLnNsaWNlKCk7XG4gIGlmICghdGV4dExhYmVsW2lkeF0gJiYgaWR4ID09PSB0ZXh0TGFiZWwubGVuZ3RoKSB7XG4gICAgLy8gaWYgaWR4IGlzIHNldCB0byBsZW5ndGgsIGFkZCBlbXB0eSB0ZXh0IGxhYmVsXG4gICAgbmV3VGV4dExhYmVsID0gWy4uLnRleHRMYWJlbCwgZGVmYXVsdFRleHRMYWJlbF07XG4gIH1cblxuICBpZiAoaWR4ID09PSAnYWxsJyAmJiBwcm9wID09PSAnZmllbGRzJykge1xuICAgIG5ld1RleHRMYWJlbCA9IGFkZE9yUmVtb3ZlVGV4dExhYmVscyh2YWx1ZSwgdGV4dExhYmVsLCBkZWZhdWx0VGV4dExhYmVsKTtcbiAgfSBlbHNlIHtcbiAgICBuZXdUZXh0TGFiZWwgPSB1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUoaWR4LCBwcm9wLCB2YWx1ZSwgbmV3VGV4dExhYmVsKTtcbiAgfVxuICAvLyB1cGRhdGUgdGV4dCBsYWJlbCBwcm9wIGFuZCB2YWx1ZVxuICByZXR1cm4gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgb2xkTGF5ZXIsXG4gICAgbmV3Q29uZmlnOiB7dGV4dExhYmVsOiBuZXdUZXh0TGFiZWx9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBsYXllckNsYXNzZXMsIGxheWVyLCBzY2hlbWEpIHtcbiAgY29uc3QgbG9hZGVkTGF5ZXIgPSBzZXJpYWxpemVMYXllcihsYXllciwgc2NoZW1hKTtcbiAgcmV0dXJuIGxvYWRlZExheWVyXG4gICAgPyB2YWxpZGF0ZUxheWVyV2l0aERhdGEoZGF0YXNldCwgbG9hZGVkTGF5ZXIsIGxheWVyQ2xhc3Nlcywge1xuICAgICAgICBhbGxvd0VtcHR5Q29sdW1uOiB0cnVlXG4gICAgICB9KVxuICAgIDogbnVsbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgY29uZmlnIGRhdGFJZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjoge1xuICAgIG9sZExheWVyOiBMYXllcjtcbiAgICBuZXdDb25maWc6IHtcbiAgICAgIGRhdGFJZDogc3RyaW5nO1xuICAgIH07XG4gIH1cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdDb25maWd9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YUlkfSA9IG5ld0NvbmZpZztcblxuICBpZiAoIW9sZExheWVyIHx8ICFzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG5cbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2RhdGFJZH0pO1xuXG4gIC8vIHRoaXMgbWF5IGhhcHBlbiB3aGVuIGEgbGF5ZXIgaXMgbmV3ICh0eXBlOiBudWxsIGFuZCBubyBjb2x1bW5zKSBidXQgaXQncyBub3QgcmVhZHkgdG8gYmUgc2F2ZWRcbiAgaWYgKG5ld0xheWVyLmlzVmFsaWRUb1NhdmUoKSkge1xuICAgIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKFxuICAgICAgc3RhdGUuZGF0YXNldHNbZGF0YUlkXSxcbiAgICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICAgIG5ld0xheWVyLFxuICAgICAgc3RhdGUuc2NoZW1hXG4gICAgKTtcbiAgICAvLyBpZiBjYW50IHZhbGlkYXRlIGl0IHdpdGggZGF0YSBjcmVhdGUgYSBuZXcgb25lXG4gICAgaWYgKCF2YWxpZGF0ZWQpIHtcbiAgICAgIGNvbnN0IG9sZExheWVyVHlwZSA9IG9sZExheWVyLnR5cGU7XG4gICAgICBpZiAob2xkTGF5ZXJUeXBlKSB7XG4gICAgICAgIG5ld0xheWVyID0gbmV3IHN0YXRlLmxheWVyQ2xhc3Nlc1tvbGRMYXllclR5cGVdKHtkYXRhSWQsIGlkOiBvbGRMYXllci5pZH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllciA9IHZhbGlkYXRlZDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gTGF5ZXIgaXMgbm90IHZhbGlkIHRvIHNhdmUgKGUuZy4gbWlzc2luZyBjb2x1bW5zKSwgYnV0IHdlIHN0aWxsIG5lZWQgdG9cbiAgICAvLyByZW1hcCB2aXN1YWwgY2hhbm5lbCBmaWVsZHMgdG8gdGhlIG5ldyBkYXRhc2V0IHRvIGF2b2lkIHN0YWxlIGZpZWxkIHJlZmVyZW5jZXNcbiAgICAvLyB0aGF0IHBvaW50IHRvIHJvd3MgYmV5b25kIHRoZSBuZXcgZGF0YXNldCdzIGxlbmd0aFxuICAgIGNvbnN0IG5ld0RhdGFzZXRGaWVsZHMgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdLmZpZWxkcztcbiAgICBjb25zdCByZW1hcHBlZEZpZWxkczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIE9iamVjdC52YWx1ZXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtmaWVsZDogZmllbGRLZXl9KSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50RmllbGQgPSBuZXdMYXllci5jb25maWdbZmllbGRLZXldO1xuICAgICAgaWYgKGN1cnJlbnRGaWVsZCkge1xuICAgICAgICBjb25zdCBtYXRjaGVkID0gbmV3RGF0YXNldEZpZWxkcy5maW5kKGYgPT4gZi5uYW1lID09PSBjdXJyZW50RmllbGQubmFtZSk7XG4gICAgICAgIHJlbWFwcGVkRmllbGRzW2ZpZWxkS2V5XSA9IG1hdGNoZWQgfHwgbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoT2JqZWN0LmtleXMocmVtYXBwZWRGaWVsZHMpLmxlbmd0aCkge1xuICAgICAgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyhyZW1hcHBlZEZpZWxkcyk7XG4gICAgfVxuICAgIC8vIFZhbGlkYXRlIGZpZWxkIHR5cGUgY29tcGF0aWJpbGl0eSDigJQgY2xlYXJzIGZpZWxkcyB3aG9zZSB0eXBlIGlzIGluY29tcGF0aWJsZVxuICAgIC8vIHdpdGggdGhlIGNoYW5uZWwncyBzdXBwb3J0ZWQgZmllbGQgdHlwZXMgKGUuZy4gc3RyaW5nIGZpZWxkIGZvciBhIG51bWVyaWMgc2NhbGUpXG4gICAgT2JqZWN0LnZhbHVlcyhuZXdMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaCgoe2tleX0pID0+IHtcbiAgICAgIG5ld0xheWVyLnZhbGlkYXRlVmlzdWFsQ2hhbm5lbChrZXkpO1xuICAgIH0pO1xuICB9XG5cbiAgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgaXNWaXNpYmxlOiBvbGRMYXllci5jb25maWcuaXNWaXNpYmxlLFxuICAgIGlzQ29uZmlnQWN0aXZlOiB0cnVlXG4gIH0pO1xuXG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgdW5kZWZpbmVkKTtcblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRJbml0aWFsTGF5ZXJDb25maWcobGF5ZXIsIGRhdGFzZXRzLCBsYXllckNsYXNzZXMpOiBMYXllciB7XG4gIGxldCBuZXdMYXllciA9IGxheWVyO1xuICBpZiAoIU9iamVjdC5rZXlzKGRhdGFzZXRzKS5sZW5ndGgpIHtcbiAgICAvLyBubyBkYXRhIGlzIGxvYWRlZFxuICAgIHJldHVybiBsYXllcjtcbiAgfVxuICBpZiAoIWxheWVyLmNvbmZpZy5kYXRhSWQpIHtcbiAgICAvLyBzZXQgbGF5ZXIgZGF0YUlkXG4gICAgbmV3TGF5ZXIgPSBsYXllci51cGRhdGVMYXllckNvbmZpZyh7ZGF0YUlkOiBPYmplY3Qua2V5cyhkYXRhc2V0cylbMF19KTtcbiAgfVxuICBjb25zdCBkYXRhc2V0ID0gZGF0YXNldHNbbmV3TGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBsYXllcjtcbiAgfVxuXG4gIC8vIGZpbmQgZGVmYXV0IGxheWVyIHByb3BzXG4gIGNvbnN0IHJlc3VsdCA9XG4gICAgdHlwZW9mIGxheWVyQ2xhc3Nlc1tuZXdMYXllci50eXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMgPT09ICdmdW5jdGlvbidcbiAgICAgID8gbGF5ZXJDbGFzc2VzW25ld0xheWVyLnR5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyhkYXRhc2V0LCBbXSlcbiAgICAgIDoge3Byb3BzOiBbXX07XG5cbiAgLy8gYW4gYXJyYXkgb2YgcG9zc2libGUgcHJvcHMsIHVzZSAxc3Qgb25lXG4gIGNvbnN0IHByb3BzID0gQXJyYXkuaXNBcnJheShyZXN1bHQpID8gcmVzdWx0IDogcmVzdWx0LnByb3BzIHx8IFtdO1xuXG4gIGlmIChwcm9wcy5sZW5ndGgpIHtcbiAgICBuZXdMYXllciA9IG5ldyBsYXllckNsYXNzZXNbbGF5ZXIudHlwZV0oe1xuICAgICAgLi4ucHJvcHNbMF0sXG4gICAgICBsYWJlbDogbmV3TGF5ZXIuY29uZmlnLmxhYmVsLFxuICAgICAgZGF0YUlkOiBuZXdMYXllci5jb25maWcuZGF0YUlkLFxuICAgICAgaXNDb25maWdBY3RpdmU6IG5ld0xheWVyLmNvbmZpZy5pc0NvbmZpZ0FjdGl2ZSxcbiAgICAgIGlzVmlzaWJsZTogbmV3TGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB0eXBlb2YgbmV3TGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnID09PSAnZnVuY3Rpb24nXG4gICAgPyBuZXdMYXllci5zZXRJbml0aWFsTGF5ZXJDb25maWcoZGF0YXNldClcbiAgICA6IG5ld0xheWVyO1xufVxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgdHlwZS4gUHJldmlld3MgbGF5ZXIgY29uZmlnIHdpbGwgYmUgY29waWVkIGlmIGFwcGxpY2FibGUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclR5cGVDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3VHlwZX0gPSBhY3Rpb247XG4gIGlmICghb2xkTGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qgb2xkSWQgPSBvbGRMYXllci5pZDtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZElkKTtcblxuICBpZiAoIXN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXSkge1xuICAgIENvbnNvbGUuZXJyb3IoYCR7bmV3VHlwZX0gaXMgbm90IGEgdmFsaWQgbGF5ZXIgdHlwZWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgbmV3TGF5ZXIgPSBuZXcgc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdKHtcbiAgICAvLyBrZWVwIG9sZCBsYXllciBsYWJsZSBhbmQgaXNDb25maWdBY3RpdmVcbiAgICBsYWJlbDogb2xkTGF5ZXIuY29uZmlnLmxhYmVsLFxuICAgIGlzQ29uZmlnQWN0aXZlOiBvbGRMYXllci5jb25maWcuaXNDb25maWdBY3RpdmUsXG4gICAgZGF0YUlkOiBvbGRMYXllci5jb25maWcuZGF0YUlkXG4gIH0pO1xuXG4gIGlmICghb2xkTGF5ZXIudHlwZSkge1xuICAgIC8vIGlmIHNldHRpbmcgbGF5ZXIgdHlwZSBvbiBhbiBlbXB0eSBsYXllclxuICAgIG5ld0xheWVyID0gc2V0SW5pdGlhbExheWVyQ29uZmlnKG5ld0xheWVyLCBzdGF0ZS5kYXRhc2V0cywgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBnZXQgYSBtaW50IGxheWVyLCB3aXRoIG5ldyBpZCBhbmQgdHlwZVxuICAgIC8vIGJlY2F1c2UgZGVjay5nbCB1c2VzIGlkIHRvIG1hdGNoIGJldHdlZW4gbmV3IGFuZCBvbGQgbGF5ZXIuXG4gICAgLy8gSWYgdHlwZSBoYXMgY2hhbmdlZCBidXQgaWQgaXMgdGhlIHNhbWUsIGl0IHdpbGwgYnJlYWtcblxuICAgIGNvbnN0IGRlZmF1bHRMYXllclByb3BzID1cbiAgICAgIHR5cGVvZiBzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyhzdGF0ZS5kYXRhc2V0c1tuZXdMYXllci5jb25maWcuZGF0YUlkXSlcbiAgICAgICAgOiBudWxsO1xuXG4gICAgbmV3TGF5ZXIuYXNzaWduQ29uZmlnVG9MYXllcihcbiAgICAgIG9sZExheWVyLmNvbmZpZyxcbiAgICAgIG9sZExheWVyLnZpc0NvbmZpZ1NldHRpbmdzLFxuICAgICAgc3RhdGUuZGF0YXNldHMsXG4gICAgICBkZWZhdWx0TGF5ZXJQcm9wc1xuICAgICk7XG4gICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJEb21haW4oc3RhdGUuZGF0YXNldHMpO1xuICB9XG5cbiAgY29uc3Qge2NsaWNrZWQsIGhvdmVySW5mb30gPSBzdGF0ZTtcblxuICBsZXQgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2xpY2tlZDogb2xkTGF5ZXIuaXNMYXllckhvdmVyZWQoY2xpY2tlZCkgPyB1bmRlZmluZWQgOiBjbGlja2VkLFxuICAgIGhvdmVySW5mbzogb2xkTGF5ZXIuaXNMYXllckhvdmVyZWQoaG92ZXJJbmZvKSA/IHVuZGVmaW5lZCA6IGhvdmVySW5mb1xuICB9O1xuXG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgbmV3U3RhdGUpO1xuICBuZXdTdGF0ZSA9IHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xuXG4gIGlmIChsYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQgfHwgb2xkTGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgLy8gdXBkYXRlIHNwbGl0TWFwIGxheWVyIGlkXG4gIGlmIChzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogbmV3U3RhdGUuc3BsaXRNYXBzLm1hcChzZXR0aW5ncyA9PiB7XG4gICAgICAgIGNvbnN0IHtbb2xkSWRdOiBvbGRMYXllck1hcCwgLi4ub3RoZXJMYXllcnN9ID0gc2V0dGluZ3MubGF5ZXJzO1xuICAgICAgICByZXR1cm4gb2xkSWQgaW4gc2V0dGluZ3MubGF5ZXJzXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIC4uLnNldHRpbmdzLFxuICAgICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgICAuLi5vdGhlckxheWVycyxcbiAgICAgICAgICAgICAgICBbbGF5ZXIuaWRdOiBvbGRMYXllck1hcFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiBzZXR0aW5ncztcbiAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBsYXllck9yZGVyIHdpdGggbmV3IGlkXG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyT3JkZXI6IHJlcGxhY2VMYXllckVudHJ5SW5MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIG9sZExheWVyLmlkLCBuZXdMYXllci5pZClcbiAgfTtcblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIHZpc3VhbCBjaGFubmVsXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMge09iamVjdH0gbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclZpc3VhbENoYW5uZWxDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdDb25maWcsIG5ld1Zpc0NvbmZpZywgY2hhbm5lbH0gPSBhY3Rpb247XG4gIGlmICghb2xkTGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tvbGRMYXllci5jb25maWcuZGF0YUlkXTtcblxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBsZXQgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyhuZXdDb25maWcpO1xuICBpZiAobmV3VmlzQ29uZmlnKSBuZXdMYXllciA9IG5ld0xheWVyLnVwZGF0ZUxheWVyVmlzQ29uZmlnKG5ld1Zpc0NvbmZpZyk7XG5cbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsKGRhdGFzZXQsIGNoYW5uZWwpO1xuXG4gIC8vIGNhbGxpbmcgdXBkYXRlIGFuaW1hdGlvbiBkb21haW4gZmlyc3QgdG8gbWVyZ2UgYWxsIGxheWVyIGFuaW1hdGlvbiBkb21haW5cbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihzdGF0ZSk7XG5cbiAgY29uc3QgdmlzdWFsQ2hhbm5lbCA9IG9sZExheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICBpZiAodmlzdWFsQ2hhbm5lbD8uY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY29sb3IgJiYgbmV3Q29uZmlnW3Zpc3VhbENoYW5uZWwuZmllbGRdKSB7XG4gICAgLy8gaWYgY29sb3IgZmllbGQgY2hhbmdlZCwgc2V0IGN1c3RvbUJyZWFrcyB0byBmYWxzZVxuICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29sb3JVSSh2aXN1YWxDaGFubmVsLnJhbmdlLCB7XG4gICAgICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgICAgIC4uLm5ld0xheWVyLmNvbmZpZy5jb2xvclVJW3Zpc3VhbENoYW5uZWwucmFuZ2VdLmNvbG9yUmFuZ2VDb25maWcsXG4gICAgICAgIGN1c3RvbUJyZWFrczogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHVwZGF0ZWRTdGF0ZSA9IHtcbiAgICAgIC4uLnVwZGF0ZWRTdGF0ZSxcbiAgICAgIGxheWVyczogdXBkYXRlZFN0YXRlLmxheWVycy5tYXAobCA9PiAobC5pZCA9PT0gb2xkTGF5ZXIuaWQgPyBuZXdMYXllciA6IGwpKVxuICAgIH07XG4gIH1cblxuICBjb25zdCBvbGRMYXllckRhdGEgPSB1cGRhdGVkU3RhdGUubGF5ZXJEYXRhW2lkeF07XG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgdXBkYXRlZFN0YXRlLCBvbGRMYXllckRhdGEpO1xuXG4gIGlmIChcbiAgICB2aXN1YWxDaGFubmVsPy5jaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5jb2xvciAmJlxuICAgIG5ld0NvbmZpZ1t2aXN1YWxDaGFubmVsPy5zY2FsZV0gPT09IFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWwgJiZcbiAgICAhbmV3VmlzQ29uZmlnXG4gICkge1xuICAgIC8vIHdoZW4gc3dpdGNoaW5nIHRvIGN1c3RvbU9yZGluYWwgc2NhbGUsIGNyZWF0ZSBhIGN1c3RvbVBhbGV0dGUgaW4gY29sb3JVSSB3aXRoIHVwZGF0ZWQgY29sb3JEb21haW5cbiAgICBjb25zdCBjdXN0b21QYWxldHRlID0gaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlKHtcbiAgICAgIHNjYWxlOiBTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsLFxuICAgICAgZmllbGQ6IGxheWVyLmNvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXSxcbiAgICAgIG9yZGluYWxEb21haW46IGxheWVyLmNvbmZpZ1tsYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXS5kb21haW5dLFxuICAgICAgcmFuZ2U6IGxheWVyLmNvbmZpZy52aXNDb25maWdbdmlzdWFsQ2hhbm5lbC5yYW5nZV0sXG4gICAgICBjb2xvckJyZWFrczogbnVsbFxuICAgIH0pO1xuICAgIC8vIHVwZGF0ZSBjb2xvclJhbmdlIHdpdGggbmV3IGN1c3RvbVBhbGV0dGVcbiAgICBsYXllci51cGRhdGVMYXllckNvbG9yVUkodmlzdWFsQ2hhbm5lbC5yYW5nZSwge1xuICAgICAgc2hvd0NvbG9yQ2hhcnQ6IHRydWUsXG4gICAgICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgICAgIC4uLmxheWVyLmNvbmZpZy5jb2xvclVJW3Zpc3VhbENoYW5uZWwucmFuZ2VdLmNvbG9yUmFuZ2VDb25maWcsXG4gICAgICAgIGN1c3RvbUJyZWFrczogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGN1c3RvbVBhbGV0dGVcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHVwZGF0ZWRTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBgdmlzQ29uZmlnYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgcHJvcHMgPSBPYmplY3Qua2V5cyhhY3Rpb24ubmV3VmlzQ29uZmlnKTtcblxuICBjb25zdCBuZXdWaXNDb25maWcgPSB7XG4gICAgLi4ub2xkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZyxcbiAgICAuLi5hY3Rpb24ubmV3VmlzQ29uZmlnXG4gIH07XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7dmlzQ29uZmlnOiBuZXdWaXNDb25maWd9KTtcblxuICBsZXQgbmV4dFN0YXRlID0gc3RhdGU7XG5cbiAgLy8gRXhjbHVzaXZlIGJpdG1hcCBlZGl0aW5nOiB3aGVuIGVkaXRCb3VuZHMgaXMgdHVybmVkIG9uIGZvciBvbmUgYml0bWFwIGxheWVyLFxuICAvLyB0dXJuIGl0IG9mZiBmb3IgYWxsIG90aGVyIGJpdG1hcCBsYXllcnNcbiAgaWYgKFxuICAgIG5ld0xheWVyLnR5cGUgPT09ICdiaXRtYXAnICYmXG4gICAgYWN0aW9uLm5ld1Zpc0NvbmZpZy5lZGl0Qm91bmRzID09PSB0cnVlXG4gICkge1xuICAgIG5leHRTdGF0ZSA9IHtcbiAgICAgIC4uLm5leHRTdGF0ZSxcbiAgICAgIGxheWVyczogbmV4dFN0YXRlLmxheWVycy5tYXAoKGwsIGkpID0+IHtcbiAgICAgICAgaWYgKGkgIT09IGlkeCAmJiBsLnR5cGUgPT09ICdiaXRtYXAnICYmIGwuY29uZmlnLnZpc0NvbmZpZy5lZGl0Qm91bmRzKSB7XG4gICAgICAgICAgcmV0dXJuIGwudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgICAgdmlzQ29uZmlnOiB7Li4ubC5jb25maWcudmlzQ29uZmlnLCBlZGl0Qm91bmRzOiBmYWxzZX1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbDtcbiAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIGlmIChuZXdMYXllci5zaG91bGRDYWxjdWxhdGVMYXllckRhdGEocHJvcHMpKSB7XG4gICAgY29uc3Qgb2xkTGF5ZXJEYXRhID0gbmV4dFN0YXRlLmxheWVyRGF0YVtpZHhdO1xuICAgIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgbmV4dFN0YXRlLCBvbGRMYXllckRhdGEpO1xuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV4dFN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5leHRTdGF0ZSwge2xheWVyOiBuZXdMYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogUmVzZXQgYW5pbWF0aW9uIGNvbmZpZyBjdXJyZW50IHRpbWUgdG8gYSBzcGVjaWZpZWQgdmFsdWVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKlxuICovXG5leHBvcnQgY29uc3Qgc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlciA9IDxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAge3ZhbHVlfTogVmlzU3RhdGVBY3Rpb25zLlNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXJBY3Rpb25cbik6IFMgPT4ge1xuICBjb25zdCBjdXJyZW50VGltZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWVbMF0gOiB2YWx1ZTtcbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgY3VycmVudFRpbWVcbiAgICB9XG4gIH07XG4gIC8vIHVwZGF0ZSBhbmltYXRpb24gY29uZmlnIGZvciBlYWNoIGxheWVyXG4gIHJldHVybiBzdGF0ZS5sYXllcnMucmVkdWNlKChhY2N1LCBsKSA9PiB7XG4gICAgaWYgKGwuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkICYmIGwudHlwZSAhPT0gJ3RyaXAnKSB7XG4gICAgICByZXR1cm4gbGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyKGFjY3UsIHtvbGRMYXllcjogbCwgcHJvcDogJ2N1cnJlbnRUaW1lJywgY3VycmVudFRpbWV9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY3U7XG4gIH0sIG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgcHJvcGVydHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihzdGF0ZSwgYWN0aW9uKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIGFuaW1hdGlvbiB3aW5kb3dcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICB7aWQsIGFuaW1hdGlvbldpbmRvd306IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi5pZCA9PT0gaWQpO1xuXG4gIGlmICghZmlsdGVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBhbmltYXRpb25XaW5kb3dcbiAgfTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikoc3RhdGUuZmlsdGVycylcbiAgfTtcblxuICBjb25zdCBuZXdTeW5jVGltZWxpbmVNb2RlID0gZ2V0U3luY0FuaW1hdGlvbk1vZGUobmV3RmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcik7XG5cbiAgcmV0dXJuIHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7aWQsIG1vZGU6IG5ld1N5bmNUaW1lbGluZU1vZGV9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2ZpbHRlcklkLCBuZXdGaWx0ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gU2VyaWFsaXplIHRoZSBmaWx0ZXJzIHRvIG9ubHkgY29tcGFyZSB0aGUgc2F2ZWQgcHJvcGVydGllc1xuICBjb25zdCBzZXJpYWxpemVkT2xkRmlsdGVyID0gc2VyaWFsaXplRmlsdGVyKG9sZEZpbHRlciwgc3RhdGUuc2NoZW1hKSA/PyB7Y29uZmlnOiB7fX07XG4gIGNvbnN0IHNlcmlhbGl6ZWROZXdGaWx0ZXIgPSBzZXJpYWxpemVGaWx0ZXIobmV3RmlsdGVyLCBzdGF0ZS5zY2hlbWEpO1xuICBpZiAoIXNlcmlhbGl6ZWROZXdGaWx0ZXIgfHwgaXNFcXVhbChzZXJpYWxpemVkT2xkRmlsdGVyLCBzZXJpYWxpemVkTmV3RmlsdGVyKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIElmIHRoZXJlIGFyZSBhbnkgY2hhbmdlcyB0byB0aGUgZmlsdGVyLCBhcHBseSB0aGVtXG4gIGNvbnN0IGNoYW5nZWQgPSBwaWNrQ2hhbmdlZFByb3BzKHNlcmlhbGl6ZWRPbGRGaWx0ZXIsIHNlcmlhbGl6ZWROZXdGaWx0ZXIpO1xuICBkZWxldGUgY2hhbmdlZFsnaWQnXTsgLy8gaWQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkXG5cbiAgY29uc3QgZmlsdGVySW5kZXggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlckluZGV4IDwgMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihcbiAgICBzdGF0ZSxcbiAgICBzZXRGaWx0ZXIoZmlsdGVySW5kZXgsIE9iamVjdC5rZXlzKGNoYW5nZWQpLCBPYmplY3QudmFsdWVzKGNoYW5nZWQpKVxuICApO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgcHJvcGVydHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2lkeCwgdmFsdWVJbmRleCA9IDB9ID0gYWN0aW9uO1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVycy4ke2lkeH0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChcbiAgICBBcnJheS5pc0FycmF5KGFjdGlvbi5wcm9wKSAmJlxuICAgICghQXJyYXkuaXNBcnJheShhY3Rpb24udmFsdWUpIHx8IGFjdGlvbi5wcm9wLmxlbmd0aCAhPT0gYWN0aW9uLnZhbHVlLmxlbmd0aClcbiAgKSB7XG4gICAgQ29uc29sZS5lcnJvcignRXhwZWN0aW5nIHZhbHVlIHRvIGJlIGFuIGFycmF5IG9mIHRoZSBzYW1lIGxlbmd0aCwgc2luY2UgcHJvcCBpcyBhbiBhcnJheScpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBjb252ZXJ0IHByb3AgYW5kIHZhbHVlIHRvIGFycmF5XG4gIGNvbnN0IHByb3BzID0gdG9BcnJheShhY3Rpb24ucHJvcCk7XG4gIGNvbnN0IHZhbHVlcyA9IEFycmF5LmlzQXJyYXkoYWN0aW9uLnByb3ApID8gdG9BcnJheShhY3Rpb24udmFsdWUpIDogW2FjdGlvbi52YWx1ZV07XG5cbiAgbGV0IG5ld0ZpbHRlciA9IG9sZEZpbHRlcjtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG5cbiAgbGV0IGRhdGFzZXRJZHNUb0ZpbHRlcjogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHByb3AgPSBwcm9wc1tpXTtcbiAgICBjb25zdCB2YWx1ZSA9IHZhbHVlc1tpXTtcbiAgICAvLyBXZSBjdXJyZW50bHkgZG8gbm90IHN1cHBvcnQgcGFzc2luZyBpbiBuYW1lIGFzIGFuIGFycmF5IGludG8gX3VwZGF0ZUZpbHRlclByb3AsIHNvIHdlIGNhbGwgaXQgbXVsdGlwbGUgdGltZXMgd2l0aCBlYWNoIG5hbWVcbiAgICAvLyBTZWUgdGhlIGNvbW1lbnQgaW4gdGhlcmUgYXMgdG8gd2hhdCBzaG91bGQgYmUgYWRkcmVzc2VkXG4gICAgbGV0IHJlcztcbiAgICBpZiAocHJvcCA9PT0gJ25hbWUnICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gICAgICByZXMgPSB2YWx1ZS5yZWR1Y2UoKGFjY3UsIHYpID0+IHtcbiAgICAgICAgcmV0dXJuIF91cGRhdGVGaWx0ZXJQcm9wKGFjY3UsIG5ld0ZpbHRlciwgcHJvcCwgdiwgdmFsdWVJbmRleCk7XG4gICAgICB9LCBuZXdTdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcyA9IF91cGRhdGVGaWx0ZXJQcm9wKG5ld1N0YXRlLCBuZXdGaWx0ZXIsIHByb3AsIHZhbHVlLCB2YWx1ZUluZGV4KTtcbiAgICB9XG4gICAgbmV3RmlsdGVyID0gcmVzLmZpbHRlcjtcbiAgICBuZXdTdGF0ZSA9IHJlcy5zdGF0ZTtcbiAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBkYXRhc2V0SWRzVG9GaWx0ZXIuY29uY2F0KHJlcy5kYXRhc2V0SWRzVG9GaWx0ZXIpO1xuICB9XG5cbiAgY29uc3QgZW5sYXJnZWRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLnZpZXcgPT09IEZJTFRFUl9WSUVXX1RZUEVTLmVubGFyZ2VkKTtcblxuICBpZiAoZW5sYXJnZWRGaWx0ZXIgJiYgZW5sYXJnZWRGaWx0ZXIuaWQgIT09IG5ld0ZpbHRlci5pZCkge1xuICAgIC8vIHRoZXJlIHNob3VsZCBiZSBvbmx5IG9uZSBlbmxhcmdlZCBmaWx0ZXJcbiAgICBuZXdGaWx0ZXIudmlldyA9IEZJTFRFUl9WSUVXX1RZUEVTLnNpZGU7XG4gIH1cblxuICAvLyBzYXZlIG5ldyBmaWx0ZXJzIHRvIG5ld1N0YXRlXG4gIG5ld1N0YXRlID0gc2V0KFsnZmlsdGVycycsIGlkeF0sIG5ld0ZpbHRlciwgbmV3U3RhdGUpO1xuXG4gIC8vIGZpbHRlciBkYXRhXG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIHVuaXEoZGF0YXNldElkc1RvRmlsdGVyKSxcbiAgICBuZXdTdGF0ZS5kYXRhc2V0cyxcbiAgICBuZXdTdGF0ZS5maWx0ZXJzLFxuICAgIG5ld1N0YXRlLmxheWVyc1xuICApO1xuXG4gIG5ld1N0YXRlID0gc2V0KFsnZGF0YXNldHMnXSwgZmlsdGVyZWREYXRhc2V0cywgbmV3U3RhdGUpO1xuXG4gIC8vIG5lZWQgdG8gdXBkYXRlIGZpbHRlclBsb3QgYWZ0ZXIgZmlsdGVyIERhdGFzZXQgZm9yIHBsb3QgdG8gdXBkYXRlIG9uIGZpbHRlcmVkIHJlc3VsdFxuICBjb25zdCBmaWx0ZXJXaXRoUExvdCA9IHVwZGF0ZUZpbHRlclBsb3QobmV3U3RhdGUuZGF0YXNldHMsIG5ld1N0YXRlLmZpbHRlcnNbaWR4XSk7XG5cbiAgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJywgaWR4XSwgZmlsdGVyV2l0aFBMb3QsIG5ld1N0YXRlKTtcblxuICAvLyBkYXRhSWQgaXMgYW4gYXJyYXlcbiAgLy8gcGFzcyBvbmx5IHRoZSBkYXRhc2V0IHdlIG5lZWQgdG8gdXBkYXRlXG4gIG5ld1N0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5ld1N0YXRlLCBkYXRhc2V0SWRzVG9GaWx0ZXIsIG5ld0ZpbHRlcik7XG5cbiAgLy8gSWYgdGltZSByYW5nZSBmaWx0ZXIgdmFsdWUgd2FzIHVwZGF0ZWQsIGFkanVzdCBhbmltYXRpb24gY29uZmlnXG4gIGlmIChuZXdGaWx0ZXIudHlwZSA9PT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSAmJiBwcm9wcy5pbmNsdWRlcygndmFsdWUnKSkge1xuICAgIG5ld1N0YXRlID0gYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlcihuZXdTdGF0ZSwgYWN0aW9uLmlkeCk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbmZ1bmN0aW9uIF91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCB2YWx1ZSwgZGF0YXNldHMpIHtcbiAgbGV0IG5ld0ZpbHRlciA9IGZpbHRlcjtcbiAgaWYgKGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF0pIHtcbiAgICAvLyBpZiBkYXRhSWQgYWxyZWFkeSBleGlzdFxuICAgIG5ld0ZpbHRlciA9IF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cyk7XG4gIH1cbiAgaWYgKHZhbHVlKSB7XG4gICAgY29uc3QgbmV4dFZhbHVlID0gbmV3RmlsdGVyLmRhdGFJZC5zbGljZSgpO1xuICAgIG5leHRWYWx1ZVt2YWx1ZUluZGV4XSA9IHZhbHVlO1xuICAgIG5ld0ZpbHRlciA9IHNldChbJ2RhdGFJZCddLCBuZXh0VmFsdWUsIG5ld0ZpbHRlcik7XG4gIH1cbiAgcmV0dXJuIG5ld0ZpbHRlcjtcbn1cblxuZnVuY3Rpb24gX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIGRhdGFzZXRzKSB7XG4gIGNvbnN0IGRhdGFJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG5cbiAgaWYgKGZpbHRlci5kYXRhSWQubGVuZ3RoID09PSAxICYmIHZhbHVlSW5kZXggPT09IDApIHtcbiAgICAvLyBpZiByZW1vdmUgdGhlIG9ubHkgZGF0YUlkLCBjcmVhdGUgYW4gZW1wdHkgZmlsdGVyIGluc3RlYWQ7XG4gICAgcmV0dXJuIGdldERlZmF1bHRGaWx0ZXIoe2lkOiBmaWx0ZXIuaWR9KTtcbiAgfVxuXG4gIGlmIChkYXRhSWQpIHtcbiAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YUlkKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgcHJvcCBvZiBbJ2RhdGFJZCcsICduYW1lJywgJ2ZpZWxkSWR4JywgJ2dwdUNoYW5uZWwnXSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGZpbHRlcltwcm9wXSkpIHtcbiAgICAgIGNvbnN0IG5leHRWYWwgPSBmaWx0ZXJbcHJvcF0uc2xpY2UoKTtcbiAgICAgIG5leHRWYWwuc3BsaWNlKHZhbHVlSW5kZXgsIDEpO1xuICAgICAgZmlsdGVyID0gc2V0KFtwcm9wXSwgbmV4dFZhbCwgZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICAvLyBtZXJnZUZpZWxkRG9tYWluIGZvciB0aGUgcmVtYWluaW5nIGZpZWxkc1xuICBjb25zdCBkb21haW5TdGVwcyA9IG1lcmdlRmlsdGVyRG9tYWluKGZpbHRlciwgZGF0YXNldHMpO1xuXG4gIGNvbnN0IG5leHRGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIC8vIHZhbHVlOiBuZXh0VmFsdWUsXG4gICAgLi4uKGRvbWFpblN0ZXBzID8ge2RvbWFpbjogZG9tYWluU3RlcHM/LmRvbWFpbiwgc3RlcDogZG9tYWluU3RlcHM/LnN0ZXB9IDoge30pXG4gIH07XG5cbiAgY29uc3QgbmV4dFZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihuZXh0RmlsdGVyLnZhbHVlLCBuZXh0RmlsdGVyKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXh0RmlsdGVyLFxuICAgIHZhbHVlOiBuZXh0VmFsdWVcbiAgfTtcbn1cblxuLyoqICpcbiAqIFVwZGF0ZXMgYSBzaW5nbGUgcHJvcGVydHkgb2YgYSBmaWx0ZXJcbiAqL1xuZnVuY3Rpb24gX3VwZGF0ZUZpbHRlclByb3Aoc3RhdGUsIGZpbHRlciwgcHJvcCwgdmFsdWUsIHZhbHVlSW5kZXgsIGRhdGFzZXRJZHM/KSB7XG4gIGxldCBkYXRhc2V0SWRzVG9GaWx0ZXI6IHN0cmluZ1tdID0gW107XG4gIHN3aXRjaCAocHJvcCkge1xuICAgIC8vIFRPRE86IE5leHQgUFIgZm9yIFVJIGlmIHdlIHVwZGF0ZSBmaWx0ZXJEYXRhSWQsIHdlIG5lZWQgdG8gY29uc2lkZXIgdHdvIGNhc2VzOlxuICAgIC8vIDEuIGRhdGFJZCBpcyBlbXB0eTogY3JlYXRlIGEgZGVmYXVsdCBmaWx0ZXJcbiAgICAvLyAyLiBBZGQgYSBuZXcgZGF0YXNldCBpZFxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMuZGF0YUlkOiB7XG4gICAgICBjb25zdCBvbGREYXRhSWQgPSBbLi4uZmlsdGVyLmRhdGFJZF07XG4gICAgICBmaWx0ZXIgPSBfdXBkYXRlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgdmFsdWUsIHN0YXRlLmRhdGFzZXRzKTtcbiAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IHVuaXEoWy4uLm9sZERhdGFJZCwgLi4uZmlsdGVyLmRhdGFJZF0pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMubmFtZToge1xuICAgICAgLy8gd2UgYXJlIHN1cHBvcnRpbmcgdGhlIGN1cnJlbnQgZnVuY3Rpb25hbGl0eVxuICAgICAgLy8gVE9ETzogTmV4dCBQUiBmb3IgVUkgZmlsdGVyIG5hbWUgd2lsbCBvbmx5IHVwZGF0ZSBmaWx0ZXIgbmFtZSBidXQgaXQgd29uJ3QgaGF2ZSBzaWRlIGVmZmVjdHNcbiAgICAgIC8vIHdlIGFyZSBnb25uYSB1c2UgcGFpciBvZiBkYXRhc2V0cyBhbmQgZmllbGRJZHggdG8gdXBkYXRlIHRoZSBmaWx0ZXJcbiAgICAgIGNvbnN0IGRhdGFzZXRJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG4gICAgICBjb25zdCB7ZmlsdGVyOiB1cGRhdGVkRmlsdGVyLCBkYXRhc2V0OiBuZXdEYXRhc2V0fSA9IGFwcGx5RmlsdGVyRmllbGROYW1lKFxuICAgICAgICBmaWx0ZXIsXG4gICAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgICBkYXRhc2V0SWQsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB2YWx1ZUluZGV4LFxuICAgICAgICB7bWVyZ2VEb21haW46IHZhbHVlSW5kZXggPiAwfVxuICAgICAgKTtcbiAgICAgIGlmICh1cGRhdGVkRmlsdGVyKSB7XG4gICAgICAgIGZpbHRlciA9IHVwZGF0ZWRGaWx0ZXI7XG4gICAgICAgIGlmIChmaWx0ZXIuZ3B1KSB7XG4gICAgICAgICAgZmlsdGVyID0gc2V0RmlsdGVyR3B1TW9kZShmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgICAgIGZpbHRlciA9IGFzc2lnbkdwdUNoYW5uZWwoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZSA9IHNldChbJ2RhdGFzZXRzJywgZGF0YXNldElkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xuICAgICAgICAvLyByZW1vdmUgZmlsdGVyIFBsb3QgYXQgZGF0YXNldElkLCBzbyBpdCB3aWxsIGJlIHJlY2FsY3VsYXRlZFxuICAgICAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YXNldElkKTtcblxuICAgICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSB1cGRhdGVkRmlsdGVyLmRhdGFJZDtcbiAgICAgIH1cbiAgICAgIC8vIG9ubHkgZmlsdGVyIHRoZSBjdXJyZW50IGRhdGFzZXRcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMubGF5ZXJJZDoge1xuICAgICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgb25seSBkYXRhc2V0SWQvcyBpZiB3ZSBoYXZlIGFkZGVkL3JlbW92ZWQgbGF5ZXJzXG4gICAgICAvLyAtIGNoZWNrIGZvciBsYXllcklkIGNoYW5nZXMgKFhPUiB3b3JrcyBiZWNhdXNlIG9mIHN0cmluZyB2YWx1ZXMpXG4gICAgICAvLyBpZiBubyBkaWZmZXJlbmNlcyBiZXR3ZWVuIGxheWVySWRzLCBkb24ndCBkbyBhbnkgZmlsdGVyaW5nXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCBsYXllcklkRGlmZmVyZW5jZSA9IHhvcih2YWx1ZSwgZmlsdGVyLmxheWVySWQpO1xuXG4gICAgICBjb25zdCBsYXllckRhdGFJZHMgPSB1bmlxPHN0cmluZz4oXG4gICAgICAgIGxheWVySWREaWZmZXJlbmNlXG4gICAgICAgICAgLm1hcChsaWQgPT5cbiAgICAgICAgICAgIGdldChcbiAgICAgICAgICAgICAgc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsaWQpLFxuICAgICAgICAgICAgICBbJ2NvbmZpZycsICdkYXRhSWQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKGQgPT4gZCkgYXMgc3RyaW5nW11cbiAgICAgICk7XG5cbiAgICAgIC8vIG9ubHkgZmlsdGVyIGRhdGFzZXRzSWRzXG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBsYXllckRhdGFJZHM7XG5cbiAgICAgIC8vIFVwZGF0ZSBuZXdGaWx0ZXIgZGF0YUlkc1xuICAgICAgY29uc3QgbmV3RGF0YUlkcyA9IHVuaXE8c3RyaW5nPihcbiAgICAgICAgdmFsdWVcbiAgICAgICAgICA/Lm1hcChsaWQgPT5cbiAgICAgICAgICAgIGdldChcbiAgICAgICAgICAgICAgc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsaWQpLFxuICAgICAgICAgICAgICBbJ2NvbmZpZycsICdkYXRhSWQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKGQgPT4gZCkgYXMgc3RyaW5nW11cbiAgICAgICk7XG5cbiAgICAgIGZpbHRlciA9IHtcbiAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICBsYXllcklkOiB2YWx1ZSxcbiAgICAgICAgZGF0YUlkOiBuZXdEYXRhSWRzXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIGZpbHRlciA9IHNldChbcHJvcF0sIHZhbHVlLCBmaWx0ZXIpO1xuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gWy4uLmZpbHRlci5kYXRhSWRdO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4ge2ZpbHRlciwgZGF0YXNldElkcywgZGF0YXNldElkc1RvRmlsdGVyLCBzdGF0ZX07XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzICovXG5cbi8qKlxuICogU2V0IHRoZSBwcm9wZXJ0eSBvZiBhIGZpbHRlciBwbG90XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RmlsdGVyUGxvdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkeCwgbmV3UHJvcH06IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJQbG90VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoIXN0YXRlLmZpbHRlcnNbaWR4XSkge1xuICAgIENvbnNvbGUuZXJyb3IoYGZpbHRlcnNbJHtpZHh9XSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0ZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcblxuICBmb3IgKGNvbnN0IHByb3AgaW4gbmV3UHJvcCkge1xuICAgIGlmIChwcm9wID09PSAncGxvdFR5cGUnKSB7XG4gICAgICBuZXdGaWx0ZXIgPSBwaWNrXygncGxvdFR5cGUnKShtZXJnZV8obmV3UHJvcC5wbG90VHlwZSkpKG5ld0ZpbHRlcik7XG4gICAgfSBlbHNlIGlmIChwcm9wID09PSAneUF4aXMnKSB7XG4gICAgICBjb25zdCBjaGFydFR5cGUgPSBuZXdQcm9wLnlBeGlzID8gUExPVF9UWVBFUy5saW5lQ2hhcnQgOiBQTE9UX1RZUEVTLmhpc3RvZ3JhbTtcblxuICAgICAgbmV3RmlsdGVyID0gcGlja18oJ3Bsb3RUeXBlJykobWVyZ2VfKHt0eXBlOiBjaGFydFR5cGV9KSkobWVyZ2VfKG5ld1Byb3ApKG5ld0ZpbHRlcikpO1xuICAgIH1cbiAgfVxuXG4gIG5ld0ZpbHRlciA9IHVwZGF0ZUZpbHRlclBsb3Qoc3RhdGUuZGF0YXNldHMsIG5ld0ZpbHRlcik7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGlkeCA/IG5ld0ZpbHRlciA6IGYpKVxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PlxuICAhYWN0aW9uLmRhdGFJZFxuICAgID8gc3RhdGVcbiAgICA6IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGZpbHRlcnM6IFsuLi5zdGF0ZS5maWx0ZXJzLCBnZXREZWZhdWx0RmlsdGVyKHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIGlkOiBhY3Rpb24uaWR9KV1cbiAgICAgIH07XG5cbi8qKlxuICogQ3JlYXRlIG9yIHVwZGF0ZSBhIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5DcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkLCBkYXRhSWQsIGZpZWxkLCB2YWx1ZX0gPSBhY3Rpb247XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGNvbnN0IG9yaWdpbmFsSW5kZXggPSBuZXdTdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGlkKTtcbiAgbGV0IGZpbHRlckluZGV4ID0gb3JpZ2luYWxJbmRleDtcbiAgaWYgKCFpZCAmJiAhZGF0YUlkKSB7XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG4gIGlmIChvcmlnaW5hbEluZGV4IDwgMCAmJiBkYXRhSWQpIHtcbiAgICBuZXdTdGF0ZSA9IGFkZEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtkYXRhSWR9KTtcbiAgICBpZiAobmV3U3RhdGUuZmlsdGVycy5sZW5ndGggIT09IHN0YXRlLmZpbHRlcnMubGVuZ3RoICsgMSkge1xuICAgICAgLy8gTm8gbmV3IGZpbHRlciB3YXMgYWRkZWRcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgLy8gSGVyZSB3ZSBhcmUgYXNzdW1pbmcgdGhhdCB0aGUgZmlsdGVyIHdhcyBhZGRlZCBhdCB0aGUgZW5kXG4gICAgZmlsdGVySW5kZXggPSBuZXdTdGF0ZS5maWx0ZXJzLmxlbmd0aCAtIDE7XG4gICAgbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJbmRleF0gPSB7XG4gICAgICAuLi5uZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlckluZGV4XSxcbiAgICAgIC4uLihpZCA/IHtpZH0gOiBudWxsKVxuICAgIH07XG4gIH1cblxuICAvLyBObyBuZWVkIHRvIHVwZGF0ZSB0aGlzIGlmIGl0J3MgYSBuZXdseSBjcmVhdGVkIGZpbHRlclxuICAvLyBGaXJzdCB3ZSBtYWtlIHN1cmUgYWxsIHRoZSBkYXRhSWRzIHRoYXQgZmllbGRzIHJlZmVyIHRvIGFyZSB1cGRhdGVkXG4gIGlmIChvcmlnaW5hbEluZGV4ID49IDAgJiYgZGF0YUlkKSB7XG4gICAgLy8gSWYgdGhlIGRhdGFJZCBpcyBhbiBhcnJheSwgd2UgbmVlZCB0byB1cGRhdGUgZWFjaCBvbmUgaW5kaXZpZHVhbGx5IGFzIHRoZXkgbmVlZCBhIGNvcnJlY3QgdmFsdWVJbmRleCBwYXNzZWRcbiAgICBuZXdTdGF0ZSA9IChBcnJheS5pc0FycmF5KGRhdGFJZCkgPyBkYXRhSWQgOiBbZGF0YUlkXSkucmVkdWNlKChhY2N1LCBkLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoYWNjdSwge1xuICAgICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgICBwcm9wOiAnZGF0YUlkJyxcbiAgICAgICAgdmFsdWU6IGQsXG4gICAgICAgIHZhbHVlSW5kZXg6IGluZGV4XG4gICAgICB9KTtcbiAgICB9LCBuZXdTdGF0ZSk7XG4gIH1cbiAgLy8gVGhlbiB3ZSB1cGRhdGUgdGhlIGZpZWxkc1xuICBpZiAoZmllbGQpIHtcbiAgICAvLyBJZiB0aGUgZmllbGQgaXMgYW4gYXJyYXksIHdlIG5lZWQgdG8gdXBkYXRlIGVhY2ggZmllbGQgaW5kaXZpZHVhbGx5IGFzIHRoZXkgbmVlZCBhIGNvcnJlY3QgdmFsdWVJbmRleCBwYXNzZWRcbiAgICBuZXdTdGF0ZSA9IChBcnJheS5pc0FycmF5KGZpZWxkKSA/IGZpZWxkIDogW2ZpZWxkXSkucmVkdWNlKChhY2N1LCBmLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoYWNjdSwge1xuICAgICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgICBwcm9wOiAnbmFtZScsXG4gICAgICAgIHZhbHVlOiBmLFxuICAgICAgICB2YWx1ZUluZGV4OiBpbmRleFxuICAgICAgfSk7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG4gIC8vIFRoZW4gd2UgdXBkYXRlIHRoZSB2YWx1ZSBzZXBhcmF0ZWx5XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWR4OiBmaWx0ZXJJbmRleCwgcHJvcDogJ3ZhbHVlJywgdmFsdWV9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogU2V0IGxheWVyIGNvbG9yIHBhbGV0dGUgdWkgc3RhdGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvbGRMYXllciwgcHJvcCwgbmV3Q29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLkxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgb2xkVml4Q29uZmlnID0gb2xkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wXTtcbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbG9yVUkocHJvcCwgbmV3Q29uZmlnKTtcbiAgY29uc3QgbmV3VmlzQ29uZmlnID0gbmV3TGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wXTtcbiAgaWYgKG9sZFZpeENvbmZpZyAhPT0gbmV3VmlzQ29uZmlnKSB7XG4gICAgcmV0dXJuIGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgICAgb2xkTGF5ZXIsXG4gICAgICBuZXdWaXNDb25maWc6IHtcbiAgICAgICAgW3Byb3BdOiBuZXdWaXNDb25maWdcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3RhdGUubGF5ZXJzLm1hcChsID0+IChsLmlkID09PSBvbGRMYXllci5pZCA/IG5ld0xheWVyIDogbCkpXG4gIH07XG59O1xuXG4vKipcbiAqIFN0YXJ0IGFuZCBlbmQgZmlsdGVyIGFuaW1hdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gYWN0aW9uLmlkeCA/IHsuLi5mLCBpc0FuaW1hdGluZzogIWYuaXNBbmltYXRpbmd9IDogZikpXG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnKGNvbmZpZzogQW5pbWF0aW9uQ29uZmlnIHwgRmlsdGVyQW5pbWF0aW9uQ29uZmlnKTogYm9vbGVhbiB7XG4gIHJldHVybiAnZGF0YUlkJyBpbiBjb25maWcgJiYgJ2FuaW1hdGlvbldpbmRvdycgaW4gY29uZmlnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRBbmltYXRpb25Db25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb25maWd9ID0gYWN0aW9uO1xuICBpZiAoaXNGaWx0ZXJBbmltYXRpb25Db25maWcoY29uZmlnKSkge1xuICAgIC8vIEZpbmQgZmlsdGVyIHVzZWQgZm9yIGFuaW1hdGlvblxuICAgIC8vIEFzc3VtaW5nIHRoZXJlJ3Mgb25seSBvbmUgZmlsdGVyIHVzZWQgZm9yIGFuaW1hdGlvbiwgc2VlIHNldEZpbHRlclZpZXdVcGRhdGVyXG4gICAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gIWlzU2lkZUZpbHRlcihmKSk7XG4gICAgaWYgKCFmaWx0ZXIpIHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgY29uc3QgbmV3RmlsdGVyID0gey4uLmZpbHRlciwgLi4uY29uZmlnfTtcbiAgICByZXR1cm4gYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyKHN0YXRlLCBhcHBseUZpbHRlckNvbmZpZyhmaWx0ZXIuaWQsIG5ld0ZpbHRlcikpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICAgIC4uLmNvbmZpZ1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgIGlzQW5pbWF0aW5nOiAhc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmlzQW5pbWF0aW5nXG4gIH1cbn0pO1xuXG4vKipcbiAqIEhpZGUgYW5kIHNob3cgbGF5ZXIgYW5pbWF0aW9uIGNvbnRyb2xcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2xVcGRhdGVyID0gKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBhbmltYXRpb25Db25maWc6IHtcbiAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgaGlkZUNvbnRyb2w6ICFzdGF0ZS5hbmltYXRpb25Db25maWcuaGlkZUNvbnRyb2xcbiAgfVxufSk7XG5cbi8qKlxuICogQ2hhbmdlIGZpbHRlciBhbmltYXRpb24gc3BlZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBhY3Rpb24uaWR4ID8gey4uLmYsIHNwZWVkOiBhY3Rpb24uc3BlZWR9IDogZikpXG59KTtcblxuLyoqXG4gKiBVcGRhdGUgYW5pbWF0aW9uIHNwZWVkIHdpdGggdGhlIHZlcnRpY2FsIHNwZWVkIHNsaWRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7c3BlZWR9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIHNwZWVkXG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBTaG93IGxhcmdlciB0aW1lIGZpbHRlciBhdCBib3R0b20gZm9yIHRpbWUgcGxheWJhY2sgKGFwcGx5IHRvIHRpbWUgZmlsdGVyIG9ubHkpXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RmlsdGVyVmlld1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyVmlld1VwZGF0ZXJBY3Rpb25cbikgPT4ge1xuICBjb25zdCB7dmlldywgaWR4fSA9IGFjdGlvbjtcbiAgY29uc3Qgc2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3ID0gdmlldyA9PT0gRklMVEVSX1ZJRVdfVFlQRVMuZW5sYXJnZWQ7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+XG4gICAgICBpID09PSBpZHhcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgdmlld1xuICAgICAgICAgIH1cbiAgICAgICAgOiBzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXdcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgdmlldzogRklMVEVSX1ZJRVdfVFlQRVMuc2lkZVxuICAgICAgICAgIH1cbiAgICAgICAgOiBmXG4gICAgKVxuICB9O1xufTtcblxuLyoqXG4gKiBUb2dnbGVzIGZpbHRlciBmZWF0dXJlIHZpc2liaWxpdHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2FjdGlvbi5pZHhdO1xuICBjb25zdCBpc1Zpc2libGUgPSBnZXQoZmlsdGVyLCBbJ3ZhbHVlJywgJ3Byb3BlcnRpZXMnLCAnaXNWaXNpYmxlJ10pO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIoc3RhdGUsIHtcbiAgICBpZHg6IGFjdGlvbi5pZHgsXG4gICAgcHJvcDogJ2VuYWJsZWQnLFxuICAgIHZhbHVlOiAhaXNWaXNpYmxlXG4gIH0pO1xuXG4gIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogYWN0aW9uLmlkeCxcbiAgICBwcm9wOiAndmFsdWUnLFxuICAgIHZhbHVlOiBmZWF0dXJlVG9GaWx0ZXJWYWx1ZShmaWx0ZXIudmFsdWUsIGZpbHRlci5pZCwge1xuICAgICAgaXNWaXNpYmxlOiAhaXNWaXNpYmxlXG4gICAgfSlcbiAgfSk7XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVGaWx0ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkeH0gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhSWQsIGlkfSA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcblxuICBjb25zdCBuZXdGaWx0ZXJzID0gW1xuICAgIC4uLnN0YXRlLmZpbHRlcnMuc2xpY2UoMCwgaWR4KSxcbiAgICAuLi5zdGF0ZS5maWx0ZXJzLnNsaWNlKGlkeCArIDEsIHN0YXRlLmZpbHRlcnMubGVuZ3RoKVxuICBdO1xuXG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKGRhdGFJZCwgc3RhdGUuZGF0YXNldHMsIG5ld0ZpbHRlcnMsIHN0YXRlLmxheWVycyk7XG4gIGNvbnN0IG5ld0VkaXRvciA9XG4gICAgZ2V0RmlsdGVySWRJbkZlYXR1cmUoc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZSkgPT09IGlkXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gICAgICAgIH1cbiAgICAgIDogc3RhdGUuZWRpdG9yO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnXSwgbmV3RmlsdGVycywgc3RhdGUpO1xuICBuZXdTdGF0ZSA9IHNldChbJ2RhdGFzZXRzJ10sIGZpbHRlcmVkRGF0YXNldHMsIG5ld1N0YXRlKTtcbiAgbmV3U3RhdGUgPSBzZXQoWydlZGl0b3InXSwgbmV3RWRpdG9yLCBuZXdTdGF0ZSk7XG5cbiAgcmV0dXJuIHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXdTdGF0ZSwgZGF0YUlkLCB1bmRlZmluZWQpO1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRMYXllclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGxldCBuZXdMYXllcjtcbiAgbGV0IG5ld0xheWVyRGF0YTtcbiAgaWYgKGFjdGlvbi5jb25maWcpIHtcbiAgICBuZXdMYXllciA9IGNyZWF0ZUxheWVyRnJvbUNvbmZpZyhzdGF0ZSwgYWN0aW9uLmNvbmZpZyk7XG4gICAgaWYgKCFuZXdMYXllcikge1xuICAgICAgQ29uc29sZS53YXJuKFxuICAgICAgICAnRmFpbGVkIHRvIGNyZWF0ZSBsYXllciBmcm9tIGNvbmZpZywgaXQgdXN1YWxseSBtZWFucyB0aGUgY29uZmlnIGlzIG5vdCBiZSBpbiBjb3JyZWN0IGZvcm1hdCcsXG4gICAgICAgIGFjdGlvbi5jb25maWdcbiAgICAgICk7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSk7XG4gICAgbmV3TGF5ZXIgPSByZXN1bHQubGF5ZXI7XG4gICAgbmV3TGF5ZXJEYXRhID0gcmVzdWx0LmxheWVyRGF0YTtcbiAgfSBlbHNlIHtcbiAgICAvLyBjcmVhdGUgYW4gZW1wdHkgbGF5ZXIgd2l0aCBhIHNwZWNpZmljIGRhdGFzZXQgb3IgYSBkZWZhdWx0IG9uZVxuICAgIGNvbnN0IGRlZmF1bHREYXRhc2V0ID0gYWN0aW9uLmRhdGFzZXRJZCA/PyBPYmplY3Qua2V5cyhzdGF0ZS5kYXRhc2V0cylbMF07XG4gICAgbmV3TGF5ZXIgPSBuZXcgTGF5ZXIoe1xuICAgICAgaXNWaXNpYmxlOiB0cnVlLFxuICAgICAgaXNDb25maWdBY3RpdmU6IHRydWUsXG4gICAgICBkYXRhSWQ6IGRlZmF1bHREYXRhc2V0XG4gICAgfSk7XG4gICAgbmV3TGF5ZXJEYXRhID0ge307XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBbLi4uc3RhdGUubGF5ZXJzLCBuZXdMYXllcl0sXG4gICAgbGF5ZXJEYXRhOiBbLi4uc3RhdGUubGF5ZXJEYXRhLCBuZXdMYXllckRhdGFdLFxuICAgIC8vIGFkZCBuZXcgbGF5ZXIgYXQgdGhlIHRvcFxuICAgIGxheWVyT3JkZXI6IFtuZXdMYXllci5pZCwgLi4uc3RhdGUubGF5ZXJPcmRlcl0sXG4gICAgc3BsaXRNYXBzOiBhZGROZXdMYXllcnNUb1NwbGl0TWFwKHN0YXRlLnNwbGl0TWFwcywgbmV3TGF5ZXIpXG4gIH07XG5cbiAgaWYgKG5ld0xheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogcmVtb3ZlIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlTGF5ZXJVcGRhdGVyPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBUIHtcbiAgY29uc3QgaWR4ID0gTnVtYmVyLmlzRmluaXRlKGlkKVxuICAgID8gLy8gc3VwcG9ydCBvbGRlciBBUEksIHJlbW92ZSBsYXllciBieSBpZHhcbiAgICAgIE51bWJlcihpZClcbiAgICA6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzdGF0ZS5sYXllcnMubGVuZ3RoKSB7XG4gICAgLy8gaW52YWxpZCBpbmRleFxuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCByZW1vdmUgbGF5ZXIgd2l0aCBpbnZhbGlkIGlkfGlkeCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtsYXllcnMsIGxheWVyRGF0YSwgbGF5ZXJPcmRlciwgY2xpY2tlZCwgaG92ZXJJbmZvfSA9IHN0YXRlO1xuICBjb25zdCBsYXllclRvUmVtb3ZlID0gbGF5ZXJzW2lkeF07XG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogZmlsdGVyT3V0QnlJZChsYXllclRvUmVtb3ZlLmlkKShsYXllcnMpLFxuICAgIGxheWVyRGF0YTogcmVtb3ZlRWxlbWVudEF0SW5kZXgoaWR4KShsYXllckRhdGEpLFxuICAgIGxheWVyT3JkZXI6IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihsYXllck9yZGVyLCBsYXllclRvUmVtb3ZlLmlkKSxcbiAgICBjbGlja2VkOiBsYXllclRvUmVtb3ZlLmlzTGF5ZXJIb3ZlcmVkKGNsaWNrZWQpID8gdW5kZWZpbmVkIDogY2xpY2tlZCxcbiAgICBob3ZlckluZm86IGxheWVyVG9SZW1vdmUuaXNMYXllckhvdmVyZWQoaG92ZXJJbmZvKSA/IHVuZGVmaW5lZCA6IGhvdmVySW5mbyxcbiAgICBzcGxpdE1hcHM6IHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyhzdGF0ZS5zcGxpdE1hcHMsIGxheWVyVG9SZW1vdmUpXG4gICAgLy8gVE9ETzogdXBkYXRlIGZpbHRlcnMsIGNyZWF0ZSBoZWxwZXIgdG8gcmVtb3ZlIGxheWVyIGZvcm0gZmlsdGVyIChyZW1vdmUgbGF5ZXJpZCBhbmQgZGF0YWlkKSBpZiBtYXBwZWRcbiAgfTtcblxuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbn1cblxuLyoqXG4gKiBSZW9yZGVyIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVvcmRlckxheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b3JkZXJ9OiBWaXNTdGF0ZUFjdGlvbnMuUmVvcmRlckxheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGxheWVyT3JkZXI6IG9yZGVyXG59KTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgbGF5ZXIgZ3JvdXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRMYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRMYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TmV3TGF5ZXJHcm91cChhY3Rpb24pO1xuICBsZXQgbmV3TGF5ZXJPcmRlciA9IFsuLi5zdGF0ZS5sYXllck9yZGVyXTtcblxuICBpZiAoYWN0aW9uLmxheWVyT3JkZXIpIHtcbiAgICBhY3Rpb24ubGF5ZXJPcmRlci5mb3JFYWNoKGxheWVySWQgPT4ge1xuICAgICAgbmV3TGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihuZXdMYXllck9yZGVyLCBsYXllcklkIGFzIHN0cmluZyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyT3JkZXI6IGFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlcihuZXdMYXllck9yZGVyLCBsYXllckdyb3VwKVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBsYXllciBncm91cCBhbmQgYWxsIGxheWVycyB3aXRoaW4gaXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVMYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVMYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwVG9SZW1vdmUgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgaWQpO1xuICBpZiAoIWxheWVyR3JvdXBUb1JlbW92ZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGxheWVySWRzVG9SZW1vdmUgPSBnZXRGbGF0TGF5ZXJPcmRlcihsYXllckdyb3VwVG9SZW1vdmUubGF5ZXJPcmRlcik7XG4gIGxldCBuZXdTdGF0ZSA9IHsuLi5zdGF0ZX07XG5cbiAgbGF5ZXJJZHNUb1JlbW92ZS5mb3JFYWNoKGxheWVySWQgPT4ge1xuICAgIGNvbnN0IGlkeCA9IG5ld1N0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBsYXllcklkKTtcbiAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgIG5ld1N0YXRlID0gcmVtb3ZlTGF5ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWQ6IGxheWVySWR9KTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IG5ld0xheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgbGF5ZXJHcm91cFRvUmVtb3ZlKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBhIGxheWVyIGdyb3VwIChsYWJlbCwgdmlzaWJpbGl0eSwgbGF5ZXIgbWVtYmVyc2hpcClcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVMYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWQsIG9wdGlvbnN9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGlkKTtcbiAgaWYgKCFsYXllckdyb3VwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gey4uLnN0YXRlfTtcblxuICBpZiAob3B0aW9ucy5sYXllck9yZGVyKSB7XG4gICAgbmV3U3RhdGUubGF5ZXJPcmRlciA9IFsuLi5sYXllckdyb3VwLmxheWVyT3JkZXIsIC4uLm5ld1N0YXRlLmxheWVyT3JkZXJdO1xuICAgIG9wdGlvbnMubGF5ZXJPcmRlci5mb3JFYWNoKGxheWVySWQgPT4ge1xuICAgICAgbmV3U3RhdGUubGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihcbiAgICAgICAgbmV3U3RhdGUubGF5ZXJPcmRlcixcbiAgICAgICAgbGF5ZXJJZCBhcyBzdHJpbmdcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBuZXdMYXllckdyb3VwID0ge1xuICAgIC4uLmxheWVyR3JvdXAsXG4gICAgLi4ub3B0aW9uc1xuICB9O1xuXG4gIGlmIChuZXdMYXllckdyb3VwLmlzVmlzaWJsZSAhPT0gbGF5ZXJHcm91cC5pc1Zpc2libGUpIHtcbiAgICBjb25zdCBsYXllcklkcyA9IGdldEZsYXRMYXllck9yZGVyKG5ld0xheWVyR3JvdXAubGF5ZXJPcmRlcik7XG4gICAgbmV3U3RhdGUgPSBuZXdTdGF0ZS5sYXllcnMucmVkdWNlKChhY2MsIGxheWVyKSA9PiB7XG4gICAgICBpZiAobGF5ZXJJZHMuaW5jbHVkZXMobGF5ZXIuaWQpKSB7XG4gICAgICAgIHJldHVybiBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoYWNjLCB7XG4gICAgICAgICAgb2xkTGF5ZXI6IGxheWVyLFxuICAgICAgICAgIG5ld0NvbmZpZzoge2lzVmlzaWJsZTogbmV3TGF5ZXJHcm91cC5pc1Zpc2libGV9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBuZXdTdGF0ZSk7XG4gIH1cblxuICBjb25zdCBuZXdMYXllck9yZGVyID0gdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBuZXdMYXllckdyb3VwKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIEFkZCBhIGxheWVyIHRvIGEgbGF5ZXIgZ3JvdXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtsYXllckdyb3VwSWQsIGxheWVySWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGxheWVyR3JvdXBJZCk7XG4gIGNvbnN0IGxheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsYXllcklkKTtcbiAgaWYgKCFsYXllckdyb3VwIHx8ICFsYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmIChsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZChlbnRyeSA9PiBlbnRyeSA9PT0gbGF5ZXJJZCkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIobGF5ZXJHcm91cC5sYXllck9yZGVyLCBsYXllcklkKTtcbiAgcmV0dXJuIHVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyKHN0YXRlLCB7XG4gICAgaWQ6IGxheWVyR3JvdXBJZCxcbiAgICBvcHRpb25zOiB7bGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyfVxuICB9KTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgbGF5ZXIgZnJvbSBhIGxheWVyIGdyb3VwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlTGF5ZXJGcm9tTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlTGF5ZXJGcm9tTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2xheWVyR3JvdXBJZCwgbGF5ZXJJZH0gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgbGF5ZXJHcm91cElkKTtcbiAgaWYgKCFsYXllckdyb3VwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXJHcm91cE9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgbGF5ZXJJZCk7XG4gIHJldHVybiB1cGRhdGVMYXllckdyb3VwVXBkYXRlcihzdGF0ZSwge1xuICAgIGlkOiBsYXllckdyb3VwSWQsXG4gICAgb3B0aW9uczoge2xheWVyT3JkZXI6IG5ld0xheWVyR3JvdXBPcmRlcn1cbiAgfSk7XG59O1xuXG4vKipcbiAqIFN3YXAgbGF5ZXIgb3JkZXIgZW50cmllcyBiZXR3ZWVuIHJvb3QgYW5kIGdyb3Vwc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBjb25zdCBzd2FwTGF5ZXJPcmRlckVudHJpZXNVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlN3YXBMYXllck9yZGVyRW50cmllc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge29yaWdpbkxheWVySWQsIGRlc3RpbmF0aW9uTGF5ZXJJZCwgb3JpZ2luTGF5ZXJHcm91cElkLCBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZH0gPSBhY3Rpb247XG5cbiAgaWYgKCFvcmlnaW5MYXllckdyb3VwSWQgJiYgIWRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgY29uc3Qgb3JpZ2luSW5kZXggPSBzdGF0ZS5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBvcmlnaW5MYXllcklkIDogZW50cnkuaWQgPT09IG9yaWdpbkxheWVySWRcbiAgICApO1xuICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQgJiYgb3JpZ2luSW5kZXggIT09IC0xKSB7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvbkluZGV4ID0gc3RhdGUubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBkZXN0aW5hdGlvbkxheWVySWQgOiBlbnRyeS5pZCA9PT0gZGVzdGluYXRpb25MYXllcklkXG4gICAgICApO1xuICAgICAgaWYgKGRlc3RpbmF0aW9uSW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IG5ld0xheWVyT3JkZXIgPSBhcnJheU1vdmUoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luSW5kZXgsIGRlc3RpbmF0aW9uSW5kZXgpO1xuICAgICAgICByZXR1cm4gey4uLnN0YXRlLCBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAob3JpZ2luTGF5ZXJHcm91cElkICYmICFkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGxldCBuZXdMYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVySWQpO1xuICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQpIHtcbiAgICAgIGNvbnN0IGRlc3RpbmF0aW9uSW5kZXggPSBuZXdMYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZCA6IGZhbHNlXG4gICAgICApO1xuICAgICAgbmV3TGF5ZXJPcmRlci5zcGxpY2UoZGVzdGluYXRpb25JbmRleCA9PT0gLTEgPyAwIDogZGVzdGluYXRpb25JbmRleCwgMCwgb3JpZ2luTGF5ZXJJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVyT3JkZXIgPSBbLi4ubmV3TGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJJZF07XG4gICAgfVxuICAgIHJldHVybiB7Li4uc3RhdGUsIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJ9O1xuICB9XG5cbiAgaWYgKG9yaWdpbkxheWVyR3JvdXBJZCAmJiBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGlmIChvcmlnaW5MYXllckdyb3VwSWQgPT09IGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVyR3JvdXBJZCk7XG4gICAgICBpZiAoIWxheWVyR3JvdXApIHJldHVybiBzdGF0ZTtcbiAgICAgIGNvbnN0IG9yaWdpbkluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IG9yaWdpbkxheWVySWQgOiBlbnRyeS5pZCA9PT0gb3JpZ2luTGF5ZXJJZFxuICAgICAgKTtcbiAgICAgIGlmIChvcmlnaW5JbmRleCA9PT0gLTEpIHJldHVybiBzdGF0ZTtcbiAgICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQpIHtcbiAgICAgICAgY29uc3QgZGVzdEluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkIDogZW50cnkuaWQgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZFxuICAgICAgICApO1xuICAgICAgICBpZiAoZGVzdEluZGV4ID09PSAtMSkgcmV0dXJuIHN0YXRlO1xuICAgICAgICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhcnJheU1vdmUobGF5ZXJHcm91cC5sYXllck9yZGVyLCBvcmlnaW5JbmRleCwgZGVzdEluZGV4KTtcbiAgICAgICAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwge1xuICAgICAgICAgIC4uLmxheWVyR3JvdXAsXG4gICAgICAgICAgbGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gey4uLnN0YXRlLCBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICAvLyBDcm9zcy1ncm91cCBtb3ZlOiByZW1vdmUgZnJvbSBvcmlnaW4sIHRoZW4gYWRkIHRvIGRlc3RpbmF0aW9uXG4gICAgY29uc3QgbGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgICBsZXQgbmV3U3RhdGUgPSBhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIoXG4gICAgICB7Li4uc3RhdGUsIGxheWVyT3JkZXJ9LFxuICAgICAge2xheWVySWQ6IG9yaWdpbkxheWVySWQsIGxheWVyR3JvdXBJZDogZGVzdGluYXRpb25MYXllckdyb3VwSWR9XG4gICAgKTtcblxuICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQpIHtcbiAgICAgIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgZGVzdGluYXRpb25MYXllckdyb3VwSWQpO1xuICAgICAgaWYgKCFsYXllckdyb3VwKSByZXR1cm4gc3RhdGU7XG4gICAgICBjb25zdCBvcmlnaW5JbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT4gZW50cnkgPT09IG9yaWdpbkxheWVySWQpO1xuICAgICAgY29uc3QgZGVzdEluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PiBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkKTtcbiAgICAgIGlmIChvcmlnaW5JbmRleCAhPT0gLTEgJiYgZGVzdEluZGV4ICE9PSAtMSkge1xuICAgICAgICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhcnJheU1vdmUobGF5ZXJHcm91cC5sYXllck9yZGVyLCBvcmlnaW5JbmRleCwgZGVzdEluZGV4KTtcbiAgICAgICAgbmV3U3RhdGUgPSB7XG4gICAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgICAgbGF5ZXJPcmRlcjogdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCB7XG4gICAgICAgICAgICAuLi5sYXllckdyb3VwLFxuICAgICAgICAgICAgbGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyXG4gICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG5cbiAgaWYgKCFvcmlnaW5MYXllckdyb3VwSWQgJiYgZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICBjb25zdCBsYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVySWQpO1xuICAgIHJldHVybiBhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIoXG4gICAgICB7Li4uc3RhdGUsIGxheWVyT3JkZXJ9LFxuICAgICAge2xheWVySWQ6IG9yaWdpbkxheWVySWQsIGxheWVyR3JvdXBJZDogZGVzdGluYXRpb25MYXllckdyb3VwSWR9XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn07XG5cbi8qKlxuICogZHVwbGljYXRlIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgZHVwbGljYXRlTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5EdXBsaWNhdGVMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gTnVtYmVyLmlzRmluaXRlKGlkKVxuICAgID8gLy8gc3VwcG9ydCBvbGRlciBBUEksIHJlbW92ZSBsYXllciBieSBpZHhcbiAgICAgIE51bWJlcihpZClcbiAgICA6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8ICFzdGF0ZS5sYXllcnNbaWR4XSkge1xuICAgIENvbnNvbGUud2FybihgbGF5ZXIgJHtpZHh9IG5vdCBmb3VuZCBpbiBsYXllck9yZGVyYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2xheWVyc30gPSBzdGF0ZTtcbiAgY29uc3Qgb3JpZ2luYWwgPSBsYXllcnNbaWR4XTtcblxuICBjb25zdCBvcmlnaW5hbExheWVyT3JkZXJJZHggPSBnZXRJbmRleEZyb21MYXllckVudHJ5SWQoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luYWwuaWQpO1xuICBsZXQgbmV3TGFiZWwgPSBgQ29weSBvZiAke29yaWdpbmFsLmNvbmZpZy5sYWJlbH1gO1xuICBsZXQgcG9zdGZpeCA9IDA7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgd2hpbGUgKGxheWVycy5maW5kKGwgPT4gbC5jb25maWcubGFiZWwgPT09IG5ld0xhYmVsKSkge1xuICAgIG5ld0xhYmVsID0gYENvcHkgb2YgJHtvcmlnaW5hbC5jb25maWcubGFiZWx9ICR7Kytwb3N0Zml4fWA7XG4gIH1cblxuICAvLyBjb2xsZWN0IGxheWVyIGNvbmZpZyBmcm9tIG9yaWdpbmFsXG4gIGNvbnN0IGxvYWRlZExheWVyID0gc2VyaWFsaXplTGF5ZXIob3JpZ2luYWwsIHN0YXRlLnNjaGVtYSk7XG5cbiAgLy8gYXNzaWduIG5ldyBpZCBhbmQgbGFiZWwgdG8gY29waWVkIGxheWVyXG4gIGlmICghbG9hZGVkTGF5ZXI/LmNvbmZpZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsb2FkZWRMYXllci5jb25maWcubGFiZWwgPSBuZXdMYWJlbDtcbiAgbG9hZGVkTGF5ZXIuaWQgPSBnZW5lcmF0ZUhhc2hJZChMQVlFUl9JRF9MRU5HVEgpO1xuXG4gIC8vIGFkZCBsYXllciB0byBzdGF0ZVxuICBsZXQgbmV4dFN0YXRlID0gYWRkTGF5ZXJVcGRhdGVyKHN0YXRlLCB7Y29uZmlnOiBsb2FkZWRMYXllcn0pO1xuICAvLyByZXRyaWV2ZSBuZXdseSBjcmVhdGVkIGxheWVyXG4gIGNvbnN0IG5ld0xheWVyID0gbmV4dFN0YXRlLmxheWVyc1tuZXh0U3RhdGUubGF5ZXJzLmxlbmd0aCAtIDFdO1xuXG4gIC8vIENoZWNrIGlmIHRoZSBvcmlnaW5hbCBsYXllciBpcyBpbnNpZGUgYSBncm91cFxuICBjb25zdCBwYXJlbnRHcm91cCA9IGZpbmRQYXJlbnRHcm91cEZvckxheWVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbmFsLmlkKTtcblxuICBpZiAocGFyZW50R3JvdXApIHtcbiAgICAvLyBMYXllciBpcyBpbnNpZGUgYSBncm91cCAtIHJlbW92ZSB0aGUgcHJlcGVuZGVkIGlkIGZyb20gcm9vdCBhbmQgaW5zZXJ0IGludG8gdGhlIGdyb3VwXG4gICAgY29uc3QgbGF5ZXJPcmRlcldpdGhvdXRQcmVwZW5kZWQgPSBuZXh0U3RhdGUubGF5ZXJPcmRlci5zbGljZSgxKTtcbiAgICBjb25zdCBpZHhJbkdyb3VwID0gcGFyZW50R3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZSA9PiBlID09PSBvcmlnaW5hbC5pZCk7XG4gICAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYXJyYXlJbnNlcnQocGFyZW50R3JvdXAubGF5ZXJPcmRlciwgaWR4SW5Hcm91cCwgbmV3TGF5ZXIuaWQpO1xuICAgIGNvbnN0IHVwZGF0ZWRHcm91cCA9IHsuLi5wYXJlbnRHcm91cCwgbGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyfTtcbiAgICBjb25zdCBuZXdMYXllck9yZGVyID0gdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihcbiAgICAgIGxheWVyT3JkZXJXaXRob3V0UHJlcGVuZGVkLFxuICAgICAgdXBkYXRlZEdyb3VwXG4gICAgKTtcbiAgICBuZXh0U3RhdGUgPSByZW9yZGVyTGF5ZXJVcGRhdGVyKG5leHRTdGF0ZSwge29yZGVyOiBuZXdMYXllck9yZGVyfSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gTGF5ZXIgaXMgYXQgcm9vdCBsZXZlbCAtIHVzZSBvcmlnaW5hbCBpbmRleC1iYXNlZCBpbnNlcnRpb25cbiAgICBjb25zdCBuZXdMYXllck9yZGVyID0gYXJyYXlJbnNlcnQoXG4gICAgICBuZXh0U3RhdGUubGF5ZXJPcmRlci5zbGljZSgxLCBuZXh0U3RhdGUubGF5ZXJPcmRlci5sZW5ndGgpLFxuICAgICAgb3JpZ2luYWxMYXllck9yZGVySWR4LFxuICAgICAgbmV3TGF5ZXIuaWRcbiAgICApO1xuICAgIG5leHRTdGF0ZSA9IHJlb3JkZXJMYXllclVwZGF0ZXIobmV4dFN0YXRlLCB7b3JkZXI6IG5ld0xheWVyT3JkZXJ9KTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV4dFN0YXRlKTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoXG4gICAgYWN0aW9uLmNvbmZpZz8udHlwZSA9PT0gTElHSFRfQU5EX1NIQURPV19FRkZFQ1QudHlwZSAmJlxuICAgIHN0YXRlLmVmZmVjdHMuc29tZShlZmZlY3QgPT4gZWZmZWN0LnR5cGUgPT09IExJR0hUX0FORF9TSEFET1dfRUZGRUNULnR5cGUpXG4gICkge1xuICAgIENvbnNvbGUud2FybihgQ2FuJ3QgYWRkIG1vcmUgdGhhbiBvbmUgJHtMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC5uYW1lfSBlZmZlY3RgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBpZiAoXG4gICAgYWN0aW9uLmNvbmZpZz8udHlwZSA9PT0gRElTVEFOQ0VfRk9HX1RZUEUgJiZcbiAgICBzdGF0ZS5lZmZlY3RzLnNvbWUoXG4gICAgICBlZmZlY3QgPT4gZWZmZWN0LnR5cGUgPT09IERJU1RBTkNFX0ZPR19UWVBFIHx8IGVmZmVjdC50eXBlID09PSBTVVJGQUNFX0ZPR19UWVBFXG4gICAgKVxuICApIHtcbiAgICBDb25zb2xlLndhcm4oXCJDYW4ndCBhZGQgbW9yZSB0aGFuIG9uZSBmb2cgZWZmZWN0XCIpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmIChcbiAgICBhY3Rpb24uY29uZmlnPy50eXBlID09PSBTVVJGQUNFX0ZPR19UWVBFICYmXG4gICAgc3RhdGUuZWZmZWN0cy5zb21lKFxuICAgICAgZWZmZWN0ID0+IGVmZmVjdC50eXBlID09PSBTVVJGQUNFX0ZPR19UWVBFIHx8IGVmZmVjdC50eXBlID09PSBESVNUQU5DRV9GT0dfVFlQRVxuICAgIClcbiAgKSB7XG4gICAgQ29uc29sZS53YXJuKFwiQ2FuJ3QgYWRkIG1vcmUgdGhhbiBvbmUgZm9nIGVmZmVjdFwiKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdFZmZlY3QgPSBjcmVhdGVFZmZlY3QoYWN0aW9uLmNvbmZpZyk7XG5cbiAgLy8gY29sbGFwc2UgY29uZmlndXJhdG9ycyBmb3Igb3RoZXIgZWZmZWN0c1xuICBzdGF0ZS5lZmZlY3RzLmZvckVhY2goZWZmZWN0ID0+IGVmZmVjdC5zZXRQcm9wcyh7aXNDb25maWdBY3RpdmU6IGZhbHNlfSkpO1xuXG4gIGNvbnN0IGVmZmVjdHMgPSBbLi4uc3RhdGUuZWZmZWN0cywgbmV3RWZmZWN0XTtcbiAgY29uc3QgZWZmZWN0T3JkZXIgPSBmaXhFZmZlY3RPcmRlcihlZmZlY3RzLCBbbmV3RWZmZWN0LmlkLCAuLi5zdGF0ZS5lZmZlY3RPcmRlcl0pO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWZmZWN0cyxcbiAgICBlZmZlY3RPcmRlclxuICB9O1xufTtcblxuLyoqXG4gKiByZW1vdmUgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBzdGF0ZS5lZmZlY3RzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IHN0YXRlLmVmZmVjdHMubGVuZ3RoKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHJlbW92ZSBlZmZlY3Qgd2l0aCBpbnZhbGlkIGlkICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2VmZmVjdHMsIGVmZmVjdE9yZGVyfSA9IHN0YXRlO1xuICBjb25zdCBlZmZlY3RUb1JlbW92ZSA9IGVmZmVjdHNbaWR4XTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGZpeGVkIGluIHRzXG4gICAgZWZmZWN0czogZmlsdGVyT3V0QnlJZChlZmZlY3RUb1JlbW92ZS5pZCkoZWZmZWN0cyksXG4gICAgZWZmZWN0T3JkZXI6IGVmZmVjdE9yZGVyLmZpbHRlcihlZmZlY3RJZCA9PiBlZmZlY3RJZCAhPT0gZWZmZWN0VG9SZW1vdmUuaWQpXG4gIH07XG59O1xuXG4vKipcbiAqIFJlb3JkZXIgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVvcmRlckVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge29yZGVyfTogVmlzU3RhdGVBY3Rpb25zLlJlb3JkZXJFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZWZmZWN0T3JkZXI6IGZpeEVmZmVjdE9yZGVyKHN0YXRlLmVmZmVjdHMsIFsuLi5vcmRlcl0pXG59KTtcblxuLyoqXG4gKiBVcGRhdGUgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWQsIHByb3BzfTogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gc3RhdGUuZWZmZWN0cy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzdGF0ZS5lZmZlY3RzLmxlbmd0aCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCB1cGRhdGUgZWZmZWN0IHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBlZmZlY3RPcmRlciA9IHN0YXRlLmVmZmVjdE9yZGVyO1xuICBpZiAocHJvcHMuaWQgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5pZCAhPT0gaWQpIHtcbiAgICBjb25zdCBpZHgyID0gc3RhdGUuZWZmZWN0cy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBwcm9wcy5pZCk7XG4gICAgaWYgKGlkeDIgPj0gMCkge1xuICAgICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHVwZGF0ZSBlZmZlY3Qgd2l0aCBleGlzdGluZyBlZmZlY3QgaWQgJHtpZH1gKTtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBlZmZlY3RPcmRlciA9IGVmZmVjdE9yZGVyLm1hcChlZmZlY3RPcmRlcklkID0+XG4gICAgICBlZmZlY3RPcmRlcklkID09PSBpZCA/IChwcm9wcy5pZCBhcyBzdHJpbmcpIDogZWZmZWN0T3JkZXJJZFxuICAgICk7XG4gIH1cblxuICBjb25zdCBuZXdFZmZlY3RzID0gWy4uLnN0YXRlLmVmZmVjdHNdO1xuICBuZXdFZmZlY3RzW2lkeF0uc2V0UHJvcHMocHJvcHMpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWZmZWN0czogbmV3RWZmZWN0cyxcbiAgICBlZmZlY3RPcmRlclxuICB9O1xufTtcblxuLy8gQU5OT1RBVElPTiBVUERBVEVSU1xuXG5mdW5jdGlvbiBtYWtlTmV3QW5ub3RhdGlvbihjb25maWc/OiBBbm5vdGF0aW9uUHJvcHNQYXJ0aWFsKTogQW5ub3RhdGlvbiB7XG4gIGNvbnN0IGtpbmQgPSBjb25maWc/LmtpbmQgPz8gSU5JVElBTF9BTk5PVEFUSU9OX0tJTkQ7XG4gIGNvbnN0IGJhc2UgPSB7XG4gICAgaWQ6IGNvbmZpZz8uaWQgPz8gZ2VuZXJhdGVIYXNoSWQoNiksXG4gICAga2luZCxcbiAgICBpc1Zpc2libGU6IGNvbmZpZz8uaXNWaXNpYmxlID8/IHRydWUsXG4gICAgYXV0b1NpemU6IGNvbmZpZz8uYXV0b1NpemUgPz8gdHJ1ZSxcbiAgICBhdXRvU2l6ZVk6IGNvbmZpZz8uYXV0b1NpemVZID8/IHRydWUsXG4gICAgYW5jaG9yUG9pbnQ6IGNvbmZpZz8uYW5jaG9yUG9pbnQgPz8gKFswLCAwXSBhcyBbbnVtYmVyLCBudW1iZXJdKSxcbiAgICBsYWJlbDogY29uZmlnPy5sYWJlbCA/PyAnTmV3IEFubm90YXRpb24nLFxuICAgIGxpbmVDb2xvcjogY29uZmlnPy5saW5lQ29sb3IgPz8gSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IsXG4gICAgbGluZVdpZHRoOiBjb25maWc/LmxpbmVXaWR0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCxcbiAgICB0ZXh0V2lkdGg6IGNvbmZpZz8udGV4dFdpZHRoID8/IElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1dJRFRILFxuICAgIHRleHRIZWlnaHQ6IGNvbmZpZz8udGV4dEhlaWdodCA/PyBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9IRUlHSFQsXG4gICAgdGV4dFZlcnRpY2FsQWxpZ246IGNvbmZpZz8udGV4dFZlcnRpY2FsQWxpZ24gPz8gKCdib3R0b20nIGFzIGNvbnN0KSxcbiAgICBtYXBJbmRleDogY29uZmlnPy5tYXBJbmRleFxuICB9O1xuXG4gIHN3aXRjaCAoa2luZCkge1xuICAgIGNhc2UgQW5ub3RhdGlvbktpbmQuUE9JTlQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlLFxuICAgICAgICBraW5kOiBBbm5vdGF0aW9uS2luZC5QT0lOVCxcbiAgICAgICAgYXJtTGVuZ3RoOiAoY29uZmlnIGFzIGFueSk/LmFybUxlbmd0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCxcbiAgICAgICAgYW5nbGU6IChjb25maWcgYXMgYW55KT8uYW5nbGUgPz8gSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFXG4gICAgICB9O1xuICAgIGNhc2UgQW5ub3RhdGlvbktpbmQuQVJST1c6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlLFxuICAgICAgICBraW5kOiBBbm5vdGF0aW9uS2luZC5BUlJPVyxcbiAgICAgICAgYXJtTGVuZ3RoOiAoY29uZmlnIGFzIGFueSk/LmFybUxlbmd0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCxcbiAgICAgICAgYW5nbGU6IChjb25maWcgYXMgYW55KT8uYW5nbGUgPz8gSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFXG4gICAgICB9O1xuICAgIGNhc2UgQW5ub3RhdGlvbktpbmQuQ0lSQ0xFOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAga2luZDogQW5ub3RhdGlvbktpbmQuQ0lSQ0xFLFxuICAgICAgICBhcm1MZW5ndGg6IChjb25maWcgYXMgYW55KT8uYXJtTGVuZ3RoID8/IElOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RILFxuICAgICAgICBhbmdsZTogKGNvbmZpZyBhcyBhbnkpPy5hbmdsZSA/PyBJTklUSUFMX0FOTk9UQVRJT05fQU5HTEUsXG4gICAgICAgIHJhZGl1c0luTWV0ZXJzOiAoY29uZmlnIGFzIGFueSk/LnJhZGl1c0luTWV0ZXJzID8/IDEwMDBcbiAgICAgIH07XG4gICAgY2FzZSBBbm5vdGF0aW9uS2luZC5URVhUOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlLFxuICAgICAgICBraW5kOiBBbm5vdGF0aW9uS2luZC5URVhUXG4gICAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQWRkIGEgbmV3IGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBuZXdBbm5vdGF0aW9uID0gbWFrZU5ld0Fubm90YXRpb24oYWN0aW9uLmNvbmZpZyk7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IFtuZXdBbm5vdGF0aW9uLCAuLi5zdGF0ZS5hbm5vdGF0aW9uc10sXG4gICAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IG5ld0Fubm90YXRpb24uaWQsXG4gICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6IHRydWVcbiAgfTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFuIGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogc3RhdGUuYW5ub3RhdGlvbnMuZmlsdGVyKGEgPT4gYS5pZCAhPT0gaWQpLFxuICAgIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBzdGF0ZS5zZWxlY3RlZEFubm90YXRpb25JZCA9PT0gaWQgPyBudWxsIDogc3RhdGUuc2VsZWN0ZWRBbm5vdGF0aW9uSWQsXG4gICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6XG4gICAgICBzdGF0ZS5zZWxlY3RlZEFubm90YXRpb25JZCA9PT0gaWQgPyBmYWxzZSA6IHN0YXRlLmlzRWRpdGluZ0Fubm90YXRpb25UZXh0XG4gIH07XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBhbiBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gc3RhdGUuYW5ub3RhdGlvbnMuZmluZEluZGV4KGEgPT4gYS5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCB1cGRhdGUgYW5ub3RhdGlvbiB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgcHJldiA9IHN0YXRlLmFubm90YXRpb25zW2lkeF07XG4gIGxldCBuZXh0QW5ub3RhdGlvbjogQW5ub3RhdGlvbjtcblxuICBpZiAoY29uZmlnLmtpbmQgJiYgY29uZmlnLmtpbmQgIT09IHByZXYua2luZCkge1xuICAgIG5leHRBbm5vdGF0aW9uID0gbWFrZU5ld0Fubm90YXRpb24oey4uLnByZXYsIC4uLmNvbmZpZ30gYXMgQW5ub3RhdGlvblByb3BzUGFydGlhbCk7XG4gIH0gZWxzZSB7XG4gICAgbmV4dEFubm90YXRpb24gPSB7Li4ucHJldiwgLi4uY29uZmlnfSBhcyBBbm5vdGF0aW9uO1xuICB9XG5cbiAgY29uc3QgbmV3QW5ub3RhdGlvbnMgPSBbLi4uc3RhdGUuYW5ub3RhdGlvbnNdO1xuICBuZXdBbm5vdGF0aW9uc1tpZHhdID0gbmV4dEFubm90YXRpb247XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IG5ld0Fubm90YXRpb25zXG4gIH07XG59O1xuXG4vKipcbiAqIER1cGxpY2F0ZSBhbiBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgZHVwbGljYXRlQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLkR1cGxpY2F0ZUFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IG9yaWdpbmFsID0gc3RhdGUuYW5ub3RhdGlvbnMuZmluZChhID0+IGEuaWQgPT09IGlkKTtcbiAgaWYgKCFvcmlnaW5hbCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCBkdXBsaWNhdGUgYW5ub3RhdGlvbiB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV3QW5ub3RhdGlvbiA9IHtcbiAgICAuLi5jbG9uZURlZXAob3JpZ2luYWwpLFxuICAgIGlkOiBnZW5lcmF0ZUhhc2hJZCg2KSxcbiAgICBsYWJlbDogYENvcHkgb2YgJHtvcmlnaW5hbC5sYWJlbH1gXG4gIH07XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IFtuZXdBbm5vdGF0aW9uLCAuLi5zdGF0ZS5hbm5vdGF0aW9uc10sXG4gICAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IG5ld0Fubm90YXRpb24uaWQsXG4gICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6IGZhbHNlXG4gIH07XG59O1xuXG4vKipcbiAqIFNldCBzZWxlY3RlZCBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0U2VsZWN0ZWRBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWQsIGlzRWRpdGluZ1RleHR9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0U2VsZWN0ZWRBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoXG4gICAgaWQgPT09IHN0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkICYmXG4gICAgKGlzRWRpdGluZ1RleHQgPz8gZmFsc2UpID09PSBzdGF0ZS5pc0VkaXRpbmdBbm5vdGF0aW9uVGV4dFxuICApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBzZWxlY3RlZEFubm90YXRpb25JZDogaWQsXG4gICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6IGlzRWRpdGluZ1RleHQgPz8gZmFsc2VcbiAgfTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgZGF0YXNldCBhbmQgYWxsIGxheWVycywgZmlsdGVycywgdG9vbHRpcCBjb25maWdzIHRoYXQgYmFzZWQgb24gaXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVEYXRhc2V0VXBkYXRlcjxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFQge1xuICAvLyBleHRyYWN0IGRhdGFzZXQga2V5XG4gIGNvbnN0IHtkYXRhSWQ6IGRhdGFzZXRLZXl9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YXNldHN9ID0gc3RhdGU7XG5cbiAgLy8gY2hlY2sgaWYgZGF0YXNldCBpcyBwcmVzZW50XG4gIGlmICghZGF0YXNldHNbZGF0YXNldEtleV0pIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7XG4gICAgbGF5ZXJzLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBkYXRhc2V0czoge1tkYXRhc2V0S2V5XTogZGF0YXNldCwgLi4ubmV3RGF0YXNldHN9XG4gIH0gPSBzdGF0ZTtcblxuICBjb25zdCBsYXllcnNUb1JlbW92ZSA9IGxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5kYXRhSWQgPT09IGRhdGFzZXRLZXkpLm1hcChsID0+IGwuaWQpO1xuXG4gIC8vIHJlbW92ZSBsYXllcnMgYW5kIGRhdGFzZXRzXG4gIGxldCBuZXdTdGF0ZSA9IGxheWVyc1RvUmVtb3ZlLnJlZHVjZSgoYWNjdSwgaWQpID0+IHJlbW92ZUxheWVyVXBkYXRlcihhY2N1LCB7aWR9KSwge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBuZXdEYXRhc2V0c1xuICB9KTtcblxuICAvLyB1cGRhdGUgZmlsdGVyc1xuICBjb25zdCBmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGZpbHRlciBvZiBuZXdTdGF0ZS5maWx0ZXJzKSB7XG4gICAgY29uc3QgdmFsdWVJbmRleCA9IGZpbHRlci5kYXRhSWQuaW5kZXhPZihkYXRhc2V0S2V5KTtcbiAgICBpZiAodmFsdWVJbmRleCA+PSAwICYmIGZpbHRlci5kYXRhSWQubGVuZ3RoID4gMSkge1xuICAgICAgLy8gb25seSByZW1vdmUgb25lIHN5bmNlZCBkYXRhc2V0IGZyb20gdGhlIGZpbHRlclxuICAgICAgZmlsdGVycy5wdXNoKF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cykpO1xuICAgIH0gZWxzZSBpZiAodmFsdWVJbmRleCA8IDApIHtcbiAgICAgIC8vIGxlYXZlIHRoZSBmaWx0ZXIgYXMgaXNcbiAgICAgIGZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIG5ld1N0YXRlID0gey4uLm5ld1N0YXRlLCBmaWx0ZXJzfTtcblxuICByZXR1cm4gcmVtb3ZlRGF0YXNldEZyb21JbnRlcmFjdGlvbkNvbmZpZyhuZXdTdGF0ZSwge2RhdGFJZDogZGF0YXNldEtleX0pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnKHN0YXRlLCB7ZGF0YUlkfSkge1xuICBsZXQge2ludGVyYWN0aW9uQ29uZmlnfSA9IHN0YXRlO1xuICBjb25zdCB7dG9vbHRpcH0gPSBpbnRlcmFjdGlvbkNvbmZpZztcbiAgaWYgKHRvb2x0aXApIHtcbiAgICBjb25zdCB7Y29uZmlnfSA9IHRvb2x0aXA7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGNvbnN0IHtbZGF0YUlkXTogZmllbGRzLCAuLi5maWVsZHNUb1Nob3d9ID0gY29uZmlnLmZpZWxkc1RvU2hvdztcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgdG9vbHRpcDogey4uLnRvb2x0aXAsIGNvbmZpZzogey4uLmNvbmZpZywgZmllbGRzVG9TaG93fX1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHsuLi5zdGF0ZSwgaW50ZXJhY3Rpb25Db25maWd9O1xufVxuLyoqXG4gKiB1cGRhdGUgbGF5ZXIgYmxlbmRpbmcgbW9kZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbGF5ZXJCbGVuZGluZzogYWN0aW9uLm1vZGVcbn0pO1xuXG4vKipcbiAqIHVwZGF0ZSBvdmVybGF5IGJsZW5kaW5nIG1vZGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVPdmVybGF5QmxlbmRpbmdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBvdmVybGF5QmxlbmRpbmc6IGFjdGlvbi5tb2RlXG59KTtcblxuLyoqXG4gKiBEaXNwbGF5IGRhdGFzZXQgdGFibGUgaW4gYSBtb2RhbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNob3dEYXRhc2V0VGFibGVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNob3dEYXRhc2V0VGFibGVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdGluZ0RhdGFzZXQ6IGFjdGlvbi5kYXRhSWRcbiAgfTtcbn07XG5cbi8qKlxuICogQWRkIGN1c3RvbSBjb2xvciBmb3IgZGF0YXNldHMgYW5kIGxheWVyc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZVRhYmxlQ29sb3JVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZURhdGFzZXRDb2xvclVwZGF0ZXJcbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIoc3RhdGUsIHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIHByb3BzOiB7Y29sb3I6IGFjdGlvbi5uZXdDb2xvcn19KTtcbn07XG5cbi8qKlxuICogcmVzZXQgdmlzU3RhdGUgdG8gaW5pdGlhbCBTdGF0ZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlc2V0TWFwQ29uZmlnVXBkYXRlciA9IChzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5JTklUSUFMX1ZJU19TVEFURSxcbiAgLi4uc3RhdGUuaW5pdGlhbFN0YXRlLFxuICBpbml0aWFsU3RhdGU6IHN0YXRlLmluaXRpYWxTdGF0ZVxufSk7XG5cbi8qKlxuICogUHJvcGFnYXRlIGB2aXNTdGF0ZWAgcmVkdWNlciB3aXRoIGEgbmV3IGNvbmZpZ3VyYXRpb24uIEN1cnJlbnQgY29uZmlnIHdpbGwgYmUgb3ZlcnJpZGUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge1xuICAgIHBheWxvYWQ6IHtjb25maWcgPSB7fSwgb3B0aW9ucyA9IHt9fVxuICB9OiB7XG4gICAgdHlwZT86IHR5cGVvZiBBY3Rpb25UeXBlcy5SRUNFSVZFX01BUF9DT05GSUc7XG4gICAgcGF5bG9hZDogUmVjZWl2ZU1hcENvbmZpZ1BheWxvYWQ7XG4gIH1cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKCFjb25maWcudmlzU3RhdGUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7a2VlcEV4aXN0aW5nQ29uZmlnfSA9IG9wdGlvbnM7XG5cbiAgLy8gcmVzZXQgY29uZmlnIGlmIGtlZXBFeGlzdGluZ0NvbmZpZyBpcyBmYWxzeVxuICBsZXQgbWVyZ2VkU3RhdGUgPSAha2VlcEV4aXN0aW5nQ29uZmlnID8gcmVzZXRNYXBDb25maWdVcGRhdGVyKHN0YXRlKSA6IHN0YXRlO1xuICBmb3IgKGNvbnN0IG1lcmdlciBvZiBzdGF0ZS5tZXJnZXJzKSB7XG4gICAgaWYgKGlzVmFsaWRNZXJnZXIobWVyZ2VyKSAmJiBoYXNQcm9wc1RvTWVyZ2UoY29uZmlnLnZpc1N0YXRlLCBtZXJnZXIucHJvcCkpIHtcbiAgICAgIG1lcmdlZFN0YXRlID0gbWVyZ2VyLm1lcmdlKFxuICAgICAgICBtZXJnZWRTdGF0ZSxcbiAgICAgICAgZ2V0UHJvcFZhbHVlVG9NZXJnZXIoY29uZmlnLnZpc1N0YXRlLCBtZXJnZXIucHJvcCwgbWVyZ2VyLnRvTWVyZ2VQcm9wKSxcbiAgICAgICAgLy8gZnJvbUNvbmZpZ1xuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXJnZWRTdGF0ZTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBsYXllciBob3ZlciBldmVudCB3aXRoIGhvdmVyZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJIb3ZlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuT25MYXllckhvdmVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGhvdmVySW5mbzoge1xuICAgIC8vIGRlY2suZ2wgaW5mbyBpcyBtdXRhYmxlXG4gICAgLi4uYWN0aW9uLmluZm8sXG4gICAgLi4uKE51bWJlci5pc0Zpbml0ZShhY3Rpb24ubWFwSW5kZXgpID8ge21hcEluZGV4OiBhY3Rpb24ubWFwSW5kZXh9IDoge30pXG4gIH1cbn0pO1xuXG4vKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzICovXG5cbi8qKlxuICogVXBkYXRlIGBpbnRlcmFjdGlvbkNvbmZpZ2BcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuSW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb25maWd9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGludGVyYWN0aW9uQ29uZmlnID0ge1xuICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnLFxuICAgIC4uLntbY29uZmlnLmlkXTogY29uZmlnfVxuICB9O1xuXG4gIC8vIERvbid0IGVuYWJsZSB0b29sdGlwIGFuZCBicnVzaCBhdCB0aGUgc2FtZSB0aW1lXG4gIC8vIGJ1dCBjb29yZGluYXRlcyBjYW4gYmUgc2hvd24gYXQgYWxsIHRpbWVcbiAgY29uc3QgY29udHJhZGljdCA9IFsnYnJ1c2gnLCAndG9vbHRpcCddO1xuXG4gIGlmIChcbiAgICBjb250cmFkaWN0LmluY2x1ZGVzKGNvbmZpZy5pZCkgJiZcbiAgICBjb25maWcuZW5hYmxlZCAmJlxuICAgICFzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1tjb25maWcuaWRdLmVuYWJsZWRcbiAgKSB7XG4gICAgLy8gb25seSBlbmFibGUgb25lIGludGVyYWN0aW9uIGF0IGEgdGltZVxuICAgIGNvbnRyYWRpY3QuZm9yRWFjaChrID0+IHtcbiAgICAgIGlmIChrICE9PSBjb25maWcuaWQpIHtcbiAgICAgICAgaW50ZXJhY3Rpb25Db25maWdba10gPSB7Li4uaW50ZXJhY3Rpb25Db25maWdba10sIGVuYWJsZWQ6IGZhbHNlfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGludGVyYWN0aW9uQ29uZmlnXG4gIH07XG5cbiAgaWYgKGNvbmZpZy5pZCA9PT0gJ2dlb2NvZGVyJyAmJiAhY29uZmlnLmVuYWJsZWQpIHtcbiAgICByZXR1cm4gcmVtb3ZlRGF0YXNldFVwZGF0ZXIobmV3U3RhdGUsIHtkYXRhSWQ6ICdnZW9jb2Rlcl9kYXRhc2V0J30pO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFRyaWdnZXIgbGF5ZXIgY2xpY2sgZXZlbnQgd2l0aCBjbGlja2VkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxheWVyQ2xpY2tVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLk9uTGF5ZXJDbGlja1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBtb3VzZVBvczogc3RhdGUuaW50ZXJhY3Rpb25Db25maWcuY29vcmRpbmF0ZS5lbmFibGVkXG4gICAgPyB7XG4gICAgICAgIC4uLnN0YXRlLm1vdXNlUG9zLFxuICAgICAgICBwaW5uZWQ6IHN0YXRlLm1vdXNlUG9zLnBpbm5lZCA/IG51bGwgOiBjbG9uZURlZXAoc3RhdGUubW91c2VQb3MpXG4gICAgICB9XG4gICAgOiBzdGF0ZS5tb3VzZVBvcyxcbiAgY2xpY2tlZDogYWN0aW9uLmluZm8gJiYgYWN0aW9uLmluZm8ucGlja2VkID8gYWN0aW9uLmluZm8gOiBudWxsXG59KTtcblxuLyoqXG4gKiBUcmlnZ2VyIG1hcCBjbGljayBldmVudCwgdW5zZWxlY3QgY2xpY2tlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBtYXBDbGlja1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Pbk1hcENsaWNrVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNsaWNrZWQ6IG51bGxcbiAgfTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBtYXAgbW92ZSBldmVudFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG1vdXNlTW92ZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2V2dH06IFZpc1N0YXRlQWN0aW9ucy5Pbk1vdXNlTW92ZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKE9iamVjdC52YWx1ZXMoc3RhdGUuaW50ZXJhY3Rpb25Db25maWcpLnNvbWUoY29uZmlnID0+IGNvbmZpZy5lbmFibGVkKSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIG1vdXNlUG9zOiB7XG4gICAgICAgIC4uLnN0YXRlLm1vdXNlUG9zLFxuICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShldnQucG9pbnQpID8ge21vdXNlUG9zaXRpb246IFsuLi5ldnQucG9pbnRdfSA6IHt9KSxcbiAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkoZXZ0LmxuZ0xhdCkgPyB7Y29vcmRpbmF0ZTogWy4uLmV2dC5sbmdMYXRdfSA6IHt9KVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59O1xuLyoqXG4gKiBUb2dnbGUgdmlzaWJpbGl0eSBvZiBhIGxheWVyIGZvciBhIHNwbGl0IG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZVNwbGl0TWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5Ub2dnbGVTcGxpdE1hcFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+XG4gIHN0YXRlLnNwbGl0TWFwcyAmJiBzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoID09PSAwXG4gICAgPyB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAvLyBtYXliZSB3ZSBzaG91bGQgdXNlIGFuIGFycmF5IHRvIHN0b3JlIHN0YXRlIGZvciBhIHNpbmdsZSBtYXAgYXMgd2VsbFxuICAgICAgICAvLyBpZiBjdXJyZW50IG1hcHMgbGVuZ3RoIGlzIGVxdWFsIHRvIDAgaXQgbWVhbnMgdGhhdCB3ZSBhcmUgYWJvdXQgdG8gc3BsaXQgdGhlIHZpZXdcbiAgICAgICAgc3BsaXRNYXBzOiBjb21wdXRlU3BsaXRNYXBMYXllcnMoc3RhdGUubGF5ZXJzLCB7ZHVwbGljYXRlOiBmYWxzZX0pXG4gICAgICB9XG4gICAgOiBjbG9zZVNwZWNpZmljTWFwQXRJbmRleChzdGF0ZSwgYWN0aW9uKTtcblxuLyoqXG4gKiBUb2dnbGUgdmlzaWJpbGl0eSBvZiBhIGxheWVyIGluIGEgc3BsaXQgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHttYXBJbmRleCwgbGF5ZXJJZH06IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVMYXllckZvck1hcFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge3NwbGl0TWFwc30gPSBzdGF0ZTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNwbGl0TWFwczogc3BsaXRNYXBzLm1hcCgoc20sIGkpID0+XG4gICAgICBpID09PSBtYXBJbmRleFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLnNwbGl0TWFwc1tpXSxcbiAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAuLi5zcGxpdE1hcHNbaV0ubGF5ZXJzLFxuICAgICAgICAgICAgICAvLyBpZiBsYXllcklkIG5vdCBpbiBsYXllcnMsIHNldCBpdCB0byB2aXNpYmxlXG4gICAgICAgICAgICAgIFtsYXllcklkXTogIXNwbGl0TWFwc1tpXS5sYXllcnNbbGF5ZXJJZF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDogc21cbiAgICApXG4gIH07XG59O1xuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBjb25zdCB1cGRhdGVWaXNEYXRhVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVWaXNEYXRhVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBkYXRhc2V0cyBjYW4gYmUgYSBzaW5nbGUgZGF0YSBlbnRyaWVzIG9yIGFuIGFycmF5IG9mIG11bHRpcGxlIGRhdGEgZW50cmllc1xuICBjb25zdCB7Y29uZmlnLCBvcHRpb25zfSA9IGFjdGlvbjtcblxuICAvLyBhcHBseSBjb25maWcgaWYgcGFzc2VkIGZyb20gYWN0aW9uXG4gIC8vIFRPRE86IHdlIGRvbid0IGhhbmRsZSBhc3luYyBtZXJnZXJzIGhlcmUgeWV0XG4gIGxldCB1cGRhdGVkU3RhdGUgPSBjb25maWdcbiAgICA/IHJlY2VpdmVNYXBDb25maWdVcGRhdGVyKHN0YXRlLCB7XG4gICAgICAgIHBheWxvYWQ6IHtjb25maWcsIG9wdGlvbnN9XG4gICAgICB9KVxuICAgIDogc3RhdGU7XG5cbiAgY29uc3QgZGF0YXNldHMgPSB0b0FycmF5KGFjdGlvbi5kYXRhc2V0cyk7XG4gIGlmICghZGF0YXNldHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVwZGF0ZWRTdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGNyZWF0ZURhdGFzZXRUYXNrczogVGFza1tdID0gW107XG4gIGNvbnN0IG5vdGlmaWNhdGlvblRhc2tzOiBUYXNrW10gPSBbXTtcblxuICBkYXRhc2V0cy5mb3JFYWNoKCh7aW5mbyA9IHt9LCAuLi5yZXN0fSwgZGF0YXNldEluZGV4KSA9PiB7XG4gICAgY29uc3QgdGFzayA9IGNyZWF0ZU5ld0RhdGFFbnRyeSh7aW5mbywgLi4ucmVzdH0sIHN0YXRlLmRhdGFzZXRzKTtcbiAgICBpZiAodGFzaykge1xuICAgICAgY3JlYXRlRGF0YXNldFRhc2tzLnB1c2godGFzayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vdGlmaWNhdGlvblRhc2tzLnB1c2goXG4gICAgICAgIEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04oKS5tYXAoKCkgPT5cbiAgICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFzZXQgZHVlIHRvIGRhdGEgdmVyaWZpY2F0aW9uIGVycm9yc2AsXG4gICAgICAgICAgICAgIGlkOiBgZGF0YXNldC1mYWlsZWQtJHtkYXRhc2V0SW5kZXh9YFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBkYXRhc2V0c0FsbFNldHRsZWRUYXNrID0gY3JlYXRlRGF0YXNldFRhc2tzLmxlbmd0aFxuICAgID8gVGFzay5hbGxTZXR0bGVkKGNyZWF0ZURhdGFzZXRUYXNrcykubWFwKHJlc3VsdHMgPT5cbiAgICAgICAgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3Moe3Jlc3VsdHMsIGFkZFRvTWFwT3B0aW9uczogb3B0aW9uc30pXG4gICAgICApXG4gICAgOiBudWxsO1xuXG4gIGlmIChkYXRhc2V0c0FsbFNldHRsZWRUYXNrKSB7XG4gICAgdXBkYXRlZFN0YXRlID0gc2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIodXBkYXRlZFN0YXRlLCBwYXlsb2FkXyh7Y2hhbmdlOiAxLCB0eXBlOiAnJ30pKTtcbiAgfVxuXG4gIHJldHVybiB3aXRoVGFzayh1cGRhdGVkU3RhdGUsIFtcbiAgICAuLi4oZGF0YXNldHNBbGxTZXR0bGVkVGFzayA/IFtkYXRhc2V0c0FsbFNldHRsZWRUYXNrXSA6IFtdKSxcbiAgICAuLi5ub3RpZmljYXRpb25UYXNrc1xuICBdKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPENyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZD5cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge3Jlc3VsdHMsIGFkZFRvTWFwT3B0aW9uc30gPSBhY3Rpb24ucGF5bG9hZDtcbiAgY29uc3Qgbm90aWZpY2F0aW9uVGFza3M6IFRhc2tbXSA9IFtdO1xuXG4gIGNvbnN0IG5ld0RhdGFFbnRyaWVzID0gcmVzdWx0cy5yZWR1Y2UoKGFjY3UsIHJlc3VsdCwgaWR4KSA9PiB7XG4gICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdmdWxmaWxsZWQnKSB7XG4gICAgICBjb25zdCBkYXRhc2V0ID0gcmVzdWx0LnZhbHVlO1xuICAgICAgcmV0dXJuIHsuLi5hY2N1LCBbZGF0YXNldC5pZF06IGRhdGFzZXR9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBzaG93IGVycm9yIG5vdGlmaWNhdGlvbiBvbiBVSVxuICAgICAgbm90aWZpY2F0aW9uVGFza3MucHVzaChcbiAgICAgICAgQUNUSU9OX1RBU0soKS5tYXAoKCkgPT5cbiAgICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBEYXRhc2V0IGVycm9yOiBGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFzZXQ6XG4gICAgICAgICAgICAgICR7cmVzdWx0LnJlYXNvbiB8fCAocmVzdWx0IGFzIGFueSkudmFsdWV9YCxcbiAgICAgICAgICAgICAgaWQ6IGBkYXRhc2V0LWNyZWF0ZS1mYWlsZWQtJHtpZHh9YFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9XG4gIH0sIHt9IGFzIERhdGFzZXRzKTtcbiAgLy8gc2F2ZSBuZXcgZGF0YXNldCBlbnRyeSB0byBzdGF0ZVxuICBjb25zdCBtZXJnZWRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogbWVyZ2VEYXRhc2V0c0J5T3JkZXIoc3RhdGUsIG5ld0RhdGFFbnRyaWVzKVxuICB9O1xuXG4gIC8vIG1lcmdlIHN0YXRlIHdpdGggY29uZmlnIHRvIGJlIG1lcmdlZFxuICBjb25zdCBsYXllck1lcmdlcnMgPSBzdGF0ZS5tZXJnZXJzLmZpbHRlcihtID0+IG0ud2FpdEZvckxheWVyRGF0YSk7XG4gIGNvbnN0IGRhdGFzZXRNZXJnZXJzID0gc3RhdGUubWVyZ2Vycy5maWx0ZXIobSA9PiAhbGF5ZXJNZXJnZXJzLmluY2x1ZGVzKG0pKTtcblxuICBjb25zdCBuZXdEYXRhSWRzID0gT2JqZWN0LmtleXMobmV3RGF0YUVudHJpZXMpO1xuICBjb25zdCBwb3N0TWVyZ2VyUGF5bG9hZCA9IHtcbiAgICBuZXdEYXRhSWRzLFxuICAgIG9wdGlvbnM6IGFkZFRvTWFwT3B0aW9ucyxcbiAgICBsYXllck1lcmdlcnNcbiAgfTtcblxuICBjb25zdCB1cGRhdGVkU3RhdGUgPSBhcHBseU1lcmdlcnNVcGRhdGVyKG1lcmdlZFN0YXRlLCB7XG4gICAgbWVyZ2VyczogZGF0YXNldE1lcmdlcnMsXG4gICAgcG9zdE1lcmdlclBheWxvYWRcbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyKHVwZGF0ZWRTdGF0ZSwgcGF5bG9hZF8oe2NoYW5nZTogLTF9KSksXG4gICAgbm90aWZpY2F0aW9uVGFza3NcbiAgKTtcbn07XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseU1lcmdlcnNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjoge1xuICAgIG1lcmdlcnM6IE1lcmdlcjxhbnk+W107XG4gICAgcG9zdE1lcmdlclBheWxvYWQ6IFBvc3RNZXJnZXJQYXlsb2FkO1xuICB9XG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHttZXJnZXJzLCBwb3N0TWVyZ2VyUGF5bG9hZH0gPSBhY3Rpb247XG5cbiAgLy8gbWVyZ2Ugc3RhdGUgd2l0aCBjb25maWcgdG8gYmUgbWVyZ2VkXG4gIGNvbnN0IG1lcmdlU3RhdGVSZXN1bHQgPSBtZXJnZVN0YXRlRnJvbU1lcmdlcnMoXG4gICAgc3RhdGUsXG4gICAge1xuICAgICAgLi4uSU5JVElBTF9WSVNfU1RBVEUsXG4gICAgICAuLi5zdGF0ZS5pbml0aWFsU3RhdGVcbiAgICB9LFxuICAgIG1lcmdlcnMsXG4gICAgLy8gbmV3RGF0YUlkcyxcbiAgICBwb3N0TWVyZ2VyUGF5bG9hZFxuICApO1xuXG4gIC8vIGlmIGFsbCBtZXJnZWQsIGtpY2t1cCBwb3N0IG1lcmdlIHByb2Nlc3NcbiAgLy8gaWYgbm90IHdhaXRcbiAgcmV0dXJuIG1lcmdlU3RhdGVSZXN1bHQuYWxsTWVyZ2VkXG4gICAgPyBwb3N0TWVyZ2VVcGRhdGVyKG1lcmdlU3RhdGVSZXN1bHQubWVyZ2VkU3RhdGUsIHBvc3RNZXJnZXJQYXlsb2FkKVxuICAgIDogbWVyZ2VTdGF0ZVJlc3VsdC5tZXJnZWRTdGF0ZTtcbn1cblxuLyoqIFJlYWRzIGBvcHRpb25zLmxheWVyVmlzQ29uZmlnYCBmcm9tIGFkZC1kYXRhLXRvLW1hcCAoc2VlIGBBZGREYXRhVG9NYXBPcHRpb25zYCkuICovXG5mdW5jdGlvbiBsYXllclZpc0NvbmZpZ0Zyb21BZGREYXRhT3B0aW9ucyhcbiAgb3B0aW9uczogUG9zdE1lcmdlclBheWxvYWRbJ29wdGlvbnMnXSB8IHVuZGVmaW5lZFxuKTogUGFydGlhbDxMYXllclZpc0NvbmZpZz4gfCB1bmRlZmluZWQge1xuICBpZiAoIW9wdGlvbnMgfHwgISgnbGF5ZXJWaXNDb25maWcnIGluIG9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBwYXRjaCA9IChvcHRpb25zIGFzIHtsYXllclZpc0NvbmZpZz86IHVua25vd259KS5sYXllclZpc0NvbmZpZztcbiAgaWYgKHBhdGNoID09IG51bGwgfHwgdHlwZW9mIHBhdGNoICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHBhdGNoKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIHBhdGNoIGFzIFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+O1xufVxuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICovXG5mdW5jdGlvbiBwb3N0TWVyZ2VVcGRhdGVyKG1lcmdlZFN0YXRlOiBWaXNTdGF0ZSwgcG9zdE1lcmdlclBheWxvYWQ6IFBvc3RNZXJnZXJQYXlsb2FkKTogVmlzU3RhdGUge1xuICBjb25zdCB7bmV3RGF0YUlkcywgb3B0aW9ucywgbGF5ZXJNZXJnZXJzfSA9IHBvc3RNZXJnZXJQYXlsb2FkO1xuICBjb25zdCBuZXdGaWx0ZXJzID0gbWVyZ2VkU3RhdGUuZmlsdGVycy5maWx0ZXIoZiA9PlxuICAgIGYuZGF0YUlkLmZpbmQoZkRhdGFJZCA9PiBuZXdEYXRhSWRzLmluY2x1ZGVzKGZEYXRhSWQpKVxuICApO1xuICBjb25zdCBkYXRhc2V0RmlsdGVyZWQ6IHN0cmluZ1tdID0gdW5pcShcbiAgICBuZXdGaWx0ZXJzLnJlZHVjZSgoYWNjdSwgZikgPT4gWy4uLmFjY3UsIC4uLmYuZGF0YUlkXSwgW10gYXMgc3RyaW5nW10pXG4gICk7XG4gIGNvbnN0IGRhdGFFbXB0eSA9IG5ld0RhdGFJZHMubGVuZ3RoIDwgMTtcblxuICBsZXQgbmV3TGF5ZXJzID0gIWRhdGFFbXB0eVxuICAgID8gbWVyZ2VkU3RhdGUubGF5ZXJzLmZpbHRlcihsID0+IGwuY29uZmlnLmRhdGFJZCAmJiBuZXdEYXRhSWRzLmluY2x1ZGVzKGwuY29uZmlnLmRhdGFJZCkpXG4gICAgOiBbXTtcblxuICBjb25zdCBuZXdEYXRhRW50cmllcyA9IG5ld0RhdGFJZHMucmVkdWNlKFxuICAgIChhY2N1LCBpZCkgPT4gKHtcbiAgICAgIC4uLmFjY3UsXG4gICAgICBbaWRdOiBtZXJnZWRTdGF0ZS5kYXRhc2V0c1tpZF1cbiAgICB9KSxcbiAgICB7fVxuICApO1xuXG4gIGlmICghbmV3TGF5ZXJzLmxlbmd0aCAmJiAob3B0aW9ucyB8fCB7fSkuYXV0b0NyZWF0ZUxheWVycyAhPT0gZmFsc2UpIHtcbiAgICAvLyBubyBsYXllciBtZXJnZWQsIGZpbmQgZGVmYXVsdHNcbiAgICBjb25zdCByZXN1bHQgPSBhZGREZWZhdWx0TGF5ZXJzKG1lcmdlZFN0YXRlLCBuZXdEYXRhRW50cmllcyk7XG4gICAgbWVyZ2VkU3RhdGUgPSByZXN1bHQuc3RhdGU7XG4gICAgbmV3TGF5ZXJzID0gcmVzdWx0Lm5ld0xheWVycztcbiAgfVxuXG4gIGlmIChtZXJnZWRTdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgLy8gaWYgbWFwIGlzIHNwbGl0LCBhZGQgbmV3IGxheWVycyB0byBzcGxpdE1hcHNcbiAgICBuZXdMYXllcnMgPSBtZXJnZWRTdGF0ZS5sYXllcnMuZmlsdGVyKFxuICAgICAgbCA9PiBsLmNvbmZpZy5kYXRhSWQgJiYgbmV3RGF0YUlkcy5pbmNsdWRlcyhsLmNvbmZpZy5kYXRhSWQpXG4gICAgKTtcbiAgICBtZXJnZWRTdGF0ZSA9IHtcbiAgICAgIC4uLm1lcmdlZFN0YXRlLFxuICAgICAgc3BsaXRNYXBzOiBhZGROZXdMYXllcnNUb1NwbGl0TWFwKG1lcmdlZFN0YXRlLnNwbGl0TWFwcywgbmV3TGF5ZXJzKVxuICAgIH07XG4gIH1cblxuICBtZXJnZWRTdGF0ZSA9IG1lcmdlTGF5ZXJWaXNDb25maWdGb3JOZXdEYXRhc2V0cyhcbiAgICBtZXJnZWRTdGF0ZSxcbiAgICBsYXllclZpc0NvbmZpZ0Zyb21BZGREYXRhT3B0aW9ucyhvcHRpb25zKSxcbiAgICBuZXdEYXRhSWRzXG4gICk7XG5cbiAgLy8gaWYgbm8gdG9vbHRpcHMgbWVyZ2VkIGFkZCBkZWZhdWx0IHRvb2x0aXBzXG4gIG5ld0RhdGFJZHMuZm9yRWFjaChkYXRhSWQgPT4ge1xuICAgIGNvbnN0IHRvb2x0aXBGaWVsZHMgPSBtZXJnZWRTdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmNvbmZpZy5maWVsZHNUb1Nob3dbZGF0YUlkXTtcbiAgICAvLyBsb2FkaW5nIGRhdGFzZXQ6IGF1dG9DcmVhdGVUb29sdGlwcyBpcyBmYWxzZSBhbmQgd2UgZG9uJ3Qgd2FudCB0byBydW4gYWRkRGVmYXVsdFRvb2x0aXBzIHdoZW4gdG9vbHRpcEZpZWxkcyBpcyBlbXB0eVxuICAgIGlmIChcbiAgICAgIG9wdGlvbnM/LmF1dG9DcmVhdGVUb29sdGlwcyAhPT0gZmFsc2UgJiZcbiAgICAgICghQXJyYXkuaXNBcnJheSh0b29sdGlwRmllbGRzKSB8fCAhdG9vbHRpcEZpZWxkcy5sZW5ndGgpXG4gICAgKSB7XG4gICAgICAvLyBhZGRpbmcgZGF0YXNldDogYXV0b0NyZWF0ZVRvb2x0aXBzIGlzIHRydWVcbiAgICAgIG1lcmdlZFN0YXRlID0gYWRkRGVmYXVsdFRvb2x0aXBzKG1lcmdlZFN0YXRlLCBuZXdEYXRhRW50cmllc1tkYXRhSWRdKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHVwZGF0ZWREYXRhc2V0cyA9IGRhdGFFbXB0eVxuICAgID8gT2JqZWN0LmtleXMobWVyZ2VkU3RhdGUuZGF0YXNldHMpXG4gICAgOiB1bmlxKE9iamVjdC5rZXlzKG5ld0RhdGFFbnRyaWVzKS5jb25jYXQoZGF0YXNldEZpbHRlcmVkKSk7XG5cbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShtZXJnZWRTdGF0ZSwgdXBkYXRlZERhdGFzZXRzLCB1bmRlZmluZWQpO1xuXG4gIC8vIHJlZ2lzdGVyIGxheWVyIGFuaW1hdGlvbiBkb21haW4sXG4gIC8vIG5lZWQgdG8gYmUgY2FsbGVkIGFmdGVyIGxheWVyIGRhdGEgaXMgY2FsY3VsYXRlZFxuICB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4odXBkYXRlZFN0YXRlKTtcblxuICAvLyB0cnkgdG8gcHJvY2VzcyBsYXllck1lcmdlcnMgYWZ0ZXIgZGF0YXNldCtkYXRhc2V0TWVyZ2Vyc1xuICB1cGRhdGVkU3RhdGUgPVxuICAgIGxheWVyTWVyZ2VycyAmJiBsYXllck1lcmdlcnMubGVuZ3RoID4gMFxuICAgICAgPyBhcHBseU1lcmdlcnNVcGRhdGVyKHVwZGF0ZWRTdGF0ZSwge1xuICAgICAgICAgIG1lcmdlcnM6IGxheWVyTWVyZ2VycyxcbiAgICAgICAgICBwb3N0TWVyZ2VyUGF5bG9hZDogey4uLnBvc3RNZXJnZXJQYXlsb2FkLCBsYXllck1lcmdlcnM6IFtdfVxuICAgICAgICB9KVxuICAgICAgOiB1cGRhdGVkU3RhdGU7XG5cbiAgLy8gY2VudGVyIHRoZSBtYXAgb25jZSB0aGUgZGF0YXNldCBpcyBjcmVhdGVkXG4gIGlmIChuZXdMYXllcnMubGVuZ3RoICYmIChvcHRpb25zIHx8IHt9KS5jZW50ZXJNYXApIHtcbiAgICBjb25zdCBib3VuZHMgPSBmaW5kTWFwQm91bmRzKG5ld0xheWVycyk7XG4gICAgaWYgKGJvdW5kcykge1xuICAgICAgY29uc3QgZml0Qm91bmRzVGFzayA9IEFDVElPTl9UQVNLX0ZJVF9CT1VORFMoKS5tYXAoKCkgPT4ge1xuICAgICAgICByZXR1cm4gZml0TWFwQm91bmRzKGJvdW5kcyk7XG4gICAgICB9KTtcbiAgICAgIHVwZGF0ZWRTdGF0ZSA9IHdpdGhUYXNrKHVwZGF0ZWRTdGF0ZSwgZml0Qm91bmRzVGFzayk7XG4gICAgfVxuICB9XG5cbiAgLy8gbmVlZCB0byBjZW50ZXIgbWFwIGhlcmUgaWYgd2UgaGF2ZSBuZXcgbGF5ZXJzXG4gIHJldHVybiB1cGRhdGVkU3RhdGU7XG59XG5cbi8qKlxuICogUmVuYW1lIGFuIGV4aXN0aW5nIGRhdGFzZXQgaW4gYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZURhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbmFtZURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiB1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyKHN0YXRlLCB7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBwcm9wczoge2xhYmVsOiBhY3Rpb24ubGFiZWx9fSk7XG59XG5cbmNvbnN0IEFMTE9XRURfVVBEQVRFX0RBVEFTRVRfUFJPUFMgPSBbJ2xhYmVsJywgJ2NvbG9yJywgJ21ldGFkYXRhJ107XG5cbi8qKlxuICogVmFsaWRhdGVzIHByb3BlcnRpZXMgYmVmb3JlIHVwZGF0aW5nIHRoZSBkYXRhc2V0LlxuICogTWFrZXMgc3VyZSBlYWNoIHByb3BlcnR5IGlzIGluIHRoZSBhbGxvd2VkIGxpc3RcbiAqIE1ha2VzIHN1cmUgY29sb3IgdmFsdWUgaXMgUkdCXG4gKiBQZXJmb3JtcyBkZWVwIG1lcmdlIHdoZW4gdXBkYXRpbmcgbWV0YWRhdGFcbiAqL1xuY29uc3QgdmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMgPSAocHJvcHMsIGRhdGFzZXQpID0+IHtcbiAgY29uc3QgdmFsaWRhdGVkUHJvcHMgPSBPYmplY3QuZW50cmllcyhwcm9wcykucmVkdWNlKChhY2MsIGVudHJ5KSA9PiB7XG4gICAgY29uc3QgW2tleSwgdmFsdWVdID0gZW50cnk7XG4gICAgLy8gaXMgaXQgYWxsb3dlZCA/XG4gICAgaWYgKCFBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgYXJlIGFkZGluZyBhIGNvbG9yIGJ1dCBpdCBpcyBub3QgUkdCIHdlIGRvbid0IGFjY2VwdCB0aGUgdmFsdWVcbiAgICAvLyBpbiB0aGUgZnV0dXJlIGFzIHdlIGFkZCBtb3JlIHByb3BzIHdlIHNob3VsZCBjaGFuZ2UgdGhpcyBpZiBpbnRvIGEgc3dpdGNoXG4gICAgaWYgKGtleSA9PT0gJ2NvbG9yJyAmJiAhaXNSZ2JDb2xvcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgLy8gZG8gd2UgbmVlZCBkZWVwIG1lcmdlID9cbiAgICByZXR1cm4gey4uLmFjYywgW2tleV06IGlzUGxhaW5PYmplY3QodmFsdWUpID8gZGVlcG1lcmdlKGRhdGFzZXRba2V5XSB8fCB7fSwgdmFsdWUpIDogdmFsdWV9O1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIHZhbGlkYXRlZFByb3BzO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgRGF0YXNldCBwcm9wcyAobGFiZWwsIGNvbG9yLCBtZXRhKS4gRG8gbm90IHVzZSB0byB1cGRhdGUgZGF0YSBvciBhbnkgcmVsYXRlZCBwcm9wZXJ0aWVzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtkYXRhSWQsIHByb3BzfSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuICBjb25zdCBleGlzdGluZyA9IGRhdGFzZXRzW2RhdGFJZF07XG5cbiAgaWYgKGV4aXN0aW5nKSB7XG4gICAgY29uc3QgdmFsaWRhdGVkUHJvcHMgPSB2YWxpZGF0ZURhdGFzZXRVcGRhdGVQcm9wcyhwcm9wcywgZXhpc3RpbmcpO1xuICAgIC8vICB2YWxpZGF0ZSBwcm9wczoganVzdCBjb2xvciBmb3Igbm93XG4gICAgLy8gIHdlIG9ubHkgYWxsb3cgbGFiZWwsIGNvbG9yIGFuZCBtZXRhIHRvIGJlIHVwZGF0ZWRcbiAgICAvLyBjb25zdCBuZXdUYWJsZSA9IGNvcHlUYWJsZUFuZFVwZGF0ZShleGlzdGluZywgdmFsaWRhdGVkUHJvcHMpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRhdGFzZXRzOiB7XG4gICAgICAgIC4uLmRhdGFzZXRzLFxuICAgICAgICBbZGF0YUlkXTogY29weVRhYmxlQW5kVXBkYXRlKGV4aXN0aW5nLCB2YWxpZGF0ZWRQcm9wcylcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIFdoZW4gYSB1c2VyIGNsaWNrcyBvbiB0aGUgc3BlY2lmaWMgbWFwIGNsb3NpbmcgaWNvblxuICogdGhlIGFwcGxpY2F0aW9uIHdpbGwgY2xvc2UgdGhlIHNlbGVjdGVkIG1hcFxuICogYW5kIHdpbGwgbWVyZ2UgdGhlIHJlbWFpbmluZyBvbmUgd2l0aCB0aGUgZ2xvYmFsIHN0YXRlXG4gKiBUT0RPOiBpIHRoaW5rIGluIHRoZSBmdXR1cmUgdGhpcyBhY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBtZXJnZSBtYXAgbGF5ZXJzIHdpdGggZ2xvYmFsIHNldHRpbmdzXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGUgYHZpc1N0YXRlYFxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvbiBhY3Rpb25cbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xvc2VTcGVjaWZpY01hcEF0SW5kZXg8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogTWFwU3RhdGVBY3Rpb25zLlRvZ2dsZVNwbGl0TWFwVXBkYXRlckFjdGlvblxuKTogUyB7XG4gIC8vIHJldHJpZXZlIGxheWVycyBtZXRhIGRhdGEgZnJvbSB0aGUgcmVtYWluaW5nIG1hcCB0aGF0IHdlIG5lZWQgdG8ga2VlcFxuICBjb25zdCBpbmRleFRvUmV0cmlldmUgPSAxIC0gYWN0aW9uLnBheWxvYWQ7XG4gIGNvbnN0IG1hcExheWVycyA9IHN0YXRlLnNwbGl0TWFwc1tpbmRleFRvUmV0cmlldmVdPy5sYXllcnM7XG4gIGNvbnN0IHtsYXllcnN9ID0gc3RhdGU7XG5cbiAgLy8gdXBkYXRlIGxheWVyIHZpc2liaWxpdHlcbiAgY29uc3QgbmV3TGF5ZXJzID0gbGF5ZXJzLm1hcChsYXllciA9PlxuICAgIG1hcExheWVycyAmJiAhbWFwTGF5ZXJzW2xheWVyLmlkXSAmJiBsYXllci5jb25maWcuaXNWaXNpYmxlXG4gICAgICA/IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAvLyBpZiBsYXllci5pZCBpcyBub3QgaW4gbWFwTGF5ZXJzLCBpdCBzaG91bGQgYmUgaW5WaXNpYmxlXG4gICAgICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgOiBsYXllclxuICApO1xuXG4gIC8vIGRlbGV0ZSBtYXBcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBzcGxpdE1hcHM6IFtdXG4gIH07XG59XG5cbi8qKlxuICogVHJpZ2dlciBmaWxlIGxvYWRpbmcgZGlzcGF0Y2ggYGFkZERhdGFUb01hcGAgaWYgc3VjY2VlZCwgb3IgYGxvYWRGaWxlc0VycmAgaWYgZmFpbGVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbG9hZEZpbGVzVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtmaWxlcywgb25GaW5pc2ggPSBsb2FkRmlsZXNTdWNjZXNzfSA9IGFjdGlvbjtcbiAgaWYgKCFmaWxlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWxlTG9hZGluZ1Byb2dyZXNzID0gQXJyYXkuZnJvbShmaWxlcykucmVkdWNlKFxuICAgIChhY2N1LCBmLCBpKSA9PiBtZXJnZV8oaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MoZiwgaSkpKGFjY3UpLFxuICAgIHt9XG4gICk7XG5cbiAgY29uc3QgZmlsZUxvYWRpbmcgPSB7XG4gICAgZmlsZUNhY2hlOiBbXSxcbiAgICBmaWxlc1RvTG9hZDogZmlsZXMsXG4gICAgb25GaW5pc2hcbiAgfTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSBtZXJnZV8oe2ZpbGVMb2FkaW5nUHJvZ3Jlc3MsIGZpbGVMb2FkaW5nfSkoc3RhdGUpO1xuXG4gIHJldHVybiBsb2FkTmV4dEZpbGVVcGRhdGVyKG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIFN1Y2Vzc2Z1bGx5IGxvYWRlZCBvbmUgZmlsZSwgbW92ZSBvbiB0byB0aGUgbmV4dCBvbmVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZVN0ZXBTdWNjZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZVN0ZXBTdWNjZXNzQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVOYW1lLCBmaWxlQ2FjaGV9ID0gYWN0aW9uO1xuICBjb25zdCB7ZmlsZXNUb0xvYWQsIG9uRmluaXNofSA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAxLCBtZXNzYWdlOiAnRG9uZSd9XG4gIH0pO1xuXG4gIC8vIHNhdmUgcHJvY2Vzc2VkIGZpbGUgdG8gZmlsZUNhY2hlXG4gIGNvbnN0IHN0YXRlV2l0aENhY2hlID0gcGlja18oJ2ZpbGVMb2FkaW5nJykobWVyZ2VfKHtmaWxlQ2FjaGV9KSkoc3RhdGVXaXRoUHJvZ3Jlc3MpO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhDYWNoZSxcbiAgICBERUxBWV9UQVNLKDIwMCkubWFwKGZpbGVzVG9Mb2FkLmxlbmd0aCA/IGxvYWROZXh0RmlsZSA6ICgpID0+IG9uRmluaXNoKGZpbGVDYWNoZSkpXG4gICk7XG59XG5cbi8vIHdpdGhUYXNrPFQ+KHN0YXRlOiBULCB0YXNrOiBhbnkpOiBUXG5cbi8qKlxuICpcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkTmV4dEZpbGVVcGRhdGVyKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlIHtcbiAgaWYgKCFzdGF0ZS5maWxlTG9hZGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7ZmlsZXNUb0xvYWR9ID0gc3RhdGUuZmlsZUxvYWRpbmc7XG4gIGNvbnN0IFtmaWxlLCAuLi5yZW1haW5pbmdGaWxlc1RvTG9hZF0gPSBmaWxlc1RvTG9hZDtcblxuICAvLyBzYXZlIGZpbGVzVG9Mb2FkIHRvIHN0YXRlXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHBpY2tfKCdmaWxlTG9hZGluZycpKG1lcmdlXyh7ZmlsZXNUb0xvYWQ6IHJlbWFpbmluZ0ZpbGVzVG9Mb2FkfSkpKHN0YXRlKTtcblxuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKG5leHRTdGF0ZSwge1xuICAgIGZpbGVOYW1lOiBmaWxlLm5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAwLCBtZXNzYWdlOiAnbG9hZGluZy4uLid9XG4gIH0pO1xuXG4gIGNvbnN0IHtsb2FkZXJzLCBsb2FkT3B0aW9uc30gPSBzdGF0ZTtcbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aFByb2dyZXNzLFxuICAgIG1ha2VMb2FkRmlsZVRhc2soXG4gICAgICBmaWxlLFxuICAgICAgbmV4dFN0YXRlLmZpbGVMb2FkaW5nICYmIG5leHRTdGF0ZS5maWxlTG9hZGluZy5maWxlQ2FjaGUsXG4gICAgICBsb2FkZXJzLFxuICAgICAgbG9hZE9wdGlvbnNcbiAgICApXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlTG9hZEZpbGVUYXNrKGZpbGUsIGZpbGVDYWNoZSwgbG9hZGVyczogTG9hZGVyW10gPSBbXSwgbG9hZE9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gTE9BRF9GSUxFX1RBU0soe2ZpbGUsIGZpbGVDYWNoZSwgbG9hZGVycywgbG9hZE9wdGlvbnN9KS5iaW1hcChcbiAgICAvLyBwcmV0dGllciBpZ25vcmVcbiAgICAvLyBzdWNjZXNzXG4gICAgZ2VuID0+XG4gICAgICBuZXh0RmlsZUJhdGNoKHtcbiAgICAgICAgZ2VuLFxuICAgICAgICBmaWxlTmFtZTogZmlsZS5uYW1lLFxuICAgICAgICBvbkZpbmlzaDogcmVzdWx0ID0+XG4gICAgICAgICAgcHJvY2Vzc0ZpbGVDb250ZW50KHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IHJlc3VsdCxcbiAgICAgICAgICAgIGZpbGVDYWNoZVxuICAgICAgICAgIH0pXG4gICAgICB9KSxcblxuICAgIC8vIGVycm9yXG4gICAgZXJyID0+IGxvYWRGaWxlc0VycihmaWxlLm5hbWUsIGVycilcbiAgKTtcbn1cblxuLyoqXG4gKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7Y29udGVudCwgZmlsZUNhY2hlfSA9IGFjdGlvbi5wYXlsb2FkO1xuXG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZTogY29udGVudC5maWxlTmFtZSxcbiAgICBwcm9ncmVzczoge3BlcmNlbnQ6IDEsIG1lc3NhZ2U6ICdwcm9jZXNzaW5nLi4uJ31cbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aFByb2dyZXNzLFxuICAgIFBST0NFU1NfRklMRV9EQVRBKHtjb250ZW50LCBmaWxlQ2FjaGV9KS5iaW1hcChcbiAgICAgIHJlc3VsdCA9PiBsb2FkRmlsZVN0ZXBTdWNjZXNzKHtmaWxlTmFtZTogY29udGVudC5maWxlTmFtZSwgZmlsZUNhY2hlOiByZXN1bHR9KSxcbiAgICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoY29udGVudC5maWxlTmFtZSwgZXJyKVxuICAgIClcbiAgKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHJvZ3Jlc3MocHJldlByb2dyZXNzID0ge30sIHByb2dyZXNzKSB7XG4gIC8vIFRoaXMgaGFwcGVucyB3aGVuIHJlY2VpdmluZyBxdWVyeSBtZXRhZGF0YSBvciBvdGhlciBjYXNlcyB3ZSBkb24ndFxuICAvLyBoYXZlIGFuIHVwZGF0ZSBmb3IgdGhlIHVzZXIuXG4gIGlmICghcHJvZ3Jlc3MgfHwgIXByb2dyZXNzLnBlcmNlbnQpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBlcmNlbnQ6IHByb2dyZXNzLnBlcmNlbnRcbiAgfTtcbn1cblxuLyoqXG4gKiBnZXRzIGNhbGxlZCB3aXRoIHBheWxvYWQgPSBBc3luY0dlbmVyYXRvcjw/Pz8+XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbmV4dEZpbGVCYXRjaFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge1xuICAgIHBheWxvYWQ6IHtnZW4sIGZpbGVOYW1lLCBwcm9ncmVzcywgYWNjdW11bGF0ZWQsIG9uRmluaXNofVxuICB9OiBWaXNTdGF0ZUFjdGlvbnMuTmV4dEZpbGVCYXRjaFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiBwYXJzZVByb2dyZXNzKHN0YXRlLmZpbGVMb2FkaW5nUHJvZ3Jlc3NbZmlsZU5hbWVdLCBwcm9ncmVzcylcbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKHN0YXRlV2l0aFByb2dyZXNzLCBbXG4gICAgLi4uKGdldEFwcGxpY2F0aW9uQ29uZmlnKCkudXNlQXJyb3dQcm9ncmVzc2l2ZUxvYWRpbmcgJiZcbiAgICBmaWxlTmFtZS5lbmRzV2l0aCgnYXJyb3cnKSAmJlxuICAgIGFjY3VtdWxhdGVkPy5kYXRhPy5sZW5ndGggPiAwXG4gICAgICA/IFtcbiAgICAgICAgICBQUk9DRVNTX0ZJTEVfREFUQSh7Y29udGVudDogYWNjdW11bGF0ZWQsIGZpbGVDYWNoZTogW119KS5iaW1hcChcbiAgICAgICAgICAgIHJlc3VsdCA9PiBsb2FkRmlsZXNTdWNjZXNzKHJlc3VsdCksXG4gICAgICAgICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGVOYW1lLCBlcnIpXG4gICAgICAgICAgKVxuICAgICAgICBdXG4gICAgICA6IFtdKSxcbiAgICBVTldSQVBfVEFTSyhnZW4ubmV4dCgpKS5iaW1hcChcbiAgICAgICh7dmFsdWUsIGRvbmV9KSA9PiB7XG4gICAgICAgIHJldHVybiBkb25lXG4gICAgICAgICAgPyBvbkZpbmlzaChhY2N1bXVsYXRlZClcbiAgICAgICAgICA6IG5leHRGaWxlQmF0Y2goe1xuICAgICAgICAgICAgICBnZW4sXG4gICAgICAgICAgICAgIGZpbGVOYW1lLFxuICAgICAgICAgICAgICBwcm9ncmVzczogdmFsdWUucHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIGFjY3VtdWxhdGVkOiB2YWx1ZSxcbiAgICAgICAgICAgICAgb25GaW5pc2hcbiAgICAgICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoZmlsZU5hbWUsIGVycilcbiAgICApXG4gIF0pO1xufTtcblxuLyoqXG4gKiBUcmlnZ2VyIGxvYWRpbmcgZmlsZSBlcnJvclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc0VyclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2Vycm9yLCBmaWxlTmFtZX06IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZXNFcnJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIHVwZGF0ZSB1aSB3aXRoIGVycm9yIG1lc3NhZ2VcbiAgQ29uc29sZS53YXJuKGVycm9yKTtcbiAgaWYgKCFzdGF0ZS5maWxlTG9hZGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7ZmlsZXNUb0xvYWQsIG9uRmluaXNoLCBmaWxlQ2FjaGV9ID0gc3RhdGUuZmlsZUxvYWRpbmc7XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZSxcbiAgICBwcm9ncmVzczoge2Vycm9yfVxuICB9KTtcblxuICAvLyBraWNrIG9mZiBuZXh0IGZpbGUgb3IgZmluaXNoXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBuZXh0U3RhdGUsXG4gICAgREVMQVlfVEFTSygyMDApLm1hcChmaWxlc1RvTG9hZC5sZW5ndGggPyBsb2FkTmV4dEZpbGUgOiAoKSA9PiBvbkZpbmlzaChmaWxlQ2FjaGUpKVxuICApO1xufTtcblxuLyoqXG4gKiBXaGVuIHNlbGVjdCBkYXRhc2V0IGZvciBleHBvcnQsIGFwcGx5IGNwdSBmaWx0ZXIgdG8gc2VsZWN0ZWQgZGF0YXNldFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFwcGx5Q1BVRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkfTogVmlzU3RhdGVBY3Rpb25zLkFwcGx5Q1BVRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBhcHBseSBjcHVGaWx0ZXJcbiAgY29uc3QgZGF0YUlkcyA9IHRvQXJyYXkoZGF0YUlkKTtcblxuICByZXR1cm4gZGF0YUlkcy5yZWR1Y2UoKGFjY3UsIGlkKSA9PiBmaWx0ZXJEYXRhc2V0Q1BVKGFjY3UsIGlkKSwgc3RhdGUpO1xufTtcblxuLyoqXG4gKiBVc2VyIGlucHV0IHRvIHVwZGF0ZSB0aGUgaW5mbyBvZiB0aGUgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TWFwSW5mb1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0TWFwSW5mb1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBtYXBJbmZvOiB7XG4gICAgLi4uc3RhdGUubWFwSW5mbyxcbiAgICAuLi5hY3Rpb24uaW5mb1xuICB9XG59KTtcbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIHVwZGF0ZSBBbGwgbGF5ZXIgZG9tYWluIGFuZCBsYXllciBkYXRhIG9mIHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGREZWZhdWx0TGF5ZXJzKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGRhdGFzZXRzOiBEYXRhc2V0c1xuKToge3N0YXRlOiBWaXNTdGF0ZTsgbmV3TGF5ZXJzOiBMYXllcltdfSB7XG4gIGNvbnN0IGVtcHR5OiBMYXllcltdID0gW107XG4gIGNvbnN0IGRlZmF1bHRMYXllcnMgPSBPYmplY3QudmFsdWVzKGRhdGFzZXRzKS5yZWR1Y2UoKGFjY3U6IExheWVyW10sIGRhdGFzZXQpID0+IHtcbiAgICBjb25zdCBmb3VuZExheWVycyA9IGZpbmREZWZhdWx0TGF5ZXIoZGF0YXNldCwgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgICByZXR1cm4gZm91bmRMYXllcnMgJiYgZm91bmRMYXllcnMubGVuZ3RoID8gYWNjdS5jb25jYXQoZm91bmRMYXllcnMpIDogYWNjdTtcbiAgfSwgZW1wdHkpO1xuXG4gIHJldHVybiB7XG4gICAgc3RhdGU6IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbGF5ZXJzOiBbLi4uc3RhdGUubGF5ZXJzLCAuLi5kZWZhdWx0TGF5ZXJzXSxcbiAgICAgIGxheWVyT3JkZXI6IFtcbiAgICAgICAgLy8gcHV0IG5ldyBsYXllcnMgb24gdG9wIG9mIG9sZCBvbmVzIGluIHJldmVyc2VcbiAgICAgICAgLi4uZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMoZGVmYXVsdExheWVycyksXG4gICAgICAgIC4uLnN0YXRlLmxheWVyT3JkZXJcbiAgICAgIF1cbiAgICB9LFxuICAgIG5ld0xheWVyczogZGVmYXVsdExheWVyc1xuICB9O1xufVxuXG4vKipcbiAqIGhlbHBlciBmdW5jdGlvbiB0byBmaW5kIGRlZmF1bHQgdG9vbHRpcHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFzZXRcbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRGVmYXVsdFRvb2x0aXBzKHN0YXRlLCBkYXRhc2V0KSB7XG4gIGNvbnN0IHRvb2x0aXBGaWVsZHMgPSBmaW5kRmllbGRzVG9TaG93KHtcbiAgICAuLi5kYXRhc2V0LFxuICAgIG1heERlZmF1bHRUb29sdGlwczogc3RhdGUubWF4RGVmYXVsdFRvb2x0aXBzXG4gIH0pO1xuICBjb25zdCBtZXJnZWQgPSB7XG4gICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93LFxuICAgIC4uLnRvb2x0aXBGaWVsZHNcbiAgfTtcblxuICByZXR1cm4gc2V0KFsnaW50ZXJhY3Rpb25Db25maWcnLCAndG9vbHRpcCcsICdjb25maWcnLCAnZmllbGRzVG9TaG93J10sIG1lcmdlZCwgc3RhdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MoZmlsZSwgaW5kZXgpIHtcbiAgY29uc3QgZmlsZU5hbWUgPSBmaWxlLm5hbWUgfHwgYFVudGl0bGVkIEZpbGUgJHtpbmRleH1gO1xuICByZXR1cm4ge1xuICAgIFtmaWxlTmFtZV06IHtcbiAgICAgIC8vIHBlcmNlbnQgb2YgY3VycmVudCBmaWxlXG4gICAgICBwZXJjZW50OiAwLFxuICAgICAgbWVzc2FnZTogJycsXG4gICAgICBmaWxlTmFtZSxcbiAgICAgIGVycm9yOiBudWxsXG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtmaWxlTmFtZSwgcHJvZ3Jlc3N9KSB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgcmV0dXJuIHBpY2tfKCdmaWxlTG9hZGluZ1Byb2dyZXNzJykocGlja18oZmlsZU5hbWUpKG1lcmdlXyhwcm9ncmVzcykpKShzdGF0ZSk7XG59XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgbGF5ZXIgZG9tYWlucyBmb3IgYW4gYXJyYXkgb2YgZGF0YXNldHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YTxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgZGF0YUlkOiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgdXBkYXRlZEZpbHRlcj86IEZpbHRlclxuKTogUyB7XG4gIGNvbnN0IGRhdGFJZHMgPSB0eXBlb2YgZGF0YUlkID09PSAnc3RyaW5nJyA/IFtkYXRhSWRdIDogZGF0YUlkO1xuICBjb25zdCBuZXdMYXllcnM6IExheWVyW10gPSBbXTtcbiAgY29uc3QgbmV3TGF5ZXJEYXRhOiBhbnlbXSA9IFtdO1xuXG4gIHN0YXRlLmxheWVycy5mb3JFYWNoKChvbGRMYXllciwgaSkgPT4ge1xuICAgIGlmIChvbGRMYXllci5jb25maWcuZGF0YUlkICYmIGRhdGFJZHMuaW5jbHVkZXMob2xkTGF5ZXIuY29uZmlnLmRhdGFJZCkpIHtcbiAgICAgIC8vIE5vIG5lZWQgdG8gcmVjYWxjdWxhdGUgbGF5ZXIgZG9tYWluIGlmIGZpbHRlciBoYXMgZml4ZWQgZG9tYWluXG4gICAgICBjb25zdCBuZXdMYXllciA9XG4gICAgICAgIHVwZGF0ZWRGaWx0ZXIgJiYgdXBkYXRlZEZpbHRlci5maXhlZERvbWFpblxuICAgICAgICAgID8gb2xkTGF5ZXJcbiAgICAgICAgICA6IG9sZExheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzLCB1cGRhdGVkRmlsdGVyKTtcblxuICAgICAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgc3RhdGUubGF5ZXJEYXRhW2ldKTtcblxuICAgICAgbmV3TGF5ZXJzLnB1c2gobGF5ZXIpO1xuICAgICAgbmV3TGF5ZXJEYXRhLnB1c2gobGF5ZXJEYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXJzLnB1c2gob2xkTGF5ZXIpO1xuICAgICAgbmV3TGF5ZXJEYXRhLnB1c2goc3RhdGUubGF5ZXJEYXRhW2ldKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogbmV3TGF5ZXJzLFxuICAgIGxheWVyRGF0YTogbmV3TGF5ZXJEYXRhXG4gIH07XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlQW5pbWF0aW9uRG9tYWluPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMpOiBTIHtcbiAgLy8gbWVyZ2UgYWxsIGFuaW1hdGFibGUgbGF5ZXIgZG9tYWluIGFuZCB1cGRhdGUgZ2xvYmFsIGNvbmZpZ1xuICBjb25zdCBhbmltYXRhYmxlTGF5ZXJzID0gZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMoc3RhdGUubGF5ZXJzKTtcblxuICBpZiAoIWFuaW1hdGFibGVMYXllcnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgZG9tYWluOiBudWxsLFxuICAgICAgICBpc0FuaW1hdGluZzogZmFsc2UsXG4gICAgICAgIHRpbWVTdGVwczogbnVsbCxcbiAgICAgICAgZGVmYXVsdFRpbWVGb3JtYXQ6IG51bGxcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgY29uc3QgbGF5ZXJEb21haW5zID0gYW5pbWF0YWJsZUxheWVycy5tYXAobCA9PiBsLmNvbmZpZy5hbmltYXRpb24uZG9tYWluIHx8IFtdKTtcbiAgLy8gQHRzLWlnbm9yZVxuICBjb25zdCBtZXJnZWREb21haW4gPSBtZXJnZVRpbWVEb21haW5zKGxheWVyRG9tYWlucyk7XG4gIGNvbnN0IGRlZmF1bHRUaW1lRm9ybWF0ID0gZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyKG1lcmdlZERvbWFpbik7XG5cbiAgLy8gbWVyZ2UgdGltZVN0ZXBzXG4gIGxldCBtZXJnZWRUaW1lU3RlcHM6IG51bWJlcltdIHwgbnVsbCA9IHVuaXE8bnVtYmVyPihcbiAgICBhbmltYXRhYmxlTGF5ZXJzLnJlZHVjZSgoYWNjdSwgbGF5ZXIpID0+IHtcbiAgICAgIGFjY3UucHVzaCguLi4obGF5ZXIuY29uZmlnLmFuaW1hdGlvbi50aW1lU3RlcHMgfHwgW10pKTtcbiAgICAgIHJldHVybiBhY2N1O1xuICAgIH0sIFtdKVxuICApLnNvcnQoKTtcblxuICBtZXJnZWRUaW1lU3RlcHMgPSBtZXJnZWRUaW1lU3RlcHMubGVuZ3RoID8gbWVyZ2VkVGltZVN0ZXBzIDogbnVsbDtcblxuICAvLyBUT0RPOiBiZXR0ZXIgaGFuZGxpbmcgb2YgZHVyYXRpb24gY2FsY3VsYXRpb25cbiAgY29uc3QgZHVyYXRpb24gPSBtZXJnZWRUaW1lU3RlcHNcbiAgICA/IChCQVNFX1NQRUVEICogKDEwMDAgLyBGUFMpKSAvIG1lcmdlZFRpbWVTdGVwcy5sZW5ndGggLyAoc3RhdGUuYW5pbWF0aW9uQ29uZmlnLnNwZWVkIHx8IDEpXG4gICAgOiBudWxsO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIGRvbWFpbjogbWVyZ2VkRG9tYWluLFxuICAgICAgZGVmYXVsdFRpbWVGb3JtYXQsXG4gICAgICBkdXJhdGlvbixcbiAgICAgIHRpbWVTdGVwczogbWVyZ2VkVGltZVN0ZXBzXG4gICAgfVxuICB9O1xuXG4gIC8vIHJlc2V0IGN1cnJlbnRUaW1lIGJhc2VkIG9uIG5ldyBkb21haW5cbiAgY29uc3Qgc3luY2VkRmlsdGVyID0gc3RhdGUuZmlsdGVycz8uZmluZChmID0+IChmIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpIGFzXG4gICAgfCBUaW1lUmFuZ2VGaWx0ZXJcbiAgICB8IHVuZGVmaW5lZDtcblxuICAvLyBpZiBzeW5jZWQgZmlsdGVyIGV4aXN0IHdlZSBuZWVkIHRvIG1lcmdlIGFuaW1hdGlvbkNvbmZpZyBhbmQgZmlsdGVyIGRvbWFpbnNcbiAgLy8gYW5kIHZhbGlkYXRlIHRoZSBjdXJyZW50IHRpbWUgYWdhaW5zdCB0aGUgbmV3IG1lcmdlZCBkb21haW5cbiAgY29uc3QgbmV3QW5pbWF0aW9uRG9tYWluID0gc3luY2VkRmlsdGVyXG4gICAgPyBtZXJnZVRpbWVEb21haW5zKFttZXJnZWREb21haW4sIHN5bmNlZEZpbHRlci5kb21haW5dKVxuICAgIDogbWVyZ2VkRG9tYWluO1xuICBjb25zdCBjdXJyZW50VGltZSA9IGlzSW5SYW5nZShzdGF0ZS5hbmltYXRpb25Db25maWcuY3VycmVudFRpbWUsIG5ld0FuaW1hdGlvbkRvbWFpbilcbiAgICA/IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZVxuICAgIDogbmV3QW5pbWF0aW9uRG9tYWluWzBdO1xuXG4gIGlmIChjdXJyZW50VGltZSAhPT0gc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lKSB7XG4gICAgLy8gaWYgY3VycmVudFRpbWUgY2hhbmdlZCwgbmVlZCB0byBjYWxsIGFuaW1hdGlvblRpbWVVcGRhdGVyIHRvIHJlIGNhbGwgZm9ybWF0TGF5ZXJEYXRhXG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV4dFN0YXRlLCB7dmFsdWU6IGN1cnJlbnRUaW1lfSk7XG4gIH1cblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG4vKipcbiAqIFVwZGF0ZSB0aGUgc3RhdHVzIG9mIHRoZSBlZGl0b3JcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFZGl0b3JNb2RlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7bW9kZX06IFZpc1N0YXRlQWN0aW9ucy5TZXRFZGl0b3JNb2RlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGVkaXRvcjoge1xuICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICBtb2RlLFxuICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICB9XG59KTtcblxuLy8gY29uc3QgZmVhdHVyZVRvRmlsdGVyVmFsdWUgPSAoZmVhdHVyZSkgPT4gKHsuLi5mZWF0dXJlLCBpZDogZmVhdHVyZS5pZH0pO1xuLyoqXG4gKiBVcGRhdGUgZWRpdG9yIGZlYXR1cmVzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmVhdHVyZXNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtmZWF0dXJlcyA9IFtdfTogVmlzU3RhdGVBY3Rpb25zLlNldEZlYXR1cmVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBsYXN0RmVhdHVyZSA9IGZlYXR1cmVzLmxlbmd0aCAmJiBmZWF0dXJlc1tmZWF0dXJlcy5sZW5ndGggLSAxXTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIC8vIG9ubHkgc2F2ZSBub25lIGZpbHRlciBmZWF0dXJlcyB0byBlZGl0b3JcbiAgICAgIGZlYXR1cmVzOiBmZWF0dXJlcy5maWx0ZXIoZiA9PiAhZ2V0RmlsdGVySWRJbkZlYXR1cmUoZikpLFxuICAgICAgbW9kZTpcbiAgICAgICAgbGFzdEZlYXR1cmUgJiYgbGFzdEZlYXR1cmUucHJvcGVydGllcz8uaXNDbG9zZWRcbiAgICAgICAgICA/IGxhc3RGZWF0dXJlLnByb3BlcnRpZXM/LnNoYXBlID09PSAnUmVjdGFuZ2xlJ1xuICAgICAgICAgICAgPyBzdGF0ZS5lZGl0b3IubW9kZVxuICAgICAgICAgICAgOiBFRElUT1JfTU9ERVMuRURJVFxuICAgICAgICAgIDogc3RhdGUuZWRpdG9yLm1vZGVcbiAgICB9XG4gIH07XG5cbiAgLy8gUmV0cmlldmUgZXhpc3RpbmcgZmVhdHVyZVxuICBjb25zdCB7c2VsZWN0ZWRGZWF0dXJlfSA9IHN0YXRlLmVkaXRvcjtcblxuICAvLyBJZiBubyBmZWF0dXJlIGlzIHNlbGVjdGVkIHdlIGNhbiBzaW1wbHkgcmV0dXJuIHNpbmNlIG5vIG9wZXJhdGlvbnNcbiAgaWYgKCFzZWxlY3RlZEZlYXR1cmUpIHtcbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH1cblxuICAvLyBUT0RPOiBjaGVjayBpZiB0aGUgZmVhdHVyZSBoYXMgY2hhbmdlZFxuICBjb25zdCBmZWF0dXJlID0gZmVhdHVyZXMuZmluZChmID0+IGYuaWQgPT09IHNlbGVjdGVkRmVhdHVyZS5pZCk7XG5cbiAgLy8gaWYgZmVhdHVyZSBpcyBwYXJ0IG9mIGEgZmlsdGVyXG4gIGNvbnN0IGZpbHRlcklkID0gZmVhdHVyZSAmJiBnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKTtcbiAgaWYgKGZpbHRlcklkICYmIGZlYXR1cmUpIHtcbiAgICAvLyBhZGQgYmJveCBmb3IgcG9seWdvbiBmaWx0ZXIgdG8gc3BlZWQgdXAgZmlsdGVyaW5nXG4gICAgaWYgKGZlYXR1cmUucHJvcGVydGllcykgZmVhdHVyZS5wcm9wZXJ0aWVzLmJib3ggPSBiYm94KGZlYXR1cmUgYXMgdW5rbm93biBhcyBBbGxHZW9KU09OKTtcbiAgICBjb25zdCBmZWF0dXJlVmFsdWUgPSBmZWF0dXJlVG9GaWx0ZXJWYWx1ZShmZWF0dXJlLCBmaWx0ZXJJZCk7XG4gICAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZmlsID0+IGZpbC5pZCA9PT0gZmlsdGVySWQpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgICBwcm9wOiAndmFsdWUnLFxuICAgICAgdmFsdWU6IGZlYXR1cmVWYWx1ZVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFNldCB0aGUgY3VycmVudCBzZWxlY3RlZCBmZWF0dXJlXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtmZWF0dXJlLCBzZWxlY3Rpb25Db250ZXh0fTogVmlzU3RhdGVBY3Rpb25zLlNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gYWRkIGJib3ggZm9yIHBvbHlnb24gZmlsdGVyIHRvIHNwZWVkIHVwIGZpbHRlcmluZ1xuICBsZXQgc2VsZWN0ZWRGZWF0dXJlID0gZmVhdHVyZTtcbiAgaWYgKGZlYXR1cmU/LnByb3BlcnRpZXMpIHtcbiAgICBzZWxlY3RlZEZlYXR1cmUgPSB7XG4gICAgICAuLi5mZWF0dXJlLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAuLi5mZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgIGJib3g6IGJib3goZmVhdHVyZSBhcyB1bmtub3duIGFzIEFsbEdlb0pTT04pXG4gICAgICB9XG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlLFxuICAgICAgc2VsZWN0aW9uQ29udGV4dFxuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogRGVsZXRlIGV4aXN0aW5nIGZlYXR1cmUgZnJvbSBmaWx0ZXJzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsZXRlRmVhdHVyZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2ZlYXR1cmV9OiBWaXNTdGF0ZUFjdGlvbnMuRGVsZXRlRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFmZWF0dXJlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgICB9XG4gIH07XG5cbiAgaWYgKGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpKSB7XG4gICAgY29uc3QgZmlsdGVySWR4ID0gbmV3U3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKSk7XG5cbiAgICByZXR1cm4gZmlsdGVySWR4ID4gLTEgPyByZW1vdmVGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWR4OiBmaWx0ZXJJZHh9KSA6IG5ld1N0YXRlO1xuICB9XG5cbiAgLy8gbW9kaWZ5IGVkaXRvciBvYmplY3RcbiAgY29uc3QgbmV3RWRpdG9yID0ge1xuICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICBmZWF0dXJlczogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbHRlcihmID0+IGYuaWQgIT09IGZlYXR1cmUuaWQpLFxuICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiBuZXdFZGl0b3JcbiAgfTtcbn1cblxuLyoqXG4gKiBUb2dnbGUgZmVhdHVyZSBhcyBsYXllciBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQb2x5Z29uRmlsdGVyTGF5ZXJVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHBheWxvYWQ6IFZpc1N0YXRlQWN0aW9ucy5TZXRQb2x5Z29uRmlsdGVyTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtsYXllciwgZmVhdHVyZX0gPSBwYXlsb2FkO1xuICBjb25zdCBmaWx0ZXJJZCA9IGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpO1xuXG4gIC8vIGxldCBuZXdGaWx0ZXIgPSBudWxsO1xuICBsZXQgZmlsdGVySWR4O1xuICBsZXQgbmV3TGF5ZXJJZCA9IFtsYXllci5pZF07XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICAvLyBJZiBwb2x5Z29uIGZpbHRlciBhbHJlYWR5IGV4aXN0cywgd2UgbmVlZCB0byBmaW5kIG91dCBpZiB0aGUgY3VycmVudCBsYXllciBpcyBhbHJlYWR5IGluY2x1ZGVkXG4gIGlmIChmaWx0ZXJJZCkge1xuICAgIGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuXG4gICAgaWYgKCFzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0pIHtcbiAgICAgIC8vIHdoYXQgaWYgZmlsdGVyIGRvZXNuJ3QgZXhpc3Q/Li4uIG5vdCBwb3NzaWJsZS5cbiAgICAgIC8vIGJlY2F1c2UgZmVhdHVyZXMgaW4gdGhlIGVkaXRvciBpcyBwYXNzZWQgaW4gZnJvbSBmaWx0ZXJzIGFuZCBlZGl0b3JzLlxuICAgICAgLy8gYnV0IHdlIHdpbGwgbW92ZSB0aGlzIGZlYXR1cmUgYmFjayB0byBlZGl0b3IganVzdCBpbiBjYXNlXG4gICAgICBjb25zdCBub25lRmlsdGVyRmVhdHVyZSA9IHtcbiAgICAgICAgLi4uZmVhdHVyZSxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIC4uLmZlYXR1cmUucHJvcGVydGllcyxcbiAgICAgICAgICBmaWx0ZXJJZDogbnVsbFxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgZWRpdG9yOiB7XG4gICAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICAgIGZlYXR1cmVzOiBbLi4uc3RhdGUuZWRpdG9yLmZlYXR1cmVzLCBub25lRmlsdGVyRmVhdHVyZV0sXG4gICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBub25lRmlsdGVyRmVhdHVyZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF07XG4gICAgY29uc3Qge2xheWVySWQgPSBbXX0gPSBmaWx0ZXI7XG4gICAgY29uc3QgaXNMYXllckluY2x1ZGVkID0gbGF5ZXJJZC5pbmNsdWRlcyhsYXllci5pZCk7XG5cbiAgICBuZXdMYXllcklkID0gaXNMYXllckluY2x1ZGVkXG4gICAgICA/IC8vIGlmIGxheWVyIGlzIGluY2x1ZGVkLCByZW1vdmUgaXRcbiAgICAgICAgbGF5ZXJJZC5maWx0ZXIobCA9PiBsICE9PSBsYXllci5pZClcbiAgICAgIDogWy4uLmxheWVySWQsIGxheWVyLmlkXTtcbiAgfSBlbHNlIHtcbiAgICAvLyBpZiB3ZSBoYXZlbid0IGNyZWF0ZSB0aGUgcG9seWdvbiBmaWx0ZXIsIGNyZWF0ZSBpdFxuICAgIGNvbnN0IG5ld0ZpbHRlciA9IGdlbmVyYXRlUG9seWdvbkZpbHRlcihbXSwgZmVhdHVyZSk7XG4gICAgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5sZW5ndGg7XG5cbiAgICAvLyBhZGQgZmVhdHVyZSwgcmVtb3ZlIGZlYXR1cmUgZnJvbSBlaWR0b3JcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZmlsdGVyczogWy4uLnN0YXRlLmZpbHRlcnMsIG5ld0ZpbHRlcl0sXG4gICAgICBlZGl0b3I6IHtcbiAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICBmZWF0dXJlczogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbHRlcihmID0+IGYuaWQgIT09IGZlYXR1cmUuaWQpLFxuICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG5ld0ZpbHRlci52YWx1ZVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICdsYXllcklkJyxcbiAgICB2YWx1ZTogbmV3TGF5ZXJJZFxuICB9KTtcbn1cblxuLyoqXG4gKiBBcHBseSBwb2x5Z29uIGZpbHRlciB0byBhbGwgdmlzaWJsZSBsYXllcnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQb2x5Z29uRmlsdGVyQWxsTGF5ZXJzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBwYXlsb2FkOiBWaXNTdGF0ZUFjdGlvbnMuU2V0UG9seWdvbkZpbHRlckFsbExheWVyc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2ZlYXR1cmV9ID0gcGF5bG9hZDtcblxuICBjb25zdCBuZXdGaWx0ZXIgPSBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIoW10sIGZlYXR1cmUpO1xuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmxlbmd0aDtcblxuICBjb25zdCBuZXdTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogWy4uLnN0YXRlLmZpbHRlcnMsIG5ld0ZpbHRlcl0sXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBmZWF0dXJlczogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbHRlcihmID0+IGYuaWQgIT09IGZlYXR1cmUuaWQpLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBuZXdGaWx0ZXIudmFsdWUsXG4gICAgICBtb2RlOiBFRElUT1JfTU9ERVMuRURJVFxuICAgIH1cbiAgfTtcblxuICBjb25zdCB2aXNpYmxlTGF5ZXJJZHMgPSBnZXQocGF5bG9hZCwgJ3Zpc2libGVMYXllcklkcycpO1xuICBjb25zdCBhbGxMYXllcklkcyA9IEFycmF5LmlzQXJyYXkodmlzaWJsZUxheWVySWRzKVxuICAgID8gdmlzaWJsZUxheWVySWRzXG4gICAgOiBzdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuaXNWaXNpYmxlKS5tYXAobCA9PiBsLmlkKTtcblxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICdsYXllcklkJyxcbiAgICB2YWx1ZTogYWxsTGF5ZXJJZHNcbiAgfSk7XG59XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvcnRUYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1uLCBtb2RlfTogVmlzU3RhdGVBY3Rpb25zLlNvcnRUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgc29ydE1vZGUgPSBtb2RlO1xuICBpZiAoIXNvcnRNb2RlKSB7XG4gICAgY29uc3QgY3VycmVudE1vZGUgPSBnZXQoZGF0YXNldCwgWydzb3J0Q29sdW1uJywgY29sdW1uXSk7XG4gICAgLy8gQHRzLWlnbm9yZSAtIHNob3VsZCBiZSBmaXhhYmxlIGluIGEgVFMgZmlsZVxuICAgIHNvcnRNb2RlID0gY3VycmVudE1vZGVcbiAgICAgID8gT2JqZWN0LmtleXMoU09SVF9PUkRFUikuZmluZChtID0+IG0gIT09IGN1cnJlbnRNb2RlKVxuICAgICAgOiBTT1JUX09SREVSLkFTQ0VORElORztcbiAgfVxuXG4gIGNvbnN0IHNvcnRlZCA9IHNvcnREYXRhc2V0QnlDb2x1bW4oZGF0YXNldCwgY29sdW1uLCBzb3J0TW9kZSk7XG4gIHJldHVybiBzZXQoWydkYXRhc2V0cycsIGRhdGFJZF0sIHNvcnRlZCwgc3RhdGUpO1xufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwaW5UYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1ufTogVmlzU3RhdGVBY3Rpb25zLlBpblRhYmxlQ29sdW1uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBwaW5UYWJsZUNvbHVtbnMoZGF0YXNldCwgY29sdW1uKTtcblxuICByZXR1cm4gc2V0KFsnZGF0YXNldHMnLCBkYXRhSWRdLCBuZXdEYXRhc2V0LCBzdGF0ZSk7XG59XG5cbi8qKlxuICogQ29weSBjb2x1bW4gY29udGVudCBhcyBzdHJpbmdzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29weVRhYmxlQ29sdW1uVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBjb2x1bW59OiBWaXNTdGF0ZUFjdGlvbnMuQ29weVRhYmxlQ29sdW1uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGZpZWxkSWR4ID0gZGF0YXNldC5maWVsZHMuZmluZEluZGV4KGYgPT4gZi5uYW1lID09PSBjb2x1bW4pO1xuICBpZiAoZmllbGRJZHggPCAwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHt0eXBlfSA9IGRhdGFzZXQuZmllbGRzW2ZpZWxkSWR4XTtcbiAgY29uc3QgdGV4dCA9IGRhdGFzZXQuZGF0YUNvbnRhaW5lclxuICAgIC5tYXAocm93ID0+IHBhcnNlRmllbGRWYWx1ZShyb3cudmFsdWVBdChmaWVsZElkeCksIHR5cGUpLCB0cnVlKVxuICAgIC5qb2luKCdcXG4nKTtcblxuICBjb3B5KHRleHQpO1xuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBTZXQgZGlzcGxheSBmb3JtYXQgZnJvbSBjb2x1bW5zIGZyb20gdXNlciBzZWxlY3Rpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBmb3JtYXRzfTogVmlzU3RhdGVBY3Rpb25zLlNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0ZpZWxkcyA9IGRhdGFzZXQuZmllbGRzO1xuICBPYmplY3Qua2V5cyhmb3JtYXRzKS5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgY29uc3QgZmllbGRJZHggPSBkYXRhc2V0LmZpZWxkcy5maW5kSW5kZXgoZiA9PiBmLm5hbWUgPT09IGNvbHVtbik7XG4gICAgaWYgKGZpZWxkSWR4ID49IDApIHtcbiAgICAgIGNvbnN0IGRpc3BsYXlGb3JtYXQgPSBmb3JtYXRzW2NvbHVtbl07XG4gICAgICBjb25zdCBmaWVsZCA9IG5ld0ZpZWxkc1tmaWVsZElkeF07XG4gICAgICBuZXdGaWVsZHMgPSBzd2FwXyhtZXJnZV8oe2Rpc3BsYXlGb3JtYXR9KShmaWVsZCkgYXMge2lkOiBzdHJpbmd9KShcbiAgICAgICAgbmV3RmllbGRzIGFzIHtpZDogc3RyaW5nfVtdXG4gICAgICApIGFzIEZpZWxkW107XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBuZXdEYXRhc2V0ID0gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtmaWVsZHM6IG5ld0ZpZWxkcyBhcyBGaWVsZFtdfSk7XG4gIGxldCBuZXdTdGF0ZSA9IHBpY2tfKCdkYXRhc2V0cycpKG1lcmdlXyh7W2RhdGFJZF06IG5ld0RhdGFzZXR9KSkoc3RhdGUpO1xuXG4gIC8vIHVwZGF0ZSBjb2xvckZpZWxkIGRpc3BsYXlGb3JtYXRcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdTdGF0ZS5sYXllcnMubWFwKGxheWVyID0+XG4gICAgICBsYXllci5jb25maWc/LmNvbG9yRmllbGQ/Lm5hbWUgJiYgbGF5ZXIuY29uZmlnLmNvbG9yRmllbGQubmFtZSBpbiBmb3JtYXRzXG4gICAgICAgID8gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgICAgY29sb3JGaWVsZDoge1xuICAgICAgICAgICAgICAuLi5sYXllci5jb25maWcuY29sb3JGaWVsZCxcbiAgICAgICAgICAgICAgZGlzcGxheUZvcm1hdDogZm9ybWF0c1tsYXllci5jb25maWcuY29sb3JGaWVsZC5uYW1lXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIDogbGF5ZXJcbiAgICApXG4gIH07XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBlZGl0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRWRpdG9yVmlzaWJpbGl0eVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIHZpc2libGU6ICFzdGF0ZS5lZGl0b3IudmlzaWJsZVxuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZHgsIGNvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcbiAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzLiR7aWR4fSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKG9sZEZpbHRlci50eXBlICE9PSBGSUxURVJfVFlQRVMudGltZVJhbmdlKSB7XG4gICAgQ29uc29sZS5lcnJvcihcbiAgICAgIGBzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnIGNhbiBvbmx5IGJlIGNhbGxlZCB0byB1cGRhdGUgYSB0aW1lIGZpbHRlci4gY2hlY2sgZmlsdGVyLnR5cGUgPT09ICd0aW1lUmFuZ2UnYFxuICAgICk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgdXBkYXRlcyA9IGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKTtcblxuICByZXR1cm4gcGlja18oJ2ZpbHRlcnMnKShzd2FwXyhtZXJnZV8odXBkYXRlcykob2xkRmlsdGVyKSkpKHN0YXRlKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpIHtcbiAgY29uc3QgYWxsb3dlZCA9IFsndGltZUZvcm1hdCcsICd0aW1lem9uZSddO1xuICByZXR1cm4gT2JqZWN0LmtleXMoY29uZmlnKS5yZWR1Y2UoKGFjY3UsIHByb3ApID0+IHtcbiAgICBpZiAoIWFsbG93ZWQuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWcgdGFrZXMgdGltZUZvcm1hdCBhbmQvb3IgdGltZXpvbmUgYXMgb3B0aW9ucywgZm91bmQgJHtwcm9wfWBcbiAgICAgICk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9XG5cbiAgICAvLyBoZXJlIHdlIGFyZSBOT1QgY2hlY2tpbmcgaWYgdGltZXpvbmUgb3IgdGltZUZvcm1hdCBpbnB1dCBpcyB2YWxpZFxuICAgIGFjY3VbcHJvcF0gPSBjb25maWdbcHJvcF07XG4gICAgcmV0dXJuIGFjY3U7XG4gIH0sIHt9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZWRpdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghY29uZmlnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHVwZGF0ZXMgPSBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZyk7XG4gIHJldHVybiBwaWNrXygnYW5pbWF0aW9uQ29uZmlnJykobWVyZ2VfKHVwZGF0ZXMpKShzdGF0ZSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2V2ZW50LCBsYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IHtpZDogZGVja2dsTGF5ZXJJZCwgY291bnR9ID0gZXZlbnQ7XG4gIGlmICghbGF5ZXIpIHtcbiAgICBDb25zb2xlLndhcm4oYGxheWVyRmlsdGVyZWRJdGVtcyBsYXllciBkb2VzbnQgZXhpc3RzYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChsYXllci5maWx0ZXJlZEl0ZW1Db3VudD8uW2RlY2tnbExheWVySWRdID09PSBjb3VudCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxheWVyLmZpbHRlcmVkSXRlbUNvdW50ID0ge1xuICAgIC4uLmxheWVyLmZpbHRlcmVkSXRlbUNvdW50LFxuICAgIFtkZWNrZ2xMYXllcklkXTogY291bnRcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3dhcF8obGF5ZXIpKHN0YXRlLmxheWVycylcbiAgfTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgV01TIGZlYXR1cmUgaW5mbyBhbmQgcGluIHRvb2x0aXBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdtc0ZlYXR1cmVJbmZvVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuV01TRmVhdHVyZUluZm9BY3Rpb25cbik6IFMge1xuICBjb25zdCB7bGF5ZXIsIGZlYXR1cmVJbmZvLCBjb29yZGluYXRlfSA9IGFjdGlvbjtcbiAgaWYgKCFsYXllcikge1xuICAgIGNvbnNvbGUud2FybihgV01TIGZlYXR1cmUgaW5mbyBsYXllciBkb2Vzbid0IGV4aXN0YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gQ3JlYXRlIGEgY2xpY2tlZCBvYmplY3Qgc2ltaWxhciB0byBsYXllckNsaWNrVXBkYXRlciB0byBwaW4gdGhlIHRvb2x0aXBcbiAgY29uc3QgY2xpY2tlZCA9IGZlYXR1cmVJbmZvXG4gICAgPyB7XG4gICAgICAgIHBpY2tlZDogdHJ1ZSxcbiAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgd21zRmVhdHVyZUluZm86IGZlYXR1cmVJbmZvXG4gICAgICAgIH0sXG4gICAgICAgIGNvb3JkaW5hdGU6IGNvb3JkaW5hdGUgfHwgWzAsIDBdLFxuICAgICAgICBsYXllcjoge1xuICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICBpZHg6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBsYXllci5pZCksXG4gICAgICAgICAgICBpZDogbGF5ZXIuaWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICA6IG51bGw7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjbGlja2VkXG4gIH07XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50c1xuZXhwb3J0IGZ1bmN0aW9uIHN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2lkeDogZmlsdGVySWR4LCBlbmFibGUgPSBmYWxzZX0gPSBhY3Rpb247XG5cbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgbGV0IG5ld0ZpbHRlciA9IGZpbHRlcjtcblxuICAvLyBpZiB3ZSBlbmFibGUgc3luYyB3ZSBhcmUgZ29pbmcgdG8gbWVyZ2UgZmlsdGVyIGFuZCBhbmltYXRpb25Db25maWcgZG9tYWlucyBhbmQgc3RvcmUgaW50byBmaWx0ZXIuZG9tYWluXG4gIGlmIChlbmFibGUpIHtcbiAgICBjb25zdCBhbmltYXRhYmxlTGF5ZXJzID0gZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMobmV3U3RhdGUubGF5ZXJzKTtcbiAgICAvLyBpZiBubyBhbmltYXRhYmxlTGF5ZXJzIGFyZSBwcmVzZW50IHdlIHNpbXBseSByZXR1cm5cbiAgICBpZiAoIWFuaW1hdGFibGVMYXllcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmV3U3RhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyA9IGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMoYW5pbWF0YWJsZUxheWVycyk7XG4gICAgY29uc3QgaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyID0gQm9vbGVhbihpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLmxlbmd0aCk7XG5cbiAgICBjb25zdCBuZXdGaWx0ZXJEb21haW4gPSBtZXJnZVRpbWVEb21haW5zKFtmaWx0ZXIuZG9tYWluLCBuZXdTdGF0ZS5hbmltYXRpb25Db25maWcuZG9tYWluXSk7XG5cbiAgICAvLyB3ZSBvbmx5IHVwZGF0ZSBhbmltYXRpb25XaW5kb3cgaWYgd2UgaGF2ZSBpbnRlcnZhbCBiYXNlZCBhbmltYXRpb24gbGF5ZXJzIHdpdGggZGVmaW5lZCBpbnRlcnZhbHMgYW5kIHRoZSBjdXJyZW50IGZpbHRlciBhbmltYXRpb24gd2luZG93IGlzIG5vdCBpbnRlcnZhbFxuICAgIGlmIChoYXNJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXIpIHtcbiAgICAgIGlmIChmaWx0ZXIuYW5pbWF0aW9uV2luZG93ICE9PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsKSB7XG4gICAgICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgICAgIGlkOiBmaWx0ZXIuaWQsXG4gICAgICAgICAgYW5pbWF0aW9uV2luZG93OiBBTklNQVRJT05fV0lORE9XLmludGVydmFsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgICAvLyBhZGp1c3QgdGltZSBmaWx0ZXIgaW50ZXJ2YWxcbiAgICAgIG5ld0ZpbHRlciA9IGFkanVzdFRpbWVGaWx0ZXJJbnRlcnZhbChuZXdTdGF0ZSwgbmV3RmlsdGVyKTtcblxuICAgICAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgICAgIG5ld1N0YXRlID0ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gICAgICB9O1xuICAgIH1cblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBhZGp1c3QgdmFsdWUgYmFzZWQgb24gbmV3IGRvbWFpblxuICAgIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihcbiAgICAgIG5ld0ZpbHRlci5hbmltYXRpb25XaW5kb3cgPT09IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWxcbiAgICAgICAgPyBbbmV3RmlsdGVyRG9tYWluWzBdLCBuZXdGaWx0ZXJEb21haW5bMF1dXG4gICAgICAgIDogbmV3RmlsdGVyRG9tYWluLFxuICAgICAgey4uLm5ld0ZpbHRlciwgZG9tYWluOiBuZXdGaWx0ZXJEb21haW59XG4gICAgKTtcblxuICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgICBwcm9wOiAndmFsdWUnLFxuICAgICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gICAgfSk7XG5cbiAgICBuZXdGaWx0ZXIgPSB7XG4gICAgICAuLi4obmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlciksXG4gICAgICBzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZTogdHJ1ZVxuICAgIH07XG5cbiAgICAvLyByZXBsYWNlIGZpbHRlciBpbiBzdGF0ZSB3aXRoIG5ld0ZpbHRlclxuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikobmV3U3RhdGUuZmlsdGVycylcbiAgICB9O1xuXG4gICAgbmV3U3RhdGUgPSBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgICB9KTtcblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBzZXQgdGhlIGFuaW1hdGlvbiBjb25maWcgdmFsdWUgdG8gbWF0Y2ggZmlsdGVyIHZhbHVlXG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIHZhbHVlOiBuZXdGaWx0ZXIudmFsdWVbbmV3RmlsdGVyLnN5bmNUaW1lbGluZU1vZGVdXG4gICAgfSk7XG4gIH1cblxuICAvLyBzZXQgZG9tYWluIGFuZCBzdGVwXG4gIG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgc3luY2VkV2l0aExheWVyVGltZWxpbmU6IGZhbHNlXG4gIH07XG5cbiAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgLy8gcmVzZXQgc3luYyB0aW1lbGluZSBtb2RlXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kXG4gIH0pO1xuXG4gIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgLy8gcmVzZXQgZmlsdGVyIHZhbHVlXG4gIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihuZXdGaWx0ZXIuZG9tYWluLCBuZXdGaWx0ZXIpO1xuXG4gIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gIH0pO1xuXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgfSk7XG5cbiAgLy8gcmVzZXQgYW5pbWF0aW9uIGNvbmZpZyBjdXJyZW50IHRpbWUgdG9cbiAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICB2YWx1ZTogbmV3U3RhdGUuYW5pbWF0aW9uQ29uZmlnLmRvbWFpbj8uWzBdID8/IG51bGxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuc2V0VGltZUZpbHRlclN5bmNUaW1lbGluZU1vZGVBY3Rpb25cbikge1xuICBjb25zdCB7aWQ6IGZpbHRlcklkLCBtb2RlOiBzeW5jVGltZWxpbmVNb2RlfSA9IGFjdGlvbjtcblxuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlcklkeCA9PT0gLTEpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIGlmICghdmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXIsIHN5bmNUaW1lbGluZU1vZGUpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBzeW5jVGltZWxpbmVNb2RlXG4gIH07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKHN0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgcmV0dXJuIGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIobmV3U3RhdGUsIGZpbHRlcklkeCk7XG59XG5cbi8qKlxuICogVXBkYXRlIHN0YXRlIG9mIHRoZSBsb2FkaW5nIGluZGljYXRvci5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgdmlzU3RhdGVcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBQYXlsb2FkIHdpdGggY2hhbmdlIG9mIG51bWJlciBvZiBhY3RpdmUgbG9hZGluZyBhY3Rpb25zLlxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7cGF5bG9hZDoge2NoYW5nZX19OiB7cGF5bG9hZDogU2V0TG9hZGluZ0luZGljYXRvclBheWxvYWR9XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGxldCB7bG9hZGluZ0luZGljYXRvclZhbHVlfSA9IHN0YXRlO1xuICBpZiAoIWxvYWRpbmdJbmRpY2F0b3JWYWx1ZSkge1xuICAgIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZSA9IDA7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZTogTWF0aC5tYXgobG9hZGluZ0luZGljYXRvclZhbHVlICsgY2hhbmdlLCAwKVxuICB9O1xufTtcblxuZnVuY3Rpb24gYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBmaWx0ZXJJZHg6IG51bWJlcik6IFMge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF07XG4gIGlmICgoZmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpIHtcbiAgICBjb25zdCB0aW1lbGluZVZhbHVlID0gZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIoZmlsdGVyKTtcbiAgICBjb25zdCB2YWx1ZSA9IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy50aW1lU3RlcHNcbiAgICAgID8gc25hcFRvTWFya3ModGltZWxpbmVWYWx1ZSwgc3RhdGUuYW5pbWF0aW9uQ29uZmlnLnRpbWVTdGVwcylcbiAgICAgIDogdGltZWxpbmVWYWx1ZTtcbiAgICByZXR1cm4gc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlcihzdGF0ZSwge3ZhbHVlfSk7XG4gIH1cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiBnZXRUaW1lbGluZVZhbHVlRnJvbUZpbHRlcihmaWx0ZXIpIHtcbiAgcmV0dXJuIGZpbHRlci52YWx1ZVtmaWx0ZXIuc3luY1RpbWVsaW5lTW9kZV07XG59XG5cbmZ1bmN0aW9uIGdldFN5bmNBbmltYXRpb25Nb2RlKGZpbHRlcjogVGltZVJhbmdlRmlsdGVyKSB7XG4gIGlmIChmaWx0ZXIuYW5pbWF0aW9uV2luZG93ID09PSBBTklNQVRJT05fV0lORE9XLmZyZWUpIHtcbiAgICByZXR1cm4gZmlsdGVyLnN5bmNUaW1lbGluZU1vZGUgPz8gU1lOQ19USU1FTElORV9NT0RFUy5lbmQ7XG4gIH1cblxuICByZXR1cm4gU1lOQ19USU1FTElORV9NT0RFUy5lbmQ7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUoZmlsdGVyOiBUaW1lUmFuZ2VGaWx0ZXIsIG5ld01vZGU6IG51bWJlcikge1xuICByZXR1cm4gIShcbiAgICBmaWx0ZXIuYW5pbWF0aW9uV2luZG93ICE9PSBBTklNQVRJT05fV0lORE9XLmZyZWUgJiYgbmV3TW9kZSA9PT0gU1lOQ19USU1FTElORV9NT0RFUy5zdGFydFxuICApO1xufVxuXG5mdW5jdGlvbiBhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwoc3RhdGUsIGZpbHRlcikge1xuICBjb25zdCBpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzID0gZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyhzdGF0ZS5sYXllcnMpO1xuXG4gIGxldCBpbnRlcnZhbDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGlmIChpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgaW50ZXJ2YWxJbmRleCA9IGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMucmVkdWNlKChjdXJyZW50SW5kZXgsIGwpID0+IHtcbiAgICAgIGlmIChsLm1ldGEudGFyZ2V0VGltZUludGVydmFsKSB7XG4gICAgICAgIGNvbnN0IG5ld0luZGV4ID0gVElNRV9JTlRFUlZBTFNfT1JERVJFRC5maW5kSW5kZXgoaSA9PiBpID09PSBsLm1ldGEudGFyZ2V0VGltZUludGVydmFsKTtcbiAgICAgICAgcmV0dXJuIG5ld0luZGV4ID4gLTEgJiYgbmV3SW5kZXggPCBjdXJyZW50SW5kZXggPyBuZXdJbmRleCA6IGN1cnJlbnRJbmRleDtcbiAgICAgIH1cbiAgICB9LCBUSU1FX0lOVEVSVkFMU19PUkRFUkVELmxlbmd0aCAtIDEpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBoZXhUaWxlSW50ZXJ2YWwgPSBUSU1FX0lOVEVSVkFMU19PUkRFUkVEW2ludGVydmFsSW5kZXhdO1xuICAgIGludGVydmFsID0gTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbFtoZXhUaWxlSW50ZXJ2YWxdO1xuICB9XG5cbiAgaWYgKCFpbnRlcnZhbCkge1xuICAgIHJldHVybiBmaWx0ZXI7XG4gIH1cblxuICAvLyBhZGp1c3QgZmlsdGVyXG4gIGNvbnN0IHRpbWVGb3JtYXQgPSBnZXREZWZhdWx0VGltZUZvcm1hdChpbnRlcnZhbCk7XG4gIGNvbnN0IHVwZGF0ZWRQbG90VHlwZSA9IHsuLi5maWx0ZXIucGxvdFR5cGUsIGludGVydmFsLCB0aW1lRm9ybWF0fTtcbiAgY29uc3QgbmV3RmlsdGVyID0gdXBkYXRlVGltZUZpbHRlclBsb3RUeXBlKGZpbHRlciwgdXBkYXRlZFBsb3RUeXBlLCBzdGF0ZS5kYXRhc2V0cyk7XG4gIHJldHVybiBhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93KHN0YXRlLCBuZXdGaWx0ZXIpO1xufVxuXG4vLyBGaW5kIGRhdGFJZCBmcm9tIGEgc2F2ZWQgdmlzU3RhdGUgcHJvcGVydHk6XG4vLyBsYXllcnMsIGZpbHRlcnMsIGludGVyYWN0aW9ucywgbGF5ZXJCbGVuZGluZywgb3ZlcmxheUJsZW5kaW5nLCBzcGxpdE1hcHMsIGFuaW1hdGlvbkNvbmZpZywgZWRpdG9yXG4vLyByZXBsYWNlIGl0IHdpdGggYW5vdGhlciBkYXRhSWRcbmZ1bmN0aW9uIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyh2YWx1ZTogYW55LCBkYXRhSWQ6IHN0cmluZywgZGF0YUlkVG9SZXBsYWNlOiBzdHJpbmcpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gZm9yIGxheWVycywgZmlsdGVycywgY2FsbCBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMgb24gZWFjaCBpdGVtIGluIGFycmF5XG4gICAgY29uc3QgcmVwbGFjZWQgPSB2YWx1ZVxuICAgICAgLm1hcCh2ID0+IGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyh2LCBkYXRhSWQsIGRhdGFJZFRvUmVwbGFjZSkpXG4gICAgICAuZmlsdGVyKGQgPT4gZCk7XG4gICAgcmV0dXJuIHJlcGxhY2VkLmxlbmd0aCA/IHJlcGxhY2VkIDogbnVsbDtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlLmRhdGFJZCA9PT0gJ3N0cmluZycgJiYgdmFsdWUuZGF0YUlkID09PSBkYXRhSWQpIHtcbiAgICAvLyBvdGhlcnNcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmFsdWUsXG4gICAgICBkYXRhSWQ6IGRhdGFJZFRvUmVwbGFjZVxuICAgIH07XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZS5kYXRhSWQpICYmIHZhbHVlLmRhdGFJZC5pbmNsdWRlcyhkYXRhSWQpKSB7XG4gICAgLy8gZmlsdGVyXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgZGF0YUlkOiB2YWx1ZS5kYXRhSWQubWFwKGQgPT4gKGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvUmVwbGFjZSA6IGQpKVxuICAgIH07XG4gIH0gZWxzZSBpZiAodmFsdWUuY29uZmlnPy5kYXRhSWQgJiYgdmFsdWUuY29uZmlnPy5kYXRhSWQgPT09IGRhdGFJZCkge1xuICAgIC8vIGxheWVyXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLnZhbHVlLmNvbmZpZyxcbiAgICAgICAgZGF0YUlkOiBkYXRhSWRUb1JlcGxhY2VcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2UgaWYgKGlzT2JqZWN0KHZhbHVlKSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGRhdGFJZCkpIHtcbiAgICAvLyBmb3IgdmFsdWUgc2F2ZWQgYXMge1tkYXRhSWRdOiB7Li4ufX1cbiAgICByZXR1cm4ge1tkYXRhSWRUb1JlcGxhY2VdOiB2YWx1ZVtkYXRhSWRdfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBGaW5kIGRhdGFzZXRJZHMgZGVyaXZlZCBhIHNhdmVkIHZpc1N0YXRlIFByb3BlcnR5O1xuZnVuY3Rpb24gZmluZENoaWxkRGF0YXNldElkcyh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBmb3IgbGF5ZXJzLCBmaWx0ZXJzLCBjYWxsIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyBvbiBlYWNoIGl0ZW0gaW4gYXJyYXlcbiAgICBjb25zdCBjaGlsZERhdGFJZHMgPSB2YWx1ZS5tYXAoZmluZENoaWxkRGF0YXNldElkcykuZmlsdGVyKGQgPT4gZCk7XG4gICAgcmV0dXJuIGNoaWxkRGF0YUlkcy5sZW5ndGggPyBjaGlsZERhdGFJZHMgOiBudWxsO1xuICB9XG5cbiAgLy8gY2hpbGQgZGF0YSBpZCB1c3VhbGx5IHN0b3JlcyBpbiB0aGUgZGVyaXZlZCBkYXRhc2V0IGluZm9cbiAgcmV0dXJuIHZhbHVlPy5uZXdEYXRhc2V0Py5pbmZvLmlkIHx8IG51bGw7XG59XG5cbi8vIG1vdmVkIHVubWVyZ2VkIGxheWVycywgZmlsdGVycywgaW50ZXJhY3Rpb25zXG5mdW5jdGlvbiBtb3ZlVmFsdWVUb0JlTWVyZ2VkKHN0YXRlLCBwcm9wVmFsdWVzLCB7cHJvcCwgdG9NZXJnZVByb3AsIHNhdmVVbm1lcmdlZH0pIHtcbiAgLy8gcmVtb3ZlIHByb3AgdmFsdWUgZnJvbSBzdGF0ZVxuICAvLyBUT0RPOiBzaG91bGQgd2UgYWRkIHJlbW92ZSB1cGRhdGVyIHRvIG1lcmdlciBhcyB3ZWxsP1xuICBpZiAoIXByb3BWYWx1ZXMpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qgc3RhdGVSZW1vdmVkID1cbiAgICBwcm9wID09PSAnbGF5ZXJzJ1xuICAgICAgPyBwcm9wVmFsdWVzLnJlZHVjZSgoYWNjdSwgcHJvcFZhbHVlKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkOiBwcm9wVmFsdWUuaWR9KSwgc3RhdGUpXG4gICAgICA6IEFycmF5LmlzQXJyYXkoc3RhdGVbcHJvcF0pXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBbcHJvcF06IHN0YXRlW3Byb3BdLmZpbHRlcihwID0+ICFwcm9wVmFsdWVzLmZpbmQocHJvcFZhbHVlID0+IHAuaWQgPT09IHByb3BWYWx1ZS5pZCkpXG4gICAgICAgIH1cbiAgICAgIDogLy8gaWYgbm90IGFycmF5LCB3ZSB3b24ndCByZW1vdmUgaXQsIHJlbW92ZSBkYXRhc2V0IHNob3VsZCBoYW5kbGUgaXRcbiAgICAgICAgc3RhdGU7XG5cbiAgLy8gbW92ZSB0byBzdGF0ZVRvQmVNZXJnZWRcbiAgY29uc3QgdG9CZU1lcmdlZCA9IHtcbiAgICBbdG9NZXJnZVByb3BdOiBzYXZlVW5tZXJnZWRcbiAgICAgID8gLy8gY2FsbCBtZXJnZSBzYXZlVW5tZXJnZWQgbWV0aG9kXG4gICAgICAgIHNhdmVVbm1lcmdlZChzdGF0ZVJlbW92ZWQsIHByb3BWYWx1ZXMpXG4gICAgICA6IC8vIGlmIHRvTWVyZ2VQcm9wIGlzIGFyYWF5LCBhcHBlbmQgdG8gaXRcbiAgICAgIEFycmF5LmlzQXJyYXkoc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSlcbiAgICAgID8gWy4uLnN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0sIC4uLnByb3BWYWx1ZXNdXG4gICAgICA6IC8vIHNhdmUgcHJvcFZhbHVlcyB0byB0b01lcmdlXG4gICAgICBpc09iamVjdChzdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSxcbiAgICAgICAgICAuLi5wcm9wVmFsdWVzXG4gICAgICAgIH1cbiAgICAgIDogc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGVSZW1vdmVkLFxuICAgIC4uLnRvQmVNZXJnZWRcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZURhdGFzZXRBbmREZXBzPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZ1xuKTogVCB7XG4gIHJldHVybiBjb21wb3NlXzxUPihbXG4gICAgYXBwbHlfKHJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGUsIHtkYXRhSWQsIGRhdGFJZFRvVXNlfSksXG4gICAgYXBwbHlfKHJlbW92ZURhdGFzZXRVcGRhdGVyLCB7ZGF0YUlkfSlcbiAgXSkoc3RhdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2U8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhSWRUb1VzZTogc3RyaW5nXG4pOiBUIHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoc3RhdGUsIHN0YXRlLnNjaGVtYSk7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHJlcGxhY2VEYXRhc2V0QW5kRGVwcyhzdGF0ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSk7XG4gIC8vIG1ha2UgYSBjb3B5IG9mIGxheWVyT3JkZXIsIGJlY2F1c2UgbGF5ZXIgaWQgd2lsbCBiZSByZW1vdmVkIGZyb20gaXQgYnkgY2FsbGluZyByZW1vdmVMYXllclVwZGF0ZXJcbiAgY29uc3QgcHJlc2VydmVMYXllck9yZGVyID0gWy4uLnN0YXRlLmxheWVyT3JkZXJdO1xuXG4gIC8vIHByZXNlcnZlIGRhdGFzZXQgb3JkZXJcbiAgbmV4dFN0YXRlLnByZXNlcnZlRGF0YXNldE9yZGVyID0gT2JqZWN0LmtleXMoc3RhdGUuZGF0YXNldHMpLm1hcChkID0+XG4gICAgZCA9PT0gZGF0YUlkID8gZGF0YUlkVG9Vc2UgOiBkXG4gICk7XG5cbiAgLy8gcHJlc2VydmVMYXllck9yZGVyXG4gIGlmIChuZXh0U3RhdGUubGF5ZXJUb0JlTWVyZ2VkPy5sZW5ndGgpIHtcbiAgICAvLyBjb3B5IHNwbGl0IG1hcHMgdG8gYmUgbWVyZ2VkLCBiZWNhdXNlIGl0IHdpbGwgYmUgcmVzZXQgaW4gcmVtb3ZlIGxheWVyXG4gICAgbmV4dFN0YXRlLnNwbGl0TWFwc1RvQmVNZXJnZWQgPSBzZXJpYWxpemVkU3RhdGU/LnNwbGl0TWFwcyA/PyBbXTtcbiAgICBuZXh0U3RhdGUubGF5ZXJPcmRlciA9IFsuLi5wcmVzZXJ2ZUxheWVyT3JkZXJdO1xuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGU8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIHtkYXRhSWQsIGRhdGFJZFRvVXNlfToge2RhdGFJZDogc3RyaW5nOyBkYXRhSWRUb1VzZTogc3RyaW5nfVxuKTogVCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKHN0YXRlLCBzdGF0ZS5zY2hlbWEpO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHN0YXRlLm1lcmdlcnMucmVkdWNlKFxuICAgIChcbiAgICAgIGFjY3VTdGF0ZSxcbiAgICAgIHtwcm9wLCB0b01lcmdlUHJvcCwgcmVwbGFjZVBhcmVudERhdGFzZXRJZHMsIGdldENoaWxkRGF0YXNldElkcywgc2F2ZVVubWVyZ2VkLCBwcmVzZXJ2ZU9yZGVyfVxuICAgICkgPT4ge1xuICAgICAgLy8gZ2V0IGRhdGFzZXQgaWRzIHRoYXQgYXJlIGRlcGVuZHMgb24gdGhpcyBkYXRhc2V0XG4gICAgICBjb25zdCBwcm9wcyA9IHRvQXJyYXkocHJvcCk7XG4gICAgICBjb25zdCB0b01lcmdlUHJvcHMgPSB0b0FycmF5KHRvTWVyZ2VQcm9wKTtcbiAgICAgIGNvbnN0IHNhdmVkUHJvcHMgPSBzZXJpYWxpemVkU3RhdGUgPyBwcm9wcy5tYXAocCA9PiBzZXJpYWxpemVkU3RhdGVbcF0pIDogW107XG5cbiAgICAgIGxldCByZXBsYWNlZFN0YXRlID0gYWNjdVN0YXRlO1xuICAgICAgc2F2ZWRQcm9wcy5mb3JFYWNoKChwcm9wVmFsdWUsIGkpID0+IHtcbiAgICAgICAgY29uc3QgbWVyZ2VyT3B0aW9ucyA9IHtcbiAgICAgICAgICBwcm9wOiBwcm9wc1tpXSxcbiAgICAgICAgICB0b01lcmdlUHJvcDogdG9NZXJnZVByb3BzW2ldLFxuICAgICAgICAgIGdldENoaWxkRGF0YXNldElkcyxcbiAgICAgICAgICBzYXZlVW5tZXJnZWRcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXBsYWNlZEl0ZW0gPVxuICAgICAgICAgIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzPy4ocHJvcFZhbHVlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKSB8fFxuICAgICAgICAgIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyhwcm9wVmFsdWUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UpO1xuICAgICAgICByZXBsYWNlZFN0YXRlID0gcmVwbGFjZWRJdGVtXG4gICAgICAgICAgPyByZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZShyZXBsYWNlZFN0YXRlLCByZXBsYWNlZEl0ZW0sIG1lcmdlck9wdGlvbnMpXG4gICAgICAgICAgOiByZXBsYWNlZFN0YXRlO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBtZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICByZXBsYWNlZFN0YXRlW21lcmdlck9wdGlvbnMudG9NZXJnZVByb3BdPy5sZW5ndGggJiZcbiAgICAgICAgICBwcmVzZXJ2ZU9yZGVyXG4gICAgICAgICkge1xuICAgICAgICAgIHJlcGxhY2VkU3RhdGVbcHJlc2VydmVPcmRlcl0gPSBwcm9wVmFsdWUubWFwKGl0ZW0gPT4gaXRlbS5pZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVwbGFjZWRTdGF0ZTtcbiAgICB9LFxuICAgIHN0YXRlXG4gICk7XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZVByb3BWYWx1ZUluU3RhdGUoXG4gIHN0YXRlLFxuICByZXBsYWNlZEl0ZW0sXG4gIHtwcm9wLCB0b01lcmdlUHJvcCwgZ2V0Q2hpbGREYXRhc2V0SWRzLCBzYXZlVW5tZXJnZWR9XG4pIHtcbiAgLy8gcHJvcCBpcyBkZXBlbmRzIG9uIHRoZSBkYXRhc2V0IHRvIGJlIHJlcGxhY2VkXG4gIC8vIHJlbW92ZSBwcm9wIGZyb20gc3RhdGUsIGFuZCBtb3ZlIGl0IHRvIHRvQmVNZXJnZWRcbiAgbGV0IG5leHRTdGF0ZSA9IG1vdmVWYWx1ZVRvQmVNZXJnZWQoc3RhdGUsIHJlcGxhY2VkSXRlbSwge3Byb3AsIHRvTWVyZ2VQcm9wLCBzYXZlVW5tZXJnZWR9KTtcbiAgY29uc3QgY2hpbGREYXRhSWRzID0gZ2V0Q2hpbGREYXRhc2V0SWRzPy4ocmVwbGFjZWRJdGVtKSB8fCBmaW5kQ2hpbGREYXRhc2V0SWRzKHJlcGxhY2VkSXRlbSk7XG5cbiAgaWYgKGNoaWxkRGF0YUlkcykge1xuICAgIG5leHRTdGF0ZSA9IHRvQXJyYXkoY2hpbGREYXRhSWRzKS5yZWR1Y2UoKGFjY3UsIGNoaWxkRGF0YUlkKSA9PiB7XG4gICAgICAvLyBzaG91bGRuJ3QgbmVlZCB0byBjaGFuZ2UgY2hpbGQgZGF0YXNldCBpZCxcbiAgICAgIC8vIGJ1dCBzdGlsbCBuZWVkIHRvIG1vdmUgb3V0IG9mIHN0YXRlIGFuZCBtZXJnZSBiYWNrIGluXG4gICAgICByZXR1cm4gcmVwbGFjZURhdGFzZXRBbmREZXBzKGFjY3UsIGNoaWxkRGF0YUlkLCBjaGlsZERhdGFJZCk7XG4gICAgfSwgbmV4dFN0YXRlKTtcbiAgfVxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVBLFNBQVFBLElBQUksUUFBTyxZQUFZO0FBRS9CLE9BQU9DLElBQUksTUFBTSxtQkFBbUI7QUFDcEMsT0FBT0MsU0FBUyxNQUFNLFdBQVc7QUFDakMsU0FBUUMsT0FBTyxJQUFJQyxPQUFPLFFBQU8sZUFBZTtBQUNoRCxPQUFPQyxTQUFTLE1BQU0sa0JBQWtCO0FBQ3hDLE9BQU9DLEdBQUcsTUFBTSxZQUFZO0FBQzVCLE9BQU9DLE9BQU8sTUFBTSxnQkFBZ0I7QUFDcEMsT0FBT0MsSUFBSSxNQUFNLGFBQWE7QUFDOUIsT0FBT0MsSUFBSSxNQUFNLGFBQWE7QUFDOUIsT0FBT0MsR0FBRyxNQUFNLFlBQVk7QUFDNUIsT0FBT0MsSUFBSSxJQUFHQyxxQkFBcUIsRUFBRUMsUUFBUSxRQUFPLGtCQUFrQjtBQUN0RTtBQUNBLFNBQ0VDLFVBQVUsRUFDVkMsV0FBVyxFQUNYQyxjQUFjLEVBQ2RDLGlCQUFpQixFQUNqQkMsV0FBVyxRQUNOLGtCQUFrQjtBQUN6QjtBQUNBLFNBQ0VDLGVBQWUsRUFNZkMsZ0JBQWdCLEVBQ2hCQyx1QkFBdUIsRUFDdkJDLGlCQUFpQixFQUNqQkMsZUFBZSxFQUNmQyxvQkFBb0IsRUFDcEJDLDhCQUE4QixFQUM5QkMsbUJBQW1CLEVBQ25CQyxZQUFZLEVBQ1pDLGdCQUFnQixFQUNoQkMsWUFBWSxFQUNaQyxhQUFhLEVBQ2JDLFNBQVMsRUFDVEMsa0JBQWtCLEVBQ2xCQyxTQUFTLElBQUlDLFlBQVksRUFDekJDLGlCQUFpQixFQUNqQkMsaUJBQWlCLFFBRVosb0JBQW9COztBQUUzQjtBQUNBLFNBQ0VDLG9CQUFvQixFQUNwQkMsc0JBQXNCLEVBQ3RCQyxXQUFXLEVBQ1hDLG9CQUFvQixFQUNwQkMsc0JBQXNCLEVBQ3RCQyxXQUFXLEVBQ1hDLHFCQUFxQixFQUNyQkMseUJBQXlCLEVBQ3pCQyxpQkFBaUIsRUFDakJDLG9CQUFvQixFQUNwQkMsZ0JBQWdCLEVBQ2hCQyxxQkFBcUIsRUFDckJDLGdCQUFnQixFQUNoQkMsb0JBQW9CLEVBQ3BCQywyQkFBMkIsRUFDM0JDLFNBQVMsRUFDVEMsUUFBUSxFQUNSQyxhQUFhLEVBQ2JDLFVBQVUsRUFDVkMsZUFBZSxFQUNmQyx3QkFBd0IsRUFDeEJDLEdBQUcsRUFDSEMsZ0JBQWdCLEVBQ2hCQyxnQkFBZ0IsRUFDaEJDLGlCQUFpQixFQUNqQkMsWUFBWSxFQUNaQyxvQkFBb0IsUUFDZixrQkFBa0I7QUFDekIsU0FBUUMsY0FBYyxFQUFFQyxPQUFPLEVBQUVDLFNBQVMsUUFBTyx5QkFBeUI7QUFDMUU7QUFDQSxTQUNFQyxnQkFBZ0IsRUFDaEJDLFVBQVUsRUFDVkMsYUFBYSxFQUNiQyxrQkFBa0IsRUFDbEJDLFlBQVksRUFDWkMsWUFBWSxFQUNaQyxpQkFBaUIsRUFDakJDLEdBQUcsRUFDSEMsdUJBQXVCLEVBQ3ZCQyxpQkFBaUIsRUFDakJDLGdCQUFnQixFQUNoQkMsb0JBQW9CLEVBQ3BCQyxVQUFVLEVBQ1ZDLFVBQVUsRUFDVkMsbUJBQW1CLEVBQ25CQyxjQUFjLEVBQ2RDLFdBQVcsRUFDWEMsdUJBQXVCLEVBQ3ZCQyx3QkFBd0IsRUFDeEJDLDZCQUE2QixFQUM3QkMsNkJBQTZCLEVBQzdCQyw4QkFBOEIsRUFDOUJDLDZCQUE2QixFQUM3QkMsNkJBQTZCLEVBQzdCQyxjQUFjLFFBQ1Qsc0JBQXNCO0FBQzdCLFNBQVFDLGVBQWUsRUFBRUMsS0FBSyxFQUFFQyxZQUFZLFFBQU8sbUJBQW1CO0FBQ3RFLFNBQ0VDLE1BQU0sRUFDTkMsUUFBUSxFQUNSQyxhQUFhLEVBQ2JDLE1BQU0sRUFDTkMsUUFBUSxFQUNSQyxLQUFLLEVBQ0xDLG9CQUFvQixFQUNwQkMsS0FBSyxRQUNBLG9CQUFvQjtBQUMzQixTQUFRQyxhQUFhLEVBQUVDLHFCQUFxQixRQUFPLGtCQUFrQjtBQUNyRSxTQUNFQyxpQkFBaUIsRUFDakJDLHFCQUFxQixFQUNyQkMsZ0JBQWdCLEVBQ2hCQyxlQUFlLEVBQ2ZDLGNBQWMsRUFDZEMsaUJBQWlCLEVBQ2pCQyxxQkFBcUIsUUFDaEIsb0JBQW9CO0FBRTNCLE9BQU9DLGNBQWMsTUFBNkMsb0JBQW9CO0FBZ0J0RixTQUVFQyxnQkFBZ0IsRUFDaEJDLGtCQUFrQixFQUNsQkMsa0JBQWtCLEVBQ2xCQyxlQUFlLEVBQ2ZDLGdCQUFnQixFQUNoQkMsbUJBQW1CLFFBQ2Qsa0JBQWtCO0FBQ3pCLFNBQVFDLGdCQUFnQixRQUFPLHFCQUFxQjtBQUNwRCxTQUNFQyxrQkFBa0IsRUFDbEJDLGdCQUFnQixFQUNoQkMsdUJBQXVCLEVBQ3ZCQyxpQ0FBaUMsRUFDakNDLGdCQUFnQixFQUNoQkMsMkJBQTJCLEVBQzNCQywyQkFBMkIsRUFDM0JDLDJCQUEyQixFQUMzQkMsdUJBQXVCLEVBQ3ZCQyx3QkFBd0IsRUFDeEJDLDRCQUE0QixFQUM1QkMsaUJBQWlCLEVBQ2pCQyw2QkFBNkIsUUFDeEIsZUFBZTtBQUN0QixTQUFRQyxvQkFBb0IsRUFBRUMsZUFBZSxRQUFPLGtCQUFrQjtBQUN0RSxTQUFRQyxvQkFBb0IsUUFBTyxvQkFBb0I7QUFDdkQsU0FDRUMsY0FBYyxFQUNkQywwQkFBMEIsRUFDMUJDLCtCQUErQixFQUMvQkMsZ0JBQWdCLEVBQ2hCQyw0QkFBNEIsRUFDNUJDLHdCQUF3QixFQUN4QkMsb0JBQW9CLEVBQ3BCQyx5QkFBeUIsRUFDekJDLHNCQUFzQixFQUN0QkMsaUJBQWlCLEVBQ2pCQyw4QkFBOEIsUUFDekIsa0JBQWtCO0FBQ3pCLFNBQVFDLFlBQVksUUFBTyxvQkFBb0I7QUFHL0MsU0FBUUMsYUFBYSxRQUFPLGNBQWM7O0FBRTFDO0FBQ0E7QUFDQXhJLHFCQUFxQixDQUFDLENBQUM7O0FBRXZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFNeUksZ0JBQWdCLEdBQUcsSUFBSTtBQUM3Qjs7QUFFQSxPQUFPLElBQU1DLHdCQUEyQyxHQUFHO0VBQ3pEQyxPQUFPLEVBQUU7SUFDUEMsRUFBRSxFQUFFLFNBQVM7SUFDYkMsS0FBSyxFQUFFLHNCQUFzQjtJQUM3QkMsT0FBTyxFQUFFLElBQUk7SUFDYkMsTUFBTSxFQUFFO01BQ05DLFlBQVksRUFBRSxDQUFDLENBQUM7TUFDaEJDLFdBQVcsRUFBRSxLQUFLO01BQ2xCQyxXQUFXLEVBQUV6RixhQUFhLENBQUMwRjtJQUM3QjtFQUNGLENBQUM7RUFDREMsUUFBUSxFQUFFO0lBQ1JSLEVBQUUsRUFBRSxVQUFVO0lBQ2RDLEtBQUssRUFBRSx1QkFBdUI7SUFDOUJDLE9BQU8sRUFBRSxLQUFLO0lBQ2RPLFFBQVEsRUFBRSxJQUFJO0lBQ2ROLE1BQU0sRUFBRTtNQUNOTyxXQUFXLEVBQUU7SUFDZjtFQUNGLENBQUM7RUFDREMsS0FBSyxFQUFFO0lBQ0xYLEVBQUUsRUFBRSxPQUFPO0lBQ1hDLEtBQUssRUFBRSxvQkFBb0I7SUFDM0JDLE9BQU8sRUFBRSxLQUFLO0lBQ2RDLE1BQU0sRUFBRTtNQUNOO01BQ0FTLElBQUksRUFBRTtJQUNSO0VBQ0YsQ0FBQztFQUNEQyxVQUFVLEVBQUU7SUFDVmIsRUFBRSxFQUFFLFlBQVk7SUFDaEJDLEtBQUssRUFBRSx5QkFBeUI7SUFDaENDLE9BQU8sRUFBRSxLQUFLO0lBQ2RPLFFBQVEsRUFBRTtFQUNaO0FBQ0YsQ0FBQztBQUVELE9BQU8sSUFBTUssd0JBQXlDLEdBQUc7RUFDdkRDLE1BQU0sRUFBRSxJQUFJO0VBQ1pDLFdBQVcsRUFBRSxJQUFJO0VBQ2pCQyxLQUFLLEVBQUUsQ0FBQztFQUNSQyxXQUFXLEVBQUUsS0FBSztFQUNsQkMsU0FBUyxFQUFFLElBQUk7RUFDZkMsVUFBVSxFQUFFLElBQUk7RUFDaEJDLFFBQVEsRUFBRSxJQUFJO0VBQ2RDLGlCQUFpQixFQUFFLElBQUk7RUFDdkJDLFdBQVcsRUFBRSxLQUFLO0VBQ2xCQyxRQUFRLEVBQUU7QUFDWixDQUFDO0FBRUQsT0FBTyxJQUFNQyxjQUFzQixHQUFHO0VBQ3BDQyxJQUFJLEVBQUUzRyxZQUFZLENBQUM0RyxZQUFZO0VBQy9CQyxRQUFRLEVBQUUsRUFBRTtFQUNaQyxlQUFlLEVBQUUsSUFBSTtFQUNyQkMsT0FBTyxFQUFFO0FBQ1gsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU1DLGlCQUEyQixHQUFHO0VBQ3pDO0VBQ0FDLE9BQU8sRUFBRTtJQUNQQyxLQUFLLEVBQUUsRUFBRTtJQUNUQyxXQUFXLEVBQUU7RUFDZixDQUFDO0VBQ0Q7RUFDQUMsTUFBTSxFQUFFLEVBQUU7RUFDVkMsU0FBUyxFQUFFLEVBQUU7RUFDYkMsZUFBZSxFQUFFLEVBQUU7RUFDbkJDLFVBQVUsRUFBRSxFQUFFO0VBQ2RDLG9CQUFvQixFQUFFLElBQUk7RUFFMUI7RUFDQUMsT0FBTyxFQUFFLEVBQUU7RUFDWEMsZ0JBQWdCLEVBQUUsRUFBRTtFQUVwQjtFQUNBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0VBQ1pDLGNBQWMsRUFBRUMsU0FBUztFQUV6QjtFQUNBQyxPQUFPLEVBQUUsRUFBRTtFQUNYQyxXQUFXLEVBQUUsRUFBRTtFQUVmO0VBQ0FDLFdBQVcsRUFBRSxFQUFFO0VBQ2ZDLHFCQUFxQixFQUFFLEVBQUU7RUFDekJDLG9CQUFvQixFQUFFLElBQUk7RUFDMUJDLHVCQUF1QixFQUFFLEtBQUs7RUFFOUJDLGlCQUFpQixFQUFFckQsd0JBQXdCO0VBQzNDc0QscUJBQXFCLEVBQUUsQ0FBQyxDQUFDO0VBRXpCQyxhQUFhLEVBQUUsUUFBUTtFQUN2QkMsZUFBZSxFQUFFLFFBQVE7RUFDekJDLFNBQVMsRUFBRVgsU0FBUztFQUNwQlksT0FBTyxFQUFFWixTQUFTO0VBQ2xCYSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0VBQ1pDLGtCQUFrQixFQUFFcEksb0JBQW9CO0VBRXhDO0VBQ0FxSSxTQUFTLEVBQUU7SUFDVDtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtFQUFBLENBQ0Q7RUFDREMsbUJBQW1CLEVBQUUsRUFBRTtFQUN2QkMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO0VBQ3JCO0VBQ0FDLFlBQVksRUFBRXhILFlBQVk7RUFFMUI7RUFDQTtFQUNBeUgsZUFBZSxFQUFFakQsd0JBQXdCO0VBRXpDa0QsTUFBTSxFQUFFdkMsY0FBYztFQUV0QndDLFdBQVcsRUFBRSxLQUFLO0VBQ2xCQyxtQkFBbUIsRUFBRSxDQUFDLENBQUM7RUFDdkI7RUFDQUMscUJBQXFCLEVBQUUsQ0FBQztFQUV4QkMsT0FBTyxFQUFFLEVBQUU7RUFDWEMsV0FBVyxFQUFFLENBQUMsQ0FBQztFQUVmO0VBQ0FDLE9BQU8sRUFBRXJILGlCQUFpQjtFQUUxQjtFQUNBc0gsTUFBTSxFQUFFL0c7QUFDVixDQUFDO0FBRUQsT0FBTyxJQUFNZ0gsc0JBQXNCLEdBQUdyTixJQUFJLENBQUNzTixZQUFZLENBQ3JELFVBQUNDLENBQUMsRUFBRUMsRUFBRTtFQUFBLE9BQUtBLEVBQUUsQ0FBQyxDQUFDO0FBQUEsR0FFZix3QkFDRixDQUFDO0FBRUQsT0FBTyxJQUFNQyw0QkFBNEIsR0FBR3pOLElBQUksQ0FBQ3NOLFlBQVksQ0FDM0QsVUFBQ0MsQ0FBQyxFQUFFQyxFQUFFO0VBQUEsT0FBS0EsRUFBRSxDQUFDLENBQUM7QUFBQSxHQUVmLDhCQUNGLENBQUM7QUFPRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU0UsMkJBQTJCQSxDQUN6Q0MsS0FBUSxFQUFBQyxJQUFBLEVBRUw7RUFBQSxJQURGM0MsU0FBUyxHQUFBMkMsSUFBQSxDQUFUM0MsU0FBUztJQUFFNEMsS0FBSyxHQUFBRCxJQUFBLENBQUxDLEtBQUs7SUFBRUMsR0FBRyxHQUFBRixJQUFBLENBQUhFLEdBQUc7RUFFdEIsT0FBQUMsYUFBQSxDQUFBQSxhQUFBLEtBQ0tKLEtBQUs7SUFDUjNDLE1BQU0sRUFBRTJDLEtBQUssQ0FBQzNDLE1BQU0sQ0FBQ2dELEdBQUcsQ0FBQyxVQUFDQyxHQUFHLEVBQUVDLENBQUM7TUFBQSxPQUFNQSxDQUFDLEtBQUtKLEdBQUcsR0FBR0QsS0FBSyxHQUFHSSxHQUFHO0lBQUEsQ0FBQyxDQUFDO0lBQy9EaEQsU0FBUyxFQUFFQSxTQUFTLEdBQ2hCMEMsS0FBSyxDQUFDMUMsU0FBUyxDQUFDK0MsR0FBRyxDQUFDLFVBQUNHLENBQUMsRUFBRUQsQ0FBQztNQUFBLE9BQU1BLENBQUMsS0FBS0osR0FBRyxHQUFHN0MsU0FBUyxHQUFHa0QsQ0FBQztJQUFBLENBQUMsQ0FBQyxHQUMxRFIsS0FBSyxDQUFDMUM7RUFBUztBQUV2QjtBQUVBLE9BQU8sU0FBU21ELGtDQUFrQ0EsQ0FBcUJULEtBQVEsRUFBRUUsS0FBWSxFQUFLO0VBQ2hHLElBQUlRLFFBQVEsR0FBR1YsS0FBSztFQUNwQixJQUFJQSxLQUFLLENBQUNuQixTQUFTLENBQUM4QixNQUFNLEVBQUU7SUFDMUJELFFBQVEsR0FBQU4sYUFBQSxDQUFBQSxhQUFBLEtBQ0hKLEtBQUs7TUFDUm5CLFNBQVMsRUFBRXFCLEtBQUssQ0FBQzdFLE1BQU0sQ0FBQ3VGLFNBQVMsR0FDN0I1TSxzQkFBc0IsQ0FBQ2dNLEtBQUssQ0FBQ25CLFNBQVMsRUFBRXFCLEtBQUssQ0FBQyxHQUM5Qy9LLHdCQUF3QixDQUFDNkssS0FBSyxDQUFDbkIsU0FBUyxFQUFFcUIsS0FBSztJQUFDLEVBQ3JEO0VBQ0g7RUFFQSxJQUFJQSxLQUFLLENBQUM3RSxNQUFNLENBQUN3RixTQUFTLENBQUN6RixPQUFPLEVBQUU7SUFDbENzRixRQUFRLEdBQUdJLHFCQUFxQixDQUFDSixRQUFRLENBQUM7RUFDNUM7RUFFQSxPQUFPQSxRQUFRO0FBQ2pCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0ssZ0JBQWdCQSxDQUFJQyxJQUFPLEVBQUVDLElBQU8sRUFBYztFQUN6RCxJQUFNQyxZQUF3QixHQUFHLENBQUMsQ0FBQztFQUNuQyxJQUFNQyxXQUFXLEdBQUcsU0FBZEEsV0FBV0EsQ0FBR0MsR0FBRyxFQUFJO0lBQ3pCQyxNQUFNLENBQUNDLElBQUksQ0FBQ0YsR0FBRyxDQUFDLENBQUNHLE9BQU8sQ0FBQyxVQUFBQyxHQUFHLEVBQUk7TUFDOUIsSUFDRSxDQUFDSCxNQUFNLENBQUNJLFNBQVMsQ0FBQ0MsY0FBYyxDQUFDQyxJQUFJLENBQUNULFlBQVksRUFBRU0sR0FBRyxDQUFDLElBQ3hELENBQUN2UCxPQUFPLENBQUMrTyxJQUFJLENBQUNRLEdBQUcsQ0FBQyxFQUFFUCxJQUFJLENBQUNPLEdBQUcsQ0FBQyxDQUFDLEVBQzlCO1FBQ0FOLFlBQVksQ0FBQ00sR0FBRyxDQUFDLEdBQUdQLElBQUksQ0FBQ08sR0FBRyxDQUFDO01BQy9CO0lBQ0YsQ0FBQyxDQUFDO0VBQ0osQ0FBQztFQUNETCxXQUFXLENBQUNILElBQUksQ0FBQztFQUNqQkcsV0FBVyxDQUFDRixJQUFJLENBQUM7RUFDakIsT0FBT0MsWUFBWTtBQUNyQjtBQUVBLElBQU1VLHlCQUF5QixHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsYUFBYSxDQUFDOztBQUU3RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNDLHVCQUF1QkEsQ0FDckM3QixLQUFlLEVBQ2Y4QixNQUFxRCxFQUMzQztFQUFBLElBQUFDLGVBQUE7RUFDVixJQUFPQyxVQUFVLEdBQWdDRixNQUFNLENBQWhERSxVQUFVO0lBQUVDLGNBQWMsR0FBZ0JILE1BQU0sQ0FBcENHLGNBQWM7SUFBRUMsVUFBVSxHQUFJSixNQUFNLENBQXBCSSxVQUFVO0VBQzdDLElBQU1DLGNBQWM7RUFDbEI7RUFDQTlKLGdCQUFnQixDQUFDMkgsS0FBSyxDQUFDUCxNQUFNLEVBQUV3QyxjQUFjLENBQUM7RUFDaEQsSUFBTUcsUUFBUSxHQUFHcEMsS0FBSyxDQUFDM0MsTUFBTSxDQUFDZ0YsSUFBSSxDQUFDLFVBQUFDLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUNwSCxFQUFFLEtBQUs4RyxVQUFVO0VBQUEsRUFBQztFQUM1RCxJQUFJLENBQUNJLFFBQVEsSUFBSSxDQUFDRCxjQUFjLEVBQUU7SUFDaEMsT0FBT25DLEtBQUs7RUFDZDtFQUNBLElBQUlrQyxVQUFVLEtBQUssSUFBSSxJQUFJQSxVQUFVLEtBQUtwRSxTQUFTLElBQUlrQyxLQUFLLENBQUMzQyxNQUFNLENBQUM2RSxVQUFVLENBQUMsS0FBS0UsUUFBUSxFQUFFO0lBQzVGO0lBQ0EsT0FBT3BDLEtBQUs7RUFDZDtFQUNBLElBQU11QyxPQUFPLEdBQUd2QyxLQUFLLENBQUNwQyxRQUFRLENBQUN1RSxjQUFjLENBQUM5RyxNQUFNLENBQUNtSCxNQUFNLENBQUM7RUFDNUQsSUFBSSxDQUFDRCxPQUFPLEVBQUU7SUFDWixPQUFPdkMsS0FBSztFQUNkO0VBQ0E7RUFDQSxJQUFNeUMsUUFBUSxHQUFHaEsscUJBQXFCLENBQUM4SixPQUFPLEVBQUVKLGNBQWMsRUFBRW5DLEtBQUssQ0FBQ2hCLFlBQVksQ0FBQztFQUNuRixJQUFJLENBQUN5RCxRQUFRLEVBQUU7SUFDYixPQUFPekMsS0FBSztFQUNkO0VBRUEsSUFBSTBDLFNBQVMsR0FBRzFDLEtBQUs7RUFFckIsSUFBSXlDLFFBQVEsQ0FBQ0UsSUFBSSxJQUFJRixRQUFRLENBQUNFLElBQUksS0FBS1AsUUFBUSxDQUFDTyxJQUFJLEVBQUU7SUFDcEQsSUFBTUMsYUFBYSxHQUFHNUMsS0FBSyxDQUFDM0MsTUFBTSxDQUFDd0YsU0FBUyxDQUFDLFVBQUFQLENBQUM7TUFBQSxPQUFJQSxDQUFDLENBQUNwSCxFQUFFLEtBQUs4RyxVQUFVO0lBQUEsRUFBQztJQUN0RSxJQUFJWSxhQUFhLElBQUksQ0FBQyxFQUFFO01BQ3RCRixTQUFTLEdBQUdJLHNCQUFzQixDQUFDSixTQUFTLEVBQUV6UCxlQUFlLENBQUNtUCxRQUFRLEVBQUVLLFFBQVEsQ0FBQ0UsSUFBSSxDQUFDLENBQUM7TUFDdkY7TUFDQTtNQUNBLElBQUlELFNBQVMsQ0FBQ3JGLE1BQU0sQ0FBQ3NELE1BQU0sS0FBS1gsS0FBSyxDQUFDM0MsTUFBTSxDQUFDc0QsTUFBTSxFQUFFO1FBQ25ELElBQU1vQyxVQUFVLEdBQUdMLFNBQVMsQ0FBQ3JGLE1BQU0sQ0FBQ3VGLGFBQWEsQ0FBQyxDQUFDMUgsRUFBRTtRQUNyRHdILFNBQVMsR0FBR2IsdUJBQXVCLENBQ2pDYSxTQUFTLEVBQ1Q1UCxnQkFBZ0IsQ0FBQ2lRLFVBQVUsRUFBQTNDLGFBQUEsQ0FBQUEsYUFBQSxLQUFNNkIsY0FBYztVQUFFL0csRUFBRSxFQUFFNkg7UUFBVSxFQUFDLENBQ2xFLENBQUM7TUFDSDtJQUNGO0lBQ0EsT0FBT0wsU0FBUztFQUNsQjs7RUFFQTtFQUNBO0VBQ0EsSUFBTU0sa0JBQWtCLElBQUFqQixlQUFBLEdBQUd4SixjQUFjLENBQUM2SixRQUFRLEVBQUVwQyxLQUFLLENBQUNQLE1BQU0sQ0FBQyxjQUFBc0MsZUFBQSxjQUFBQSxlQUFBLEdBQUk7SUFBQzFHLE1BQU0sRUFBRSxDQUFDO0VBQUMsQ0FBQztFQUNqRixJQUFNNEgsa0JBQWtCLEdBQUcxSyxjQUFjLENBQUNrSyxRQUFRLEVBQUV6QyxLQUFLLENBQUNQLE1BQU0sQ0FBQztFQUNqRSxJQUFJLENBQUN3RCxrQkFBa0IsRUFBRTtJQUN2QixPQUFPakQsS0FBSztFQUNkO0VBQ0EsSUFBSSxDQUFDL04sT0FBTyxDQUFDK1Esa0JBQWtCLEVBQUVDLGtCQUFrQixDQUFDLEVBQUU7SUFDcEQsSUFBTUMsT0FBTyxHQUFHbkMsZ0JBQWdCLENBQUNpQyxrQkFBa0IsQ0FBQzNILE1BQU0sRUFBRTRILGtCQUFrQixDQUFDNUgsTUFBTSxDQUFDO0lBRXRGLElBQUksV0FBVyxJQUFJNkgsT0FBTyxFQUFFO01BQzFCLElBQUlBLE9BQU8sQ0FBQ0MsU0FBUyxFQUFFO1FBQ3JCVCxTQUFTLEdBQUdVLDJCQUEyQixDQUNyQ1YsU0FBUyxFQUNUeFAsb0JBQW9CLENBQUNrUCxRQUFRLEVBQUVjLE9BQU8sQ0FBQ0MsU0FBUyxDQUNsRCxDQUFDO01BQ0g7TUFDQSxPQUFPRCxPQUFPLENBQUNDLFNBQVM7SUFDMUI7SUFFQTlCLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDYyxRQUFRLENBQUNpQixjQUFjLENBQUMsQ0FBQzlCLE9BQU8sQ0FBQyxVQUFBK0IsV0FBVyxFQUFJO01BQzFELElBQU1DLE9BQU8sR0FBR25CLFFBQVEsQ0FBQ2lCLGNBQWMsQ0FBQ0MsV0FBVyxDQUFDO01BQ3BELElBQU1FLGdCQUFnQixHQUFHNUIseUJBQXlCLENBQUN2QixHQUFHLENBQUMsVUFBQW9ELElBQUk7UUFBQSxPQUFJRixPQUFPLENBQUNFLElBQUksQ0FBQztNQUFBLEVBQUM7TUFDN0UsSUFBSUQsZ0JBQWdCLENBQUNFLElBQUksQ0FBQyxVQUFBRCxJQUFJO1FBQUEsT0FBSUEsSUFBSSxJQUFJUCxPQUFPO01BQUEsRUFBQyxFQUFFO1FBQ2xEUixTQUFTLEdBQUdpQiwrQkFBK0IsQ0FDekNqQixTQUFTLEVBQ1R2UCw4QkFBOEIsQ0FDNUJpUCxRQUFRLEVBQ1JsUSxJQUFJLENBQUN1USxRQUFRLENBQUNwSCxNQUFNLEVBQUVtSSxnQkFBZ0IsQ0FBQyxFQUN2Q0YsV0FDRixDQUNGLENBQUM7UUFBQyxJQUFBTSxTQUFBLEdBQUFDLDBCQUFBLENBQ2lCTCxnQkFBZ0I7VUFBQU0sS0FBQTtRQUFBO1VBQW5DLEtBQUFGLFNBQUEsQ0FBQUcsQ0FBQSxNQUFBRCxLQUFBLEdBQUFGLFNBQUEsQ0FBQUksQ0FBQSxJQUFBQyxJQUFBLEdBQXFDO1lBQUEsSUFBMUJSLElBQUksR0FBQUssS0FBQSxDQUFBSSxLQUFBO1lBQ2IsT0FBT2hCLE9BQU8sQ0FBQ08sSUFBSSxDQUFDO1VBQ3RCO1FBQUMsU0FBQVUsR0FBQTtVQUFBUCxTQUFBLENBQUFRLENBQUEsQ0FBQUQsR0FBQTtRQUFBO1VBQUFQLFNBQUEsQ0FBQVMsQ0FBQTtRQUFBO01BQ0g7SUFDRixDQUFDLENBQUM7SUFFRixJQUFJaEQsTUFBTSxDQUFDQyxJQUFJLENBQUM0QixPQUFPLENBQUMsQ0FBQ3ZDLE1BQU0sR0FBRyxDQUFDLEVBQUU7TUFDbkMrQixTQUFTLEdBQUc0Qix3QkFBd0IsQ0FDbEM1QixTQUFTLEVBQ1QxUCxpQkFBaUIsQ0FBQ29QLFFBQVEsRUFBRWxRLElBQUksQ0FBQ3VRLFFBQVEsQ0FBQ3BILE1BQU0sRUFBRWdHLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDNEIsT0FBTyxDQUFDLENBQUMsQ0FDekUsQ0FBQztJQUNIO0VBQ0Y7RUFFQSxPQUFPUixTQUFTO0FBQ2xCO0FBRUEsU0FBUzZCLG9CQUFvQkEsQ0FBQ3ZFLEtBQWUsRUFBRXlDLFFBQWUsRUFBRTdCLFNBQW1CLEVBQVk7RUFDN0YsSUFBSUYsUUFBUSxHQUFHRCxrQ0FBa0MsQ0FBQ1QsS0FBSyxFQUFFeUMsUUFBUSxDQUFDO0VBQ2xFLElBQU0rQixXQUFXLEdBQUdDLHdCQUF3QixDQUFDekUsS0FBSyxDQUFDO0VBQ25ELElBQUl6SyxpQkFBaUIsQ0FBQ2tOLFFBQVEsQ0FBQyxJQUFJK0IsV0FBVyxLQUFLLENBQUMsQ0FBQyxFQUFFO0lBQ3JEO0lBQ0E5RCxRQUFRLEdBQUdnRSxzQ0FBc0MsQ0FBQ2hFLFFBQVEsRUFBRTtNQUMxRFAsR0FBRyxFQUFFcUUsV0FBVztNQUNoQkcsTUFBTSxFQUFFL0QsU0FBUyxHQUFHQSxTQUFTLEdBQUd6RywwQkFBMEIsQ0FBQzZGLEtBQUssQ0FBQzNDLE1BQU0sQ0FBQyxDQUFDc0QsTUFBTSxHQUFHO0lBQ3BGLENBQUMsQ0FBQztFQUNKO0VBQ0EsT0FBT0QsUUFBUTtBQUNqQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVM0RCx3QkFBd0JBLENBQ3RDdEUsS0FBZSxFQUNmOEIsTUFBc0QsRUFDNUM7RUFDVixJQUFPTSxRQUFRLEdBQUlOLE1BQU0sQ0FBbEJNLFFBQVE7RUFDZixJQUFNakMsR0FBRyxHQUFHSCxLQUFLLENBQUMzQyxNQUFNLENBQUN3RixTQUFTLENBQUMsVUFBQVAsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ3BILEVBQUUsS0FBS2tILFFBQVEsQ0FBQ2xILEVBQUU7RUFBQSxFQUFDO0VBQzdELElBQU0wSixLQUFLLEdBQUd2RCxNQUFNLENBQUNDLElBQUksQ0FBQ1EsTUFBTSxDQUFDK0MsU0FBUyxDQUFDO0VBQzNDLElBQ0UsT0FBTy9DLE1BQU0sQ0FBQytDLFNBQVMsQ0FBQ3JDLE1BQU0sS0FBSyxRQUFRLElBQzNDVixNQUFNLENBQUMrQyxTQUFTLENBQUNyQyxNQUFNLEtBQUtKLFFBQVEsQ0FBQy9HLE1BQU0sQ0FBQ21ILE1BQU0sRUFDbEQ7SUFDQSxJQUFBc0MsaUJBQUEsR0FBZ0NoRCxNQUFNLENBQUMrQyxTQUFTO01BQXpDckMsTUFBTSxHQUFBc0MsaUJBQUEsQ0FBTnRDLE1BQU07TUFBS3VDLFVBQVUsR0FBQUMsd0JBQUEsQ0FBQUYsaUJBQUEsRUFBQUcsU0FBQTtJQUM1QixJQUFNQyxlQUFlLEdBQUdDLHdCQUF3QixDQUFDbkYsS0FBSyxFQUFFO01BQ3REb0MsUUFBUSxFQUFSQSxRQUFRO01BQ1J5QyxTQUFTLEVBQUU7UUFBQ3JDLE1BQU0sRUFBTkE7TUFBTTtJQUNwQixDQUFDLENBQUM7SUFDRixJQUFNNEMsU0FBUyxHQUFHRixlQUFlLENBQUM3SCxNQUFNLENBQUNnRixJQUFJLENBQUMsVUFBQUMsQ0FBQztNQUFBLE9BQUlBLENBQUMsQ0FBQ3BILEVBQUUsS0FBS2tILFFBQVEsQ0FBQ2xILEVBQUU7SUFBQSxFQUFDO0lBQ3hFLE9BQU9rSyxTQUFTLElBQUkvRCxNQUFNLENBQUNDLElBQUksQ0FBQ3lELFVBQVUsQ0FBQyxDQUFDcEUsTUFBTSxHQUM5QzJELHdCQUF3QixDQUFDWSxlQUFlLEVBQUU7TUFBQzlDLFFBQVEsRUFBRWdELFNBQVM7TUFBRVAsU0FBUyxFQUFFRTtJQUFVLENBQUMsQ0FBQyxHQUN2RkcsZUFBZTtFQUNyQjtFQUVBLElBQUl6QyxRQUFRLEdBQUdMLFFBQVEsQ0FBQ2lELGlCQUFpQixDQUFDdkQsTUFBTSxDQUFDK0MsU0FBUyxDQUFDO0VBRTNELElBQUl2SCxTQUFTO0VBRWIsSUFBSW1GLFFBQVEsQ0FBQzZDLHdCQUF3QixDQUFDVixLQUFLLENBQUMsRUFBRTtJQUM1QyxJQUFNVyxZQUFZLEdBQUd2RixLQUFLLENBQUMxQyxTQUFTLENBQUM2QyxHQUFHLENBQUM7SUFFekMsSUFBTXFGLHFCQUFxQixHQUFHdE0sa0JBQWtCLENBQUN1SixRQUFRLEVBQUV6QyxLQUFLLEVBQUV1RixZQUFZLENBQUM7SUFDL0U5QyxRQUFRLEdBQUcrQyxxQkFBcUIsQ0FBQ3RGLEtBQUs7SUFDdEM1QyxTQUFTLEdBQUdrSSxxQkFBcUIsQ0FBQ2xJLFNBQVM7RUFDN0M7RUFFQSxJQUFJb0QsUUFBUSxHQUFHVixLQUFLO0VBQ3BCLElBQUksV0FBVyxJQUFJOEIsTUFBTSxDQUFDK0MsU0FBUyxFQUFFO0lBQ25DbkUsUUFBUSxHQUFHNkQsb0JBQW9CLENBQUM3RCxRQUFRLEVBQUUrQixRQUFRLEVBQUVYLE1BQU0sQ0FBQytDLFNBQVMsQ0FBQ2pFLFNBQVMsQ0FBQztFQUNqRjtFQUVBLElBQUksU0FBUyxJQUFJa0IsTUFBTSxDQUFDK0MsU0FBUyxJQUFJcEMsUUFBUSxDQUFDcEgsTUFBTSxDQUFDd0YsU0FBUyxDQUFDekYsT0FBTyxFQUFFO0lBQ3RFO0lBQ0FzRixRQUFRLEdBQUdJLHFCQUFxQixDQUFDSixRQUFRLENBQUM7RUFDNUM7RUFFQSxPQUFPWCwyQkFBMkIsQ0FBQ1csUUFBUSxFQUFFO0lBQzNDUixLQUFLLEVBQUV1QyxRQUFRO0lBQ2ZuRixTQUFTLEVBQVRBLFNBQVM7SUFDVDZDLEdBQUcsRUFBSEE7RUFDRixDQUFDLENBQUM7QUFDSjtBQUVBLE9BQU8sU0FBU3NGLDJCQUEyQkEsQ0FBcUJ6RixLQUFRLEVBQUU4QixNQUFNLEVBQUs7RUFDbkYsSUFBT00sUUFBUSxHQUFpQk4sTUFBTSxDQUEvQk0sUUFBUTtJQUFFcUIsSUFBSSxHQUFXM0IsTUFBTSxDQUFyQjJCLElBQUk7SUFBRVMsS0FBSyxHQUFJcEMsTUFBTSxDQUFmb0MsS0FBSztFQUM1QixJQUFNL0QsR0FBRyxHQUFHSCxLQUFLLENBQUMzQyxNQUFNLENBQUN3RixTQUFTLENBQUMsVUFBQVAsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ3BILEVBQUUsS0FBS2tILFFBQVEsQ0FBQ2xILEVBQUU7RUFBQSxFQUFDO0VBRTdELElBQU11SCxRQUFRLEdBQUdMLFFBQVEsQ0FBQ2lELGlCQUFpQixDQUFDO0lBQzFDeEUsU0FBUyxFQUFBVCxhQUFBLENBQUFBLGFBQUEsS0FDSmdDLFFBQVEsQ0FBQy9HLE1BQU0sQ0FBQ3dGLFNBQVMsT0FBQTZFLGVBQUEsS0FDM0JqQyxJQUFJLEVBQUdTLEtBQUs7RUFFakIsQ0FBQyxDQUFDO0VBRUYsSUFBQXlCLG1CQUFBLEdBQTJCek0sa0JBQWtCLENBQUN1SixRQUFRLEVBQUV6QyxLQUFLLEVBQUVBLEtBQUssQ0FBQzFDLFNBQVMsQ0FBQzZDLEdBQUcsQ0FBQyxDQUFDO0lBQTdFN0MsU0FBUyxHQUFBcUksbUJBQUEsQ0FBVHJJLFNBQVM7SUFBRTRDLEtBQUssR0FBQXlGLG1CQUFBLENBQUx6RixLQUFLO0VBRXZCLE9BQU9ILDJCQUEyQixDQUFDQyxLQUFLLEVBQUU7SUFBQzFDLFNBQVMsRUFBVEEsU0FBUztJQUFFNEMsS0FBSyxFQUFMQSxLQUFLO0lBQUVDLEdBQUcsRUFBSEE7RUFBRyxDQUFDLENBQUM7QUFDcEU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTeUYsNEJBQTRCQSxDQUMxQzVGLEtBQWUsRUFDZjhCLE1BQTBELEVBQ2hEO0VBQ1YsSUFBTytELE9BQU8sR0FBMkIvRCxNQUFNLENBQXhDK0QsT0FBTztJQUFFakYsU0FBUyxHQUFnQmtCLE1BQU0sQ0FBL0JsQixTQUFTO0lBQUVrRixVQUFVLEdBQUloRSxNQUFNLENBQXBCZ0UsVUFBVTtFQUNyQyxJQUFNNUYsS0FBSyxHQUFHRixLQUFLLENBQUMzQyxNQUFNLENBQUNnRixJQUFJLENBQUMsVUFBQTdCLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUN0RixFQUFFLEtBQUsySyxPQUFPO0VBQUEsRUFBQztFQUV0RCxJQUFJLENBQUMzRixLQUFLLEVBQUU7SUFDVixPQUFPRixLQUFLO0VBQ2Q7RUFFQSxJQUFJVSxRQUFRLEdBQUdWLEtBQUs7RUFFcEIsSUFBSThGLFVBQVUsRUFBRTtJQUNkO0lBQ0EsSUFBTUMsUUFBUSxHQUFHckYsUUFBUSxDQUFDN0IsU0FBUyxDQUFDZ0UsU0FBUyxDQUFDLFVBQUFtRCxFQUFFO01BQUEsT0FBSUEsRUFBRSxDQUFDOUssRUFBRSxLQUFLNEssVUFBVTtJQUFBLEVBQUM7SUFDekUsSUFBSWxGLFNBQVMsRUFBRTtNQUNiO01BQ0E7TUFDQUYsUUFBUSxHQUFHNEQsd0JBQXdCLENBQUM1RCxRQUFRLEVBQUUxTixpQkFBaUIsQ0FBQ2tOLEtBQUssRUFBRTtRQUFDVSxTQUFTLEVBQUU7TUFBSSxDQUFDLENBQUMsQ0FBQzs7TUFFMUY7TUFDQSxPQUFBUixhQUFBLENBQUFBLGFBQUEsS0FDS00sUUFBUTtRQUNYN0IsU0FBUyxFQUFFNkIsUUFBUSxDQUFDN0IsU0FBUyxDQUFDd0IsR0FBRyxDQUFDLFVBQUEyRixFQUFFO1VBQUEsT0FDbENBLEVBQUUsQ0FBQzlLLEVBQUUsS0FBSzRLLFVBQVUsR0FBQTFGLGFBQUEsQ0FBQUEsYUFBQSxLQUVYNEYsRUFBRTtZQUNMM0ksTUFBTSxFQUFBK0MsYUFBQSxDQUFBQSxhQUFBLEtBQ0Q0RixFQUFFLENBQUMzSSxNQUFNLE9BQUFxSSxlQUFBLEtBQ1hHLE9BQU8sRUFBRyxLQUFLO1VBQ2pCLEtBQUF6RixhQUFBLENBQUFBLGFBQUEsS0FHRTRGLEVBQUU7WUFDTDNJLE1BQU0sRUFBQStDLGFBQUEsQ0FBQUEsYUFBQSxLQUNENEYsRUFBRSxDQUFDM0ksTUFBTSxPQUFBcUksZUFBQSxLQUNYRyxPQUFPLEVBQUcsSUFBSTtVQUNoQixFQUNGO1FBQUEsQ0FDUDtNQUFDO0lBRUw7SUFDQTtJQUNBLE9BQU9JLHdCQUF3QixDQUFDdkYsUUFBUSxFQUFFN00saUJBQWlCLENBQUNrUyxRQUFRLEVBQUVGLE9BQU8sQ0FBQyxDQUFDO0VBQ2pGLENBQUMsTUFBTTtJQUNMO0lBQ0EsSUFBTXBELFFBQVEsR0FBR3ZDLEtBQUssQ0FBQ21GLGlCQUFpQixDQUFDO01BQUN6RSxTQUFTLEVBQVRBO0lBQVMsQ0FBQyxDQUFDO0lBQ3JELElBQU1ULEdBQUcsR0FBR08sUUFBUSxDQUFDckQsTUFBTSxDQUFDd0YsU0FBUyxDQUFDLFVBQUFQLENBQUM7TUFBQSxPQUFJQSxDQUFDLENBQUNwSCxFQUFFLEtBQUsySyxPQUFPO0lBQUEsRUFBQztJQUU1RG5GLFFBQVEsR0FBRzZELG9CQUFvQixDQUFDN0QsUUFBUSxFQUFFK0IsUUFBUSxFQUFFN0IsU0FBUyxDQUFDO0lBQzlELE9BQU9iLDJCQUEyQixDQUFDVyxRQUFRLEVBQUU7TUFDM0NSLEtBQUssRUFBRXVDLFFBQVE7TUFDZnRDLEdBQUcsRUFBSEE7SUFDRixDQUFDLENBQUM7RUFDSjtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTc0Usd0JBQXdCQSxDQUFDekUsS0FBZSxFQUFVO0VBQ3pELE9BQU9BLEtBQUssQ0FBQ3RDLE9BQU8sQ0FBQ21GLFNBQVMsQ0FBQyxVQUFBd0IsQ0FBQztJQUFBLE9BQUtBLENBQUMsQ0FBcUI2Qix1QkFBdUI7RUFBQSxFQUFDO0FBQ3JGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTQyxzQkFBc0JBLENBQ3BDbkcsS0FBZSxFQUNmOEIsTUFBb0QsRUFDMUM7RUFDVixJQUFPTSxRQUFRLEdBQWFOLE1BQU0sQ0FBM0JNLFFBQVE7SUFBRWdFLE9BQU8sR0FBSXRFLE1BQU0sQ0FBakJzRSxPQUFPO0VBRXhCLElBQU1qRyxHQUFHLEdBQUdILEtBQUssQ0FBQzNDLE1BQU0sQ0FBQ3dGLFNBQVMsQ0FBQyxVQUFBUCxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDcEgsRUFBRSxLQUFLa0gsUUFBUSxDQUFDbEgsRUFBRTtFQUFBLEVBQUM7RUFDN0QsSUFBTW1MLGFBQWEsR0FBR3JHLEtBQUssQ0FBQzNDLE1BQU0sQ0FBQzhDLEdBQUcsQ0FBQztFQUN2QyxJQUFJa0csYUFBYSxFQUFFO0lBQ2pCLElBQUk1RCxRQUFRO0lBQ1osSUFBSTZELE9BQU8sR0FBRyxJQUFJO0lBRWxCLElBQUlGLE9BQU8sRUFBRTtNQUNYO01BQ0EsSUFBQUcsb0JBQUEsR0FBMkJyTixrQkFBa0IsQ0FBQ21OLGFBQWEsRUFBRXJHLEtBQUssRUFBRWxDLFNBQVMsQ0FBQztRQUF2RW9DLEtBQUssR0FBQXFHLG9CQUFBLENBQUxyRyxLQUFLO1FBQUU1QyxTQUFTLEdBQUFpSixvQkFBQSxDQUFUakosU0FBUztNQUN2Qm1GLFFBQVEsR0FBR3ZDLEtBQUs7TUFDaEJvRyxPQUFPLEdBQUdoSixTQUFTO0lBQ3JCLENBQUMsTUFBTTtNQUNMbUYsUUFBUSxHQUFHNEQsYUFBYSxDQUFDaEIsaUJBQWlCLENBQUM7UUFDekN6RSxTQUFTLEVBQUU7TUFDYixDQUFDLENBQUM7TUFDRjZCLFFBQVEsQ0FBQzJELE9BQU8sR0FBRyxLQUFLO0lBQzFCO0lBRUEsT0FBT3JHLDJCQUEyQixDQUFDQyxLQUFLLEVBQUU7TUFBQ0csR0FBRyxFQUFIQSxHQUFHO01BQUVELEtBQUssRUFBRXVDLFFBQVE7TUFBRW5GLFNBQVMsRUFBRWdKO0lBQU8sQ0FBQyxDQUFDO0VBQ3ZGO0VBRUEsT0FBT3RHLEtBQUs7QUFDZDtBQUVBLFNBQVN3RyxxQkFBcUJBLENBQUNDLFNBQVMsRUFBRUMsU0FBUyxFQUF5QztFQUFBLElBQXZDQyxnQkFBZ0IsR0FBQUMsU0FBQSxDQUFBakcsTUFBQSxRQUFBaUcsU0FBQSxRQUFBOUksU0FBQSxHQUFBOEksU0FBQSxNQUFHNVEsa0JBQWtCO0VBQ3hGLElBQUk2USxZQUFZLEdBQUdILFNBQVMsQ0FBQ0ksS0FBSyxDQUFDLENBQUM7RUFFcEMsSUFBTUMsYUFBYSxHQUFHTCxTQUFTLENBQUNyRyxHQUFHLENBQUMsVUFBQTJHLEVBQUU7SUFBQSxPQUFJQSxFQUFFLENBQUNDLEtBQUssSUFBSUQsRUFBRSxDQUFDQyxLQUFLLENBQUNDLElBQUk7RUFBQSxFQUFDLENBQUNDLE1BQU0sQ0FBQyxVQUFBM0csQ0FBQztJQUFBLE9BQUlBLENBQUM7RUFBQSxFQUFDO0VBRW5GLElBQU00RyxTQUFTLEdBQUdYLFNBQVMsQ0FBQ1UsTUFBTSxDQUFDLFVBQUE5QyxDQUFDO0lBQUEsT0FBSSxDQUFDMEMsYUFBYSxDQUFDTSxRQUFRLENBQUNoRCxDQUFDLENBQUM2QyxJQUFJLENBQUM7RUFBQSxFQUFDO0VBQ3hFLElBQU1JLFlBQVksR0FBR1AsYUFBYSxDQUFDSSxNQUFNLENBQUMsVUFBQTlDLENBQUM7SUFBQSxPQUFJLENBQUNvQyxTQUFTLENBQUNwRSxJQUFJLENBQUMsVUFBQWtGLEVBQUU7TUFBQSxPQUFJQSxFQUFFLENBQUNMLElBQUksS0FBSzdDLENBQUM7SUFBQSxFQUFDO0VBQUEsRUFBQzs7RUFFcEY7RUFDQXdDLFlBQVksR0FBR0EsWUFBWSxDQUFDTSxNQUFNLENBQUMsVUFBQUgsRUFBRTtJQUFBLE9BQUlBLEVBQUUsQ0FBQ0MsS0FBSyxJQUFJLENBQUNLLFlBQVksQ0FBQ0QsUUFBUSxDQUFDTCxFQUFFLENBQUNDLEtBQUssQ0FBQ0MsSUFBSSxDQUFDO0VBQUEsRUFBQztFQUMzRkwsWUFBWSxHQUFHLENBQUNBLFlBQVksQ0FBQ2xHLE1BQU0sR0FBRyxDQUFDZ0csZ0JBQWdCLENBQUMsR0FBR0UsWUFBWTs7RUFFdkU7RUFDQUEsWUFBWSxNQUFBVyxNQUFBLENBQUFDLGtCQUFBLENBQ1BaLFlBQVksQ0FBQ00sTUFBTSxDQUFDLFVBQUFILEVBQUU7SUFBQSxPQUFJQSxFQUFFLENBQUNDLEtBQUs7RUFBQSxFQUFDLEdBQUFRLGtCQUFBLENBQ25DTCxTQUFTLENBQUMvRyxHQUFHLENBQUMsVUFBQXFILEVBQUU7SUFBQSxPQUFBdEgsYUFBQSxDQUFBQSxhQUFBLEtBQ2R1RyxnQkFBZ0I7TUFDbkJNLEtBQUssRUFBRVM7SUFBRTtFQUFBLENBQ1QsQ0FBQyxFQUNKO0VBRUQsT0FBT2IsWUFBWTtBQUNyQjtBQUVBLFNBQVNjLDJCQUEyQkEsQ0FBQ3hILEdBQUcsRUFBRXNELElBQUksRUFBRVMsS0FBSyxFQUFFd0MsU0FBUyxFQUFFO0VBQ2hFLElBQUksQ0FBQ3JGLE1BQU0sQ0FBQ0ksU0FBUyxDQUFDQyxjQUFjLENBQUNDLElBQUksQ0FBQytFLFNBQVMsQ0FBQ3ZHLEdBQUcsQ0FBQyxFQUFFc0QsSUFBSSxDQUFDLEVBQUU7SUFDL0QsT0FBT2lELFNBQVM7RUFDbEI7RUFFQSxJQUFJRyxZQUFZLEdBQUdILFNBQVMsQ0FBQ0ksS0FBSyxDQUFDLENBQUM7RUFFcEMsSUFBSXJELElBQUksS0FBSyxPQUFPLElBQUlTLEtBQUssS0FBSyxJQUFJLElBQUl3QyxTQUFTLENBQUMvRixNQUFNLEdBQUcsQ0FBQyxFQUFFO0lBQzlEO0lBQ0FrRyxZQUFZLENBQUNlLE1BQU0sQ0FBQ3pILEdBQUcsRUFBRSxDQUFDLENBQUM7RUFDN0IsQ0FBQyxNQUFNLElBQUlzRCxJQUFJLEVBQUU7SUFDZm9ELFlBQVksR0FBR0gsU0FBUyxDQUFDckcsR0FBRyxDQUFDLFVBQUMyRyxFQUFFLEVBQUV6RyxDQUFDO01BQUEsT0FBTUEsQ0FBQyxLQUFLSixHQUFHLEdBQUFDLGFBQUEsQ0FBQUEsYUFBQSxLQUFPNEcsRUFBRSxPQUFBdEIsZUFBQSxLQUFHakMsSUFBSSxFQUFHUyxLQUFLLEtBQUk4QyxFQUFFO0lBQUEsQ0FBQyxDQUFDO0VBQ3BGO0VBRUEsT0FBT0gsWUFBWTtBQUNyQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTZ0IsMkJBQTJCQSxDQUN6QzdILEtBQWUsRUFDZjhCLE1BQXlELEVBQy9DO0VBQUEsSUFBQWdHLHFCQUFBLEVBQUFDLHNCQUFBO0VBQ1YsSUFBTzNGLFFBQVEsR0FBc0JOLE1BQU0sQ0FBcENNLFFBQVE7SUFBRWpDLEdBQUcsR0FBaUIyQixNQUFNLENBQTFCM0IsR0FBRztJQUFFc0QsSUFBSSxHQUFXM0IsTUFBTSxDQUFyQjJCLElBQUk7SUFBRVMsS0FBSyxHQUFJcEMsTUFBTSxDQUFmb0MsS0FBSztFQUNqQyxJQUFPd0MsU0FBUyxHQUFJdEUsUUFBUSxDQUFDL0csTUFBTSxDQUE1QnFMLFNBQVM7O0VBRWhCO0VBQ0E7RUFDQSxJQUFNQyxnQkFBZ0IsSUFBQW1CLHFCQUFBLElBQUFDLHNCQUFBLEdBQ3BCM0YsUUFBUSxDQUFDNEYscUJBQXFCLENBQUM7SUFBQ3hGLE1BQU0sRUFBRTtFQUFFLENBQUMsQ0FBQyxjQUFBdUYsc0JBQUEsZ0JBQUFBLHNCQUFBLEdBQTVDQSxzQkFBQSxDQUE4Q3JCLFNBQVMsY0FBQXFCLHNCQUFBLHVCQUF2REEsc0JBQUEsQ0FBMEQsQ0FBQyxDQUFDLGNBQUFELHFCQUFBLGNBQUFBLHFCQUFBLEdBQUk5UixrQkFBa0I7RUFFcEYsSUFBSTZRLFlBQVksR0FBR0gsU0FBUyxDQUFDSSxLQUFLLENBQUMsQ0FBQztFQUNwQyxJQUFJLENBQUNKLFNBQVMsQ0FBQ3ZHLEdBQUcsQ0FBQyxJQUFJQSxHQUFHLEtBQUt1RyxTQUFTLENBQUMvRixNQUFNLEVBQUU7SUFDL0M7SUFDQWtHLFlBQVksTUFBQVcsTUFBQSxDQUFBQyxrQkFBQSxDQUFPZixTQUFTLElBQUVDLGdCQUFnQixFQUFDO0VBQ2pEO0VBRUEsSUFBSXhHLEdBQUcsS0FBSyxLQUFLLElBQUlzRCxJQUFJLEtBQUssUUFBUSxFQUFFO0lBQ3RDb0QsWUFBWSxHQUFHTCxxQkFBcUIsQ0FBQ3RDLEtBQUssRUFBRXdDLFNBQVMsRUFBRUMsZ0JBQWdCLENBQUM7RUFDMUUsQ0FBQyxNQUFNO0lBQ0xFLFlBQVksR0FBR2MsMkJBQTJCLENBQUN4SCxHQUFHLEVBQUVzRCxJQUFJLEVBQUVTLEtBQUssRUFBRTJDLFlBQVksQ0FBQztFQUM1RTtFQUNBO0VBQ0EsT0FBT3ZDLHdCQUF3QixDQUFDdEUsS0FBSyxFQUFFO0lBQ3JDb0MsUUFBUSxFQUFSQSxRQUFRO0lBQ1J5QyxTQUFTLEVBQUU7TUFBQzZCLFNBQVMsRUFBRUc7SUFBWTtFQUNyQyxDQUFDLENBQUM7QUFDSjtBQUVBLFNBQVNvQiw2QkFBNkJBLENBQUMxRixPQUFPLEVBQUV2RCxZQUFZLEVBQUVrQixLQUFLLEVBQUVULE1BQU0sRUFBRTtFQUMzRSxJQUFNeUksV0FBVyxHQUFHM1AsY0FBYyxDQUFDMkgsS0FBSyxFQUFFVCxNQUFNLENBQUM7RUFDakQsT0FBT3lJLFdBQVcsR0FDZHpQLHFCQUFxQixDQUFDOEosT0FBTyxFQUFFMkYsV0FBVyxFQUFFbEosWUFBWSxFQUFFO0lBQ3hEbUosZ0JBQWdCLEVBQUU7RUFDcEIsQ0FBQyxDQUFDLEdBQ0YsSUFBSTtBQUNWOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNoRCx3QkFBd0JBLENBQ3RDbkYsS0FBZSxFQUNmOEIsTUFLQyxFQUNTO0VBQ1YsSUFBT00sUUFBUSxHQUFlTixNQUFNLENBQTdCTSxRQUFRO0lBQUV5QyxTQUFTLEdBQUkvQyxNQUFNLENBQW5CK0MsU0FBUztFQUMxQixJQUFPckMsTUFBTSxHQUFJcUMsU0FBUyxDQUFuQnJDLE1BQU07RUFFYixJQUFJLENBQUNKLFFBQVEsSUFBSSxDQUFDcEMsS0FBSyxDQUFDcEMsUUFBUSxDQUFDNEUsTUFBTSxDQUFDLEVBQUU7SUFDeEMsT0FBT3hDLEtBQUs7RUFDZDtFQUNBLElBQU1HLEdBQUcsR0FBR0gsS0FBSyxDQUFDM0MsTUFBTSxDQUFDd0YsU0FBUyxDQUFDLFVBQUFQLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUNwSCxFQUFFLEtBQUtrSCxRQUFRLENBQUNsSCxFQUFFO0VBQUEsRUFBQztFQUU3RCxJQUFJdUgsUUFBUSxHQUFHTCxRQUFRLENBQUNpRCxpQkFBaUIsQ0FBQztJQUFDN0MsTUFBTSxFQUFOQTtFQUFNLENBQUMsQ0FBQzs7RUFFbkQ7RUFDQSxJQUFJQyxRQUFRLENBQUMyRixhQUFhLENBQUMsQ0FBQyxFQUFFO0lBQzVCLElBQU1DLFNBQVMsR0FBR0osNkJBQTZCLENBQzdDakksS0FBSyxDQUFDcEMsUUFBUSxDQUFDNEUsTUFBTSxDQUFDLEVBQ3RCeEMsS0FBSyxDQUFDaEIsWUFBWSxFQUNsQnlELFFBQVEsRUFDUnpDLEtBQUssQ0FBQ1AsTUFDUixDQUFDO0lBQ0Q7SUFDQSxJQUFJLENBQUM0SSxTQUFTLEVBQUU7TUFDZCxJQUFNQyxZQUFZLEdBQUdsRyxRQUFRLENBQUNPLElBQUk7TUFDbEMsSUFBSTJGLFlBQVksRUFBRTtRQUNoQjdGLFFBQVEsR0FBRyxJQUFJekMsS0FBSyxDQUFDaEIsWUFBWSxDQUFDc0osWUFBWSxDQUFDLENBQUM7VUFBQzlGLE1BQU0sRUFBTkEsTUFBTTtVQUFFdEgsRUFBRSxFQUFFa0gsUUFBUSxDQUFDbEg7UUFBRSxDQUFDLENBQUM7TUFDNUU7SUFDRixDQUFDLE1BQU07TUFDTHVILFFBQVEsR0FBRzRGLFNBQVM7SUFDdEI7RUFDRixDQUFDLE1BQU07SUFDTDtJQUNBO0lBQ0E7SUFDQSxJQUFNRSxnQkFBZ0IsR0FBR3ZJLEtBQUssQ0FBQ3BDLFFBQVEsQ0FBQzRFLE1BQU0sQ0FBQyxDQUFDZ0csTUFBTTtJQUN0RCxJQUFNQyxjQUFtQyxHQUFHLENBQUMsQ0FBQztJQUM5Q3BILE1BQU0sQ0FBQ3FILE1BQU0sQ0FBQ2pHLFFBQVEsQ0FBQ1ksY0FBYyxDQUFDLENBQUM5QixPQUFPLENBQUMsVUFBQW9ILEtBQUEsRUFBdUI7TUFBQSxJQUFkQyxRQUFRLEdBQUFELEtBQUEsQ0FBZjFCLEtBQUs7TUFDcEQsSUFBTTRCLFlBQVksR0FBR3BHLFFBQVEsQ0FBQ3BILE1BQU0sQ0FBQ3VOLFFBQVEsQ0FBQztNQUM5QyxJQUFJQyxZQUFZLEVBQUU7UUFDaEIsSUFBTUMsT0FBTyxHQUFHUCxnQkFBZ0IsQ0FBQ2xHLElBQUksQ0FBQyxVQUFBZ0MsQ0FBQztVQUFBLE9BQUlBLENBQUMsQ0FBQzZDLElBQUksS0FBSzJCLFlBQVksQ0FBQzNCLElBQUk7UUFBQSxFQUFDO1FBQ3hFdUIsY0FBYyxDQUFDRyxRQUFRLENBQUMsR0FBR0UsT0FBTyxJQUFJLElBQUk7TUFDNUM7SUFDRixDQUFDLENBQUM7SUFDRixJQUFJekgsTUFBTSxDQUFDQyxJQUFJLENBQUNtSCxjQUFjLENBQUMsQ0FBQzlILE1BQU0sRUFBRTtNQUN0QzhCLFFBQVEsR0FBR0EsUUFBUSxDQUFDNEMsaUJBQWlCLENBQUNvRCxjQUFjLENBQUM7SUFDdkQ7SUFDQTtJQUNBO0lBQ0FwSCxNQUFNLENBQUNxSCxNQUFNLENBQUNqRyxRQUFRLENBQUNZLGNBQWMsQ0FBQyxDQUFDOUIsT0FBTyxDQUFDLFVBQUF3SCxLQUFBLEVBQVc7TUFBQSxJQUFUdkgsR0FBRyxHQUFBdUgsS0FBQSxDQUFIdkgsR0FBRztNQUNsRGlCLFFBQVEsQ0FBQ3VHLHFCQUFxQixDQUFDeEgsR0FBRyxDQUFDO0lBQ3JDLENBQUMsQ0FBQztFQUNKO0VBRUFpQixRQUFRLEdBQUdBLFFBQVEsQ0FBQzRDLGlCQUFpQixDQUFDO0lBQ3BDekUsU0FBUyxFQUFFd0IsUUFBUSxDQUFDL0csTUFBTSxDQUFDdUYsU0FBUztJQUNwQ3FJLGNBQWMsRUFBRTtFQUNsQixDQUFDLENBQUM7RUFFRnhHLFFBQVEsQ0FBQ3lHLGlCQUFpQixDQUFDbEosS0FBSyxDQUFDcEMsUUFBUSxDQUFDO0VBQzFDLElBQUF1TCxvQkFBQSxHQUEyQmpRLGtCQUFrQixDQUFDdUosUUFBUSxFQUFFekMsS0FBSyxFQUFFbEMsU0FBUyxDQUFDO0lBQWxFUixTQUFTLEdBQUE2TCxvQkFBQSxDQUFUN0wsU0FBUztJQUFFNEMsS0FBSyxHQUFBaUosb0JBQUEsQ0FBTGpKLEtBQUs7RUFFdkIsT0FBT0gsMkJBQTJCLENBQUNDLEtBQUssRUFBRTtJQUFDMUMsU0FBUyxFQUFUQSxTQUFTO0lBQUU0QyxLQUFLLEVBQUxBLEtBQUs7SUFBRUMsR0FBRyxFQUFIQTtFQUFHLENBQUMsQ0FBQztBQUNwRTtBQUVBLE9BQU8sU0FBU2lKLHFCQUFxQkEsQ0FBQ2xKLEtBQUssRUFBRXRDLFFBQVEsRUFBRW9CLFlBQVksRUFBUztFQUMxRSxJQUFJeUQsUUFBUSxHQUFHdkMsS0FBSztFQUNwQixJQUFJLENBQUNtQixNQUFNLENBQUNDLElBQUksQ0FBQzFELFFBQVEsQ0FBQyxDQUFDK0MsTUFBTSxFQUFFO0lBQ2pDO0lBQ0EsT0FBT1QsS0FBSztFQUNkO0VBQ0EsSUFBSSxDQUFDQSxLQUFLLENBQUM3RSxNQUFNLENBQUNtSCxNQUFNLEVBQUU7SUFDeEI7SUFDQUMsUUFBUSxHQUFHdkMsS0FBSyxDQUFDbUYsaUJBQWlCLENBQUM7TUFBQzdDLE1BQU0sRUFBRW5CLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDMUQsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUFDLENBQUMsQ0FBQztFQUN4RTtFQUNBLElBQU0yRSxPQUFPLEdBQUczRSxRQUFRLENBQUM2RSxRQUFRLENBQUNwSCxNQUFNLENBQUNtSCxNQUFNLENBQUM7RUFDaEQsSUFBSSxDQUFDRCxPQUFPLEVBQUU7SUFDWixPQUFPckMsS0FBSztFQUNkOztFQUVBO0VBQ0EsSUFBTW1KLE1BQU0sR0FDVixPQUFPckssWUFBWSxDQUFDeUQsUUFBUSxDQUFDRSxJQUFJLENBQUMsQ0FBQzJHLHFCQUFxQixLQUFLLFVBQVUsR0FDbkV0SyxZQUFZLENBQUN5RCxRQUFRLENBQUNFLElBQUksQ0FBQyxDQUFDMkcscUJBQXFCLENBQUMvRyxPQUFPLEVBQUUsRUFBRSxDQUFDLEdBQzlEO0lBQUNxQyxLQUFLLEVBQUU7RUFBRSxDQUFDOztFQUVqQjtFQUNBLElBQU1BLEtBQUssR0FBRzJFLEtBQUssQ0FBQ0MsT0FBTyxDQUFDSCxNQUFNLENBQUMsR0FBR0EsTUFBTSxHQUFHQSxNQUFNLENBQUN6RSxLQUFLLElBQUksRUFBRTtFQUVqRSxJQUFJQSxLQUFLLENBQUNqRSxNQUFNLEVBQUU7SUFDaEI4QixRQUFRLEdBQUcsSUFBSXpELFlBQVksQ0FBQ2tCLEtBQUssQ0FBQ3lDLElBQUksQ0FBQyxDQUFBdkMsYUFBQSxDQUFBQSxhQUFBLEtBQ2xDd0UsS0FBSyxDQUFDLENBQUMsQ0FBQztNQUNYekosS0FBSyxFQUFFc0gsUUFBUSxDQUFDcEgsTUFBTSxDQUFDRixLQUFLO01BQzVCcUgsTUFBTSxFQUFFQyxRQUFRLENBQUNwSCxNQUFNLENBQUNtSCxNQUFNO01BQzlCeUcsY0FBYyxFQUFFeEcsUUFBUSxDQUFDcEgsTUFBTSxDQUFDNE4sY0FBYztNQUM5Q3JJLFNBQVMsRUFBRTZCLFFBQVEsQ0FBQ3BILE1BQU0sQ0FBQ3VGO0lBQVMsRUFDckMsQ0FBQztFQUNKO0VBQ0EsT0FBTyxPQUFPNkIsUUFBUSxDQUFDMkcscUJBQXFCLEtBQUssVUFBVSxHQUN2RDNHLFFBQVEsQ0FBQzJHLHFCQUFxQixDQUFDN0csT0FBTyxDQUFDLEdBQ3ZDRSxRQUFRO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTSyxzQkFBc0JBLENBQ3BDOUMsS0FBZSxFQUNmOEIsTUFBb0QsRUFDMUM7RUFDVixJQUFPTSxRQUFRLEdBQWFOLE1BQU0sQ0FBM0JNLFFBQVE7SUFBRXFILE9BQU8sR0FBSTNILE1BQU0sQ0FBakIySCxPQUFPO0VBQ3hCLElBQUksQ0FBQ3JILFFBQVEsRUFBRTtJQUNiLE9BQU9wQyxLQUFLO0VBQ2Q7RUFDQSxJQUFNMEosS0FBSyxHQUFHdEgsUUFBUSxDQUFDbEgsRUFBRTtFQUN6QixJQUFNaUYsR0FBRyxHQUFHSCxLQUFLLENBQUMzQyxNQUFNLENBQUN3RixTQUFTLENBQUMsVUFBQVAsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ3BILEVBQUUsS0FBS3dPLEtBQUs7RUFBQSxFQUFDO0VBRXZELElBQUksQ0FBQzFKLEtBQUssQ0FBQ2hCLFlBQVksQ0FBQ3lLLE9BQU8sQ0FBQyxFQUFFO0lBQ2hDM1gsT0FBTyxDQUFDNlgsS0FBSyxJQUFBbkMsTUFBQSxDQUFJaUMsT0FBTywrQkFBNEIsQ0FBQztJQUNyRCxPQUFPekosS0FBSztFQUNkO0VBQ0EsSUFBSXlDLFFBQVEsR0FBRyxJQUFJekMsS0FBSyxDQUFDaEIsWUFBWSxDQUFDeUssT0FBTyxDQUFDLENBQUM7SUFDN0M7SUFDQXRPLEtBQUssRUFBRWlILFFBQVEsQ0FBQy9HLE1BQU0sQ0FBQ0YsS0FBSztJQUM1QjhOLGNBQWMsRUFBRTdHLFFBQVEsQ0FBQy9HLE1BQU0sQ0FBQzROLGNBQWM7SUFDOUN6RyxNQUFNLEVBQUVKLFFBQVEsQ0FBQy9HLE1BQU0sQ0FBQ21IO0VBQzFCLENBQUMsQ0FBQztFQUVGLElBQUksQ0FBQ0osUUFBUSxDQUFDTyxJQUFJLEVBQUU7SUFDbEI7SUFDQUYsUUFBUSxHQUFHMkcscUJBQXFCLENBQUMzRyxRQUFRLEVBQUV6QyxLQUFLLENBQUNwQyxRQUFRLEVBQUVvQyxLQUFLLENBQUNoQixZQUFZLENBQUM7RUFDaEYsQ0FBQyxNQUFNO0lBQ0w7SUFDQTtJQUNBOztJQUVBLElBQU00SyxpQkFBaUIsR0FDckIsT0FBTzVKLEtBQUssQ0FBQ2hCLFlBQVksQ0FBQ3lLLE9BQU8sQ0FBQyxDQUFDSCxxQkFBcUIsS0FBSyxVQUFVLEdBQ25FdEosS0FBSyxDQUFDaEIsWUFBWSxDQUFDeUssT0FBTyxDQUFDLENBQUNILHFCQUFxQixDQUFDdEosS0FBSyxDQUFDcEMsUUFBUSxDQUFDNkUsUUFBUSxDQUFDcEgsTUFBTSxDQUFDbUgsTUFBTSxDQUFDLENBQUMsR0FDekYsSUFBSTtJQUVWQyxRQUFRLENBQUNvSCxtQkFBbUIsQ0FDMUJ6SCxRQUFRLENBQUMvRyxNQUFNLEVBQ2YrRyxRQUFRLENBQUMwSCxpQkFBaUIsRUFDMUI5SixLQUFLLENBQUNwQyxRQUFRLEVBQ2RnTSxpQkFDRixDQUFDO0lBQ0RuSCxRQUFRLENBQUN5RyxpQkFBaUIsQ0FBQ2xKLEtBQUssQ0FBQ3BDLFFBQVEsQ0FBQztFQUM1QztFQUVBLElBQU9jLE9BQU8sR0FBZXNCLEtBQUssQ0FBM0J0QixPQUFPO0lBQUVELFNBQVMsR0FBSXVCLEtBQUssQ0FBbEJ2QixTQUFTO0VBRXpCLElBQUlpQyxRQUFRLEdBQUFOLGFBQUEsQ0FBQUEsYUFBQSxLQUNQSixLQUFLO0lBQ1J0QixPQUFPLEVBQUUwRCxRQUFRLENBQUMySCxjQUFjLENBQUNyTCxPQUFPLENBQUMsR0FBR1osU0FBUyxHQUFHWSxPQUFPO0lBQy9ERCxTQUFTLEVBQUUyRCxRQUFRLENBQUMySCxjQUFjLENBQUN0TCxTQUFTLENBQUMsR0FBR1gsU0FBUyxHQUFHVztFQUFTLEVBQ3RFO0VBRUQsSUFBQXVMLG9CQUFBLEdBQTJCOVEsa0JBQWtCLENBQUN1SixRQUFRLEVBQUUvQixRQUFRLENBQUM7SUFBMURwRCxTQUFTLEdBQUEwTSxvQkFBQSxDQUFUMU0sU0FBUztJQUFFNEMsS0FBSyxHQUFBOEosb0JBQUEsQ0FBTDlKLEtBQUs7RUFDdkJRLFFBQVEsR0FBR1gsMkJBQTJCLENBQUNXLFFBQVEsRUFBRTtJQUFDcEQsU0FBUyxFQUFUQSxTQUFTO0lBQUU0QyxLQUFLLEVBQUxBLEtBQUs7SUFBRUMsR0FBRyxFQUFIQTtFQUFHLENBQUMsQ0FBQztFQUV6RSxJQUFJRCxLQUFLLENBQUM3RSxNQUFNLENBQUN3RixTQUFTLENBQUN6RixPQUFPLElBQUlnSCxRQUFRLENBQUMvRyxNQUFNLENBQUN3RixTQUFTLENBQUN6RixPQUFPLEVBQUU7SUFDdkVzRixRQUFRLEdBQUdJLHFCQUFxQixDQUFDSixRQUFRLENBQUM7RUFDNUM7O0VBRUE7RUFDQSxJQUFJVixLQUFLLENBQUNuQixTQUFTLENBQUM4QixNQUFNLEVBQUU7SUFDMUJELFFBQVEsR0FBQU4sYUFBQSxDQUFBQSxhQUFBLEtBQ0hNLFFBQVE7TUFDWDdCLFNBQVMsRUFBRTZCLFFBQVEsQ0FBQzdCLFNBQVMsQ0FBQ3dCLEdBQUcsQ0FBQyxVQUFBNEosUUFBUSxFQUFJO1FBQzVDLElBQUFDLGdCQUFBLEdBQStDRCxRQUFRLENBQUM1TSxNQUFNO1VBQTlDOE0sV0FBVyxHQUFBRCxnQkFBQSxDQUFuQlIsS0FBSztVQUFtQlUsV0FBVyxHQUFBcEYsd0JBQUEsQ0FBQWtGLGdCQUFBLEdBQW5DUixLQUFLLEVBQUFySixHQUFBLENBQUFnSyxjQUFBO1FBQ2IsT0FBT1gsS0FBSyxJQUFJTyxRQUFRLENBQUM1TSxNQUFNLEdBQUErQyxhQUFBLENBQUFBLGFBQUEsS0FFdEI2SixRQUFRO1VBQ1g1TSxNQUFNLEVBQUErQyxhQUFBLENBQUFBLGFBQUEsS0FDRGdLLFdBQVcsT0FBQTFFLGVBQUEsS0FDYnhGLEtBQUssQ0FBQ2hGLEVBQUUsRUFBR2lQLFdBQVc7UUFDeEIsS0FFSEYsUUFBUTtNQUNkLENBQUM7SUFBQyxFQUNIO0VBQ0g7O0VBRUE7RUFDQXZKLFFBQVEsR0FBQU4sYUFBQSxDQUFBQSxhQUFBLEtBQ0hNLFFBQVE7SUFDWGxELFVBQVUsRUFBRTFELDZCQUE2QixDQUFDNEcsUUFBUSxDQUFDbEQsVUFBVSxFQUFFNEUsUUFBUSxDQUFDbEgsRUFBRSxFQUFFdUgsUUFBUSxDQUFDdkgsRUFBRTtFQUFDLEVBQ3pGO0VBRUQsT0FBT3dGLFFBQVE7QUFDakI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTaUQsK0JBQStCQSxDQUM3QzNELEtBQWUsRUFDZjhCLE1BQW1FLEVBQ3pEO0VBQ1YsSUFBT00sUUFBUSxHQUFzQ04sTUFBTSxDQUFwRE0sUUFBUTtJQUFFeUMsU0FBUyxHQUEyQi9DLE1BQU0sQ0FBMUMrQyxTQUFTO0lBQUV5RixZQUFZLEdBQWF4SSxNQUFNLENBQS9Cd0ksWUFBWTtJQUFFL0csT0FBTyxHQUFJekIsTUFBTSxDQUFqQnlCLE9BQU87RUFDakQsSUFBSSxDQUFDbkIsUUFBUSxDQUFDL0csTUFBTSxDQUFDbUgsTUFBTSxFQUFFO0lBQzNCLE9BQU94QyxLQUFLO0VBQ2Q7RUFFQSxJQUFNdUMsT0FBTyxHQUFHdkMsS0FBSyxDQUFDcEMsUUFBUSxDQUFDd0UsUUFBUSxDQUFDL0csTUFBTSxDQUFDbUgsTUFBTSxDQUFDO0VBRXRELElBQU1yQyxHQUFHLEdBQUdILEtBQUssQ0FBQzNDLE1BQU0sQ0FBQ3dGLFNBQVMsQ0FBQyxVQUFBUCxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDcEgsRUFBRSxLQUFLa0gsUUFBUSxDQUFDbEgsRUFBRTtFQUFBLEVBQUM7RUFDN0QsSUFBSXVILFFBQVEsR0FBR0wsUUFBUSxDQUFDaUQsaUJBQWlCLENBQUNSLFNBQVMsQ0FBQztFQUNwRCxJQUFJeUYsWUFBWSxFQUFFN0gsUUFBUSxHQUFHQSxRQUFRLENBQUM4SCxvQkFBb0IsQ0FBQ0QsWUFBWSxDQUFDO0VBRXhFN0gsUUFBUSxDQUFDK0gsd0JBQXdCLENBQUNqSSxPQUFPLEVBQUVnQixPQUFPLENBQUM7O0VBRW5EO0VBQ0EsSUFBSWtILFlBQVksR0FBRzNKLHFCQUFxQixDQUFDZCxLQUFLLENBQUM7RUFFL0MsSUFBTTBLLGFBQWEsR0FBR3RJLFFBQVEsQ0FBQ2lCLGNBQWMsQ0FBQ0UsT0FBTyxDQUFDO0VBQ3RELElBQUksQ0FBQW1ILGFBQWEsYUFBYkEsYUFBYSx1QkFBYkEsYUFBYSxDQUFFQyxnQkFBZ0IsTUFBSy9ULGNBQWMsQ0FBQ2dVLEtBQUssSUFBSS9GLFNBQVMsQ0FBQzZGLGFBQWEsQ0FBQ3pELEtBQUssQ0FBQyxFQUFFO0lBQzlGO0lBQ0F4RSxRQUFRLENBQUNvSSxrQkFBa0IsQ0FBQ0gsYUFBYSxDQUFDSSxLQUFLLEVBQUU7TUFDL0NDLGdCQUFnQixFQUFBM0ssYUFBQSxDQUFBQSxhQUFBLEtBQ1hxQyxRQUFRLENBQUNwSCxNQUFNLENBQUMyUCxPQUFPLENBQUNOLGFBQWEsQ0FBQ0ksS0FBSyxDQUFDLENBQUNDLGdCQUFnQjtRQUNoRUUsWUFBWSxFQUFFO01BQUs7SUFFdkIsQ0FBQyxDQUFDO0lBRUZSLFlBQVksR0FBQXJLLGFBQUEsQ0FBQUEsYUFBQSxLQUNQcUssWUFBWTtNQUNmcE4sTUFBTSxFQUFFb04sWUFBWSxDQUFDcE4sTUFBTSxDQUFDZ0QsR0FBRyxDQUFDLFVBQUFpQyxDQUFDO1FBQUEsT0FBS0EsQ0FBQyxDQUFDcEgsRUFBRSxLQUFLa0gsUUFBUSxDQUFDbEgsRUFBRSxHQUFHdUgsUUFBUSxHQUFHSCxDQUFDO01BQUEsQ0FBQztJQUFDLEVBQzVFO0VBQ0g7RUFFQSxJQUFNaUQsWUFBWSxHQUFHa0YsWUFBWSxDQUFDbk4sU0FBUyxDQUFDNkMsR0FBRyxDQUFDO0VBQ2hELElBQUErSyxvQkFBQSxHQUEyQmhTLGtCQUFrQixDQUFDdUosUUFBUSxFQUFFZ0ksWUFBWSxFQUFFbEYsWUFBWSxDQUFDO0lBQTVFakksU0FBUyxHQUFBNE4sb0JBQUEsQ0FBVDVOLFNBQVM7SUFBRTRDLEtBQUssR0FBQWdMLG9CQUFBLENBQUxoTCxLQUFLO0VBRXZCLElBQ0UsQ0FBQXdLLGFBQWEsYUFBYkEsYUFBYSx1QkFBYkEsYUFBYSxDQUFFQyxnQkFBZ0IsTUFBSy9ULGNBQWMsQ0FBQ2dVLEtBQUssSUFDeEQvRixTQUFTLENBQUM2RixhQUFhLGFBQWJBLGFBQWEsdUJBQWJBLGFBQWEsQ0FBRVMsS0FBSyxDQUFDLEtBQUt0VSxXQUFXLENBQUN1VSxhQUFhLElBQzdELENBQUNkLFlBQVksRUFDYjtJQUNBO0lBQ0EsSUFBTWUsYUFBYSxHQUFHelEsOEJBQThCLENBQUM7TUFDbkR1USxLQUFLLEVBQUV0VSxXQUFXLENBQUN1VSxhQUFhO01BQ2hDbkUsS0FBSyxFQUFFL0csS0FBSyxDQUFDN0UsTUFBTSxDQUFDcVAsYUFBYSxDQUFDekQsS0FBSyxDQUFDO01BQ3hDcUUsYUFBYSxFQUFFcEwsS0FBSyxDQUFDN0UsTUFBTSxDQUFDNkUsS0FBSyxDQUFDbUQsY0FBYyxDQUFDRSxPQUFPLENBQUMsQ0FBQ3RILE1BQU0sQ0FBQztNQUNqRTZPLEtBQUssRUFBRTVLLEtBQUssQ0FBQzdFLE1BQU0sQ0FBQzhILFNBQVMsQ0FBQ3VILGFBQWEsQ0FBQ0ksS0FBSyxDQUFDO01BQ2xEUyxXQUFXLEVBQUU7SUFDZixDQUFDLENBQUM7SUFDRjtJQUNBckwsS0FBSyxDQUFDMkssa0JBQWtCLENBQUNILGFBQWEsQ0FBQ0ksS0FBSyxFQUFFO01BQzVDVSxjQUFjLEVBQUUsSUFBSTtNQUNwQlQsZ0JBQWdCLEVBQUEzSyxhQUFBLENBQUFBLGFBQUEsS0FDWEYsS0FBSyxDQUFDN0UsTUFBTSxDQUFDMlAsT0FBTyxDQUFDTixhQUFhLENBQUNJLEtBQUssQ0FBQyxDQUFDQyxnQkFBZ0I7UUFDN0RFLFlBQVksRUFBRTtNQUFJLEVBQ25CO01BQ0RJLGFBQWEsRUFBYkE7SUFDRixDQUFDLENBQUM7RUFDSjtFQUNBLE9BQU90TCwyQkFBMkIsQ0FBQzBLLFlBQVksRUFBRTtJQUFDbk4sU0FBUyxFQUFUQSxTQUFTO0lBQUU0QyxLQUFLLEVBQUxBLEtBQUs7SUFBRUMsR0FBRyxFQUFIQTtFQUFHLENBQUMsQ0FBQztBQUMzRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTaUQsMkJBQTJCQSxDQUN6Q3BELEtBQWUsRUFDZjhCLE1BQXlELEVBQy9DO0VBQ1YsSUFBT00sUUFBUSxHQUFJTixNQUFNLENBQWxCTSxRQUFRO0VBQ2YsSUFBTWpDLEdBQUcsR0FBR0gsS0FBSyxDQUFDM0MsTUFBTSxDQUFDd0YsU0FBUyxDQUFDLFVBQUFQLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUNwSCxFQUFFLEtBQUtrSCxRQUFRLENBQUNsSCxFQUFFO0VBQUEsRUFBQztFQUM3RCxJQUFNMEosS0FBSyxHQUFHdkQsTUFBTSxDQUFDQyxJQUFJLENBQUNRLE1BQU0sQ0FBQ3dJLFlBQVksQ0FBQztFQUU5QyxJQUFNQSxZQUFZLEdBQUFsSyxhQUFBLENBQUFBLGFBQUEsS0FDYmdDLFFBQVEsQ0FBQy9HLE1BQU0sQ0FBQzhILFNBQVMsR0FDekJyQixNQUFNLENBQUN3SSxZQUFZLENBQ3ZCO0VBRUQsSUFBTTdILFFBQVEsR0FBR0wsUUFBUSxDQUFDaUQsaUJBQWlCLENBQUM7SUFBQ2xDLFNBQVMsRUFBRW1IO0VBQVksQ0FBQyxDQUFDO0VBRXRFLElBQUk1SCxTQUFTLEdBQUcxQyxLQUFLOztFQUVyQjtFQUNBO0VBQ0EsSUFDRXlDLFFBQVEsQ0FBQ0UsSUFBSSxLQUFLLFFBQVEsSUFDMUJiLE1BQU0sQ0FBQ3dJLFlBQVksQ0FBQ21CLFVBQVUsS0FBSyxJQUFJLEVBQ3ZDO0lBQ0EvSSxTQUFTLEdBQUF0QyxhQUFBLENBQUFBLGFBQUEsS0FDSnNDLFNBQVM7TUFDWnJGLE1BQU0sRUFBRXFGLFNBQVMsQ0FBQ3JGLE1BQU0sQ0FBQ2dELEdBQUcsQ0FBQyxVQUFDaUMsQ0FBQyxFQUFFL0IsQ0FBQyxFQUFLO1FBQ3JDLElBQUlBLENBQUMsS0FBS0osR0FBRyxJQUFJbUMsQ0FBQyxDQUFDSyxJQUFJLEtBQUssUUFBUSxJQUFJTCxDQUFDLENBQUNqSCxNQUFNLENBQUM4SCxTQUFTLENBQUNzSSxVQUFVLEVBQUU7VUFDckUsT0FBT25KLENBQUMsQ0FBQytDLGlCQUFpQixDQUFDO1lBQ3pCbEMsU0FBUyxFQUFBL0MsYUFBQSxDQUFBQSxhQUFBLEtBQU1rQyxDQUFDLENBQUNqSCxNQUFNLENBQUM4SCxTQUFTO2NBQUVzSSxVQUFVLEVBQUU7WUFBSztVQUN0RCxDQUFDLENBQUM7UUFDSjtRQUNBLE9BQU9uSixDQUFDO01BQ1YsQ0FBQztJQUFDLEVBQ0g7RUFDSDtFQUVBLElBQUlHLFFBQVEsQ0FBQzZDLHdCQUF3QixDQUFDVixLQUFLLENBQUMsRUFBRTtJQUM1QyxJQUFNVyxZQUFZLEdBQUc3QyxTQUFTLENBQUNwRixTQUFTLENBQUM2QyxHQUFHLENBQUM7SUFDN0MsSUFBQXVMLG9CQUFBLEdBQTJCeFMsa0JBQWtCLENBQUN1SixRQUFRLEVBQUVDLFNBQVMsRUFBRTZDLFlBQVksQ0FBQztNQUF6RWpJLFNBQVMsR0FBQW9PLG9CQUFBLENBQVRwTyxTQUFTO01BQUU0QyxLQUFLLEdBQUF3TCxvQkFBQSxDQUFMeEwsS0FBSztJQUN2QixPQUFPSCwyQkFBMkIsQ0FBQzJDLFNBQVMsRUFBRTtNQUFDcEYsU0FBUyxFQUFUQSxTQUFTO01BQUU0QyxLQUFLLEVBQUxBLEtBQUs7TUFBRUMsR0FBRyxFQUFIQTtJQUFHLENBQUMsQ0FBQztFQUN4RTtFQUVBLE9BQU9KLDJCQUEyQixDQUFDMkMsU0FBUyxFQUFFO0lBQUN4QyxLQUFLLEVBQUV1QyxRQUFRO0lBQUV0QyxHQUFHLEVBQUhBO0VBQUcsQ0FBQyxDQUFDO0FBQ3ZFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTXdMLDRCQUE0QixHQUFHLFNBQS9CQSw0QkFBNEJBLENBQ3ZDM0wsS0FBUSxFQUFBNEwsS0FBQSxFQUVGO0VBQUEsSUFETDFILEtBQUssR0FBQTBILEtBQUEsQ0FBTDFILEtBQUs7RUFFTixJQUFNaEksV0FBVyxHQUFHcU4sS0FBSyxDQUFDQyxPQUFPLENBQUN0RixLQUFLLENBQUMsR0FBR0EsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxLQUFLO0VBQzNELElBQU14QixTQUFTLEdBQUF0QyxhQUFBLENBQUFBLGFBQUEsS0FDVkosS0FBSztJQUNSZixlQUFlLEVBQUFtQixhQUFBLENBQUFBLGFBQUEsS0FDVkosS0FBSyxDQUFDZixlQUFlO01BQ3hCL0MsV0FBVyxFQUFYQTtJQUFXO0VBQ1osRUFDRjtFQUNEO0VBQ0EsT0FBTzhELEtBQUssQ0FBQzNDLE1BQU0sQ0FBQ3dPLE1BQU0sQ0FBQyxVQUFDQyxJQUFJLEVBQUV4SixDQUFDLEVBQUs7SUFDdEMsSUFBSUEsQ0FBQyxDQUFDakgsTUFBTSxDQUFDd0YsU0FBUyxDQUFDekYsT0FBTyxJQUFJa0gsQ0FBQyxDQUFDSyxJQUFJLEtBQUssTUFBTSxFQUFFO01BQ25ELE9BQU84QywyQkFBMkIsQ0FBQ3FHLElBQUksRUFBRTtRQUFDMUosUUFBUSxFQUFFRSxDQUFDO1FBQUVtQixJQUFJLEVBQUUsYUFBYTtRQUFFdkgsV0FBVyxFQUFYQTtNQUFXLENBQUMsQ0FBQztJQUMzRjtJQUNBLE9BQU80UCxJQUFJO0VBQ2IsQ0FBQyxFQUFFcEosU0FBUyxDQUFDO0FBQ2YsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTcUosNkJBQTZCQSxDQUMzQy9MLEtBQWUsRUFDZjhCLE1BQTJELEVBQ2pEO0VBQ1YsT0FBT2tLLGdCQUFnQixDQUFDaE0sS0FBSyxFQUFFOEIsTUFBTSxDQUFDO0FBQ3hDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNtSywrQkFBK0JBLENBQzdDak0sS0FBUSxFQUFBa00sS0FBQSxFQUVMO0VBQUEsSUFERmhSLEVBQUUsR0FBQWdSLEtBQUEsQ0FBRmhSLEVBQUU7SUFBRWlSLGVBQWUsR0FBQUQsS0FBQSxDQUFmQyxlQUFlO0VBRXBCLElBQU1oRixNQUFNLEdBQUduSCxLQUFLLENBQUN0QyxPQUFPLENBQUMyRSxJQUFJLENBQUMsVUFBQWdDLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUNuSixFQUFFLEtBQUtBLEVBQUU7RUFBQSxFQUFDO0VBRW5ELElBQUksQ0FBQ2lNLE1BQU0sRUFBRTtJQUNYLE9BQU9uSCxLQUFLO0VBQ2Q7RUFFQSxJQUFNb00sU0FBUyxHQUFBaE0sYUFBQSxDQUFBQSxhQUFBLEtBQ1YrRyxNQUFNO0lBQ1RnRixlQUFlLEVBQWZBO0VBQWUsRUFDaEI7RUFFRCxJQUFNekwsUUFBUSxHQUFBTixhQUFBLENBQUFBLGFBQUEsS0FDVEosS0FBSztJQUNSdEMsT0FBTyxFQUFFMUYsS0FBSyxDQUFTb1UsU0FBUyxDQUFDLENBQUNwTSxLQUFLLENBQUN0QyxPQUFPO0VBQUMsRUFDakQ7RUFFRCxJQUFNMk8sbUJBQW1CLEdBQUdDLG9CQUFvQixDQUFDRixTQUE0QixDQUFDO0VBRTlFLE9BQU9HLGdDQUFnQyxDQUFDN0wsUUFBUSxFQUFFO0lBQUN4RixFQUFFLEVBQUZBLEVBQUU7SUFBRTBCLElBQUksRUFBRXlQO0VBQW1CLENBQUMsQ0FBQztBQUNwRjtBQUVBLE9BQU8sU0FBU0csd0JBQXdCQSxDQUN0Q3hNLEtBQWUsRUFDZjhCLE1BQXNELEVBQzVDO0VBQUEsSUFBQTJLLGdCQUFBO0VBQ1YsSUFBT0MsUUFBUSxHQUFlNUssTUFBTSxDQUE3QjRLLFFBQVE7SUFBRU4sU0FBUyxHQUFJdEssTUFBTSxDQUFuQnNLLFNBQVM7RUFDMUIsSUFBTU8sU0FBUyxHQUFHM00sS0FBSyxDQUFDdEMsT0FBTyxDQUFDMkUsSUFBSSxDQUFDLFVBQUFnQyxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDbkosRUFBRSxLQUFLd1IsUUFBUTtFQUFBLEVBQUM7RUFDNUQsSUFBSSxDQUFDQyxTQUFTLEVBQUU7SUFDZCxPQUFPM00sS0FBSztFQUNkOztFQUVBO0VBQ0EsSUFBTTRNLG1CQUFtQixJQUFBSCxnQkFBQSxHQUFHblUsZUFBZSxDQUFDcVUsU0FBUyxFQUFFM00sS0FBSyxDQUFDUCxNQUFNLENBQUMsY0FBQWdOLGdCQUFBLGNBQUFBLGdCQUFBLEdBQUk7SUFBQ3BSLE1BQU0sRUFBRSxDQUFDO0VBQUMsQ0FBQztFQUNwRixJQUFNd1IsbUJBQW1CLEdBQUd2VSxlQUFlLENBQUM4VCxTQUFTLEVBQUVwTSxLQUFLLENBQUNQLE1BQU0sQ0FBQztFQUNwRSxJQUFJLENBQUNvTixtQkFBbUIsSUFBSTVhLE9BQU8sQ0FBQzJhLG1CQUFtQixFQUFFQyxtQkFBbUIsQ0FBQyxFQUFFO0lBQzdFLE9BQU83TSxLQUFLO0VBQ2Q7O0VBRUE7RUFDQSxJQUFNa0QsT0FBTyxHQUFHbkMsZ0JBQWdCLENBQUM2TCxtQkFBbUIsRUFBRUMsbUJBQW1CLENBQUM7RUFDMUUsT0FBTzNKLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDOztFQUV0QixJQUFNc0IsV0FBVyxHQUFHeEUsS0FBSyxDQUFDdEMsT0FBTyxDQUFDbUYsU0FBUyxDQUFDLFVBQUF3QixDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDbkosRUFBRSxLQUFLd1IsUUFBUTtFQUFBLEVBQUM7RUFDbkUsSUFBSWxJLFdBQVcsR0FBRyxDQUFDLEVBQUU7SUFDbkIsT0FBT3hFLEtBQUs7RUFDZDtFQUNBLE9BQU9nTSxnQkFBZ0IsQ0FDckJoTSxLQUFLLEVBQ0x2TSxTQUFTLENBQUMrUSxXQUFXLEVBQUVuRCxNQUFNLENBQUNDLElBQUksQ0FBQzRCLE9BQU8sQ0FBQyxFQUFFN0IsTUFBTSxDQUFDcUgsTUFBTSxDQUFDeEYsT0FBTyxDQUFDLENBQ3JFLENBQUM7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTOEksZ0JBQWdCQSxDQUM5QmhNLEtBQVEsRUFDUjhCLE1BQThDLEVBQzNDO0VBQ0gsSUFBTzNCLEdBQUcsR0FBb0IyQixNQUFNLENBQTdCM0IsR0FBRztJQUFBMk0sa0JBQUEsR0FBb0JoTCxNQUFNLENBQXhCaUwsVUFBVTtJQUFWQSxVQUFVLEdBQUFELGtCQUFBLGNBQUcsQ0FBQyxHQUFBQSxrQkFBQTtFQUMxQixJQUFNSCxTQUFTLEdBQUczTSxLQUFLLENBQUN0QyxPQUFPLENBQUN5QyxHQUFHLENBQUM7RUFDcEMsSUFBSSxDQUFDd00sU0FBUyxFQUFFO0lBQ2Q3YSxPQUFPLENBQUM2WCxLQUFLLFlBQUFuQyxNQUFBLENBQVlySCxHQUFHLGtCQUFlLENBQUM7SUFDNUMsT0FBT0gsS0FBSztFQUNkO0VBQ0EsSUFDRXVKLEtBQUssQ0FBQ0MsT0FBTyxDQUFDMUgsTUFBTSxDQUFDMkIsSUFBSSxDQUFDLEtBQ3pCLENBQUM4RixLQUFLLENBQUNDLE9BQU8sQ0FBQzFILE1BQU0sQ0FBQ29DLEtBQUssQ0FBQyxJQUFJcEMsTUFBTSxDQUFDMkIsSUFBSSxDQUFDOUMsTUFBTSxLQUFLbUIsTUFBTSxDQUFDb0MsS0FBSyxDQUFDdkQsTUFBTSxDQUFDLEVBQzVFO0lBQ0E3TyxPQUFPLENBQUM2WCxLQUFLLENBQUMsMkVBQTJFLENBQUM7SUFDMUYsT0FBTzNKLEtBQUs7RUFDZDtFQUNBO0VBQ0EsSUFBTTRFLEtBQUssR0FBR2pQLE9BQU8sQ0FBQ21NLE1BQU0sQ0FBQzJCLElBQUksQ0FBQztFQUNsQyxJQUFNaUYsTUFBTSxHQUFHYSxLQUFLLENBQUNDLE9BQU8sQ0FBQzFILE1BQU0sQ0FBQzJCLElBQUksQ0FBQyxHQUFHOU4sT0FBTyxDQUFDbU0sTUFBTSxDQUFDb0MsS0FBSyxDQUFDLEdBQUcsQ0FBQ3BDLE1BQU0sQ0FBQ29DLEtBQUssQ0FBQztFQUVsRixJQUFJa0ksU0FBUyxHQUFHTyxTQUFTO0VBQ3pCLElBQUlqTSxRQUFRLEdBQUdWLEtBQUs7RUFFcEIsSUFBSWdOLGtCQUE0QixHQUFHLEVBQUU7RUFBQyxJQUFBQyxLQUFBLFlBQUFBLE1BQUEsRUFDQztJQUNyQyxJQUFNeEosSUFBSSxHQUFHbUIsS0FBSyxDQUFDckUsQ0FBQyxDQUFDO0lBQ3JCLElBQU0yRCxLQUFLLEdBQUd3RSxNQUFNLENBQUNuSSxDQUFDLENBQUM7SUFDdkI7SUFDQTtJQUNBLElBQUkyTSxHQUFHO0lBQ1AsSUFBSXpKLElBQUksS0FBSyxNQUFNLElBQUk4RixLQUFLLENBQUNDLE9BQU8sQ0FBQ3RGLEtBQUssQ0FBQyxFQUFFO01BQzNDO01BQ0FnSixHQUFHLEdBQUdoSixLQUFLLENBQUMySCxNQUFNLENBQUMsVUFBQ0MsSUFBSSxFQUFFcUIsQ0FBQyxFQUFLO1FBQzlCLE9BQU9DLGlCQUFpQixDQUFDdEIsSUFBSSxFQUFFTSxTQUFTLEVBQUUzSSxJQUFJLEVBQUUwSixDQUFDLEVBQUVKLFVBQVUsQ0FBQztNQUNoRSxDQUFDLEVBQUVyTSxRQUFRLENBQUM7SUFDZCxDQUFDLE1BQU07TUFDTHdNLEdBQUcsR0FBR0UsaUJBQWlCLENBQUMxTSxRQUFRLEVBQUUwTCxTQUFTLEVBQUUzSSxJQUFJLEVBQUVTLEtBQUssRUFBRTZJLFVBQVUsQ0FBQztJQUN2RTtJQUNBWCxTQUFTLEdBQUdjLEdBQUcsQ0FBQy9GLE1BQU07SUFDdEJ6RyxRQUFRLEdBQUd3TSxHQUFHLENBQUNsTixLQUFLO0lBQ3BCZ04sa0JBQWtCLEdBQUdBLGtCQUFrQixDQUFDeEYsTUFBTSxDQUFDMEYsR0FBRyxDQUFDRixrQkFBa0IsQ0FBQztFQUN4RSxDQUFDO0VBakJELEtBQUssSUFBSXpNLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR3FFLEtBQUssQ0FBQ2pFLE1BQU0sRUFBRUosQ0FBQyxFQUFFO0lBQUEwTSxLQUFBO0VBQUE7RUFtQnJDLElBQU1JLGNBQWMsR0FBR3JOLEtBQUssQ0FBQ3RDLE9BQU8sQ0FBQzJFLElBQUksQ0FBQyxVQUFBZ0MsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ2lKLElBQUksS0FBS25YLGlCQUFpQixDQUFDb1gsUUFBUTtFQUFBLEVBQUM7RUFFckYsSUFBSUYsY0FBYyxJQUFJQSxjQUFjLENBQUNuUyxFQUFFLEtBQUtrUixTQUFTLENBQUNsUixFQUFFLEVBQUU7SUFDeEQ7SUFDQWtSLFNBQVMsQ0FBQ2tCLElBQUksR0FBR25YLGlCQUFpQixDQUFDcVgsSUFBSTtFQUN6Qzs7RUFFQTtFQUNBOU0sUUFBUSxHQUFHdEwsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFK0ssR0FBRyxDQUFDLEVBQUVpTSxTQUFTLEVBQUUxTCxRQUFRLENBQUM7O0VBRXJEO0VBQ0EsSUFBTStNLGdCQUFnQixHQUFHdFosc0JBQXNCLENBQzdDaEMsSUFBSSxDQUFDNmEsa0JBQWtCLENBQUMsRUFDeEJ0TSxRQUFRLENBQUM5QyxRQUFRLEVBQ2pCOEMsUUFBUSxDQUFDaEQsT0FBTyxFQUNoQmdELFFBQVEsQ0FBQ3JELE1BQ1gsQ0FBQztFQUVEcUQsUUFBUSxHQUFHdEwsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUVxWSxnQkFBZ0IsRUFBRS9NLFFBQVEsQ0FBQzs7RUFFeEQ7RUFDQSxJQUFNZ04sY0FBYyxHQUFHclksZ0JBQWdCLENBQUNxTCxRQUFRLENBQUM5QyxRQUFRLEVBQUU4QyxRQUFRLENBQUNoRCxPQUFPLENBQUN5QyxHQUFHLENBQUMsQ0FBQztFQUVqRk8sUUFBUSxHQUFHdEwsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFK0ssR0FBRyxDQUFDLEVBQUV1TixjQUFjLEVBQUVoTixRQUFRLENBQUM7O0VBRTFEO0VBQ0E7RUFDQUEsUUFBUSxHQUFHaU4sd0JBQXdCLENBQUNqTixRQUFRLEVBQUVzTSxrQkFBa0IsRUFBRVosU0FBUyxDQUFDOztFQUU1RTtFQUNBLElBQUlBLFNBQVMsQ0FBQ3pKLElBQUksS0FBS3pNLFlBQVksQ0FBQzBYLFNBQVMsSUFBSWhKLEtBQUssQ0FBQ3lDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtJQUN4RTNHLFFBQVEsR0FBR21OLCtCQUErQixDQUFDbk4sUUFBUSxFQUFFb0IsTUFBTSxDQUFDM0IsR0FBRyxDQUFDO0VBQ2xFO0VBRUEsT0FBT08sUUFBUTtBQUNqQjtBQUVBLFNBQVNvTiwrQkFBK0JBLENBQUMzRyxNQUFNLEVBQUU0RixVQUFVLEVBQUU3SSxLQUFLLEVBQUV0RyxRQUFRLEVBQUU7RUFDNUUsSUFBSXdPLFNBQVMsR0FBR2pGLE1BQU07RUFDdEIsSUFBSUEsTUFBTSxDQUFDM0UsTUFBTSxDQUFDdUssVUFBVSxDQUFDLEVBQUU7SUFDN0I7SUFDQVgsU0FBUyxHQUFHMkIsK0JBQStCLENBQUM1RyxNQUFNLEVBQUU0RixVQUFVLEVBQUVuUCxRQUFRLENBQUM7RUFDM0U7RUFDQSxJQUFJc0csS0FBSyxFQUFFO0lBQ1QsSUFBTThKLFNBQVMsR0FBRzVCLFNBQVMsQ0FBQzVKLE1BQU0sQ0FBQ3NFLEtBQUssQ0FBQyxDQUFDO0lBQzFDa0gsU0FBUyxDQUFDakIsVUFBVSxDQUFDLEdBQUc3SSxLQUFLO0lBQzdCa0ksU0FBUyxHQUFHaFgsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUU0WSxTQUFTLEVBQUU1QixTQUFTLENBQUM7RUFDbkQ7RUFDQSxPQUFPQSxTQUFTO0FBQ2xCO0FBRUEsU0FBUzJCLCtCQUErQkEsQ0FBQzVHLE1BQU0sRUFBRTRGLFVBQVUsRUFBRW5QLFFBQVEsRUFBRTtFQUNyRSxJQUFNNEUsTUFBTSxHQUFHMkUsTUFBTSxDQUFDM0UsTUFBTSxDQUFDdUssVUFBVSxDQUFDO0VBRXhDLElBQUk1RixNQUFNLENBQUMzRSxNQUFNLENBQUM3QixNQUFNLEtBQUssQ0FBQyxJQUFJb00sVUFBVSxLQUFLLENBQUMsRUFBRTtJQUNsRDtJQUNBLE9BQU9wWSxnQkFBZ0IsQ0FBQztNQUFDdUcsRUFBRSxFQUFFaU0sTUFBTSxDQUFDak07SUFBRSxDQUFDLENBQUM7RUFDMUM7RUFFQSxJQUFJc0gsTUFBTSxFQUFFO0lBQ1YyRSxNQUFNLEdBQUc3UixnQkFBZ0IsQ0FBQzZSLE1BQU0sRUFBRTNFLE1BQU0sQ0FBQztFQUMzQztFQUVBLFNBQUF5TCxFQUFBLE1BQUFDLElBQUEsR0FBbUIsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxZQUFZLENBQUMsRUFBQUQsRUFBQSxHQUFBQyxJQUFBLENBQUF2TixNQUFBLEVBQUFzTixFQUFBLElBQUU7SUFBNUQsSUFBTXhLLElBQUksR0FBQXlLLElBQUEsQ0FBQUQsRUFBQTtJQUNiLElBQUkxRSxLQUFLLENBQUNDLE9BQU8sQ0FBQ3JDLE1BQU0sQ0FBQzFELElBQUksQ0FBQyxDQUFDLEVBQUU7TUFDL0IsSUFBTTBLLE9BQU8sR0FBR2hILE1BQU0sQ0FBQzFELElBQUksQ0FBQyxDQUFDcUQsS0FBSyxDQUFDLENBQUM7TUFDcENxSCxPQUFPLENBQUN2RyxNQUFNLENBQUNtRixVQUFVLEVBQUUsQ0FBQyxDQUFDO01BQzdCNUYsTUFBTSxHQUFHL1IsR0FBRyxDQUFDLENBQUNxTyxJQUFJLENBQUMsRUFBRTBLLE9BQU8sRUFBRWhILE1BQU0sQ0FBQztJQUN2QztFQUNGOztFQUVBO0VBQ0EsSUFBTWlILFdBQVcsR0FBR3pULGlCQUFpQixDQUFDd00sTUFBTSxFQUFFdkosUUFBUSxDQUFDO0VBRXZELElBQU15USxVQUFVLEdBQUFqTyxhQUFBLENBQUFBLGFBQUEsS0FDWCtHLE1BQU0sR0FFTGlILFdBQVcsR0FBRztJQUFDblMsTUFBTSxFQUFFbVMsV0FBVyxhQUFYQSxXQUFXLHVCQUFYQSxXQUFXLENBQUVuUyxNQUFNO0lBQUVxUyxJQUFJLEVBQUVGLFdBQVcsYUFBWEEsV0FBVyx1QkFBWEEsV0FBVyxDQUFFRTtFQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDOUU7RUFFRCxJQUFNTixTQUFTLEdBQUcxWix5QkFBeUIsQ0FBQytaLFVBQVUsQ0FBQ25LLEtBQUssRUFBRW1LLFVBQVUsQ0FBQztFQUN6RSxPQUFBak8sYUFBQSxDQUFBQSxhQUFBLEtBQ0tpTyxVQUFVO0lBQ2JuSyxLQUFLLEVBQUU4SjtFQUFTO0FBRXBCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVNaLGlCQUFpQkEsQ0FBQ3BOLEtBQUssRUFBRW1ILE1BQU0sRUFBRTFELElBQUksRUFBRVMsS0FBSyxFQUFFNkksVUFBVSxFQUFFd0IsVUFBVyxFQUFFO0VBQzlFLElBQUl2QixrQkFBNEIsR0FBRyxFQUFFO0VBQ3JDLFFBQVF2SixJQUFJO0lBQ1Y7SUFDQTtJQUNBO0lBQ0EsS0FBSzFQLG9CQUFvQixDQUFDeU8sTUFBTTtNQUFFO1FBQ2hDLElBQU1nTSxTQUFTLEdBQUEvRyxrQkFBQSxDQUFPTixNQUFNLENBQUMzRSxNQUFNLENBQUM7UUFDcEMyRSxNQUFNLEdBQUcyRywrQkFBK0IsQ0FBQzNHLE1BQU0sRUFBRTRGLFVBQVUsRUFBRTdJLEtBQUssRUFBRWxFLEtBQUssQ0FBQ3BDLFFBQVEsQ0FBQztRQUNuRm9QLGtCQUFrQixHQUFHN2EsSUFBSSxJQUFBcVYsTUFBQSxDQUFBQyxrQkFBQSxDQUFLK0csU0FBUyxHQUFBL0csa0JBQUEsQ0FBS04sTUFBTSxDQUFDM0UsTUFBTSxFQUFDLENBQUM7UUFDM0Q7TUFDRjtJQUNBLEtBQUt6TyxvQkFBb0IsQ0FBQ21ULElBQUk7TUFBRTtRQUM5QjtRQUNBO1FBQ0E7UUFDQSxJQUFNdUgsU0FBUyxHQUFHdEgsTUFBTSxDQUFDM0UsTUFBTSxDQUFDdUssVUFBVSxDQUFDO1FBQzNDLElBQUEyQixxQkFBQSxHQUFxRHhhLG9CQUFvQixDQUN2RWlULE1BQU0sRUFDTm5ILEtBQUssQ0FBQ3BDLFFBQVEsRUFDZDZRLFNBQVMsRUFDVHZLLEtBQUssRUFDTDZJLFVBQVUsRUFDVjtZQUFDNEIsV0FBVyxFQUFFNUIsVUFBVSxHQUFHO1VBQUMsQ0FDOUIsQ0FBQztVQVBjNkIsYUFBYSxHQUFBRixxQkFBQSxDQUFyQnZILE1BQU07VUFBMEIwSCxVQUFVLEdBQUFILHFCQUFBLENBQW5Cbk0sT0FBTztRQVFyQyxJQUFJcU0sYUFBYSxFQUFFO1VBQ2pCekgsTUFBTSxHQUFHeUgsYUFBYTtVQUN0QixJQUFJekgsTUFBTSxDQUFDMkgsR0FBRyxFQUFFO1lBQ2QzSCxNQUFNLEdBQUdwTyxnQkFBZ0IsQ0FBQ29PLE1BQU0sRUFBRW5ILEtBQUssQ0FBQ3RDLE9BQU8sQ0FBQztZQUNoRHlKLE1BQU0sR0FBR3hPLGdCQUFnQixDQUFDd08sTUFBTSxFQUFFbkgsS0FBSyxDQUFDdEMsT0FBTyxDQUFDO1VBQ2xEO1VBQ0FzQyxLQUFLLEdBQUc1SyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUVxWixTQUFTLENBQUMsRUFBRUksVUFBVSxFQUFFN08sS0FBSyxDQUFDO1VBQ3ZEO1VBQ0FtSCxNQUFNLEdBQUc3UixnQkFBZ0IsQ0FBQzZSLE1BQU0sRUFBRXNILFNBQVMsQ0FBQztVQUU1Q3pCLGtCQUFrQixHQUFHNEIsYUFBYSxDQUFDcE0sTUFBTTtRQUMzQztRQUNBO1FBQ0E7TUFDRjtJQUVBLEtBQUt6TyxvQkFBb0IsQ0FBQzhSLE9BQU87TUFBRTtRQUNqQztRQUNBO1FBQ0E7UUFDQTtRQUNBLElBQU1rSixpQkFBaUIsR0FBRzNjLEdBQUcsQ0FBQzhSLEtBQUssRUFBRWlELE1BQU0sQ0FBQ3RCLE9BQU8sQ0FBQztRQUVwRCxJQUFNbUosWUFBWSxHQUFHN2MsSUFBSSxDQUN2QjRjLGlCQUFpQixDQUNkMU8sR0FBRyxDQUFDLFVBQUE0TyxHQUFHO1VBQUEsT0FDTmpkLEdBQUcsQ0FDRGdPLEtBQUssQ0FBQzNDLE1BQU0sQ0FBQ2dGLElBQUksQ0FBQyxVQUFBQyxDQUFDO1lBQUEsT0FBSUEsQ0FBQyxDQUFDcEgsRUFBRSxLQUFLK1QsR0FBRztVQUFBLEVBQUMsRUFDcEMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUNyQixDQUFDO1FBQUEsQ0FDSCxDQUFDLENBQ0E5SCxNQUFNLENBQUMsVUFBQTNHLENBQUM7VUFBQSxPQUFJQSxDQUFDO1FBQUEsRUFDbEIsQ0FBQzs7UUFFRDtRQUNBd00sa0JBQWtCLEdBQUdnQyxZQUFZOztRQUVqQztRQUNBLElBQU1FLFVBQVUsR0FBRy9jLElBQUksQ0FDckIrUixLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FDRDdELEdBQUcsQ0FBQyxVQUFBNE8sR0FBRztVQUFBLE9BQ1BqZCxHQUFHLENBQ0RnTyxLQUFLLENBQUMzQyxNQUFNLENBQUNnRixJQUFJLENBQUMsVUFBQUMsQ0FBQztZQUFBLE9BQUlBLENBQUMsQ0FBQ3BILEVBQUUsS0FBSytULEdBQUc7VUFBQSxFQUFDLEVBQ3BDLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FDckIsQ0FBQztRQUFBLENBQ0gsQ0FBQyxDQUNBOUgsTUFBTSxDQUFDLFVBQUEzRyxDQUFDO1VBQUEsT0FBSUEsQ0FBQztRQUFBLEVBQ2xCLENBQUM7UUFFRDJHLE1BQU0sR0FBQS9HLGFBQUEsQ0FBQUEsYUFBQSxLQUNEK0csTUFBTTtVQUNUdEIsT0FBTyxFQUFFM0IsS0FBSztVQUNkMUIsTUFBTSxFQUFFME07UUFBVSxFQUNuQjtRQUNEO01BQ0Y7SUFFQTtNQUNFL0gsTUFBTSxHQUFHL1IsR0FBRyxDQUFDLENBQUNxTyxJQUFJLENBQUMsRUFBRVMsS0FBSyxFQUFFaUQsTUFBTSxDQUFDO01BQ25DNkYsa0JBQWtCLEdBQUF2RixrQkFBQSxDQUFPTixNQUFNLENBQUMzRSxNQUFNLENBQUM7TUFDdkM7RUFDSjtFQUVBLE9BQU87SUFBQzJFLE1BQU0sRUFBTkEsTUFBTTtJQUFFb0gsVUFBVSxFQUFWQSxVQUFVO0lBQUV2QixrQkFBa0IsRUFBbEJBLGtCQUFrQjtJQUFFaE4sS0FBSyxFQUFMQTtFQUFLLENBQUM7QUFDeEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNbVAsb0JBQW9CLEdBQUcsU0FBdkJBLG9CQUFvQkEsQ0FDL0JuUCxLQUFlLEVBQUFvUCxLQUFBLEVBRUY7RUFBQSxJQURaalAsR0FBRyxHQUFBaVAsS0FBQSxDQUFIalAsR0FBRztJQUFFa1AsT0FBTyxHQUFBRCxLQUFBLENBQVBDLE9BQU87RUFFYixJQUFJLENBQUNyUCxLQUFLLENBQUN0QyxPQUFPLENBQUN5QyxHQUFHLENBQUMsRUFBRTtJQUN2QnJPLE9BQU8sQ0FBQzZYLEtBQUssWUFBQW5DLE1BQUEsQ0FBWXJILEdBQUcsbUJBQWdCLENBQUM7SUFDN0MsT0FBT0gsS0FBSztFQUNkO0VBQ0EsSUFBSW9NLFNBQVMsR0FBR3BNLEtBQUssQ0FBQ3RDLE9BQU8sQ0FBQ3lDLEdBQUcsQ0FBQztFQUVsQyxLQUFLLElBQU1zRCxJQUFJLElBQUk0TCxPQUFPLEVBQUU7SUFDMUIsSUFBSTVMLElBQUksS0FBSyxVQUFVLEVBQUU7TUFDdkIySSxTQUFTLEdBQUd0VSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUNGLE1BQU0sQ0FBQ3lYLE9BQU8sQ0FBQ0MsUUFBUSxDQUFDLENBQUMsQ0FBQ2xELFNBQVMsQ0FBQztJQUNwRSxDQUFDLE1BQU0sSUFBSTNJLElBQUksS0FBSyxPQUFPLEVBQUU7TUFDM0IsSUFBTThMLFNBQVMsR0FBR0YsT0FBTyxDQUFDRyxLQUFLLEdBQUcvWSxVQUFVLENBQUNnWixTQUFTLEdBQUdoWixVQUFVLENBQUNpWixTQUFTO01BRTdFdEQsU0FBUyxHQUFHdFUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDRixNQUFNLENBQUM7UUFBQytLLElBQUksRUFBRTRNO01BQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQzNYLE1BQU0sQ0FBQ3lYLE9BQU8sQ0FBQyxDQUFDakQsU0FBUyxDQUFDLENBQUM7SUFDdEY7RUFDRjtFQUVBQSxTQUFTLEdBQUcvVyxnQkFBZ0IsQ0FBQzJLLEtBQUssQ0FBQ3BDLFFBQVEsRUFBRXdPLFNBQVMsQ0FBQztFQUV2RCxPQUFBaE0sYUFBQSxDQUFBQSxhQUFBLEtBQ0tKLEtBQUs7SUFDUnRDLE9BQU8sRUFBRXNDLEtBQUssQ0FBQ3RDLE9BQU8sQ0FBQzJDLEdBQUcsQ0FBQyxVQUFDZ0UsQ0FBQyxFQUFFOUQsQ0FBQztNQUFBLE9BQU1BLENBQUMsS0FBS0osR0FBRyxHQUFHaU0sU0FBUyxHQUFHL0gsQ0FBQztJQUFBLENBQUM7RUFBQztBQUVyRSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU1zTCxnQkFBZ0IsR0FBRyxTQUFuQkEsZ0JBQWdCQSxDQUMzQjNQLEtBQWUsRUFDZjhCLE1BQThDO0VBQUEsT0FFOUMsQ0FBQ0EsTUFBTSxDQUFDVSxNQUFNLEdBQ1Z4QyxLQUFLLEdBQUFJLGFBQUEsQ0FBQUEsYUFBQSxLQUVBSixLQUFLO0lBQ1J0QyxPQUFPLEtBQUE4SixNQUFBLENBQUFDLGtCQUFBLENBQU16SCxLQUFLLENBQUN0QyxPQUFPLElBQUUvSSxnQkFBZ0IsQ0FBQztNQUFDNk4sTUFBTSxFQUFFVixNQUFNLENBQUNVLE1BQU07TUFBRXRILEVBQUUsRUFBRTRHLE1BQU0sQ0FBQzVHO0lBQUUsQ0FBQyxDQUFDO0VBQUMsRUFDdEY7QUFBQTs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNMFUsMkJBQTJCLEdBQUcsU0FBOUJBLDJCQUEyQkEsQ0FDdEM1UCxLQUFlLEVBQ2Y4QixNQUF5RCxFQUM1QztFQUNiLElBQU81RyxFQUFFLEdBQTBCNEcsTUFBTSxDQUFsQzVHLEVBQUU7SUFBRXNILE1BQU0sR0FBa0JWLE1BQU0sQ0FBOUJVLE1BQU07SUFBRXlFLEtBQUssR0FBV25GLE1BQU0sQ0FBdEJtRixLQUFLO0lBQUUvQyxLQUFLLEdBQUlwQyxNQUFNLENBQWZvQyxLQUFLO0VBRS9CLElBQUl4RCxRQUFRLEdBQUdWLEtBQUs7RUFDcEIsSUFBTTZQLGFBQWEsR0FBR25QLFFBQVEsQ0FBQ2hELE9BQU8sQ0FBQ21GLFNBQVMsQ0FBQyxVQUFBd0IsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ25KLEVBQUUsS0FBS0EsRUFBRTtFQUFBLEVBQUM7RUFDbEUsSUFBSXNKLFdBQVcsR0FBR3FMLGFBQWE7RUFDL0IsSUFBSSxDQUFDM1UsRUFBRSxJQUFJLENBQUNzSCxNQUFNLEVBQUU7SUFDbEIsT0FBTzlCLFFBQVE7RUFDakI7RUFDQSxJQUFJbVAsYUFBYSxHQUFHLENBQUMsSUFBSXJOLE1BQU0sRUFBRTtJQUMvQjlCLFFBQVEsR0FBR2lQLGdCQUFnQixDQUFDalAsUUFBUSxFQUFFO01BQUM4QixNQUFNLEVBQU5BO0lBQU0sQ0FBQyxDQUFDO0lBQy9DLElBQUk5QixRQUFRLENBQUNoRCxPQUFPLENBQUNpRCxNQUFNLEtBQUtYLEtBQUssQ0FBQ3RDLE9BQU8sQ0FBQ2lELE1BQU0sR0FBRyxDQUFDLEVBQUU7TUFDeEQ7TUFDQSxPQUFPWCxLQUFLO0lBQ2Q7SUFDQTtJQUNBd0UsV0FBVyxHQUFHOUQsUUFBUSxDQUFDaEQsT0FBTyxDQUFDaUQsTUFBTSxHQUFHLENBQUM7SUFDekNELFFBQVEsQ0FBQ2hELE9BQU8sQ0FBQzhHLFdBQVcsQ0FBQyxHQUFBcEUsYUFBQSxDQUFBQSxhQUFBLEtBQ3hCTSxRQUFRLENBQUNoRCxPQUFPLENBQUM4RyxXQUFXLENBQUMsR0FDNUJ0SixFQUFFLEdBQUc7TUFBQ0EsRUFBRSxFQUFGQTtJQUFFLENBQUMsR0FBRyxJQUFJLENBQ3JCO0VBQ0g7O0VBRUE7RUFDQTtFQUNBLElBQUkyVSxhQUFhLElBQUksQ0FBQyxJQUFJck4sTUFBTSxFQUFFO0lBQ2hDO0lBQ0E5QixRQUFRLEdBQUcsQ0FBQzZJLEtBQUssQ0FBQ0MsT0FBTyxDQUFDaEgsTUFBTSxDQUFDLEdBQUdBLE1BQU0sR0FBRyxDQUFDQSxNQUFNLENBQUMsRUFBRXFKLE1BQU0sQ0FBQyxVQUFDQyxJQUFJLEVBQUV0TCxDQUFDLEVBQUVzUCxLQUFLLEVBQUs7TUFDaEYsT0FBTzlELGdCQUFnQixDQUFDRixJQUFJLEVBQUU7UUFDNUIzTCxHQUFHLEVBQUVxRSxXQUFXO1FBQ2hCZixJQUFJLEVBQUUsUUFBUTtRQUNkUyxLQUFLLEVBQUUxRCxDQUFDO1FBQ1J1TSxVQUFVLEVBQUUrQztNQUNkLENBQUMsQ0FBQztJQUNKLENBQUMsRUFBRXBQLFFBQVEsQ0FBQztFQUNkO0VBQ0E7RUFDQSxJQUFJdUcsS0FBSyxFQUFFO0lBQ1Q7SUFDQXZHLFFBQVEsR0FBRyxDQUFDNkksS0FBSyxDQUFDQyxPQUFPLENBQUN2QyxLQUFLLENBQUMsR0FBR0EsS0FBSyxHQUFHLENBQUNBLEtBQUssQ0FBQyxFQUFFNEUsTUFBTSxDQUFDLFVBQUNDLElBQUksRUFBRXpILENBQUMsRUFBRXlMLEtBQUssRUFBSztNQUM3RSxPQUFPOUQsZ0JBQWdCLENBQUNGLElBQUksRUFBRTtRQUM1QjNMLEdBQUcsRUFBRXFFLFdBQVc7UUFDaEJmLElBQUksRUFBRSxNQUFNO1FBQ1pTLEtBQUssRUFBRUcsQ0FBQztRQUNSMEksVUFBVSxFQUFFK0M7TUFDZCxDQUFDLENBQUM7SUFDSixDQUFDLEVBQUVwUCxRQUFRLENBQUM7RUFDZDtFQUNBO0VBQ0EsSUFBSXdELEtBQUssS0FBSyxJQUFJLElBQUksT0FBT0EsS0FBSyxLQUFLLFdBQVcsRUFBRTtJQUNsRHhELFFBQVEsR0FBR3NMLGdCQUFnQixDQUFDdEwsUUFBUSxFQUFFO01BQUNQLEdBQUcsRUFBRXFFLFdBQVc7TUFBRWYsSUFBSSxFQUFFLE9BQU87TUFBRVMsS0FBSyxFQUFMQTtJQUFLLENBQUMsQ0FBQztFQUNqRjtFQUVBLE9BQU94RCxRQUFRO0FBQ2pCLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU1xUCx5QkFBeUIsR0FBRyxTQUE1QkEseUJBQXlCQSxDQUNwQy9QLEtBQWUsRUFBQWdRLEtBQUEsRUFFRjtFQUFBLElBRFo1TixRQUFRLEdBQUE0TixLQUFBLENBQVI1TixRQUFRO0lBQUVxQixJQUFJLEdBQUF1TSxLQUFBLENBQUp2TSxJQUFJO0lBQUVvQixTQUFTLEdBQUFtTCxLQUFBLENBQVRuTCxTQUFTO0VBRTFCLElBQU1vTCxZQUFZLEdBQUc3TixRQUFRLENBQUMvRyxNQUFNLENBQUM4SCxTQUFTLENBQUNNLElBQUksQ0FBQztFQUNwRCxJQUFNaEIsUUFBUSxHQUFHTCxRQUFRLENBQUN5SSxrQkFBa0IsQ0FBQ3BILElBQUksRUFBRW9CLFNBQVMsQ0FBQztFQUM3RCxJQUFNeUYsWUFBWSxHQUFHN0gsUUFBUSxDQUFDcEgsTUFBTSxDQUFDOEgsU0FBUyxDQUFDTSxJQUFJLENBQUM7RUFDcEQsSUFBSXdNLFlBQVksS0FBSzNGLFlBQVksRUFBRTtJQUNqQyxPQUFPbEgsMkJBQTJCLENBQUNwRCxLQUFLLEVBQUU7TUFDeENvQyxRQUFRLEVBQVJBLFFBQVE7TUFDUmtJLFlBQVksRUFBQTVFLGVBQUEsS0FDVGpDLElBQUksRUFBRzZHLFlBQVk7SUFFeEIsQ0FBQyxDQUFDO0VBQ0o7RUFDQSxPQUFBbEssYUFBQSxDQUFBQSxhQUFBLEtBQ0tKLEtBQUs7SUFDUjNDLE1BQU0sRUFBRTJDLEtBQUssQ0FBQzNDLE1BQU0sQ0FBQ2dELEdBQUcsQ0FBQyxVQUFBaUMsQ0FBQztNQUFBLE9BQUtBLENBQUMsQ0FBQ3BILEVBQUUsS0FBS2tILFFBQVEsQ0FBQ2xILEVBQUUsR0FBR3VILFFBQVEsR0FBR0gsQ0FBQztJQUFBLENBQUM7RUFBQztBQUV4RSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU00Tiw0QkFBNEIsR0FBRyxTQUEvQkEsNEJBQTRCQSxDQUN2Q2xRLEtBQWUsRUFDZjhCLE1BQTBEO0VBQUEsT0FBQTFCLGFBQUEsQ0FBQUEsYUFBQSxLQUV2REosS0FBSztJQUNSdEMsT0FBTyxFQUFFc0MsS0FBSyxDQUFDdEMsT0FBTyxDQUFDMkMsR0FBRyxDQUFDLFVBQUNnRSxDQUFDLEVBQUU5RCxDQUFDO01BQUEsT0FBTUEsQ0FBQyxLQUFLdUIsTUFBTSxDQUFDM0IsR0FBRyxHQUFBQyxhQUFBLENBQUFBLGFBQUEsS0FBT2lFLENBQUM7UUFBRWpJLFdBQVcsRUFBRSxDQUFDaUksQ0FBQyxDQUFDakk7TUFBVyxLQUFJaUksQ0FBQztJQUFBLENBQUM7RUFBQztBQUFBLENBQ2xHO0FBRUYsT0FBTyxTQUFTOEwsdUJBQXVCQSxDQUFDOVUsTUFBK0MsRUFBVztFQUNoRyxPQUFPLFFBQVEsSUFBSUEsTUFBTSxJQUFJLGlCQUFpQixJQUFJQSxNQUFNO0FBQzFEO0FBRUEsT0FBTyxTQUFTK1UseUJBQXlCQSxDQUN2Q3BRLEtBQWUsRUFDZjhCLE1BQXVELEVBQzdDO0VBQ1YsSUFBT3pHLE1BQU0sR0FBSXlHLE1BQU0sQ0FBaEJ6RyxNQUFNO0VBQ2IsSUFBSThVLHVCQUF1QixDQUFDOVUsTUFBTSxDQUFDLEVBQUU7SUFDbkM7SUFDQTtJQUNBLElBQU04TCxNQUFNLEdBQUduSCxLQUFLLENBQUN0QyxPQUFPLENBQUMyRSxJQUFJLENBQUMsVUFBQWdDLENBQUM7TUFBQSxPQUFJLENBQUM3TyxZQUFZLENBQUM2TyxDQUFDLENBQUM7SUFBQSxFQUFDO0lBQ3hELElBQUksQ0FBQzhDLE1BQU0sRUFBRTtNQUNYLE9BQU9uSCxLQUFLO0lBQ2Q7SUFDQSxJQUFNb00sU0FBUyxHQUFBaE0sYUFBQSxDQUFBQSxhQUFBLEtBQU8rRyxNQUFNLEdBQUs5TCxNQUFNLENBQUM7SUFDeEMsT0FBT21SLHdCQUF3QixDQUFDeE0sS0FBSyxFQUFFbE0saUJBQWlCLENBQUNxVCxNQUFNLENBQUNqTSxFQUFFLEVBQUVrUixTQUFTLENBQUMsQ0FBQztFQUNqRixDQUFDLE1BQU07SUFDTCxPQUFBaE0sYUFBQSxDQUFBQSxhQUFBLEtBQ0tKLEtBQUs7TUFDUmYsZUFBZSxFQUFBbUIsYUFBQSxDQUFBQSxhQUFBLEtBQ1ZKLEtBQUssQ0FBQ2YsZUFBZSxHQUNyQjVELE1BQU07SUFDVjtFQUVMO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU1nViwyQkFBMkIsR0FBRyxTQUE5QkEsMkJBQTJCQSxDQUN0Q3JRLEtBQWUsRUFFZjhCLE1BQXlEO0VBQUEsT0FBQTFCLGFBQUEsQ0FBQUEsYUFBQSxLQUV0REosS0FBSztJQUNSZixlQUFlLEVBQUFtQixhQUFBLENBQUFBLGFBQUEsS0FDVkosS0FBSyxDQUFDZixlQUFlO01BQ3hCN0MsV0FBVyxFQUFFLENBQUM0RCxLQUFLLENBQUNmLGVBQWUsQ0FBQzdDO0lBQVc7RUFDaEQ7QUFBQSxDQUNEOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU1rVSxrQ0FBa0MsR0FBRyxTQUFyQ0Esa0NBQWtDQSxDQUFJdFEsS0FBZTtFQUFBLE9BQUFJLGFBQUEsQ0FBQUEsYUFBQSxLQUM3REosS0FBSztJQUNSZixlQUFlLEVBQUFtQixhQUFBLENBQUFBLGFBQUEsS0FDVkosS0FBSyxDQUFDZixlQUFlO01BQ3hCeEMsV0FBVyxFQUFFLENBQUN1RCxLQUFLLENBQUNmLGVBQWUsQ0FBQ3hDO0lBQVc7RUFDaEQ7QUFBQSxDQUNEOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU04VCxpQ0FBaUMsR0FBRyxTQUFwQ0EsaUNBQWlDQSxDQUM1Q3ZRLEtBQWUsRUFDZjhCLE1BQStEO0VBQUEsT0FBQTFCLGFBQUEsQ0FBQUEsYUFBQSxLQUU1REosS0FBSztJQUNSdEMsT0FBTyxFQUFFc0MsS0FBSyxDQUFDdEMsT0FBTyxDQUFDMkMsR0FBRyxDQUFDLFVBQUNnRSxDQUFDLEVBQUU5RCxDQUFDO01BQUEsT0FBTUEsQ0FBQyxLQUFLdUIsTUFBTSxDQUFDM0IsR0FBRyxHQUFBQyxhQUFBLENBQUFBLGFBQUEsS0FBT2lFLENBQUM7UUFBRWxJLEtBQUssRUFBRTJGLE1BQU0sQ0FBQzNGO01BQUssS0FBSWtJLENBQUM7SUFBQSxDQUFDO0VBQUM7QUFBQSxDQUMxRjs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU1tTSxnQ0FBZ0MsR0FBRyxTQUFuQ0EsZ0NBQWdDQSxDQUMzQ3hRLEtBQWUsRUFBQXlRLEtBQUEsRUFFRjtFQUFBLElBRFp0VSxLQUFLLEdBQUFzVSxLQUFBLENBQUx0VSxLQUFLO0VBRU4sT0FBQWlFLGFBQUEsQ0FBQUEsYUFBQSxLQUNLSixLQUFLO0lBQ1JmLGVBQWUsRUFBQW1CLGFBQUEsQ0FBQUEsYUFBQSxLQUNWSixLQUFLLENBQUNmLGVBQWU7TUFDeEI5QyxLQUFLLEVBQUxBO0lBQUs7RUFDTjtBQUVMLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTXVVLG9CQUFvQixHQUFHLFNBQXZCQSxvQkFBb0JBLENBQy9CMVEsS0FBZSxFQUNmOEIsTUFBa0QsRUFDL0M7RUFDSCxJQUFPd0wsSUFBSSxHQUFTeEwsTUFBTSxDQUFuQndMLElBQUk7SUFBRW5OLEdBQUcsR0FBSTJCLE1BQU0sQ0FBYjNCLEdBQUc7RUFDaEIsSUFBTXdRLDJCQUEyQixHQUFHckQsSUFBSSxLQUFLblgsaUJBQWlCLENBQUNvWCxRQUFRO0VBQ3ZFLE9BQUFuTixhQUFBLENBQUFBLGFBQUEsS0FDS0osS0FBSztJQUNSdEMsT0FBTyxFQUFFc0MsS0FBSyxDQUFDdEMsT0FBTyxDQUFDMkMsR0FBRyxDQUFDLFVBQUNnRSxDQUFDLEVBQUU5RCxDQUFDO01BQUEsT0FDOUJBLENBQUMsS0FBS0osR0FBRyxHQUFBQyxhQUFBLENBQUFBLGFBQUEsS0FFQWlFLENBQUM7UUFDSmlKLElBQUksRUFBSkE7TUFBSSxLQUVOcUQsMkJBQTJCLEdBQUF2USxhQUFBLENBQUFBLGFBQUEsS0FFdEJpRSxDQUFDO1FBQ0ppSixJQUFJLEVBQUVuWCxpQkFBaUIsQ0FBQ3FYO01BQUksS0FFOUJuSixDQUFDO0lBQUEsQ0FDUDtFQUFDO0FBRUwsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTXVNLDBCQUEwQixHQUFHLFNBQTdCQSwwQkFBMEJBLENBQ3JDNVEsS0FBZSxFQUNmOEIsTUFBd0QsRUFDM0M7RUFDYixJQUFNcUYsTUFBTSxHQUFHbkgsS0FBSyxDQUFDdEMsT0FBTyxDQUFDb0UsTUFBTSxDQUFDM0IsR0FBRyxDQUFDO0VBQ3hDLElBQU1TLFNBQVMsR0FBRzVPLEdBQUcsQ0FBQ21WLE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUM7RUFFbkUsSUFBSXpHLFFBQVEsR0FBR3NMLGdCQUFnQixDQUFDaE0sS0FBSyxFQUFFO0lBQ3JDRyxHQUFHLEVBQUUyQixNQUFNLENBQUMzQixHQUFHO0lBQ2ZzRCxJQUFJLEVBQUUsU0FBUztJQUNmUyxLQUFLLEVBQUUsQ0FBQ3REO0VBQ1YsQ0FBQyxDQUFDO0VBRUZGLFFBQVEsR0FBR3NMLGdCQUFnQixDQUFDdEwsUUFBUSxFQUFFO0lBQ3BDUCxHQUFHLEVBQUUyQixNQUFNLENBQUMzQixHQUFHO0lBQ2ZzRCxJQUFJLEVBQUUsT0FBTztJQUNiUyxLQUFLLEVBQUUxUCxvQkFBb0IsQ0FBQzJTLE1BQU0sQ0FBQ2pELEtBQUssRUFBRWlELE1BQU0sQ0FBQ2pNLEVBQUUsRUFBRTtNQUNuRDBGLFNBQVMsRUFBRSxDQUFDQTtJQUNkLENBQUM7RUFDSCxDQUFDLENBQUM7RUFFRixPQUFPRixRQUFRO0FBQ2pCLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTW1RLG1CQUFtQixHQUFHLFNBQXRCQSxtQkFBbUJBLENBQzlCN1EsS0FBZSxFQUNmOEIsTUFBaUQsRUFDcEM7RUFDYixJQUFPM0IsR0FBRyxHQUFJMkIsTUFBTSxDQUFiM0IsR0FBRztFQUNWLElBQUEyUSxrQkFBQSxHQUFxQjlRLEtBQUssQ0FBQ3RDLE9BQU8sQ0FBQ3lDLEdBQUcsQ0FBQztJQUFoQ3FDLE1BQU0sR0FBQXNPLGtCQUFBLENBQU50TyxNQUFNO0lBQUV0SCxFQUFFLEdBQUE0VixrQkFBQSxDQUFGNVYsRUFBRTtFQUVqQixJQUFNNlYsVUFBVSxNQUFBdkosTUFBQSxDQUFBQyxrQkFBQSxDQUNYekgsS0FBSyxDQUFDdEMsT0FBTyxDQUFDb0osS0FBSyxDQUFDLENBQUMsRUFBRTNHLEdBQUcsQ0FBQyxHQUFBc0gsa0JBQUEsQ0FDM0J6SCxLQUFLLENBQUN0QyxPQUFPLENBQUNvSixLQUFLLENBQUMzRyxHQUFHLEdBQUcsQ0FBQyxFQUFFSCxLQUFLLENBQUN0QyxPQUFPLENBQUNpRCxNQUFNLENBQUMsRUFDdEQ7RUFFRCxJQUFNOE0sZ0JBQWdCLEdBQUd0WixzQkFBc0IsQ0FBQ3FPLE1BQU0sRUFBRXhDLEtBQUssQ0FBQ3BDLFFBQVEsRUFBRW1ULFVBQVUsRUFBRS9RLEtBQUssQ0FBQzNDLE1BQU0sQ0FBQztFQUNqRyxJQUFNMlQsU0FBUyxHQUNicGMsb0JBQW9CLENBQUNvTCxLQUFLLENBQUNkLE1BQU0sQ0FBQ25DLGVBQWUsQ0FBQyxLQUFLN0IsRUFBRSxHQUFBa0YsYUFBQSxDQUFBQSxhQUFBLEtBRWhESixLQUFLLENBQUNkLE1BQU07SUFDZm5DLGVBQWUsRUFBRTtFQUFJLEtBRXZCaUQsS0FBSyxDQUFDZCxNQUFNO0VBRWxCLElBQUl3QixRQUFRLEdBQUd0TCxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRTJiLFVBQVUsRUFBRS9RLEtBQUssQ0FBQztFQUNsRFUsUUFBUSxHQUFHdEwsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUVxWSxnQkFBZ0IsRUFBRS9NLFFBQVEsQ0FBQztFQUN4REEsUUFBUSxHQUFHdEwsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUU0YixTQUFTLEVBQUV0USxRQUFRLENBQUM7RUFFL0MsT0FBT2lOLHdCQUF3QixDQUFDak4sUUFBUSxFQUFFOEIsTUFBTSxFQUFFMUUsU0FBUyxDQUFDO0FBQzlELENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTW1ULGVBQWUsR0FBRyxTQUFsQkEsZUFBZUEsQ0FDMUJqUixLQUFlLEVBQ2Y4QixNQUE2QyxFQUNoQztFQUNiLElBQUlXLFFBQVE7RUFDWixJQUFJeU8sWUFBWTtFQUNoQixJQUFJcFAsTUFBTSxDQUFDekcsTUFBTSxFQUFFO0lBQ2pCb0gsUUFBUSxHQUFHcksscUJBQXFCLENBQUM0SCxLQUFLLEVBQUU4QixNQUFNLENBQUN6RyxNQUFNLENBQUM7SUFDdEQsSUFBSSxDQUFDb0gsUUFBUSxFQUFFO01BQ2IzUSxPQUFPLENBQUNxZixJQUFJLENBQ1YsNkZBQTZGLEVBQzdGclAsTUFBTSxDQUFDekcsTUFDVCxDQUFDO01BQ0QsT0FBTzJFLEtBQUs7SUFDZDtJQUVBLElBQU1xSixNQUFNLEdBQUduUSxrQkFBa0IsQ0FBQ3VKLFFBQVEsRUFBRXpDLEtBQUssQ0FBQztJQUNsRHlDLFFBQVEsR0FBRzRHLE1BQU0sQ0FBQ25KLEtBQUs7SUFDdkJnUixZQUFZLEdBQUc3SCxNQUFNLENBQUMvTCxTQUFTO0VBQ2pDLENBQUMsTUFBTTtJQUFBLElBQUE4VCxpQkFBQTtJQUNMO0lBQ0EsSUFBTUMsY0FBYyxJQUFBRCxpQkFBQSxHQUFHdFAsTUFBTSxDQUFDMk0sU0FBUyxjQUFBMkMsaUJBQUEsY0FBQUEsaUJBQUEsR0FBSS9QLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDdEIsS0FBSyxDQUFDcEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pFNkUsUUFBUSxHQUFHLElBQUlsTCxLQUFLLENBQUM7TUFDbkJxSixTQUFTLEVBQUUsSUFBSTtNQUNmcUksY0FBYyxFQUFFLElBQUk7TUFDcEJ6RyxNQUFNLEVBQUU2TztJQUNWLENBQUMsQ0FBQztJQUNGSCxZQUFZLEdBQUcsQ0FBQyxDQUFDO0VBQ25CO0VBRUEsSUFBSXhRLFFBQVEsR0FBQU4sYUFBQSxDQUFBQSxhQUFBLEtBQ1BKLEtBQUs7SUFDUjNDLE1BQU0sS0FBQW1LLE1BQUEsQ0FBQUMsa0JBQUEsQ0FBTXpILEtBQUssQ0FBQzNDLE1BQU0sSUFBRW9GLFFBQVEsRUFBQztJQUNuQ25GLFNBQVMsS0FBQWtLLE1BQUEsQ0FBQUMsa0JBQUEsQ0FBTXpILEtBQUssQ0FBQzFDLFNBQVMsSUFBRTRULFlBQVksRUFBQztJQUM3QztJQUNBMVQsVUFBVSxHQUFHaUYsUUFBUSxDQUFDdkgsRUFBRSxFQUFBc00sTUFBQSxDQUFBQyxrQkFBQSxDQUFLekgsS0FBSyxDQUFDeEMsVUFBVSxFQUFDO0lBQzlDcUIsU0FBUyxFQUFFN0ssc0JBQXNCLENBQUNnTSxLQUFLLENBQUNuQixTQUFTLEVBQUU0RCxRQUFRO0VBQUMsRUFDN0Q7RUFFRCxJQUFJQSxRQUFRLENBQUNwSCxNQUFNLENBQUN3RixTQUFTLENBQUN6RixPQUFPLEVBQUU7SUFDckNzRixRQUFRLEdBQUdJLHFCQUFxQixDQUFDSixRQUFRLENBQUM7RUFDNUM7RUFFQSxPQUFPQSxRQUFRO0FBQ2pCLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBUzRRLGtCQUFrQkEsQ0FDaEN0UixLQUFRLEVBQUF1UixLQUFBLEVBRUw7RUFBQSxJQURGclcsRUFBRSxHQUFBcVcsS0FBQSxDQUFGclcsRUFBRTtFQUVILElBQU1pRixHQUFHLEdBQUdxUixNQUFNLENBQUNDLFFBQVEsQ0FBQ3ZXLEVBQUUsQ0FBQztFQUMzQjtFQUNBc1csTUFBTSxDQUFDdFcsRUFBRSxDQUFDLEdBQ1Y4RSxLQUFLLENBQUMzQyxNQUFNLENBQUN3RixTQUFTLENBQUMsVUFBQVAsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ3BILEVBQUUsS0FBS0EsRUFBRTtFQUFBLEVBQUM7RUFDNUMsSUFBSWlGLEdBQUcsR0FBRyxDQUFDLElBQUlBLEdBQUcsSUFBSUgsS0FBSyxDQUFDM0MsTUFBTSxDQUFDc0QsTUFBTSxFQUFFO0lBQ3pDO0lBQ0E3TyxPQUFPLENBQUNxZixJQUFJLDZDQUFBM0osTUFBQSxDQUE2Q3RNLEVBQUUsQ0FBRSxDQUFDO0lBQzlELE9BQU84RSxLQUFLO0VBQ2Q7RUFFQSxJQUFPM0MsTUFBTSxHQUErQzJDLEtBQUssQ0FBMUQzQyxNQUFNO0lBQUVDLFNBQVMsR0FBb0MwQyxLQUFLLENBQWxEMUMsU0FBUztJQUFFRSxVQUFVLEdBQXdCd0MsS0FBSyxDQUF2Q3hDLFVBQVU7SUFBRWtCLE9BQU8sR0FBZXNCLEtBQUssQ0FBM0J0QixPQUFPO0lBQUVELFNBQVMsR0FBSXVCLEtBQUssQ0FBbEJ2QixTQUFTO0VBQ3hELElBQU1pVCxhQUFhLEdBQUdyVSxNQUFNLENBQUM4QyxHQUFHLENBQUM7RUFDakMsSUFBTU8sUUFBUSxHQUFBTixhQUFBLENBQUFBLGFBQUEsS0FDVEosS0FBSztJQUNSM0MsTUFBTSxFQUFFMUYsYUFBYSxDQUFDK1osYUFBYSxDQUFDeFcsRUFBRSxDQUFDLENBQUNtQyxNQUFNLENBQUM7SUFDL0NDLFNBQVMsRUFBRXZGLG9CQUFvQixDQUFDb0ksR0FBRyxDQUFDLENBQUM3QyxTQUFTLENBQUM7SUFDL0NFLFVBQVUsRUFBRWhFLDJCQUEyQixDQUFDZ0UsVUFBVSxFQUFFa1UsYUFBYSxDQUFDeFcsRUFBRSxDQUFDO0lBQ3JFd0QsT0FBTyxFQUFFZ1QsYUFBYSxDQUFDM0gsY0FBYyxDQUFDckwsT0FBTyxDQUFDLEdBQUdaLFNBQVMsR0FBR1ksT0FBTztJQUNwRUQsU0FBUyxFQUFFaVQsYUFBYSxDQUFDM0gsY0FBYyxDQUFDdEwsU0FBUyxDQUFDLEdBQUdYLFNBQVMsR0FBR1csU0FBUztJQUMxRUksU0FBUyxFQUFFMUosd0JBQXdCLENBQUM2SyxLQUFLLENBQUNuQixTQUFTLEVBQUU2UyxhQUFhO0lBQ2xFO0VBQUEsRUFDRDtFQUVELE9BQU81USxxQkFBcUIsQ0FBQ0osUUFBUSxDQUFDO0FBQ3hDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU1pUixtQkFBbUIsR0FBRyxTQUF0QkEsbUJBQW1CQSxDQUM5QjNSLEtBQWUsRUFBQTRSLEtBQUE7RUFBQSxJQUNkQyxLQUFLLEdBQUFELEtBQUEsQ0FBTEMsS0FBSztFQUFBLE9BQUF6UixhQUFBLENBQUFBLGFBQUEsS0FFSEosS0FBSztJQUNSeEMsVUFBVSxFQUFFcVU7RUFBSztBQUFBLENBQ2pCOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU1DLG9CQUFvQixHQUFHLFNBQXZCQSxvQkFBb0JBLENBQy9COVIsS0FBZSxFQUNmOEIsTUFBa0QsRUFDckM7RUFDYixJQUFNaVEsVUFBVSxHQUFHelksZ0JBQWdCLENBQUN3SSxNQUFNLENBQUM7RUFDM0MsSUFBSWtRLGFBQWEsR0FBQXZLLGtCQUFBLENBQU96SCxLQUFLLENBQUN4QyxVQUFVLENBQUM7RUFFekMsSUFBSXNFLE1BQU0sQ0FBQ3RFLFVBQVUsRUFBRTtJQUNyQnNFLE1BQU0sQ0FBQ3RFLFVBQVUsQ0FBQytELE9BQU8sQ0FBQyxVQUFBc0UsT0FBTyxFQUFJO01BQ25DbU0sYUFBYSxHQUFHeFksMkJBQTJCLENBQUN3WSxhQUFhLEVBQUVuTSxPQUFpQixDQUFDO0lBQy9FLENBQUMsQ0FBQztFQUNKO0VBRUEsT0FBQXpGLGFBQUEsQ0FBQUEsYUFBQSxLQUNLSixLQUFLO0lBQ1J4QyxVQUFVLEVBQUVqRSwyQkFBMkIsQ0FBQ3lZLGFBQWEsRUFBRUQsVUFBVTtFQUFDO0FBRXRFLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTUUsdUJBQXVCLEdBQUcsU0FBMUJBLHVCQUF1QkEsQ0FDbENqUyxLQUFlLEVBQ2Y4QixNQUFxRCxFQUN4QztFQUNiLElBQU81RyxFQUFFLEdBQUk0RyxNQUFNLENBQVo1RyxFQUFFO0VBQ1QsSUFBTWdYLGtCQUFrQixHQUFHelksMkJBQTJCLENBQUN1RyxLQUFLLENBQUN4QyxVQUFVLEVBQUV0QyxFQUFFLENBQUM7RUFDNUUsSUFBSSxDQUFDZ1gsa0JBQWtCLEVBQUU7SUFDdkIsT0FBT2xTLEtBQUs7RUFDZDtFQUVBLElBQU1tUyxnQkFBZ0IsR0FBR3RZLGlCQUFpQixDQUFDcVksa0JBQWtCLENBQUMxVSxVQUFVLENBQUM7RUFDekUsSUFBSWtELFFBQVEsR0FBQU4sYUFBQSxLQUFPSixLQUFLLENBQUM7RUFFekJtUyxnQkFBZ0IsQ0FBQzVRLE9BQU8sQ0FBQyxVQUFBc0UsT0FBTyxFQUFJO0lBQ2xDLElBQU0xRixHQUFHLEdBQUdPLFFBQVEsQ0FBQ3JELE1BQU0sQ0FBQ3dGLFNBQVMsQ0FBQyxVQUFBUCxDQUFDO01BQUEsT0FBSUEsQ0FBQyxDQUFDcEgsRUFBRSxLQUFLMkssT0FBTztJQUFBLEVBQUM7SUFDNUQsSUFBSTFGLEdBQUcsSUFBSSxDQUFDLEVBQUU7TUFDWk8sUUFBUSxHQUFHNFEsa0JBQWtCLENBQUM1USxRQUFRLEVBQUU7UUFBQ3hGLEVBQUUsRUFBRTJLO01BQU8sQ0FBQyxDQUFDO0lBQ3hEO0VBQ0YsQ0FBQyxDQUFDO0VBRUYsSUFBTW1NLGFBQWEsR0FBR3hZLDJCQUEyQixDQUFDa0gsUUFBUSxDQUFDbEQsVUFBVSxFQUFFMFUsa0JBQWtCLENBQUM7RUFDMUYsT0FBQTlSLGFBQUEsQ0FBQUEsYUFBQSxLQUNLTSxRQUFRO0lBQ1hsRCxVQUFVLEVBQUV3VTtFQUFhO0FBRTdCLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTUksdUJBQXVCLEdBQUcsU0FBMUJBLHVCQUF1QkEsQ0FDbENwUyxLQUFlLEVBQ2Y4QixNQUFxRCxFQUN4QztFQUNiLElBQU81RyxFQUFFLEdBQWE0RyxNQUFNLENBQXJCNUcsRUFBRTtJQUFFbVgsT0FBTyxHQUFJdlEsTUFBTSxDQUFqQnVRLE9BQU87RUFDbEIsSUFBTU4sVUFBVSxHQUFHdFksMkJBQTJCLENBQUN1RyxLQUFLLENBQUN4QyxVQUFVLEVBQUV0QyxFQUFFLENBQUM7RUFDcEUsSUFBSSxDQUFDNlcsVUFBVSxFQUFFO0lBQ2YsT0FBTy9SLEtBQUs7RUFDZDtFQUVBLElBQUlVLFFBQVEsR0FBQU4sYUFBQSxLQUFPSixLQUFLLENBQUM7RUFFekIsSUFBSXFTLE9BQU8sQ0FBQzdVLFVBQVUsRUFBRTtJQUN0QmtELFFBQVEsQ0FBQ2xELFVBQVUsTUFBQWdLLE1BQUEsQ0FBQUMsa0JBQUEsQ0FBT3NLLFVBQVUsQ0FBQ3ZVLFVBQVUsR0FBQWlLLGtCQUFBLENBQUsvRyxRQUFRLENBQUNsRCxVQUFVLEVBQUM7SUFDeEU2VSxPQUFPLENBQUM3VSxVQUFVLENBQUMrRCxPQUFPLENBQUMsVUFBQXNFLE9BQU8sRUFBSTtNQUNwQ25GLFFBQVEsQ0FBQ2xELFVBQVUsR0FBR2hFLDJCQUEyQixDQUMvQ2tILFFBQVEsQ0FBQ2xELFVBQVUsRUFDbkJxSSxPQUNGLENBQUM7SUFDSCxDQUFDLENBQUM7RUFDSjtFQUVBLElBQU15TSxhQUFhLEdBQUFsUyxhQUFBLENBQUFBLGFBQUEsS0FDZDJSLFVBQVUsR0FDVk0sT0FBTyxDQUNYO0VBRUQsSUFBSUMsYUFBYSxDQUFDMVIsU0FBUyxLQUFLbVIsVUFBVSxDQUFDblIsU0FBUyxFQUFFO0lBQ3BELElBQU0yUixRQUFRLEdBQUcxWSxpQkFBaUIsQ0FBQ3lZLGFBQWEsQ0FBQzlVLFVBQVUsQ0FBQztJQUM1RGtELFFBQVEsR0FBR0EsUUFBUSxDQUFDckQsTUFBTSxDQUFDd08sTUFBTSxDQUFDLFVBQUMyRyxHQUFHLEVBQUV0UyxLQUFLLEVBQUs7TUFDaEQsSUFBSXFTLFFBQVEsQ0FBQ2xMLFFBQVEsQ0FBQ25ILEtBQUssQ0FBQ2hGLEVBQUUsQ0FBQyxFQUFFO1FBQy9CLE9BQU9vSix3QkFBd0IsQ0FBQ2tPLEdBQUcsRUFBRTtVQUNuQ3BRLFFBQVEsRUFBRWxDLEtBQUs7VUFDZjJFLFNBQVMsRUFBRTtZQUFDakUsU0FBUyxFQUFFMFIsYUFBYSxDQUFDMVI7VUFBUztRQUNoRCxDQUFDLENBQUM7TUFDSjtNQUNBLE9BQU80UixHQUFHO0lBQ1osQ0FBQyxFQUFFOVIsUUFBUSxDQUFDO0VBQ2Q7RUFFQSxJQUFNc1IsYUFBYSxHQUFHcFksNEJBQTRCLENBQUM4RyxRQUFRLENBQUNsRCxVQUFVLEVBQUU4VSxhQUFhLENBQUM7RUFDdEYsT0FBQWxTLGFBQUEsQ0FBQUEsYUFBQSxLQUNLTSxRQUFRO0lBQ1hsRCxVQUFVLEVBQUV3VTtFQUFhO0FBRTdCLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTVMsMkJBQTJCLEdBQUcsU0FBOUJBLDJCQUEyQkEsQ0FDdEN6UyxLQUFlLEVBQ2Y4QixNQUF5RCxFQUM1QztFQUNiLElBQU80USxZQUFZLEdBQWE1USxNQUFNLENBQS9CNFEsWUFBWTtJQUFFN00sT0FBTyxHQUFJL0QsTUFBTSxDQUFqQitELE9BQU87RUFDNUIsSUFBTWtNLFVBQVUsR0FBR3RZLDJCQUEyQixDQUFDdUcsS0FBSyxDQUFDeEMsVUFBVSxFQUFFa1YsWUFBWSxDQUFDO0VBQzlFLElBQU14UyxLQUFLLEdBQUdGLEtBQUssQ0FBQzNDLE1BQU0sQ0FBQ2dGLElBQUksQ0FBQyxVQUFBQyxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDcEgsRUFBRSxLQUFLMkssT0FBTztFQUFBLEVBQUM7RUFDdEQsSUFBSSxDQUFDa00sVUFBVSxJQUFJLENBQUM3UixLQUFLLEVBQUU7SUFDekIsT0FBT0YsS0FBSztFQUNkO0VBRUEsSUFBSStSLFVBQVUsQ0FBQ3ZVLFVBQVUsQ0FBQzZFLElBQUksQ0FBQyxVQUFBc1EsS0FBSztJQUFBLE9BQUlBLEtBQUssS0FBSzlNLE9BQU87RUFBQSxFQUFDLEVBQUU7SUFDMUQsT0FBTzdGLEtBQUs7RUFDZDtFQUVBLElBQU00UyxrQkFBa0IsR0FBR3JaLDJCQUEyQixDQUFDd1ksVUFBVSxDQUFDdlUsVUFBVSxFQUFFcUksT0FBTyxDQUFDO0VBQ3RGLE9BQU91TSx1QkFBdUIsQ0FBQ3BTLEtBQUssRUFBRTtJQUNwQzlFLEVBQUUsRUFBRXdYLFlBQVk7SUFDaEJMLE9BQU8sRUFBRTtNQUFDN1UsVUFBVSxFQUFFb1Y7SUFBa0I7RUFDMUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNQyxnQ0FBZ0MsR0FBRyxTQUFuQ0EsZ0NBQWdDQSxDQUMzQzdTLEtBQWUsRUFDZjhCLE1BQThELEVBQ2pEO0VBQ2IsSUFBTzRRLFlBQVksR0FBYTVRLE1BQU0sQ0FBL0I0USxZQUFZO0lBQUU3TSxPQUFPLEdBQUkvRCxNQUFNLENBQWpCK0QsT0FBTztFQUM1QixJQUFNa00sVUFBVSxHQUFHdFksMkJBQTJCLENBQUN1RyxLQUFLLENBQUN4QyxVQUFVLEVBQUVrVixZQUFZLENBQUM7RUFDOUUsSUFBSSxDQUFDWCxVQUFVLEVBQUU7SUFDZixPQUFPL1IsS0FBSztFQUNkO0VBRUEsSUFBTThTLGtCQUFrQixHQUFHdFosMkJBQTJCLENBQUN1WSxVQUFVLENBQUN2VSxVQUFVLEVBQUVxSSxPQUFPLENBQUM7RUFDdEYsT0FBT3VNLHVCQUF1QixDQUFDcFMsS0FBSyxFQUFFO0lBQ3BDOUUsRUFBRSxFQUFFd1gsWUFBWTtJQUNoQkwsT0FBTyxFQUFFO01BQUM3VSxVQUFVLEVBQUVzVjtJQUFrQjtFQUMxQyxDQUFDLENBQUM7QUFDSixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTUMsNEJBQTRCLEdBQUcsU0FBL0JBLDRCQUE0QkEsQ0FDdkMvUyxLQUFlLEVBQ2Y4QixNQUEwRCxFQUM3QztFQUNiLElBQU9rUixhQUFhLEdBQXFFbFIsTUFBTSxDQUF4RmtSLGFBQWE7SUFBRUMsa0JBQWtCLEdBQWlEblIsTUFBTSxDQUF6RW1SLGtCQUFrQjtJQUFFQyxrQkFBa0IsR0FBNkJwUixNQUFNLENBQXJEb1Isa0JBQWtCO0lBQUVDLHVCQUF1QixHQUFJclIsTUFBTSxDQUFqQ3FSLHVCQUF1QjtFQUVyRixJQUFJLENBQUNELGtCQUFrQixJQUFJLENBQUNDLHVCQUF1QixFQUFFO0lBQ25ELElBQU1DLFdBQVcsR0FBR3BULEtBQUssQ0FBQ3hDLFVBQVUsQ0FBQ3FGLFNBQVMsQ0FBQyxVQUFBOFAsS0FBSztNQUFBLE9BQ2xELE9BQU9BLEtBQUssS0FBSyxRQUFRLEdBQUdBLEtBQUssS0FBS0ssYUFBYSxHQUFHTCxLQUFLLENBQUN6WCxFQUFFLEtBQUs4WCxhQUFhO0lBQUEsQ0FDbEYsQ0FBQztJQUNELElBQUlDLGtCQUFrQixJQUFJRyxXQUFXLEtBQUssQ0FBQyxDQUFDLEVBQUU7TUFDNUMsSUFBTUMsZ0JBQWdCLEdBQUdyVCxLQUFLLENBQUN4QyxVQUFVLENBQUNxRixTQUFTLENBQUMsVUFBQThQLEtBQUs7UUFBQSxPQUN2RCxPQUFPQSxLQUFLLEtBQUssUUFBUSxHQUFHQSxLQUFLLEtBQUtNLGtCQUFrQixHQUFHTixLQUFLLENBQUN6WCxFQUFFLEtBQUsrWCxrQkFBa0I7TUFBQSxDQUM1RixDQUFDO01BQ0QsSUFBSUksZ0JBQWdCLEtBQUssQ0FBQyxDQUFDLEVBQUU7UUFDM0IsSUFBTXJCLGFBQWEsR0FBR3BjLFNBQVMsQ0FBQ29LLEtBQUssQ0FBQ3hDLFVBQVUsRUFBRTRWLFdBQVcsRUFBRUMsZ0JBQWdCLENBQUM7UUFDaEYsT0FBQWpULGFBQUEsQ0FBQUEsYUFBQSxLQUFXSixLQUFLO1VBQUV4QyxVQUFVLEVBQUV3VTtRQUFhO01BQzdDO0lBQ0Y7RUFDRjtFQUVBLElBQUlrQixrQkFBa0IsSUFBSSxDQUFDQyx1QkFBdUIsRUFBRTtJQUNsRCxJQUFJbkIsY0FBYSxHQUFHeFksMkJBQTJCLENBQUN3RyxLQUFLLENBQUN4QyxVQUFVLEVBQUV3VixhQUFhLENBQUM7SUFDaEYsSUFBSUMsa0JBQWtCLEVBQUU7TUFDdEIsSUFBTUksaUJBQWdCLEdBQUdyQixjQUFhLENBQUNuUCxTQUFTLENBQUMsVUFBQThQLEtBQUs7UUFBQSxPQUNwRCxPQUFPQSxLQUFLLEtBQUssUUFBUSxHQUFHQSxLQUFLLEtBQUtNLGtCQUFrQixHQUFHLEtBQUs7TUFBQSxDQUNsRSxDQUFDO01BQ0RqQixjQUFhLENBQUNwSyxNQUFNLENBQUN5TCxpQkFBZ0IsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUdBLGlCQUFnQixFQUFFLENBQUMsRUFBRUwsYUFBYSxDQUFDO0lBQ3hGLENBQUMsTUFBTTtNQUNMaEIsY0FBYSxNQUFBeEssTUFBQSxDQUFBQyxrQkFBQSxDQUFPdUssY0FBYSxJQUFFZ0IsYUFBYSxFQUFDO0lBQ25EO0lBQ0EsT0FBQTVTLGFBQUEsQ0FBQUEsYUFBQSxLQUFXSixLQUFLO01BQUV4QyxVQUFVLEVBQUV3VTtJQUFhO0VBQzdDO0VBRUEsSUFBSWtCLGtCQUFrQixJQUFJQyx1QkFBdUIsRUFBRTtJQUNqRCxJQUFJRCxrQkFBa0IsS0FBS0MsdUJBQXVCLEVBQUU7TUFDbEQsSUFBTXBCLFVBQVUsR0FBR3RZLDJCQUEyQixDQUFDdUcsS0FBSyxDQUFDeEMsVUFBVSxFQUFFMFYsa0JBQWtCLENBQUM7TUFDcEYsSUFBSSxDQUFDbkIsVUFBVSxFQUFFLE9BQU8vUixLQUFLO01BQzdCLElBQU1vVCxZQUFXLEdBQUdyQixVQUFVLENBQUN2VSxVQUFVLENBQUNxRixTQUFTLENBQUMsVUFBQThQLEtBQUs7UUFBQSxPQUN2RCxPQUFPQSxLQUFLLEtBQUssUUFBUSxHQUFHQSxLQUFLLEtBQUtLLGFBQWEsR0FBR0wsS0FBSyxDQUFDelgsRUFBRSxLQUFLOFgsYUFBYTtNQUFBLENBQ2xGLENBQUM7TUFDRCxJQUFJSSxZQUFXLEtBQUssQ0FBQyxDQUFDLEVBQUUsT0FBT3BULEtBQUs7TUFDcEMsSUFBSWlULGtCQUFrQixFQUFFO1FBQ3RCLElBQU1LLFNBQVMsR0FBR3ZCLFVBQVUsQ0FBQ3ZVLFVBQVUsQ0FBQ3FGLFNBQVMsQ0FBQyxVQUFBOFAsS0FBSztVQUFBLE9BQ3JELE9BQU9BLEtBQUssS0FBSyxRQUFRLEdBQUdBLEtBQUssS0FBS00sa0JBQWtCLEdBQUdOLEtBQUssQ0FBQ3pYLEVBQUUsS0FBSytYLGtCQUFrQjtRQUFBLENBQzVGLENBQUM7UUFDRCxJQUFJSyxTQUFTLEtBQUssQ0FBQyxDQUFDLEVBQUUsT0FBT3RULEtBQUs7UUFDbEMsSUFBTTRTLGtCQUFrQixHQUFHaGQsU0FBUyxDQUFDbWMsVUFBVSxDQUFDdlUsVUFBVSxFQUFFNFYsWUFBVyxFQUFFRSxTQUFTLENBQUM7UUFDbkYsSUFBTXRCLGVBQWEsR0FBR3BZLDRCQUE0QixDQUFDb0csS0FBSyxDQUFDeEMsVUFBVSxFQUFBNEMsYUFBQSxDQUFBQSxhQUFBLEtBQzlEMlIsVUFBVTtVQUNidlUsVUFBVSxFQUFFb1Y7UUFBa0IsRUFDL0IsQ0FBQztRQUNGLE9BQUF4UyxhQUFBLENBQUFBLGFBQUEsS0FBV0osS0FBSztVQUFFeEMsVUFBVSxFQUFFd1U7UUFBYTtNQUM3QztNQUNBLE9BQU9oUyxLQUFLO0lBQ2Q7O0lBRUE7SUFDQSxJQUFNeEMsVUFBVSxHQUFHaEUsMkJBQTJCLENBQUN3RyxLQUFLLENBQUN4QyxVQUFVLEVBQUV3VixhQUFhLENBQUM7SUFDL0UsSUFBSXRTLFFBQVEsR0FBRytSLDJCQUEyQixDQUFBclMsYUFBQSxDQUFBQSxhQUFBLEtBQ3BDSixLQUFLO01BQUV4QyxVQUFVLEVBQVZBO0lBQVUsSUFDckI7TUFBQ3FJLE9BQU8sRUFBRW1OLGFBQWE7TUFBRU4sWUFBWSxFQUFFUztJQUF1QixDQUNoRSxDQUFDO0lBRUQsSUFBSUYsa0JBQWtCLEVBQUU7TUFDdEIsSUFBTWxCLFdBQVUsR0FBR3RZLDJCQUEyQixDQUFDaUgsUUFBUSxDQUFDbEQsVUFBVSxFQUFFMlYsdUJBQXVCLENBQUM7TUFDNUYsSUFBSSxDQUFDcEIsV0FBVSxFQUFFLE9BQU8vUixLQUFLO01BQzdCLElBQU1vVCxhQUFXLEdBQUdyQixXQUFVLENBQUN2VSxVQUFVLENBQUNxRixTQUFTLENBQUMsVUFBQThQLEtBQUs7UUFBQSxPQUFJQSxLQUFLLEtBQUtLLGFBQWE7TUFBQSxFQUFDO01BQ3JGLElBQU1NLFVBQVMsR0FBR3ZCLFdBQVUsQ0FBQ3ZVLFVBQVUsQ0FBQ3FGLFNBQVMsQ0FBQyxVQUFBOFAsS0FBSztRQUFBLE9BQUlBLEtBQUssS0FBS00sa0JBQWtCO01BQUEsRUFBQztNQUN4RixJQUFJRyxhQUFXLEtBQUssQ0FBQyxDQUFDLElBQUlFLFVBQVMsS0FBSyxDQUFDLENBQUMsRUFBRTtRQUMxQyxJQUFNVixtQkFBa0IsR0FBR2hkLFNBQVMsQ0FBQ21jLFdBQVUsQ0FBQ3ZVLFVBQVUsRUFBRTRWLGFBQVcsRUFBRUUsVUFBUyxDQUFDO1FBQ25GNVMsUUFBUSxHQUFBTixhQUFBLENBQUFBLGFBQUEsS0FDSE0sUUFBUTtVQUNYbEQsVUFBVSxFQUFFNUQsNEJBQTRCLENBQUM4RyxRQUFRLENBQUNsRCxVQUFVLEVBQUE0QyxhQUFBLENBQUFBLGFBQUEsS0FDdkQyUixXQUFVO1lBQ2J2VSxVQUFVLEVBQUVvVjtVQUFrQixFQUMvQjtRQUFDLEVBQ0g7TUFDSDtJQUNGO0lBQ0EsT0FBT2xTLFFBQVE7RUFDakI7RUFFQSxJQUFJLENBQUN3UyxrQkFBa0IsSUFBSUMsdUJBQXVCLEVBQUU7SUFDbEQsSUFBTTNWLFdBQVUsR0FBR2hFLDJCQUEyQixDQUFDd0csS0FBSyxDQUFDeEMsVUFBVSxFQUFFd1YsYUFBYSxDQUFDO0lBQy9FLE9BQU9QLDJCQUEyQixDQUFBclMsYUFBQSxDQUFBQSxhQUFBLEtBQzVCSixLQUFLO01BQUV4QyxVQUFVLEVBQVZBO0lBQVUsSUFDckI7TUFBQ3FJLE9BQU8sRUFBRW1OLGFBQWE7TUFBRU4sWUFBWSxFQUFFUztJQUF1QixDQUNoRSxDQUFDO0VBQ0g7RUFFQSxPQUFPblQsS0FBSztBQUNkLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTXVULHFCQUFxQixHQUFHLFNBQXhCQSxxQkFBcUJBLENBQ2hDdlQsS0FBZSxFQUFBd1QsS0FBQSxFQUVGO0VBQUEsSUFEWnRZLEVBQUUsR0FBQXNZLEtBQUEsQ0FBRnRZLEVBQUU7RUFFSCxJQUFNaUYsR0FBRyxHQUFHcVIsTUFBTSxDQUFDQyxRQUFRLENBQUN2VyxFQUFFLENBQUM7RUFDM0I7RUFDQXNXLE1BQU0sQ0FBQ3RXLEVBQUUsQ0FBQyxHQUNWOEUsS0FBSyxDQUFDM0MsTUFBTSxDQUFDd0YsU0FBUyxDQUFDLFVBQUFQLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUNwSCxFQUFFLEtBQUtBLEVBQUU7RUFBQSxFQUFDO0VBQzVDLElBQUlpRixHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUNILEtBQUssQ0FBQzNDLE1BQU0sQ0FBQzhDLEdBQUcsQ0FBQyxFQUFFO0lBQ2pDck8sT0FBTyxDQUFDcWYsSUFBSSxVQUFBM0osTUFBQSxDQUFVckgsR0FBRyw2QkFBMEIsQ0FBQztJQUNwRCxPQUFPSCxLQUFLO0VBQ2Q7RUFFQSxJQUFPM0MsTUFBTSxHQUFJMkMsS0FBSyxDQUFmM0MsTUFBTTtFQUNiLElBQU1vVyxRQUFRLEdBQUdwVyxNQUFNLENBQUM4QyxHQUFHLENBQUM7RUFFNUIsSUFBTXVULHFCQUFxQixHQUFHL1osd0JBQXdCLENBQUNxRyxLQUFLLENBQUN4QyxVQUFVLEVBQUVpVyxRQUFRLENBQUN2WSxFQUFFLENBQUM7RUFDckYsSUFBSXlZLFFBQVEsY0FBQW5NLE1BQUEsQ0FBY2lNLFFBQVEsQ0FBQ3BZLE1BQU0sQ0FBQ0YsS0FBSyxDQUFFO0VBQ2pELElBQUl5WSxPQUFPLEdBQUcsQ0FBQztFQUNmO0VBQ0EsT0FBT3ZXLE1BQU0sQ0FBQ2dGLElBQUksQ0FBQyxVQUFBQyxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDakgsTUFBTSxDQUFDRixLQUFLLEtBQUt3WSxRQUFRO0VBQUEsRUFBQyxFQUFFO0lBQ3BEQSxRQUFRLGNBQUFuTSxNQUFBLENBQWNpTSxRQUFRLENBQUNwWSxNQUFNLENBQUNGLEtBQUssT0FBQXFNLE1BQUEsQ0FBSSxFQUFFb00sT0FBTyxDQUFFO0VBQzVEOztFQUVBO0VBQ0EsSUFBTTFMLFdBQVcsR0FBRzNQLGNBQWMsQ0FBQ2tiLFFBQVEsRUFBRXpULEtBQUssQ0FBQ1AsTUFBTSxDQUFDOztFQUUxRDtFQUNBLElBQUksRUFBQ3lJLFdBQVcsYUFBWEEsV0FBVyxlQUFYQSxXQUFXLENBQUU3TSxNQUFNLEdBQUU7SUFDeEIsT0FBTzJFLEtBQUs7RUFDZDtFQUNBa0ksV0FBVyxDQUFDN00sTUFBTSxDQUFDRixLQUFLLEdBQUd3WSxRQUFRO0VBQ25DekwsV0FBVyxDQUFDaE4sRUFBRSxHQUFHeEYsY0FBYyxDQUFDNEIsZUFBZSxDQUFDOztFQUVoRDtFQUNBLElBQUlvTCxTQUFTLEdBQUd1TyxlQUFlLENBQUNqUixLQUFLLEVBQUU7SUFBQzNFLE1BQU0sRUFBRTZNO0VBQVcsQ0FBQyxDQUFDO0VBQzdEO0VBQ0EsSUFBTXpGLFFBQVEsR0FBR0MsU0FBUyxDQUFDckYsTUFBTSxDQUFDcUYsU0FBUyxDQUFDckYsTUFBTSxDQUFDc0QsTUFBTSxHQUFHLENBQUMsQ0FBQzs7RUFFOUQ7RUFDQSxJQUFNa1QsV0FBVyxHQUFHbmEsdUJBQXVCLENBQUNzRyxLQUFLLENBQUN4QyxVQUFVLEVBQUVpVyxRQUFRLENBQUN2WSxFQUFFLENBQUM7RUFFMUUsSUFBSTJZLFdBQVcsRUFBRTtJQUNmO0lBQ0EsSUFBTUMsMEJBQTBCLEdBQUdwUixTQUFTLENBQUNsRixVQUFVLENBQUNzSixLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLElBQU1pTixVQUFVLEdBQUdGLFdBQVcsQ0FBQ3JXLFVBQVUsQ0FBQ3FGLFNBQVMsQ0FBQyxVQUFBdUIsQ0FBQztNQUFBLE9BQUlBLENBQUMsS0FBS3FQLFFBQVEsQ0FBQ3ZZLEVBQUU7SUFBQSxFQUFDO0lBQzNFLElBQU0wWCxrQkFBa0IsR0FBR3hlLFdBQVcsQ0FBQ3lmLFdBQVcsQ0FBQ3JXLFVBQVUsRUFBRXVXLFVBQVUsRUFBRXRSLFFBQVEsQ0FBQ3ZILEVBQUUsQ0FBQztJQUN2RixJQUFNOFksWUFBWSxHQUFBNVQsYUFBQSxDQUFBQSxhQUFBLEtBQU95VCxXQUFXO01BQUVyVyxVQUFVLEVBQUVvVjtJQUFrQixFQUFDO0lBQ3JFLElBQU1aLGFBQWEsR0FBR3BZLDRCQUE0QixDQUNoRGthLDBCQUEwQixFQUMxQkUsWUFDRixDQUFDO0lBQ0R0UixTQUFTLEdBQUdpUCxtQkFBbUIsQ0FBQ2pQLFNBQVMsRUFBRTtNQUFDbVAsS0FBSyxFQUFFRztJQUFhLENBQUMsQ0FBQztFQUNwRSxDQUFDLE1BQU07SUFDTDtJQUNBLElBQU1BLGVBQWEsR0FBRzVkLFdBQVcsQ0FDL0JzTyxTQUFTLENBQUNsRixVQUFVLENBQUNzSixLQUFLLENBQUMsQ0FBQyxFQUFFcEUsU0FBUyxDQUFDbEYsVUFBVSxDQUFDbUQsTUFBTSxDQUFDLEVBQzFEK1MscUJBQXFCLEVBQ3JCalIsUUFBUSxDQUFDdkgsRUFDWCxDQUFDO0lBQ0R3SCxTQUFTLEdBQUdpUCxtQkFBbUIsQ0FBQ2pQLFNBQVMsRUFBRTtNQUFDbVAsS0FBSyxFQUFFRztJQUFhLENBQUMsQ0FBQztFQUNwRTtFQUVBLE9BQU9sUixxQkFBcUIsQ0FBQzRCLFNBQVMsQ0FBQztBQUN6QyxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU11UixnQkFBZ0IsR0FBRyxTQUFuQkEsZ0JBQWdCQSxDQUMzQmpVLEtBQWUsRUFDZjhCLE1BQThDLEVBQ2pDO0VBQUEsSUFBQW9TLGNBQUEsRUFBQUMsZUFBQSxFQUFBQyxlQUFBO0VBQ2IsSUFDRSxFQUFBRixjQUFBLEdBQUFwUyxNQUFNLENBQUN6RyxNQUFNLGNBQUE2WSxjQUFBLHVCQUFiQSxjQUFBLENBQWV2UixJQUFJLE1BQUt0TSx1QkFBdUIsQ0FBQ3NNLElBQUksSUFDcEQzQyxLQUFLLENBQUNqQyxPQUFPLENBQUMyRixJQUFJLENBQUMsVUFBQTJRLE1BQU07SUFBQSxPQUFJQSxNQUFNLENBQUMxUixJQUFJLEtBQUt0TSx1QkFBdUIsQ0FBQ3NNLElBQUk7RUFBQSxFQUFDLEVBQzFFO0lBQ0E3USxPQUFPLENBQUNxZixJQUFJLDRCQUFBM0osTUFBQSxDQUE0Qm5SLHVCQUF1QixDQUFDNlEsSUFBSSxZQUFTLENBQUM7SUFDOUUsT0FBT2xILEtBQUs7RUFDZDtFQUVBLElBQ0UsRUFBQW1VLGVBQUEsR0FBQXJTLE1BQU0sQ0FBQ3pHLE1BQU0sY0FBQThZLGVBQUEsdUJBQWJBLGVBQUEsQ0FBZXhSLElBQUksTUFBS3JNLGlCQUFpQixJQUN6QzBKLEtBQUssQ0FBQ2pDLE9BQU8sQ0FBQzJGLElBQUksQ0FDaEIsVUFBQTJRLE1BQU07SUFBQSxPQUFJQSxNQUFNLENBQUMxUixJQUFJLEtBQUtyTSxpQkFBaUIsSUFBSStkLE1BQU0sQ0FBQzFSLElBQUksS0FBS3BNLGdCQUFnQjtFQUFBLENBQ2pGLENBQUMsRUFDRDtJQUNBekUsT0FBTyxDQUFDcWYsSUFBSSxDQUFDLG9DQUFvQyxDQUFDO0lBQ2xELE9BQU9uUixLQUFLO0VBQ2Q7RUFFQSxJQUNFLEVBQUFvVSxlQUFBLEdBQUF0UyxNQUFNLENBQUN6RyxNQUFNLGNBQUErWSxlQUFBLHVCQUFiQSxlQUFBLENBQWV6UixJQUFJLE1BQUtwTSxnQkFBZ0IsSUFDeEN5SixLQUFLLENBQUNqQyxPQUFPLENBQUMyRixJQUFJLENBQ2hCLFVBQUEyUSxNQUFNO0lBQUEsT0FBSUEsTUFBTSxDQUFDMVIsSUFBSSxLQUFLcE0sZ0JBQWdCLElBQUk4ZCxNQUFNLENBQUMxUixJQUFJLEtBQUtyTSxpQkFBaUI7RUFBQSxDQUNqRixDQUFDLEVBQ0Q7SUFDQXhFLE9BQU8sQ0FBQ3FmLElBQUksQ0FBQyxvQ0FBb0MsQ0FBQztJQUNsRCxPQUFPblIsS0FBSztFQUNkO0VBRUEsSUFBTXNVLFNBQVMsR0FBR3paLFlBQVksQ0FBQ2lILE1BQU0sQ0FBQ3pHLE1BQU0sQ0FBQzs7RUFFN0M7RUFDQTJFLEtBQUssQ0FBQ2pDLE9BQU8sQ0FBQ3dELE9BQU8sQ0FBQyxVQUFBOFMsTUFBTTtJQUFBLE9BQUlBLE1BQU0sQ0FBQ0UsUUFBUSxDQUFDO01BQUN0TCxjQUFjLEVBQUU7SUFBSyxDQUFDLENBQUM7RUFBQSxFQUFDO0VBRXpFLElBQU1sTCxPQUFPLE1BQUF5SixNQUFBLENBQUFDLGtCQUFBLENBQU96SCxLQUFLLENBQUNqQyxPQUFPLElBQUV1VyxTQUFTLEVBQUM7RUFDN0MsSUFBTXRXLFdBQVcsR0FBRzlELGNBQWMsQ0FBQzZELE9BQU8sR0FBR3VXLFNBQVMsQ0FBQ3BaLEVBQUUsRUFBQXNNLE1BQUEsQ0FBQUMsa0JBQUEsQ0FBS3pILEtBQUssQ0FBQ2hDLFdBQVcsRUFBQyxDQUFDO0VBRWpGLE9BQUFvQyxhQUFBLENBQUFBLGFBQUEsS0FDS0osS0FBSztJQUNSakMsT0FBTyxFQUFQQSxPQUFPO0lBQ1BDLFdBQVcsRUFBWEE7RUFBVztBQUVmLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTXdXLG1CQUFtQixHQUFHLFNBQXRCQSxtQkFBbUJBLENBQzlCeFUsS0FBZSxFQUFBeVUsTUFBQSxFQUVGO0VBQUEsSUFEWnZaLEVBQUUsR0FBQXVaLE1BQUEsQ0FBRnZaLEVBQUU7RUFFSCxJQUFNaUYsR0FBRyxHQUFHSCxLQUFLLENBQUNqQyxPQUFPLENBQUM4RSxTQUFTLENBQUMsVUFBQVAsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ3BILEVBQUUsS0FBS0EsRUFBRTtFQUFBLEVBQUM7RUFDckQsSUFBSWlGLEdBQUcsR0FBRyxDQUFDLElBQUlBLEdBQUcsSUFBSUgsS0FBSyxDQUFDakMsT0FBTyxDQUFDNEMsTUFBTSxFQUFFO0lBQzFDN08sT0FBTyxDQUFDcWYsSUFBSSwwQ0FBQTNKLE1BQUEsQ0FBMEN0TSxFQUFFLENBQUUsQ0FBQztJQUMzRCxPQUFPOEUsS0FBSztFQUNkO0VBRUEsSUFBT2pDLE9BQU8sR0FBaUJpQyxLQUFLLENBQTdCakMsT0FBTztJQUFFQyxXQUFXLEdBQUlnQyxLQUFLLENBQXBCaEMsV0FBVztFQUMzQixJQUFNMFcsY0FBYyxHQUFHM1csT0FBTyxDQUFDb0MsR0FBRyxDQUFDO0VBQ25DLE9BQUFDLGFBQUEsQ0FBQUEsYUFBQSxLQUNLSixLQUFLO0lBQ1I7SUFDQWpDLE9BQU8sRUFBRXBHLGFBQWEsQ0FBQytjLGNBQWMsQ0FBQ3haLEVBQUUsQ0FBQyxDQUFDNkMsT0FBTyxDQUFDO0lBQ2xEQyxXQUFXLEVBQUVBLFdBQVcsQ0FBQ21KLE1BQU0sQ0FBQyxVQUFBd04sUUFBUTtNQUFBLE9BQUlBLFFBQVEsS0FBS0QsY0FBYyxDQUFDeFosRUFBRTtJQUFBO0VBQUM7QUFFL0UsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNMFosb0JBQW9CLEdBQUcsU0FBdkJBLG9CQUFvQkEsQ0FDL0I1VSxLQUFlLEVBQUE2VSxNQUFBO0VBQUEsSUFDZGhELEtBQUssR0FBQWdELE1BQUEsQ0FBTGhELEtBQUs7RUFBQSxPQUFBelIsYUFBQSxDQUFBQSxhQUFBLEtBRUhKLEtBQUs7SUFDUmhDLFdBQVcsRUFBRTlELGNBQWMsQ0FBQzhGLEtBQUssQ0FBQ2pDLE9BQU8sRUFBQTBKLGtCQUFBLENBQU1vSyxLQUFLLENBQUM7RUFBQztBQUFBLENBQ3REOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU1pRCxtQkFBbUIsR0FBRyxTQUF0QkEsbUJBQW1CQSxDQUM5QjlVLEtBQWUsRUFBQStVLE1BQUEsRUFFRjtFQUFBLElBRFo3WixFQUFFLEdBQUE2WixNQUFBLENBQUY3WixFQUFFO0lBQUUwSixLQUFLLEdBQUFtUSxNQUFBLENBQUxuUSxLQUFLO0VBRVYsSUFBTXpFLEdBQUcsR0FBR0gsS0FBSyxDQUFDakMsT0FBTyxDQUFDOEUsU0FBUyxDQUFDLFVBQUFQLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUNwSCxFQUFFLEtBQUtBLEVBQUU7RUFBQSxFQUFDO0VBQ3JELElBQUlpRixHQUFHLEdBQUcsQ0FBQyxJQUFJQSxHQUFHLElBQUlILEtBQUssQ0FBQ2pDLE9BQU8sQ0FBQzRDLE1BQU0sRUFBRTtJQUMxQzdPLE9BQU8sQ0FBQ3FmLElBQUksMENBQUEzSixNQUFBLENBQTBDdE0sRUFBRSxDQUFFLENBQUM7SUFDM0QsT0FBTzhFLEtBQUs7RUFDZDtFQUVBLElBQUloQyxXQUFXLEdBQUdnQyxLQUFLLENBQUNoQyxXQUFXO0VBQ25DLElBQUk0RyxLQUFLLENBQUMxSixFQUFFLEtBQUs0QyxTQUFTLElBQUk4RyxLQUFLLENBQUMxSixFQUFFLEtBQUtBLEVBQUUsRUFBRTtJQUM3QyxJQUFNOFosSUFBSSxHQUFHaFYsS0FBSyxDQUFDakMsT0FBTyxDQUFDOEUsU0FBUyxDQUFDLFVBQUFQLENBQUM7TUFBQSxPQUFJQSxDQUFDLENBQUNwSCxFQUFFLEtBQUswSixLQUFLLENBQUMxSixFQUFFO0lBQUEsRUFBQztJQUM1RCxJQUFJOFosSUFBSSxJQUFJLENBQUMsRUFBRTtNQUNibGpCLE9BQU8sQ0FBQ3FmLElBQUksa0RBQUEzSixNQUFBLENBQWtEdE0sRUFBRSxDQUFFLENBQUM7TUFDbkUsT0FBTzhFLEtBQUs7SUFDZDtJQUVBaEMsV0FBVyxHQUFHQSxXQUFXLENBQUNxQyxHQUFHLENBQUMsVUFBQTRVLGFBQWE7TUFBQSxPQUN6Q0EsYUFBYSxLQUFLL1osRUFBRSxHQUFJMEosS0FBSyxDQUFDMUosRUFBRSxHQUFjK1osYUFBYTtJQUFBLENBQzdELENBQUM7RUFDSDtFQUVBLElBQU1DLFVBQVUsR0FBQXpOLGtCQUFBLENBQU96SCxLQUFLLENBQUNqQyxPQUFPLENBQUM7RUFDckNtWCxVQUFVLENBQUMvVSxHQUFHLENBQUMsQ0FBQ29VLFFBQVEsQ0FBQzNQLEtBQUssQ0FBQztFQUUvQixPQUFBeEUsYUFBQSxDQUFBQSxhQUFBLEtBQ0tKLEtBQUs7SUFDUmpDLE9BQU8sRUFBRW1YLFVBQVU7SUFDbkJsWCxXQUFXLEVBQVhBO0VBQVc7QUFFZixDQUFDOztBQUVEOztBQUVBLFNBQVNtWCxpQkFBaUJBLENBQUM5WixNQUErQixFQUFjO0VBQUEsSUFBQStaLFlBQUEsRUFBQUMsVUFBQSxFQUFBQyxpQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxpQkFBQSxFQUFBQyxtQkFBQSxFQUFBQyxhQUFBLEVBQUFDLGlCQUFBLEVBQUFDLGlCQUFBLEVBQUFDLGlCQUFBLEVBQUFDLGtCQUFBLEVBQUFDLHFCQUFBLEVBQUFDLFVBQUEsRUFBQUMsTUFBQSxFQUFBQyxXQUFBLEVBQUFDLE9BQUEsRUFBQUMsV0FBQSxFQUFBQyxPQUFBLEVBQUFDLGVBQUE7RUFDdEUsSUFBTUMsSUFBSSxJQUFBbkIsWUFBQSxHQUFHL1osTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQUVrYixJQUFJLGNBQUFuQixZQUFBLGNBQUFBLFlBQUEsR0FBSXRlLHVCQUF1QjtFQUNwRCxJQUFNMGYsSUFBSSxHQUFHO0lBQ1h0YixFQUFFLEdBQUFtYSxVQUFBLEdBQUVoYSxNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBRUgsRUFBRSxjQUFBbWEsVUFBQSxjQUFBQSxVQUFBLEdBQUkzZixjQUFjLENBQUMsQ0FBQyxDQUFDO0lBQ25DNmdCLElBQUksRUFBSkEsSUFBSTtJQUNKM1YsU0FBUyxHQUFBMFUsaUJBQUEsR0FBRWphLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFdUYsU0FBUyxjQUFBMFUsaUJBQUEsY0FBQUEsaUJBQUEsR0FBSSxJQUFJO0lBQ3BDbUIsUUFBUSxHQUFBbEIsZ0JBQUEsR0FBRWxhLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFb2IsUUFBUSxjQUFBbEIsZ0JBQUEsY0FBQUEsZ0JBQUEsR0FBSSxJQUFJO0lBQ2xDbUIsU0FBUyxHQUFBbEIsaUJBQUEsR0FBRW5hLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFcWIsU0FBUyxjQUFBbEIsaUJBQUEsY0FBQUEsaUJBQUEsR0FBSSxJQUFJO0lBQ3BDbUIsV0FBVyxHQUFBbEIsbUJBQUEsR0FBRXBhLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFc2IsV0FBVyxjQUFBbEIsbUJBQUEsY0FBQUEsbUJBQUEsR0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQXNCO0lBQ2hFdGEsS0FBSyxHQUFBdWEsYUFBQSxHQUFFcmEsTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQUVGLEtBQUssY0FBQXVhLGFBQUEsY0FBQUEsYUFBQSxHQUFJLGdCQUFnQjtJQUN4Q2tCLFNBQVMsR0FBQWpCLGlCQUFBLEdBQUV0YSxNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBRXViLFNBQVMsY0FBQWpCLGlCQUFBLGNBQUFBLGlCQUFBLEdBQUl2ZSw2QkFBNkI7SUFDN0R5ZixTQUFTLEdBQUFqQixpQkFBQSxHQUFFdmEsTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQUV3YixTQUFTLGNBQUFqQixpQkFBQSxjQUFBQSxpQkFBQSxHQUFJemUsNkJBQTZCO0lBQzdEMmYsU0FBUyxHQUFBakIsaUJBQUEsR0FBRXhhLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFeWIsU0FBUyxjQUFBakIsaUJBQUEsY0FBQUEsaUJBQUEsR0FBSTVlLDZCQUE2QjtJQUM3RDhmLFVBQVUsR0FBQWpCLGtCQUFBLEdBQUV6YSxNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBRTBiLFVBQVUsY0FBQWpCLGtCQUFBLGNBQUFBLGtCQUFBLEdBQUk1ZSw4QkFBOEI7SUFDaEU4ZixpQkFBaUIsR0FBQWpCLHFCQUFBLEdBQUUxYSxNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBRTJiLGlCQUFpQixjQUFBakIscUJBQUEsY0FBQUEscUJBQUEsR0FBSyxRQUFrQjtJQUNuRWhRLFFBQVEsRUFBRTFLLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFMEs7RUFDcEIsQ0FBQztFQUVELFFBQVF3USxJQUFJO0lBQ1YsS0FBS2xmLGNBQWMsQ0FBQzRmLEtBQUs7TUFDdkIsT0FBQTdXLGFBQUEsQ0FBQUEsYUFBQSxLQUNLb1csSUFBSTtRQUNQRCxJQUFJLEVBQUVsZixjQUFjLENBQUM0ZixLQUFLO1FBQzFCQyxTQUFTLEdBQUFsQixVQUFBLEdBQUczYSxNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBVTZiLFNBQVMsY0FBQWxCLFVBQUEsY0FBQUEsVUFBQSxHQUFJaGYsNkJBQTZCO1FBQ3RFbWdCLEtBQUssR0FBQWxCLE1BQUEsR0FBRzVhLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFVOGIsS0FBSyxjQUFBbEIsTUFBQSxjQUFBQSxNQUFBLEdBQUlsZjtNQUF3QjtJQUU3RCxLQUFLTSxjQUFjLENBQUMrZixLQUFLO01BQ3ZCLE9BQUFoWCxhQUFBLENBQUFBLGFBQUEsS0FDS29XLElBQUk7UUFDUEQsSUFBSSxFQUFFbGYsY0FBYyxDQUFDK2YsS0FBSztRQUMxQkYsU0FBUyxHQUFBaEIsV0FBQSxHQUFHN2EsTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQVU2YixTQUFTLGNBQUFoQixXQUFBLGNBQUFBLFdBQUEsR0FBSWxmLDZCQUE2QjtRQUN0RW1nQixLQUFLLEdBQUFoQixPQUFBLEdBQUc5YSxNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBVThiLEtBQUssY0FBQWhCLE9BQUEsY0FBQUEsT0FBQSxHQUFJcGY7TUFBd0I7SUFFN0QsS0FBS00sY0FBYyxDQUFDZ2dCLE1BQU07TUFDeEIsT0FBQWpYLGFBQUEsQ0FBQUEsYUFBQSxLQUNLb1csSUFBSTtRQUNQRCxJQUFJLEVBQUVsZixjQUFjLENBQUNnZ0IsTUFBTTtRQUMzQkgsU0FBUyxHQUFBZCxXQUFBLEdBQUcvYSxNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBVTZiLFNBQVMsY0FBQWQsV0FBQSxjQUFBQSxXQUFBLEdBQUlwZiw2QkFBNkI7UUFDdEVtZ0IsS0FBSyxHQUFBZCxPQUFBLEdBQUdoYixNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBVThiLEtBQUssY0FBQWQsT0FBQSxjQUFBQSxPQUFBLEdBQUl0Zix3QkFBd0I7UUFDekR1Z0IsY0FBYyxHQUFBaEIsZUFBQSxHQUFHamIsTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQVVpYyxjQUFjLGNBQUFoQixlQUFBLGNBQUFBLGVBQUEsR0FBSTtNQUFJO0lBRTNELEtBQUtqZixjQUFjLENBQUNrZ0IsSUFBSTtJQUN4QjtNQUNFLE9BQUFuWCxhQUFBLENBQUFBLGFBQUEsS0FDS29XLElBQUk7UUFDUEQsSUFBSSxFQUFFbGYsY0FBYyxDQUFDa2dCO01BQUk7RUFFL0I7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNQyxvQkFBb0IsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUMvQnhYLEtBQWUsRUFDZjhCLE1BQWtELEVBQ3JDO0VBQ2IsSUFBTTJWLGFBQWEsR0FBR3RDLGlCQUFpQixDQUFDclQsTUFBTSxDQUFDekcsTUFBTSxDQUFDO0VBQ3RELE9BQUErRSxhQUFBLENBQUFBLGFBQUEsS0FDS0osS0FBSztJQUNSL0IsV0FBVyxHQUFHd1osYUFBYSxFQUFBalEsTUFBQSxDQUFBQyxrQkFBQSxDQUFLekgsS0FBSyxDQUFDL0IsV0FBVyxFQUFDO0lBQ2xERSxvQkFBb0IsRUFBRXNaLGFBQWEsQ0FBQ3ZjLEVBQUU7SUFDdENrRCx1QkFBdUIsRUFBRTtFQUFJO0FBRWpDLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTXNaLHVCQUF1QixHQUFHLFNBQTFCQSx1QkFBdUJBLENBQ2xDMVgsS0FBZSxFQUFBMlgsTUFBQSxFQUVGO0VBQUEsSUFEWnpjLEVBQUUsR0FBQXljLE1BQUEsQ0FBRnpjLEVBQUU7RUFFSCxPQUFBa0YsYUFBQSxDQUFBQSxhQUFBLEtBQ0tKLEtBQUs7SUFDUi9CLFdBQVcsRUFBRStCLEtBQUssQ0FBQy9CLFdBQVcsQ0FBQ2tKLE1BQU0sQ0FBQyxVQUFBeVEsQ0FBQztNQUFBLE9BQUlBLENBQUMsQ0FBQzFjLEVBQUUsS0FBS0EsRUFBRTtJQUFBLEVBQUM7SUFDdkRpRCxvQkFBb0IsRUFBRTZCLEtBQUssQ0FBQzdCLG9CQUFvQixLQUFLakQsRUFBRSxHQUFHLElBQUksR0FBRzhFLEtBQUssQ0FBQzdCLG9CQUFvQjtJQUMzRkMsdUJBQXVCLEVBQ3JCNEIsS0FBSyxDQUFDN0Isb0JBQW9CLEtBQUtqRCxFQUFFLEdBQUcsS0FBSyxHQUFHOEUsS0FBSyxDQUFDNUI7RUFBdUI7QUFFL0UsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNeVosdUJBQXVCLEdBQUcsU0FBMUJBLHVCQUF1QkEsQ0FDbEM3WCxLQUFlLEVBQUE4WCxNQUFBLEVBRUY7RUFBQSxJQURaNWMsRUFBRSxHQUFBNGMsTUFBQSxDQUFGNWMsRUFBRTtJQUFFRyxNQUFNLEdBQUF5YyxNQUFBLENBQU56YyxNQUFNO0VBRVgsSUFBTThFLEdBQUcsR0FBR0gsS0FBSyxDQUFDL0IsV0FBVyxDQUFDNEUsU0FBUyxDQUFDLFVBQUErVSxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDMWMsRUFBRSxLQUFLQSxFQUFFO0VBQUEsRUFBQztFQUN6RCxJQUFJaUYsR0FBRyxHQUFHLENBQUMsRUFBRTtJQUNYck8sT0FBTyxDQUFDcWYsSUFBSSw4Q0FBQTNKLE1BQUEsQ0FBOEN0TSxFQUFFLENBQUUsQ0FBQztJQUMvRCxPQUFPOEUsS0FBSztFQUNkO0VBQ0EsSUFBTWdCLElBQUksR0FBR2hCLEtBQUssQ0FBQy9CLFdBQVcsQ0FBQ2tDLEdBQUcsQ0FBQztFQUNuQyxJQUFJNFgsY0FBMEI7RUFFOUIsSUFBSTFjLE1BQU0sQ0FBQ2tiLElBQUksSUFBSWxiLE1BQU0sQ0FBQ2tiLElBQUksS0FBS3ZWLElBQUksQ0FBQ3VWLElBQUksRUFBRTtJQUM1Q3dCLGNBQWMsR0FBRzVDLGlCQUFpQixDQUFBL1UsYUFBQSxDQUFBQSxhQUFBLEtBQUtZLElBQUksR0FBSzNGLE1BQU0sQ0FBMkIsQ0FBQztFQUNwRixDQUFDLE1BQU07SUFDTDBjLGNBQWMsR0FBQTNYLGFBQUEsQ0FBQUEsYUFBQSxLQUFPWSxJQUFJLEdBQUszRixNQUFNLENBQWU7RUFDckQ7RUFFQSxJQUFNMmMsY0FBYyxHQUFBdlEsa0JBQUEsQ0FBT3pILEtBQUssQ0FBQy9CLFdBQVcsQ0FBQztFQUM3QytaLGNBQWMsQ0FBQzdYLEdBQUcsQ0FBQyxHQUFHNFgsY0FBYztFQUNwQyxPQUFBM1gsYUFBQSxDQUFBQSxhQUFBLEtBQ0tKLEtBQUs7SUFDUi9CLFdBQVcsRUFBRStaO0VBQWM7QUFFL0IsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNQywwQkFBMEIsR0FBRyxTQUE3QkEsMEJBQTBCQSxDQUNyQ2pZLEtBQWUsRUFBQWtZLE1BQUEsRUFFRjtFQUFBLElBRFpoZCxFQUFFLEdBQUFnZCxNQUFBLENBQUZoZCxFQUFFO0VBRUgsSUFBTXVZLFFBQVEsR0FBR3pULEtBQUssQ0FBQy9CLFdBQVcsQ0FBQ29FLElBQUksQ0FBQyxVQUFBdVYsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQzFjLEVBQUUsS0FBS0EsRUFBRTtFQUFBLEVBQUM7RUFDekQsSUFBSSxDQUFDdVksUUFBUSxFQUFFO0lBQ2IzaEIsT0FBTyxDQUFDcWYsSUFBSSxpREFBQTNKLE1BQUEsQ0FBaUR0TSxFQUFFLENBQUUsQ0FBQztJQUNsRSxPQUFPOEUsS0FBSztFQUNkO0VBQ0EsSUFBTXlYLGFBQWEsR0FBQXJYLGFBQUEsQ0FBQUEsYUFBQSxLQUNkck8sU0FBUyxDQUFDMGhCLFFBQVEsQ0FBQztJQUN0QnZZLEVBQUUsRUFBRXhGLGNBQWMsQ0FBQyxDQUFDLENBQUM7SUFDckJ5RixLQUFLLGFBQUFxTSxNQUFBLENBQWFpTSxRQUFRLENBQUN0WSxLQUFLO0VBQUUsRUFDbkM7RUFDRCxPQUFBaUYsYUFBQSxDQUFBQSxhQUFBLEtBQ0tKLEtBQUs7SUFDUi9CLFdBQVcsR0FBR3daLGFBQWEsRUFBQWpRLE1BQUEsQ0FBQUMsa0JBQUEsQ0FBS3pILEtBQUssQ0FBQy9CLFdBQVcsRUFBQztJQUNsREUsb0JBQW9CLEVBQUVzWixhQUFhLENBQUN2YyxFQUFFO0lBQ3RDa0QsdUJBQXVCLEVBQUU7RUFBSztBQUVsQyxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU0rWiw0QkFBNEIsR0FBRyxTQUEvQkEsNEJBQTRCQSxDQUN2Q25ZLEtBQWUsRUFBQW9ZLE1BQUEsRUFFRjtFQUFBLElBRFpsZCxFQUFFLEdBQUFrZCxNQUFBLENBQUZsZCxFQUFFO0lBQUVtZCxhQUFhLEdBQUFELE1BQUEsQ0FBYkMsYUFBYTtFQUVsQixJQUNFbmQsRUFBRSxLQUFLOEUsS0FBSyxDQUFDN0Isb0JBQW9CLElBQ2pDLENBQUNrYSxhQUFhLGFBQWJBLGFBQWEsY0FBYkEsYUFBYSxHQUFJLEtBQUssTUFBTXJZLEtBQUssQ0FBQzVCLHVCQUF1QixFQUMxRDtJQUNBLE9BQU80QixLQUFLO0VBQ2Q7RUFDQSxPQUFBSSxhQUFBLENBQUFBLGFBQUEsS0FDS0osS0FBSztJQUNSN0Isb0JBQW9CLEVBQUVqRCxFQUFFO0lBQ3hCa0QsdUJBQXVCLEVBQUVpYSxhQUFhLGFBQWJBLGFBQWEsY0FBYkEsYUFBYSxHQUFJO0VBQUs7QUFFbkQsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTQyxvQkFBb0JBLENBQ2xDdFksS0FBUSxFQUNSOEIsTUFBa0QsRUFDL0M7RUFDSDtFQUNBLElBQWV5VyxVQUFVLEdBQUl6VyxNQUFNLENBQTVCVSxNQUFNO0VBQ2IsSUFBTzVFLFFBQVEsR0FBSW9DLEtBQUssQ0FBakJwQyxRQUFROztFQUVmO0VBQ0EsSUFBSSxDQUFDQSxRQUFRLENBQUMyYSxVQUFVLENBQUMsRUFBRTtJQUN6QixPQUFPdlksS0FBSztFQUNkO0VBRUEsSUFDRTNDLE1BQU0sR0FHSjJDLEtBQUssQ0FIUDNDLE1BQU07SUFBQW1iLGVBQUEsR0FHSnhZLEtBQUssQ0FEUHBDLFFBQVE7SUFBaUIyRSxPQUFPLEdBQUFpVyxlQUFBLENBQXBCRCxVQUFVO0lBQWVFLFdBQVcsR0FBQXpULHdCQUFBLENBQUF3VCxlQUFBLEdBQXBDRCxVQUFVLEVBQUFsWSxHQUFBLENBQUFnSyxjQUFBO0VBR3hCLElBQU1xTyxjQUFjLEdBQUdyYixNQUFNLENBQUM4SixNQUFNLENBQUMsVUFBQTdFLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUNqSCxNQUFNLENBQUNtSCxNQUFNLEtBQUsrVixVQUFVO0VBQUEsRUFBQyxDQUFDbFksR0FBRyxDQUFDLFVBQUFpQyxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDcEgsRUFBRTtFQUFBLEVBQUM7O0VBRXhGO0VBQ0EsSUFBSXdGLFFBQVEsR0FBR2dZLGNBQWMsQ0FBQzdNLE1BQU0sQ0FBQyxVQUFDQyxJQUFJLEVBQUU1USxFQUFFO0lBQUEsT0FBS29XLGtCQUFrQixDQUFDeEYsSUFBSSxFQUFFO01BQUM1USxFQUFFLEVBQUZBO0lBQUUsQ0FBQyxDQUFDO0VBQUEsR0FBQWtGLGFBQUEsQ0FBQUEsYUFBQSxLQUM1RUosS0FBSztJQUNScEMsUUFBUSxFQUFFNmE7RUFBVyxFQUN0QixDQUFDOztFQUVGO0VBQ0EsSUFBTS9hLE9BQWlCLEdBQUcsRUFBRTtFQUFDLElBQUFpYixVQUFBLEdBQUE5VSwwQkFBQSxDQUNSbkQsUUFBUSxDQUFDaEQsT0FBTztJQUFBa2IsTUFBQTtFQUFBO0lBQXJDLEtBQUFELFVBQUEsQ0FBQTVVLENBQUEsTUFBQTZVLE1BQUEsR0FBQUQsVUFBQSxDQUFBM1UsQ0FBQSxJQUFBQyxJQUFBLEdBQXVDO01BQUEsSUFBNUJrRCxNQUFNLEdBQUF5UixNQUFBLENBQUExVSxLQUFBO01BQ2YsSUFBTTZJLFVBQVUsR0FBRzVGLE1BQU0sQ0FBQzNFLE1BQU0sQ0FBQ3FXLE9BQU8sQ0FBQ04sVUFBVSxDQUFDO01BQ3BELElBQUl4TCxVQUFVLElBQUksQ0FBQyxJQUFJNUYsTUFBTSxDQUFDM0UsTUFBTSxDQUFDN0IsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUMvQztRQUNBakQsT0FBTyxDQUFDb2IsSUFBSSxDQUFDL0ssK0JBQStCLENBQUM1RyxNQUFNLEVBQUU0RixVQUFVLEVBQUVuUCxRQUFRLENBQUMsQ0FBQztNQUM3RSxDQUFDLE1BQU0sSUFBSW1QLFVBQVUsR0FBRyxDQUFDLEVBQUU7UUFDekI7UUFDQXJQLE9BQU8sQ0FBQ29iLElBQUksQ0FBQzNSLE1BQU0sQ0FBQztNQUN0QjtJQUNGO0VBQUMsU0FBQWhELEdBQUE7SUFBQXdVLFVBQUEsQ0FBQXZVLENBQUEsQ0FBQUQsR0FBQTtFQUFBO0lBQUF3VSxVQUFBLENBQUF0VSxDQUFBO0VBQUE7RUFFRDNELFFBQVEsR0FBQU4sYUFBQSxDQUFBQSxhQUFBLEtBQU9NLFFBQVE7SUFBRWhELE9BQU8sRUFBUEE7RUFBTyxFQUFDO0VBRWpDLE9BQU9xYixrQ0FBa0MsQ0FBQ3JZLFFBQVEsRUFBRTtJQUFDOEIsTUFBTSxFQUFFK1Y7RUFBVSxDQUFDLENBQUM7QUFDM0U7QUFFQSxTQUFTUSxrQ0FBa0NBLENBQUMvWSxLQUFLLEVBQUFnWixNQUFBLEVBQVk7RUFBQSxJQUFUeFcsTUFBTSxHQUFBd1csTUFBQSxDQUFOeFcsTUFBTTtFQUN4RCxJQUFLbkUsaUJBQWlCLEdBQUkyQixLQUFLLENBQTFCM0IsaUJBQWlCO0VBQ3RCLElBQUE0YSxrQkFBQSxHQUFrQjVhLGlCQUFpQjtJQUE1QnBELE9BQU8sR0FBQWdlLGtCQUFBLENBQVBoZSxPQUFPO0VBQ2QsSUFBSUEsT0FBTyxFQUFFO0lBQ1gsSUFBT0ksTUFBTSxHQUFJSixPQUFPLENBQWpCSSxNQUFNO0lBQ2I7SUFDQSxJQUFBNmQsb0JBQUEsR0FBNEM3ZCxNQUFNLENBQUNDLFlBQVk7TUFBOUNrTixNQUFNLEdBQUEwUSxvQkFBQSxDQUFmMVcsTUFBTTtNQUFjbEgsWUFBWSxHQUFBMEosd0JBQUEsQ0FBQWtVLG9CQUFBLEdBQWhDMVcsTUFBTSxFQUFBbkMsR0FBQSxDQUFBZ0ssY0FBQTtJQUNkaE0saUJBQWlCLEdBQUErQixhQUFBLENBQUFBLGFBQUEsS0FDWi9CLGlCQUFpQjtNQUNwQnBELE9BQU8sRUFBQW1GLGFBQUEsQ0FBQUEsYUFBQSxLQUFNbkYsT0FBTztRQUFFSSxNQUFNLEVBQUErRSxhQUFBLENBQUFBLGFBQUEsS0FBTS9FLE1BQU07VUFBRUMsWUFBWSxFQUFaQTtRQUFZO01BQUM7SUFBQyxFQUN6RDtFQUNIO0VBRUEsT0FBQThFLGFBQUEsQ0FBQUEsYUFBQSxLQUFXSixLQUFLO0lBQUUzQixpQkFBaUIsRUFBakJBO0VBQWlCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTThhLDBCQUEwQixHQUFHLFNBQTdCQSwwQkFBMEJBLENBQ3JDblosS0FBZSxFQUNmOEIsTUFBd0Q7RUFBQSxPQUFBMUIsYUFBQSxDQUFBQSxhQUFBLEtBRXJESixLQUFLO0lBQ1J6QixhQUFhLEVBQUV1RCxNQUFNLENBQUNsRjtFQUFJO0FBQUEsQ0FDMUI7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTXdjLDRCQUE0QixHQUFHLFNBQS9CQSw0QkFBNEJBLENBQ3ZDcFosS0FBZSxFQUNmOEIsTUFBMEQ7RUFBQSxPQUFBMUIsYUFBQSxDQUFBQSxhQUFBLEtBRXZESixLQUFLO0lBQ1J4QixlQUFlLEVBQUVzRCxNQUFNLENBQUNsRjtFQUFJO0FBQUEsQ0FDNUI7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTXljLHVCQUF1QixHQUFHLFNBQTFCQSx1QkFBdUJBLENBQ2xDclosS0FBZSxFQUNmOEIsTUFBcUQsRUFDeEM7RUFDYixPQUFBMUIsYUFBQSxDQUFBQSxhQUFBLEtBQ0tKLEtBQUs7SUFDUm5DLGNBQWMsRUFBRWlFLE1BQU0sQ0FBQ1U7RUFBTTtBQUVqQyxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU04Vyx1QkFBdUIsR0FBRyxTQUExQkEsdUJBQXVCQSxDQUNsQ3RaLEtBQWUsRUFDZjhCLE1BQWlELEVBQ3BDO0VBQ2IsT0FBT3lYLHlCQUF5QixDQUFDdlosS0FBSyxFQUFFO0lBQUN3QyxNQUFNLEVBQUVWLE1BQU0sQ0FBQ1UsTUFBTTtJQUFFb0MsS0FBSyxFQUFFO01BQUNnRyxLQUFLLEVBQUU5SSxNQUFNLENBQUMwWDtJQUFRO0VBQUMsQ0FBQyxDQUFDO0FBQ25HLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTUMscUJBQXFCLEdBQUcsU0FBeEJBLHFCQUFxQkEsQ0FBSXpaLEtBQWU7RUFBQSxPQUFBSSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxLQUNoRG5ELGlCQUFpQixHQUNqQitDLEtBQUssQ0FBQzBaLFlBQVk7SUFDckJBLFlBQVksRUFBRTFaLEtBQUssQ0FBQzBaO0VBQVk7QUFBQSxDQUNoQzs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNQyx1QkFBdUIsR0FBRyxTQUExQkEsdUJBQXVCQSxDQUNsQzNaLEtBQWUsRUFBQTRaLE1BQUEsRUFPRjtFQUFBLElBQUFDLGNBQUEsR0FBQUQsTUFBQSxDQUxYRSxPQUFPO0lBQUFDLHFCQUFBLEdBQUFGLGNBQUEsQ0FBR3hlLE1BQU07SUFBTkEsTUFBTSxHQUFBMGUscUJBQUEsY0FBRyxDQUFDLENBQUMsR0FBQUEscUJBQUE7SUFBQUMscUJBQUEsR0FBQUgsY0FBQSxDQUFFeEgsT0FBTztJQUFQQSxPQUFPLEdBQUEySCxxQkFBQSxjQUFHLENBQUMsQ0FBQyxHQUFBQSxxQkFBQTtFQU1yQyxJQUFJLENBQUMzZSxNQUFNLENBQUM0ZSxRQUFRLEVBQUU7SUFDcEIsT0FBT2phLEtBQUs7RUFDZDtFQUVBLElBQU9rYSxrQkFBa0IsR0FBSTdILE9BQU8sQ0FBN0I2SCxrQkFBa0I7O0VBRXpCO0VBQ0EsSUFBSUMsV0FBVyxHQUFHLENBQUNELGtCQUFrQixHQUFHVCxxQkFBcUIsQ0FBQ3paLEtBQUssQ0FBQyxHQUFHQSxLQUFLO0VBQUMsSUFBQW9hLFVBQUEsR0FBQXZXLDBCQUFBLENBQ3hEN0QsS0FBSyxDQUFDUixPQUFPO0lBQUE2YSxNQUFBO0VBQUE7SUFBbEMsS0FBQUQsVUFBQSxDQUFBclcsQ0FBQSxNQUFBc1csTUFBQSxHQUFBRCxVQUFBLENBQUFwVyxDQUFBLElBQUFDLElBQUEsR0FBb0M7TUFBQSxJQUF6QnFXLE1BQU0sR0FBQUQsTUFBQSxDQUFBblcsS0FBQTtNQUNmLElBQUlqTSxhQUFhLENBQUNxaUIsTUFBTSxDQUFDLElBQUl0Z0IsZUFBZSxDQUFDcUIsTUFBTSxDQUFDNGUsUUFBUSxFQUFFSyxNQUFNLENBQUM3VyxJQUFJLENBQUMsRUFBRTtRQUMxRTBXLFdBQVcsR0FBR0csTUFBTSxDQUFDQyxLQUFLLENBQ3hCSixXQUFXLEVBQ1hwZ0Isb0JBQW9CLENBQUNzQixNQUFNLENBQUM0ZSxRQUFRLEVBQUVLLE1BQU0sQ0FBQzdXLElBQUksRUFBRTZXLE1BQU0sQ0FBQ0UsV0FBVyxDQUFDO1FBQ3RFO1FBQ0EsSUFDRixDQUFDO01BQ0g7SUFDRjtFQUFDLFNBQUFyVyxHQUFBO0lBQUFpVyxVQUFBLENBQUFoVyxDQUFBLENBQUFELEdBQUE7RUFBQTtJQUFBaVcsVUFBQSxDQUFBL1YsQ0FBQTtFQUFBO0VBRUQsT0FBTzhWLFdBQVc7QUFDcEIsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNTSxpQkFBaUIsR0FBRyxTQUFwQkEsaUJBQWlCQSxDQUM1QnphLEtBQWUsRUFDZjhCLE1BQWlEO0VBQUEsT0FBQTFCLGFBQUEsQ0FBQUEsYUFBQSxLQUU5Q0osS0FBSztJQUNSdkIsU0FBUyxFQUFBMkIsYUFBQSxDQUFBQSxhQUFBLEtBRUowQixNQUFNLENBQUM0WSxJQUFJLEdBQ1ZsSixNQUFNLENBQUNDLFFBQVEsQ0FBQzNQLE1BQU0sQ0FBQ2lFLFFBQVEsQ0FBQyxHQUFHO01BQUNBLFFBQVEsRUFBRWpFLE1BQU0sQ0FBQ2lFO0lBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN4RTtBQUFBLENBQ0Q7O0FBRUY7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBUzRVLDhCQUE4QkEsQ0FDNUMzYSxLQUFlLEVBQ2Y4QixNQUE0RCxFQUNsRDtFQUNWLElBQU96RyxNQUFNLEdBQUl5RyxNQUFNLENBQWhCekcsTUFBTTtFQUViLElBQU1nRCxpQkFBaUIsR0FBQStCLGFBQUEsQ0FBQUEsYUFBQSxLQUNsQkosS0FBSyxDQUFDM0IsaUJBQWlCLEdBQUFxSCxlQUFBLEtBQ3JCckssTUFBTSxDQUFDSCxFQUFFLEVBQUdHLE1BQU0sRUFDeEI7O0VBRUQ7RUFDQTtFQUNBLElBQU11ZixVQUFVLEdBQUcsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDO0VBRXZDLElBQ0VBLFVBQVUsQ0FBQ3ZULFFBQVEsQ0FBQ2hNLE1BQU0sQ0FBQ0gsRUFBRSxDQUFDLElBQzlCRyxNQUFNLENBQUNELE9BQU8sSUFDZCxDQUFDNEUsS0FBSyxDQUFDM0IsaUJBQWlCLENBQUNoRCxNQUFNLENBQUNILEVBQUUsQ0FBQyxDQUFDRSxPQUFPLEVBQzNDO0lBQ0E7SUFDQXdmLFVBQVUsQ0FBQ3JaLE9BQU8sQ0FBQyxVQUFBc1osQ0FBQyxFQUFJO01BQ3RCLElBQUlBLENBQUMsS0FBS3hmLE1BQU0sQ0FBQ0gsRUFBRSxFQUFFO1FBQ25CbUQsaUJBQWlCLENBQUN3YyxDQUFDLENBQUMsR0FBQXphLGFBQUEsQ0FBQUEsYUFBQSxLQUFPL0IsaUJBQWlCLENBQUN3YyxDQUFDLENBQUM7VUFBRXpmLE9BQU8sRUFBRTtRQUFLLEVBQUM7TUFDbEU7SUFDRixDQUFDLENBQUM7RUFDSjtFQUVBLElBQU1zRixRQUFRLEdBQUFOLGFBQUEsQ0FBQUEsYUFBQSxLQUNUSixLQUFLO0lBQ1IzQixpQkFBaUIsRUFBakJBO0VBQWlCLEVBQ2xCO0VBRUQsSUFBSWhELE1BQU0sQ0FBQ0gsRUFBRSxLQUFLLFVBQVUsSUFBSSxDQUFDRyxNQUFNLENBQUNELE9BQU8sRUFBRTtJQUMvQyxPQUFPa2Qsb0JBQW9CLENBQUM1WCxRQUFRLEVBQUU7TUFBQzhCLE1BQU0sRUFBRTtJQUFrQixDQUFDLENBQUM7RUFDckU7RUFFQSxPQUFPOUIsUUFBUTtBQUNqQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNb2EsaUJBQWlCLEdBQUcsU0FBcEJBLGlCQUFpQkEsQ0FDNUI5YSxLQUFlLEVBQ2Y4QixNQUFpRDtFQUFBLE9BQUExQixhQUFBLENBQUFBLGFBQUEsS0FFOUNKLEtBQUs7SUFDUnJCLFFBQVEsRUFBRXFCLEtBQUssQ0FBQzNCLGlCQUFpQixDQUFDdEMsVUFBVSxDQUFDWCxPQUFPLEdBQUFnRixhQUFBLENBQUFBLGFBQUEsS0FFM0NKLEtBQUssQ0FBQ3JCLFFBQVE7TUFDakJvYyxNQUFNLEVBQUUvYSxLQUFLLENBQUNyQixRQUFRLENBQUNvYyxNQUFNLEdBQUcsSUFBSSxHQUFHaHBCLFNBQVMsQ0FBQ2lPLEtBQUssQ0FBQ3JCLFFBQVE7SUFBQyxLQUVsRXFCLEtBQUssQ0FBQ3JCLFFBQVE7SUFDbEJELE9BQU8sRUFBRW9ELE1BQU0sQ0FBQzRZLElBQUksSUFBSTVZLE1BQU0sQ0FBQzRZLElBQUksQ0FBQ00sTUFBTSxHQUFHbFosTUFBTSxDQUFDNFksSUFBSSxHQUFHO0VBQUk7QUFBQSxDQUMvRDs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNTyxlQUFlLEdBQUcsU0FBbEJBLGVBQWVBLENBQzFCamIsS0FBZSxFQUVmOEIsTUFBK0MsRUFDbEM7RUFDYixPQUFBMUIsYUFBQSxDQUFBQSxhQUFBLEtBQ0tKLEtBQUs7SUFDUnRCLE9BQU8sRUFBRTtFQUFJO0FBRWpCLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTXdjLGdCQUFnQixHQUFHLFNBQW5CQSxnQkFBZ0JBLENBQzNCbGIsS0FBZSxFQUFBbWIsTUFBQSxFQUVGO0VBQUEsSUFEWkMsR0FBRyxHQUFBRCxNQUFBLENBQUhDLEdBQUc7RUFFSixJQUFJL1osTUFBTSxDQUFDcUgsTUFBTSxDQUFDMUksS0FBSyxDQUFDM0IsaUJBQWlCLENBQUMsQ0FBQ3FGLElBQUksQ0FBQyxVQUFBckksTUFBTTtJQUFBLE9BQUlBLE1BQU0sQ0FBQ0QsT0FBTztFQUFBLEVBQUMsRUFBRTtJQUN6RSxPQUFBZ0YsYUFBQSxDQUFBQSxhQUFBLEtBQ0tKLEtBQUs7TUFDUnJCLFFBQVEsRUFBQXlCLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLEtBQ0hKLEtBQUssQ0FBQ3JCLFFBQVEsR0FDYjRLLEtBQUssQ0FBQ0MsT0FBTyxDQUFDNFIsR0FBRyxDQUFDQyxLQUFLLENBQUMsR0FBRztRQUFDQyxhQUFhLEVBQUE3VCxrQkFBQSxDQUFNMlQsR0FBRyxDQUFDQyxLQUFLO01BQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUMvRDlSLEtBQUssQ0FBQ0MsT0FBTyxDQUFDNFIsR0FBRyxDQUFDRyxNQUFNLENBQUMsR0FBRztRQUFDeGYsVUFBVSxFQUFBMEwsa0JBQUEsQ0FBTTJULEdBQUcsQ0FBQ0csTUFBTTtNQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkU7RUFFTDtFQUVBLE9BQU92YixLQUFLO0FBQ2QsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU13YixxQkFBcUIsR0FBRyxTQUF4QkEscUJBQXFCQSxDQUNoQ3hiLEtBQWUsRUFDZjhCLE1BQW1EO0VBQUEsT0FFbkQ5QixLQUFLLENBQUNuQixTQUFTLElBQUltQixLQUFLLENBQUNuQixTQUFTLENBQUM4QixNQUFNLEtBQUssQ0FBQyxHQUFBUCxhQUFBLENBQUFBLGFBQUEsS0FFdENKLEtBQUs7SUFDUjtJQUNBO0lBQ0FuQixTQUFTLEVBQUV4SyxxQkFBcUIsQ0FBQzJMLEtBQUssQ0FBQzNDLE1BQU0sRUFBRTtNQUFDb2UsU0FBUyxFQUFFO0lBQUssQ0FBQztFQUFDLEtBRXBFQyx1QkFBdUIsQ0FBQzFiLEtBQUssRUFBRThCLE1BQU0sQ0FBQztBQUFBOztBQUU1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNbUUsd0JBQXdCLEdBQUcsU0FBM0JBLHdCQUF3QkEsQ0FDbkNqRyxLQUFlLEVBQUEyYixNQUFBLEVBRUY7RUFBQSxJQURaNVYsUUFBUSxHQUFBNFYsTUFBQSxDQUFSNVYsUUFBUTtJQUFFRixPQUFPLEdBQUE4VixNQUFBLENBQVA5VixPQUFPO0VBRWxCLElBQU9oSCxTQUFTLEdBQUltQixLQUFLLENBQWxCbkIsU0FBUztFQUVoQixPQUFBdUIsYUFBQSxDQUFBQSxhQUFBLEtBQ0tKLEtBQUs7SUFDUm5CLFNBQVMsRUFBRUEsU0FBUyxDQUFDd0IsR0FBRyxDQUFDLFVBQUMyRixFQUFFLEVBQUV6RixDQUFDO01BQUEsT0FDN0JBLENBQUMsS0FBS3dGLFFBQVEsR0FBQTNGLGFBQUEsQ0FBQUEsYUFBQSxLQUVMdkIsU0FBUyxDQUFDMEIsQ0FBQyxDQUFDO1FBQ2ZsRCxNQUFNLEVBQUErQyxhQUFBLENBQUFBLGFBQUEsS0FDRHZCLFNBQVMsQ0FBQzBCLENBQUMsQ0FBQyxDQUFDbEQsTUFBTSxPQUFBcUksZUFBQSxLQUVyQkcsT0FBTyxFQUFHLENBQUNoSCxTQUFTLENBQUMwQixDQUFDLENBQUMsQ0FBQ2xELE1BQU0sQ0FBQ3dJLE9BQU8sQ0FBQztNQUN6QyxLQUVIRyxFQUFFO0lBQUEsQ0FDUjtFQUFDO0FBRUwsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU00VixvQkFBb0IsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUMvQjViLEtBQWUsRUFDZjhCLE1BQWtELEVBQ3JDO0VBQ2I7RUFDQSxJQUFPekcsTUFBTSxHQUFheUcsTUFBTSxDQUF6QnpHLE1BQU07SUFBRWdYLE9BQU8sR0FBSXZRLE1BQU0sQ0FBakJ1USxPQUFPOztFQUV0QjtFQUNBO0VBQ0EsSUFBSTVILFlBQVksR0FBR3BQLE1BQU0sR0FDckJzZSx1QkFBdUIsQ0FBQzNaLEtBQUssRUFBRTtJQUM3QjhaLE9BQU8sRUFBRTtNQUFDemUsTUFBTSxFQUFOQSxNQUFNO01BQUVnWCxPQUFPLEVBQVBBO0lBQU87RUFDM0IsQ0FBQyxDQUFDLEdBQ0ZyUyxLQUFLO0VBRVQsSUFBTXBDLFFBQVEsR0FBR2pJLE9BQU8sQ0FBQ21NLE1BQU0sQ0FBQ2xFLFFBQVEsQ0FBQztFQUN6QyxJQUFJLENBQUNBLFFBQVEsQ0FBQytDLE1BQU0sRUFBRTtJQUNwQixPQUFPOEosWUFBWTtFQUNyQjtFQUVBLElBQU1vUixrQkFBMEIsR0FBRyxFQUFFO0VBQ3JDLElBQU1DLGlCQUF5QixHQUFHLEVBQUU7RUFFcENsZSxRQUFRLENBQUMyRCxPQUFPLENBQUMsVUFBQXdhLE1BQUEsRUFBdUJDLFlBQVksRUFBSztJQUFBLElBQUFDLFdBQUEsR0FBQUYsTUFBQSxDQUF0Q3JCLElBQUk7TUFBSkEsSUFBSSxHQUFBdUIsV0FBQSxjQUFHLENBQUMsQ0FBQyxHQUFBQSxXQUFBO01BQUtDLElBQUksR0FBQWxYLHdCQUFBLENBQUErVyxNQUFBLEVBQUFJLFVBQUE7SUFDbkMsSUFBTUMsSUFBSSxHQUFHdmpCLGtCQUFrQixDQUFBdUgsYUFBQTtNQUFFc2EsSUFBSSxFQUFKQTtJQUFJLEdBQUt3QixJQUFJLEdBQUdsYyxLQUFLLENBQUNwQyxRQUFRLENBQUM7SUFDaEUsSUFBSXdlLElBQUksRUFBRTtNQUNSUCxrQkFBa0IsQ0FBQy9DLElBQUksQ0FBQ3NELElBQUksQ0FBQztJQUMvQixDQUFDLE1BQU07TUFDTE4saUJBQWlCLENBQUNoRCxJQUFJLENBQ3BCaFosNEJBQTRCLENBQUMsQ0FBQyxDQUFDTyxHQUFHLENBQUM7UUFBQSxPQUNqQ3hOLGVBQWUsQ0FDYjBCLGlCQUFpQixDQUFDO1VBQ2hCOG5CLE9BQU8sa0VBQWtFO1VBQ3pFbmhCLEVBQUUsb0JBQUFzTSxNQUFBLENBQW9Cd1UsWUFBWTtRQUNwQyxDQUFDLENBQ0gsQ0FBQztNQUFBLENBQ0gsQ0FDRixDQUFDO0lBQ0g7RUFDRixDQUFDLENBQUM7RUFFRixJQUFNTSxzQkFBc0IsR0FBR1Qsa0JBQWtCLENBQUNsYixNQUFNLEdBQ3BEdE8sSUFBSSxDQUFDa3FCLFVBQVUsQ0FBQ1Ysa0JBQWtCLENBQUMsQ0FBQ3hiLEdBQUcsQ0FBQyxVQUFBbWMsT0FBTztJQUFBLE9BQzdDenBCLHVCQUF1QixDQUFDO01BQUN5cEIsT0FBTyxFQUFQQSxPQUFPO01BQUVDLGVBQWUsRUFBRXBLO0lBQU8sQ0FBQyxDQUFDO0VBQUEsQ0FDOUQsQ0FBQyxHQUNELElBQUk7RUFFUixJQUFJaUssc0JBQXNCLEVBQUU7SUFDMUI3UixZQUFZLEdBQUdpUywwQkFBMEIsQ0FBQ2pTLFlBQVksRUFBRTVTLFFBQVEsQ0FBQztNQUFDOGtCLE1BQU0sRUFBRSxDQUFDO01BQUVoYSxJQUFJLEVBQUU7SUFBRSxDQUFDLENBQUMsQ0FBQztFQUMxRjtFQUVBLE9BQU9wUSxRQUFRLENBQUNrWSxZQUFZLEtBQUFqRCxNQUFBLENBQUFDLGtCQUFBLENBQ3RCNlUsc0JBQXNCLEdBQUcsQ0FBQ0Esc0JBQXNCLENBQUMsR0FBRyxFQUFFLEdBQ3ZEUixpQkFBaUIsQ0FDckIsQ0FBQztBQUNKLENBQUM7QUFFRCxPQUFPLElBQU1jLDhCQUE4QixHQUFHLFNBQWpDQSw4QkFBOEJBLENBQ3pDNWMsS0FBZSxFQUNmOEIsTUFBcUQsRUFDeEM7RUFDYixJQUFBK2EsZUFBQSxHQUFtQy9hLE1BQU0sQ0FBQ2dZLE9BQU87SUFBMUMwQyxPQUFPLEdBQUFLLGVBQUEsQ0FBUEwsT0FBTztJQUFFQyxlQUFlLEdBQUFJLGVBQUEsQ0FBZkosZUFBZTtFQUMvQixJQUFNWCxpQkFBeUIsR0FBRyxFQUFFO0VBRXBDLElBQU1nQixjQUFjLEdBQUdOLE9BQU8sQ0FBQzNRLE1BQU0sQ0FBQyxVQUFDQyxJQUFJLEVBQUV6QyxNQUFNLEVBQUVsSixHQUFHLEVBQUs7SUFDM0QsSUFBSWtKLE1BQU0sQ0FBQzBULE1BQU0sS0FBSyxXQUFXLEVBQUU7TUFDakMsSUFBTXhhLE9BQU8sR0FBRzhHLE1BQU0sQ0FBQ25GLEtBQUs7TUFDNUIsT0FBQTlELGFBQUEsQ0FBQUEsYUFBQSxLQUFXMEwsSUFBSSxPQUFBcEcsZUFBQSxLQUFHbkQsT0FBTyxDQUFDckgsRUFBRSxFQUFHcUgsT0FBTztJQUN4QyxDQUFDLE1BQU07TUFDTDtNQUNBdVosaUJBQWlCLENBQUNoRCxJQUFJLENBQ3BCcm1CLFdBQVcsQ0FBQyxDQUFDLENBQUM0TixHQUFHLENBQUM7UUFBQSxPQUNoQnhOLGVBQWUsQ0FDYjBCLGlCQUFpQixDQUFDO1VBQ2hCOG5CLE9BQU8sbUVBQUE3VSxNQUFBLENBQ0w2QixNQUFNLENBQUMyVCxNQUFNLElBQUszVCxNQUFNLENBQVNuRixLQUFLLENBQUU7VUFDMUNoSixFQUFFLDJCQUFBc00sTUFBQSxDQUEyQnJILEdBQUc7UUFDbEMsQ0FBQyxDQUNILENBQUM7TUFBQSxDQUNILENBQ0YsQ0FBQztNQUNELE9BQU8yTCxJQUFJO0lBQ2I7RUFDRixDQUFDLEVBQUUsQ0FBQyxDQUFhLENBQUM7RUFDbEI7RUFDQSxJQUFNcU8sV0FBVyxHQUFBL1osYUFBQSxDQUFBQSxhQUFBLEtBQ1pKLEtBQUs7SUFDUnBDLFFBQVEsRUFBRTNELG9CQUFvQixDQUFDK0YsS0FBSyxFQUFFOGMsY0FBYztFQUFDLEVBQ3REOztFQUVEO0VBQ0EsSUFBTUcsWUFBWSxHQUFHamQsS0FBSyxDQUFDUixPQUFPLENBQUMySCxNQUFNLENBQUMsVUFBQStWLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUNDLGdCQUFnQjtFQUFBLEVBQUM7RUFDbEUsSUFBTUMsY0FBYyxHQUFHcGQsS0FBSyxDQUFDUixPQUFPLENBQUMySCxNQUFNLENBQUMsVUFBQStWLENBQUM7SUFBQSxPQUFJLENBQUNELFlBQVksQ0FBQzVWLFFBQVEsQ0FBQzZWLENBQUMsQ0FBQztFQUFBLEVBQUM7RUFFM0UsSUFBTWhPLFVBQVUsR0FBRzdOLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDd2IsY0FBYyxDQUFDO0VBQzlDLElBQU1PLGlCQUFpQixHQUFHO0lBQ3hCbk8sVUFBVSxFQUFWQSxVQUFVO0lBQ1ZtRCxPQUFPLEVBQUVvSyxlQUFlO0lBQ3hCUSxZQUFZLEVBQVpBO0VBQ0YsQ0FBQztFQUVELElBQU14UyxZQUFZLEdBQUc2UyxtQkFBbUIsQ0FBQ25ELFdBQVcsRUFBRTtJQUNwRDNhLE9BQU8sRUFBRTRkLGNBQWM7SUFDdkJDLGlCQUFpQixFQUFqQkE7RUFDRixDQUFDLENBQUM7RUFFRixPQUFPOXFCLFFBQVEsQ0FDYm1xQiwwQkFBMEIsQ0FBQ2pTLFlBQVksRUFBRTVTLFFBQVEsQ0FBQztJQUFDOGtCLE1BQU0sRUFBRSxDQUFDO0VBQUMsQ0FBQyxDQUFDLENBQUMsRUFDaEViLGlCQUNGLENBQUM7QUFDSCxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU3dCLG1CQUFtQkEsQ0FDakN0ZCxLQUFlLEVBQ2Y4QixNQUdDLEVBQ1M7RUFDVixJQUFPdEMsT0FBTyxHQUF1QnNDLE1BQU0sQ0FBcEN0QyxPQUFPO0lBQUU2ZCxpQkFBaUIsR0FBSXZiLE1BQU0sQ0FBM0J1YixpQkFBaUI7O0VBRWpDO0VBQ0EsSUFBTUUsZ0JBQWdCLEdBQUdybEIscUJBQXFCLENBQzVDOEgsS0FBSyxFQUFBSSxhQUFBLENBQUFBLGFBQUEsS0FFQW5ELGlCQUFpQixHQUNqQitDLEtBQUssQ0FBQzBaLFlBQVksR0FFdkJsYSxPQUFPO0VBQ1A7RUFDQTZkLGlCQUNGLENBQUM7O0VBRUQ7RUFDQTtFQUNBLE9BQU9FLGdCQUFnQixDQUFDQyxTQUFTLEdBQzdCQyxnQkFBZ0IsQ0FBQ0YsZ0JBQWdCLENBQUNwRCxXQUFXLEVBQUVrRCxpQkFBaUIsQ0FBQyxHQUNqRUUsZ0JBQWdCLENBQUNwRCxXQUFXO0FBQ2xDOztBQUVBO0FBQ0EsU0FBU3VELGdDQUFnQ0EsQ0FDdkNyTCxPQUFpRCxFQUNaO0VBQ3JDLElBQUksQ0FBQ0EsT0FBTyxJQUFJLEVBQUUsZ0JBQWdCLElBQUlBLE9BQU8sQ0FBQyxFQUFFO0lBQzlDLE9BQU92VSxTQUFTO0VBQ2xCO0VBQ0EsSUFBTTZmLEtBQUssR0FBSXRMLE9BQU8sQ0FBZ0N1TCxjQUFjO0VBQ3BFLElBQUlELEtBQUssSUFBSSxJQUFJLElBQUlFLE9BQUEsQ0FBT0YsS0FBSyxNQUFLLFFBQVEsSUFBSXBVLEtBQUssQ0FBQ0MsT0FBTyxDQUFDbVUsS0FBSyxDQUFDLEVBQUU7SUFDdEUsT0FBTzdmLFNBQVM7RUFDbEI7RUFDQSxPQUFPNmYsS0FBSztBQUNkOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVNGLGdCQUFnQkEsQ0FBQ3RELFdBQXFCLEVBQUVrRCxpQkFBb0MsRUFBWTtFQUMvRixJQUFPbk8sVUFBVSxHQUEyQm1PLGlCQUFpQixDQUF0RG5PLFVBQVU7SUFBRW1ELE9BQU8sR0FBa0JnTCxpQkFBaUIsQ0FBMUNoTCxPQUFPO0lBQUU0SyxZQUFZLEdBQUlJLGlCQUFpQixDQUFqQ0osWUFBWTtFQUN4QyxJQUFNbE0sVUFBVSxHQUFHb0osV0FBVyxDQUFDemMsT0FBTyxDQUFDeUosTUFBTSxDQUFDLFVBQUE5QyxDQUFDO0lBQUEsT0FDN0NBLENBQUMsQ0FBQzdCLE1BQU0sQ0FBQ0gsSUFBSSxDQUFDLFVBQUF5YixPQUFPO01BQUEsT0FBSTVPLFVBQVUsQ0FBQzdILFFBQVEsQ0FBQ3lXLE9BQU8sQ0FBQztJQUFBLEVBQUM7RUFBQSxDQUN4RCxDQUFDO0VBQ0QsSUFBTUMsZUFBeUIsR0FBRzVyQixJQUFJLENBQ3BDNGUsVUFBVSxDQUFDbEYsTUFBTSxDQUFDLFVBQUNDLElBQUksRUFBRXpILENBQUM7SUFBQSxVQUFBbUQsTUFBQSxDQUFBQyxrQkFBQSxDQUFTcUUsSUFBSSxHQUFBckUsa0JBQUEsQ0FBS3BELENBQUMsQ0FBQzdCLE1BQU07RUFBQSxDQUFDLEVBQUUsRUFBYyxDQUN2RSxDQUFDO0VBQ0QsSUFBTXdiLFNBQVMsR0FBRzlPLFVBQVUsQ0FBQ3ZPLE1BQU0sR0FBRyxDQUFDO0VBRXZDLElBQUlzZCxTQUFTLEdBQUcsQ0FBQ0QsU0FBUyxHQUN0QjdELFdBQVcsQ0FBQzljLE1BQU0sQ0FBQzhKLE1BQU0sQ0FBQyxVQUFBN0UsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ2pILE1BQU0sQ0FBQ21ILE1BQU0sSUFBSTBNLFVBQVUsQ0FBQzdILFFBQVEsQ0FBQy9FLENBQUMsQ0FBQ2pILE1BQU0sQ0FBQ21ILE1BQU0sQ0FBQztFQUFBLEVBQUMsR0FDdkYsRUFBRTtFQUVOLElBQU1zYSxjQUFjLEdBQUc1TixVQUFVLENBQUNyRCxNQUFNLENBQ3RDLFVBQUNDLElBQUksRUFBRTVRLEVBQUU7SUFBQSxPQUFBa0YsYUFBQSxDQUFBQSxhQUFBLEtBQ0owTCxJQUFJLE9BQUFwRyxlQUFBLEtBQ054SyxFQUFFLEVBQUdpZixXQUFXLENBQUN2YyxRQUFRLENBQUMxQyxFQUFFLENBQUM7RUFBQSxDQUM5QixFQUNGLENBQUMsQ0FDSCxDQUFDO0VBRUQsSUFBSSxDQUFDK2lCLFNBQVMsQ0FBQ3RkLE1BQU0sSUFBSSxDQUFDMFIsT0FBTyxJQUFJLENBQUMsQ0FBQyxFQUFFNkwsZ0JBQWdCLEtBQUssS0FBSyxFQUFFO0lBQ25FO0lBQ0EsSUFBTTdVLE1BQU0sR0FBRzhVLGdCQUFnQixDQUFDaEUsV0FBVyxFQUFFMkMsY0FBYyxDQUFDO0lBQzVEM0MsV0FBVyxHQUFHOVEsTUFBTSxDQUFDckosS0FBSztJQUMxQmllLFNBQVMsR0FBRzVVLE1BQU0sQ0FBQzRVLFNBQVM7RUFDOUI7RUFFQSxJQUFJOUQsV0FBVyxDQUFDdGIsU0FBUyxDQUFDOEIsTUFBTSxFQUFFO0lBQ2hDO0lBQ0FzZCxTQUFTLEdBQUc5RCxXQUFXLENBQUM5YyxNQUFNLENBQUM4SixNQUFNLENBQ25DLFVBQUE3RSxDQUFDO01BQUEsT0FBSUEsQ0FBQyxDQUFDakgsTUFBTSxDQUFDbUgsTUFBTSxJQUFJME0sVUFBVSxDQUFDN0gsUUFBUSxDQUFDL0UsQ0FBQyxDQUFDakgsTUFBTSxDQUFDbUgsTUFBTSxDQUFDO0lBQUEsQ0FDOUQsQ0FBQztJQUNEMlgsV0FBVyxHQUFBL1osYUFBQSxDQUFBQSxhQUFBLEtBQ04rWixXQUFXO01BQ2R0YixTQUFTLEVBQUU3SyxzQkFBc0IsQ0FBQ21tQixXQUFXLENBQUN0YixTQUFTLEVBQUVvZixTQUFTO0lBQUMsRUFDcEU7RUFDSDtFQUVBOUQsV0FBVyxHQUFHOWdCLGlDQUFpQyxDQUM3QzhnQixXQUFXLEVBQ1h1RCxnQ0FBZ0MsQ0FBQ3JMLE9BQU8sQ0FBQyxFQUN6Q25ELFVBQ0YsQ0FBQzs7RUFFRDtFQUNBQSxVQUFVLENBQUMzTixPQUFPLENBQUMsVUFBQWlCLE1BQU0sRUFBSTtJQUMzQixJQUFNNGIsYUFBYSxHQUFHakUsV0FBVyxDQUFDOWIsaUJBQWlCLENBQUNwRCxPQUFPLENBQUNJLE1BQU0sQ0FBQ0MsWUFBWSxDQUFDa0gsTUFBTSxDQUFDO0lBQ3ZGO0lBQ0EsSUFDRSxDQUFBNlAsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUVnTSxrQkFBa0IsTUFBSyxLQUFLLEtBQ3BDLENBQUM5VSxLQUFLLENBQUNDLE9BQU8sQ0FBQzRVLGFBQWEsQ0FBQyxJQUFJLENBQUNBLGFBQWEsQ0FBQ3pkLE1BQU0sQ0FBQyxFQUN4RDtNQUNBO01BQ0F3WixXQUFXLEdBQUdtRSxrQkFBa0IsQ0FBQ25FLFdBQVcsRUFBRTJDLGNBQWMsQ0FBQ3RhLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZFO0VBQ0YsQ0FBQyxDQUFDO0VBRUYsSUFBTStiLGVBQWUsR0FBR1AsU0FBUyxHQUM3QjNjLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDNlksV0FBVyxDQUFDdmMsUUFBUSxDQUFDLEdBQ2pDekwsSUFBSSxDQUFDa1AsTUFBTSxDQUFDQyxJQUFJLENBQUN3YixjQUFjLENBQUMsQ0FBQ3RWLE1BQU0sQ0FBQ3VXLGVBQWUsQ0FBQyxDQUFDO0VBRTdELElBQUl0VCxZQUFZLEdBQUdrRCx3QkFBd0IsQ0FBQ3dNLFdBQVcsRUFBRW9FLGVBQWUsRUFBRXpnQixTQUFTLENBQUM7O0VBRXBGO0VBQ0E7RUFDQTJNLFlBQVksR0FBRzNKLHFCQUFxQixDQUFDMkosWUFBWSxDQUFDOztFQUVsRDtFQUNBQSxZQUFZLEdBQ1Z3UyxZQUFZLElBQUlBLFlBQVksQ0FBQ3RjLE1BQU0sR0FBRyxDQUFDLEdBQ25DMmMsbUJBQW1CLENBQUM3UyxZQUFZLEVBQUU7SUFDaENqTCxPQUFPLEVBQUV5ZCxZQUFZO0lBQ3JCSSxpQkFBaUIsRUFBQWpkLGFBQUEsQ0FBQUEsYUFBQSxLQUFNaWQsaUJBQWlCO01BQUVKLFlBQVksRUFBRTtJQUFFO0VBQzVELENBQUMsQ0FBQyxHQUNGeFMsWUFBWTs7RUFFbEI7RUFDQSxJQUFJd1QsU0FBUyxDQUFDdGQsTUFBTSxJQUFJLENBQUMwUixPQUFPLElBQUksQ0FBQyxDQUFDLEVBQUVtTSxTQUFTLEVBQUU7SUFDakQsSUFBTUMsTUFBTSxHQUFHM2pCLGFBQWEsQ0FBQ21qQixTQUFTLENBQUM7SUFDdkMsSUFBSVEsTUFBTSxFQUFFO01BQ1YsSUFBTUMsYUFBYSxHQUFHaGYsc0JBQXNCLENBQUMsQ0FBQyxDQUFDVyxHQUFHLENBQUMsWUFBTTtRQUN2RCxPQUFPek0sWUFBWSxDQUFDNnFCLE1BQU0sQ0FBQztNQUM3QixDQUFDLENBQUM7TUFDRmhVLFlBQVksR0FBR2xZLFFBQVEsQ0FBQ2tZLFlBQVksRUFBRWlVLGFBQWEsQ0FBQztJQUN0RDtFQUNGOztFQUVBO0VBQ0EsT0FBT2pVLFlBQVk7QUFDckI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU2tVLG9CQUFvQkEsQ0FDbEMzZSxLQUFlLEVBQ2Y4QixNQUFrRCxFQUN4QztFQUNWLE9BQU95WCx5QkFBeUIsQ0FBQ3ZaLEtBQUssRUFBRTtJQUFDd0MsTUFBTSxFQUFFVixNQUFNLENBQUNVLE1BQU07SUFBRW9DLEtBQUssRUFBRTtNQUFDekosS0FBSyxFQUFFMkcsTUFBTSxDQUFDM0c7SUFBSztFQUFDLENBQUMsQ0FBQztBQUNoRztBQUVBLElBQU15akIsNEJBQTRCLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQzs7QUFFbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBTUMsMEJBQTBCLEdBQUcsU0FBN0JBLDBCQUEwQkEsQ0FBSWphLEtBQUssRUFBRXJDLE9BQU8sRUFBSztFQUNyRCxJQUFNdWMsY0FBYyxHQUFHemQsTUFBTSxDQUFDMGQsT0FBTyxDQUFDbmEsS0FBSyxDQUFDLENBQUNpSCxNQUFNLENBQUMsVUFBQzJHLEdBQUcsRUFBRUcsS0FBSyxFQUFLO0lBQ2xFLElBQUFxTSxNQUFBLEdBQUFDLGNBQUEsQ0FBcUJ0TSxLQUFLO01BQW5CblIsR0FBRyxHQUFBd2QsTUFBQTtNQUFFOWEsS0FBSyxHQUFBOGEsTUFBQTtJQUNqQjtJQUNBLElBQUksQ0FBQ0osNEJBQTRCLENBQUN2WCxRQUFRLENBQUM3RixHQUFHLENBQUMsRUFBRTtNQUMvQyxPQUFPZ1IsR0FBRztJQUNaOztJQUVBO0lBQ0E7SUFDQSxJQUFJaFIsR0FBRyxLQUFLLE9BQU8sSUFBSSxDQUFDdk0sVUFBVSxDQUFDaVAsS0FBSyxDQUFDLEVBQUU7TUFDekMsT0FBT3NPLEdBQUc7SUFDWjs7SUFFQTtJQUNBLE9BQUFwUyxhQUFBLENBQUFBLGFBQUEsS0FBV29TLEdBQUcsT0FBQTlNLGVBQUEsS0FBR2xFLEdBQUcsRUFBR3hNLGFBQWEsQ0FBQ2tQLEtBQUssQ0FBQyxHQUFHdFMsU0FBUyxDQUFDMlEsT0FBTyxDQUFDZixHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTBDLEtBQUssQ0FBQyxHQUFHQSxLQUFLO0VBQzVGLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUVOLE9BQU80YSxjQUFjO0FBQ3ZCLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU3ZGLHlCQUF5QkEsQ0FDdkN2WixLQUFlLEVBQ2Y4QixNQUF1RCxFQUM3QztFQUNWLElBQU9VLE1BQU0sR0FBV1YsTUFBTSxDQUF2QlUsTUFBTTtJQUFFb0MsS0FBSyxHQUFJOUMsTUFBTSxDQUFmOEMsS0FBSztFQUNwQixJQUFPaEgsUUFBUSxHQUFJb0MsS0FBSyxDQUFqQnBDLFFBQVE7RUFDZixJQUFNc2hCLFFBQVEsR0FBR3RoQixRQUFRLENBQUM0RSxNQUFNLENBQUM7RUFFakMsSUFBSTBjLFFBQVEsRUFBRTtJQUNaLElBQU1KLGNBQWMsR0FBR0QsMEJBQTBCLENBQUNqYSxLQUFLLEVBQUVzYSxRQUFRLENBQUM7SUFDbEU7SUFDQTtJQUNBO0lBQ0EsT0FBQTllLGFBQUEsQ0FBQUEsYUFBQSxLQUNLSixLQUFLO01BQ1JwQyxRQUFRLEVBQUF3QyxhQUFBLENBQUFBLGFBQUEsS0FDSHhDLFFBQVEsT0FBQThILGVBQUEsS0FDVmxELE1BQU0sRUFBRzVKLGtCQUFrQixDQUFDc21CLFFBQVEsRUFBRUosY0FBYyxDQUFDO0lBQ3ZEO0VBRUw7RUFFQSxPQUFPOWUsS0FBSztBQUNkOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBUzBiLHVCQUF1QkEsQ0FDckMxYixLQUFRLEVBQ1I4QixNQUFtRCxFQUNoRDtFQUFBLElBQUFxZCxxQkFBQTtFQUNIO0VBQ0EsSUFBTUMsZUFBZSxHQUFHLENBQUMsR0FBR3RkLE1BQU0sQ0FBQ2dZLE9BQU87RUFDMUMsSUFBTXVGLFNBQVMsSUFBQUYscUJBQUEsR0FBR25mLEtBQUssQ0FBQ25CLFNBQVMsQ0FBQ3VnQixlQUFlLENBQUMsY0FBQUQscUJBQUEsdUJBQWhDQSxxQkFBQSxDQUFrQzloQixNQUFNO0VBQzFELElBQU9BLE1BQU0sR0FBSTJDLEtBQUssQ0FBZjNDLE1BQU07O0VBRWI7RUFDQSxJQUFNNGdCLFNBQVMsR0FBRzVnQixNQUFNLENBQUNnRCxHQUFHLENBQUMsVUFBQUgsS0FBSztJQUFBLE9BQ2hDbWYsU0FBUyxJQUFJLENBQUNBLFNBQVMsQ0FBQ25mLEtBQUssQ0FBQ2hGLEVBQUUsQ0FBQyxJQUFJZ0YsS0FBSyxDQUFDN0UsTUFBTSxDQUFDdUYsU0FBUyxHQUN2RFYsS0FBSyxDQUFDbUYsaUJBQWlCLENBQUM7TUFDdEI7TUFDQXpFLFNBQVMsRUFBRTtJQUNiLENBQUMsQ0FBQyxHQUNGVixLQUFLO0VBQUEsQ0FDWCxDQUFDOztFQUVEO0VBQ0EsT0FBQUUsYUFBQSxDQUFBQSxhQUFBLEtBQ0tKLEtBQUs7SUFDUjNDLE1BQU0sRUFBRTRnQixTQUFTO0lBQ2pCcGYsU0FBUyxFQUFFO0VBQUU7QUFFakI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTXlnQixnQkFBZ0IsR0FBRyxTQUFuQkEsZ0JBQWdCQSxDQUMzQnRmLEtBQWUsRUFDZjhCLE1BQThDLEVBQ2pDO0VBQ2IsSUFBT3lkLEtBQUssR0FBaUN6ZCxNQUFNLENBQTVDeWQsS0FBSztJQUFBQyxnQkFBQSxHQUFpQzFkLE1BQU0sQ0FBckMyZCxRQUFRO0lBQVJBLFFBQVEsR0FBQUQsZ0JBQUEsY0FBR2xzQixnQkFBZ0IsR0FBQWtzQixnQkFBQTtFQUN6QyxJQUFJLENBQUNELEtBQUssQ0FBQzVlLE1BQU0sRUFBRTtJQUNqQixPQUFPWCxLQUFLO0VBQ2Q7RUFFQSxJQUFNWixtQkFBbUIsR0FBR21LLEtBQUssQ0FBQ21XLElBQUksQ0FBQ0gsS0FBSyxDQUFDLENBQUMxVCxNQUFNLENBQ2xELFVBQUNDLElBQUksRUFBRXpILENBQUMsRUFBRTlELENBQUM7SUFBQSxPQUFLM0ksTUFBTSxDQUFDK25CLDBCQUEwQixDQUFDdGIsQ0FBQyxFQUFFOUQsQ0FBQyxDQUFDLENBQUMsQ0FBQ3VMLElBQUksQ0FBQztFQUFBLEdBQzlELENBQUMsQ0FDSCxDQUFDO0VBRUQsSUFBTTNNLFdBQVcsR0FBRztJQUNsQnlnQixTQUFTLEVBQUUsRUFBRTtJQUNiQyxXQUFXLEVBQUVOLEtBQUs7SUFDbEJFLFFBQVEsRUFBUkE7RUFDRixDQUFDO0VBRUQsSUFBTS9jLFNBQVMsR0FBRzlLLE1BQU0sQ0FBQztJQUFDd0gsbUJBQW1CLEVBQW5CQSxtQkFBbUI7SUFBRUQsV0FBVyxFQUFYQTtFQUFXLENBQUMsQ0FBQyxDQUFDYSxLQUFLLENBQUM7RUFFbkUsT0FBTzhmLG1CQUFtQixDQUFDcGQsU0FBUyxDQUFDO0FBQ3ZDLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU3FkLDBCQUEwQkEsQ0FDeEMvZixLQUFlLEVBQ2Y4QixNQUFpRCxFQUN2QztFQUNWLElBQUksQ0FBQzlCLEtBQUssQ0FBQ2IsV0FBVyxFQUFFO0lBQ3RCLE9BQU9hLEtBQUs7RUFDZDtFQUNBLElBQU9nZ0IsUUFBUSxHQUFlbGUsTUFBTSxDQUE3QmtlLFFBQVE7SUFBRUosU0FBUyxHQUFJOWQsTUFBTSxDQUFuQjhkLFNBQVM7RUFDMUIsSUFBQUssa0JBQUEsR0FBZ0NqZ0IsS0FBSyxDQUFDYixXQUFXO0lBQTFDMGdCLFdBQVcsR0FBQUksa0JBQUEsQ0FBWEosV0FBVztJQUFFSixRQUFRLEdBQUFRLGtCQUFBLENBQVJSLFFBQVE7RUFDNUIsSUFBTVMsaUJBQWlCLEdBQUdDLGdDQUFnQyxDQUFDbmdCLEtBQUssRUFBRTtJQUNoRWdnQixRQUFRLEVBQVJBLFFBQVE7SUFDUkksUUFBUSxFQUFFO01BQUNDLE9BQU8sRUFBRSxDQUFDO01BQUVoRSxPQUFPLEVBQUU7SUFBTTtFQUN4QyxDQUFDLENBQUM7O0VBRUY7RUFDQSxJQUFNaUUsY0FBYyxHQUFHeG9CLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQ0YsTUFBTSxDQUFDO0lBQUNnb0IsU0FBUyxFQUFUQTtFQUFTLENBQUMsQ0FBQyxDQUFDLENBQUNNLGlCQUFpQixDQUFDO0VBRW5GLE9BQU8zdEIsUUFBUSxDQUNiK3RCLGNBQWMsRUFDZDl0QixVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM2TixHQUFHLENBQUN3ZixXQUFXLENBQUNsZixNQUFNLEdBQUdwTixZQUFZLEdBQUc7SUFBQSxPQUFNa3NCLFFBQVEsQ0FBQ0csU0FBUyxDQUFDO0VBQUEsRUFDbkYsQ0FBQztBQUNIOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNFLG1CQUFtQkEsQ0FBQzlmLEtBQWUsRUFBWTtFQUM3RCxJQUFJLENBQUNBLEtBQUssQ0FBQ2IsV0FBVyxFQUFFO0lBQ3RCLE9BQU9hLEtBQUs7RUFDZDtFQUNBLElBQU82ZixXQUFXLEdBQUk3ZixLQUFLLENBQUNiLFdBQVcsQ0FBaEMwZ0IsV0FBVztFQUNsQixJQUFBVSxZQUFBLEdBQUFDLFFBQUEsQ0FBd0NYLFdBQVc7SUFBNUNZLElBQUksR0FBQUYsWUFBQTtJQUFLRyxvQkFBb0IsR0FBQUgsWUFBQSxDQUFBelosS0FBQTs7RUFFcEM7RUFDQSxJQUFNcEUsU0FBUyxHQUFHNUssS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDRixNQUFNLENBQUM7SUFBQ2lvQixXQUFXLEVBQUVhO0VBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMxZ0IsS0FBSyxDQUFDO0VBRTFGLElBQU1rZ0IsaUJBQWlCLEdBQUdDLGdDQUFnQyxDQUFDemQsU0FBUyxFQUFFO0lBQ3BFc2QsUUFBUSxFQUFFUyxJQUFJLENBQUN2WixJQUFJO0lBQ25Ca1osUUFBUSxFQUFFO01BQUNDLE9BQU8sRUFBRSxDQUFDO01BQUVoRSxPQUFPLEVBQUU7SUFBWTtFQUM5QyxDQUFDLENBQUM7RUFFRixJQUFPL2MsT0FBTyxHQUFpQlUsS0FBSyxDQUE3QlYsT0FBTztJQUFFQyxXQUFXLEdBQUlTLEtBQUssQ0FBcEJULFdBQVc7RUFDM0IsT0FBT2hOLFFBQVEsQ0FDYjJ0QixpQkFBaUIsRUFDakJTLGdCQUFnQixDQUNkRixJQUFJLEVBQ0ovZCxTQUFTLENBQUN2RCxXQUFXLElBQUl1RCxTQUFTLENBQUN2RCxXQUFXLENBQUN5Z0IsU0FBUyxFQUN4RHRnQixPQUFPLEVBQ1BDLFdBQ0YsQ0FDRixDQUFDO0FBQ0g7QUFFQSxPQUFPLFNBQVNvaEIsZ0JBQWdCQSxDQUFDRixJQUFJLEVBQUViLFNBQVMsRUFBNEM7RUFBQSxJQUExQ3RnQixPQUFpQixHQUFBc0gsU0FBQSxDQUFBakcsTUFBQSxRQUFBaUcsU0FBQSxRQUFBOUksU0FBQSxHQUFBOEksU0FBQSxNQUFHLEVBQUU7RUFBQSxJQUFFckgsV0FBVyxHQUFBcUgsU0FBQSxDQUFBakcsTUFBQSxRQUFBaUcsU0FBQSxRQUFBOUksU0FBQSxHQUFBOEksU0FBQSxNQUFHLENBQUMsQ0FBQztFQUN4RixPQUFPbFUsY0FBYyxDQUFDO0lBQUMrdEIsSUFBSSxFQUFKQSxJQUFJO0lBQUViLFNBQVMsRUFBVEEsU0FBUztJQUFFdGdCLE9BQU8sRUFBUEEsT0FBTztJQUFFQyxXQUFXLEVBQVhBO0VBQVcsQ0FBQyxDQUFDLENBQUNxaEIsS0FBSztFQUNsRTtFQUNBO0VBQ0EsVUFBQUMsR0FBRztJQUFBLE9BQ0RydEIsYUFBYSxDQUFDO01BQ1pxdEIsR0FBRyxFQUFIQSxHQUFHO01BQ0hiLFFBQVEsRUFBRVMsSUFBSSxDQUFDdlosSUFBSTtNQUNuQnVZLFFBQVEsRUFBRSxTQUFWQSxRQUFRQSxDQUFFcFcsTUFBTTtRQUFBLE9BQ2QzVixrQkFBa0IsQ0FBQztVQUNqQm90QixPQUFPLEVBQUV6WCxNQUFNO1VBQ2Z1VyxTQUFTLEVBQVRBO1FBQ0YsQ0FBQyxDQUFDO01BQUE7SUFDTixDQUFDLENBQUM7RUFBQTtFQUVKO0VBQ0EsVUFBQXpiLEdBQUc7SUFBQSxPQUFJOVEsWUFBWSxDQUFDb3RCLElBQUksQ0FBQ3ZaLElBQUksRUFBRS9DLEdBQUcsQ0FBQztFQUFBLENBQ3JDLENBQUM7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTNGMseUJBQXlCQSxDQUN2Qy9nQixLQUFlLEVBQ2Y4QixNQUF1RCxFQUM3QztFQUNWLElBQUFrZixnQkFBQSxHQUE2QmxmLE1BQU0sQ0FBQ2dZLE9BQU87SUFBcENnSCxPQUFPLEdBQUFFLGdCQUFBLENBQVBGLE9BQU87SUFBRWxCLFNBQVMsR0FBQW9CLGdCQUFBLENBQVRwQixTQUFTO0VBRXpCLElBQU1NLGlCQUFpQixHQUFHQyxnQ0FBZ0MsQ0FBQ25nQixLQUFLLEVBQUU7SUFDaEVnZ0IsUUFBUSxFQUFFYyxPQUFPLENBQUNkLFFBQVE7SUFDMUJJLFFBQVEsRUFBRTtNQUFDQyxPQUFPLEVBQUUsQ0FBQztNQUFFaEUsT0FBTyxFQUFFO0lBQWU7RUFDakQsQ0FBQyxDQUFDO0VBRUYsT0FBTzlwQixRQUFRLENBQ2IydEIsaUJBQWlCLEVBQ2pCdnRCLGlCQUFpQixDQUFDO0lBQUNtdUIsT0FBTyxFQUFQQSxPQUFPO0lBQUVsQixTQUFTLEVBQVRBO0VBQVMsQ0FBQyxDQUFDLENBQUNnQixLQUFLLENBQzNDLFVBQUF2WCxNQUFNO0lBQUEsT0FBSWpXLG1CQUFtQixDQUFDO01BQUM0c0IsUUFBUSxFQUFFYyxPQUFPLENBQUNkLFFBQVE7TUFBRUosU0FBUyxFQUFFdlc7SUFBTSxDQUFDLENBQUM7RUFBQSxHQUM5RSxVQUFBbEYsR0FBRztJQUFBLE9BQUk5USxZQUFZLENBQUN5dEIsT0FBTyxDQUFDZCxRQUFRLEVBQUU3YixHQUFHLENBQUM7RUFBQSxDQUM1QyxDQUNGLENBQUM7QUFDSDs7QUFFQTtBQUNBLE9BQU8sU0FBUzhjLGFBQWFBLENBQUEsRUFBOEI7RUFBQSxJQUE3QkMsWUFBWSxHQUFBdGEsU0FBQSxDQUFBakcsTUFBQSxRQUFBaUcsU0FBQSxRQUFBOUksU0FBQSxHQUFBOEksU0FBQSxNQUFHLENBQUMsQ0FBQztFQUFBLElBQUV3WixRQUFRLEdBQUF4WixTQUFBLENBQUFqRyxNQUFBLE9BQUFpRyxTQUFBLE1BQUE5SSxTQUFBO0VBQ3ZEO0VBQ0E7RUFDQSxJQUFJLENBQUNzaUIsUUFBUSxJQUFJLENBQUNBLFFBQVEsQ0FBQ0MsT0FBTyxFQUFFO0lBQ2xDLE9BQU8sQ0FBQyxDQUFDO0VBQ1g7RUFFQSxPQUFPO0lBQ0xBLE9BQU8sRUFBRUQsUUFBUSxDQUFDQztFQUNwQixDQUFDO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTWMsb0JBQW9CLEdBQUcsU0FBdkJBLG9CQUFvQkEsQ0FDL0JuaEIsS0FBZSxFQUFBb2hCLE1BQUEsRUFJRjtFQUFBLElBQUFDLGlCQUFBO0VBQUEsSUFBQUMsY0FBQSxHQUFBRixNQUFBLENBRlh0SCxPQUFPO0lBQUcrRyxHQUFHLEdBQUFTLGNBQUEsQ0FBSFQsR0FBRztJQUFFYixRQUFRLEdBQUFzQixjQUFBLENBQVJ0QixRQUFRO0lBQUVJLFFBQVEsR0FBQWtCLGNBQUEsQ0FBUmxCLFFBQVE7SUFBRW1CLFdBQVcsR0FBQUQsY0FBQSxDQUFYQyxXQUFXO0lBQUU5QixRQUFRLEdBQUE2QixjQUFBLENBQVI3QixRQUFRO0VBRzFELElBQU1TLGlCQUFpQixHQUFHQyxnQ0FBZ0MsQ0FBQ25nQixLQUFLLEVBQUU7SUFDaEVnZ0IsUUFBUSxFQUFSQSxRQUFRO0lBQ1JJLFFBQVEsRUFBRWEsYUFBYSxDQUFDamhCLEtBQUssQ0FBQ1osbUJBQW1CLENBQUM0Z0IsUUFBUSxDQUFDLEVBQUVJLFFBQVE7RUFDdkUsQ0FBQyxDQUFDO0VBRUYsT0FBTzd0QixRQUFRLENBQUMydEIsaUJBQWlCLEtBQUExWSxNQUFBLENBQUFDLGtCQUFBLENBQzNCaFMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDK3JCLDBCQUEwQixJQUNyRHhCLFFBQVEsQ0FBQ3lCLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFDMUIsQ0FBQUYsV0FBVyxhQUFYQSxXQUFXLGdCQUFBRixpQkFBQSxHQUFYRSxXQUFXLENBQUVHLElBQUksY0FBQUwsaUJBQUEsdUJBQWpCQSxpQkFBQSxDQUFtQjFnQixNQUFNLElBQUcsQ0FBQyxHQUN6QixDQUNFaE8saUJBQWlCLENBQUM7SUFBQ211QixPQUFPLEVBQUVTLFdBQVc7SUFBRTNCLFNBQVMsRUFBRTtFQUFFLENBQUMsQ0FBQyxDQUFDZ0IsS0FBSyxDQUM1RCxVQUFBdlgsTUFBTTtJQUFBLE9BQUkvVixnQkFBZ0IsQ0FBQytWLE1BQU0sQ0FBQztFQUFBLEdBQ2xDLFVBQUFsRixHQUFHO0lBQUEsT0FBSTlRLFlBQVksQ0FBQzJzQixRQUFRLEVBQUU3YixHQUFHLENBQUM7RUFBQSxDQUNwQyxDQUFDLENBQ0YsR0FDRCxFQUFFLElBQ052UixXQUFXLENBQUNpdUIsR0FBRyxDQUFDNWYsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDMmYsS0FBSyxDQUMzQixVQUFBZSxNQUFBLEVBQW1CO0lBQUEsSUFBakJ6ZCxLQUFLLEdBQUF5ZCxNQUFBLENBQUx6ZCxLQUFLO01BQUVELElBQUksR0FBQTBkLE1BQUEsQ0FBSjFkLElBQUk7SUFDWCxPQUFPQSxJQUFJLEdBQ1B3YixRQUFRLENBQUM4QixXQUFXLENBQUMsR0FDckIvdEIsYUFBYSxDQUFDO01BQ1pxdEIsR0FBRyxFQUFIQSxHQUFHO01BQ0hiLFFBQVEsRUFBUkEsUUFBUTtNQUNSSSxRQUFRLEVBQUVsYyxLQUFLLENBQUNrYyxRQUFRO01BQ3hCbUIsV0FBVyxFQUFFcmQsS0FBSztNQUNsQnViLFFBQVEsRUFBUkE7SUFDRixDQUFDLENBQUM7RUFDUixDQUFDLEVBQ0QsVUFBQXRiLEdBQUc7SUFBQSxPQUFJOVEsWUFBWSxDQUFDMnNCLFFBQVEsRUFBRTdiLEdBQUcsQ0FBQztFQUFBLENBQ3BDLENBQUMsRUFDRixDQUFDO0FBQ0osQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNeWQsbUJBQW1CLEdBQUcsU0FBdEJBLG1CQUFtQkEsQ0FDOUI1aEIsS0FBZSxFQUFBNmhCLE1BQUEsRUFFRjtFQUFBLElBRFpsWSxLQUFLLEdBQUFrWSxNQUFBLENBQUxsWSxLQUFLO0lBQUVxVyxRQUFRLEdBQUE2QixNQUFBLENBQVI3QixRQUFRO0VBRWhCO0VBQ0FsdUIsT0FBTyxDQUFDcWYsSUFBSSxDQUFDeEgsS0FBSyxDQUFDO0VBQ25CLElBQUksQ0FBQzNKLEtBQUssQ0FBQ2IsV0FBVyxFQUFFO0lBQ3RCLE9BQU9hLEtBQUs7RUFDZDtFQUNBLElBQUE4aEIsbUJBQUEsR0FBMkM5aEIsS0FBSyxDQUFDYixXQUFXO0lBQXJEMGdCLFdBQVcsR0FBQWlDLG1CQUFBLENBQVhqQyxXQUFXO0lBQUVKLFFBQVEsR0FBQXFDLG1CQUFBLENBQVJyQyxRQUFRO0lBQUVHLFNBQVMsR0FBQWtDLG1CQUFBLENBQVRsQyxTQUFTO0VBRXZDLElBQU1sZCxTQUFTLEdBQUd5ZCxnQ0FBZ0MsQ0FBQ25nQixLQUFLLEVBQUU7SUFDeERnZ0IsUUFBUSxFQUFSQSxRQUFRO0lBQ1JJLFFBQVEsRUFBRTtNQUFDelcsS0FBSyxFQUFMQTtJQUFLO0VBQ2xCLENBQUMsQ0FBQzs7RUFFRjtFQUNBLE9BQU9wWCxRQUFRLENBQ2JtUSxTQUFTLEVBQ1RsUSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM2TixHQUFHLENBQUN3ZixXQUFXLENBQUNsZixNQUFNLEdBQUdwTixZQUFZLEdBQUc7SUFBQSxPQUFNa3NCLFFBQVEsQ0FBQ0csU0FBUyxDQUFDO0VBQUEsRUFDbkYsQ0FBQztBQUNILENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTW1DLHFCQUFxQixHQUFHLFNBQXhCQSxxQkFBcUJBLENBQ2hDL2hCLEtBQWUsRUFBQWdpQixNQUFBLEVBRUY7RUFBQSxJQURaeGYsTUFBTSxHQUFBd2YsTUFBQSxDQUFOeGYsTUFBTTtFQUVQO0VBQ0EsSUFBTXlmLE9BQU8sR0FBR3RzQixPQUFPLENBQUM2TSxNQUFNLENBQUM7RUFFL0IsT0FBT3lmLE9BQU8sQ0FBQ3BXLE1BQU0sQ0FBQyxVQUFDQyxJQUFJLEVBQUU1USxFQUFFO0lBQUEsT0FBS3pHLGdCQUFnQixDQUFDcVgsSUFBSSxFQUFFNVEsRUFBRSxDQUFDO0VBQUEsR0FBRThFLEtBQUssQ0FBQztBQUN4RSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU1raUIsaUJBQWlCLEdBQUcsU0FBcEJBLGlCQUFpQkEsQ0FDNUJsaUIsS0FBZSxFQUNmOEIsTUFBK0M7RUFBQSxPQUFBMUIsYUFBQSxDQUFBQSxhQUFBLEtBRTVDSixLQUFLO0lBQ1I5QyxPQUFPLEVBQUFrRCxhQUFBLENBQUFBLGFBQUEsS0FDRkosS0FBSyxDQUFDOUMsT0FBTyxHQUNiNEUsTUFBTSxDQUFDNFksSUFBSTtFQUNmO0FBQUEsQ0FDRDtBQUNGO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU3lELGdCQUFnQkEsQ0FDOUJuZSxLQUFlLEVBQ2ZwQyxRQUFrQixFQUNxQjtFQUN2QyxJQUFNdWtCLEtBQWMsR0FBRyxFQUFFO0VBQ3pCLElBQU1DLGFBQWEsR0FBRy9nQixNQUFNLENBQUNxSCxNQUFNLENBQUM5SyxRQUFRLENBQUMsQ0FBQ2lPLE1BQU0sQ0FBQyxVQUFDQyxJQUFhLEVBQUV2SixPQUFPLEVBQUs7SUFDL0UsSUFBTThmLFdBQVcsR0FBR2xwQixnQkFBZ0IsQ0FBQ29KLE9BQU8sRUFBRXZDLEtBQUssQ0FBQ2hCLFlBQVksQ0FBQztJQUNqRSxPQUFPcWpCLFdBQVcsSUFBSUEsV0FBVyxDQUFDMWhCLE1BQU0sR0FBR21MLElBQUksQ0FBQ3RFLE1BQU0sQ0FBQzZhLFdBQVcsQ0FBQyxHQUFHdlcsSUFBSTtFQUM1RSxDQUFDLEVBQUVxVyxLQUFLLENBQUM7RUFFVCxPQUFPO0lBQ0xuaUIsS0FBSyxFQUFBSSxhQUFBLENBQUFBLGFBQUEsS0FDQUosS0FBSztNQUNSM0MsTUFBTSxLQUFBbUssTUFBQSxDQUFBQyxrQkFBQSxDQUFNekgsS0FBSyxDQUFDM0MsTUFBTSxHQUFBb0ssa0JBQUEsQ0FBSzJhLGFBQWEsRUFBQztNQUMzQzVrQixVQUFVLEtBQUFnSyxNQUFBLENBQUFDLGtCQUFBLENBRUxyTyx1QkFBdUIsQ0FBQ2dwQixhQUFhLENBQUMsR0FBQTNhLGtCQUFBLENBQ3RDekgsS0FBSyxDQUFDeEMsVUFBVTtJQUNwQixFQUNGO0lBQ0R5Z0IsU0FBUyxFQUFFbUU7RUFDYixDQUFDO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTOUQsa0JBQWtCQSxDQUFDdGUsS0FBSyxFQUFFdUMsT0FBTyxFQUFFO0VBQ2pELElBQU02YixhQUFhLEdBQUdubEIsZ0JBQWdCLENBQUFtSCxhQUFBLENBQUFBLGFBQUEsS0FDakNtQyxPQUFPO0lBQ1YzRCxrQkFBa0IsRUFBRW9CLEtBQUssQ0FBQ3BCO0VBQWtCLEVBQzdDLENBQUM7RUFDRixJQUFNMGpCLE1BQU0sR0FBQWxpQixhQUFBLENBQUFBLGFBQUEsS0FDUEosS0FBSyxDQUFDM0IsaUJBQWlCLENBQUNwRCxPQUFPLENBQUNJLE1BQU0sQ0FBQ0MsWUFBWSxHQUNuRDhpQixhQUFhLENBQ2pCO0VBRUQsT0FBT2hwQixHQUFHLENBQUMsQ0FBQyxtQkFBbUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxFQUFFa3RCLE1BQU0sRUFBRXRpQixLQUFLLENBQUM7QUFDdkY7QUFFQSxPQUFPLFNBQVMyZiwwQkFBMEJBLENBQUNjLElBQUksRUFBRTNRLEtBQUssRUFBRTtFQUN0RCxJQUFNa1EsUUFBUSxHQUFHUyxJQUFJLENBQUN2WixJQUFJLHFCQUFBTSxNQUFBLENBQXFCc0ksS0FBSyxDQUFFO0VBQ3RELE9BQUFwSyxlQUFBLEtBQ0dzYSxRQUFRLEVBQUc7SUFDVjtJQUNBSyxPQUFPLEVBQUUsQ0FBQztJQUNWaEUsT0FBTyxFQUFFLEVBQUU7SUFDWDJELFFBQVEsRUFBUkEsUUFBUTtJQUNSclcsS0FBSyxFQUFFO0VBQ1QsQ0FBQztBQUVMO0FBRUEsT0FBTyxTQUFTd1csZ0NBQWdDQSxDQUFDbmdCLEtBQUssRUFBQXVpQixNQUFBLEVBQXdCO0VBQUEsSUFBckJ2QyxRQUFRLEdBQUF1QyxNQUFBLENBQVJ2QyxRQUFRO0lBQUVJLFFBQVEsR0FBQW1DLE1BQUEsQ0FBUm5DLFFBQVE7RUFDekU7RUFDQSxPQUFPdG9CLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDQSxLQUFLLENBQUNrb0IsUUFBUSxDQUFDLENBQUNwb0IsTUFBTSxDQUFDd29CLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ3BnQixLQUFLLENBQUM7QUFDL0U7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVMyTix3QkFBd0JBLENBQ3RDM04sS0FBUSxFQUNSd0MsTUFBeUIsRUFDekJvTSxhQUFzQixFQUNuQjtFQUNILElBQU1xVCxPQUFPLEdBQUcsT0FBT3pmLE1BQU0sS0FBSyxRQUFRLEdBQUcsQ0FBQ0EsTUFBTSxDQUFDLEdBQUdBLE1BQU07RUFDOUQsSUFBTXliLFNBQWtCLEdBQUcsRUFBRTtFQUM3QixJQUFNL00sWUFBbUIsR0FBRyxFQUFFO0VBRTlCbFIsS0FBSyxDQUFDM0MsTUFBTSxDQUFDa0UsT0FBTyxDQUFDLFVBQUNhLFFBQVEsRUFBRTdCLENBQUMsRUFBSztJQUNwQyxJQUFJNkIsUUFBUSxDQUFDL0csTUFBTSxDQUFDbUgsTUFBTSxJQUFJeWYsT0FBTyxDQUFDNWEsUUFBUSxDQUFDakYsUUFBUSxDQUFDL0csTUFBTSxDQUFDbUgsTUFBTSxDQUFDLEVBQUU7TUFDdEU7TUFDQSxJQUFNQyxRQUFRLEdBQ1ptTSxhQUFhLElBQUlBLGFBQWEsQ0FBQzRULFdBQVcsR0FDdENwZ0IsUUFBUSxHQUNSQSxRQUFRLENBQUM4RyxpQkFBaUIsQ0FBQ2xKLEtBQUssQ0FBQ3BDLFFBQVEsRUFBRWdSLGFBQWEsQ0FBQztNQUUvRCxJQUFBNlQsb0JBQUEsR0FBMkJ2cEIsa0JBQWtCLENBQUN1SixRQUFRLEVBQUV6QyxLQUFLLEVBQUVBLEtBQUssQ0FBQzFDLFNBQVMsQ0FBQ2lELENBQUMsQ0FBQyxDQUFDO1FBQTNFakQsU0FBUyxHQUFBbWxCLG9CQUFBLENBQVRubEIsU0FBUztRQUFFNEMsS0FBSyxHQUFBdWlCLG9CQUFBLENBQUx2aUIsS0FBSztNQUV2QitkLFNBQVMsQ0FBQ25GLElBQUksQ0FBQzVZLEtBQUssQ0FBQztNQUNyQmdSLFlBQVksQ0FBQzRILElBQUksQ0FBQ3hiLFNBQVMsQ0FBQztJQUM5QixDQUFDLE1BQU07TUFDTDJnQixTQUFTLENBQUNuRixJQUFJLENBQUMxVyxRQUFRLENBQUM7TUFDeEI4TyxZQUFZLENBQUM0SCxJQUFJLENBQUM5WSxLQUFLLENBQUMxQyxTQUFTLENBQUNpRCxDQUFDLENBQUMsQ0FBQztJQUN2QztFQUNGLENBQUMsQ0FBQztFQUVGLElBQU1HLFFBQVEsR0FBQU4sYUFBQSxDQUFBQSxhQUFBLEtBQ1RKLEtBQUs7SUFDUjNDLE1BQU0sRUFBRTRnQixTQUFTO0lBQ2pCM2dCLFNBQVMsRUFBRTRUO0VBQVksRUFDeEI7RUFFRCxPQUFPeFEsUUFBUTtBQUNqQjtBQUVBLE9BQU8sU0FBU0kscUJBQXFCQSxDQUFxQmQsS0FBUSxFQUFLO0VBQUEsSUFBQTBpQixjQUFBO0VBQ3JFO0VBQ0EsSUFBTUMsZ0JBQWdCLEdBQUd4b0IsMEJBQTBCLENBQUM2RixLQUFLLENBQUMzQyxNQUFNLENBQUM7RUFFakUsSUFBSSxDQUFDc2xCLGdCQUFnQixDQUFDaGlCLE1BQU0sRUFBRTtJQUM1QixPQUFBUCxhQUFBLENBQUFBLGFBQUEsS0FDS0osS0FBSztNQUNSZixlQUFlLEVBQUFtQixhQUFBLENBQUFBLGFBQUEsS0FDVkosS0FBSyxDQUFDZixlQUFlO1FBQ3hCaEQsTUFBTSxFQUFFLElBQUk7UUFDWkcsV0FBVyxFQUFFLEtBQUs7UUFDbEJDLFNBQVMsRUFBRSxJQUFJO1FBQ2ZHLGlCQUFpQixFQUFFO01BQUk7SUFDeEI7RUFFTDtFQUVBLElBQU1vbUIsWUFBWSxHQUFHRCxnQkFBZ0IsQ0FBQ3RpQixHQUFHLENBQUMsVUFBQWlDLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUNqSCxNQUFNLENBQUN3RixTQUFTLENBQUM1RSxNQUFNLElBQUksRUFBRTtFQUFBLEVBQUM7RUFDL0U7RUFDQSxJQUFNNG1CLFlBQVksR0FBR3hvQixnQkFBZ0IsQ0FBQ3VvQixZQUFZLENBQUM7RUFDbkQsSUFBTXBtQixpQkFBaUIsR0FBRzNILDJCQUEyQixDQUFDZ3VCLFlBQVksQ0FBQzs7RUFFbkU7RUFDQSxJQUFJQyxlQUFnQyxHQUFHM3dCLElBQUksQ0FDekN3d0IsZ0JBQWdCLENBQUM5VyxNQUFNLENBQUMsVUFBQ0MsSUFBSSxFQUFFNUwsS0FBSyxFQUFLO0lBQ3ZDNEwsSUFBSSxDQUFDZ04sSUFBSSxDQUFBaUssS0FBQSxDQUFUalgsSUFBSSxFQUFBckUsa0JBQUEsQ0FBVXZILEtBQUssQ0FBQzdFLE1BQU0sQ0FBQ3dGLFNBQVMsQ0FBQ3hFLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN0RCxPQUFPeVAsSUFBSTtFQUNiLENBQUMsRUFBRSxFQUFFLENBQ1AsQ0FBQyxDQUFDa1gsSUFBSSxDQUFDLENBQUM7RUFFUkYsZUFBZSxHQUFHQSxlQUFlLENBQUNuaUIsTUFBTSxHQUFHbWlCLGVBQWUsR0FBRyxJQUFJOztFQUVqRTtFQUNBLElBQU1wbUIsUUFBUSxHQUFHb21CLGVBQWUsR0FDM0JodEIsVUFBVSxJQUFJLElBQUksR0FBR00sR0FBRyxDQUFDLEdBQUkwc0IsZUFBZSxDQUFDbmlCLE1BQU0sSUFBSVgsS0FBSyxDQUFDZixlQUFlLENBQUM5QyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQ3pGLElBQUk7RUFFUixJQUFNdUcsU0FBUyxHQUFBdEMsYUFBQSxDQUFBQSxhQUFBLEtBQ1ZKLEtBQUs7SUFDUmYsZUFBZSxFQUFBbUIsYUFBQSxDQUFBQSxhQUFBLEtBQ1ZKLEtBQUssQ0FBQ2YsZUFBZTtNQUN4QmhELE1BQU0sRUFBRTRtQixZQUFZO01BQ3BCcm1CLGlCQUFpQixFQUFqQkEsaUJBQWlCO01BQ2pCRSxRQUFRLEVBQVJBLFFBQVE7TUFDUkwsU0FBUyxFQUFFeW1CO0lBQWU7RUFDM0IsRUFDRjs7RUFFRDtFQUNBLElBQU1HLFlBQVksSUFBQVAsY0FBQSxHQUFHMWlCLEtBQUssQ0FBQ3RDLE9BQU8sY0FBQWdsQixjQUFBLHVCQUFiQSxjQUFBLENBQWVyZ0IsSUFBSSxDQUFDLFVBQUFnQyxDQUFDO0lBQUEsT0FBS0EsQ0FBQyxDQUFxQjZCLHVCQUF1QjtFQUFBLEVBRS9FOztFQUViO0VBQ0E7RUFDQSxJQUFNZ2Qsa0JBQWtCLEdBQUdELFlBQVksR0FDbkM1b0IsZ0JBQWdCLENBQUMsQ0FBQ3dvQixZQUFZLEVBQUVJLFlBQVksQ0FBQ2huQixNQUFNLENBQUMsQ0FBQyxHQUNyRDRtQixZQUFZO0VBQ2hCLElBQU0zbUIsV0FBVyxHQUFHcEgsU0FBUyxDQUFDa0wsS0FBSyxDQUFDZixlQUFlLENBQUMvQyxXQUFXLEVBQUVnbkIsa0JBQWtCLENBQUMsR0FDaEZsakIsS0FBSyxDQUFDZixlQUFlLENBQUMvQyxXQUFXLEdBQ2pDZ25CLGtCQUFrQixDQUFDLENBQUMsQ0FBQztFQUV6QixJQUFJaG5CLFdBQVcsS0FBSzhELEtBQUssQ0FBQ2YsZUFBZSxDQUFDL0MsV0FBVyxFQUFFO0lBQ3JEO0lBQ0EsT0FBT3lQLDRCQUE0QixDQUFDakosU0FBUyxFQUFFO01BQUN3QixLQUFLLEVBQUVoSTtJQUFXLENBQUMsQ0FBQztFQUN0RTtFQUVBLE9BQU93RyxTQUFTO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNeWdCLG9CQUFvQixHQUFHLFNBQXZCQSxvQkFBb0JBLENBQy9CbmpCLEtBQWUsRUFBQW9qQixNQUFBO0VBQUEsSUFDZHhtQixJQUFJLEdBQUF3bUIsTUFBQSxDQUFKeG1CLElBQUk7RUFBQSxPQUFBd0QsYUFBQSxDQUFBQSxhQUFBLEtBRUZKLEtBQUs7SUFDUmQsTUFBTSxFQUFBa0IsYUFBQSxDQUFBQSxhQUFBLEtBQ0RKLEtBQUssQ0FBQ2QsTUFBTTtNQUNmdEMsSUFBSSxFQUFKQSxJQUFJO01BQ0pHLGVBQWUsRUFBRTtJQUFJO0VBQ3RCO0FBQUEsQ0FDRDs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTc21CLGtCQUFrQkEsQ0FDaENyakIsS0FBZSxFQUFBc2pCLE1BQUEsRUFFTDtFQUFBLElBQUFDLHFCQUFBLEVBQUFDLHNCQUFBO0VBQUEsSUFBQUMsZUFBQSxHQUFBSCxNQUFBLENBRFR4bUIsUUFBUTtJQUFSQSxRQUFRLEdBQUEybUIsZUFBQSxjQUFHLEVBQUUsR0FBQUEsZUFBQTtFQUVkLElBQU1DLFdBQVcsR0FBRzVtQixRQUFRLENBQUM2RCxNQUFNLElBQUk3RCxRQUFRLENBQUNBLFFBQVEsQ0FBQzZELE1BQU0sR0FBRyxDQUFDLENBQUM7RUFFcEUsSUFBTUQsUUFBUSxHQUFBTixhQUFBLENBQUFBLGFBQUEsS0FDVEosS0FBSztJQUNSZCxNQUFNLEVBQUFrQixhQUFBLENBQUFBLGFBQUEsS0FDREosS0FBSyxDQUFDZCxNQUFNO01BQ2Y7TUFDQXBDLFFBQVEsRUFBRUEsUUFBUSxDQUFDcUssTUFBTSxDQUFDLFVBQUE5QyxDQUFDO1FBQUEsT0FBSSxDQUFDelAsb0JBQW9CLENBQUN5UCxDQUFDLENBQUM7TUFBQSxFQUFDO01BQ3hEekgsSUFBSSxFQUNGOG1CLFdBQVcsS0FBQUgscUJBQUEsR0FBSUcsV0FBVyxDQUFDQyxVQUFVLGNBQUFKLHFCQUFBLGVBQXRCQSxxQkFBQSxDQUF3QkssUUFBUSxHQUMzQyxFQUFBSixzQkFBQSxHQUFBRSxXQUFXLENBQUNDLFVBQVUsY0FBQUgsc0JBQUEsdUJBQXRCQSxzQkFBQSxDQUF3QkssS0FBSyxNQUFLLFdBQVcsR0FDM0M3akIsS0FBSyxDQUFDZCxNQUFNLENBQUN0QyxJQUFJLEdBQ2pCM0csWUFBWSxDQUFDNnRCLElBQUksR0FDbkI5akIsS0FBSyxDQUFDZCxNQUFNLENBQUN0QztJQUFJO0VBQ3hCLEVBQ0Y7O0VBRUQ7RUFDQSxJQUFPRyxlQUFlLEdBQUlpRCxLQUFLLENBQUNkLE1BQU0sQ0FBL0JuQyxlQUFlOztFQUV0QjtFQUNBLElBQUksQ0FBQ0EsZUFBZSxFQUFFO0lBQ3BCLE9BQU8yRCxRQUFRO0VBQ2pCOztFQUVBO0VBQ0EsSUFBTXFqQixPQUFPLEdBQUdqbkIsUUFBUSxDQUFDdUYsSUFBSSxDQUFDLFVBQUFnQyxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDbkosRUFBRSxLQUFLNkIsZUFBZSxDQUFDN0IsRUFBRTtFQUFBLEVBQUM7O0VBRS9EO0VBQ0EsSUFBTXdSLFFBQVEsR0FBR3FYLE9BQU8sSUFBSW52QixvQkFBb0IsQ0FBQ212QixPQUFPLENBQUM7RUFDekQsSUFBSXJYLFFBQVEsSUFBSXFYLE9BQU8sRUFBRTtJQUN2QjtJQUNBLElBQUlBLE9BQU8sQ0FBQ0osVUFBVSxFQUFFSSxPQUFPLENBQUNKLFVBQVUsQ0FBQ2p5QixJQUFJLEdBQUdBLElBQUksQ0FBQ3F5QixPQUFnQyxDQUFDO0lBQ3hGLElBQU1DLFlBQVksR0FBR3h2QixvQkFBb0IsQ0FBQ3V2QixPQUFPLEVBQUVyWCxRQUFRLENBQUM7SUFDNUQsSUFBTXVYLFNBQVMsR0FBR2prQixLQUFLLENBQUN0QyxPQUFPLENBQUNtRixTQUFTLENBQUMsVUFBQXFoQixHQUFHO01BQUEsT0FBSUEsR0FBRyxDQUFDaHBCLEVBQUUsS0FBS3dSLFFBQVE7SUFBQSxFQUFDO0lBQ3JFO0lBQ0EsT0FBT1YsZ0JBQWdCLENBQUN0TCxRQUFRLEVBQUU7TUFDaENQLEdBQUcsRUFBRThqQixTQUFTO01BQ2R4Z0IsSUFBSSxFQUFFLE9BQU87TUFDYlMsS0FBSyxFQUFFOGY7SUFDVCxDQUFDLENBQUM7RUFDSjtFQUVBLE9BQU90akIsUUFBUTtBQUNqQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTXlqQix5QkFBeUIsR0FBRyxTQUE1QkEseUJBQXlCQSxDQUNwQ25rQixLQUFlLEVBQUFva0IsTUFBQSxFQUVGO0VBQUEsSUFEWkwsT0FBTyxHQUFBSyxNQUFBLENBQVBMLE9BQU87SUFBRU0sZ0JBQWdCLEdBQUFELE1BQUEsQ0FBaEJDLGdCQUFnQjtFQUUxQjtFQUNBLElBQUl0bkIsZUFBZSxHQUFHZ25CLE9BQU87RUFDN0IsSUFBSUEsT0FBTyxhQUFQQSxPQUFPLGVBQVBBLE9BQU8sQ0FBRUosVUFBVSxFQUFFO0lBQ3ZCNW1CLGVBQWUsR0FBQXFELGFBQUEsQ0FBQUEsYUFBQSxLQUNWMmpCLE9BQU87TUFDVkosVUFBVSxFQUFBdmpCLGFBQUEsQ0FBQUEsYUFBQSxLQUNMMmpCLE9BQU8sQ0FBQ0osVUFBVTtRQUNyQmp5QixJQUFJLEVBQUVBLElBQUksQ0FBQ3F5QixPQUFnQztNQUFDO0lBQzdDLEVBQ0Y7RUFDSDtFQUNBLE9BQUEzakIsYUFBQSxDQUFBQSxhQUFBLEtBQ0tKLEtBQUs7SUFDUmQsTUFBTSxFQUFBa0IsYUFBQSxDQUFBQSxhQUFBLEtBQ0RKLEtBQUssQ0FBQ2QsTUFBTTtNQUNmbkMsZUFBZSxFQUFmQSxlQUFlO01BQ2ZzbkIsZ0JBQWdCLEVBQWhCQTtJQUFnQjtFQUNqQjtBQUVMLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNDLG9CQUFvQkEsQ0FDbEN0a0IsS0FBZSxFQUFBdWtCLE1BQUEsRUFFTDtFQUFBLElBRFRSLE9BQU8sR0FBQVEsTUFBQSxDQUFQUixPQUFPO0VBRVIsSUFBSSxDQUFDQSxPQUFPLEVBQUU7SUFDWixPQUFPL2pCLEtBQUs7RUFDZDtFQUVBLElBQU1VLFFBQVEsR0FBQU4sYUFBQSxDQUFBQSxhQUFBLEtBQ1RKLEtBQUs7SUFDUmQsTUFBTSxFQUFBa0IsYUFBQSxDQUFBQSxhQUFBLEtBQ0RKLEtBQUssQ0FBQ2QsTUFBTTtNQUNmbkMsZUFBZSxFQUFFO0lBQUk7RUFDdEIsRUFDRjtFQUVELElBQUluSSxvQkFBb0IsQ0FBQ212QixPQUFPLENBQUMsRUFBRTtJQUNqQyxJQUFNRSxTQUFTLEdBQUd2akIsUUFBUSxDQUFDaEQsT0FBTyxDQUFDbUYsU0FBUyxDQUFDLFVBQUF3QixDQUFDO01BQUEsT0FBSUEsQ0FBQyxDQUFDbkosRUFBRSxLQUFLdEcsb0JBQW9CLENBQUNtdkIsT0FBTyxDQUFDO0lBQUEsRUFBQztJQUV6RixPQUFPRSxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUdwVCxtQkFBbUIsQ0FBQ25RLFFBQVEsRUFBRTtNQUFDUCxHQUFHLEVBQUU4akI7SUFBUyxDQUFDLENBQUMsR0FBR3ZqQixRQUFRO0VBQ3BGOztFQUVBO0VBQ0EsSUFBTXNRLFNBQVMsR0FBQTVRLGFBQUEsQ0FBQUEsYUFBQSxLQUNWSixLQUFLLENBQUNkLE1BQU07SUFDZnBDLFFBQVEsRUFBRWtELEtBQUssQ0FBQ2QsTUFBTSxDQUFDcEMsUUFBUSxDQUFDcUssTUFBTSxDQUFDLFVBQUE5QyxDQUFDO01BQUEsT0FBSUEsQ0FBQyxDQUFDbkosRUFBRSxLQUFLNm9CLE9BQU8sQ0FBQzdvQixFQUFFO0lBQUEsRUFBQztJQUNoRTZCLGVBQWUsRUFBRTtFQUFJLEVBQ3RCO0VBRUQsT0FBQXFELGFBQUEsQ0FBQUEsYUFBQSxLQUNLSixLQUFLO0lBQ1JkLE1BQU0sRUFBRThSO0VBQVM7QUFFckI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVN3VCw0QkFBNEJBLENBQzFDeGtCLEtBQWUsRUFDZjhaLE9BQTJELEVBQ2pEO0VBQ1YsSUFBTzVaLEtBQUssR0FBYTRaLE9BQU8sQ0FBekI1WixLQUFLO0lBQUU2akIsT0FBTyxHQUFJakssT0FBTyxDQUFsQmlLLE9BQU87RUFDckIsSUFBTXJYLFFBQVEsR0FBRzlYLG9CQUFvQixDQUFDbXZCLE9BQU8sQ0FBQzs7RUFFOUM7RUFDQSxJQUFJRSxTQUFTO0VBQ2IsSUFBSWxoQixVQUFVLEdBQUcsQ0FBQzdDLEtBQUssQ0FBQ2hGLEVBQUUsQ0FBQztFQUMzQixJQUFJd0YsUUFBUSxHQUFHVixLQUFLO0VBQ3BCO0VBQ0EsSUFBSTBNLFFBQVEsRUFBRTtJQUNadVgsU0FBUyxHQUFHamtCLEtBQUssQ0FBQ3RDLE9BQU8sQ0FBQ21GLFNBQVMsQ0FBQyxVQUFBd0IsQ0FBQztNQUFBLE9BQUlBLENBQUMsQ0FBQ25KLEVBQUUsS0FBS3dSLFFBQVE7SUFBQSxFQUFDO0lBRTNELElBQUksQ0FBQzFNLEtBQUssQ0FBQ3RDLE9BQU8sQ0FBQ3VtQixTQUFTLENBQUMsRUFBRTtNQUM3QjtNQUNBO01BQ0E7TUFDQSxJQUFNUSxpQkFBaUIsR0FBQXJrQixhQUFBLENBQUFBLGFBQUEsS0FDbEIyakIsT0FBTztRQUNWSixVQUFVLEVBQUF2akIsYUFBQSxDQUFBQSxhQUFBLEtBQ0wyakIsT0FBTyxDQUFDSixVQUFVO1VBQ3JCalgsUUFBUSxFQUFFO1FBQUk7TUFDZixFQUNGO01BRUQsT0FBQXRNLGFBQUEsQ0FBQUEsYUFBQSxLQUNLSixLQUFLO1FBQ1JkLE1BQU0sRUFBQWtCLGFBQUEsQ0FBQUEsYUFBQSxLQUNESixLQUFLLENBQUNkLE1BQU07VUFDZnBDLFFBQVEsS0FBQTBLLE1BQUEsQ0FBQUMsa0JBQUEsQ0FBTXpILEtBQUssQ0FBQ2QsTUFBTSxDQUFDcEMsUUFBUSxJQUFFMm5CLGlCQUFpQixFQUFDO1VBQ3ZEMW5CLGVBQWUsRUFBRTBuQjtRQUFpQjtNQUNuQztJQUVMO0lBQ0EsSUFBTXRkLE1BQU0sR0FBR25ILEtBQUssQ0FBQ3RDLE9BQU8sQ0FBQ3VtQixTQUFTLENBQUM7SUFDdkMsSUFBQVMsZUFBQSxHQUF1QnZkLE1BQU0sQ0FBdEJ0QixPQUFPO01BQVBBLE9BQU8sR0FBQTZlLGVBQUEsY0FBRyxFQUFFLEdBQUFBLGVBQUE7SUFDbkIsSUFBTUMsZUFBZSxHQUFHOWUsT0FBTyxDQUFDd0IsUUFBUSxDQUFDbkgsS0FBSyxDQUFDaEYsRUFBRSxDQUFDO0lBRWxENkgsVUFBVSxHQUFHNGhCLGVBQWU7SUFDeEI7SUFDQTllLE9BQU8sQ0FBQ3NCLE1BQU0sQ0FBQyxVQUFBN0UsQ0FBQztNQUFBLE9BQUlBLENBQUMsS0FBS3BDLEtBQUssQ0FBQ2hGLEVBQUU7SUFBQSxFQUFDLE1BQUFzTSxNQUFBLENBQUFDLGtCQUFBLENBQy9CNUIsT0FBTyxJQUFFM0YsS0FBSyxDQUFDaEYsRUFBRSxFQUFDO0VBQzVCLENBQUMsTUFBTTtJQUNMO0lBQ0EsSUFBTWtSLFNBQVMsR0FBRzFYLHFCQUFxQixDQUFDLEVBQUUsRUFBRXF2QixPQUFPLENBQUM7SUFDcERFLFNBQVMsR0FBR2prQixLQUFLLENBQUN0QyxPQUFPLENBQUNpRCxNQUFNOztJQUVoQztJQUNBRCxRQUFRLEdBQUFOLGFBQUEsQ0FBQUEsYUFBQSxLQUNISixLQUFLO01BQ1J0QyxPQUFPLEtBQUE4SixNQUFBLENBQUFDLGtCQUFBLENBQU16SCxLQUFLLENBQUN0QyxPQUFPLElBQUUwTyxTQUFTLEVBQUM7TUFDdENsTixNQUFNLEVBQUFrQixhQUFBLENBQUFBLGFBQUEsS0FDREosS0FBSyxDQUFDZCxNQUFNO1FBQ2ZwQyxRQUFRLEVBQUVrRCxLQUFLLENBQUNkLE1BQU0sQ0FBQ3BDLFFBQVEsQ0FBQ3FLLE1BQU0sQ0FBQyxVQUFBOUMsQ0FBQztVQUFBLE9BQUlBLENBQUMsQ0FBQ25KLEVBQUUsS0FBSzZvQixPQUFPLENBQUM3b0IsRUFBRTtRQUFBLEVBQUM7UUFDaEU2QixlQUFlLEVBQUVxUCxTQUFTLENBQUNsSTtNQUFLO0lBQ2pDLEVBQ0Y7RUFDSDtFQUVBLE9BQU84SCxnQkFBZ0IsQ0FBQ3RMLFFBQVEsRUFBRTtJQUNoQ1AsR0FBRyxFQUFFOGpCLFNBQVM7SUFDZHhnQixJQUFJLEVBQUUsU0FBUztJQUNmUyxLQUFLLEVBQUVuQjtFQUNULENBQUMsQ0FBQztBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTNmhCLGdDQUFnQ0EsQ0FDOUM1a0IsS0FBZSxFQUNmOFosT0FBK0QsRUFDckQ7RUFDVixJQUFPaUssT0FBTyxHQUFJakssT0FBTyxDQUFsQmlLLE9BQU87RUFFZCxJQUFNM1gsU0FBUyxHQUFHMVgscUJBQXFCLENBQUMsRUFBRSxFQUFFcXZCLE9BQU8sQ0FBQztFQUNwRCxJQUFNRSxTQUFTLEdBQUdqa0IsS0FBSyxDQUFDdEMsT0FBTyxDQUFDaUQsTUFBTTtFQUV0QyxJQUFNRCxRQUFrQixHQUFBTixhQUFBLENBQUFBLGFBQUEsS0FDbkJKLEtBQUs7SUFDUnRDLE9BQU8sS0FBQThKLE1BQUEsQ0FBQUMsa0JBQUEsQ0FBTXpILEtBQUssQ0FBQ3RDLE9BQU8sSUFBRTBPLFNBQVMsRUFBQztJQUN0Q2xOLE1BQU0sRUFBQWtCLGFBQUEsQ0FBQUEsYUFBQSxLQUNESixLQUFLLENBQUNkLE1BQU07TUFDZnBDLFFBQVEsRUFBRWtELEtBQUssQ0FBQ2QsTUFBTSxDQUFDcEMsUUFBUSxDQUFDcUssTUFBTSxDQUFDLFVBQUE5QyxDQUFDO1FBQUEsT0FBSUEsQ0FBQyxDQUFDbkosRUFBRSxLQUFLNm9CLE9BQU8sQ0FBQzdvQixFQUFFO01BQUEsRUFBQztNQUNoRTZCLGVBQWUsRUFBRXFQLFNBQVMsQ0FBQ2xJLEtBQUs7TUFDaEN0SCxJQUFJLEVBQUUzRyxZQUFZLENBQUM2dEI7SUFBSTtFQUN4QixFQUNGO0VBRUQsSUFBTWUsZUFBZSxHQUFHN3lCLEdBQUcsQ0FBQzhuQixPQUFPLEVBQUUsaUJBQWlCLENBQUM7RUFDdkQsSUFBTWdMLFdBQVcsR0FBR3ZiLEtBQUssQ0FBQ0MsT0FBTyxDQUFDcWIsZUFBZSxDQUFDLEdBQzlDQSxlQUFlLEdBQ2Y3a0IsS0FBSyxDQUFDM0MsTUFBTSxDQUFDOEosTUFBTSxDQUFDLFVBQUE3RSxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDakgsTUFBTSxDQUFDdUYsU0FBUztFQUFBLEVBQUMsQ0FBQ1AsR0FBRyxDQUFDLFVBQUFpQyxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDcEgsRUFBRTtFQUFBLEVBQUM7RUFFL0QsT0FBTzhRLGdCQUFnQixDQUFDdEwsUUFBUSxFQUFFO0lBQ2hDUCxHQUFHLEVBQUU4akIsU0FBUztJQUNkeGdCLElBQUksRUFBRSxTQUFTO0lBQ2ZTLEtBQUssRUFBRTRnQjtFQUNULENBQUMsQ0FBQztBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTQyxzQkFBc0JBLENBQ3BDL2tCLEtBQWUsRUFBQWdsQixNQUFBLEVBRUw7RUFBQSxJQURUeGlCLE1BQU0sR0FBQXdpQixNQUFBLENBQU54aUIsTUFBTTtJQUFFeWlCLE1BQU0sR0FBQUQsTUFBQSxDQUFOQyxNQUFNO0lBQUVyb0IsSUFBSSxHQUFBb29CLE1BQUEsQ0FBSnBvQixJQUFJO0VBRXJCLElBQU0yRixPQUFPLEdBQUd2QyxLQUFLLENBQUNwQyxRQUFRLENBQUM0RSxNQUFNLENBQUM7RUFDdEMsSUFBSSxDQUFDRCxPQUFPLEVBQUU7SUFDWixPQUFPdkMsS0FBSztFQUNkO0VBQ0EsSUFBSWtsQixRQUFRLEdBQUd0b0IsSUFBSTtFQUNuQixJQUFJLENBQUNzb0IsUUFBUSxFQUFFO0lBQ2IsSUFBTUMsV0FBVyxHQUFHbnpCLEdBQUcsQ0FBQ3VRLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRTBpQixNQUFNLENBQUMsQ0FBQztJQUN4RDtJQUNBQyxRQUFRLEdBQUdDLFdBQVcsR0FDbEI5akIsTUFBTSxDQUFDQyxJQUFJLENBQUM1SyxVQUFVLENBQUMsQ0FBQzJMLElBQUksQ0FBQyxVQUFBNmEsQ0FBQztNQUFBLE9BQUlBLENBQUMsS0FBS2lJLFdBQVc7SUFBQSxFQUFDLEdBQ3BEenVCLFVBQVUsQ0FBQzB1QixTQUFTO0VBQzFCO0VBRUEsSUFBTUMsTUFBTSxHQUFHcnNCLG1CQUFtQixDQUFDdUosT0FBTyxFQUFFMGlCLE1BQU0sRUFBRUMsUUFBUSxDQUFDO0VBQzdELE9BQU85dkIsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFb04sTUFBTSxDQUFDLEVBQUU2aUIsTUFBTSxFQUFFcmxCLEtBQUssQ0FBQztBQUNqRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU3NsQixxQkFBcUJBLENBQ25DdGxCLEtBQWUsRUFBQXVsQixNQUFBLEVBRUw7RUFBQSxJQURUL2lCLE1BQU0sR0FBQStpQixNQUFBLENBQU4vaUIsTUFBTTtJQUFFeWlCLE1BQU0sR0FBQU0sTUFBQSxDQUFOTixNQUFNO0VBRWYsSUFBTTFpQixPQUFPLEdBQUd2QyxLQUFLLENBQUNwQyxRQUFRLENBQUM0RSxNQUFNLENBQUM7RUFDdEMsSUFBSSxDQUFDRCxPQUFPLEVBQUU7SUFDWixPQUFPdkMsS0FBSztFQUNkO0VBQ0EsSUFBTTZPLFVBQVUsR0FBRy9WLGVBQWUsQ0FBQ3lKLE9BQU8sRUFBRTBpQixNQUFNLENBQUM7RUFFbkQsT0FBTzd2QixHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUVvTixNQUFNLENBQUMsRUFBRXFNLFVBQVUsRUFBRTdPLEtBQUssQ0FBQztBQUNyRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTd2xCLHNCQUFzQkEsQ0FDcEN4bEIsS0FBZSxFQUFBeWxCLE1BQUEsRUFFTDtFQUFBLElBRFRqakIsTUFBTSxHQUFBaWpCLE1BQUEsQ0FBTmpqQixNQUFNO0lBQUV5aUIsTUFBTSxHQUFBUSxNQUFBLENBQU5SLE1BQU07RUFFZixJQUFNMWlCLE9BQU8sR0FBR3ZDLEtBQUssQ0FBQ3BDLFFBQVEsQ0FBQzRFLE1BQU0sQ0FBQztFQUN0QyxJQUFJLENBQUNELE9BQU8sRUFBRTtJQUNaLE9BQU92QyxLQUFLO0VBQ2Q7RUFDQSxJQUFNMGxCLFFBQVEsR0FBR25qQixPQUFPLENBQUNpRyxNQUFNLENBQUMzRixTQUFTLENBQUMsVUFBQXdCLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUM2QyxJQUFJLEtBQUsrZCxNQUFNO0VBQUEsRUFBQztFQUNqRSxJQUFJUyxRQUFRLEdBQUcsQ0FBQyxFQUFFO0lBQ2hCLE9BQU8xbEIsS0FBSztFQUNkO0VBQ0EsSUFBTzJDLElBQUksR0FBSUosT0FBTyxDQUFDaUcsTUFBTSxDQUFDa2QsUUFBUSxDQUFDLENBQWhDL2lCLElBQUk7RUFDWCxJQUFNZ2pCLElBQUksR0FBR3BqQixPQUFPLENBQUNxakIsYUFBYSxDQUMvQnZsQixHQUFHLENBQUMsVUFBQXdsQixHQUFHO0lBQUEsT0FBSTN3QixlQUFlLENBQUMyd0IsR0FBRyxDQUFDQyxPQUFPLENBQUNKLFFBQVEsQ0FBQyxFQUFFL2lCLElBQUksQ0FBQztFQUFBLEdBQUUsSUFBSSxDQUFDLENBQzlEb2pCLElBQUksQ0FBQyxJQUFJLENBQUM7RUFFYnAwQixJQUFJLENBQUNnMEIsSUFBSSxDQUFDO0VBRVYsT0FBTzNsQixLQUFLO0FBQ2Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU2dtQiw2QkFBNkJBLENBQzNDaG1CLEtBQWUsRUFBQWltQixNQUFBLEVBRUw7RUFBQSxJQURUempCLE1BQU0sR0FBQXlqQixNQUFBLENBQU56akIsTUFBTTtJQUFFMGpCLE9BQU8sR0FBQUQsTUFBQSxDQUFQQyxPQUFPO0VBRWhCLElBQU0zakIsT0FBTyxHQUFHdkMsS0FBSyxDQUFDcEMsUUFBUSxDQUFDNEUsTUFBTSxDQUFDO0VBQ3RDLElBQUksQ0FBQ0QsT0FBTyxFQUFFO0lBQ1osT0FBT3ZDLEtBQUs7RUFDZDtFQUNBLElBQUl5RyxTQUFTLEdBQUdsRSxPQUFPLENBQUNpRyxNQUFNO0VBQzlCbkgsTUFBTSxDQUFDQyxJQUFJLENBQUM0a0IsT0FBTyxDQUFDLENBQUMza0IsT0FBTyxDQUFDLFVBQUEwakIsTUFBTSxFQUFJO0lBQ3JDLElBQU1TLFFBQVEsR0FBR25qQixPQUFPLENBQUNpRyxNQUFNLENBQUMzRixTQUFTLENBQUMsVUFBQXdCLENBQUM7TUFBQSxPQUFJQSxDQUFDLENBQUM2QyxJQUFJLEtBQUsrZCxNQUFNO0lBQUEsRUFBQztJQUNqRSxJQUFJUyxRQUFRLElBQUksQ0FBQyxFQUFFO01BQ2pCLElBQU1TLGFBQWEsR0FBR0QsT0FBTyxDQUFDakIsTUFBTSxDQUFDO01BQ3JDLElBQU1oZSxLQUFLLEdBQUdSLFNBQVMsQ0FBQ2lmLFFBQVEsQ0FBQztNQUNqQ2pmLFNBQVMsR0FBR3pPLEtBQUssQ0FBQ0osTUFBTSxDQUFDO1FBQUN1dUIsYUFBYSxFQUFiQTtNQUFhLENBQUMsQ0FBQyxDQUFDbGYsS0FBSyxDQUFpQixDQUFDLENBQy9EUixTQUNGLENBQVk7SUFDZDtFQUNGLENBQUMsQ0FBQztFQUVGLElBQU1vSSxVQUFVLEdBQUdqVyxrQkFBa0IsQ0FBQzJKLE9BQU8sRUFBRTtJQUFDaUcsTUFBTSxFQUFFL0I7RUFBb0IsQ0FBQyxDQUFDO0VBQzlFLElBQUkvRixRQUFRLEdBQUc1SSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUNGLE1BQU0sQ0FBQThOLGVBQUEsS0FBR2xELE1BQU0sRUFBR3FNLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzdPLEtBQUssQ0FBQzs7RUFFdkU7RUFDQVUsUUFBUSxHQUFBTixhQUFBLENBQUFBLGFBQUEsS0FDSE0sUUFBUTtJQUNYckQsTUFBTSxFQUFFcUQsUUFBUSxDQUFDckQsTUFBTSxDQUFDZ0QsR0FBRyxDQUFDLFVBQUFILEtBQUs7TUFBQSxJQUFBa21CLGFBQUE7TUFBQSxPQUMvQixDQUFBQSxhQUFBLEdBQUFsbUIsS0FBSyxDQUFDN0UsTUFBTSxjQUFBK3FCLGFBQUEsZ0JBQUFBLGFBQUEsR0FBWkEsYUFBQSxDQUFjQyxVQUFVLGNBQUFELGFBQUEsZUFBeEJBLGFBQUEsQ0FBMEJsZixJQUFJLElBQUloSCxLQUFLLENBQUM3RSxNQUFNLENBQUNnckIsVUFBVSxDQUFDbmYsSUFBSSxJQUFJZ2YsT0FBTyxHQUNyRWhtQixLQUFLLENBQUNtRixpQkFBaUIsQ0FBQztRQUN0QmdoQixVQUFVLEVBQUFqbUIsYUFBQSxDQUFBQSxhQUFBLEtBQ0xGLEtBQUssQ0FBQzdFLE1BQU0sQ0FBQ2dyQixVQUFVO1VBQzFCRixhQUFhLEVBQUVELE9BQU8sQ0FBQ2htQixLQUFLLENBQUM3RSxNQUFNLENBQUNnckIsVUFBVSxDQUFDbmYsSUFBSTtRQUFDO01BRXhELENBQUMsQ0FBQyxHQUNGaEgsS0FBSztJQUFBLENBQ1g7RUFBQyxFQUNGO0VBRUQsT0FBT1EsUUFBUTtBQUNqQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVM0bEIsNkJBQTZCQSxDQUMzQ3RtQixLQUFlO0FBQ2Y7QUFDQThCLE1BQTJELEVBQ2pEO0VBQ1YsT0FBQTFCLGFBQUEsQ0FBQUEsYUFBQSxLQUNLSixLQUFLO0lBQ1JkLE1BQU0sRUFBQWtCLGFBQUEsQ0FBQUEsYUFBQSxLQUNESixLQUFLLENBQUNkLE1BQU07TUFDZmxDLE9BQU8sRUFBRSxDQUFDZ0QsS0FBSyxDQUFDZCxNQUFNLENBQUNsQztJQUFPO0VBQy9CO0FBRUw7QUFFQSxPQUFPLFNBQVN1cEIsbUNBQW1DQSxDQUNqRHZtQixLQUFlLEVBQUF3bUIsTUFBQSxFQUVMO0VBQUEsSUFEVHJtQixHQUFHLEdBQUFxbUIsTUFBQSxDQUFIcm1CLEdBQUc7SUFBRTlFLE1BQU0sR0FBQW1yQixNQUFBLENBQU5uckIsTUFBTTtFQUVaLElBQU1zUixTQUFTLEdBQUczTSxLQUFLLENBQUN0QyxPQUFPLENBQUN5QyxHQUFHLENBQUM7RUFDcEMsSUFBSSxDQUFDd00sU0FBUyxFQUFFO0lBQ2Q3YSxPQUFPLENBQUM2WCxLQUFLLFlBQUFuQyxNQUFBLENBQVlySCxHQUFHLGtCQUFlLENBQUM7SUFDNUMsT0FBT0gsS0FBSztFQUNkO0VBQ0EsSUFBSTJNLFNBQVMsQ0FBQ2hLLElBQUksS0FBS3pNLFlBQVksQ0FBQzBYLFNBQVMsRUFBRTtJQUM3QzliLE9BQU8sQ0FBQzZYLEtBQUssNkdBRWIsQ0FBQztJQUNELE9BQU8zSixLQUFLO0VBQ2Q7RUFFQSxJQUFNeW1CLE9BQU8sR0FBR0MsbUJBQW1CLENBQUNyckIsTUFBTSxDQUFDO0VBRTNDLE9BQU92RCxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUNFLEtBQUssQ0FBQ0osTUFBTSxDQUFDNnVCLE9BQU8sQ0FBQyxDQUFDOVosU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDM00sS0FBSyxDQUFDO0FBQ25FO0FBRUEsU0FBUzBtQixtQkFBbUJBLENBQUNyckIsTUFBTSxFQUFFO0VBQ25DLElBQU1zckIsT0FBTyxHQUFHLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQztFQUMxQyxPQUFPdGxCLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDakcsTUFBTSxDQUFDLENBQUN3USxNQUFNLENBQUMsVUFBQ0MsSUFBSSxFQUFFckksSUFBSSxFQUFLO0lBQ2hELElBQUksQ0FBQ2tqQixPQUFPLENBQUN0ZixRQUFRLENBQUM1RCxJQUFJLENBQUMsRUFBRTtNQUMzQjNSLE9BQU8sQ0FBQzZYLEtBQUssbUZBQUFuQyxNQUFBLENBQ3VFL0QsSUFBSSxDQUN4RixDQUFDO01BQ0QsT0FBT3FJLElBQUk7SUFDYjs7SUFFQTtJQUNBQSxJQUFJLENBQUNySSxJQUFJLENBQUMsR0FBR3BJLE1BQU0sQ0FBQ29JLElBQUksQ0FBQztJQUN6QixPQUFPcUksSUFBSTtFQUNiLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNSOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBUzhhLGtDQUFrQ0EsQ0FDaEQ1bUIsS0FBZSxFQUFBNm1CLE1BQUEsRUFFTDtFQUFBLElBRFR4ckIsTUFBTSxHQUFBd3JCLE1BQUEsQ0FBTnhyQixNQUFNO0VBRVAsSUFBSSxDQUFDQSxNQUFNLEVBQUU7SUFDWCxPQUFPMkUsS0FBSztFQUNkO0VBQ0EsSUFBTXltQixPQUFPLEdBQUdDLG1CQUFtQixDQUFDcnJCLE1BQU0sQ0FBQztFQUMzQyxPQUFPdkQsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUNGLE1BQU0sQ0FBQzZ1QixPQUFPLENBQUMsQ0FBQyxDQUFDem1CLEtBQUssQ0FBQztBQUN6RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVM4bUIsK0JBQStCQSxDQUM3QzltQixLQUFRLEVBQ1I4QixNQUFzRCxFQUNuRDtFQUFBLElBQUFpbEIscUJBQUE7RUFDSCxJQUFPQyxLQUFLLEdBQVdsbEIsTUFBTSxDQUF0QmtsQixLQUFLO0lBQUU5bUIsS0FBSyxHQUFJNEIsTUFBTSxDQUFmNUIsS0FBSztFQUNuQixJQUFXK21CLGFBQWEsR0FBV0QsS0FBSyxDQUFqQzlyQixFQUFFO0lBQWlCZ3NCLEtBQUssR0FBSUYsS0FBSyxDQUFkRSxLQUFLO0VBQy9CLElBQUksQ0FBQ2huQixLQUFLLEVBQUU7SUFDVnBPLE9BQU8sQ0FBQ3FmLElBQUkseUNBQXlDLENBQUM7SUFDdEQsT0FBT25SLEtBQUs7RUFDZDtFQUNBLElBQUksRUFBQSttQixxQkFBQSxHQUFBN21CLEtBQUssQ0FBQ2luQixpQkFBaUIsY0FBQUoscUJBQUEsdUJBQXZCQSxxQkFBQSxDQUEwQkUsYUFBYSxDQUFDLE1BQUtDLEtBQUssRUFBRTtJQUN0RCxPQUFPbG5CLEtBQUs7RUFDZDtFQUVBRSxLQUFLLENBQUNpbkIsaUJBQWlCLEdBQUEvbUIsYUFBQSxDQUFBQSxhQUFBLEtBQ2xCRixLQUFLLENBQUNpbkIsaUJBQWlCLE9BQUF6aEIsZUFBQSxLQUN6QnVoQixhQUFhLEVBQUdDLEtBQUssRUFDdkI7RUFFRCxPQUFBOW1CLGFBQUEsQ0FBQUEsYUFBQSxLQUNLSixLQUFLO0lBQ1IzQyxNQUFNLEVBQUVyRixLQUFLLENBQUNrSSxLQUFLLENBQUMsQ0FBQ0YsS0FBSyxDQUFDM0MsTUFBTTtFQUFDO0FBRXRDOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBUytwQixxQkFBcUJBLENBQ25DcG5CLEtBQVEsRUFDUjhCLE1BQTRDLEVBQ3pDO0VBQ0gsSUFBTzVCLEtBQUssR0FBNkI0QixNQUFNLENBQXhDNUIsS0FBSztJQUFFbW5CLFdBQVcsR0FBZ0J2bEIsTUFBTSxDQUFqQ3VsQixXQUFXO0lBQUV0ckIsVUFBVSxHQUFJK0YsTUFBTSxDQUFwQi9GLFVBQVU7RUFDckMsSUFBSSxDQUFDbUUsS0FBSyxFQUFFO0lBQ1ZyTyxPQUFPLENBQUNzZixJQUFJLHVDQUF1QyxDQUFDO0lBQ3BELE9BQU9uUixLQUFLO0VBQ2Q7O0VBRUE7RUFDQSxJQUFNdEIsT0FBTyxHQUFHMm9CLFdBQVcsR0FDdkI7SUFDRXJNLE1BQU0sRUFBRSxJQUFJO0lBQ1pzTSxNQUFNLEVBQUU7TUFDTkMsY0FBYyxFQUFFRjtJQUNsQixDQUFDO0lBQ0R0ckIsVUFBVSxFQUFFQSxVQUFVLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDbUUsS0FBSyxFQUFFO01BQ0wwRSxLQUFLLEVBQUU7UUFDTHpFLEdBQUcsRUFBRUgsS0FBSyxDQUFDM0MsTUFBTSxDQUFDd0YsU0FBUyxDQUFDLFVBQUFQLENBQUM7VUFBQSxPQUFJQSxDQUFDLENBQUNwSCxFQUFFLEtBQUtnRixLQUFLLENBQUNoRixFQUFFO1FBQUEsRUFBQztRQUNuREEsRUFBRSxFQUFFZ0YsS0FBSyxDQUFDaEY7TUFDWjtJQUNGO0VBQ0YsQ0FBQyxHQUNELElBQUk7RUFFUixPQUFBa0YsYUFBQSxDQUFBQSxhQUFBLEtBQ0tKLEtBQUs7SUFDUnRCLE9BQU8sRUFBUEE7RUFBTztBQUVYOztBQUVBO0FBQ0EsT0FBTyxTQUFTZ0csc0NBQXNDQSxDQUNwRDFFLEtBQVEsRUFDUjhCLE1BQTZELEVBQzFEO0VBQUEsSUFBQTBsQixxQkFBQSxFQUFBQyxzQkFBQTtFQUNILElBQVl4RCxTQUFTLEdBQW9CbmlCLE1BQU0sQ0FBeEMzQixHQUFHO0lBQUF1bkIsY0FBQSxHQUErQjVsQixNQUFNLENBQXhCNkMsTUFBTTtJQUFOQSxNQUFNLEdBQUEraUIsY0FBQSxjQUFHLEtBQUssR0FBQUEsY0FBQTtFQUVyQyxJQUFNdmdCLE1BQU0sR0FBR25ILEtBQUssQ0FBQ3RDLE9BQU8sQ0FBQ3VtQixTQUFTLENBQW9CO0VBRTFELElBQUl2akIsUUFBUSxHQUFHVixLQUFLO0VBQ3BCLElBQUlvTSxTQUFTLEdBQUdqRixNQUFNOztFQUV0QjtFQUNBLElBQUl4QyxNQUFNLEVBQUU7SUFDVixJQUFNZ2UsZ0JBQWdCLEdBQUd4b0IsMEJBQTBCLENBQUN1RyxRQUFRLENBQUNyRCxNQUFNLENBQUM7SUFDcEU7SUFDQSxJQUFJLENBQUNzbEIsZ0JBQWdCLENBQUNoaUIsTUFBTSxFQUFFO01BQzVCLE9BQU9ELFFBQVE7SUFDakI7SUFFQSxJQUFNaW5CLDRCQUE0QixHQUFHdnRCLCtCQUErQixDQUFDdW9CLGdCQUFnQixDQUFDO0lBQ3RGLElBQU1pRiw4QkFBOEIsR0FBR0MsT0FBTyxDQUFDRiw0QkFBNEIsQ0FBQ2huQixNQUFNLENBQUM7SUFFbkYsSUFBTW1uQixlQUFlLEdBQUd6dEIsZ0JBQWdCLENBQUMsQ0FBQzhNLE1BQU0sQ0FBQ2xMLE1BQU0sRUFBRXlFLFFBQVEsQ0FBQ3pCLGVBQWUsQ0FBQ2hELE1BQU0sQ0FBQyxDQUFDOztJQUUxRjtJQUNBLElBQUkyckIsOEJBQThCLEVBQUU7TUFDbEMsSUFBSXpnQixNQUFNLENBQUNnRixlQUFlLEtBQUt0VyxnQkFBZ0IsQ0FBQ2t5QixRQUFRLEVBQUU7UUFDeERybkIsUUFBUSxHQUFHdUwsK0JBQStCLENBQUN2TCxRQUFRLEVBQUU7VUFDbkR4RixFQUFFLEVBQUVpTSxNQUFNLENBQUNqTSxFQUFFO1VBQ2JpUixlQUFlLEVBQUV0VyxnQkFBZ0IsQ0FBQ2t5QjtRQUNwQyxDQUFDLENBQUM7TUFDSjtNQUVBM2IsU0FBUyxHQUFHMUwsUUFBUSxDQUFDaEQsT0FBTyxDQUFDdW1CLFNBQVMsQ0FBb0I7O01BRTFEO01BQ0E3WCxTQUFTLEdBQUc0Yix3QkFBd0IsQ0FBQ3RuQixRQUFRLEVBQUUwTCxTQUFTLENBQUM7O01BRXpEO01BQ0ExTCxRQUFRLEdBQUFOLGFBQUEsQ0FBQUEsYUFBQSxLQUNITSxRQUFRO1FBQ1hoRCxPQUFPLEVBQUUxRixLQUFLLENBQVNvVSxTQUFTLENBQUMsQ0FBQzFMLFFBQVEsQ0FBQ2hELE9BQU87TUFBQyxFQUNwRDtJQUNIO0lBRUEwTyxTQUFTLEdBQUcxTCxRQUFRLENBQUNoRCxPQUFPLENBQUN1bUIsU0FBUyxDQUFvQjs7SUFFMUQ7SUFDQSxJQUFNZ0UsZUFBYyxHQUFHM3pCLHlCQUF5QixDQUM5QzhYLFNBQVMsQ0FBQ0QsZUFBZSxLQUFLdFcsZ0JBQWdCLENBQUNreUIsUUFBUSxHQUNuRCxDQUFDRCxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUVBLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUN4Q0EsZUFBZSxFQUFBMW5CLGFBQUEsQ0FBQUEsYUFBQSxLQUNmZ00sU0FBUztNQUFFblEsTUFBTSxFQUFFNnJCO0lBQWUsRUFDeEMsQ0FBQztJQUVEcG5CLFFBQVEsR0FBR3NMLGdCQUFnQixDQUFDdEwsUUFBUSxFQUFFO01BQ3BDUCxHQUFHLEVBQUU4akIsU0FBUztNQUNkeGdCLElBQUksRUFBRSxPQUFPO01BQ2JTLEtBQUssRUFBRStqQjtJQUNULENBQUMsQ0FBQztJQUVGN2IsU0FBUyxHQUFBaE0sYUFBQSxDQUFBQSxhQUFBLEtBQ0hNLFFBQVEsQ0FBQ2hELE9BQU8sQ0FBQ3VtQixTQUFTLENBQUM7TUFDL0IvZCx1QkFBdUIsRUFBRTtJQUFJLEVBQzlCOztJQUVEO0lBQ0F4RixRQUFRLEdBQUFOLGFBQUEsQ0FBQUEsYUFBQSxLQUNITSxRQUFRO01BQ1hoRCxPQUFPLEVBQUUxRixLQUFLLENBQVNvVSxTQUFTLENBQUMsQ0FBQzFMLFFBQVEsQ0FBQ2hELE9BQU87SUFBQyxFQUNwRDtJQUVEZ0QsUUFBUSxHQUFHNkwsZ0NBQWdDLENBQUM3TCxRQUFRLEVBQUU7TUFDcER4RixFQUFFLEVBQUVrUixTQUFTLENBQUNsUixFQUFFO01BQ2hCMEIsSUFBSSxFQUFFMFAsb0JBQW9CLENBQUNGLFNBQVM7SUFDdEMsQ0FBQyxDQUFDO0lBRUZBLFNBQVMsR0FBRzFMLFFBQVEsQ0FBQ2hELE9BQU8sQ0FBQ3VtQixTQUFTLENBQW9COztJQUUxRDtJQUNBLE9BQU90WSw0QkFBNEIsQ0FBQ2pMLFFBQVEsRUFBRTtNQUM1Q3dELEtBQUssRUFBRWtJLFNBQVMsQ0FBQ2xJLEtBQUssQ0FBQ2tJLFNBQVMsQ0FBQzhiLGdCQUFnQjtJQUNuRCxDQUFDLENBQUM7RUFDSjs7RUFFQTtFQUNBOWIsU0FBUyxHQUFBaE0sYUFBQSxDQUFBQSxhQUFBLEtBQ0orRyxNQUFNO0lBQ1RqQix1QkFBdUIsRUFBRTtFQUFLLEVBQy9COztFQUVEO0VBQ0F4RixRQUFRLEdBQUFOLGFBQUEsQ0FBQUEsYUFBQSxLQUNITSxRQUFRO0lBQ1hoRCxPQUFPLEVBQUUxRixLQUFLLENBQVNvVSxTQUFTLENBQUMsQ0FBQzFMLFFBQVEsQ0FBQ2hELE9BQU87RUFBQyxFQUNwRDs7RUFFRDtFQUNBZ0QsUUFBUSxHQUFHNkwsZ0NBQWdDLENBQUM3TCxRQUFRLEVBQUU7SUFDcER4RixFQUFFLEVBQUVrUixTQUFTLENBQUNsUixFQUFFO0lBQ2hCMEIsSUFBSSxFQUFFakcsbUJBQW1CLENBQUN3eEI7RUFDNUIsQ0FBQyxDQUFDO0VBRUYvYixTQUFTLEdBQUcxTCxRQUFRLENBQUNoRCxPQUFPLENBQUN1bUIsU0FBUyxDQUFvQjs7RUFFMUQ7RUFDQSxJQUFNZ0UsY0FBYyxHQUFHM3pCLHlCQUF5QixDQUFDOFgsU0FBUyxDQUFDblEsTUFBTSxFQUFFbVEsU0FBUyxDQUFDO0VBRTdFMUwsUUFBUSxHQUFHc0wsZ0JBQWdCLENBQUN0TCxRQUFRLEVBQUU7SUFDcENQLEdBQUcsRUFBRThqQixTQUFTO0lBQ2R4Z0IsSUFBSSxFQUFFLE9BQU87SUFDYlMsS0FBSyxFQUFFK2pCO0VBQ1QsQ0FBQyxDQUFDO0VBRUZ2bkIsUUFBUSxHQUFHNkwsZ0NBQWdDLENBQUM3TCxRQUFRLEVBQUU7SUFDcER4RixFQUFFLEVBQUVrUixTQUFTLENBQUNsUixFQUFFO0lBQ2hCMEIsSUFBSSxFQUFFMFAsb0JBQW9CLENBQUNGLFNBQVM7RUFDdEMsQ0FBQyxDQUFDOztFQUVGO0VBQ0EsT0FBT1QsNEJBQTRCLENBQUNqTCxRQUFRLEVBQUU7SUFDNUN3RCxLQUFLLEdBQUFzakIscUJBQUEsSUFBQUMsc0JBQUEsR0FBRS9tQixRQUFRLENBQUN6QixlQUFlLENBQUNoRCxNQUFNLGNBQUF3ckIsc0JBQUEsdUJBQS9CQSxzQkFBQSxDQUFrQyxDQUFDLENBQUMsY0FBQUQscUJBQUEsY0FBQUEscUJBQUEsR0FBSTtFQUNqRCxDQUFDLENBQUM7QUFDSjtBQUVBLE9BQU8sU0FBU2piLGdDQUFnQ0EsQ0FDOUN2TSxLQUFRLEVBQ1I4QixNQUEyRCxFQUMzRDtFQUNBLElBQVc0SyxRQUFRLEdBQTRCNUssTUFBTSxDQUE5QzVHLEVBQUU7SUFBa0JndEIsZ0JBQWdCLEdBQUlwbUIsTUFBTSxDQUFoQ2xGLElBQUk7RUFFekIsSUFBTXFuQixTQUFTLEdBQUdqa0IsS0FBSyxDQUFDdEMsT0FBTyxDQUFDbUYsU0FBUyxDQUFDLFVBQUF3QixDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDbkosRUFBRSxLQUFLd1IsUUFBUTtFQUFBLEVBQUM7RUFDakUsSUFBSXVYLFNBQVMsS0FBSyxDQUFDLENBQUMsRUFBRTtJQUNwQixPQUFPamtCLEtBQUs7RUFDZDtFQUVBLElBQU1tSCxNQUFNLEdBQUduSCxLQUFLLENBQUN0QyxPQUFPLENBQUN1bUIsU0FBUyxDQUFvQjtFQUUxRCxJQUFJLENBQUNtRSx5QkFBeUIsQ0FBQ2poQixNQUFNLEVBQUUrZ0IsZ0JBQWdCLENBQUMsRUFBRTtJQUN4RCxPQUFPbG9CLEtBQUs7RUFDZDtFQUVBLElBQU1vTSxTQUFTLEdBQUFoTSxhQUFBLENBQUFBLGFBQUEsS0FDVitHLE1BQU07SUFDVCtnQixnQkFBZ0IsRUFBaEJBO0VBQWdCLEVBQ2pCO0VBRUQsSUFBTXhuQixRQUFRLEdBQUFOLGFBQUEsQ0FBQUEsYUFBQSxLQUNUSixLQUFLO0lBQ1J0QyxPQUFPLEVBQUUxRixLQUFLLENBQVNvVSxTQUFTLENBQUMsQ0FBQ3BNLEtBQUssQ0FBQ3RDLE9BQU87RUFBQyxFQUNqRDtFQUVELE9BQU9tUSwrQkFBK0IsQ0FBQ25OLFFBQVEsRUFBRXVqQixTQUFTLENBQUM7QUFDN0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNdkgsMEJBQTBCLEdBQUcsU0FBN0JBLDBCQUEwQkEsQ0FDckMxYyxLQUFlLEVBQUFxb0IsTUFBQSxFQUVGO0VBQUEsSUFERjFMLE1BQU0sR0FBQTBMLE1BQUEsQ0FBaEJ2TyxPQUFPLENBQUc2QyxNQUFNO0VBRWpCLElBQUt0ZCxxQkFBcUIsR0FBSVcsS0FBSyxDQUE5QlgscUJBQXFCO0VBQzFCLElBQUksQ0FBQ0EscUJBQXFCLEVBQUU7SUFDMUJBLHFCQUFxQixHQUFHLENBQUM7RUFDM0I7RUFFQSxPQUFBZSxhQUFBLENBQUFBLGFBQUEsS0FDS0osS0FBSztJQUNSWCxxQkFBcUIsRUFBRWlwQixJQUFJLENBQUNDLEdBQUcsQ0FBQ2xwQixxQkFBcUIsR0FBR3NkLE1BQU0sRUFBRSxDQUFDO0VBQUM7QUFFdEUsQ0FBQztBQUVELFNBQVM5TywrQkFBK0JBLENBQXFCN04sS0FBUSxFQUFFaWtCLFNBQWlCLEVBQUs7RUFDM0YsSUFBTTljLE1BQU0sR0FBR25ILEtBQUssQ0FBQ3RDLE9BQU8sQ0FBQ3VtQixTQUFTLENBQUM7RUFDdkMsSUFBSzljLE1BQU0sQ0FBcUJqQix1QkFBdUIsRUFBRTtJQUN2RCxJQUFNc2lCLGFBQWEsR0FBR0MsMEJBQTBCLENBQUN0aEIsTUFBTSxDQUFDO0lBQ3hELElBQU1qRCxLQUFLLEdBQUdsRSxLQUFLLENBQUNmLGVBQWUsQ0FBQzVDLFNBQVMsR0FDekNwSSxXQUFXLENBQUN1MEIsYUFBYSxFQUFFeG9CLEtBQUssQ0FBQ2YsZUFBZSxDQUFDNUMsU0FBUyxDQUFDLEdBQzNEbXNCLGFBQWE7SUFDakIsT0FBTzdjLDRCQUE0QixDQUFDM0wsS0FBSyxFQUFFO01BQUNrRSxLQUFLLEVBQUxBO0lBQUssQ0FBQyxDQUFDO0VBQ3JEO0VBQ0EsT0FBT2xFLEtBQUs7QUFDZDtBQUVBLFNBQVN5b0IsMEJBQTBCQSxDQUFDdGhCLE1BQU0sRUFBRTtFQUMxQyxPQUFPQSxNQUFNLENBQUNqRCxLQUFLLENBQUNpRCxNQUFNLENBQUMrZ0IsZ0JBQWdCLENBQUM7QUFDOUM7QUFFQSxTQUFTNWIsb0JBQW9CQSxDQUFDbkYsTUFBdUIsRUFBRTtFQUNyRCxJQUFJQSxNQUFNLENBQUNnRixlQUFlLEtBQUt0VyxnQkFBZ0IsQ0FBQzZ5QixJQUFJLEVBQUU7SUFBQSxJQUFBQyxxQkFBQTtJQUNwRCxRQUFBQSxxQkFBQSxHQUFPeGhCLE1BQU0sQ0FBQytnQixnQkFBZ0IsY0FBQVMscUJBQUEsY0FBQUEscUJBQUEsR0FBSWh5QixtQkFBbUIsQ0FBQ3d4QixHQUFHO0VBQzNEO0VBRUEsT0FBT3h4QixtQkFBbUIsQ0FBQ3d4QixHQUFHO0FBQ2hDO0FBRUEsU0FBU0MseUJBQXlCQSxDQUFDamhCLE1BQXVCLEVBQUV5aEIsT0FBZSxFQUFFO0VBQzNFLE9BQU8sRUFDTHpoQixNQUFNLENBQUNnRixlQUFlLEtBQUt0VyxnQkFBZ0IsQ0FBQzZ5QixJQUFJLElBQUlFLE9BQU8sS0FBS2p5QixtQkFBbUIsQ0FBQ2t5QixLQUFLLENBQzFGO0FBQ0g7QUFFQSxTQUFTYix3QkFBd0JBLENBQUNob0IsS0FBSyxFQUFFbUgsTUFBTSxFQUFFO0VBQy9DLElBQU13Z0IsNEJBQTRCLEdBQUd2dEIsK0JBQStCLENBQUM0RixLQUFLLENBQUMzQyxNQUFNLENBQUM7RUFFbEYsSUFBSTBxQixRQUF1QixHQUFHLElBQUk7RUFDbEMsSUFBSUosNEJBQTRCLENBQUNobkIsTUFBTSxHQUFHLENBQUMsRUFBRTtJQUMzQztJQUNBLElBQU1tb0IsYUFBYSxHQUFHbkIsNEJBQTRCLENBQUM5YixNQUFNLENBQUMsVUFBQ2tkLFlBQVksRUFBRXptQixDQUFDLEVBQUs7TUFDN0UsSUFBSUEsQ0FBQyxDQUFDMG1CLElBQUksQ0FBQ0Msa0JBQWtCLEVBQUU7UUFDN0IsSUFBTUMsUUFBUSxHQUFHeHVCLHNCQUFzQixDQUFDbUksU0FBUyxDQUFDLFVBQUF0QyxDQUFDO1VBQUEsT0FBSUEsQ0FBQyxLQUFLK0IsQ0FBQyxDQUFDMG1CLElBQUksQ0FBQ0Msa0JBQWtCO1FBQUEsRUFBQztRQUN2RixPQUFPQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUlBLFFBQVEsR0FBR0gsWUFBWSxHQUFHRyxRQUFRLEdBQUdILFlBQVk7TUFDM0U7SUFDRixDQUFDLEVBQUVydUIsc0JBQXNCLENBQUNpRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDO0lBQ0EsSUFBTXdvQixlQUFlLEdBQUd6dUIsc0JBQXNCLENBQUNvdUIsYUFBYSxDQUFDO0lBQzdEZixRQUFRLEdBQUd0dEIseUJBQXlCLENBQUMwdUIsZUFBZSxDQUFDO0VBQ3ZEO0VBRUEsSUFBSSxDQUFDcEIsUUFBUSxFQUFFO0lBQ2IsT0FBTzVnQixNQUFNO0VBQ2Y7O0VBRUE7RUFDQSxJQUFNN0ssVUFBVSxHQUFHOUIsb0JBQW9CLENBQUN1dEIsUUFBUSxDQUFDO0VBQ2pELElBQU1xQixlQUFlLEdBQUFocEIsYUFBQSxDQUFBQSxhQUFBLEtBQU8rRyxNQUFNLENBQUNtSSxRQUFRO0lBQUV5WSxRQUFRLEVBQVJBLFFBQVE7SUFBRXpyQixVQUFVLEVBQVZBO0VBQVUsRUFBQztFQUNsRSxJQUFNOFAsU0FBUyxHQUFHN1Isd0JBQXdCLENBQUM0TSxNQUFNLEVBQUVpaUIsZUFBZSxFQUFFcHBCLEtBQUssQ0FBQ3BDLFFBQVEsQ0FBQztFQUNuRixPQUFPdEQsNEJBQTRCLENBQUMwRixLQUFLLEVBQUVvTSxTQUFTLENBQUM7QUFDdkQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBU2lkLDhCQUE4QkEsQ0FBQ25sQixLQUFVLEVBQUUxQixNQUFjLEVBQUU4bUIsZUFBdUIsRUFBRTtFQUFBLElBQUFDLGFBQUEsRUFBQUMsY0FBQTtFQUMzRixJQUFJamdCLEtBQUssQ0FBQ0MsT0FBTyxDQUFDdEYsS0FBSyxDQUFDLEVBQUU7SUFDeEI7SUFDQSxJQUFNdWxCLFFBQVEsR0FBR3ZsQixLQUFLLENBQ25CN0QsR0FBRyxDQUFDLFVBQUE4TSxDQUFDO01BQUEsT0FBSWtjLDhCQUE4QixDQUFDbGMsQ0FBQyxFQUFFM0ssTUFBTSxFQUFFOG1CLGVBQWUsQ0FBQztJQUFBLEVBQUMsQ0FDcEVuaUIsTUFBTSxDQUFDLFVBQUEzRyxDQUFDO01BQUEsT0FBSUEsQ0FBQztJQUFBLEVBQUM7SUFDakIsT0FBT2lwQixRQUFRLENBQUM5b0IsTUFBTSxHQUFHOG9CLFFBQVEsR0FBRyxJQUFJO0VBQzFDO0VBQ0EsSUFBSSxPQUFPdmxCLEtBQUssQ0FBQzFCLE1BQU0sS0FBSyxRQUFRLElBQUkwQixLQUFLLENBQUMxQixNQUFNLEtBQUtBLE1BQU0sRUFBRTtJQUMvRDtJQUNBLE9BQUFwQyxhQUFBLENBQUFBLGFBQUEsS0FDSzhELEtBQUs7TUFDUjFCLE1BQU0sRUFBRThtQjtJQUFlO0VBRTNCLENBQUMsTUFBTSxJQUFJL2YsS0FBSyxDQUFDQyxPQUFPLENBQUN0RixLQUFLLENBQUMxQixNQUFNLENBQUMsSUFBSTBCLEtBQUssQ0FBQzFCLE1BQU0sQ0FBQzZFLFFBQVEsQ0FBQzdFLE1BQU0sQ0FBQyxFQUFFO0lBQ3ZFO0lBQ0EsT0FBQXBDLGFBQUEsQ0FBQUEsYUFBQSxLQUNLOEQsS0FBSztNQUNSMUIsTUFBTSxFQUFFMEIsS0FBSyxDQUFDMUIsTUFBTSxDQUFDbkMsR0FBRyxDQUFDLFVBQUFHLENBQUM7UUFBQSxPQUFLQSxDQUFDLEtBQUtnQyxNQUFNLEdBQUc4bUIsZUFBZSxHQUFHOW9CLENBQUM7TUFBQSxDQUFDO0lBQUM7RUFFdkUsQ0FBQyxNQUFNLElBQUksQ0FBQStvQixhQUFBLEdBQUFybEIsS0FBSyxDQUFDN0ksTUFBTSxjQUFBa3VCLGFBQUEsZUFBWkEsYUFBQSxDQUFjL21CLE1BQU0sSUFBSSxFQUFBZ25CLGNBQUEsR0FBQXRsQixLQUFLLENBQUM3SSxNQUFNLGNBQUFtdUIsY0FBQSx1QkFBWkEsY0FBQSxDQUFjaG5CLE1BQU0sTUFBS0EsTUFBTSxFQUFFO0lBQ2xFO0lBQ0EsT0FBQXBDLGFBQUEsQ0FBQUEsYUFBQSxLQUNLOEQsS0FBSztNQUNSN0ksTUFBTSxFQUFBK0UsYUFBQSxDQUFBQSxhQUFBLEtBQ0Q4RCxLQUFLLENBQUM3SSxNQUFNO1FBQ2ZtSCxNQUFNLEVBQUU4bUI7TUFBZTtJQUN4QjtFQUVMLENBQUMsTUFBTSxJQUFJdjBCLFFBQVEsQ0FBQ21QLEtBQUssQ0FBQyxJQUFJN0MsTUFBTSxDQUFDSSxTQUFTLENBQUNDLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDdUMsS0FBSyxFQUFFMUIsTUFBTSxDQUFDLEVBQUU7SUFDakY7SUFDQSxPQUFBa0QsZUFBQSxLQUFTNGpCLGVBQWUsRUFBR3BsQixLQUFLLENBQUMxQixNQUFNLENBQUM7RUFDMUM7RUFFQSxPQUFPLElBQUk7QUFDYjs7QUFFQTtBQUNBLFNBQVNrbkIsbUJBQW1CQSxDQUFDeGxCLEtBQUssRUFBRTtFQUFBLElBQUF5bEIsaUJBQUE7RUFDbEMsSUFBSXBnQixLQUFLLENBQUNDLE9BQU8sQ0FBQ3RGLEtBQUssQ0FBQyxFQUFFO0lBQ3hCO0lBQ0EsSUFBTTBsQixZQUFZLEdBQUcxbEIsS0FBSyxDQUFDN0QsR0FBRyxDQUFDcXBCLG1CQUFtQixDQUFDLENBQUN2aUIsTUFBTSxDQUFDLFVBQUEzRyxDQUFDO01BQUEsT0FBSUEsQ0FBQztJQUFBLEVBQUM7SUFDbEUsT0FBT29wQixZQUFZLENBQUNqcEIsTUFBTSxHQUFHaXBCLFlBQVksR0FBRyxJQUFJO0VBQ2xEOztFQUVBO0VBQ0EsT0FBTyxDQUFBMWxCLEtBQUssYUFBTEEsS0FBSyxnQkFBQXlsQixpQkFBQSxHQUFMemxCLEtBQUssQ0FBRTJLLFVBQVUsY0FBQThhLGlCQUFBLHVCQUFqQkEsaUJBQUEsQ0FBbUJqUCxJQUFJLENBQUN4ZixFQUFFLEtBQUksSUFBSTtBQUMzQzs7QUFFQTtBQUNBLFNBQVMydUIsbUJBQW1CQSxDQUFDN3BCLEtBQUssRUFBRThwQixVQUFVLEVBQUFDLE1BQUEsRUFBcUM7RUFBQSxJQUFsQ3RtQixJQUFJLEdBQUFzbUIsTUFBQSxDQUFKdG1CLElBQUk7SUFBRStXLFdBQVcsR0FBQXVQLE1BQUEsQ0FBWHZQLFdBQVc7SUFBRXdQLFlBQVksR0FBQUQsTUFBQSxDQUFaQyxZQUFZO0VBQzlFO0VBQ0E7RUFDQSxJQUFJLENBQUNGLFVBQVUsRUFBRTtJQUNmLE9BQU85cEIsS0FBSztFQUNkO0VBQ0EsSUFBTWlxQixZQUFZLEdBQ2hCeG1CLElBQUksS0FBSyxRQUFRLEdBQ2JxbUIsVUFBVSxDQUFDamUsTUFBTSxDQUFDLFVBQUNDLElBQUksRUFBRW9lLFNBQVM7SUFBQSxPQUFLNVksa0JBQWtCLENBQUN4RixJQUFJLEVBQUU7TUFBQzVRLEVBQUUsRUFBRWd2QixTQUFTLENBQUNodkI7SUFBRSxDQUFDLENBQUM7RUFBQSxHQUFFOEUsS0FBSyxDQUFDLEdBQzNGdUosS0FBSyxDQUFDQyxPQUFPLENBQUN4SixLQUFLLENBQUN5RCxJQUFJLENBQUMsQ0FBQyxHQUFBckQsYUFBQSxDQUFBQSxhQUFBLEtBRXJCSixLQUFLLE9BQUEwRixlQUFBLEtBQ1BqQyxJQUFJLEVBQUd6RCxLQUFLLENBQUN5RCxJQUFJLENBQUMsQ0FBQzBELE1BQU0sQ0FBQyxVQUFBZ2pCLENBQUM7SUFBQSxPQUFJLENBQUNMLFVBQVUsQ0FBQ3puQixJQUFJLENBQUMsVUFBQTZuQixTQUFTO01BQUEsT0FBSUMsQ0FBQyxDQUFDanZCLEVBQUUsS0FBS2d2QixTQUFTLENBQUNodkIsRUFBRTtJQUFBLEVBQUM7RUFBQSxFQUFDO0VBRXZGO0VBQ0E4RSxLQUFLOztFQUVYO0VBQ0EsSUFBTW9xQixVQUFVLEdBQUExa0IsZUFBQSxLQUNiOFUsV0FBVyxFQUFHd1AsWUFBWTtFQUN2QjtFQUNBQSxZQUFZLENBQUNDLFlBQVksRUFBRUgsVUFBVSxDQUFDO0VBQ3RDO0VBQ0Z2Z0IsS0FBSyxDQUFDQyxPQUFPLENBQUN5Z0IsWUFBWSxDQUFDelAsV0FBVyxDQUFDLENBQUMsTUFBQWhULE1BQUEsQ0FBQUMsa0JBQUEsQ0FDbEN3aUIsWUFBWSxDQUFDelAsV0FBVyxDQUFDLEdBQUEvUyxrQkFBQSxDQUFLcWlCLFVBQVU7RUFDNUM7RUFDRi8wQixRQUFRLENBQUNrMUIsWUFBWSxDQUFDelAsV0FBVyxDQUFDLENBQUMsR0FBQXBhLGFBQUEsQ0FBQUEsYUFBQSxLQUU1QjZwQixZQUFZLENBQUN6UCxXQUFXLENBQUMsR0FDekJzUCxVQUFVLElBRWZHLFlBQVksQ0FBQ3pQLFdBQVcsQ0FBQyxDQUM5QjtFQUVELE9BQUFwYSxhQUFBLENBQUFBLGFBQUEsS0FDSzZwQixZQUFZLEdBQ1pHLFVBQVU7QUFFakI7QUFFQSxTQUFTQyxxQkFBcUJBLENBQzVCcnFCLEtBQVEsRUFDUndDLE1BQWMsRUFDZDhuQixXQUFtQixFQUNoQjtFQUNILE9BQU81eUIsUUFBUSxDQUFJLENBQ2pCRCxNQUFNLENBQUM4eUIseUJBQXlCLEVBQUU7SUFBQy9uQixNQUFNLEVBQU5BLE1BQU07SUFBRThuQixXQUFXLEVBQVhBO0VBQVcsQ0FBQyxDQUFDLEVBQ3hEN3lCLE1BQU0sQ0FBQzZnQixvQkFBb0IsRUFBRTtJQUFDOVYsTUFBTSxFQUFOQTtFQUFNLENBQUMsQ0FBQyxDQUN2QyxDQUFDLENBQUN4QyxLQUFLLENBQUM7QUFDWDtBQUVBLE9BQU8sU0FBU3dxQiw2QkFBNkJBLENBQzNDeHFCLEtBQVEsRUFDUndDLE1BQWMsRUFDZDhuQixXQUFtQixFQUNoQjtFQUFBLElBQUFHLHFCQUFBO0VBQ0gsSUFBTUMsZUFBZSxHQUFHbHlCLGlCQUFpQixDQUFDd0gsS0FBSyxFQUFFQSxLQUFLLENBQUNQLE1BQU0sQ0FBQztFQUM5RCxJQUFNaUQsU0FBUyxHQUFHMm5CLHFCQUFxQixDQUFDcnFCLEtBQUssRUFBRXdDLE1BQU0sRUFBRThuQixXQUFXLENBQUM7RUFDbkU7RUFDQSxJQUFNSyxrQkFBa0IsR0FBQWxqQixrQkFBQSxDQUFPekgsS0FBSyxDQUFDeEMsVUFBVSxDQUFDOztFQUVoRDtFQUNBa0YsU0FBUyxDQUFDa29CLG9CQUFvQixHQUFHdnBCLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDdEIsS0FBSyxDQUFDcEMsUUFBUSxDQUFDLENBQUN5QyxHQUFHLENBQUMsVUFBQUcsQ0FBQztJQUFBLE9BQ2hFQSxDQUFDLEtBQUtnQyxNQUFNLEdBQUc4bkIsV0FBVyxHQUFHOXBCLENBQUM7RUFBQSxDQUNoQyxDQUFDOztFQUVEO0VBQ0EsS0FBQWlxQixxQkFBQSxHQUFJL25CLFNBQVMsQ0FBQ25GLGVBQWUsY0FBQWt0QixxQkFBQSxlQUF6QkEscUJBQUEsQ0FBMkI5cEIsTUFBTSxFQUFFO0lBQUEsSUFBQWtxQixxQkFBQTtJQUNyQztJQUNBbm9CLFNBQVMsQ0FBQzVELG1CQUFtQixJQUFBK3JCLHFCQUFBLEdBQUdILGVBQWUsYUFBZkEsZUFBZSx1QkFBZkEsZUFBZSxDQUFFN3JCLFNBQVMsY0FBQWdzQixxQkFBQSxjQUFBQSxxQkFBQSxHQUFJLEVBQUU7SUFDaEVub0IsU0FBUyxDQUFDbEYsVUFBVSxHQUFBaUssa0JBQUEsQ0FBT2tqQixrQkFBa0IsQ0FBQztFQUNoRDtFQUVBLE9BQU9qb0IsU0FBUztBQUNsQjtBQUVBLE9BQU8sU0FBUzZuQix5QkFBeUJBLENBQ3ZDdnFCLEtBQVEsRUFBQThxQixNQUFBLEVBRUw7RUFBQSxJQURGdG9CLE1BQU0sR0FBQXNvQixNQUFBLENBQU50b0IsTUFBTTtJQUFFOG5CLFdBQVcsR0FBQVEsTUFBQSxDQUFYUixXQUFXO0VBRXBCLElBQU1JLGVBQWUsR0FBR2x5QixpQkFBaUIsQ0FBQ3dILEtBQUssRUFBRUEsS0FBSyxDQUFDUCxNQUFNLENBQUM7RUFFOUQsSUFBTWlELFNBQVMsR0FBRzFDLEtBQUssQ0FBQ1IsT0FBTyxDQUFDcU0sTUFBTSxDQUNwQyxVQUNFa2YsU0FBUyxFQUFBQyxNQUFBLEVBRU47SUFBQSxJQURGdm5CLElBQUksR0FBQXVuQixNQUFBLENBQUp2bkIsSUFBSTtNQUFFK1csV0FBVyxHQUFBd1EsTUFBQSxDQUFYeFEsV0FBVztNQUFFeVEsdUJBQXVCLEdBQUFELE1BQUEsQ0FBdkJDLHVCQUF1QjtNQUFFQyxrQkFBa0IsR0FBQUYsTUFBQSxDQUFsQkUsa0JBQWtCO01BQUVsQixZQUFZLEdBQUFnQixNQUFBLENBQVpoQixZQUFZO01BQUVtQixhQUFhLEdBQUFILE1BQUEsQ0FBYkcsYUFBYTtJQUU1RjtJQUNBLElBQU12bUIsS0FBSyxHQUFHalAsT0FBTyxDQUFDOE4sSUFBSSxDQUFDO0lBQzNCLElBQU0ybkIsWUFBWSxHQUFHejFCLE9BQU8sQ0FBQzZrQixXQUFXLENBQUM7SUFDekMsSUFBTTZRLFVBQVUsR0FBR1gsZUFBZSxHQUFHOWxCLEtBQUssQ0FBQ3ZFLEdBQUcsQ0FBQyxVQUFBOHBCLENBQUM7TUFBQSxPQUFJTyxlQUFlLENBQUNQLENBQUMsQ0FBQztJQUFBLEVBQUMsR0FBRyxFQUFFO0lBRTVFLElBQUltQixhQUFhLEdBQUdQLFNBQVM7SUFDN0JNLFVBQVUsQ0FBQzlwQixPQUFPLENBQUMsVUFBQzJvQixTQUFTLEVBQUUzcEIsQ0FBQyxFQUFLO01BQUEsSUFBQWdyQixxQkFBQTtNQUNuQyxJQUFNQyxhQUFhLEdBQUc7UUFDcEIvbkIsSUFBSSxFQUFFbUIsS0FBSyxDQUFDckUsQ0FBQyxDQUFDO1FBQ2RpYSxXQUFXLEVBQUU0USxZQUFZLENBQUM3cUIsQ0FBQyxDQUFDO1FBQzVCMnFCLGtCQUFrQixFQUFsQkEsa0JBQWtCO1FBQ2xCbEIsWUFBWSxFQUFaQTtNQUNGLENBQUM7TUFFRCxJQUFNeUIsWUFBWSxHQUNoQixDQUFBUix1QkFBdUIsYUFBdkJBLHVCQUF1Qix1QkFBdkJBLHVCQUF1QixDQUFHZixTQUFTLEVBQUUxbkIsTUFBTSxFQUFFOG5CLFdBQVcsQ0FBQyxLQUN6RGpCLDhCQUE4QixDQUFDYSxTQUFTLEVBQUUxbkIsTUFBTSxFQUFFOG5CLFdBQVcsQ0FBQztNQUNoRWdCLGFBQWEsR0FBR0csWUFBWSxHQUN4QkMsdUJBQXVCLENBQUNKLGFBQWEsRUFBRUcsWUFBWSxFQUFFRCxhQUFhLENBQUMsR0FDbkVGLGFBQWE7TUFFakIsSUFDRUUsYUFBYSxDQUFDaFIsV0FBVyxLQUFLMWMsU0FBUyxLQUFBeXRCLHFCQUFBLEdBQ3ZDRCxhQUFhLENBQUNFLGFBQWEsQ0FBQ2hSLFdBQVcsQ0FBQyxjQUFBK1EscUJBQUEsZUFBeENBLHFCQUFBLENBQTBDNXFCLE1BQU0sSUFDaER3cUIsYUFBYSxFQUNiO1FBQ0FHLGFBQWEsQ0FBQ0gsYUFBYSxDQUFDLEdBQUdqQixTQUFTLENBQUM3cEIsR0FBRyxDQUFDLFVBQUFzckIsSUFBSTtVQUFBLE9BQUlBLElBQUksQ0FBQ3p3QixFQUFFO1FBQUEsRUFBQztNQUMvRDtJQUNGLENBQUMsQ0FBQztJQUVGLE9BQU9vd0IsYUFBYTtFQUN0QixDQUFDLEVBQ0R0ckIsS0FDRixDQUFDO0VBRUQsT0FBTzBDLFNBQVM7QUFDbEI7QUFFQSxTQUFTZ3BCLHVCQUF1QkEsQ0FDOUIxckIsS0FBSyxFQUNMeXJCLFlBQVksRUFBQUcsTUFBQSxFQUVaO0VBQUEsSUFEQ25vQixJQUFJLEdBQUFtb0IsTUFBQSxDQUFKbm9CLElBQUk7SUFBRStXLFdBQVcsR0FBQW9SLE1BQUEsQ0FBWHBSLFdBQVc7SUFBRTBRLGtCQUFrQixHQUFBVSxNQUFBLENBQWxCVixrQkFBa0I7SUFBRWxCLFlBQVksR0FBQTRCLE1BQUEsQ0FBWjVCLFlBQVk7RUFFcEQ7RUFDQTtFQUNBLElBQUl0bkIsU0FBUyxHQUFHbW5CLG1CQUFtQixDQUFDN3BCLEtBQUssRUFBRXlyQixZQUFZLEVBQUU7SUFBQ2hvQixJQUFJLEVBQUpBLElBQUk7SUFBRStXLFdBQVcsRUFBWEEsV0FBVztJQUFFd1AsWUFBWSxFQUFaQTtFQUFZLENBQUMsQ0FBQztFQUMzRixJQUFNSixZQUFZLEdBQUcsQ0FBQXNCLGtCQUFrQixhQUFsQkEsa0JBQWtCLHVCQUFsQkEsa0JBQWtCLENBQUdPLFlBQVksQ0FBQyxLQUFJL0IsbUJBQW1CLENBQUMrQixZQUFZLENBQUM7RUFFNUYsSUFBSTdCLFlBQVksRUFBRTtJQUNoQmxuQixTQUFTLEdBQUcvTSxPQUFPLENBQUNpMEIsWUFBWSxDQUFDLENBQUMvZCxNQUFNLENBQUMsVUFBQ0MsSUFBSSxFQUFFK2YsV0FBVyxFQUFLO01BQzlEO01BQ0E7TUFDQSxPQUFPeEIscUJBQXFCLENBQUN2ZSxJQUFJLEVBQUUrZixXQUFXLEVBQUVBLFdBQVcsQ0FBQztJQUM5RCxDQUFDLEVBQUVucEIsU0FBUyxDQUFDO0VBQ2Y7RUFDQSxPQUFPQSxTQUFTO0FBQ2xCIiwiaWdub3JlTGlzdCI6W119
|
|
4320
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJiYm94IiwiY29weSIsImRlZXBtZXJnZSIsImNvbnNvbGUiLCJDb25zb2xlIiwiY2xvbmVEZWVwIiwiZ2V0IiwiaXNFcXVhbCIsInBpY2siLCJ1bmlxIiwieG9yIiwiVGFzayIsImRpc2FibGVTdGFja0NhcHR1cmluZyIsIndpdGhUYXNrIiwiREVMQVlfVEFTSyIsIkFDVElPTl9UQVNLIiwiTE9BRF9GSUxFX1RBU0siLCJQUk9DRVNTX0ZJTEVfREFUQSIsIlVOV1JBUF9UQVNLIiwiYWRkTm90aWZpY2F0aW9uIiwiYXBwbHlMYXllckNvbmZpZyIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzIiwibGF5ZXJDb25maWdDaGFuZ2UiLCJsYXllclR5cGVDaGFuZ2UiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsImxvYWRGaWxlU3RlcFN1Y2Nlc3MiLCJsb2FkRmlsZXNFcnIiLCJsb2FkRmlsZXNTdWNjZXNzIiwibG9hZE5leHRGaWxlIiwibmV4dEZpbGVCYXRjaCIsInNldEZpbHRlciIsInByb2Nlc3NGaWxlQ29udGVudCIsImZpdEJvdW5kcyIsImZpdE1hcEJvdW5kcyIsInRvZ2dsZUxheWVyRm9yTWFwIiwiYXBwbHlGaWx0ZXJDb25maWciLCJsb2FkQ29sdW1uU3RhdHNTdWNjZXNzIiwibG9hZENvbHVtblN0YXRzRXJyb3IiLCJGSUxURVJfVVBEQVRFUl9QUk9QUyIsImFkZE5ld0xheWVyc1RvU3BsaXRNYXAiLCJzbmFwVG9NYXJrcyIsImFwcGx5RmlsdGVyRmllbGROYW1lIiwiYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyIsImFycmF5SW5zZXJ0IiwiY29tcHV0ZVNwbGl0TWFwTGF5ZXJzIiwiYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbiIsImVycm9yTm90aWZpY2F0aW9uIiwiZWRpdG9yRmVhdHVyZXNUb0ZlYXR1cmVDb2xsZWN0aW9uIiwibWVyZ2VVc2VyRmVhdHVyZVByb3BlcnRpZXMiLCJ0b1NrZXRjaEZlYXR1cmUiLCJmZWF0dXJlVG9GaWx0ZXJWYWx1ZSIsImZpbHRlckRhdGFzZXRDUFUiLCJnZW5lcmF0ZVBvbHlnb25GaWx0ZXIiLCJnZXREZWZhdWx0RmlsdGVyIiwiZ2V0RmlsdGVySWRJbkZlYXR1cmUiLCJnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIiLCJpc0luUmFuZ2UiLCJpc09iamVjdCIsImlzUGxhaW5PYmplY3QiLCJpc1JnYkNvbG9yIiwicGFyc2VGaWVsZFZhbHVlIiwicmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzIiwic2V0IiwidXBkYXRlRmlsdGVyUGxvdCIsInJlbW92ZUZpbHRlclBsb3QiLCJpc0xheWVyQW5pbWF0YWJsZSIsImlzU2lkZUZpbHRlciIsImdldEFwcGxpY2F0aW9uQ29uZmlnIiwiZ2VuZXJhdGVIYXNoSWQiLCJ0b0FycmF5IiwiYXJyYXlNb3ZlIiwiQU5JTUFUSU9OX1dJTkRPVyIsIkJBU0VfU1BFRUQiLCJDT01QQVJFX1RZUEVTIiwiREVGQVVMVF9URVhUX0xBQkVMIiwiRURJVE9SX01PREVTIiwiRklMVEVSX1RZUEVTIiwiRklMVEVSX1ZJRVdfVFlQRVMiLCJGUFMiLCJMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCIsIkRJU1RBTkNFX0ZPR19UWVBFIiwiU1VSRkFDRV9GT0dfVFlQRSIsIk1BWF9ERUZBVUxUX1RPT0xUSVBTIiwiUExPVF9UWVBFUyIsIlNPUlRfT1JERVIiLCJTWU5DX1RJTUVMSU5FX01PREVTIiwiQ0hBTk5FTF9TQ0FMRVMiLCJTQ0FMRV9UWVBFUyIsIklOSVRJQUxfQU5OT1RBVElPTl9LSU5EIiwiSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFIiwiSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9XSURUSCIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX0hFSUdIVCIsIklOSVRJQUxfQU5OT1RBVElPTl9MSU5FX1dJRFRIIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IiLCJBbm5vdGF0aW9uS2luZCIsIkxBWUVSX0lEX0xFTkdUSCIsIkxheWVyIiwiTGF5ZXJDbGFzc2VzIiwiYXBwbHlfIiwiY29tcG9zZV8iLCJmaWx0ZXJPdXRCeUlkIiwibWVyZ2VfIiwicGF5bG9hZF8iLCJwaWNrXyIsInJlbW92ZUVsZW1lbnRBdEluZGV4Iiwic3dhcF8iLCJpc1ZhbGlkTWVyZ2VyIiwibWVyZ2VTdGF0ZUZyb21NZXJnZXJzIiwiVklTX1NUQVRFX01FUkdFUlMiLCJjcmVhdGVMYXllckZyb21Db25maWciLCJwYXJzZUxheWVyQ29uZmlnIiwic2VyaWFsaXplRmlsdGVyIiwic2VyaWFsaXplTGF5ZXIiLCJzZXJpYWxpemVWaXNTdGF0ZSIsInZhbGlkYXRlTGF5ZXJXaXRoRGF0YSIsIktlcGxlckdMU2NoZW1hIiwicHJvY2Vzc0dlb2pzb24iLCJhc3NpZ25HcHVDaGFubmVsIiwiY29weVRhYmxlQW5kVXBkYXRlIiwiY3JlYXRlTmV3RGF0YUVudHJ5IiwicGluVGFibGVDb2x1bW5zIiwic2V0RmlsdGVyR3B1TW9kZSIsInNvcnREYXRhc2V0QnlDb2x1bW4iLCJmaW5kRmllbGRzVG9TaG93IiwiY2FsY3VsYXRlTGF5ZXJEYXRhIiwiZmluZERlZmF1bHRMYXllciIsImdldExheWVyT3JkZXJGcm9tTGF5ZXJzIiwibWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzIiwiZ2V0TmV3TGF5ZXJHcm91cCIsImFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlciIsInJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlciIsImdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlciIsImZpbmRQYXJlbnRHcm91cEZvckxheWVyIiwiZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkIiwidXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlciIsImdldEZsYXRMYXllck9yZGVyIiwicmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXIiLCJnZXRQcm9wVmFsdWVUb01lcmdlciIsImhhc1Byb3BzVG9NZXJnZSIsIm1lcmdlRGF0YXNldHNCeU9yZGVyIiwiZml4RWZmZWN0T3JkZXIiLCJnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyIsImdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMiLCJtZXJnZVRpbWVEb21haW5zIiwiYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyIsInVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZSIsImdldERlZmF1bHRUaW1lRm9ybWF0IiwiTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbCIsIlRJTUVfSU5URVJWQUxTX09SREVSRUQiLCJtZXJnZUZpbHRlckRvbWFpbiIsImluaXRDdXN0b21QYWxldHRlQnlDdXN0b21TY2FsZSIsImNvbGxlY3RDb2x1bW5WYWx1ZXMiLCJnZXRDb2x1bW5TdGF0aXN0aWNzIiwiY3JlYXRlRWZmZWN0IiwiZmluZE1hcEJvdW5kcyIsInZpc1N0YXRlVXBkYXRlcnMiLCJkZWZhdWx0SW50ZXJhY3Rpb25Db25maWciLCJ0b29sdGlwIiwiaWQiLCJsYWJlbCIsImVuYWJsZWQiLCJjb25maWciLCJmaWVsZHNUb1Nob3ciLCJjb21wYXJlTW9kZSIsImNvbXBhcmVUeXBlIiwiQUJTT0xVVEUiLCJnZW9jb2RlciIsInBvc2l0aW9uIiwibGltaXRTZWFyY2giLCJicnVzaCIsInNpemUiLCJjb29yZGluYXRlIiwiREVGQVVMVF9BTklNQVRJT05fQ09ORklHIiwiZG9tYWluIiwiY3VycmVudFRpbWUiLCJzcGVlZCIsImlzQW5pbWF0aW5nIiwidGltZVN0ZXBzIiwidGltZUZvcm1hdCIsInRpbWV6b25lIiwiZGVmYXVsdFRpbWVGb3JtYXQiLCJoaWRlQ29udHJvbCIsImR1cmF0aW9uIiwiREVGQVVMVF9FRElUT1IiLCJtb2RlIiwiRFJBV19QT0xZR09OIiwiZmVhdHVyZXMiLCJzZWxlY3RlZEZlYXR1cmUiLCJ2aXNpYmxlIiwiSU5JVElBTF9WSVNfU1RBVEUiLCJtYXBJbmZvIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsImxheWVycyIsImxheWVyRGF0YSIsImxheWVyVG9CZU1lcmdlZCIsImxheWVyT3JkZXIiLCJsYXllck9yZGVyVG9CZU1lcmdlZCIsImZpbHRlcnMiLCJmaWx0ZXJUb0JlTWVyZ2VkIiwiZGF0YXNldHMiLCJlZGl0aW5nRGF0YXNldCIsInVuZGVmaW5lZCIsImVmZmVjdHMiLCJlZmZlY3RPcmRlciIsImFubm90YXRpb25zIiwiYW5ub3RhdGlvbnNUb0JlTWVyZ2VkIiwic2VsZWN0ZWRBbm5vdGF0aW9uSWQiLCJpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dCIsImludGVyYWN0aW9uQ29uZmlnIiwiaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkIiwibGF5ZXJCbGVuZGluZyIsIm92ZXJsYXlCbGVuZGluZyIsImhvdmVySW5mbyIsImNsaWNrZWQiLCJtb3VzZVBvcyIsIm1heERlZmF1bHRUb29sdGlwcyIsInNwbGl0TWFwcyIsInNwbGl0TWFwc1RvQmVNZXJnZWQiLCJpc01lcmdpbmdEYXRhc2V0cyIsImxheWVyQ2xhc3NlcyIsImFuaW1hdGlvbkNvbmZpZyIsImVkaXRvciIsImZpbGVMb2FkaW5nIiwiZmlsZUxvYWRpbmdQcm9ncmVzcyIsImxvYWRpbmdJbmRpY2F0b3JWYWx1ZSIsImxvYWRlcnMiLCJsb2FkT3B0aW9ucyIsIm1lcmdlcnMiLCJzY2hlbWEiLCJBQ1RJT05fVEFTS19GSVRfQk9VTkRTIiwiZnJvbUNhbGxiYWNrIiwiXyIsImNiIiwiQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTiIsInVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YSIsInN0YXRlIiwiX3JlZiIsImxheWVyIiwiaWR4IiwiX29iamVjdFNwcmVhZCIsIm1hcCIsImx5ciIsImkiLCJkIiwidXBkYXRlU3RhdGVPbkxheWVyVmlzaWJpbGl0eUNoYW5nZSIsIm5ld1N0YXRlIiwibGVuZ3RoIiwiaXNWaXNpYmxlIiwiYW5pbWF0aW9uIiwidXBkYXRlQW5pbWF0aW9uRG9tYWluIiwicGlja0NoYW5nZWRQcm9wcyIsInByZXYiLCJuZXh0IiwiY2hhbmdlZFByb3BzIiwicGlja1Byb3BzT2YiLCJvYmoiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIlZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMiLCJhcHBseUxheWVyQ29uZmlnVXBkYXRlciIsImFjdGlvbiIsIl9zZXJpYWxpemVMYXllciIsIm9sZExheWVySWQiLCJuZXdMYXllckNvbmZpZyIsImxheWVySW5kZXgiLCJuZXdQYXJzZWRMYXllciIsIm9sZExheWVyIiwiZmluZCIsImwiLCJkYXRhc2V0IiwiZGF0YUlkIiwibmV3TGF5ZXIiLCJuZXh0U3RhdGUiLCJ0eXBlIiwib2xkTGF5ZXJJbmRleCIsImZpbmRJbmRleCIsImxheWVyVHlwZUNoYW5nZVVwZGF0ZXIiLCJuZXdMYXllcklkIiwic2VyaWFsaXplZE9sZExheWVyIiwic2VyaWFsaXplZE5ld0xheWVyIiwiY2hhbmdlZCIsInZpc0NvbmZpZyIsImxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlciIsInZpc3VhbENoYW5uZWxzIiwiY2hhbm5lbE5hbWUiLCJjaGFubmVsIiwiY2hhbm5lbFByb3BOYW1lcyIsInByb3AiLCJzb21lIiwibGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlciIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImVyciIsImUiLCJmIiwibGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyIiwidXBkYXRlbGF5ZXJWaXNpYmlsdHkiLCJmaWx0ZXJJbmRleCIsImZpbHRlclN5bmNlZFdpdGhUaW1lbGluZSIsInN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyIiwiZW5hYmxlIiwicHJvcHMiLCJuZXdDb25maWciLCJfYWN0aW9uJG5ld0NvbmZpZyIsInJlc3RDb25maWciLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJzdGF0ZVdpdGhEYXRhSWQiLCJsYXllckRhdGFJZENoYW5nZVVwZGF0ZXIiLCJuZXh0TGF5ZXIiLCJ1cGRhdGVMYXllckNvbmZpZyIsInNob3VsZENhbGN1bGF0ZUxheWVyRGF0YSIsIm9sZExheWVyRGF0YSIsInVwZGF0ZUxheWVyRGF0YVJlc3VsdCIsImxheWVyQW5pbWF0aW9uQ2hhbmdlVXBkYXRlciIsIl9kZWZpbmVQcm9wZXJ0eSIsIl9jYWxjdWxhdGVMYXllckRhdGEiLCJsYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyIiwibGF5ZXJJZCIsInNwbGl0TWFwSWQiLCJtYXBJbmRleCIsInNtIiwidG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyIiwic3luY2VkV2l0aExheWVyVGltZWxpbmUiLCJsYXllclNldElzVmFsaWRVcGRhdGVyIiwiaXNWYWxpZCIsImxheWVyVG9VcGRhdGUiLCJuZXdEYXRhIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTIiLCJhZGRPclJlbW92ZVRleHRMYWJlbHMiLCJuZXdGaWVsZHMiLCJ0ZXh0TGFiZWwiLCJkZWZhdWx0VGV4dExhYmVsIiwiYXJndW1lbnRzIiwibmV3VGV4dExhYmVsIiwic2xpY2UiLCJjdXJyZW50RmllbGRzIiwidGwiLCJmaWVsZCIsIm5hbWUiLCJmaWx0ZXIiLCJhZGRGaWVsZHMiLCJpbmNsdWRlcyIsImRlbGV0ZUZpZWxkcyIsImZkIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiYWYiLCJ1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUiLCJzcGxpY2UiLCJsYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXIiLCJfb2xkTGF5ZXIkZ2V0RGVmYXVsdEwiLCJfb2xkTGF5ZXIkZ2V0RGVmYXVsdEwyIiwiZ2V0RGVmYXVsdExheWVyQ29uZmlnIiwidmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEiLCJsb2FkZWRMYXllciIsImFsbG93RW1wdHlDb2x1bW4iLCJpc1ZhbGlkVG9TYXZlIiwidmFsaWRhdGVkIiwib2xkTGF5ZXJUeXBlIiwibmV3RGF0YXNldEZpZWxkcyIsImZpZWxkcyIsInJlbWFwcGVkRmllbGRzIiwidmFsdWVzIiwiX3JlZjIiLCJmaWVsZEtleSIsImN1cnJlbnRGaWVsZCIsIm1hdGNoZWQiLCJfcmVmMyIsInZhbGlkYXRlVmlzdWFsQ2hhbm5lbCIsImlzQ29uZmlnQWN0aXZlIiwidXBkYXRlTGF5ZXJEb21haW4iLCJfY2FsY3VsYXRlTGF5ZXJEYXRhMyIsInNldEluaXRpYWxMYXllckNvbmZpZyIsInJlc3VsdCIsImZpbmREZWZhdWx0TGF5ZXJQcm9wcyIsIkFycmF5IiwiaXNBcnJheSIsIm5ld1R5cGUiLCJvbGRJZCIsImVycm9yIiwiZGVmYXVsdExheWVyUHJvcHMiLCJhc3NpZ25Db25maWdUb0xheWVyIiwidmlzQ29uZmlnU2V0dGluZ3MiLCJpc0xheWVySG92ZXJlZCIsIl9jYWxjdWxhdGVMYXllckRhdGE0Iiwic2V0dGluZ3MiLCJfc2V0dGluZ3MkbGF5ZXJzIiwib2xkTGF5ZXJNYXAiLCJvdGhlckxheWVycyIsIl90b1Byb3BlcnR5S2V5IiwibmV3VmlzQ29uZmlnIiwidXBkYXRlTGF5ZXJWaXNDb25maWciLCJ1cGRhdGVMYXllclZpc3VhbENoYW5uZWwiLCJ1cGRhdGVkU3RhdGUiLCJ2aXN1YWxDaGFubmVsIiwiY2hhbm5lbFNjYWxlVHlwZSIsImNvbG9yIiwidXBkYXRlTGF5ZXJDb2xvclVJIiwicmFuZ2UiLCJjb2xvclJhbmdlQ29uZmlnIiwiY29sb3JVSSIsImN1c3RvbUJyZWFrcyIsIl9jYWxjdWxhdGVMYXllckRhdGE1Iiwic2NhbGUiLCJjdXN0b21PcmRpbmFsIiwiY3VzdG9tUGFsZXR0ZSIsIm9yZGluYWxEb21haW4iLCJjb2xvckJyZWFrcyIsInNob3dDb2xvckNoYXJ0IiwiZWRpdEJvdW5kcyIsIl9jYWxjdWxhdGVMYXllckRhdGE2Iiwic2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlciIsIl9yZWY0IiwicmVkdWNlIiwiYWNjdSIsInNldEZpbHRlckFuaW1hdGlvblRpbWVVcGRhdGVyIiwic2V0RmlsdGVyVXBkYXRlciIsInNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXIiLCJfcmVmNSIsImFuaW1hdGlvbldpbmRvdyIsIm5ld0ZpbHRlciIsIm5ld1N5bmNUaW1lbGluZU1vZGUiLCJnZXRTeW5jQW5pbWF0aW9uTW9kZSIsInNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyIiwiYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyIiwiX3NlcmlhbGl6ZUZpbHRlciIsImZpbHRlcklkIiwib2xkRmlsdGVyIiwic2VyaWFsaXplZE9sZEZpbHRlciIsInNlcmlhbGl6ZWROZXdGaWx0ZXIiLCJfYWN0aW9uJHZhbHVlSW5kZXgiLCJ2YWx1ZUluZGV4IiwiZGF0YXNldElkc1RvRmlsdGVyIiwiX2xvb3AiLCJyZXMiLCJ2IiwiX3VwZGF0ZUZpbHRlclByb3AiLCJlbmxhcmdlZEZpbHRlciIsInZpZXciLCJlbmxhcmdlZCIsInNpZGUiLCJmaWx0ZXJlZERhdGFzZXRzIiwiZmlsdGVyV2l0aFBMb3QiLCJ1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEiLCJ0aW1lUmFuZ2UiLCJhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyIiwiX3VwZGF0ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleCIsIl9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgiLCJuZXh0VmFsdWUiLCJfaSIsIl9hcnIiLCJuZXh0VmFsIiwiZG9tYWluU3RlcHMiLCJuZXh0RmlsdGVyIiwic3RlcCIsImRhdGFzZXRJZHMiLCJvbGREYXRhSWQiLCJkYXRhc2V0SWQiLCJfYXBwbHlGaWx0ZXJGaWVsZE5hbWUiLCJtZXJnZURvbWFpbiIsInVwZGF0ZWRGaWx0ZXIiLCJuZXdEYXRhc2V0IiwiZ3B1IiwibGF5ZXJJZERpZmZlcmVuY2UiLCJsYXllckRhdGFJZHMiLCJsaWQiLCJuZXdEYXRhSWRzIiwic2V0RmlsdGVyUGxvdFVwZGF0ZXIiLCJfcmVmNiIsIm5ld1Byb3AiLCJwbG90VHlwZSIsImNoYXJ0VHlwZSIsInlBeGlzIiwibGluZUNoYXJ0IiwiaGlzdG9ncmFtIiwiYWRkRmlsdGVyVXBkYXRlciIsImNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlciIsIm9yaWdpbmFsSW5kZXgiLCJpbmRleCIsImxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXIiLCJfcmVmNyIsIm9sZFZpeENvbmZpZyIsInRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIiLCJpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyIsInNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXIiLCJ0b2dnbGVMYXllckFuaW1hdGlvblVwZGF0ZXIiLCJ0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2xVcGRhdGVyIiwidXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyIiwidXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIiLCJfcmVmOCIsInNldEZpbHRlclZpZXdVcGRhdGVyIiwic2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3IiwidG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXIiLCJyZW1vdmVGaWx0ZXJVcGRhdGVyIiwiX3N0YXRlJGZpbHRlcnMkaWR4IiwibmV3RmlsdGVycyIsIm5ld0VkaXRvciIsImFkZExheWVyVXBkYXRlciIsIm5ld0xheWVyRGF0YSIsIndhcm4iLCJfYWN0aW9uJGRhdGFzZXRJZCIsImRlZmF1bHREYXRhc2V0IiwicmVtb3ZlTGF5ZXJVcGRhdGVyIiwiX3JlZjkiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsImxheWVyVG9SZW1vdmUiLCJyZW9yZGVyTGF5ZXJVcGRhdGVyIiwiX3JlZjAiLCJvcmRlciIsImFkZExheWVyR3JvdXBVcGRhdGVyIiwibGF5ZXJHcm91cCIsIm5ld0xheWVyT3JkZXIiLCJyZW1vdmVMYXllckdyb3VwVXBkYXRlciIsImxheWVyR3JvdXBUb1JlbW92ZSIsImxheWVySWRzVG9SZW1vdmUiLCJ1cGRhdGVMYXllckdyb3VwVXBkYXRlciIsIm9wdGlvbnMiLCJuZXdMYXllckdyb3VwIiwibGF5ZXJJZHMiLCJhY2MiLCJhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwSWQiLCJlbnRyeSIsIm5ld0dyb3VwTGF5ZXJPcmRlciIsInJlbW92ZUxheWVyRnJvbUxheWVyR3JvdXBVcGRhdGVyIiwibmV3TGF5ZXJHcm91cE9yZGVyIiwic3dhcExheWVyT3JkZXJFbnRyaWVzVXBkYXRlciIsIm9yaWdpbkxheWVySWQiLCJkZXN0aW5hdGlvbkxheWVySWQiLCJvcmlnaW5MYXllckdyb3VwSWQiLCJkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCIsIm9yaWdpbkluZGV4IiwiZGVzdGluYXRpb25JbmRleCIsImRlc3RJbmRleCIsImR1cGxpY2F0ZUxheWVyVXBkYXRlciIsIl9yZWYxIiwib3JpZ2luYWwiLCJvcmlnaW5hbExheWVyT3JkZXJJZHgiLCJuZXdMYWJlbCIsInBvc3RmaXgiLCJwYXJlbnRHcm91cCIsImxheWVyT3JkZXJXaXRob3V0UHJlcGVuZGVkIiwiaWR4SW5Hcm91cCIsInVwZGF0ZWRHcm91cCIsImFkZEVmZmVjdFVwZGF0ZXIiLCJfYWN0aW9uJGNvbmZpZyIsIl9hY3Rpb24kY29uZmlnMiIsIl9hY3Rpb24kY29uZmlnMyIsImVmZmVjdCIsIm5ld0VmZmVjdCIsInNldFByb3BzIiwicmVtb3ZlRWZmZWN0VXBkYXRlciIsIl9yZWYxMCIsImVmZmVjdFRvUmVtb3ZlIiwiZWZmZWN0SWQiLCJyZW9yZGVyRWZmZWN0VXBkYXRlciIsIl9yZWYxMSIsInVwZGF0ZUVmZmVjdFVwZGF0ZXIiLCJfcmVmMTIiLCJpZHgyIiwiZWZmZWN0T3JkZXJJZCIsIm5ld0VmZmVjdHMiLCJtYWtlTmV3QW5ub3RhdGlvbiIsIl9jb25maWcka2luZCIsIl9jb25maWckaWQiLCJfY29uZmlnJGlzVmlzaWJsZSIsIl9jb25maWckYXV0b1NpemUiLCJfY29uZmlnJGF1dG9TaXplWSIsIl9jb25maWckYW5jaG9yUG9pbnQiLCJfY29uZmlnJGxhYmVsIiwiX2NvbmZpZyRsaW5lQ29sb3IiLCJfY29uZmlnJGxpbmVXaWR0aCIsIl9jb25maWckdGV4dFdpZHRoIiwiX2NvbmZpZyR0ZXh0SGVpZ2h0IiwiX2NvbmZpZyR0ZXh0VmVydGljYWxBIiwiX2FybUxlbmd0aCIsIl9hbmdsZSIsIl9hcm1MZW5ndGgyIiwiX2FuZ2xlMiIsIl9hcm1MZW5ndGgzIiwiX2FuZ2xlMyIsIl9yYWRpdXNJbk1ldGVycyIsImtpbmQiLCJiYXNlIiwiYXV0b1NpemUiLCJhdXRvU2l6ZVkiLCJhbmNob3JQb2ludCIsImxpbmVDb2xvciIsImxpbmVXaWR0aCIsInRleHRXaWR0aCIsInRleHRIZWlnaHQiLCJ0ZXh0VmVydGljYWxBbGlnbiIsIlBPSU5UIiwiYXJtTGVuZ3RoIiwiYW5nbGUiLCJBUlJPVyIsIkNJUkNMRSIsInJhZGl1c0luTWV0ZXJzIiwiVEVYVCIsImFkZEFubm90YXRpb25VcGRhdGVyIiwibmV3QW5ub3RhdGlvbiIsInJlbW92ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjEzIiwiYSIsInVwZGF0ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjE0IiwibmV4dEFubm90YXRpb24iLCJuZXdBbm5vdGF0aW9ucyIsImR1cGxpY2F0ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjE1Iiwic2V0U2VsZWN0ZWRBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYxNiIsImlzRWRpdGluZ1RleHQiLCJyZW1vdmVEYXRhc2V0VXBkYXRlciIsImRhdGFzZXRLZXkiLCJfc3RhdGUkZGF0YXNldHMiLCJuZXdEYXRhc2V0cyIsImxheWVyc1RvUmVtb3ZlIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsImluZGV4T2YiLCJwdXNoIiwicmVtb3ZlRGF0YXNldEZyb21JbnRlcmFjdGlvbkNvbmZpZyIsIl9yZWYxNyIsIl9pbnRlcmFjdGlvbkNvbmZpZyIsIl9jb25maWckZmllbGRzVG9TaG93IiwidXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXIiLCJ1cGRhdGVPdmVybGF5QmxlbmRpbmdVcGRhdGVyIiwic2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXIiLCJ1cGRhdGVUYWJsZUNvbG9yVXBkYXRlciIsInVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIiLCJuZXdDb2xvciIsInJlc2V0TWFwQ29uZmlnVXBkYXRlciIsImluaXRpYWxTdGF0ZSIsInJlY2VpdmVNYXBDb25maWdVcGRhdGVyIiwiX3JlZjE4IiwiX3JlZjE4JHBheWxvYWQiLCJwYXlsb2FkIiwiX3JlZjE4JHBheWxvYWQkY29uZmlnIiwiX3JlZjE4JHBheWxvYWQkb3B0aW9uIiwidmlzU3RhdGUiLCJrZWVwRXhpc3RpbmdDb25maWciLCJtZXJnZWRTdGF0ZSIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJtZXJnZXIiLCJtZXJnZSIsInRvTWVyZ2VQcm9wIiwibGF5ZXJIb3ZlclVwZGF0ZXIiLCJpbmZvIiwiaW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyIiwiY29udHJhZGljdCIsImsiLCJsYXllckNsaWNrVXBkYXRlciIsInBpbm5lZCIsInBpY2tlZCIsIm1hcENsaWNrVXBkYXRlciIsIm1vdXNlTW92ZVVwZGF0ZXIiLCJfcmVmMTkiLCJldnQiLCJwb2ludCIsIm1vdXNlUG9zaXRpb24iLCJsbmdMYXQiLCJ0b2dnbGVTcGxpdE1hcFVwZGF0ZXIiLCJkdXBsaWNhdGUiLCJjbG9zZVNwZWNpZmljTWFwQXRJbmRleCIsIl9yZWYyMCIsInVwZGF0ZVZpc0RhdGFVcGRhdGVyIiwiY3JlYXRlRGF0YXNldFRhc2tzIiwibm90aWZpY2F0aW9uVGFza3MiLCJfcmVmMjEiLCJkYXRhc2V0SW5kZXgiLCJfcmVmMjEkaW5mbyIsInJlc3QiLCJfZXhjbHVkZWQyIiwidGFzayIsIm1lc3NhZ2UiLCJkYXRhc2V0c0FsbFNldHRsZWRUYXNrIiwiYWxsU2V0dGxlZCIsInJlc3VsdHMiLCJhZGRUb01hcE9wdGlvbnMiLCJzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlciIsImNoYW5nZSIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzVXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZCIsIm5ld0RhdGFFbnRyaWVzIiwic3RhdHVzIiwicmVhc29uIiwibGF5ZXJNZXJnZXJzIiwibSIsIndhaXRGb3JMYXllckRhdGEiLCJkYXRhc2V0TWVyZ2VycyIsInBvc3RNZXJnZXJQYXlsb2FkIiwiYXBwbHlNZXJnZXJzVXBkYXRlciIsIm1lcmdlU3RhdGVSZXN1bHQiLCJhbGxNZXJnZWQiLCJwb3N0TWVyZ2VVcGRhdGVyIiwibGF5ZXJWaXNDb25maWdGcm9tQWRkRGF0YU9wdGlvbnMiLCJwYXRjaCIsImxheWVyVmlzQ29uZmlnIiwiX3R5cGVvZiIsImZEYXRhSWQiLCJkYXRhc2V0RmlsdGVyZWQiLCJkYXRhRW1wdHkiLCJuZXdMYXllcnMiLCJhdXRvQ3JlYXRlTGF5ZXJzIiwiYWRkRGVmYXVsdExheWVycyIsInRvb2x0aXBGaWVsZHMiLCJhdXRvQ3JlYXRlVG9vbHRpcHMiLCJhZGREZWZhdWx0VG9vbHRpcHMiLCJ1cGRhdGVkRGF0YXNldHMiLCJjZW50ZXJNYXAiLCJib3VuZHMiLCJwYWRkaW5nIiwiZml0Qm91bmRzVGFzayIsInJlbmFtZURhdGFzZXRVcGRhdGVyIiwiQUxMT1dFRF9VUERBVEVfREFUQVNFVF9QUk9QUyIsInZhbGlkYXRlRGF0YXNldFVwZGF0ZVByb3BzIiwidmFsaWRhdGVkUHJvcHMiLCJlbnRyaWVzIiwiX2VudHJ5IiwiX3NsaWNlZFRvQXJyYXkiLCJleGlzdGluZyIsIl9zdGF0ZSRzcGxpdE1hcHMkaW5kZSIsImluZGV4VG9SZXRyaWV2ZSIsIm1hcExheWVycyIsImxvYWRGaWxlc1VwZGF0ZXIiLCJmaWxlcyIsIl9hY3Rpb24kb25GaW5pc2giLCJvbkZpbmlzaCIsImZyb20iLCJpbml0aWFsRmlsZUxvYWRpbmdQcm9ncmVzcyIsImZpbGVDYWNoZSIsImZpbGVzVG9Mb2FkIiwibG9hZE5leHRGaWxlVXBkYXRlciIsImxvYWRGaWxlU3RlcFN1Y2Nlc3NVcGRhdGVyIiwiZmlsZU5hbWUiLCJfc3RhdGUkZmlsZUxvYWRpbmciLCJzdGF0ZVdpdGhQcm9ncmVzcyIsInVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyIiwicHJvZ3Jlc3MiLCJwZXJjZW50Iiwic3RhdGVXaXRoQ2FjaGUiLCJfZmlsZXNUb0xvYWQiLCJfdG9BcnJheSIsImZpbGUiLCJyZW1haW5pbmdGaWxlc1RvTG9hZCIsIm1ha2VMb2FkRmlsZVRhc2siLCJiaW1hcCIsImdlbiIsImNvbnRlbnQiLCJwcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyIiwiX2FjdGlvbiRwYXlsb2FkMiIsInBhcnNlUHJvZ3Jlc3MiLCJwcmV2UHJvZ3Jlc3MiLCJuZXh0RmlsZUJhdGNoVXBkYXRlciIsIl9yZWYyMiIsIl9hY2N1bXVsYXRlZCRkYXRhIiwiX3JlZjIyJHBheWxvYWQiLCJhY2N1bXVsYXRlZCIsInVzZUFycm93UHJvZ3Jlc3NpdmVMb2FkaW5nIiwiZW5kc1dpdGgiLCJkYXRhIiwiX3JlZjIzIiwibG9hZEZpbGVzRXJyVXBkYXRlciIsIl9yZWYyNCIsIl9zdGF0ZSRmaWxlTG9hZGluZzIiLCJhcHBseUNQVUZpbHRlclVwZGF0ZXIiLCJfcmVmMjUiLCJkYXRhSWRzIiwic2V0TWFwSW5mb1VwZGF0ZXIiLCJlbXB0eSIsImRlZmF1bHRMYXllcnMiLCJmb3VuZExheWVycyIsIm1lcmdlZCIsIl9yZWYyNyIsImZpeGVkRG9tYWluIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTciLCJfc3RhdGUkZmlsdGVycyIsImFuaW1hdGFibGVMYXllcnMiLCJsYXllckRvbWFpbnMiLCJtZXJnZWREb21haW4iLCJtZXJnZWRUaW1lU3RlcHMiLCJhcHBseSIsInNvcnQiLCJzeW5jZWRGaWx0ZXIiLCJuZXdBbmltYXRpb25Eb21haW4iLCJzZXRFZGl0b3JNb2RlVXBkYXRlciIsIl9yZWYyOCIsInNrZXRjaGVzRW5hYmxlZCIsImVuYWJsZURyYXdPbk1hcFNrZXRjaGVzIiwiRFJBV19QT0lOVCIsIkRSQVdfTElORVNUUklORyIsInNldEZlYXR1cmVzVXBkYXRlciIsIl9yZWYyOSIsIl9sYXN0RmVhdHVyZSRwcm9wZXJ0aSIsIl9sYXN0RmVhdHVyZSRwcm9wZXJ0aTIiLCJfcmVmMjkkZmVhdHVyZXMiLCJsYXN0RmVhdHVyZSIsInByb3BlcnRpZXMiLCJpc0Nsb3NlZCIsInNoYXBlIiwiRURJVCIsImZlYXR1cmUiLCJmZWF0dXJlVmFsdWUiLCJmaWx0ZXJJZHgiLCJmaWwiLCJmaW5kRWRpdG9yRmVhdHVyZSIsIl9zdGF0ZSRlZGl0b3Ikc2VsZWN0ZSIsImZyb21FZGl0b3IiLCJpdGVtIiwic2V0RWRpdG9yRmVhdHVyZVByb3BlcnRpZXNVcGRhdGVyIiwiX3JlZjMwIiwiX3N0YXRlJGVkaXRvciRzZWxlY3RlMiIsInNvdXJjZSIsIm5leHRGZWF0dXJlIiwibmV4dEVkaXRvciIsInNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXIiLCJfcmVmMzEiLCJzZWxlY3Rpb25Db250ZXh0IiwiZGVsZXRlRmVhdHVyZVVwZGF0ZXIiLCJfcmVmMzIiLCJzZXRQb2x5Z29uRmlsdGVyTGF5ZXJVcGRhdGVyIiwibm9uZUZpbHRlckZlYXR1cmUiLCJfZmlsdGVyJGxheWVySWQiLCJpc0xheWVySW5jbHVkZWQiLCJza2V0Y2hGZWF0dXJlIiwic3RhdGVXaXRob3V0RmlsdGVyIiwic2V0UG9seWdvbkZpbHRlckFsbExheWVyc1VwZGF0ZXIiLCJ2aXNpYmxlTGF5ZXJJZHMiLCJhbGxMYXllcklkcyIsInNvcnRUYWJsZUNvbHVtblVwZGF0ZXIiLCJfcmVmMzMiLCJjb2x1bW4iLCJzb3J0TW9kZSIsImN1cnJlbnRNb2RlIiwiQVNDRU5ESU5HIiwic29ydGVkIiwicGluVGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjM0IiwiY29weVRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWYzNSIsImZpZWxkSWR4IiwidGV4dCIsImRhdGFDb250YWluZXIiLCJyb3ciLCJ2YWx1ZUF0Iiwiam9pbiIsInNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyIiwiX3JlZjM2IiwiZm9ybWF0cyIsImRpc3BsYXlGb3JtYXQiLCJfbGF5ZXIkY29uZmlnIiwiY29sb3JGaWVsZCIsImdldE1hcHBlZFZhbHVlIiwiZmlsdGVyUHJvcHMiLCJtYXBwZWRWYWx1ZSIsInlpZWxkRm9yUGFpbnQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInNldFRpbWVvdXQiLCJyZXF1ZXN0RGF0YXNldENvbHVtblN0YXRpc3RpY3MiLCJfeCIsIl9yZXF1ZXN0RGF0YXNldENvbHVtblN0YXRpc3RpY3MiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsIl9yZWYzNyIsIndyYXAiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwiZ2V0Q29sdW1uRmlsdGVyUHJvcHMiLCJmaWVsZFR5cGUiLCJzZW50IiwiYWJydXB0Iiwic3RvcCIsIkxPQURfQ09MVU1OX1NUQVRTX1RBU0siLCJmcm9tUHJvbWlzZSIsImxvYWRDb2x1bW5TdGF0c1VwZGF0ZXIiLCJfcmVmMzgiLCJmaWVsZE5hbWUiLCJmaWVsZE5hbWVzVG9Mb2FkIiwiZmllbGRzVG9Mb2FkIiwiaXNMb2FkaW5nU3RhdHMiLCJ0YXNrcyIsIl9yZWYzOSIsImxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3NVcGRhdGVyIiwiX3JlZjQwIiwibmV3RmlsdGVyUHJvcHMiLCJjb2x1bW5TdGF0cyIsImxvYWRDb2x1bW5TdGF0c0Vycm9yVXBkYXRlciIsIl9yZWY0MSIsInRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyIiwiY29udmVydEVkaXRvckZlYXR1cmVzVG9MYXllclVwZGF0ZXIiLCJfYWN0aW9uIiwiRXJyb3IiLCJTdHJpbmciLCJjbGVhcmVkU3RhdGUiLCJsYWJlbElkIiwiTWF0aCIsImZsb29yIiwicmFuZG9tIiwic2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIiLCJfcmVmNDIiLCJ1cGRhdGVzIiwiY2hlY2tUaW1lQ29uZmlnQXJncyIsImFsbG93ZWQiLCJzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyIiwiX3JlZjQzIiwibGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlVXBkYXRlciIsIl9sYXllciRmaWx0ZXJlZEl0ZW1DbyIsImV2ZW50IiwiZGVja2dsTGF5ZXJJZCIsImNvdW50IiwiZmlsdGVyZWRJdGVtQ291bnQiLCJ3bXNGZWF0dXJlSW5mb1VwZGF0ZXIiLCJmZWF0dXJlSW5mbyIsIm9iamVjdCIsIndtc0ZlYXR1cmVJbmZvIiwiX25ld1N0YXRlJGFuaW1hdGlvbkNvIiwiX25ld1N0YXRlJGFuaW1hdGlvbkNvMiIsIl9hY3Rpb24kZW5hYmxlIiwiaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyIsImhhc0ludGVydmFsQmFzZWRBbmltYXRpb25MYXllciIsIkJvb2xlYW4iLCJuZXdGaWx0ZXJEb21haW4iLCJpbnRlcnZhbCIsImFkanVzdFRpbWVGaWx0ZXJJbnRlcnZhbCIsIm5ld0ZpbHRlclZhbHVlIiwic3luY1RpbWVsaW5lTW9kZSIsImVuZCIsInZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUiLCJfcmVmNDQiLCJtYXgiLCJ0aW1lbGluZVZhbHVlIiwiZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIiLCJmcmVlIiwiX2ZpbHRlciRzeW5jVGltZWxpbmVNIiwibmV3TW9kZSIsInN0YXJ0IiwiaW50ZXJ2YWxJbmRleCIsImN1cnJlbnRJbmRleCIsIm1ldGEiLCJ0YXJnZXRUaW1lSW50ZXJ2YWwiLCJuZXdJbmRleCIsImhleFRpbGVJbnRlcnZhbCIsInVwZGF0ZWRQbG90VHlwZSIsImRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyIsImRhdGFJZFRvUmVwbGFjZSIsIl92YWx1ZSRjb25maWciLCJfdmFsdWUkY29uZmlnMiIsInJlcGxhY2VkIiwiZmluZENoaWxkRGF0YXNldElkcyIsIl92YWx1ZSRuZXdEYXRhc2V0IiwiY2hpbGREYXRhSWRzIiwibW92ZVZhbHVlVG9CZU1lcmdlZCIsInByb3BWYWx1ZXMiLCJfcmVmNDYiLCJzYXZlVW5tZXJnZWQiLCJzdGF0ZVJlbW92ZWQiLCJwcm9wVmFsdWUiLCJwIiwidG9CZU1lcmdlZCIsInJlcGxhY2VEYXRhc2V0QW5kRGVwcyIsImRhdGFJZFRvVXNlIiwicmVwbGFjZURhdGFzZXREZXBzSW5TdGF0ZSIsInByZXBhcmVTdGF0ZUZvckRhdGFzZXRSZXBsYWNlIiwiX25leHRTdGF0ZSRsYXllclRvQmVNIiwic2VyaWFsaXplZFN0YXRlIiwicHJlc2VydmVMYXllck9yZGVyIiwicHJlc2VydmVEYXRhc2V0T3JkZXIiLCJfc2VyaWFsaXplZFN0YXRlJHNwbGkiLCJfcmVmNDciLCJhY2N1U3RhdGUiLCJfcmVmNDgiLCJyZXBsYWNlUGFyZW50RGF0YXNldElkcyIsImdldENoaWxkRGF0YXNldElkcyIsInByZXNlcnZlT3JkZXIiLCJ0b01lcmdlUHJvcHMiLCJzYXZlZFByb3BzIiwicmVwbGFjZWRTdGF0ZSIsIl9yZXBsYWNlZFN0YXRlJG1lcmdlciIsIm1lcmdlck9wdGlvbnMiLCJyZXBsYWNlZEl0ZW0iLCJyZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZSIsIl9yZWY0OSIsImNoaWxkRGF0YUlkIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Zpcy1zdGF0ZS11cGRhdGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge2Jib3h9IGZyb20gJ0B0dXJmL2Jib3gnO1xuaW1wb3J0IHR5cGUge0FsbEdlb0pTT059IGZyb20gJ0B0dXJmL2hlbHBlcnMnO1xuaW1wb3J0IGNvcHkgZnJvbSAnY29weS10by1jbGlwYm9hcmQnO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdkZWVwbWVyZ2UnO1xuaW1wb3J0IHtjb25zb2xlIGFzIENvbnNvbGV9IGZyb20gJ2dsb2JhbC93aW5kb3cnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2gvY2xvbmVEZWVwJztcbmltcG9ydCBnZXQgZnJvbSAnbG9kYXNoL2dldCc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2gvaXNFcXVhbCc7XG5pbXBvcnQgcGljayBmcm9tICdsb2Rhc2gvcGljayc7XG5pbXBvcnQgdW5pcSBmcm9tICdsb2Rhc2gvdW5pcSc7XG5pbXBvcnQgeG9yIGZyb20gJ2xvZGFzaC94b3InO1xuaW1wb3J0IFRhc2ssIHtkaXNhYmxlU3RhY2tDYXB0dXJpbmcsIHdpdGhUYXNrfSBmcm9tICdyZWFjdC1wYWxtL3Rhc2tzJztcbi8vIFRhc2tzXG5pbXBvcnQge1xuICBERUxBWV9UQVNLLFxuICBBQ1RJT05fVEFTSyxcbiAgTE9BRF9GSUxFX1RBU0ssXG4gIFBST0NFU1NfRklMRV9EQVRBLFxuICBVTldSQVBfVEFTS1xufSBmcm9tICdAa2VwbGVyLmdsL3Rhc2tzJztcbi8vIEFjdGlvbnNcbmltcG9ydCB7XG4gIGFkZE5vdGlmaWNhdGlvbixcbiAgQWN0aW9uVHlwZXMsXG4gIENyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZCxcbiAgTWFwU3RhdGVBY3Rpb25zLFxuICBSZWNlaXZlTWFwQ29uZmlnUGF5bG9hZCxcbiAgVmlzU3RhdGVBY3Rpb25zLFxuICBhcHBseUxheWVyQ29uZmlnLFxuICBjcmVhdGVOZXdEYXRhc2V0U3VjY2VzcyxcbiAgbGF5ZXJDb25maWdDaGFuZ2UsXG4gIGxheWVyVHlwZUNoYW5nZSxcbiAgbGF5ZXJWaXNDb25maWdDaGFuZ2UsXG4gIGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSxcbiAgbG9hZEZpbGVTdGVwU3VjY2VzcyxcbiAgbG9hZEZpbGVzRXJyLFxuICBsb2FkRmlsZXNTdWNjZXNzLFxuICBsb2FkTmV4dEZpbGUsXG4gIG5leHRGaWxlQmF0Y2gsXG4gIHNldEZpbHRlcixcbiAgcHJvY2Vzc0ZpbGVDb250ZW50LFxuICBmaXRCb3VuZHMgYXMgZml0TWFwQm91bmRzLFxuICB0b2dnbGVMYXllckZvck1hcCxcbiAgYXBwbHlGaWx0ZXJDb25maWcsXG4gIFNldExvYWRpbmdJbmRpY2F0b3JQYXlsb2FkLFxuICBsb2FkQ29sdW1uU3RhdHNTdWNjZXNzLFxuICBsb2FkQ29sdW1uU3RhdHNFcnJvclxufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuXG4vLyBVdGlsc1xuaW1wb3J0IHtcbiAgRklMVEVSX1VQREFURVJfUFJPUFMsXG4gIGFkZE5ld0xheWVyc1RvU3BsaXRNYXAsXG4gIHNuYXBUb01hcmtzLFxuICBhcHBseUZpbHRlckZpZWxkTmFtZSxcbiAgYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyxcbiAgYXJyYXlJbnNlcnQsXG4gIGNvbXB1dGVTcGxpdE1hcExheWVycyxcbiAgYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbixcbiAgZXJyb3JOb3RpZmljYXRpb24sXG4gIGVkaXRvckZlYXR1cmVzVG9GZWF0dXJlQ29sbGVjdGlvbixcbiAgbWVyZ2VVc2VyRmVhdHVyZVByb3BlcnRpZXMsXG4gIHRvU2tldGNoRmVhdHVyZSxcbiAgZmVhdHVyZVRvRmlsdGVyVmFsdWUsXG4gIGZpbHRlckRhdGFzZXRDUFUsXG4gIGdlbmVyYXRlUG9seWdvbkZpbHRlcixcbiAgZ2V0RGVmYXVsdEZpbHRlcixcbiAgZ2V0RmlsdGVySWRJbkZlYXR1cmUsXG4gIGdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlcixcbiAgaXNJblJhbmdlLFxuICBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNSZ2JDb2xvcixcbiAgcGFyc2VGaWVsZFZhbHVlLFxuICByZW1vdmVMYXllckZyb21TcGxpdE1hcHMsXG4gIHNldCxcbiAgdXBkYXRlRmlsdGVyUGxvdCxcbiAgcmVtb3ZlRmlsdGVyUGxvdCxcbiAgaXNMYXllckFuaW1hdGFibGUsXG4gIGlzU2lkZUZpbHRlcixcbiAgZ2V0QXBwbGljYXRpb25Db25maWdcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2dlbmVyYXRlSGFzaElkLCB0b0FycmF5LCBhcnJheU1vdmV9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbi8vIE1lcmdlcnNcbmltcG9ydCB7XG4gIEFOSU1BVElPTl9XSU5ET1csXG4gIEJBU0VfU1BFRUQsXG4gIENPTVBBUkVfVFlQRVMsXG4gIERFRkFVTFRfVEVYVF9MQUJFTCxcbiAgRURJVE9SX01PREVTLFxuICBGSUxURVJfVFlQRVMsXG4gIEZJTFRFUl9WSUVXX1RZUEVTLFxuICBGUFMsXG4gIExJR0hUX0FORF9TSEFET1dfRUZGRUNULFxuICBESVNUQU5DRV9GT0dfVFlQRSxcbiAgU1VSRkFDRV9GT0dfVFlQRSxcbiAgTUFYX0RFRkFVTFRfVE9PTFRJUFMsXG4gIFBMT1RfVFlQRVMsXG4gIFNPUlRfT1JERVIsXG4gIFNZTkNfVElNRUxJTkVfTU9ERVMsXG4gIENIQU5ORUxfU0NBTEVTLFxuICBTQ0FMRV9UWVBFUyxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0tJTkQsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9BTkdMRSxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1dJRFRILFxuICBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9IRUlHSFQsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX1dJRFRILFxuICBJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUixcbiAgQW5ub3RhdGlvbktpbmRcbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtMQVlFUl9JRF9MRU5HVEgsIExheWVyLCBMYXllckNsYXNzZXN9IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7XG4gIGFwcGx5XyxcbiAgY29tcG9zZV8sXG4gIGZpbHRlck91dEJ5SWQsXG4gIG1lcmdlXyxcbiAgcGF5bG9hZF8sXG4gIHBpY2tfLFxuICByZW1vdmVFbGVtZW50QXRJbmRleCxcbiAgc3dhcF9cbn0gZnJvbSAnLi9jb21wb3Nlci1oZWxwZXJzJztcbmltcG9ydCB7aXNWYWxpZE1lcmdlciwgbWVyZ2VTdGF0ZUZyb21NZXJnZXJzfSBmcm9tICcuL21lcmdlci1oYW5kbGVyJztcbmltcG9ydCB7XG4gIFZJU19TVEFURV9NRVJHRVJTLFxuICBjcmVhdGVMYXllckZyb21Db25maWcsXG4gIHBhcnNlTGF5ZXJDb25maWcsXG4gIHNlcmlhbGl6ZUZpbHRlcixcbiAgc2VyaWFsaXplTGF5ZXIsXG4gIHNlcmlhbGl6ZVZpc1N0YXRlLFxuICB2YWxpZGF0ZUxheWVyV2l0aERhdGFcbn0gZnJvbSAnLi92aXMtc3RhdGUtbWVyZ2VyJztcblxuaW1wb3J0IEtlcGxlckdMU2NoZW1hLCB7TWVyZ2VyLCBQb3N0TWVyZ2VyUGF5bG9hZCwgVmlzU3RhdGV9IGZyb20gJ0BrZXBsZXIuZ2wvc2NoZW1hcyc7XG5pbXBvcnQge3Byb2Nlc3NHZW9qc29ufSBmcm9tICdAa2VwbGVyLmdsL3Byb2Nlc3NvcnMnO1xuXG5pbXBvcnQge1xuICBGaWx0ZXIsXG4gIEZlYXR1cmUsXG4gIEludGVyYWN0aW9uQ29uZmlnLFxuICBBbmltYXRpb25Db25maWcsXG4gIEZpbHRlckFuaW1hdGlvbkNvbmZpZyxcbiAgRWRpdG9yLFxuICBGaWVsZCxcbiAgTGF5ZXJWaXNDb25maWcsXG4gIFRpbWVSYW5nZUZpbHRlcixcbiAgQW5ub3RhdGlvbixcbiAgQW5ub3RhdGlvblByb3BzUGFydGlhbFxufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7TG9hZGVyfSBmcm9tICdAbG9hZGVycy5nbC9sb2FkZXItdXRpbHMnO1xuXG5pbXBvcnQge1xuICBEYXRhc2V0cyxcbiAgRmlsdGVyUHJvcHMsXG4gIGFzc2lnbkdwdUNoYW5uZWwsXG4gIGNvcHlUYWJsZUFuZFVwZGF0ZSxcbiAgY3JlYXRlTmV3RGF0YUVudHJ5LFxuICBwaW5UYWJsZUNvbHVtbnMsXG4gIHNldEZpbHRlckdwdU1vZGUsXG4gIHNvcnREYXRhc2V0QnlDb2x1bW5cbn0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5pbXBvcnQge2ZpbmRGaWVsZHNUb1Nob3d9IGZyb20gJy4vaW50ZXJhY3Rpb24tdXRpbHMnO1xuaW1wb3J0IHtcbiAgY2FsY3VsYXRlTGF5ZXJEYXRhLFxuICBmaW5kRGVmYXVsdExheWVyLFxuICBnZXRMYXllck9yZGVyRnJvbUxheWVycyxcbiAgbWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzLFxuICBnZXROZXdMYXllckdyb3VwLFxuICBhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIsXG4gIHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcixcbiAgZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyLFxuICBmaW5kUGFyZW50R3JvdXBGb3JMYXllcixcbiAgZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkLFxuICB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyLFxuICBnZXRGbGF0TGF5ZXJPcmRlcixcbiAgcmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXJcbn0gZnJvbSAnLi9sYXllci11dGlscyc7XG5pbXBvcnQge2dldFByb3BWYWx1ZVRvTWVyZ2VyLCBoYXNQcm9wc1RvTWVyZ2V9IGZyb20gJy4vbWVyZ2VyLWhhbmRsZXInO1xuaW1wb3J0IHttZXJnZURhdGFzZXRzQnlPcmRlcn0gZnJvbSAnLi92aXMtc3RhdGUtbWVyZ2VyJztcbmltcG9ydCB7XG4gIGZpeEVmZmVjdE9yZGVyLFxuICBnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyxcbiAgZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyxcbiAgbWVyZ2VUaW1lRG9tYWlucyxcbiAgYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyxcbiAgdXBkYXRlVGltZUZpbHRlclBsb3RUeXBlLFxuICBnZXREZWZhdWx0VGltZUZvcm1hdCxcbiAgTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbCxcbiAgVElNRV9JTlRFUlZBTFNfT1JERVJFRCxcbiAgbWVyZ2VGaWx0ZXJEb21haW4sXG4gIGluaXRDdXN0b21QYWxldHRlQnlDdXN0b21TY2FsZSxcbiAgY29sbGVjdENvbHVtblZhbHVlcyxcbiAgZ2V0Q29sdW1uU3RhdGlzdGljc1xufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7Y3JlYXRlRWZmZWN0fSBmcm9tICdAa2VwbGVyLmdsL2VmZmVjdHMnO1xuaW1wb3J0IHtQYXlsb2FkQWN0aW9ufSBmcm9tICdAcmVkdXhqcy90b29sa2l0JztcblxuaW1wb3J0IHtmaW5kTWFwQm91bmRzfSBmcm9tICcuL2RhdGEtdXRpbHMnO1xuXG4vLyByZWFjdC1wYWxtXG4vLyBkaXNhYmxlIGNhcHR1cmUgZXhjZXB0aW9uIGZvciByZWFjdC1wYWxtIGNhbGwgdG8gd2l0aFRhc2tcbmRpc2FibGVTdGFja0NhcHR1cmluZygpO1xuXG4vKipcbiAqIFVwZGF0ZXJzIGZvciBgdmlzU3RhdGVgIHJlZHVjZXIuIENhbiBiZSB1c2VkIGluIHlvdXIgcm9vdCByZWR1Y2VyIHRvIGRpcmVjdGx5IG1vZGlmeSBrZXBsZXIuZ2wncyBzdGF0ZS5cbiAqIFJlYWQgbW9yZSBhYm91dCBbVXNpbmcgdXBkYXRlcnNdKC4uL2FkdmFuY2VkLXVzYWdlL3VzaW5nLXVwZGF0ZXJzLm1kKVxuICpcbiAqIEBwdWJsaWNcbiAqIEBleGFtcGxlXG4gKlxuICogaW1wb3J0IGtlcGxlckdsUmVkdWNlciwge3Zpc1N0YXRlVXBkYXRlcnN9IGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuICogLy8gUm9vdCBSZWR1Y2VyXG4gKiBjb25zdCByZWR1Y2VycyA9IGNvbWJpbmVSZWR1Y2Vycyh7XG4gKiAga2VwbGVyR2w6IGtlcGxlckdsUmVkdWNlcixcbiAqICBhcHA6IGFwcFJlZHVjZXJcbiAqIH0pO1xuICpcbiAqIGNvbnN0IGNvbXBvc2VkUmVkdWNlciA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gKiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICogICAgY2FzZSAnQ0xJQ0tfQlVUVE9OJzpcbiAqICAgICAgcmV0dXJuIHtcbiAqICAgICAgICAuLi5zdGF0ZSxcbiAqICAgICAgICBrZXBsZXJHbDoge1xuICogICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wsXG4gKiAgICAgICAgICBmb286IHtcbiAqICAgICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLmZvbyxcbiAqICAgICAgICAgICAgIHZpc1N0YXRlOiB2aXNTdGF0ZVVwZGF0ZXJzLmVubGFyZ2VGaWx0ZXJVcGRhdGVyKFxuICogICAgICAgICAgICAgICBzdGF0ZS5rZXBsZXJHbC5mb28udmlzU3RhdGUsXG4gKiAgICAgICAgICAgICAgIHtpZHg6IDB9XG4gKiAgICAgICAgICAgICApXG4gKiAgICAgICAgICB9XG4gKiAgICAgICAgfVxuICogICAgICB9O1xuICogIH1cbiAqICByZXR1cm4gcmVkdWNlcnMoc3RhdGUsIGFjdGlvbik7XG4gKiB9O1xuICpcbiAqIGV4cG9ydCBkZWZhdWx0IGNvbXBvc2VkUmVkdWNlcjtcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4vLyBAdHMtaWdub3JlXG5jb25zdCB2aXNTdGF0ZVVwZGF0ZXJzID0gbnVsbDtcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0SW50ZXJhY3Rpb25Db25maWc6IEludGVyYWN0aW9uQ29uZmlnID0ge1xuICB0b29sdGlwOiB7XG4gICAgaWQ6ICd0b29sdGlwJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy50b29sdGlwJyxcbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIGNvbmZpZzoge1xuICAgICAgZmllbGRzVG9TaG93OiB7fSxcbiAgICAgIGNvbXBhcmVNb2RlOiBmYWxzZSxcbiAgICAgIGNvbXBhcmVUeXBlOiBDT01QQVJFX1RZUEVTLkFCU09MVVRFXG4gICAgfVxuICB9LFxuICBnZW9jb2Rlcjoge1xuICAgIGlkOiAnZ2VvY29kZXInLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmdlb2NvZGVyJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBwb3NpdGlvbjogbnVsbCxcbiAgICBjb25maWc6IHtcbiAgICAgIGxpbWl0U2VhcmNoOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgYnJ1c2g6IHtcbiAgICBpZDogJ2JydXNoJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5icnVzaCcsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgY29uZmlnOiB7XG4gICAgICAvLyBzaXplIGlzIGluIGttXG4gICAgICBzaXplOiAwLjVcbiAgICB9XG4gIH0sXG4gIGNvb3JkaW5hdGU6IHtcbiAgICBpZDogJ2Nvb3JkaW5hdGUnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmNvb3JkaW5hdGUnLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIHBvc2l0aW9uOiBudWxsXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FOSU1BVElPTl9DT05GSUc6IEFuaW1hdGlvbkNvbmZpZyA9IHtcbiAgZG9tYWluOiBudWxsLFxuICBjdXJyZW50VGltZTogbnVsbCxcbiAgc3BlZWQ6IDEsXG4gIGlzQW5pbWF0aW5nOiBmYWxzZSxcbiAgdGltZVN0ZXBzOiBudWxsLFxuICB0aW1lRm9ybWF0OiBudWxsLFxuICB0aW1lem9uZTogbnVsbCxcbiAgZGVmYXVsdFRpbWVGb3JtYXQ6IG51bGwsXG4gIGhpZGVDb250cm9sOiBmYWxzZSxcbiAgZHVyYXRpb246IG51bGxcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VESVRPUjogRWRpdG9yID0ge1xuICBtb2RlOiBFRElUT1JfTU9ERVMuRFJBV19QT0xZR09OLFxuICBmZWF0dXJlczogW10sXG4gIHNlbGVjdGVkRmVhdHVyZTogbnVsbCxcbiAgdmlzaWJsZTogdHJ1ZVxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGluaXRpYWwgYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBjb25zdGFudFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgSU5JVElBTF9WSVNfU1RBVEU6IFZpc1N0YXRlID0ge1xuICAvLyBtYXAgaW5mb1xuICBtYXBJbmZvOiB7XG4gICAgdGl0bGU6ICcnLFxuICAgIGRlc2NyaXB0aW9uOiAnJ1xuICB9LFxuICAvLyBsYXllcnNcbiAgbGF5ZXJzOiBbXSxcbiAgbGF5ZXJEYXRhOiBbXSxcbiAgbGF5ZXJUb0JlTWVyZ2VkOiBbXSxcbiAgbGF5ZXJPcmRlcjogW10sXG4gIGxheWVyT3JkZXJUb0JlTWVyZ2VkOiBudWxsLFxuXG4gIC8vIGZpbHRlcnNcbiAgZmlsdGVyczogW10sXG4gIGZpbHRlclRvQmVNZXJnZWQ6IFtdLFxuXG4gIC8vIGEgY29sbGVjdGlvbiBvZiBtdWx0aXBsZSBkYXRhc2V0XG4gIGRhdGFzZXRzOiB7fSxcbiAgZWRpdGluZ0RhdGFzZXQ6IHVuZGVmaW5lZCxcblxuICAvLyBlZmZlY3RzXG4gIGVmZmVjdHM6IFtdLFxuICBlZmZlY3RPcmRlcjogW10sXG5cbiAgLy8gYW5ub3RhdGlvbnNcbiAgYW5ub3RhdGlvbnM6IFtdLFxuICBhbm5vdGF0aW9uc1RvQmVNZXJnZWQ6IFtdLFxuICBzZWxlY3RlZEFubm90YXRpb25JZDogbnVsbCxcbiAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6IGZhbHNlLFxuXG4gIGludGVyYWN0aW9uQ29uZmlnOiBkZWZhdWx0SW50ZXJhY3Rpb25Db25maWcsXG4gIGludGVyYWN0aW9uVG9CZU1lcmdlZDoge30sXG5cbiAgbGF5ZXJCbGVuZGluZzogJ25vcm1hbCcsXG4gIG92ZXJsYXlCbGVuZGluZzogJ25vcm1hbCcsXG4gIGhvdmVySW5mbzogdW5kZWZpbmVkLFxuICBjbGlja2VkOiB1bmRlZmluZWQsXG4gIG1vdXNlUG9zOiB7fSxcbiAgbWF4RGVmYXVsdFRvb2x0aXBzOiBNQVhfREVGQVVMVF9UT09MVElQUyxcblxuICAvLyB0aGlzIGlzIHVzZWQgd2hlbiB1c2VyIHNwbGl0IG1hcHNcbiAgc3BsaXRNYXBzOiBbXG4gICAgLy8gdGhpcyB3aWxsIGNvbnRhaW4gYSBsaXN0IG9mIG9iamVjdHMgdG9cbiAgICAvLyBkZXNjcmliZSB0aGUgc3RhdGUgb2YgbGF5ZXIgYXZhaWxhYmlsaXR5IGFuZCB2aXNpYmlsaXR5IGZvciBlYWNoIG1hcFxuICAgIC8vIFtcbiAgICAvLyAgIHtcbiAgICAvLyAgICAgIGxheWVyczoge2xheWVyX2lkOiB0cnVlIHwgZmFsc2V9XG4gICAgLy8gICB9XG4gICAgLy8gXVxuICBdLFxuICBzcGxpdE1hcHNUb0JlTWVyZ2VkOiBbXSxcbiAgaXNNZXJnaW5nRGF0YXNldHM6IHt9LFxuICAvLyBkZWZhdWx0cyBsYXllciBjbGFzc2VzXG4gIGxheWVyQ2xhc3NlczogTGF5ZXJDbGFzc2VzLFxuXG4gIC8vIGRlZmF1bHQgYW5pbWF0aW9uXG4gIC8vIHRpbWUgaW4gdW5peCB0aW1lc3RhbXAgKG1pbGxpc2Vjb25kcykgKHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSB0aGUgVW5peCBFcG9jaClcbiAgYW5pbWF0aW9uQ29uZmlnOiBERUZBVUxUX0FOSU1BVElPTl9DT05GSUcsXG5cbiAgZWRpdG9yOiBERUZBVUxUX0VESVRPUixcblxuICBmaWxlTG9hZGluZzogZmFsc2UsXG4gIGZpbGVMb2FkaW5nUHJvZ3Jlc3M6IHt9LFxuICAvLyBmb3IgbG9hZGluZyBkYXRhc2V0c1xuICBsb2FkaW5nSW5kaWNhdG9yVmFsdWU6IDAsXG5cbiAgbG9hZGVyczogW10sXG4gIGxvYWRPcHRpb25zOiB7fSxcblxuICAvLyB2aXNTdGF0ZU1lcmdlcnNcbiAgbWVyZ2VyczogVklTX1NUQVRFX01FUkdFUlMsXG5cbiAgLy8ga2VwbGVyIHNjaGVtYXNcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYVxufTtcblxuZXhwb3J0IGNvbnN0IEFDVElPTl9UQVNLX0ZJVF9CT1VORFMgPSBUYXNrLmZyb21DYWxsYmFjayhcbiAgKF8sIGNiKSA9PiBjYigpLFxuXG4gICdBQ1RJT05fVEFTS19GSVRfQk9VTkRTJ1xuKTtcblxuZXhwb3J0IGNvbnN0IEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04gPSBUYXNrLmZyb21DYWxsYmFjayhcbiAgKF8sIGNiKSA9PiBjYigpLFxuXG4gICdBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OJ1xuKTtcblxudHlwZSBVcGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGFUeXBlID0ge1xuICBsYXllcnM6IExheWVyW107XG4gIGxheWVyRGF0YTogYW55W107XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBzdGF0ZSB3aXRoIHVwZGF0ZWQgbGF5ZXIgYW5kIGxheWVyRGF0YVxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YTxTIGV4dGVuZHMgVXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhVHlwZT4oXG4gIHN0YXRlOiBTLFxuICB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fToge2xheWVyRGF0YT86IGFueTsgbGF5ZXI6IExheWVyOyBpZHg6IG51bWJlcn1cbik6IFMge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3RhdGUubGF5ZXJzLm1hcCgobHlyLCBpKSA9PiAoaSA9PT0gaWR4ID8gbGF5ZXIgOiBseXIpKSxcbiAgICBsYXllckRhdGE6IGxheWVyRGF0YVxuICAgICAgPyBzdGF0ZS5sYXllckRhdGEubWFwKChkLCBpKSA9PiAoaSA9PT0gaWR4ID8gbGF5ZXJEYXRhIDogZCkpXG4gICAgICA6IHN0YXRlLmxheWVyRGF0YVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVPbkxheWVyVmlzaWJpbGl0eUNoYW5nZTxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBsYXllcjogTGF5ZXIpOiBTIHtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGlmIChzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogbGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgICAgICA/IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAoc3RhdGUuc3BsaXRNYXBzLCBsYXllcilcbiAgICAgICAgOiByZW1vdmVMYXllckZyb21TcGxpdE1hcHMoc3RhdGUuc3BsaXRNYXBzLCBsYXllcilcbiAgICB9O1xuICB9XG5cbiAgaWYgKGxheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gb2JqZWN0cyAob3IgYXJyYXlzKSBhbmQgcmV0dXJucyBhIG5ldyBvYmplY3Qgd2l0aCBvbmx5IHRoZVxuICogcHJvcGVydGllcyB0aGF0IGhhdmUgY2hhbmdlZCBiZXR3ZWVuIHRoZSB0d28gb2JqZWN0cy5cbiAqL1xuZnVuY3Rpb24gcGlja0NoYW5nZWRQcm9wczxUPihwcmV2OiBULCBuZXh0OiBUKTogUGFydGlhbDxUPiB7XG4gIGNvbnN0IGNoYW5nZWRQcm9wczogUGFydGlhbDxUPiA9IHt9O1xuICBjb25zdCBwaWNrUHJvcHNPZiA9IG9iaiA9PiB7XG4gICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlZFByb3BzLCBrZXkpICYmXG4gICAgICAgICFpc0VxdWFsKHByZXZba2V5XSwgbmV4dFtrZXldKVxuICAgICAgKSB7XG4gICAgICAgIGNoYW5nZWRQcm9wc1trZXldID0gbmV4dFtrZXldO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBwaWNrUHJvcHNPZihwcmV2KTtcbiAgcGlja1Byb3BzT2YobmV4dCk7XG4gIHJldHVybiBjaGFuZ2VkUHJvcHM7XG59XG5cbmNvbnN0IFZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMgPSBbJ2ZpZWxkJywgJ3NjYWxlJywgJ2RvbWFpbicsICdhZ2dyZWdhdGlvbiddO1xuXG4vKipcbiAqIEFwcGx5IGxheWVyIGNvbmZpZ1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eSwgbWF4LXN0YXRlbWVudHNcbmV4cG9ydCBmdW5jdGlvbiBhcHBseUxheWVyQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BcHBseUxheWVyQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJJZCwgbmV3TGF5ZXJDb25maWcsIGxheWVySW5kZXh9ID0gYWN0aW9uO1xuICBjb25zdCBuZXdQYXJzZWRMYXllciA9XG4gICAgLy8gd2lsbCBtb3ZlIHZpc3VhbENoYW5uZWxzIHRvIHRoZSBjb25maWcgcHJvcFxuICAgIHBhcnNlTGF5ZXJDb25maWcoc3RhdGUuc2NoZW1hLCBuZXdMYXllckNvbmZpZyk7XG4gIGNvbnN0IG9sZExheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBvbGRMYXllcklkKTtcbiAgaWYgKCFvbGRMYXllciB8fCAhbmV3UGFyc2VkTGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKGxheWVySW5kZXggIT09IG51bGwgJiYgbGF5ZXJJbmRleCAhPT0gdW5kZWZpbmVkICYmIHN0YXRlLmxheWVyc1tsYXllckluZGV4XSAhPT0gb2xkTGF5ZXIpIHtcbiAgICAvLyBsYXllckluZGV4IGlzIHByb3ZpZGVkLCBidXQgaXQgZG9lc24ndCBtYXRjaCB0aGUgb2xkTGF5ZXJcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW25ld1BhcnNlZExheWVyLmNvbmZpZy5kYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gTWFrZSBzdXJlIHRoZSBsYXllciBpcyB2YWxpZCBhbmQgY29udmVydCBpdCB0byBMYXllclxuICBjb25zdCBuZXdMYXllciA9IHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBuZXdQYXJzZWRMYXllciwgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgaWYgKCFuZXdMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBuZXh0U3RhdGUgPSBzdGF0ZTtcblxuICBpZiAobmV3TGF5ZXIudHlwZSAmJiBuZXdMYXllci50eXBlICE9PSBvbGRMYXllci50eXBlKSB7XG4gICAgY29uc3Qgb2xkTGF5ZXJJbmRleCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllcklkKTtcbiAgICBpZiAob2xkTGF5ZXJJbmRleCA+PSAwKSB7XG4gICAgICBuZXh0U3RhdGUgPSBsYXllclR5cGVDaGFuZ2VVcGRhdGVyKG5leHRTdGF0ZSwgbGF5ZXJUeXBlQ2hhbmdlKG9sZExheWVyLCBuZXdMYXllci50eXBlKSk7XG4gICAgICAvLyBsYXllclR5cGVDaGFuZ2VVcGRhdGVyIGNoYW5nZXMgdGhlIGlkIG9mIHRoZSBsYXllciwgc28gd2UgbmVlZCB0byBvYnRhaW4gdGhlIG5ldyBpZFxuICAgICAgLy8gYnV0IGZpcnN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBsYXllciB3YXMgbm90IHJlbW92ZWRcbiAgICAgIGlmIChuZXh0U3RhdGUubGF5ZXJzLmxlbmd0aCA9PT0gc3RhdGUubGF5ZXJzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBuZXdMYXllcklkID0gbmV4dFN0YXRlLmxheWVyc1tvbGRMYXllckluZGV4XS5pZDtcbiAgICAgICAgbmV4dFN0YXRlID0gYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIoXG4gICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgIGFwcGx5TGF5ZXJDb25maWcobmV3TGF5ZXJJZCwgey4uLm5ld0xheWVyQ29uZmlnLCBpZDogbmV3TGF5ZXJJZH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXh0U3RhdGU7XG4gIH1cblxuICAvLyBzZXJpYWxpemVMYXllcigpIG1pZ2h0IHJldHVybiBudWxsIGlmIHRoZSBvbGQgbGF5ZXIgaXMgbm90IHZhbGlkLFxuICAvLyB3ZSBzaG91bGQgc3RpbGwgYXBwbHkgdGhlIGNoYW5nZXMgaW4gdGhhdCBjYXNlXG4gIGNvbnN0IHNlcmlhbGl6ZWRPbGRMYXllciA9IHNlcmlhbGl6ZUxheWVyKG9sZExheWVyLCBzdGF0ZS5zY2hlbWEpID8/IHtjb25maWc6IHt9fTtcbiAgY29uc3Qgc2VyaWFsaXplZE5ld0xheWVyID0gc2VyaWFsaXplTGF5ZXIobmV3TGF5ZXIsIHN0YXRlLnNjaGVtYSk7XG4gIGlmICghc2VyaWFsaXplZE5ld0xheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmICghaXNFcXVhbChzZXJpYWxpemVkT2xkTGF5ZXIsIHNlcmlhbGl6ZWROZXdMYXllcikpIHtcbiAgICBjb25zdCBjaGFuZ2VkID0gcGlja0NoYW5nZWRQcm9wcyhzZXJpYWxpemVkT2xkTGF5ZXIuY29uZmlnLCBzZXJpYWxpemVkTmV3TGF5ZXIuY29uZmlnKTtcblxuICAgIGlmICgndmlzQ29uZmlnJyBpbiBjaGFuZ2VkKSB7XG4gICAgICBpZiAoY2hhbmdlZC52aXNDb25maWcpIHtcbiAgICAgICAgbmV4dFN0YXRlID0gbGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyKFxuICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICBsYXllclZpc0NvbmZpZ0NoYW5nZShvbGRMYXllciwgY2hhbmdlZC52aXNDb25maWcpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBkZWxldGUgY2hhbmdlZC52aXNDb25maWc7XG4gICAgfVxuXG4gICAgT2JqZWN0LmtleXMob2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goY2hhbm5lbE5hbWUgPT4ge1xuICAgICAgY29uc3QgY2hhbm5lbCA9IG9sZExheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxOYW1lXTtcbiAgICAgIGNvbnN0IGNoYW5uZWxQcm9wTmFtZXMgPSBWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTLm1hcChwcm9wID0+IGNoYW5uZWxbcHJvcF0pO1xuICAgICAgaWYgKGNoYW5uZWxQcm9wTmFtZXMuc29tZShwcm9wID0+IHByb3AgaW4gY2hhbmdlZCkpIHtcbiAgICAgICAgbmV4dFN0YXRlID0gbGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlcihcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlKFxuICAgICAgICAgICAgb2xkTGF5ZXIsXG4gICAgICAgICAgICBwaWNrKG5ld0xheWVyLmNvbmZpZywgY2hhbm5lbFByb3BOYW1lcyksXG4gICAgICAgICAgICBjaGFubmVsTmFtZVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIGNoYW5uZWxQcm9wTmFtZXMpIHtcbiAgICAgICAgICBkZWxldGUgY2hhbmdlZFtwcm9wXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKE9iamVjdC5rZXlzKGNoYW5nZWQpLmxlbmd0aCA+IDApIHtcbiAgICAgIG5leHRTdGF0ZSA9IGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICBsYXllckNvbmZpZ0NoYW5nZShvbGRMYXllciwgcGljayhuZXdMYXllci5jb25maWcsIE9iamVjdC5rZXlzKGNoYW5nZWQpKSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlbGF5ZXJWaXNpYmlsdHkoc3RhdGU6IFZpc1N0YXRlLCBuZXdMYXllcjogTGF5ZXIsIGlzVmlzaWJsZT86IGJvb2xlYW4pOiBWaXNTdGF0ZSB7XG4gIGxldCBuZXdTdGF0ZSA9IHVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2Uoc3RhdGUsIG5ld0xheWVyKTtcbiAgY29uc3QgZmlsdGVySW5kZXggPSBmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUoc3RhdGUpO1xuICBpZiAoaXNMYXllckFuaW1hdGFibGUobmV3TGF5ZXIpICYmIGZpbHRlckluZGV4ICE9PSAtMSkge1xuICAgIC8vIGlmIGxheWVyIGlzIGdvaW5nIHRvIGJlIHZpc2libGUgd2Ugc3luYyB3aXRoIGZpbHRlciBvdGhlcndpc2Ugd2UgbmVlZCB0byBjaGVjayB3aGV0aGVyIG90aGVyIGFuaW1hdGFibGUgbGF5ZXJzIGV4aXN0cyBhbmQgYXJlIHZpc2libGVcbiAgICBuZXdTdGF0ZSA9IHN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgZW5hYmxlOiBpc1Zpc2libGUgPyBpc1Zpc2libGUgOiBnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyhzdGF0ZS5sYXllcnMpLmxlbmd0aCA+IDBcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGJhc2UgY29uZmlnOiBkYXRhSWQsIGxhYmVsLCBjb2x1bW4sIGlzVmlzaWJsZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGZ1bmN0aW9uIGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgcHJvcHMgPSBPYmplY3Qua2V5cyhhY3Rpb24ubmV3Q29uZmlnKTtcbiAgaWYgKFxuICAgIHR5cGVvZiBhY3Rpb24ubmV3Q29uZmlnLmRhdGFJZCA9PT0gJ3N0cmluZycgJiZcbiAgICBhY3Rpb24ubmV3Q29uZmlnLmRhdGFJZCAhPT0gb2xkTGF5ZXIuY29uZmlnLmRhdGFJZFxuICApIHtcbiAgICBjb25zdCB7ZGF0YUlkLCAuLi5yZXN0Q29uZmlnfSA9IGFjdGlvbi5uZXdDb25maWc7XG4gICAgY29uc3Qgc3RhdGVXaXRoRGF0YUlkID0gbGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgICBvbGRMYXllcixcbiAgICAgIG5ld0NvbmZpZzoge2RhdGFJZH1cbiAgICB9KTtcbiAgICBjb25zdCBuZXh0TGF5ZXIgPSBzdGF0ZVdpdGhEYXRhSWQubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gICAgcmV0dXJuIG5leHRMYXllciAmJiBPYmplY3Qua2V5cyhyZXN0Q29uZmlnKS5sZW5ndGhcbiAgICAgID8gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlV2l0aERhdGFJZCwge29sZExheWVyOiBuZXh0TGF5ZXIsIG5ld0NvbmZpZzogcmVzdENvbmZpZ30pXG4gICAgICA6IHN0YXRlV2l0aERhdGFJZDtcbiAgfVxuXG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKGFjdGlvbi5uZXdDb25maWcpO1xuXG4gIGxldCBsYXllckRhdGE7XG5cbiAgaWYgKG5ld0xheWVyLnNob3VsZENhbGN1bGF0ZUxheWVyRGF0YShwcm9wcykpIHtcbiAgICBjb25zdCBvbGRMYXllckRhdGEgPSBzdGF0ZS5sYXllckRhdGFbaWR4XTtcblxuICAgIGNvbnN0IHVwZGF0ZUxheWVyRGF0YVJlc3VsdCA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIG9sZExheWVyRGF0YSk7XG4gICAgbmV3TGF5ZXIgPSB1cGRhdGVMYXllckRhdGFSZXN1bHQubGF5ZXI7XG4gICAgbGF5ZXJEYXRhID0gdXBkYXRlTGF5ZXJEYXRhUmVzdWx0LmxheWVyRGF0YTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBpZiAoJ2lzVmlzaWJsZScgaW4gYWN0aW9uLm5ld0NvbmZpZykge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlbGF5ZXJWaXNpYmlsdHkobmV3U3RhdGUsIG5ld0xheWVyLCBhY3Rpb24ubmV3Q29uZmlnLmlzVmlzaWJsZSk7XG4gIH1cblxuICBpZiAoJ2NvbHVtbnMnIGluIGFjdGlvbi5uZXdDb25maWcgJiYgbmV3TGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgLy8gVE9ETzogU2hhbiwgbWFrZSB0aGUgYW5pbWF0aW9uIGNvbmZpZyBmdW5jdGlvbiBtb3JlIHJvYnVzdFxuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtcbiAgICBsYXllcjogbmV3TGF5ZXIsXG4gICAgbGF5ZXJEYXRhLFxuICAgIGlkeFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxheWVyQW5pbWF0aW9uQ2hhbmdlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBhY3Rpb24pOiBTIHtcbiAgY29uc3Qge29sZExheWVyLCBwcm9wLCB2YWx1ZX0gPSBhY3Rpb247XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgYW5pbWF0aW9uOiB7XG4gICAgICAuLi5vbGRMYXllci5jb25maWcuYW5pbWF0aW9uLFxuICAgICAgW3Byb3BdOiB2YWx1ZVxuICAgIH1cbiAgfSk7XG5cbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgc3RhdGUubGF5ZXJEYXRhW2lkeF0pO1xuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXJJZCwgaXNWaXNpYmxlLCBzcGxpdE1hcElkXG4gKiBoYW5kbGVzIHR3byBjYXNlczpcbiAqIDEpIHRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiBsb2NhbCBTcGxpdE1hcCBsYXllciAodmlzU3RhdGUuc3BsaXRNYXAubGF5ZXJzKVxuICogMikgdG9nZ2xlIHRoZSB2aXNpYmlsaXR5IG9mIGdsb2JhbCBsYXllciAodmlzU3RhdGUubGF5ZXJzKVxuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2xheWVySWQsIGlzVmlzaWJsZSwgc3BsaXRNYXBJZH0gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQoZCA9PiBkLmlkID09PSBsYXllcklkKTtcblxuICBpZiAoIWxheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG5cbiAgaWYgKHNwbGl0TWFwSWQpIHtcbiAgICAvLyBbY2FzZSAxXTogdG9nZ2xlIGxvY2FsIGxheWVyIHZpc2liaWxpdHkgZm9yIGVhY2ggU3BsaXRNYXBcbiAgICBjb25zdCBtYXBJbmRleCA9IG5ld1N0YXRlLnNwbGl0TWFwcy5maW5kSW5kZXgoc20gPT4gc20uaWQgPT09IHNwbGl0TWFwSWQpO1xuICAgIGlmIChpc1Zpc2libGUpIHtcbiAgICAgIC8vIDEpIGlmIHRoZSBsYXllciBpcyBpbnZpc2libGUgZ2xvYmFsbHlcbiAgICAgIC8vIC0+IHNldCBnbG9iYWwgdmlzaWJpbGl0eSB0byB0cnVlXG4gICAgICBuZXdTdGF0ZSA9IGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihuZXdTdGF0ZSwgbGF5ZXJDb25maWdDaGFuZ2UobGF5ZXIsIHtpc1Zpc2libGU6IHRydWV9KSk7XG5cbiAgICAgIC8vIC0+IHNldCBsb2NhbCB2aXNpYmlsaXR5IHRvIHRydWUgYW5kIHRoZSBsb2NhbCB2aXNpYmlsaXRpZXMgb2YgYWxsIG90aGVyIFNwbGl0TWFwcyB0byBmYWxzZVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIHNwbGl0TWFwczogbmV3U3RhdGUuc3BsaXRNYXBzLm1hcChzbSA9PlxuICAgICAgICAgIHNtLmlkICE9PSBzcGxpdE1hcElkXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAuLi5zbSxcbiAgICAgICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgICAgIC4uLnNtLmxheWVycyxcbiAgICAgICAgICAgICAgICAgIFtsYXllcklkXTogZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIC4uLnNtLFxuICAgICAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAgICAgLi4uc20ubGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgW2xheWVySWRdOiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH07XG4gICAgfVxuICAgIC8vIDIpIGVsc2Ugd2hlbiB0aGUgbGF5ZXIgaXMgdmlzaWJsZSBnbG9iYWxseVxuICAgIHJldHVybiB0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIobmV3U3RhdGUsIHRvZ2dsZUxheWVyRm9yTWFwKG1hcEluZGV4LCBsYXllcklkKSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gW2Nhc2UgMl06IHRvZ2dsZSBnbG9iYWwgbGF5ZXIgdmlzaWJpbGl0eVxuICAgIGNvbnN0IG5ld0xheWVyID0gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2lzVmlzaWJsZX0pO1xuICAgIGNvbnN0IGlkeCA9IG5ld1N0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBsYXllcklkKTtcblxuICAgIG5ld1N0YXRlID0gdXBkYXRlbGF5ZXJWaXNpYmlsdHkobmV3U3RhdGUsIG5ld0xheWVyLCBpc1Zpc2libGUpO1xuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtcbiAgICAgIGxheWVyOiBuZXdMYXllcixcbiAgICAgIGlkeFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBzdGF0ZVxuICogQHJldHVybnMgaW5kZXggb2YgdGhlIGZpbHRlciBzeW5jZWQgdG8gdGltZWxpbmUgb3IgLTFcbiAqL1xuZnVuY3Rpb24gZmlsdGVyU3luY2VkV2l0aFRpbWVsaW5lKHN0YXRlOiBWaXNTdGF0ZSk6IG51bWJlciB7XG4gIHJldHVybiBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IChmIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgaXNWYWxpZCBmbGFnIG9mIGEgbGF5ZXIuXG4gKiBVcGRhdGVzIGlzVmlzaWJsZSBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgaXNWYWxpZC5cbiAqIFRyaWdnZXJzIHVwZGF0ZSBvZiBkYXRhIGZvciB0aGUgbGF5ZXIgaW4gb3JkZXIgdG8gZ2V0IGVycm9ycyBhZ2FpbiBkdXJpbmcgbmV4dCB1cGRhdGUgaXRlcmF0aW9uLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJTZXRJc1ZhbGlkVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclNldElzVmFsaWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgaXNWYWxpZH0gPSBhY3Rpb247XG5cbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgbGF5ZXJUb1VwZGF0ZSA9IHN0YXRlLmxheWVyc1tpZHhdO1xuICBpZiAobGF5ZXJUb1VwZGF0ZSkge1xuICAgIGxldCBuZXdMYXllcjtcbiAgICBsZXQgbmV3RGF0YSA9IG51bGw7XG5cbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgLy8gVHJpZ2dlciBkYXRhIHVwZGF0ZSBpbiBvcmRlciB0byBzaG93IGVycm9ycyBhZ2FpbiBpZiBwcmVzZW50LlxuICAgICAgY29uc3Qge2xheWVyLCBsYXllckRhdGF9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKGxheWVyVG9VcGRhdGUsIHN0YXRlLCB1bmRlZmluZWQpO1xuICAgICAgbmV3TGF5ZXIgPSBsYXllcjtcbiAgICAgIG5ld0RhdGEgPSBsYXllckRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVyID0gbGF5ZXJUb1VwZGF0ZS51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgIGlzVmlzaWJsZTogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgbmV3TGF5ZXIuaXNWYWxpZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtpZHgsIGxheWVyOiBuZXdMYXllciwgbGF5ZXJEYXRhOiBuZXdEYXRhfSk7XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbmZ1bmN0aW9uIGFkZE9yUmVtb3ZlVGV4dExhYmVscyhuZXdGaWVsZHMsIHRleHRMYWJlbCwgZGVmYXVsdFRleHRMYWJlbCA9IERFRkFVTFRfVEVYVF9MQUJFTCkge1xuICBsZXQgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLnNsaWNlKCk7XG5cbiAgY29uc3QgY3VycmVudEZpZWxkcyA9IHRleHRMYWJlbC5tYXAodGwgPT4gdGwuZmllbGQgJiYgdGwuZmllbGQubmFtZSkuZmlsdGVyKGQgPT4gZCk7XG5cbiAgY29uc3QgYWRkRmllbGRzID0gbmV3RmllbGRzLmZpbHRlcihmID0+ICFjdXJyZW50RmllbGRzLmluY2x1ZGVzKGYubmFtZSkpO1xuICBjb25zdCBkZWxldGVGaWVsZHMgPSBjdXJyZW50RmllbGRzLmZpbHRlcihmID0+ICFuZXdGaWVsZHMuZmluZChmZCA9PiBmZC5uYW1lID09PSBmKSk7XG5cbiAgLy8gZGVsZXRlXG4gIG5ld1RleHRMYWJlbCA9IG5ld1RleHRMYWJlbC5maWx0ZXIodGwgPT4gdGwuZmllbGQgJiYgIWRlbGV0ZUZpZWxkcy5pbmNsdWRlcyh0bC5maWVsZC5uYW1lKSk7XG4gIG5ld1RleHRMYWJlbCA9ICFuZXdUZXh0TGFiZWwubGVuZ3RoID8gW2RlZmF1bHRUZXh0TGFiZWxdIDogbmV3VGV4dExhYmVsO1xuXG4gIC8vIGFkZFxuICBuZXdUZXh0TGFiZWwgPSBbXG4gICAgLi4ubmV3VGV4dExhYmVsLmZpbHRlcih0bCA9PiB0bC5maWVsZCksXG4gICAgLi4uYWRkRmllbGRzLm1hcChhZiA9PiAoe1xuICAgICAgLi4uZGVmYXVsdFRleHRMYWJlbCxcbiAgICAgIGZpZWxkOiBhZlxuICAgIH0pKVxuICBdO1xuXG4gIHJldHVybiBuZXdUZXh0TGFiZWw7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVRleHRMYWJlbFByb3BBbmRWYWx1ZShpZHgsIHByb3AsIHZhbHVlLCB0ZXh0TGFiZWwpIHtcbiAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGV4dExhYmVsW2lkeF0sIHByb3ApKSB7XG4gICAgcmV0dXJuIHRleHRMYWJlbDtcbiAgfVxuXG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcblxuICBpZiAocHJvcCA9PT0gJ2ZpZWxkJyAmJiB2YWx1ZSA9PT0gbnVsbCAmJiB0ZXh0TGFiZWwubGVuZ3RoID4gMSkge1xuICAgIC8vIHJlbW92ZSBsYWJlbCB3aGVuIGZpZWxkIHZhbHVlIGlzIHNldCB0byBudWxsXG4gICAgbmV3VGV4dExhYmVsLnNwbGljZShpZHgsIDEpO1xuICB9IGVsc2UgaWYgKHByb3ApIHtcbiAgICBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwubWFwKCh0bCwgaSkgPT4gKGkgPT09IGlkeCA/IHsuLi50bCwgW3Byb3BdOiB2YWx1ZX0gOiB0bCkpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1RleHRMYWJlbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYmFzZSBjb25maWc6IGRhdGFJZCwgbGFiZWwsIGNvbHVtbiwgaXNWaXNpYmxlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgaWR4LCBwcm9wLCB2YWx1ZX0gPSBhY3Rpb247XG4gIGNvbnN0IHt0ZXh0TGFiZWx9ID0gb2xkTGF5ZXIuY29uZmlnO1xuXG4gIC8vIHdoZW4gYWRkaW5nIGEgbmV3IGVtcHR5IHRleHQgbGFiZWwsXG4gIC8vIHJlbHkgb24gdGhlIGxheWVyJ3MgZGVmYXVsdCBjb25maWcsIG9yIHVzZSB0aGUgY29uc3RhbnQgREVGQVVMVF9URVhUX0xBQkVMXG4gIGNvbnN0IGRlZmF1bHRUZXh0TGFiZWwgPVxuICAgIG9sZExheWVyLmdldERlZmF1bHRMYXllckNvbmZpZyh7ZGF0YUlkOiAnJ30pPy50ZXh0TGFiZWw/LlswXSA/PyBERUZBVUxUX1RFWFRfTEFCRUw7XG5cbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuICBpZiAoIXRleHRMYWJlbFtpZHhdICYmIGlkeCA9PT0gdGV4dExhYmVsLmxlbmd0aCkge1xuICAgIC8vIGlmIGlkeCBpcyBzZXQgdG8gbGVuZ3RoLCBhZGQgZW1wdHkgdGV4dCBsYWJlbFxuICAgIG5ld1RleHRMYWJlbCA9IFsuLi50ZXh0TGFiZWwsIGRlZmF1bHRUZXh0TGFiZWxdO1xuICB9XG5cbiAgaWYgKGlkeCA9PT0gJ2FsbCcgJiYgcHJvcCA9PT0gJ2ZpZWxkcycpIHtcbiAgICBuZXdUZXh0TGFiZWwgPSBhZGRPclJlbW92ZVRleHRMYWJlbHModmFsdWUsIHRleHRMYWJlbCwgZGVmYXVsdFRleHRMYWJlbCk7XG4gIH0gZWxzZSB7XG4gICAgbmV3VGV4dExhYmVsID0gdXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlKGlkeCwgcHJvcCwgdmFsdWUsIG5ld1RleHRMYWJlbCk7XG4gIH1cbiAgLy8gdXBkYXRlIHRleHQgbGFiZWwgcHJvcCBhbmQgdmFsdWVcbiAgcmV0dXJuIGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgIG9sZExheWVyLFxuICAgIG5ld0NvbmZpZzoge3RleHRMYWJlbDogbmV3VGV4dExhYmVsfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoZGF0YXNldCwgbGF5ZXJDbGFzc2VzLCBsYXllciwgc2NoZW1hKSB7XG4gIGNvbnN0IGxvYWRlZExheWVyID0gc2VyaWFsaXplTGF5ZXIobGF5ZXIsIHNjaGVtYSk7XG4gIHJldHVybiBsb2FkZWRMYXllclxuICAgID8gdmFsaWRhdGVMYXllcldpdGhEYXRhKGRhdGFzZXQsIGxvYWRlZExheWVyLCBsYXllckNsYXNzZXMsIHtcbiAgICAgICAgYWxsb3dFbXB0eUNvbHVtbjogdHJ1ZVxuICAgICAgfSlcbiAgICA6IG51bGw7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGNvbmZpZyBkYXRhSWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IHtcbiAgICBvbGRMYXllcjogTGF5ZXI7XG4gICAgbmV3Q29uZmlnOiB7XG4gICAgICBkYXRhSWQ6IHN0cmluZztcbiAgICB9O1xuICB9XG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3Q29uZmlnfSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFJZH0gPSBuZXdDb25maWc7XG5cbiAgaWYgKCFvbGRMYXllciB8fCAhc3RhdGUuZGF0YXNldHNbZGF0YUlkXSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuXG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtkYXRhSWR9KTtcblxuICAvLyB0aGlzIG1heSBoYXBwZW4gd2hlbiBhIGxheWVyIGlzIG5ldyAodHlwZTogbnVsbCBhbmQgbm8gY29sdW1ucykgYnV0IGl0J3Mgbm90IHJlYWR5IHRvIGJlIHNhdmVkXG4gIGlmIChuZXdMYXllci5pc1ZhbGlkVG9TYXZlKCkpIHtcbiAgICBjb25zdCB2YWxpZGF0ZWQgPSB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShcbiAgICAgIHN0YXRlLmRhdGFzZXRzW2RhdGFJZF0sXG4gICAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgICBuZXdMYXllcixcbiAgICAgIHN0YXRlLnNjaGVtYVxuICAgICk7XG4gICAgLy8gaWYgY2FudCB2YWxpZGF0ZSBpdCB3aXRoIGRhdGEgY3JlYXRlIGEgbmV3IG9uZVxuICAgIGlmICghdmFsaWRhdGVkKSB7XG4gICAgICBjb25zdCBvbGRMYXllclR5cGUgPSBvbGRMYXllci50eXBlO1xuICAgICAgaWYgKG9sZExheWVyVHlwZSkge1xuICAgICAgICBuZXdMYXllciA9IG5ldyBzdGF0ZS5sYXllckNsYXNzZXNbb2xkTGF5ZXJUeXBlXSh7ZGF0YUlkLCBpZDogb2xkTGF5ZXIuaWR9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXIgPSB2YWxpZGF0ZWQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIExheWVyIGlzIG5vdCB2YWxpZCB0byBzYXZlIChlLmcuIG1pc3NpbmcgY29sdW1ucyksIGJ1dCB3ZSBzdGlsbCBuZWVkIHRvXG4gICAgLy8gcmVtYXAgdmlzdWFsIGNoYW5uZWwgZmllbGRzIHRvIHRoZSBuZXcgZGF0YXNldCB0byBhdm9pZCBzdGFsZSBmaWVsZCByZWZlcmVuY2VzXG4gICAgLy8gdGhhdCBwb2ludCB0byByb3dzIGJleW9uZCB0aGUgbmV3IGRhdGFzZXQncyBsZW5ndGhcbiAgICBjb25zdCBuZXdEYXRhc2V0RmllbGRzID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXS5maWVsZHM7XG4gICAgY29uc3QgcmVtYXBwZWRGaWVsZHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICBPYmplY3QudmFsdWVzKG5ld0xheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKCh7ZmllbGQ6IGZpZWxkS2V5fSkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudEZpZWxkID0gbmV3TGF5ZXIuY29uZmlnW2ZpZWxkS2V5XTtcbiAgICAgIGlmIChjdXJyZW50RmllbGQpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlZCA9IG5ld0RhdGFzZXRGaWVsZHMuZmluZChmID0+IGYubmFtZSA9PT0gY3VycmVudEZpZWxkLm5hbWUpO1xuICAgICAgICByZW1hcHBlZEZpZWxkc1tmaWVsZEtleV0gPSBtYXRjaGVkIHx8IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKE9iamVjdC5rZXlzKHJlbWFwcGVkRmllbGRzKS5sZW5ndGgpIHtcbiAgICAgIG5ld0xheWVyID0gbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcocmVtYXBwZWRGaWVsZHMpO1xuICAgIH1cbiAgICAvLyBWYWxpZGF0ZSBmaWVsZCB0eXBlIGNvbXBhdGliaWxpdHkg4oCUIGNsZWFycyBmaWVsZHMgd2hvc2UgdHlwZSBpcyBpbmNvbXBhdGlibGVcbiAgICAvLyB3aXRoIHRoZSBjaGFubmVsJ3Mgc3VwcG9ydGVkIGZpZWxkIHR5cGVzIChlLmcuIHN0cmluZyBmaWVsZCBmb3IgYSBudW1lcmljIHNjYWxlKVxuICAgIE9iamVjdC52YWx1ZXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtrZXl9KSA9PiB7XG4gICAgICBuZXdMYXllci52YWxpZGF0ZVZpc3VhbENoYW5uZWwoa2V5KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5ld0xheWVyID0gbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgIGlzVmlzaWJsZTogb2xkTGF5ZXIuY29uZmlnLmlzVmlzaWJsZSxcbiAgICBpc0NvbmZpZ0FjdGl2ZTogdHJ1ZVxuICB9KTtcblxuICBuZXdMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cyk7XG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHVuZGVmaW5lZCk7XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0SW5pdGlhbExheWVyQ29uZmlnKGxheWVyLCBkYXRhc2V0cywgbGF5ZXJDbGFzc2VzKTogTGF5ZXIge1xuICBsZXQgbmV3TGF5ZXIgPSBsYXllcjtcbiAgaWYgKCFPYmplY3Qua2V5cyhkYXRhc2V0cykubGVuZ3RoKSB7XG4gICAgLy8gbm8gZGF0YSBpcyBsb2FkZWRcbiAgICByZXR1cm4gbGF5ZXI7XG4gIH1cbiAgaWYgKCFsYXllci5jb25maWcuZGF0YUlkKSB7XG4gICAgLy8gc2V0IGxheWVyIGRhdGFJZFxuICAgIG5ld0xheWVyID0gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2RhdGFJZDogT2JqZWN0LmtleXMoZGF0YXNldHMpWzBdfSk7XG4gIH1cbiAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzW25ld0xheWVyLmNvbmZpZy5kYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gbGF5ZXI7XG4gIH1cblxuICAvLyBmaW5kIGRlZmF1dCBsYXllciBwcm9wc1xuICBjb25zdCByZXN1bHQgPVxuICAgIHR5cGVvZiBsYXllckNsYXNzZXNbbmV3TGF5ZXIudHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzID09PSAnZnVuY3Rpb24nXG4gICAgICA/IGxheWVyQ2xhc3Nlc1tuZXdMYXllci50eXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMoZGF0YXNldCwgW10pXG4gICAgICA6IHtwcm9wczogW119O1xuXG4gIC8vIGFuIGFycmF5IG9mIHBvc3NpYmxlIHByb3BzLCB1c2UgMXN0IG9uZVxuICBjb25zdCBwcm9wcyA9IEFycmF5LmlzQXJyYXkocmVzdWx0KSA/IHJlc3VsdCA6IHJlc3VsdC5wcm9wcyB8fCBbXTtcblxuICBpZiAocHJvcHMubGVuZ3RoKSB7XG4gICAgbmV3TGF5ZXIgPSBuZXcgbGF5ZXJDbGFzc2VzW2xheWVyLnR5cGVdKHtcbiAgICAgIC4uLnByb3BzWzBdLFxuICAgICAgbGFiZWw6IG5ld0xheWVyLmNvbmZpZy5sYWJlbCxcbiAgICAgIGRhdGFJZDogbmV3TGF5ZXIuY29uZmlnLmRhdGFJZCxcbiAgICAgIGlzQ29uZmlnQWN0aXZlOiBuZXdMYXllci5jb25maWcuaXNDb25maWdBY3RpdmUsXG4gICAgICBpc1Zpc2libGU6IG5ld0xheWVyLmNvbmZpZy5pc1Zpc2libGVcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdHlwZW9mIG5ld0xheWVyLnNldEluaXRpYWxMYXllckNvbmZpZyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gbmV3TGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnKGRhdGFzZXQpXG4gICAgOiBuZXdMYXllcjtcbn1cbi8qKlxuICogVXBkYXRlIGxheWVyIHR5cGUuIFByZXZpZXdzIGxheWVyIGNvbmZpZyB3aWxsIGJlIGNvcGllZCBpZiBhcHBsaWNhYmxlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUeXBlQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIG5ld1R5cGV9ID0gYWN0aW9uO1xuICBpZiAoIW9sZExheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG9sZElkID0gb2xkTGF5ZXIuaWQ7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRJZCk7XG5cbiAgaWYgKCFzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0pIHtcbiAgICBDb25zb2xlLmVycm9yKGAke25ld1R5cGV9IGlzIG5vdCBhIHZhbGlkIGxheWVyIHR5cGVgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0xheWVyID0gbmV3IHN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXSh7XG4gICAgLy8ga2VlcCBvbGQgbGF5ZXIgbGFibGUgYW5kIGlzQ29uZmlnQWN0aXZlXG4gICAgbGFiZWw6IG9sZExheWVyLmNvbmZpZy5sYWJlbCxcbiAgICBpc0NvbmZpZ0FjdGl2ZTogb2xkTGF5ZXIuY29uZmlnLmlzQ29uZmlnQWN0aXZlLFxuICAgIGRhdGFJZDogb2xkTGF5ZXIuY29uZmlnLmRhdGFJZFxuICB9KTtcblxuICBpZiAoIW9sZExheWVyLnR5cGUpIHtcbiAgICAvLyBpZiBzZXR0aW5nIGxheWVyIHR5cGUgb24gYW4gZW1wdHkgbGF5ZXJcbiAgICBuZXdMYXllciA9IHNldEluaXRpYWxMYXllckNvbmZpZyhuZXdMYXllciwgc3RhdGUuZGF0YXNldHMsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gZ2V0IGEgbWludCBsYXllciwgd2l0aCBuZXcgaWQgYW5kIHR5cGVcbiAgICAvLyBiZWNhdXNlIGRlY2suZ2wgdXNlcyBpZCB0byBtYXRjaCBiZXR3ZWVuIG5ldyBhbmQgb2xkIGxheWVyLlxuICAgIC8vIElmIHR5cGUgaGFzIGNoYW5nZWQgYnV0IGlkIGlzIHRoZSBzYW1lLCBpdCB3aWxsIGJyZWFrXG5cbiAgICBjb25zdCBkZWZhdWx0TGF5ZXJQcm9wcyA9XG4gICAgICB0eXBlb2Ygc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IHN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMoc3RhdGUuZGF0YXNldHNbbmV3TGF5ZXIuY29uZmlnLmRhdGFJZF0pXG4gICAgICAgIDogbnVsbDtcblxuICAgIG5ld0xheWVyLmFzc2lnbkNvbmZpZ1RvTGF5ZXIoXG4gICAgICBvbGRMYXllci5jb25maWcsXG4gICAgICBvbGRMYXllci52aXNDb25maWdTZXR0aW5ncyxcbiAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgZGVmYXVsdExheWVyUHJvcHNcbiAgICApO1xuICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgfVxuXG4gIGNvbnN0IHtjbGlja2VkLCBob3ZlckluZm99ID0gc3RhdGU7XG5cbiAgbGV0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNsaWNrZWQ6IG9sZExheWVyLmlzTGF5ZXJIb3ZlcmVkKGNsaWNrZWQpID8gdW5kZWZpbmVkIDogY2xpY2tlZCxcbiAgICBob3ZlckluZm86IG9sZExheWVyLmlzTGF5ZXJIb3ZlcmVkKGhvdmVySW5mbykgPyB1bmRlZmluZWQgOiBob3ZlckluZm9cbiAgfTtcblxuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIG5ld1N0YXRlKTtcbiAgbmV3U3RhdGUgPSB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcblxuICBpZiAobGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkIHx8IG9sZExheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBzcGxpdE1hcCBsYXllciBpZFxuICBpZiAoc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IG5ld1N0YXRlLnNwbGl0TWFwcy5tYXAoc2V0dGluZ3MgPT4ge1xuICAgICAgICBjb25zdCB7W29sZElkXTogb2xkTGF5ZXJNYXAsIC4uLm90aGVyTGF5ZXJzfSA9IHNldHRpbmdzLmxheWVycztcbiAgICAgICAgcmV0dXJuIG9sZElkIGluIHNldHRpbmdzLmxheWVyc1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAuLi5zZXR0aW5ncyxcbiAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgLi4ub3RoZXJMYXllcnMsXG4gICAgICAgICAgICAgICAgW2xheWVyLmlkXTogb2xkTGF5ZXJNYXBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogc2V0dGluZ3M7XG4gICAgICB9KVxuICAgIH07XG4gIH1cblxuICAvLyB1cGRhdGUgbGF5ZXJPcmRlciB3aXRoIG5ldyBpZFxuICBuZXdTdGF0ZSA9IHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllck9yZGVyOiByZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBvbGRMYXllci5pZCwgbmV3TGF5ZXIuaWQpXG4gIH07XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciB2aXN1YWwgY2hhbm5lbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3Q29uZmlnLCBuZXdWaXNDb25maWcsIGNoYW5uZWx9ID0gYWN0aW9uO1xuICBpZiAoIW9sZExheWVyLmNvbmZpZy5kYXRhSWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbb2xkTGF5ZXIuY29uZmlnLmRhdGFJZF07XG5cbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcobmV3Q29uZmlnKTtcbiAgaWYgKG5ld1Zpc0NvbmZpZykgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllclZpc0NvbmZpZyhuZXdWaXNDb25maWcpO1xuXG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbChkYXRhc2V0LCBjaGFubmVsKTtcblxuICAvLyBjYWxsaW5nIHVwZGF0ZSBhbmltYXRpb24gZG9tYWluIGZpcnN0IHRvIG1lcmdlIGFsbCBsYXllciBhbmltYXRpb24gZG9tYWluXG4gIGxldCB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4oc3RhdGUpO1xuXG4gIGNvbnN0IHZpc3VhbENoYW5uZWwgPSBvbGRMYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgaWYgKHZpc3VhbENoYW5uZWw/LmNoYW5uZWxTY2FsZVR5cGUgPT09IENIQU5ORUxfU0NBTEVTLmNvbG9yICYmIG5ld0NvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXSkge1xuICAgIC8vIGlmIGNvbG9yIGZpZWxkIGNoYW5nZWQsIHNldCBjdXN0b21CcmVha3MgdG8gZmFsc2VcbiAgICBuZXdMYXllci51cGRhdGVMYXllckNvbG9yVUkodmlzdWFsQ2hhbm5lbC5yYW5nZSwge1xuICAgICAgY29sb3JSYW5nZUNvbmZpZzoge1xuICAgICAgICAuLi5uZXdMYXllci5jb25maWcuY29sb3JVSVt2aXN1YWxDaGFubmVsLnJhbmdlXS5jb2xvclJhbmdlQ29uZmlnLFxuICAgICAgICBjdXN0b21CcmVha3M6IGZhbHNlXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB1cGRhdGVkU3RhdGUgPSB7XG4gICAgICAuLi51cGRhdGVkU3RhdGUsXG4gICAgICBsYXllcnM6IHVwZGF0ZWRTdGF0ZS5sYXllcnMubWFwKGwgPT4gKGwuaWQgPT09IG9sZExheWVyLmlkID8gbmV3TGF5ZXIgOiBsKSlcbiAgICB9O1xuICB9XG5cbiAgY29uc3Qgb2xkTGF5ZXJEYXRhID0gdXBkYXRlZFN0YXRlLmxheWVyRGF0YVtpZHhdO1xuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHVwZGF0ZWRTdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcblxuICBpZiAoXG4gICAgdmlzdWFsQ2hhbm5lbD8uY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY29sb3IgJiZcbiAgICBuZXdDb25maWdbdmlzdWFsQ2hhbm5lbD8uc2NhbGVdID09PSBTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsICYmXG4gICAgIW5ld1Zpc0NvbmZpZ1xuICApIHtcbiAgICAvLyB3aGVuIHN3aXRjaGluZyB0byBjdXN0b21PcmRpbmFsIHNjYWxlLCBjcmVhdGUgYSBjdXN0b21QYWxldHRlIGluIGNvbG9yVUkgd2l0aCB1cGRhdGVkIGNvbG9yRG9tYWluXG4gICAgY29uc3QgY3VzdG9tUGFsZXR0ZSA9IGluaXRDdXN0b21QYWxldHRlQnlDdXN0b21TY2FsZSh7XG4gICAgICBzY2FsZTogU0NBTEVfVFlQRVMuY3VzdG9tT3JkaW5hbCxcbiAgICAgIGZpZWxkOiBsYXllci5jb25maWdbdmlzdWFsQ2hhbm5lbC5maWVsZF0sXG4gICAgICBvcmRpbmFsRG9tYWluOiBsYXllci5jb25maWdbbGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF0uZG9tYWluXSxcbiAgICAgIHJhbmdlOiBsYXllci5jb25maWcudmlzQ29uZmlnW3Zpc3VhbENoYW5uZWwucmFuZ2VdLFxuICAgICAgY29sb3JCcmVha3M6IG51bGxcbiAgICB9KTtcbiAgICAvLyB1cGRhdGUgY29sb3JSYW5nZSB3aXRoIG5ldyBjdXN0b21QYWxldHRlXG4gICAgbGF5ZXIudXBkYXRlTGF5ZXJDb2xvclVJKHZpc3VhbENoYW5uZWwucmFuZ2UsIHtcbiAgICAgIHNob3dDb2xvckNoYXJ0OiB0cnVlLFxuICAgICAgY29sb3JSYW5nZUNvbmZpZzoge1xuICAgICAgICAuLi5sYXllci5jb25maWcuY29sb3JVSVt2aXN1YWxDaGFubmVsLnJhbmdlXS5jb2xvclJhbmdlQ29uZmlnLFxuICAgICAgICBjdXN0b21CcmVha3M6IHRydWVcbiAgICAgIH0sXG4gICAgICBjdXN0b21QYWxldHRlXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YSh1cGRhdGVkU3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYHZpc0NvbmZpZ2BcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGNvbnN0IHByb3BzID0gT2JqZWN0LmtleXMoYWN0aW9uLm5ld1Zpc0NvbmZpZyk7XG5cbiAgY29uc3QgbmV3VmlzQ29uZmlnID0ge1xuICAgIC4uLm9sZExheWVyLmNvbmZpZy52aXNDb25maWcsXG4gICAgLi4uYWN0aW9uLm5ld1Zpc0NvbmZpZ1xuICB9O1xuXG4gIGNvbnN0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe3Zpc0NvbmZpZzogbmV3VmlzQ29uZmlnfSk7XG5cbiAgbGV0IG5leHRTdGF0ZSA9IHN0YXRlO1xuXG4gIC8vIEV4Y2x1c2l2ZSBiaXRtYXAgZWRpdGluZzogd2hlbiBlZGl0Qm91bmRzIGlzIHR1cm5lZCBvbiBmb3Igb25lIGJpdG1hcCBsYXllcixcbiAgLy8gdHVybiBpdCBvZmYgZm9yIGFsbCBvdGhlciBiaXRtYXAgbGF5ZXJzXG4gIGlmIChcbiAgICBuZXdMYXllci50eXBlID09PSAnYml0bWFwJyAmJlxuICAgIGFjdGlvbi5uZXdWaXNDb25maWcuZWRpdEJvdW5kcyA9PT0gdHJ1ZVxuICApIHtcbiAgICBuZXh0U3RhdGUgPSB7XG4gICAgICAuLi5uZXh0U3RhdGUsXG4gICAgICBsYXllcnM6IG5leHRTdGF0ZS5sYXllcnMubWFwKChsLCBpKSA9PiB7XG4gICAgICAgIGlmIChpICE9PSBpZHggJiYgbC50eXBlID09PSAnYml0bWFwJyAmJiBsLmNvbmZpZy52aXNDb25maWcuZWRpdEJvdW5kcykge1xuICAgICAgICAgIHJldHVybiBsLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAgIHZpc0NvbmZpZzogey4uLmwuY29uZmlnLnZpc0NvbmZpZywgZWRpdEJvdW5kczogZmFsc2V9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGw7XG4gICAgICB9KVxuICAgIH07XG4gIH1cblxuICBpZiAobmV3TGF5ZXIuc2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhKHByb3BzKSkge1xuICAgIGNvbnN0IG9sZExheWVyRGF0YSA9IG5leHRTdGF0ZS5sYXllckRhdGFbaWR4XTtcbiAgICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIG5leHRTdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcbiAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5leHRTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXh0U3RhdGUsIHtsYXllcjogbmV3TGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFJlc2V0IGFuaW1hdGlvbiBjb25maWcgY3VycmVudCB0aW1lIHRvIGEgc3BlY2lmaWVkIHZhbHVlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICpcbiAqL1xuZXhwb3J0IGNvbnN0IHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIgPSA8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHt2YWx1ZX06IFZpc1N0YXRlQWN0aW9ucy5TZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyQWN0aW9uXG4pOiBTID0+IHtcbiAgY29uc3QgY3VycmVudFRpbWUgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlWzBdIDogdmFsdWU7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIGN1cnJlbnRUaW1lXG4gICAgfVxuICB9O1xuICAvLyB1cGRhdGUgYW5pbWF0aW9uIGNvbmZpZyBmb3IgZWFjaCBsYXllclxuICByZXR1cm4gc3RhdGUubGF5ZXJzLnJlZHVjZSgoYWNjdSwgbCkgPT4ge1xuICAgIGlmIChsLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCAmJiBsLnR5cGUgIT09ICd0cmlwJykge1xuICAgICAgcmV0dXJuIGxheWVyQW5pbWF0aW9uQ2hhbmdlVXBkYXRlcihhY2N1LCB7b2xkTGF5ZXI6IGwsIHByb3A6ICdjdXJyZW50VGltZScsIGN1cnJlbnRUaW1lfSk7XG4gICAgfVxuICAgIHJldHVybiBhY2N1O1xuICB9LCBuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIHByb3BlcnR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoc3RhdGUsIGFjdGlvbik7XG59XG5cbi8qKlxuICogVXBkYXRlIGZpbHRlciBhbmltYXRpb24gd2luZG93XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAge2lkLCBhbmltYXRpb25XaW5kb3d9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlckFjdGlvblxuKTogUyB7XG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+IGYuaWQgPT09IGlkKTtcblxuICBpZiAoIWZpbHRlcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgYW5pbWF0aW9uV2luZG93XG4gIH07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKHN0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgY29uc3QgbmV3U3luY1RpbWVsaW5lTW9kZSA9IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpO1xuXG4gIHJldHVybiBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge2lkLCBtb2RlOiBuZXdTeW5jVGltZWxpbmVNb2RlfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtmaWx0ZXJJZCwgbmV3RmlsdGVyfSA9IGFjdGlvbjtcbiAgY29uc3Qgb2xkRmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuICBpZiAoIW9sZEZpbHRlcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIFNlcmlhbGl6ZSB0aGUgZmlsdGVycyB0byBvbmx5IGNvbXBhcmUgdGhlIHNhdmVkIHByb3BlcnRpZXNcbiAgY29uc3Qgc2VyaWFsaXplZE9sZEZpbHRlciA9IHNlcmlhbGl6ZUZpbHRlcihvbGRGaWx0ZXIsIHN0YXRlLnNjaGVtYSkgPz8ge2NvbmZpZzoge319O1xuICBjb25zdCBzZXJpYWxpemVkTmV3RmlsdGVyID0gc2VyaWFsaXplRmlsdGVyKG5ld0ZpbHRlciwgc3RhdGUuc2NoZW1hKTtcbiAgaWYgKCFzZXJpYWxpemVkTmV3RmlsdGVyIHx8IGlzRXF1YWwoc2VyaWFsaXplZE9sZEZpbHRlciwgc2VyaWFsaXplZE5ld0ZpbHRlcikpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBJZiB0aGVyZSBhcmUgYW55IGNoYW5nZXMgdG8gdGhlIGZpbHRlciwgYXBwbHkgdGhlbVxuICBjb25zdCBjaGFuZ2VkID0gcGlja0NoYW5nZWRQcm9wcyhzZXJpYWxpemVkT2xkRmlsdGVyLCBzZXJpYWxpemVkTmV3RmlsdGVyKTtcbiAgZGVsZXRlIGNoYW5nZWRbJ2lkJ107IC8vIGlkIHNob3VsZCBub3QgYmUgY2hhbmdlZFxuXG4gIGNvbnN0IGZpbHRlckluZGV4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmIChmaWx0ZXJJbmRleCA8IDApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoXG4gICAgc3RhdGUsXG4gICAgc2V0RmlsdGVyKGZpbHRlckluZGV4LCBPYmplY3Qua2V5cyhjaGFuZ2VkKSwgT2JqZWN0LnZhbHVlcyhjaGFuZ2VkKSlcbiAgKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIHByb3BlcnR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyVXBkYXRlckFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtpZHgsIHZhbHVlSW5kZXggPSAwfSA9IGFjdGlvbjtcbiAgY29uc3Qgb2xkRmlsdGVyID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuICBpZiAoIW9sZEZpbHRlcikge1xuICAgIENvbnNvbGUuZXJyb3IoYGZpbHRlcnMuJHtpZHh9IGlzIHVuZGVmaW5lZGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoXG4gICAgQXJyYXkuaXNBcnJheShhY3Rpb24ucHJvcCkgJiZcbiAgICAoIUFycmF5LmlzQXJyYXkoYWN0aW9uLnZhbHVlKSB8fCBhY3Rpb24ucHJvcC5sZW5ndGggIT09IGFjdGlvbi52YWx1ZS5sZW5ndGgpXG4gICkge1xuICAgIENvbnNvbGUuZXJyb3IoJ0V4cGVjdGluZyB2YWx1ZSB0byBiZSBhbiBhcnJheSBvZiB0aGUgc2FtZSBsZW5ndGgsIHNpbmNlIHByb3AgaXMgYW4gYXJyYXknKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gY29udmVydCBwcm9wIGFuZCB2YWx1ZSB0byBhcnJheVxuICBjb25zdCBwcm9wcyA9IHRvQXJyYXkoYWN0aW9uLnByb3ApO1xuICBjb25zdCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KGFjdGlvbi5wcm9wKSA/IHRvQXJyYXkoYWN0aW9uLnZhbHVlKSA6IFthY3Rpb24udmFsdWVdO1xuXG4gIGxldCBuZXdGaWx0ZXIgPSBvbGRGaWx0ZXI7XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuXG4gIGxldCBkYXRhc2V0SWRzVG9GaWx0ZXI6IHN0cmluZ1tdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBwcm9wID0gcHJvcHNbaV07XG4gICAgY29uc3QgdmFsdWUgPSB2YWx1ZXNbaV07XG4gICAgLy8gV2UgY3VycmVudGx5IGRvIG5vdCBzdXBwb3J0IHBhc3NpbmcgaW4gbmFtZSBhcyBhbiBhcnJheSBpbnRvIF91cGRhdGVGaWx0ZXJQcm9wLCBzbyB3ZSBjYWxsIGl0IG11bHRpcGxlIHRpbWVzIHdpdGggZWFjaCBuYW1lXG4gICAgLy8gU2VlIHRoZSBjb21tZW50IGluIHRoZXJlIGFzIHRvIHdoYXQgc2hvdWxkIGJlIGFkZHJlc3NlZFxuICAgIGxldCByZXM7XG4gICAgaWYgKHByb3AgPT09ICduYW1lJyAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICAgICAgcmVzID0gdmFsdWUucmVkdWNlKChhY2N1LCB2KSA9PiB7XG4gICAgICAgIHJldHVybiBfdXBkYXRlRmlsdGVyUHJvcChhY2N1LCBuZXdGaWx0ZXIsIHByb3AsIHYsIHZhbHVlSW5kZXgpO1xuICAgICAgfSwgbmV3U3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSBfdXBkYXRlRmlsdGVyUHJvcChuZXdTdGF0ZSwgbmV3RmlsdGVyLCBwcm9wLCB2YWx1ZSwgdmFsdWVJbmRleCk7XG4gICAgfVxuICAgIG5ld0ZpbHRlciA9IHJlcy5maWx0ZXI7XG4gICAgbmV3U3RhdGUgPSByZXMuc3RhdGU7XG4gICAgZGF0YXNldElkc1RvRmlsdGVyID0gZGF0YXNldElkc1RvRmlsdGVyLmNvbmNhdChyZXMuZGF0YXNldElkc1RvRmlsdGVyKTtcbiAgfVxuXG4gIGNvbnN0IGVubGFyZ2VkRmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi52aWV3ID09PSBGSUxURVJfVklFV19UWVBFUy5lbmxhcmdlZCk7XG5cbiAgaWYgKGVubGFyZ2VkRmlsdGVyICYmIGVubGFyZ2VkRmlsdGVyLmlkICE9PSBuZXdGaWx0ZXIuaWQpIHtcbiAgICAvLyB0aGVyZSBzaG91bGQgYmUgb25seSBvbmUgZW5sYXJnZWQgZmlsdGVyXG4gICAgbmV3RmlsdGVyLnZpZXcgPSBGSUxURVJfVklFV19UWVBFUy5zaWRlO1xuICB9XG5cbiAgLy8gc2F2ZSBuZXcgZmlsdGVycyB0byBuZXdTdGF0ZVxuICBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnLCBpZHhdLCBuZXdGaWx0ZXIsIG5ld1N0YXRlKTtcblxuICAvLyBmaWx0ZXIgZGF0YVxuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICB1bmlxKGRhdGFzZXRJZHNUb0ZpbHRlciksXG4gICAgbmV3U3RhdGUuZGF0YXNldHMsXG4gICAgbmV3U3RhdGUuZmlsdGVycyxcbiAgICBuZXdTdGF0ZS5sYXllcnNcbiAgKTtcblxuICBuZXdTdGF0ZSA9IHNldChbJ2RhdGFzZXRzJ10sIGZpbHRlcmVkRGF0YXNldHMsIG5ld1N0YXRlKTtcblxuICAvLyBuZWVkIHRvIHVwZGF0ZSBmaWx0ZXJQbG90IGFmdGVyIGZpbHRlciBEYXRhc2V0IGZvciBwbG90IHRvIHVwZGF0ZSBvbiBmaWx0ZXJlZCByZXN1bHRcbiAgY29uc3QgZmlsdGVyV2l0aFBMb3QgPSB1cGRhdGVGaWx0ZXJQbG90KG5ld1N0YXRlLmRhdGFzZXRzLCBuZXdTdGF0ZS5maWx0ZXJzW2lkeF0pO1xuXG4gIG5ld1N0YXRlID0gc2V0KFsnZmlsdGVycycsIGlkeF0sIGZpbHRlcldpdGhQTG90LCBuZXdTdGF0ZSk7XG5cbiAgLy8gZGF0YUlkIGlzIGFuIGFycmF5XG4gIC8vIHBhc3Mgb25seSB0aGUgZGF0YXNldCB3ZSBuZWVkIHRvIHVwZGF0ZVxuICBuZXdTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXdTdGF0ZSwgZGF0YXNldElkc1RvRmlsdGVyLCBuZXdGaWx0ZXIpO1xuXG4gIC8vIElmIHRpbWUgcmFuZ2UgZmlsdGVyIHZhbHVlIHdhcyB1cGRhdGVkLCBhZGp1c3QgYW5pbWF0aW9uIGNvbmZpZ1xuICBpZiAobmV3RmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UgJiYgcHJvcHMuaW5jbHVkZXMoJ3ZhbHVlJykpIHtcbiAgICBuZXdTdGF0ZSA9IGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIobmV3U3RhdGUsIGFjdGlvbi5pZHgpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5mdW5jdGlvbiBfdXBkYXRlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgdmFsdWUsIGRhdGFzZXRzKSB7XG4gIGxldCBuZXdGaWx0ZXIgPSBmaWx0ZXI7XG4gIGlmIChmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdKSB7XG4gICAgLy8gaWYgZGF0YUlkIGFscmVhZHkgZXhpc3RcbiAgICBuZXdGaWx0ZXIgPSBfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgZGF0YXNldHMpO1xuICB9XG4gIGlmICh2YWx1ZSkge1xuICAgIGNvbnN0IG5leHRWYWx1ZSA9IG5ld0ZpbHRlci5kYXRhSWQuc2xpY2UoKTtcbiAgICBuZXh0VmFsdWVbdmFsdWVJbmRleF0gPSB2YWx1ZTtcbiAgICBuZXdGaWx0ZXIgPSBzZXQoWydkYXRhSWQnXSwgbmV4dFZhbHVlLCBuZXdGaWx0ZXIpO1xuICB9XG4gIHJldHVybiBuZXdGaWx0ZXI7XG59XG5cbmZ1bmN0aW9uIF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cykge1xuICBjb25zdCBkYXRhSWQgPSBmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdO1xuXG4gIGlmIChmaWx0ZXIuZGF0YUlkLmxlbmd0aCA9PT0gMSAmJiB2YWx1ZUluZGV4ID09PSAwKSB7XG4gICAgLy8gaWYgcmVtb3ZlIHRoZSBvbmx5IGRhdGFJZCwgY3JlYXRlIGFuIGVtcHR5IGZpbHRlciBpbnN0ZWFkO1xuICAgIHJldHVybiBnZXREZWZhdWx0RmlsdGVyKHtpZDogZmlsdGVyLmlkfSk7XG4gIH1cblxuICBpZiAoZGF0YUlkKSB7XG4gICAgZmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGRhdGFJZCk7XG4gIH1cblxuICBmb3IgKGNvbnN0IHByb3Agb2YgWydkYXRhSWQnLCAnbmFtZScsICdmaWVsZElkeCcsICdncHVDaGFubmVsJ10pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXJbcHJvcF0pKSB7XG4gICAgICBjb25zdCBuZXh0VmFsID0gZmlsdGVyW3Byb3BdLnNsaWNlKCk7XG4gICAgICBuZXh0VmFsLnNwbGljZSh2YWx1ZUluZGV4LCAxKTtcbiAgICAgIGZpbHRlciA9IHNldChbcHJvcF0sIG5leHRWYWwsIGZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgLy8gbWVyZ2VGaWVsZERvbWFpbiBmb3IgdGhlIHJlbWFpbmluZyBmaWVsZHNcbiAgY29uc3QgZG9tYWluU3RlcHMgPSBtZXJnZUZpbHRlckRvbWFpbihmaWx0ZXIsIGRhdGFzZXRzKTtcblxuICBjb25zdCBuZXh0RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICAvLyB2YWx1ZTogbmV4dFZhbHVlLFxuICAgIC4uLihkb21haW5TdGVwcyA/IHtkb21haW46IGRvbWFpblN0ZXBzPy5kb21haW4sIHN0ZXA6IGRvbWFpblN0ZXBzPy5zdGVwfSA6IHt9KVxuICB9O1xuXG4gIGNvbnN0IG5leHRWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4obmV4dEZpbHRlci52YWx1ZSwgbmV4dEZpbHRlcik7XG4gIHJldHVybiB7XG4gICAgLi4ubmV4dEZpbHRlcixcbiAgICB2YWx1ZTogbmV4dFZhbHVlXG4gIH07XG59XG5cbi8qKiAqXG4gKiBVcGRhdGVzIGEgc2luZ2xlIHByb3BlcnR5IG9mIGEgZmlsdGVyXG4gKi9cbmZ1bmN0aW9uIF91cGRhdGVGaWx0ZXJQcm9wKHN0YXRlLCBmaWx0ZXIsIHByb3AsIHZhbHVlLCB2YWx1ZUluZGV4LCBkYXRhc2V0SWRzPykge1xuICBsZXQgZGF0YXNldElkc1RvRmlsdGVyOiBzdHJpbmdbXSA9IFtdO1xuICBzd2l0Y2ggKHByb3ApIHtcbiAgICAvLyBUT0RPOiBOZXh0IFBSIGZvciBVSSBpZiB3ZSB1cGRhdGUgZmlsdGVyRGF0YUlkLCB3ZSBuZWVkIHRvIGNvbnNpZGVyIHR3byBjYXNlczpcbiAgICAvLyAxLiBkYXRhSWQgaXMgZW1wdHk6IGNyZWF0ZSBhIGRlZmF1bHQgZmlsdGVyXG4gICAgLy8gMi4gQWRkIGEgbmV3IGRhdGFzZXQgaWRcbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLmRhdGFJZDoge1xuICAgICAgY29uc3Qgb2xkRGF0YUlkID0gWy4uLmZpbHRlci5kYXRhSWRdO1xuICAgICAgZmlsdGVyID0gX3VwZGF0ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIHZhbHVlLCBzdGF0ZS5kYXRhc2V0cyk7XG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSB1bmlxKFsuLi5vbGREYXRhSWQsIC4uLmZpbHRlci5kYXRhSWRdKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLm5hbWU6IHtcbiAgICAgIC8vIHdlIGFyZSBzdXBwb3J0aW5nIHRoZSBjdXJyZW50IGZ1bmN0aW9uYWxpdHlcbiAgICAgIC8vIFRPRE86IE5leHQgUFIgZm9yIFVJIGZpbHRlciBuYW1lIHdpbGwgb25seSB1cGRhdGUgZmlsdGVyIG5hbWUgYnV0IGl0IHdvbid0IGhhdmUgc2lkZSBlZmZlY3RzXG4gICAgICAvLyB3ZSBhcmUgZ29ubmEgdXNlIHBhaXIgb2YgZGF0YXNldHMgYW5kIGZpZWxkSWR4IHRvIHVwZGF0ZSB0aGUgZmlsdGVyXG4gICAgICBjb25zdCBkYXRhc2V0SWQgPSBmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdO1xuICAgICAgY29uc3Qge2ZpbHRlcjogdXBkYXRlZEZpbHRlciwgZGF0YXNldDogbmV3RGF0YXNldH0gPSBhcHBseUZpbHRlckZpZWxkTmFtZShcbiAgICAgICAgZmlsdGVyLFxuICAgICAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgZGF0YXNldElkLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdmFsdWVJbmRleCxcbiAgICAgICAge21lcmdlRG9tYWluOiB2YWx1ZUluZGV4ID4gMH1cbiAgICAgICk7XG4gICAgICBpZiAodXBkYXRlZEZpbHRlcikge1xuICAgICAgICBmaWx0ZXIgPSB1cGRhdGVkRmlsdGVyO1xuICAgICAgICBpZiAoZmlsdGVyLmdwdSkge1xuICAgICAgICAgIGZpbHRlciA9IHNldEZpbHRlckdwdU1vZGUoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgICBmaWx0ZXIgPSBhc3NpZ25HcHVDaGFubmVsKGZpbHRlciwgc3RhdGUuZmlsdGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUgPSBzZXQoWydkYXRhc2V0cycsIGRhdGFzZXRJZF0sIG5ld0RhdGFzZXQsIHN0YXRlKTtcbiAgICAgICAgLy8gcmVtb3ZlIGZpbHRlciBQbG90IGF0IGRhdGFzZXRJZCwgc28gaXQgd2lsbCBiZSByZWNhbGN1bGF0ZWRcbiAgICAgICAgZmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGRhdGFzZXRJZCk7XG5cbiAgICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gdXBkYXRlZEZpbHRlci5kYXRhSWQ7XG4gICAgICB9XG4gICAgICAvLyBvbmx5IGZpbHRlciB0aGUgY3VycmVudCBkYXRhc2V0XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLmxheWVySWQ6IHtcbiAgICAgIC8vIFdlIG5lZWQgdG8gdXBkYXRlIG9ubHkgZGF0YXNldElkL3MgaWYgd2UgaGF2ZSBhZGRlZC9yZW1vdmVkIGxheWVyc1xuICAgICAgLy8gLSBjaGVjayBmb3IgbGF5ZXJJZCBjaGFuZ2VzIChYT1Igd29ya3MgYmVjYXVzZSBvZiBzdHJpbmcgdmFsdWVzKVxuICAgICAgLy8gaWYgbm8gZGlmZmVyZW5jZXMgYmV0d2VlbiBsYXllcklkcywgZG9uJ3QgZG8gYW55IGZpbHRlcmluZ1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgY29uc3QgbGF5ZXJJZERpZmZlcmVuY2UgPSB4b3IodmFsdWUsIGZpbHRlci5sYXllcklkKTtcblxuICAgICAgY29uc3QgbGF5ZXJEYXRhSWRzID0gdW5pcTxzdHJpbmc+KFxuICAgICAgICBsYXllcklkRGlmZmVyZW5jZVxuICAgICAgICAgIC5tYXAobGlkID0+XG4gICAgICAgICAgICBnZXQoXG4gICAgICAgICAgICAgIHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGlkKSxcbiAgICAgICAgICAgICAgWydjb25maWcnLCAnZGF0YUlkJ11cbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICAgLmZpbHRlcihkID0+IGQpIGFzIHN0cmluZ1tdXG4gICAgICApO1xuXG4gICAgICAvLyBvbmx5IGZpbHRlciBkYXRhc2V0c0lkc1xuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gbGF5ZXJEYXRhSWRzO1xuXG4gICAgICAvLyBVcGRhdGUgbmV3RmlsdGVyIGRhdGFJZHNcbiAgICAgIGNvbnN0IG5ld0RhdGFJZHMgPSB1bmlxPHN0cmluZz4oXG4gICAgICAgIHZhbHVlXG4gICAgICAgICAgPy5tYXAobGlkID0+XG4gICAgICAgICAgICBnZXQoXG4gICAgICAgICAgICAgIHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGlkKSxcbiAgICAgICAgICAgICAgWydjb25maWcnLCAnZGF0YUlkJ11cbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICAgLmZpbHRlcihkID0+IGQpIGFzIHN0cmluZ1tdXG4gICAgICApO1xuXG4gICAgICBmaWx0ZXIgPSB7XG4gICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgbGF5ZXJJZDogdmFsdWUsXG4gICAgICAgIGRhdGFJZDogbmV3RGF0YUlkc1xuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICBmaWx0ZXIgPSBzZXQoW3Byb3BdLCB2YWx1ZSwgZmlsdGVyKTtcbiAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IFsuLi5maWx0ZXIuZGF0YUlkXTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIHtmaWx0ZXIsIGRhdGFzZXRJZHMsIGRhdGFzZXRJZHNUb0ZpbHRlciwgc3RhdGV9O1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtc3RhdGVtZW50cyAqL1xuXG4vKipcbiAqIFNldCB0aGUgcHJvcGVydHkgb2YgYSBmaWx0ZXIgcGxvdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEZpbHRlclBsb3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZHgsIG5ld1Byb3B9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyUGxvdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKCFzdGF0ZS5maWx0ZXJzW2lkeF0pIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzWyR7aWR4fV0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG5cbiAgZm9yIChjb25zdCBwcm9wIGluIG5ld1Byb3ApIHtcbiAgICBpZiAocHJvcCA9PT0gJ3Bsb3RUeXBlJykge1xuICAgICAgbmV3RmlsdGVyID0gcGlja18oJ3Bsb3RUeXBlJykobWVyZ2VfKG5ld1Byb3AucGxvdFR5cGUpKShuZXdGaWx0ZXIpO1xuICAgIH0gZWxzZSBpZiAocHJvcCA9PT0gJ3lBeGlzJykge1xuICAgICAgY29uc3QgY2hhcnRUeXBlID0gbmV3UHJvcC55QXhpcyA/IFBMT1RfVFlQRVMubGluZUNoYXJ0IDogUExPVF9UWVBFUy5oaXN0b2dyYW07XG5cbiAgICAgIG5ld0ZpbHRlciA9IHBpY2tfKCdwbG90VHlwZScpKG1lcmdlXyh7dHlwZTogY2hhcnRUeXBlfSkpKG1lcmdlXyhuZXdQcm9wKShuZXdGaWx0ZXIpKTtcbiAgICB9XG4gIH1cblxuICBuZXdGaWx0ZXIgPSB1cGRhdGVGaWx0ZXJQbG90KHN0YXRlLmRhdGFzZXRzLCBuZXdGaWx0ZXIpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBpZHggPyBuZXdGaWx0ZXIgOiBmKSlcbiAgfTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT5cbiAgIWFjdGlvbi5kYXRhSWRcbiAgICA/IHN0YXRlXG4gICAgOiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBmaWx0ZXJzOiBbLi4uc3RhdGUuZmlsdGVycywgZ2V0RGVmYXVsdEZpbHRlcih7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBpZDogYWN0aW9uLmlkfSldXG4gICAgICB9O1xuXG4vKipcbiAqIENyZWF0ZSBvciB1cGRhdGUgYSBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQ3JlYXRlT3JVcGRhdGVGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZCwgZGF0YUlkLCBmaWVsZCwgdmFsdWV9ID0gYWN0aW9uO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBjb25zdCBvcmlnaW5hbEluZGV4ID0gbmV3U3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBpZCk7XG4gIGxldCBmaWx0ZXJJbmRleCA9IG9yaWdpbmFsSW5kZXg7XG4gIGlmICghaWQgJiYgIWRhdGFJZCkge1xuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuICBpZiAob3JpZ2luYWxJbmRleCA8IDAgJiYgZGF0YUlkKSB7XG4gICAgbmV3U3RhdGUgPSBhZGRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7ZGF0YUlkfSk7XG4gICAgaWYgKG5ld1N0YXRlLmZpbHRlcnMubGVuZ3RoICE9PSBzdGF0ZS5maWx0ZXJzLmxlbmd0aCArIDEpIHtcbiAgICAgIC8vIE5vIG5ldyBmaWx0ZXIgd2FzIGFkZGVkXG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICAgIC8vIEhlcmUgd2UgYXJlIGFzc3VtaW5nIHRoYXQgdGhlIGZpbHRlciB3YXMgYWRkZWQgYXQgdGhlIGVuZFxuICAgIGZpbHRlckluZGV4ID0gbmV3U3RhdGUuZmlsdGVycy5sZW5ndGggLSAxO1xuICAgIG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySW5kZXhdID0ge1xuICAgICAgLi4ubmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJbmRleF0sXG4gICAgICAuLi4oaWQgPyB7aWR9IDogbnVsbClcbiAgICB9O1xuICB9XG5cbiAgLy8gTm8gbmVlZCB0byB1cGRhdGUgdGhpcyBpZiBpdCdzIGEgbmV3bHkgY3JlYXRlZCBmaWx0ZXJcbiAgLy8gRmlyc3Qgd2UgbWFrZSBzdXJlIGFsbCB0aGUgZGF0YUlkcyB0aGF0IGZpZWxkcyByZWZlciB0byBhcmUgdXBkYXRlZFxuICBpZiAob3JpZ2luYWxJbmRleCA+PSAwICYmIGRhdGFJZCkge1xuICAgIC8vIElmIHRoZSBkYXRhSWQgaXMgYW4gYXJyYXksIHdlIG5lZWQgdG8gdXBkYXRlIGVhY2ggb25lIGluZGl2aWR1YWxseSBhcyB0aGV5IG5lZWQgYSBjb3JyZWN0IHZhbHVlSW5kZXggcGFzc2VkXG4gICAgbmV3U3RhdGUgPSAoQXJyYXkuaXNBcnJheShkYXRhSWQpID8gZGF0YUlkIDogW2RhdGFJZF0pLnJlZHVjZSgoYWNjdSwgZCwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKGFjY3UsIHtcbiAgICAgICAgaWR4OiBmaWx0ZXJJbmRleCxcbiAgICAgICAgcHJvcDogJ2RhdGFJZCcsXG4gICAgICAgIHZhbHVlOiBkLFxuICAgICAgICB2YWx1ZUluZGV4OiBpbmRleFxuICAgICAgfSk7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG4gIC8vIFRoZW4gd2UgdXBkYXRlIHRoZSBmaWVsZHNcbiAgaWYgKGZpZWxkKSB7XG4gICAgLy8gSWYgdGhlIGZpZWxkIGlzIGFuIGFycmF5LCB3ZSBuZWVkIHRvIHVwZGF0ZSBlYWNoIGZpZWxkIGluZGl2aWR1YWxseSBhcyB0aGV5IG5lZWQgYSBjb3JyZWN0IHZhbHVlSW5kZXggcGFzc2VkXG4gICAgbmV3U3RhdGUgPSAoQXJyYXkuaXNBcnJheShmaWVsZCkgPyBmaWVsZCA6IFtmaWVsZF0pLnJlZHVjZSgoYWNjdSwgZiwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKGFjY3UsIHtcbiAgICAgICAgaWR4OiBmaWx0ZXJJbmRleCxcbiAgICAgICAgcHJvcDogJ25hbWUnLFxuICAgICAgICB2YWx1ZTogZixcbiAgICAgICAgdmFsdWVJbmRleDogaW5kZXhcbiAgICAgIH0pO1xuICAgIH0sIG5ld1N0YXRlKTtcbiAgfVxuICAvLyBUaGVuIHdlIHVwZGF0ZSB0aGUgdmFsdWUgc2VwYXJhdGVseVxuICBpZiAodmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2lkeDogZmlsdGVySW5kZXgsIHByb3A6ICd2YWx1ZScsIHZhbHVlfSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIFNldCBsYXllciBjb2xvciBwYWxldHRlIHVpIHN0YXRlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJDb2xvclVJQ2hhbmdlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b2xkTGF5ZXIsIHByb3AsIG5ld0NvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5MYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IG9sZFZpeENvbmZpZyA9IG9sZExheWVyLmNvbmZpZy52aXNDb25maWdbcHJvcF07XG4gIGNvbnN0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb2xvclVJKHByb3AsIG5ld0NvbmZpZyk7XG4gIGNvbnN0IG5ld1Zpc0NvbmZpZyA9IG5ld0xheWVyLmNvbmZpZy52aXNDb25maWdbcHJvcF07XG4gIGlmIChvbGRWaXhDb25maWcgIT09IG5ld1Zpc0NvbmZpZykge1xuICAgIHJldHVybiBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICAgIG9sZExheWVyLFxuICAgICAgbmV3VmlzQ29uZmlnOiB7XG4gICAgICAgIFtwcm9wXTogbmV3VmlzQ29uZmlnXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN0YXRlLmxheWVycy5tYXAobCA9PiAobC5pZCA9PT0gb2xkTGF5ZXIuaWQgPyBuZXdMYXllciA6IGwpKVxuICB9O1xufTtcblxuLyoqXG4gKiBTdGFydCBhbmQgZW5kIGZpbHRlciBhbmltYXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGFjdGlvbi5pZHggPyB7Li4uZiwgaXNBbmltYXRpbmc6ICFmLmlzQW5pbWF0aW5nfSA6IGYpKVxufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyhjb25maWc6IEFuaW1hdGlvbkNvbmZpZyB8IEZpbHRlckFuaW1hdGlvbkNvbmZpZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gJ2RhdGFJZCcgaW4gY29uZmlnICYmICdhbmltYXRpb25XaW5kb3cnIGluIGNvbmZpZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7Y29uZmlnfSA9IGFjdGlvbjtcbiAgaWYgKGlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnKGNvbmZpZykpIHtcbiAgICAvLyBGaW5kIGZpbHRlciB1c2VkIGZvciBhbmltYXRpb25cbiAgICAvLyBBc3N1bWluZyB0aGVyZSdzIG9ubHkgb25lIGZpbHRlciB1c2VkIGZvciBhbmltYXRpb24sIHNlZSBzZXRGaWx0ZXJWaWV3VXBkYXRlclxuICAgIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+ICFpc1NpZGVGaWx0ZXIoZikpO1xuICAgIGlmICghZmlsdGVyKSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICAgIGNvbnN0IG5ld0ZpbHRlciA9IHsuLi5maWx0ZXIsIC4uLmNvbmZpZ307XG4gICAgcmV0dXJuIGFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlcihzdGF0ZSwgYXBwbHlGaWx0ZXJDb25maWcoZmlsdGVyLmlkLCBuZXdGaWx0ZXIpKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAuLi5jb25maWdcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICBpc0FuaW1hdGluZzogIXN0YXRlLmFuaW1hdGlvbkNvbmZpZy5pc0FuaW1hdGluZ1xuICB9XG59KTtcblxuLyoqXG4gKiBIaWRlIGFuZCBzaG93IGxheWVyIGFuaW1hdGlvbiBjb250cm9sXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJBbmltYXRpb25Db250cm9sVXBkYXRlciA9IChzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgIGhpZGVDb250cm9sOiAhc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmhpZGVDb250cm9sXG4gIH1cbn0pO1xuXG4vKipcbiAqIENoYW5nZSBmaWx0ZXIgYW5pbWF0aW9uIHNwZWVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gYWN0aW9uLmlkeCA/IHsuLi5mLCBzcGVlZDogYWN0aW9uLnNwZWVkfSA6IGYpKVxufSk7XG5cbi8qKlxuICogVXBkYXRlIGFuaW1hdGlvbiBzcGVlZCB3aXRoIHRoZSB2ZXJ0aWNhbCBzcGVlZCBzbGlkZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKlxuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge3NwZWVkfTogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICBzcGVlZFxuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogU2hvdyBsYXJnZXIgdGltZSBmaWx0ZXIgYXQgYm90dG9tIGZvciB0aW1lIHBsYXliYWNrIChhcHBseSB0byB0aW1lIGZpbHRlciBvbmx5KVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEZpbHRlclZpZXdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlclZpZXdVcGRhdGVyQWN0aW9uXG4pID0+IHtcbiAgY29uc3Qge3ZpZXcsIGlkeH0gPSBhY3Rpb247XG4gIGNvbnN0IHNob3VsZFJlc2V0T3RoZXJGaWx0ZXJzVmlldyA9IHZpZXcgPT09IEZJTFRFUl9WSUVXX1RZUEVTLmVubGFyZ2VkO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PlxuICAgICAgaSA9PT0gaWR4XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIHZpZXdcbiAgICAgICAgICB9XG4gICAgICAgIDogc2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIHZpZXc6IEZJTFRFUl9WSUVXX1RZUEVTLnNpZGVcbiAgICAgICAgICB9XG4gICAgICAgIDogZlxuICAgIClcbiAgfTtcbn07XG5cbi8qKlxuICogVG9nZ2xlcyBmaWx0ZXIgZmVhdHVyZSB2aXNpYmlsaXR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1thY3Rpb24uaWR4XTtcbiAgY29uc3QgaXNWaXNpYmxlID0gZ2V0KGZpbHRlciwgWyd2YWx1ZScsICdwcm9wZXJ0aWVzJywgJ2lzVmlzaWJsZSddKTtcblxuICBsZXQgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKHN0YXRlLCB7XG4gICAgaWR4OiBhY3Rpb24uaWR4LFxuICAgIHByb3A6ICdlbmFibGVkJyxcbiAgICB2YWx1ZTogIWlzVmlzaWJsZVxuICB9KTtcblxuICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGFjdGlvbi5pZHgsXG4gICAgcHJvcDogJ3ZhbHVlJyxcbiAgICB2YWx1ZTogZmVhdHVyZVRvRmlsdGVyVmFsdWUoZmlsdGVyLnZhbHVlLCBmaWx0ZXIuaWQsIHtcbiAgICAgIGlzVmlzaWJsZTogIWlzVmlzaWJsZVxuICAgIH0pXG4gIH0pO1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZHh9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YUlkLCBpZH0gPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG5cbiAgY29uc3QgbmV3RmlsdGVycyA9IFtcbiAgICAuLi5zdGF0ZS5maWx0ZXJzLnNsaWNlKDAsIGlkeCksXG4gICAgLi4uc3RhdGUuZmlsdGVycy5zbGljZShpZHggKyAxLCBzdGF0ZS5maWx0ZXJzLmxlbmd0aClcbiAgXTtcblxuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhkYXRhSWQsIHN0YXRlLmRhdGFzZXRzLCBuZXdGaWx0ZXJzLCBzdGF0ZS5sYXllcnMpO1xuICBjb25zdCBuZXdFZGl0b3IgPVxuICAgIGdldEZpbHRlcklkSW5GZWF0dXJlKHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmUpID09PSBpZFxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgICAgICB9XG4gICAgICA6IHN0YXRlLmVkaXRvcjtcblxuICBsZXQgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJ10sIG5ld0ZpbHRlcnMsIHN0YXRlKTtcbiAgbmV3U3RhdGUgPSBzZXQoWydkYXRhc2V0cyddLCBmaWx0ZXJlZERhdGFzZXRzLCBuZXdTdGF0ZSk7XG4gIG5ld1N0YXRlID0gc2V0KFsnZWRpdG9yJ10sIG5ld0VkaXRvciwgbmV3U3RhdGUpO1xuXG4gIHJldHVybiB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV3U3RhdGUsIGRhdGFJZCwgdW5kZWZpbmVkKTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZExheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBsZXQgbmV3TGF5ZXI7XG4gIGxldCBuZXdMYXllckRhdGE7XG4gIGlmIChhY3Rpb24uY29uZmlnKSB7XG4gICAgbmV3TGF5ZXIgPSBjcmVhdGVMYXllckZyb21Db25maWcoc3RhdGUsIGFjdGlvbi5jb25maWcpO1xuICAgIGlmICghbmV3TGF5ZXIpIHtcbiAgICAgIENvbnNvbGUud2FybihcbiAgICAgICAgJ0ZhaWxlZCB0byBjcmVhdGUgbGF5ZXIgZnJvbSBjb25maWcsIGl0IHVzdWFsbHkgbWVhbnMgdGhlIGNvbmZpZyBpcyBub3QgYmUgaW4gY29ycmVjdCBmb3JtYXQnLFxuICAgICAgICBhY3Rpb24uY29uZmlnXG4gICAgICApO1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUpO1xuICAgIG5ld0xheWVyID0gcmVzdWx0LmxheWVyO1xuICAgIG5ld0xheWVyRGF0YSA9IHJlc3VsdC5sYXllckRhdGE7XG4gIH0gZWxzZSB7XG4gICAgLy8gY3JlYXRlIGFuIGVtcHR5IGxheWVyIHdpdGggYSBzcGVjaWZpYyBkYXRhc2V0IG9yIGEgZGVmYXVsdCBvbmVcbiAgICBjb25zdCBkZWZhdWx0RGF0YXNldCA9IGFjdGlvbi5kYXRhc2V0SWQgPz8gT2JqZWN0LmtleXMoc3RhdGUuZGF0YXNldHMpWzBdO1xuICAgIG5ld0xheWVyID0gbmV3IExheWVyKHtcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcbiAgICAgIGlzQ29uZmlnQWN0aXZlOiB0cnVlLFxuICAgICAgZGF0YUlkOiBkZWZhdWx0RGF0YXNldFxuICAgIH0pO1xuICAgIG5ld0xheWVyRGF0YSA9IHt9O1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogWy4uLnN0YXRlLmxheWVycywgbmV3TGF5ZXJdLFxuICAgIGxheWVyRGF0YTogWy4uLnN0YXRlLmxheWVyRGF0YSwgbmV3TGF5ZXJEYXRhXSxcbiAgICAvLyBhZGQgbmV3IGxheWVyIGF0IHRoZSB0b3BcbiAgICBsYXllck9yZGVyOiBbbmV3TGF5ZXIuaWQsIC4uLnN0YXRlLmxheWVyT3JkZXJdLFxuICAgIHNwbGl0TWFwczogYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcChzdGF0ZS5zcGxpdE1hcHMsIG5ld0xheWVyKVxuICB9O1xuXG4gIGlmIChuZXdMYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIHJlbW92ZSBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUxheWVyVXBkYXRlcjxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUxheWVyVXBkYXRlckFjdGlvblxuKTogVCB7XG4gIGNvbnN0IGlkeCA9IE51bWJlci5pc0Zpbml0ZShpZClcbiAgICA/IC8vIHN1cHBvcnQgb2xkZXIgQVBJLCByZW1vdmUgbGF5ZXIgYnkgaWR4XG4gICAgICBOdW1iZXIoaWQpXG4gICAgOiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUubGF5ZXJzLmxlbmd0aCkge1xuICAgIC8vIGludmFsaWQgaW5kZXhcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgcmVtb3ZlIGxheWVyIHdpdGggaW52YWxpZCBpZHxpZHggJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7bGF5ZXJzLCBsYXllckRhdGEsIGxheWVyT3JkZXIsIGNsaWNrZWQsIGhvdmVySW5mb30gPSBzdGF0ZTtcbiAgY29uc3QgbGF5ZXJUb1JlbW92ZSA9IGxheWVyc1tpZHhdO1xuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IGZpbHRlck91dEJ5SWQobGF5ZXJUb1JlbW92ZS5pZCkobGF5ZXJzKSxcbiAgICBsYXllckRhdGE6IHJlbW92ZUVsZW1lbnRBdEluZGV4KGlkeCkobGF5ZXJEYXRhKSxcbiAgICBsYXllck9yZGVyOiByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobGF5ZXJPcmRlciwgbGF5ZXJUb1JlbW92ZS5pZCksXG4gICAgY2xpY2tlZDogbGF5ZXJUb1JlbW92ZS5pc0xheWVySG92ZXJlZChjbGlja2VkKSA/IHVuZGVmaW5lZCA6IGNsaWNrZWQsXG4gICAgaG92ZXJJbmZvOiBsYXllclRvUmVtb3ZlLmlzTGF5ZXJIb3ZlcmVkKGhvdmVySW5mbykgPyB1bmRlZmluZWQgOiBob3ZlckluZm8sXG4gICAgc3BsaXRNYXBzOiByZW1vdmVMYXllckZyb21TcGxpdE1hcHMoc3RhdGUuc3BsaXRNYXBzLCBsYXllclRvUmVtb3ZlKVxuICAgIC8vIFRPRE86IHVwZGF0ZSBmaWx0ZXJzLCBjcmVhdGUgaGVscGVyIHRvIHJlbW92ZSBsYXllciBmb3JtIGZpbHRlciAocmVtb3ZlIGxheWVyaWQgYW5kIGRhdGFpZCkgaWYgbWFwcGVkXG4gIH07XG5cbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG59XG5cbi8qKlxuICogUmVvcmRlciBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlb3JkZXJMYXllclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge29yZGVyfTogVmlzU3RhdGVBY3Rpb25zLlJlb3JkZXJMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBsYXllck9yZGVyOiBvcmRlclxufSk7XG5cbi8qKlxuICogQWRkIGEgbmV3IGxheWVyIGdyb3VwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgbGF5ZXJHcm91cCA9IGdldE5ld0xheWVyR3JvdXAoYWN0aW9uKTtcbiAgbGV0IG5ld0xheWVyT3JkZXIgPSBbLi4uc3RhdGUubGF5ZXJPcmRlcl07XG5cbiAgaWYgKGFjdGlvbi5sYXllck9yZGVyKSB7XG4gICAgYWN0aW9uLmxheWVyT3JkZXIuZm9yRWFjaChsYXllcklkID0+IHtcbiAgICAgIG5ld0xheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV3TGF5ZXJPcmRlciwgbGF5ZXJJZCBhcyBzdHJpbmcpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllck9yZGVyOiBhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIobmV3TGF5ZXJPcmRlciwgbGF5ZXJHcm91cClcbiAgfTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgbGF5ZXIgZ3JvdXAgYW5kIGFsbCBsYXllcnMgd2l0aGluIGl0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXJHcm91cFRvUmVtb3ZlID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGlkKTtcbiAgaWYgKCFsYXllckdyb3VwVG9SZW1vdmUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBsYXllcklkc1RvUmVtb3ZlID0gZ2V0RmxhdExheWVyT3JkZXIobGF5ZXJHcm91cFRvUmVtb3ZlLmxheWVyT3JkZXIpO1xuICBsZXQgbmV3U3RhdGUgPSB7Li4uc3RhdGV9O1xuXG4gIGxheWVySWRzVG9SZW1vdmUuZm9yRWFjaChsYXllcklkID0+IHtcbiAgICBjb25zdCBpZHggPSBuZXdTdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gbGF5ZXJJZCk7XG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBuZXdTdGF0ZSA9IHJlbW92ZUxheWVyVXBkYXRlcihuZXdTdGF0ZSwge2lkOiBsYXllcklkfSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBuZXdMYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIGxheWVyR3JvdXBUb1JlbW92ZSk7XG4gIHJldHVybiB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlclxuICB9O1xufTtcblxuLyoqXG4gKiBVcGRhdGUgYSBsYXllciBncm91cCAobGFiZWwsIHZpc2liaWxpdHksIGxheWVyIG1lbWJlcnNoaXApXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkLCBvcHRpb25zfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBpZCk7XG4gIGlmICghbGF5ZXJHcm91cCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHsuLi5zdGF0ZX07XG5cbiAgaWYgKG9wdGlvbnMubGF5ZXJPcmRlcikge1xuICAgIG5ld1N0YXRlLmxheWVyT3JkZXIgPSBbLi4ubGF5ZXJHcm91cC5sYXllck9yZGVyLCAuLi5uZXdTdGF0ZS5sYXllck9yZGVyXTtcbiAgICBvcHRpb25zLmxheWVyT3JkZXIuZm9yRWFjaChsYXllcklkID0+IHtcbiAgICAgIG5ld1N0YXRlLmxheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIoXG4gICAgICAgIG5ld1N0YXRlLmxheWVyT3JkZXIsXG4gICAgICAgIGxheWVySWQgYXMgc3RyaW5nXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXJHcm91cCA9IHtcbiAgICAuLi5sYXllckdyb3VwLFxuICAgIC4uLm9wdGlvbnNcbiAgfTtcblxuICBpZiAobmV3TGF5ZXJHcm91cC5pc1Zpc2libGUgIT09IGxheWVyR3JvdXAuaXNWaXNpYmxlKSB7XG4gICAgY29uc3QgbGF5ZXJJZHMgPSBnZXRGbGF0TGF5ZXJPcmRlcihuZXdMYXllckdyb3VwLmxheWVyT3JkZXIpO1xuICAgIG5ld1N0YXRlID0gbmV3U3RhdGUubGF5ZXJzLnJlZHVjZSgoYWNjLCBsYXllcikgPT4ge1xuICAgICAgaWYgKGxheWVySWRzLmluY2x1ZGVzKGxheWVyLmlkKSkge1xuICAgICAgICByZXR1cm4gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKGFjYywge1xuICAgICAgICAgIG9sZExheWVyOiBsYXllcixcbiAgICAgICAgICBuZXdDb25maWc6IHtpc1Zpc2libGU6IG5ld0xheWVyR3JvdXAuaXNWaXNpYmxlfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgbmV3TGF5ZXJHcm91cCk7XG4gIHJldHVybiB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlclxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgYSBsYXllciB0byBhIGxheWVyIGdyb3VwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZExheWVyVG9MYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7bGF5ZXJHcm91cElkLCBsYXllcklkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBsYXllckdyb3VwSWQpO1xuICBjb25zdCBsYXllciA9IHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGF5ZXJJZCk7XG4gIGlmICghbGF5ZXJHcm91cCB8fCAhbGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBpZiAobGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmQoZW50cnkgPT4gZW50cnkgPT09IGxheWVySWQpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYWRkTGF5ZXJPckdyb3VwVG9MYXllck9yZGVyKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgbGF5ZXJJZCk7XG4gIHJldHVybiB1cGRhdGVMYXllckdyb3VwVXBkYXRlcihzdGF0ZSwge1xuICAgIGlkOiBsYXllckdyb3VwSWQsXG4gICAgb3B0aW9uczoge2xheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlcn1cbiAgfSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGxheWVyIGZyb20gYSBsYXllciBncm91cFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUxheWVyRnJvbUxheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUxheWVyRnJvbUxheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtsYXllckdyb3VwSWQsIGxheWVySWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGxheWVyR3JvdXBJZCk7XG4gIGlmICghbGF5ZXJHcm91cCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0xheWVyR3JvdXBPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihsYXllckdyb3VwLmxheWVyT3JkZXIsIGxheWVySWQpO1xuICByZXR1cm4gdXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXIoc3RhdGUsIHtcbiAgICBpZDogbGF5ZXJHcm91cElkLFxuICAgIG9wdGlvbnM6IHtsYXllck9yZGVyOiBuZXdMYXllckdyb3VwT3JkZXJ9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBTd2FwIGxheWVyIG9yZGVyIGVudHJpZXMgYmV0d2VlbiByb290IGFuZCBncm91cHNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgY29uc3Qgc3dhcExheWVyT3JkZXJFbnRyaWVzVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Td2FwTGF5ZXJPcmRlckVudHJpZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtvcmlnaW5MYXllcklkLCBkZXN0aW5hdGlvbkxheWVySWQsIG9yaWdpbkxheWVyR3JvdXBJZCwgZGVzdGluYXRpb25MYXllckdyb3VwSWR9ID0gYWN0aW9uO1xuXG4gIGlmICghb3JpZ2luTGF5ZXJHcm91cElkICYmICFkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGNvbnN0IG9yaWdpbkluZGV4ID0gc3RhdGUubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gb3JpZ2luTGF5ZXJJZCA6IGVudHJ5LmlkID09PSBvcmlnaW5MYXllcklkXG4gICAgKTtcbiAgICBpZiAoZGVzdGluYXRpb25MYXllcklkICYmIG9yaWdpbkluZGV4ICE9PSAtMSkge1xuICAgICAgY29uc3QgZGVzdGluYXRpb25JbmRleCA9IHN0YXRlLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkIDogZW50cnkuaWQgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZFxuICAgICAgKTtcbiAgICAgIGlmIChkZXN0aW5hdGlvbkluZGV4ICE9PSAtMSkge1xuICAgICAgICBjb25zdCBuZXdMYXllck9yZGVyID0gYXJyYXlNb3ZlKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkluZGV4LCBkZXN0aW5hdGlvbkluZGV4KTtcbiAgICAgICAgcmV0dXJuIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlcn07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKG9yaWdpbkxheWVyR3JvdXBJZCAmJiAhZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICBsZXQgbmV3TGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgICBpZiAoZGVzdGluYXRpb25MYXllcklkKSB7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvbkluZGV4ID0gbmV3TGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBkZXN0aW5hdGlvbkxheWVySWQgOiBmYWxzZVxuICAgICAgKTtcbiAgICAgIG5ld0xheWVyT3JkZXIuc3BsaWNlKGRlc3RpbmF0aW9uSW5kZXggPT09IC0xID8gMCA6IGRlc3RpbmF0aW9uSW5kZXgsIDAsIG9yaWdpbkxheWVySWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllck9yZGVyID0gWy4uLm5ld0xheWVyT3JkZXIsIG9yaWdpbkxheWVySWRdO1xuICAgIH1cbiAgICByZXR1cm4gey4uLnN0YXRlLCBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyfTtcbiAgfVxuXG4gIGlmIChvcmlnaW5MYXllckdyb3VwSWQgJiYgZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICBpZiAob3JpZ2luTGF5ZXJHcm91cElkID09PSBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgICAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllckdyb3VwSWQpO1xuICAgICAgaWYgKCFsYXllckdyb3VwKSByZXR1cm4gc3RhdGU7XG4gICAgICBjb25zdCBvcmlnaW5JbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBvcmlnaW5MYXllcklkIDogZW50cnkuaWQgPT09IG9yaWdpbkxheWVySWRcbiAgICAgICk7XG4gICAgICBpZiAob3JpZ2luSW5kZXggPT09IC0xKSByZXR1cm4gc3RhdGU7XG4gICAgICBpZiAoZGVzdGluYXRpb25MYXllcklkKSB7XG4gICAgICAgIGNvbnN0IGRlc3RJbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZCA6IGVudHJ5LmlkID09PSBkZXN0aW5hdGlvbkxheWVySWRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGRlc3RJbmRleCA9PT0gLTEpIHJldHVybiBzdGF0ZTtcbiAgICAgICAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYXJyYXlNb3ZlKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgb3JpZ2luSW5kZXgsIGRlc3RJbmRleCk7XG4gICAgICAgIGNvbnN0IG5ld0xheWVyT3JkZXIgPSB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIHtcbiAgICAgICAgICAuLi5sYXllckdyb3VwLFxuICAgICAgICAgIGxheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlclxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlcn07XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgLy8gQ3Jvc3MtZ3JvdXAgbW92ZTogcmVtb3ZlIGZyb20gb3JpZ2luLCB0aGVuIGFkZCB0byBkZXN0aW5hdGlvblxuICAgIGNvbnN0IGxheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJJZCk7XG4gICAgbGV0IG5ld1N0YXRlID0gYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyKFxuICAgICAgey4uLnN0YXRlLCBsYXllck9yZGVyfSxcbiAgICAgIHtsYXllcklkOiBvcmlnaW5MYXllcklkLCBsYXllckdyb3VwSWQ6IGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkfVxuICAgICk7XG5cbiAgICBpZiAoZGVzdGluYXRpb25MYXllcklkKSB7XG4gICAgICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKTtcbiAgICAgIGlmICghbGF5ZXJHcm91cCkgcmV0dXJuIHN0YXRlO1xuICAgICAgY29uc3Qgb3JpZ2luSW5kZXggPSBsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+IGVudHJ5ID09PSBvcmlnaW5MYXllcklkKTtcbiAgICAgIGNvbnN0IGRlc3RJbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT4gZW50cnkgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZCk7XG4gICAgICBpZiAob3JpZ2luSW5kZXggIT09IC0xICYmIGRlc3RJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYXJyYXlNb3ZlKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgb3JpZ2luSW5kZXgsIGRlc3RJbmRleCk7XG4gICAgICAgIG5ld1N0YXRlID0ge1xuICAgICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICAgIGxheWVyT3JkZXI6IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwge1xuICAgICAgICAgICAgLi4ubGF5ZXJHcm91cCxcbiAgICAgICAgICAgIGxheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlclxuICAgICAgICAgIH0pXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuXG4gIGlmICghb3JpZ2luTGF5ZXJHcm91cElkICYmIGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgY29uc3QgbGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgICByZXR1cm4gYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyKFxuICAgICAgey4uLnN0YXRlLCBsYXllck9yZGVyfSxcbiAgICAgIHtsYXllcklkOiBvcmlnaW5MYXllcklkLCBsYXllckdyb3VwSWQ6IGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkfVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59O1xuXG4vKipcbiAqIGR1cGxpY2F0ZSBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGR1cGxpY2F0ZUxheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuRHVwbGljYXRlTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IE51bWJlci5pc0Zpbml0ZShpZClcbiAgICA/IC8vIHN1cHBvcnQgb2xkZXIgQVBJLCByZW1vdmUgbGF5ZXIgYnkgaWR4XG4gICAgICBOdW1iZXIoaWQpXG4gICAgOiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCAhc3RhdGUubGF5ZXJzW2lkeF0pIHtcbiAgICBDb25zb2xlLndhcm4oYGxheWVyICR7aWR4fSBub3QgZm91bmQgaW4gbGF5ZXJPcmRlcmApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtsYXllcnN9ID0gc3RhdGU7XG4gIGNvbnN0IG9yaWdpbmFsID0gbGF5ZXJzW2lkeF07XG5cbiAgY29uc3Qgb3JpZ2luYWxMYXllck9yZGVySWR4ID0gZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbmFsLmlkKTtcbiAgbGV0IG5ld0xhYmVsID0gYENvcHkgb2YgJHtvcmlnaW5hbC5jb25maWcubGFiZWx9YDtcbiAgbGV0IHBvc3RmaXggPSAwO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gIHdoaWxlIChsYXllcnMuZmluZChsID0+IGwuY29uZmlnLmxhYmVsID09PSBuZXdMYWJlbCkpIHtcbiAgICBuZXdMYWJlbCA9IGBDb3B5IG9mICR7b3JpZ2luYWwuY29uZmlnLmxhYmVsfSAkeysrcG9zdGZpeH1gO1xuICB9XG5cbiAgLy8gY29sbGVjdCBsYXllciBjb25maWcgZnJvbSBvcmlnaW5hbFxuICBjb25zdCBsb2FkZWRMYXllciA9IHNlcmlhbGl6ZUxheWVyKG9yaWdpbmFsLCBzdGF0ZS5zY2hlbWEpO1xuXG4gIC8vIGFzc2lnbiBuZXcgaWQgYW5kIGxhYmVsIHRvIGNvcGllZCBsYXllclxuICBpZiAoIWxvYWRlZExheWVyPy5jb25maWcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbG9hZGVkTGF5ZXIuY29uZmlnLmxhYmVsID0gbmV3TGFiZWw7XG4gIGxvYWRlZExheWVyLmlkID0gZ2VuZXJhdGVIYXNoSWQoTEFZRVJfSURfTEVOR1RIKTtcblxuICAvLyBhZGQgbGF5ZXIgdG8gc3RhdGVcbiAgbGV0IG5leHRTdGF0ZSA9IGFkZExheWVyVXBkYXRlcihzdGF0ZSwge2NvbmZpZzogbG9hZGVkTGF5ZXJ9KTtcbiAgLy8gcmV0cmlldmUgbmV3bHkgY3JlYXRlZCBsYXllclxuICBjb25zdCBuZXdMYXllciA9IG5leHRTdGF0ZS5sYXllcnNbbmV4dFN0YXRlLmxheWVycy5sZW5ndGggLSAxXTtcblxuICAvLyBDaGVjayBpZiB0aGUgb3JpZ2luYWwgbGF5ZXIgaXMgaW5zaWRlIGEgZ3JvdXBcbiAgY29uc3QgcGFyZW50R3JvdXAgPSBmaW5kUGFyZW50R3JvdXBGb3JMYXllcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5hbC5pZCk7XG5cbiAgaWYgKHBhcmVudEdyb3VwKSB7XG4gICAgLy8gTGF5ZXIgaXMgaW5zaWRlIGEgZ3JvdXAgLSByZW1vdmUgdGhlIHByZXBlbmRlZCBpZCBmcm9tIHJvb3QgYW5kIGluc2VydCBpbnRvIHRoZSBncm91cFxuICAgIGNvbnN0IGxheWVyT3JkZXJXaXRob3V0UHJlcGVuZGVkID0gbmV4dFN0YXRlLmxheWVyT3JkZXIuc2xpY2UoMSk7XG4gICAgY29uc3QgaWR4SW5Hcm91cCA9IHBhcmVudEdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGUgPT4gZSA9PT0gb3JpZ2luYWwuaWQpO1xuICAgIGNvbnN0IG5ld0dyb3VwTGF5ZXJPcmRlciA9IGFycmF5SW5zZXJ0KHBhcmVudEdyb3VwLmxheWVyT3JkZXIsIGlkeEluR3JvdXAsIG5ld0xheWVyLmlkKTtcbiAgICBjb25zdCB1cGRhdGVkR3JvdXAgPSB7Li4ucGFyZW50R3JvdXAsIGxheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlcn07XG4gICAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIoXG4gICAgICBsYXllck9yZGVyV2l0aG91dFByZXBlbmRlZCxcbiAgICAgIHVwZGF0ZWRHcm91cFxuICAgICk7XG4gICAgbmV4dFN0YXRlID0gcmVvcmRlckxheWVyVXBkYXRlcihuZXh0U3RhdGUsIHtvcmRlcjogbmV3TGF5ZXJPcmRlcn0pO1xuICB9IGVsc2Uge1xuICAgIC8vIExheWVyIGlzIGF0IHJvb3QgbGV2ZWwgLSB1c2Ugb3JpZ2luYWwgaW5kZXgtYmFzZWQgaW5zZXJ0aW9uXG4gICAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IGFycmF5SW5zZXJ0KFxuICAgICAgbmV4dFN0YXRlLmxheWVyT3JkZXIuc2xpY2UoMSwgbmV4dFN0YXRlLmxheWVyT3JkZXIubGVuZ3RoKSxcbiAgICAgIG9yaWdpbmFsTGF5ZXJPcmRlcklkeCxcbiAgICAgIG5ld0xheWVyLmlkXG4gICAgKTtcbiAgICBuZXh0U3RhdGUgPSByZW9yZGVyTGF5ZXJVcGRhdGVyKG5leHRTdGF0ZSwge29yZGVyOiBuZXdMYXllck9yZGVyfSk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIEFkZCBhIG5ldyBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZEVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKFxuICAgIGFjdGlvbi5jb25maWc/LnR5cGUgPT09IExJR0hUX0FORF9TSEFET1dfRUZGRUNULnR5cGUgJiZcbiAgICBzdGF0ZS5lZmZlY3RzLnNvbWUoZWZmZWN0ID0+IGVmZmVjdC50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlKVxuICApIHtcbiAgICBDb25zb2xlLndhcm4oYENhbid0IGFkZCBtb3JlIHRoYW4gb25lICR7TElHSFRfQU5EX1NIQURPV19FRkZFQ1QubmFtZX0gZWZmZWN0YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgaWYgKFxuICAgIGFjdGlvbi5jb25maWc/LnR5cGUgPT09IERJU1RBTkNFX0ZPR19UWVBFICYmXG4gICAgc3RhdGUuZWZmZWN0cy5zb21lKFxuICAgICAgZWZmZWN0ID0+IGVmZmVjdC50eXBlID09PSBESVNUQU5DRV9GT0dfVFlQRSB8fCBlZmZlY3QudHlwZSA9PT0gU1VSRkFDRV9GT0dfVFlQRVxuICAgIClcbiAgKSB7XG4gICAgQ29uc29sZS53YXJuKFwiQ2FuJ3QgYWRkIG1vcmUgdGhhbiBvbmUgZm9nIGVmZmVjdFwiKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBpZiAoXG4gICAgYWN0aW9uLmNvbmZpZz8udHlwZSA9PT0gU1VSRkFDRV9GT0dfVFlQRSAmJlxuICAgIHN0YXRlLmVmZmVjdHMuc29tZShcbiAgICAgIGVmZmVjdCA9PiBlZmZlY3QudHlwZSA9PT0gU1VSRkFDRV9GT0dfVFlQRSB8fCBlZmZlY3QudHlwZSA9PT0gRElTVEFOQ0VfRk9HX1RZUEVcbiAgICApXG4gICkge1xuICAgIENvbnNvbGUud2FybihcIkNhbid0IGFkZCBtb3JlIHRoYW4gb25lIGZvZyBlZmZlY3RcIik7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RWZmZWN0ID0gY3JlYXRlRWZmZWN0KGFjdGlvbi5jb25maWcpO1xuXG4gIC8vIGNvbGxhcHNlIGNvbmZpZ3VyYXRvcnMgZm9yIG90aGVyIGVmZmVjdHNcbiAgc3RhdGUuZWZmZWN0cy5mb3JFYWNoKGVmZmVjdCA9PiBlZmZlY3Quc2V0UHJvcHMoe2lzQ29uZmlnQWN0aXZlOiBmYWxzZX0pKTtcblxuICBjb25zdCBlZmZlY3RzID0gWy4uLnN0YXRlLmVmZmVjdHMsIG5ld0VmZmVjdF07XG4gIGNvbnN0IGVmZmVjdE9yZGVyID0gZml4RWZmZWN0T3JkZXIoZWZmZWN0cywgW25ld0VmZmVjdC5pZCwgLi4uc3RhdGUuZWZmZWN0T3JkZXJdKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVmZmVjdHMsXG4gICAgZWZmZWN0T3JkZXJcbiAgfTtcbn07XG5cbi8qKlxuICogcmVtb3ZlIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gc3RhdGUuZWZmZWN0cy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzdGF0ZS5lZmZlY3RzLmxlbmd0aCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCByZW1vdmUgZWZmZWN0IHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtlZmZlY3RzLCBlZmZlY3RPcmRlcn0gPSBzdGF0ZTtcbiAgY29uc3QgZWZmZWN0VG9SZW1vdmUgPSBlZmZlY3RzW2lkeF07XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBmaXhlZCBpbiB0c1xuICAgIGVmZmVjdHM6IGZpbHRlck91dEJ5SWQoZWZmZWN0VG9SZW1vdmUuaWQpKGVmZmVjdHMpLFxuICAgIGVmZmVjdE9yZGVyOiBlZmZlY3RPcmRlci5maWx0ZXIoZWZmZWN0SWQgPT4gZWZmZWN0SWQgIT09IGVmZmVjdFRvUmVtb3ZlLmlkKVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW9yZGVyIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlb3JkZXJFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvcmRlcn06IFZpc1N0YXRlQWN0aW9ucy5SZW9yZGVyRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGVmZmVjdE9yZGVyOiBmaXhFZmZlY3RPcmRlcihzdGF0ZS5lZmZlY3RzLCBbLi4ub3JkZXJdKVxufSk7XG5cbi8qKlxuICogVXBkYXRlIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBwcm9wc306IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmVmZmVjdHMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUuZWZmZWN0cy5sZW5ndGgpIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgdXBkYXRlIGVmZmVjdCB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgZWZmZWN0T3JkZXIgPSBzdGF0ZS5lZmZlY3RPcmRlcjtcbiAgaWYgKHByb3BzLmlkICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuaWQgIT09IGlkKSB7XG4gICAgY29uc3QgaWR4MiA9IHN0YXRlLmVmZmVjdHMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gcHJvcHMuaWQpO1xuICAgIGlmIChpZHgyID49IDApIHtcbiAgICAgIENvbnNvbGUud2FybihgY2FuIG5vdCB1cGRhdGUgZWZmZWN0IHdpdGggZXhpc3RpbmcgZWZmZWN0IGlkICR7aWR9YCk7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgZWZmZWN0T3JkZXIgPSBlZmZlY3RPcmRlci5tYXAoZWZmZWN0T3JkZXJJZCA9PlxuICAgICAgZWZmZWN0T3JkZXJJZCA9PT0gaWQgPyAocHJvcHMuaWQgYXMgc3RyaW5nKSA6IGVmZmVjdE9yZGVySWRcbiAgICApO1xuICB9XG5cbiAgY29uc3QgbmV3RWZmZWN0cyA9IFsuLi5zdGF0ZS5lZmZlY3RzXTtcbiAgbmV3RWZmZWN0c1tpZHhdLnNldFByb3BzKHByb3BzKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVmZmVjdHM6IG5ld0VmZmVjdHMsXG4gICAgZWZmZWN0T3JkZXJcbiAgfTtcbn07XG5cbi8vIEFOTk9UQVRJT04gVVBEQVRFUlNcblxuZnVuY3Rpb24gbWFrZU5ld0Fubm90YXRpb24oY29uZmlnPzogQW5ub3RhdGlvblByb3BzUGFydGlhbCk6IEFubm90YXRpb24ge1xuICBjb25zdCBraW5kID0gY29uZmlnPy5raW5kID8/IElOSVRJQUxfQU5OT1RBVElPTl9LSU5EO1xuICBjb25zdCBiYXNlID0ge1xuICAgIGlkOiBjb25maWc/LmlkID8/IGdlbmVyYXRlSGFzaElkKDYpLFxuICAgIGtpbmQsXG4gICAgaXNWaXNpYmxlOiBjb25maWc/LmlzVmlzaWJsZSA/PyB0cnVlLFxuICAgIGF1dG9TaXplOiBjb25maWc/LmF1dG9TaXplID8/IHRydWUsXG4gICAgYXV0b1NpemVZOiBjb25maWc/LmF1dG9TaXplWSA/PyB0cnVlLFxuICAgIGFuY2hvclBvaW50OiBjb25maWc/LmFuY2hvclBvaW50ID8/IChbMCwgMF0gYXMgW251bWJlciwgbnVtYmVyXSksXG4gICAgbGFiZWw6IGNvbmZpZz8ubGFiZWwgPz8gJ05ldyBBbm5vdGF0aW9uJyxcbiAgICBsaW5lQ29sb3I6IGNvbmZpZz8ubGluZUNvbG9yID8/IElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SLFxuICAgIGxpbmVXaWR0aDogY29uZmlnPy5saW5lV2lkdGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgsXG4gICAgdGV4dFdpZHRoOiBjb25maWc/LnRleHRXaWR0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9XSURUSCxcbiAgICB0ZXh0SGVpZ2h0OiBjb25maWc/LnRleHRIZWlnaHQgPz8gSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfSEVJR0hULFxuICAgIHRleHRWZXJ0aWNhbEFsaWduOiBjb25maWc/LnRleHRWZXJ0aWNhbEFsaWduID8/ICgnYm90dG9tJyBhcyBjb25zdCksXG4gICAgbWFwSW5kZXg6IGNvbmZpZz8ubWFwSW5kZXhcbiAgfTtcblxuICBzd2l0Y2ggKGtpbmQpIHtcbiAgICBjYXNlIEFubm90YXRpb25LaW5kLlBPSU5UOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAga2luZDogQW5ub3RhdGlvbktpbmQuUE9JTlQsXG4gICAgICAgIGFybUxlbmd0aDogKGNvbmZpZyBhcyBhbnkpPy5hcm1MZW5ndGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgsXG4gICAgICAgIGFuZ2xlOiAoY29uZmlnIGFzIGFueSk/LmFuZ2xlID8/IElOSVRJQUxfQU5OT1RBVElPTl9BTkdMRVxuICAgICAgfTtcbiAgICBjYXNlIEFubm90YXRpb25LaW5kLkFSUk9XOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAga2luZDogQW5ub3RhdGlvbktpbmQuQVJST1csXG4gICAgICAgIGFybUxlbmd0aDogKGNvbmZpZyBhcyBhbnkpPy5hcm1MZW5ndGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgsXG4gICAgICAgIGFuZ2xlOiAoY29uZmlnIGFzIGFueSk/LmFuZ2xlID8/IElOSVRJQUxfQU5OT1RBVElPTl9BTkdMRVxuICAgICAgfTtcbiAgICBjYXNlIEFubm90YXRpb25LaW5kLkNJUkNMRTpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIGtpbmQ6IEFubm90YXRpb25LaW5kLkNJUkNMRSxcbiAgICAgICAgYXJtTGVuZ3RoOiAoY29uZmlnIGFzIGFueSk/LmFybUxlbmd0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCxcbiAgICAgICAgYW5nbGU6IChjb25maWcgYXMgYW55KT8uYW5nbGUgPz8gSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFLFxuICAgICAgICByYWRpdXNJbk1ldGVyczogKGNvbmZpZyBhcyBhbnkpPy5yYWRpdXNJbk1ldGVycyA/PyAxMDAwXG4gICAgICB9O1xuICAgIGNhc2UgQW5ub3RhdGlvbktpbmQuVEVYVDpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAga2luZDogQW5ub3RhdGlvbktpbmQuVEVYVFxuICAgICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEFkZCBhIG5ldyBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgbmV3QW5ub3RhdGlvbiA9IG1ha2VOZXdBbm5vdGF0aW9uKGFjdGlvbi5jb25maWcpO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBbbmV3QW5ub3RhdGlvbiwgLi4uc3RhdGUuYW5ub3RhdGlvbnNdLFxuICAgIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBuZXdBbm5vdGF0aW9uLmlkLFxuICAgIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OiB0cnVlXG4gIH07XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbiBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IHN0YXRlLmFubm90YXRpb25zLmZpbHRlcihhID0+IGEuaWQgIT09IGlkKSxcbiAgICBzZWxlY3RlZEFubm90YXRpb25JZDogc3RhdGUuc2VsZWN0ZWRBbm5vdGF0aW9uSWQgPT09IGlkID8gbnVsbCA6IHN0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkLFxuICAgIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OlxuICAgICAgc3RhdGUuc2VsZWN0ZWRBbm5vdGF0aW9uSWQgPT09IGlkID8gZmFsc2UgOiBzdGF0ZS5pc0VkaXRpbmdBbm5vdGF0aW9uVGV4dFxuICB9O1xufTtcblxuLyoqXG4gKiBVcGRhdGUgYW4gYW5ub3RhdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZCwgY29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmFubm90YXRpb25zLmZpbmRJbmRleChhID0+IGEuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDApIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgdXBkYXRlIGFubm90YXRpb24gd2l0aCBpbnZhbGlkIGlkICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHByZXYgPSBzdGF0ZS5hbm5vdGF0aW9uc1tpZHhdO1xuICBsZXQgbmV4dEFubm90YXRpb246IEFubm90YXRpb247XG5cbiAgaWYgKGNvbmZpZy5raW5kICYmIGNvbmZpZy5raW5kICE9PSBwcmV2LmtpbmQpIHtcbiAgICBuZXh0QW5ub3RhdGlvbiA9IG1ha2VOZXdBbm5vdGF0aW9uKHsuLi5wcmV2LCAuLi5jb25maWd9IGFzIEFubm90YXRpb25Qcm9wc1BhcnRpYWwpO1xuICB9IGVsc2Uge1xuICAgIG5leHRBbm5vdGF0aW9uID0gey4uLnByZXYsIC4uLmNvbmZpZ30gYXMgQW5ub3RhdGlvbjtcbiAgfVxuXG4gIGNvbnN0IG5ld0Fubm90YXRpb25zID0gWy4uLnN0YXRlLmFubm90YXRpb25zXTtcbiAgbmV3QW5ub3RhdGlvbnNbaWR4XSA9IG5leHRBbm5vdGF0aW9uO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBuZXdBbm5vdGF0aW9uc1xuICB9O1xufTtcblxuLyoqXG4gKiBEdXBsaWNhdGUgYW4gYW5ub3RhdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGR1cGxpY2F0ZUFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5EdXBsaWNhdGVBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBvcmlnaW5hbCA9IHN0YXRlLmFubm90YXRpb25zLmZpbmQoYSA9PiBhLmlkID09PSBpZCk7XG4gIGlmICghb3JpZ2luYWwpIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgZHVwbGljYXRlIGFubm90YXRpb24gd2l0aCBpbnZhbGlkIGlkICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5ld0Fubm90YXRpb24gPSB7XG4gICAgLi4uY2xvbmVEZWVwKG9yaWdpbmFsKSxcbiAgICBpZDogZ2VuZXJhdGVIYXNoSWQoNiksXG4gICAgbGFiZWw6IGBDb3B5IG9mICR7b3JpZ2luYWwubGFiZWx9YFxuICB9O1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBbbmV3QW5ub3RhdGlvbiwgLi4uc3RhdGUuYW5ub3RhdGlvbnNdLFxuICAgIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBuZXdBbm5vdGF0aW9uLmlkLFxuICAgIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OiBmYWxzZVxuICB9O1xufTtcblxuLyoqXG4gKiBTZXQgc2VsZWN0ZWQgYW5ub3RhdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldFNlbGVjdGVkQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBpc0VkaXRpbmdUZXh0fTogVmlzU3RhdGVBY3Rpb25zLlNldFNlbGVjdGVkQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKFxuICAgIGlkID09PSBzdGF0ZS5zZWxlY3RlZEFubm90YXRpb25JZCAmJlxuICAgIChpc0VkaXRpbmdUZXh0ID8/IGZhbHNlKSA9PT0gc3RhdGUuaXNFZGl0aW5nQW5ub3RhdGlvblRleHRcbiAgKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IGlkLFxuICAgIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OiBpc0VkaXRpbmdUZXh0ID8/IGZhbHNlXG4gIH07XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGRhdGFzZXQgYW5kIGFsbCBsYXllcnMsIGZpbHRlcnMsIHRvb2x0aXAgY29uZmlncyB0aGF0IGJhc2VkIG9uIGl0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRGF0YXNldFVwZGF0ZXI8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBUIHtcbiAgLy8gZXh0cmFjdCBkYXRhc2V0IGtleVxuICBjb25zdCB7ZGF0YUlkOiBkYXRhc2V0S2V5fSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuXG4gIC8vIGNoZWNrIGlmIGRhdGFzZXQgaXMgcHJlc2VudFxuICBpZiAoIWRhdGFzZXRzW2RhdGFzZXRLZXldKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGxheWVycyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgZGF0YXNldHM6IHtbZGF0YXNldEtleV06IGRhdGFzZXQsIC4uLm5ld0RhdGFzZXRzfVxuICB9ID0gc3RhdGU7XG5cbiAgY29uc3QgbGF5ZXJzVG9SZW1vdmUgPSBsYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkID09PSBkYXRhc2V0S2V5KS5tYXAobCA9PiBsLmlkKTtcblxuICAvLyByZW1vdmUgbGF5ZXJzIGFuZCBkYXRhc2V0c1xuICBsZXQgbmV3U3RhdGUgPSBsYXllcnNUb1JlbW92ZS5yZWR1Y2UoKGFjY3UsIGlkKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkfSksIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogbmV3RGF0YXNldHNcbiAgfSk7XG5cbiAgLy8gdXBkYXRlIGZpbHRlcnNcbiAgY29uc3QgZmlsdGVyczogRmlsdGVyW10gPSBbXTtcbiAgZm9yIChjb25zdCBmaWx0ZXIgb2YgbmV3U3RhdGUuZmlsdGVycykge1xuICAgIGNvbnN0IHZhbHVlSW5kZXggPSBmaWx0ZXIuZGF0YUlkLmluZGV4T2YoZGF0YXNldEtleSk7XG4gICAgaWYgKHZhbHVlSW5kZXggPj0gMCAmJiBmaWx0ZXIuZGF0YUlkLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIG9ubHkgcmVtb3ZlIG9uZSBzeW5jZWQgZGF0YXNldCBmcm9tIHRoZSBmaWx0ZXJcbiAgICAgIGZpbHRlcnMucHVzaChfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgZGF0YXNldHMpKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlSW5kZXggPCAwKSB7XG4gICAgICAvLyBsZWF2ZSB0aGUgZmlsdGVyIGFzIGlzXG4gICAgICBmaWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICBuZXdTdGF0ZSA9IHsuLi5uZXdTdGF0ZSwgZmlsdGVyc307XG5cbiAgcmV0dXJuIHJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWcobmV3U3RhdGUsIHtkYXRhSWQ6IGRhdGFzZXRLZXl9KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlRGF0YXNldEZyb21JbnRlcmFjdGlvbkNvbmZpZyhzdGF0ZSwge2RhdGFJZH0pIHtcbiAgbGV0IHtpbnRlcmFjdGlvbkNvbmZpZ30gPSBzdGF0ZTtcbiAgY29uc3Qge3Rvb2x0aXB9ID0gaW50ZXJhY3Rpb25Db25maWc7XG4gIGlmICh0b29sdGlwKSB7XG4gICAgY29uc3Qge2NvbmZpZ30gPSB0b29sdGlwO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBjb25zdCB7W2RhdGFJZF06IGZpZWxkcywgLi4uZmllbGRzVG9TaG93fSA9IGNvbmZpZy5maWVsZHNUb1Nob3c7XG4gICAgaW50ZXJhY3Rpb25Db25maWcgPSB7XG4gICAgICAuLi5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIHRvb2x0aXA6IHsuLi50b29sdGlwLCBjb25maWc6IHsuLi5jb25maWcsIGZpZWxkc1RvU2hvd319XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7Li4uc3RhdGUsIGludGVyYWN0aW9uQ29uZmlnfTtcbn1cbi8qKlxuICogdXBkYXRlIGxheWVyIGJsZW5kaW5nIG1vZGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckJsZW5kaW5nVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVMYXllckJsZW5kaW5nVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGxheWVyQmxlbmRpbmc6IGFjdGlvbi5tb2RlXG59KTtcblxuLyoqXG4gKiB1cGRhdGUgb3ZlcmxheSBibGVuZGluZyBtb2RlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVPdmVybGF5QmxlbmRpbmdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgb3ZlcmxheUJsZW5kaW5nOiBhY3Rpb24ubW9kZVxufSk7XG5cbi8qKlxuICogRGlzcGxheSBkYXRhc2V0IHRhYmxlIGluIGEgbW9kYWxcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzaG93RGF0YXNldFRhYmxlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TaG93RGF0YXNldFRhYmxlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRpbmdEYXRhc2V0OiBhY3Rpb24uZGF0YUlkXG4gIH07XG59O1xuXG4vKipcbiAqIEFkZCBjdXN0b20gY29sb3IgZm9yIGRhdGFzZXRzIGFuZCBsYXllcnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVUYWJsZUNvbG9yVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVEYXRhc2V0Q29sb3JVcGRhdGVyXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyKHN0YXRlLCB7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBwcm9wczoge2NvbG9yOiBhY3Rpb24ubmV3Q29sb3J9fSk7XG59O1xuXG4vKipcbiAqIHJlc2V0IHZpc1N0YXRlIHRvIGluaXRpYWwgU3RhdGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZXNldE1hcENvbmZpZ1VwZGF0ZXIgPSAoc3RhdGU6IFZpc1N0YXRlKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uSU5JVElBTF9WSVNfU1RBVEUsXG4gIC4uLnN0YXRlLmluaXRpYWxTdGF0ZSxcbiAgaW5pdGlhbFN0YXRlOiBzdGF0ZS5pbml0aWFsU3RhdGVcbn0pO1xuXG4vKipcbiAqIFByb3BhZ2F0ZSBgdmlzU3RhdGVgIHJlZHVjZXIgd2l0aCBhIG5ldyBjb25maWd1cmF0aW9uLiBDdXJyZW50IGNvbmZpZyB3aWxsIGJlIG92ZXJyaWRlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlY2VpdmVNYXBDb25maWdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtcbiAgICBwYXlsb2FkOiB7Y29uZmlnID0ge30sIG9wdGlvbnMgPSB7fX1cbiAgfToge1xuICAgIHR5cGU/OiB0eXBlb2YgQWN0aW9uVHlwZXMuUkVDRUlWRV9NQVBfQ09ORklHO1xuICAgIHBheWxvYWQ6IFJlY2VpdmVNYXBDb25maWdQYXlsb2FkO1xuICB9XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmICghY29uZmlnLnZpc1N0YXRlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2tlZXBFeGlzdGluZ0NvbmZpZ30gPSBvcHRpb25zO1xuXG4gIC8vIHJlc2V0IGNvbmZpZyBpZiBrZWVwRXhpc3RpbmdDb25maWcgaXMgZmFsc3lcbiAgbGV0IG1lcmdlZFN0YXRlID0gIWtlZXBFeGlzdGluZ0NvbmZpZyA/IHJlc2V0TWFwQ29uZmlnVXBkYXRlcihzdGF0ZSkgOiBzdGF0ZTtcbiAgZm9yIChjb25zdCBtZXJnZXIgb2Ygc3RhdGUubWVyZ2Vycykge1xuICAgIGlmIChpc1ZhbGlkTWVyZ2VyKG1lcmdlcikgJiYgaGFzUHJvcHNUb01lcmdlKGNvbmZpZy52aXNTdGF0ZSwgbWVyZ2VyLnByb3ApKSB7XG4gICAgICBtZXJnZWRTdGF0ZSA9IG1lcmdlci5tZXJnZShcbiAgICAgICAgbWVyZ2VkU3RhdGUsXG4gICAgICAgIGdldFByb3BWYWx1ZVRvTWVyZ2VyKGNvbmZpZy52aXNTdGF0ZSwgbWVyZ2VyLnByb3AsIG1lcmdlci50b01lcmdlUHJvcCksXG4gICAgICAgIC8vIGZyb21Db25maWdcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWVyZ2VkU3RhdGU7XG59O1xuXG4vKipcbiAqIFRyaWdnZXIgbGF5ZXIgaG92ZXIgZXZlbnQgd2l0aCBob3ZlcmVkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxheWVySG92ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLk9uTGF5ZXJIb3ZlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBob3ZlckluZm86IHtcbiAgICAvLyBkZWNrLmdsIGluZm8gaXMgbXV0YWJsZVxuICAgIC4uLmFjdGlvbi5pbmZvLFxuICAgIC4uLihOdW1iZXIuaXNGaW5pdGUoYWN0aW9uLm1hcEluZGV4KSA/IHttYXBJbmRleDogYWN0aW9uLm1hcEluZGV4fSA6IHt9KVxuICB9XG59KTtcblxuLyogZXNsaW50LWVuYWJsZSBtYXgtc3RhdGVtZW50cyAqL1xuXG4vKipcbiAqIFVwZGF0ZSBgaW50ZXJhY3Rpb25Db25maWdgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7Y29uZmlnfSA9IGFjdGlvbjtcblxuICBjb25zdCBpbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAuLi57W2NvbmZpZy5pZF06IGNvbmZpZ31cbiAgfTtcblxuICAvLyBEb24ndCBlbmFibGUgdG9vbHRpcCBhbmQgYnJ1c2ggYXQgdGhlIHNhbWUgdGltZVxuICAvLyBidXQgY29vcmRpbmF0ZXMgY2FuIGJlIHNob3duIGF0IGFsbCB0aW1lXG4gIGNvbnN0IGNvbnRyYWRpY3QgPSBbJ2JydXNoJywgJ3Rvb2x0aXAnXTtcblxuICBpZiAoXG4gICAgY29udHJhZGljdC5pbmNsdWRlcyhjb25maWcuaWQpICYmXG4gICAgY29uZmlnLmVuYWJsZWQgJiZcbiAgICAhc3RhdGUuaW50ZXJhY3Rpb25Db25maWdbY29uZmlnLmlkXS5lbmFibGVkXG4gICkge1xuICAgIC8vIG9ubHkgZW5hYmxlIG9uZSBpbnRlcmFjdGlvbiBhdCBhIHRpbWVcbiAgICBjb250cmFkaWN0LmZvckVhY2goayA9PiB7XG4gICAgICBpZiAoayAhPT0gY29uZmlnLmlkKSB7XG4gICAgICAgIGludGVyYWN0aW9uQ29uZmlnW2tdID0gey4uLmludGVyYWN0aW9uQ29uZmlnW2tdLCBlbmFibGVkOiBmYWxzZX07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZ1xuICB9O1xuXG4gIGlmIChjb25maWcuaWQgPT09ICdnZW9jb2RlcicgJiYgIWNvbmZpZy5lbmFibGVkKSB7XG4gICAgcmV0dXJuIHJlbW92ZURhdGFzZXRVcGRhdGVyKG5ld1N0YXRlLCB7ZGF0YUlkOiAnZ2VvY29kZXJfZGF0YXNldCd9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBUcmlnZ2VyIGxheWVyIGNsaWNrIGV2ZW50IHdpdGggY2xpY2tlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckNsaWNrVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5PbkxheWVyQ2xpY2tVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbW91c2VQb3M6IHN0YXRlLmludGVyYWN0aW9uQ29uZmlnLmNvb3JkaW5hdGUuZW5hYmxlZFxuICAgID8ge1xuICAgICAgICAuLi5zdGF0ZS5tb3VzZVBvcyxcbiAgICAgICAgcGlubmVkOiBzdGF0ZS5tb3VzZVBvcy5waW5uZWQgPyBudWxsIDogY2xvbmVEZWVwKHN0YXRlLm1vdXNlUG9zKVxuICAgICAgfVxuICAgIDogc3RhdGUubW91c2VQb3MsXG4gIGNsaWNrZWQ6IGFjdGlvbi5pbmZvICYmIGFjdGlvbi5pbmZvLnBpY2tlZCA/IGFjdGlvbi5pbmZvIDogbnVsbFxufSk7XG5cbi8qKlxuICogVHJpZ2dlciBtYXAgY2xpY2sgZXZlbnQsIHVuc2VsZWN0IGNsaWNrZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbWFwQ2xpY2tVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuT25NYXBDbGlja1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjbGlja2VkOiBudWxsXG4gIH07XG59O1xuXG4vKipcbiAqIFRyaWdnZXIgbWFwIG1vdmUgZXZlbnRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBtb3VzZU1vdmVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtldnR9OiBWaXNTdGF0ZUFjdGlvbnMuT25Nb3VzZU1vdmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmIChPYmplY3QudmFsdWVzKHN0YXRlLmludGVyYWN0aW9uQ29uZmlnKS5zb21lKGNvbmZpZyA9PiBjb25maWcuZW5hYmxlZCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBtb3VzZVBvczoge1xuICAgICAgICAuLi5zdGF0ZS5tb3VzZVBvcyxcbiAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkoZXZ0LnBvaW50KSA/IHttb3VzZVBvc2l0aW9uOiBbLi4uZXZ0LnBvaW50XX0gOiB7fSksXG4gICAgICAgIC4uLihBcnJheS5pc0FycmF5KGV2dC5sbmdMYXQpID8ge2Nvb3JkaW5hdGU6IFsuLi5ldnQubG5nTGF0XX0gOiB7fSlcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufTtcbi8qKlxuICogVG9nZ2xlIHZpc2liaWxpdHkgb2YgYSBsYXllciBmb3IgYSBzcGxpdCBtYXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVTcGxpdE1hcFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBNYXBTdGF0ZUFjdGlvbnMuVG9nZ2xlU3BsaXRNYXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PlxuICBzdGF0ZS5zcGxpdE1hcHMgJiYgc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCA9PT0gMFxuICAgID8ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgLy8gbWF5YmUgd2Ugc2hvdWxkIHVzZSBhbiBhcnJheSB0byBzdG9yZSBzdGF0ZSBmb3IgYSBzaW5nbGUgbWFwIGFzIHdlbGxcbiAgICAgICAgLy8gaWYgY3VycmVudCBtYXBzIGxlbmd0aCBpcyBlcXVhbCB0byAwIGl0IG1lYW5zIHRoYXQgd2UgYXJlIGFib3V0IHRvIHNwbGl0IHRoZSB2aWV3XG4gICAgICAgIHNwbGl0TWFwczogY29tcHV0ZVNwbGl0TWFwTGF5ZXJzKHN0YXRlLmxheWVycywge2R1cGxpY2F0ZTogZmFsc2V9KVxuICAgICAgfVxuICAgIDogY2xvc2VTcGVjaWZpY01hcEF0SW5kZXgoc3RhdGUsIGFjdGlvbik7XG5cbi8qKlxuICogVG9nZ2xlIHZpc2liaWxpdHkgb2YgYSBsYXllciBpbiBhIHNwbGl0IG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7bWFwSW5kZXgsIGxheWVySWR9OiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtzcGxpdE1hcHN9ID0gc3RhdGU7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBzcGxpdE1hcHM6IHNwbGl0TWFwcy5tYXAoKHNtLCBpKSA9PlxuICAgICAgaSA9PT0gbWFwSW5kZXhcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5zcGxpdE1hcHNbaV0sXG4gICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgLi4uc3BsaXRNYXBzW2ldLmxheWVycyxcbiAgICAgICAgICAgICAgLy8gaWYgbGF5ZXJJZCBub3QgaW4gbGF5ZXJzLCBzZXQgaXQgdG8gdmlzaWJsZVxuICAgICAgICAgICAgICBbbGF5ZXJJZF06ICFzcGxpdE1hcHNbaV0ubGF5ZXJzW2xheWVySWRdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA6IHNtXG4gICAgKVxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgbmV3IGRhdGFzZXQgdG8gYHZpc1N0YXRlYCwgd2l0aCBvcHRpb24gdG8gbG9hZCBhIG1hcCBjb25maWcgYWxvbmcgd2l0aCB0aGUgZGF0YXNldHNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgY29uc3QgdXBkYXRlVmlzRGF0YVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlVmlzRGF0YVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gZGF0YXNldHMgY2FuIGJlIGEgc2luZ2xlIGRhdGEgZW50cmllcyBvciBhbiBhcnJheSBvZiBtdWx0aXBsZSBkYXRhIGVudHJpZXNcbiAgY29uc3Qge2NvbmZpZywgb3B0aW9uc30gPSBhY3Rpb247XG5cbiAgLy8gYXBwbHkgY29uZmlnIGlmIHBhc3NlZCBmcm9tIGFjdGlvblxuICAvLyBUT0RPOiB3ZSBkb24ndCBoYW5kbGUgYXN5bmMgbWVyZ2VycyBoZXJlIHlldFxuICBsZXQgdXBkYXRlZFN0YXRlID0gY29uZmlnXG4gICAgPyByZWNlaXZlTWFwQ29uZmlnVXBkYXRlcihzdGF0ZSwge1xuICAgICAgICBwYXlsb2FkOiB7Y29uZmlnLCBvcHRpb25zfVxuICAgICAgfSlcbiAgICA6IHN0YXRlO1xuXG4gIGNvbnN0IGRhdGFzZXRzID0gdG9BcnJheShhY3Rpb24uZGF0YXNldHMpO1xuICBpZiAoIWRhdGFzZXRzLmxlbmd0aCkge1xuICAgIHJldHVybiB1cGRhdGVkU3RhdGU7XG4gIH1cblxuICBjb25zdCBjcmVhdGVEYXRhc2V0VGFza3M6IFRhc2tbXSA9IFtdO1xuICBjb25zdCBub3RpZmljYXRpb25UYXNrczogVGFza1tdID0gW107XG5cbiAgZGF0YXNldHMuZm9yRWFjaCgoe2luZm8gPSB7fSwgLi4ucmVzdH0sIGRhdGFzZXRJbmRleCkgPT4ge1xuICAgIGNvbnN0IHRhc2sgPSBjcmVhdGVOZXdEYXRhRW50cnkoe2luZm8sIC4uLnJlc3R9LCBzdGF0ZS5kYXRhc2V0cyk7XG4gICAgaWYgKHRhc2spIHtcbiAgICAgIGNyZWF0ZURhdGFzZXRUYXNrcy5wdXNoKHRhc2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBub3RpZmljYXRpb25UYXNrcy5wdXNoKFxuICAgICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhc2V0IGR1ZSB0byBkYXRhIHZlcmlmaWNhdGlvbiBlcnJvcnNgLFxuICAgICAgICAgICAgICBpZDogYGRhdGFzZXQtZmFpbGVkLSR7ZGF0YXNldEluZGV4fWBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgZGF0YXNldHNBbGxTZXR0bGVkVGFzayA9IGNyZWF0ZURhdGFzZXRUYXNrcy5sZW5ndGhcbiAgICA/IFRhc2suYWxsU2V0dGxlZChjcmVhdGVEYXRhc2V0VGFza3MpLm1hcChyZXN1bHRzID0+XG4gICAgICAgIGNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzKHtyZXN1bHRzLCBhZGRUb01hcE9wdGlvbnM6IG9wdGlvbnN9KVxuICAgICAgKVxuICAgIDogbnVsbDtcblxuICBpZiAoZGF0YXNldHNBbGxTZXR0bGVkVGFzaykge1xuICAgIHVwZGF0ZWRTdGF0ZSA9IHNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyKHVwZGF0ZWRTdGF0ZSwgcGF5bG9hZF8oe2NoYW5nZTogMSwgdHlwZTogJyd9KSk7XG4gIH1cblxuICByZXR1cm4gd2l0aFRhc2sodXBkYXRlZFN0YXRlLCBbXG4gICAgLi4uKGRhdGFzZXRzQWxsU2V0dGxlZFRhc2sgPyBbZGF0YXNldHNBbGxTZXR0bGVkVGFza10gOiBbXSksXG4gICAgLi4ubm90aWZpY2F0aW9uVGFza3NcbiAgXSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxDcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1BheWxvYWQ+XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtyZXN1bHRzLCBhZGRUb01hcE9wdGlvbnN9ID0gYWN0aW9uLnBheWxvYWQ7XG4gIGNvbnN0IG5vdGlmaWNhdGlvblRhc2tzOiBUYXNrW10gPSBbXTtcblxuICBjb25zdCBuZXdEYXRhRW50cmllcyA9IHJlc3VsdHMucmVkdWNlKChhY2N1LCByZXN1bHQsIGlkeCkgPT4ge1xuICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAnZnVsZmlsbGVkJykge1xuICAgICAgY29uc3QgZGF0YXNldCA9IHJlc3VsdC52YWx1ZTtcbiAgICAgIHJldHVybiB7Li4uYWNjdSwgW2RhdGFzZXQuaWRdOiBkYXRhc2V0fTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gc2hvdyBlcnJvciBub3RpZmljYXRpb24gb24gVUlcbiAgICAgIG5vdGlmaWNhdGlvblRhc2tzLnB1c2goXG4gICAgICAgIEFDVElPTl9UQVNLKCkubWFwKCgpID0+XG4gICAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgICBtZXNzYWdlOiBgRGF0YXNldCBlcnJvcjogRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhc2V0OlxuICAgICAgICAgICAgICAke3Jlc3VsdC5yZWFzb24gfHwgKHJlc3VsdCBhcyBhbnkpLnZhbHVlfWAsXG4gICAgICAgICAgICAgIGlkOiBgZGF0YXNldC1jcmVhdGUtZmFpbGVkLSR7aWR4fWBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFjY3U7XG4gICAgfVxuICB9LCB7fSBhcyBEYXRhc2V0cyk7XG4gIC8vIHNhdmUgbmV3IGRhdGFzZXQgZW50cnkgdG8gc3RhdGVcbiAgY29uc3QgbWVyZ2VkU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IG1lcmdlRGF0YXNldHNCeU9yZGVyKHN0YXRlLCBuZXdEYXRhRW50cmllcylcbiAgfTtcblxuICAvLyBtZXJnZSBzdGF0ZSB3aXRoIGNvbmZpZyB0byBiZSBtZXJnZWRcbiAgY29uc3QgbGF5ZXJNZXJnZXJzID0gc3RhdGUubWVyZ2Vycy5maWx0ZXIobSA9PiBtLndhaXRGb3JMYXllckRhdGEpO1xuICBjb25zdCBkYXRhc2V0TWVyZ2VycyA9IHN0YXRlLm1lcmdlcnMuZmlsdGVyKG0gPT4gIWxheWVyTWVyZ2Vycy5pbmNsdWRlcyhtKSk7XG5cbiAgY29uc3QgbmV3RGF0YUlkcyA9IE9iamVjdC5rZXlzKG5ld0RhdGFFbnRyaWVzKTtcbiAgY29uc3QgcG9zdE1lcmdlclBheWxvYWQgPSB7XG4gICAgbmV3RGF0YUlkcyxcbiAgICBvcHRpb25zOiBhZGRUb01hcE9wdGlvbnMsXG4gICAgbGF5ZXJNZXJnZXJzXG4gIH07XG5cbiAgY29uc3QgdXBkYXRlZFN0YXRlID0gYXBwbHlNZXJnZXJzVXBkYXRlcihtZXJnZWRTdGF0ZSwge1xuICAgIG1lcmdlcnM6IGRhdGFzZXRNZXJnZXJzLFxuICAgIHBvc3RNZXJnZXJQYXlsb2FkXG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlcih1cGRhdGVkU3RhdGUsIHBheWxvYWRfKHtjaGFuZ2U6IC0xfSkpLFxuICAgIG5vdGlmaWNhdGlvblRhc2tzXG4gICk7XG59O1xuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlNZXJnZXJzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IHtcbiAgICBtZXJnZXJzOiBNZXJnZXI8YW55PltdO1xuICAgIHBvc3RNZXJnZXJQYXlsb2FkOiBQb3N0TWVyZ2VyUGF5bG9hZDtcbiAgfVxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bWVyZ2VycywgcG9zdE1lcmdlclBheWxvYWR9ID0gYWN0aW9uO1xuXG4gIC8vIG1lcmdlIHN0YXRlIHdpdGggY29uZmlnIHRvIGJlIG1lcmdlZFxuICBjb25zdCBtZXJnZVN0YXRlUmVzdWx0ID0gbWVyZ2VTdGF0ZUZyb21NZXJnZXJzKFxuICAgIHN0YXRlLFxuICAgIHtcbiAgICAgIC4uLklOSVRJQUxfVklTX1NUQVRFLFxuICAgICAgLi4uc3RhdGUuaW5pdGlhbFN0YXRlXG4gICAgfSxcbiAgICBtZXJnZXJzLFxuICAgIC8vIG5ld0RhdGFJZHMsXG4gICAgcG9zdE1lcmdlclBheWxvYWRcbiAgKTtcblxuICAvLyBpZiBhbGwgbWVyZ2VkLCBraWNrdXAgcG9zdCBtZXJnZSBwcm9jZXNzXG4gIC8vIGlmIG5vdCB3YWl0XG4gIHJldHVybiBtZXJnZVN0YXRlUmVzdWx0LmFsbE1lcmdlZFxuICAgID8gcG9zdE1lcmdlVXBkYXRlcihtZXJnZVN0YXRlUmVzdWx0Lm1lcmdlZFN0YXRlLCBwb3N0TWVyZ2VyUGF5bG9hZClcbiAgICA6IG1lcmdlU3RhdGVSZXN1bHQubWVyZ2VkU3RhdGU7XG59XG5cbi8qKiBSZWFkcyBgb3B0aW9ucy5sYXllclZpc0NvbmZpZ2AgZnJvbSBhZGQtZGF0YS10by1tYXAgKHNlZSBgQWRkRGF0YVRvTWFwT3B0aW9uc2ApLiAqL1xuZnVuY3Rpb24gbGF5ZXJWaXNDb25maWdGcm9tQWRkRGF0YU9wdGlvbnMoXG4gIG9wdGlvbnM6IFBvc3RNZXJnZXJQYXlsb2FkWydvcHRpb25zJ10gfCB1bmRlZmluZWRcbik6IFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFvcHRpb25zIHx8ICEoJ2xheWVyVmlzQ29uZmlnJyBpbiBvcHRpb25zKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcGF0Y2ggPSAob3B0aW9ucyBhcyB7bGF5ZXJWaXNDb25maWc/OiB1bmtub3dufSkubGF5ZXJWaXNDb25maWc7XG4gIGlmIChwYXRjaCA9PSBudWxsIHx8IHR5cGVvZiBwYXRjaCAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShwYXRjaCkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBwYXRjaCBhcyBQYXJ0aWFsPExheWVyVmlzQ29uZmlnPjtcbn1cblxuLyoqXG4gKiBBZGQgbmV3IGRhdGFzZXQgdG8gYHZpc1N0YXRlYCwgd2l0aCBvcHRpb24gdG8gbG9hZCBhIG1hcCBjb25maWcgYWxvbmcgd2l0aCB0aGUgZGF0YXNldHNcbiAqL1xuZnVuY3Rpb24gcG9zdE1lcmdlVXBkYXRlcihtZXJnZWRTdGF0ZTogVmlzU3RhdGUsIHBvc3RNZXJnZXJQYXlsb2FkOiBQb3N0TWVyZ2VyUGF5bG9hZCk6IFZpc1N0YXRlIHtcbiAgY29uc3Qge25ld0RhdGFJZHMsIG9wdGlvbnMsIGxheWVyTWVyZ2Vyc30gPSBwb3N0TWVyZ2VyUGF5bG9hZDtcbiAgY29uc3QgbmV3RmlsdGVycyA9IG1lcmdlZFN0YXRlLmZpbHRlcnMuZmlsdGVyKGYgPT5cbiAgICBmLmRhdGFJZC5maW5kKGZEYXRhSWQgPT4gbmV3RGF0YUlkcy5pbmNsdWRlcyhmRGF0YUlkKSlcbiAgKTtcbiAgY29uc3QgZGF0YXNldEZpbHRlcmVkOiBzdHJpbmdbXSA9IHVuaXEoXG4gICAgbmV3RmlsdGVycy5yZWR1Y2UoKGFjY3UsIGYpID0+IFsuLi5hY2N1LCAuLi5mLmRhdGFJZF0sIFtdIGFzIHN0cmluZ1tdKVxuICApO1xuICBjb25zdCBkYXRhRW1wdHkgPSBuZXdEYXRhSWRzLmxlbmd0aCA8IDE7XG5cbiAgbGV0IG5ld0xheWVycyA9ICFkYXRhRW1wdHlcbiAgICA/IG1lcmdlZFN0YXRlLmxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5kYXRhSWQgJiYgbmV3RGF0YUlkcy5pbmNsdWRlcyhsLmNvbmZpZy5kYXRhSWQpKVxuICAgIDogW107XG5cbiAgY29uc3QgbmV3RGF0YUVudHJpZXMgPSBuZXdEYXRhSWRzLnJlZHVjZShcbiAgICAoYWNjdSwgaWQpID0+ICh7XG4gICAgICAuLi5hY2N1LFxuICAgICAgW2lkXTogbWVyZ2VkU3RhdGUuZGF0YXNldHNbaWRdXG4gICAgfSksXG4gICAge31cbiAgKTtcblxuICBpZiAoIW5ld0xheWVycy5sZW5ndGggJiYgKG9wdGlvbnMgfHwge30pLmF1dG9DcmVhdGVMYXllcnMgIT09IGZhbHNlKSB7XG4gICAgLy8gbm8gbGF5ZXIgbWVyZ2VkLCBmaW5kIGRlZmF1bHRzXG4gICAgY29uc3QgcmVzdWx0ID0gYWRkRGVmYXVsdExheWVycyhtZXJnZWRTdGF0ZSwgbmV3RGF0YUVudHJpZXMpO1xuICAgIG1lcmdlZFN0YXRlID0gcmVzdWx0LnN0YXRlO1xuICAgIG5ld0xheWVycyA9IHJlc3VsdC5uZXdMYXllcnM7XG4gIH1cblxuICBpZiAobWVyZ2VkU3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIC8vIGlmIG1hcCBpcyBzcGxpdCwgYWRkIG5ldyBsYXllcnMgdG8gc3BsaXRNYXBzXG4gICAgbmV3TGF5ZXJzID0gbWVyZ2VkU3RhdGUubGF5ZXJzLmZpbHRlcihcbiAgICAgIGwgPT4gbC5jb25maWcuZGF0YUlkICYmIG5ld0RhdGFJZHMuaW5jbHVkZXMobC5jb25maWcuZGF0YUlkKVxuICAgICk7XG4gICAgbWVyZ2VkU3RhdGUgPSB7XG4gICAgICAuLi5tZXJnZWRTdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcChtZXJnZWRTdGF0ZS5zcGxpdE1hcHMsIG5ld0xheWVycylcbiAgICB9O1xuICB9XG5cbiAgbWVyZ2VkU3RhdGUgPSBtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMoXG4gICAgbWVyZ2VkU3RhdGUsXG4gICAgbGF5ZXJWaXNDb25maWdGcm9tQWRkRGF0YU9wdGlvbnMob3B0aW9ucyksXG4gICAgbmV3RGF0YUlkc1xuICApO1xuXG4gIC8vIGlmIG5vIHRvb2x0aXBzIG1lcmdlZCBhZGQgZGVmYXVsdCB0b29sdGlwc1xuICBuZXdEYXRhSWRzLmZvckVhY2goZGF0YUlkID0+IHtcbiAgICBjb25zdCB0b29sdGlwRmllbGRzID0gbWVyZ2VkU3RhdGUuaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF07XG4gICAgLy8gbG9hZGluZyBkYXRhc2V0OiBhdXRvQ3JlYXRlVG9vbHRpcHMgaXMgZmFsc2UgYW5kIHdlIGRvbid0IHdhbnQgdG8gcnVuIGFkZERlZmF1bHRUb29sdGlwcyB3aGVuIHRvb2x0aXBGaWVsZHMgaXMgZW1wdHlcbiAgICBpZiAoXG4gICAgICBvcHRpb25zPy5hdXRvQ3JlYXRlVG9vbHRpcHMgIT09IGZhbHNlICYmXG4gICAgICAoIUFycmF5LmlzQXJyYXkodG9vbHRpcEZpZWxkcykgfHwgIXRvb2x0aXBGaWVsZHMubGVuZ3RoKVxuICAgICkge1xuICAgICAgLy8gYWRkaW5nIGRhdGFzZXQ6IGF1dG9DcmVhdGVUb29sdGlwcyBpcyB0cnVlXG4gICAgICBtZXJnZWRTdGF0ZSA9IGFkZERlZmF1bHRUb29sdGlwcyhtZXJnZWRTdGF0ZSwgbmV3RGF0YUVudHJpZXNbZGF0YUlkXSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCB1cGRhdGVkRGF0YXNldHMgPSBkYXRhRW1wdHlcbiAgICA/IE9iamVjdC5rZXlzKG1lcmdlZFN0YXRlLmRhdGFzZXRzKVxuICAgIDogdW5pcShPYmplY3Qua2V5cyhuZXdEYXRhRW50cmllcykuY29uY2F0KGRhdGFzZXRGaWx0ZXJlZCkpO1xuXG4gIGxldCB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobWVyZ2VkU3RhdGUsIHVwZGF0ZWREYXRhc2V0cywgdW5kZWZpbmVkKTtcblxuICAvLyByZWdpc3RlciBsYXllciBhbmltYXRpb24gZG9tYWluLFxuICAvLyBuZWVkIHRvIGJlIGNhbGxlZCBhZnRlciBsYXllciBkYXRhIGlzIGNhbGN1bGF0ZWRcbiAgdXBkYXRlZFN0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKHVwZGF0ZWRTdGF0ZSk7XG5cbiAgLy8gdHJ5IHRvIHByb2Nlc3MgbGF5ZXJNZXJnZXJzIGFmdGVyIGRhdGFzZXQrZGF0YXNldE1lcmdlcnNcbiAgdXBkYXRlZFN0YXRlID1cbiAgICBsYXllck1lcmdlcnMgJiYgbGF5ZXJNZXJnZXJzLmxlbmd0aCA+IDBcbiAgICAgID8gYXBwbHlNZXJnZXJzVXBkYXRlcih1cGRhdGVkU3RhdGUsIHtcbiAgICAgICAgICBtZXJnZXJzOiBsYXllck1lcmdlcnMsXG4gICAgICAgICAgcG9zdE1lcmdlclBheWxvYWQ6IHsuLi5wb3N0TWVyZ2VyUGF5bG9hZCwgbGF5ZXJNZXJnZXJzOiBbXX1cbiAgICAgICAgfSlcbiAgICAgIDogdXBkYXRlZFN0YXRlO1xuXG4gIC8vIGNlbnRlciB0aGUgbWFwIG9uY2UgdGhlIGRhdGFzZXQgaXMgY3JlYXRlZFxuICBpZiAobmV3TGF5ZXJzLmxlbmd0aCAmJiAob3B0aW9ucyB8fCB7fSkuY2VudGVyTWFwKSB7XG4gICAgY29uc3QgYm91bmRzID0gZmluZE1hcEJvdW5kcyhuZXdMYXllcnMpO1xuICAgIGlmIChib3VuZHMpIHtcbiAgICAgIGNvbnN0IHBhZGRpbmcgPSBvcHRpb25zPy5wYWRkaW5nO1xuICAgICAgY29uc3QgZml0Qm91bmRzVGFzayA9IEFDVElPTl9UQVNLX0ZJVF9CT1VORFMoKS5tYXAoKCkgPT4ge1xuICAgICAgICByZXR1cm4gZml0TWFwQm91bmRzKGJvdW5kcywgcGFkZGluZyk7XG4gICAgICB9KTtcbiAgICAgIHVwZGF0ZWRTdGF0ZSA9IHdpdGhUYXNrKHVwZGF0ZWRTdGF0ZSwgZml0Qm91bmRzVGFzayk7XG4gICAgfVxuICB9XG5cbiAgLy8gbmVlZCB0byBjZW50ZXIgbWFwIGhlcmUgaWYgd2UgaGF2ZSBuZXcgbGF5ZXJzXG4gIHJldHVybiB1cGRhdGVkU3RhdGU7XG59XG5cbi8qKlxuICogUmVuYW1lIGFuIGV4aXN0aW5nIGRhdGFzZXQgaW4gYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZURhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbmFtZURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiB1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyKHN0YXRlLCB7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBwcm9wczoge2xhYmVsOiBhY3Rpb24ubGFiZWx9fSk7XG59XG5cbmNvbnN0IEFMTE9XRURfVVBEQVRFX0RBVEFTRVRfUFJPUFMgPSBbJ2xhYmVsJywgJ2NvbG9yJywgJ21ldGFkYXRhJ107XG5cbi8qKlxuICogVmFsaWRhdGVzIHByb3BlcnRpZXMgYmVmb3JlIHVwZGF0aW5nIHRoZSBkYXRhc2V0LlxuICogTWFrZXMgc3VyZSBlYWNoIHByb3BlcnR5IGlzIGluIHRoZSBhbGxvd2VkIGxpc3RcbiAqIE1ha2VzIHN1cmUgY29sb3IgdmFsdWUgaXMgUkdCXG4gKiBQZXJmb3JtcyBkZWVwIG1lcmdlIHdoZW4gdXBkYXRpbmcgbWV0YWRhdGFcbiAqL1xuY29uc3QgdmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMgPSAocHJvcHMsIGRhdGFzZXQpID0+IHtcbiAgY29uc3QgdmFsaWRhdGVkUHJvcHMgPSBPYmplY3QuZW50cmllcyhwcm9wcykucmVkdWNlKChhY2MsIGVudHJ5KSA9PiB7XG4gICAgY29uc3QgW2tleSwgdmFsdWVdID0gZW50cnk7XG4gICAgLy8gaXMgaXQgYWxsb3dlZCA/XG4gICAgaWYgKCFBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgYXJlIGFkZGluZyBhIGNvbG9yIGJ1dCBpdCBpcyBub3QgUkdCIHdlIGRvbid0IGFjY2VwdCB0aGUgdmFsdWVcbiAgICAvLyBpbiB0aGUgZnV0dXJlIGFzIHdlIGFkZCBtb3JlIHByb3BzIHdlIHNob3VsZCBjaGFuZ2UgdGhpcyBpZiBpbnRvIGEgc3dpdGNoXG4gICAgaWYgKGtleSA9PT0gJ2NvbG9yJyAmJiAhaXNSZ2JDb2xvcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgLy8gZG8gd2UgbmVlZCBkZWVwIG1lcmdlID9cbiAgICByZXR1cm4gey4uLmFjYywgW2tleV06IGlzUGxhaW5PYmplY3QodmFsdWUpID8gZGVlcG1lcmdlKGRhdGFzZXRba2V5XSB8fCB7fSwgdmFsdWUpIDogdmFsdWV9O1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIHZhbGlkYXRlZFByb3BzO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgRGF0YXNldCBwcm9wcyAobGFiZWwsIGNvbG9yLCBtZXRhKS4gRG8gbm90IHVzZSB0byB1cGRhdGUgZGF0YSBvciBhbnkgcmVsYXRlZCBwcm9wZXJ0aWVzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtkYXRhSWQsIHByb3BzfSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuICBjb25zdCBleGlzdGluZyA9IGRhdGFzZXRzW2RhdGFJZF07XG5cbiAgaWYgKGV4aXN0aW5nKSB7XG4gICAgY29uc3QgdmFsaWRhdGVkUHJvcHMgPSB2YWxpZGF0ZURhdGFzZXRVcGRhdGVQcm9wcyhwcm9wcywgZXhpc3RpbmcpO1xuICAgIC8vICB2YWxpZGF0ZSBwcm9wczoganVzdCBjb2xvciBmb3Igbm93XG4gICAgLy8gIHdlIG9ubHkgYWxsb3cgbGFiZWwsIGNvbG9yIGFuZCBtZXRhIHRvIGJlIHVwZGF0ZWRcbiAgICAvLyBjb25zdCBuZXdUYWJsZSA9IGNvcHlUYWJsZUFuZFVwZGF0ZShleGlzdGluZywgdmFsaWRhdGVkUHJvcHMpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRhdGFzZXRzOiB7XG4gICAgICAgIC4uLmRhdGFzZXRzLFxuICAgICAgICBbZGF0YUlkXTogY29weVRhYmxlQW5kVXBkYXRlKGV4aXN0aW5nLCB2YWxpZGF0ZWRQcm9wcylcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIFdoZW4gYSB1c2VyIGNsaWNrcyBvbiB0aGUgc3BlY2lmaWMgbWFwIGNsb3NpbmcgaWNvblxuICogdGhlIGFwcGxpY2F0aW9uIHdpbGwgY2xvc2UgdGhlIHNlbGVjdGVkIG1hcFxuICogYW5kIHdpbGwgbWVyZ2UgdGhlIHJlbWFpbmluZyBvbmUgd2l0aCB0aGUgZ2xvYmFsIHN0YXRlXG4gKiBUT0RPOiBpIHRoaW5rIGluIHRoZSBmdXR1cmUgdGhpcyBhY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBtZXJnZSBtYXAgbGF5ZXJzIHdpdGggZ2xvYmFsIHNldHRpbmdzXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGUgYHZpc1N0YXRlYFxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvbiBhY3Rpb25cbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xvc2VTcGVjaWZpY01hcEF0SW5kZXg8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogTWFwU3RhdGVBY3Rpb25zLlRvZ2dsZVNwbGl0TWFwVXBkYXRlckFjdGlvblxuKTogUyB7XG4gIC8vIHJldHJpZXZlIGxheWVycyBtZXRhIGRhdGEgZnJvbSB0aGUgcmVtYWluaW5nIG1hcCB0aGF0IHdlIG5lZWQgdG8ga2VlcFxuICBjb25zdCBpbmRleFRvUmV0cmlldmUgPSAxIC0gYWN0aW9uLnBheWxvYWQ7XG4gIGNvbnN0IG1hcExheWVycyA9IHN0YXRlLnNwbGl0TWFwc1tpbmRleFRvUmV0cmlldmVdPy5sYXllcnM7XG4gIGNvbnN0IHtsYXllcnN9ID0gc3RhdGU7XG5cbiAgLy8gdXBkYXRlIGxheWVyIHZpc2liaWxpdHlcbiAgY29uc3QgbmV3TGF5ZXJzID0gbGF5ZXJzLm1hcChsYXllciA9PlxuICAgIG1hcExheWVycyAmJiAhbWFwTGF5ZXJzW2xheWVyLmlkXSAmJiBsYXllci5jb25maWcuaXNWaXNpYmxlXG4gICAgICA/IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAvLyBpZiBsYXllci5pZCBpcyBub3QgaW4gbWFwTGF5ZXJzLCBpdCBzaG91bGQgYmUgaW5WaXNpYmxlXG4gICAgICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgOiBsYXllclxuICApO1xuXG4gIC8vIGRlbGV0ZSBtYXBcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBzcGxpdE1hcHM6IFtdXG4gIH07XG59XG5cbi8qKlxuICogVHJpZ2dlciBmaWxlIGxvYWRpbmcgZGlzcGF0Y2ggYGFkZERhdGFUb01hcGAgaWYgc3VjY2VlZCwgb3IgYGxvYWRGaWxlc0VycmAgaWYgZmFpbGVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbG9hZEZpbGVzVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtmaWxlcywgb25GaW5pc2ggPSBsb2FkRmlsZXNTdWNjZXNzfSA9IGFjdGlvbjtcbiAgaWYgKCFmaWxlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWxlTG9hZGluZ1Byb2dyZXNzID0gQXJyYXkuZnJvbShmaWxlcykucmVkdWNlKFxuICAgIChhY2N1LCBmLCBpKSA9PiBtZXJnZV8oaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MoZiwgaSkpKGFjY3UpLFxuICAgIHt9XG4gICk7XG5cbiAgY29uc3QgZmlsZUxvYWRpbmcgPSB7XG4gICAgZmlsZUNhY2hlOiBbXSxcbiAgICBmaWxlc1RvTG9hZDogZmlsZXMsXG4gICAgb25GaW5pc2hcbiAgfTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSBtZXJnZV8oe2ZpbGVMb2FkaW5nUHJvZ3Jlc3MsIGZpbGVMb2FkaW5nfSkoc3RhdGUpO1xuXG4gIHJldHVybiBsb2FkTmV4dEZpbGVVcGRhdGVyKG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIFN1Y2Vzc2Z1bGx5IGxvYWRlZCBvbmUgZmlsZSwgbW92ZSBvbiB0byB0aGUgbmV4dCBvbmVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZVN0ZXBTdWNjZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZVN0ZXBTdWNjZXNzQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVOYW1lLCBmaWxlQ2FjaGV9ID0gYWN0aW9uO1xuICBjb25zdCB7ZmlsZXNUb0xvYWQsIG9uRmluaXNofSA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAxLCBtZXNzYWdlOiAnRG9uZSd9XG4gIH0pO1xuXG4gIC8vIHNhdmUgcHJvY2Vzc2VkIGZpbGUgdG8gZmlsZUNhY2hlXG4gIGNvbnN0IHN0YXRlV2l0aENhY2hlID0gcGlja18oJ2ZpbGVMb2FkaW5nJykobWVyZ2VfKHtmaWxlQ2FjaGV9KSkoc3RhdGVXaXRoUHJvZ3Jlc3MpO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhDYWNoZSxcbiAgICBERUxBWV9UQVNLKDIwMCkubWFwKGZpbGVzVG9Mb2FkLmxlbmd0aCA/IGxvYWROZXh0RmlsZSA6ICgpID0+IG9uRmluaXNoKGZpbGVDYWNoZSkpXG4gICk7XG59XG5cbi8vIHdpdGhUYXNrPFQ+KHN0YXRlOiBULCB0YXNrOiBhbnkpOiBUXG5cbi8qKlxuICpcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkTmV4dEZpbGVVcGRhdGVyKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlIHtcbiAgaWYgKCFzdGF0ZS5maWxlTG9hZGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7ZmlsZXNUb0xvYWR9ID0gc3RhdGUuZmlsZUxvYWRpbmc7XG4gIGNvbnN0IFtmaWxlLCAuLi5yZW1haW5pbmdGaWxlc1RvTG9hZF0gPSBmaWxlc1RvTG9hZDtcblxuICAvLyBzYXZlIGZpbGVzVG9Mb2FkIHRvIHN0YXRlXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHBpY2tfKCdmaWxlTG9hZGluZycpKG1lcmdlXyh7ZmlsZXNUb0xvYWQ6IHJlbWFpbmluZ0ZpbGVzVG9Mb2FkfSkpKHN0YXRlKTtcblxuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKG5leHRTdGF0ZSwge1xuICAgIGZpbGVOYW1lOiBmaWxlLm5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAwLCBtZXNzYWdlOiAnbG9hZGluZy4uLid9XG4gIH0pO1xuXG4gIGNvbnN0IHtsb2FkZXJzLCBsb2FkT3B0aW9uc30gPSBzdGF0ZTtcbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aFByb2dyZXNzLFxuICAgIG1ha2VMb2FkRmlsZVRhc2soXG4gICAgICBmaWxlLFxuICAgICAgbmV4dFN0YXRlLmZpbGVMb2FkaW5nICYmIG5leHRTdGF0ZS5maWxlTG9hZGluZy5maWxlQ2FjaGUsXG4gICAgICBsb2FkZXJzLFxuICAgICAgbG9hZE9wdGlvbnNcbiAgICApXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlTG9hZEZpbGVUYXNrKGZpbGUsIGZpbGVDYWNoZSwgbG9hZGVyczogTG9hZGVyW10gPSBbXSwgbG9hZE9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gTE9BRF9GSUxFX1RBU0soe2ZpbGUsIGZpbGVDYWNoZSwgbG9hZGVycywgbG9hZE9wdGlvbnN9KS5iaW1hcChcbiAgICAvLyBwcmV0dGllciBpZ25vcmVcbiAgICAvLyBzdWNjZXNzXG4gICAgZ2VuID0+XG4gICAgICBuZXh0RmlsZUJhdGNoKHtcbiAgICAgICAgZ2VuLFxuICAgICAgICBmaWxlTmFtZTogZmlsZS5uYW1lLFxuICAgICAgICBvbkZpbmlzaDogcmVzdWx0ID0+XG4gICAgICAgICAgcHJvY2Vzc0ZpbGVDb250ZW50KHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IHJlc3VsdCxcbiAgICAgICAgICAgIGZpbGVDYWNoZVxuICAgICAgICAgIH0pXG4gICAgICB9KSxcblxuICAgIC8vIGVycm9yXG4gICAgZXJyID0+IGxvYWRGaWxlc0VycihmaWxlLm5hbWUsIGVycilcbiAgKTtcbn1cblxuLyoqXG4gKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7Y29udGVudCwgZmlsZUNhY2hlfSA9IGFjdGlvbi5wYXlsb2FkO1xuXG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZTogY29udGVudC5maWxlTmFtZSxcbiAgICBwcm9ncmVzczoge3BlcmNlbnQ6IDEsIG1lc3NhZ2U6ICdwcm9jZXNzaW5nLi4uJ31cbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aFByb2dyZXNzLFxuICAgIFBST0NFU1NfRklMRV9EQVRBKHtjb250ZW50LCBmaWxlQ2FjaGV9KS5iaW1hcChcbiAgICAgIHJlc3VsdCA9PiBsb2FkRmlsZVN0ZXBTdWNjZXNzKHtmaWxlTmFtZTogY29udGVudC5maWxlTmFtZSwgZmlsZUNhY2hlOiByZXN1bHR9KSxcbiAgICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoY29udGVudC5maWxlTmFtZSwgZXJyKVxuICAgIClcbiAgKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHJvZ3Jlc3MocHJldlByb2dyZXNzID0ge30sIHByb2dyZXNzKSB7XG4gIC8vIFRoaXMgaGFwcGVucyB3aGVuIHJlY2VpdmluZyBxdWVyeSBtZXRhZGF0YSBvciBvdGhlciBjYXNlcyB3ZSBkb24ndFxuICAvLyBoYXZlIGFuIHVwZGF0ZSBmb3IgdGhlIHVzZXIuXG4gIGlmICghcHJvZ3Jlc3MgfHwgIXByb2dyZXNzLnBlcmNlbnQpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBlcmNlbnQ6IHByb2dyZXNzLnBlcmNlbnRcbiAgfTtcbn1cblxuLyoqXG4gKiBnZXRzIGNhbGxlZCB3aXRoIHBheWxvYWQgPSBBc3luY0dlbmVyYXRvcjw/Pz8+XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbmV4dEZpbGVCYXRjaFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge1xuICAgIHBheWxvYWQ6IHtnZW4sIGZpbGVOYW1lLCBwcm9ncmVzcywgYWNjdW11bGF0ZWQsIG9uRmluaXNofVxuICB9OiBWaXNTdGF0ZUFjdGlvbnMuTmV4dEZpbGVCYXRjaFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiBwYXJzZVByb2dyZXNzKHN0YXRlLmZpbGVMb2FkaW5nUHJvZ3Jlc3NbZmlsZU5hbWVdLCBwcm9ncmVzcylcbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKHN0YXRlV2l0aFByb2dyZXNzLCBbXG4gICAgLi4uKGdldEFwcGxpY2F0aW9uQ29uZmlnKCkudXNlQXJyb3dQcm9ncmVzc2l2ZUxvYWRpbmcgJiZcbiAgICBmaWxlTmFtZS5lbmRzV2l0aCgnYXJyb3cnKSAmJlxuICAgIGFjY3VtdWxhdGVkPy5kYXRhPy5sZW5ndGggPiAwXG4gICAgICA/IFtcbiAgICAgICAgICBQUk9DRVNTX0ZJTEVfREFUQSh7Y29udGVudDogYWNjdW11bGF0ZWQsIGZpbGVDYWNoZTogW119KS5iaW1hcChcbiAgICAgICAgICAgIHJlc3VsdCA9PiBsb2FkRmlsZXNTdWNjZXNzKHJlc3VsdCksXG4gICAgICAgICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGVOYW1lLCBlcnIpXG4gICAgICAgICAgKVxuICAgICAgICBdXG4gICAgICA6IFtdKSxcbiAgICBVTldSQVBfVEFTSyhnZW4ubmV4dCgpKS5iaW1hcChcbiAgICAgICh7dmFsdWUsIGRvbmV9KSA9PiB7XG4gICAgICAgIHJldHVybiBkb25lXG4gICAgICAgICAgPyBvbkZpbmlzaChhY2N1bXVsYXRlZClcbiAgICAgICAgICA6IG5leHRGaWxlQmF0Y2goe1xuICAgICAgICAgICAgICBnZW4sXG4gICAgICAgICAgICAgIGZpbGVOYW1lLFxuICAgICAgICAgICAgICBwcm9ncmVzczogdmFsdWUucHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIGFjY3VtdWxhdGVkOiB2YWx1ZSxcbiAgICAgICAgICAgICAgb25GaW5pc2hcbiAgICAgICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoZmlsZU5hbWUsIGVycilcbiAgICApXG4gIF0pO1xufTtcblxuLyoqXG4gKiBUcmlnZ2VyIGxvYWRpbmcgZmlsZSBlcnJvclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc0VyclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2Vycm9yLCBmaWxlTmFtZX06IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZXNFcnJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIHVwZGF0ZSB1aSB3aXRoIGVycm9yIG1lc3NhZ2VcbiAgQ29uc29sZS53YXJuKGVycm9yKTtcbiAgaWYgKCFzdGF0ZS5maWxlTG9hZGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7ZmlsZXNUb0xvYWQsIG9uRmluaXNoLCBmaWxlQ2FjaGV9ID0gc3RhdGUuZmlsZUxvYWRpbmc7XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZSxcbiAgICBwcm9ncmVzczoge2Vycm9yfVxuICB9KTtcblxuICAvLyBraWNrIG9mZiBuZXh0IGZpbGUgb3IgZmluaXNoXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBuZXh0U3RhdGUsXG4gICAgREVMQVlfVEFTSygyMDApLm1hcChmaWxlc1RvTG9hZC5sZW5ndGggPyBsb2FkTmV4dEZpbGUgOiAoKSA9PiBvbkZpbmlzaChmaWxlQ2FjaGUpKVxuICApO1xufTtcblxuLyoqXG4gKiBXaGVuIHNlbGVjdCBkYXRhc2V0IGZvciBleHBvcnQsIGFwcGx5IGNwdSBmaWx0ZXIgdG8gc2VsZWN0ZWQgZGF0YXNldFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFwcGx5Q1BVRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkfTogVmlzU3RhdGVBY3Rpb25zLkFwcGx5Q1BVRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBhcHBseSBjcHVGaWx0ZXJcbiAgY29uc3QgZGF0YUlkcyA9IHRvQXJyYXkoZGF0YUlkKTtcblxuICByZXR1cm4gZGF0YUlkcy5yZWR1Y2UoKGFjY3UsIGlkKSA9PiBmaWx0ZXJEYXRhc2V0Q1BVKGFjY3UsIGlkKSwgc3RhdGUpO1xufTtcblxuLyoqXG4gKiBVc2VyIGlucHV0IHRvIHVwZGF0ZSB0aGUgaW5mbyBvZiB0aGUgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TWFwSW5mb1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0TWFwSW5mb1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBtYXBJbmZvOiB7XG4gICAgLi4uc3RhdGUubWFwSW5mbyxcbiAgICAuLi5hY3Rpb24uaW5mb1xuICB9XG59KTtcbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIHVwZGF0ZSBBbGwgbGF5ZXIgZG9tYWluIGFuZCBsYXllciBkYXRhIG9mIHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGREZWZhdWx0TGF5ZXJzKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGRhdGFzZXRzOiBEYXRhc2V0c1xuKToge3N0YXRlOiBWaXNTdGF0ZTsgbmV3TGF5ZXJzOiBMYXllcltdfSB7XG4gIGNvbnN0IGVtcHR5OiBMYXllcltdID0gW107XG4gIGNvbnN0IGRlZmF1bHRMYXllcnMgPSBPYmplY3QudmFsdWVzKGRhdGFzZXRzKS5yZWR1Y2UoKGFjY3U6IExheWVyW10sIGRhdGFzZXQpID0+IHtcbiAgICBjb25zdCBmb3VuZExheWVycyA9IGZpbmREZWZhdWx0TGF5ZXIoZGF0YXNldCwgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgICByZXR1cm4gZm91bmRMYXllcnMgJiYgZm91bmRMYXllcnMubGVuZ3RoID8gYWNjdS5jb25jYXQoZm91bmRMYXllcnMpIDogYWNjdTtcbiAgfSwgZW1wdHkpO1xuXG4gIHJldHVybiB7XG4gICAgc3RhdGU6IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbGF5ZXJzOiBbLi4uc3RhdGUubGF5ZXJzLCAuLi5kZWZhdWx0TGF5ZXJzXSxcbiAgICAgIGxheWVyT3JkZXI6IFtcbiAgICAgICAgLy8gcHV0IG5ldyBsYXllcnMgb24gdG9wIG9mIG9sZCBvbmVzIGluIHJldmVyc2VcbiAgICAgICAgLi4uZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMoZGVmYXVsdExheWVycyksXG4gICAgICAgIC4uLnN0YXRlLmxheWVyT3JkZXJcbiAgICAgIF1cbiAgICB9LFxuICAgIG5ld0xheWVyczogZGVmYXVsdExheWVyc1xuICB9O1xufVxuXG4vKipcbiAqIGhlbHBlciBmdW5jdGlvbiB0byBmaW5kIGRlZmF1bHQgdG9vbHRpcHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFzZXRcbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRGVmYXVsdFRvb2x0aXBzKHN0YXRlLCBkYXRhc2V0KSB7XG4gIGNvbnN0IHRvb2x0aXBGaWVsZHMgPSBmaW5kRmllbGRzVG9TaG93KHtcbiAgICAuLi5kYXRhc2V0LFxuICAgIG1heERlZmF1bHRUb29sdGlwczogc3RhdGUubWF4RGVmYXVsdFRvb2x0aXBzXG4gIH0pO1xuICBjb25zdCBtZXJnZWQgPSB7XG4gICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93LFxuICAgIC4uLnRvb2x0aXBGaWVsZHNcbiAgfTtcblxuICByZXR1cm4gc2V0KFsnaW50ZXJhY3Rpb25Db25maWcnLCAndG9vbHRpcCcsICdjb25maWcnLCAnZmllbGRzVG9TaG93J10sIG1lcmdlZCwgc3RhdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MoZmlsZSwgaW5kZXgpIHtcbiAgY29uc3QgZmlsZU5hbWUgPSBmaWxlLm5hbWUgfHwgYFVudGl0bGVkIEZpbGUgJHtpbmRleH1gO1xuICByZXR1cm4ge1xuICAgIFtmaWxlTmFtZV06IHtcbiAgICAgIC8vIHBlcmNlbnQgb2YgY3VycmVudCBmaWxlXG4gICAgICBwZXJjZW50OiAwLFxuICAgICAgbWVzc2FnZTogJycsXG4gICAgICBmaWxlTmFtZSxcbiAgICAgIGVycm9yOiBudWxsXG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtmaWxlTmFtZSwgcHJvZ3Jlc3N9KSB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgcmV0dXJuIHBpY2tfKCdmaWxlTG9hZGluZ1Byb2dyZXNzJykocGlja18oZmlsZU5hbWUpKG1lcmdlXyhwcm9ncmVzcykpKShzdGF0ZSk7XG59XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgbGF5ZXIgZG9tYWlucyBmb3IgYW4gYXJyYXkgb2YgZGF0YXNldHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YTxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgZGF0YUlkOiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgdXBkYXRlZEZpbHRlcj86IEZpbHRlclxuKTogUyB7XG4gIGNvbnN0IGRhdGFJZHMgPSB0eXBlb2YgZGF0YUlkID09PSAnc3RyaW5nJyA/IFtkYXRhSWRdIDogZGF0YUlkO1xuICBjb25zdCBuZXdMYXllcnM6IExheWVyW10gPSBbXTtcbiAgY29uc3QgbmV3TGF5ZXJEYXRhOiBhbnlbXSA9IFtdO1xuXG4gIHN0YXRlLmxheWVycy5mb3JFYWNoKChvbGRMYXllciwgaSkgPT4ge1xuICAgIGlmIChvbGRMYXllci5jb25maWcuZGF0YUlkICYmIGRhdGFJZHMuaW5jbHVkZXMob2xkTGF5ZXIuY29uZmlnLmRhdGFJZCkpIHtcbiAgICAgIC8vIE5vIG5lZWQgdG8gcmVjYWxjdWxhdGUgbGF5ZXIgZG9tYWluIGlmIGZpbHRlciBoYXMgZml4ZWQgZG9tYWluXG4gICAgICBjb25zdCBuZXdMYXllciA9XG4gICAgICAgIHVwZGF0ZWRGaWx0ZXIgJiYgdXBkYXRlZEZpbHRlci5maXhlZERvbWFpblxuICAgICAgICAgID8gb2xkTGF5ZXJcbiAgICAgICAgICA6IG9sZExheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzLCB1cGRhdGVkRmlsdGVyKTtcblxuICAgICAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgc3RhdGUubGF5ZXJEYXRhW2ldKTtcblxuICAgICAgbmV3TGF5ZXJzLnB1c2gobGF5ZXIpO1xuICAgICAgbmV3TGF5ZXJEYXRhLnB1c2gobGF5ZXJEYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXJzLnB1c2gob2xkTGF5ZXIpO1xuICAgICAgbmV3TGF5ZXJEYXRhLnB1c2goc3RhdGUubGF5ZXJEYXRhW2ldKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogbmV3TGF5ZXJzLFxuICAgIGxheWVyRGF0YTogbmV3TGF5ZXJEYXRhXG4gIH07XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlQW5pbWF0aW9uRG9tYWluPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMpOiBTIHtcbiAgLy8gbWVyZ2UgYWxsIGFuaW1hdGFibGUgbGF5ZXIgZG9tYWluIGFuZCB1cGRhdGUgZ2xvYmFsIGNvbmZpZ1xuICBjb25zdCBhbmltYXRhYmxlTGF5ZXJzID0gZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMoc3RhdGUubGF5ZXJzKTtcblxuICBpZiAoIWFuaW1hdGFibGVMYXllcnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgZG9tYWluOiBudWxsLFxuICAgICAgICBpc0FuaW1hdGluZzogZmFsc2UsXG4gICAgICAgIHRpbWVTdGVwczogbnVsbCxcbiAgICAgICAgZGVmYXVsdFRpbWVGb3JtYXQ6IG51bGxcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgY29uc3QgbGF5ZXJEb21haW5zID0gYW5pbWF0YWJsZUxheWVycy5tYXAobCA9PiBsLmNvbmZpZy5hbmltYXRpb24uZG9tYWluIHx8IFtdKTtcbiAgLy8gQHRzLWlnbm9yZVxuICBjb25zdCBtZXJnZWREb21haW4gPSBtZXJnZVRpbWVEb21haW5zKGxheWVyRG9tYWlucyk7XG4gIGNvbnN0IGRlZmF1bHRUaW1lRm9ybWF0ID0gZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyKG1lcmdlZERvbWFpbik7XG5cbiAgLy8gbWVyZ2UgdGltZVN0ZXBzXG4gIGxldCBtZXJnZWRUaW1lU3RlcHM6IG51bWJlcltdIHwgbnVsbCA9IHVuaXE8bnVtYmVyPihcbiAgICBhbmltYXRhYmxlTGF5ZXJzLnJlZHVjZSgoYWNjdSwgbGF5ZXIpID0+IHtcbiAgICAgIGFjY3UucHVzaCguLi4obGF5ZXIuY29uZmlnLmFuaW1hdGlvbi50aW1lU3RlcHMgfHwgW10pKTtcbiAgICAgIHJldHVybiBhY2N1O1xuICAgIH0sIFtdKVxuICApLnNvcnQoKTtcblxuICBtZXJnZWRUaW1lU3RlcHMgPSBtZXJnZWRUaW1lU3RlcHMubGVuZ3RoID8gbWVyZ2VkVGltZVN0ZXBzIDogbnVsbDtcblxuICAvLyBUT0RPOiBiZXR0ZXIgaGFuZGxpbmcgb2YgZHVyYXRpb24gY2FsY3VsYXRpb25cbiAgY29uc3QgZHVyYXRpb24gPSBtZXJnZWRUaW1lU3RlcHNcbiAgICA/IChCQVNFX1NQRUVEICogKDEwMDAgLyBGUFMpKSAvIG1lcmdlZFRpbWVTdGVwcy5sZW5ndGggLyAoc3RhdGUuYW5pbWF0aW9uQ29uZmlnLnNwZWVkIHx8IDEpXG4gICAgOiBudWxsO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIGRvbWFpbjogbWVyZ2VkRG9tYWluLFxuICAgICAgZGVmYXVsdFRpbWVGb3JtYXQsXG4gICAgICBkdXJhdGlvbixcbiAgICAgIHRpbWVTdGVwczogbWVyZ2VkVGltZVN0ZXBzXG4gICAgfVxuICB9O1xuXG4gIC8vIHJlc2V0IGN1cnJlbnRUaW1lIGJhc2VkIG9uIG5ldyBkb21haW5cbiAgY29uc3Qgc3luY2VkRmlsdGVyID0gc3RhdGUuZmlsdGVycz8uZmluZChmID0+IChmIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpIGFzXG4gICAgfCBUaW1lUmFuZ2VGaWx0ZXJcbiAgICB8IHVuZGVmaW5lZDtcblxuICAvLyBpZiBzeW5jZWQgZmlsdGVyIGV4aXN0IHdlZSBuZWVkIHRvIG1lcmdlIGFuaW1hdGlvbkNvbmZpZyBhbmQgZmlsdGVyIGRvbWFpbnNcbiAgLy8gYW5kIHZhbGlkYXRlIHRoZSBjdXJyZW50IHRpbWUgYWdhaW5zdCB0aGUgbmV3IG1lcmdlZCBkb21haW5cbiAgY29uc3QgbmV3QW5pbWF0aW9uRG9tYWluID0gc3luY2VkRmlsdGVyXG4gICAgPyBtZXJnZVRpbWVEb21haW5zKFttZXJnZWREb21haW4sIHN5bmNlZEZpbHRlci5kb21haW5dKVxuICAgIDogbWVyZ2VkRG9tYWluO1xuICBjb25zdCBjdXJyZW50VGltZSA9IGlzSW5SYW5nZShzdGF0ZS5hbmltYXRpb25Db25maWcuY3VycmVudFRpbWUsIG5ld0FuaW1hdGlvbkRvbWFpbilcbiAgICA/IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZVxuICAgIDogbmV3QW5pbWF0aW9uRG9tYWluWzBdO1xuXG4gIGlmIChjdXJyZW50VGltZSAhPT0gc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lKSB7XG4gICAgLy8gaWYgY3VycmVudFRpbWUgY2hhbmdlZCwgbmVlZCB0byBjYWxsIGFuaW1hdGlvblRpbWVVcGRhdGVyIHRvIHJlIGNhbGwgZm9ybWF0TGF5ZXJEYXRhXG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV4dFN0YXRlLCB7dmFsdWU6IGN1cnJlbnRUaW1lfSk7XG4gIH1cblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG4vKipcbiAqIFVwZGF0ZSB0aGUgc3RhdHVzIG9mIHRoZSBlZGl0b3JcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFZGl0b3JNb2RlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7bW9kZX06IFZpc1N0YXRlQWN0aW9ucy5TZXRFZGl0b3JNb2RlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBza2V0Y2hlc0VuYWJsZWQgPSBnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmVuYWJsZURyYXdPbk1hcFNrZXRjaGVzO1xuICBpZiAoXG4gICAgIXNrZXRjaGVzRW5hYmxlZCAmJlxuICAgIChtb2RlID09PSBFRElUT1JfTU9ERVMuRFJBV19QT0lOVCB8fCBtb2RlID09PSBFRElUT1JfTU9ERVMuRFJBV19MSU5FU1RSSU5HKVxuICApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgbW9kZSxcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgIH1cbiAgfTtcbn07XG5cbi8vIGNvbnN0IGZlYXR1cmVUb0ZpbHRlclZhbHVlID0gKGZlYXR1cmUpID0+ICh7Li4uZmVhdHVyZSwgaWQ6IGZlYXR1cmUuaWR9KTtcbi8qKlxuICogVXBkYXRlIGVkaXRvciBmZWF0dXJlc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZlYXR1cmVzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZXMgPSBbXX06IFZpc1N0YXRlQWN0aW9ucy5TZXRGZWF0dXJlc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgbGFzdEZlYXR1cmUgPSBmZWF0dXJlcy5sZW5ndGggJiYgZmVhdHVyZXNbZmVhdHVyZXMubGVuZ3RoIC0gMV07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAvLyBvbmx5IHNhdmUgbm9uZSBmaWx0ZXIgZmVhdHVyZXMgdG8gZWRpdG9yXG4gICAgICBmZWF0dXJlczogZmVhdHVyZXMuZmlsdGVyKGYgPT4gIWdldEZpbHRlcklkSW5GZWF0dXJlKGYpKSxcbiAgICAgIG1vZGU6XG4gICAgICAgIGxhc3RGZWF0dXJlICYmIGxhc3RGZWF0dXJlLnByb3BlcnRpZXM/LmlzQ2xvc2VkXG4gICAgICAgICAgPyBsYXN0RmVhdHVyZS5wcm9wZXJ0aWVzPy5zaGFwZSA9PT0gJ1JlY3RhbmdsZSdcbiAgICAgICAgICAgID8gc3RhdGUuZWRpdG9yLm1vZGVcbiAgICAgICAgICAgIDogRURJVE9SX01PREVTLkVESVRcbiAgICAgICAgICA6IHN0YXRlLmVkaXRvci5tb2RlXG4gICAgfVxuICB9O1xuXG4gIC8vIFJldHJpZXZlIGV4aXN0aW5nIGZlYXR1cmVcbiAgY29uc3Qge3NlbGVjdGVkRmVhdHVyZX0gPSBzdGF0ZS5lZGl0b3I7XG5cbiAgLy8gSWYgbm8gZmVhdHVyZSBpcyBzZWxlY3RlZCB3ZSBjYW4gc2ltcGx5IHJldHVybiBzaW5jZSBubyBvcGVyYXRpb25zXG4gIGlmICghc2VsZWN0ZWRGZWF0dXJlKSB7XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG5cbiAgLy8gVE9ETzogY2hlY2sgaWYgdGhlIGZlYXR1cmUgaGFzIGNoYW5nZWRcbiAgY29uc3QgZmVhdHVyZSA9IGZlYXR1cmVzLmZpbmQoZiA9PiBmLmlkID09PSBzZWxlY3RlZEZlYXR1cmUuaWQpO1xuXG4gIC8vIGlmIGZlYXR1cmUgaXMgcGFydCBvZiBhIGZpbHRlclxuICBjb25zdCBmaWx0ZXJJZCA9IGZlYXR1cmUgJiYgZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSk7XG4gIGlmIChmaWx0ZXJJZCAmJiBmZWF0dXJlKSB7XG4gICAgLy8gYWRkIGJib3ggZm9yIHBvbHlnb24gZmlsdGVyIHRvIHNwZWVkIHVwIGZpbHRlcmluZ1xuICAgIGlmIChmZWF0dXJlLnByb3BlcnRpZXMpIGZlYXR1cmUucHJvcGVydGllcy5iYm94ID0gYmJveChmZWF0dXJlIGFzIHVua25vd24gYXMgQWxsR2VvSlNPTik7XG4gICAgY29uc3QgZmVhdHVyZVZhbHVlID0gZmVhdHVyZVRvRmlsdGVyVmFsdWUoZmVhdHVyZSwgZmlsdGVySWQpO1xuICAgIGNvbnN0IGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGZpbCA9PiBmaWwuaWQgPT09IGZpbHRlcklkKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySWR4LFxuICAgICAgcHJvcDogJ3ZhbHVlJyxcbiAgICAgIHZhbHVlOiBmZWF0dXJlVmFsdWVcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuZnVuY3Rpb24gZmluZEVkaXRvckZlYXR1cmUoc3RhdGU6IFZpc1N0YXRlLCBmZWF0dXJlPzogRmVhdHVyZSB8IG51bGwpOiBGZWF0dXJlIHwgbnVsbCB7XG4gIGlmICghZmVhdHVyZT8uaWQpIHtcbiAgICByZXR1cm4gZmVhdHVyZSB8fCBudWxsO1xuICB9XG4gIGlmIChzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlPy5pZCA9PT0gZmVhdHVyZS5pZCkge1xuICAgIHJldHVybiBzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlO1xuICB9XG4gIGNvbnN0IGZyb21FZGl0b3IgPSBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmluZChpdGVtID0+IGl0ZW0uaWQgPT09IGZlYXR1cmUuaWQpO1xuICBpZiAoZnJvbUVkaXRvcikge1xuICAgIHJldHVybiBmcm9tRWRpdG9yO1xuICB9XG4gIGNvbnN0IGZpbHRlcklkID0gZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSk7XG4gIGlmIChmaWx0ZXJJZCkge1xuICAgIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChpdGVtID0+IGl0ZW0uaWQgPT09IGZpbHRlcklkKTtcbiAgICBpZiAoZmlsdGVyPy52YWx1ZSkge1xuICAgICAgcmV0dXJuIGZpbHRlci52YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZlYXR1cmU7XG59XG5cbi8qKlxuICogU2V0IHVzZXItZmFjaW5nIEdlb0pTT04gcHJvcGVydGllcyBvbiBhIHNrZXRjaCBvciBwb2x5Z29uLWZpbHRlciBmZWF0dXJlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEVkaXRvckZlYXR1cmVQcm9wZXJ0aWVzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZSwgcHJvcGVydGllc306IFZpc1N0YXRlQWN0aW9ucy5TZXRFZGl0b3JGZWF0dXJlUHJvcGVydGllc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmVuYWJsZURyYXdPbk1hcFNrZXRjaGVzKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qgc291cmNlID0gZmluZEVkaXRvckZlYXR1cmUoc3RhdGUsIGZlYXR1cmUpO1xuICBpZiAoIXNvdXJjZT8uaWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXh0RmVhdHVyZSA9IG1lcmdlVXNlckZlYXR1cmVQcm9wZXJ0aWVzKHNvdXJjZSwgcHJvcGVydGllcyk7XG4gIGNvbnN0IGZpbHRlcklkID0gZ2V0RmlsdGVySWRJbkZlYXR1cmUobmV4dEZlYXR1cmUpO1xuICBjb25zdCBuZXh0RWRpdG9yID0ge1xuICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICBmZWF0dXJlczogZmlsdGVySWRcbiAgICAgID8gc3RhdGUuZWRpdG9yLmZlYXR1cmVzXG4gICAgICA6IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5tYXAoaXRlbSA9PiAoaXRlbS5pZCA9PT0gbmV4dEZlYXR1cmUuaWQgPyBuZXh0RmVhdHVyZSA6IGl0ZW0pKSxcbiAgICBzZWxlY3RlZEZlYXR1cmU6XG4gICAgICBzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlPy5pZCA9PT0gbmV4dEZlYXR1cmUuaWRcbiAgICAgICAgPyBuZXh0RmVhdHVyZVxuICAgICAgICA6IHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmVcbiAgfTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiBuZXh0RWRpdG9yXG4gIH07XG5cbiAgaWYgKCFmaWx0ZXJJZCkge1xuICAgIHJldHVybiBuZXh0U3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlcklkeCA8IDApIHtcbiAgICByZXR1cm4gbmV4dFN0YXRlO1xuICB9XG5cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV4dFN0YXRlLCB7XG4gICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgcHJvcDogJ3ZhbHVlJyxcbiAgICB2YWx1ZTogZmVhdHVyZVRvRmlsdGVyVmFsdWUobmV4dEZlYXR1cmUsIGZpbHRlcklkKVxuICB9KTtcbn1cblxuLyoqXG4gKiBTZXQgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgZmVhdHVyZVxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3Qgc2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZSwgc2VsZWN0aW9uQ29udGV4dH06IFZpc1N0YXRlQWN0aW9ucy5TZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIGFkZCBiYm94IGZvciBwb2x5Z29uIGZpbHRlciB0byBzcGVlZCB1cCBmaWx0ZXJpbmdcbiAgbGV0IHNlbGVjdGVkRmVhdHVyZSA9IGZlYXR1cmU7XG4gIGlmIChmZWF0dXJlPy5wcm9wZXJ0aWVzKSB7XG4gICAgc2VsZWN0ZWRGZWF0dXJlID0ge1xuICAgICAgLi4uZmVhdHVyZSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgLi4uZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICBiYm94OiBiYm94KGZlYXR1cmUgYXMgdW5rbm93biBhcyBBbGxHZW9KU09OKVxuICAgICAgfVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIHNlbGVjdGVkRmVhdHVyZSxcbiAgICAgIHNlbGVjdGlvbkNvbnRleHRcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIERlbGV0ZSBleGlzdGluZyBmZWF0dXJlIGZyb20gZmlsdGVyc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGV0ZUZlYXR1cmVVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtmZWF0dXJlfTogVmlzU3RhdGVBY3Rpb25zLkRlbGV0ZUZlYXR1cmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghZmVhdHVyZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gICAgfVxuICB9O1xuXG4gIGlmIChnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKSkge1xuICAgIGNvbnN0IGZpbHRlcklkeCA9IG5ld1N0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSkpO1xuXG4gICAgcmV0dXJuIGZpbHRlcklkeCA+IC0xID8gcmVtb3ZlRmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2lkeDogZmlsdGVySWR4fSkgOiBuZXdTdGF0ZTtcbiAgfVxuXG4gIC8vIG1vZGlmeSBlZGl0b3Igb2JqZWN0XG4gIGNvbnN0IG5ld0VkaXRvciA9IHtcbiAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgZmVhdHVyZXM6IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5maWx0ZXIoZiA9PiBmLmlkICE9PSBmZWF0dXJlLmlkKSxcbiAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjogbmV3RWRpdG9yXG4gIH07XG59XG5cbi8qKlxuICogVG9nZ2xlIGZlYXR1cmUgYXMgbGF5ZXIgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UG9seWdvbkZpbHRlckxheWVyVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBwYXlsb2FkOiBWaXNTdGF0ZUFjdGlvbnMuU2V0UG9seWdvbkZpbHRlckxheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bGF5ZXIsIGZlYXR1cmV9ID0gcGF5bG9hZDtcbiAgY29uc3QgZmlsdGVySWQgPSBnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKTtcblxuICAvLyBsZXQgbmV3RmlsdGVyID0gbnVsbDtcbiAgbGV0IGZpbHRlcklkeDtcbiAgbGV0IG5ld0xheWVySWQgPSBbbGF5ZXIuaWRdO1xuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgLy8gSWYgcG9seWdvbiBmaWx0ZXIgYWxyZWFkeSBleGlzdHMsIHdlIG5lZWQgdG8gZmluZCBvdXQgaWYgdGhlIGN1cnJlbnQgbGF5ZXIgaXMgYWxyZWFkeSBpbmNsdWRlZFxuICBpZiAoZmlsdGVySWQpIHtcbiAgICBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcblxuICAgIGlmICghc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdKSB7XG4gICAgICAvLyB3aGF0IGlmIGZpbHRlciBkb2Vzbid0IGV4aXN0Py4uLiBub3QgcG9zc2libGUuXG4gICAgICAvLyBiZWNhdXNlIGZlYXR1cmVzIGluIHRoZSBlZGl0b3IgaXMgcGFzc2VkIGluIGZyb20gZmlsdGVycyBhbmQgZWRpdG9ycy5cbiAgICAgIC8vIGJ1dCB3ZSB3aWxsIG1vdmUgdGhpcyBmZWF0dXJlIGJhY2sgdG8gZWRpdG9yIGp1c3QgaW4gY2FzZVxuICAgICAgY29uc3Qgbm9uZUZpbHRlckZlYXR1cmUgPSB7XG4gICAgICAgIC4uLmZlYXR1cmUsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAuLi5mZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgICAgZmlsdGVySWQ6IG51bGxcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGVkaXRvcjoge1xuICAgICAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgICAgICBmZWF0dXJlczogWy4uLnN0YXRlLmVkaXRvci5mZWF0dXJlcywgbm9uZUZpbHRlckZlYXR1cmVdLFxuICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbm9uZUZpbHRlckZlYXR1cmVcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdO1xuICAgIGNvbnN0IHtsYXllcklkID0gW119ID0gZmlsdGVyO1xuICAgIGNvbnN0IGlzTGF5ZXJJbmNsdWRlZCA9IGxheWVySWQuaW5jbHVkZXMobGF5ZXIuaWQpO1xuXG4gICAgbmV3TGF5ZXJJZCA9IGlzTGF5ZXJJbmNsdWRlZFxuICAgICAgPyAvLyBpZiBsYXllciBpcyBpbmNsdWRlZCwgcmVtb3ZlIGl0XG4gICAgICAgIGxheWVySWQuZmlsdGVyKGwgPT4gbCAhPT0gbGF5ZXIuaWQpXG4gICAgICA6IFsuLi5sYXllcklkLCBsYXllci5pZF07XG5cbiAgICAvLyBMYXN0IGxheWVyIHJlbW92ZWQ6IHR1cm4gdGhlIGZpbHRlciBwb2x5Z29uIGJhY2sgaW50byBhIHNrZXRjaFxuICAgIGlmICghbmV3TGF5ZXJJZC5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHNrZXRjaEZlYXR1cmUgPSB0b1NrZXRjaEZlYXR1cmUoZmVhdHVyZSk7XG4gICAgICBjb25zdCBzdGF0ZVdpdGhvdXRGaWx0ZXIgPSByZW1vdmVGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWR4OiBmaWx0ZXJJZHh9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlV2l0aG91dEZpbHRlcixcbiAgICAgICAgZWRpdG9yOiB7XG4gICAgICAgICAgLi4uc3RhdGVXaXRob3V0RmlsdGVyLmVkaXRvcixcbiAgICAgICAgICBmZWF0dXJlczogWy4uLnN0YXRlV2l0aG91dEZpbHRlci5lZGl0b3IuZmVhdHVyZXMsIHNrZXRjaEZlYXR1cmVdLFxuICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZTogc2tldGNoRmVhdHVyZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBpZiB3ZSBoYXZlbid0IGNyZWF0ZSB0aGUgcG9seWdvbiBmaWx0ZXIsIGNyZWF0ZSBpdFxuICAgIGNvbnN0IG5ld0ZpbHRlciA9IGdlbmVyYXRlUG9seWdvbkZpbHRlcihbXSwgZmVhdHVyZSk7XG4gICAgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5sZW5ndGg7XG5cbiAgICAvLyBhZGQgZmVhdHVyZSwgcmVtb3ZlIGZlYXR1cmUgZnJvbSBlaWR0b3JcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZmlsdGVyczogWy4uLnN0YXRlLmZpbHRlcnMsIG5ld0ZpbHRlcl0sXG4gICAgICBlZGl0b3I6IHtcbiAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICBmZWF0dXJlczogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbHRlcihmID0+IGYuaWQgIT09IGZlYXR1cmUuaWQpLFxuICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG5ld0ZpbHRlci52YWx1ZVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICdsYXllcklkJyxcbiAgICB2YWx1ZTogbmV3TGF5ZXJJZFxuICB9KTtcbn1cblxuLyoqXG4gKiBBcHBseSBwb2x5Z29uIGZpbHRlciB0byBhbGwgdmlzaWJsZSBsYXllcnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQb2x5Z29uRmlsdGVyQWxsTGF5ZXJzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBwYXlsb2FkOiBWaXNTdGF0ZUFjdGlvbnMuU2V0UG9seWdvbkZpbHRlckFsbExheWVyc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2ZlYXR1cmV9ID0gcGF5bG9hZDtcblxuICBjb25zdCBuZXdGaWx0ZXIgPSBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIoW10sIGZlYXR1cmUpO1xuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmxlbmd0aDtcblxuICBjb25zdCBuZXdTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogWy4uLnN0YXRlLmZpbHRlcnMsIG5ld0ZpbHRlcl0sXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBmZWF0dXJlczogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbHRlcihmID0+IGYuaWQgIT09IGZlYXR1cmUuaWQpLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBuZXdGaWx0ZXIudmFsdWUsXG4gICAgICBtb2RlOiBFRElUT1JfTU9ERVMuRURJVFxuICAgIH1cbiAgfTtcblxuICBjb25zdCB2aXNpYmxlTGF5ZXJJZHMgPSBnZXQocGF5bG9hZCwgJ3Zpc2libGVMYXllcklkcycpO1xuICBjb25zdCBhbGxMYXllcklkcyA9IEFycmF5LmlzQXJyYXkodmlzaWJsZUxheWVySWRzKVxuICAgID8gdmlzaWJsZUxheWVySWRzXG4gICAgOiBzdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuaXNWaXNpYmxlKS5tYXAobCA9PiBsLmlkKTtcblxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICdsYXllcklkJyxcbiAgICB2YWx1ZTogYWxsTGF5ZXJJZHNcbiAgfSk7XG59XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvcnRUYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1uLCBtb2RlfTogVmlzU3RhdGVBY3Rpb25zLlNvcnRUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgc29ydE1vZGUgPSBtb2RlO1xuICBpZiAoIXNvcnRNb2RlKSB7XG4gICAgY29uc3QgY3VycmVudE1vZGUgPSBnZXQoZGF0YXNldCwgWydzb3J0Q29sdW1uJywgY29sdW1uXSk7XG4gICAgLy8gQHRzLWlnbm9yZSAtIHNob3VsZCBiZSBmaXhhYmxlIGluIGEgVFMgZmlsZVxuICAgIHNvcnRNb2RlID0gY3VycmVudE1vZGVcbiAgICAgID8gT2JqZWN0LmtleXMoU09SVF9PUkRFUikuZmluZChtID0+IG0gIT09IGN1cnJlbnRNb2RlKVxuICAgICAgOiBTT1JUX09SREVSLkFTQ0VORElORztcbiAgfVxuXG4gIGNvbnN0IHNvcnRlZCA9IHNvcnREYXRhc2V0QnlDb2x1bW4oZGF0YXNldCwgY29sdW1uLCBzb3J0TW9kZSk7XG4gIHJldHVybiBzZXQoWydkYXRhc2V0cycsIGRhdGFJZF0sIHNvcnRlZCwgc3RhdGUpO1xufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwaW5UYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1ufTogVmlzU3RhdGVBY3Rpb25zLlBpblRhYmxlQ29sdW1uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBwaW5UYWJsZUNvbHVtbnMoZGF0YXNldCwgY29sdW1uKTtcblxuICByZXR1cm4gc2V0KFsnZGF0YXNldHMnLCBkYXRhSWRdLCBuZXdEYXRhc2V0LCBzdGF0ZSk7XG59XG5cbi8qKlxuICogQ29weSBjb2x1bW4gY29udGVudCBhcyBzdHJpbmdzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29weVRhYmxlQ29sdW1uVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBjb2x1bW59OiBWaXNTdGF0ZUFjdGlvbnMuQ29weVRhYmxlQ29sdW1uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGZpZWxkSWR4ID0gZGF0YXNldC5maWVsZHMuZmluZEluZGV4KGYgPT4gZi5uYW1lID09PSBjb2x1bW4pO1xuICBpZiAoZmllbGRJZHggPCAwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHt0eXBlfSA9IGRhdGFzZXQuZmllbGRzW2ZpZWxkSWR4XTtcbiAgY29uc3QgdGV4dCA9IGRhdGFzZXQuZGF0YUNvbnRhaW5lclxuICAgIC5tYXAocm93ID0+IHBhcnNlRmllbGRWYWx1ZShyb3cudmFsdWVBdChmaWVsZElkeCksIHR5cGUpLCB0cnVlKVxuICAgIC5qb2luKCdcXG4nKTtcblxuICBjb3B5KHRleHQpO1xuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBTZXQgZGlzcGxheSBmb3JtYXQgZnJvbSBjb2x1bW5zIGZyb20gdXNlciBzZWxlY3Rpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBmb3JtYXRzfTogVmlzU3RhdGVBY3Rpb25zLlNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0ZpZWxkcyA9IGRhdGFzZXQuZmllbGRzO1xuICBPYmplY3Qua2V5cyhmb3JtYXRzKS5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgY29uc3QgZmllbGRJZHggPSBkYXRhc2V0LmZpZWxkcy5maW5kSW5kZXgoZiA9PiBmLm5hbWUgPT09IGNvbHVtbik7XG4gICAgaWYgKGZpZWxkSWR4ID49IDApIHtcbiAgICAgIGNvbnN0IGRpc3BsYXlGb3JtYXQgPSBmb3JtYXRzW2NvbHVtbl07XG4gICAgICBjb25zdCBmaWVsZCA9IG5ld0ZpZWxkc1tmaWVsZElkeF07XG4gICAgICBuZXdGaWVsZHMgPSBzd2FwXyhtZXJnZV8oe2Rpc3BsYXlGb3JtYXR9KShmaWVsZCkgYXMge2lkOiBzdHJpbmd9KShcbiAgICAgICAgbmV3RmllbGRzIGFzIHtpZDogc3RyaW5nfVtdXG4gICAgICApIGFzIEZpZWxkW107XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBuZXdEYXRhc2V0ID0gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtmaWVsZHM6IG5ld0ZpZWxkcyBhcyBGaWVsZFtdfSk7XG4gIGxldCBuZXdTdGF0ZSA9IHBpY2tfKCdkYXRhc2V0cycpKG1lcmdlXyh7W2RhdGFJZF06IG5ld0RhdGFzZXR9KSkoc3RhdGUpO1xuXG4gIC8vIHVwZGF0ZSBjb2xvckZpZWxkIGRpc3BsYXlGb3JtYXRcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdTdGF0ZS5sYXllcnMubWFwKGxheWVyID0+XG4gICAgICBsYXllci5jb25maWc/LmNvbG9yRmllbGQ/Lm5hbWUgJiYgbGF5ZXIuY29uZmlnLmNvbG9yRmllbGQubmFtZSBpbiBmb3JtYXRzXG4gICAgICAgID8gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgICAgY29sb3JGaWVsZDoge1xuICAgICAgICAgICAgICAuLi5sYXllci5jb25maWcuY29sb3JGaWVsZCxcbiAgICAgICAgICAgICAgZGlzcGxheUZvcm1hdDogZm9ybWF0c1tsYXllci5jb25maWcuY29sb3JGaWVsZC5uYW1lXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIDogbGF5ZXJcbiAgICApXG4gIH07XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG50eXBlIExvYWRDb2x1bW5TdGF0c1Rhc2tQYXlsb2FkID0ge1xuICBkYXRhc2V0OiBWaXNTdGF0ZVsnZGF0YXNldHMnXVtzdHJpbmddO1xuICBmaWVsZDogRmllbGQ7XG59O1xuXG5mdW5jdGlvbiBnZXRNYXBwZWRWYWx1ZShmaWx0ZXJQcm9wcz86IEZpbHRlclByb3BzIHwgbnVsbCk6IHVua25vd25bXSB8IHVuZGVmaW5lZCB7XG4gIGlmIChmaWx0ZXJQcm9wcyAmJiAnbWFwcGVkVmFsdWUnIGluIGZpbHRlclByb3BzICYmIEFycmF5LmlzQXJyYXkoZmlsdGVyUHJvcHMubWFwcGVkVmFsdWUpKSB7XG4gICAgcmV0dXJuIGZpbHRlclByb3BzLm1hcHBlZFZhbHVlO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHlpZWxkRm9yUGFpbnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIDApO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVxdWVzdERhdGFzZXRDb2x1bW5TdGF0aXN0aWNzKHtkYXRhc2V0LCBmaWVsZH06IExvYWRDb2x1bW5TdGF0c1Rhc2tQYXlsb2FkKSB7XG4gIC8vIFlpZWxkIHNvIHRoZSBkYXRhIHRhYmxlIGFuZCBwZXItY29sdW1uIGxvYWRpbmcgc3Bpbm5lcnMgY2FuIHBhaW50IGZpcnN0LlxuICBhd2FpdCB5aWVsZEZvclBhaW50KCk7XG4gIGNvbnN0IGZpbHRlclByb3BzID0gZmllbGQuZmlsdGVyUHJvcHMgfHwgZGF0YXNldC5nZXRDb2x1bW5GaWx0ZXJQcm9wcyhmaWVsZC5uYW1lKTtcbiAgY29uc3QgbWFwcGVkVmFsdWUgPSBnZXRNYXBwZWRWYWx1ZShmaWx0ZXJQcm9wcyk7XG4gIGNvbnN0IHZhbHVlcyA9IG1hcHBlZFZhbHVlID8/IGNvbGxlY3RDb2x1bW5WYWx1ZXMoZGF0YXNldC5kYXRhQ29udGFpbmVyLCBmaWVsZC5maWVsZElkeCk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldENvbHVtblN0YXRpc3RpY3Moe1xuICAgIHZhbHVlcyxcbiAgICBmaWVsZFR5cGU6IGZpZWxkLnR5cGVcbiAgfSk7XG5cbiAgcmV0dXJuIHtyZXN1bHQsIGZpbHRlclByb3BzfTtcbn1cblxuY29uc3QgTE9BRF9DT0xVTU5fU1RBVFNfVEFTSyA9IFRhc2suZnJvbVByb21pc2UoXG4gIHJlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyxcbiAgJ0xPQURfQ09MVU1OX1NUQVRTX1RBU0snXG4pO1xuXG4vKipcbiAqIFN0YXJ0IGxvYWRpbmcgY29sdW1uIHN0YXRpc3RpY3MgZm9yIG9uZSBvciBtb3JlIGZpZWxkcy5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQ29sdW1uU3RhdHNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGZpZWxkTmFtZX06IFZpc1N0YXRlQWN0aW9ucy5Mb2FkQ29sdW1uU3RhdHNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGZpZWxkTmFtZXNUb0xvYWQgPSB0b0FycmF5KGZpZWxkTmFtZSk7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBjb25zdCBmaWVsZHNUb0xvYWQgPSBkYXRhc2V0Py5maWVsZHMuZmlsdGVyKGYgPT4gZmllbGROYW1lc1RvTG9hZC5pbmNsdWRlcyhmLm5hbWUpKTtcbiAgaWYgKCFkYXRhc2V0IHx8ICFmaWVsZHNUb0xvYWQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmllbGRzID0gZGF0YXNldC5maWVsZHMubWFwKGZpZWxkID0+XG4gICAgZmllbGROYW1lc1RvTG9hZC5pbmNsdWRlcyhmaWVsZC5uYW1lKSA/IHsuLi5maWVsZCwgaXNMb2FkaW5nU3RhdHM6IHRydWV9IDogZmllbGRcbiAgKTtcbiAgY29uc3QgbmV3RGF0YXNldCA9IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7ZmllbGRzOiBuZXdGaWVsZHN9KTtcblxuICBjb25zdCB0YXNrcyA9IGZpZWxkc1RvTG9hZC5tYXAoZiA9PlxuICAgIExPQURfQ09MVU1OX1NUQVRTX1RBU0soe2RhdGFzZXQ6IG5ld0RhdGFzZXQsIGZpZWxkOiBmfSkuYmltYXAoXG4gICAgICAoe3Jlc3VsdCwgZmlsdGVyUHJvcHN9KSA9PiBsb2FkQ29sdW1uU3RhdHNTdWNjZXNzKG5ld0RhdGFzZXQuaWQsIGYubmFtZSwgcmVzdWx0LCBmaWx0ZXJQcm9wcyksXG4gICAgICAoZXJyb3I6IEVycm9yKSA9PiBsb2FkQ29sdW1uU3RhdHNFcnJvcihuZXdEYXRhc2V0LmlkLCBmLm5hbWUsIGVycm9yKVxuICAgIClcbiAgKTtcbiAgY29uc3QgbmV4dFN0YXRlID0gcGlja18oJ2RhdGFzZXRzJykobWVyZ2VfKHtbZGF0YUlkXTogbmV3RGF0YXNldH0pKShzdGF0ZSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKG5leHRTdGF0ZSwgdGFza3MpO1xufVxuXG4vKipcbiAqIFBlcnNpc3QgbG9hZGVkIGNvbHVtbiBzdGF0aXN0aWNzIG9uIHRoZSBmaWVsZC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQ29sdW1uU3RhdHNTdWNjZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7cmVzdWx0LCBmaWx0ZXJQcm9wcywgZGF0YUlkLCBmaWVsZE5hbWV9OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZENvbHVtblN0YXRzU3VjY2Vzc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGNvbnN0IGZpZWxkID0gKGRhdGFzZXQ/LmZpZWxkcyB8fCBbXSkuZmluZChmID0+IGYubmFtZSA9PT0gZmllbGROYW1lKTtcbiAgaWYgKCFkYXRhc2V0IHx8ICFmaWVsZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpbHRlclByb3BzID0ge1xuICAgIC4uLmZpbHRlclByb3BzLFxuICAgIGNvbHVtblN0YXRzOiByZXN1bHRcbiAgfTtcbiAgY29uc3QgbmV3RmllbGRzID0gZGF0YXNldC5maWVsZHMubWFwKGYgPT5cbiAgICBmLm5hbWUgPT09IGZpZWxkTmFtZSA/IHsuLi5mLCBmaWx0ZXJQcm9wczogbmV3RmlsdGVyUHJvcHMsIGlzTG9hZGluZ1N0YXRzOiBmYWxzZX0gOiBmXG4gICk7XG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge2ZpZWxkczogbmV3RmllbGRzfSk7XG4gIHJldHVybiBwaWNrXygnZGF0YXNldHMnKShtZXJnZV8oe1tkYXRhSWRdOiBuZXdEYXRhc2V0fSkpKHN0YXRlKTtcbn1cblxuLyoqXG4gKiBDbGVhciBsb2FkaW5nIGZsYWcgd2hlbiBjb2x1bW4gc3RhdGlzdGljcyBmYWlsLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRDb2x1bW5TdGF0c0Vycm9yVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZXJyb3IsIGRhdGFJZCwgZmllbGROYW1lfTogVmlzU3RhdGVBY3Rpb25zLkxvYWRDb2x1bW5TdGF0c0Vycm9yVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBDb25zb2xlLmVycm9yKGVycm9yKTtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGNvbnN0IGZpZWxkID0gKGRhdGFzZXQ/LmZpZWxkcyB8fCBbXSkuZmluZChmID0+IGYubmFtZSA9PT0gZmllbGROYW1lKTtcbiAgaWYgKCFkYXRhc2V0IHx8ICFmaWVsZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXdGaWVsZHMgPSBkYXRhc2V0LmZpZWxkcy5tYXAoZiA9PlxuICAgIGYubmFtZSA9PT0gZmllbGROYW1lID8gey4uLmYsIGlzTG9hZGluZ1N0YXRzOiBmYWxzZX0gOiBmXG4gICk7XG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge2ZpZWxkczogbmV3RmllbGRzfSk7XG4gIHJldHVybiBwaWNrXygnZGF0YXNldHMnKShtZXJnZV8oe1tkYXRhSWRdOiBuZXdEYXRhc2V0fSkpKHN0YXRlKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZWRpdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICB2aXNpYmxlOiAhc3RhdGUuZWRpdG9yLnZpc2libGVcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogQ29udmVydCBlZGl0b3Igc2tldGNoIGZlYXR1cmVzIGludG8gYSBHZW9KU09OIGRhdGFzZXQvbGF5ZXIgYW5kIGNsZWFyIHRoZSBza2V0Y2hlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRFZGl0b3JGZWF0dXJlc1RvTGF5ZXJVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgX2FjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkNvbnZlcnRFZGl0b3JGZWF0dXJlc1RvTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghZ2V0QXBwbGljYXRpb25Db25maWcoKS5lbmFibGVEcmF3T25NYXBTa2V0Y2hlcykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGZlYXR1cmVzID0gc3RhdGUuZWRpdG9yLmZlYXR1cmVzO1xuICBpZiAoIWZlYXR1cmVzLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBkYXRhO1xuICB0cnkge1xuICAgIGRhdGEgPSBwcm9jZXNzR2VvanNvbihlZGl0b3JGZWF0dXJlc1RvRmVhdHVyZUNvbGxlY3Rpb24oZmVhdHVyZXMpKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICByZXR1cm4gd2l0aFRhc2soXG4gICAgICBzdGF0ZSxcbiAgICAgIEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04oKS5tYXAoKCkgPT5cbiAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gY29udmVydCBkcmF3biBnZW9tZXRyeSB0byBhIGxheWVyOiAke21lc3NhZ2V9YCxcbiAgICAgICAgICAgIGlkOiAnY29udmVydC1lZGl0b3ItZmVhdHVyZXMnXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBjb25zdCBjbGVhcmVkU3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgZmVhdHVyZXM6IFtdLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsLFxuICAgICAgbW9kZTogRURJVE9SX01PREVTLkVESVRcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgbGFiZWxJZCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDkwKSArIDEwO1xuXG4gIHJldHVybiB1cGRhdGVWaXNEYXRhVXBkYXRlcihjbGVhcmVkU3RhdGUsIHtcbiAgICBkYXRhc2V0czoge1xuICAgICAgaW5mbzoge1xuICAgICAgICBpZDogYGRyYXduLWdlb21ldHJ5LSR7Z2VuZXJhdGVIYXNoSWQoNil9YCxcbiAgICAgICAgbGFiZWw6IGBEcmF3biBHZW9tZXRyeSAke2xhYmVsSWR9YFxuICAgICAgfSxcbiAgICAgIGRhdGFcbiAgICB9LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGtlZXBFeGlzdGluZ0NvbmZpZzogdHJ1ZSxcbiAgICAgIGNlbnRlck1hcDogZmFsc2UsXG4gICAgICBhdXRvQ3JlYXRlTGF5ZXJzOiB0cnVlXG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZHgsIGNvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcbiAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzLiR7aWR4fSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKG9sZEZpbHRlci50eXBlICE9PSBGSUxURVJfVFlQRVMudGltZVJhbmdlKSB7XG4gICAgQ29uc29sZS5lcnJvcihcbiAgICAgIGBzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnIGNhbiBvbmx5IGJlIGNhbGxlZCB0byB1cGRhdGUgYSB0aW1lIGZpbHRlci4gY2hlY2sgZmlsdGVyLnR5cGUgPT09ICd0aW1lUmFuZ2UnYFxuICAgICk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgdXBkYXRlcyA9IGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKTtcblxuICByZXR1cm4gcGlja18oJ2ZpbHRlcnMnKShzd2FwXyhtZXJnZV8odXBkYXRlcykob2xkRmlsdGVyKSkpKHN0YXRlKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpIHtcbiAgY29uc3QgYWxsb3dlZCA9IFsndGltZUZvcm1hdCcsICd0aW1lem9uZSddO1xuICByZXR1cm4gT2JqZWN0LmtleXMoY29uZmlnKS5yZWR1Y2UoKGFjY3UsIHByb3ApID0+IHtcbiAgICBpZiAoIWFsbG93ZWQuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWcgdGFrZXMgdGltZUZvcm1hdCBhbmQvb3IgdGltZXpvbmUgYXMgb3B0aW9ucywgZm91bmQgJHtwcm9wfWBcbiAgICAgICk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9XG5cbiAgICAvLyBoZXJlIHdlIGFyZSBOT1QgY2hlY2tpbmcgaWYgdGltZXpvbmUgb3IgdGltZUZvcm1hdCBpbnB1dCBpcyB2YWxpZFxuICAgIGFjY3VbcHJvcF0gPSBjb25maWdbcHJvcF07XG4gICAgcmV0dXJuIGFjY3U7XG4gIH0sIHt9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZWRpdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghY29uZmlnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHVwZGF0ZXMgPSBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZyk7XG4gIHJldHVybiBwaWNrXygnYW5pbWF0aW9uQ29uZmlnJykobWVyZ2VfKHVwZGF0ZXMpKShzdGF0ZSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2V2ZW50LCBsYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IHtpZDogZGVja2dsTGF5ZXJJZCwgY291bnR9ID0gZXZlbnQ7XG4gIGlmICghbGF5ZXIpIHtcbiAgICBDb25zb2xlLndhcm4oYGxheWVyRmlsdGVyZWRJdGVtcyBsYXllciBkb2VzbnQgZXhpc3RzYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChsYXllci5maWx0ZXJlZEl0ZW1Db3VudD8uW2RlY2tnbExheWVySWRdID09PSBjb3VudCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxheWVyLmZpbHRlcmVkSXRlbUNvdW50ID0ge1xuICAgIC4uLmxheWVyLmZpbHRlcmVkSXRlbUNvdW50LFxuICAgIFtkZWNrZ2xMYXllcklkXTogY291bnRcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3dhcF8obGF5ZXIpKHN0YXRlLmxheWVycylcbiAgfTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgV01TIGZlYXR1cmUgaW5mbyBhbmQgcGluIHRvb2x0aXBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdtc0ZlYXR1cmVJbmZvVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuV01TRmVhdHVyZUluZm9BY3Rpb25cbik6IFMge1xuICBjb25zdCB7bGF5ZXIsIGZlYXR1cmVJbmZvLCBjb29yZGluYXRlfSA9IGFjdGlvbjtcbiAgaWYgKCFsYXllcikge1xuICAgIGNvbnNvbGUud2FybihgV01TIGZlYXR1cmUgaW5mbyBsYXllciBkb2Vzbid0IGV4aXN0YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gQ3JlYXRlIGEgY2xpY2tlZCBvYmplY3Qgc2ltaWxhciB0byBsYXllckNsaWNrVXBkYXRlciB0byBwaW4gdGhlIHRvb2x0aXBcbiAgY29uc3QgY2xpY2tlZCA9IGZlYXR1cmVJbmZvXG4gICAgPyB7XG4gICAgICAgIHBpY2tlZDogdHJ1ZSxcbiAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgd21zRmVhdHVyZUluZm86IGZlYXR1cmVJbmZvXG4gICAgICAgIH0sXG4gICAgICAgIGNvb3JkaW5hdGU6IGNvb3JkaW5hdGUgfHwgWzAsIDBdLFxuICAgICAgICBsYXllcjoge1xuICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICBpZHg6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBsYXllci5pZCksXG4gICAgICAgICAgICBpZDogbGF5ZXIuaWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICA6IG51bGw7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjbGlja2VkXG4gIH07XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50c1xuZXhwb3J0IGZ1bmN0aW9uIHN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2lkeDogZmlsdGVySWR4LCBlbmFibGUgPSBmYWxzZX0gPSBhY3Rpb247XG5cbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgbGV0IG5ld0ZpbHRlciA9IGZpbHRlcjtcblxuICAvLyBpZiB3ZSBlbmFibGUgc3luYyB3ZSBhcmUgZ29pbmcgdG8gbWVyZ2UgZmlsdGVyIGFuZCBhbmltYXRpb25Db25maWcgZG9tYWlucyBhbmQgc3RvcmUgaW50byBmaWx0ZXIuZG9tYWluXG4gIGlmIChlbmFibGUpIHtcbiAgICBjb25zdCBhbmltYXRhYmxlTGF5ZXJzID0gZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMobmV3U3RhdGUubGF5ZXJzKTtcbiAgICAvLyBpZiBubyBhbmltYXRhYmxlTGF5ZXJzIGFyZSBwcmVzZW50IHdlIHNpbXBseSByZXR1cm5cbiAgICBpZiAoIWFuaW1hdGFibGVMYXllcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmV3U3RhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyA9IGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMoYW5pbWF0YWJsZUxheWVycyk7XG4gICAgY29uc3QgaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyID0gQm9vbGVhbihpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLmxlbmd0aCk7XG5cbiAgICBjb25zdCBuZXdGaWx0ZXJEb21haW4gPSBtZXJnZVRpbWVEb21haW5zKFtmaWx0ZXIuZG9tYWluLCBuZXdTdGF0ZS5hbmltYXRpb25Db25maWcuZG9tYWluXSk7XG5cbiAgICAvLyB3ZSBvbmx5IHVwZGF0ZSBhbmltYXRpb25XaW5kb3cgaWYgd2UgaGF2ZSBpbnRlcnZhbCBiYXNlZCBhbmltYXRpb24gbGF5ZXJzIHdpdGggZGVmaW5lZCBpbnRlcnZhbHMgYW5kIHRoZSBjdXJyZW50IGZpbHRlciBhbmltYXRpb24gd2luZG93IGlzIG5vdCBpbnRlcnZhbFxuICAgIGlmIChoYXNJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXIpIHtcbiAgICAgIGlmIChmaWx0ZXIuYW5pbWF0aW9uV2luZG93ICE9PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsKSB7XG4gICAgICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgICAgIGlkOiBmaWx0ZXIuaWQsXG4gICAgICAgICAgYW5pbWF0aW9uV2luZG93OiBBTklNQVRJT05fV0lORE9XLmludGVydmFsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgICAvLyBhZGp1c3QgdGltZSBmaWx0ZXIgaW50ZXJ2YWxcbiAgICAgIG5ld0ZpbHRlciA9IGFkanVzdFRpbWVGaWx0ZXJJbnRlcnZhbChuZXdTdGF0ZSwgbmV3RmlsdGVyKTtcblxuICAgICAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgICAgIG5ld1N0YXRlID0ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gICAgICB9O1xuICAgIH1cblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBhZGp1c3QgdmFsdWUgYmFzZWQgb24gbmV3IGRvbWFpblxuICAgIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihcbiAgICAgIG5ld0ZpbHRlci5hbmltYXRpb25XaW5kb3cgPT09IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWxcbiAgICAgICAgPyBbbmV3RmlsdGVyRG9tYWluWzBdLCBuZXdGaWx0ZXJEb21haW5bMF1dXG4gICAgICAgIDogbmV3RmlsdGVyRG9tYWluLFxuICAgICAgey4uLm5ld0ZpbHRlciwgZG9tYWluOiBuZXdGaWx0ZXJEb21haW59XG4gICAgKTtcblxuICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgICBwcm9wOiAndmFsdWUnLFxuICAgICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gICAgfSk7XG5cbiAgICBuZXdGaWx0ZXIgPSB7XG4gICAgICAuLi4obmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlciksXG4gICAgICBzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZTogdHJ1ZVxuICAgIH07XG5cbiAgICAvLyByZXBsYWNlIGZpbHRlciBpbiBzdGF0ZSB3aXRoIG5ld0ZpbHRlclxuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikobmV3U3RhdGUuZmlsdGVycylcbiAgICB9O1xuXG4gICAgbmV3U3RhdGUgPSBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgICB9KTtcblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBzZXQgdGhlIGFuaW1hdGlvbiBjb25maWcgdmFsdWUgdG8gbWF0Y2ggZmlsdGVyIHZhbHVlXG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIHZhbHVlOiBuZXdGaWx0ZXIudmFsdWVbbmV3RmlsdGVyLnN5bmNUaW1lbGluZU1vZGVdXG4gICAgfSk7XG4gIH1cblxuICAvLyBzZXQgZG9tYWluIGFuZCBzdGVwXG4gIG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgc3luY2VkV2l0aExheWVyVGltZWxpbmU6IGZhbHNlXG4gIH07XG5cbiAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgLy8gcmVzZXQgc3luYyB0aW1lbGluZSBtb2RlXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kXG4gIH0pO1xuXG4gIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgLy8gcmVzZXQgZmlsdGVyIHZhbHVlXG4gIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihuZXdGaWx0ZXIuZG9tYWluLCBuZXdGaWx0ZXIpO1xuXG4gIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gIH0pO1xuXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgfSk7XG5cbiAgLy8gcmVzZXQgYW5pbWF0aW9uIGNvbmZpZyBjdXJyZW50IHRpbWUgdG9cbiAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICB2YWx1ZTogbmV3U3RhdGUuYW5pbWF0aW9uQ29uZmlnLmRvbWFpbj8uWzBdID8/IG51bGxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuc2V0VGltZUZpbHRlclN5bmNUaW1lbGluZU1vZGVBY3Rpb25cbikge1xuICBjb25zdCB7aWQ6IGZpbHRlcklkLCBtb2RlOiBzeW5jVGltZWxpbmVNb2RlfSA9IGFjdGlvbjtcblxuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlcklkeCA9PT0gLTEpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIGlmICghdmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXIsIHN5bmNUaW1lbGluZU1vZGUpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBzeW5jVGltZWxpbmVNb2RlXG4gIH07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKHN0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgcmV0dXJuIGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIobmV3U3RhdGUsIGZpbHRlcklkeCk7XG59XG5cbi8qKlxuICogVXBkYXRlIHN0YXRlIG9mIHRoZSBsb2FkaW5nIGluZGljYXRvci5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgdmlzU3RhdGVcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBQYXlsb2FkIHdpdGggY2hhbmdlIG9mIG51bWJlciBvZiBhY3RpdmUgbG9hZGluZyBhY3Rpb25zLlxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7cGF5bG9hZDoge2NoYW5nZX19OiB7cGF5bG9hZDogU2V0TG9hZGluZ0luZGljYXRvclBheWxvYWR9XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGxldCB7bG9hZGluZ0luZGljYXRvclZhbHVlfSA9IHN0YXRlO1xuICBpZiAoIWxvYWRpbmdJbmRpY2F0b3JWYWx1ZSkge1xuICAgIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZSA9IDA7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZTogTWF0aC5tYXgobG9hZGluZ0luZGljYXRvclZhbHVlICsgY2hhbmdlLCAwKVxuICB9O1xufTtcblxuZnVuY3Rpb24gYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBmaWx0ZXJJZHg6IG51bWJlcik6IFMge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF07XG4gIGlmICgoZmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpIHtcbiAgICBjb25zdCB0aW1lbGluZVZhbHVlID0gZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIoZmlsdGVyKTtcbiAgICBjb25zdCB2YWx1ZSA9IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy50aW1lU3RlcHNcbiAgICAgID8gc25hcFRvTWFya3ModGltZWxpbmVWYWx1ZSwgc3RhdGUuYW5pbWF0aW9uQ29uZmlnLnRpbWVTdGVwcylcbiAgICAgIDogdGltZWxpbmVWYWx1ZTtcbiAgICByZXR1cm4gc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlcihzdGF0ZSwge3ZhbHVlfSk7XG4gIH1cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiBnZXRUaW1lbGluZVZhbHVlRnJvbUZpbHRlcihmaWx0ZXIpIHtcbiAgcmV0dXJuIGZpbHRlci52YWx1ZVtmaWx0ZXIuc3luY1RpbWVsaW5lTW9kZV07XG59XG5cbmZ1bmN0aW9uIGdldFN5bmNBbmltYXRpb25Nb2RlKGZpbHRlcjogVGltZVJhbmdlRmlsdGVyKSB7XG4gIGlmIChmaWx0ZXIuYW5pbWF0aW9uV2luZG93ID09PSBBTklNQVRJT05fV0lORE9XLmZyZWUpIHtcbiAgICByZXR1cm4gZmlsdGVyLnN5bmNUaW1lbGluZU1vZGUgPz8gU1lOQ19USU1FTElORV9NT0RFUy5lbmQ7XG4gIH1cblxuICByZXR1cm4gU1lOQ19USU1FTElORV9NT0RFUy5lbmQ7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUoZmlsdGVyOiBUaW1lUmFuZ2VGaWx0ZXIsIG5ld01vZGU6IG51bWJlcikge1xuICByZXR1cm4gIShcbiAgICBmaWx0ZXIuYW5pbWF0aW9uV2luZG93ICE9PSBBTklNQVRJT05fV0lORE9XLmZyZWUgJiYgbmV3TW9kZSA9PT0gU1lOQ19USU1FTElORV9NT0RFUy5zdGFydFxuICApO1xufVxuXG5mdW5jdGlvbiBhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwoc3RhdGUsIGZpbHRlcikge1xuICBjb25zdCBpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzID0gZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyhzdGF0ZS5sYXllcnMpO1xuXG4gIGxldCBpbnRlcnZhbDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGlmIChpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgaW50ZXJ2YWxJbmRleCA9IGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMucmVkdWNlKChjdXJyZW50SW5kZXgsIGwpID0+IHtcbiAgICAgIGlmIChsLm1ldGEudGFyZ2V0VGltZUludGVydmFsKSB7XG4gICAgICAgIGNvbnN0IG5ld0luZGV4ID0gVElNRV9JTlRFUlZBTFNfT1JERVJFRC5maW5kSW5kZXgoaSA9PiBpID09PSBsLm1ldGEudGFyZ2V0VGltZUludGVydmFsKTtcbiAgICAgICAgcmV0dXJuIG5ld0luZGV4ID4gLTEgJiYgbmV3SW5kZXggPCBjdXJyZW50SW5kZXggPyBuZXdJbmRleCA6IGN1cnJlbnRJbmRleDtcbiAgICAgIH1cbiAgICB9LCBUSU1FX0lOVEVSVkFMU19PUkRFUkVELmxlbmd0aCAtIDEpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBoZXhUaWxlSW50ZXJ2YWwgPSBUSU1FX0lOVEVSVkFMU19PUkRFUkVEW2ludGVydmFsSW5kZXhdO1xuICAgIGludGVydmFsID0gTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbFtoZXhUaWxlSW50ZXJ2YWxdO1xuICB9XG5cbiAgaWYgKCFpbnRlcnZhbCkge1xuICAgIHJldHVybiBmaWx0ZXI7XG4gIH1cblxuICAvLyBhZGp1c3QgZmlsdGVyXG4gIGNvbnN0IHRpbWVGb3JtYXQgPSBnZXREZWZhdWx0VGltZUZvcm1hdChpbnRlcnZhbCk7XG4gIGNvbnN0IHVwZGF0ZWRQbG90VHlwZSA9IHsuLi5maWx0ZXIucGxvdFR5cGUsIGludGVydmFsLCB0aW1lRm9ybWF0fTtcbiAgY29uc3QgbmV3RmlsdGVyID0gdXBkYXRlVGltZUZpbHRlclBsb3RUeXBlKGZpbHRlciwgdXBkYXRlZFBsb3RUeXBlLCBzdGF0ZS5kYXRhc2V0cyk7XG4gIHJldHVybiBhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93KHN0YXRlLCBuZXdGaWx0ZXIpO1xufVxuXG4vLyBGaW5kIGRhdGFJZCBmcm9tIGEgc2F2ZWQgdmlzU3RhdGUgcHJvcGVydHk6XG4vLyBsYXllcnMsIGZpbHRlcnMsIGludGVyYWN0aW9ucywgbGF5ZXJCbGVuZGluZywgb3ZlcmxheUJsZW5kaW5nLCBzcGxpdE1hcHMsIGFuaW1hdGlvbkNvbmZpZywgZWRpdG9yXG4vLyByZXBsYWNlIGl0IHdpdGggYW5vdGhlciBkYXRhSWRcbmZ1bmN0aW9uIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyh2YWx1ZTogYW55LCBkYXRhSWQ6IHN0cmluZywgZGF0YUlkVG9SZXBsYWNlOiBzdHJpbmcpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gZm9yIGxheWVycywgZmlsdGVycywgY2FsbCBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMgb24gZWFjaCBpdGVtIGluIGFycmF5XG4gICAgY29uc3QgcmVwbGFjZWQgPSB2YWx1ZVxuICAgICAgLm1hcCh2ID0+IGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyh2LCBkYXRhSWQsIGRhdGFJZFRvUmVwbGFjZSkpXG4gICAgICAuZmlsdGVyKGQgPT4gZCk7XG4gICAgcmV0dXJuIHJlcGxhY2VkLmxlbmd0aCA/IHJlcGxhY2VkIDogbnVsbDtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlLmRhdGFJZCA9PT0gJ3N0cmluZycgJiYgdmFsdWUuZGF0YUlkID09PSBkYXRhSWQpIHtcbiAgICAvLyBvdGhlcnNcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmFsdWUsXG4gICAgICBkYXRhSWQ6IGRhdGFJZFRvUmVwbGFjZVxuICAgIH07XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZS5kYXRhSWQpICYmIHZhbHVlLmRhdGFJZC5pbmNsdWRlcyhkYXRhSWQpKSB7XG4gICAgLy8gZmlsdGVyXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgZGF0YUlkOiB2YWx1ZS5kYXRhSWQubWFwKGQgPT4gKGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvUmVwbGFjZSA6IGQpKVxuICAgIH07XG4gIH0gZWxzZSBpZiAodmFsdWUuY29uZmlnPy5kYXRhSWQgJiYgdmFsdWUuY29uZmlnPy5kYXRhSWQgPT09IGRhdGFJZCkge1xuICAgIC8vIGxheWVyXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLnZhbHVlLmNvbmZpZyxcbiAgICAgICAgZGF0YUlkOiBkYXRhSWRUb1JlcGxhY2VcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2UgaWYgKGlzT2JqZWN0KHZhbHVlKSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGRhdGFJZCkpIHtcbiAgICAvLyBmb3IgdmFsdWUgc2F2ZWQgYXMge1tkYXRhSWRdOiB7Li4ufX1cbiAgICByZXR1cm4ge1tkYXRhSWRUb1JlcGxhY2VdOiB2YWx1ZVtkYXRhSWRdfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBGaW5kIGRhdGFzZXRJZHMgZGVyaXZlZCBhIHNhdmVkIHZpc1N0YXRlIFByb3BlcnR5O1xuZnVuY3Rpb24gZmluZENoaWxkRGF0YXNldElkcyh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBmb3IgbGF5ZXJzLCBmaWx0ZXJzLCBjYWxsIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyBvbiBlYWNoIGl0ZW0gaW4gYXJyYXlcbiAgICBjb25zdCBjaGlsZERhdGFJZHMgPSB2YWx1ZS5tYXAoZmluZENoaWxkRGF0YXNldElkcykuZmlsdGVyKGQgPT4gZCk7XG4gICAgcmV0dXJuIGNoaWxkRGF0YUlkcy5sZW5ndGggPyBjaGlsZERhdGFJZHMgOiBudWxsO1xuICB9XG5cbiAgLy8gY2hpbGQgZGF0YSBpZCB1c3VhbGx5IHN0b3JlcyBpbiB0aGUgZGVyaXZlZCBkYXRhc2V0IGluZm9cbiAgcmV0dXJuIHZhbHVlPy5uZXdEYXRhc2V0Py5pbmZvLmlkIHx8IG51bGw7XG59XG5cbi8vIG1vdmVkIHVubWVyZ2VkIGxheWVycywgZmlsdGVycywgaW50ZXJhY3Rpb25zXG5mdW5jdGlvbiBtb3ZlVmFsdWVUb0JlTWVyZ2VkKHN0YXRlLCBwcm9wVmFsdWVzLCB7cHJvcCwgdG9NZXJnZVByb3AsIHNhdmVVbm1lcmdlZH0pIHtcbiAgLy8gcmVtb3ZlIHByb3AgdmFsdWUgZnJvbSBzdGF0ZVxuICAvLyBUT0RPOiBzaG91bGQgd2UgYWRkIHJlbW92ZSB1cGRhdGVyIHRvIG1lcmdlciBhcyB3ZWxsP1xuICBpZiAoIXByb3BWYWx1ZXMpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qgc3RhdGVSZW1vdmVkID1cbiAgICBwcm9wID09PSAnbGF5ZXJzJ1xuICAgICAgPyBwcm9wVmFsdWVzLnJlZHVjZSgoYWNjdSwgcHJvcFZhbHVlKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkOiBwcm9wVmFsdWUuaWR9KSwgc3RhdGUpXG4gICAgICA6IEFycmF5LmlzQXJyYXkoc3RhdGVbcHJvcF0pXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBbcHJvcF06IHN0YXRlW3Byb3BdLmZpbHRlcihwID0+ICFwcm9wVmFsdWVzLmZpbmQocHJvcFZhbHVlID0+IHAuaWQgPT09IHByb3BWYWx1ZS5pZCkpXG4gICAgICAgIH1cbiAgICAgIDogLy8gaWYgbm90IGFycmF5LCB3ZSB3b24ndCByZW1vdmUgaXQsIHJlbW92ZSBkYXRhc2V0IHNob3VsZCBoYW5kbGUgaXRcbiAgICAgICAgc3RhdGU7XG5cbiAgLy8gbW92ZSB0byBzdGF0ZVRvQmVNZXJnZWRcbiAgY29uc3QgdG9CZU1lcmdlZCA9IHtcbiAgICBbdG9NZXJnZVByb3BdOiBzYXZlVW5tZXJnZWRcbiAgICAgID8gLy8gY2FsbCBtZXJnZSBzYXZlVW5tZXJnZWQgbWV0aG9kXG4gICAgICAgIHNhdmVVbm1lcmdlZChzdGF0ZVJlbW92ZWQsIHByb3BWYWx1ZXMpXG4gICAgICA6IC8vIGlmIHRvTWVyZ2VQcm9wIGlzIGFyYWF5LCBhcHBlbmQgdG8gaXRcbiAgICAgIEFycmF5LmlzQXJyYXkoc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSlcbiAgICAgID8gWy4uLnN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0sIC4uLnByb3BWYWx1ZXNdXG4gICAgICA6IC8vIHNhdmUgcHJvcFZhbHVlcyB0byB0b01lcmdlXG4gICAgICBpc09iamVjdChzdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSxcbiAgICAgICAgICAuLi5wcm9wVmFsdWVzXG4gICAgICAgIH1cbiAgICAgIDogc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGVSZW1vdmVkLFxuICAgIC4uLnRvQmVNZXJnZWRcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZURhdGFzZXRBbmREZXBzPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZ1xuKTogVCB7XG4gIHJldHVybiBjb21wb3NlXzxUPihbXG4gICAgYXBwbHlfKHJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGUsIHtkYXRhSWQsIGRhdGFJZFRvVXNlfSksXG4gICAgYXBwbHlfKHJlbW92ZURhdGFzZXRVcGRhdGVyLCB7ZGF0YUlkfSlcbiAgXSkoc3RhdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2U8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhSWRUb1VzZTogc3RyaW5nXG4pOiBUIHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoc3RhdGUsIHN0YXRlLnNjaGVtYSk7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHJlcGxhY2VEYXRhc2V0QW5kRGVwcyhzdGF0ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSk7XG4gIC8vIG1ha2UgYSBjb3B5IG9mIGxheWVyT3JkZXIsIGJlY2F1c2UgbGF5ZXIgaWQgd2lsbCBiZSByZW1vdmVkIGZyb20gaXQgYnkgY2FsbGluZyByZW1vdmVMYXllclVwZGF0ZXJcbiAgY29uc3QgcHJlc2VydmVMYXllck9yZGVyID0gWy4uLnN0YXRlLmxheWVyT3JkZXJdO1xuXG4gIC8vIHByZXNlcnZlIGRhdGFzZXQgb3JkZXJcbiAgbmV4dFN0YXRlLnByZXNlcnZlRGF0YXNldE9yZGVyID0gT2JqZWN0LmtleXMoc3RhdGUuZGF0YXNldHMpLm1hcChkID0+XG4gICAgZCA9PT0gZGF0YUlkID8gZGF0YUlkVG9Vc2UgOiBkXG4gICk7XG5cbiAgLy8gcHJlc2VydmVMYXllck9yZGVyXG4gIGlmIChuZXh0U3RhdGUubGF5ZXJUb0JlTWVyZ2VkPy5sZW5ndGgpIHtcbiAgICAvLyBjb3B5IHNwbGl0IG1hcHMgdG8gYmUgbWVyZ2VkLCBiZWNhdXNlIGl0IHdpbGwgYmUgcmVzZXQgaW4gcmVtb3ZlIGxheWVyXG4gICAgbmV4dFN0YXRlLnNwbGl0TWFwc1RvQmVNZXJnZWQgPSBzZXJpYWxpemVkU3RhdGU/LnNwbGl0TWFwcyA/PyBbXTtcbiAgICBuZXh0U3RhdGUubGF5ZXJPcmRlciA9IFsuLi5wcmVzZXJ2ZUxheWVyT3JkZXJdO1xuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGU8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIHtkYXRhSWQsIGRhdGFJZFRvVXNlfToge2RhdGFJZDogc3RyaW5nOyBkYXRhSWRUb1VzZTogc3RyaW5nfVxuKTogVCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKHN0YXRlLCBzdGF0ZS5zY2hlbWEpO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHN0YXRlLm1lcmdlcnMucmVkdWNlKFxuICAgIChcbiAgICAgIGFjY3VTdGF0ZSxcbiAgICAgIHtwcm9wLCB0b01lcmdlUHJvcCwgcmVwbGFjZVBhcmVudERhdGFzZXRJZHMsIGdldENoaWxkRGF0YXNldElkcywgc2F2ZVVubWVyZ2VkLCBwcmVzZXJ2ZU9yZGVyfVxuICAgICkgPT4ge1xuICAgICAgLy8gZ2V0IGRhdGFzZXQgaWRzIHRoYXQgYXJlIGRlcGVuZHMgb24gdGhpcyBkYXRhc2V0XG4gICAgICBjb25zdCBwcm9wcyA9IHRvQXJyYXkocHJvcCk7XG4gICAgICBjb25zdCB0b01lcmdlUHJvcHMgPSB0b0FycmF5KHRvTWVyZ2VQcm9wKTtcbiAgICAgIGNvbnN0IHNhdmVkUHJvcHMgPSBzZXJpYWxpemVkU3RhdGUgPyBwcm9wcy5tYXAocCA9PiBzZXJpYWxpemVkU3RhdGVbcF0pIDogW107XG5cbiAgICAgIGxldCByZXBsYWNlZFN0YXRlID0gYWNjdVN0YXRlO1xuICAgICAgc2F2ZWRQcm9wcy5mb3JFYWNoKChwcm9wVmFsdWUsIGkpID0+IHtcbiAgICAgICAgY29uc3QgbWVyZ2VyT3B0aW9ucyA9IHtcbiAgICAgICAgICBwcm9wOiBwcm9wc1tpXSxcbiAgICAgICAgICB0b01lcmdlUHJvcDogdG9NZXJnZVByb3BzW2ldLFxuICAgICAgICAgIGdldENoaWxkRGF0YXNldElkcyxcbiAgICAgICAgICBzYXZlVW5tZXJnZWRcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXBsYWNlZEl0ZW0gPVxuICAgICAgICAgIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzPy4ocHJvcFZhbHVlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKSB8fFxuICAgICAgICAgIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyhwcm9wVmFsdWUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UpO1xuICAgICAgICByZXBsYWNlZFN0YXRlID0gcmVwbGFjZWRJdGVtXG4gICAgICAgICAgPyByZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZShyZXBsYWNlZFN0YXRlLCByZXBsYWNlZEl0ZW0sIG1lcmdlck9wdGlvbnMpXG4gICAgICAgICAgOiByZXBsYWNlZFN0YXRlO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBtZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICByZXBsYWNlZFN0YXRlW21lcmdlck9wdGlvbnMudG9NZXJnZVByb3BdPy5sZW5ndGggJiZcbiAgICAgICAgICBwcmVzZXJ2ZU9yZGVyXG4gICAgICAgICkge1xuICAgICAgICAgIHJlcGxhY2VkU3RhdGVbcHJlc2VydmVPcmRlcl0gPSBwcm9wVmFsdWUubWFwKGl0ZW0gPT4gaXRlbS5pZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVwbGFjZWRTdGF0ZTtcbiAgICB9LFxuICAgIHN0YXRlXG4gICk7XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZVByb3BWYWx1ZUluU3RhdGUoXG4gIHN0YXRlLFxuICByZXBsYWNlZEl0ZW0sXG4gIHtwcm9wLCB0b01lcmdlUHJvcCwgZ2V0Q2hpbGREYXRhc2V0SWRzLCBzYXZlVW5tZXJnZWR9XG4pIHtcbiAgLy8gcHJvcCBpcyBkZXBlbmRzIG9uIHRoZSBkYXRhc2V0IHRvIGJlIHJlcGxhY2VkXG4gIC8vIHJlbW92ZSBwcm9wIGZyb20gc3RhdGUsIGFuZCBtb3ZlIGl0IHRvIHRvQmVNZXJnZWRcbiAgbGV0IG5leHRTdGF0ZSA9IG1vdmVWYWx1ZVRvQmVNZXJnZWQoc3RhdGUsIHJlcGxhY2VkSXRlbSwge3Byb3AsIHRvTWVyZ2VQcm9wLCBzYXZlVW5tZXJnZWR9KTtcbiAgY29uc3QgY2hpbGREYXRhSWRzID0gZ2V0Q2hpbGREYXRhc2V0SWRzPy4ocmVwbGFjZWRJdGVtKSB8fCBmaW5kQ2hpbGREYXRhc2V0SWRzKHJlcGxhY2VkSXRlbSk7XG5cbiAgaWYgKGNoaWxkRGF0YUlkcykge1xuICAgIG5leHRTdGF0ZSA9IHRvQXJyYXkoY2hpbGREYXRhSWRzKS5yZWR1Y2UoKGFjY3UsIGNoaWxkRGF0YUlkKSA9PiB7XG4gICAgICAvLyBzaG91bGRuJ3QgbmVlZCB0byBjaGFuZ2UgY2hpbGQgZGF0YXNldCBpZCxcbiAgICAgIC8vIGJ1dCBzdGlsbCBuZWVkIHRvIG1vdmUgb3V0IG9mIHN0YXRlIGFuZCBtZXJnZSBiYWNrIGluXG4gICAgICByZXR1cm4gcmVwbGFjZURhdGFzZXRBbmREZXBzKGFjY3UsIGNoaWxkRGF0YUlkLCBjaGlsZERhdGFJZCk7XG4gICAgfSwgbmV4dFN0YXRlKTtcbiAgfVxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7O0FBRUEsU0FBUUEsSUFBSSxRQUFPLFlBQVk7QUFFL0IsT0FBT0MsSUFBSSxNQUFNLG1CQUFtQjtBQUNwQyxPQUFPQyxTQUFTLE1BQU0sV0FBVztBQUNqQyxTQUFRQyxPQUFPLElBQUlDLE9BQU8sUUFBTyxlQUFlO0FBQ2hELE9BQU9DLFNBQVMsTUFBTSxrQkFBa0I7QUFDeEMsT0FBT0MsR0FBRyxNQUFNLFlBQVk7QUFDNUIsT0FBT0MsT0FBTyxNQUFNLGdCQUFnQjtBQUNwQyxPQUFPQyxJQUFJLE1BQU0sYUFBYTtBQUM5QixPQUFPQyxJQUFJLE1BQU0sYUFBYTtBQUM5QixPQUFPQyxHQUFHLE1BQU0sWUFBWTtBQUM1QixPQUFPQyxJQUFJLElBQUdDLHFCQUFxQixFQUFFQyxRQUFRLFFBQU8sa0JBQWtCO0FBQ3RFO0FBQ0EsU0FDRUMsVUFBVSxFQUNWQyxXQUFXLEVBQ1hDLGNBQWMsRUFDZEMsaUJBQWlCLEVBQ2pCQyxXQUFXLFFBQ04sa0JBQWtCO0FBQ3pCO0FBQ0EsU0FDRUMsZUFBZSxFQU1mQyxnQkFBZ0IsRUFDaEJDLHVCQUF1QixFQUN2QkMsaUJBQWlCLEVBQ2pCQyxlQUFlLEVBQ2ZDLG9CQUFvQixFQUNwQkMsOEJBQThCLEVBQzlCQyxtQkFBbUIsRUFDbkJDLFlBQVksRUFDWkMsZ0JBQWdCLEVBQ2hCQyxZQUFZLEVBQ1pDLGFBQWEsRUFDYkMsU0FBUyxFQUNUQyxrQkFBa0IsRUFDbEJDLFNBQVMsSUFBSUMsWUFBWSxFQUN6QkMsaUJBQWlCLEVBQ2pCQyxpQkFBaUIsRUFFakJDLHNCQUFzQixFQUN0QkMsb0JBQW9CLFFBQ2Ysb0JBQW9COztBQUUzQjtBQUNBLFNBQ0VDLG9CQUFvQixFQUNwQkMsc0JBQXNCLEVBQ3RCQyxXQUFXLEVBQ1hDLG9CQUFvQixFQUNwQkMsc0JBQXNCLEVBQ3RCQyxXQUFXLEVBQ1hDLHFCQUFxQixFQUNyQkMseUJBQXlCLEVBQ3pCQyxpQkFBaUIsRUFDakJDLGlDQUFpQyxFQUNqQ0MsMEJBQTBCLEVBQzFCQyxlQUFlLEVBQ2ZDLG9CQUFvQixFQUNwQkMsZ0JBQWdCLEVBQ2hCQyxxQkFBcUIsRUFDckJDLGdCQUFnQixFQUNoQkMsb0JBQW9CLEVBQ3BCQywyQkFBMkIsRUFDM0JDLFNBQVMsRUFDVEMsUUFBUSxFQUNSQyxhQUFhLEVBQ2JDLFVBQVUsRUFDVkMsZUFBZSxFQUNmQyx3QkFBd0IsRUFDeEJDLEdBQUcsRUFDSEMsZ0JBQWdCLEVBQ2hCQyxnQkFBZ0IsRUFDaEJDLGlCQUFpQixFQUNqQkMsWUFBWSxFQUNaQyxvQkFBb0IsUUFDZixrQkFBa0I7QUFDekIsU0FBUUMsY0FBYyxFQUFFQyxPQUFPLEVBQUVDLFNBQVMsUUFBTyx5QkFBeUI7QUFDMUU7QUFDQSxTQUNFQyxnQkFBZ0IsRUFDaEJDLFVBQVUsRUFDVkMsYUFBYSxFQUNiQyxrQkFBa0IsRUFDbEJDLFlBQVksRUFDWkMsWUFBWSxFQUNaQyxpQkFBaUIsRUFDakJDLEdBQUcsRUFDSEMsdUJBQXVCLEVBQ3ZCQyxpQkFBaUIsRUFDakJDLGdCQUFnQixFQUNoQkMsb0JBQW9CLEVBQ3BCQyxVQUFVLEVBQ1ZDLFVBQVUsRUFDVkMsbUJBQW1CLEVBQ25CQyxjQUFjLEVBQ2RDLFdBQVcsRUFDWEMsdUJBQXVCLEVBQ3ZCQyx3QkFBd0IsRUFDeEJDLDZCQUE2QixFQUM3QkMsNkJBQTZCLEVBQzdCQyw4QkFBOEIsRUFDOUJDLDZCQUE2QixFQUM3QkMsNkJBQTZCLEVBQzdCQyxjQUFjLFFBQ1Qsc0JBQXNCO0FBQzdCLFNBQVFDLGVBQWUsRUFBRUMsS0FBSyxFQUFFQyxZQUFZLFFBQU8sbUJBQW1CO0FBQ3RFLFNBQ0VDLE1BQU0sRUFDTkMsUUFBUSxFQUNSQyxhQUFhLEVBQ2JDLE1BQU0sRUFDTkMsUUFBUSxFQUNSQyxLQUFLLEVBQ0xDLG9CQUFvQixFQUNwQkMsS0FBSyxRQUNBLG9CQUFvQjtBQUMzQixTQUFRQyxhQUFhLEVBQUVDLHFCQUFxQixRQUFPLGtCQUFrQjtBQUNyRSxTQUNFQyxpQkFBaUIsRUFDakJDLHFCQUFxQixFQUNyQkMsZ0JBQWdCLEVBQ2hCQyxlQUFlLEVBQ2ZDLGNBQWMsRUFDZEMsaUJBQWlCLEVBQ2pCQyxxQkFBcUIsUUFDaEIsb0JBQW9CO0FBRTNCLE9BQU9DLGNBQWMsTUFBNkMsb0JBQW9CO0FBQ3RGLFNBQVFDLGNBQWMsUUFBTyx1QkFBdUI7QUFpQnBELFNBR0VDLGdCQUFnQixFQUNoQkMsa0JBQWtCLEVBQ2xCQyxrQkFBa0IsRUFDbEJDLGVBQWUsRUFDZkMsZ0JBQWdCLEVBQ2hCQyxtQkFBbUIsUUFDZCxrQkFBa0I7QUFDekIsU0FBUUMsZ0JBQWdCLFFBQU8scUJBQXFCO0FBQ3BELFNBQ0VDLGtCQUFrQixFQUNsQkMsZ0JBQWdCLEVBQ2hCQyx1QkFBdUIsRUFDdkJDLGlDQUFpQyxFQUNqQ0MsZ0JBQWdCLEVBQ2hCQywyQkFBMkIsRUFDM0JDLDJCQUEyQixFQUMzQkMsMkJBQTJCLEVBQzNCQyx1QkFBdUIsRUFDdkJDLHdCQUF3QixFQUN4QkMsNEJBQTRCLEVBQzVCQyxpQkFBaUIsRUFDakJDLDZCQUE2QixRQUN4QixlQUFlO0FBQ3RCLFNBQVFDLG9CQUFvQixFQUFFQyxlQUFlLFFBQU8sa0JBQWtCO0FBQ3RFLFNBQVFDLG9CQUFvQixRQUFPLG9CQUFvQjtBQUN2RCxTQUNFQyxjQUFjLEVBQ2RDLDBCQUEwQixFQUMxQkMsK0JBQStCLEVBQy9CQyxnQkFBZ0IsRUFDaEJDLDRCQUE0QixFQUM1QkMsd0JBQXdCLEVBQ3hCQyxvQkFBb0IsRUFDcEJDLHlCQUF5QixFQUN6QkMsc0JBQXNCLEVBQ3RCQyxpQkFBaUIsRUFDakJDLDhCQUE4QixFQUM5QkMsbUJBQW1CLEVBQ25CQyxtQkFBbUIsUUFDZCxrQkFBa0I7QUFDekIsU0FBUUMsWUFBWSxRQUFPLG9CQUFvQjtBQUcvQyxTQUFRQyxhQUFhLFFBQU8sY0FBYzs7QUFFMUM7QUFDQTtBQUNBaEoscUJBQXFCLENBQUMsQ0FBQzs7QUFFdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQU1pSixnQkFBZ0IsR0FBRyxJQUFJO0FBQzdCOztBQUVBLE9BQU8sSUFBTUMsd0JBQTJDLEdBQUc7RUFDekRDLE9BQU8sRUFBRTtJQUNQQyxFQUFFLEVBQUUsU0FBUztJQUNiQyxLQUFLLEVBQUUsc0JBQXNCO0lBQzdCQyxPQUFPLEVBQUUsSUFBSTtJQUNiQyxNQUFNLEVBQUU7TUFDTkMsWUFBWSxFQUFFLENBQUMsQ0FBQztNQUNoQkMsV0FBVyxFQUFFLEtBQUs7TUFDbEJDLFdBQVcsRUFBRTVGLGFBQWEsQ0FBQzZGO0lBQzdCO0VBQ0YsQ0FBQztFQUNEQyxRQUFRLEVBQUU7SUFDUlIsRUFBRSxFQUFFLFVBQVU7SUFDZEMsS0FBSyxFQUFFLHVCQUF1QjtJQUM5QkMsT0FBTyxFQUFFLEtBQUs7SUFDZE8sUUFBUSxFQUFFLElBQUk7SUFDZE4sTUFBTSxFQUFFO01BQ05PLFdBQVcsRUFBRTtJQUNmO0VBQ0YsQ0FBQztFQUNEQyxLQUFLLEVBQUU7SUFDTFgsRUFBRSxFQUFFLE9BQU87SUFDWEMsS0FBSyxFQUFFLG9CQUFvQjtJQUMzQkMsT0FBTyxFQUFFLEtBQUs7SUFDZEMsTUFBTSxFQUFFO01BQ047TUFDQVMsSUFBSSxFQUFFO0lBQ1I7RUFDRixDQUFDO0VBQ0RDLFVBQVUsRUFBRTtJQUNWYixFQUFFLEVBQUUsWUFBWTtJQUNoQkMsS0FBSyxFQUFFLHlCQUF5QjtJQUNoQ0MsT0FBTyxFQUFFLEtBQUs7SUFDZE8sUUFBUSxFQUFFO0VBQ1o7QUFDRixDQUFDO0FBRUQsT0FBTyxJQUFNSyx3QkFBeUMsR0FBRztFQUN2REMsTUFBTSxFQUFFLElBQUk7RUFDWkMsV0FBVyxFQUFFLElBQUk7RUFDakJDLEtBQUssRUFBRSxDQUFDO0VBQ1JDLFdBQVcsRUFBRSxLQUFLO0VBQ2xCQyxTQUFTLEVBQUUsSUFBSTtFQUNmQyxVQUFVLEVBQUUsSUFBSTtFQUNoQkMsUUFBUSxFQUFFLElBQUk7RUFDZEMsaUJBQWlCLEVBQUUsSUFBSTtFQUN2QkMsV0FBVyxFQUFFLEtBQUs7RUFDbEJDLFFBQVEsRUFBRTtBQUNaLENBQUM7QUFFRCxPQUFPLElBQU1DLGNBQXNCLEdBQUc7RUFDcENDLElBQUksRUFBRTlHLFlBQVksQ0FBQytHLFlBQVk7RUFDL0JDLFFBQVEsRUFBRSxFQUFFO0VBQ1pDLGVBQWUsRUFBRSxJQUFJO0VBQ3JCQyxPQUFPLEVBQUU7QUFDWCxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTUMsaUJBQTJCLEdBQUc7RUFDekM7RUFDQUMsT0FBTyxFQUFFO0lBQ1BDLEtBQUssRUFBRSxFQUFFO0lBQ1RDLFdBQVcsRUFBRTtFQUNmLENBQUM7RUFDRDtFQUNBQyxNQUFNLEVBQUUsRUFBRTtFQUNWQyxTQUFTLEVBQUUsRUFBRTtFQUNiQyxlQUFlLEVBQUUsRUFBRTtFQUNuQkMsVUFBVSxFQUFFLEVBQUU7RUFDZEMsb0JBQW9CLEVBQUUsSUFBSTtFQUUxQjtFQUNBQyxPQUFPLEVBQUUsRUFBRTtFQUNYQyxnQkFBZ0IsRUFBRSxFQUFFO0VBRXBCO0VBQ0FDLFFBQVEsRUFBRSxDQUFDLENBQUM7RUFDWkMsY0FBYyxFQUFFQyxTQUFTO0VBRXpCO0VBQ0FDLE9BQU8sRUFBRSxFQUFFO0VBQ1hDLFdBQVcsRUFBRSxFQUFFO0VBRWY7RUFDQUMsV0FBVyxFQUFFLEVBQUU7RUFDZkMscUJBQXFCLEVBQUUsRUFBRTtFQUN6QkMsb0JBQW9CLEVBQUUsSUFBSTtFQUMxQkMsdUJBQXVCLEVBQUUsS0FBSztFQUU5QkMsaUJBQWlCLEVBQUVyRCx3QkFBd0I7RUFDM0NzRCxxQkFBcUIsRUFBRSxDQUFDLENBQUM7RUFFekJDLGFBQWEsRUFBRSxRQUFRO0VBQ3ZCQyxlQUFlLEVBQUUsUUFBUTtFQUN6QkMsU0FBUyxFQUFFWCxTQUFTO0VBQ3BCWSxPQUFPLEVBQUVaLFNBQVM7RUFDbEJhLFFBQVEsRUFBRSxDQUFDLENBQUM7RUFDWkMsa0JBQWtCLEVBQUV2SSxvQkFBb0I7RUFFeEM7RUFDQXdJLFNBQVMsRUFBRTtJQUNUO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0VBQUEsQ0FDRDtFQUNEQyxtQkFBbUIsRUFBRSxFQUFFO0VBQ3ZCQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7RUFDckI7RUFDQUMsWUFBWSxFQUFFM0gsWUFBWTtFQUUxQjtFQUNBO0VBQ0E0SCxlQUFlLEVBQUVqRCx3QkFBd0I7RUFFekNrRCxNQUFNLEVBQUV2QyxjQUFjO0VBRXRCd0MsV0FBVyxFQUFFLEtBQUs7RUFDbEJDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztFQUN2QjtFQUNBQyxxQkFBcUIsRUFBRSxDQUFDO0VBRXhCQyxPQUFPLEVBQUUsRUFBRTtFQUNYQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0VBRWY7RUFDQUMsT0FBTyxFQUFFeEgsaUJBQWlCO0VBRTFCO0VBQ0F5SCxNQUFNLEVBQUVsSDtBQUNWLENBQUM7QUFFRCxPQUFPLElBQU1tSCxzQkFBc0IsR0FBRzdOLElBQUksQ0FBQzhOLFlBQVksQ0FDckQsVUFBQ0MsQ0FBQyxFQUFFQyxFQUFFO0VBQUEsT0FBS0EsRUFBRSxDQUFDLENBQUM7QUFBQSxHQUVmLHdCQUNGLENBQUM7QUFFRCxPQUFPLElBQU1DLDRCQUE0QixHQUFHak8sSUFBSSxDQUFDOE4sWUFBWSxDQUMzRCxVQUFDQyxDQUFDLEVBQUVDLEVBQUU7RUFBQSxPQUFLQSxFQUFFLENBQUMsQ0FBQztBQUFBLEdBRWYsOEJBQ0YsQ0FBQztBQU9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTRSwyQkFBMkJBLENBQ3pDQyxLQUFRLEVBQUFDLElBQUEsRUFFTDtFQUFBLElBREYzQyxTQUFTLEdBQUEyQyxJQUFBLENBQVQzQyxTQUFTO0lBQUU0QyxLQUFLLEdBQUFELElBQUEsQ0FBTEMsS0FBSztJQUFFQyxHQUFHLEdBQUFGLElBQUEsQ0FBSEUsR0FBRztFQUV0QixPQUFBQyxhQUFBLENBQUFBLGFBQUEsS0FDS0osS0FBSztJQUNSM0MsTUFBTSxFQUFFMkMsS0FBSyxDQUFDM0MsTUFBTSxDQUFDZ0QsR0FBRyxDQUFDLFVBQUNDLEdBQUcsRUFBRUMsQ0FBQztNQUFBLE9BQU1BLENBQUMsS0FBS0osR0FBRyxHQUFHRCxLQUFLLEdBQUdJLEdBQUc7SUFBQSxDQUFDLENBQUM7SUFDL0RoRCxTQUFTLEVBQUVBLFNBQVMsR0FDaEIwQyxLQUFLLENBQUMxQyxTQUFTLENBQUMrQyxHQUFHLENBQUMsVUFBQ0csQ0FBQyxFQUFFRCxDQUFDO01BQUEsT0FBTUEsQ0FBQyxLQUFLSixHQUFHLEdBQUc3QyxTQUFTLEdBQUdrRCxDQUFDO0lBQUEsQ0FBQyxDQUFDLEdBQzFEUixLQUFLLENBQUMxQztFQUFTO0FBRXZCO0FBRUEsT0FBTyxTQUFTbUQsa0NBQWtDQSxDQUFxQlQsS0FBUSxFQUFFRSxLQUFZLEVBQUs7RUFDaEcsSUFBSVEsUUFBUSxHQUFHVixLQUFLO0VBQ3BCLElBQUlBLEtBQUssQ0FBQ25CLFNBQVMsQ0FBQzhCLE1BQU0sRUFBRTtJQUMxQkQsUUFBUSxHQUFBTixhQUFBLENBQUFBLGFBQUEsS0FDSEosS0FBSztNQUNSbkIsU0FBUyxFQUFFcUIsS0FBSyxDQUFDN0UsTUFBTSxDQUFDdUYsU0FBUyxHQUM3QmxOLHNCQUFzQixDQUFDc00sS0FBSyxDQUFDbkIsU0FBUyxFQUFFcUIsS0FBSyxDQUFDLEdBQzlDbEwsd0JBQXdCLENBQUNnTCxLQUFLLENBQUNuQixTQUFTLEVBQUVxQixLQUFLO0lBQUMsRUFDckQ7RUFDSDtFQUVBLElBQUlBLEtBQUssQ0FBQzdFLE1BQU0sQ0FBQ3dGLFNBQVMsQ0FBQ3pGLE9BQU8sRUFBRTtJQUNsQ3NGLFFBQVEsR0FBR0kscUJBQXFCLENBQUNKLFFBQVEsQ0FBQztFQUM1QztFQUVBLE9BQU9BLFFBQVE7QUFDakI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTSyxnQkFBZ0JBLENBQUlDLElBQU8sRUFBRUMsSUFBTyxFQUFjO0VBQ3pELElBQU1DLFlBQXdCLEdBQUcsQ0FBQyxDQUFDO0VBQ25DLElBQU1DLFdBQVcsR0FBRyxTQUFkQSxXQUFXQSxDQUFHQyxHQUFHLEVBQUk7SUFDekJDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDRixHQUFHLENBQUMsQ0FBQ0csT0FBTyxDQUFDLFVBQUFDLEdBQUcsRUFBSTtNQUM5QixJQUNFLENBQUNILE1BQU0sQ0FBQ0ksU0FBUyxDQUFDQyxjQUFjLENBQUNDLElBQUksQ0FBQ1QsWUFBWSxFQUFFTSxHQUFHLENBQUMsSUFDeEQsQ0FBQy9QLE9BQU8sQ0FBQ3VQLElBQUksQ0FBQ1EsR0FBRyxDQUFDLEVBQUVQLElBQUksQ0FBQ08sR0FBRyxDQUFDLENBQUMsRUFDOUI7UUFDQU4sWUFBWSxDQUFDTSxHQUFHLENBQUMsR0FBR1AsSUFBSSxDQUFDTyxHQUFHLENBQUM7TUFDL0I7SUFDRixDQUFDLENBQUM7RUFDSixDQUFDO0VBQ0RMLFdBQVcsQ0FBQ0gsSUFBSSxDQUFDO0VBQ2pCRyxXQUFXLENBQUNGLElBQUksQ0FBQztFQUNqQixPQUFPQyxZQUFZO0FBQ3JCO0FBRUEsSUFBTVUseUJBQXlCLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUM7O0FBRTdFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU0MsdUJBQXVCQSxDQUNyQzdCLEtBQWUsRUFDZjhCLE1BQXFELEVBQzNDO0VBQUEsSUFBQUMsZUFBQTtFQUNWLElBQU9DLFVBQVUsR0FBZ0NGLE1BQU0sQ0FBaERFLFVBQVU7SUFBRUMsY0FBYyxHQUFnQkgsTUFBTSxDQUFwQ0csY0FBYztJQUFFQyxVQUFVLEdBQUlKLE1BQU0sQ0FBcEJJLFVBQVU7RUFDN0MsSUFBTUMsY0FBYztFQUNsQjtFQUNBakssZ0JBQWdCLENBQUM4SCxLQUFLLENBQUNQLE1BQU0sRUFBRXdDLGNBQWMsQ0FBQztFQUNoRCxJQUFNRyxRQUFRLEdBQUdwQyxLQUFLLENBQUMzQyxNQUFNLENBQUNnRixJQUFJLENBQUMsVUFBQUMsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ3BILEVBQUUsS0FBSzhHLFVBQVU7RUFBQSxFQUFDO0VBQzVELElBQUksQ0FBQ0ksUUFBUSxJQUFJLENBQUNELGNBQWMsRUFBRTtJQUNoQyxPQUFPbkMsS0FBSztFQUNkO0VBQ0EsSUFBSWtDLFVBQVUsS0FBSyxJQUFJLElBQUlBLFVBQVUsS0FBS3BFLFNBQVMsSUFBSWtDLEtBQUssQ0FBQzNDLE1BQU0sQ0FBQzZFLFVBQVUsQ0FBQyxLQUFLRSxRQUFRLEVBQUU7SUFDNUY7SUFDQSxPQUFPcEMsS0FBSztFQUNkO0VBQ0EsSUFBTXVDLE9BQU8sR0FBR3ZDLEtBQUssQ0FBQ3BDLFFBQVEsQ0FBQ3VFLGNBQWMsQ0FBQzlHLE1BQU0sQ0FBQ21ILE1BQU0sQ0FBQztFQUM1RCxJQUFJLENBQUNELE9BQU8sRUFBRTtJQUNaLE9BQU92QyxLQUFLO0VBQ2Q7RUFDQTtFQUNBLElBQU15QyxRQUFRLEdBQUduSyxxQkFBcUIsQ0FBQ2lLLE9BQU8sRUFBRUosY0FBYyxFQUFFbkMsS0FBSyxDQUFDaEIsWUFBWSxDQUFDO0VBQ25GLElBQUksQ0FBQ3lELFFBQVEsRUFBRTtJQUNiLE9BQU96QyxLQUFLO0VBQ2Q7RUFFQSxJQUFJMEMsU0FBUyxHQUFHMUMsS0FBSztFQUVyQixJQUFJeUMsUUFBUSxDQUFDRSxJQUFJLElBQUlGLFFBQVEsQ0FBQ0UsSUFBSSxLQUFLUCxRQUFRLENBQUNPLElBQUksRUFBRTtJQUNwRCxJQUFNQyxhQUFhLEdBQUc1QyxLQUFLLENBQUMzQyxNQUFNLENBQUN3RixTQUFTLENBQUMsVUFBQVAsQ0FBQztNQUFBLE9BQUlBLENBQUMsQ0FBQ3BILEVBQUUsS0FBSzhHLFVBQVU7SUFBQSxFQUFDO0lBQ3RFLElBQUlZLGFBQWEsSUFBSSxDQUFDLEVBQUU7TUFDdEJGLFNBQVMsR0FBR0ksc0JBQXNCLENBQUNKLFNBQVMsRUFBRWpRLGVBQWUsQ0FBQzJQLFFBQVEsRUFBRUssUUFBUSxDQUFDRSxJQUFJLENBQUMsQ0FBQztNQUN2RjtNQUNBO01BQ0EsSUFBSUQsU0FBUyxDQUFDckYsTUFBTSxDQUFDc0QsTUFBTSxLQUFLWCxLQUFLLENBQUMzQyxNQUFNLENBQUNzRCxNQUFNLEVBQUU7UUFDbkQsSUFBTW9DLFVBQVUsR0FBR0wsU0FBUyxDQUFDckYsTUFBTSxDQUFDdUYsYUFBYSxDQUFDLENBQUMxSCxFQUFFO1FBQ3JEd0gsU0FBUyxHQUFHYix1QkFBdUIsQ0FDakNhLFNBQVMsRUFDVHBRLGdCQUFnQixDQUFDeVEsVUFBVSxFQUFBM0MsYUFBQSxDQUFBQSxhQUFBLEtBQU02QixjQUFjO1VBQUUvRyxFQUFFLEVBQUU2SDtRQUFVLEVBQUMsQ0FDbEUsQ0FBQztNQUNIO0lBQ0Y7SUFDQSxPQUFPTCxTQUFTO0VBQ2xCOztFQUVBO0VBQ0E7RUFDQSxJQUFNTSxrQkFBa0IsSUFBQWpCLGVBQUEsR0FBRzNKLGNBQWMsQ0FBQ2dLLFFBQVEsRUFBRXBDLEtBQUssQ0FBQ1AsTUFBTSxDQUFDLGNBQUFzQyxlQUFBLGNBQUFBLGVBQUEsR0FBSTtJQUFDMUcsTUFBTSxFQUFFLENBQUM7RUFBQyxDQUFDO0VBQ2pGLElBQU00SCxrQkFBa0IsR0FBRzdLLGNBQWMsQ0FBQ3FLLFFBQVEsRUFBRXpDLEtBQUssQ0FBQ1AsTUFBTSxDQUFDO0VBQ2pFLElBQUksQ0FBQ3dELGtCQUFrQixFQUFFO0lBQ3ZCLE9BQU9qRCxLQUFLO0VBQ2Q7RUFDQSxJQUFJLENBQUN2TyxPQUFPLENBQUN1UixrQkFBa0IsRUFBRUMsa0JBQWtCLENBQUMsRUFBRTtJQUNwRCxJQUFNQyxPQUFPLEdBQUduQyxnQkFBZ0IsQ0FBQ2lDLGtCQUFrQixDQUFDM0gsTUFBTSxFQUFFNEgsa0JBQWtCLENBQUM1SCxNQUFNLENBQUM7SUFFdEYsSUFBSSxXQUFXLElBQUk2SCxPQUFPLEVBQUU7TUFDMUIsSUFBSUEsT0FBTyxDQUFDQyxTQUFTLEVBQUU7UUFDckJULFNBQVMsR0FBR1UsMkJBQTJCLENBQ3JDVixTQUFTLEVBQ1RoUSxvQkFBb0IsQ0FBQzBQLFFBQVEsRUFBRWMsT0FBTyxDQUFDQyxTQUFTLENBQ2xELENBQUM7TUFDSDtNQUNBLE9BQU9ELE9BQU8sQ0FBQ0MsU0FBUztJQUMxQjtJQUVBOUIsTUFBTSxDQUFDQyxJQUFJLENBQUNjLFFBQVEsQ0FBQ2lCLGNBQWMsQ0FBQyxDQUFDOUIsT0FBTyxDQUFDLFVBQUErQixXQUFXLEVBQUk7TUFDMUQsSUFBTUMsT0FBTyxHQUFHbkIsUUFBUSxDQUFDaUIsY0FBYyxDQUFDQyxXQUFXLENBQUM7TUFDcEQsSUFBTUUsZ0JBQWdCLEdBQUc1Qix5QkFBeUIsQ0FBQ3ZCLEdBQUcsQ0FBQyxVQUFBb0QsSUFBSTtRQUFBLE9BQUlGLE9BQU8sQ0FBQ0UsSUFBSSxDQUFDO01BQUEsRUFBQztNQUM3RSxJQUFJRCxnQkFBZ0IsQ0FBQ0UsSUFBSSxDQUFDLFVBQUFELElBQUk7UUFBQSxPQUFJQSxJQUFJLElBQUlQLE9BQU87TUFBQSxFQUFDLEVBQUU7UUFDbERSLFNBQVMsR0FBR2lCLCtCQUErQixDQUN6Q2pCLFNBQVMsRUFDVC9QLDhCQUE4QixDQUM1QnlQLFFBQVEsRUFDUjFRLElBQUksQ0FBQytRLFFBQVEsQ0FBQ3BILE1BQU0sRUFBRW1JLGdCQUFnQixDQUFDLEVBQ3ZDRixXQUNGLENBQ0YsQ0FBQztRQUFDLElBQUFNLFNBQUEsR0FBQUMsMEJBQUEsQ0FDaUJMLGdCQUFnQjtVQUFBTSxLQUFBO1FBQUE7VUFBbkMsS0FBQUYsU0FBQSxDQUFBRyxDQUFBLE1BQUFELEtBQUEsR0FBQUYsU0FBQSxDQUFBSSxDQUFBLElBQUFDLElBQUEsR0FBcUM7WUFBQSxJQUExQlIsSUFBSSxHQUFBSyxLQUFBLENBQUFJLEtBQUE7WUFDYixPQUFPaEIsT0FBTyxDQUFDTyxJQUFJLENBQUM7VUFDdEI7UUFBQyxTQUFBVSxHQUFBO1VBQUFQLFNBQUEsQ0FBQVEsQ0FBQSxDQUFBRCxHQUFBO1FBQUE7VUFBQVAsU0FBQSxDQUFBUyxDQUFBO1FBQUE7TUFDSDtJQUNGLENBQUMsQ0FBQztJQUVGLElBQUloRCxNQUFNLENBQUNDLElBQUksQ0FBQzRCLE9BQU8sQ0FBQyxDQUFDdkMsTUFBTSxHQUFHLENBQUMsRUFBRTtNQUNuQytCLFNBQVMsR0FBRzRCLHdCQUF3QixDQUNsQzVCLFNBQVMsRUFDVGxRLGlCQUFpQixDQUFDNFAsUUFBUSxFQUFFMVEsSUFBSSxDQUFDK1EsUUFBUSxDQUFDcEgsTUFBTSxFQUFFZ0csTUFBTSxDQUFDQyxJQUFJLENBQUM0QixPQUFPLENBQUMsQ0FBQyxDQUN6RSxDQUFDO0lBQ0g7RUFDRjtFQUVBLE9BQU9SLFNBQVM7QUFDbEI7QUFFQSxTQUFTNkIsb0JBQW9CQSxDQUFDdkUsS0FBZSxFQUFFeUMsUUFBZSxFQUFFN0IsU0FBbUIsRUFBWTtFQUM3RixJQUFJRixRQUFRLEdBQUdELGtDQUFrQyxDQUFDVCxLQUFLLEVBQUV5QyxRQUFRLENBQUM7RUFDbEUsSUFBTStCLFdBQVcsR0FBR0Msd0JBQXdCLENBQUN6RSxLQUFLLENBQUM7RUFDbkQsSUFBSTVLLGlCQUFpQixDQUFDcU4sUUFBUSxDQUFDLElBQUkrQixXQUFXLEtBQUssQ0FBQyxDQUFDLEVBQUU7SUFDckQ7SUFDQTlELFFBQVEsR0FBR2dFLHNDQUFzQyxDQUFDaEUsUUFBUSxFQUFFO01BQzFEUCxHQUFHLEVBQUVxRSxXQUFXO01BQ2hCRyxNQUFNLEVBQUUvRCxTQUFTLEdBQUdBLFNBQVMsR0FBRzNHLDBCQUEwQixDQUFDK0YsS0FBSyxDQUFDM0MsTUFBTSxDQUFDLENBQUNzRCxNQUFNLEdBQUc7SUFDcEYsQ0FBQyxDQUFDO0VBQ0o7RUFDQSxPQUFPRCxRQUFRO0FBQ2pCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBUzRELHdCQUF3QkEsQ0FDdEN0RSxLQUFlLEVBQ2Y4QixNQUFzRCxFQUM1QztFQUNWLElBQU9NLFFBQVEsR0FBSU4sTUFBTSxDQUFsQk0sUUFBUTtFQUNmLElBQU1qQyxHQUFHLEdBQUdILEtBQUssQ0FBQzNDLE1BQU0sQ0FBQ3dGLFNBQVMsQ0FBQyxVQUFBUCxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDcEgsRUFBRSxLQUFLa0gsUUFBUSxDQUFDbEgsRUFBRTtFQUFBLEVBQUM7RUFDN0QsSUFBTTBKLEtBQUssR0FBR3ZELE1BQU0sQ0FBQ0MsSUFBSSxDQUFDUSxNQUFNLENBQUMrQyxTQUFTLENBQUM7RUFDM0MsSUFDRSxPQUFPL0MsTUFBTSxDQUFDK0MsU0FBUyxDQUFDckMsTUFBTSxLQUFLLFFBQVEsSUFDM0NWLE1BQU0sQ0FBQytDLFNBQVMsQ0FBQ3JDLE1BQU0sS0FBS0osUUFBUSxDQUFDL0csTUFBTSxDQUFDbUgsTUFBTSxFQUNsRDtJQUNBLElBQUFzQyxpQkFBQSxHQUFnQ2hELE1BQU0sQ0FBQytDLFNBQVM7TUFBekNyQyxNQUFNLEdBQUFzQyxpQkFBQSxDQUFOdEMsTUFBTTtNQUFLdUMsVUFBVSxHQUFBQyx3QkFBQSxDQUFBRixpQkFBQSxFQUFBRyxTQUFBO0lBQzVCLElBQU1DLGVBQWUsR0FBR0Msd0JBQXdCLENBQUNuRixLQUFLLEVBQUU7TUFDdERvQyxRQUFRLEVBQVJBLFFBQVE7TUFDUnlDLFNBQVMsRUFBRTtRQUFDckMsTUFBTSxFQUFOQTtNQUFNO0lBQ3BCLENBQUMsQ0FBQztJQUNGLElBQU00QyxTQUFTLEdBQUdGLGVBQWUsQ0FBQzdILE1BQU0sQ0FBQ2dGLElBQUksQ0FBQyxVQUFBQyxDQUFDO01BQUEsT0FBSUEsQ0FBQyxDQUFDcEgsRUFBRSxLQUFLa0gsUUFBUSxDQUFDbEgsRUFBRTtJQUFBLEVBQUM7SUFDeEUsT0FBT2tLLFNBQVMsSUFBSS9ELE1BQU0sQ0FBQ0MsSUFBSSxDQUFDeUQsVUFBVSxDQUFDLENBQUNwRSxNQUFNLEdBQzlDMkQsd0JBQXdCLENBQUNZLGVBQWUsRUFBRTtNQUFDOUMsUUFBUSxFQUFFZ0QsU0FBUztNQUFFUCxTQUFTLEVBQUVFO0lBQVUsQ0FBQyxDQUFDLEdBQ3ZGRyxlQUFlO0VBQ3JCO0VBRUEsSUFBSXpDLFFBQVEsR0FBR0wsUUFBUSxDQUFDaUQsaUJBQWlCLENBQUN2RCxNQUFNLENBQUMrQyxTQUFTLENBQUM7RUFFM0QsSUFBSXZILFNBQVM7RUFFYixJQUFJbUYsUUFBUSxDQUFDNkMsd0JBQXdCLENBQUNWLEtBQUssQ0FBQyxFQUFFO0lBQzVDLElBQU1XLFlBQVksR0FBR3ZGLEtBQUssQ0FBQzFDLFNBQVMsQ0FBQzZDLEdBQUcsQ0FBQztJQUV6QyxJQUFNcUYscUJBQXFCLEdBQUd4TSxrQkFBa0IsQ0FBQ3lKLFFBQVEsRUFBRXpDLEtBQUssRUFBRXVGLFlBQVksQ0FBQztJQUMvRTlDLFFBQVEsR0FBRytDLHFCQUFxQixDQUFDdEYsS0FBSztJQUN0QzVDLFNBQVMsR0FBR2tJLHFCQUFxQixDQUFDbEksU0FBUztFQUM3QztFQUVBLElBQUlvRCxRQUFRLEdBQUdWLEtBQUs7RUFDcEIsSUFBSSxXQUFXLElBQUk4QixNQUFNLENBQUMrQyxTQUFTLEVBQUU7SUFDbkNuRSxRQUFRLEdBQUc2RCxvQkFBb0IsQ0FBQzdELFFBQVEsRUFBRStCLFFBQVEsRUFBRVgsTUFBTSxDQUFDK0MsU0FBUyxDQUFDakUsU0FBUyxDQUFDO0VBQ2pGO0VBRUEsSUFBSSxTQUFTLElBQUlrQixNQUFNLENBQUMrQyxTQUFTLElBQUlwQyxRQUFRLENBQUNwSCxNQUFNLENBQUN3RixTQUFTLENBQUN6RixPQUFPLEVBQUU7SUFDdEU7SUFDQXNGLFFBQVEsR0FBR0kscUJBQXFCLENBQUNKLFFBQVEsQ0FBQztFQUM1QztFQUVBLE9BQU9YLDJCQUEyQixDQUFDVyxRQUFRLEVBQUU7SUFDM0NSLEtBQUssRUFBRXVDLFFBQVE7SUFDZm5GLFNBQVMsRUFBVEEsU0FBUztJQUNUNkMsR0FBRyxFQUFIQTtFQUNGLENBQUMsQ0FBQztBQUNKO0FBRUEsT0FBTyxTQUFTc0YsMkJBQTJCQSxDQUFxQnpGLEtBQVEsRUFBRThCLE1BQU0sRUFBSztFQUNuRixJQUFPTSxRQUFRLEdBQWlCTixNQUFNLENBQS9CTSxRQUFRO0lBQUVxQixJQUFJLEdBQVczQixNQUFNLENBQXJCMkIsSUFBSTtJQUFFUyxLQUFLLEdBQUlwQyxNQUFNLENBQWZvQyxLQUFLO0VBQzVCLElBQU0vRCxHQUFHLEdBQUdILEtBQUssQ0FBQzNDLE1BQU0sQ0FBQ3dGLFNBQVMsQ0FBQyxVQUFBUCxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDcEgsRUFBRSxLQUFLa0gsUUFBUSxDQUFDbEgsRUFBRTtFQUFBLEVBQUM7RUFFN0QsSUFBTXVILFFBQVEsR0FBR0wsUUFBUSxDQUFDaUQsaUJBQWlCLENBQUM7SUFDMUN4RSxTQUFTLEVBQUFULGFBQUEsQ0FBQUEsYUFBQSxLQUNKZ0MsUUFBUSxDQUFDL0csTUFBTSxDQUFDd0YsU0FBUyxPQUFBNkUsZUFBQSxLQUMzQmpDLElBQUksRUFBR1MsS0FBSztFQUVqQixDQUFDLENBQUM7RUFFRixJQUFBeUIsbUJBQUEsR0FBMkIzTSxrQkFBa0IsQ0FBQ3lKLFFBQVEsRUFBRXpDLEtBQUssRUFBRUEsS0FBSyxDQUFDMUMsU0FBUyxDQUFDNkMsR0FBRyxDQUFDLENBQUM7SUFBN0U3QyxTQUFTLEdBQUFxSSxtQkFBQSxDQUFUckksU0FBUztJQUFFNEMsS0FBSyxHQUFBeUYsbUJBQUEsQ0FBTHpGLEtBQUs7RUFFdkIsT0FBT0gsMkJBQTJCLENBQUNDLEtBQUssRUFBRTtJQUFDMUMsU0FBUyxFQUFUQSxTQUFTO0lBQUU0QyxLQUFLLEVBQUxBLEtBQUs7SUFBRUMsR0FBRyxFQUFIQTtFQUFHLENBQUMsQ0FBQztBQUNwRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVN5Riw0QkFBNEJBLENBQzFDNUYsS0FBZSxFQUNmOEIsTUFBMEQsRUFDaEQ7RUFDVixJQUFPK0QsT0FBTyxHQUEyQi9ELE1BQU0sQ0FBeEMrRCxPQUFPO0lBQUVqRixTQUFTLEdBQWdCa0IsTUFBTSxDQUEvQmxCLFNBQVM7SUFBRWtGLFVBQVUsR0FBSWhFLE1BQU0sQ0FBcEJnRSxVQUFVO0VBQ3JDLElBQU01RixLQUFLLEdBQUdGLEtBQUssQ0FBQzNDLE1BQU0sQ0FBQ2dGLElBQUksQ0FBQyxVQUFBN0IsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ3RGLEVBQUUsS0FBSzJLLE9BQU87RUFBQSxFQUFDO0VBRXRELElBQUksQ0FBQzNGLEtBQUssRUFBRTtJQUNWLE9BQU9GLEtBQUs7RUFDZDtFQUVBLElBQUlVLFFBQVEsR0FBR1YsS0FBSztFQUVwQixJQUFJOEYsVUFBVSxFQUFFO0lBQ2Q7SUFDQSxJQUFNQyxRQUFRLEdBQUdyRixRQUFRLENBQUM3QixTQUFTLENBQUNnRSxTQUFTLENBQUMsVUFBQW1ELEVBQUU7TUFBQSxPQUFJQSxFQUFFLENBQUM5SyxFQUFFLEtBQUs0SyxVQUFVO0lBQUEsRUFBQztJQUN6RSxJQUFJbEYsU0FBUyxFQUFFO01BQ2I7TUFDQTtNQUNBRixRQUFRLEdBQUc0RCx3QkFBd0IsQ0FBQzVELFFBQVEsRUFBRWxPLGlCQUFpQixDQUFDME4sS0FBSyxFQUFFO1FBQUNVLFNBQVMsRUFBRTtNQUFJLENBQUMsQ0FBQyxDQUFDOztNQUUxRjtNQUNBLE9BQUFSLGFBQUEsQ0FBQUEsYUFBQSxLQUNLTSxRQUFRO1FBQ1g3QixTQUFTLEVBQUU2QixRQUFRLENBQUM3QixTQUFTLENBQUN3QixHQUFHLENBQUMsVUFBQTJGLEVBQUU7VUFBQSxPQUNsQ0EsRUFBRSxDQUFDOUssRUFBRSxLQUFLNEssVUFBVSxHQUFBMUYsYUFBQSxDQUFBQSxhQUFBLEtBRVg0RixFQUFFO1lBQ0wzSSxNQUFNLEVBQUErQyxhQUFBLENBQUFBLGFBQUEsS0FDRDRGLEVBQUUsQ0FBQzNJLE1BQU0sT0FBQXFJLGVBQUEsS0FDWEcsT0FBTyxFQUFHLEtBQUs7VUFDakIsS0FBQXpGLGFBQUEsQ0FBQUEsYUFBQSxLQUdFNEYsRUFBRTtZQUNMM0ksTUFBTSxFQUFBK0MsYUFBQSxDQUFBQSxhQUFBLEtBQ0Q0RixFQUFFLENBQUMzSSxNQUFNLE9BQUFxSSxlQUFBLEtBQ1hHLE9BQU8sRUFBRyxJQUFJO1VBQ2hCLEVBQ0Y7UUFBQSxDQUNQO01BQUM7SUFFTDtJQUNBO0lBQ0EsT0FBT0ksd0JBQXdCLENBQUN2RixRQUFRLEVBQUVyTixpQkFBaUIsQ0FBQzBTLFFBQVEsRUFBRUYsT0FBTyxDQUFDLENBQUM7RUFDakYsQ0FBQyxNQUFNO0lBQ0w7SUFDQSxJQUFNcEQsUUFBUSxHQUFHdkMsS0FBSyxDQUFDbUYsaUJBQWlCLENBQUM7TUFBQ3pFLFNBQVMsRUFBVEE7SUFBUyxDQUFDLENBQUM7SUFDckQsSUFBTVQsR0FBRyxHQUFHTyxRQUFRLENBQUNyRCxNQUFNLENBQUN3RixTQUFTLENBQUMsVUFBQVAsQ0FBQztNQUFBLE9BQUlBLENBQUMsQ0FBQ3BILEVBQUUsS0FBSzJLLE9BQU87SUFBQSxFQUFDO0lBRTVEbkYsUUFBUSxHQUFHNkQsb0JBQW9CLENBQUM3RCxRQUFRLEVBQUUrQixRQUFRLEVBQUU3QixTQUFTLENBQUM7SUFDOUQsT0FBT2IsMkJBQTJCLENBQUNXLFFBQVEsRUFBRTtNQUMzQ1IsS0FBSyxFQUFFdUMsUUFBUTtNQUNmdEMsR0FBRyxFQUFIQTtJQUNGLENBQUMsQ0FBQztFQUNKO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNzRSx3QkFBd0JBLENBQUN6RSxLQUFlLEVBQVU7RUFDekQsT0FBT0EsS0FBSyxDQUFDdEMsT0FBTyxDQUFDbUYsU0FBUyxDQUFDLFVBQUF3QixDQUFDO0lBQUEsT0FBS0EsQ0FBQyxDQUFxQjZCLHVCQUF1QjtFQUFBLEVBQUM7QUFDckY7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNDLHNCQUFzQkEsQ0FDcENuRyxLQUFlLEVBQ2Y4QixNQUFvRCxFQUMxQztFQUNWLElBQU9NLFFBQVEsR0FBYU4sTUFBTSxDQUEzQk0sUUFBUTtJQUFFZ0UsT0FBTyxHQUFJdEUsTUFBTSxDQUFqQnNFLE9BQU87RUFFeEIsSUFBTWpHLEdBQUcsR0FBR0gsS0FBSyxDQUFDM0MsTUFBTSxDQUFDd0YsU0FBUyxDQUFDLFVBQUFQLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUNwSCxFQUFFLEtBQUtrSCxRQUFRLENBQUNsSCxFQUFFO0VBQUEsRUFBQztFQUM3RCxJQUFNbUwsYUFBYSxHQUFHckcsS0FBSyxDQUFDM0MsTUFBTSxDQUFDOEMsR0FBRyxDQUFDO0VBQ3ZDLElBQUlrRyxhQUFhLEVBQUU7SUFDakIsSUFBSTVELFFBQVE7SUFDWixJQUFJNkQsT0FBTyxHQUFHLElBQUk7SUFFbEIsSUFBSUYsT0FBTyxFQUFFO01BQ1g7TUFDQSxJQUFBRyxvQkFBQSxHQUEyQnZOLGtCQUFrQixDQUFDcU4sYUFBYSxFQUFFckcsS0FBSyxFQUFFbEMsU0FBUyxDQUFDO1FBQXZFb0MsS0FBSyxHQUFBcUcsb0JBQUEsQ0FBTHJHLEtBQUs7UUFBRTVDLFNBQVMsR0FBQWlKLG9CQUFBLENBQVRqSixTQUFTO01BQ3ZCbUYsUUFBUSxHQUFHdkMsS0FBSztNQUNoQm9HLE9BQU8sR0FBR2hKLFNBQVM7SUFDckIsQ0FBQyxNQUFNO01BQ0xtRixRQUFRLEdBQUc0RCxhQUFhLENBQUNoQixpQkFBaUIsQ0FBQztRQUN6Q3pFLFNBQVMsRUFBRTtNQUNiLENBQUMsQ0FBQztNQUNGNkIsUUFBUSxDQUFDMkQsT0FBTyxHQUFHLEtBQUs7SUFDMUI7SUFFQSxPQUFPckcsMkJBQTJCLENBQUNDLEtBQUssRUFBRTtNQUFDRyxHQUFHLEVBQUhBLEdBQUc7TUFBRUQsS0FBSyxFQUFFdUMsUUFBUTtNQUFFbkYsU0FBUyxFQUFFZ0o7SUFBTyxDQUFDLENBQUM7RUFDdkY7RUFFQSxPQUFPdEcsS0FBSztBQUNkO0FBRUEsU0FBU3dHLHFCQUFxQkEsQ0FBQ0MsU0FBUyxFQUFFQyxTQUFTLEVBQXlDO0VBQUEsSUFBdkNDLGdCQUFnQixHQUFBQyxTQUFBLENBQUFqRyxNQUFBLFFBQUFpRyxTQUFBLFFBQUE5SSxTQUFBLEdBQUE4SSxTQUFBLE1BQUcvUSxrQkFBa0I7RUFDeEYsSUFBSWdSLFlBQVksR0FBR0gsU0FBUyxDQUFDSSxLQUFLLENBQUMsQ0FBQztFQUVwQyxJQUFNQyxhQUFhLEdBQUdMLFNBQVMsQ0FBQ3JHLEdBQUcsQ0FBQyxVQUFBMkcsRUFBRTtJQUFBLE9BQUlBLEVBQUUsQ0FBQ0MsS0FBSyxJQUFJRCxFQUFFLENBQUNDLEtBQUssQ0FBQ0MsSUFBSTtFQUFBLEVBQUMsQ0FBQ0MsTUFBTSxDQUFDLFVBQUEzRyxDQUFDO0lBQUEsT0FBSUEsQ0FBQztFQUFBLEVBQUM7RUFFbkYsSUFBTTRHLFNBQVMsR0FBR1gsU0FBUyxDQUFDVSxNQUFNLENBQUMsVUFBQTlDLENBQUM7SUFBQSxPQUFJLENBQUMwQyxhQUFhLENBQUNNLFFBQVEsQ0FBQ2hELENBQUMsQ0FBQzZDLElBQUksQ0FBQztFQUFBLEVBQUM7RUFDeEUsSUFBTUksWUFBWSxHQUFHUCxhQUFhLENBQUNJLE1BQU0sQ0FBQyxVQUFBOUMsQ0FBQztJQUFBLE9BQUksQ0FBQ29DLFNBQVMsQ0FBQ3BFLElBQUksQ0FBQyxVQUFBa0YsRUFBRTtNQUFBLE9BQUlBLEVBQUUsQ0FBQ0wsSUFBSSxLQUFLN0MsQ0FBQztJQUFBLEVBQUM7RUFBQSxFQUFDOztFQUVwRjtFQUNBd0MsWUFBWSxHQUFHQSxZQUFZLENBQUNNLE1BQU0sQ0FBQyxVQUFBSCxFQUFFO0lBQUEsT0FBSUEsRUFBRSxDQUFDQyxLQUFLLElBQUksQ0FBQ0ssWUFBWSxDQUFDRCxRQUFRLENBQUNMLEVBQUUsQ0FBQ0MsS0FBSyxDQUFDQyxJQUFJLENBQUM7RUFBQSxFQUFDO0VBQzNGTCxZQUFZLEdBQUcsQ0FBQ0EsWUFBWSxDQUFDbEcsTUFBTSxHQUFHLENBQUNnRyxnQkFBZ0IsQ0FBQyxHQUFHRSxZQUFZOztFQUV2RTtFQUNBQSxZQUFZLE1BQUFXLE1BQUEsQ0FBQUMsa0JBQUEsQ0FDUFosWUFBWSxDQUFDTSxNQUFNLENBQUMsVUFBQUgsRUFBRTtJQUFBLE9BQUlBLEVBQUUsQ0FBQ0MsS0FBSztFQUFBLEVBQUMsR0FBQVEsa0JBQUEsQ0FDbkNMLFNBQVMsQ0FBQy9HLEdBQUcsQ0FBQyxVQUFBcUgsRUFBRTtJQUFBLE9BQUF0SCxhQUFBLENBQUFBLGFBQUEsS0FDZHVHLGdCQUFnQjtNQUNuQk0sS0FBSyxFQUFFUztJQUFFO0VBQUEsQ0FDVCxDQUFDLEVBQ0o7RUFFRCxPQUFPYixZQUFZO0FBQ3JCO0FBRUEsU0FBU2MsMkJBQTJCQSxDQUFDeEgsR0FBRyxFQUFFc0QsSUFBSSxFQUFFUyxLQUFLLEVBQUV3QyxTQUFTLEVBQUU7RUFDaEUsSUFBSSxDQUFDckYsTUFBTSxDQUFDSSxTQUFTLENBQUNDLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDK0UsU0FBUyxDQUFDdkcsR0FBRyxDQUFDLEVBQUVzRCxJQUFJLENBQUMsRUFBRTtJQUMvRCxPQUFPaUQsU0FBUztFQUNsQjtFQUVBLElBQUlHLFlBQVksR0FBR0gsU0FBUyxDQUFDSSxLQUFLLENBQUMsQ0FBQztFQUVwQyxJQUFJckQsSUFBSSxLQUFLLE9BQU8sSUFBSVMsS0FBSyxLQUFLLElBQUksSUFBSXdDLFNBQVMsQ0FBQy9GLE1BQU0sR0FBRyxDQUFDLEVBQUU7SUFDOUQ7SUFDQWtHLFlBQVksQ0FBQ2UsTUFBTSxDQUFDekgsR0FBRyxFQUFFLENBQUMsQ0FBQztFQUM3QixDQUFDLE1BQU0sSUFBSXNELElBQUksRUFBRTtJQUNmb0QsWUFBWSxHQUFHSCxTQUFTLENBQUNyRyxHQUFHLENBQUMsVUFBQzJHLEVBQUUsRUFBRXpHLENBQUM7TUFBQSxPQUFNQSxDQUFDLEtBQUtKLEdBQUcsR0FBQUMsYUFBQSxDQUFBQSxhQUFBLEtBQU80RyxFQUFFLE9BQUF0QixlQUFBLEtBQUdqQyxJQUFJLEVBQUdTLEtBQUssS0FBSThDLEVBQUU7SUFBQSxDQUFDLENBQUM7RUFDcEY7RUFFQSxPQUFPSCxZQUFZO0FBQ3JCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNnQiwyQkFBMkJBLENBQ3pDN0gsS0FBZSxFQUNmOEIsTUFBeUQsRUFDL0M7RUFBQSxJQUFBZ0cscUJBQUEsRUFBQUMsc0JBQUE7RUFDVixJQUFPM0YsUUFBUSxHQUFzQk4sTUFBTSxDQUFwQ00sUUFBUTtJQUFFakMsR0FBRyxHQUFpQjJCLE1BQU0sQ0FBMUIzQixHQUFHO0lBQUVzRCxJQUFJLEdBQVczQixNQUFNLENBQXJCMkIsSUFBSTtJQUFFUyxLQUFLLEdBQUlwQyxNQUFNLENBQWZvQyxLQUFLO0VBQ2pDLElBQU93QyxTQUFTLEdBQUl0RSxRQUFRLENBQUMvRyxNQUFNLENBQTVCcUwsU0FBUzs7RUFFaEI7RUFDQTtFQUNBLElBQU1DLGdCQUFnQixJQUFBbUIscUJBQUEsSUFBQUMsc0JBQUEsR0FDcEIzRixRQUFRLENBQUM0RixxQkFBcUIsQ0FBQztJQUFDeEYsTUFBTSxFQUFFO0VBQUUsQ0FBQyxDQUFDLGNBQUF1RixzQkFBQSxnQkFBQUEsc0JBQUEsR0FBNUNBLHNCQUFBLENBQThDckIsU0FBUyxjQUFBcUIsc0JBQUEsdUJBQXZEQSxzQkFBQSxDQUEwRCxDQUFDLENBQUMsY0FBQUQscUJBQUEsY0FBQUEscUJBQUEsR0FBSWpTLGtCQUFrQjtFQUVwRixJQUFJZ1IsWUFBWSxHQUFHSCxTQUFTLENBQUNJLEtBQUssQ0FBQyxDQUFDO0VBQ3BDLElBQUksQ0FBQ0osU0FBUyxDQUFDdkcsR0FBRyxDQUFDLElBQUlBLEdBQUcsS0FBS3VHLFNBQVMsQ0FBQy9GLE1BQU0sRUFBRTtJQUMvQztJQUNBa0csWUFBWSxNQUFBVyxNQUFBLENBQUFDLGtCQUFBLENBQU9mLFNBQVMsSUFBRUMsZ0JBQWdCLEVBQUM7RUFDakQ7RUFFQSxJQUFJeEcsR0FBRyxLQUFLLEtBQUssSUFBSXNELElBQUksS0FBSyxRQUFRLEVBQUU7SUFDdENvRCxZQUFZLEdBQUdMLHFCQUFxQixDQUFDdEMsS0FBSyxFQUFFd0MsU0FBUyxFQUFFQyxnQkFBZ0IsQ0FBQztFQUMxRSxDQUFDLE1BQU07SUFDTEUsWUFBWSxHQUFHYywyQkFBMkIsQ0FBQ3hILEdBQUcsRUFBRXNELElBQUksRUFBRVMsS0FBSyxFQUFFMkMsWUFBWSxDQUFDO0VBQzVFO0VBQ0E7RUFDQSxPQUFPdkMsd0JBQXdCLENBQUN0RSxLQUFLLEVBQUU7SUFDckNvQyxRQUFRLEVBQVJBLFFBQVE7SUFDUnlDLFNBQVMsRUFBRTtNQUFDNkIsU0FBUyxFQUFFRztJQUFZO0VBQ3JDLENBQUMsQ0FBQztBQUNKO0FBRUEsU0FBU29CLDZCQUE2QkEsQ0FBQzFGLE9BQU8sRUFBRXZELFlBQVksRUFBRWtCLEtBQUssRUFBRVQsTUFBTSxFQUFFO0VBQzNFLElBQU15SSxXQUFXLEdBQUc5UCxjQUFjLENBQUM4SCxLQUFLLEVBQUVULE1BQU0sQ0FBQztFQUNqRCxPQUFPeUksV0FBVyxHQUNkNVAscUJBQXFCLENBQUNpSyxPQUFPLEVBQUUyRixXQUFXLEVBQUVsSixZQUFZLEVBQUU7SUFDeERtSixnQkFBZ0IsRUFBRTtFQUNwQixDQUFDLENBQUMsR0FDRixJQUFJO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU2hELHdCQUF3QkEsQ0FDdENuRixLQUFlLEVBQ2Y4QixNQUtDLEVBQ1M7RUFDVixJQUFPTSxRQUFRLEdBQWVOLE1BQU0sQ0FBN0JNLFFBQVE7SUFBRXlDLFNBQVMsR0FBSS9DLE1BQU0sQ0FBbkIrQyxTQUFTO0VBQzFCLElBQU9yQyxNQUFNLEdBQUlxQyxTQUFTLENBQW5CckMsTUFBTTtFQUViLElBQUksQ0FBQ0osUUFBUSxJQUFJLENBQUNwQyxLQUFLLENBQUNwQyxRQUFRLENBQUM0RSxNQUFNLENBQUMsRUFBRTtJQUN4QyxPQUFPeEMsS0FBSztFQUNkO0VBQ0EsSUFBTUcsR0FBRyxHQUFHSCxLQUFLLENBQUMzQyxNQUFNLENBQUN3RixTQUFTLENBQUMsVUFBQVAsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ3BILEVBQUUsS0FBS2tILFFBQVEsQ0FBQ2xILEVBQUU7RUFBQSxFQUFDO0VBRTdELElBQUl1SCxRQUFRLEdBQUdMLFFBQVEsQ0FBQ2lELGlCQUFpQixDQUFDO0lBQUM3QyxNQUFNLEVBQU5BO0VBQU0sQ0FBQyxDQUFDOztFQUVuRDtFQUNBLElBQUlDLFFBQVEsQ0FBQzJGLGFBQWEsQ0FBQyxDQUFDLEVBQUU7SUFDNUIsSUFBTUMsU0FBUyxHQUFHSiw2QkFBNkIsQ0FDN0NqSSxLQUFLLENBQUNwQyxRQUFRLENBQUM0RSxNQUFNLENBQUMsRUFDdEJ4QyxLQUFLLENBQUNoQixZQUFZLEVBQ2xCeUQsUUFBUSxFQUNSekMsS0FBSyxDQUFDUCxNQUNSLENBQUM7SUFDRDtJQUNBLElBQUksQ0FBQzRJLFNBQVMsRUFBRTtNQUNkLElBQU1DLFlBQVksR0FBR2xHLFFBQVEsQ0FBQ08sSUFBSTtNQUNsQyxJQUFJMkYsWUFBWSxFQUFFO1FBQ2hCN0YsUUFBUSxHQUFHLElBQUl6QyxLQUFLLENBQUNoQixZQUFZLENBQUNzSixZQUFZLENBQUMsQ0FBQztVQUFDOUYsTUFBTSxFQUFOQSxNQUFNO1VBQUV0SCxFQUFFLEVBQUVrSCxRQUFRLENBQUNsSDtRQUFFLENBQUMsQ0FBQztNQUM1RTtJQUNGLENBQUMsTUFBTTtNQUNMdUgsUUFBUSxHQUFHNEYsU0FBUztJQUN0QjtFQUNGLENBQUMsTUFBTTtJQUNMO0lBQ0E7SUFDQTtJQUNBLElBQU1FLGdCQUFnQixHQUFHdkksS0FBSyxDQUFDcEMsUUFBUSxDQUFDNEUsTUFBTSxDQUFDLENBQUNnRyxNQUFNO0lBQ3RELElBQU1DLGNBQW1DLEdBQUcsQ0FBQyxDQUFDO0lBQzlDcEgsTUFBTSxDQUFDcUgsTUFBTSxDQUFDakcsUUFBUSxDQUFDWSxjQUFjLENBQUMsQ0FBQzlCLE9BQU8sQ0FBQyxVQUFBb0gsS0FBQSxFQUF1QjtNQUFBLElBQWRDLFFBQVEsR0FBQUQsS0FBQSxDQUFmMUIsS0FBSztNQUNwRCxJQUFNNEIsWUFBWSxHQUFHcEcsUUFBUSxDQUFDcEgsTUFBTSxDQUFDdU4sUUFBUSxDQUFDO01BQzlDLElBQUlDLFlBQVksRUFBRTtRQUNoQixJQUFNQyxPQUFPLEdBQUdQLGdCQUFnQixDQUFDbEcsSUFBSSxDQUFDLFVBQUFnQyxDQUFDO1VBQUEsT0FBSUEsQ0FBQyxDQUFDNkMsSUFBSSxLQUFLMkIsWUFBWSxDQUFDM0IsSUFBSTtRQUFBLEVBQUM7UUFDeEV1QixjQUFjLENBQUNHLFFBQVEsQ0FBQyxHQUFHRSxPQUFPLElBQUksSUFBSTtNQUM1QztJQUNGLENBQUMsQ0FBQztJQUNGLElBQUl6SCxNQUFNLENBQUNDLElBQUksQ0FBQ21ILGNBQWMsQ0FBQyxDQUFDOUgsTUFBTSxFQUFFO01BQ3RDOEIsUUFBUSxHQUFHQSxRQUFRLENBQUM0QyxpQkFBaUIsQ0FBQ29ELGNBQWMsQ0FBQztJQUN2RDtJQUNBO0lBQ0E7SUFDQXBILE1BQU0sQ0FBQ3FILE1BQU0sQ0FBQ2pHLFFBQVEsQ0FBQ1ksY0FBYyxDQUFDLENBQUM5QixPQUFPLENBQUMsVUFBQXdILEtBQUEsRUFBVztNQUFBLElBQVR2SCxHQUFHLEdBQUF1SCxLQUFBLENBQUh2SCxHQUFHO01BQ2xEaUIsUUFBUSxDQUFDdUcscUJBQXFCLENBQUN4SCxHQUFHLENBQUM7SUFDckMsQ0FBQyxDQUFDO0VBQ0o7RUFFQWlCLFFBQVEsR0FBR0EsUUFBUSxDQUFDNEMsaUJBQWlCLENBQUM7SUFDcEN6RSxTQUFTLEVBQUV3QixRQUFRLENBQUMvRyxNQUFNLENBQUN1RixTQUFTO0lBQ3BDcUksY0FBYyxFQUFFO0VBQ2xCLENBQUMsQ0FBQztFQUVGeEcsUUFBUSxDQUFDeUcsaUJBQWlCLENBQUNsSixLQUFLLENBQUNwQyxRQUFRLENBQUM7RUFDMUMsSUFBQXVMLG9CQUFBLEdBQTJCblEsa0JBQWtCLENBQUN5SixRQUFRLEVBQUV6QyxLQUFLLEVBQUVsQyxTQUFTLENBQUM7SUFBbEVSLFNBQVMsR0FBQTZMLG9CQUFBLENBQVQ3TCxTQUFTO0lBQUU0QyxLQUFLLEdBQUFpSixvQkFBQSxDQUFMakosS0FBSztFQUV2QixPQUFPSCwyQkFBMkIsQ0FBQ0MsS0FBSyxFQUFFO0lBQUMxQyxTQUFTLEVBQVRBLFNBQVM7SUFBRTRDLEtBQUssRUFBTEEsS0FBSztJQUFFQyxHQUFHLEVBQUhBO0VBQUcsQ0FBQyxDQUFDO0FBQ3BFO0FBRUEsT0FBTyxTQUFTaUoscUJBQXFCQSxDQUFDbEosS0FBSyxFQUFFdEMsUUFBUSxFQUFFb0IsWUFBWSxFQUFTO0VBQzFFLElBQUl5RCxRQUFRLEdBQUd2QyxLQUFLO0VBQ3BCLElBQUksQ0FBQ21CLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDMUQsUUFBUSxDQUFDLENBQUMrQyxNQUFNLEVBQUU7SUFDakM7SUFDQSxPQUFPVCxLQUFLO0VBQ2Q7RUFDQSxJQUFJLENBQUNBLEtBQUssQ0FBQzdFLE1BQU0sQ0FBQ21ILE1BQU0sRUFBRTtJQUN4QjtJQUNBQyxRQUFRLEdBQUd2QyxLQUFLLENBQUNtRixpQkFBaUIsQ0FBQztNQUFDN0MsTUFBTSxFQUFFbkIsTUFBTSxDQUFDQyxJQUFJLENBQUMxRCxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQUMsQ0FBQyxDQUFDO0VBQ3hFO0VBQ0EsSUFBTTJFLE9BQU8sR0FBRzNFLFFBQVEsQ0FBQzZFLFFBQVEsQ0FBQ3BILE1BQU0sQ0FBQ21ILE1BQU0sQ0FBQztFQUNoRCxJQUFJLENBQUNELE9BQU8sRUFBRTtJQUNaLE9BQU9yQyxLQUFLO0VBQ2Q7O0VBRUE7RUFDQSxJQUFNbUosTUFBTSxHQUNWLE9BQU9ySyxZQUFZLENBQUN5RCxRQUFRLENBQUNFLElBQUksQ0FBQyxDQUFDMkcscUJBQXFCLEtBQUssVUFBVSxHQUNuRXRLLFlBQVksQ0FBQ3lELFFBQVEsQ0FBQ0UsSUFBSSxDQUFDLENBQUMyRyxxQkFBcUIsQ0FBQy9HLE9BQU8sRUFBRSxFQUFFLENBQUMsR0FDOUQ7SUFBQ3FDLEtBQUssRUFBRTtFQUFFLENBQUM7O0VBRWpCO0VBQ0EsSUFBTUEsS0FBSyxHQUFHMkUsS0FBSyxDQUFDQyxPQUFPLENBQUNILE1BQU0sQ0FBQyxHQUFHQSxNQUFNLEdBQUdBLE1BQU0sQ0FBQ3pFLEtBQUssSUFBSSxFQUFFO0VBRWpFLElBQUlBLEtBQUssQ0FBQ2pFLE1BQU0sRUFBRTtJQUNoQjhCLFFBQVEsR0FBRyxJQUFJekQsWUFBWSxDQUFDa0IsS0FBSyxDQUFDeUMsSUFBSSxDQUFDLENBQUF2QyxhQUFBLENBQUFBLGFBQUEsS0FDbEN3RSxLQUFLLENBQUMsQ0FBQyxDQUFDO01BQ1h6SixLQUFLLEVBQUVzSCxRQUFRLENBQUNwSCxNQUFNLENBQUNGLEtBQUs7TUFDNUJxSCxNQUFNLEVBQUVDLFFBQVEsQ0FBQ3BILE1BQU0sQ0FBQ21ILE1BQU07TUFDOUJ5RyxjQUFjLEVBQUV4RyxRQUFRLENBQUNwSCxNQUFNLENBQUM0TixjQUFjO01BQzlDckksU0FBUyxFQUFFNkIsUUFBUSxDQUFDcEgsTUFBTSxDQUFDdUY7SUFBUyxFQUNyQyxDQUFDO0VBQ0o7RUFDQSxPQUFPLE9BQU82QixRQUFRLENBQUMyRyxxQkFBcUIsS0FBSyxVQUFVLEdBQ3ZEM0csUUFBUSxDQUFDMkcscUJBQXFCLENBQUM3RyxPQUFPLENBQUMsR0FDdkNFLFFBQVE7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNLLHNCQUFzQkEsQ0FDcEM5QyxLQUFlLEVBQ2Y4QixNQUFvRCxFQUMxQztFQUNWLElBQU9NLFFBQVEsR0FBYU4sTUFBTSxDQUEzQk0sUUFBUTtJQUFFcUgsT0FBTyxHQUFJM0gsTUFBTSxDQUFqQjJILE9BQU87RUFDeEIsSUFBSSxDQUFDckgsUUFBUSxFQUFFO0lBQ2IsT0FBT3BDLEtBQUs7RUFDZDtFQUNBLElBQU0wSixLQUFLLEdBQUd0SCxRQUFRLENBQUNsSCxFQUFFO0VBQ3pCLElBQU1pRixHQUFHLEdBQUdILEtBQUssQ0FBQzNDLE1BQU0sQ0FBQ3dGLFNBQVMsQ0FBQyxVQUFBUCxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDcEgsRUFBRSxLQUFLd08sS0FBSztFQUFBLEVBQUM7RUFFdkQsSUFBSSxDQUFDMUosS0FBSyxDQUFDaEIsWUFBWSxDQUFDeUssT0FBTyxDQUFDLEVBQUU7SUFDaENuWSxPQUFPLENBQUNxWSxLQUFLLElBQUFuQyxNQUFBLENBQUlpQyxPQUFPLCtCQUE0QixDQUFDO0lBQ3JELE9BQU96SixLQUFLO0VBQ2Q7RUFDQSxJQUFJeUMsUUFBUSxHQUFHLElBQUl6QyxLQUFLLENBQUNoQixZQUFZLENBQUN5SyxPQUFPLENBQUMsQ0FBQztJQUM3QztJQUNBdE8sS0FBSyxFQUFFaUgsUUFBUSxDQUFDL0csTUFBTSxDQUFDRixLQUFLO0lBQzVCOE4sY0FBYyxFQUFFN0csUUFBUSxDQUFDL0csTUFBTSxDQUFDNE4sY0FBYztJQUM5Q3pHLE1BQU0sRUFBRUosUUFBUSxDQUFDL0csTUFBTSxDQUFDbUg7RUFDMUIsQ0FBQyxDQUFDO0VBRUYsSUFBSSxDQUFDSixRQUFRLENBQUNPLElBQUksRUFBRTtJQUNsQjtJQUNBRixRQUFRLEdBQUcyRyxxQkFBcUIsQ0FBQzNHLFFBQVEsRUFBRXpDLEtBQUssQ0FBQ3BDLFFBQVEsRUFBRW9DLEtBQUssQ0FBQ2hCLFlBQVksQ0FBQztFQUNoRixDQUFDLE1BQU07SUFDTDtJQUNBO0lBQ0E7O0lBRUEsSUFBTTRLLGlCQUFpQixHQUNyQixPQUFPNUosS0FBSyxDQUFDaEIsWUFBWSxDQUFDeUssT0FBTyxDQUFDLENBQUNILHFCQUFxQixLQUFLLFVBQVUsR0FDbkV0SixLQUFLLENBQUNoQixZQUFZLENBQUN5SyxPQUFPLENBQUMsQ0FBQ0gscUJBQXFCLENBQUN0SixLQUFLLENBQUNwQyxRQUFRLENBQUM2RSxRQUFRLENBQUNwSCxNQUFNLENBQUNtSCxNQUFNLENBQUMsQ0FBQyxHQUN6RixJQUFJO0lBRVZDLFFBQVEsQ0FBQ29ILG1CQUFtQixDQUMxQnpILFFBQVEsQ0FBQy9HLE1BQU0sRUFDZitHLFFBQVEsQ0FBQzBILGlCQUFpQixFQUMxQjlKLEtBQUssQ0FBQ3BDLFFBQVEsRUFDZGdNLGlCQUNGLENBQUM7SUFDRG5ILFFBQVEsQ0FBQ3lHLGlCQUFpQixDQUFDbEosS0FBSyxDQUFDcEMsUUFBUSxDQUFDO0VBQzVDO0VBRUEsSUFBT2MsT0FBTyxHQUFlc0IsS0FBSyxDQUEzQnRCLE9BQU87SUFBRUQsU0FBUyxHQUFJdUIsS0FBSyxDQUFsQnZCLFNBQVM7RUFFekIsSUFBSWlDLFFBQVEsR0FBQU4sYUFBQSxDQUFBQSxhQUFBLEtBQ1BKLEtBQUs7SUFDUnRCLE9BQU8sRUFBRTBELFFBQVEsQ0FBQzJILGNBQWMsQ0FBQ3JMLE9BQU8sQ0FBQyxHQUFHWixTQUFTLEdBQUdZLE9BQU87SUFDL0RELFNBQVMsRUFBRTJELFFBQVEsQ0FBQzJILGNBQWMsQ0FBQ3RMLFNBQVMsQ0FBQyxHQUFHWCxTQUFTLEdBQUdXO0VBQVMsRUFDdEU7RUFFRCxJQUFBdUwsb0JBQUEsR0FBMkJoUixrQkFBa0IsQ0FBQ3lKLFFBQVEsRUFBRS9CLFFBQVEsQ0FBQztJQUExRHBELFNBQVMsR0FBQTBNLG9CQUFBLENBQVQxTSxTQUFTO0lBQUU0QyxLQUFLLEdBQUE4SixvQkFBQSxDQUFMOUosS0FBSztFQUN2QlEsUUFBUSxHQUFHWCwyQkFBMkIsQ0FBQ1csUUFBUSxFQUFFO0lBQUNwRCxTQUFTLEVBQVRBLFNBQVM7SUFBRTRDLEtBQUssRUFBTEEsS0FBSztJQUFFQyxHQUFHLEVBQUhBO0VBQUcsQ0FBQyxDQUFDO0VBRXpFLElBQUlELEtBQUssQ0FBQzdFLE1BQU0sQ0FBQ3dGLFNBQVMsQ0FBQ3pGLE9BQU8sSUFBSWdILFFBQVEsQ0FBQy9HLE1BQU0sQ0FBQ3dGLFNBQVMsQ0FBQ3pGLE9BQU8sRUFBRTtJQUN2RXNGLFFBQVEsR0FBR0kscUJBQXFCLENBQUNKLFFBQVEsQ0FBQztFQUM1Qzs7RUFFQTtFQUNBLElBQUlWLEtBQUssQ0FBQ25CLFNBQVMsQ0FBQzhCLE1BQU0sRUFBRTtJQUMxQkQsUUFBUSxHQUFBTixhQUFBLENBQUFBLGFBQUEsS0FDSE0sUUFBUTtNQUNYN0IsU0FBUyxFQUFFNkIsUUFBUSxDQUFDN0IsU0FBUyxDQUFDd0IsR0FBRyxDQUFDLFVBQUE0SixRQUFRLEVBQUk7UUFDNUMsSUFBQUMsZ0JBQUEsR0FBK0NELFFBQVEsQ0FBQzVNLE1BQU07VUFBOUM4TSxXQUFXLEdBQUFELGdCQUFBLENBQW5CUixLQUFLO1VBQW1CVSxXQUFXLEdBQUFwRix3QkFBQSxDQUFBa0YsZ0JBQUEsR0FBbkNSLEtBQUssRUFBQXJKLEdBQUEsQ0FBQWdLLGNBQUE7UUFDYixPQUFPWCxLQUFLLElBQUlPLFFBQVEsQ0FBQzVNLE1BQU0sR0FBQStDLGFBQUEsQ0FBQUEsYUFBQSxLQUV0QjZKLFFBQVE7VUFDWDVNLE1BQU0sRUFBQStDLGFBQUEsQ0FBQUEsYUFBQSxLQUNEZ0ssV0FBVyxPQUFBMUUsZUFBQSxLQUNieEYsS0FBSyxDQUFDaEYsRUFBRSxFQUFHaVAsV0FBVztRQUN4QixLQUVIRixRQUFRO01BQ2QsQ0FBQztJQUFDLEVBQ0g7RUFDSDs7RUFFQTtFQUNBdkosUUFBUSxHQUFBTixhQUFBLENBQUFBLGFBQUEsS0FDSE0sUUFBUTtJQUNYbEQsVUFBVSxFQUFFNUQsNkJBQTZCLENBQUM4RyxRQUFRLENBQUNsRCxVQUFVLEVBQUU0RSxRQUFRLENBQUNsSCxFQUFFLEVBQUV1SCxRQUFRLENBQUN2SCxFQUFFO0VBQUMsRUFDekY7RUFFRCxPQUFPd0YsUUFBUTtBQUNqQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNpRCwrQkFBK0JBLENBQzdDM0QsS0FBZSxFQUNmOEIsTUFBbUUsRUFDekQ7RUFDVixJQUFPTSxRQUFRLEdBQXNDTixNQUFNLENBQXBETSxRQUFRO0lBQUV5QyxTQUFTLEdBQTJCL0MsTUFBTSxDQUExQytDLFNBQVM7SUFBRXlGLFlBQVksR0FBYXhJLE1BQU0sQ0FBL0J3SSxZQUFZO0lBQUUvRyxPQUFPLEdBQUl6QixNQUFNLENBQWpCeUIsT0FBTztFQUNqRCxJQUFJLENBQUNuQixRQUFRLENBQUMvRyxNQUFNLENBQUNtSCxNQUFNLEVBQUU7SUFDM0IsT0FBT3hDLEtBQUs7RUFDZDtFQUVBLElBQU11QyxPQUFPLEdBQUd2QyxLQUFLLENBQUNwQyxRQUFRLENBQUN3RSxRQUFRLENBQUMvRyxNQUFNLENBQUNtSCxNQUFNLENBQUM7RUFFdEQsSUFBTXJDLEdBQUcsR0FBR0gsS0FBSyxDQUFDM0MsTUFBTSxDQUFDd0YsU0FBUyxDQUFDLFVBQUFQLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUNwSCxFQUFFLEtBQUtrSCxRQUFRLENBQUNsSCxFQUFFO0VBQUEsRUFBQztFQUM3RCxJQUFJdUgsUUFBUSxHQUFHTCxRQUFRLENBQUNpRCxpQkFBaUIsQ0FBQ1IsU0FBUyxDQUFDO0VBQ3BELElBQUl5RixZQUFZLEVBQUU3SCxRQUFRLEdBQUdBLFFBQVEsQ0FBQzhILG9CQUFvQixDQUFDRCxZQUFZLENBQUM7RUFFeEU3SCxRQUFRLENBQUMrSCx3QkFBd0IsQ0FBQ2pJLE9BQU8sRUFBRWdCLE9BQU8sQ0FBQzs7RUFFbkQ7RUFDQSxJQUFJa0gsWUFBWSxHQUFHM0oscUJBQXFCLENBQUNkLEtBQUssQ0FBQztFQUUvQyxJQUFNMEssYUFBYSxHQUFHdEksUUFBUSxDQUFDaUIsY0FBYyxDQUFDRSxPQUFPLENBQUM7RUFDdEQsSUFBSSxDQUFBbUgsYUFBYSxhQUFiQSxhQUFhLHVCQUFiQSxhQUFhLENBQUVDLGdCQUFnQixNQUFLbFUsY0FBYyxDQUFDbVUsS0FBSyxJQUFJL0YsU0FBUyxDQUFDNkYsYUFBYSxDQUFDekQsS0FBSyxDQUFDLEVBQUU7SUFDOUY7SUFDQXhFLFFBQVEsQ0FBQ29JLGtCQUFrQixDQUFDSCxhQUFhLENBQUNJLEtBQUssRUFBRTtNQUMvQ0MsZ0JBQWdCLEVBQUEzSyxhQUFBLENBQUFBLGFBQUEsS0FDWHFDLFFBQVEsQ0FBQ3BILE1BQU0sQ0FBQzJQLE9BQU8sQ0FBQ04sYUFBYSxDQUFDSSxLQUFLLENBQUMsQ0FBQ0MsZ0JBQWdCO1FBQ2hFRSxZQUFZLEVBQUU7TUFBSztJQUV2QixDQUFDLENBQUM7SUFFRlIsWUFBWSxHQUFBckssYUFBQSxDQUFBQSxhQUFBLEtBQ1BxSyxZQUFZO01BQ2ZwTixNQUFNLEVBQUVvTixZQUFZLENBQUNwTixNQUFNLENBQUNnRCxHQUFHLENBQUMsVUFBQWlDLENBQUM7UUFBQSxPQUFLQSxDQUFDLENBQUNwSCxFQUFFLEtBQUtrSCxRQUFRLENBQUNsSCxFQUFFLEdBQUd1SCxRQUFRLEdBQUdILENBQUM7TUFBQSxDQUFDO0lBQUMsRUFDNUU7RUFDSDtFQUVBLElBQU1pRCxZQUFZLEdBQUdrRixZQUFZLENBQUNuTixTQUFTLENBQUM2QyxHQUFHLENBQUM7RUFDaEQsSUFBQStLLG9CQUFBLEdBQTJCbFMsa0JBQWtCLENBQUN5SixRQUFRLEVBQUVnSSxZQUFZLEVBQUVsRixZQUFZLENBQUM7SUFBNUVqSSxTQUFTLEdBQUE0TixvQkFBQSxDQUFUNU4sU0FBUztJQUFFNEMsS0FBSyxHQUFBZ0wsb0JBQUEsQ0FBTGhMLEtBQUs7RUFFdkIsSUFDRSxDQUFBd0ssYUFBYSxhQUFiQSxhQUFhLHVCQUFiQSxhQUFhLENBQUVDLGdCQUFnQixNQUFLbFUsY0FBYyxDQUFDbVUsS0FBSyxJQUN4RC9GLFNBQVMsQ0FBQzZGLGFBQWEsYUFBYkEsYUFBYSx1QkFBYkEsYUFBYSxDQUFFUyxLQUFLLENBQUMsS0FBS3pVLFdBQVcsQ0FBQzBVLGFBQWEsSUFDN0QsQ0FBQ2QsWUFBWSxFQUNiO0lBQ0E7SUFDQSxJQUFNZSxhQUFhLEdBQUczUSw4QkFBOEIsQ0FBQztNQUNuRHlRLEtBQUssRUFBRXpVLFdBQVcsQ0FBQzBVLGFBQWE7TUFDaENuRSxLQUFLLEVBQUUvRyxLQUFLLENBQUM3RSxNQUFNLENBQUNxUCxhQUFhLENBQUN6RCxLQUFLLENBQUM7TUFDeENxRSxhQUFhLEVBQUVwTCxLQUFLLENBQUM3RSxNQUFNLENBQUM2RSxLQUFLLENBQUNtRCxjQUFjLENBQUNFLE9BQU8sQ0FBQyxDQUFDdEgsTUFBTSxDQUFDO01BQ2pFNk8sS0FBSyxFQUFFNUssS0FBSyxDQUFDN0UsTUFBTSxDQUFDOEgsU0FBUyxDQUFDdUgsYUFBYSxDQUFDSSxLQUFLLENBQUM7TUFDbERTLFdBQVcsRUFBRTtJQUNmLENBQUMsQ0FBQztJQUNGO0lBQ0FyTCxLQUFLLENBQUMySyxrQkFBa0IsQ0FBQ0gsYUFBYSxDQUFDSSxLQUFLLEVBQUU7TUFDNUNVLGNBQWMsRUFBRSxJQUFJO01BQ3BCVCxnQkFBZ0IsRUFBQTNLLGFBQUEsQ0FBQUEsYUFBQSxLQUNYRixLQUFLLENBQUM3RSxNQUFNLENBQUMyUCxPQUFPLENBQUNOLGFBQWEsQ0FBQ0ksS0FBSyxDQUFDLENBQUNDLGdCQUFnQjtRQUM3REUsWUFBWSxFQUFFO01BQUksRUFDbkI7TUFDREksYUFBYSxFQUFiQTtJQUNGLENBQUMsQ0FBQztFQUNKO0VBQ0EsT0FBT3RMLDJCQUEyQixDQUFDMEssWUFBWSxFQUFFO0lBQUNuTixTQUFTLEVBQVRBLFNBQVM7SUFBRTRDLEtBQUssRUFBTEEsS0FBSztJQUFFQyxHQUFHLEVBQUhBO0VBQUcsQ0FBQyxDQUFDO0FBQzNFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNpRCwyQkFBMkJBLENBQ3pDcEQsS0FBZSxFQUNmOEIsTUFBeUQsRUFDL0M7RUFDVixJQUFPTSxRQUFRLEdBQUlOLE1BQU0sQ0FBbEJNLFFBQVE7RUFDZixJQUFNakMsR0FBRyxHQUFHSCxLQUFLLENBQUMzQyxNQUFNLENBQUN3RixTQUFTLENBQUMsVUFBQVAsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ3BILEVBQUUsS0FBS2tILFFBQVEsQ0FBQ2xILEVBQUU7RUFBQSxFQUFDO0VBQzdELElBQU0wSixLQUFLLEdBQUd2RCxNQUFNLENBQUNDLElBQUksQ0FBQ1EsTUFBTSxDQUFDd0ksWUFBWSxDQUFDO0VBRTlDLElBQU1BLFlBQVksR0FBQWxLLGFBQUEsQ0FBQUEsYUFBQSxLQUNiZ0MsUUFBUSxDQUFDL0csTUFBTSxDQUFDOEgsU0FBUyxHQUN6QnJCLE1BQU0sQ0FBQ3dJLFlBQVksQ0FDdkI7RUFFRCxJQUFNN0gsUUFBUSxHQUFHTCxRQUFRLENBQUNpRCxpQkFBaUIsQ0FBQztJQUFDbEMsU0FBUyxFQUFFbUg7RUFBWSxDQUFDLENBQUM7RUFFdEUsSUFBSTVILFNBQVMsR0FBRzFDLEtBQUs7O0VBRXJCO0VBQ0E7RUFDQSxJQUNFeUMsUUFBUSxDQUFDRSxJQUFJLEtBQUssUUFBUSxJQUMxQmIsTUFBTSxDQUFDd0ksWUFBWSxDQUFDbUIsVUFBVSxLQUFLLElBQUksRUFDdkM7SUFDQS9JLFNBQVMsR0FBQXRDLGFBQUEsQ0FBQUEsYUFBQSxLQUNKc0MsU0FBUztNQUNackYsTUFBTSxFQUFFcUYsU0FBUyxDQUFDckYsTUFBTSxDQUFDZ0QsR0FBRyxDQUFDLFVBQUNpQyxDQUFDLEVBQUUvQixDQUFDLEVBQUs7UUFDckMsSUFBSUEsQ0FBQyxLQUFLSixHQUFHLElBQUltQyxDQUFDLENBQUNLLElBQUksS0FBSyxRQUFRLElBQUlMLENBQUMsQ0FBQ2pILE1BQU0sQ0FBQzhILFNBQVMsQ0FBQ3NJLFVBQVUsRUFBRTtVQUNyRSxPQUFPbkosQ0FBQyxDQUFDK0MsaUJBQWlCLENBQUM7WUFDekJsQyxTQUFTLEVBQUEvQyxhQUFBLENBQUFBLGFBQUEsS0FBTWtDLENBQUMsQ0FBQ2pILE1BQU0sQ0FBQzhILFNBQVM7Y0FBRXNJLFVBQVUsRUFBRTtZQUFLO1VBQ3RELENBQUMsQ0FBQztRQUNKO1FBQ0EsT0FBT25KLENBQUM7TUFDVixDQUFDO0lBQUMsRUFDSDtFQUNIO0VBRUEsSUFBSUcsUUFBUSxDQUFDNkMsd0JBQXdCLENBQUNWLEtBQUssQ0FBQyxFQUFFO0lBQzVDLElBQU1XLFlBQVksR0FBRzdDLFNBQVMsQ0FBQ3BGLFNBQVMsQ0FBQzZDLEdBQUcsQ0FBQztJQUM3QyxJQUFBdUwsb0JBQUEsR0FBMkIxUyxrQkFBa0IsQ0FBQ3lKLFFBQVEsRUFBRUMsU0FBUyxFQUFFNkMsWUFBWSxDQUFDO01BQXpFakksU0FBUyxHQUFBb08sb0JBQUEsQ0FBVHBPLFNBQVM7TUFBRTRDLEtBQUssR0FBQXdMLG9CQUFBLENBQUx4TCxLQUFLO0lBQ3ZCLE9BQU9ILDJCQUEyQixDQUFDMkMsU0FBUyxFQUFFO01BQUNwRixTQUFTLEVBQVRBLFNBQVM7TUFBRTRDLEtBQUssRUFBTEEsS0FBSztNQUFFQyxHQUFHLEVBQUhBO0lBQUcsQ0FBQyxDQUFDO0VBQ3hFO0VBRUEsT0FBT0osMkJBQTJCLENBQUMyQyxTQUFTLEVBQUU7SUFBQ3hDLEtBQUssRUFBRXVDLFFBQVE7SUFBRXRDLEdBQUcsRUFBSEE7RUFBRyxDQUFDLENBQUM7QUFDdkU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNd0wsNEJBQTRCLEdBQUcsU0FBL0JBLDRCQUE0QkEsQ0FDdkMzTCxLQUFRLEVBQUE0TCxLQUFBLEVBRUY7RUFBQSxJQURMMUgsS0FBSyxHQUFBMEgsS0FBQSxDQUFMMUgsS0FBSztFQUVOLElBQU1oSSxXQUFXLEdBQUdxTixLQUFLLENBQUNDLE9BQU8sQ0FBQ3RGLEtBQUssQ0FBQyxHQUFHQSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUdBLEtBQUs7RUFDM0QsSUFBTXhCLFNBQVMsR0FBQXRDLGFBQUEsQ0FBQUEsYUFBQSxLQUNWSixLQUFLO0lBQ1JmLGVBQWUsRUFBQW1CLGFBQUEsQ0FBQUEsYUFBQSxLQUNWSixLQUFLLENBQUNmLGVBQWU7TUFDeEIvQyxXQUFXLEVBQVhBO0lBQVc7RUFDWixFQUNGO0VBQ0Q7RUFDQSxPQUFPOEQsS0FBSyxDQUFDM0MsTUFBTSxDQUFDd08sTUFBTSxDQUFDLFVBQUNDLElBQUksRUFBRXhKLENBQUMsRUFBSztJQUN0QyxJQUFJQSxDQUFDLENBQUNqSCxNQUFNLENBQUN3RixTQUFTLENBQUN6RixPQUFPLElBQUlrSCxDQUFDLENBQUNLLElBQUksS0FBSyxNQUFNLEVBQUU7TUFDbkQsT0FBTzhDLDJCQUEyQixDQUFDcUcsSUFBSSxFQUFFO1FBQUMxSixRQUFRLEVBQUVFLENBQUM7UUFBRW1CLElBQUksRUFBRSxhQUFhO1FBQUV2SCxXQUFXLEVBQVhBO01BQVcsQ0FBQyxDQUFDO0lBQzNGO0lBQ0EsT0FBTzRQLElBQUk7RUFDYixDQUFDLEVBQUVwSixTQUFTLENBQUM7QUFDZixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNxSiw2QkFBNkJBLENBQzNDL0wsS0FBZSxFQUNmOEIsTUFBMkQsRUFDakQ7RUFDVixPQUFPa0ssZ0JBQWdCLENBQUNoTSxLQUFLLEVBQUU4QixNQUFNLENBQUM7QUFDeEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU21LLCtCQUErQkEsQ0FDN0NqTSxLQUFRLEVBQUFrTSxLQUFBLEVBRUw7RUFBQSxJQURGaFIsRUFBRSxHQUFBZ1IsS0FBQSxDQUFGaFIsRUFBRTtJQUFFaVIsZUFBZSxHQUFBRCxLQUFBLENBQWZDLGVBQWU7RUFFcEIsSUFBTWhGLE1BQU0sR0FBR25ILEtBQUssQ0FBQ3RDLE9BQU8sQ0FBQzJFLElBQUksQ0FBQyxVQUFBZ0MsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ25KLEVBQUUsS0FBS0EsRUFBRTtFQUFBLEVBQUM7RUFFbkQsSUFBSSxDQUFDaU0sTUFBTSxFQUFFO0lBQ1gsT0FBT25ILEtBQUs7RUFDZDtFQUVBLElBQU1vTSxTQUFTLEdBQUFoTSxhQUFBLENBQUFBLGFBQUEsS0FDVitHLE1BQU07SUFDVGdGLGVBQWUsRUFBZkE7RUFBZSxFQUNoQjtFQUVELElBQU16TCxRQUFRLEdBQUFOLGFBQUEsQ0FBQUEsYUFBQSxLQUNUSixLQUFLO0lBQ1J0QyxPQUFPLEVBQUU3RixLQUFLLENBQVN1VSxTQUFTLENBQUMsQ0FBQ3BNLEtBQUssQ0FBQ3RDLE9BQU87RUFBQyxFQUNqRDtFQUVELElBQU0yTyxtQkFBbUIsR0FBR0Msb0JBQW9CLENBQUNGLFNBQTRCLENBQUM7RUFFOUUsT0FBT0csZ0NBQWdDLENBQUM3TCxRQUFRLEVBQUU7SUFBQ3hGLEVBQUUsRUFBRkEsRUFBRTtJQUFFMEIsSUFBSSxFQUFFeVA7RUFBbUIsQ0FBQyxDQUFDO0FBQ3BGO0FBRUEsT0FBTyxTQUFTRyx3QkFBd0JBLENBQ3RDeE0sS0FBZSxFQUNmOEIsTUFBc0QsRUFDNUM7RUFBQSxJQUFBMkssZ0JBQUE7RUFDVixJQUFPQyxRQUFRLEdBQWU1SyxNQUFNLENBQTdCNEssUUFBUTtJQUFFTixTQUFTLEdBQUl0SyxNQUFNLENBQW5Cc0ssU0FBUztFQUMxQixJQUFNTyxTQUFTLEdBQUczTSxLQUFLLENBQUN0QyxPQUFPLENBQUMyRSxJQUFJLENBQUMsVUFBQWdDLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUNuSixFQUFFLEtBQUt3UixRQUFRO0VBQUEsRUFBQztFQUM1RCxJQUFJLENBQUNDLFNBQVMsRUFBRTtJQUNkLE9BQU8zTSxLQUFLO0VBQ2Q7O0VBRUE7RUFDQSxJQUFNNE0sbUJBQW1CLElBQUFILGdCQUFBLEdBQUd0VSxlQUFlLENBQUN3VSxTQUFTLEVBQUUzTSxLQUFLLENBQUNQLE1BQU0sQ0FBQyxjQUFBZ04sZ0JBQUEsY0FBQUEsZ0JBQUEsR0FBSTtJQUFDcFIsTUFBTSxFQUFFLENBQUM7RUFBQyxDQUFDO0VBQ3BGLElBQU13UixtQkFBbUIsR0FBRzFVLGVBQWUsQ0FBQ2lVLFNBQVMsRUFBRXBNLEtBQUssQ0FBQ1AsTUFBTSxDQUFDO0VBQ3BFLElBQUksQ0FBQ29OLG1CQUFtQixJQUFJcGIsT0FBTyxDQUFDbWIsbUJBQW1CLEVBQUVDLG1CQUFtQixDQUFDLEVBQUU7SUFDN0UsT0FBTzdNLEtBQUs7RUFDZDs7RUFFQTtFQUNBLElBQU1rRCxPQUFPLEdBQUduQyxnQkFBZ0IsQ0FBQzZMLG1CQUFtQixFQUFFQyxtQkFBbUIsQ0FBQztFQUMxRSxPQUFPM0osT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7O0VBRXRCLElBQU1zQixXQUFXLEdBQUd4RSxLQUFLLENBQUN0QyxPQUFPLENBQUNtRixTQUFTLENBQUMsVUFBQXdCLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUNuSixFQUFFLEtBQUt3UixRQUFRO0VBQUEsRUFBQztFQUNuRSxJQUFJbEksV0FBVyxHQUFHLENBQUMsRUFBRTtJQUNuQixPQUFPeEUsS0FBSztFQUNkO0VBQ0EsT0FBT2dNLGdCQUFnQixDQUNyQmhNLEtBQUssRUFDTC9NLFNBQVMsQ0FBQ3VSLFdBQVcsRUFBRW5ELE1BQU0sQ0FBQ0MsSUFBSSxDQUFDNEIsT0FBTyxDQUFDLEVBQUU3QixNQUFNLENBQUNxSCxNQUFNLENBQUN4RixPQUFPLENBQUMsQ0FDckUsQ0FBQztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVM4SSxnQkFBZ0JBLENBQzlCaE0sS0FBUSxFQUNSOEIsTUFBOEMsRUFDM0M7RUFDSCxJQUFPM0IsR0FBRyxHQUFvQjJCLE1BQU0sQ0FBN0IzQixHQUFHO0lBQUEyTSxrQkFBQSxHQUFvQmhMLE1BQU0sQ0FBeEJpTCxVQUFVO0lBQVZBLFVBQVUsR0FBQUQsa0JBQUEsY0FBRyxDQUFDLEdBQUFBLGtCQUFBO0VBQzFCLElBQU1ILFNBQVMsR0FBRzNNLEtBQUssQ0FBQ3RDLE9BQU8sQ0FBQ3lDLEdBQUcsQ0FBQztFQUNwQyxJQUFJLENBQUN3TSxTQUFTLEVBQUU7SUFDZHJiLE9BQU8sQ0FBQ3FZLEtBQUssWUFBQW5DLE1BQUEsQ0FBWXJILEdBQUcsa0JBQWUsQ0FBQztJQUM1QyxPQUFPSCxLQUFLO0VBQ2Q7RUFDQSxJQUNFdUosS0FBSyxDQUFDQyxPQUFPLENBQUMxSCxNQUFNLENBQUMyQixJQUFJLENBQUMsS0FDekIsQ0FBQzhGLEtBQUssQ0FBQ0MsT0FBTyxDQUFDMUgsTUFBTSxDQUFDb0MsS0FBSyxDQUFDLElBQUlwQyxNQUFNLENBQUMyQixJQUFJLENBQUM5QyxNQUFNLEtBQUttQixNQUFNLENBQUNvQyxLQUFLLENBQUN2RCxNQUFNLENBQUMsRUFDNUU7SUFDQXJQLE9BQU8sQ0FBQ3FZLEtBQUssQ0FBQywyRUFBMkUsQ0FBQztJQUMxRixPQUFPM0osS0FBSztFQUNkO0VBQ0E7RUFDQSxJQUFNNEUsS0FBSyxHQUFHcFAsT0FBTyxDQUFDc00sTUFBTSxDQUFDMkIsSUFBSSxDQUFDO0VBQ2xDLElBQU1pRixNQUFNLEdBQUdhLEtBQUssQ0FBQ0MsT0FBTyxDQUFDMUgsTUFBTSxDQUFDMkIsSUFBSSxDQUFDLEdBQUdqTyxPQUFPLENBQUNzTSxNQUFNLENBQUNvQyxLQUFLLENBQUMsR0FBRyxDQUFDcEMsTUFBTSxDQUFDb0MsS0FBSyxDQUFDO0VBRWxGLElBQUlrSSxTQUFTLEdBQUdPLFNBQVM7RUFDekIsSUFBSWpNLFFBQVEsR0FBR1YsS0FBSztFQUVwQixJQUFJZ04sa0JBQTRCLEdBQUcsRUFBRTtFQUFDLElBQUFDLEtBQUEsWUFBQUEsTUFBQSxFQUNDO0lBQ3JDLElBQU14SixJQUFJLEdBQUdtQixLQUFLLENBQUNyRSxDQUFDLENBQUM7SUFDckIsSUFBTTJELEtBQUssR0FBR3dFLE1BQU0sQ0FBQ25JLENBQUMsQ0FBQztJQUN2QjtJQUNBO0lBQ0EsSUFBSTJNLEdBQUc7SUFDUCxJQUFJekosSUFBSSxLQUFLLE1BQU0sSUFBSThGLEtBQUssQ0FBQ0MsT0FBTyxDQUFDdEYsS0FBSyxDQUFDLEVBQUU7TUFDM0M7TUFDQWdKLEdBQUcsR0FBR2hKLEtBQUssQ0FBQzJILE1BQU0sQ0FBQyxVQUFDQyxJQUFJLEVBQUVxQixDQUFDLEVBQUs7UUFDOUIsT0FBT0MsaUJBQWlCLENBQUN0QixJQUFJLEVBQUVNLFNBQVMsRUFBRTNJLElBQUksRUFBRTBKLENBQUMsRUFBRUosVUFBVSxDQUFDO01BQ2hFLENBQUMsRUFBRXJNLFFBQVEsQ0FBQztJQUNkLENBQUMsTUFBTTtNQUNMd00sR0FBRyxHQUFHRSxpQkFBaUIsQ0FBQzFNLFFBQVEsRUFBRTBMLFNBQVMsRUFBRTNJLElBQUksRUFBRVMsS0FBSyxFQUFFNkksVUFBVSxDQUFDO0lBQ3ZFO0lBQ0FYLFNBQVMsR0FBR2MsR0FBRyxDQUFDL0YsTUFBTTtJQUN0QnpHLFFBQVEsR0FBR3dNLEdBQUcsQ0FBQ2xOLEtBQUs7SUFDcEJnTixrQkFBa0IsR0FBR0Esa0JBQWtCLENBQUN4RixNQUFNLENBQUMwRixHQUFHLENBQUNGLGtCQUFrQixDQUFDO0VBQ3hFLENBQUM7RUFqQkQsS0FBSyxJQUFJek0sQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHcUUsS0FBSyxDQUFDakUsTUFBTSxFQUFFSixDQUFDLEVBQUU7SUFBQTBNLEtBQUE7RUFBQTtFQW1CckMsSUFBTUksY0FBYyxHQUFHck4sS0FBSyxDQUFDdEMsT0FBTyxDQUFDMkUsSUFBSSxDQUFDLFVBQUFnQyxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDaUosSUFBSSxLQUFLdFgsaUJBQWlCLENBQUN1WCxRQUFRO0VBQUEsRUFBQztFQUVyRixJQUFJRixjQUFjLElBQUlBLGNBQWMsQ0FBQ25TLEVBQUUsS0FBS2tSLFNBQVMsQ0FBQ2xSLEVBQUUsRUFBRTtJQUN4RDtJQUNBa1IsU0FBUyxDQUFDa0IsSUFBSSxHQUFHdFgsaUJBQWlCLENBQUN3WCxJQUFJO0VBQ3pDOztFQUVBO0VBQ0E5TSxRQUFRLEdBQUd6TCxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUVrTCxHQUFHLENBQUMsRUFBRWlNLFNBQVMsRUFBRTFMLFFBQVEsQ0FBQzs7RUFFckQ7RUFDQSxJQUFNK00sZ0JBQWdCLEdBQUc1WixzQkFBc0IsQ0FDN0NsQyxJQUFJLENBQUNxYixrQkFBa0IsQ0FBQyxFQUN4QnRNLFFBQVEsQ0FBQzlDLFFBQVEsRUFDakI4QyxRQUFRLENBQUNoRCxPQUFPLEVBQ2hCZ0QsUUFBUSxDQUFDckQsTUFDWCxDQUFDO0VBRURxRCxRQUFRLEdBQUd6TCxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRXdZLGdCQUFnQixFQUFFL00sUUFBUSxDQUFDOztFQUV4RDtFQUNBLElBQU1nTixjQUFjLEdBQUd4WSxnQkFBZ0IsQ0FBQ3dMLFFBQVEsQ0FBQzlDLFFBQVEsRUFBRThDLFFBQVEsQ0FBQ2hELE9BQU8sQ0FBQ3lDLEdBQUcsQ0FBQyxDQUFDO0VBRWpGTyxRQUFRLEdBQUd6TCxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUVrTCxHQUFHLENBQUMsRUFBRXVOLGNBQWMsRUFBRWhOLFFBQVEsQ0FBQzs7RUFFMUQ7RUFDQTtFQUNBQSxRQUFRLEdBQUdpTix3QkFBd0IsQ0FBQ2pOLFFBQVEsRUFBRXNNLGtCQUFrQixFQUFFWixTQUFTLENBQUM7O0VBRTVFO0VBQ0EsSUFBSUEsU0FBUyxDQUFDekosSUFBSSxLQUFLNU0sWUFBWSxDQUFDNlgsU0FBUyxJQUFJaEosS0FBSyxDQUFDeUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO0lBQ3hFM0csUUFBUSxHQUFHbU4sK0JBQStCLENBQUNuTixRQUFRLEVBQUVvQixNQUFNLENBQUMzQixHQUFHLENBQUM7RUFDbEU7RUFFQSxPQUFPTyxRQUFRO0FBQ2pCO0FBRUEsU0FBU29OLCtCQUErQkEsQ0FBQzNHLE1BQU0sRUFBRTRGLFVBQVUsRUFBRTdJLEtBQUssRUFBRXRHLFFBQVEsRUFBRTtFQUM1RSxJQUFJd08sU0FBUyxHQUFHakYsTUFBTTtFQUN0QixJQUFJQSxNQUFNLENBQUMzRSxNQUFNLENBQUN1SyxVQUFVLENBQUMsRUFBRTtJQUM3QjtJQUNBWCxTQUFTLEdBQUcyQiwrQkFBK0IsQ0FBQzVHLE1BQU0sRUFBRTRGLFVBQVUsRUFBRW5QLFFBQVEsQ0FBQztFQUMzRTtFQUNBLElBQUlzRyxLQUFLLEVBQUU7SUFDVCxJQUFNOEosU0FBUyxHQUFHNUIsU0FBUyxDQUFDNUosTUFBTSxDQUFDc0UsS0FBSyxDQUFDLENBQUM7SUFDMUNrSCxTQUFTLENBQUNqQixVQUFVLENBQUMsR0FBRzdJLEtBQUs7SUFDN0JrSSxTQUFTLEdBQUduWCxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRStZLFNBQVMsRUFBRTVCLFNBQVMsQ0FBQztFQUNuRDtFQUNBLE9BQU9BLFNBQVM7QUFDbEI7QUFFQSxTQUFTMkIsK0JBQStCQSxDQUFDNUcsTUFBTSxFQUFFNEYsVUFBVSxFQUFFblAsUUFBUSxFQUFFO0VBQ3JFLElBQU00RSxNQUFNLEdBQUcyRSxNQUFNLENBQUMzRSxNQUFNLENBQUN1SyxVQUFVLENBQUM7RUFFeEMsSUFBSTVGLE1BQU0sQ0FBQzNFLE1BQU0sQ0FBQzdCLE1BQU0sS0FBSyxDQUFDLElBQUlvTSxVQUFVLEtBQUssQ0FBQyxFQUFFO0lBQ2xEO0lBQ0EsT0FBT3ZZLGdCQUFnQixDQUFDO01BQUMwRyxFQUFFLEVBQUVpTSxNQUFNLENBQUNqTTtJQUFFLENBQUMsQ0FBQztFQUMxQztFQUVBLElBQUlzSCxNQUFNLEVBQUU7SUFDVjJFLE1BQU0sR0FBR2hTLGdCQUFnQixDQUFDZ1MsTUFBTSxFQUFFM0UsTUFBTSxDQUFDO0VBQzNDO0VBRUEsU0FBQXlMLEVBQUEsTUFBQUMsSUFBQSxHQUFtQixDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFlBQVksQ0FBQyxFQUFBRCxFQUFBLEdBQUFDLElBQUEsQ0FBQXZOLE1BQUEsRUFBQXNOLEVBQUEsSUFBRTtJQUE1RCxJQUFNeEssSUFBSSxHQUFBeUssSUFBQSxDQUFBRCxFQUFBO0lBQ2IsSUFBSTFFLEtBQUssQ0FBQ0MsT0FBTyxDQUFDckMsTUFBTSxDQUFDMUQsSUFBSSxDQUFDLENBQUMsRUFBRTtNQUMvQixJQUFNMEssT0FBTyxHQUFHaEgsTUFBTSxDQUFDMUQsSUFBSSxDQUFDLENBQUNxRCxLQUFLLENBQUMsQ0FBQztNQUNwQ3FILE9BQU8sQ0FBQ3ZHLE1BQU0sQ0FBQ21GLFVBQVUsRUFBRSxDQUFDLENBQUM7TUFDN0I1RixNQUFNLEdBQUdsUyxHQUFHLENBQUMsQ0FBQ3dPLElBQUksQ0FBQyxFQUFFMEssT0FBTyxFQUFFaEgsTUFBTSxDQUFDO0lBQ3ZDO0VBQ0Y7O0VBRUE7RUFDQSxJQUFNaUgsV0FBVyxHQUFHM1QsaUJBQWlCLENBQUMwTSxNQUFNLEVBQUV2SixRQUFRLENBQUM7RUFFdkQsSUFBTXlRLFVBQVUsR0FBQWpPLGFBQUEsQ0FBQUEsYUFBQSxLQUNYK0csTUFBTSxHQUVMaUgsV0FBVyxHQUFHO0lBQUNuUyxNQUFNLEVBQUVtUyxXQUFXLGFBQVhBLFdBQVcsdUJBQVhBLFdBQVcsQ0FBRW5TLE1BQU07SUFBRXFTLElBQUksRUFBRUYsV0FBVyxhQUFYQSxXQUFXLHVCQUFYQSxXQUFXLENBQUVFO0VBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUM5RTtFQUVELElBQU1OLFNBQVMsR0FBR2hhLHlCQUF5QixDQUFDcWEsVUFBVSxDQUFDbkssS0FBSyxFQUFFbUssVUFBVSxDQUFDO0VBQ3pFLE9BQUFqTyxhQUFBLENBQUFBLGFBQUEsS0FDS2lPLFVBQVU7SUFDYm5LLEtBQUssRUFBRThKO0VBQVM7QUFFcEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBU1osaUJBQWlCQSxDQUFDcE4sS0FBSyxFQUFFbUgsTUFBTSxFQUFFMUQsSUFBSSxFQUFFUyxLQUFLLEVBQUU2SSxVQUFVLEVBQUV3QixVQUFXLEVBQUU7RUFDOUUsSUFBSXZCLGtCQUE0QixHQUFHLEVBQUU7RUFDckMsUUFBUXZKLElBQUk7SUFDVjtJQUNBO0lBQ0E7SUFDQSxLQUFLaFEsb0JBQW9CLENBQUMrTyxNQUFNO01BQUU7UUFDaEMsSUFBTWdNLFNBQVMsR0FBQS9HLGtCQUFBLENBQU9OLE1BQU0sQ0FBQzNFLE1BQU0sQ0FBQztRQUNwQzJFLE1BQU0sR0FBRzJHLCtCQUErQixDQUFDM0csTUFBTSxFQUFFNEYsVUFBVSxFQUFFN0ksS0FBSyxFQUFFbEUsS0FBSyxDQUFDcEMsUUFBUSxDQUFDO1FBQ25Gb1Asa0JBQWtCLEdBQUdyYixJQUFJLElBQUE2VixNQUFBLENBQUFDLGtCQUFBLENBQUsrRyxTQUFTLEdBQUEvRyxrQkFBQSxDQUFLTixNQUFNLENBQUMzRSxNQUFNLEVBQUMsQ0FBQztRQUMzRDtNQUNGO0lBQ0EsS0FBSy9PLG9CQUFvQixDQUFDeVQsSUFBSTtNQUFFO1FBQzlCO1FBQ0E7UUFDQTtRQUNBLElBQU11SCxTQUFTLEdBQUd0SCxNQUFNLENBQUMzRSxNQUFNLENBQUN1SyxVQUFVLENBQUM7UUFDM0MsSUFBQTJCLHFCQUFBLEdBQXFEOWEsb0JBQW9CLENBQ3ZFdVQsTUFBTSxFQUNObkgsS0FBSyxDQUFDcEMsUUFBUSxFQUNkNlEsU0FBUyxFQUNUdkssS0FBSyxFQUNMNkksVUFBVSxFQUNWO1lBQUM0QixXQUFXLEVBQUU1QixVQUFVLEdBQUc7VUFBQyxDQUM5QixDQUFDO1VBUGM2QixhQUFhLEdBQUFGLHFCQUFBLENBQXJCdkgsTUFBTTtVQUEwQjBILFVBQVUsR0FBQUgscUJBQUEsQ0FBbkJuTSxPQUFPO1FBUXJDLElBQUlxTSxhQUFhLEVBQUU7VUFDakJ6SCxNQUFNLEdBQUd5SCxhQUFhO1VBQ3RCLElBQUl6SCxNQUFNLENBQUMySCxHQUFHLEVBQUU7WUFDZDNILE1BQU0sR0FBR3RPLGdCQUFnQixDQUFDc08sTUFBTSxFQUFFbkgsS0FBSyxDQUFDdEMsT0FBTyxDQUFDO1lBQ2hEeUosTUFBTSxHQUFHMU8sZ0JBQWdCLENBQUMwTyxNQUFNLEVBQUVuSCxLQUFLLENBQUN0QyxPQUFPLENBQUM7VUFDbEQ7VUFDQXNDLEtBQUssR0FBRy9LLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRXdaLFNBQVMsQ0FBQyxFQUFFSSxVQUFVLEVBQUU3TyxLQUFLLENBQUM7VUFDdkQ7VUFDQW1ILE1BQU0sR0FBR2hTLGdCQUFnQixDQUFDZ1MsTUFBTSxFQUFFc0gsU0FBUyxDQUFDO1VBRTVDekIsa0JBQWtCLEdBQUc0QixhQUFhLENBQUNwTSxNQUFNO1FBQzNDO1FBQ0E7UUFDQTtNQUNGO0lBRUEsS0FBSy9PLG9CQUFvQixDQUFDb1MsT0FBTztNQUFFO1FBQ2pDO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsSUFBTWtKLGlCQUFpQixHQUFHbmQsR0FBRyxDQUFDc1MsS0FBSyxFQUFFaUQsTUFBTSxDQUFDdEIsT0FBTyxDQUFDO1FBRXBELElBQU1tSixZQUFZLEdBQUdyZCxJQUFJLENBQ3ZCb2QsaUJBQWlCLENBQ2QxTyxHQUFHLENBQUMsVUFBQTRPLEdBQUc7VUFBQSxPQUNOemQsR0FBRyxDQUNEd08sS0FBSyxDQUFDM0MsTUFBTSxDQUFDZ0YsSUFBSSxDQUFDLFVBQUFDLENBQUM7WUFBQSxPQUFJQSxDQUFDLENBQUNwSCxFQUFFLEtBQUsrVCxHQUFHO1VBQUEsRUFBQyxFQUNwQyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQ3JCLENBQUM7UUFBQSxDQUNILENBQUMsQ0FDQTlILE1BQU0sQ0FBQyxVQUFBM0csQ0FBQztVQUFBLE9BQUlBLENBQUM7UUFBQSxFQUNsQixDQUFDOztRQUVEO1FBQ0F3TSxrQkFBa0IsR0FBR2dDLFlBQVk7O1FBRWpDO1FBQ0EsSUFBTUUsVUFBVSxHQUFHdmQsSUFBSSxDQUNyQnVTLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUNEN0QsR0FBRyxDQUFDLFVBQUE0TyxHQUFHO1VBQUEsT0FDUHpkLEdBQUcsQ0FDRHdPLEtBQUssQ0FBQzNDLE1BQU0sQ0FBQ2dGLElBQUksQ0FBQyxVQUFBQyxDQUFDO1lBQUEsT0FBSUEsQ0FBQyxDQUFDcEgsRUFBRSxLQUFLK1QsR0FBRztVQUFBLEVBQUMsRUFDcEMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUNyQixDQUFDO1FBQUEsQ0FDSCxDQUFDLENBQ0E5SCxNQUFNLENBQUMsVUFBQTNHLENBQUM7VUFBQSxPQUFJQSxDQUFDO1FBQUEsRUFDbEIsQ0FBQztRQUVEMkcsTUFBTSxHQUFBL0csYUFBQSxDQUFBQSxhQUFBLEtBQ0QrRyxNQUFNO1VBQ1R0QixPQUFPLEVBQUUzQixLQUFLO1VBQ2QxQixNQUFNLEVBQUUwTTtRQUFVLEVBQ25CO1FBQ0Q7TUFDRjtJQUVBO01BQ0UvSCxNQUFNLEdBQUdsUyxHQUFHLENBQUMsQ0FBQ3dPLElBQUksQ0FBQyxFQUFFUyxLQUFLLEVBQUVpRCxNQUFNLENBQUM7TUFDbkM2RixrQkFBa0IsR0FBQXZGLGtCQUFBLENBQU9OLE1BQU0sQ0FBQzNFLE1BQU0sQ0FBQztNQUN2QztFQUNKO0VBRUEsT0FBTztJQUFDMkUsTUFBTSxFQUFOQSxNQUFNO0lBQUVvSCxVQUFVLEVBQVZBLFVBQVU7SUFBRXZCLGtCQUFrQixFQUFsQkEsa0JBQWtCO0lBQUVoTixLQUFLLEVBQUxBO0VBQUssQ0FBQztBQUN4RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU1tUCxvQkFBb0IsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUMvQm5QLEtBQWUsRUFBQW9QLEtBQUEsRUFFRjtFQUFBLElBRFpqUCxHQUFHLEdBQUFpUCxLQUFBLENBQUhqUCxHQUFHO0lBQUVrUCxPQUFPLEdBQUFELEtBQUEsQ0FBUEMsT0FBTztFQUViLElBQUksQ0FBQ3JQLEtBQUssQ0FBQ3RDLE9BQU8sQ0FBQ3lDLEdBQUcsQ0FBQyxFQUFFO0lBQ3ZCN08sT0FBTyxDQUFDcVksS0FBSyxZQUFBbkMsTUFBQSxDQUFZckgsR0FBRyxtQkFBZ0IsQ0FBQztJQUM3QyxPQUFPSCxLQUFLO0VBQ2Q7RUFDQSxJQUFJb00sU0FBUyxHQUFHcE0sS0FBSyxDQUFDdEMsT0FBTyxDQUFDeUMsR0FBRyxDQUFDO0VBRWxDLEtBQUssSUFBTXNELElBQUksSUFBSTRMLE9BQU8sRUFBRTtJQUMxQixJQUFJNUwsSUFBSSxLQUFLLFVBQVUsRUFBRTtNQUN2QjJJLFNBQVMsR0FBR3pVLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQ0YsTUFBTSxDQUFDNFgsT0FBTyxDQUFDQyxRQUFRLENBQUMsQ0FBQyxDQUFDbEQsU0FBUyxDQUFDO0lBQ3BFLENBQUMsTUFBTSxJQUFJM0ksSUFBSSxLQUFLLE9BQU8sRUFBRTtNQUMzQixJQUFNOEwsU0FBUyxHQUFHRixPQUFPLENBQUNHLEtBQUssR0FBR2xaLFVBQVUsQ0FBQ21aLFNBQVMsR0FBR25aLFVBQVUsQ0FBQ29aLFNBQVM7TUFFN0V0RCxTQUFTLEdBQUd6VSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUNGLE1BQU0sQ0FBQztRQUFDa0wsSUFBSSxFQUFFNE07TUFBUyxDQUFDLENBQUMsQ0FBQyxDQUFDOVgsTUFBTSxDQUFDNFgsT0FBTyxDQUFDLENBQUNqRCxTQUFTLENBQUMsQ0FBQztJQUN0RjtFQUNGO0VBRUFBLFNBQVMsR0FBR2xYLGdCQUFnQixDQUFDOEssS0FBSyxDQUFDcEMsUUFBUSxFQUFFd08sU0FBUyxDQUFDO0VBRXZELE9BQUFoTSxhQUFBLENBQUFBLGFBQUEsS0FDS0osS0FBSztJQUNSdEMsT0FBTyxFQUFFc0MsS0FBSyxDQUFDdEMsT0FBTyxDQUFDMkMsR0FBRyxDQUFDLFVBQUNnRSxDQUFDLEVBQUU5RCxDQUFDO01BQUEsT0FBTUEsQ0FBQyxLQUFLSixHQUFHLEdBQUdpTSxTQUFTLEdBQUcvSCxDQUFDO0lBQUEsQ0FBQztFQUFDO0FBRXJFLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTXNMLGdCQUFnQixHQUFHLFNBQW5CQSxnQkFBZ0JBLENBQzNCM1AsS0FBZSxFQUNmOEIsTUFBOEM7RUFBQSxPQUU5QyxDQUFDQSxNQUFNLENBQUNVLE1BQU0sR0FDVnhDLEtBQUssR0FBQUksYUFBQSxDQUFBQSxhQUFBLEtBRUFKLEtBQUs7SUFDUnRDLE9BQU8sS0FBQThKLE1BQUEsQ0FBQUMsa0JBQUEsQ0FBTXpILEtBQUssQ0FBQ3RDLE9BQU8sSUFBRWxKLGdCQUFnQixDQUFDO01BQUNnTyxNQUFNLEVBQUVWLE1BQU0sQ0FBQ1UsTUFBTTtNQUFFdEgsRUFBRSxFQUFFNEcsTUFBTSxDQUFDNUc7SUFBRSxDQUFDLENBQUM7RUFBQyxFQUN0RjtBQUFBOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU0wVSwyQkFBMkIsR0FBRyxTQUE5QkEsMkJBQTJCQSxDQUN0QzVQLEtBQWUsRUFDZjhCLE1BQXlELEVBQzVDO0VBQ2IsSUFBTzVHLEVBQUUsR0FBMEI0RyxNQUFNLENBQWxDNUcsRUFBRTtJQUFFc0gsTUFBTSxHQUFrQlYsTUFBTSxDQUE5QlUsTUFBTTtJQUFFeUUsS0FBSyxHQUFXbkYsTUFBTSxDQUF0Qm1GLEtBQUs7SUFBRS9DLEtBQUssR0FBSXBDLE1BQU0sQ0FBZm9DLEtBQUs7RUFFL0IsSUFBSXhELFFBQVEsR0FBR1YsS0FBSztFQUNwQixJQUFNNlAsYUFBYSxHQUFHblAsUUFBUSxDQUFDaEQsT0FBTyxDQUFDbUYsU0FBUyxDQUFDLFVBQUF3QixDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDbkosRUFBRSxLQUFLQSxFQUFFO0VBQUEsRUFBQztFQUNsRSxJQUFJc0osV0FBVyxHQUFHcUwsYUFBYTtFQUMvQixJQUFJLENBQUMzVSxFQUFFLElBQUksQ0FBQ3NILE1BQU0sRUFBRTtJQUNsQixPQUFPOUIsUUFBUTtFQUNqQjtFQUNBLElBQUltUCxhQUFhLEdBQUcsQ0FBQyxJQUFJck4sTUFBTSxFQUFFO0lBQy9COUIsUUFBUSxHQUFHaVAsZ0JBQWdCLENBQUNqUCxRQUFRLEVBQUU7TUFBQzhCLE1BQU0sRUFBTkE7SUFBTSxDQUFDLENBQUM7SUFDL0MsSUFBSTlCLFFBQVEsQ0FBQ2hELE9BQU8sQ0FBQ2lELE1BQU0sS0FBS1gsS0FBSyxDQUFDdEMsT0FBTyxDQUFDaUQsTUFBTSxHQUFHLENBQUMsRUFBRTtNQUN4RDtNQUNBLE9BQU9YLEtBQUs7SUFDZDtJQUNBO0lBQ0F3RSxXQUFXLEdBQUc5RCxRQUFRLENBQUNoRCxPQUFPLENBQUNpRCxNQUFNLEdBQUcsQ0FBQztJQUN6Q0QsUUFBUSxDQUFDaEQsT0FBTyxDQUFDOEcsV0FBVyxDQUFDLEdBQUFwRSxhQUFBLENBQUFBLGFBQUEsS0FDeEJNLFFBQVEsQ0FBQ2hELE9BQU8sQ0FBQzhHLFdBQVcsQ0FBQyxHQUM1QnRKLEVBQUUsR0FBRztNQUFDQSxFQUFFLEVBQUZBO0lBQUUsQ0FBQyxHQUFHLElBQUksQ0FDckI7RUFDSDs7RUFFQTtFQUNBO0VBQ0EsSUFBSTJVLGFBQWEsSUFBSSxDQUFDLElBQUlyTixNQUFNLEVBQUU7SUFDaEM7SUFDQTlCLFFBQVEsR0FBRyxDQUFDNkksS0FBSyxDQUFDQyxPQUFPLENBQUNoSCxNQUFNLENBQUMsR0FBR0EsTUFBTSxHQUFHLENBQUNBLE1BQU0sQ0FBQyxFQUFFcUosTUFBTSxDQUFDLFVBQUNDLElBQUksRUFBRXRMLENBQUMsRUFBRXNQLEtBQUssRUFBSztNQUNoRixPQUFPOUQsZ0JBQWdCLENBQUNGLElBQUksRUFBRTtRQUM1QjNMLEdBQUcsRUFBRXFFLFdBQVc7UUFDaEJmLElBQUksRUFBRSxRQUFRO1FBQ2RTLEtBQUssRUFBRTFELENBQUM7UUFDUnVNLFVBQVUsRUFBRStDO01BQ2QsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxFQUFFcFAsUUFBUSxDQUFDO0VBQ2Q7RUFDQTtFQUNBLElBQUl1RyxLQUFLLEVBQUU7SUFDVDtJQUNBdkcsUUFBUSxHQUFHLENBQUM2SSxLQUFLLENBQUNDLE9BQU8sQ0FBQ3ZDLEtBQUssQ0FBQyxHQUFHQSxLQUFLLEdBQUcsQ0FBQ0EsS0FBSyxDQUFDLEVBQUU0RSxNQUFNLENBQUMsVUFBQ0MsSUFBSSxFQUFFekgsQ0FBQyxFQUFFeUwsS0FBSyxFQUFLO01BQzdFLE9BQU85RCxnQkFBZ0IsQ0FBQ0YsSUFBSSxFQUFFO1FBQzVCM0wsR0FBRyxFQUFFcUUsV0FBVztRQUNoQmYsSUFBSSxFQUFFLE1BQU07UUFDWlMsS0FBSyxFQUFFRyxDQUFDO1FBQ1IwSSxVQUFVLEVBQUUrQztNQUNkLENBQUMsQ0FBQztJQUNKLENBQUMsRUFBRXBQLFFBQVEsQ0FBQztFQUNkO0VBQ0E7RUFDQSxJQUFJd0QsS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPQSxLQUFLLEtBQUssV0FBVyxFQUFFO0lBQ2xEeEQsUUFBUSxHQUFHc0wsZ0JBQWdCLENBQUN0TCxRQUFRLEVBQUU7TUFBQ1AsR0FBRyxFQUFFcUUsV0FBVztNQUFFZixJQUFJLEVBQUUsT0FBTztNQUFFUyxLQUFLLEVBQUxBO0lBQUssQ0FBQyxDQUFDO0VBQ2pGO0VBRUEsT0FBT3hELFFBQVE7QUFDakIsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTXFQLHlCQUF5QixHQUFHLFNBQTVCQSx5QkFBeUJBLENBQ3BDL1AsS0FBZSxFQUFBZ1EsS0FBQSxFQUVGO0VBQUEsSUFEWjVOLFFBQVEsR0FBQTROLEtBQUEsQ0FBUjVOLFFBQVE7SUFBRXFCLElBQUksR0FBQXVNLEtBQUEsQ0FBSnZNLElBQUk7SUFBRW9CLFNBQVMsR0FBQW1MLEtBQUEsQ0FBVG5MLFNBQVM7RUFFMUIsSUFBTW9MLFlBQVksR0FBRzdOLFFBQVEsQ0FBQy9HLE1BQU0sQ0FBQzhILFNBQVMsQ0FBQ00sSUFBSSxDQUFDO0VBQ3BELElBQU1oQixRQUFRLEdBQUdMLFFBQVEsQ0FBQ3lJLGtCQUFrQixDQUFDcEgsSUFBSSxFQUFFb0IsU0FBUyxDQUFDO0VBQzdELElBQU15RixZQUFZLEdBQUc3SCxRQUFRLENBQUNwSCxNQUFNLENBQUM4SCxTQUFTLENBQUNNLElBQUksQ0FBQztFQUNwRCxJQUFJd00sWUFBWSxLQUFLM0YsWUFBWSxFQUFFO0lBQ2pDLE9BQU9sSCwyQkFBMkIsQ0FBQ3BELEtBQUssRUFBRTtNQUN4Q29DLFFBQVEsRUFBUkEsUUFBUTtNQUNSa0ksWUFBWSxFQUFBNUUsZUFBQSxLQUNUakMsSUFBSSxFQUFHNkcsWUFBWTtJQUV4QixDQUFDLENBQUM7RUFDSjtFQUNBLE9BQUFsSyxhQUFBLENBQUFBLGFBQUEsS0FDS0osS0FBSztJQUNSM0MsTUFBTSxFQUFFMkMsS0FBSyxDQUFDM0MsTUFBTSxDQUFDZ0QsR0FBRyxDQUFDLFVBQUFpQyxDQUFDO01BQUEsT0FBS0EsQ0FBQyxDQUFDcEgsRUFBRSxLQUFLa0gsUUFBUSxDQUFDbEgsRUFBRSxHQUFHdUgsUUFBUSxHQUFHSCxDQUFDO0lBQUEsQ0FBQztFQUFDO0FBRXhFLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTTROLDRCQUE0QixHQUFHLFNBQS9CQSw0QkFBNEJBLENBQ3ZDbFEsS0FBZSxFQUNmOEIsTUFBMEQ7RUFBQSxPQUFBMUIsYUFBQSxDQUFBQSxhQUFBLEtBRXZESixLQUFLO0lBQ1J0QyxPQUFPLEVBQUVzQyxLQUFLLENBQUN0QyxPQUFPLENBQUMyQyxHQUFHLENBQUMsVUFBQ2dFLENBQUMsRUFBRTlELENBQUM7TUFBQSxPQUFNQSxDQUFDLEtBQUt1QixNQUFNLENBQUMzQixHQUFHLEdBQUFDLGFBQUEsQ0FBQUEsYUFBQSxLQUFPaUUsQ0FBQztRQUFFakksV0FBVyxFQUFFLENBQUNpSSxDQUFDLENBQUNqSTtNQUFXLEtBQUlpSSxDQUFDO0lBQUEsQ0FBQztFQUFDO0FBQUEsQ0FDbEc7QUFFRixPQUFPLFNBQVM4TCx1QkFBdUJBLENBQUM5VSxNQUErQyxFQUFXO0VBQ2hHLE9BQU8sUUFBUSxJQUFJQSxNQUFNLElBQUksaUJBQWlCLElBQUlBLE1BQU07QUFDMUQ7QUFFQSxPQUFPLFNBQVMrVSx5QkFBeUJBLENBQ3ZDcFEsS0FBZSxFQUNmOEIsTUFBdUQsRUFDN0M7RUFDVixJQUFPekcsTUFBTSxHQUFJeUcsTUFBTSxDQUFoQnpHLE1BQU07RUFDYixJQUFJOFUsdUJBQXVCLENBQUM5VSxNQUFNLENBQUMsRUFBRTtJQUNuQztJQUNBO0lBQ0EsSUFBTThMLE1BQU0sR0FBR25ILEtBQUssQ0FBQ3RDLE9BQU8sQ0FBQzJFLElBQUksQ0FBQyxVQUFBZ0MsQ0FBQztNQUFBLE9BQUksQ0FBQ2hQLFlBQVksQ0FBQ2dQLENBQUMsQ0FBQztJQUFBLEVBQUM7SUFDeEQsSUFBSSxDQUFDOEMsTUFBTSxFQUFFO01BQ1gsT0FBT25ILEtBQUs7SUFDZDtJQUNBLElBQU1vTSxTQUFTLEdBQUFoTSxhQUFBLENBQUFBLGFBQUEsS0FBTytHLE1BQU0sR0FBSzlMLE1BQU0sQ0FBQztJQUN4QyxPQUFPbVIsd0JBQXdCLENBQUN4TSxLQUFLLEVBQUUxTSxpQkFBaUIsQ0FBQzZULE1BQU0sQ0FBQ2pNLEVBQUUsRUFBRWtSLFNBQVMsQ0FBQyxDQUFDO0VBQ2pGLENBQUMsTUFBTTtJQUNMLE9BQUFoTSxhQUFBLENBQUFBLGFBQUEsS0FDS0osS0FBSztNQUNSZixlQUFlLEVBQUFtQixhQUFBLENBQUFBLGFBQUEsS0FDVkosS0FBSyxDQUFDZixlQUFlLEdBQ3JCNUQsTUFBTTtJQUNWO0VBRUw7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTWdWLDJCQUEyQixHQUFHLFNBQTlCQSwyQkFBMkJBLENBQ3RDclEsS0FBZSxFQUVmOEIsTUFBeUQ7RUFBQSxPQUFBMUIsYUFBQSxDQUFBQSxhQUFBLEtBRXRESixLQUFLO0lBQ1JmLGVBQWUsRUFBQW1CLGFBQUEsQ0FBQUEsYUFBQSxLQUNWSixLQUFLLENBQUNmLGVBQWU7TUFDeEI3QyxXQUFXLEVBQUUsQ0FBQzRELEtBQUssQ0FBQ2YsZUFBZSxDQUFDN0M7SUFBVztFQUNoRDtBQUFBLENBQ0Q7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTWtVLGtDQUFrQyxHQUFHLFNBQXJDQSxrQ0FBa0NBLENBQUl0USxLQUFlO0VBQUEsT0FBQUksYUFBQSxDQUFBQSxhQUFBLEtBQzdESixLQUFLO0lBQ1JmLGVBQWUsRUFBQW1CLGFBQUEsQ0FBQUEsYUFBQSxLQUNWSixLQUFLLENBQUNmLGVBQWU7TUFDeEJ4QyxXQUFXLEVBQUUsQ0FBQ3VELEtBQUssQ0FBQ2YsZUFBZSxDQUFDeEM7SUFBVztFQUNoRDtBQUFBLENBQ0Q7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTThULGlDQUFpQyxHQUFHLFNBQXBDQSxpQ0FBaUNBLENBQzVDdlEsS0FBZSxFQUNmOEIsTUFBK0Q7RUFBQSxPQUFBMUIsYUFBQSxDQUFBQSxhQUFBLEtBRTVESixLQUFLO0lBQ1J0QyxPQUFPLEVBQUVzQyxLQUFLLENBQUN0QyxPQUFPLENBQUMyQyxHQUFHLENBQUMsVUFBQ2dFLENBQUMsRUFBRTlELENBQUM7TUFBQSxPQUFNQSxDQUFDLEtBQUt1QixNQUFNLENBQUMzQixHQUFHLEdBQUFDLGFBQUEsQ0FBQUEsYUFBQSxLQUFPaUUsQ0FBQztRQUFFbEksS0FBSyxFQUFFMkYsTUFBTSxDQUFDM0Y7TUFBSyxLQUFJa0ksQ0FBQztJQUFBLENBQUM7RUFBQztBQUFBLENBQzFGOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTW1NLGdDQUFnQyxHQUFHLFNBQW5DQSxnQ0FBZ0NBLENBQzNDeFEsS0FBZSxFQUFBeVEsS0FBQSxFQUVGO0VBQUEsSUFEWnRVLEtBQUssR0FBQXNVLEtBQUEsQ0FBTHRVLEtBQUs7RUFFTixPQUFBaUUsYUFBQSxDQUFBQSxhQUFBLEtBQ0tKLEtBQUs7SUFDUmYsZUFBZSxFQUFBbUIsYUFBQSxDQUFBQSxhQUFBLEtBQ1ZKLEtBQUssQ0FBQ2YsZUFBZTtNQUN4QjlDLEtBQUssRUFBTEE7SUFBSztFQUNOO0FBRUwsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNdVUsb0JBQW9CLEdBQUcsU0FBdkJBLG9CQUFvQkEsQ0FDL0IxUSxLQUFlLEVBQ2Y4QixNQUFrRCxFQUMvQztFQUNILElBQU93TCxJQUFJLEdBQVN4TCxNQUFNLENBQW5Cd0wsSUFBSTtJQUFFbk4sR0FBRyxHQUFJMkIsTUFBTSxDQUFiM0IsR0FBRztFQUNoQixJQUFNd1EsMkJBQTJCLEdBQUdyRCxJQUFJLEtBQUt0WCxpQkFBaUIsQ0FBQ3VYLFFBQVE7RUFDdkUsT0FBQW5OLGFBQUEsQ0FBQUEsYUFBQSxLQUNLSixLQUFLO0lBQ1J0QyxPQUFPLEVBQUVzQyxLQUFLLENBQUN0QyxPQUFPLENBQUMyQyxHQUFHLENBQUMsVUFBQ2dFLENBQUMsRUFBRTlELENBQUM7TUFBQSxPQUM5QkEsQ0FBQyxLQUFLSixHQUFHLEdBQUFDLGFBQUEsQ0FBQUEsYUFBQSxLQUVBaUUsQ0FBQztRQUNKaUosSUFBSSxFQUFKQTtNQUFJLEtBRU5xRCwyQkFBMkIsR0FBQXZRLGFBQUEsQ0FBQUEsYUFBQSxLQUV0QmlFLENBQUM7UUFDSmlKLElBQUksRUFBRXRYLGlCQUFpQixDQUFDd1g7TUFBSSxLQUU5Qm5KLENBQUM7SUFBQSxDQUNQO0VBQUM7QUFFTCxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNdU0sMEJBQTBCLEdBQUcsU0FBN0JBLDBCQUEwQkEsQ0FDckM1USxLQUFlLEVBQ2Y4QixNQUF3RCxFQUMzQztFQUNiLElBQU1xRixNQUFNLEdBQUduSCxLQUFLLENBQUN0QyxPQUFPLENBQUNvRSxNQUFNLENBQUMzQixHQUFHLENBQUM7RUFDeEMsSUFBTVMsU0FBUyxHQUFHcFAsR0FBRyxDQUFDMlYsTUFBTSxFQUFFLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQztFQUVuRSxJQUFJekcsUUFBUSxHQUFHc0wsZ0JBQWdCLENBQUNoTSxLQUFLLEVBQUU7SUFDckNHLEdBQUcsRUFBRTJCLE1BQU0sQ0FBQzNCLEdBQUc7SUFDZnNELElBQUksRUFBRSxTQUFTO0lBQ2ZTLEtBQUssRUFBRSxDQUFDdEQ7RUFDVixDQUFDLENBQUM7RUFFRkYsUUFBUSxHQUFHc0wsZ0JBQWdCLENBQUN0TCxRQUFRLEVBQUU7SUFDcENQLEdBQUcsRUFBRTJCLE1BQU0sQ0FBQzNCLEdBQUc7SUFDZnNELElBQUksRUFBRSxPQUFPO0lBQ2JTLEtBQUssRUFBRTdQLG9CQUFvQixDQUFDOFMsTUFBTSxDQUFDakQsS0FBSyxFQUFFaUQsTUFBTSxDQUFDak0sRUFBRSxFQUFFO01BQ25EMEYsU0FBUyxFQUFFLENBQUNBO0lBQ2QsQ0FBQztFQUNILENBQUMsQ0FBQztFQUVGLE9BQU9GLFFBQVE7QUFDakIsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNbVEsbUJBQW1CLEdBQUcsU0FBdEJBLG1CQUFtQkEsQ0FDOUI3USxLQUFlLEVBQ2Y4QixNQUFpRCxFQUNwQztFQUNiLElBQU8zQixHQUFHLEdBQUkyQixNQUFNLENBQWIzQixHQUFHO0VBQ1YsSUFBQTJRLGtCQUFBLEdBQXFCOVEsS0FBSyxDQUFDdEMsT0FBTyxDQUFDeUMsR0FBRyxDQUFDO0lBQWhDcUMsTUFBTSxHQUFBc08sa0JBQUEsQ0FBTnRPLE1BQU07SUFBRXRILEVBQUUsR0FBQTRWLGtCQUFBLENBQUY1VixFQUFFO0VBRWpCLElBQU02VixVQUFVLE1BQUF2SixNQUFBLENBQUFDLGtCQUFBLENBQ1h6SCxLQUFLLENBQUN0QyxPQUFPLENBQUNvSixLQUFLLENBQUMsQ0FBQyxFQUFFM0csR0FBRyxDQUFDLEdBQUFzSCxrQkFBQSxDQUMzQnpILEtBQUssQ0FBQ3RDLE9BQU8sQ0FBQ29KLEtBQUssQ0FBQzNHLEdBQUcsR0FBRyxDQUFDLEVBQUVILEtBQUssQ0FBQ3RDLE9BQU8sQ0FBQ2lELE1BQU0sQ0FBQyxFQUN0RDtFQUVELElBQU04TSxnQkFBZ0IsR0FBRzVaLHNCQUFzQixDQUFDMk8sTUFBTSxFQUFFeEMsS0FBSyxDQUFDcEMsUUFBUSxFQUFFbVQsVUFBVSxFQUFFL1EsS0FBSyxDQUFDM0MsTUFBTSxDQUFDO0VBQ2pHLElBQU0yVCxTQUFTLEdBQ2J2YyxvQkFBb0IsQ0FBQ3VMLEtBQUssQ0FBQ2QsTUFBTSxDQUFDbkMsZUFBZSxDQUFDLEtBQUs3QixFQUFFLEdBQUFrRixhQUFBLENBQUFBLGFBQUEsS0FFaERKLEtBQUssQ0FBQ2QsTUFBTTtJQUNmbkMsZUFBZSxFQUFFO0VBQUksS0FFdkJpRCxLQUFLLENBQUNkLE1BQU07RUFFbEIsSUFBSXdCLFFBQVEsR0FBR3pMLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFOGIsVUFBVSxFQUFFL1EsS0FBSyxDQUFDO0VBQ2xEVSxRQUFRLEdBQUd6TCxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRXdZLGdCQUFnQixFQUFFL00sUUFBUSxDQUFDO0VBQ3hEQSxRQUFRLEdBQUd6TCxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRStiLFNBQVMsRUFBRXRRLFFBQVEsQ0FBQztFQUUvQyxPQUFPaU4sd0JBQXdCLENBQUNqTixRQUFRLEVBQUU4QixNQUFNLEVBQUUxRSxTQUFTLENBQUM7QUFDOUQsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNbVQsZUFBZSxHQUFHLFNBQWxCQSxlQUFlQSxDQUMxQmpSLEtBQWUsRUFDZjhCLE1BQTZDLEVBQ2hDO0VBQ2IsSUFBSVcsUUFBUTtFQUNaLElBQUl5TyxZQUFZO0VBQ2hCLElBQUlwUCxNQUFNLENBQUN6RyxNQUFNLEVBQUU7SUFDakJvSCxRQUFRLEdBQUd4SyxxQkFBcUIsQ0FBQytILEtBQUssRUFBRThCLE1BQU0sQ0FBQ3pHLE1BQU0sQ0FBQztJQUN0RCxJQUFJLENBQUNvSCxRQUFRLEVBQUU7TUFDYm5SLE9BQU8sQ0FBQzZmLElBQUksQ0FDViw2RkFBNkYsRUFDN0ZyUCxNQUFNLENBQUN6RyxNQUNULENBQUM7TUFDRCxPQUFPMkUsS0FBSztJQUNkO0lBRUEsSUFBTXFKLE1BQU0sR0FBR3JRLGtCQUFrQixDQUFDeUosUUFBUSxFQUFFekMsS0FBSyxDQUFDO0lBQ2xEeUMsUUFBUSxHQUFHNEcsTUFBTSxDQUFDbkosS0FBSztJQUN2QmdSLFlBQVksR0FBRzdILE1BQU0sQ0FBQy9MLFNBQVM7RUFDakMsQ0FBQyxNQUFNO0lBQUEsSUFBQThULGlCQUFBO0lBQ0w7SUFDQSxJQUFNQyxjQUFjLElBQUFELGlCQUFBLEdBQUd0UCxNQUFNLENBQUMyTSxTQUFTLGNBQUEyQyxpQkFBQSxjQUFBQSxpQkFBQSxHQUFJL1AsTUFBTSxDQUFDQyxJQUFJLENBQUN0QixLQUFLLENBQUNwQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekU2RSxRQUFRLEdBQUcsSUFBSXJMLEtBQUssQ0FBQztNQUNuQndKLFNBQVMsRUFBRSxJQUFJO01BQ2ZxSSxjQUFjLEVBQUUsSUFBSTtNQUNwQnpHLE1BQU0sRUFBRTZPO0lBQ1YsQ0FBQyxDQUFDO0lBQ0ZILFlBQVksR0FBRyxDQUFDLENBQUM7RUFDbkI7RUFFQSxJQUFJeFEsUUFBUSxHQUFBTixhQUFBLENBQUFBLGFBQUEsS0FDUEosS0FBSztJQUNSM0MsTUFBTSxLQUFBbUssTUFBQSxDQUFBQyxrQkFBQSxDQUFNekgsS0FBSyxDQUFDM0MsTUFBTSxJQUFFb0YsUUFBUSxFQUFDO0lBQ25DbkYsU0FBUyxLQUFBa0ssTUFBQSxDQUFBQyxrQkFBQSxDQUFNekgsS0FBSyxDQUFDMUMsU0FBUyxJQUFFNFQsWUFBWSxFQUFDO0lBQzdDO0lBQ0ExVCxVQUFVLEdBQUdpRixRQUFRLENBQUN2SCxFQUFFLEVBQUFzTSxNQUFBLENBQUFDLGtCQUFBLENBQUt6SCxLQUFLLENBQUN4QyxVQUFVLEVBQUM7SUFDOUNxQixTQUFTLEVBQUVuTCxzQkFBc0IsQ0FBQ3NNLEtBQUssQ0FBQ25CLFNBQVMsRUFBRTRELFFBQVE7RUFBQyxFQUM3RDtFQUVELElBQUlBLFFBQVEsQ0FBQ3BILE1BQU0sQ0FBQ3dGLFNBQVMsQ0FBQ3pGLE9BQU8sRUFBRTtJQUNyQ3NGLFFBQVEsR0FBR0kscUJBQXFCLENBQUNKLFFBQVEsQ0FBQztFQUM1QztFQUVBLE9BQU9BLFFBQVE7QUFDakIsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTNFEsa0JBQWtCQSxDQUNoQ3RSLEtBQVEsRUFBQXVSLEtBQUEsRUFFTDtFQUFBLElBREZyVyxFQUFFLEdBQUFxVyxLQUFBLENBQUZyVyxFQUFFO0VBRUgsSUFBTWlGLEdBQUcsR0FBR3FSLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDdlcsRUFBRSxDQUFDO0VBQzNCO0VBQ0FzVyxNQUFNLENBQUN0VyxFQUFFLENBQUMsR0FDVjhFLEtBQUssQ0FBQzNDLE1BQU0sQ0FBQ3dGLFNBQVMsQ0FBQyxVQUFBUCxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDcEgsRUFBRSxLQUFLQSxFQUFFO0VBQUEsRUFBQztFQUM1QyxJQUFJaUYsR0FBRyxHQUFHLENBQUMsSUFBSUEsR0FBRyxJQUFJSCxLQUFLLENBQUMzQyxNQUFNLENBQUNzRCxNQUFNLEVBQUU7SUFDekM7SUFDQXJQLE9BQU8sQ0FBQzZmLElBQUksNkNBQUEzSixNQUFBLENBQTZDdE0sRUFBRSxDQUFFLENBQUM7SUFDOUQsT0FBTzhFLEtBQUs7RUFDZDtFQUVBLElBQU8zQyxNQUFNLEdBQStDMkMsS0FBSyxDQUExRDNDLE1BQU07SUFBRUMsU0FBUyxHQUFvQzBDLEtBQUssQ0FBbEQxQyxTQUFTO0lBQUVFLFVBQVUsR0FBd0J3QyxLQUFLLENBQXZDeEMsVUFBVTtJQUFFa0IsT0FBTyxHQUFlc0IsS0FBSyxDQUEzQnRCLE9BQU87SUFBRUQsU0FBUyxHQUFJdUIsS0FBSyxDQUFsQnZCLFNBQVM7RUFDeEQsSUFBTWlULGFBQWEsR0FBR3JVLE1BQU0sQ0FBQzhDLEdBQUcsQ0FBQztFQUNqQyxJQUFNTyxRQUFRLEdBQUFOLGFBQUEsQ0FBQUEsYUFBQSxLQUNUSixLQUFLO0lBQ1IzQyxNQUFNLEVBQUU3RixhQUFhLENBQUNrYSxhQUFhLENBQUN4VyxFQUFFLENBQUMsQ0FBQ21DLE1BQU0sQ0FBQztJQUMvQ0MsU0FBUyxFQUFFMUYsb0JBQW9CLENBQUN1SSxHQUFHLENBQUMsQ0FBQzdDLFNBQVMsQ0FBQztJQUMvQ0UsVUFBVSxFQUFFbEUsMkJBQTJCLENBQUNrRSxVQUFVLEVBQUVrVSxhQUFhLENBQUN4VyxFQUFFLENBQUM7SUFDckV3RCxPQUFPLEVBQUVnVCxhQUFhLENBQUMzSCxjQUFjLENBQUNyTCxPQUFPLENBQUMsR0FBR1osU0FBUyxHQUFHWSxPQUFPO0lBQ3BFRCxTQUFTLEVBQUVpVCxhQUFhLENBQUMzSCxjQUFjLENBQUN0TCxTQUFTLENBQUMsR0FBR1gsU0FBUyxHQUFHVyxTQUFTO0lBQzFFSSxTQUFTLEVBQUU3Six3QkFBd0IsQ0FBQ2dMLEtBQUssQ0FBQ25CLFNBQVMsRUFBRTZTLGFBQWE7SUFDbEU7RUFBQSxFQUNEO0VBRUQsT0FBTzVRLHFCQUFxQixDQUFDSixRQUFRLENBQUM7QUFDeEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTWlSLG1CQUFtQixHQUFHLFNBQXRCQSxtQkFBbUJBLENBQzlCM1IsS0FBZSxFQUFBNFIsS0FBQTtFQUFBLElBQ2RDLEtBQUssR0FBQUQsS0FBQSxDQUFMQyxLQUFLO0VBQUEsT0FBQXpSLGFBQUEsQ0FBQUEsYUFBQSxLQUVISixLQUFLO0lBQ1J4QyxVQUFVLEVBQUVxVTtFQUFLO0FBQUEsQ0FDakI7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTUMsb0JBQW9CLEdBQUcsU0FBdkJBLG9CQUFvQkEsQ0FDL0I5UixLQUFlLEVBQ2Y4QixNQUFrRCxFQUNyQztFQUNiLElBQU1pUSxVQUFVLEdBQUczWSxnQkFBZ0IsQ0FBQzBJLE1BQU0sQ0FBQztFQUMzQyxJQUFJa1EsYUFBYSxHQUFBdkssa0JBQUEsQ0FBT3pILEtBQUssQ0FBQ3hDLFVBQVUsQ0FBQztFQUV6QyxJQUFJc0UsTUFBTSxDQUFDdEUsVUFBVSxFQUFFO0lBQ3JCc0UsTUFBTSxDQUFDdEUsVUFBVSxDQUFDK0QsT0FBTyxDQUFDLFVBQUFzRSxPQUFPLEVBQUk7TUFDbkNtTSxhQUFhLEdBQUcxWSwyQkFBMkIsQ0FBQzBZLGFBQWEsRUFBRW5NLE9BQWlCLENBQUM7SUFDL0UsQ0FBQyxDQUFDO0VBQ0o7RUFFQSxPQUFBekYsYUFBQSxDQUFBQSxhQUFBLEtBQ0tKLEtBQUs7SUFDUnhDLFVBQVUsRUFBRW5FLDJCQUEyQixDQUFDMlksYUFBYSxFQUFFRCxVQUFVO0VBQUM7QUFFdEUsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNRSx1QkFBdUIsR0FBRyxTQUExQkEsdUJBQXVCQSxDQUNsQ2pTLEtBQWUsRUFDZjhCLE1BQXFELEVBQ3hDO0VBQ2IsSUFBTzVHLEVBQUUsR0FBSTRHLE1BQU0sQ0FBWjVHLEVBQUU7RUFDVCxJQUFNZ1gsa0JBQWtCLEdBQUczWSwyQkFBMkIsQ0FBQ3lHLEtBQUssQ0FBQ3hDLFVBQVUsRUFBRXRDLEVBQUUsQ0FBQztFQUM1RSxJQUFJLENBQUNnWCxrQkFBa0IsRUFBRTtJQUN2QixPQUFPbFMsS0FBSztFQUNkO0VBRUEsSUFBTW1TLGdCQUFnQixHQUFHeFksaUJBQWlCLENBQUN1WSxrQkFBa0IsQ0FBQzFVLFVBQVUsQ0FBQztFQUN6RSxJQUFJa0QsUUFBUSxHQUFBTixhQUFBLEtBQU9KLEtBQUssQ0FBQztFQUV6Qm1TLGdCQUFnQixDQUFDNVEsT0FBTyxDQUFDLFVBQUFzRSxPQUFPLEVBQUk7SUFDbEMsSUFBTTFGLEdBQUcsR0FBR08sUUFBUSxDQUFDckQsTUFBTSxDQUFDd0YsU0FBUyxDQUFDLFVBQUFQLENBQUM7TUFBQSxPQUFJQSxDQUFDLENBQUNwSCxFQUFFLEtBQUsySyxPQUFPO0lBQUEsRUFBQztJQUM1RCxJQUFJMUYsR0FBRyxJQUFJLENBQUMsRUFBRTtNQUNaTyxRQUFRLEdBQUc0USxrQkFBa0IsQ0FBQzVRLFFBQVEsRUFBRTtRQUFDeEYsRUFBRSxFQUFFMks7TUFBTyxDQUFDLENBQUM7SUFDeEQ7RUFDRixDQUFDLENBQUM7RUFFRixJQUFNbU0sYUFBYSxHQUFHMVksMkJBQTJCLENBQUNvSCxRQUFRLENBQUNsRCxVQUFVLEVBQUUwVSxrQkFBa0IsQ0FBQztFQUMxRixPQUFBOVIsYUFBQSxDQUFBQSxhQUFBLEtBQ0tNLFFBQVE7SUFDWGxELFVBQVUsRUFBRXdVO0VBQWE7QUFFN0IsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNSSx1QkFBdUIsR0FBRyxTQUExQkEsdUJBQXVCQSxDQUNsQ3BTLEtBQWUsRUFDZjhCLE1BQXFELEVBQ3hDO0VBQ2IsSUFBTzVHLEVBQUUsR0FBYTRHLE1BQU0sQ0FBckI1RyxFQUFFO0lBQUVtWCxPQUFPLEdBQUl2USxNQUFNLENBQWpCdVEsT0FBTztFQUNsQixJQUFNTixVQUFVLEdBQUd4WSwyQkFBMkIsQ0FBQ3lHLEtBQUssQ0FBQ3hDLFVBQVUsRUFBRXRDLEVBQUUsQ0FBQztFQUNwRSxJQUFJLENBQUM2VyxVQUFVLEVBQUU7SUFDZixPQUFPL1IsS0FBSztFQUNkO0VBRUEsSUFBSVUsUUFBUSxHQUFBTixhQUFBLEtBQU9KLEtBQUssQ0FBQztFQUV6QixJQUFJcVMsT0FBTyxDQUFDN1UsVUFBVSxFQUFFO0lBQ3RCa0QsUUFBUSxDQUFDbEQsVUFBVSxNQUFBZ0ssTUFBQSxDQUFBQyxrQkFBQSxDQUFPc0ssVUFBVSxDQUFDdlUsVUFBVSxHQUFBaUssa0JBQUEsQ0FBSy9HLFFBQVEsQ0FBQ2xELFVBQVUsRUFBQztJQUN4RTZVLE9BQU8sQ0FBQzdVLFVBQVUsQ0FBQytELE9BQU8sQ0FBQyxVQUFBc0UsT0FBTyxFQUFJO01BQ3BDbkYsUUFBUSxDQUFDbEQsVUFBVSxHQUFHbEUsMkJBQTJCLENBQy9Db0gsUUFBUSxDQUFDbEQsVUFBVSxFQUNuQnFJLE9BQ0YsQ0FBQztJQUNILENBQUMsQ0FBQztFQUNKO0VBRUEsSUFBTXlNLGFBQWEsR0FBQWxTLGFBQUEsQ0FBQUEsYUFBQSxLQUNkMlIsVUFBVSxHQUNWTSxPQUFPLENBQ1g7RUFFRCxJQUFJQyxhQUFhLENBQUMxUixTQUFTLEtBQUttUixVQUFVLENBQUNuUixTQUFTLEVBQUU7SUFDcEQsSUFBTTJSLFFBQVEsR0FBRzVZLGlCQUFpQixDQUFDMlksYUFBYSxDQUFDOVUsVUFBVSxDQUFDO0lBQzVEa0QsUUFBUSxHQUFHQSxRQUFRLENBQUNyRCxNQUFNLENBQUN3TyxNQUFNLENBQUMsVUFBQzJHLEdBQUcsRUFBRXRTLEtBQUssRUFBSztNQUNoRCxJQUFJcVMsUUFBUSxDQUFDbEwsUUFBUSxDQUFDbkgsS0FBSyxDQUFDaEYsRUFBRSxDQUFDLEVBQUU7UUFDL0IsT0FBT29KLHdCQUF3QixDQUFDa08sR0FBRyxFQUFFO1VBQ25DcFEsUUFBUSxFQUFFbEMsS0FBSztVQUNmMkUsU0FBUyxFQUFFO1lBQUNqRSxTQUFTLEVBQUUwUixhQUFhLENBQUMxUjtVQUFTO1FBQ2hELENBQUMsQ0FBQztNQUNKO01BQ0EsT0FBTzRSLEdBQUc7SUFDWixDQUFDLEVBQUU5UixRQUFRLENBQUM7RUFDZDtFQUVBLElBQU1zUixhQUFhLEdBQUd0WSw0QkFBNEIsQ0FBQ2dILFFBQVEsQ0FBQ2xELFVBQVUsRUFBRThVLGFBQWEsQ0FBQztFQUN0RixPQUFBbFMsYUFBQSxDQUFBQSxhQUFBLEtBQ0tNLFFBQVE7SUFDWGxELFVBQVUsRUFBRXdVO0VBQWE7QUFFN0IsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNUywyQkFBMkIsR0FBRyxTQUE5QkEsMkJBQTJCQSxDQUN0Q3pTLEtBQWUsRUFDZjhCLE1BQXlELEVBQzVDO0VBQ2IsSUFBTzRRLFlBQVksR0FBYTVRLE1BQU0sQ0FBL0I0USxZQUFZO0lBQUU3TSxPQUFPLEdBQUkvRCxNQUFNLENBQWpCK0QsT0FBTztFQUM1QixJQUFNa00sVUFBVSxHQUFHeFksMkJBQTJCLENBQUN5RyxLQUFLLENBQUN4QyxVQUFVLEVBQUVrVixZQUFZLENBQUM7RUFDOUUsSUFBTXhTLEtBQUssR0FBR0YsS0FBSyxDQUFDM0MsTUFBTSxDQUFDZ0YsSUFBSSxDQUFDLFVBQUFDLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUNwSCxFQUFFLEtBQUsySyxPQUFPO0VBQUEsRUFBQztFQUN0RCxJQUFJLENBQUNrTSxVQUFVLElBQUksQ0FBQzdSLEtBQUssRUFBRTtJQUN6QixPQUFPRixLQUFLO0VBQ2Q7RUFFQSxJQUFJK1IsVUFBVSxDQUFDdlUsVUFBVSxDQUFDNkUsSUFBSSxDQUFDLFVBQUFzUSxLQUFLO0lBQUEsT0FBSUEsS0FBSyxLQUFLOU0sT0FBTztFQUFBLEVBQUMsRUFBRTtJQUMxRCxPQUFPN0YsS0FBSztFQUNkO0VBRUEsSUFBTTRTLGtCQUFrQixHQUFHdlosMkJBQTJCLENBQUMwWSxVQUFVLENBQUN2VSxVQUFVLEVBQUVxSSxPQUFPLENBQUM7RUFDdEYsT0FBT3VNLHVCQUF1QixDQUFDcFMsS0FBSyxFQUFFO0lBQ3BDOUUsRUFBRSxFQUFFd1gsWUFBWTtJQUNoQkwsT0FBTyxFQUFFO01BQUM3VSxVQUFVLEVBQUVvVjtJQUFrQjtFQUMxQyxDQUFDLENBQUM7QUFDSixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU1DLGdDQUFnQyxHQUFHLFNBQW5DQSxnQ0FBZ0NBLENBQzNDN1MsS0FBZSxFQUNmOEIsTUFBOEQsRUFDakQ7RUFDYixJQUFPNFEsWUFBWSxHQUFhNVEsTUFBTSxDQUEvQjRRLFlBQVk7SUFBRTdNLE9BQU8sR0FBSS9ELE1BQU0sQ0FBakIrRCxPQUFPO0VBQzVCLElBQU1rTSxVQUFVLEdBQUd4WSwyQkFBMkIsQ0FBQ3lHLEtBQUssQ0FBQ3hDLFVBQVUsRUFBRWtWLFlBQVksQ0FBQztFQUM5RSxJQUFJLENBQUNYLFVBQVUsRUFBRTtJQUNmLE9BQU8vUixLQUFLO0VBQ2Q7RUFFQSxJQUFNOFMsa0JBQWtCLEdBQUd4WiwyQkFBMkIsQ0FBQ3lZLFVBQVUsQ0FBQ3ZVLFVBQVUsRUFBRXFJLE9BQU8sQ0FBQztFQUN0RixPQUFPdU0sdUJBQXVCLENBQUNwUyxLQUFLLEVBQUU7SUFDcEM5RSxFQUFFLEVBQUV3WCxZQUFZO0lBQ2hCTCxPQUFPLEVBQUU7TUFBQzdVLFVBQVUsRUFBRXNWO0lBQWtCO0VBQzFDLENBQUMsQ0FBQztBQUNKLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNQyw0QkFBNEIsR0FBRyxTQUEvQkEsNEJBQTRCQSxDQUN2Qy9TLEtBQWUsRUFDZjhCLE1BQTBELEVBQzdDO0VBQ2IsSUFBT2tSLGFBQWEsR0FBcUVsUixNQUFNLENBQXhGa1IsYUFBYTtJQUFFQyxrQkFBa0IsR0FBaURuUixNQUFNLENBQXpFbVIsa0JBQWtCO0lBQUVDLGtCQUFrQixHQUE2QnBSLE1BQU0sQ0FBckRvUixrQkFBa0I7SUFBRUMsdUJBQXVCLEdBQUlyUixNQUFNLENBQWpDcVIsdUJBQXVCO0VBRXJGLElBQUksQ0FBQ0Qsa0JBQWtCLElBQUksQ0FBQ0MsdUJBQXVCLEVBQUU7SUFDbkQsSUFBTUMsV0FBVyxHQUFHcFQsS0FBSyxDQUFDeEMsVUFBVSxDQUFDcUYsU0FBUyxDQUFDLFVBQUE4UCxLQUFLO01BQUEsT0FDbEQsT0FBT0EsS0FBSyxLQUFLLFFBQVEsR0FBR0EsS0FBSyxLQUFLSyxhQUFhLEdBQUdMLEtBQUssQ0FBQ3pYLEVBQUUsS0FBSzhYLGFBQWE7SUFBQSxDQUNsRixDQUFDO0lBQ0QsSUFBSUMsa0JBQWtCLElBQUlHLFdBQVcsS0FBSyxDQUFDLENBQUMsRUFBRTtNQUM1QyxJQUFNQyxnQkFBZ0IsR0FBR3JULEtBQUssQ0FBQ3hDLFVBQVUsQ0FBQ3FGLFNBQVMsQ0FBQyxVQUFBOFAsS0FBSztRQUFBLE9BQ3ZELE9BQU9BLEtBQUssS0FBSyxRQUFRLEdBQUdBLEtBQUssS0FBS00sa0JBQWtCLEdBQUdOLEtBQUssQ0FBQ3pYLEVBQUUsS0FBSytYLGtCQUFrQjtNQUFBLENBQzVGLENBQUM7TUFDRCxJQUFJSSxnQkFBZ0IsS0FBSyxDQUFDLENBQUMsRUFBRTtRQUMzQixJQUFNckIsYUFBYSxHQUFHdmMsU0FBUyxDQUFDdUssS0FBSyxDQUFDeEMsVUFBVSxFQUFFNFYsV0FBVyxFQUFFQyxnQkFBZ0IsQ0FBQztRQUNoRixPQUFBalQsYUFBQSxDQUFBQSxhQUFBLEtBQVdKLEtBQUs7VUFBRXhDLFVBQVUsRUFBRXdVO1FBQWE7TUFDN0M7SUFDRjtFQUNGO0VBRUEsSUFBSWtCLGtCQUFrQixJQUFJLENBQUNDLHVCQUF1QixFQUFFO0lBQ2xELElBQUluQixjQUFhLEdBQUcxWSwyQkFBMkIsQ0FBQzBHLEtBQUssQ0FBQ3hDLFVBQVUsRUFBRXdWLGFBQWEsQ0FBQztJQUNoRixJQUFJQyxrQkFBa0IsRUFBRTtNQUN0QixJQUFNSSxpQkFBZ0IsR0FBR3JCLGNBQWEsQ0FBQ25QLFNBQVMsQ0FBQyxVQUFBOFAsS0FBSztRQUFBLE9BQ3BELE9BQU9BLEtBQUssS0FBSyxRQUFRLEdBQUdBLEtBQUssS0FBS00sa0JBQWtCLEdBQUcsS0FBSztNQUFBLENBQ2xFLENBQUM7TUFDRGpCLGNBQWEsQ0FBQ3BLLE1BQU0sQ0FBQ3lMLGlCQUFnQixLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBR0EsaUJBQWdCLEVBQUUsQ0FBQyxFQUFFTCxhQUFhLENBQUM7SUFDeEYsQ0FBQyxNQUFNO01BQ0xoQixjQUFhLE1BQUF4SyxNQUFBLENBQUFDLGtCQUFBLENBQU91SyxjQUFhLElBQUVnQixhQUFhLEVBQUM7SUFDbkQ7SUFDQSxPQUFBNVMsYUFBQSxDQUFBQSxhQUFBLEtBQVdKLEtBQUs7TUFBRXhDLFVBQVUsRUFBRXdVO0lBQWE7RUFDN0M7RUFFQSxJQUFJa0Isa0JBQWtCLElBQUlDLHVCQUF1QixFQUFFO0lBQ2pELElBQUlELGtCQUFrQixLQUFLQyx1QkFBdUIsRUFBRTtNQUNsRCxJQUFNcEIsVUFBVSxHQUFHeFksMkJBQTJCLENBQUN5RyxLQUFLLENBQUN4QyxVQUFVLEVBQUUwVixrQkFBa0IsQ0FBQztNQUNwRixJQUFJLENBQUNuQixVQUFVLEVBQUUsT0FBTy9SLEtBQUs7TUFDN0IsSUFBTW9ULFlBQVcsR0FBR3JCLFVBQVUsQ0FBQ3ZVLFVBQVUsQ0FBQ3FGLFNBQVMsQ0FBQyxVQUFBOFAsS0FBSztRQUFBLE9BQ3ZELE9BQU9BLEtBQUssS0FBSyxRQUFRLEdBQUdBLEtBQUssS0FBS0ssYUFBYSxHQUFHTCxLQUFLLENBQUN6WCxFQUFFLEtBQUs4WCxhQUFhO01BQUEsQ0FDbEYsQ0FBQztNQUNELElBQUlJLFlBQVcsS0FBSyxDQUFDLENBQUMsRUFBRSxPQUFPcFQsS0FBSztNQUNwQyxJQUFJaVQsa0JBQWtCLEVBQUU7UUFDdEIsSUFBTUssU0FBUyxHQUFHdkIsVUFBVSxDQUFDdlUsVUFBVSxDQUFDcUYsU0FBUyxDQUFDLFVBQUE4UCxLQUFLO1VBQUEsT0FDckQsT0FBT0EsS0FBSyxLQUFLLFFBQVEsR0FBR0EsS0FBSyxLQUFLTSxrQkFBa0IsR0FBR04sS0FBSyxDQUFDelgsRUFBRSxLQUFLK1gsa0JBQWtCO1FBQUEsQ0FDNUYsQ0FBQztRQUNELElBQUlLLFNBQVMsS0FBSyxDQUFDLENBQUMsRUFBRSxPQUFPdFQsS0FBSztRQUNsQyxJQUFNNFMsa0JBQWtCLEdBQUduZCxTQUFTLENBQUNzYyxVQUFVLENBQUN2VSxVQUFVLEVBQUU0VixZQUFXLEVBQUVFLFNBQVMsQ0FBQztRQUNuRixJQUFNdEIsZUFBYSxHQUFHdFksNEJBQTRCLENBQUNzRyxLQUFLLENBQUN4QyxVQUFVLEVBQUE0QyxhQUFBLENBQUFBLGFBQUEsS0FDOUQyUixVQUFVO1VBQ2J2VSxVQUFVLEVBQUVvVjtRQUFrQixFQUMvQixDQUFDO1FBQ0YsT0FBQXhTLGFBQUEsQ0FBQUEsYUFBQSxLQUFXSixLQUFLO1VBQUV4QyxVQUFVLEVBQUV3VTtRQUFhO01BQzdDO01BQ0EsT0FBT2hTLEtBQUs7SUFDZDs7SUFFQTtJQUNBLElBQU14QyxVQUFVLEdBQUdsRSwyQkFBMkIsQ0FBQzBHLEtBQUssQ0FBQ3hDLFVBQVUsRUFBRXdWLGFBQWEsQ0FBQztJQUMvRSxJQUFJdFMsUUFBUSxHQUFHK1IsMkJBQTJCLENBQUFyUyxhQUFBLENBQUFBLGFBQUEsS0FDcENKLEtBQUs7TUFBRXhDLFVBQVUsRUFBVkE7SUFBVSxJQUNyQjtNQUFDcUksT0FBTyxFQUFFbU4sYUFBYTtNQUFFTixZQUFZLEVBQUVTO0lBQXVCLENBQ2hFLENBQUM7SUFFRCxJQUFJRixrQkFBa0IsRUFBRTtNQUN0QixJQUFNbEIsV0FBVSxHQUFHeFksMkJBQTJCLENBQUNtSCxRQUFRLENBQUNsRCxVQUFVLEVBQUUyVix1QkFBdUIsQ0FBQztNQUM1RixJQUFJLENBQUNwQixXQUFVLEVBQUUsT0FBTy9SLEtBQUs7TUFDN0IsSUFBTW9ULGFBQVcsR0FBR3JCLFdBQVUsQ0FBQ3ZVLFVBQVUsQ0FBQ3FGLFNBQVMsQ0FBQyxVQUFBOFAsS0FBSztRQUFBLE9BQUlBLEtBQUssS0FBS0ssYUFBYTtNQUFBLEVBQUM7TUFDckYsSUFBTU0sVUFBUyxHQUFHdkIsV0FBVSxDQUFDdlUsVUFBVSxDQUFDcUYsU0FBUyxDQUFDLFVBQUE4UCxLQUFLO1FBQUEsT0FBSUEsS0FBSyxLQUFLTSxrQkFBa0I7TUFBQSxFQUFDO01BQ3hGLElBQUlHLGFBQVcsS0FBSyxDQUFDLENBQUMsSUFBSUUsVUFBUyxLQUFLLENBQUMsQ0FBQyxFQUFFO1FBQzFDLElBQU1WLG1CQUFrQixHQUFHbmQsU0FBUyxDQUFDc2MsV0FBVSxDQUFDdlUsVUFBVSxFQUFFNFYsYUFBVyxFQUFFRSxVQUFTLENBQUM7UUFDbkY1UyxRQUFRLEdBQUFOLGFBQUEsQ0FBQUEsYUFBQSxLQUNITSxRQUFRO1VBQ1hsRCxVQUFVLEVBQUU5RCw0QkFBNEIsQ0FBQ2dILFFBQVEsQ0FBQ2xELFVBQVUsRUFBQTRDLGFBQUEsQ0FBQUEsYUFBQSxLQUN2RDJSLFdBQVU7WUFDYnZVLFVBQVUsRUFBRW9WO1VBQWtCLEVBQy9CO1FBQUMsRUFDSDtNQUNIO0lBQ0Y7SUFDQSxPQUFPbFMsUUFBUTtFQUNqQjtFQUVBLElBQUksQ0FBQ3dTLGtCQUFrQixJQUFJQyx1QkFBdUIsRUFBRTtJQUNsRCxJQUFNM1YsV0FBVSxHQUFHbEUsMkJBQTJCLENBQUMwRyxLQUFLLENBQUN4QyxVQUFVLEVBQUV3VixhQUFhLENBQUM7SUFDL0UsT0FBT1AsMkJBQTJCLENBQUFyUyxhQUFBLENBQUFBLGFBQUEsS0FDNUJKLEtBQUs7TUFBRXhDLFVBQVUsRUFBVkE7SUFBVSxJQUNyQjtNQUFDcUksT0FBTyxFQUFFbU4sYUFBYTtNQUFFTixZQUFZLEVBQUVTO0lBQXVCLENBQ2hFLENBQUM7RUFDSDtFQUVBLE9BQU9uVCxLQUFLO0FBQ2QsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNdVQscUJBQXFCLEdBQUcsU0FBeEJBLHFCQUFxQkEsQ0FDaEN2VCxLQUFlLEVBQUF3VCxLQUFBLEVBRUY7RUFBQSxJQURadFksRUFBRSxHQUFBc1ksS0FBQSxDQUFGdFksRUFBRTtFQUVILElBQU1pRixHQUFHLEdBQUdxUixNQUFNLENBQUNDLFFBQVEsQ0FBQ3ZXLEVBQUUsQ0FBQztFQUMzQjtFQUNBc1csTUFBTSxDQUFDdFcsRUFBRSxDQUFDLEdBQ1Y4RSxLQUFLLENBQUMzQyxNQUFNLENBQUN3RixTQUFTLENBQUMsVUFBQVAsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ3BILEVBQUUsS0FBS0EsRUFBRTtFQUFBLEVBQUM7RUFDNUMsSUFBSWlGLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQ0gsS0FBSyxDQUFDM0MsTUFBTSxDQUFDOEMsR0FBRyxDQUFDLEVBQUU7SUFDakM3TyxPQUFPLENBQUM2ZixJQUFJLFVBQUEzSixNQUFBLENBQVVySCxHQUFHLDZCQUEwQixDQUFDO0lBQ3BELE9BQU9ILEtBQUs7RUFDZDtFQUVBLElBQU8zQyxNQUFNLEdBQUkyQyxLQUFLLENBQWYzQyxNQUFNO0VBQ2IsSUFBTW9XLFFBQVEsR0FBR3BXLE1BQU0sQ0FBQzhDLEdBQUcsQ0FBQztFQUU1QixJQUFNdVQscUJBQXFCLEdBQUdqYSx3QkFBd0IsQ0FBQ3VHLEtBQUssQ0FBQ3hDLFVBQVUsRUFBRWlXLFFBQVEsQ0FBQ3ZZLEVBQUUsQ0FBQztFQUNyRixJQUFJeVksUUFBUSxjQUFBbk0sTUFBQSxDQUFjaU0sUUFBUSxDQUFDcFksTUFBTSxDQUFDRixLQUFLLENBQUU7RUFDakQsSUFBSXlZLE9BQU8sR0FBRyxDQUFDO0VBQ2Y7RUFDQSxPQUFPdlcsTUFBTSxDQUFDZ0YsSUFBSSxDQUFDLFVBQUFDLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUNqSCxNQUFNLENBQUNGLEtBQUssS0FBS3dZLFFBQVE7RUFBQSxFQUFDLEVBQUU7SUFDcERBLFFBQVEsY0FBQW5NLE1BQUEsQ0FBY2lNLFFBQVEsQ0FBQ3BZLE1BQU0sQ0FBQ0YsS0FBSyxPQUFBcU0sTUFBQSxDQUFJLEVBQUVvTSxPQUFPLENBQUU7RUFDNUQ7O0VBRUE7RUFDQSxJQUFNMUwsV0FBVyxHQUFHOVAsY0FBYyxDQUFDcWIsUUFBUSxFQUFFelQsS0FBSyxDQUFDUCxNQUFNLENBQUM7O0VBRTFEO0VBQ0EsSUFBSSxFQUFDeUksV0FBVyxhQUFYQSxXQUFXLGVBQVhBLFdBQVcsQ0FBRTdNLE1BQU0sR0FBRTtJQUN4QixPQUFPMkUsS0FBSztFQUNkO0VBQ0FrSSxXQUFXLENBQUM3TSxNQUFNLENBQUNGLEtBQUssR0FBR3dZLFFBQVE7RUFDbkN6TCxXQUFXLENBQUNoTixFQUFFLEdBQUczRixjQUFjLENBQUM0QixlQUFlLENBQUM7O0VBRWhEO0VBQ0EsSUFBSXVMLFNBQVMsR0FBR3VPLGVBQWUsQ0FBQ2pSLEtBQUssRUFBRTtJQUFDM0UsTUFBTSxFQUFFNk07RUFBVyxDQUFDLENBQUM7RUFDN0Q7RUFDQSxJQUFNekYsUUFBUSxHQUFHQyxTQUFTLENBQUNyRixNQUFNLENBQUNxRixTQUFTLENBQUNyRixNQUFNLENBQUNzRCxNQUFNLEdBQUcsQ0FBQyxDQUFDOztFQUU5RDtFQUNBLElBQU1rVCxXQUFXLEdBQUdyYSx1QkFBdUIsQ0FBQ3dHLEtBQUssQ0FBQ3hDLFVBQVUsRUFBRWlXLFFBQVEsQ0FBQ3ZZLEVBQUUsQ0FBQztFQUUxRSxJQUFJMlksV0FBVyxFQUFFO0lBQ2Y7SUFDQSxJQUFNQywwQkFBMEIsR0FBR3BSLFNBQVMsQ0FBQ2xGLFVBQVUsQ0FBQ3NKLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDaEUsSUFBTWlOLFVBQVUsR0FBR0YsV0FBVyxDQUFDclcsVUFBVSxDQUFDcUYsU0FBUyxDQUFDLFVBQUF1QixDQUFDO01BQUEsT0FBSUEsQ0FBQyxLQUFLcVAsUUFBUSxDQUFDdlksRUFBRTtJQUFBLEVBQUM7SUFDM0UsSUFBTTBYLGtCQUFrQixHQUFHOWUsV0FBVyxDQUFDK2YsV0FBVyxDQUFDclcsVUFBVSxFQUFFdVcsVUFBVSxFQUFFdFIsUUFBUSxDQUFDdkgsRUFBRSxDQUFDO0lBQ3ZGLElBQU04WSxZQUFZLEdBQUE1VCxhQUFBLENBQUFBLGFBQUEsS0FBT3lULFdBQVc7TUFBRXJXLFVBQVUsRUFBRW9WO0lBQWtCLEVBQUM7SUFDckUsSUFBTVosYUFBYSxHQUFHdFksNEJBQTRCLENBQ2hEb2EsMEJBQTBCLEVBQzFCRSxZQUNGLENBQUM7SUFDRHRSLFNBQVMsR0FBR2lQLG1CQUFtQixDQUFDalAsU0FBUyxFQUFFO01BQUNtUCxLQUFLLEVBQUVHO0lBQWEsQ0FBQyxDQUFDO0VBQ3BFLENBQUMsTUFBTTtJQUNMO0lBQ0EsSUFBTUEsZUFBYSxHQUFHbGUsV0FBVyxDQUMvQjRPLFNBQVMsQ0FBQ2xGLFVBQVUsQ0FBQ3NKLEtBQUssQ0FBQyxDQUFDLEVBQUVwRSxTQUFTLENBQUNsRixVQUFVLENBQUNtRCxNQUFNLENBQUMsRUFDMUQrUyxxQkFBcUIsRUFDckJqUixRQUFRLENBQUN2SCxFQUNYLENBQUM7SUFDRHdILFNBQVMsR0FBR2lQLG1CQUFtQixDQUFDalAsU0FBUyxFQUFFO01BQUNtUCxLQUFLLEVBQUVHO0lBQWEsQ0FBQyxDQUFDO0VBQ3BFO0VBRUEsT0FBT2xSLHFCQUFxQixDQUFDNEIsU0FBUyxDQUFDO0FBQ3pDLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTXVSLGdCQUFnQixHQUFHLFNBQW5CQSxnQkFBZ0JBLENBQzNCalUsS0FBZSxFQUNmOEIsTUFBOEMsRUFDakM7RUFBQSxJQUFBb1MsY0FBQSxFQUFBQyxlQUFBLEVBQUFDLGVBQUE7RUFDYixJQUNFLEVBQUFGLGNBQUEsR0FBQXBTLE1BQU0sQ0FBQ3pHLE1BQU0sY0FBQTZZLGNBQUEsdUJBQWJBLGNBQUEsQ0FBZXZSLElBQUksTUFBS3pNLHVCQUF1QixDQUFDeU0sSUFBSSxJQUNwRDNDLEtBQUssQ0FBQ2pDLE9BQU8sQ0FBQzJGLElBQUksQ0FBQyxVQUFBMlEsTUFBTTtJQUFBLE9BQUlBLE1BQU0sQ0FBQzFSLElBQUksS0FBS3pNLHVCQUF1QixDQUFDeU0sSUFBSTtFQUFBLEVBQUMsRUFDMUU7SUFDQXJSLE9BQU8sQ0FBQzZmLElBQUksNEJBQUEzSixNQUFBLENBQTRCdFIsdUJBQXVCLENBQUNnUixJQUFJLFlBQVMsQ0FBQztJQUM5RSxPQUFPbEgsS0FBSztFQUNkO0VBRUEsSUFDRSxFQUFBbVUsZUFBQSxHQUFBclMsTUFBTSxDQUFDekcsTUFBTSxjQUFBOFksZUFBQSx1QkFBYkEsZUFBQSxDQUFleFIsSUFBSSxNQUFLeE0saUJBQWlCLElBQ3pDNkosS0FBSyxDQUFDakMsT0FBTyxDQUFDMkYsSUFBSSxDQUNoQixVQUFBMlEsTUFBTTtJQUFBLE9BQUlBLE1BQU0sQ0FBQzFSLElBQUksS0FBS3hNLGlCQUFpQixJQUFJa2UsTUFBTSxDQUFDMVIsSUFBSSxLQUFLdk0sZ0JBQWdCO0VBQUEsQ0FDakYsQ0FBQyxFQUNEO0lBQ0E5RSxPQUFPLENBQUM2ZixJQUFJLENBQUMsb0NBQW9DLENBQUM7SUFDbEQsT0FBT25SLEtBQUs7RUFDZDtFQUVBLElBQ0UsRUFBQW9VLGVBQUEsR0FBQXRTLE1BQU0sQ0FBQ3pHLE1BQU0sY0FBQStZLGVBQUEsdUJBQWJBLGVBQUEsQ0FBZXpSLElBQUksTUFBS3ZNLGdCQUFnQixJQUN4QzRKLEtBQUssQ0FBQ2pDLE9BQU8sQ0FBQzJGLElBQUksQ0FDaEIsVUFBQTJRLE1BQU07SUFBQSxPQUFJQSxNQUFNLENBQUMxUixJQUFJLEtBQUt2TSxnQkFBZ0IsSUFBSWllLE1BQU0sQ0FBQzFSLElBQUksS0FBS3hNLGlCQUFpQjtFQUFBLENBQ2pGLENBQUMsRUFDRDtJQUNBN0UsT0FBTyxDQUFDNmYsSUFBSSxDQUFDLG9DQUFvQyxDQUFDO0lBQ2xELE9BQU9uUixLQUFLO0VBQ2Q7RUFFQSxJQUFNc1UsU0FBUyxHQUFHelosWUFBWSxDQUFDaUgsTUFBTSxDQUFDekcsTUFBTSxDQUFDOztFQUU3QztFQUNBMkUsS0FBSyxDQUFDakMsT0FBTyxDQUFDd0QsT0FBTyxDQUFDLFVBQUE4UyxNQUFNO0lBQUEsT0FBSUEsTUFBTSxDQUFDRSxRQUFRLENBQUM7TUFBQ3RMLGNBQWMsRUFBRTtJQUFLLENBQUMsQ0FBQztFQUFBLEVBQUM7RUFFekUsSUFBTWxMLE9BQU8sTUFBQXlKLE1BQUEsQ0FBQUMsa0JBQUEsQ0FBT3pILEtBQUssQ0FBQ2pDLE9BQU8sSUFBRXVXLFNBQVMsRUFBQztFQUM3QyxJQUFNdFcsV0FBVyxHQUFHaEUsY0FBYyxDQUFDK0QsT0FBTyxHQUFHdVcsU0FBUyxDQUFDcFosRUFBRSxFQUFBc00sTUFBQSxDQUFBQyxrQkFBQSxDQUFLekgsS0FBSyxDQUFDaEMsV0FBVyxFQUFDLENBQUM7RUFFakYsT0FBQW9DLGFBQUEsQ0FBQUEsYUFBQSxLQUNLSixLQUFLO0lBQ1JqQyxPQUFPLEVBQVBBLE9BQU87SUFDUEMsV0FBVyxFQUFYQTtFQUFXO0FBRWYsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNd1csbUJBQW1CLEdBQUcsU0FBdEJBLG1CQUFtQkEsQ0FDOUJ4VSxLQUFlLEVBQUF5VSxNQUFBLEVBRUY7RUFBQSxJQURadlosRUFBRSxHQUFBdVosTUFBQSxDQUFGdlosRUFBRTtFQUVILElBQU1pRixHQUFHLEdBQUdILEtBQUssQ0FBQ2pDLE9BQU8sQ0FBQzhFLFNBQVMsQ0FBQyxVQUFBUCxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDcEgsRUFBRSxLQUFLQSxFQUFFO0VBQUEsRUFBQztFQUNyRCxJQUFJaUYsR0FBRyxHQUFHLENBQUMsSUFBSUEsR0FBRyxJQUFJSCxLQUFLLENBQUNqQyxPQUFPLENBQUM0QyxNQUFNLEVBQUU7SUFDMUNyUCxPQUFPLENBQUM2ZixJQUFJLDBDQUFBM0osTUFBQSxDQUEwQ3RNLEVBQUUsQ0FBRSxDQUFDO0lBQzNELE9BQU84RSxLQUFLO0VBQ2Q7RUFFQSxJQUFPakMsT0FBTyxHQUFpQmlDLEtBQUssQ0FBN0JqQyxPQUFPO0lBQUVDLFdBQVcsR0FBSWdDLEtBQUssQ0FBcEJoQyxXQUFXO0VBQzNCLElBQU0wVyxjQUFjLEdBQUczVyxPQUFPLENBQUNvQyxHQUFHLENBQUM7RUFDbkMsT0FBQUMsYUFBQSxDQUFBQSxhQUFBLEtBQ0tKLEtBQUs7SUFDUjtJQUNBakMsT0FBTyxFQUFFdkcsYUFBYSxDQUFDa2QsY0FBYyxDQUFDeFosRUFBRSxDQUFDLENBQUM2QyxPQUFPLENBQUM7SUFDbERDLFdBQVcsRUFBRUEsV0FBVyxDQUFDbUosTUFBTSxDQUFDLFVBQUF3TixRQUFRO01BQUEsT0FBSUEsUUFBUSxLQUFLRCxjQUFjLENBQUN4WixFQUFFO0lBQUE7RUFBQztBQUUvRSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU0wWixvQkFBb0IsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUMvQjVVLEtBQWUsRUFBQTZVLE1BQUE7RUFBQSxJQUNkaEQsS0FBSyxHQUFBZ0QsTUFBQSxDQUFMaEQsS0FBSztFQUFBLE9BQUF6UixhQUFBLENBQUFBLGFBQUEsS0FFSEosS0FBSztJQUNSaEMsV0FBVyxFQUFFaEUsY0FBYyxDQUFDZ0csS0FBSyxDQUFDakMsT0FBTyxFQUFBMEosa0JBQUEsQ0FBTW9LLEtBQUssQ0FBQztFQUFDO0FBQUEsQ0FDdEQ7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTWlELG1CQUFtQixHQUFHLFNBQXRCQSxtQkFBbUJBLENBQzlCOVUsS0FBZSxFQUFBK1UsTUFBQSxFQUVGO0VBQUEsSUFEWjdaLEVBQUUsR0FBQTZaLE1BQUEsQ0FBRjdaLEVBQUU7SUFBRTBKLEtBQUssR0FBQW1RLE1BQUEsQ0FBTG5RLEtBQUs7RUFFVixJQUFNekUsR0FBRyxHQUFHSCxLQUFLLENBQUNqQyxPQUFPLENBQUM4RSxTQUFTLENBQUMsVUFBQVAsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ3BILEVBQUUsS0FBS0EsRUFBRTtFQUFBLEVBQUM7RUFDckQsSUFBSWlGLEdBQUcsR0FBRyxDQUFDLElBQUlBLEdBQUcsSUFBSUgsS0FBSyxDQUFDakMsT0FBTyxDQUFDNEMsTUFBTSxFQUFFO0lBQzFDclAsT0FBTyxDQUFDNmYsSUFBSSwwQ0FBQTNKLE1BQUEsQ0FBMEN0TSxFQUFFLENBQUUsQ0FBQztJQUMzRCxPQUFPOEUsS0FBSztFQUNkO0VBRUEsSUFBSWhDLFdBQVcsR0FBR2dDLEtBQUssQ0FBQ2hDLFdBQVc7RUFDbkMsSUFBSTRHLEtBQUssQ0FBQzFKLEVBQUUsS0FBSzRDLFNBQVMsSUFBSThHLEtBQUssQ0FBQzFKLEVBQUUsS0FBS0EsRUFBRSxFQUFFO0lBQzdDLElBQU04WixJQUFJLEdBQUdoVixLQUFLLENBQUNqQyxPQUFPLENBQUM4RSxTQUFTLENBQUMsVUFBQVAsQ0FBQztNQUFBLE9BQUlBLENBQUMsQ0FBQ3BILEVBQUUsS0FBSzBKLEtBQUssQ0FBQzFKLEVBQUU7SUFBQSxFQUFDO0lBQzVELElBQUk4WixJQUFJLElBQUksQ0FBQyxFQUFFO01BQ2IxakIsT0FBTyxDQUFDNmYsSUFBSSxrREFBQTNKLE1BQUEsQ0FBa0R0TSxFQUFFLENBQUUsQ0FBQztNQUNuRSxPQUFPOEUsS0FBSztJQUNkO0lBRUFoQyxXQUFXLEdBQUdBLFdBQVcsQ0FBQ3FDLEdBQUcsQ0FBQyxVQUFBNFUsYUFBYTtNQUFBLE9BQ3pDQSxhQUFhLEtBQUsvWixFQUFFLEdBQUkwSixLQUFLLENBQUMxSixFQUFFLEdBQWMrWixhQUFhO0lBQUEsQ0FDN0QsQ0FBQztFQUNIO0VBRUEsSUFBTUMsVUFBVSxHQUFBek4sa0JBQUEsQ0FBT3pILEtBQUssQ0FBQ2pDLE9BQU8sQ0FBQztFQUNyQ21YLFVBQVUsQ0FBQy9VLEdBQUcsQ0FBQyxDQUFDb1UsUUFBUSxDQUFDM1AsS0FBSyxDQUFDO0VBRS9CLE9BQUF4RSxhQUFBLENBQUFBLGFBQUEsS0FDS0osS0FBSztJQUNSakMsT0FBTyxFQUFFbVgsVUFBVTtJQUNuQmxYLFdBQVcsRUFBWEE7RUFBVztBQUVmLENBQUM7O0FBRUQ7O0FBRUEsU0FBU21YLGlCQUFpQkEsQ0FBQzlaLE1BQStCLEVBQWM7RUFBQSxJQUFBK1osWUFBQSxFQUFBQyxVQUFBLEVBQUFDLGlCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGlCQUFBLEVBQUFDLG1CQUFBLEVBQUFDLGFBQUEsRUFBQUMsaUJBQUEsRUFBQUMsaUJBQUEsRUFBQUMsaUJBQUEsRUFBQUMsa0JBQUEsRUFBQUMscUJBQUEsRUFBQUMsVUFBQSxFQUFBQyxNQUFBLEVBQUFDLFdBQUEsRUFBQUMsT0FBQSxFQUFBQyxXQUFBLEVBQUFDLE9BQUEsRUFBQUMsZUFBQTtFQUN0RSxJQUFNQyxJQUFJLElBQUFuQixZQUFBLEdBQUcvWixNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBRWtiLElBQUksY0FBQW5CLFlBQUEsY0FBQUEsWUFBQSxHQUFJemUsdUJBQXVCO0VBQ3BELElBQU02ZixJQUFJLEdBQUc7SUFDWHRiLEVBQUUsR0FBQW1hLFVBQUEsR0FBRWhhLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFSCxFQUFFLGNBQUFtYSxVQUFBLGNBQUFBLFVBQUEsR0FBSTlmLGNBQWMsQ0FBQyxDQUFDLENBQUM7SUFDbkNnaEIsSUFBSSxFQUFKQSxJQUFJO0lBQ0ozVixTQUFTLEdBQUEwVSxpQkFBQSxHQUFFamEsTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQUV1RixTQUFTLGNBQUEwVSxpQkFBQSxjQUFBQSxpQkFBQSxHQUFJLElBQUk7SUFDcENtQixRQUFRLEdBQUFsQixnQkFBQSxHQUFFbGEsTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQUVvYixRQUFRLGNBQUFsQixnQkFBQSxjQUFBQSxnQkFBQSxHQUFJLElBQUk7SUFDbENtQixTQUFTLEdBQUFsQixpQkFBQSxHQUFFbmEsTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQUVxYixTQUFTLGNBQUFsQixpQkFBQSxjQUFBQSxpQkFBQSxHQUFJLElBQUk7SUFDcENtQixXQUFXLEdBQUFsQixtQkFBQSxHQUFFcGEsTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQUVzYixXQUFXLGNBQUFsQixtQkFBQSxjQUFBQSxtQkFBQSxHQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBc0I7SUFDaEV0YSxLQUFLLEdBQUF1YSxhQUFBLEdBQUVyYSxNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBRUYsS0FBSyxjQUFBdWEsYUFBQSxjQUFBQSxhQUFBLEdBQUksZ0JBQWdCO0lBQ3hDa0IsU0FBUyxHQUFBakIsaUJBQUEsR0FBRXRhLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFdWIsU0FBUyxjQUFBakIsaUJBQUEsY0FBQUEsaUJBQUEsR0FBSTFlLDZCQUE2QjtJQUM3RDRmLFNBQVMsR0FBQWpCLGlCQUFBLEdBQUV2YSxNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBRXdiLFNBQVMsY0FBQWpCLGlCQUFBLGNBQUFBLGlCQUFBLEdBQUk1ZSw2QkFBNkI7SUFDN0Q4ZixTQUFTLEdBQUFqQixpQkFBQSxHQUFFeGEsTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQUV5YixTQUFTLGNBQUFqQixpQkFBQSxjQUFBQSxpQkFBQSxHQUFJL2UsNkJBQTZCO0lBQzdEaWdCLFVBQVUsR0FBQWpCLGtCQUFBLEdBQUV6YSxNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBRTBiLFVBQVUsY0FBQWpCLGtCQUFBLGNBQUFBLGtCQUFBLEdBQUkvZSw4QkFBOEI7SUFDaEVpZ0IsaUJBQWlCLEdBQUFqQixxQkFBQSxHQUFFMWEsTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQUUyYixpQkFBaUIsY0FBQWpCLHFCQUFBLGNBQUFBLHFCQUFBLEdBQUssUUFBa0I7SUFDbkVoUSxRQUFRLEVBQUUxSyxNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBRTBLO0VBQ3BCLENBQUM7RUFFRCxRQUFRd1EsSUFBSTtJQUNWLEtBQUtyZixjQUFjLENBQUMrZixLQUFLO01BQ3ZCLE9BQUE3VyxhQUFBLENBQUFBLGFBQUEsS0FDS29XLElBQUk7UUFDUEQsSUFBSSxFQUFFcmYsY0FBYyxDQUFDK2YsS0FBSztRQUMxQkMsU0FBUyxHQUFBbEIsVUFBQSxHQUFHM2EsTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQVU2YixTQUFTLGNBQUFsQixVQUFBLGNBQUFBLFVBQUEsR0FBSW5mLDZCQUE2QjtRQUN0RXNnQixLQUFLLEdBQUFsQixNQUFBLEdBQUc1YSxNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBVThiLEtBQUssY0FBQWxCLE1BQUEsY0FBQUEsTUFBQSxHQUFJcmY7TUFBd0I7SUFFN0QsS0FBS00sY0FBYyxDQUFDa2dCLEtBQUs7TUFDdkIsT0FBQWhYLGFBQUEsQ0FBQUEsYUFBQSxLQUNLb1csSUFBSTtRQUNQRCxJQUFJLEVBQUVyZixjQUFjLENBQUNrZ0IsS0FBSztRQUMxQkYsU0FBUyxHQUFBaEIsV0FBQSxHQUFHN2EsTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQVU2YixTQUFTLGNBQUFoQixXQUFBLGNBQUFBLFdBQUEsR0FBSXJmLDZCQUE2QjtRQUN0RXNnQixLQUFLLEdBQUFoQixPQUFBLEdBQUc5YSxNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBVThiLEtBQUssY0FBQWhCLE9BQUEsY0FBQUEsT0FBQSxHQUFJdmY7TUFBd0I7SUFFN0QsS0FBS00sY0FBYyxDQUFDbWdCLE1BQU07TUFDeEIsT0FBQWpYLGFBQUEsQ0FBQUEsYUFBQSxLQUNLb1csSUFBSTtRQUNQRCxJQUFJLEVBQUVyZixjQUFjLENBQUNtZ0IsTUFBTTtRQUMzQkgsU0FBUyxHQUFBZCxXQUFBLEdBQUcvYSxNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBVTZiLFNBQVMsY0FBQWQsV0FBQSxjQUFBQSxXQUFBLEdBQUl2Ziw2QkFBNkI7UUFDdEVzZ0IsS0FBSyxHQUFBZCxPQUFBLEdBQUdoYixNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBVThiLEtBQUssY0FBQWQsT0FBQSxjQUFBQSxPQUFBLEdBQUl6Zix3QkFBd0I7UUFDekQwZ0IsY0FBYyxHQUFBaEIsZUFBQSxHQUFHamIsTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQVVpYyxjQUFjLGNBQUFoQixlQUFBLGNBQUFBLGVBQUEsR0FBSTtNQUFJO0lBRTNELEtBQUtwZixjQUFjLENBQUNxZ0IsSUFBSTtJQUN4QjtNQUNFLE9BQUFuWCxhQUFBLENBQUFBLGFBQUEsS0FDS29XLElBQUk7UUFDUEQsSUFBSSxFQUFFcmYsY0FBYyxDQUFDcWdCO01BQUk7RUFFL0I7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNQyxvQkFBb0IsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUMvQnhYLEtBQWUsRUFDZjhCLE1BQWtELEVBQ3JDO0VBQ2IsSUFBTTJWLGFBQWEsR0FBR3RDLGlCQUFpQixDQUFDclQsTUFBTSxDQUFDekcsTUFBTSxDQUFDO0VBQ3RELE9BQUErRSxhQUFBLENBQUFBLGFBQUEsS0FDS0osS0FBSztJQUNSL0IsV0FBVyxHQUFHd1osYUFBYSxFQUFBalEsTUFBQSxDQUFBQyxrQkFBQSxDQUFLekgsS0FBSyxDQUFDL0IsV0FBVyxFQUFDO0lBQ2xERSxvQkFBb0IsRUFBRXNaLGFBQWEsQ0FBQ3ZjLEVBQUU7SUFDdENrRCx1QkFBdUIsRUFBRTtFQUFJO0FBRWpDLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTXNaLHVCQUF1QixHQUFHLFNBQTFCQSx1QkFBdUJBLENBQ2xDMVgsS0FBZSxFQUFBMlgsTUFBQSxFQUVGO0VBQUEsSUFEWnpjLEVBQUUsR0FBQXljLE1BQUEsQ0FBRnpjLEVBQUU7RUFFSCxPQUFBa0YsYUFBQSxDQUFBQSxhQUFBLEtBQ0tKLEtBQUs7SUFDUi9CLFdBQVcsRUFBRStCLEtBQUssQ0FBQy9CLFdBQVcsQ0FBQ2tKLE1BQU0sQ0FBQyxVQUFBeVEsQ0FBQztNQUFBLE9BQUlBLENBQUMsQ0FBQzFjLEVBQUUsS0FBS0EsRUFBRTtJQUFBLEVBQUM7SUFDdkRpRCxvQkFBb0IsRUFBRTZCLEtBQUssQ0FBQzdCLG9CQUFvQixLQUFLakQsRUFBRSxHQUFHLElBQUksR0FBRzhFLEtBQUssQ0FBQzdCLG9CQUFvQjtJQUMzRkMsdUJBQXVCLEVBQ3JCNEIsS0FBSyxDQUFDN0Isb0JBQW9CLEtBQUtqRCxFQUFFLEdBQUcsS0FBSyxHQUFHOEUsS0FBSyxDQUFDNUI7RUFBdUI7QUFFL0UsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNeVosdUJBQXVCLEdBQUcsU0FBMUJBLHVCQUF1QkEsQ0FDbEM3WCxLQUFlLEVBQUE4WCxNQUFBLEVBRUY7RUFBQSxJQURaNWMsRUFBRSxHQUFBNGMsTUFBQSxDQUFGNWMsRUFBRTtJQUFFRyxNQUFNLEdBQUF5YyxNQUFBLENBQU56YyxNQUFNO0VBRVgsSUFBTThFLEdBQUcsR0FBR0gsS0FBSyxDQUFDL0IsV0FBVyxDQUFDNEUsU0FBUyxDQUFDLFVBQUErVSxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDMWMsRUFBRSxLQUFLQSxFQUFFO0VBQUEsRUFBQztFQUN6RCxJQUFJaUYsR0FBRyxHQUFHLENBQUMsRUFBRTtJQUNYN08sT0FBTyxDQUFDNmYsSUFBSSw4Q0FBQTNKLE1BQUEsQ0FBOEN0TSxFQUFFLENBQUUsQ0FBQztJQUMvRCxPQUFPOEUsS0FBSztFQUNkO0VBQ0EsSUFBTWdCLElBQUksR0FBR2hCLEtBQUssQ0FBQy9CLFdBQVcsQ0FBQ2tDLEdBQUcsQ0FBQztFQUNuQyxJQUFJNFgsY0FBMEI7RUFFOUIsSUFBSTFjLE1BQU0sQ0FBQ2tiLElBQUksSUFBSWxiLE1BQU0sQ0FBQ2tiLElBQUksS0FBS3ZWLElBQUksQ0FBQ3VWLElBQUksRUFBRTtJQUM1Q3dCLGNBQWMsR0FBRzVDLGlCQUFpQixDQUFBL1UsYUFBQSxDQUFBQSxhQUFBLEtBQUtZLElBQUksR0FBSzNGLE1BQU0sQ0FBMkIsQ0FBQztFQUNwRixDQUFDLE1BQU07SUFDTDBjLGNBQWMsR0FBQTNYLGFBQUEsQ0FBQUEsYUFBQSxLQUFPWSxJQUFJLEdBQUszRixNQUFNLENBQWU7RUFDckQ7RUFFQSxJQUFNMmMsY0FBYyxHQUFBdlEsa0JBQUEsQ0FBT3pILEtBQUssQ0FBQy9CLFdBQVcsQ0FBQztFQUM3QytaLGNBQWMsQ0FBQzdYLEdBQUcsQ0FBQyxHQUFHNFgsY0FBYztFQUNwQyxPQUFBM1gsYUFBQSxDQUFBQSxhQUFBLEtBQ0tKLEtBQUs7SUFDUi9CLFdBQVcsRUFBRStaO0VBQWM7QUFFL0IsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNQywwQkFBMEIsR0FBRyxTQUE3QkEsMEJBQTBCQSxDQUNyQ2pZLEtBQWUsRUFBQWtZLE1BQUEsRUFFRjtFQUFBLElBRFpoZCxFQUFFLEdBQUFnZCxNQUFBLENBQUZoZCxFQUFFO0VBRUgsSUFBTXVZLFFBQVEsR0FBR3pULEtBQUssQ0FBQy9CLFdBQVcsQ0FBQ29FLElBQUksQ0FBQyxVQUFBdVYsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQzFjLEVBQUUsS0FBS0EsRUFBRTtFQUFBLEVBQUM7RUFDekQsSUFBSSxDQUFDdVksUUFBUSxFQUFFO0lBQ2JuaUIsT0FBTyxDQUFDNmYsSUFBSSxpREFBQTNKLE1BQUEsQ0FBaUR0TSxFQUFFLENBQUUsQ0FBQztJQUNsRSxPQUFPOEUsS0FBSztFQUNkO0VBQ0EsSUFBTXlYLGFBQWEsR0FBQXJYLGFBQUEsQ0FBQUEsYUFBQSxLQUNkN08sU0FBUyxDQUFDa2lCLFFBQVEsQ0FBQztJQUN0QnZZLEVBQUUsRUFBRTNGLGNBQWMsQ0FBQyxDQUFDLENBQUM7SUFDckI0RixLQUFLLGFBQUFxTSxNQUFBLENBQWFpTSxRQUFRLENBQUN0WSxLQUFLO0VBQUUsRUFDbkM7RUFDRCxPQUFBaUYsYUFBQSxDQUFBQSxhQUFBLEtBQ0tKLEtBQUs7SUFDUi9CLFdBQVcsR0FBR3daLGFBQWEsRUFBQWpRLE1BQUEsQ0FBQUMsa0JBQUEsQ0FBS3pILEtBQUssQ0FBQy9CLFdBQVcsRUFBQztJQUNsREUsb0JBQW9CLEVBQUVzWixhQUFhLENBQUN2YyxFQUFFO0lBQ3RDa0QsdUJBQXVCLEVBQUU7RUFBSztBQUVsQyxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU0rWiw0QkFBNEIsR0FBRyxTQUEvQkEsNEJBQTRCQSxDQUN2Q25ZLEtBQWUsRUFBQW9ZLE1BQUEsRUFFRjtFQUFBLElBRFpsZCxFQUFFLEdBQUFrZCxNQUFBLENBQUZsZCxFQUFFO0lBQUVtZCxhQUFhLEdBQUFELE1BQUEsQ0FBYkMsYUFBYTtFQUVsQixJQUNFbmQsRUFBRSxLQUFLOEUsS0FBSyxDQUFDN0Isb0JBQW9CLElBQ2pDLENBQUNrYSxhQUFhLGFBQWJBLGFBQWEsY0FBYkEsYUFBYSxHQUFJLEtBQUssTUFBTXJZLEtBQUssQ0FBQzVCLHVCQUF1QixFQUMxRDtJQUNBLE9BQU80QixLQUFLO0VBQ2Q7RUFDQSxPQUFBSSxhQUFBLENBQUFBLGFBQUEsS0FDS0osS0FBSztJQUNSN0Isb0JBQW9CLEVBQUVqRCxFQUFFO0lBQ3hCa0QsdUJBQXVCLEVBQUVpYSxhQUFhLGFBQWJBLGFBQWEsY0FBYkEsYUFBYSxHQUFJO0VBQUs7QUFFbkQsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTQyxvQkFBb0JBLENBQ2xDdFksS0FBUSxFQUNSOEIsTUFBa0QsRUFDL0M7RUFDSDtFQUNBLElBQWV5VyxVQUFVLEdBQUl6VyxNQUFNLENBQTVCVSxNQUFNO0VBQ2IsSUFBTzVFLFFBQVEsR0FBSW9DLEtBQUssQ0FBakJwQyxRQUFROztFQUVmO0VBQ0EsSUFBSSxDQUFDQSxRQUFRLENBQUMyYSxVQUFVLENBQUMsRUFBRTtJQUN6QixPQUFPdlksS0FBSztFQUNkO0VBRUEsSUFDRTNDLE1BQU0sR0FHSjJDLEtBQUssQ0FIUDNDLE1BQU07SUFBQW1iLGVBQUEsR0FHSnhZLEtBQUssQ0FEUHBDLFFBQVE7SUFBaUIyRSxPQUFPLEdBQUFpVyxlQUFBLENBQXBCRCxVQUFVO0lBQWVFLFdBQVcsR0FBQXpULHdCQUFBLENBQUF3VCxlQUFBLEdBQXBDRCxVQUFVLEVBQUFsWSxHQUFBLENBQUFnSyxjQUFBO0VBR3hCLElBQU1xTyxjQUFjLEdBQUdyYixNQUFNLENBQUM4SixNQUFNLENBQUMsVUFBQTdFLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUNqSCxNQUFNLENBQUNtSCxNQUFNLEtBQUsrVixVQUFVO0VBQUEsRUFBQyxDQUFDbFksR0FBRyxDQUFDLFVBQUFpQyxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDcEgsRUFBRTtFQUFBLEVBQUM7O0VBRXhGO0VBQ0EsSUFBSXdGLFFBQVEsR0FBR2dZLGNBQWMsQ0FBQzdNLE1BQU0sQ0FBQyxVQUFDQyxJQUFJLEVBQUU1USxFQUFFO0lBQUEsT0FBS29XLGtCQUFrQixDQUFDeEYsSUFBSSxFQUFFO01BQUM1USxFQUFFLEVBQUZBO0lBQUUsQ0FBQyxDQUFDO0VBQUEsR0FBQWtGLGFBQUEsQ0FBQUEsYUFBQSxLQUM1RUosS0FBSztJQUNScEMsUUFBUSxFQUFFNmE7RUFBVyxFQUN0QixDQUFDOztFQUVGO0VBQ0EsSUFBTS9hLE9BQWlCLEdBQUcsRUFBRTtFQUFDLElBQUFpYixVQUFBLEdBQUE5VSwwQkFBQSxDQUNSbkQsUUFBUSxDQUFDaEQsT0FBTztJQUFBa2IsTUFBQTtFQUFBO0lBQXJDLEtBQUFELFVBQUEsQ0FBQTVVLENBQUEsTUFBQTZVLE1BQUEsR0FBQUQsVUFBQSxDQUFBM1UsQ0FBQSxJQUFBQyxJQUFBLEdBQXVDO01BQUEsSUFBNUJrRCxNQUFNLEdBQUF5UixNQUFBLENBQUExVSxLQUFBO01BQ2YsSUFBTTZJLFVBQVUsR0FBRzVGLE1BQU0sQ0FBQzNFLE1BQU0sQ0FBQ3FXLE9BQU8sQ0FBQ04sVUFBVSxDQUFDO01BQ3BELElBQUl4TCxVQUFVLElBQUksQ0FBQyxJQUFJNUYsTUFBTSxDQUFDM0UsTUFBTSxDQUFDN0IsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUMvQztRQUNBakQsT0FBTyxDQUFDb2IsSUFBSSxDQUFDL0ssK0JBQStCLENBQUM1RyxNQUFNLEVBQUU0RixVQUFVLEVBQUVuUCxRQUFRLENBQUMsQ0FBQztNQUM3RSxDQUFDLE1BQU0sSUFBSW1QLFVBQVUsR0FBRyxDQUFDLEVBQUU7UUFDekI7UUFDQXJQLE9BQU8sQ0FBQ29iLElBQUksQ0FBQzNSLE1BQU0sQ0FBQztNQUN0QjtJQUNGO0VBQUMsU0FBQWhELEdBQUE7SUFBQXdVLFVBQUEsQ0FBQXZVLENBQUEsQ0FBQUQsR0FBQTtFQUFBO0lBQUF3VSxVQUFBLENBQUF0VSxDQUFBO0VBQUE7RUFFRDNELFFBQVEsR0FBQU4sYUFBQSxDQUFBQSxhQUFBLEtBQU9NLFFBQVE7SUFBRWhELE9BQU8sRUFBUEE7RUFBTyxFQUFDO0VBRWpDLE9BQU9xYixrQ0FBa0MsQ0FBQ3JZLFFBQVEsRUFBRTtJQUFDOEIsTUFBTSxFQUFFK1Y7RUFBVSxDQUFDLENBQUM7QUFDM0U7QUFFQSxTQUFTUSxrQ0FBa0NBLENBQUMvWSxLQUFLLEVBQUFnWixNQUFBLEVBQVk7RUFBQSxJQUFUeFcsTUFBTSxHQUFBd1csTUFBQSxDQUFOeFcsTUFBTTtFQUN4RCxJQUFLbkUsaUJBQWlCLEdBQUkyQixLQUFLLENBQTFCM0IsaUJBQWlCO0VBQ3RCLElBQUE0YSxrQkFBQSxHQUFrQjVhLGlCQUFpQjtJQUE1QnBELE9BQU8sR0FBQWdlLGtCQUFBLENBQVBoZSxPQUFPO0VBQ2QsSUFBSUEsT0FBTyxFQUFFO0lBQ1gsSUFBT0ksTUFBTSxHQUFJSixPQUFPLENBQWpCSSxNQUFNO0lBQ2I7SUFDQSxJQUFBNmQsb0JBQUEsR0FBNEM3ZCxNQUFNLENBQUNDLFlBQVk7TUFBOUNrTixNQUFNLEdBQUEwUSxvQkFBQSxDQUFmMVcsTUFBTTtNQUFjbEgsWUFBWSxHQUFBMEosd0JBQUEsQ0FBQWtVLG9CQUFBLEdBQWhDMVcsTUFBTSxFQUFBbkMsR0FBQSxDQUFBZ0ssY0FBQTtJQUNkaE0saUJBQWlCLEdBQUErQixhQUFBLENBQUFBLGFBQUEsS0FDWi9CLGlCQUFpQjtNQUNwQnBELE9BQU8sRUFBQW1GLGFBQUEsQ0FBQUEsYUFBQSxLQUFNbkYsT0FBTztRQUFFSSxNQUFNLEVBQUErRSxhQUFBLENBQUFBLGFBQUEsS0FBTS9FLE1BQU07VUFBRUMsWUFBWSxFQUFaQTtRQUFZO01BQUM7SUFBQyxFQUN6RDtFQUNIO0VBRUEsT0FBQThFLGFBQUEsQ0FBQUEsYUFBQSxLQUFXSixLQUFLO0lBQUUzQixpQkFBaUIsRUFBakJBO0VBQWlCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTThhLDBCQUEwQixHQUFHLFNBQTdCQSwwQkFBMEJBLENBQ3JDblosS0FBZSxFQUNmOEIsTUFBd0Q7RUFBQSxPQUFBMUIsYUFBQSxDQUFBQSxhQUFBLEtBRXJESixLQUFLO0lBQ1J6QixhQUFhLEVBQUV1RCxNQUFNLENBQUNsRjtFQUFJO0FBQUEsQ0FDMUI7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTXdjLDRCQUE0QixHQUFHLFNBQS9CQSw0QkFBNEJBLENBQ3ZDcFosS0FBZSxFQUNmOEIsTUFBMEQ7RUFBQSxPQUFBMUIsYUFBQSxDQUFBQSxhQUFBLEtBRXZESixLQUFLO0lBQ1J4QixlQUFlLEVBQUVzRCxNQUFNLENBQUNsRjtFQUFJO0FBQUEsQ0FDNUI7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTXljLHVCQUF1QixHQUFHLFNBQTFCQSx1QkFBdUJBLENBQ2xDclosS0FBZSxFQUNmOEIsTUFBcUQsRUFDeEM7RUFDYixPQUFBMUIsYUFBQSxDQUFBQSxhQUFBLEtBQ0tKLEtBQUs7SUFDUm5DLGNBQWMsRUFBRWlFLE1BQU0sQ0FBQ1U7RUFBTTtBQUVqQyxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU04Vyx1QkFBdUIsR0FBRyxTQUExQkEsdUJBQXVCQSxDQUNsQ3RaLEtBQWUsRUFDZjhCLE1BQWlELEVBQ3BDO0VBQ2IsT0FBT3lYLHlCQUF5QixDQUFDdlosS0FBSyxFQUFFO0lBQUN3QyxNQUFNLEVBQUVWLE1BQU0sQ0FBQ1UsTUFBTTtJQUFFb0MsS0FBSyxFQUFFO01BQUNnRyxLQUFLLEVBQUU5SSxNQUFNLENBQUMwWDtJQUFRO0VBQUMsQ0FBQyxDQUFDO0FBQ25HLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTUMscUJBQXFCLEdBQUcsU0FBeEJBLHFCQUFxQkEsQ0FBSXpaLEtBQWU7RUFBQSxPQUFBSSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxLQUNoRG5ELGlCQUFpQixHQUNqQitDLEtBQUssQ0FBQzBaLFlBQVk7SUFDckJBLFlBQVksRUFBRTFaLEtBQUssQ0FBQzBaO0VBQVk7QUFBQSxDQUNoQzs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNQyx1QkFBdUIsR0FBRyxTQUExQkEsdUJBQXVCQSxDQUNsQzNaLEtBQWUsRUFBQTRaLE1BQUEsRUFPRjtFQUFBLElBQUFDLGNBQUEsR0FBQUQsTUFBQSxDQUxYRSxPQUFPO0lBQUFDLHFCQUFBLEdBQUFGLGNBQUEsQ0FBR3hlLE1BQU07SUFBTkEsTUFBTSxHQUFBMGUscUJBQUEsY0FBRyxDQUFDLENBQUMsR0FBQUEscUJBQUE7SUFBQUMscUJBQUEsR0FBQUgsY0FBQSxDQUFFeEgsT0FBTztJQUFQQSxPQUFPLEdBQUEySCxxQkFBQSxjQUFHLENBQUMsQ0FBQyxHQUFBQSxxQkFBQTtFQU1yQyxJQUFJLENBQUMzZSxNQUFNLENBQUM0ZSxRQUFRLEVBQUU7SUFDcEIsT0FBT2phLEtBQUs7RUFDZDtFQUVBLElBQU9rYSxrQkFBa0IsR0FBSTdILE9BQU8sQ0FBN0I2SCxrQkFBa0I7O0VBRXpCO0VBQ0EsSUFBSUMsV0FBVyxHQUFHLENBQUNELGtCQUFrQixHQUFHVCxxQkFBcUIsQ0FBQ3paLEtBQUssQ0FBQyxHQUFHQSxLQUFLO0VBQUMsSUFBQW9hLFVBQUEsR0FBQXZXLDBCQUFBLENBQ3hEN0QsS0FBSyxDQUFDUixPQUFPO0lBQUE2YSxNQUFBO0VBQUE7SUFBbEMsS0FBQUQsVUFBQSxDQUFBclcsQ0FBQSxNQUFBc1csTUFBQSxHQUFBRCxVQUFBLENBQUFwVyxDQUFBLElBQUFDLElBQUEsR0FBb0M7TUFBQSxJQUF6QnFXLE1BQU0sR0FBQUQsTUFBQSxDQUFBblcsS0FBQTtNQUNmLElBQUlwTSxhQUFhLENBQUN3aUIsTUFBTSxDQUFDLElBQUl4Z0IsZUFBZSxDQUFDdUIsTUFBTSxDQUFDNGUsUUFBUSxFQUFFSyxNQUFNLENBQUM3VyxJQUFJLENBQUMsRUFBRTtRQUMxRTBXLFdBQVcsR0FBR0csTUFBTSxDQUFDQyxLQUFLLENBQ3hCSixXQUFXLEVBQ1h0Z0Isb0JBQW9CLENBQUN3QixNQUFNLENBQUM0ZSxRQUFRLEVBQUVLLE1BQU0sQ0FBQzdXLElBQUksRUFBRTZXLE1BQU0sQ0FBQ0UsV0FBVyxDQUFDO1FBQ3RFO1FBQ0EsSUFDRixDQUFDO01BQ0g7SUFDRjtFQUFDLFNBQUFyVyxHQUFBO0lBQUFpVyxVQUFBLENBQUFoVyxDQUFBLENBQUFELEdBQUE7RUFBQTtJQUFBaVcsVUFBQSxDQUFBL1YsQ0FBQTtFQUFBO0VBRUQsT0FBTzhWLFdBQVc7QUFDcEIsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNTSxpQkFBaUIsR0FBRyxTQUFwQkEsaUJBQWlCQSxDQUM1QnphLEtBQWUsRUFDZjhCLE1BQWlEO0VBQUEsT0FBQTFCLGFBQUEsQ0FBQUEsYUFBQSxLQUU5Q0osS0FBSztJQUNSdkIsU0FBUyxFQUFBMkIsYUFBQSxDQUFBQSxhQUFBLEtBRUowQixNQUFNLENBQUM0WSxJQUFJLEdBQ1ZsSixNQUFNLENBQUNDLFFBQVEsQ0FBQzNQLE1BQU0sQ0FBQ2lFLFFBQVEsQ0FBQyxHQUFHO01BQUNBLFFBQVEsRUFBRWpFLE1BQU0sQ0FBQ2lFO0lBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN4RTtBQUFBLENBQ0Q7O0FBRUY7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBUzRVLDhCQUE4QkEsQ0FDNUMzYSxLQUFlLEVBQ2Y4QixNQUE0RCxFQUNsRDtFQUNWLElBQU96RyxNQUFNLEdBQUl5RyxNQUFNLENBQWhCekcsTUFBTTtFQUViLElBQU1nRCxpQkFBaUIsR0FBQStCLGFBQUEsQ0FBQUEsYUFBQSxLQUNsQkosS0FBSyxDQUFDM0IsaUJBQWlCLEdBQUFxSCxlQUFBLEtBQ3JCckssTUFBTSxDQUFDSCxFQUFFLEVBQUdHLE1BQU0sRUFDeEI7O0VBRUQ7RUFDQTtFQUNBLElBQU11ZixVQUFVLEdBQUcsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDO0VBRXZDLElBQ0VBLFVBQVUsQ0FBQ3ZULFFBQVEsQ0FBQ2hNLE1BQU0sQ0FBQ0gsRUFBRSxDQUFDLElBQzlCRyxNQUFNLENBQUNELE9BQU8sSUFDZCxDQUFDNEUsS0FBSyxDQUFDM0IsaUJBQWlCLENBQUNoRCxNQUFNLENBQUNILEVBQUUsQ0FBQyxDQUFDRSxPQUFPLEVBQzNDO0lBQ0E7SUFDQXdmLFVBQVUsQ0FBQ3JaLE9BQU8sQ0FBQyxVQUFBc1osQ0FBQyxFQUFJO01BQ3RCLElBQUlBLENBQUMsS0FBS3hmLE1BQU0sQ0FBQ0gsRUFBRSxFQUFFO1FBQ25CbUQsaUJBQWlCLENBQUN3YyxDQUFDLENBQUMsR0FBQXphLGFBQUEsQ0FBQUEsYUFBQSxLQUFPL0IsaUJBQWlCLENBQUN3YyxDQUFDLENBQUM7VUFBRXpmLE9BQU8sRUFBRTtRQUFLLEVBQUM7TUFDbEU7SUFDRixDQUFDLENBQUM7RUFDSjtFQUVBLElBQU1zRixRQUFRLEdBQUFOLGFBQUEsQ0FBQUEsYUFBQSxLQUNUSixLQUFLO0lBQ1IzQixpQkFBaUIsRUFBakJBO0VBQWlCLEVBQ2xCO0VBRUQsSUFBSWhELE1BQU0sQ0FBQ0gsRUFBRSxLQUFLLFVBQVUsSUFBSSxDQUFDRyxNQUFNLENBQUNELE9BQU8sRUFBRTtJQUMvQyxPQUFPa2Qsb0JBQW9CLENBQUM1WCxRQUFRLEVBQUU7TUFBQzhCLE1BQU0sRUFBRTtJQUFrQixDQUFDLENBQUM7RUFDckU7RUFFQSxPQUFPOUIsUUFBUTtBQUNqQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNb2EsaUJBQWlCLEdBQUcsU0FBcEJBLGlCQUFpQkEsQ0FDNUI5YSxLQUFlLEVBQ2Y4QixNQUFpRDtFQUFBLE9BQUExQixhQUFBLENBQUFBLGFBQUEsS0FFOUNKLEtBQUs7SUFDUnJCLFFBQVEsRUFBRXFCLEtBQUssQ0FBQzNCLGlCQUFpQixDQUFDdEMsVUFBVSxDQUFDWCxPQUFPLEdBQUFnRixhQUFBLENBQUFBLGFBQUEsS0FFM0NKLEtBQUssQ0FBQ3JCLFFBQVE7TUFDakJvYyxNQUFNLEVBQUUvYSxLQUFLLENBQUNyQixRQUFRLENBQUNvYyxNQUFNLEdBQUcsSUFBSSxHQUFHeHBCLFNBQVMsQ0FBQ3lPLEtBQUssQ0FBQ3JCLFFBQVE7SUFBQyxLQUVsRXFCLEtBQUssQ0FBQ3JCLFFBQVE7SUFDbEJELE9BQU8sRUFBRW9ELE1BQU0sQ0FBQzRZLElBQUksSUFBSTVZLE1BQU0sQ0FBQzRZLElBQUksQ0FBQ00sTUFBTSxHQUFHbFosTUFBTSxDQUFDNFksSUFBSSxHQUFHO0VBQUk7QUFBQSxDQUMvRDs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNTyxlQUFlLEdBQUcsU0FBbEJBLGVBQWVBLENBQzFCamIsS0FBZSxFQUVmOEIsTUFBK0MsRUFDbEM7RUFDYixPQUFBMUIsYUFBQSxDQUFBQSxhQUFBLEtBQ0tKLEtBQUs7SUFDUnRCLE9BQU8sRUFBRTtFQUFJO0FBRWpCLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTXdjLGdCQUFnQixHQUFHLFNBQW5CQSxnQkFBZ0JBLENBQzNCbGIsS0FBZSxFQUFBbWIsTUFBQSxFQUVGO0VBQUEsSUFEWkMsR0FBRyxHQUFBRCxNQUFBLENBQUhDLEdBQUc7RUFFSixJQUFJL1osTUFBTSxDQUFDcUgsTUFBTSxDQUFDMUksS0FBSyxDQUFDM0IsaUJBQWlCLENBQUMsQ0FBQ3FGLElBQUksQ0FBQyxVQUFBckksTUFBTTtJQUFBLE9BQUlBLE1BQU0sQ0FBQ0QsT0FBTztFQUFBLEVBQUMsRUFBRTtJQUN6RSxPQUFBZ0YsYUFBQSxDQUFBQSxhQUFBLEtBQ0tKLEtBQUs7TUFDUnJCLFFBQVEsRUFBQXlCLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLEtBQ0hKLEtBQUssQ0FBQ3JCLFFBQVEsR0FDYjRLLEtBQUssQ0FBQ0MsT0FBTyxDQUFDNFIsR0FBRyxDQUFDQyxLQUFLLENBQUMsR0FBRztRQUFDQyxhQUFhLEVBQUE3VCxrQkFBQSxDQUFNMlQsR0FBRyxDQUFDQyxLQUFLO01BQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUMvRDlSLEtBQUssQ0FBQ0MsT0FBTyxDQUFDNFIsR0FBRyxDQUFDRyxNQUFNLENBQUMsR0FBRztRQUFDeGYsVUFBVSxFQUFBMEwsa0JBQUEsQ0FBTTJULEdBQUcsQ0FBQ0csTUFBTTtNQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkU7RUFFTDtFQUVBLE9BQU92YixLQUFLO0FBQ2QsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU13YixxQkFBcUIsR0FBRyxTQUF4QkEscUJBQXFCQSxDQUNoQ3hiLEtBQWUsRUFDZjhCLE1BQW1EO0VBQUEsT0FFbkQ5QixLQUFLLENBQUNuQixTQUFTLElBQUltQixLQUFLLENBQUNuQixTQUFTLENBQUM4QixNQUFNLEtBQUssQ0FBQyxHQUFBUCxhQUFBLENBQUFBLGFBQUEsS0FFdENKLEtBQUs7SUFDUjtJQUNBO0lBQ0FuQixTQUFTLEVBQUU5SyxxQkFBcUIsQ0FBQ2lNLEtBQUssQ0FBQzNDLE1BQU0sRUFBRTtNQUFDb2UsU0FBUyxFQUFFO0lBQUssQ0FBQztFQUFDLEtBRXBFQyx1QkFBdUIsQ0FBQzFiLEtBQUssRUFBRThCLE1BQU0sQ0FBQztBQUFBOztBQUU1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNbUUsd0JBQXdCLEdBQUcsU0FBM0JBLHdCQUF3QkEsQ0FDbkNqRyxLQUFlLEVBQUEyYixNQUFBLEVBRUY7RUFBQSxJQURaNVYsUUFBUSxHQUFBNFYsTUFBQSxDQUFSNVYsUUFBUTtJQUFFRixPQUFPLEdBQUE4VixNQUFBLENBQVA5VixPQUFPO0VBRWxCLElBQU9oSCxTQUFTLEdBQUltQixLQUFLLENBQWxCbkIsU0FBUztFQUVoQixPQUFBdUIsYUFBQSxDQUFBQSxhQUFBLEtBQ0tKLEtBQUs7SUFDUm5CLFNBQVMsRUFBRUEsU0FBUyxDQUFDd0IsR0FBRyxDQUFDLFVBQUMyRixFQUFFLEVBQUV6RixDQUFDO01BQUEsT0FDN0JBLENBQUMsS0FBS3dGLFFBQVEsR0FBQTNGLGFBQUEsQ0FBQUEsYUFBQSxLQUVMdkIsU0FBUyxDQUFDMEIsQ0FBQyxDQUFDO1FBQ2ZsRCxNQUFNLEVBQUErQyxhQUFBLENBQUFBLGFBQUEsS0FDRHZCLFNBQVMsQ0FBQzBCLENBQUMsQ0FBQyxDQUFDbEQsTUFBTSxPQUFBcUksZUFBQSxLQUVyQkcsT0FBTyxFQUFHLENBQUNoSCxTQUFTLENBQUMwQixDQUFDLENBQUMsQ0FBQ2xELE1BQU0sQ0FBQ3dJLE9BQU8sQ0FBQztNQUN6QyxLQUVIRyxFQUFFO0lBQUEsQ0FDUjtFQUFDO0FBRUwsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU00VixvQkFBb0IsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUMvQjViLEtBQWUsRUFDZjhCLE1BQWtELEVBQ3JDO0VBQ2I7RUFDQSxJQUFPekcsTUFBTSxHQUFheUcsTUFBTSxDQUF6QnpHLE1BQU07SUFBRWdYLE9BQU8sR0FBSXZRLE1BQU0sQ0FBakJ1USxPQUFPOztFQUV0QjtFQUNBO0VBQ0EsSUFBSTVILFlBQVksR0FBR3BQLE1BQU0sR0FDckJzZSx1QkFBdUIsQ0FBQzNaLEtBQUssRUFBRTtJQUM3QjhaLE9BQU8sRUFBRTtNQUFDemUsTUFBTSxFQUFOQSxNQUFNO01BQUVnWCxPQUFPLEVBQVBBO0lBQU87RUFDM0IsQ0FBQyxDQUFDLEdBQ0ZyUyxLQUFLO0VBRVQsSUFBTXBDLFFBQVEsR0FBR3BJLE9BQU8sQ0FBQ3NNLE1BQU0sQ0FBQ2xFLFFBQVEsQ0FBQztFQUN6QyxJQUFJLENBQUNBLFFBQVEsQ0FBQytDLE1BQU0sRUFBRTtJQUNwQixPQUFPOEosWUFBWTtFQUNyQjtFQUVBLElBQU1vUixrQkFBMEIsR0FBRyxFQUFFO0VBQ3JDLElBQU1DLGlCQUF5QixHQUFHLEVBQUU7RUFFcENsZSxRQUFRLENBQUMyRCxPQUFPLENBQUMsVUFBQXdhLE1BQUEsRUFBdUJDLFlBQVksRUFBSztJQUFBLElBQUFDLFdBQUEsR0FBQUYsTUFBQSxDQUF0Q3JCLElBQUk7TUFBSkEsSUFBSSxHQUFBdUIsV0FBQSxjQUFHLENBQUMsQ0FBQyxHQUFBQSxXQUFBO01BQUtDLElBQUksR0FBQWxYLHdCQUFBLENBQUErVyxNQUFBLEVBQUFJLFVBQUE7SUFDbkMsSUFBTUMsSUFBSSxHQUFHempCLGtCQUFrQixDQUFBeUgsYUFBQTtNQUFFc2EsSUFBSSxFQUFKQTtJQUFJLEdBQUt3QixJQUFJLEdBQUdsYyxLQUFLLENBQUNwQyxRQUFRLENBQUM7SUFDaEUsSUFBSXdlLElBQUksRUFBRTtNQUNSUCxrQkFBa0IsQ0FBQy9DLElBQUksQ0FBQ3NELElBQUksQ0FBQztJQUMvQixDQUFDLE1BQU07TUFDTE4saUJBQWlCLENBQUNoRCxJQUFJLENBQ3BCaFosNEJBQTRCLENBQUMsQ0FBQyxDQUFDTyxHQUFHLENBQUM7UUFBQSxPQUNqQ2hPLGVBQWUsQ0FDYjRCLGlCQUFpQixDQUFDO1VBQ2hCb29CLE9BQU8sa0VBQWtFO1VBQ3pFbmhCLEVBQUUsb0JBQUFzTSxNQUFBLENBQW9Cd1UsWUFBWTtRQUNwQyxDQUFDLENBQ0gsQ0FBQztNQUFBLENBQ0gsQ0FDRixDQUFDO0lBQ0g7RUFDRixDQUFDLENBQUM7RUFFRixJQUFNTSxzQkFBc0IsR0FBR1Qsa0JBQWtCLENBQUNsYixNQUFNLEdBQ3BEOU8sSUFBSSxDQUFDMHFCLFVBQVUsQ0FBQ1Ysa0JBQWtCLENBQUMsQ0FBQ3hiLEdBQUcsQ0FBQyxVQUFBbWMsT0FBTztJQUFBLE9BQzdDanFCLHVCQUF1QixDQUFDO01BQUNpcUIsT0FBTyxFQUFQQSxPQUFPO01BQUVDLGVBQWUsRUFBRXBLO0lBQU8sQ0FBQyxDQUFDO0VBQUEsQ0FDOUQsQ0FBQyxHQUNELElBQUk7RUFFUixJQUFJaUssc0JBQXNCLEVBQUU7SUFDMUI3UixZQUFZLEdBQUdpUywwQkFBMEIsQ0FBQ2pTLFlBQVksRUFBRS9TLFFBQVEsQ0FBQztNQUFDaWxCLE1BQU0sRUFBRSxDQUFDO01BQUVoYSxJQUFJLEVBQUU7SUFBRSxDQUFDLENBQUMsQ0FBQztFQUMxRjtFQUVBLE9BQU81USxRQUFRLENBQUMwWSxZQUFZLEtBQUFqRCxNQUFBLENBQUFDLGtCQUFBLENBQ3RCNlUsc0JBQXNCLEdBQUcsQ0FBQ0Esc0JBQXNCLENBQUMsR0FBRyxFQUFFLEdBQ3ZEUixpQkFBaUIsQ0FDckIsQ0FBQztBQUNKLENBQUM7QUFFRCxPQUFPLElBQU1jLDhCQUE4QixHQUFHLFNBQWpDQSw4QkFBOEJBLENBQ3pDNWMsS0FBZSxFQUNmOEIsTUFBcUQsRUFDeEM7RUFDYixJQUFBK2EsZUFBQSxHQUFtQy9hLE1BQU0sQ0FBQ2dZLE9BQU87SUFBMUMwQyxPQUFPLEdBQUFLLGVBQUEsQ0FBUEwsT0FBTztJQUFFQyxlQUFlLEdBQUFJLGVBQUEsQ0FBZkosZUFBZTtFQUMvQixJQUFNWCxpQkFBeUIsR0FBRyxFQUFFO0VBRXBDLElBQU1nQixjQUFjLEdBQUdOLE9BQU8sQ0FBQzNRLE1BQU0sQ0FBQyxVQUFDQyxJQUFJLEVBQUV6QyxNQUFNLEVBQUVsSixHQUFHLEVBQUs7SUFDM0QsSUFBSWtKLE1BQU0sQ0FBQzBULE1BQU0sS0FBSyxXQUFXLEVBQUU7TUFDakMsSUFBTXhhLE9BQU8sR0FBRzhHLE1BQU0sQ0FBQ25GLEtBQUs7TUFDNUIsT0FBQTlELGFBQUEsQ0FBQUEsYUFBQSxLQUFXMEwsSUFBSSxPQUFBcEcsZUFBQSxLQUFHbkQsT0FBTyxDQUFDckgsRUFBRSxFQUFHcUgsT0FBTztJQUN4QyxDQUFDLE1BQU07TUFDTDtNQUNBdVosaUJBQWlCLENBQUNoRCxJQUFJLENBQ3BCN21CLFdBQVcsQ0FBQyxDQUFDLENBQUNvTyxHQUFHLENBQUM7UUFBQSxPQUNoQmhPLGVBQWUsQ0FDYjRCLGlCQUFpQixDQUFDO1VBQ2hCb29CLE9BQU8sbUVBQUE3VSxNQUFBLENBQ0w2QixNQUFNLENBQUMyVCxNQUFNLElBQUszVCxNQUFNLENBQVNuRixLQUFLLENBQUU7VUFDMUNoSixFQUFFLDJCQUFBc00sTUFBQSxDQUEyQnJILEdBQUc7UUFDbEMsQ0FBQyxDQUNILENBQUM7TUFBQSxDQUNILENBQ0YsQ0FBQztNQUNELE9BQU8yTCxJQUFJO0lBQ2I7RUFDRixDQUFDLEVBQUUsQ0FBQyxDQUFhLENBQUM7RUFDbEI7RUFDQSxJQUFNcU8sV0FBVyxHQUFBL1osYUFBQSxDQUFBQSxhQUFBLEtBQ1pKLEtBQUs7SUFDUnBDLFFBQVEsRUFBRTdELG9CQUFvQixDQUFDaUcsS0FBSyxFQUFFOGMsY0FBYztFQUFDLEVBQ3REOztFQUVEO0VBQ0EsSUFBTUcsWUFBWSxHQUFHamQsS0FBSyxDQUFDUixPQUFPLENBQUMySCxNQUFNLENBQUMsVUFBQStWLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUNDLGdCQUFnQjtFQUFBLEVBQUM7RUFDbEUsSUFBTUMsY0FBYyxHQUFHcGQsS0FBSyxDQUFDUixPQUFPLENBQUMySCxNQUFNLENBQUMsVUFBQStWLENBQUM7SUFBQSxPQUFJLENBQUNELFlBQVksQ0FBQzVWLFFBQVEsQ0FBQzZWLENBQUMsQ0FBQztFQUFBLEVBQUM7RUFFM0UsSUFBTWhPLFVBQVUsR0FBRzdOLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDd2IsY0FBYyxDQUFDO0VBQzlDLElBQU1PLGlCQUFpQixHQUFHO0lBQ3hCbk8sVUFBVSxFQUFWQSxVQUFVO0lBQ1ZtRCxPQUFPLEVBQUVvSyxlQUFlO0lBQ3hCUSxZQUFZLEVBQVpBO0VBQ0YsQ0FBQztFQUVELElBQU14UyxZQUFZLEdBQUc2UyxtQkFBbUIsQ0FBQ25ELFdBQVcsRUFBRTtJQUNwRDNhLE9BQU8sRUFBRTRkLGNBQWM7SUFDdkJDLGlCQUFpQixFQUFqQkE7RUFDRixDQUFDLENBQUM7RUFFRixPQUFPdHJCLFFBQVEsQ0FDYjJxQiwwQkFBMEIsQ0FBQ2pTLFlBQVksRUFBRS9TLFFBQVEsQ0FBQztJQUFDaWxCLE1BQU0sRUFBRSxDQUFDO0VBQUMsQ0FBQyxDQUFDLENBQUMsRUFDaEViLGlCQUNGLENBQUM7QUFDSCxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU3dCLG1CQUFtQkEsQ0FDakN0ZCxLQUFlLEVBQ2Y4QixNQUdDLEVBQ1M7RUFDVixJQUFPdEMsT0FBTyxHQUF1QnNDLE1BQU0sQ0FBcEN0QyxPQUFPO0lBQUU2ZCxpQkFBaUIsR0FBSXZiLE1BQU0sQ0FBM0J1YixpQkFBaUI7O0VBRWpDO0VBQ0EsSUFBTUUsZ0JBQWdCLEdBQUd4bEIscUJBQXFCLENBQzVDaUksS0FBSyxFQUFBSSxhQUFBLENBQUFBLGFBQUEsS0FFQW5ELGlCQUFpQixHQUNqQitDLEtBQUssQ0FBQzBaLFlBQVksR0FFdkJsYSxPQUFPO0VBQ1A7RUFDQTZkLGlCQUNGLENBQUM7O0VBRUQ7RUFDQTtFQUNBLE9BQU9FLGdCQUFnQixDQUFDQyxTQUFTLEdBQzdCQyxnQkFBZ0IsQ0FBQ0YsZ0JBQWdCLENBQUNwRCxXQUFXLEVBQUVrRCxpQkFBaUIsQ0FBQyxHQUNqRUUsZ0JBQWdCLENBQUNwRCxXQUFXO0FBQ2xDOztBQUVBO0FBQ0EsU0FBU3VELGdDQUFnQ0EsQ0FDdkNyTCxPQUFpRCxFQUNaO0VBQ3JDLElBQUksQ0FBQ0EsT0FBTyxJQUFJLEVBQUUsZ0JBQWdCLElBQUlBLE9BQU8sQ0FBQyxFQUFFO0lBQzlDLE9BQU92VSxTQUFTO0VBQ2xCO0VBQ0EsSUFBTTZmLEtBQUssR0FBSXRMLE9BQU8sQ0FBZ0N1TCxjQUFjO0VBQ3BFLElBQUlELEtBQUssSUFBSSxJQUFJLElBQUlFLE9BQUEsQ0FBT0YsS0FBSyxNQUFLLFFBQVEsSUFBSXBVLEtBQUssQ0FBQ0MsT0FBTyxDQUFDbVUsS0FBSyxDQUFDLEVBQUU7SUFDdEUsT0FBTzdmLFNBQVM7RUFDbEI7RUFDQSxPQUFPNmYsS0FBSztBQUNkOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVNGLGdCQUFnQkEsQ0FBQ3RELFdBQXFCLEVBQUVrRCxpQkFBb0MsRUFBWTtFQUMvRixJQUFPbk8sVUFBVSxHQUEyQm1PLGlCQUFpQixDQUF0RG5PLFVBQVU7SUFBRW1ELE9BQU8sR0FBa0JnTCxpQkFBaUIsQ0FBMUNoTCxPQUFPO0lBQUU0SyxZQUFZLEdBQUlJLGlCQUFpQixDQUFqQ0osWUFBWTtFQUN4QyxJQUFNbE0sVUFBVSxHQUFHb0osV0FBVyxDQUFDemMsT0FBTyxDQUFDeUosTUFBTSxDQUFDLFVBQUE5QyxDQUFDO0lBQUEsT0FDN0NBLENBQUMsQ0FBQzdCLE1BQU0sQ0FBQ0gsSUFBSSxDQUFDLFVBQUF5YixPQUFPO01BQUEsT0FBSTVPLFVBQVUsQ0FBQzdILFFBQVEsQ0FBQ3lXLE9BQU8sQ0FBQztJQUFBLEVBQUM7RUFBQSxDQUN4RCxDQUFDO0VBQ0QsSUFBTUMsZUFBeUIsR0FBR3BzQixJQUFJLENBQ3BDb2YsVUFBVSxDQUFDbEYsTUFBTSxDQUFDLFVBQUNDLElBQUksRUFBRXpILENBQUM7SUFBQSxVQUFBbUQsTUFBQSxDQUFBQyxrQkFBQSxDQUFTcUUsSUFBSSxHQUFBckUsa0JBQUEsQ0FBS3BELENBQUMsQ0FBQzdCLE1BQU07RUFBQSxDQUFDLEVBQUUsRUFBYyxDQUN2RSxDQUFDO0VBQ0QsSUFBTXdiLFNBQVMsR0FBRzlPLFVBQVUsQ0FBQ3ZPLE1BQU0sR0FBRyxDQUFDO0VBRXZDLElBQUlzZCxTQUFTLEdBQUcsQ0FBQ0QsU0FBUyxHQUN0QjdELFdBQVcsQ0FBQzljLE1BQU0sQ0FBQzhKLE1BQU0sQ0FBQyxVQUFBN0UsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ2pILE1BQU0sQ0FBQ21ILE1BQU0sSUFBSTBNLFVBQVUsQ0FBQzdILFFBQVEsQ0FBQy9FLENBQUMsQ0FBQ2pILE1BQU0sQ0FBQ21ILE1BQU0sQ0FBQztFQUFBLEVBQUMsR0FDdkYsRUFBRTtFQUVOLElBQU1zYSxjQUFjLEdBQUc1TixVQUFVLENBQUNyRCxNQUFNLENBQ3RDLFVBQUNDLElBQUksRUFBRTVRLEVBQUU7SUFBQSxPQUFBa0YsYUFBQSxDQUFBQSxhQUFBLEtBQ0owTCxJQUFJLE9BQUFwRyxlQUFBLEtBQ054SyxFQUFFLEVBQUdpZixXQUFXLENBQUN2YyxRQUFRLENBQUMxQyxFQUFFLENBQUM7RUFBQSxDQUM5QixFQUNGLENBQUMsQ0FDSCxDQUFDO0VBRUQsSUFBSSxDQUFDK2lCLFNBQVMsQ0FBQ3RkLE1BQU0sSUFBSSxDQUFDMFIsT0FBTyxJQUFJLENBQUMsQ0FBQyxFQUFFNkwsZ0JBQWdCLEtBQUssS0FBSyxFQUFFO0lBQ25FO0lBQ0EsSUFBTTdVLE1BQU0sR0FBRzhVLGdCQUFnQixDQUFDaEUsV0FBVyxFQUFFMkMsY0FBYyxDQUFDO0lBQzVEM0MsV0FBVyxHQUFHOVEsTUFBTSxDQUFDckosS0FBSztJQUMxQmllLFNBQVMsR0FBRzVVLE1BQU0sQ0FBQzRVLFNBQVM7RUFDOUI7RUFFQSxJQUFJOUQsV0FBVyxDQUFDdGIsU0FBUyxDQUFDOEIsTUFBTSxFQUFFO0lBQ2hDO0lBQ0FzZCxTQUFTLEdBQUc5RCxXQUFXLENBQUM5YyxNQUFNLENBQUM4SixNQUFNLENBQ25DLFVBQUE3RSxDQUFDO01BQUEsT0FBSUEsQ0FBQyxDQUFDakgsTUFBTSxDQUFDbUgsTUFBTSxJQUFJME0sVUFBVSxDQUFDN0gsUUFBUSxDQUFDL0UsQ0FBQyxDQUFDakgsTUFBTSxDQUFDbUgsTUFBTSxDQUFDO0lBQUEsQ0FDOUQsQ0FBQztJQUNEMlgsV0FBVyxHQUFBL1osYUFBQSxDQUFBQSxhQUFBLEtBQ04rWixXQUFXO01BQ2R0YixTQUFTLEVBQUVuTCxzQkFBc0IsQ0FBQ3ltQixXQUFXLENBQUN0YixTQUFTLEVBQUVvZixTQUFTO0lBQUMsRUFDcEU7RUFDSDtFQUVBOUQsV0FBVyxHQUFHaGhCLGlDQUFpQyxDQUM3Q2doQixXQUFXLEVBQ1h1RCxnQ0FBZ0MsQ0FBQ3JMLE9BQU8sQ0FBQyxFQUN6Q25ELFVBQ0YsQ0FBQzs7RUFFRDtFQUNBQSxVQUFVLENBQUMzTixPQUFPLENBQUMsVUFBQWlCLE1BQU0sRUFBSTtJQUMzQixJQUFNNGIsYUFBYSxHQUFHakUsV0FBVyxDQUFDOWIsaUJBQWlCLENBQUNwRCxPQUFPLENBQUNJLE1BQU0sQ0FBQ0MsWUFBWSxDQUFDa0gsTUFBTSxDQUFDO0lBQ3ZGO0lBQ0EsSUFDRSxDQUFBNlAsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUVnTSxrQkFBa0IsTUFBSyxLQUFLLEtBQ3BDLENBQUM5VSxLQUFLLENBQUNDLE9BQU8sQ0FBQzRVLGFBQWEsQ0FBQyxJQUFJLENBQUNBLGFBQWEsQ0FBQ3pkLE1BQU0sQ0FBQyxFQUN4RDtNQUNBO01BQ0F3WixXQUFXLEdBQUdtRSxrQkFBa0IsQ0FBQ25FLFdBQVcsRUFBRTJDLGNBQWMsQ0FBQ3RhLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZFO0VBQ0YsQ0FBQyxDQUFDO0VBRUYsSUFBTStiLGVBQWUsR0FBR1AsU0FBUyxHQUM3QjNjLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDNlksV0FBVyxDQUFDdmMsUUFBUSxDQUFDLEdBQ2pDak0sSUFBSSxDQUFDMFAsTUFBTSxDQUFDQyxJQUFJLENBQUN3YixjQUFjLENBQUMsQ0FBQ3RWLE1BQU0sQ0FBQ3VXLGVBQWUsQ0FBQyxDQUFDO0VBRTdELElBQUl0VCxZQUFZLEdBQUdrRCx3QkFBd0IsQ0FBQ3dNLFdBQVcsRUFBRW9FLGVBQWUsRUFBRXpnQixTQUFTLENBQUM7O0VBRXBGO0VBQ0E7RUFDQTJNLFlBQVksR0FBRzNKLHFCQUFxQixDQUFDMkosWUFBWSxDQUFDOztFQUVsRDtFQUNBQSxZQUFZLEdBQ1Z3UyxZQUFZLElBQUlBLFlBQVksQ0FBQ3RjLE1BQU0sR0FBRyxDQUFDLEdBQ25DMmMsbUJBQW1CLENBQUM3UyxZQUFZLEVBQUU7SUFDaENqTCxPQUFPLEVBQUV5ZCxZQUFZO0lBQ3JCSSxpQkFBaUIsRUFBQWpkLGFBQUEsQ0FBQUEsYUFBQSxLQUFNaWQsaUJBQWlCO01BQUVKLFlBQVksRUFBRTtJQUFFO0VBQzVELENBQUMsQ0FBQyxHQUNGeFMsWUFBWTs7RUFFbEI7RUFDQSxJQUFJd1QsU0FBUyxDQUFDdGQsTUFBTSxJQUFJLENBQUMwUixPQUFPLElBQUksQ0FBQyxDQUFDLEVBQUVtTSxTQUFTLEVBQUU7SUFDakQsSUFBTUMsTUFBTSxHQUFHM2pCLGFBQWEsQ0FBQ21qQixTQUFTLENBQUM7SUFDdkMsSUFBSVEsTUFBTSxFQUFFO01BQ1YsSUFBTUMsT0FBTyxHQUFHck0sT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUVxTSxPQUFPO01BQ2hDLElBQU1DLGFBQWEsR0FBR2pmLHNCQUFzQixDQUFDLENBQUMsQ0FBQ1csR0FBRyxDQUFDLFlBQU07UUFDdkQsT0FBT2pOLFlBQVksQ0FBQ3FyQixNQUFNLEVBQUVDLE9BQU8sQ0FBQztNQUN0QyxDQUFDLENBQUM7TUFDRmpVLFlBQVksR0FBRzFZLFFBQVEsQ0FBQzBZLFlBQVksRUFBRWtVLGFBQWEsQ0FBQztJQUN0RDtFQUNGOztFQUVBO0VBQ0EsT0FBT2xVLFlBQVk7QUFDckI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU21VLG9CQUFvQkEsQ0FDbEM1ZSxLQUFlLEVBQ2Y4QixNQUFrRCxFQUN4QztFQUNWLE9BQU95WCx5QkFBeUIsQ0FBQ3ZaLEtBQUssRUFBRTtJQUFDd0MsTUFBTSxFQUFFVixNQUFNLENBQUNVLE1BQU07SUFBRW9DLEtBQUssRUFBRTtNQUFDekosS0FBSyxFQUFFMkcsTUFBTSxDQUFDM0c7SUFBSztFQUFDLENBQUMsQ0FBQztBQUNoRztBQUVBLElBQU0wakIsNEJBQTRCLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQzs7QUFFbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBTUMsMEJBQTBCLEdBQUcsU0FBN0JBLDBCQUEwQkEsQ0FBSWxhLEtBQUssRUFBRXJDLE9BQU8sRUFBSztFQUNyRCxJQUFNd2MsY0FBYyxHQUFHMWQsTUFBTSxDQUFDMmQsT0FBTyxDQUFDcGEsS0FBSyxDQUFDLENBQUNpSCxNQUFNLENBQUMsVUFBQzJHLEdBQUcsRUFBRUcsS0FBSyxFQUFLO0lBQ2xFLElBQUFzTSxNQUFBLEdBQUFDLGNBQUEsQ0FBcUJ2TSxLQUFLO01BQW5CblIsR0FBRyxHQUFBeWQsTUFBQTtNQUFFL2EsS0FBSyxHQUFBK2EsTUFBQTtJQUNqQjtJQUNBLElBQUksQ0FBQ0osNEJBQTRCLENBQUN4WCxRQUFRLENBQUM3RixHQUFHLENBQUMsRUFBRTtNQUMvQyxPQUFPZ1IsR0FBRztJQUNaOztJQUVBO0lBQ0E7SUFDQSxJQUFJaFIsR0FBRyxLQUFLLE9BQU8sSUFBSSxDQUFDMU0sVUFBVSxDQUFDb1AsS0FBSyxDQUFDLEVBQUU7TUFDekMsT0FBT3NPLEdBQUc7SUFDWjs7SUFFQTtJQUNBLE9BQUFwUyxhQUFBLENBQUFBLGFBQUEsS0FBV29TLEdBQUcsT0FBQTlNLGVBQUEsS0FBR2xFLEdBQUcsRUFBRzNNLGFBQWEsQ0FBQ3FQLEtBQUssQ0FBQyxHQUFHOVMsU0FBUyxDQUFDbVIsT0FBTyxDQUFDZixHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTBDLEtBQUssQ0FBQyxHQUFHQSxLQUFLO0VBQzVGLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUVOLE9BQU82YSxjQUFjO0FBQ3ZCLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU3hGLHlCQUF5QkEsQ0FDdkN2WixLQUFlLEVBQ2Y4QixNQUF1RCxFQUM3QztFQUNWLElBQU9VLE1BQU0sR0FBV1YsTUFBTSxDQUF2QlUsTUFBTTtJQUFFb0MsS0FBSyxHQUFJOUMsTUFBTSxDQUFmOEMsS0FBSztFQUNwQixJQUFPaEgsUUFBUSxHQUFJb0MsS0FBSyxDQUFqQnBDLFFBQVE7RUFDZixJQUFNdWhCLFFBQVEsR0FBR3ZoQixRQUFRLENBQUM0RSxNQUFNLENBQUM7RUFFakMsSUFBSTJjLFFBQVEsRUFBRTtJQUNaLElBQU1KLGNBQWMsR0FBR0QsMEJBQTBCLENBQUNsYSxLQUFLLEVBQUV1YSxRQUFRLENBQUM7SUFDbEU7SUFDQTtJQUNBO0lBQ0EsT0FBQS9lLGFBQUEsQ0FBQUEsYUFBQSxLQUNLSixLQUFLO01BQ1JwQyxRQUFRLEVBQUF3QyxhQUFBLENBQUFBLGFBQUEsS0FDSHhDLFFBQVEsT0FBQThILGVBQUEsS0FDVmxELE1BQU0sRUFBRzlKLGtCQUFrQixDQUFDeW1CLFFBQVEsRUFBRUosY0FBYyxDQUFDO0lBQ3ZEO0VBRUw7RUFFQSxPQUFPL2UsS0FBSztBQUNkOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBUzBiLHVCQUF1QkEsQ0FDckMxYixLQUFRLEVBQ1I4QixNQUFtRCxFQUNoRDtFQUFBLElBQUFzZCxxQkFBQTtFQUNIO0VBQ0EsSUFBTUMsZUFBZSxHQUFHLENBQUMsR0FBR3ZkLE1BQU0sQ0FBQ2dZLE9BQU87RUFDMUMsSUFBTXdGLFNBQVMsSUFBQUYscUJBQUEsR0FBR3BmLEtBQUssQ0FBQ25CLFNBQVMsQ0FBQ3dnQixlQUFlLENBQUMsY0FBQUQscUJBQUEsdUJBQWhDQSxxQkFBQSxDQUFrQy9oQixNQUFNO0VBQzFELElBQU9BLE1BQU0sR0FBSTJDLEtBQUssQ0FBZjNDLE1BQU07O0VBRWI7RUFDQSxJQUFNNGdCLFNBQVMsR0FBRzVnQixNQUFNLENBQUNnRCxHQUFHLENBQUMsVUFBQUgsS0FBSztJQUFBLE9BQ2hDb2YsU0FBUyxJQUFJLENBQUNBLFNBQVMsQ0FBQ3BmLEtBQUssQ0FBQ2hGLEVBQUUsQ0FBQyxJQUFJZ0YsS0FBSyxDQUFDN0UsTUFBTSxDQUFDdUYsU0FBUyxHQUN2RFYsS0FBSyxDQUFDbUYsaUJBQWlCLENBQUM7TUFDdEI7TUFDQXpFLFNBQVMsRUFBRTtJQUNiLENBQUMsQ0FBQyxHQUNGVixLQUFLO0VBQUEsQ0FDWCxDQUFDOztFQUVEO0VBQ0EsT0FBQUUsYUFBQSxDQUFBQSxhQUFBLEtBQ0tKLEtBQUs7SUFDUjNDLE1BQU0sRUFBRTRnQixTQUFTO0lBQ2pCcGYsU0FBUyxFQUFFO0VBQUU7QUFFakI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTTBnQixnQkFBZ0IsR0FBRyxTQUFuQkEsZ0JBQWdCQSxDQUMzQnZmLEtBQWUsRUFDZjhCLE1BQThDLEVBQ2pDO0VBQ2IsSUFBTzBkLEtBQUssR0FBaUMxZCxNQUFNLENBQTVDMGQsS0FBSztJQUFBQyxnQkFBQSxHQUFpQzNkLE1BQU0sQ0FBckM0ZCxRQUFRO0lBQVJBLFFBQVEsR0FBQUQsZ0JBQUEsY0FBRzNzQixnQkFBZ0IsR0FBQTJzQixnQkFBQTtFQUN6QyxJQUFJLENBQUNELEtBQUssQ0FBQzdlLE1BQU0sRUFBRTtJQUNqQixPQUFPWCxLQUFLO0VBQ2Q7RUFFQSxJQUFNWixtQkFBbUIsR0FBR21LLEtBQUssQ0FBQ29XLElBQUksQ0FBQ0gsS0FBSyxDQUFDLENBQUMzVCxNQUFNLENBQ2xELFVBQUNDLElBQUksRUFBRXpILENBQUMsRUFBRTlELENBQUM7SUFBQSxPQUFLOUksTUFBTSxDQUFDbW9CLDBCQUEwQixDQUFDdmIsQ0FBQyxFQUFFOUQsQ0FBQyxDQUFDLENBQUMsQ0FBQ3VMLElBQUksQ0FBQztFQUFBLEdBQzlELENBQUMsQ0FDSCxDQUFDO0VBRUQsSUFBTTNNLFdBQVcsR0FBRztJQUNsQjBnQixTQUFTLEVBQUUsRUFBRTtJQUNiQyxXQUFXLEVBQUVOLEtBQUs7SUFDbEJFLFFBQVEsRUFBUkE7RUFDRixDQUFDO0VBRUQsSUFBTWhkLFNBQVMsR0FBR2pMLE1BQU0sQ0FBQztJQUFDMkgsbUJBQW1CLEVBQW5CQSxtQkFBbUI7SUFBRUQsV0FBVyxFQUFYQTtFQUFXLENBQUMsQ0FBQyxDQUFDYSxLQUFLLENBQUM7RUFFbkUsT0FBTytmLG1CQUFtQixDQUFDcmQsU0FBUyxDQUFDO0FBQ3ZDLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU3NkLDBCQUEwQkEsQ0FDeENoZ0IsS0FBZSxFQUNmOEIsTUFBaUQsRUFDdkM7RUFDVixJQUFJLENBQUM5QixLQUFLLENBQUNiLFdBQVcsRUFBRTtJQUN0QixPQUFPYSxLQUFLO0VBQ2Q7RUFDQSxJQUFPaWdCLFFBQVEsR0FBZW5lLE1BQU0sQ0FBN0JtZSxRQUFRO0lBQUVKLFNBQVMsR0FBSS9kLE1BQU0sQ0FBbkIrZCxTQUFTO0VBQzFCLElBQUFLLGtCQUFBLEdBQWdDbGdCLEtBQUssQ0FBQ2IsV0FBVztJQUExQzJnQixXQUFXLEdBQUFJLGtCQUFBLENBQVhKLFdBQVc7SUFBRUosUUFBUSxHQUFBUSxrQkFBQSxDQUFSUixRQUFRO0VBQzVCLElBQU1TLGlCQUFpQixHQUFHQyxnQ0FBZ0MsQ0FBQ3BnQixLQUFLLEVBQUU7SUFDaEVpZ0IsUUFBUSxFQUFSQSxRQUFRO0lBQ1JJLFFBQVEsRUFBRTtNQUFDQyxPQUFPLEVBQUUsQ0FBQztNQUFFakUsT0FBTyxFQUFFO0lBQU07RUFDeEMsQ0FBQyxDQUFDOztFQUVGO0VBQ0EsSUFBTWtFLGNBQWMsR0FBRzVvQixLQUFLLENBQUMsYUFBYSxDQUFDLENBQUNGLE1BQU0sQ0FBQztJQUFDb29CLFNBQVMsRUFBVEE7RUFBUyxDQUFDLENBQUMsQ0FBQyxDQUFDTSxpQkFBaUIsQ0FBQztFQUVuRixPQUFPcHVCLFFBQVEsQ0FDYnd1QixjQUFjLEVBQ2R2dUIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDcU8sR0FBRyxDQUFDeWYsV0FBVyxDQUFDbmYsTUFBTSxHQUFHNU4sWUFBWSxHQUFHO0lBQUEsT0FBTTJzQixRQUFRLENBQUNHLFNBQVMsQ0FBQztFQUFBLEVBQ25GLENBQUM7QUFDSDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTRSxtQkFBbUJBLENBQUMvZixLQUFlLEVBQVk7RUFDN0QsSUFBSSxDQUFDQSxLQUFLLENBQUNiLFdBQVcsRUFBRTtJQUN0QixPQUFPYSxLQUFLO0VBQ2Q7RUFDQSxJQUFPOGYsV0FBVyxHQUFJOWYsS0FBSyxDQUFDYixXQUFXLENBQWhDMmdCLFdBQVc7RUFDbEIsSUFBQVUsWUFBQSxHQUFBQyxRQUFBLENBQXdDWCxXQUFXO0lBQTVDWSxJQUFJLEdBQUFGLFlBQUE7SUFBS0csb0JBQW9CLEdBQUFILFlBQUEsQ0FBQTFaLEtBQUE7O0VBRXBDO0VBQ0EsSUFBTXBFLFNBQVMsR0FBRy9LLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQ0YsTUFBTSxDQUFDO0lBQUNxb0IsV0FBVyxFQUFFYTtFQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDM2dCLEtBQUssQ0FBQztFQUUxRixJQUFNbWdCLGlCQUFpQixHQUFHQyxnQ0FBZ0MsQ0FBQzFkLFNBQVMsRUFBRTtJQUNwRXVkLFFBQVEsRUFBRVMsSUFBSSxDQUFDeFosSUFBSTtJQUNuQm1aLFFBQVEsRUFBRTtNQUFDQyxPQUFPLEVBQUUsQ0FBQztNQUFFakUsT0FBTyxFQUFFO0lBQVk7RUFDOUMsQ0FBQyxDQUFDO0VBRUYsSUFBTy9jLE9BQU8sR0FBaUJVLEtBQUssQ0FBN0JWLE9BQU87SUFBRUMsV0FBVyxHQUFJUyxLQUFLLENBQXBCVCxXQUFXO0VBQzNCLE9BQU94TixRQUFRLENBQ2JvdUIsaUJBQWlCLEVBQ2pCUyxnQkFBZ0IsQ0FDZEYsSUFBSSxFQUNKaGUsU0FBUyxDQUFDdkQsV0FBVyxJQUFJdUQsU0FBUyxDQUFDdkQsV0FBVyxDQUFDMGdCLFNBQVMsRUFDeER2Z0IsT0FBTyxFQUNQQyxXQUNGLENBQ0YsQ0FBQztBQUNIO0FBRUEsT0FBTyxTQUFTcWhCLGdCQUFnQkEsQ0FBQ0YsSUFBSSxFQUFFYixTQUFTLEVBQTRDO0VBQUEsSUFBMUN2Z0IsT0FBaUIsR0FBQXNILFNBQUEsQ0FBQWpHLE1BQUEsUUFBQWlHLFNBQUEsUUFBQTlJLFNBQUEsR0FBQThJLFNBQUEsTUFBRyxFQUFFO0VBQUEsSUFBRXJILFdBQVcsR0FBQXFILFNBQUEsQ0FBQWpHLE1BQUEsUUFBQWlHLFNBQUEsUUFBQTlJLFNBQUEsR0FBQThJLFNBQUEsTUFBRyxDQUFDLENBQUM7RUFDeEYsT0FBTzFVLGNBQWMsQ0FBQztJQUFDd3VCLElBQUksRUFBSkEsSUFBSTtJQUFFYixTQUFTLEVBQVRBLFNBQVM7SUFBRXZnQixPQUFPLEVBQVBBLE9BQU87SUFBRUMsV0FBVyxFQUFYQTtFQUFXLENBQUMsQ0FBQyxDQUFDc2hCLEtBQUs7RUFDbEU7RUFDQTtFQUNBLFVBQUFDLEdBQUc7SUFBQSxPQUNEOXRCLGFBQWEsQ0FBQztNQUNaOHRCLEdBQUcsRUFBSEEsR0FBRztNQUNIYixRQUFRLEVBQUVTLElBQUksQ0FBQ3haLElBQUk7TUFDbkJ3WSxRQUFRLEVBQUUsU0FBVkEsUUFBUUEsQ0FBRXJXLE1BQU07UUFBQSxPQUNkblcsa0JBQWtCLENBQUM7VUFDakI2dEIsT0FBTyxFQUFFMVgsTUFBTTtVQUNmd1csU0FBUyxFQUFUQTtRQUNGLENBQUMsQ0FBQztNQUFBO0lBQ04sQ0FBQyxDQUFDO0VBQUE7RUFFSjtFQUNBLFVBQUExYixHQUFHO0lBQUEsT0FBSXRSLFlBQVksQ0FBQzZ0QixJQUFJLENBQUN4WixJQUFJLEVBQUUvQyxHQUFHLENBQUM7RUFBQSxDQUNyQyxDQUFDO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBUzZjLHlCQUF5QkEsQ0FDdkNoaEIsS0FBZSxFQUNmOEIsTUFBdUQsRUFDN0M7RUFDVixJQUFBbWYsZ0JBQUEsR0FBNkJuZixNQUFNLENBQUNnWSxPQUFPO0lBQXBDaUgsT0FBTyxHQUFBRSxnQkFBQSxDQUFQRixPQUFPO0lBQUVsQixTQUFTLEdBQUFvQixnQkFBQSxDQUFUcEIsU0FBUztFQUV6QixJQUFNTSxpQkFBaUIsR0FBR0MsZ0NBQWdDLENBQUNwZ0IsS0FBSyxFQUFFO0lBQ2hFaWdCLFFBQVEsRUFBRWMsT0FBTyxDQUFDZCxRQUFRO0lBQzFCSSxRQUFRLEVBQUU7TUFBQ0MsT0FBTyxFQUFFLENBQUM7TUFBRWpFLE9BQU8sRUFBRTtJQUFlO0VBQ2pELENBQUMsQ0FBQztFQUVGLE9BQU90cUIsUUFBUSxDQUNib3VCLGlCQUFpQixFQUNqQmh1QixpQkFBaUIsQ0FBQztJQUFDNHVCLE9BQU8sRUFBUEEsT0FBTztJQUFFbEIsU0FBUyxFQUFUQTtFQUFTLENBQUMsQ0FBQyxDQUFDZ0IsS0FBSyxDQUMzQyxVQUFBeFgsTUFBTTtJQUFBLE9BQUl6VyxtQkFBbUIsQ0FBQztNQUFDcXRCLFFBQVEsRUFBRWMsT0FBTyxDQUFDZCxRQUFRO01BQUVKLFNBQVMsRUFBRXhXO0lBQU0sQ0FBQyxDQUFDO0VBQUEsR0FDOUUsVUFBQWxGLEdBQUc7SUFBQSxPQUFJdFIsWUFBWSxDQUFDa3VCLE9BQU8sQ0FBQ2QsUUFBUSxFQUFFOWIsR0FBRyxDQUFDO0VBQUEsQ0FDNUMsQ0FDRixDQUFDO0FBQ0g7O0FBRUE7QUFDQSxPQUFPLFNBQVMrYyxhQUFhQSxDQUFBLEVBQThCO0VBQUEsSUFBN0JDLFlBQVksR0FBQXZhLFNBQUEsQ0FBQWpHLE1BQUEsUUFBQWlHLFNBQUEsUUFBQTlJLFNBQUEsR0FBQThJLFNBQUEsTUFBRyxDQUFDLENBQUM7RUFBQSxJQUFFeVosUUFBUSxHQUFBelosU0FBQSxDQUFBakcsTUFBQSxPQUFBaUcsU0FBQSxNQUFBOUksU0FBQTtFQUN2RDtFQUNBO0VBQ0EsSUFBSSxDQUFDdWlCLFFBQVEsSUFBSSxDQUFDQSxRQUFRLENBQUNDLE9BQU8sRUFBRTtJQUNsQyxPQUFPLENBQUMsQ0FBQztFQUNYO0VBRUEsT0FBTztJQUNMQSxPQUFPLEVBQUVELFFBQVEsQ0FBQ0M7RUFDcEIsQ0FBQztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU1jLG9CQUFvQixHQUFHLFNBQXZCQSxvQkFBb0JBLENBQy9CcGhCLEtBQWUsRUFBQXFoQixNQUFBLEVBSUY7RUFBQSxJQUFBQyxpQkFBQTtFQUFBLElBQUFDLGNBQUEsR0FBQUYsTUFBQSxDQUZYdkgsT0FBTztJQUFHZ0gsR0FBRyxHQUFBUyxjQUFBLENBQUhULEdBQUc7SUFBRWIsUUFBUSxHQUFBc0IsY0FBQSxDQUFSdEIsUUFBUTtJQUFFSSxRQUFRLEdBQUFrQixjQUFBLENBQVJsQixRQUFRO0lBQUVtQixXQUFXLEdBQUFELGNBQUEsQ0FBWEMsV0FBVztJQUFFOUIsUUFBUSxHQUFBNkIsY0FBQSxDQUFSN0IsUUFBUTtFQUcxRCxJQUFNUyxpQkFBaUIsR0FBR0MsZ0NBQWdDLENBQUNwZ0IsS0FBSyxFQUFFO0lBQ2hFaWdCLFFBQVEsRUFBUkEsUUFBUTtJQUNSSSxRQUFRLEVBQUVhLGFBQWEsQ0FBQ2xoQixLQUFLLENBQUNaLG1CQUFtQixDQUFDNmdCLFFBQVEsQ0FBQyxFQUFFSSxRQUFRO0VBQ3ZFLENBQUMsQ0FBQztFQUVGLE9BQU90dUIsUUFBUSxDQUFDb3VCLGlCQUFpQixLQUFBM1ksTUFBQSxDQUFBQyxrQkFBQSxDQUMzQm5TLG9CQUFvQixDQUFDLENBQUMsQ0FBQ21zQiwwQkFBMEIsSUFDckR4QixRQUFRLENBQUN5QixRQUFRLENBQUMsT0FBTyxDQUFDLElBQzFCLENBQUFGLFdBQVcsYUFBWEEsV0FBVyxnQkFBQUYsaUJBQUEsR0FBWEUsV0FBVyxDQUFFRyxJQUFJLGNBQUFMLGlCQUFBLHVCQUFqQkEsaUJBQUEsQ0FBbUIzZ0IsTUFBTSxJQUFHLENBQUMsR0FDekIsQ0FDRXhPLGlCQUFpQixDQUFDO0lBQUM0dUIsT0FBTyxFQUFFUyxXQUFXO0lBQUUzQixTQUFTLEVBQUU7RUFBRSxDQUFDLENBQUMsQ0FBQ2dCLEtBQUssQ0FDNUQsVUFBQXhYLE1BQU07SUFBQSxPQUFJdlcsZ0JBQWdCLENBQUN1VyxNQUFNLENBQUM7RUFBQSxHQUNsQyxVQUFBbEYsR0FBRztJQUFBLE9BQUl0UixZQUFZLENBQUNvdEIsUUFBUSxFQUFFOWIsR0FBRyxDQUFDO0VBQUEsQ0FDcEMsQ0FBQyxDQUNGLEdBQ0QsRUFBRSxJQUNOL1IsV0FBVyxDQUFDMHVCLEdBQUcsQ0FBQzdmLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzRmLEtBQUssQ0FDM0IsVUFBQWUsTUFBQSxFQUFtQjtJQUFBLElBQWpCMWQsS0FBSyxHQUFBMGQsTUFBQSxDQUFMMWQsS0FBSztNQUFFRCxJQUFJLEdBQUEyZCxNQUFBLENBQUozZCxJQUFJO0lBQ1gsT0FBT0EsSUFBSSxHQUNQeWIsUUFBUSxDQUFDOEIsV0FBVyxDQUFDLEdBQ3JCeHVCLGFBQWEsQ0FBQztNQUNaOHRCLEdBQUcsRUFBSEEsR0FBRztNQUNIYixRQUFRLEVBQVJBLFFBQVE7TUFDUkksUUFBUSxFQUFFbmMsS0FBSyxDQUFDbWMsUUFBUTtNQUN4Qm1CLFdBQVcsRUFBRXRkLEtBQUs7TUFDbEJ3YixRQUFRLEVBQVJBO0lBQ0YsQ0FBQyxDQUFDO0VBQ1IsQ0FBQyxFQUNELFVBQUF2YixHQUFHO0lBQUEsT0FBSXRSLFlBQVksQ0FBQ290QixRQUFRLEVBQUU5YixHQUFHLENBQUM7RUFBQSxDQUNwQyxDQUFDLEVBQ0YsQ0FBQztBQUNKLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTTBkLG1CQUFtQixHQUFHLFNBQXRCQSxtQkFBbUJBLENBQzlCN2hCLEtBQWUsRUFBQThoQixNQUFBLEVBRUY7RUFBQSxJQURablksS0FBSyxHQUFBbVksTUFBQSxDQUFMblksS0FBSztJQUFFc1csUUFBUSxHQUFBNkIsTUFBQSxDQUFSN0IsUUFBUTtFQUVoQjtFQUNBM3VCLE9BQU8sQ0FBQzZmLElBQUksQ0FBQ3hILEtBQUssQ0FBQztFQUNuQixJQUFJLENBQUMzSixLQUFLLENBQUNiLFdBQVcsRUFBRTtJQUN0QixPQUFPYSxLQUFLO0VBQ2Q7RUFDQSxJQUFBK2hCLG1CQUFBLEdBQTJDL2hCLEtBQUssQ0FBQ2IsV0FBVztJQUFyRDJnQixXQUFXLEdBQUFpQyxtQkFBQSxDQUFYakMsV0FBVztJQUFFSixRQUFRLEdBQUFxQyxtQkFBQSxDQUFSckMsUUFBUTtJQUFFRyxTQUFTLEdBQUFrQyxtQkFBQSxDQUFUbEMsU0FBUztFQUV2QyxJQUFNbmQsU0FBUyxHQUFHMGQsZ0NBQWdDLENBQUNwZ0IsS0FBSyxFQUFFO0lBQ3hEaWdCLFFBQVEsRUFBUkEsUUFBUTtJQUNSSSxRQUFRLEVBQUU7TUFBQzFXLEtBQUssRUFBTEE7SUFBSztFQUNsQixDQUFDLENBQUM7O0VBRUY7RUFDQSxPQUFPNVgsUUFBUSxDQUNiMlEsU0FBUyxFQUNUMVEsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDcU8sR0FBRyxDQUFDeWYsV0FBVyxDQUFDbmYsTUFBTSxHQUFHNU4sWUFBWSxHQUFHO0lBQUEsT0FBTTJzQixRQUFRLENBQUNHLFNBQVMsQ0FBQztFQUFBLEVBQ25GLENBQUM7QUFDSCxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU1tQyxxQkFBcUIsR0FBRyxTQUF4QkEscUJBQXFCQSxDQUNoQ2hpQixLQUFlLEVBQUFpaUIsTUFBQSxFQUVGO0VBQUEsSUFEWnpmLE1BQU0sR0FBQXlmLE1BQUEsQ0FBTnpmLE1BQU07RUFFUDtFQUNBLElBQU0wZixPQUFPLEdBQUcxc0IsT0FBTyxDQUFDZ04sTUFBTSxDQUFDO0VBRS9CLE9BQU8wZixPQUFPLENBQUNyVyxNQUFNLENBQUMsVUFBQ0MsSUFBSSxFQUFFNVEsRUFBRTtJQUFBLE9BQUs1RyxnQkFBZ0IsQ0FBQ3dYLElBQUksRUFBRTVRLEVBQUUsQ0FBQztFQUFBLEdBQUU4RSxLQUFLLENBQUM7QUFDeEUsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNbWlCLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBaUJBLENBQzVCbmlCLEtBQWUsRUFDZjhCLE1BQStDO0VBQUEsT0FBQTFCLGFBQUEsQ0FBQUEsYUFBQSxLQUU1Q0osS0FBSztJQUNSOUMsT0FBTyxFQUFBa0QsYUFBQSxDQUFBQSxhQUFBLEtBQ0ZKLEtBQUssQ0FBQzlDLE9BQU8sR0FDYjRFLE1BQU0sQ0FBQzRZLElBQUk7RUFDZjtBQUFBLENBQ0Q7QUFDRjtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVN5RCxnQkFBZ0JBLENBQzlCbmUsS0FBZSxFQUNmcEMsUUFBa0IsRUFDcUI7RUFDdkMsSUFBTXdrQixLQUFjLEdBQUcsRUFBRTtFQUN6QixJQUFNQyxhQUFhLEdBQUdoaEIsTUFBTSxDQUFDcUgsTUFBTSxDQUFDOUssUUFBUSxDQUFDLENBQUNpTyxNQUFNLENBQUMsVUFBQ0MsSUFBYSxFQUFFdkosT0FBTyxFQUFLO0lBQy9FLElBQU0rZixXQUFXLEdBQUdycEIsZ0JBQWdCLENBQUNzSixPQUFPLEVBQUV2QyxLQUFLLENBQUNoQixZQUFZLENBQUM7SUFDakUsT0FBT3NqQixXQUFXLElBQUlBLFdBQVcsQ0FBQzNoQixNQUFNLEdBQUdtTCxJQUFJLENBQUN0RSxNQUFNLENBQUM4YSxXQUFXLENBQUMsR0FBR3hXLElBQUk7RUFDNUUsQ0FBQyxFQUFFc1csS0FBSyxDQUFDO0VBRVQsT0FBTztJQUNMcGlCLEtBQUssRUFBQUksYUFBQSxDQUFBQSxhQUFBLEtBQ0FKLEtBQUs7TUFDUjNDLE1BQU0sS0FBQW1LLE1BQUEsQ0FBQUMsa0JBQUEsQ0FBTXpILEtBQUssQ0FBQzNDLE1BQU0sR0FBQW9LLGtCQUFBLENBQUs0YSxhQUFhLEVBQUM7TUFDM0M3a0IsVUFBVSxLQUFBZ0ssTUFBQSxDQUFBQyxrQkFBQSxDQUVMdk8sdUJBQXVCLENBQUNtcEIsYUFBYSxDQUFDLEdBQUE1YSxrQkFBQSxDQUN0Q3pILEtBQUssQ0FBQ3hDLFVBQVU7SUFDcEIsRUFDRjtJQUNEeWdCLFNBQVMsRUFBRW9FO0VBQ2IsQ0FBQztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBUy9ELGtCQUFrQkEsQ0FBQ3RlLEtBQUssRUFBRXVDLE9BQU8sRUFBRTtFQUNqRCxJQUFNNmIsYUFBYSxHQUFHcmxCLGdCQUFnQixDQUFBcUgsYUFBQSxDQUFBQSxhQUFBLEtBQ2pDbUMsT0FBTztJQUNWM0Qsa0JBQWtCLEVBQUVvQixLQUFLLENBQUNwQjtFQUFrQixFQUM3QyxDQUFDO0VBQ0YsSUFBTTJqQixNQUFNLEdBQUFuaUIsYUFBQSxDQUFBQSxhQUFBLEtBQ1BKLEtBQUssQ0FBQzNCLGlCQUFpQixDQUFDcEQsT0FBTyxDQUFDSSxNQUFNLENBQUNDLFlBQVksR0FDbkQ4aUIsYUFBYSxDQUNqQjtFQUVELE9BQU9ucEIsR0FBRyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsRUFBRXN0QixNQUFNLEVBQUV2aUIsS0FBSyxDQUFDO0FBQ3ZGO0FBRUEsT0FBTyxTQUFTNGYsMEJBQTBCQSxDQUFDYyxJQUFJLEVBQUU1USxLQUFLLEVBQUU7RUFDdEQsSUFBTW1RLFFBQVEsR0FBR1MsSUFBSSxDQUFDeFosSUFBSSxxQkFBQU0sTUFBQSxDQUFxQnNJLEtBQUssQ0FBRTtFQUN0RCxPQUFBcEssZUFBQSxLQUNHdWEsUUFBUSxFQUFHO0lBQ1Y7SUFDQUssT0FBTyxFQUFFLENBQUM7SUFDVmpFLE9BQU8sRUFBRSxFQUFFO0lBQ1g0RCxRQUFRLEVBQVJBLFFBQVE7SUFDUnRXLEtBQUssRUFBRTtFQUNULENBQUM7QUFFTDtBQUVBLE9BQU8sU0FBU3lXLGdDQUFnQ0EsQ0FBQ3BnQixLQUFLLEVBQUF3aUIsTUFBQSxFQUF3QjtFQUFBLElBQXJCdkMsUUFBUSxHQUFBdUMsTUFBQSxDQUFSdkMsUUFBUTtJQUFFSSxRQUFRLEdBQUFtQyxNQUFBLENBQVJuQyxRQUFRO0VBQ3pFO0VBQ0EsT0FBTzFvQixLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQ0EsS0FBSyxDQUFDc29CLFFBQVEsQ0FBQyxDQUFDeG9CLE1BQU0sQ0FBQzRvQixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUNyZ0IsS0FBSyxDQUFDO0FBQy9FO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTMk4sd0JBQXdCQSxDQUN0QzNOLEtBQVEsRUFDUndDLE1BQXlCLEVBQ3pCb00sYUFBc0IsRUFDbkI7RUFDSCxJQUFNc1QsT0FBTyxHQUFHLE9BQU8xZixNQUFNLEtBQUssUUFBUSxHQUFHLENBQUNBLE1BQU0sQ0FBQyxHQUFHQSxNQUFNO0VBQzlELElBQU15YixTQUFrQixHQUFHLEVBQUU7RUFDN0IsSUFBTS9NLFlBQW1CLEdBQUcsRUFBRTtFQUU5QmxSLEtBQUssQ0FBQzNDLE1BQU0sQ0FBQ2tFLE9BQU8sQ0FBQyxVQUFDYSxRQUFRLEVBQUU3QixDQUFDLEVBQUs7SUFDcEMsSUFBSTZCLFFBQVEsQ0FBQy9HLE1BQU0sQ0FBQ21ILE1BQU0sSUFBSTBmLE9BQU8sQ0FBQzdhLFFBQVEsQ0FBQ2pGLFFBQVEsQ0FBQy9HLE1BQU0sQ0FBQ21ILE1BQU0sQ0FBQyxFQUFFO01BQ3RFO01BQ0EsSUFBTUMsUUFBUSxHQUNabU0sYUFBYSxJQUFJQSxhQUFhLENBQUM2VCxXQUFXLEdBQ3RDcmdCLFFBQVEsR0FDUkEsUUFBUSxDQUFDOEcsaUJBQWlCLENBQUNsSixLQUFLLENBQUNwQyxRQUFRLEVBQUVnUixhQUFhLENBQUM7TUFFL0QsSUFBQThULG9CQUFBLEdBQTJCMXBCLGtCQUFrQixDQUFDeUosUUFBUSxFQUFFekMsS0FBSyxFQUFFQSxLQUFLLENBQUMxQyxTQUFTLENBQUNpRCxDQUFDLENBQUMsQ0FBQztRQUEzRWpELFNBQVMsR0FBQW9sQixvQkFBQSxDQUFUcGxCLFNBQVM7UUFBRTRDLEtBQUssR0FBQXdpQixvQkFBQSxDQUFMeGlCLEtBQUs7TUFFdkIrZCxTQUFTLENBQUNuRixJQUFJLENBQUM1WSxLQUFLLENBQUM7TUFDckJnUixZQUFZLENBQUM0SCxJQUFJLENBQUN4YixTQUFTLENBQUM7SUFDOUIsQ0FBQyxNQUFNO01BQ0wyZ0IsU0FBUyxDQUFDbkYsSUFBSSxDQUFDMVcsUUFBUSxDQUFDO01BQ3hCOE8sWUFBWSxDQUFDNEgsSUFBSSxDQUFDOVksS0FBSyxDQUFDMUMsU0FBUyxDQUFDaUQsQ0FBQyxDQUFDLENBQUM7SUFDdkM7RUFDRixDQUFDLENBQUM7RUFFRixJQUFNRyxRQUFRLEdBQUFOLGFBQUEsQ0FBQUEsYUFBQSxLQUNUSixLQUFLO0lBQ1IzQyxNQUFNLEVBQUU0Z0IsU0FBUztJQUNqQjNnQixTQUFTLEVBQUU0VDtFQUFZLEVBQ3hCO0VBRUQsT0FBT3hRLFFBQVE7QUFDakI7QUFFQSxPQUFPLFNBQVNJLHFCQUFxQkEsQ0FBcUJkLEtBQVEsRUFBSztFQUFBLElBQUEyaUIsY0FBQTtFQUNyRTtFQUNBLElBQU1DLGdCQUFnQixHQUFHM29CLDBCQUEwQixDQUFDK0YsS0FBSyxDQUFDM0MsTUFBTSxDQUFDO0VBRWpFLElBQUksQ0FBQ3VsQixnQkFBZ0IsQ0FBQ2ppQixNQUFNLEVBQUU7SUFDNUIsT0FBQVAsYUFBQSxDQUFBQSxhQUFBLEtBQ0tKLEtBQUs7TUFDUmYsZUFBZSxFQUFBbUIsYUFBQSxDQUFBQSxhQUFBLEtBQ1ZKLEtBQUssQ0FBQ2YsZUFBZTtRQUN4QmhELE1BQU0sRUFBRSxJQUFJO1FBQ1pHLFdBQVcsRUFBRSxLQUFLO1FBQ2xCQyxTQUFTLEVBQUUsSUFBSTtRQUNmRyxpQkFBaUIsRUFBRTtNQUFJO0lBQ3hCO0VBRUw7RUFFQSxJQUFNcW1CLFlBQVksR0FBR0QsZ0JBQWdCLENBQUN2aUIsR0FBRyxDQUFDLFVBQUFpQyxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDakgsTUFBTSxDQUFDd0YsU0FBUyxDQUFDNUUsTUFBTSxJQUFJLEVBQUU7RUFBQSxFQUFDO0VBQy9FO0VBQ0EsSUFBTTZtQixZQUFZLEdBQUczb0IsZ0JBQWdCLENBQUMwb0IsWUFBWSxDQUFDO0VBQ25ELElBQU1ybUIsaUJBQWlCLEdBQUc5SCwyQkFBMkIsQ0FBQ291QixZQUFZLENBQUM7O0VBRW5FO0VBQ0EsSUFBSUMsZUFBZ0MsR0FBR3B4QixJQUFJLENBQ3pDaXhCLGdCQUFnQixDQUFDL1csTUFBTSxDQUFDLFVBQUNDLElBQUksRUFBRTVMLEtBQUssRUFBSztJQUN2QzRMLElBQUksQ0FBQ2dOLElBQUksQ0FBQWtLLEtBQUEsQ0FBVGxYLElBQUksRUFBQXJFLGtCQUFBLENBQVV2SCxLQUFLLENBQUM3RSxNQUFNLENBQUN3RixTQUFTLENBQUN4RSxTQUFTLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdEQsT0FBT3lQLElBQUk7RUFDYixDQUFDLEVBQUUsRUFBRSxDQUNQLENBQUMsQ0FBQ21YLElBQUksQ0FBQyxDQUFDO0VBRVJGLGVBQWUsR0FBR0EsZUFBZSxDQUFDcGlCLE1BQU0sR0FBR29pQixlQUFlLEdBQUcsSUFBSTs7RUFFakU7RUFDQSxJQUFNcm1CLFFBQVEsR0FBR3FtQixlQUFlLEdBQzNCcHRCLFVBQVUsSUFBSSxJQUFJLEdBQUdNLEdBQUcsQ0FBQyxHQUFJOHNCLGVBQWUsQ0FBQ3BpQixNQUFNLElBQUlYLEtBQUssQ0FBQ2YsZUFBZSxDQUFDOUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUN6RixJQUFJO0VBRVIsSUFBTXVHLFNBQVMsR0FBQXRDLGFBQUEsQ0FBQUEsYUFBQSxLQUNWSixLQUFLO0lBQ1JmLGVBQWUsRUFBQW1CLGFBQUEsQ0FBQUEsYUFBQSxLQUNWSixLQUFLLENBQUNmLGVBQWU7TUFDeEJoRCxNQUFNLEVBQUU2bUIsWUFBWTtNQUNwQnRtQixpQkFBaUIsRUFBakJBLGlCQUFpQjtNQUNqQkUsUUFBUSxFQUFSQSxRQUFRO01BQ1JMLFNBQVMsRUFBRTBtQjtJQUFlO0VBQzNCLEVBQ0Y7O0VBRUQ7RUFDQSxJQUFNRyxZQUFZLElBQUFQLGNBQUEsR0FBRzNpQixLQUFLLENBQUN0QyxPQUFPLGNBQUFpbEIsY0FBQSx1QkFBYkEsY0FBQSxDQUFldGdCLElBQUksQ0FBQyxVQUFBZ0MsQ0FBQztJQUFBLE9BQUtBLENBQUMsQ0FBcUI2Qix1QkFBdUI7RUFBQSxFQUUvRTs7RUFFYjtFQUNBO0VBQ0EsSUFBTWlkLGtCQUFrQixHQUFHRCxZQUFZLEdBQ25DL29CLGdCQUFnQixDQUFDLENBQUMyb0IsWUFBWSxFQUFFSSxZQUFZLENBQUNqbkIsTUFBTSxDQUFDLENBQUMsR0FDckQ2bUIsWUFBWTtFQUNoQixJQUFNNW1CLFdBQVcsR0FBR3ZILFNBQVMsQ0FBQ3FMLEtBQUssQ0FBQ2YsZUFBZSxDQUFDL0MsV0FBVyxFQUFFaW5CLGtCQUFrQixDQUFDLEdBQ2hGbmpCLEtBQUssQ0FBQ2YsZUFBZSxDQUFDL0MsV0FBVyxHQUNqQ2luQixrQkFBa0IsQ0FBQyxDQUFDLENBQUM7RUFFekIsSUFBSWpuQixXQUFXLEtBQUs4RCxLQUFLLENBQUNmLGVBQWUsQ0FBQy9DLFdBQVcsRUFBRTtJQUNyRDtJQUNBLE9BQU95UCw0QkFBNEIsQ0FBQ2pKLFNBQVMsRUFBRTtNQUFDd0IsS0FBSyxFQUFFaEk7SUFBVyxDQUFDLENBQUM7RUFDdEU7RUFFQSxPQUFPd0csU0FBUztBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTTBnQixvQkFBb0IsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUMvQnBqQixLQUFlLEVBQUFxakIsTUFBQSxFQUVGO0VBQUEsSUFEWnptQixJQUFJLEdBQUF5bUIsTUFBQSxDQUFKem1CLElBQUk7RUFFTCxJQUFNMG1CLGVBQWUsR0FBR2h1QixvQkFBb0IsQ0FBQyxDQUFDLENBQUNpdUIsdUJBQXVCO0VBQ3RFLElBQ0UsQ0FBQ0QsZUFBZSxLQUNmMW1CLElBQUksS0FBSzlHLFlBQVksQ0FBQzB0QixVQUFVLElBQUk1bUIsSUFBSSxLQUFLOUcsWUFBWSxDQUFDMnRCLGVBQWUsQ0FBQyxFQUMzRTtJQUNBLE9BQU96akIsS0FBSztFQUNkO0VBRUEsT0FBQUksYUFBQSxDQUFBQSxhQUFBLEtBQ0tKLEtBQUs7SUFDUmQsTUFBTSxFQUFBa0IsYUFBQSxDQUFBQSxhQUFBLEtBQ0RKLEtBQUssQ0FBQ2QsTUFBTTtNQUNmdEMsSUFBSSxFQUFKQSxJQUFJO01BQ0pHLGVBQWUsRUFBRTtJQUFJO0VBQ3RCO0FBRUwsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTMm1CLGtCQUFrQkEsQ0FDaEMxakIsS0FBZSxFQUFBMmpCLE1BQUEsRUFFTDtFQUFBLElBQUFDLHFCQUFBLEVBQUFDLHNCQUFBO0VBQUEsSUFBQUMsZUFBQSxHQUFBSCxNQUFBLENBRFQ3bUIsUUFBUTtJQUFSQSxRQUFRLEdBQUFnbkIsZUFBQSxjQUFHLEVBQUUsR0FBQUEsZUFBQTtFQUVkLElBQU1DLFdBQVcsR0FBR2puQixRQUFRLENBQUM2RCxNQUFNLElBQUk3RCxRQUFRLENBQUNBLFFBQVEsQ0FBQzZELE1BQU0sR0FBRyxDQUFDLENBQUM7RUFFcEUsSUFBTUQsUUFBUSxHQUFBTixhQUFBLENBQUFBLGFBQUEsS0FDVEosS0FBSztJQUNSZCxNQUFNLEVBQUFrQixhQUFBLENBQUFBLGFBQUEsS0FDREosS0FBSyxDQUFDZCxNQUFNO01BQ2Y7TUFDQXBDLFFBQVEsRUFBRUEsUUFBUSxDQUFDcUssTUFBTSxDQUFDLFVBQUE5QyxDQUFDO1FBQUEsT0FBSSxDQUFDNVAsb0JBQW9CLENBQUM0UCxDQUFDLENBQUM7TUFBQSxFQUFDO01BQ3hEekgsSUFBSSxFQUNGbW5CLFdBQVcsS0FBQUgscUJBQUEsR0FBSUcsV0FBVyxDQUFDQyxVQUFVLGNBQUFKLHFCQUFBLGVBQXRCQSxxQkFBQSxDQUF3QkssUUFBUSxHQUMzQyxFQUFBSixzQkFBQSxHQUFBRSxXQUFXLENBQUNDLFVBQVUsY0FBQUgsc0JBQUEsdUJBQXRCQSxzQkFBQSxDQUF3QkssS0FBSyxNQUFLLFdBQVcsR0FDM0Nsa0IsS0FBSyxDQUFDZCxNQUFNLENBQUN0QyxJQUFJLEdBQ2pCOUcsWUFBWSxDQUFDcXVCLElBQUksR0FDbkJua0IsS0FBSyxDQUFDZCxNQUFNLENBQUN0QztJQUFJO0VBQ3hCLEVBQ0Y7O0VBRUQ7RUFDQSxJQUFPRyxlQUFlLEdBQUlpRCxLQUFLLENBQUNkLE1BQU0sQ0FBL0JuQyxlQUFlOztFQUV0QjtFQUNBLElBQUksQ0FBQ0EsZUFBZSxFQUFFO0lBQ3BCLE9BQU8yRCxRQUFRO0VBQ2pCOztFQUVBO0VBQ0EsSUFBTTBqQixPQUFPLEdBQUd0bkIsUUFBUSxDQUFDdUYsSUFBSSxDQUFDLFVBQUFnQyxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDbkosRUFBRSxLQUFLNkIsZUFBZSxDQUFDN0IsRUFBRTtFQUFBLEVBQUM7O0VBRS9EO0VBQ0EsSUFBTXdSLFFBQVEsR0FBRzBYLE9BQU8sSUFBSTN2QixvQkFBb0IsQ0FBQzJ2QixPQUFPLENBQUM7RUFDekQsSUFBSTFYLFFBQVEsSUFBSTBYLE9BQU8sRUFBRTtJQUN2QjtJQUNBLElBQUlBLE9BQU8sQ0FBQ0osVUFBVSxFQUFFSSxPQUFPLENBQUNKLFVBQVUsQ0FBQzl5QixJQUFJLEdBQUdBLElBQUksQ0FBQ2t6QixPQUFnQyxDQUFDO0lBQ3hGLElBQU1DLFlBQVksR0FBR2h3QixvQkFBb0IsQ0FBQyt2QixPQUFPLEVBQUUxWCxRQUFRLENBQUM7SUFDNUQsSUFBTTRYLFNBQVMsR0FBR3RrQixLQUFLLENBQUN0QyxPQUFPLENBQUNtRixTQUFTLENBQUMsVUFBQTBoQixHQUFHO01BQUEsT0FBSUEsR0FBRyxDQUFDcnBCLEVBQUUsS0FBS3dSLFFBQVE7SUFBQSxFQUFDO0lBQ3JFO0lBQ0EsT0FBT1YsZ0JBQWdCLENBQUN0TCxRQUFRLEVBQUU7TUFDaENQLEdBQUcsRUFBRW1rQixTQUFTO01BQ2Q3Z0IsSUFBSSxFQUFFLE9BQU87TUFDYlMsS0FBSyxFQUFFbWdCO0lBQ1QsQ0FBQyxDQUFDO0VBQ0o7RUFFQSxPQUFPM2pCLFFBQVE7QUFDakI7QUFFQSxTQUFTOGpCLGlCQUFpQkEsQ0FBQ3hrQixLQUFlLEVBQUVva0IsT0FBd0IsRUFBa0I7RUFBQSxJQUFBSyxxQkFBQTtFQUNwRixJQUFJLEVBQUNMLE9BQU8sYUFBUEEsT0FBTyxlQUFQQSxPQUFPLENBQUVscEIsRUFBRSxHQUFFO0lBQ2hCLE9BQU9rcEIsT0FBTyxJQUFJLElBQUk7RUFDeEI7RUFDQSxJQUFJLEVBQUFLLHFCQUFBLEdBQUF6a0IsS0FBSyxDQUFDZCxNQUFNLENBQUNuQyxlQUFlLGNBQUEwbkIscUJBQUEsdUJBQTVCQSxxQkFBQSxDQUE4QnZwQixFQUFFLE1BQUtrcEIsT0FBTyxDQUFDbHBCLEVBQUUsRUFBRTtJQUNuRCxPQUFPOEUsS0FBSyxDQUFDZCxNQUFNLENBQUNuQyxlQUFlO0VBQ3JDO0VBQ0EsSUFBTTJuQixVQUFVLEdBQUcxa0IsS0FBSyxDQUFDZCxNQUFNLENBQUNwQyxRQUFRLENBQUN1RixJQUFJLENBQUMsVUFBQXNpQixJQUFJO0lBQUEsT0FBSUEsSUFBSSxDQUFDenBCLEVBQUUsS0FBS2twQixPQUFPLENBQUNscEIsRUFBRTtFQUFBLEVBQUM7RUFDN0UsSUFBSXdwQixVQUFVLEVBQUU7SUFDZCxPQUFPQSxVQUFVO0VBQ25CO0VBQ0EsSUFBTWhZLFFBQVEsR0FBR2pZLG9CQUFvQixDQUFDMnZCLE9BQU8sQ0FBQztFQUM5QyxJQUFJMVgsUUFBUSxFQUFFO0lBQ1osSUFBTXZGLE1BQU0sR0FBR25ILEtBQUssQ0FBQ3RDLE9BQU8sQ0FBQzJFLElBQUksQ0FBQyxVQUFBc2lCLElBQUk7TUFBQSxPQUFJQSxJQUFJLENBQUN6cEIsRUFBRSxLQUFLd1IsUUFBUTtJQUFBLEVBQUM7SUFDL0QsSUFBSXZGLE1BQU0sYUFBTkEsTUFBTSxlQUFOQSxNQUFNLENBQUVqRCxLQUFLLEVBQUU7TUFDakIsT0FBT2lELE1BQU0sQ0FBQ2pELEtBQUs7SUFDckI7RUFDRjtFQUNBLE9BQU9rZ0IsT0FBTztBQUNoQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU1EsaUNBQWlDQSxDQUMvQzVrQixLQUFlLEVBQUE2a0IsTUFBQSxFQUVMO0VBQUEsSUFBQUMsc0JBQUE7RUFBQSxJQURUVixPQUFPLEdBQUFTLE1BQUEsQ0FBUFQsT0FBTztJQUFFSixVQUFVLEdBQUFhLE1BQUEsQ0FBVmIsVUFBVTtFQUVwQixJQUFJLENBQUMxdUIsb0JBQW9CLENBQUMsQ0FBQyxDQUFDaXVCLHVCQUF1QixFQUFFO0lBQ25ELE9BQU92akIsS0FBSztFQUNkO0VBRUEsSUFBTStrQixNQUFNLEdBQUdQLGlCQUFpQixDQUFDeGtCLEtBQUssRUFBRW9rQixPQUFPLENBQUM7RUFDaEQsSUFBSSxFQUFDVyxNQUFNLGFBQU5BLE1BQU0sZUFBTkEsTUFBTSxDQUFFN3BCLEVBQUUsR0FBRTtJQUNmLE9BQU84RSxLQUFLO0VBQ2Q7RUFFQSxJQUFNZ2xCLFdBQVcsR0FBRzd3QiwwQkFBMEIsQ0FBQzR3QixNQUFNLEVBQUVmLFVBQVUsQ0FBQztFQUNsRSxJQUFNdFgsUUFBUSxHQUFHalksb0JBQW9CLENBQUN1d0IsV0FBVyxDQUFDO0VBQ2xELElBQU1DLFVBQVUsR0FBQTdrQixhQUFBLENBQUFBLGFBQUEsS0FDWEosS0FBSyxDQUFDZCxNQUFNO0lBQ2ZwQyxRQUFRLEVBQUU0UCxRQUFRLEdBQ2QxTSxLQUFLLENBQUNkLE1BQU0sQ0FBQ3BDLFFBQVEsR0FDckJrRCxLQUFLLENBQUNkLE1BQU0sQ0FBQ3BDLFFBQVEsQ0FBQ3VELEdBQUcsQ0FBQyxVQUFBc2tCLElBQUk7TUFBQSxPQUFLQSxJQUFJLENBQUN6cEIsRUFBRSxLQUFLOHBCLFdBQVcsQ0FBQzlwQixFQUFFLEdBQUc4cEIsV0FBVyxHQUFHTCxJQUFJO0lBQUEsQ0FBQyxDQUFDO0lBQ3hGNW5CLGVBQWUsRUFDYixFQUFBK25CLHNCQUFBLEdBQUE5a0IsS0FBSyxDQUFDZCxNQUFNLENBQUNuQyxlQUFlLGNBQUErbkIsc0JBQUEsdUJBQTVCQSxzQkFBQSxDQUE4QjVwQixFQUFFLE1BQUs4cEIsV0FBVyxDQUFDOXBCLEVBQUUsR0FDL0M4cEIsV0FBVyxHQUNYaGxCLEtBQUssQ0FBQ2QsTUFBTSxDQUFDbkM7RUFBZSxFQUNuQztFQUVELElBQU0yRixTQUFTLEdBQUF0QyxhQUFBLENBQUFBLGFBQUEsS0FDVkosS0FBSztJQUNSZCxNQUFNLEVBQUUrbEI7RUFBVSxFQUNuQjtFQUVELElBQUksQ0FBQ3ZZLFFBQVEsRUFBRTtJQUNiLE9BQU9oSyxTQUFTO0VBQ2xCO0VBRUEsSUFBTTRoQixTQUFTLEdBQUd0a0IsS0FBSyxDQUFDdEMsT0FBTyxDQUFDbUYsU0FBUyxDQUFDLFVBQUE4aEIsSUFBSTtJQUFBLE9BQUlBLElBQUksQ0FBQ3pwQixFQUFFLEtBQUt3UixRQUFRO0VBQUEsRUFBQztFQUN2RSxJQUFJNFgsU0FBUyxHQUFHLENBQUMsRUFBRTtJQUNqQixPQUFPNWhCLFNBQVM7RUFDbEI7RUFFQSxPQUFPc0osZ0JBQWdCLENBQUN0SixTQUFTLEVBQUU7SUFDakN2QyxHQUFHLEVBQUVta0IsU0FBUztJQUNkN2dCLElBQUksRUFBRSxPQUFPO0lBQ2JTLEtBQUssRUFBRTdQLG9CQUFvQixDQUFDMndCLFdBQVcsRUFBRXRZLFFBQVE7RUFDbkQsQ0FBQyxDQUFDO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU13WSx5QkFBeUIsR0FBRyxTQUE1QkEseUJBQXlCQSxDQUNwQ2xsQixLQUFlLEVBQUFtbEIsTUFBQSxFQUVGO0VBQUEsSUFEWmYsT0FBTyxHQUFBZSxNQUFBLENBQVBmLE9BQU87SUFBRWdCLGdCQUFnQixHQUFBRCxNQUFBLENBQWhCQyxnQkFBZ0I7RUFFMUI7RUFDQSxJQUFJcm9CLGVBQWUsR0FBR3FuQixPQUFPO0VBQzdCLElBQUlBLE9BQU8sYUFBUEEsT0FBTyxlQUFQQSxPQUFPLENBQUVKLFVBQVUsRUFBRTtJQUN2QmpuQixlQUFlLEdBQUFxRCxhQUFBLENBQUFBLGFBQUEsS0FDVmdrQixPQUFPO01BQ1ZKLFVBQVUsRUFBQTVqQixhQUFBLENBQUFBLGFBQUEsS0FDTGdrQixPQUFPLENBQUNKLFVBQVU7UUFDckI5eUIsSUFBSSxFQUFFQSxJQUFJLENBQUNrekIsT0FBZ0M7TUFBQztJQUM3QyxFQUNGO0VBQ0g7RUFDQSxPQUFBaGtCLGFBQUEsQ0FBQUEsYUFBQSxLQUNLSixLQUFLO0lBQ1JkLE1BQU0sRUFBQWtCLGFBQUEsQ0FBQUEsYUFBQSxLQUNESixLQUFLLENBQUNkLE1BQU07TUFDZm5DLGVBQWUsRUFBZkEsZUFBZTtNQUNmcW9CLGdCQUFnQixFQUFoQkE7SUFBZ0I7RUFDakI7QUFFTCxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTQyxvQkFBb0JBLENBQ2xDcmxCLEtBQWUsRUFBQXNsQixNQUFBLEVBRUw7RUFBQSxJQURUbEIsT0FBTyxHQUFBa0IsTUFBQSxDQUFQbEIsT0FBTztFQUVSLElBQUksQ0FBQ0EsT0FBTyxFQUFFO0lBQ1osT0FBT3BrQixLQUFLO0VBQ2Q7RUFFQSxJQUFNVSxRQUFRLEdBQUFOLGFBQUEsQ0FBQUEsYUFBQSxLQUNUSixLQUFLO0lBQ1JkLE1BQU0sRUFBQWtCLGFBQUEsQ0FBQUEsYUFBQSxLQUNESixLQUFLLENBQUNkLE1BQU07TUFDZm5DLGVBQWUsRUFBRTtJQUFJO0VBQ3RCLEVBQ0Y7RUFFRCxJQUFJdEksb0JBQW9CLENBQUMydkIsT0FBTyxDQUFDLEVBQUU7SUFDakMsSUFBTUUsU0FBUyxHQUFHNWpCLFFBQVEsQ0FBQ2hELE9BQU8sQ0FBQ21GLFNBQVMsQ0FBQyxVQUFBd0IsQ0FBQztNQUFBLE9BQUlBLENBQUMsQ0FBQ25KLEVBQUUsS0FBS3pHLG9CQUFvQixDQUFDMnZCLE9BQU8sQ0FBQztJQUFBLEVBQUM7SUFFekYsT0FBT0UsU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHelQsbUJBQW1CLENBQUNuUSxRQUFRLEVBQUU7TUFBQ1AsR0FBRyxFQUFFbWtCO0lBQVMsQ0FBQyxDQUFDLEdBQUc1akIsUUFBUTtFQUNwRjs7RUFFQTtFQUNBLElBQU1zUSxTQUFTLEdBQUE1USxhQUFBLENBQUFBLGFBQUEsS0FDVkosS0FBSyxDQUFDZCxNQUFNO0lBQ2ZwQyxRQUFRLEVBQUVrRCxLQUFLLENBQUNkLE1BQU0sQ0FBQ3BDLFFBQVEsQ0FBQ3FLLE1BQU0sQ0FBQyxVQUFBOUMsQ0FBQztNQUFBLE9BQUlBLENBQUMsQ0FBQ25KLEVBQUUsS0FBS2twQixPQUFPLENBQUNscEIsRUFBRTtJQUFBLEVBQUM7SUFDaEU2QixlQUFlLEVBQUU7RUFBSSxFQUN0QjtFQUVELE9BQUFxRCxhQUFBLENBQUFBLGFBQUEsS0FDS0osS0FBSztJQUNSZCxNQUFNLEVBQUU4UjtFQUFTO0FBRXJCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTdVUsNEJBQTRCQSxDQUMxQ3ZsQixLQUFlLEVBQ2Y4WixPQUEyRCxFQUNqRDtFQUNWLElBQU81WixLQUFLLEdBQWE0WixPQUFPLENBQXpCNVosS0FBSztJQUFFa2tCLE9BQU8sR0FBSXRLLE9BQU8sQ0FBbEJzSyxPQUFPO0VBQ3JCLElBQU0xWCxRQUFRLEdBQUdqWSxvQkFBb0IsQ0FBQzJ2QixPQUFPLENBQUM7O0VBRTlDO0VBQ0EsSUFBSUUsU0FBUztFQUNiLElBQUl2aEIsVUFBVSxHQUFHLENBQUM3QyxLQUFLLENBQUNoRixFQUFFLENBQUM7RUFDM0IsSUFBSXdGLFFBQVEsR0FBR1YsS0FBSztFQUNwQjtFQUNBLElBQUkwTSxRQUFRLEVBQUU7SUFDWjRYLFNBQVMsR0FBR3RrQixLQUFLLENBQUN0QyxPQUFPLENBQUNtRixTQUFTLENBQUMsVUFBQXdCLENBQUM7TUFBQSxPQUFJQSxDQUFDLENBQUNuSixFQUFFLEtBQUt3UixRQUFRO0lBQUEsRUFBQztJQUUzRCxJQUFJLENBQUMxTSxLQUFLLENBQUN0QyxPQUFPLENBQUM0bUIsU0FBUyxDQUFDLEVBQUU7TUFDN0I7TUFDQTtNQUNBO01BQ0EsSUFBTWtCLGlCQUFpQixHQUFBcGxCLGFBQUEsQ0FBQUEsYUFBQSxLQUNsQmdrQixPQUFPO1FBQ1ZKLFVBQVUsRUFBQTVqQixhQUFBLENBQUFBLGFBQUEsS0FDTGdrQixPQUFPLENBQUNKLFVBQVU7VUFDckJ0WCxRQUFRLEVBQUU7UUFBSTtNQUNmLEVBQ0Y7TUFFRCxPQUFBdE0sYUFBQSxDQUFBQSxhQUFBLEtBQ0tKLEtBQUs7UUFDUmQsTUFBTSxFQUFBa0IsYUFBQSxDQUFBQSxhQUFBLEtBQ0RKLEtBQUssQ0FBQ2QsTUFBTTtVQUNmcEMsUUFBUSxLQUFBMEssTUFBQSxDQUFBQyxrQkFBQSxDQUFNekgsS0FBSyxDQUFDZCxNQUFNLENBQUNwQyxRQUFRLElBQUUwb0IsaUJBQWlCLEVBQUM7VUFDdkR6b0IsZUFBZSxFQUFFeW9CO1FBQWlCO01BQ25DO0lBRUw7SUFDQSxJQUFNcmUsTUFBTSxHQUFHbkgsS0FBSyxDQUFDdEMsT0FBTyxDQUFDNG1CLFNBQVMsQ0FBQztJQUN2QyxJQUFBbUIsZUFBQSxHQUF1QnRlLE1BQU0sQ0FBdEJ0QixPQUFPO01BQVBBLE9BQU8sR0FBQTRmLGVBQUEsY0FBRyxFQUFFLEdBQUFBLGVBQUE7SUFDbkIsSUFBTUMsZUFBZSxHQUFHN2YsT0FBTyxDQUFDd0IsUUFBUSxDQUFDbkgsS0FBSyxDQUFDaEYsRUFBRSxDQUFDO0lBRWxENkgsVUFBVSxHQUFHMmlCLGVBQWU7SUFDeEI7SUFDQTdmLE9BQU8sQ0FBQ3NCLE1BQU0sQ0FBQyxVQUFBN0UsQ0FBQztNQUFBLE9BQUlBLENBQUMsS0FBS3BDLEtBQUssQ0FBQ2hGLEVBQUU7SUFBQSxFQUFDLE1BQUFzTSxNQUFBLENBQUFDLGtCQUFBLENBQy9CNUIsT0FBTyxJQUFFM0YsS0FBSyxDQUFDaEYsRUFBRSxFQUFDOztJQUUxQjtJQUNBLElBQUksQ0FBQzZILFVBQVUsQ0FBQ3BDLE1BQU0sRUFBRTtNQUN0QixJQUFNZ2xCLGFBQWEsR0FBR3Z4QixlQUFlLENBQUNnd0IsT0FBTyxDQUFDO01BQzlDLElBQU13QixrQkFBa0IsR0FBRy9VLG1CQUFtQixDQUFDblEsUUFBUSxFQUFFO1FBQUNQLEdBQUcsRUFBRW1rQjtNQUFTLENBQUMsQ0FBQztNQUMxRSxPQUFBbGtCLGFBQUEsQ0FBQUEsYUFBQSxLQUNLd2xCLGtCQUFrQjtRQUNyQjFtQixNQUFNLEVBQUFrQixhQUFBLENBQUFBLGFBQUEsS0FDRHdsQixrQkFBa0IsQ0FBQzFtQixNQUFNO1VBQzVCcEMsUUFBUSxLQUFBMEssTUFBQSxDQUFBQyxrQkFBQSxDQUFNbWUsa0JBQWtCLENBQUMxbUIsTUFBTSxDQUFDcEMsUUFBUSxJQUFFNm9CLGFBQWEsRUFBQztVQUNoRTVvQixlQUFlLEVBQUU0b0I7UUFBYTtNQUMvQjtJQUVMO0VBQ0YsQ0FBQyxNQUFNO0lBQ0w7SUFDQSxJQUFNdlosU0FBUyxHQUFHN1gscUJBQXFCLENBQUMsRUFBRSxFQUFFNnZCLE9BQU8sQ0FBQztJQUNwREUsU0FBUyxHQUFHdGtCLEtBQUssQ0FBQ3RDLE9BQU8sQ0FBQ2lELE1BQU07O0lBRWhDO0lBQ0FELFFBQVEsR0FBQU4sYUFBQSxDQUFBQSxhQUFBLEtBQ0hKLEtBQUs7TUFDUnRDLE9BQU8sS0FBQThKLE1BQUEsQ0FBQUMsa0JBQUEsQ0FBTXpILEtBQUssQ0FBQ3RDLE9BQU8sSUFBRTBPLFNBQVMsRUFBQztNQUN0Q2xOLE1BQU0sRUFBQWtCLGFBQUEsQ0FBQUEsYUFBQSxLQUNESixLQUFLLENBQUNkLE1BQU07UUFDZnBDLFFBQVEsRUFBRWtELEtBQUssQ0FBQ2QsTUFBTSxDQUFDcEMsUUFBUSxDQUFDcUssTUFBTSxDQUFDLFVBQUE5QyxDQUFDO1VBQUEsT0FBSUEsQ0FBQyxDQUFDbkosRUFBRSxLQUFLa3BCLE9BQU8sQ0FBQ2xwQixFQUFFO1FBQUEsRUFBQztRQUNoRTZCLGVBQWUsRUFBRXFQLFNBQVMsQ0FBQ2xJO01BQUs7SUFDakMsRUFDRjtFQUNIO0VBRUEsT0FBTzhILGdCQUFnQixDQUFDdEwsUUFBUSxFQUFFO0lBQ2hDUCxHQUFHLEVBQUVta0IsU0FBUztJQUNkN2dCLElBQUksRUFBRSxTQUFTO0lBQ2ZTLEtBQUssRUFBRW5CO0VBQ1QsQ0FBQyxDQUFDO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVM4aUIsZ0NBQWdDQSxDQUM5QzdsQixLQUFlLEVBQ2Y4WixPQUErRCxFQUNyRDtFQUNWLElBQU9zSyxPQUFPLEdBQUl0SyxPQUFPLENBQWxCc0ssT0FBTztFQUVkLElBQU1oWSxTQUFTLEdBQUc3WCxxQkFBcUIsQ0FBQyxFQUFFLEVBQUU2dkIsT0FBTyxDQUFDO0VBQ3BELElBQU1FLFNBQVMsR0FBR3RrQixLQUFLLENBQUN0QyxPQUFPLENBQUNpRCxNQUFNO0VBRXRDLElBQU1ELFFBQWtCLEdBQUFOLGFBQUEsQ0FBQUEsYUFBQSxLQUNuQkosS0FBSztJQUNSdEMsT0FBTyxLQUFBOEosTUFBQSxDQUFBQyxrQkFBQSxDQUFNekgsS0FBSyxDQUFDdEMsT0FBTyxJQUFFME8sU0FBUyxFQUFDO0lBQ3RDbE4sTUFBTSxFQUFBa0IsYUFBQSxDQUFBQSxhQUFBLEtBQ0RKLEtBQUssQ0FBQ2QsTUFBTTtNQUNmcEMsUUFBUSxFQUFFa0QsS0FBSyxDQUFDZCxNQUFNLENBQUNwQyxRQUFRLENBQUNxSyxNQUFNLENBQUMsVUFBQTlDLENBQUM7UUFBQSxPQUFJQSxDQUFDLENBQUNuSixFQUFFLEtBQUtrcEIsT0FBTyxDQUFDbHBCLEVBQUU7TUFBQSxFQUFDO01BQ2hFNkIsZUFBZSxFQUFFcVAsU0FBUyxDQUFDbEksS0FBSztNQUNoQ3RILElBQUksRUFBRTlHLFlBQVksQ0FBQ3F1QjtJQUFJO0VBQ3hCLEVBQ0Y7RUFFRCxJQUFNMkIsZUFBZSxHQUFHdDBCLEdBQUcsQ0FBQ3NvQixPQUFPLEVBQUUsaUJBQWlCLENBQUM7RUFDdkQsSUFBTWlNLFdBQVcsR0FBR3hjLEtBQUssQ0FBQ0MsT0FBTyxDQUFDc2MsZUFBZSxDQUFDLEdBQzlDQSxlQUFlLEdBQ2Y5bEIsS0FBSyxDQUFDM0MsTUFBTSxDQUFDOEosTUFBTSxDQUFDLFVBQUE3RSxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDakgsTUFBTSxDQUFDdUYsU0FBUztFQUFBLEVBQUMsQ0FBQ1AsR0FBRyxDQUFDLFVBQUFpQyxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDcEgsRUFBRTtFQUFBLEVBQUM7RUFFL0QsT0FBTzhRLGdCQUFnQixDQUFDdEwsUUFBUSxFQUFFO0lBQ2hDUCxHQUFHLEVBQUVta0IsU0FBUztJQUNkN2dCLElBQUksRUFBRSxTQUFTO0lBQ2ZTLEtBQUssRUFBRTZoQjtFQUNULENBQUMsQ0FBQztBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTQyxzQkFBc0JBLENBQ3BDaG1CLEtBQWUsRUFBQWltQixNQUFBLEVBRUw7RUFBQSxJQURUempCLE1BQU0sR0FBQXlqQixNQUFBLENBQU56akIsTUFBTTtJQUFFMGpCLE1BQU0sR0FBQUQsTUFBQSxDQUFOQyxNQUFNO0lBQUV0cEIsSUFBSSxHQUFBcXBCLE1BQUEsQ0FBSnJwQixJQUFJO0VBRXJCLElBQU0yRixPQUFPLEdBQUd2QyxLQUFLLENBQUNwQyxRQUFRLENBQUM0RSxNQUFNLENBQUM7RUFDdEMsSUFBSSxDQUFDRCxPQUFPLEVBQUU7SUFDWixPQUFPdkMsS0FBSztFQUNkO0VBQ0EsSUFBSW1tQixRQUFRLEdBQUd2cEIsSUFBSTtFQUNuQixJQUFJLENBQUN1cEIsUUFBUSxFQUFFO0lBQ2IsSUFBTUMsV0FBVyxHQUFHNTBCLEdBQUcsQ0FBQytRLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRTJqQixNQUFNLENBQUMsQ0FBQztJQUN4RDtJQUNBQyxRQUFRLEdBQUdDLFdBQVcsR0FDbEIva0IsTUFBTSxDQUFDQyxJQUFJLENBQUMvSyxVQUFVLENBQUMsQ0FBQzhMLElBQUksQ0FBQyxVQUFBNmEsQ0FBQztNQUFBLE9BQUlBLENBQUMsS0FBS2tKLFdBQVc7SUFBQSxFQUFDLEdBQ3BEN3ZCLFVBQVUsQ0FBQzh2QixTQUFTO0VBQzFCO0VBRUEsSUFBTUMsTUFBTSxHQUFHeHRCLG1CQUFtQixDQUFDeUosT0FBTyxFQUFFMmpCLE1BQU0sRUFBRUMsUUFBUSxDQUFDO0VBQzdELE9BQU9seEIsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFdU4sTUFBTSxDQUFDLEVBQUU4akIsTUFBTSxFQUFFdG1CLEtBQUssQ0FBQztBQUNqRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU3VtQixxQkFBcUJBLENBQ25Ddm1CLEtBQWUsRUFBQXdtQixNQUFBLEVBRUw7RUFBQSxJQURUaGtCLE1BQU0sR0FBQWdrQixNQUFBLENBQU5oa0IsTUFBTTtJQUFFMGpCLE1BQU0sR0FBQU0sTUFBQSxDQUFOTixNQUFNO0VBRWYsSUFBTTNqQixPQUFPLEdBQUd2QyxLQUFLLENBQUNwQyxRQUFRLENBQUM0RSxNQUFNLENBQUM7RUFDdEMsSUFBSSxDQUFDRCxPQUFPLEVBQUU7SUFDWixPQUFPdkMsS0FBSztFQUNkO0VBQ0EsSUFBTTZPLFVBQVUsR0FBR2pXLGVBQWUsQ0FBQzJKLE9BQU8sRUFBRTJqQixNQUFNLENBQUM7RUFFbkQsT0FBT2p4QixHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUV1TixNQUFNLENBQUMsRUFBRXFNLFVBQVUsRUFBRTdPLEtBQUssQ0FBQztBQUNyRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTeW1CLHNCQUFzQkEsQ0FDcEN6bUIsS0FBZSxFQUFBMG1CLE1BQUEsRUFFTDtFQUFBLElBRFRsa0IsTUFBTSxHQUFBa2tCLE1BQUEsQ0FBTmxrQixNQUFNO0lBQUUwakIsTUFBTSxHQUFBUSxNQUFBLENBQU5SLE1BQU07RUFFZixJQUFNM2pCLE9BQU8sR0FBR3ZDLEtBQUssQ0FBQ3BDLFFBQVEsQ0FBQzRFLE1BQU0sQ0FBQztFQUN0QyxJQUFJLENBQUNELE9BQU8sRUFBRTtJQUNaLE9BQU92QyxLQUFLO0VBQ2Q7RUFDQSxJQUFNMm1CLFFBQVEsR0FBR3BrQixPQUFPLENBQUNpRyxNQUFNLENBQUMzRixTQUFTLENBQUMsVUFBQXdCLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUM2QyxJQUFJLEtBQUtnZixNQUFNO0VBQUEsRUFBQztFQUNqRSxJQUFJUyxRQUFRLEdBQUcsQ0FBQyxFQUFFO0lBQ2hCLE9BQU8zbUIsS0FBSztFQUNkO0VBQ0EsSUFBTzJDLElBQUksR0FBSUosT0FBTyxDQUFDaUcsTUFBTSxDQUFDbWUsUUFBUSxDQUFDLENBQWhDaGtCLElBQUk7RUFDWCxJQUFNaWtCLElBQUksR0FBR3JrQixPQUFPLENBQUNza0IsYUFBYSxDQUMvQnhtQixHQUFHLENBQUMsVUFBQXltQixHQUFHO0lBQUEsT0FBSS94QixlQUFlLENBQUMreEIsR0FBRyxDQUFDQyxPQUFPLENBQUNKLFFBQVEsQ0FBQyxFQUFFaGtCLElBQUksQ0FBQztFQUFBLEdBQUUsSUFBSSxDQUFDLENBQzlEcWtCLElBQUksQ0FBQyxJQUFJLENBQUM7RUFFYjcxQixJQUFJLENBQUN5MUIsSUFBSSxDQUFDO0VBRVYsT0FBTzVtQixLQUFLO0FBQ2Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU2luQiw2QkFBNkJBLENBQzNDam5CLEtBQWUsRUFBQWtuQixNQUFBLEVBRUw7RUFBQSxJQURUMWtCLE1BQU0sR0FBQTBrQixNQUFBLENBQU4xa0IsTUFBTTtJQUFFMmtCLE9BQU8sR0FBQUQsTUFBQSxDQUFQQyxPQUFPO0VBRWhCLElBQU01a0IsT0FBTyxHQUFHdkMsS0FBSyxDQUFDcEMsUUFBUSxDQUFDNEUsTUFBTSxDQUFDO0VBQ3RDLElBQUksQ0FBQ0QsT0FBTyxFQUFFO0lBQ1osT0FBT3ZDLEtBQUs7RUFDZDtFQUNBLElBQUl5RyxTQUFTLEdBQUdsRSxPQUFPLENBQUNpRyxNQUFNO0VBQzlCbkgsTUFBTSxDQUFDQyxJQUFJLENBQUM2bEIsT0FBTyxDQUFDLENBQUM1bEIsT0FBTyxDQUFDLFVBQUEya0IsTUFBTSxFQUFJO0lBQ3JDLElBQU1TLFFBQVEsR0FBR3BrQixPQUFPLENBQUNpRyxNQUFNLENBQUMzRixTQUFTLENBQUMsVUFBQXdCLENBQUM7TUFBQSxPQUFJQSxDQUFDLENBQUM2QyxJQUFJLEtBQUtnZixNQUFNO0lBQUEsRUFBQztJQUNqRSxJQUFJUyxRQUFRLElBQUksQ0FBQyxFQUFFO01BQ2pCLElBQU1TLGFBQWEsR0FBR0QsT0FBTyxDQUFDakIsTUFBTSxDQUFDO01BQ3JDLElBQU1qZixLQUFLLEdBQUdSLFNBQVMsQ0FBQ2tnQixRQUFRLENBQUM7TUFDakNsZ0IsU0FBUyxHQUFHNU8sS0FBSyxDQUFDSixNQUFNLENBQUM7UUFBQzJ2QixhQUFhLEVBQWJBO01BQWEsQ0FBQyxDQUFDLENBQUNuZ0IsS0FBSyxDQUFpQixDQUFDLENBQy9EUixTQUNGLENBQVk7SUFDZDtFQUNGLENBQUMsQ0FBQztFQUVGLElBQU1vSSxVQUFVLEdBQUduVyxrQkFBa0IsQ0FBQzZKLE9BQU8sRUFBRTtJQUFDaUcsTUFBTSxFQUFFL0I7RUFBb0IsQ0FBQyxDQUFDO0VBQzlFLElBQUkvRixRQUFRLEdBQUcvSSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUNGLE1BQU0sQ0FBQWlPLGVBQUEsS0FBR2xELE1BQU0sRUFBR3FNLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzdPLEtBQUssQ0FBQzs7RUFFdkU7RUFDQVUsUUFBUSxHQUFBTixhQUFBLENBQUFBLGFBQUEsS0FDSE0sUUFBUTtJQUNYckQsTUFBTSxFQUFFcUQsUUFBUSxDQUFDckQsTUFBTSxDQUFDZ0QsR0FBRyxDQUFDLFVBQUFILEtBQUs7TUFBQSxJQUFBbW5CLGFBQUE7TUFBQSxPQUMvQixDQUFBQSxhQUFBLEdBQUFubkIsS0FBSyxDQUFDN0UsTUFBTSxjQUFBZ3NCLGFBQUEsZ0JBQUFBLGFBQUEsR0FBWkEsYUFBQSxDQUFjQyxVQUFVLGNBQUFELGFBQUEsZUFBeEJBLGFBQUEsQ0FBMEJuZ0IsSUFBSSxJQUFJaEgsS0FBSyxDQUFDN0UsTUFBTSxDQUFDaXNCLFVBQVUsQ0FBQ3BnQixJQUFJLElBQUlpZ0IsT0FBTyxHQUNyRWpuQixLQUFLLENBQUNtRixpQkFBaUIsQ0FBQztRQUN0QmlpQixVQUFVLEVBQUFsbkIsYUFBQSxDQUFBQSxhQUFBLEtBQ0xGLEtBQUssQ0FBQzdFLE1BQU0sQ0FBQ2lzQixVQUFVO1VBQzFCRixhQUFhLEVBQUVELE9BQU8sQ0FBQ2puQixLQUFLLENBQUM3RSxNQUFNLENBQUNpc0IsVUFBVSxDQUFDcGdCLElBQUk7UUFBQztNQUV4RCxDQUFDLENBQUMsR0FDRmhILEtBQUs7SUFBQSxDQUNYO0VBQUMsRUFDRjtFQUVELE9BQU9RLFFBQVE7QUFDakI7QUFPQSxTQUFTNm1CLGNBQWNBLENBQUNDLFdBQWdDLEVBQXlCO0VBQy9FLElBQUlBLFdBQVcsSUFBSSxhQUFhLElBQUlBLFdBQVcsSUFBSWplLEtBQUssQ0FBQ0MsT0FBTyxDQUFDZ2UsV0FBVyxDQUFDQyxXQUFXLENBQUMsRUFBRTtJQUN6RixPQUFPRCxXQUFXLENBQUNDLFdBQVc7RUFDaEM7RUFDQSxPQUFPM3BCLFNBQVM7QUFDbEI7QUFFQSxTQUFTNHBCLGFBQWFBLENBQUEsRUFBa0I7RUFDdEMsT0FBTyxJQUFJQyxPQUFPLENBQUMsVUFBQUMsT0FBTyxFQUFJO0lBQzVCQyxVQUFVLENBQUNELE9BQU8sRUFBRSxDQUFDLENBQUM7RUFDeEIsQ0FBQyxDQUFDO0FBQ0o7QUFBQyxTQUVjRSw4QkFBOEJBLENBQUFDLEVBQUE7RUFBQSxPQUFBQywrQkFBQSxDQUFBaEYsS0FBQSxPQUFBcGMsU0FBQTtBQUFBO0FBQUEsU0FBQW9oQixnQ0FBQTtFQUFBQSwrQkFBQSxHQUFBQyxpQkFBQSxjQUFBQyxtQkFBQSxDQUFBQyxJQUFBLENBQTdDLFNBQUFDLFFBQUFDLE1BQUE7SUFBQSxJQUFBOWxCLE9BQUEsRUFBQTBFLEtBQUEsRUFBQXVnQixXQUFBLEVBQUFDLFdBQUEsRUFBQS9lLE1BQUEsRUFBQVcsTUFBQTtJQUFBLE9BQUE2ZSxtQkFBQSxDQUFBSSxJQUFBLFVBQUFDLFNBQUFDLFFBQUE7TUFBQSxrQkFBQUEsUUFBQSxDQUFBeG5CLElBQUEsR0FBQXduQixRQUFBLENBQUF2bkIsSUFBQTtRQUFBO1VBQStDc0IsT0FBTyxHQUFBOGxCLE1BQUEsQ0FBUDlsQixPQUFPLEVBQUUwRSxLQUFLLEdBQUFvaEIsTUFBQSxDQUFMcGhCLEtBQUs7VUFBQXVoQixRQUFBLENBQUF2bkIsSUFBQTtVQUFBLE9BRXJEeW1CLGFBQWEsQ0FBQyxDQUFDO1FBQUE7VUFDZkYsV0FBVyxHQUFHdmdCLEtBQUssQ0FBQ3VnQixXQUFXLElBQUlqbEIsT0FBTyxDQUFDa21CLG9CQUFvQixDQUFDeGhCLEtBQUssQ0FBQ0MsSUFBSSxDQUFDO1VBQzNFdWdCLFdBQVcsR0FBR0YsY0FBYyxDQUFDQyxXQUFXLENBQUM7VUFDekM5ZSxNQUFNLEdBQUcrZSxXQUFXLGFBQVhBLFdBQVcsY0FBWEEsV0FBVyxHQUFJOXNCLG1CQUFtQixDQUFDNEgsT0FBTyxDQUFDc2tCLGFBQWEsRUFBRTVmLEtBQUssQ0FBQzBmLFFBQVEsQ0FBQztVQUFBNkIsUUFBQSxDQUFBdm5CLElBQUE7VUFBQSxPQUNuRXJHLG1CQUFtQixDQUFDO1lBQ3ZDOE4sTUFBTSxFQUFOQSxNQUFNO1lBQ05nZ0IsU0FBUyxFQUFFemhCLEtBQUssQ0FBQ3RFO1VBQ25CLENBQUMsQ0FBQztRQUFBO1VBSEkwRyxNQUFNLEdBQUFtZixRQUFBLENBQUFHLElBQUE7VUFBQSxPQUFBSCxRQUFBLENBQUFJLE1BQUEsV0FLTDtZQUFDdmYsTUFBTSxFQUFOQSxNQUFNO1lBQUVtZSxXQUFXLEVBQVhBO1VBQVcsQ0FBQztRQUFBO1FBQUE7VUFBQSxPQUFBZ0IsUUFBQSxDQUFBSyxJQUFBO01BQUE7SUFBQSxHQUFBVCxPQUFBO0VBQUEsQ0FDN0I7RUFBQSxPQUFBSiwrQkFBQSxDQUFBaEYsS0FBQSxPQUFBcGMsU0FBQTtBQUFBO0FBRUQsSUFBTWtpQixzQkFBc0IsR0FBR2ozQixJQUFJLENBQUNrM0IsV0FBVyxDQUM3Q2pCLDhCQUE4QixFQUM5Qix3QkFDRixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNrQixzQkFBc0JBLENBQ3BDaHBCLEtBQWUsRUFBQWlwQixNQUFBLEVBRUw7RUFBQSxJQURUem1CLE1BQU0sR0FBQXltQixNQUFBLENBQU56bUIsTUFBTTtJQUFFMG1CLFNBQVMsR0FBQUQsTUFBQSxDQUFUQyxTQUFTO0VBRWxCLElBQU1DLGdCQUFnQixHQUFHM3pCLE9BQU8sQ0FBQzB6QixTQUFTLENBQUM7RUFDM0MsSUFBTTNtQixPQUFPLEdBQUd2QyxLQUFLLENBQUNwQyxRQUFRLENBQUM0RSxNQUFNLENBQUM7RUFDdEMsSUFBTTRtQixZQUFZLEdBQUc3bUIsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUVpRyxNQUFNLENBQUNyQixNQUFNLENBQUMsVUFBQTlDLENBQUM7SUFBQSxPQUFJOGtCLGdCQUFnQixDQUFDOWhCLFFBQVEsQ0FBQ2hELENBQUMsQ0FBQzZDLElBQUksQ0FBQztFQUFBLEVBQUM7RUFDbkYsSUFBSSxDQUFDM0UsT0FBTyxJQUFJLENBQUM2bUIsWUFBWSxDQUFDem9CLE1BQU0sRUFBRTtJQUNwQyxPQUFPWCxLQUFLO0VBQ2Q7RUFFQSxJQUFNeUcsU0FBUyxHQUFHbEUsT0FBTyxDQUFDaUcsTUFBTSxDQUFDbkksR0FBRyxDQUFDLFVBQUE0RyxLQUFLO0lBQUEsT0FDeENraUIsZ0JBQWdCLENBQUM5aEIsUUFBUSxDQUFDSixLQUFLLENBQUNDLElBQUksQ0FBQyxHQUFBOUcsYUFBQSxDQUFBQSxhQUFBLEtBQU82RyxLQUFLO01BQUVvaUIsY0FBYyxFQUFFO0lBQUksS0FBSXBpQixLQUFLO0VBQUEsQ0FDbEYsQ0FBQztFQUNELElBQU00SCxVQUFVLEdBQUduVyxrQkFBa0IsQ0FBQzZKLE9BQU8sRUFBRTtJQUFDaUcsTUFBTSxFQUFFL0I7RUFBUyxDQUFDLENBQUM7RUFFbkUsSUFBTTZpQixLQUFLLEdBQUdGLFlBQVksQ0FBQy9vQixHQUFHLENBQUMsVUFBQWdFLENBQUM7SUFBQSxPQUM5QnlrQixzQkFBc0IsQ0FBQztNQUFDdm1CLE9BQU8sRUFBRXNNLFVBQVU7TUFBRTVILEtBQUssRUFBRTVDO0lBQUMsQ0FBQyxDQUFDLENBQUN3YyxLQUFLLENBQzNELFVBQUEwSSxNQUFBO01BQUEsSUFBRWxnQixNQUFNLEdBQUFrZ0IsTUFBQSxDQUFObGdCLE1BQU07UUFBRW1lLFdBQVcsR0FBQStCLE1BQUEsQ0FBWC9CLFdBQVc7TUFBQSxPQUFNajBCLHNCQUFzQixDQUFDc2IsVUFBVSxDQUFDM1QsRUFBRSxFQUFFbUosQ0FBQyxDQUFDNkMsSUFBSSxFQUFFbUMsTUFBTSxFQUFFbWUsV0FBVyxDQUFDO0lBQUEsR0FDN0YsVUFBQzdkLEtBQVk7TUFBQSxPQUFLblcsb0JBQW9CLENBQUNxYixVQUFVLENBQUMzVCxFQUFFLEVBQUVtSixDQUFDLENBQUM2QyxJQUFJLEVBQUV5QyxLQUFLLENBQUM7SUFBQSxDQUN0RSxDQUFDO0VBQUEsQ0FDSCxDQUFDO0VBQ0QsSUFBTWpILFNBQVMsR0FBRy9LLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQ0YsTUFBTSxDQUFBaU8sZUFBQSxLQUFHbEQsTUFBTSxFQUFHcU0sVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDN08sS0FBSyxDQUFDO0VBRTFFLE9BQU9qTyxRQUFRLENBQUMyUSxTQUFTLEVBQUU0bUIsS0FBSyxDQUFDO0FBQ25DOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNFLDZCQUE2QkEsQ0FDM0N4cEIsS0FBZSxFQUFBeXBCLE1BQUEsRUFFTDtFQUFBLElBRFRwZ0IsTUFBTSxHQUFBb2dCLE1BQUEsQ0FBTnBnQixNQUFNO0lBQUVtZSxXQUFXLEdBQUFpQyxNQUFBLENBQVhqQyxXQUFXO0lBQUVobEIsTUFBTSxHQUFBaW5CLE1BQUEsQ0FBTmpuQixNQUFNO0lBQUUwbUIsU0FBUyxHQUFBTyxNQUFBLENBQVRQLFNBQVM7RUFFdkMsSUFBTTNtQixPQUFPLEdBQUd2QyxLQUFLLENBQUNwQyxRQUFRLENBQUM0RSxNQUFNLENBQUM7RUFDdEMsSUFBTXlFLEtBQUssR0FBRyxDQUFDLENBQUExRSxPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRWlHLE1BQU0sS0FBSSxFQUFFLEVBQUVuRyxJQUFJLENBQUMsVUFBQWdDLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUM2QyxJQUFJLEtBQUtnaUIsU0FBUztFQUFBLEVBQUM7RUFDckUsSUFBSSxDQUFDM21CLE9BQU8sSUFBSSxDQUFDMEUsS0FBSyxFQUFFO0lBQ3RCLE9BQU9qSCxLQUFLO0VBQ2Q7RUFFQSxJQUFNMHBCLGNBQWMsR0FBQXRwQixhQUFBLENBQUFBLGFBQUEsS0FDZm9uQixXQUFXO0lBQ2RtQyxXQUFXLEVBQUV0Z0I7RUFBTSxFQUNwQjtFQUNELElBQU01QyxTQUFTLEdBQUdsRSxPQUFPLENBQUNpRyxNQUFNLENBQUNuSSxHQUFHLENBQUMsVUFBQWdFLENBQUM7SUFBQSxPQUNwQ0EsQ0FBQyxDQUFDNkMsSUFBSSxLQUFLZ2lCLFNBQVMsR0FBQTlvQixhQUFBLENBQUFBLGFBQUEsS0FBT2lFLENBQUM7TUFBRW1qQixXQUFXLEVBQUVrQyxjQUFjO01BQUVMLGNBQWMsRUFBRTtJQUFLLEtBQUlobEIsQ0FBQztFQUFBLENBQ3ZGLENBQUM7RUFDRCxJQUFNd0ssVUFBVSxHQUFHblcsa0JBQWtCLENBQUM2SixPQUFPLEVBQUU7SUFBQ2lHLE1BQU0sRUFBRS9CO0VBQVMsQ0FBQyxDQUFDO0VBQ25FLE9BQU85TyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUNGLE1BQU0sQ0FBQWlPLGVBQUEsS0FBR2xELE1BQU0sRUFBR3FNLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzdPLEtBQUssQ0FBQztBQUNqRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTNHBCLDJCQUEyQkEsQ0FDekM1cEIsS0FBZSxFQUFBNnBCLE1BQUEsRUFFTDtFQUFBLElBRFRsZ0IsS0FBSyxHQUFBa2dCLE1BQUEsQ0FBTGxnQixLQUFLO0lBQUVuSCxNQUFNLEdBQUFxbkIsTUFBQSxDQUFOcm5CLE1BQU07SUFBRTBtQixTQUFTLEdBQUFXLE1BQUEsQ0FBVFgsU0FBUztFQUV6QjUzQixPQUFPLENBQUNxWSxLQUFLLENBQUNBLEtBQUssQ0FBQztFQUNwQixJQUFNcEgsT0FBTyxHQUFHdkMsS0FBSyxDQUFDcEMsUUFBUSxDQUFDNEUsTUFBTSxDQUFDO0VBQ3RDLElBQU15RSxLQUFLLEdBQUcsQ0FBQyxDQUFBMUUsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUVpRyxNQUFNLEtBQUksRUFBRSxFQUFFbkcsSUFBSSxDQUFDLFVBQUFnQyxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDNkMsSUFBSSxLQUFLZ2lCLFNBQVM7RUFBQSxFQUFDO0VBQ3JFLElBQUksQ0FBQzNtQixPQUFPLElBQUksQ0FBQzBFLEtBQUssRUFBRTtJQUN0QixPQUFPakgsS0FBSztFQUNkO0VBQ0EsSUFBTXlHLFNBQVMsR0FBR2xFLE9BQU8sQ0FBQ2lHLE1BQU0sQ0FBQ25JLEdBQUcsQ0FBQyxVQUFBZ0UsQ0FBQztJQUFBLE9BQ3BDQSxDQUFDLENBQUM2QyxJQUFJLEtBQUtnaUIsU0FBUyxHQUFBOW9CLGFBQUEsQ0FBQUEsYUFBQSxLQUFPaUUsQ0FBQztNQUFFZ2xCLGNBQWMsRUFBRTtJQUFLLEtBQUlobEIsQ0FBQztFQUFBLENBQzFELENBQUM7RUFDRCxJQUFNd0ssVUFBVSxHQUFHblcsa0JBQWtCLENBQUM2SixPQUFPLEVBQUU7SUFBQ2lHLE1BQU0sRUFBRS9CO0VBQVMsQ0FBQyxDQUFDO0VBQ25FLE9BQU85TyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUNGLE1BQU0sQ0FBQWlPLGVBQUEsS0FBR2xELE1BQU0sRUFBR3FNLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzdPLEtBQUssQ0FBQztBQUNqRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVM4cEIsNkJBQTZCQSxDQUMzQzlwQixLQUFlO0FBQ2Y7QUFDQThCLE1BQTJELEVBQ2pEO0VBQ1YsT0FBQTFCLGFBQUEsQ0FBQUEsYUFBQSxLQUNLSixLQUFLO0lBQ1JkLE1BQU0sRUFBQWtCLGFBQUEsQ0FBQUEsYUFBQSxLQUNESixLQUFLLENBQUNkLE1BQU07TUFDZmxDLE9BQU8sRUFBRSxDQUFDZ0QsS0FBSyxDQUFDZCxNQUFNLENBQUNsQztJQUFPO0VBQy9CO0FBRUw7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTK3NCLG1DQUFtQ0EsQ0FDakQvcEIsS0FBZTtBQUNmO0FBQ0FncUIsT0FBa0UsRUFDeEQ7RUFDVixJQUFJLENBQUMxMEIsb0JBQW9CLENBQUMsQ0FBQyxDQUFDaXVCLHVCQUF1QixFQUFFO0lBQ25ELE9BQU92akIsS0FBSztFQUNkO0VBRUEsSUFBTWxELFFBQVEsR0FBR2tELEtBQUssQ0FBQ2QsTUFBTSxDQUFDcEMsUUFBUTtFQUN0QyxJQUFJLENBQUNBLFFBQVEsQ0FBQzZELE1BQU0sRUFBRTtJQUNwQixPQUFPWCxLQUFLO0VBQ2Q7RUFFQSxJQUFJMmhCLElBQUk7RUFDUixJQUFJO0lBQ0ZBLElBQUksR0FBR25wQixjQUFjLENBQUN0RSxpQ0FBaUMsQ0FBQzRJLFFBQVEsQ0FBQyxDQUFDO0VBQ3BFLENBQUMsQ0FBQyxPQUFPcUgsR0FBRyxFQUFFO0lBQ1osSUFBTWtZLE9BQU8sR0FBR2xZLEdBQUcsWUFBWThsQixLQUFLLEdBQUc5bEIsR0FBRyxDQUFDa1ksT0FBTyxHQUFHNk4sTUFBTSxDQUFDL2xCLEdBQUcsQ0FBQztJQUNoRSxPQUFPcFMsUUFBUSxDQUNiaU8sS0FBSyxFQUNMRiw0QkFBNEIsQ0FBQyxDQUFDLENBQUNPLEdBQUcsQ0FBQztNQUFBLE9BQ2pDaE8sZUFBZSxDQUNiNEIsaUJBQWlCLENBQUM7UUFDaEJvb0IsT0FBTyxrREFBQTdVLE1BQUEsQ0FBa0Q2VSxPQUFPLENBQUU7UUFDbEVuaEIsRUFBRSxFQUFFO01BQ04sQ0FBQyxDQUNILENBQUM7SUFBQSxDQUNILENBQ0YsQ0FBQztFQUNIO0VBRUEsSUFBTWl2QixZQUFzQixHQUFBL3BCLGFBQUEsQ0FBQUEsYUFBQSxLQUN2QkosS0FBSztJQUNSZCxNQUFNLEVBQUFrQixhQUFBLENBQUFBLGFBQUEsS0FDREosS0FBSyxDQUFDZCxNQUFNO01BQ2ZwQyxRQUFRLEVBQUUsRUFBRTtNQUNaQyxlQUFlLEVBQUUsSUFBSTtNQUNyQkgsSUFBSSxFQUFFOUcsWUFBWSxDQUFDcXVCO0lBQUk7RUFDeEIsRUFDRjtFQUVELElBQU1pRyxPQUFPLEdBQUdDLElBQUksQ0FBQ0MsS0FBSyxDQUFDRCxJQUFJLENBQUNFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRTtFQUVuRCxPQUFPM08sb0JBQW9CLENBQUN1TyxZQUFZLEVBQUU7SUFDeEN2c0IsUUFBUSxFQUFFO01BQ1I4YyxJQUFJLEVBQUU7UUFDSnhmLEVBQUUsb0JBQUFzTSxNQUFBLENBQW9CalMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFFO1FBQ3pDNEYsS0FBSyxvQkFBQXFNLE1BQUEsQ0FBb0I0aUIsT0FBTztNQUNsQyxDQUFDO01BQ0R6SSxJQUFJLEVBQUpBO0lBQ0YsQ0FBQztJQUNEdFAsT0FBTyxFQUFFO01BQ1A2SCxrQkFBa0IsRUFBRSxJQUFJO01BQ3hCc0UsU0FBUyxFQUFFLEtBQUs7TUFDaEJOLGdCQUFnQixFQUFFO0lBQ3BCO0VBQ0YsQ0FBQyxDQUFDO0FBQ0o7QUFFQSxPQUFPLFNBQVNzTSxtQ0FBbUNBLENBQ2pEeHFCLEtBQWUsRUFBQXlxQixNQUFBLEVBRUw7RUFBQSxJQURUdHFCLEdBQUcsR0FBQXNxQixNQUFBLENBQUh0cUIsR0FBRztJQUFFOUUsTUFBTSxHQUFBb3ZCLE1BQUEsQ0FBTnB2QixNQUFNO0VBRVosSUFBTXNSLFNBQVMsR0FBRzNNLEtBQUssQ0FBQ3RDLE9BQU8sQ0FBQ3lDLEdBQUcsQ0FBQztFQUNwQyxJQUFJLENBQUN3TSxTQUFTLEVBQUU7SUFDZHJiLE9BQU8sQ0FBQ3FZLEtBQUssWUFBQW5DLE1BQUEsQ0FBWXJILEdBQUcsa0JBQWUsQ0FBQztJQUM1QyxPQUFPSCxLQUFLO0VBQ2Q7RUFDQSxJQUFJMk0sU0FBUyxDQUFDaEssSUFBSSxLQUFLNU0sWUFBWSxDQUFDNlgsU0FBUyxFQUFFO0lBQzdDdGMsT0FBTyxDQUFDcVksS0FBSyw2R0FFYixDQUFDO0lBQ0QsT0FBTzNKLEtBQUs7RUFDZDtFQUVBLElBQU0wcUIsT0FBTyxHQUFHQyxtQkFBbUIsQ0FBQ3R2QixNQUFNLENBQUM7RUFFM0MsT0FBTzFELEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQ0UsS0FBSyxDQUFDSixNQUFNLENBQUNpekIsT0FBTyxDQUFDLENBQUMvZCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMzTSxLQUFLLENBQUM7QUFDbkU7QUFFQSxTQUFTMnFCLG1CQUFtQkEsQ0FBQ3R2QixNQUFNLEVBQUU7RUFDbkMsSUFBTXV2QixPQUFPLEdBQUcsQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDO0VBQzFDLE9BQU92cEIsTUFBTSxDQUFDQyxJQUFJLENBQUNqRyxNQUFNLENBQUMsQ0FBQ3dRLE1BQU0sQ0FBQyxVQUFDQyxJQUFJLEVBQUVySSxJQUFJLEVBQUs7SUFDaEQsSUFBSSxDQUFDbW5CLE9BQU8sQ0FBQ3ZqQixRQUFRLENBQUM1RCxJQUFJLENBQUMsRUFBRTtNQUMzQm5TLE9BQU8sQ0FBQ3FZLEtBQUssbUZBQUFuQyxNQUFBLENBQ3VFL0QsSUFBSSxDQUN4RixDQUFDO01BQ0QsT0FBT3FJLElBQUk7SUFDYjs7SUFFQTtJQUNBQSxJQUFJLENBQUNySSxJQUFJLENBQUMsR0FBR3BJLE1BQU0sQ0FBQ29JLElBQUksQ0FBQztJQUN6QixPQUFPcUksSUFBSTtFQUNiLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNSOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBUytlLGtDQUFrQ0EsQ0FDaEQ3cUIsS0FBZSxFQUFBOHFCLE1BQUEsRUFFTDtFQUFBLElBRFR6dkIsTUFBTSxHQUFBeXZCLE1BQUEsQ0FBTnp2QixNQUFNO0VBRVAsSUFBSSxDQUFDQSxNQUFNLEVBQUU7SUFDWCxPQUFPMkUsS0FBSztFQUNkO0VBQ0EsSUFBTTBxQixPQUFPLEdBQUdDLG1CQUFtQixDQUFDdHZCLE1BQU0sQ0FBQztFQUMzQyxPQUFPMUQsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUNGLE1BQU0sQ0FBQ2l6QixPQUFPLENBQUMsQ0FBQyxDQUFDMXFCLEtBQUssQ0FBQztBQUN6RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVMrcUIsK0JBQStCQSxDQUM3Qy9xQixLQUFRLEVBQ1I4QixNQUFzRCxFQUNuRDtFQUFBLElBQUFrcEIscUJBQUE7RUFDSCxJQUFPQyxLQUFLLEdBQVducEIsTUFBTSxDQUF0Qm1wQixLQUFLO0lBQUUvcUIsS0FBSyxHQUFJNEIsTUFBTSxDQUFmNUIsS0FBSztFQUNuQixJQUFXZ3JCLGFBQWEsR0FBV0QsS0FBSyxDQUFqQy92QixFQUFFO0lBQWlCaXdCLEtBQUssR0FBSUYsS0FBSyxDQUFkRSxLQUFLO0VBQy9CLElBQUksQ0FBQ2pyQixLQUFLLEVBQUU7SUFDVjVPLE9BQU8sQ0FBQzZmLElBQUkseUNBQXlDLENBQUM7SUFDdEQsT0FBT25SLEtBQUs7RUFDZDtFQUNBLElBQUksRUFBQWdyQixxQkFBQSxHQUFBOXFCLEtBQUssQ0FBQ2tyQixpQkFBaUIsY0FBQUoscUJBQUEsdUJBQXZCQSxxQkFBQSxDQUEwQkUsYUFBYSxDQUFDLE1BQUtDLEtBQUssRUFBRTtJQUN0RCxPQUFPbnJCLEtBQUs7RUFDZDtFQUVBRSxLQUFLLENBQUNrckIsaUJBQWlCLEdBQUFockIsYUFBQSxDQUFBQSxhQUFBLEtBQ2xCRixLQUFLLENBQUNrckIsaUJBQWlCLE9BQUExbEIsZUFBQSxLQUN6QndsQixhQUFhLEVBQUdDLEtBQUssRUFDdkI7RUFFRCxPQUFBL3FCLGFBQUEsQ0FBQUEsYUFBQSxLQUNLSixLQUFLO0lBQ1IzQyxNQUFNLEVBQUV4RixLQUFLLENBQUNxSSxLQUFLLENBQUMsQ0FBQ0YsS0FBSyxDQUFDM0MsTUFBTTtFQUFDO0FBRXRDOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU2d1QixxQkFBcUJBLENBQ25DcnJCLEtBQVEsRUFDUjhCLE1BQTRDLEVBQ3pDO0VBQ0gsSUFBTzVCLEtBQUssR0FBNkI0QixNQUFNLENBQXhDNUIsS0FBSztJQUFFb3JCLFdBQVcsR0FBZ0J4cEIsTUFBTSxDQUFqQ3dwQixXQUFXO0lBQUV2dkIsVUFBVSxHQUFJK0YsTUFBTSxDQUFwQi9GLFVBQVU7RUFDckMsSUFBSSxDQUFDbUUsS0FBSyxFQUFFO0lBQ1Y3TyxPQUFPLENBQUM4ZixJQUFJLHVDQUF1QyxDQUFDO0lBQ3BELE9BQU9uUixLQUFLO0VBQ2Q7O0VBRUE7RUFDQSxJQUFNdEIsT0FBTyxHQUFHNHNCLFdBQVcsR0FDdkI7SUFDRXRRLE1BQU0sRUFBRSxJQUFJO0lBQ1p1USxNQUFNLEVBQUU7TUFDTkMsY0FBYyxFQUFFRjtJQUNsQixDQUFDO0lBQ0R2dkIsVUFBVSxFQUFFQSxVQUFVLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDbUUsS0FBSyxFQUFFO01BQ0wwRSxLQUFLLEVBQUU7UUFDTHpFLEdBQUcsRUFBRUgsS0FBSyxDQUFDM0MsTUFBTSxDQUFDd0YsU0FBUyxDQUFDLFVBQUFQLENBQUM7VUFBQSxPQUFJQSxDQUFDLENBQUNwSCxFQUFFLEtBQUtnRixLQUFLLENBQUNoRixFQUFFO1FBQUEsRUFBQztRQUNuREEsRUFBRSxFQUFFZ0YsS0FBSyxDQUFDaEY7TUFDWjtJQUNGO0VBQ0YsQ0FBQyxHQUNELElBQUk7RUFFUixPQUFBa0YsYUFBQSxDQUFBQSxhQUFBLEtBQ0tKLEtBQUs7SUFDUnRCLE9BQU8sRUFBUEE7RUFBTztBQUVYOztBQUVBO0FBQ0EsT0FBTyxTQUFTZ0csc0NBQXNDQSxDQUNwRDFFLEtBQVEsRUFDUjhCLE1BQTZELEVBQzFEO0VBQUEsSUFBQTJwQixxQkFBQSxFQUFBQyxzQkFBQTtFQUNILElBQVlwSCxTQUFTLEdBQW9CeGlCLE1BQU0sQ0FBeEMzQixHQUFHO0lBQUF3ckIsY0FBQSxHQUErQjdwQixNQUFNLENBQXhCNkMsTUFBTTtJQUFOQSxNQUFNLEdBQUFnbkIsY0FBQSxjQUFHLEtBQUssR0FBQUEsY0FBQTtFQUVyQyxJQUFNeGtCLE1BQU0sR0FBR25ILEtBQUssQ0FBQ3RDLE9BQU8sQ0FBQzRtQixTQUFTLENBQW9CO0VBRTFELElBQUk1akIsUUFBUSxHQUFHVixLQUFLO0VBQ3BCLElBQUlvTSxTQUFTLEdBQUdqRixNQUFNOztFQUV0QjtFQUNBLElBQUl4QyxNQUFNLEVBQUU7SUFDVixJQUFNaWUsZ0JBQWdCLEdBQUczb0IsMEJBQTBCLENBQUN5RyxRQUFRLENBQUNyRCxNQUFNLENBQUM7SUFDcEU7SUFDQSxJQUFJLENBQUN1bEIsZ0JBQWdCLENBQUNqaUIsTUFBTSxFQUFFO01BQzVCLE9BQU9ELFFBQVE7SUFDakI7SUFFQSxJQUFNa3JCLDRCQUE0QixHQUFHMXhCLCtCQUErQixDQUFDMG9CLGdCQUFnQixDQUFDO0lBQ3RGLElBQU1pSiw4QkFBOEIsR0FBR0MsT0FBTyxDQUFDRiw0QkFBNEIsQ0FBQ2pyQixNQUFNLENBQUM7SUFFbkYsSUFBTW9yQixlQUFlLEdBQUc1eEIsZ0JBQWdCLENBQUMsQ0FBQ2dOLE1BQU0sQ0FBQ2xMLE1BQU0sRUFBRXlFLFFBQVEsQ0FBQ3pCLGVBQWUsQ0FBQ2hELE1BQU0sQ0FBQyxDQUFDOztJQUUxRjtJQUNBLElBQUk0dkIsOEJBQThCLEVBQUU7TUFDbEMsSUFBSTFrQixNQUFNLENBQUNnRixlQUFlLEtBQUt6VyxnQkFBZ0IsQ0FBQ3MyQixRQUFRLEVBQUU7UUFDeER0ckIsUUFBUSxHQUFHdUwsK0JBQStCLENBQUN2TCxRQUFRLEVBQUU7VUFDbkR4RixFQUFFLEVBQUVpTSxNQUFNLENBQUNqTSxFQUFFO1VBQ2JpUixlQUFlLEVBQUV6VyxnQkFBZ0IsQ0FBQ3MyQjtRQUNwQyxDQUFDLENBQUM7TUFDSjtNQUVBNWYsU0FBUyxHQUFHMUwsUUFBUSxDQUFDaEQsT0FBTyxDQUFDNG1CLFNBQVMsQ0FBb0I7O01BRTFEO01BQ0FsWSxTQUFTLEdBQUc2Zix3QkFBd0IsQ0FBQ3ZyQixRQUFRLEVBQUUwTCxTQUFTLENBQUM7O01BRXpEO01BQ0ExTCxRQUFRLEdBQUFOLGFBQUEsQ0FBQUEsYUFBQSxLQUNITSxRQUFRO1FBQ1hoRCxPQUFPLEVBQUU3RixLQUFLLENBQVN1VSxTQUFTLENBQUMsQ0FBQzFMLFFBQVEsQ0FBQ2hELE9BQU87TUFBQyxFQUNwRDtJQUNIO0lBRUEwTyxTQUFTLEdBQUcxTCxRQUFRLENBQUNoRCxPQUFPLENBQUM0bUIsU0FBUyxDQUFvQjs7SUFFMUQ7SUFDQSxJQUFNNEgsZUFBYyxHQUFHbDRCLHlCQUF5QixDQUM5Q29ZLFNBQVMsQ0FBQ0QsZUFBZSxLQUFLelcsZ0JBQWdCLENBQUNzMkIsUUFBUSxHQUNuRCxDQUFDRCxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUVBLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUN4Q0EsZUFBZSxFQUFBM3JCLGFBQUEsQ0FBQUEsYUFBQSxLQUNmZ00sU0FBUztNQUFFblEsTUFBTSxFQUFFOHZCO0lBQWUsRUFDeEMsQ0FBQztJQUVEcnJCLFFBQVEsR0FBR3NMLGdCQUFnQixDQUFDdEwsUUFBUSxFQUFFO01BQ3BDUCxHQUFHLEVBQUVta0IsU0FBUztNQUNkN2dCLElBQUksRUFBRSxPQUFPO01BQ2JTLEtBQUssRUFBRWdvQjtJQUNULENBQUMsQ0FBQztJQUVGOWYsU0FBUyxHQUFBaE0sYUFBQSxDQUFBQSxhQUFBLEtBQ0hNLFFBQVEsQ0FBQ2hELE9BQU8sQ0FBQzRtQixTQUFTLENBQUM7TUFDL0JwZSx1QkFBdUIsRUFBRTtJQUFJLEVBQzlCOztJQUVEO0lBQ0F4RixRQUFRLEdBQUFOLGFBQUEsQ0FBQUEsYUFBQSxLQUNITSxRQUFRO01BQ1hoRCxPQUFPLEVBQUU3RixLQUFLLENBQVN1VSxTQUFTLENBQUMsQ0FBQzFMLFFBQVEsQ0FBQ2hELE9BQU87SUFBQyxFQUNwRDtJQUVEZ0QsUUFBUSxHQUFHNkwsZ0NBQWdDLENBQUM3TCxRQUFRLEVBQUU7TUFDcER4RixFQUFFLEVBQUVrUixTQUFTLENBQUNsUixFQUFFO01BQ2hCMEIsSUFBSSxFQUFFMFAsb0JBQW9CLENBQUNGLFNBQVM7SUFDdEMsQ0FBQyxDQUFDO0lBRUZBLFNBQVMsR0FBRzFMLFFBQVEsQ0FBQ2hELE9BQU8sQ0FBQzRtQixTQUFTLENBQW9COztJQUUxRDtJQUNBLE9BQU8zWSw0QkFBNEIsQ0FBQ2pMLFFBQVEsRUFBRTtNQUM1Q3dELEtBQUssRUFBRWtJLFNBQVMsQ0FBQ2xJLEtBQUssQ0FBQ2tJLFNBQVMsQ0FBQytmLGdCQUFnQjtJQUNuRCxDQUFDLENBQUM7RUFDSjs7RUFFQTtFQUNBL2YsU0FBUyxHQUFBaE0sYUFBQSxDQUFBQSxhQUFBLEtBQ0orRyxNQUFNO0lBQ1RqQix1QkFBdUIsRUFBRTtFQUFLLEVBQy9COztFQUVEO0VBQ0F4RixRQUFRLEdBQUFOLGFBQUEsQ0FBQUEsYUFBQSxLQUNITSxRQUFRO0lBQ1hoRCxPQUFPLEVBQUU3RixLQUFLLENBQVN1VSxTQUFTLENBQUMsQ0FBQzFMLFFBQVEsQ0FBQ2hELE9BQU87RUFBQyxFQUNwRDs7RUFFRDtFQUNBZ0QsUUFBUSxHQUFHNkwsZ0NBQWdDLENBQUM3TCxRQUFRLEVBQUU7SUFDcER4RixFQUFFLEVBQUVrUixTQUFTLENBQUNsUixFQUFFO0lBQ2hCMEIsSUFBSSxFQUFFcEcsbUJBQW1CLENBQUM0MUI7RUFDNUIsQ0FBQyxDQUFDO0VBRUZoZ0IsU0FBUyxHQUFHMUwsUUFBUSxDQUFDaEQsT0FBTyxDQUFDNG1CLFNBQVMsQ0FBb0I7O0VBRTFEO0VBQ0EsSUFBTTRILGNBQWMsR0FBR2w0Qix5QkFBeUIsQ0FBQ29ZLFNBQVMsQ0FBQ25RLE1BQU0sRUFBRW1RLFNBQVMsQ0FBQztFQUU3RTFMLFFBQVEsR0FBR3NMLGdCQUFnQixDQUFDdEwsUUFBUSxFQUFFO0lBQ3BDUCxHQUFHLEVBQUVta0IsU0FBUztJQUNkN2dCLElBQUksRUFBRSxPQUFPO0lBQ2JTLEtBQUssRUFBRWdvQjtFQUNULENBQUMsQ0FBQztFQUVGeHJCLFFBQVEsR0FBRzZMLGdDQUFnQyxDQUFDN0wsUUFBUSxFQUFFO0lBQ3BEeEYsRUFBRSxFQUFFa1IsU0FBUyxDQUFDbFIsRUFBRTtJQUNoQjBCLElBQUksRUFBRTBQLG9CQUFvQixDQUFDRixTQUFTO0VBQ3RDLENBQUMsQ0FBQzs7RUFFRjtFQUNBLE9BQU9ULDRCQUE0QixDQUFDakwsUUFBUSxFQUFFO0lBQzVDd0QsS0FBSyxHQUFBdW5CLHFCQUFBLElBQUFDLHNCQUFBLEdBQUVockIsUUFBUSxDQUFDekIsZUFBZSxDQUFDaEQsTUFBTSxjQUFBeXZCLHNCQUFBLHVCQUEvQkEsc0JBQUEsQ0FBa0MsQ0FBQyxDQUFDLGNBQUFELHFCQUFBLGNBQUFBLHFCQUFBLEdBQUk7RUFDakQsQ0FBQyxDQUFDO0FBQ0o7QUFFQSxPQUFPLFNBQVNsZixnQ0FBZ0NBLENBQzlDdk0sS0FBUSxFQUNSOEIsTUFBMkQsRUFDM0Q7RUFDQSxJQUFXNEssUUFBUSxHQUE0QjVLLE1BQU0sQ0FBOUM1RyxFQUFFO0lBQWtCaXhCLGdCQUFnQixHQUFJcnFCLE1BQU0sQ0FBaENsRixJQUFJO0VBRXpCLElBQU0wbkIsU0FBUyxHQUFHdGtCLEtBQUssQ0FBQ3RDLE9BQU8sQ0FBQ21GLFNBQVMsQ0FBQyxVQUFBd0IsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ25KLEVBQUUsS0FBS3dSLFFBQVE7RUFBQSxFQUFDO0VBQ2pFLElBQUk0WCxTQUFTLEtBQUssQ0FBQyxDQUFDLEVBQUU7SUFDcEIsT0FBT3RrQixLQUFLO0VBQ2Q7RUFFQSxJQUFNbUgsTUFBTSxHQUFHbkgsS0FBSyxDQUFDdEMsT0FBTyxDQUFDNG1CLFNBQVMsQ0FBb0I7RUFFMUQsSUFBSSxDQUFDK0gseUJBQXlCLENBQUNsbEIsTUFBTSxFQUFFZ2xCLGdCQUFnQixDQUFDLEVBQUU7SUFDeEQsT0FBT25zQixLQUFLO0VBQ2Q7RUFFQSxJQUFNb00sU0FBUyxHQUFBaE0sYUFBQSxDQUFBQSxhQUFBLEtBQ1YrRyxNQUFNO0lBQ1RnbEIsZ0JBQWdCLEVBQWhCQTtFQUFnQixFQUNqQjtFQUVELElBQU16ckIsUUFBUSxHQUFBTixhQUFBLENBQUFBLGFBQUEsS0FDVEosS0FBSztJQUNSdEMsT0FBTyxFQUFFN0YsS0FBSyxDQUFTdVUsU0FBUyxDQUFDLENBQUNwTSxLQUFLLENBQUN0QyxPQUFPO0VBQUMsRUFDakQ7RUFFRCxPQUFPbVEsK0JBQStCLENBQUNuTixRQUFRLEVBQUU0akIsU0FBUyxDQUFDO0FBQzdEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTTVILDBCQUEwQixHQUFHLFNBQTdCQSwwQkFBMEJBLENBQ3JDMWMsS0FBZSxFQUFBc3NCLE1BQUEsRUFFRjtFQUFBLElBREYzUCxNQUFNLEdBQUEyUCxNQUFBLENBQWhCeFMsT0FBTyxDQUFHNkMsTUFBTTtFQUVqQixJQUFLdGQscUJBQXFCLEdBQUlXLEtBQUssQ0FBOUJYLHFCQUFxQjtFQUMxQixJQUFJLENBQUNBLHFCQUFxQixFQUFFO0lBQzFCQSxxQkFBcUIsR0FBRyxDQUFDO0VBQzNCO0VBRUEsT0FBQWUsYUFBQSxDQUFBQSxhQUFBLEtBQ0tKLEtBQUs7SUFDUlgscUJBQXFCLEVBQUVnckIsSUFBSSxDQUFDa0MsR0FBRyxDQUFDbHRCLHFCQUFxQixHQUFHc2QsTUFBTSxFQUFFLENBQUM7RUFBQztBQUV0RSxDQUFDO0FBRUQsU0FBUzlPLCtCQUErQkEsQ0FBcUI3TixLQUFRLEVBQUVza0IsU0FBaUIsRUFBSztFQUMzRixJQUFNbmQsTUFBTSxHQUFHbkgsS0FBSyxDQUFDdEMsT0FBTyxDQUFDNG1CLFNBQVMsQ0FBQztFQUN2QyxJQUFLbmQsTUFBTSxDQUFxQmpCLHVCQUF1QixFQUFFO0lBQ3ZELElBQU1zbUIsYUFBYSxHQUFHQywwQkFBMEIsQ0FBQ3RsQixNQUFNLENBQUM7SUFDeEQsSUFBTWpELEtBQUssR0FBR2xFLEtBQUssQ0FBQ2YsZUFBZSxDQUFDNUMsU0FBUyxHQUN6QzFJLFdBQVcsQ0FBQzY0QixhQUFhLEVBQUV4c0IsS0FBSyxDQUFDZixlQUFlLENBQUM1QyxTQUFTLENBQUMsR0FDM0Rtd0IsYUFBYTtJQUNqQixPQUFPN2dCLDRCQUE0QixDQUFDM0wsS0FBSyxFQUFFO01BQUNrRSxLQUFLLEVBQUxBO0lBQUssQ0FBQyxDQUFDO0VBQ3JEO0VBQ0EsT0FBT2xFLEtBQUs7QUFDZDtBQUVBLFNBQVN5c0IsMEJBQTBCQSxDQUFDdGxCLE1BQU0sRUFBRTtFQUMxQyxPQUFPQSxNQUFNLENBQUNqRCxLQUFLLENBQUNpRCxNQUFNLENBQUNnbEIsZ0JBQWdCLENBQUM7QUFDOUM7QUFFQSxTQUFTN2Ysb0JBQW9CQSxDQUFDbkYsTUFBdUIsRUFBRTtFQUNyRCxJQUFJQSxNQUFNLENBQUNnRixlQUFlLEtBQUt6VyxnQkFBZ0IsQ0FBQ2czQixJQUFJLEVBQUU7SUFBQSxJQUFBQyxxQkFBQTtJQUNwRCxRQUFBQSxxQkFBQSxHQUFPeGxCLE1BQU0sQ0FBQ2dsQixnQkFBZ0IsY0FBQVEscUJBQUEsY0FBQUEscUJBQUEsR0FBSW4yQixtQkFBbUIsQ0FBQzQxQixHQUFHO0VBQzNEO0VBRUEsT0FBTzUxQixtQkFBbUIsQ0FBQzQxQixHQUFHO0FBQ2hDO0FBRUEsU0FBU0MseUJBQXlCQSxDQUFDbGxCLE1BQXVCLEVBQUV5bEIsT0FBZSxFQUFFO0VBQzNFLE9BQU8sRUFDTHpsQixNQUFNLENBQUNnRixlQUFlLEtBQUt6VyxnQkFBZ0IsQ0FBQ2czQixJQUFJLElBQUlFLE9BQU8sS0FBS3AyQixtQkFBbUIsQ0FBQ3EyQixLQUFLLENBQzFGO0FBQ0g7QUFFQSxTQUFTWix3QkFBd0JBLENBQUNqc0IsS0FBSyxFQUFFbUgsTUFBTSxFQUFFO0VBQy9DLElBQU15a0IsNEJBQTRCLEdBQUcxeEIsK0JBQStCLENBQUM4RixLQUFLLENBQUMzQyxNQUFNLENBQUM7RUFFbEYsSUFBSTJ1QixRQUF1QixHQUFHLElBQUk7RUFDbEMsSUFBSUosNEJBQTRCLENBQUNqckIsTUFBTSxHQUFHLENBQUMsRUFBRTtJQUMzQztJQUNBLElBQU1tc0IsYUFBYSxHQUFHbEIsNEJBQTRCLENBQUMvZixNQUFNLENBQUMsVUFBQ2toQixZQUFZLEVBQUV6cUIsQ0FBQyxFQUFLO01BQzdFLElBQUlBLENBQUMsQ0FBQzBxQixJQUFJLENBQUNDLGtCQUFrQixFQUFFO1FBQzdCLElBQU1DLFFBQVEsR0FBRzF5QixzQkFBc0IsQ0FBQ3FJLFNBQVMsQ0FBQyxVQUFBdEMsQ0FBQztVQUFBLE9BQUlBLENBQUMsS0FBSytCLENBQUMsQ0FBQzBxQixJQUFJLENBQUNDLGtCQUFrQjtRQUFBLEVBQUM7UUFDdkYsT0FBT0MsUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJQSxRQUFRLEdBQUdILFlBQVksR0FBR0csUUFBUSxHQUFHSCxZQUFZO01BQzNFO0lBQ0YsQ0FBQyxFQUFFdnlCLHNCQUFzQixDQUFDbUcsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNyQztJQUNBLElBQU13c0IsZUFBZSxHQUFHM3lCLHNCQUFzQixDQUFDc3lCLGFBQWEsQ0FBQztJQUM3RGQsUUFBUSxHQUFHenhCLHlCQUF5QixDQUFDNHlCLGVBQWUsQ0FBQztFQUN2RDtFQUVBLElBQUksQ0FBQ25CLFFBQVEsRUFBRTtJQUNiLE9BQU83a0IsTUFBTTtFQUNmOztFQUVBO0VBQ0EsSUFBTTdLLFVBQVUsR0FBR2hDLG9CQUFvQixDQUFDMHhCLFFBQVEsQ0FBQztFQUNqRCxJQUFNb0IsZUFBZSxHQUFBaHRCLGFBQUEsQ0FBQUEsYUFBQSxLQUFPK0csTUFBTSxDQUFDbUksUUFBUTtJQUFFMGMsUUFBUSxFQUFSQSxRQUFRO0lBQUUxdkIsVUFBVSxFQUFWQTtFQUFVLEVBQUM7RUFDbEUsSUFBTThQLFNBQVMsR0FBRy9SLHdCQUF3QixDQUFDOE0sTUFBTSxFQUFFaW1CLGVBQWUsRUFBRXB0QixLQUFLLENBQUNwQyxRQUFRLENBQUM7RUFDbkYsT0FBT3hELDRCQUE0QixDQUFDNEYsS0FBSyxFQUFFb00sU0FBUyxDQUFDO0FBQ3ZEOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVNpaEIsOEJBQThCQSxDQUFDbnBCLEtBQVUsRUFBRTFCLE1BQWMsRUFBRThxQixlQUF1QixFQUFFO0VBQUEsSUFBQUMsYUFBQSxFQUFBQyxjQUFBO0VBQzNGLElBQUlqa0IsS0FBSyxDQUFDQyxPQUFPLENBQUN0RixLQUFLLENBQUMsRUFBRTtJQUN4QjtJQUNBLElBQU11cEIsUUFBUSxHQUFHdnBCLEtBQUssQ0FDbkI3RCxHQUFHLENBQUMsVUFBQThNLENBQUM7TUFBQSxPQUFJa2dCLDhCQUE4QixDQUFDbGdCLENBQUMsRUFBRTNLLE1BQU0sRUFBRThxQixlQUFlLENBQUM7SUFBQSxFQUFDLENBQ3BFbm1CLE1BQU0sQ0FBQyxVQUFBM0csQ0FBQztNQUFBLE9BQUlBLENBQUM7SUFBQSxFQUFDO0lBQ2pCLE9BQU9pdEIsUUFBUSxDQUFDOXNCLE1BQU0sR0FBRzhzQixRQUFRLEdBQUcsSUFBSTtFQUMxQztFQUNBLElBQUksT0FBT3ZwQixLQUFLLENBQUMxQixNQUFNLEtBQUssUUFBUSxJQUFJMEIsS0FBSyxDQUFDMUIsTUFBTSxLQUFLQSxNQUFNLEVBQUU7SUFDL0Q7SUFDQSxPQUFBcEMsYUFBQSxDQUFBQSxhQUFBLEtBQ0s4RCxLQUFLO01BQ1IxQixNQUFNLEVBQUU4cUI7SUFBZTtFQUUzQixDQUFDLE1BQU0sSUFBSS9qQixLQUFLLENBQUNDLE9BQU8sQ0FBQ3RGLEtBQUssQ0FBQzFCLE1BQU0sQ0FBQyxJQUFJMEIsS0FBSyxDQUFDMUIsTUFBTSxDQUFDNkUsUUFBUSxDQUFDN0UsTUFBTSxDQUFDLEVBQUU7SUFDdkU7SUFDQSxPQUFBcEMsYUFBQSxDQUFBQSxhQUFBLEtBQ0s4RCxLQUFLO01BQ1IxQixNQUFNLEVBQUUwQixLQUFLLENBQUMxQixNQUFNLENBQUNuQyxHQUFHLENBQUMsVUFBQUcsQ0FBQztRQUFBLE9BQUtBLENBQUMsS0FBS2dDLE1BQU0sR0FBRzhxQixlQUFlLEdBQUc5c0IsQ0FBQztNQUFBLENBQUM7SUFBQztFQUV2RSxDQUFDLE1BQU0sSUFBSSxDQUFBK3NCLGFBQUEsR0FBQXJwQixLQUFLLENBQUM3SSxNQUFNLGNBQUFreUIsYUFBQSxlQUFaQSxhQUFBLENBQWMvcUIsTUFBTSxJQUFJLEVBQUFnckIsY0FBQSxHQUFBdHBCLEtBQUssQ0FBQzdJLE1BQU0sY0FBQW15QixjQUFBLHVCQUFaQSxjQUFBLENBQWNockIsTUFBTSxNQUFLQSxNQUFNLEVBQUU7SUFDbEU7SUFDQSxPQUFBcEMsYUFBQSxDQUFBQSxhQUFBLEtBQ0s4RCxLQUFLO01BQ1I3SSxNQUFNLEVBQUErRSxhQUFBLENBQUFBLGFBQUEsS0FDRDhELEtBQUssQ0FBQzdJLE1BQU07UUFDZm1ILE1BQU0sRUFBRThxQjtNQUFlO0lBQ3hCO0VBRUwsQ0FBQyxNQUFNLElBQUkxNEIsUUFBUSxDQUFDc1AsS0FBSyxDQUFDLElBQUk3QyxNQUFNLENBQUNJLFNBQVMsQ0FBQ0MsY0FBYyxDQUFDQyxJQUFJLENBQUN1QyxLQUFLLEVBQUUxQixNQUFNLENBQUMsRUFBRTtJQUNqRjtJQUNBLE9BQUFrRCxlQUFBLEtBQVM0bkIsZUFBZSxFQUFHcHBCLEtBQUssQ0FBQzFCLE1BQU0sQ0FBQztFQUMxQztFQUVBLE9BQU8sSUFBSTtBQUNiOztBQUVBO0FBQ0EsU0FBU2tyQixtQkFBbUJBLENBQUN4cEIsS0FBSyxFQUFFO0VBQUEsSUFBQXlwQixpQkFBQTtFQUNsQyxJQUFJcGtCLEtBQUssQ0FBQ0MsT0FBTyxDQUFDdEYsS0FBSyxDQUFDLEVBQUU7SUFDeEI7SUFDQSxJQUFNMHBCLFlBQVksR0FBRzFwQixLQUFLLENBQUM3RCxHQUFHLENBQUNxdEIsbUJBQW1CLENBQUMsQ0FBQ3ZtQixNQUFNLENBQUMsVUFBQTNHLENBQUM7TUFBQSxPQUFJQSxDQUFDO0lBQUEsRUFBQztJQUNsRSxPQUFPb3RCLFlBQVksQ0FBQ2p0QixNQUFNLEdBQUdpdEIsWUFBWSxHQUFHLElBQUk7RUFDbEQ7O0VBRUE7RUFDQSxPQUFPLENBQUExcEIsS0FBSyxhQUFMQSxLQUFLLGdCQUFBeXBCLGlCQUFBLEdBQUx6cEIsS0FBSyxDQUFFMkssVUFBVSxjQUFBOGUsaUJBQUEsdUJBQWpCQSxpQkFBQSxDQUFtQmpULElBQUksQ0FBQ3hmLEVBQUUsS0FBSSxJQUFJO0FBQzNDOztBQUVBO0FBQ0EsU0FBUzJ5QixtQkFBbUJBLENBQUM3dEIsS0FBSyxFQUFFOHRCLFVBQVUsRUFBQUMsTUFBQSxFQUFxQztFQUFBLElBQWxDdHFCLElBQUksR0FBQXNxQixNQUFBLENBQUp0cUIsSUFBSTtJQUFFK1csV0FBVyxHQUFBdVQsTUFBQSxDQUFYdlQsV0FBVztJQUFFd1QsWUFBWSxHQUFBRCxNQUFBLENBQVpDLFlBQVk7RUFDOUU7RUFDQTtFQUNBLElBQUksQ0FBQ0YsVUFBVSxFQUFFO0lBQ2YsT0FBTzl0QixLQUFLO0VBQ2Q7RUFDQSxJQUFNaXVCLFlBQVksR0FDaEJ4cUIsSUFBSSxLQUFLLFFBQVEsR0FDYnFxQixVQUFVLENBQUNqaUIsTUFBTSxDQUFDLFVBQUNDLElBQUksRUFBRW9pQixTQUFTO0lBQUEsT0FBSzVjLGtCQUFrQixDQUFDeEYsSUFBSSxFQUFFO01BQUM1USxFQUFFLEVBQUVnekIsU0FBUyxDQUFDaHpCO0lBQUUsQ0FBQyxDQUFDO0VBQUEsR0FBRThFLEtBQUssQ0FBQyxHQUMzRnVKLEtBQUssQ0FBQ0MsT0FBTyxDQUFDeEosS0FBSyxDQUFDeUQsSUFBSSxDQUFDLENBQUMsR0FBQXJELGFBQUEsQ0FBQUEsYUFBQSxLQUVyQkosS0FBSyxPQUFBMEYsZUFBQSxLQUNQakMsSUFBSSxFQUFHekQsS0FBSyxDQUFDeUQsSUFBSSxDQUFDLENBQUMwRCxNQUFNLENBQUMsVUFBQWduQixDQUFDO0lBQUEsT0FBSSxDQUFDTCxVQUFVLENBQUN6ckIsSUFBSSxDQUFDLFVBQUE2ckIsU0FBUztNQUFBLE9BQUlDLENBQUMsQ0FBQ2p6QixFQUFFLEtBQUtnekIsU0FBUyxDQUFDaHpCLEVBQUU7SUFBQSxFQUFDO0VBQUEsRUFBQztFQUV2RjtFQUNBOEUsS0FBSzs7RUFFWDtFQUNBLElBQU1vdUIsVUFBVSxHQUFBMW9CLGVBQUEsS0FDYjhVLFdBQVcsRUFBR3dULFlBQVk7RUFDdkI7RUFDQUEsWUFBWSxDQUFDQyxZQUFZLEVBQUVILFVBQVUsQ0FBQztFQUN0QztFQUNGdmtCLEtBQUssQ0FBQ0MsT0FBTyxDQUFDeWtCLFlBQVksQ0FBQ3pULFdBQVcsQ0FBQyxDQUFDLE1BQUFoVCxNQUFBLENBQUFDLGtCQUFBLENBQ2xDd21CLFlBQVksQ0FBQ3pULFdBQVcsQ0FBQyxHQUFBL1Msa0JBQUEsQ0FBS3FtQixVQUFVO0VBQzVDO0VBQ0ZsNUIsUUFBUSxDQUFDcTVCLFlBQVksQ0FBQ3pULFdBQVcsQ0FBQyxDQUFDLEdBQUFwYSxhQUFBLENBQUFBLGFBQUEsS0FFNUI2dEIsWUFBWSxDQUFDelQsV0FBVyxDQUFDLEdBQ3pCc1QsVUFBVSxJQUVmRyxZQUFZLENBQUN6VCxXQUFXLENBQUMsQ0FDOUI7RUFFRCxPQUFBcGEsYUFBQSxDQUFBQSxhQUFBLEtBQ0s2dEIsWUFBWSxHQUNaRyxVQUFVO0FBRWpCO0FBRUEsU0FBU0MscUJBQXFCQSxDQUM1QnJ1QixLQUFRLEVBQ1J3QyxNQUFjLEVBQ2Q4ckIsV0FBbUIsRUFDaEI7RUFDSCxPQUFPLzJCLFFBQVEsQ0FBSSxDQUNqQkQsTUFBTSxDQUFDaTNCLHlCQUF5QixFQUFFO0lBQUMvckIsTUFBTSxFQUFOQSxNQUFNO0lBQUU4ckIsV0FBVyxFQUFYQTtFQUFXLENBQUMsQ0FBQyxFQUN4RGgzQixNQUFNLENBQUNnaEIsb0JBQW9CLEVBQUU7SUFBQzlWLE1BQU0sRUFBTkE7RUFBTSxDQUFDLENBQUMsQ0FDdkMsQ0FBQyxDQUFDeEMsS0FBSyxDQUFDO0FBQ1g7QUFFQSxPQUFPLFNBQVN3dUIsNkJBQTZCQSxDQUMzQ3h1QixLQUFRLEVBQ1J3QyxNQUFjLEVBQ2Q4ckIsV0FBbUIsRUFDaEI7RUFBQSxJQUFBRyxxQkFBQTtFQUNILElBQU1DLGVBQWUsR0FBR3IyQixpQkFBaUIsQ0FBQzJILEtBQUssRUFBRUEsS0FBSyxDQUFDUCxNQUFNLENBQUM7RUFDOUQsSUFBTWlELFNBQVMsR0FBRzJyQixxQkFBcUIsQ0FBQ3J1QixLQUFLLEVBQUV3QyxNQUFNLEVBQUU4ckIsV0FBVyxDQUFDO0VBQ25FO0VBQ0EsSUFBTUssa0JBQWtCLEdBQUFsbkIsa0JBQUEsQ0FBT3pILEtBQUssQ0FBQ3hDLFVBQVUsQ0FBQzs7RUFFaEQ7RUFDQWtGLFNBQVMsQ0FBQ2tzQixvQkFBb0IsR0FBR3Z0QixNQUFNLENBQUNDLElBQUksQ0FBQ3RCLEtBQUssQ0FBQ3BDLFFBQVEsQ0FBQyxDQUFDeUMsR0FBRyxDQUFDLFVBQUFHLENBQUM7SUFBQSxPQUNoRUEsQ0FBQyxLQUFLZ0MsTUFBTSxHQUFHOHJCLFdBQVcsR0FBRzl0QixDQUFDO0VBQUEsQ0FDaEMsQ0FBQzs7RUFFRDtFQUNBLEtBQUFpdUIscUJBQUEsR0FBSS9yQixTQUFTLENBQUNuRixlQUFlLGNBQUFreEIscUJBQUEsZUFBekJBLHFCQUFBLENBQTJCOXRCLE1BQU0sRUFBRTtJQUFBLElBQUFrdUIscUJBQUE7SUFDckM7SUFDQW5zQixTQUFTLENBQUM1RCxtQkFBbUIsSUFBQSt2QixxQkFBQSxHQUFHSCxlQUFlLGFBQWZBLGVBQWUsdUJBQWZBLGVBQWUsQ0FBRTd2QixTQUFTLGNBQUFnd0IscUJBQUEsY0FBQUEscUJBQUEsR0FBSSxFQUFFO0lBQ2hFbnNCLFNBQVMsQ0FBQ2xGLFVBQVUsR0FBQWlLLGtCQUFBLENBQU9rbkIsa0JBQWtCLENBQUM7RUFDaEQ7RUFFQSxPQUFPanNCLFNBQVM7QUFDbEI7QUFFQSxPQUFPLFNBQVM2ckIseUJBQXlCQSxDQUN2Q3Z1QixLQUFRLEVBQUE4dUIsTUFBQSxFQUVMO0VBQUEsSUFERnRzQixNQUFNLEdBQUFzc0IsTUFBQSxDQUFOdHNCLE1BQU07SUFBRThyQixXQUFXLEdBQUFRLE1BQUEsQ0FBWFIsV0FBVztFQUVwQixJQUFNSSxlQUFlLEdBQUdyMkIsaUJBQWlCLENBQUMySCxLQUFLLEVBQUVBLEtBQUssQ0FBQ1AsTUFBTSxDQUFDO0VBRTlELElBQU1pRCxTQUFTLEdBQUcxQyxLQUFLLENBQUNSLE9BQU8sQ0FBQ3FNLE1BQU0sQ0FDcEMsVUFDRWtqQixTQUFTLEVBQUFDLE1BQUEsRUFFTjtJQUFBLElBREZ2ckIsSUFBSSxHQUFBdXJCLE1BQUEsQ0FBSnZyQixJQUFJO01BQUUrVyxXQUFXLEdBQUF3VSxNQUFBLENBQVh4VSxXQUFXO01BQUV5VSx1QkFBdUIsR0FBQUQsTUFBQSxDQUF2QkMsdUJBQXVCO01BQUVDLGtCQUFrQixHQUFBRixNQUFBLENBQWxCRSxrQkFBa0I7TUFBRWxCLFlBQVksR0FBQWdCLE1BQUEsQ0FBWmhCLFlBQVk7TUFBRW1CLGFBQWEsR0FBQUgsTUFBQSxDQUFiRyxhQUFhO0lBRTVGO0lBQ0EsSUFBTXZxQixLQUFLLEdBQUdwUCxPQUFPLENBQUNpTyxJQUFJLENBQUM7SUFDM0IsSUFBTTJyQixZQUFZLEdBQUc1NUIsT0FBTyxDQUFDZ2xCLFdBQVcsQ0FBQztJQUN6QyxJQUFNNlUsVUFBVSxHQUFHWCxlQUFlLEdBQUc5cEIsS0FBSyxDQUFDdkUsR0FBRyxDQUFDLFVBQUE4dEIsQ0FBQztNQUFBLE9BQUlPLGVBQWUsQ0FBQ1AsQ0FBQyxDQUFDO0lBQUEsRUFBQyxHQUFHLEVBQUU7SUFFNUUsSUFBSW1CLGFBQWEsR0FBR1AsU0FBUztJQUM3Qk0sVUFBVSxDQUFDOXRCLE9BQU8sQ0FBQyxVQUFDMnNCLFNBQVMsRUFBRTN0QixDQUFDLEVBQUs7TUFBQSxJQUFBZ3ZCLHFCQUFBO01BQ25DLElBQU1DLGFBQWEsR0FBRztRQUNwQi9yQixJQUFJLEVBQUVtQixLQUFLLENBQUNyRSxDQUFDLENBQUM7UUFDZGlhLFdBQVcsRUFBRTRVLFlBQVksQ0FBQzd1QixDQUFDLENBQUM7UUFDNUIydUIsa0JBQWtCLEVBQWxCQSxrQkFBa0I7UUFDbEJsQixZQUFZLEVBQVpBO01BQ0YsQ0FBQztNQUVELElBQU15QixZQUFZLEdBQ2hCLENBQUFSLHVCQUF1QixhQUF2QkEsdUJBQXVCLHVCQUF2QkEsdUJBQXVCLENBQUdmLFNBQVMsRUFBRTFyQixNQUFNLEVBQUU4ckIsV0FBVyxDQUFDLEtBQ3pEakIsOEJBQThCLENBQUNhLFNBQVMsRUFBRTFyQixNQUFNLEVBQUU4ckIsV0FBVyxDQUFDO01BQ2hFZ0IsYUFBYSxHQUFHRyxZQUFZLEdBQ3hCQyx1QkFBdUIsQ0FBQ0osYUFBYSxFQUFFRyxZQUFZLEVBQUVELGFBQWEsQ0FBQyxHQUNuRUYsYUFBYTtNQUVqQixJQUNFRSxhQUFhLENBQUNoVixXQUFXLEtBQUsxYyxTQUFTLEtBQUF5eEIscUJBQUEsR0FDdkNELGFBQWEsQ0FBQ0UsYUFBYSxDQUFDaFYsV0FBVyxDQUFDLGNBQUErVSxxQkFBQSxlQUF4Q0EscUJBQUEsQ0FBMEM1dUIsTUFBTSxJQUNoRHd1QixhQUFhLEVBQ2I7UUFDQUcsYUFBYSxDQUFDSCxhQUFhLENBQUMsR0FBR2pCLFNBQVMsQ0FBQzd0QixHQUFHLENBQUMsVUFBQXNrQixJQUFJO1VBQUEsT0FBSUEsSUFBSSxDQUFDenBCLEVBQUU7UUFBQSxFQUFDO01BQy9EO0lBQ0YsQ0FBQyxDQUFDO0lBRUYsT0FBT28wQixhQUFhO0VBQ3RCLENBQUMsRUFDRHR2QixLQUNGLENBQUM7RUFFRCxPQUFPMEMsU0FBUztBQUNsQjtBQUVBLFNBQVNndEIsdUJBQXVCQSxDQUM5QjF2QixLQUFLLEVBQ0x5dkIsWUFBWSxFQUFBRSxNQUFBLEVBRVo7RUFBQSxJQURDbHNCLElBQUksR0FBQWtzQixNQUFBLENBQUpsc0IsSUFBSTtJQUFFK1csV0FBVyxHQUFBbVYsTUFBQSxDQUFYblYsV0FBVztJQUFFMFUsa0JBQWtCLEdBQUFTLE1BQUEsQ0FBbEJULGtCQUFrQjtJQUFFbEIsWUFBWSxHQUFBMkIsTUFBQSxDQUFaM0IsWUFBWTtFQUVwRDtFQUNBO0VBQ0EsSUFBSXRyQixTQUFTLEdBQUdtckIsbUJBQW1CLENBQUM3dEIsS0FBSyxFQUFFeXZCLFlBQVksRUFBRTtJQUFDaHNCLElBQUksRUFBSkEsSUFBSTtJQUFFK1csV0FBVyxFQUFYQSxXQUFXO0lBQUV3VCxZQUFZLEVBQVpBO0VBQVksQ0FBQyxDQUFDO0VBQzNGLElBQU1KLFlBQVksR0FBRyxDQUFBc0Isa0JBQWtCLGFBQWxCQSxrQkFBa0IsdUJBQWxCQSxrQkFBa0IsQ0FBR08sWUFBWSxDQUFDLEtBQUkvQixtQkFBbUIsQ0FBQytCLFlBQVksQ0FBQztFQUU1RixJQUFJN0IsWUFBWSxFQUFFO0lBQ2hCbHJCLFNBQVMsR0FBR2xOLE9BQU8sQ0FBQ280QixZQUFZLENBQUMsQ0FBQy9oQixNQUFNLENBQUMsVUFBQ0MsSUFBSSxFQUFFOGpCLFdBQVcsRUFBSztNQUM5RDtNQUNBO01BQ0EsT0FBT3ZCLHFCQUFxQixDQUFDdmlCLElBQUksRUFBRThqQixXQUFXLEVBQUVBLFdBQVcsQ0FBQztJQUM5RCxDQUFDLEVBQUVsdEIsU0FBUyxDQUFDO0VBQ2Y7RUFDQSxPQUFPQSxTQUFTO0FBQ2xCIiwiaWdub3JlTGlzdCI6W119
|