@kepler.gl/deckgl-layers 3.2.5 → 3.3.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/3d-building-layer/3d-building-layer.d.ts +3 -3
- package/dist/3d-building-layer/3d-building-layer.js +9 -12
- package/dist/3d-building-layer/types.d.ts +8 -8
- package/dist/cluster-layer/cluster-layer.d.ts +16 -26
- package/dist/cluster-layer/cluster-layer.js +19 -30
- package/dist/column-layer/enhanced-column-layer.d.ts +4 -4
- package/dist/column-layer/enhanced-column-layer.js +39 -35
- package/dist/deckgl-extensions/filter-arrow-layer.d.ts +33 -6
- package/dist/deckgl-extensions/filter-arrow-layer.js +4 -12
- package/dist/deckgl-extensions/filter-shader-module.d.ts +32 -4
- package/dist/deckgl-extensions/filter-shader-module.js +3 -4
- package/dist/grid-layer/enhanced-cpu-grid-layer.d.ts +4906 -6
- package/dist/grid-layer/enhanced-cpu-grid-layer.js +46 -44
- package/dist/hexagon-layer/enhanced-hexagon-layer.d.ts +4903 -4
- package/dist/hexagon-layer/enhanced-hexagon-layer.js +61 -41
- package/dist/layer-utils/cpu-aggregator.d.ts +74 -27
- package/dist/layer-utils/cpu-aggregator.js +224 -19
- package/dist/line-layer/line-layer.d.ts +4 -4
- package/dist/line-layer/line-layer.js +29 -21
- package/dist/raster/images.d.ts +10 -3
- package/dist/raster/images.js +154 -60
- package/dist/raster/pipeline-validation-patch.d.ts +1 -0
- package/dist/raster/pipeline-validation-patch.js +60 -0
- package/dist/raster/raster-layer/raster-layer-shaders.d.ts +56 -0
- package/dist/raster/raster-layer/raster-layer-shaders.js +129 -0
- package/dist/raster/raster-layer/raster-layer.d.ts +6 -6
- package/dist/raster/raster-layer/raster-layer.js +100 -79
- package/dist/raster/raster-mesh-layer/matrix.d.ts +3 -1
- package/dist/raster/raster-mesh-layer/matrix.js +3 -3
- package/dist/raster/raster-mesh-layer/raster-mesh-layer-shaders.d.ts +19 -0
- package/dist/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +38 -0
- package/dist/raster/raster-mesh-layer/raster-mesh-layer.d.ts +7 -6
- package/dist/raster/raster-mesh-layer/raster-mesh-layer.js +106 -81
- package/dist/raster/types.d.ts +8 -8
- package/dist/raster/types.js +1 -1
- package/dist/raster/webgl/color/colormap.js +13 -7
- package/dist/raster/webgl/color/filter.js +22 -12
- package/dist/raster/webgl/color/gamma-contrast.js +9 -3
- package/dist/raster/webgl/color/linear-rescale.js +9 -5
- package/dist/raster/webgl/color/saturation.js +7 -4
- package/dist/raster/webgl/color/sigmoidal-contrast.js +9 -5
- package/dist/raster/webgl/pansharpen/pansharpen-brovey.js +7 -4
- package/dist/raster/webgl/texture/combine-bands.js +1 -1
- package/dist/raster/webgl/texture/mask.js +27 -35
- package/dist/raster/webgl/texture/reorder-bands.js +8 -5
- package/dist/raster/webgl/texture/rgba-image.js +1 -1
- package/dist/raster/webgl/types.d.ts +11 -6
- package/dist/raster/webgl/types.js +1 -1
- package/dist/svg-icon-layer/scatterplot-icon-layer.d.ts +2 -4
- package/dist/svg-icon-layer/scatterplot-icon-layer.js +19 -25
- package/dist/svg-icon-layer/svg-icon-layer.d.ts +4 -6
- package/dist/svg-icon-layer/svg-icon-layer.js +5 -3
- package/dist/wms/wms-layer.d.ts +3 -3
- package/dist/wms/wms-layer.js +7 -7
- package/package.json +14 -13
|
@@ -12,24 +12,227 @@ exports.getDimensionValueDomain = getDimensionValueDomain;
|
|
|
12
12
|
exports.getGetValue = getGetValue;
|
|
13
13
|
exports.getScaleFunctor = getScaleFunctor;
|
|
14
14
|
exports.getValueFunc = getValueFunc;
|
|
15
|
+
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
16
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
15
17
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
16
18
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
17
|
-
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
18
19
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
19
|
-
var
|
|
20
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
20
21
|
var _window = require("global/window");
|
|
21
22
|
var _utils = require("@kepler.gl/utils");
|
|
22
23
|
var _constants = require("@kepler.gl/constants");
|
|
23
24
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
24
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
25
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
26
|
+
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; } } }; }
|
|
27
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
28
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } // SPDX-License-Identifier: MIT
|
|
25
29
|
// Copyright contributors to the kepler.gl project
|
|
26
30
|
/* eslint-disable guard-for-in */
|
|
27
|
-
var
|
|
31
|
+
var AGGREGATION_OPERATION = {
|
|
32
|
+
SUM: 'SUM',
|
|
33
|
+
MEAN: 'MEAN',
|
|
34
|
+
MIN: 'MIN',
|
|
35
|
+
MAX: 'MAX',
|
|
36
|
+
COUNT: 'COUNT'
|
|
37
|
+
};
|
|
38
|
+
var MAX_32_BIT_FLOAT = 3.402823466e38;
|
|
39
|
+
var defaultGetValue = function defaultGetValue(points) {
|
|
40
|
+
return points.length;
|
|
41
|
+
};
|
|
42
|
+
var defaultGetPoints = function defaultGetPoints(bin) {
|
|
43
|
+
return bin.points;
|
|
44
|
+
};
|
|
45
|
+
var defaultGetIndex = function defaultGetIndex(bin) {
|
|
46
|
+
return bin.index;
|
|
47
|
+
};
|
|
48
|
+
var ascending = function ascending(a, b) {
|
|
49
|
+
return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
|
|
50
|
+
};
|
|
51
|
+
function clamp(value, min, max) {
|
|
52
|
+
return Math.max(min, Math.min(max, value));
|
|
53
|
+
}
|
|
54
|
+
function getQuantileDomain(data, valueAccessor) {
|
|
55
|
+
return data.map(valueAccessor).sort(ascending);
|
|
56
|
+
}
|
|
57
|
+
function getOrdinalDomain(data, valueAccessor) {
|
|
58
|
+
return (0, _toConsumableArray2["default"])(new Set(data.map(valueAccessor)));
|
|
59
|
+
}
|
|
60
|
+
var BinSorter = /*#__PURE__*/function () {
|
|
61
|
+
function BinSorter() {
|
|
62
|
+
var bins = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
63
|
+
var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
64
|
+
(0, _classCallCheck2["default"])(this, BinSorter);
|
|
65
|
+
(0, _defineProperty2["default"])(this, "maxCount", void 0);
|
|
66
|
+
(0, _defineProperty2["default"])(this, "maxValue", void 0);
|
|
67
|
+
(0, _defineProperty2["default"])(this, "minValue", void 0);
|
|
68
|
+
(0, _defineProperty2["default"])(this, "totalCount", void 0);
|
|
69
|
+
(0, _defineProperty2["default"])(this, "aggregatedBins", void 0);
|
|
70
|
+
(0, _defineProperty2["default"])(this, "sortedBins", void 0);
|
|
71
|
+
(0, _defineProperty2["default"])(this, "binMap", void 0);
|
|
72
|
+
this.aggregatedBins = this._getAggregatedBins(bins, props);
|
|
73
|
+
this._updateMinMaxValues();
|
|
74
|
+
this.binMap = this._getBinMap();
|
|
75
|
+
}
|
|
76
|
+
return (0, _createClass2["default"])(BinSorter, [{
|
|
77
|
+
key: "_getAggregatedBins",
|
|
78
|
+
value: function _getAggregatedBins(bins, props) {
|
|
79
|
+
var _props$getValue = props.getValue,
|
|
80
|
+
getValue = _props$getValue === void 0 ? defaultGetValue : _props$getValue,
|
|
81
|
+
_props$getPoints = props.getPoints,
|
|
82
|
+
getPoints = _props$getPoints === void 0 ? defaultGetPoints : _props$getPoints,
|
|
83
|
+
_props$getIndex = props.getIndex,
|
|
84
|
+
getIndex = _props$getIndex === void 0 ? defaultGetIndex : _props$getIndex,
|
|
85
|
+
filterData = props.filterData;
|
|
86
|
+
var hasFilter = typeof filterData === 'function';
|
|
87
|
+
var aggregatedBins = [];
|
|
88
|
+
var index = 0;
|
|
89
|
+
for (var binIndex = 0; binIndex < bins.length; binIndex++) {
|
|
90
|
+
var bin = bins[binIndex];
|
|
91
|
+
var points = getPoints(bin);
|
|
92
|
+
var i = getIndex(bin);
|
|
93
|
+
var filteredPoints = hasFilter ? points.filter(filterData) : points;
|
|
94
|
+
bin.filteredPoints = hasFilter ? filteredPoints : null;
|
|
95
|
+
var value = filteredPoints.length ? getValue(filteredPoints) : null;
|
|
96
|
+
if (value !== null && value !== undefined) {
|
|
97
|
+
aggregatedBins[index] = {
|
|
98
|
+
i: Number.isFinite(i) ? i : binIndex,
|
|
99
|
+
value: value,
|
|
100
|
+
counts: filteredPoints.length
|
|
101
|
+
};
|
|
102
|
+
index++;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return aggregatedBins;
|
|
106
|
+
}
|
|
107
|
+
}, {
|
|
108
|
+
key: "_updateMinMaxValues",
|
|
109
|
+
value: function _updateMinMaxValues() {
|
|
110
|
+
var maxCount = 0;
|
|
111
|
+
var maxValue = -MAX_32_BIT_FLOAT;
|
|
112
|
+
var minValue = MAX_32_BIT_FLOAT;
|
|
113
|
+
var totalCount = 0;
|
|
114
|
+
var _iterator = _createForOfIteratorHelper(this.aggregatedBins),
|
|
115
|
+
_step;
|
|
116
|
+
try {
|
|
117
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
118
|
+
var x = _step.value;
|
|
119
|
+
maxCount = maxCount > x.counts ? maxCount : x.counts;
|
|
120
|
+
maxValue = maxValue > x.value ? maxValue : x.value;
|
|
121
|
+
minValue = minValue < x.value ? minValue : x.value;
|
|
122
|
+
totalCount += x.counts;
|
|
123
|
+
}
|
|
124
|
+
} catch (err) {
|
|
125
|
+
_iterator.e(err);
|
|
126
|
+
} finally {
|
|
127
|
+
_iterator.f();
|
|
128
|
+
}
|
|
129
|
+
if (this.aggregatedBins.length === 0) {
|
|
130
|
+
maxValue = 0;
|
|
131
|
+
minValue = 0;
|
|
132
|
+
}
|
|
133
|
+
this.maxCount = maxCount;
|
|
134
|
+
this.maxValue = maxValue;
|
|
135
|
+
this.minValue = minValue;
|
|
136
|
+
this.totalCount = totalCount;
|
|
137
|
+
}
|
|
138
|
+
}, {
|
|
139
|
+
key: "_getBinMap",
|
|
140
|
+
value: function _getBinMap() {
|
|
141
|
+
var binMap = {};
|
|
142
|
+
var _iterator2 = _createForOfIteratorHelper(this.aggregatedBins),
|
|
143
|
+
_step2;
|
|
144
|
+
try {
|
|
145
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
146
|
+
var bin = _step2.value;
|
|
147
|
+
binMap[bin.i] = bin;
|
|
148
|
+
}
|
|
149
|
+
} catch (err) {
|
|
150
|
+
_iterator2.e(err);
|
|
151
|
+
} finally {
|
|
152
|
+
_iterator2.f();
|
|
153
|
+
}
|
|
154
|
+
return binMap;
|
|
155
|
+
}
|
|
156
|
+
}, {
|
|
157
|
+
key: "_percentileToIndex",
|
|
158
|
+
value: function _percentileToIndex(percentileRange) {
|
|
159
|
+
var len = this.sortedBins.length;
|
|
160
|
+
if (len < 2) return [0, 0];
|
|
161
|
+
var _percentileRange$map = percentileRange.map(function (n) {
|
|
162
|
+
return clamp(n, 0, 100);
|
|
163
|
+
}),
|
|
164
|
+
_percentileRange$map2 = (0, _slicedToArray2["default"])(_percentileRange$map, 2),
|
|
165
|
+
lower = _percentileRange$map2[0],
|
|
166
|
+
upper = _percentileRange$map2[1];
|
|
167
|
+
return [Math.ceil(lower / 100 * (len - 1)), Math.floor(upper / 100 * (len - 1))];
|
|
168
|
+
}
|
|
169
|
+
}, {
|
|
170
|
+
key: "getValueDomainByScale",
|
|
171
|
+
value: function getValueDomainByScale(scale) {
|
|
172
|
+
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [],
|
|
173
|
+
_ref2 = (0, _slicedToArray2["default"])(_ref, 2),
|
|
174
|
+
_ref2$ = _ref2[0],
|
|
175
|
+
lower = _ref2$ === void 0 ? 0 : _ref2$,
|
|
176
|
+
_ref2$2 = _ref2[1],
|
|
177
|
+
upper = _ref2$2 === void 0 ? 100 : _ref2$2;
|
|
178
|
+
if (!this.sortedBins) {
|
|
179
|
+
this.sortedBins = this.aggregatedBins.sort(function (a, b) {
|
|
180
|
+
return ascending(a.value, b.value);
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
if (!this.sortedBins.length) return [];
|
|
184
|
+
var indexEdge = this._percentileToIndex([lower, upper]);
|
|
185
|
+
return this._getScaleDomain(scale, indexEdge);
|
|
186
|
+
}
|
|
187
|
+
}, {
|
|
188
|
+
key: "_getScaleDomain",
|
|
189
|
+
value: function _getScaleDomain(scaleType, _ref3) {
|
|
190
|
+
var _ref4 = (0, _slicedToArray2["default"])(_ref3, 2),
|
|
191
|
+
lowerIdx = _ref4[0],
|
|
192
|
+
upperIdx = _ref4[1];
|
|
193
|
+
var bins = this.sortedBins;
|
|
194
|
+
switch (scaleType) {
|
|
195
|
+
case 'quantize':
|
|
196
|
+
case 'linear':
|
|
197
|
+
return [bins[lowerIdx].value, bins[upperIdx].value];
|
|
198
|
+
case 'quantile':
|
|
199
|
+
return getQuantileDomain(bins.slice(lowerIdx, upperIdx + 1), function (d) {
|
|
200
|
+
return d.value;
|
|
201
|
+
});
|
|
202
|
+
case 'ordinal':
|
|
203
|
+
return getOrdinalDomain(bins, function (d) {
|
|
204
|
+
return d.value;
|
|
205
|
+
});
|
|
206
|
+
default:
|
|
207
|
+
return [bins[lowerIdx].value, bins[upperIdx].value];
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}, {
|
|
211
|
+
key: "getValueRange",
|
|
212
|
+
value: function getValueRange(percentileRange) {
|
|
213
|
+
if (!this.sortedBins) {
|
|
214
|
+
this.sortedBins = this.aggregatedBins.sort(function (a, b) {
|
|
215
|
+
return ascending(a.value, b.value);
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
if (!this.sortedBins.length) return [];
|
|
219
|
+
var lowerIdx = 0;
|
|
220
|
+
var upperIdx = this.sortedBins.length - 1;
|
|
221
|
+
if (Array.isArray(percentileRange)) {
|
|
222
|
+
var idxRange = this._percentileToIndex(percentileRange);
|
|
223
|
+
lowerIdx = idxRange[0];
|
|
224
|
+
upperIdx = idxRange[1];
|
|
225
|
+
}
|
|
226
|
+
return [this.sortedBins[lowerIdx].value, this.sortedBins[upperIdx].value];
|
|
227
|
+
}
|
|
228
|
+
}]);
|
|
229
|
+
}();
|
|
230
|
+
var DECK_AGGREGATION_MAP = exports.DECK_AGGREGATION_MAP = (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, AGGREGATION_OPERATION.SUM, _constants.AGGREGATION_TYPES.sum), AGGREGATION_OPERATION.MEAN, _constants.AGGREGATION_TYPES.average), AGGREGATION_OPERATION.MIN, _constants.AGGREGATION_TYPES.minimum), AGGREGATION_OPERATION.MAX, _constants.AGGREGATION_TYPES.maximum);
|
|
28
231
|
function getValueFunc(aggregation, accessor) {
|
|
29
|
-
if (!aggregation || !
|
|
232
|
+
if (!aggregation || !AGGREGATION_OPERATION[aggregation.toUpperCase()]) {
|
|
30
233
|
_window.console.warn("Aggregation ".concat(aggregation, " is not supported"));
|
|
31
234
|
}
|
|
32
|
-
var op =
|
|
235
|
+
var op = AGGREGATION_OPERATION[aggregation.toUpperCase()] || AGGREGATION_OPERATION.SUM;
|
|
33
236
|
var keplerOp = DECK_AGGREGATION_MAP[op];
|
|
34
237
|
return function (pts) {
|
|
35
238
|
return (0, _utils.aggregate)(pts.map(accessor), keplerOp);
|
|
@@ -64,8 +267,7 @@ function getGetValue(step, props, dimensionUpdater) {
|
|
|
64
267
|
function getDimensionSortedBins(step, props, dimensionUpdater) {
|
|
65
268
|
var key = dimensionUpdater.key;
|
|
66
269
|
var getValue = this.state.dimensions[key].getValue;
|
|
67
|
-
|
|
68
|
-
var sortedBins = new _aggregationLayers._BinSorter(this.state.layerData.data || [], {
|
|
270
|
+
var sortedBins = new BinSorter(this.state.layerData.data || [], {
|
|
69
271
|
getValue: getValue,
|
|
70
272
|
filterData: props._filterData
|
|
71
273
|
});
|
|
@@ -117,10 +319,12 @@ function getDimensionScale(step, props, dimensionUpdater) {
|
|
|
117
319
|
scaleFunc.scaleType = props.colorScaleType;
|
|
118
320
|
if ((0, _typeof2["default"])(onSet) === 'object' && typeof props[onSet.props] === 'function') {
|
|
119
321
|
var sortedBins = this.state.dimensions[key].sortedBins;
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
322
|
+
if (sortedBins) {
|
|
323
|
+
props[onSet.props]({
|
|
324
|
+
domain: scaleFunc.domain(),
|
|
325
|
+
aggregatedBins: sortedBins.binMap
|
|
326
|
+
});
|
|
327
|
+
}
|
|
124
328
|
}
|
|
125
329
|
this._setDimensionState(key, {
|
|
126
330
|
scaleFunc: scaleFunc
|
|
@@ -520,9 +724,9 @@ var CPUAggregator = exports["default"] = /*#__PURE__*/function () {
|
|
|
520
724
|
// fold dimension triggers into each accessor
|
|
521
725
|
updateTriggers[accessor] = {};
|
|
522
726
|
updateSteps.forEach(function (step) {
|
|
523
|
-
Object.values(step.triggers || []).forEach(function (
|
|
524
|
-
var prop =
|
|
525
|
-
updateTrigger =
|
|
727
|
+
Object.values(step.triggers || []).forEach(function (_ref5) {
|
|
728
|
+
var prop = _ref5.prop,
|
|
729
|
+
updateTrigger = _ref5.updateTrigger;
|
|
526
730
|
if (updateTrigger) {
|
|
527
731
|
// if prop is based on updateTrigger e.g. getColorValue, getColorWeight
|
|
528
732
|
// and updateTriggers is passed in from layer prop
|
|
@@ -548,11 +752,12 @@ var CPUAggregator = exports["default"] = /*#__PURE__*/function () {
|
|
|
548
752
|
}
|
|
549
753
|
}, {
|
|
550
754
|
key: "getPickingInfo",
|
|
551
|
-
value: function getPickingInfo(
|
|
552
|
-
var
|
|
755
|
+
value: function getPickingInfo(_ref6, layerProps) {
|
|
756
|
+
var _this$state$layerData;
|
|
757
|
+
var info = _ref6.info;
|
|
553
758
|
var isPicked = info.picked && info.index > -1;
|
|
554
759
|
var object = null;
|
|
555
|
-
var cell = isPicked ? this.state.layerData.data[info.index] : null;
|
|
760
|
+
var cell = isPicked ? (_this$state$layerData = this.state.layerData.data) === null || _this$state$layerData === void 0 ? void 0 : _this$state$layerData[info.index] : null;
|
|
556
761
|
if (cell) {
|
|
557
762
|
var binInfo = {};
|
|
558
763
|
for (var key in this.dimensionUpdaters) {
|
|
@@ -590,4 +795,4 @@ var CPUAggregator = exports["default"] = /*#__PURE__*/function () {
|
|
|
590
795
|
}();
|
|
591
796
|
(0, _defineProperty2["default"])(CPUAggregator, "getDimensionScale", void 0);
|
|
592
797
|
CPUAggregator.getDimensionScale = getDimensionScale;
|
|
593
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYWdncmVnYXRpb25MYXllcnMiLCJyZXF1aXJlIiwiX3dpbmRvdyIsIl91dGlscyIsIl9jb25zdGFudHMiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIkRFQ0tfQUdHUkVHQVRJT05fTUFQIiwiZXhwb3J0cyIsIkFHR1JFR0FUSU9OX09QRVJBVElPTiIsIlNVTSIsIkFHR1JFR0FUSU9OX1RZUEVTIiwic3VtIiwiTUVBTiIsImF2ZXJhZ2UiLCJNSU4iLCJtaW5pbXVtIiwiTUFYIiwibWF4aW11bSIsImdldFZhbHVlRnVuYyIsImFnZ3JlZ2F0aW9uIiwiYWNjZXNzb3IiLCJ0b1VwcGVyQ2FzZSIsIkNvbnNvbGUiLCJ3YXJuIiwiY29uY2F0Iiwib3AiLCJrZXBsZXJPcCIsInB0cyIsImFnZ3JlZ2F0ZSIsIm1hcCIsImdldFNjYWxlRnVuY3RvciIsInNjYWxlVHlwZSIsIlNDQUxFX0ZVTkMiLCJxdWFudGl6ZSIsIm5vcCIsImdldEdldFZhbHVlIiwic3RlcCIsInByb3BzIiwiZGltZW5zaW9uVXBkYXRlciIsImtleSIsIl9zdGVwJHRyaWdnZXJzIiwidHJpZ2dlcnMiLCJ2YWx1ZSIsIndlaWdodCIsImdldFZhbHVlIiwicHJvcCIsIl9zZXREaW1lbnNpb25TdGF0ZSIsImdldERpbWVuc2lvblNvcnRlZEJpbnMiLCJzdGF0ZSIsImRpbWVuc2lvbnMiLCJzb3J0ZWRCaW5zIiwiQmluU29ydGVyIiwibGF5ZXJEYXRhIiwiZGF0YSIsImZpbHRlckRhdGEiLCJfZmlsdGVyRGF0YSIsImdldERpbWVuc2lvblZhbHVlRG9tYWluIiwiX3N0ZXAkdHJpZ2dlcnMyIiwibG93ZXJQZXJjZW50aWxlIiwidXBwZXJQZXJjZW50aWxlIiwidmFsdWVEb21haW4iLCJnZXRWYWx1ZURvbWFpbkJ5U2NhbGUiLCJjb2xvclNjYWxlVHlwZSIsImNvbG9yTWFwIiwicmVkdWNlIiwicHJldiIsImN1ciIsIk51bWJlciIsImlzRmluaXRlIiwiZ2V0RGltZW5zaW9uU2NhbGUiLCJfc3RlcCR0cmlnZ2VyczMiLCJkb21haW4iLCJyYW5nZSIsImZpeGVkIiwib25TZXQiLCJkaW1lbnNpb25SYW5nZSIsImRpbWVuc2lvbkRvbWFpbiIsImRpbWVuc2lvbkZpeGVkIiwiQm9vbGVhbiIsInNjYWxlRnVuY3RvciIsInNjYWxlRnVuYyIsIl90eXBlb2YyIiwiYWdncmVnYXRlZEJpbnMiLCJiaW5NYXAiLCJub3JtYWxpemVSZXN1bHQiLCJyZXN1bHQiLCJ1bmRlZmluZWQiLCJoZXhhZ29ucyIsImFzc2lnbiIsImdldEFnZ3JlZ2F0ZWREYXRhIiwiYWdncmVnYXRpb25QYXJhbXMiLCJhZ2dyIiwiYWdncmVnYXRvciIsInNldFN0YXRlIiwiZGVmYXVsdEFnZ3JlZ2F0aW9uIiwidXBkYXRlU3RlcHMiLCJjZWxsU2l6ZSIsInBvc2l0aW9uIiwidXBkYXRlVHJpZ2dlciIsInVwZGF0ZXIiLCJnZXRTdWJMYXllckFjY2Vzc29yIiwiZGltZW5zaW9uU3RhdGUiLCJkaW1lbnNpb24iLCJjZWxsIiwiYmluIiwiaW5kZXgiLCJjb3VudHMiLCJudWxsVmFsdWUiLCJjdiIsImlzVmFsdWVJbkRvbWFpbiIsIm1pblZhbHVlIiwibWF4VmFsdWUiLCJkZWZhdWx0Q29sb3JEaW1lbnNpb24iLCJnZXRQaWNraW5nSW5mbyIsImNvbG9yVmFsdWUiLCJkZWZhdWx0RWxldmF0aW9uRGltZW5zaW9uIiwiZWxldmF0aW9uVmFsdWUiLCJkZWZhdWx0RGltZW5zaW9ucyIsIkNQVUFnZ3JlZ2F0b3IiLCJvcHRzIiwiX2NsYXNzQ2FsbENoZWNrMiIsImluaXRpYWxTdGF0ZSIsImRpbWVuc2lvblVwZGF0ZXJzIiwiYWdncmVnYXRpb25VcGRhdGVyIiwiX2FkZERpbWVuc2lvbiIsIl9jcmVhdGVDbGFzczIiLCJ1cGRhdGVBbGxEaW1lbnNpb25zIiwiZGltZW5zaW9uQ2hhbmdlcyIsImRpbSIsInVwZGF0ZXJzIiwiX2FjY3VtdWxhdGVVcGRhdGVycyIsImYiLCJ1cGRhdGVBZ2dyZWdhdGlvbiIsInVwZGF0ZVN0YXRlIiwib2xkUHJvcHMiLCJjaGFuZ2VGbGFncyIsImRhdGFDaGFuZ2VkIiwiYWdncmVnYXRpb25DaGFuZ2VzIiwiX2dldEFnZ3JlZ2F0aW9uQ2hhbmdlcyIsIl9nZXREaW1lbnNpb25DaGFuZ2VzIiwidXBkYXRlT2JqZWN0IiwiX2FkZEFnZ3JlZ2F0aW9uIiwiX3RoaXMiLCJfbmVlZFVwZGF0ZVN0ZXAiLCJkaW1lbnNpb25TdGVwIiwidmFsdWVzIiwic29tZSIsIml0ZW0iLCJ1cGRhdGVUcmlnZ2Vyc0NoYW5nZWQiLCJhbGwiLCJpIiwiYmluZCIsIl9nZXRBbGxVcGRhdGVycyIsIl90aGlzMiIsIm5lZWRVcGRhdGVTdGVwIiwiZmluZEluZGV4IiwiZ2V0VXBkYXRlVHJpZ2dlcnMiLCJfdGhpczMiLCJfdXBkYXRlVHJpZ2dlcnMiLCJ1cGRhdGVUcmlnZ2VycyIsIl9sb29wIiwiX3RoaXMzJGRpbWVuc2lvblVwZGF0IiwiX3JlZiIsImZyb21Qcm9wIiwiQXJyYXkiLCJpc0FycmF5IiwiX3JlZjIiLCJsYXllclByb3BzIiwiaW5mbyIsImlzUGlja2VkIiwicGlja2VkIiwib2JqZWN0IiwiYmluSW5mbyIsInBvaW50cyIsImZpbHRlcmVkUG9pbnRzIiwiZ2V0QWNjZXNzb3IiLCJkaW1lbnNpb25LZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbGF5ZXItdXRpbHMvY3B1LWFnZ3JlZ2F0b3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuLyogZXNsaW50LWRpc2FibGUgZ3VhcmQtZm9yLWluICovXG5pbXBvcnQge0FHR1JFR0FUSU9OX09QRVJBVElPTiwgX0JpblNvcnRlciBhcyBCaW5Tb3J0ZXJ9IGZyb20gJ0BkZWNrLmdsL2FnZ3JlZ2F0aW9uLWxheWVycyc7XG5pbXBvcnQge2NvbnNvbGUgYXMgQ29uc29sZX0gZnJvbSAnZ2xvYmFsL3dpbmRvdyc7XG5cbmltcG9ydCB7YWdncmVnYXRlfSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7QUdHUkVHQVRJT05fVFlQRVMsIFNDQUxFX0ZVTkN9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7UkdCQUNvbG9yfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgVXBkYXRlclR5cGUgPSAodGhpczogQ1BVQWdncmVnYXRvciwgc3RlcCwgcHJvcHMsIGRpbWVuc2lvblVwZGF0ZXIpID0+IHZvaWQ7XG5leHBvcnQgdHlwZSBCaW5kZWRVcGRhdGVyVHlwZSA9ICgpID0+IHZvaWQ7XG5leHBvcnQgdHlwZSBBZ2dyZWdhdGVkVXBkYXRlclR5cGUgPSAoXG4gIHRoaXM6IENQVUFnZ3JlZ2F0b3IsXG4gIHN0ZXAsXG4gIHByb3BzLFxuICBhZ2dyZWdhdGlvbixcbiAgYWdncmVnYXRpb25QYXJhbXNcbikgPT4gdm9pZDtcbmV4cG9ydCB0eXBlIEJpbmRlZEFnZ3JlZ2F0ZWRVcGRhdGVyVHlwZSA9IChhZ2dyZWdhdGlvblBhcmFtcykgPT4gdm9pZDtcblxuZXhwb3J0IHR5cGUgVXBkYXRlU3RlcHNUeXBlID0ge1xuICBrZXk6IHN0cmluZztcbiAgdHJpZ2dlcnM6IHtcbiAgICBba2V5OiBzdHJpbmddOiB7XG4gICAgICBwcm9wOiBzdHJpbmc7XG4gICAgICB1cGRhdGVUcmlnZ2VyPzogc3RyaW5nO1xuICAgIH07XG4gIH07XG4gIG9uU2V0Pzoge1xuICAgIHByb3BzOiBzdHJpbmc7XG4gIH07XG4gIHVwZGF0ZXI6IFVwZGF0ZXJUeXBlO1xufTtcblxuZXhwb3J0IHR5cGUgRGltZW5zaW9uVHlwZTxWYWx1ZVR5cGUgPSBhbnk+ID0ge1xuICBrZXk6IHN0cmluZztcbiAgYWNjZXNzb3I6IHN0cmluZztcbiAgZ2V0UGlja2luZ0luZm86IChkaW1lbnNpb25TdGF0ZSwgY2VsbCwgbGF5ZXJQcm9wcz8pID0+IGFueTtcbiAgbnVsbFZhbHVlOiBWYWx1ZVR5cGU7XG4gIHVwZGF0ZVN0ZXBzOiBVcGRhdGVTdGVwc1R5cGVbXTtcbiAgZ2V0U3ViTGF5ZXJBY2Nlc3Nvcjtcbn07XG5cbmV4cG9ydCB0eXBlIEFnZ3JlZ2F0aW9uVXBkYXRlU3RlcHNUeXBlID0ge1xuICBrZXk6IHN0cmluZztcbiAgdHJpZ2dlcnM6IHtcbiAgICBba2V5OiBzdHJpbmddOiB7XG4gICAgICBwcm9wOiBzdHJpbmc7XG4gICAgICB1cGRhdGVUcmlnZ2VyPzogc3RyaW5nO1xuICAgIH07XG4gIH07XG4gIHVwZGF0ZXI6IEFnZ3JlZ2F0ZWRVcGRhdGVyVHlwZTtcbn07XG5cbmV4cG9ydCB0eXBlIEFnZ3JlZ2F0aW9uVHlwZSA9IHtcbiAga2V5OiBzdHJpbmc7XG4gIHVwZGF0ZVN0ZXBzOiBBZ2dyZWdhdGlvblVwZGF0ZVN0ZXBzVHlwZVtdO1xufTtcblxuZXhwb3J0IGNvbnN0IERFQ0tfQUdHUkVHQVRJT05fTUFQID0ge1xuICBbQUdHUkVHQVRJT05fT1BFUkFUSU9OLlNVTV06IEFHR1JFR0FUSU9OX1RZUEVTLnN1bSxcbiAgW0FHR1JFR0FUSU9OX09QRVJBVElPTi5NRUFOXTogQUdHUkVHQVRJT05fVFlQRVMuYXZlcmFnZSxcbiAgW0FHR1JFR0FUSU9OX09QRVJBVElPTi5NSU5dOiBBR0dSRUdBVElPTl9UWVBFUy5taW5pbXVtLFxuICBbQUdHUkVHQVRJT05fT1BFUkFUSU9OLk1BWF06IEFHR1JFR0FUSU9OX1RZUEVTLm1heGltdW1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWYWx1ZUZ1bmMoYWdncmVnYXRpb24sIGFjY2Vzc29yKSB7XG4gIGlmICghYWdncmVnYXRpb24gfHwgIUFHR1JFR0FUSU9OX09QRVJBVElPTlthZ2dyZWdhdGlvbi50b1VwcGVyQ2FzZSgpXSkge1xuICAgIENvbnNvbGUud2FybihgQWdncmVnYXRpb24gJHthZ2dyZWdhdGlvbn0gaXMgbm90IHN1cHBvcnRlZGApO1xuICB9XG5cbiAgY29uc3Qgb3AgPSBBR0dSRUdBVElPTl9PUEVSQVRJT05bYWdncmVnYXRpb24udG9VcHBlckNhc2UoKV0gfHwgQUdHUkVHQVRJT05fT1BFUkFUSU9OLlNVTTtcbiAgY29uc3Qga2VwbGVyT3AgPSBERUNLX0FHR1JFR0FUSU9OX01BUFtvcF07XG5cbiAgcmV0dXJuIHB0cyA9PiBhZ2dyZWdhdGUocHRzLm1hcChhY2Nlc3NvciksIGtlcGxlck9wKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjYWxlRnVuY3RvcihzY2FsZVR5cGUpIHtcbiAgaWYgKCFzY2FsZVR5cGUgfHwgIVNDQUxFX0ZVTkNbc2NhbGVUeXBlXSkge1xuICAgIENvbnNvbGUud2FybihgU2NhbGUgJHtzY2FsZVR5cGV9IGlzIG5vdCBzdXBwb3J0ZWRgKTtcbiAgfVxuICByZXR1cm4gU0NBTEVfRlVOQ1tzY2FsZVR5cGVdIHx8IFNDQUxFX0ZVTkMucXVhbnRpemU7XG59XG5cbmZ1bmN0aW9uIG5vcCgpIHtcbiAgcmV0dXJuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2V0VmFsdWUodGhpczogQ1BVQWdncmVnYXRvciwgc3RlcCwgcHJvcHMsIGRpbWVuc2lvblVwZGF0ZXIpIHtcbiAgY29uc3Qge2tleX0gPSBkaW1lbnNpb25VcGRhdGVyO1xuICBjb25zdCB7dmFsdWUsIHdlaWdodCwgYWdncmVnYXRpb259ID0gc3RlcC50cmlnZ2VycztcblxuICBsZXQgZ2V0VmFsdWUgPSBwcm9wc1t2YWx1ZS5wcm9wXTtcblxuICBpZiAoZ2V0VmFsdWUgPT09IG51bGwpIHtcbiAgICAvLyBJZiBgZ2V0VmFsdWVgIGlzIG5vdCBwcm92aWRlZCBmcm9tIHByb3BzLCBidWlsZCBpdCB3aXRoIGFnZ3JlZ2F0aW9uIGFuZCB3ZWlnaHQuXG4gICAgZ2V0VmFsdWUgPSBnZXRWYWx1ZUZ1bmMocHJvcHNbYWdncmVnYXRpb24ucHJvcF0sIHByb3BzW3dlaWdodC5wcm9wXSk7XG4gIH1cblxuICBpZiAoZ2V0VmFsdWUpIHtcbiAgICB0aGlzLl9zZXREaW1lbnNpb25TdGF0ZShrZXksIHtnZXRWYWx1ZX0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREaW1lbnNpb25Tb3J0ZWRCaW5zKHRoaXM6IENQVUFnZ3JlZ2F0b3IsIHN0ZXAsIHByb3BzLCBkaW1lbnNpb25VcGRhdGVyKSB7XG4gIGNvbnN0IHtrZXl9ID0gZGltZW5zaW9uVXBkYXRlcjtcbiAgY29uc3Qge2dldFZhbHVlfSA9IHRoaXMuc3RhdGUuZGltZW5zaW9uc1trZXldO1xuICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gIGNvbnN0IHNvcnRlZEJpbnMgPSBuZXcgQmluU29ydGVyKHRoaXMuc3RhdGUubGF5ZXJEYXRhLmRhdGEgfHwgW10sIHtcbiAgICBnZXRWYWx1ZSxcbiAgICBmaWx0ZXJEYXRhOiBwcm9wcy5fZmlsdGVyRGF0YVxuICB9KTtcbiAgdGhpcy5fc2V0RGltZW5zaW9uU3RhdGUoa2V5LCB7c29ydGVkQmluc30pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGltZW5zaW9uVmFsdWVEb21haW4odGhpczogQ1BVQWdncmVnYXRvciwgc3RlcCwgcHJvcHMsIGRpbWVuc2lvblVwZGF0ZXIpIHtcbiAgY29uc3Qge2tleX0gPSBkaW1lbnNpb25VcGRhdGVyO1xuICBjb25zdCB7XG4gICAgdHJpZ2dlcnM6IHtsb3dlclBlcmNlbnRpbGUsIHVwcGVyUGVyY2VudGlsZSwgc2NhbGVUeXBlfVxuICB9ID0gc3RlcDtcblxuICBpZiAoIXRoaXMuc3RhdGUuZGltZW5zaW9uc1trZXldLnNvcnRlZEJpbnMpIHtcbiAgICAvLyB0aGUgcHJldmlvdXMgc3RlcCBzaG91bGQgc2V0IHNvcnRlZEJpbnMsIGlmIG5vdCwgc29tZXRoaW5nIHdlbnQgd3JvbmdcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgdmFsdWVEb21haW4gPVxuICAgIC8vIGZvciBsb2cgYW5kIHNxcnQgc2NhbGUsIHJldHVybnMgbGluZWFyIGRvbWFpbiBieSBkZWZhdWx0XG4gICAgLy8gVE9ETzogc3VwcG9ydCBvdGhlciBzY2FsZSBmdW5jdGlvbiBkb21haW4gaW4gYmluIHNvcnRlclxuICAgIHRoaXMuc3RhdGUuZGltZW5zaW9uc1trZXldLnNvcnRlZEJpbnMuZ2V0VmFsdWVEb21haW5CeVNjYWxlKHByb3BzW3NjYWxlVHlwZS5wcm9wXSwgW1xuICAgICAgcHJvcHNbbG93ZXJQZXJjZW50aWxlLnByb3BdLFxuICAgICAgcHJvcHNbdXBwZXJQZXJjZW50aWxlLnByb3BdXG4gICAgXSk7XG5cbiAgaWYgKHByb3BzLmNvbG9yU2NhbGVUeXBlID09PSAnY3VzdG9tJyAmJiBwcm9wcy5jb2xvck1hcCkge1xuICAgIC8vIGZvciBjdXN0b20gc2NhbGUsIHJldHVybiBjdXN0b20gYnJlYWtzIGFzIHZhbHVlIGRvbWFpbiBkaXJlY3RseVxuICAgIHZhbHVlRG9tYWluID0gcHJvcHMuY29sb3JNYXAucmVkdWNlKFxuICAgICAgKHByZXYsIGN1cikgPT4gKE51bWJlci5pc0Zpbml0ZShjdXJbMF0pID8gcHJldi5jb25jYXQoY3VyWzBdKSA6IHByZXYpLFxuICAgICAgW11cbiAgICApO1xuICB9XG5cbiAgdGhpcy5fc2V0RGltZW5zaW9uU3RhdGUoa2V5LCB7dmFsdWVEb21haW59KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERpbWVuc2lvblNjYWxlKHRoaXM6IENQVUFnZ3JlZ2F0b3IsIHN0ZXAsIHByb3BzLCBkaW1lbnNpb25VcGRhdGVyKSB7XG4gIGNvbnN0IHtrZXl9ID0gZGltZW5zaW9uVXBkYXRlcjtcbiAgY29uc3Qge2RvbWFpbiwgcmFuZ2UsIHNjYWxlVHlwZSwgZml4ZWR9ID0gc3RlcC50cmlnZ2VycztcbiAgY29uc3Qge29uU2V0fSA9IHN0ZXA7XG4gIGlmICghdGhpcy5zdGF0ZS5kaW1lbnNpb25zW2tleV0udmFsdWVEb21haW4pIHtcbiAgICAvLyB0aGUgcHJldmlvdXMgc3RlcCBzaG91bGQgc2V0IHZhbHVlRG9tYWluLCBpZiBub3QsIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZGltZW5zaW9uUmFuZ2UgPSBwcm9wc1tyYW5nZS5wcm9wXTtcbiAgY29uc3QgZGltZW5zaW9uRG9tYWluID0gcHJvcHNbZG9tYWluLnByb3BdIHx8IHRoaXMuc3RhdGUuZGltZW5zaW9uc1trZXldLnZhbHVlRG9tYWluO1xuICBjb25zdCBkaW1lbnNpb25GaXhlZCA9IEJvb2xlYW4oZml4ZWQgJiYgcHJvcHNbZml4ZWQucHJvcF0pO1xuXG4gIGNvbnN0IHNjYWxlRnVuY3RvciA9IGdldFNjYWxlRnVuY3RvcihzY2FsZVR5cGUgJiYgcHJvcHNbc2NhbGVUeXBlLnByb3BdKSgpO1xuXG4gIGNvbnN0IHNjYWxlRnVuYyA9IHNjYWxlRnVuY3RvclxuICAgIC5kb21haW4oZGltZW5zaW9uRG9tYWluKVxuICAgIC5yYW5nZShkaW1lbnNpb25GaXhlZCA/IGRpbWVuc2lvbkRvbWFpbiA6IGRpbWVuc2lvblJhbmdlKTtcbiAgc2NhbGVGdW5jLnNjYWxlVHlwZSA9IHByb3BzLmNvbG9yU2NhbGVUeXBlO1xuXG4gIGlmICh0eXBlb2Ygb25TZXQgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwcm9wc1tvblNldC5wcm9wc10gPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zdCBzb3J0ZWRCaW5zID0gdGhpcy5zdGF0ZS5kaW1lbnNpb25zW2tleV0uc29ydGVkQmlucztcbiAgICBwcm9wc1tvblNldC5wcm9wc10oe2RvbWFpbjogc2NhbGVGdW5jLmRvbWFpbigpLCBhZ2dyZWdhdGVkQmluczogc29ydGVkQmlucy5iaW5NYXB9KTtcbiAgfVxuICB0aGlzLl9zZXREaW1lbnNpb25TdGF0ZShrZXksIHtzY2FsZUZ1bmN9KTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUmVzdWx0KHJlc3VsdDoge2hleGFnb25zPzsgbGF5ZXJEYXRhP30gPSB7fSkge1xuICAvLyBzdXBwb3J0IHByZXZpb3VzIGhleGFnb25BZ2dyZWdhdG9yIEFQSVxuICBpZiAocmVzdWx0LmhleGFnb25zKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe2RhdGE6IHJlc3VsdC5oZXhhZ29uc30sIHJlc3VsdCk7XG4gIH0gZWxzZSBpZiAocmVzdWx0LmxheWVyRGF0YSkge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHtkYXRhOiByZXN1bHQubGF5ZXJEYXRhfSwgcmVzdWx0KTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBZ2dyZWdhdGVkRGF0YShcbiAgdGhpczogQ1BVQWdncmVnYXRvcixcbiAgc3RlcCxcbiAgcHJvcHMsXG4gIGFnZ3JlZ2F0aW9uLFxuICBhZ2dyZWdhdGlvblBhcmFtc1xuKSB7XG4gIGNvbnN0IHtcbiAgICB0cmlnZ2Vyczoge2FnZ3JlZ2F0b3I6IGFnZ3J9XG4gIH0gPSBzdGVwO1xuICBjb25zdCBhZ2dyZWdhdG9yID0gcHJvcHNbYWdnci5wcm9wXTtcblxuICAvLyByZXN1bHQgc2hvdWxkIGNvbnRhaW4gYSBkYXRhIGFycmF5IGFuZCBvdGhlciBwcm9wc1xuICAvLyByZXN1bHQgPSB7ZGF0YTogW10sIC4uLm90aGVyIHByb3BzfVxuICBjb25zdCByZXN1bHQgPSBhZ2dyZWdhdG9yKHByb3BzLCBhZ2dyZWdhdGlvblBhcmFtcyk7XG4gIHRoaXMuc2V0U3RhdGUoe1xuICAgIGxheWVyRGF0YTogbm9ybWFsaXplUmVzdWx0KHJlc3VsdClcbiAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0QWdncmVnYXRpb246IEFnZ3JlZ2F0aW9uVHlwZSA9IHtcbiAga2V5OiAncG9zaXRpb24nLFxuICB1cGRhdGVTdGVwczogW1xuICAgIHtcbiAgICAgIGtleTogJ2FnZ3JlZ2F0ZScsXG4gICAgICB0cmlnZ2Vyczoge1xuICAgICAgICBjZWxsU2l6ZToge1xuICAgICAgICAgIHByb3A6ICdjZWxsU2l6ZSdcbiAgICAgICAgfSxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBwcm9wOiAnZ2V0UG9zaXRpb24nLFxuICAgICAgICAgIHVwZGF0ZVRyaWdnZXI6ICdnZXRQb3NpdGlvbidcbiAgICAgICAgfSxcbiAgICAgICAgYWdncmVnYXRvcjoge1xuICAgICAgICAgIHByb3A6ICdncmlkQWdncmVnYXRvcidcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVwZGF0ZXI6IGdldEFnZ3JlZ2F0ZWREYXRhXG4gICAgfVxuICBdXG59O1xuXG5mdW5jdGlvbiBnZXRTdWJMYXllckFjY2Vzc29yKGRpbWVuc2lvblN0YXRlLCBkaW1lbnNpb24pIHtcbiAgcmV0dXJuIGNlbGwgPT4ge1xuICAgIGNvbnN0IHtzb3J0ZWRCaW5zLCBzY2FsZUZ1bmN9ID0gZGltZW5zaW9uU3RhdGU7XG4gICAgY29uc3QgYmluID0gc29ydGVkQmlucy5iaW5NYXBbY2VsbC5pbmRleF07XG5cbiAgICBpZiAoYmluICYmIGJpbi5jb3VudHMgPT09IDApIHtcbiAgICAgIC8vIG5vIHBvaW50cyBsZWZ0IGluIGJpbiBhZnRlciBmaWx0ZXJpbmdcbiAgICAgIHJldHVybiBkaW1lbnNpb24ubnVsbFZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IGN2ID0gYmluICYmIGJpbi52YWx1ZTtcbiAgICBjb25zdCBkb21haW4gPSBzY2FsZUZ1bmMuZG9tYWluKCk7XG5cbiAgICBjb25zdCBpc1ZhbHVlSW5Eb21haW4gPVxuICAgICAgc2NhbGVGdW5jLnNjYWxlVHlwZSA9PT0gJ2N1c3RvbSdcbiAgICAgICAgPyBjdiA+PSBzb3J0ZWRCaW5zLm1pblZhbHVlICYmIGN2IDw9IHNvcnRlZEJpbnMubWF4VmFsdWVcbiAgICAgICAgOiBjdiA+PSBkb21haW5bMF0gJiYgY3YgPD0gZG9tYWluW2RvbWFpbi5sZW5ndGggLSAxXTtcblxuICAgIC8vIGlmIGNlbGwgdmFsdWUgaXMgb3V0c2lkZSBkb21haW4sIHNldCBhbHBoYSB0byAwXG4gICAgcmV0dXJuIGlzVmFsdWVJbkRvbWFpbiA/IHNjYWxlRnVuYyhjdikgOiBkaW1lbnNpb24ubnVsbFZhbHVlO1xuICB9O1xufVxuXG5leHBvcnQgY29uc3QgZGVmYXVsdENvbG9yRGltZW5zaW9uOiBEaW1lbnNpb25UeXBlPFJHQkFDb2xvcj4gPSB7XG4gIGtleTogJ2ZpbGxDb2xvcicsXG4gIGFjY2Vzc29yOiAnZ2V0RmlsbENvbG9yJyxcbiAgZ2V0UGlja2luZ0luZm86IChkaW1lbnNpb25TdGF0ZSwgY2VsbCkgPT4ge1xuICAgIGlmICghY2VsbCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCB7c29ydGVkQmluc30gPSBkaW1lbnNpb25TdGF0ZTtcbiAgICBjb25zdCBjb2xvclZhbHVlID0gc29ydGVkQmlucy5iaW5NYXBbY2VsbC5pbmRleF0gJiYgc29ydGVkQmlucy5iaW5NYXBbY2VsbC5pbmRleF0udmFsdWU7XG4gICAgcmV0dXJuIHtjb2xvclZhbHVlfTtcbiAgfSxcbiAgbnVsbFZhbHVlOiBbMCwgMCwgMCwgMF0sXG4gIHVwZGF0ZVN0ZXBzOiBbXG4gICAge1xuICAgICAga2V5OiAnZ2V0VmFsdWUnLFxuICAgICAgdHJpZ2dlcnM6IHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICBwcm9wOiAnZ2V0Q29sb3JWYWx1ZScsXG4gICAgICAgICAgdXBkYXRlVHJpZ2dlcjogJ2dldENvbG9yVmFsdWUnXG4gICAgICAgIH0sXG4gICAgICAgIHdlaWdodDoge1xuICAgICAgICAgIHByb3A6ICdnZXRDb2xvcldlaWdodCcsXG4gICAgICAgICAgdXBkYXRlVHJpZ2dlcjogJ2dldENvbG9yV2VpZ2h0J1xuICAgICAgICB9LFxuICAgICAgICBhZ2dyZWdhdGlvbjoge1xuICAgICAgICAgIHByb3A6ICdjb2xvckFnZ3JlZ2F0aW9uJ1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXBkYXRlcjogZ2V0R2V0VmFsdWVcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ2dldEJpbnMnLFxuICAgICAgdHJpZ2dlcnM6IHtcbiAgICAgICAgX2ZpbHRlckRhdGE6IHtcbiAgICAgICAgICBwcm9wOiAnX2ZpbHRlckRhdGEnLFxuICAgICAgICAgIHVwZGF0ZVRyaWdnZXI6ICdfZmlsdGVyRGF0YSdcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVwZGF0ZXI6IGdldERpbWVuc2lvblNvcnRlZEJpbnNcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ2dldERvbWFpbicsXG4gICAgICB0cmlnZ2Vyczoge1xuICAgICAgICBsb3dlclBlcmNlbnRpbGU6IHtcbiAgICAgICAgICBwcm9wOiAnbG93ZXJQZXJjZW50aWxlJ1xuICAgICAgICB9LFxuICAgICAgICB1cHBlclBlcmNlbnRpbGU6IHtcbiAgICAgICAgICBwcm9wOiAndXBwZXJQZXJjZW50aWxlJ1xuICAgICAgICB9LFxuICAgICAgICBzY2FsZVR5cGU6IHtwcm9wOiAnY29sb3JTY2FsZVR5cGUnfVxuICAgICAgfSxcbiAgICAgIHVwZGF0ZXI6IGdldERpbWVuc2lvblZhbHVlRG9tYWluXG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6ICdnZXRTY2FsZUZ1bmMnLFxuICAgICAgdHJpZ2dlcnM6IHtcbiAgICAgICAgZG9tYWluOiB7cHJvcDogJ2NvbG9yRG9tYWluJ30sXG4gICAgICAgIHJhbmdlOiB7cHJvcDogJ2NvbG9yUmFuZ2UnfSxcbiAgICAgICAgc2NhbGVUeXBlOiB7cHJvcDogJ2NvbG9yU2NhbGVUeXBlJ31cbiAgICAgIH0sXG4gICAgICBvblNldDoge1xuICAgICAgICBwcm9wczogJ29uU2V0Q29sb3JEb21haW4nXG4gICAgICB9LFxuICAgICAgdXBkYXRlcjogZ2V0RGltZW5zaW9uU2NhbGVcbiAgICB9XG4gIF0sXG4gIGdldFN1YkxheWVyQWNjZXNzb3Jcbn07XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0RWxldmF0aW9uRGltZW5zaW9uOiBEaW1lbnNpb25UeXBlPG51bWJlcj4gPSB7XG4gIGtleTogJ2VsZXZhdGlvbicsXG4gIGFjY2Vzc29yOiAnZ2V0RWxldmF0aW9uJyxcbiAgZ2V0UGlja2luZ0luZm86IChkaW1lbnNpb25TdGF0ZSwgY2VsbCkgPT4ge1xuICAgIGlmICghY2VsbCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCB7c29ydGVkQmluc30gPSBkaW1lbnNpb25TdGF0ZTtcbiAgICBjb25zdCBlbGV2YXRpb25WYWx1ZSA9IHNvcnRlZEJpbnMuYmluTWFwW2NlbGwuaW5kZXhdICYmIHNvcnRlZEJpbnMuYmluTWFwW2NlbGwuaW5kZXhdLnZhbHVlO1xuICAgIHJldHVybiB7ZWxldmF0aW9uVmFsdWV9O1xuICB9LFxuICBudWxsVmFsdWU6IC0xLFxuICB1cGRhdGVTdGVwczogW1xuICAgIHtcbiAgICAgIGtleTogJ2dldFZhbHVlJyxcbiAgICAgIHRyaWdnZXJzOiB7XG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgcHJvcDogJ2dldEVsZXZhdGlvblZhbHVlJyxcbiAgICAgICAgICB1cGRhdGVUcmlnZ2VyOiAnZ2V0RWxldmF0aW9uVmFsdWUnXG4gICAgICAgIH0sXG4gICAgICAgIHdlaWdodDoge1xuICAgICAgICAgIHByb3A6ICdnZXRFbGV2YXRpb25XZWlnaHQnLFxuICAgICAgICAgIHVwZGF0ZVRyaWdnZXI6ICdnZXRFbGV2YXRpb25XZWlnaHQnXG4gICAgICAgIH0sXG4gICAgICAgIGFnZ3JlZ2F0aW9uOiB7XG4gICAgICAgICAgcHJvcDogJ2VsZXZhdGlvbkFnZ3JlZ2F0aW9uJ1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXBkYXRlcjogZ2V0R2V0VmFsdWVcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ2dldEJpbnMnLFxuICAgICAgdHJpZ2dlcnM6IHtcbiAgICAgICAgX2ZpbHRlckRhdGE6IHtcbiAgICAgICAgICBwcm9wOiAnX2ZpbHRlckRhdGEnLFxuICAgICAgICAgIHVwZGF0ZVRyaWdnZXI6ICdfZmlsdGVyRGF0YSdcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVwZGF0ZXI6IGdldERpbWVuc2lvblNvcnRlZEJpbnNcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ2dldERvbWFpbicsXG4gICAgICB0cmlnZ2Vyczoge1xuICAgICAgICBsb3dlclBlcmNlbnRpbGU6IHtcbiAgICAgICAgICBwcm9wOiAnZWxldmF0aW9uTG93ZXJQZXJjZW50aWxlJ1xuICAgICAgICB9LFxuICAgICAgICB1cHBlclBlcmNlbnRpbGU6IHtcbiAgICAgICAgICBwcm9wOiAnZWxldmF0aW9uVXBwZXJQZXJjZW50aWxlJ1xuICAgICAgICB9LFxuICAgICAgICBzY2FsZVR5cGU6IHtwcm9wOiAnZWxldmF0aW9uU2NhbGVUeXBlJ31cbiAgICAgIH0sXG4gICAgICB1cGRhdGVyOiBnZXREaW1lbnNpb25WYWx1ZURvbWFpblxuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAnZ2V0U2NhbGVGdW5jJyxcbiAgICAgIHRyaWdnZXJzOiB7XG4gICAgICAgIGZpeGVkOiB7cHJvcDogJ2VsZXZhdGlvbkZpeGVkJ30sXG4gICAgICAgIGRvbWFpbjoge3Byb3A6ICdlbGV2YXRpb25Eb21haW4nfSxcbiAgICAgICAgcmFuZ2U6IHtwcm9wOiAnZWxldmF0aW9uUmFuZ2UnfSxcbiAgICAgICAgc2NhbGVUeXBlOiB7cHJvcDogJ2VsZXZhdGlvblNjYWxlVHlwZSd9XG4gICAgICB9LFxuICAgICAgb25TZXQ6IHtcbiAgICAgICAgcHJvcHM6ICdvblNldEVsZXZhdGlvbkRvbWFpbidcbiAgICAgIH0sXG4gICAgICB1cGRhdGVyOiBnZXREaW1lbnNpb25TY2FsZVxuICAgIH1cbiAgXSxcbiAgZ2V0U3ViTGF5ZXJBY2Nlc3NvclxufTtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHREaW1lbnNpb25zID0gW2RlZmF1bHRDb2xvckRpbWVuc2lvbiwgZGVmYXVsdEVsZXZhdGlvbkRpbWVuc2lvbl07XG5cbmV4cG9ydCB0eXBlIENQVUFnZ3JlZ2F0b3JTdGF0ZSA9IHtcbiAgbGF5ZXJEYXRhOiB7ZGF0YT99O1xuICBkaW1lbnNpb25zOiBvYmplY3Q7XG4gIGdlb0pTT04/O1xuICBjbHVzdGVyQnVpbGRlcj87XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDUFVBZ2dyZWdhdG9yIHtcbiAgc3RhdGljIGdldERpbWVuc2lvblNjYWxlOiBhbnk7XG4gIHN0YXRlOiBDUFVBZ2dyZWdhdG9yU3RhdGU7XG4gIGRpbWVuc2lvblVwZGF0ZXJzOiB7W2tleTogc3RyaW5nXTogRGltZW5zaW9uVHlwZX07XG4gIGFnZ3JlZ2F0aW9uVXBkYXRlcjogQWdncmVnYXRpb25UeXBlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG9wdHM6IHtcbiAgICAgIGluaXRpYWxTdGF0ZT86IENQVUFnZ3JlZ2F0b3JTdGF0ZTtcbiAgICAgIGRpbWVuc2lvbnM/OiBEaW1lbnNpb25UeXBlW107XG4gICAgICBhZ2dyZWdhdGlvbj86IEFnZ3JlZ2F0aW9uVHlwZTtcbiAgICB9ID0ge31cbiAgKSB7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGxheWVyRGF0YToge30sXG4gICAgICBkaW1lbnNpb25zOiB7XG4gICAgICAgIC8vIGNvbG9yOiB7XG4gICAgICAgIC8vICAgZ2V0VmFsdWU6IG51bGwsXG4gICAgICAgIC8vICAgZG9tYWluOiBudWxsLFxuICAgICAgICAvLyAgIHNvcnRlZEJpbnM6IG51bGwsXG4gICAgICAgIC8vICAgc2NhbGVGdW5jOiBub3BcbiAgICAgICAgLy8gfSxcbiAgICAgICAgLy8gZWxldmF0aW9uOiB7XG4gICAgICAgIC8vICAgZ2V0VmFsdWU6IG51bGwsXG4gICAgICAgIC8vICAgZG9tYWluOiBudWxsLFxuICAgICAgICAvLyAgIHNvcnRlZEJpbnM6IG51bGwsXG4gICAgICAgIC8vICAgc2NhbGVGdW5jOiBub3BcbiAgICAgICAgLy8gfVxuICAgICAgfSxcbiAgICAgIC4uLm9wdHMuaW5pdGlhbFN0YXRlXG4gICAgfTtcblxuICAgIHRoaXMuZGltZW5zaW9uVXBkYXRlcnMgPSB7fTtcbiAgICB0aGlzLmFnZ3JlZ2F0aW9uVXBkYXRlciA9IG9wdHMuYWdncmVnYXRpb24gfHwgZGVmYXVsdEFnZ3JlZ2F0aW9uO1xuXG4gICAgdGhpcy5fYWRkRGltZW5zaW9uKG9wdHMuZGltZW5zaW9ucyB8fCBkZWZhdWx0RGltZW5zaW9ucyk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdERpbWVuc2lvbnMoKSB7XG4gICAgcmV0dXJuIGRlZmF1bHREaW1lbnNpb25zO1xuICB9XG5cbiAgdXBkYXRlQWxsRGltZW5zaW9ucyhwcm9wcykge1xuICAgIGxldCBkaW1lbnNpb25DaGFuZ2VzOiBCaW5kZWRVcGRhdGVyVHlwZVtdID0gW107XG4gICAgLy8gdXBkYXRlIGFsbCBkaW1lbnNpb25zXG4gICAgZm9yIChjb25zdCBkaW0gaW4gdGhpcy5kaW1lbnNpb25VcGRhdGVycykge1xuICAgICAgY29uc3QgdXBkYXRlcnMgPSB0aGlzLl9hY2N1bXVsYXRlVXBkYXRlcnMoMCwgcHJvcHMsIHRoaXMuZGltZW5zaW9uVXBkYXRlcnNbZGltXSk7XG4gICAgICBkaW1lbnNpb25DaGFuZ2VzID0gZGltZW5zaW9uQ2hhbmdlcy5jb25jYXQodXBkYXRlcnMpO1xuICAgIH1cblxuICAgIGRpbWVuc2lvbkNoYW5nZXMuZm9yRWFjaChmID0+IHR5cGVvZiBmID09PSAnZnVuY3Rpb24nICYmIGYoKSk7XG4gIH1cblxuICB1cGRhdGVBZ2dyZWdhdGlvbihwcm9wcywgYWdncmVnYXRpb25QYXJhbXMpIHtcbiAgICBjb25zdCB1cGRhdGVycyA9IHRoaXMuX2FjY3VtdWxhdGVVcGRhdGVycygwLCBwcm9wcywgdGhpcy5hZ2dyZWdhdGlvblVwZGF0ZXIpO1xuICAgIHVwZGF0ZXJzLmZvckVhY2goZiA9PiB0eXBlb2YgZiA9PT0gJ2Z1bmN0aW9uJyAmJiBmKGFnZ3JlZ2F0aW9uUGFyYW1zKSk7XG4gIH1cblxuICB1cGRhdGVTdGF0ZShvcHRzLCBhZ2dyZWdhdGlvblBhcmFtcykge1xuICAgIGNvbnN0IHtvbGRQcm9wcywgcHJvcHMsIGNoYW5nZUZsYWdzfSA9IG9wdHM7XG4gICAgbGV0IGRpbWVuc2lvbkNoYW5nZXM6IEJpbmRlZFVwZGF0ZXJUeXBlW10gPSBbXTtcblxuICAgIGlmIChjaGFuZ2VGbGFncy5kYXRhQ2hhbmdlZCkge1xuICAgICAgLy8gaWYgZGF0YSBjaGFuZ2VkIHVwZGF0ZSBldmVyeXRoaW5nXG4gICAgICB0aGlzLnVwZGF0ZUFnZ3JlZ2F0aW9uKHByb3BzLCBhZ2dyZWdhdGlvblBhcmFtcyk7XG4gICAgICB0aGlzLnVwZGF0ZUFsbERpbWVuc2lvbnMocHJvcHMpO1xuXG4gICAgICByZXR1cm4gdGhpcy5zdGF0ZTtcbiAgICB9XG5cbiAgICBjb25zdCBhZ2dyZWdhdGlvbkNoYW5nZXMgPSB0aGlzLl9nZXRBZ2dyZWdhdGlvbkNoYW5nZXMob2xkUHJvcHMsIHByb3BzLCBjaGFuZ2VGbGFncyk7XG5cbiAgICBpZiAoYWdncmVnYXRpb25DaGFuZ2VzICYmIGFnZ3JlZ2F0aW9uQ2hhbmdlcy5sZW5ndGgpIHtcbiAgICAgIC8vIGdldCBhZ2dyZWdhdGVkRGF0YVxuICAgICAgYWdncmVnYXRpb25DaGFuZ2VzLmZvckVhY2goZiA9PiB0eXBlb2YgZiA9PT0gJ2Z1bmN0aW9uJyAmJiBmKGFnZ3JlZ2F0aW9uUGFyYW1zKSk7XG4gICAgICB0aGlzLnVwZGF0ZUFsbERpbWVuc2lvbnMocHJvcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBvbmx5IHVwZGF0ZSBkaW1lbnNpb25zXG4gICAgICBkaW1lbnNpb25DaGFuZ2VzID0gdGhpcy5fZ2V0RGltZW5zaW9uQ2hhbmdlcyhvbGRQcm9wcywgcHJvcHMsIGNoYW5nZUZsYWdzKSB8fCBbXTtcbiAgICAgIGRpbWVuc2lvbkNoYW5nZXMuZm9yRWFjaChmID0+IHR5cGVvZiBmID09PSAnZnVuY3Rpb24nICYmIGYoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RhdGU7XG4gIH1cblxuICAvLyBVcGRhdGUgcHJpdmF0ZSBzdGF0ZVxuICBzZXRTdGF0ZSh1cGRhdGVPYmplY3QpIHtcbiAgICB0aGlzLnN0YXRlID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5zdGF0ZSwgdXBkYXRlT2JqZWN0KTtcbiAgfVxuXG4gIC8vIFVwZGF0ZSBwcml2YXRlIHN0YXRlLmRpbWVuc2lvbnNcbiAgX3NldERpbWVuc2lvblN0YXRlKGtleSwgdXBkYXRlT2JqZWN0KSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBkaW1lbnNpb25zOiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnN0YXRlLmRpbWVuc2lvbnMsIHtcbiAgICAgICAgW2tleV06IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuc3RhdGUuZGltZW5zaW9uc1trZXldLCB1cGRhdGVPYmplY3QpXG4gICAgICB9KVxuICAgIH0pO1xuICB9XG5cbiAgX2FkZEFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uOiBBZ2dyZWdhdGlvblR5cGUpIHtcbiAgICB0aGlzLmFnZ3JlZ2F0aW9uVXBkYXRlciA9IGFnZ3JlZ2F0aW9uO1xuICB9XG5cbiAgX2FkZERpbWVuc2lvbihkaW1lbnNpb25zOiBEaW1lbnNpb25UeXBlW10gPSBbXSkge1xuICAgIGRpbWVuc2lvbnMuZm9yRWFjaChkaW1lbnNpb24gPT4ge1xuICAgICAgY29uc3Qge2tleX0gPSBkaW1lbnNpb247XG4gICAgICB0aGlzLmRpbWVuc2lvblVwZGF0ZXJzW2tleV0gPSBkaW1lbnNpb247XG4gICAgfSk7XG4gIH1cblxuICBfbmVlZFVwZGF0ZVN0ZXAoXG4gICAgZGltZW5zaW9uU3RlcDogVXBkYXRlU3RlcHNUeXBlIHwgQWdncmVnYXRpb25VcGRhdGVTdGVwc1R5cGUsXG4gICAgb2xkUHJvcHMsXG4gICAgcHJvcHMsXG4gICAgY2hhbmdlRmxhZ3NcbiAgKSB7XG4gICAgLy8gd2hldGhlciBuZWVkIHRvIHVwZGF0ZSBjdXJyZW50IGRpbWVuc2lvbiBzdGVwXG4gICAgLy8gZGltZW5zaW9uIHN0ZXAgaXMgdGhlIHZhbHVlLCBkb21haW4sIHNjYWxlRnVuY3Rpb24gb2YgZWFjaCBkaW1lbnNpb25cbiAgICAvLyBlYWNoIHN0ZXAgaXMgYW4gb2JqZWN0IHdpdGggcHJvcGVydGllcyBsaW5rcyB0byBsYXllciBwcm9wIGFuZCB3aGV0aGVyIHRoZSBwcm9wIGlzXG4gICAgLy8gY29udHJvbGxlZCBieSB1cGRhdGVUcmlnZ2Vyc1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKGRpbWVuc2lvblN0ZXAudHJpZ2dlcnMpLnNvbWUoaXRlbSA9PiB7XG4gICAgICBpZiAoaXRlbS51cGRhdGVUcmlnZ2VyKSB7XG4gICAgICAgIC8vIGNoZWNrIGJhc2VkIG9uIHVwZGF0ZVRyaWdnZXJzIGNoYW5nZSBmaXJzdFxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGNoYW5nZUZsYWdzLnVwZGF0ZVRyaWdnZXJzQ2hhbmdlZCAmJlxuICAgICAgICAgIChjaGFuZ2VGbGFncy51cGRhdGVUcmlnZ2Vyc0NoYW5nZWQuYWxsIHx8XG4gICAgICAgICAgICBjaGFuZ2VGbGFncy51cGRhdGVUcmlnZ2Vyc0NoYW5nZWRbaXRlbS51cGRhdGVUcmlnZ2VyXSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIC8vIGZhbGxiYWNrIHRvIGRpcmVjdCBjb21wYXJpc29uXG4gICAgICByZXR1cm4gb2xkUHJvcHNbaXRlbS5wcm9wXSAhPT0gcHJvcHNbaXRlbS5wcm9wXTtcbiAgICB9KTtcbiAgfVxuXG4gIF9hY2N1bXVsYXRlVXBkYXRlcnM8VXBkYXRlck9iamVjdFR5cGUgZXh0ZW5kcyBEaW1lbnNpb25UeXBlIHwgQWdncmVnYXRpb25UeXBlPihcbiAgICBzdGVwLFxuICAgIHByb3BzLFxuICAgIGRpbWVuc2lvbjogVXBkYXRlck9iamVjdFR5cGVcbiAgKSB7XG4gICAgdHlwZSBMb2NhbFVwZGF0ZXJUeXBlID0gVXBkYXRlck9iamVjdFR5cGUgZXh0ZW5kcyBEaW1lbnNpb25UeXBlXG4gICAgICA/IEJpbmRlZFVwZGF0ZXJUeXBlXG4gICAgICA6IEJpbmRlZEFnZ3JlZ2F0ZWRVcGRhdGVyVHlwZTtcbiAgICBjb25zdCB1cGRhdGVyczogTG9jYWxVcGRhdGVyVHlwZVtdID0gW107XG4gICAgZm9yIChsZXQgaSA9IHN0ZXA7IGkgPCBkaW1lbnNpb24udXBkYXRlU3RlcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHVwZGF0ZXIgPSBkaW1lbnNpb24udXBkYXRlU3RlcHNbaV0udXBkYXRlcjtcbiAgICAgIGlmICh0eXBlb2YgdXBkYXRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB1cGRhdGVycy5wdXNoKFxuICAgICAgICAgIHVwZGF0ZXIuYmluZCh0aGlzLCBkaW1lbnNpb24udXBkYXRlU3RlcHNbaV0sIHByb3BzLCBkaW1lbnNpb24pIGFzIExvY2FsVXBkYXRlclR5cGVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdXBkYXRlcnM7XG4gIH1cblxuICBfZ2V0QWxsVXBkYXRlcnM8VXBkYXRlck9iamVjdFR5cGUgZXh0ZW5kcyBEaW1lbnNpb25UeXBlIHwgQWdncmVnYXRpb25UeXBlPihcbiAgICBkaW1lbnNpb246IFVwZGF0ZXJPYmplY3RUeXBlLFxuICAgIG9sZFByb3BzLFxuICAgIHByb3BzLFxuICAgIGNoYW5nZUZsYWdzXG4gICkge1xuICAgIHR5cGUgTG9jYWxVcGRhdGVyVHlwZSA9IFVwZGF0ZXJPYmplY3RUeXBlIGV4dGVuZHMgRGltZW5zaW9uVHlwZVxuICAgICAgPyBCaW5kZWRVcGRhdGVyVHlwZVxuICAgICAgOiBCaW5kZWRBZ2dyZWdhdGVkVXBkYXRlclR5cGU7XG4gICAgbGV0IHVwZGF0ZXJzOiBMb2NhbFVwZGF0ZXJUeXBlW10gPSBbXTtcbiAgICBjb25zdCBuZWVkVXBkYXRlU3RlcCA9IGRpbWVuc2lvbi51cGRhdGVTdGVwcy5maW5kSW5kZXgoc3RlcCA9PlxuICAgICAgdGhpcy5fbmVlZFVwZGF0ZVN0ZXAoc3RlcCwgb2xkUHJvcHMsIHByb3BzLCBjaGFuZ2VGbGFncylcbiAgICApO1xuXG4gICAgaWYgKG5lZWRVcGRhdGVTdGVwID4gLTEpIHtcbiAgICAgIHVwZGF0ZXJzID0gdXBkYXRlcnMuY29uY2F0KHRoaXMuX2FjY3VtdWxhdGVVcGRhdGVycyhuZWVkVXBkYXRlU3RlcCwgcHJvcHMsIGRpbWVuc2lvbikpO1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGVycztcbiAgfVxuXG4gIF9nZXRBZ2dyZWdhdGlvbkNoYW5nZXMob2xkUHJvcHMsIHByb3BzLCBjaGFuZ2VGbGFncykge1xuICAgIGNvbnN0IHVwZGF0ZXJzID0gdGhpcy5fZ2V0QWxsVXBkYXRlcnModGhpcy5hZ2dyZWdhdGlvblVwZGF0ZXIsIG9sZFByb3BzLCBwcm9wcywgY2hhbmdlRmxhZ3MpO1xuICAgIHJldHVybiB1cGRhdGVycy5sZW5ndGggPyB1cGRhdGVycyA6IG51bGw7XG4gIH1cblxuICBfZ2V0RGltZW5zaW9uQ2hhbmdlcyhvbGRQcm9wcywgcHJvcHMsIGNoYW5nZUZsYWdzKSB7XG4gICAgbGV0IHVwZGF0ZXJzOiBCaW5kZWRVcGRhdGVyVHlwZVtdID0gW107XG5cbiAgICAvLyBnZXQgZGltZW5zaW9uIHRvIGJlIHVwZGF0ZWRcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmRpbWVuc2lvblVwZGF0ZXJzKSB7XG4gICAgICAvLyByZXR1cm4gdGhlIGZpcnN0IHRyaWdnZXJlZCB1cGRhdGVyIGZvciBlYWNoIGRpbWVuc2lvblxuICAgICAgY29uc3QgZGltZW5zaW9uID0gdGhpcy5kaW1lbnNpb25VcGRhdGVyc1trZXldO1xuICAgICAgY29uc3QgZGltZW5zaW9uVXBkYXRlcnMgPSB0aGlzLl9nZXRBbGxVcGRhdGVycyhkaW1lbnNpb24sIG9sZFByb3BzLCBwcm9wcywgY2hhbmdlRmxhZ3MpO1xuICAgICAgdXBkYXRlcnMgPSB1cGRhdGVycy5jb25jYXQoZGltZW5zaW9uVXBkYXRlcnMpO1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGVycy5sZW5ndGggPyB1cGRhdGVycyA6IG51bGw7XG4gIH1cblxuICBnZXRVcGRhdGVUcmlnZ2Vycyhwcm9wcykge1xuICAgIGNvbnN0IF91cGRhdGVUcmlnZ2VycyA9IHByb3BzLnVwZGF0ZVRyaWdnZXJzIHx8IHt9O1xuICAgIGNvbnN0IHVwZGF0ZVRyaWdnZXJzID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmRpbWVuc2lvblVwZGF0ZXJzKSB7XG4gICAgICBjb25zdCB7YWNjZXNzb3IsIHVwZGF0ZVN0ZXBzfToge2FjY2Vzc29yOyB1cGRhdGVTdGVwczogVXBkYXRlU3RlcHNUeXBlW119ID1cbiAgICAgICAgdGhpcy5kaW1lbnNpb25VcGRhdGVyc1trZXldO1xuICAgICAgLy8gZm9sZCBkaW1lbnNpb24gdHJpZ2dlcnMgaW50byBlYWNoIGFjY2Vzc29yXG4gICAgICB1cGRhdGVUcmlnZ2Vyc1thY2Nlc3Nvcl0gPSB7fTtcblxuICAgICAgdXBkYXRlU3RlcHMuZm9yRWFjaChzdGVwID0+IHtcbiAgICAgICAgT2JqZWN0LnZhbHVlcyhzdGVwLnRyaWdnZXJzIHx8IFtdKS5mb3JFYWNoKCh7cHJvcCwgdXBkYXRlVHJpZ2dlcn0pID0+IHtcbiAgICAgICAgICBpZiAodXBkYXRlVHJpZ2dlcikge1xuICAgICAgICAgICAgLy8gaWYgcHJvcCBpcyBiYXNlZCBvbiB1cGRhdGVUcmlnZ2VyIGUuZy4gZ2V0Q29sb3JWYWx1ZSwgZ2V0Q29sb3JXZWlnaHRcbiAgICAgICAgICAgIC8vIGFuZCB1cGRhdGVUcmlnZ2VycyBpcyBwYXNzZWQgaW4gZnJvbSBsYXllciBwcm9wXG4gICAgICAgICAgICAvLyBmb2xkIHRoZSB1cGRhdGVUcmlnZ2VycyBpbnRvIGFjY2Vzc29yXG4gICAgICAgICAgICBjb25zdCBmcm9tUHJvcCA9IF91cGRhdGVUcmlnZ2Vyc1t1cGRhdGVUcmlnZ2VyXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZnJvbVByb3AgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGZyb21Qcm9wKSkge1xuICAgICAgICAgICAgICAvLyBpZiB1cGRhdGVUcmlnZ2VyIGlzIGFuIG9iamVjdCBzcHJlYWQgaXRcbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih1cGRhdGVUcmlnZ2Vyc1thY2Nlc3Nvcl0sIGZyb21Qcm9wKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZnJvbVByb3AgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB1cGRhdGVUcmlnZ2Vyc1thY2Nlc3Nvcl1bcHJvcF0gPSBmcm9tUHJvcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaWYgcHJvcCBpcyBub3QgYmFzZWQgb24gdXBkYXRlVHJpZ2dlclxuICAgICAgICAgICAgdXBkYXRlVHJpZ2dlcnNbYWNjZXNzb3JdW3Byb3BdID0gcHJvcHNbcHJvcF07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGVUcmlnZ2VycztcbiAgfVxuXG4gIGdldFBpY2tpbmdJbmZvKHtpbmZvfSwgbGF5ZXJQcm9wcykge1xuICAgIGNvbnN0IGlzUGlja2VkID0gaW5mby5waWNrZWQgJiYgaW5mby5pbmRleCA+IC0xO1xuICAgIGxldCBvYmplY3QgPSBudWxsO1xuICAgIGNvbnN0IGNlbGwgPSBpc1BpY2tlZCA/IHRoaXMuc3RhdGUubGF5ZXJEYXRhLmRhdGFbaW5mby5pbmRleF0gOiBudWxsO1xuICAgIGlmIChjZWxsKSB7XG4gICAgICBsZXQgYmluSW5mbyA9IHt9O1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5kaW1lbnNpb25VcGRhdGVycykge1xuICAgICAgICBjb25zdCB7Z2V0UGlja2luZ0luZm99ID0gdGhpcy5kaW1lbnNpb25VcGRhdGVyc1trZXldO1xuICAgICAgICBpZiAodHlwZW9mIGdldFBpY2tpbmdJbmZvID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgYmluSW5mbyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIGJpbkluZm8sXG4gICAgICAgICAgICBnZXRQaWNraW5nSW5mbyh0aGlzLnN0YXRlLmRpbWVuc2lvbnNba2V5XSwgY2VsbCwgbGF5ZXJQcm9wcylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG9iamVjdCA9IE9iamVjdC5hc3NpZ24oYmluSW5mbywgY2VsbCwge1xuICAgICAgICBwb2ludHM6IGNlbGwuZmlsdGVyZWRQb2ludHMgfHwgY2VsbC5wb2ludHNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIGFkZCBiaW4gIGFuZCAgdG8gaW5mb1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKGluZm8sIHtcbiAgICAgIHBpY2tlZDogQm9vbGVhbihvYmplY3QpLFxuICAgICAgLy8gb3ZlcnJpZGUgb2JqZWN0IHdpdGggcGlja2VkIGNlbGxcbiAgICAgIG9iamVjdFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0QWNjZXNzb3IoZGltZW5zaW9uS2V5LCBsYXllclByb3BzKSB7XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5kaW1lbnNpb25VcGRhdGVycywgZGltZW5zaW9uS2V5KSkge1xuICAgICAgcmV0dXJuIG5vcDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGltZW5zaW9uVXBkYXRlcnNbZGltZW5zaW9uS2V5XS5nZXRTdWJMYXllckFjY2Vzc29yKFxuICAgICAgdGhpcy5zdGF0ZS5kaW1lbnNpb25zW2RpbWVuc2lvbktleV0sXG4gICAgICB0aGlzLmRpbWVuc2lvblVwZGF0ZXJzW2RpbWVuc2lvbktleV0sXG4gICAgICBsYXllclByb3BzXG4gICAgKTtcbiAgfVxufVxuXG5DUFVBZ2dyZWdhdG9yLmdldERpbWVuc2lvblNjYWxlID0gZ2V0RGltZW5zaW9uU2NhbGU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUlBLElBQUFBLGtC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
|
|
798
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd2luZG93IiwicmVxdWlyZSIsIl91dGlscyIsIl9jb25zdGFudHMiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbiIsIkYiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImYiLCJUeXBlRXJyb3IiLCJhIiwidSIsImNhbGwiLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJBR0dSRUdBVElPTl9PUEVSQVRJT04iLCJTVU0iLCJNRUFOIiwiTUlOIiwiTUFYIiwiQ09VTlQiLCJNQVhfMzJfQklUX0ZMT0FUIiwiZGVmYXVsdEdldFZhbHVlIiwicG9pbnRzIiwiZGVmYXVsdEdldFBvaW50cyIsImJpbiIsImRlZmF1bHRHZXRJbmRleCIsImluZGV4IiwiYXNjZW5kaW5nIiwiYiIsIk5hTiIsImNsYW1wIiwibWluIiwibWF4IiwiTWF0aCIsImdldFF1YW50aWxlRG9tYWluIiwiZGF0YSIsInZhbHVlQWNjZXNzb3IiLCJtYXAiLCJzb3J0IiwiZ2V0T3JkaW5hbERvbWFpbiIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJTZXQiLCJCaW5Tb3J0ZXIiLCJiaW5zIiwidW5kZWZpbmVkIiwicHJvcHMiLCJfY2xhc3NDYWxsQ2hlY2syIiwiYWdncmVnYXRlZEJpbnMiLCJfZ2V0QWdncmVnYXRlZEJpbnMiLCJfdXBkYXRlTWluTWF4VmFsdWVzIiwiYmluTWFwIiwiX2dldEJpbk1hcCIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJfcHJvcHMkZ2V0VmFsdWUiLCJnZXRWYWx1ZSIsIl9wcm9wcyRnZXRQb2ludHMiLCJnZXRQb2ludHMiLCJfcHJvcHMkZ2V0SW5kZXgiLCJnZXRJbmRleCIsImZpbHRlckRhdGEiLCJoYXNGaWx0ZXIiLCJiaW5JbmRleCIsImkiLCJmaWx0ZXJlZFBvaW50cyIsIk51bWJlciIsImlzRmluaXRlIiwiY291bnRzIiwibWF4Q291bnQiLCJtYXhWYWx1ZSIsIm1pblZhbHVlIiwidG90YWxDb3VudCIsIl9pdGVyYXRvciIsIl9zdGVwIiwieCIsImVyciIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJfcGVyY2VudGlsZVRvSW5kZXgiLCJwZXJjZW50aWxlUmFuZ2UiLCJsZW4iLCJzb3J0ZWRCaW5zIiwiX3BlcmNlbnRpbGVSYW5nZSRtYXAiLCJfcGVyY2VudGlsZVJhbmdlJG1hcDIiLCJfc2xpY2VkVG9BcnJheTIiLCJsb3dlciIsInVwcGVyIiwiY2VpbCIsImZsb29yIiwiZ2V0VmFsdWVEb21haW5CeVNjYWxlIiwic2NhbGUiLCJfcmVmIiwiX3JlZjIiLCJfcmVmMiQiLCJfcmVmMiQyIiwiaW5kZXhFZGdlIiwiX2dldFNjYWxlRG9tYWluIiwic2NhbGVUeXBlIiwiX3JlZjMiLCJfcmVmNCIsImxvd2VySWR4IiwidXBwZXJJZHgiLCJkIiwiZ2V0VmFsdWVSYW5nZSIsImlkeFJhbmdlIiwiREVDS19BR0dSRUdBVElPTl9NQVAiLCJleHBvcnRzIiwiQUdHUkVHQVRJT05fVFlQRVMiLCJzdW0iLCJhdmVyYWdlIiwibWluaW11bSIsIm1heGltdW0iLCJnZXRWYWx1ZUZ1bmMiLCJhZ2dyZWdhdGlvbiIsImFjY2Vzc29yIiwidG9VcHBlckNhc2UiLCJDb25zb2xlIiwid2FybiIsImNvbmNhdCIsIm9wIiwia2VwbGVyT3AiLCJwdHMiLCJhZ2dyZWdhdGUiLCJnZXRTY2FsZUZ1bmN0b3IiLCJTQ0FMRV9GVU5DIiwicXVhbnRpemUiLCJub3AiLCJnZXRHZXRWYWx1ZSIsInN0ZXAiLCJkaW1lbnNpb25VcGRhdGVyIiwiX3N0ZXAkdHJpZ2dlcnMiLCJ0cmlnZ2VycyIsIndlaWdodCIsInByb3AiLCJfc2V0RGltZW5zaW9uU3RhdGUiLCJnZXREaW1lbnNpb25Tb3J0ZWRCaW5zIiwic3RhdGUiLCJkaW1lbnNpb25zIiwibGF5ZXJEYXRhIiwiX2ZpbHRlckRhdGEiLCJnZXREaW1lbnNpb25WYWx1ZURvbWFpbiIsIl9zdGVwJHRyaWdnZXJzMiIsImxvd2VyUGVyY2VudGlsZSIsInVwcGVyUGVyY2VudGlsZSIsInZhbHVlRG9tYWluIiwiY29sb3JTY2FsZVR5cGUiLCJjb2xvck1hcCIsInJlZHVjZSIsInByZXYiLCJjdXIiLCJnZXREaW1lbnNpb25TY2FsZSIsIl9zdGVwJHRyaWdnZXJzMyIsImRvbWFpbiIsInJhbmdlIiwiZml4ZWQiLCJvblNldCIsImRpbWVuc2lvblJhbmdlIiwiZGltZW5zaW9uRG9tYWluIiwiZGltZW5zaW9uRml4ZWQiLCJCb29sZWFuIiwic2NhbGVGdW5jdG9yIiwic2NhbGVGdW5jIiwiX3R5cGVvZjIiLCJub3JtYWxpemVSZXN1bHQiLCJyZXN1bHQiLCJoZXhhZ29ucyIsImFzc2lnbiIsImdldEFnZ3JlZ2F0ZWREYXRhIiwiYWdncmVnYXRpb25QYXJhbXMiLCJhZ2dyIiwiYWdncmVnYXRvciIsInNldFN0YXRlIiwiZGVmYXVsdEFnZ3JlZ2F0aW9uIiwidXBkYXRlU3RlcHMiLCJjZWxsU2l6ZSIsInBvc2l0aW9uIiwidXBkYXRlVHJpZ2dlciIsInVwZGF0ZXIiLCJnZXRTdWJMYXllckFjY2Vzc29yIiwiZGltZW5zaW9uU3RhdGUiLCJkaW1lbnNpb24iLCJjZWxsIiwibnVsbFZhbHVlIiwiY3YiLCJpc1ZhbHVlSW5Eb21haW4iLCJkZWZhdWx0Q29sb3JEaW1lbnNpb24iLCJnZXRQaWNraW5nSW5mbyIsImNvbG9yVmFsdWUiLCJkZWZhdWx0RWxldmF0aW9uRGltZW5zaW9uIiwiZWxldmF0aW9uVmFsdWUiLCJkZWZhdWx0RGltZW5zaW9ucyIsIkNQVUFnZ3JlZ2F0b3IiLCJvcHRzIiwiaW5pdGlhbFN0YXRlIiwiZGltZW5zaW9uVXBkYXRlcnMiLCJhZ2dyZWdhdGlvblVwZGF0ZXIiLCJfYWRkRGltZW5zaW9uIiwidXBkYXRlQWxsRGltZW5zaW9ucyIsImRpbWVuc2lvbkNoYW5nZXMiLCJkaW0iLCJ1cGRhdGVycyIsIl9hY2N1bXVsYXRlVXBkYXRlcnMiLCJ1cGRhdGVBZ2dyZWdhdGlvbiIsInVwZGF0ZVN0YXRlIiwib2xkUHJvcHMiLCJjaGFuZ2VGbGFncyIsImRhdGFDaGFuZ2VkIiwiYWdncmVnYXRpb25DaGFuZ2VzIiwiX2dldEFnZ3JlZ2F0aW9uQ2hhbmdlcyIsIl9nZXREaW1lbnNpb25DaGFuZ2VzIiwidXBkYXRlT2JqZWN0IiwiX2FkZEFnZ3JlZ2F0aW9uIiwiX3RoaXMiLCJfbmVlZFVwZGF0ZVN0ZXAiLCJkaW1lbnNpb25TdGVwIiwidmFsdWVzIiwic29tZSIsIml0ZW0iLCJ1cGRhdGVUcmlnZ2Vyc0NoYW5nZWQiLCJhbGwiLCJiaW5kIiwiX2dldEFsbFVwZGF0ZXJzIiwiX3RoaXMyIiwibmVlZFVwZGF0ZVN0ZXAiLCJmaW5kSW5kZXgiLCJnZXRVcGRhdGVUcmlnZ2VycyIsIl90aGlzMyIsIl91cGRhdGVUcmlnZ2VycyIsInVwZGF0ZVRyaWdnZXJzIiwiX2xvb3AiLCJfdGhpczMkZGltZW5zaW9uVXBkYXQiLCJfcmVmNSIsImZyb21Qcm9wIiwiX3JlZjYiLCJsYXllclByb3BzIiwiX3RoaXMkc3RhdGUkbGF5ZXJEYXRhIiwiaW5mbyIsImlzUGlja2VkIiwicGlja2VkIiwib2JqZWN0IiwiYmluSW5mbyIsImdldEFjY2Vzc29yIiwiZGltZW5zaW9uS2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbGF5ZXItdXRpbHMvY3B1LWFnZ3JlZ2F0b3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuLyogZXNsaW50LWRpc2FibGUgZ3VhcmQtZm9yLWluICovXG5pbXBvcnQge2NvbnNvbGUgYXMgQ29uc29sZX0gZnJvbSAnZ2xvYmFsL3dpbmRvdyc7XG5cbmltcG9ydCB7YWdncmVnYXRlfSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7QUdHUkVHQVRJT05fVFlQRVMsIFNDQUxFX0ZVTkN9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7UkdCQUNvbG9yfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB0eXBlIENsdXN0ZXJCdWlsZGVyIGZyb20gJy4vY2x1c3Rlci11dGlscyc7XG5cbmNvbnN0IEFHR1JFR0FUSU9OX09QRVJBVElPTiA9IHtcbiAgU1VNOiAnU1VNJyBhcyBjb25zdCxcbiAgTUVBTjogJ01FQU4nIGFzIGNvbnN0LFxuICBNSU46ICdNSU4nIGFzIGNvbnN0LFxuICBNQVg6ICdNQVgnIGFzIGNvbnN0LFxuICBDT1VOVDogJ0NPVU5UJyBhcyBjb25zdFxufTtcblxuY29uc3QgTUFYXzMyX0JJVF9GTE9BVCA9IDMuNDAyODIzNDY2ZTM4O1xuXG5pbnRlcmZhY2UgQmluIHtcbiAgcG9pbnRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdO1xuICBmaWx0ZXJlZFBvaW50cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gfCBudWxsO1xuICBpbmRleD86IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIEFnZ3JlZ2F0ZWRCaW4ge1xuICBpOiBudW1iZXI7XG4gIHZhbHVlOiBudW1iZXI7XG4gIGNvdW50czogbnVtYmVyO1xufVxuXG5jb25zdCBkZWZhdWx0R2V0VmFsdWUgPSAocG9pbnRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdKSA9PiBwb2ludHMubGVuZ3RoO1xuY29uc3QgZGVmYXVsdEdldFBvaW50cyA9IChiaW46IEJpbikgPT4gYmluLnBvaW50cztcbmNvbnN0IGRlZmF1bHRHZXRJbmRleCA9IChiaW46IEJpbikgPT4gYmluLmluZGV4O1xuY29uc3QgYXNjZW5kaW5nID0gKGE6IG51bWJlciwgYjogbnVtYmVyKSA9PiAoYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU4pO1xuXG5mdW5jdGlvbiBjbGFtcCh2YWx1ZTogbnVtYmVyLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIpIHtcbiAgcmV0dXJuIE1hdGgubWF4KG1pbiwgTWF0aC5taW4obWF4LCB2YWx1ZSkpO1xufVxuXG5mdW5jdGlvbiBnZXRRdWFudGlsZURvbWFpbihkYXRhOiBBZ2dyZWdhdGVkQmluW10sIHZhbHVlQWNjZXNzb3I6IChkOiBBZ2dyZWdhdGVkQmluKSA9PiBudW1iZXIpIHtcbiAgcmV0dXJuIGRhdGEubWFwKHZhbHVlQWNjZXNzb3IpLnNvcnQoYXNjZW5kaW5nKTtcbn1cblxuZnVuY3Rpb24gZ2V0T3JkaW5hbERvbWFpbihkYXRhOiBBZ2dyZWdhdGVkQmluW10sIHZhbHVlQWNjZXNzb3I6IChkOiBBZ2dyZWdhdGVkQmluKSA9PiBudW1iZXIpIHtcbiAgcmV0dXJuIFsuLi5uZXcgU2V0KGRhdGEubWFwKHZhbHVlQWNjZXNzb3IpKV07XG59XG5cbmNsYXNzIEJpblNvcnRlciB7XG4gIG1heENvdW50ITogbnVtYmVyO1xuICBtYXhWYWx1ZSE6IG51bWJlcjtcbiAgbWluVmFsdWUhOiBudW1iZXI7XG4gIHRvdGFsQ291bnQhOiBudW1iZXI7XG4gIGFnZ3JlZ2F0ZWRCaW5zOiBBZ2dyZWdhdGVkQmluW107XG4gIHNvcnRlZEJpbnMhOiBBZ2dyZWdhdGVkQmluW107XG4gIGJpbk1hcDogUmVjb3JkPG51bWJlciwgQWdncmVnYXRlZEJpbj47XG5cbiAgY29uc3RydWN0b3IoYmluczogQmluW10gPSBbXSwgcHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSkge1xuICAgIHRoaXMuYWdncmVnYXRlZEJpbnMgPSB0aGlzLl9nZXRBZ2dyZWdhdGVkQmlucyhiaW5zLCBwcm9wcyk7XG4gICAgdGhpcy5fdXBkYXRlTWluTWF4VmFsdWVzKCk7XG4gICAgdGhpcy5iaW5NYXAgPSB0aGlzLl9nZXRCaW5NYXAoKTtcbiAgfVxuXG4gIF9nZXRBZ2dyZWdhdGVkQmlucyhiaW5zOiBCaW5bXSwgcHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBBZ2dyZWdhdGVkQmluW10ge1xuICAgIGNvbnN0IHtcbiAgICAgIGdldFZhbHVlID0gZGVmYXVsdEdldFZhbHVlLFxuICAgICAgZ2V0UG9pbnRzID0gZGVmYXVsdEdldFBvaW50cyxcbiAgICAgIGdldEluZGV4ID0gZGVmYXVsdEdldEluZGV4LFxuICAgICAgZmlsdGVyRGF0YVxuICAgIH0gPSBwcm9wcztcbiAgICBjb25zdCBoYXNGaWx0ZXIgPSB0eXBlb2YgZmlsdGVyRGF0YSA9PT0gJ2Z1bmN0aW9uJztcbiAgICBjb25zdCBhZ2dyZWdhdGVkQmluczogQWdncmVnYXRlZEJpbltdID0gW107XG4gICAgbGV0IGluZGV4ID0gMDtcbiAgICBmb3IgKGxldCBiaW5JbmRleCA9IDA7IGJpbkluZGV4IDwgYmlucy5sZW5ndGg7IGJpbkluZGV4KyspIHtcbiAgICAgIGNvbnN0IGJpbiA9IGJpbnNbYmluSW5kZXhdO1xuICAgICAgY29uc3QgcG9pbnRzID0gZ2V0UG9pbnRzKGJpbik7XG4gICAgICBjb25zdCBpID0gZ2V0SW5kZXgoYmluKTtcbiAgICAgIGNvbnN0IGZpbHRlcmVkUG9pbnRzID0gaGFzRmlsdGVyID8gcG9pbnRzLmZpbHRlcihmaWx0ZXJEYXRhKSA6IHBvaW50cztcbiAgICAgIGJpbi5maWx0ZXJlZFBvaW50cyA9IGhhc0ZpbHRlciA/IGZpbHRlcmVkUG9pbnRzIDogbnVsbDtcbiAgICAgIGNvbnN0IHZhbHVlID0gZmlsdGVyZWRQb2ludHMubGVuZ3RoID8gZ2V0VmFsdWUoZmlsdGVyZWRQb2ludHMpIDogbnVsbDtcbiAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFnZ3JlZ2F0ZWRCaW5zW2luZGV4XSA9IHtcbiAgICAgICAgICBpOiBOdW1iZXIuaXNGaW5pdGUoaSkgPyBpIDogYmluSW5kZXgsXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgY291bnRzOiBmaWx0ZXJlZFBvaW50cy5sZW5ndGhcbiAgICAgICAgfTtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFnZ3JlZ2F0ZWRCaW5zO1xuICB9XG5cbiAgX3VwZGF0ZU1pbk1heFZhbHVlcygpIHtcbiAgICBsZXQgbWF4Q291bnQgPSAwO1xuICAgIGxldCBtYXhWYWx1ZSA9IC1NQVhfMzJfQklUX0ZMT0FUO1xuICAgIGxldCBtaW5WYWx1ZSA9IE1BWF8zMl9CSVRfRkxPQVQ7XG4gICAgbGV0IHRvdGFsQ291bnQgPSAwO1xuICAgIGZvciAoY29uc3QgeCBvZiB0aGlzLmFnZ3JlZ2F0ZWRCaW5zKSB7XG4gICAgICBtYXhDb3VudCA9IG1heENvdW50ID4geC5jb3VudHMgPyBtYXhDb3VudCA6IHguY291bnRzO1xuICAgICAgbWF4VmFsdWUgPSBtYXhWYWx1ZSA+IHgudmFsdWUgPyBtYXhWYWx1ZSA6IHgudmFsdWU7XG4gICAgICBtaW5WYWx1ZSA9IG1pblZhbHVlIDwgeC52YWx1ZSA/IG1pblZhbHVlIDogeC52YWx1ZTtcbiAgICAgIHRvdGFsQ291bnQgKz0geC5jb3VudHM7XG4gICAgfVxuICAgIGlmICh0aGlzLmFnZ3JlZ2F0ZWRCaW5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgbWF4VmFsdWUgPSAwO1xuICAgICAgbWluVmFsdWUgPSAwO1xuICAgIH1cbiAgICB0aGlzLm1heENvdW50ID0gbWF4Q291bnQ7XG4gICAgdGhpcy5tYXhWYWx1ZSA9IG1heFZhbHVlO1xuICAgIHRoaXMubWluVmFsdWUgPSBtaW5WYWx1ZTtcbiAgICB0aGlzLnRvdGFsQ291bnQgPSB0b3RhbENvdW50O1xuICB9XG5cbiAgX2dldEJpbk1hcCgpIHtcbiAgICBjb25zdCBiaW5NYXAgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGJpbiBvZiB0aGlzLmFnZ3JlZ2F0ZWRCaW5zKSB7XG4gICAgICBiaW5NYXBbYmluLmldID0gYmluO1xuICAgIH1cbiAgICByZXR1cm4gYmluTWFwO1xuICB9XG5cbiAgX3BlcmNlbnRpbGVUb0luZGV4KHBlcmNlbnRpbGVSYW5nZTogbnVtYmVyW10pIHtcbiAgICBjb25zdCBsZW4gPSB0aGlzLnNvcnRlZEJpbnMubGVuZ3RoO1xuICAgIGlmIChsZW4gPCAyKSByZXR1cm4gWzAsIDBdO1xuICAgIGNvbnN0IFtsb3dlciwgdXBwZXJdID0gcGVyY2VudGlsZVJhbmdlLm1hcChuID0+IGNsYW1wKG4sIDAsIDEwMCkpO1xuICAgIHJldHVybiBbTWF0aC5jZWlsKChsb3dlciAvIDEwMCkgKiAobGVuIC0gMSkpLCBNYXRoLmZsb29yKCh1cHBlciAvIDEwMCkgKiAobGVuIC0gMSkpXTtcbiAgfVxuXG4gIGdldFZhbHVlRG9tYWluQnlTY2FsZShzY2FsZTogc3RyaW5nLCBbbG93ZXIgPSAwLCB1cHBlciA9IDEwMF06IG51bWJlcltdID0gW10pIHtcbiAgICBpZiAoIXRoaXMuc29ydGVkQmlucykge1xuICAgICAgdGhpcy5zb3J0ZWRCaW5zID0gdGhpcy5hZ2dyZWdhdGVkQmlucy5zb3J0KChhLCBiKSA9PiBhc2NlbmRpbmcoYS52YWx1ZSwgYi52YWx1ZSkpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc29ydGVkQmlucy5sZW5ndGgpIHJldHVybiBbXTtcbiAgICBjb25zdCBpbmRleEVkZ2UgPSB0aGlzLl9wZXJjZW50aWxlVG9JbmRleChbbG93ZXIsIHVwcGVyXSk7XG4gICAgcmV0dXJuIHRoaXMuX2dldFNjYWxlRG9tYWluKHNjYWxlLCBpbmRleEVkZ2UpO1xuICB9XG5cbiAgX2dldFNjYWxlRG9tYWluKHNjYWxlVHlwZTogc3RyaW5nLCBbbG93ZXJJZHgsIHVwcGVySWR4XTogbnVtYmVyW10pIHtcbiAgICBjb25zdCBiaW5zID0gdGhpcy5zb3J0ZWRCaW5zO1xuICAgIHN3aXRjaCAoc2NhbGVUeXBlKSB7XG4gICAgICBjYXNlICdxdWFudGl6ZSc6XG4gICAgICBjYXNlICdsaW5lYXInOlxuICAgICAgICByZXR1cm4gW2JpbnNbbG93ZXJJZHhdLnZhbHVlLCBiaW5zW3VwcGVySWR4XS52YWx1ZV07XG4gICAgICBjYXNlICdxdWFudGlsZSc6XG4gICAgICAgIHJldHVybiBnZXRRdWFudGlsZURvbWFpbihiaW5zLnNsaWNlKGxvd2VySWR4LCB1cHBlcklkeCArIDEpLCBkID0+IGQudmFsdWUpO1xuICAgICAgY2FzZSAnb3JkaW5hbCc6XG4gICAgICAgIHJldHVybiBnZXRPcmRpbmFsRG9tYWluKGJpbnMsIGQgPT4gZC52YWx1ZSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gW2JpbnNbbG93ZXJJZHhdLnZhbHVlLCBiaW5zW3VwcGVySWR4XS52YWx1ZV07XG4gICAgfVxuICB9XG5cbiAgZ2V0VmFsdWVSYW5nZShwZXJjZW50aWxlUmFuZ2U/OiBudW1iZXJbXSkge1xuICAgIGlmICghdGhpcy5zb3J0ZWRCaW5zKSB7XG4gICAgICB0aGlzLnNvcnRlZEJpbnMgPSB0aGlzLmFnZ3JlZ2F0ZWRCaW5zLnNvcnQoKGEsIGIpID0+IGFzY2VuZGluZyhhLnZhbHVlLCBiLnZhbHVlKSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5zb3J0ZWRCaW5zLmxlbmd0aCkgcmV0dXJuIFtdO1xuICAgIGxldCBsb3dlcklkeCA9IDA7XG4gICAgbGV0IHVwcGVySWR4ID0gdGhpcy5zb3J0ZWRCaW5zLmxlbmd0aCAtIDE7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocGVyY2VudGlsZVJhbmdlKSkge1xuICAgICAgY29uc3QgaWR4UmFuZ2UgPSB0aGlzLl9wZXJjZW50aWxlVG9JbmRleChwZXJjZW50aWxlUmFuZ2UpO1xuICAgICAgbG93ZXJJZHggPSBpZHhSYW5nZVswXTtcbiAgICAgIHVwcGVySWR4ID0gaWR4UmFuZ2VbMV07XG4gICAgfVxuICAgIHJldHVybiBbdGhpcy5zb3J0ZWRCaW5zW2xvd2VySWR4XS52YWx1ZSwgdGhpcy5zb3J0ZWRCaW5zW3VwcGVySWR4XS52YWx1ZV07XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgVXBkYXRlclR5cGUgPSAodGhpczogQ1BVQWdncmVnYXRvciwgc3RlcCwgcHJvcHMsIGRpbWVuc2lvblVwZGF0ZXIpID0+IHZvaWQ7XG5leHBvcnQgdHlwZSBCaW5kZWRVcGRhdGVyVHlwZSA9ICgpID0+IHZvaWQ7XG5leHBvcnQgdHlwZSBBZ2dyZWdhdGVkVXBkYXRlclR5cGUgPSAoXG4gIHRoaXM6IENQVUFnZ3JlZ2F0b3IsXG4gIHN0ZXAsXG4gIHByb3BzLFxuICBhZ2dyZWdhdGlvbixcbiAgYWdncmVnYXRpb25QYXJhbXNcbikgPT4gdm9pZDtcbmV4cG9ydCB0eXBlIEJpbmRlZEFnZ3JlZ2F0ZWRVcGRhdGVyVHlwZSA9IChhZ2dyZWdhdGlvblBhcmFtcykgPT4gdm9pZDtcblxuZXhwb3J0IHR5cGUgVXBkYXRlU3RlcHNUeXBlID0ge1xuICBrZXk6IHN0cmluZztcbiAgdHJpZ2dlcnM6IHtcbiAgICBba2V5OiBzdHJpbmddOiB7XG4gICAgICBwcm9wOiBzdHJpbmc7XG4gICAgICB1cGRhdGVUcmlnZ2VyPzogc3RyaW5nO1xuICAgIH07XG4gIH07XG4gIG9uU2V0Pzoge1xuICAgIHByb3BzOiBzdHJpbmc7XG4gIH07XG4gIHVwZGF0ZXI6IFVwZGF0ZXJUeXBlO1xufTtcblxuZXhwb3J0IHR5cGUgRGltZW5zaW9uVHlwZTxWYWx1ZVR5cGUgPSBhbnk+ID0ge1xuICBrZXk6IHN0cmluZztcbiAgYWNjZXNzb3I6IHN0cmluZztcbiAgZ2V0UGlja2luZ0luZm86IChkaW1lbnNpb25TdGF0ZSwgY2VsbCwgbGF5ZXJQcm9wcz8pID0+IGFueTtcbiAgbnVsbFZhbHVlOiBWYWx1ZVR5cGU7XG4gIHVwZGF0ZVN0ZXBzOiBVcGRhdGVTdGVwc1R5cGVbXTtcbiAgZ2V0U3ViTGF5ZXJBY2Nlc3Nvcjtcbn07XG5cbmV4cG9ydCB0eXBlIEFnZ3JlZ2F0aW9uVXBkYXRlU3RlcHNUeXBlID0ge1xuICBrZXk6IHN0cmluZztcbiAgdHJpZ2dlcnM6IHtcbiAgICBba2V5OiBzdHJpbmddOiB7XG4gICAgICBwcm9wOiBzdHJpbmc7XG4gICAgICB1cGRhdGVUcmlnZ2VyPzogc3RyaW5nO1xuICAgIH07XG4gIH07XG4gIHVwZGF0ZXI6IEFnZ3JlZ2F0ZWRVcGRhdGVyVHlwZTtcbn07XG5cbmV4cG9ydCB0eXBlIEFnZ3JlZ2F0aW9uVHlwZSA9IHtcbiAga2V5OiBzdHJpbmc7XG4gIHVwZGF0ZVN0ZXBzOiBBZ2dyZWdhdGlvblVwZGF0ZVN0ZXBzVHlwZVtdO1xufTtcblxuZXhwb3J0IGNvbnN0IERFQ0tfQUdHUkVHQVRJT05fTUFQID0ge1xuICBbQUdHUkVHQVRJT05fT1BFUkFUSU9OLlNVTV06IEFHR1JFR0FUSU9OX1RZUEVTLnN1bSxcbiAgW0FHR1JFR0FUSU9OX09QRVJBVElPTi5NRUFOXTogQUdHUkVHQVRJT05fVFlQRVMuYXZlcmFnZSxcbiAgW0FHR1JFR0FUSU9OX09QRVJBVElPTi5NSU5dOiBBR0dSRUdBVElPTl9UWVBFUy5taW5pbXVtLFxuICBbQUdHUkVHQVRJT05fT1BFUkFUSU9OLk1BWF06IEFHR1JFR0FUSU9OX1RZUEVTLm1heGltdW1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWYWx1ZUZ1bmMoXG4gIGFnZ3JlZ2F0aW9uOiBzdHJpbmcsXG4gIGFjY2Vzc29yOiAoZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IG51bWJlclxuKSB7XG4gIGlmICghYWdncmVnYXRpb24gfHwgIUFHR1JFR0FUSU9OX09QRVJBVElPTlthZ2dyZWdhdGlvbi50b1VwcGVyQ2FzZSgpXSkge1xuICAgIENvbnNvbGUud2FybihgQWdncmVnYXRpb24gJHthZ2dyZWdhdGlvbn0gaXMgbm90IHN1cHBvcnRlZGApO1xuICB9XG5cbiAgY29uc3Qgb3AgPSBBR0dSRUdBVElPTl9PUEVSQVRJT05bYWdncmVnYXRpb24udG9VcHBlckNhc2UoKV0gfHwgQUdHUkVHQVRJT05fT1BFUkFUSU9OLlNVTTtcbiAgY29uc3Qga2VwbGVyT3AgPSBERUNLX0FHR1JFR0FUSU9OX01BUFtvcF07XG5cbiAgcmV0dXJuIHB0cyA9PiBhZ2dyZWdhdGUocHRzLm1hcChhY2Nlc3NvciksIGtlcGxlck9wKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjYWxlRnVuY3RvcihzY2FsZVR5cGU6IHN0cmluZykge1xuICBpZiAoIXNjYWxlVHlwZSB8fCAhU0NBTEVfRlVOQ1tzY2FsZVR5cGVdKSB7XG4gICAgQ29uc29sZS53YXJuKGBTY2FsZSAke3NjYWxlVHlwZX0gaXMgbm90IHN1cHBvcnRlZGApO1xuICB9XG4gIHJldHVybiBTQ0FMRV9GVU5DW3NjYWxlVHlwZV0gfHwgU0NBTEVfRlVOQy5xdWFudGl6ZTtcbn1cblxuZnVuY3Rpb24gbm9wKCkge1xuICByZXR1cm47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRHZXRWYWx1ZSh0aGlzOiBDUFVBZ2dyZWdhdG9yLCBzdGVwLCBwcm9wcywgZGltZW5zaW9uVXBkYXRlcikge1xuICBjb25zdCB7a2V5fSA9IGRpbWVuc2lvblVwZGF0ZXI7XG4gIGNvbnN0IHt2YWx1ZSwgd2VpZ2h0LCBhZ2dyZWdhdGlvbn0gPSBzdGVwLnRyaWdnZXJzO1xuXG4gIGxldCBnZXRWYWx1ZSA9IHByb3BzW3ZhbHVlLnByb3BdO1xuXG4gIGlmIChnZXRWYWx1ZSA9PT0gbnVsbCkge1xuICAgIC8vIElmIGBnZXRWYWx1ZWAgaXMgbm90IHByb3ZpZGVkIGZyb20gcHJvcHMsIGJ1aWxkIGl0IHdpdGggYWdncmVnYXRpb24gYW5kIHdlaWdodC5cbiAgICBnZXRWYWx1ZSA9IGdldFZhbHVlRnVuYyhwcm9wc1thZ2dyZWdhdGlvbi5wcm9wXSwgcHJvcHNbd2VpZ2h0LnByb3BdKTtcbiAgfVxuXG4gIGlmIChnZXRWYWx1ZSkge1xuICAgIHRoaXMuX3NldERpbWVuc2lvblN0YXRlKGtleSwge2dldFZhbHVlfSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERpbWVuc2lvblNvcnRlZEJpbnModGhpczogQ1BVQWdncmVnYXRvciwgc3RlcCwgcHJvcHMsIGRpbWVuc2lvblVwZGF0ZXIpIHtcbiAgY29uc3Qge2tleX0gPSBkaW1lbnNpb25VcGRhdGVyO1xuICBjb25zdCB7Z2V0VmFsdWV9ID0gdGhpcy5zdGF0ZS5kaW1lbnNpb25zW2tleV07XG4gIGNvbnN0IHNvcnRlZEJpbnMgPSBuZXcgQmluU29ydGVyKCh0aGlzLnN0YXRlLmxheWVyRGF0YS5kYXRhIHx8IFtdKSBhcyB1bmtub3duIGFzIEJpbltdLCB7XG4gICAgZ2V0VmFsdWUsXG4gICAgZmlsdGVyRGF0YTogcHJvcHMuX2ZpbHRlckRhdGFcbiAgfSk7XG4gIHRoaXMuX3NldERpbWVuc2lvblN0YXRlKGtleSwge3NvcnRlZEJpbnN9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERpbWVuc2lvblZhbHVlRG9tYWluKHRoaXM6IENQVUFnZ3JlZ2F0b3IsIHN0ZXAsIHByb3BzLCBkaW1lbnNpb25VcGRhdGVyKSB7XG4gIGNvbnN0IHtrZXl9ID0gZGltZW5zaW9uVXBkYXRlcjtcbiAgY29uc3Qge1xuICAgIHRyaWdnZXJzOiB7bG93ZXJQZXJjZW50aWxlLCB1cHBlclBlcmNlbnRpbGUsIHNjYWxlVHlwZX1cbiAgfSA9IHN0ZXA7XG5cbiAgaWYgKCF0aGlzLnN0YXRlLmRpbWVuc2lvbnNba2V5XS5zb3J0ZWRCaW5zKSB7XG4gICAgLy8gdGhlIHByZXZpb3VzIHN0ZXAgc2hvdWxkIHNldCBzb3J0ZWRCaW5zLCBpZiBub3QsIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHZhbHVlRG9tYWluID1cbiAgICAvLyBmb3IgbG9nIGFuZCBzcXJ0IHNjYWxlLCByZXR1cm5zIGxpbmVhciBkb21haW4gYnkgZGVmYXVsdFxuICAgIC8vIFRPRE86IHN1cHBvcnQgb3RoZXIgc2NhbGUgZnVuY3Rpb24gZG9tYWluIGluIGJpbiBzb3J0ZXJcbiAgICB0aGlzLnN0YXRlLmRpbWVuc2lvbnNba2V5XS5zb3J0ZWRCaW5zLmdldFZhbHVlRG9tYWluQnlTY2FsZShwcm9wc1tzY2FsZVR5cGUucHJvcF0sIFtcbiAgICAgIHByb3BzW2xvd2VyUGVyY2VudGlsZS5wcm9wXSxcbiAgICAgIHByb3BzW3VwcGVyUGVyY2VudGlsZS5wcm9wXVxuICAgIF0pO1xuXG4gIGlmIChwcm9wcy5jb2xvclNjYWxlVHlwZSA9PT0gJ2N1c3RvbScgJiYgcHJvcHMuY29sb3JNYXApIHtcbiAgICAvLyBmb3IgY3VzdG9tIHNjYWxlLCByZXR1cm4gY3VzdG9tIGJyZWFrcyBhcyB2YWx1ZSBkb21haW4gZGlyZWN0bHlcbiAgICB2YWx1ZURvbWFpbiA9IHByb3BzLmNvbG9yTWFwLnJlZHVjZShcbiAgICAgIChwcmV2LCBjdXIpID0+IChOdW1iZXIuaXNGaW5pdGUoY3VyWzBdKSA/IHByZXYuY29uY2F0KGN1clswXSkgOiBwcmV2KSxcbiAgICAgIFtdXG4gICAgKTtcbiAgfVxuXG4gIHRoaXMuX3NldERpbWVuc2lvblN0YXRlKGtleSwge3ZhbHVlRG9tYWlufSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREaW1lbnNpb25TY2FsZSh0aGlzOiBDUFVBZ2dyZWdhdG9yLCBzdGVwLCBwcm9wcywgZGltZW5zaW9uVXBkYXRlcikge1xuICBjb25zdCB7a2V5fSA9IGRpbWVuc2lvblVwZGF0ZXI7XG4gIGNvbnN0IHtkb21haW4sIHJhbmdlLCBzY2FsZVR5cGUsIGZpeGVkfSA9IHN0ZXAudHJpZ2dlcnM7XG4gIGNvbnN0IHtvblNldH0gPSBzdGVwO1xuICBpZiAoIXRoaXMuc3RhdGUuZGltZW5zaW9uc1trZXldLnZhbHVlRG9tYWluKSB7XG4gICAgLy8gdGhlIHByZXZpb3VzIHN0ZXAgc2hvdWxkIHNldCB2YWx1ZURvbWFpbiwgaWYgbm90LCBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGRpbWVuc2lvblJhbmdlID0gcHJvcHNbcmFuZ2UucHJvcF07XG4gIGNvbnN0IGRpbWVuc2lvbkRvbWFpbiA9IHByb3BzW2RvbWFpbi5wcm9wXSB8fCB0aGlzLnN0YXRlLmRpbWVuc2lvbnNba2V5XS52YWx1ZURvbWFpbjtcbiAgY29uc3QgZGltZW5zaW9uRml4ZWQgPSBCb29sZWFuKGZpeGVkICYmIHByb3BzW2ZpeGVkLnByb3BdKTtcblxuICBjb25zdCBzY2FsZUZ1bmN0b3IgPSBnZXRTY2FsZUZ1bmN0b3Ioc2NhbGVUeXBlICYmIHByb3BzW3NjYWxlVHlwZS5wcm9wXSkoKTtcblxuICBjb25zdCBzY2FsZUZ1bmMgPSBzY2FsZUZ1bmN0b3JcbiAgICAuZG9tYWluKGRpbWVuc2lvbkRvbWFpbilcbiAgICAucmFuZ2UoZGltZW5zaW9uRml4ZWQgPyBkaW1lbnNpb25Eb21haW4gOiBkaW1lbnNpb25SYW5nZSk7XG4gIHNjYWxlRnVuYy5zY2FsZVR5cGUgPSBwcm9wcy5jb2xvclNjYWxlVHlwZTtcblxuICBpZiAodHlwZW9mIG9uU2V0ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvcHNbb25TZXQucHJvcHNdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc3Qgc29ydGVkQmlucyA9IHRoaXMuc3RhdGUuZGltZW5zaW9uc1trZXldLnNvcnRlZEJpbnM7XG4gICAgaWYgKHNvcnRlZEJpbnMpIHtcbiAgICAgIHByb3BzW29uU2V0LnByb3BzXSh7ZG9tYWluOiBzY2FsZUZ1bmMuZG9tYWluKCksIGFnZ3JlZ2F0ZWRCaW5zOiBzb3J0ZWRCaW5zLmJpbk1hcH0pO1xuICAgIH1cbiAgfVxuICB0aGlzLl9zZXREaW1lbnNpb25TdGF0ZShrZXksIHtzY2FsZUZ1bmN9KTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUmVzdWx0KFxuICByZXN1bHQ6IHtcbiAgICBoZXhhZ29ucz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+W107XG4gICAgbGF5ZXJEYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXTtcbiAgICBkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXTtcbiAgfSA9IHt9XG4pIHtcbiAgLy8gc3VwcG9ydCBwcmV2aW91cyBoZXhhZ29uQWdncmVnYXRvciBBUElcbiAgaWYgKHJlc3VsdC5oZXhhZ29ucykge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHtkYXRhOiByZXN1bHQuaGV4YWdvbnN9LCByZXN1bHQpO1xuICB9IGVsc2UgaWYgKHJlc3VsdC5sYXllckRhdGEpIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7ZGF0YTogcmVzdWx0LmxheWVyRGF0YX0sIHJlc3VsdCk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWdncmVnYXRlZERhdGEoXG4gIHRoaXM6IENQVUFnZ3JlZ2F0b3IsXG4gIHN0ZXAsXG4gIHByb3BzLFxuICBhZ2dyZWdhdGlvbixcbiAgYWdncmVnYXRpb25QYXJhbXNcbikge1xuICBjb25zdCB7XG4gICAgdHJpZ2dlcnM6IHthZ2dyZWdhdG9yOiBhZ2dyfVxuICB9ID0gc3RlcDtcbiAgY29uc3QgYWdncmVnYXRvciA9IHByb3BzW2FnZ3IucHJvcF07XG5cbiAgLy8gcmVzdWx0IHNob3VsZCBjb250YWluIGEgZGF0YSBhcnJheSBhbmQgb3RoZXIgcHJvcHNcbiAgLy8gcmVzdWx0ID0ge2RhdGE6IFtdLCAuLi5vdGhlciBwcm9wc31cbiAgY29uc3QgcmVzdWx0ID0gYWdncmVnYXRvcihwcm9wcywgYWdncmVnYXRpb25QYXJhbXMpO1xuICB0aGlzLnNldFN0YXRlKHtcbiAgICBsYXllckRhdGE6IG5vcm1hbGl6ZVJlc3VsdChyZXN1bHQpXG4gIH0pO1xufVxuXG5leHBvcnQgY29uc3QgZGVmYXVsdEFnZ3JlZ2F0aW9uOiBBZ2dyZWdhdGlvblR5cGUgPSB7XG4gIGtleTogJ3Bvc2l0aW9uJyxcbiAgdXBkYXRlU3RlcHM6IFtcbiAgICB7XG4gICAgICBrZXk6ICdhZ2dyZWdhdGUnLFxuICAgICAgdHJpZ2dlcnM6IHtcbiAgICAgICAgY2VsbFNpemU6IHtcbiAgICAgICAgICBwcm9wOiAnY2VsbFNpemUnXG4gICAgICAgIH0sXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgcHJvcDogJ2dldFBvc2l0aW9uJyxcbiAgICAgICAgICB1cGRhdGVUcmlnZ2VyOiAnZ2V0UG9zaXRpb24nXG4gICAgICAgIH0sXG4gICAgICAgIGFnZ3JlZ2F0b3I6IHtcbiAgICAgICAgICBwcm9wOiAnZ3JpZEFnZ3JlZ2F0b3InXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1cGRhdGVyOiBnZXRBZ2dyZWdhdGVkRGF0YVxuICAgIH1cbiAgXVxufTtcblxuZnVuY3Rpb24gZ2V0U3ViTGF5ZXJBY2Nlc3NvcihcbiAgZGltZW5zaW9uU3RhdGU6IHtzb3J0ZWRCaW5zOiBCaW5Tb3J0ZXI7IHNjYWxlRnVuYzogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0U2NhbGVGdW5jdG9yPn0sXG4gIGRpbWVuc2lvbjogRGltZW5zaW9uVHlwZVxuKSB7XG4gIHJldHVybiAoY2VsbDoge2luZGV4OiBudW1iZXJ9KSA9PiB7XG4gICAgY29uc3Qge3NvcnRlZEJpbnMsIHNjYWxlRnVuY30gPSBkaW1lbnNpb25TdGF0ZTtcbiAgICBjb25zdCBiaW4gPSBzb3J0ZWRCaW5zLmJpbk1hcFtjZWxsLmluZGV4XTtcblxuICAgIGlmIChiaW4gJiYgYmluLmNvdW50cyA9PT0gMCkge1xuICAgICAgLy8gbm8gcG9pbnRzIGxlZnQgaW4gYmluIGFmdGVyIGZpbHRlcmluZ1xuICAgICAgcmV0dXJuIGRpbWVuc2lvbi5udWxsVmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgY3YgPSBiaW4gJiYgYmluLnZhbHVlO1xuICAgIGNvbnN0IGRvbWFpbiA9IHNjYWxlRnVuYy5kb21haW4oKTtcblxuICAgIGNvbnN0IGlzVmFsdWVJbkRvbWFpbiA9XG4gICAgICBzY2FsZUZ1bmMuc2NhbGVUeXBlID09PSAnY3VzdG9tJ1xuICAgICAgICA/IGN2ID49IHNvcnRlZEJpbnMubWluVmFsdWUgJiYgY3YgPD0gc29ydGVkQmlucy5tYXhWYWx1ZVxuICAgICAgICA6IGN2ID49IGRvbWFpblswXSAmJiBjdiA8PSBkb21haW5bZG9tYWluLmxlbmd0aCAtIDFdO1xuXG4gICAgLy8gaWYgY2VsbCB2YWx1ZSBpcyBvdXRzaWRlIGRvbWFpbiwgc2V0IGFscGhhIHRvIDBcbiAgICByZXR1cm4gaXNWYWx1ZUluRG9tYWluID8gc2NhbGVGdW5jKGN2KSA6IGRpbWVuc2lvbi5udWxsVmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0Q29sb3JEaW1lbnNpb246IERpbWVuc2lvblR5cGU8UkdCQUNvbG9yPiA9IHtcbiAga2V5OiAnZmlsbENvbG9yJyxcbiAgYWNjZXNzb3I6ICdnZXRGaWxsQ29sb3InLFxuICBnZXRQaWNraW5nSW5mbzogKGRpbWVuc2lvblN0YXRlLCBjZWxsKSA9PiB7XG4gICAgaWYgKCFjZWxsKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IHtzb3J0ZWRCaW5zfSA9IGRpbWVuc2lvblN0YXRlO1xuICAgIGNvbnN0IGNvbG9yVmFsdWUgPSBzb3J0ZWRCaW5zLmJpbk1hcFtjZWxsLmluZGV4XSAmJiBzb3J0ZWRCaW5zLmJpbk1hcFtjZWxsLmluZGV4XS52YWx1ZTtcbiAgICByZXR1cm4ge2NvbG9yVmFsdWV9O1xuICB9LFxuICBudWxsVmFsdWU6IFswLCAwLCAwLCAwXSxcbiAgdXBkYXRlU3RlcHM6IFtcbiAgICB7XG4gICAgICBrZXk6ICdnZXRWYWx1ZScsXG4gICAgICB0cmlnZ2Vyczoge1xuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIHByb3A6ICdnZXRDb2xvclZhbHVlJyxcbiAgICAgICAgICB1cGRhdGVUcmlnZ2VyOiAnZ2V0Q29sb3JWYWx1ZSdcbiAgICAgICAgfSxcbiAgICAgICAgd2VpZ2h0OiB7XG4gICAgICAgICAgcHJvcDogJ2dldENvbG9yV2VpZ2h0JyxcbiAgICAgICAgICB1cGRhdGVUcmlnZ2VyOiAnZ2V0Q29sb3JXZWlnaHQnXG4gICAgICAgIH0sXG4gICAgICAgIGFnZ3JlZ2F0aW9uOiB7XG4gICAgICAgICAgcHJvcDogJ2NvbG9yQWdncmVnYXRpb24nXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1cGRhdGVyOiBnZXRHZXRWYWx1ZVxuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAnZ2V0QmlucycsXG4gICAgICB0cmlnZ2Vyczoge1xuICAgICAgICBfZmlsdGVyRGF0YToge1xuICAgICAgICAgIHByb3A6ICdfZmlsdGVyRGF0YScsXG4gICAgICAgICAgdXBkYXRlVHJpZ2dlcjogJ19maWx0ZXJEYXRhJ1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXBkYXRlcjogZ2V0RGltZW5zaW9uU29ydGVkQmluc1xuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAnZ2V0RG9tYWluJyxcbiAgICAgIHRyaWdnZXJzOiB7XG4gICAgICAgIGxvd2VyUGVyY2VudGlsZToge1xuICAgICAgICAgIHByb3A6ICdsb3dlclBlcmNlbnRpbGUnXG4gICAgICAgIH0sXG4gICAgICAgIHVwcGVyUGVyY2VudGlsZToge1xuICAgICAgICAgIHByb3A6ICd1cHBlclBlcmNlbnRpbGUnXG4gICAgICAgIH0sXG4gICAgICAgIHNjYWxlVHlwZToge3Byb3A6ICdjb2xvclNjYWxlVHlwZSd9XG4gICAgICB9LFxuICAgICAgdXBkYXRlcjogZ2V0RGltZW5zaW9uVmFsdWVEb21haW5cbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ2dldFNjYWxlRnVuYycsXG4gICAgICB0cmlnZ2Vyczoge1xuICAgICAgICBkb21haW46IHtwcm9wOiAnY29sb3JEb21haW4nfSxcbiAgICAgICAgcmFuZ2U6IHtwcm9wOiAnY29sb3JSYW5nZSd9LFxuICAgICAgICBzY2FsZVR5cGU6IHtwcm9wOiAnY29sb3JTY2FsZVR5cGUnfVxuICAgICAgfSxcbiAgICAgIG9uU2V0OiB7XG4gICAgICAgIHByb3BzOiAnb25TZXRDb2xvckRvbWFpbidcbiAgICAgIH0sXG4gICAgICB1cGRhdGVyOiBnZXREaW1lbnNpb25TY2FsZVxuICAgIH1cbiAgXSxcbiAgZ2V0U3ViTGF5ZXJBY2Nlc3NvclxufTtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRFbGV2YXRpb25EaW1lbnNpb246IERpbWVuc2lvblR5cGU8bnVtYmVyPiA9IHtcbiAga2V5OiAnZWxldmF0aW9uJyxcbiAgYWNjZXNzb3I6ICdnZXRFbGV2YXRpb24nLFxuICBnZXRQaWNraW5nSW5mbzogKGRpbWVuc2lvblN0YXRlLCBjZWxsKSA9PiB7XG4gICAgaWYgKCFjZWxsKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IHtzb3J0ZWRCaW5zfSA9IGRpbWVuc2lvblN0YXRlO1xuICAgIGNvbnN0IGVsZXZhdGlvblZhbHVlID0gc29ydGVkQmlucy5iaW5NYXBbY2VsbC5pbmRleF0gJiYgc29ydGVkQmlucy5iaW5NYXBbY2VsbC5pbmRleF0udmFsdWU7XG4gICAgcmV0dXJuIHtlbGV2YXRpb25WYWx1ZX07XG4gIH0sXG4gIG51bGxWYWx1ZTogLTEsXG4gIHVwZGF0ZVN0ZXBzOiBbXG4gICAge1xuICAgICAga2V5OiAnZ2V0VmFsdWUnLFxuICAgICAgdHJpZ2dlcnM6IHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICBwcm9wOiAnZ2V0RWxldmF0aW9uVmFsdWUnLFxuICAgICAgICAgIHVwZGF0ZVRyaWdnZXI6ICdnZXRFbGV2YXRpb25WYWx1ZSdcbiAgICAgICAgfSxcbiAgICAgICAgd2VpZ2h0OiB7XG4gICAgICAgICAgcHJvcDogJ2dldEVsZXZhdGlvbldlaWdodCcsXG4gICAgICAgICAgdXBkYXRlVHJpZ2dlcjogJ2dldEVsZXZhdGlvbldlaWdodCdcbiAgICAgICAgfSxcbiAgICAgICAgYWdncmVnYXRpb246IHtcbiAgICAgICAgICBwcm9wOiAnZWxldmF0aW9uQWdncmVnYXRpb24nXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1cGRhdGVyOiBnZXRHZXRWYWx1ZVxuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAnZ2V0QmlucycsXG4gICAgICB0cmlnZ2Vyczoge1xuICAgICAgICBfZmlsdGVyRGF0YToge1xuICAgICAgICAgIHByb3A6ICdfZmlsdGVyRGF0YScsXG4gICAgICAgICAgdXBkYXRlVHJpZ2dlcjogJ19maWx0ZXJEYXRhJ1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXBkYXRlcjogZ2V0RGltZW5zaW9uU29ydGVkQmluc1xuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAnZ2V0RG9tYWluJyxcbiAgICAgIHRyaWdnZXJzOiB7XG4gICAgICAgIGxvd2VyUGVyY2VudGlsZToge1xuICAgICAgICAgIHByb3A6ICdlbGV2YXRpb25Mb3dlclBlcmNlbnRpbGUnXG4gICAgICAgIH0sXG4gICAgICAgIHVwcGVyUGVyY2VudGlsZToge1xuICAgICAgICAgIHByb3A6ICdlbGV2YXRpb25VcHBlclBlcmNlbnRpbGUnXG4gICAgICAgIH0sXG4gICAgICAgIHNjYWxlVHlwZToge3Byb3A6ICdlbGV2YXRpb25TY2FsZVR5cGUnfVxuICAgICAgfSxcbiAgICAgIHVwZGF0ZXI6IGdldERpbWVuc2lvblZhbHVlRG9tYWluXG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6ICdnZXRTY2FsZUZ1bmMnLFxuICAgICAgdHJpZ2dlcnM6IHtcbiAgICAgICAgZml4ZWQ6IHtwcm9wOiAnZWxldmF0aW9uRml4ZWQnfSxcbiAgICAgICAgZG9tYWluOiB7cHJvcDogJ2VsZXZhdGlvbkRvbWFpbid9LFxuICAgICAgICByYW5nZToge3Byb3A6ICdlbGV2YXRpb25SYW5nZSd9LFxuICAgICAgICBzY2FsZVR5cGU6IHtwcm9wOiAnZWxldmF0aW9uU2NhbGVUeXBlJ31cbiAgICAgIH0sXG4gICAgICBvblNldDoge1xuICAgICAgICBwcm9wczogJ29uU2V0RWxldmF0aW9uRG9tYWluJ1xuICAgICAgfSxcbiAgICAgIHVwZGF0ZXI6IGdldERpbWVuc2lvblNjYWxlXG4gICAgfVxuICBdLFxuICBnZXRTdWJMYXllckFjY2Vzc29yXG59O1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdERpbWVuc2lvbnMgPSBbZGVmYXVsdENvbG9yRGltZW5zaW9uLCBkZWZhdWx0RWxldmF0aW9uRGltZW5zaW9uXTtcblxuZXhwb3J0IHR5cGUgQ1BVQWdncmVnYXRvclN0YXRlID0ge1xuICBsYXllckRhdGE6IHtkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXX07XG4gIGRpbWVuc2lvbnM6IFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAge1xuICAgICAgZ2V0VmFsdWU/OiAoLi4uYXJnczogdW5rbm93bltdKSA9PiBudW1iZXI7XG4gICAgICBzb3J0ZWRCaW5zPzogQmluU29ydGVyO1xuICAgICAgdmFsdWVEb21haW4/OiBudW1iZXJbXTtcbiAgICAgIHNjYWxlRnVuYz86ICgoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duKSAmIHtkb21haW46ICgpID0+IG51bWJlcltdOyBzY2FsZVR5cGU/OiBzdHJpbmd9O1xuICAgIH1cbiAgPjtcbiAgZ2VvSlNPTj86IEdlb0pTT04uRmVhdHVyZUNvbGxlY3Rpb247XG4gIGNsdXN0ZXJCdWlsZGVyPzogQ2x1c3RlckJ1aWxkZXI7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDUFVBZ2dyZWdhdG9yIHtcbiAgc3RhdGljIGdldERpbWVuc2lvblNjYWxlOiBhbnk7XG4gIHN0YXRlOiBDUFVBZ2dyZWdhdG9yU3RhdGU7XG4gIGRpbWVuc2lvblVwZGF0ZXJzOiB7W2tleTogc3RyaW5nXTogRGltZW5zaW9uVHlwZX07XG4gIGFnZ3JlZ2F0aW9uVXBkYXRlcjogQWdncmVnYXRpb25UeXBlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG9wdHM6IHtcbiAgICAgIGluaXRpYWxTdGF0ZT86IENQVUFnZ3JlZ2F0b3JTdGF0ZTtcbiAgICAgIGRpbWVuc2lvbnM/OiBEaW1lbnNpb25UeXBlW107XG4gICAgICBhZ2dyZWdhdGlvbj86IEFnZ3JlZ2F0aW9uVHlwZTtcbiAgICB9ID0ge31cbiAgKSB7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGxheWVyRGF0YToge30sXG4gICAgICBkaW1lbnNpb25zOiB7XG4gICAgICAgIC8vIGNvbG9yOiB7XG4gICAgICAgIC8vICAgZ2V0VmFsdWU6IG51bGwsXG4gICAgICAgIC8vICAgZG9tYWluOiBudWxsLFxuICAgICAgICAvLyAgIHNvcnRlZEJpbnM6IG51bGwsXG4gICAgICAgIC8vICAgc2NhbGVGdW5jOiBub3BcbiAgICAgICAgLy8gfSxcbiAgICAgICAgLy8gZWxldmF0aW9uOiB7XG4gICAgICAgIC8vICAgZ2V0VmFsdWU6IG51bGwsXG4gICAgICAgIC8vICAgZG9tYWluOiBudWxsLFxuICAgICAgICAvLyAgIHNvcnRlZEJpbnM6IG51bGwsXG4gICAgICAgIC8vICAgc2NhbGVGdW5jOiBub3BcbiAgICAgICAgLy8gfVxuICAgICAgfSxcbiAgICAgIC4uLm9wdHMuaW5pdGlhbFN0YXRlXG4gICAgfTtcblxuICAgIHRoaXMuZGltZW5zaW9uVXBkYXRlcnMgPSB7fTtcbiAgICB0aGlzLmFnZ3JlZ2F0aW9uVXBkYXRlciA9IG9wdHMuYWdncmVnYXRpb24gfHwgZGVmYXVsdEFnZ3JlZ2F0aW9uO1xuXG4gICAgdGhpcy5fYWRkRGltZW5zaW9uKG9wdHMuZGltZW5zaW9ucyB8fCBkZWZhdWx0RGltZW5zaW9ucyk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdERpbWVuc2lvbnMoKSB7XG4gICAgcmV0dXJuIGRlZmF1bHREaW1lbnNpb25zO1xuICB9XG5cbiAgdXBkYXRlQWxsRGltZW5zaW9ucyhwcm9wczogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgIGxldCBkaW1lbnNpb25DaGFuZ2VzOiBCaW5kZWRVcGRhdGVyVHlwZVtdID0gW107XG4gICAgLy8gdXBkYXRlIGFsbCBkaW1lbnNpb25zXG4gICAgZm9yIChjb25zdCBkaW0gaW4gdGhpcy5kaW1lbnNpb25VcGRhdGVycykge1xuICAgICAgY29uc3QgdXBkYXRlcnMgPSB0aGlzLl9hY2N1bXVsYXRlVXBkYXRlcnMoMCwgcHJvcHMsIHRoaXMuZGltZW5zaW9uVXBkYXRlcnNbZGltXSk7XG4gICAgICBkaW1lbnNpb25DaGFuZ2VzID0gZGltZW5zaW9uQ2hhbmdlcy5jb25jYXQodXBkYXRlcnMpO1xuICAgIH1cblxuICAgIGRpbWVuc2lvbkNoYW5nZXMuZm9yRWFjaChmID0+IHR5cGVvZiBmID09PSAnZnVuY3Rpb24nICYmIGYoKSk7XG4gIH1cblxuICB1cGRhdGVBZ2dyZWdhdGlvbihwcm9wczogUmVjb3JkPHN0cmluZywgYW55PiwgYWdncmVnYXRpb25QYXJhbXM6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICBjb25zdCB1cGRhdGVycyA9IHRoaXMuX2FjY3VtdWxhdGVVcGRhdGVycygwLCBwcm9wcywgdGhpcy5hZ2dyZWdhdGlvblVwZGF0ZXIpO1xuICAgIHVwZGF0ZXJzLmZvckVhY2goZiA9PiB0eXBlb2YgZiA9PT0gJ2Z1bmN0aW9uJyAmJiBmKGFnZ3JlZ2F0aW9uUGFyYW1zKSk7XG4gIH1cblxuICB1cGRhdGVTdGF0ZShcbiAgICBvcHRzOiB7XG4gICAgICBvbGRQcm9wczogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICAgIHByb3BzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgICAgY2hhbmdlRmxhZ3M6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgfSxcbiAgICBhZ2dyZWdhdGlvblBhcmFtczogUmVjb3JkPHN0cmluZywgYW55PlxuICApIHtcbiAgICBjb25zdCB7b2xkUHJvcHMsIHByb3BzLCBjaGFuZ2VGbGFnc30gPSBvcHRzO1xuICAgIGxldCBkaW1lbnNpb25DaGFuZ2VzOiBCaW5kZWRVcGRhdGVyVHlwZVtdID0gW107XG5cbiAgICBpZiAoY2hhbmdlRmxhZ3MuZGF0YUNoYW5nZWQpIHtcbiAgICAgIC8vIGlmIGRhdGEgY2hhbmdlZCB1cGRhdGUgZXZlcnl0aGluZ1xuICAgICAgdGhpcy51cGRhdGVBZ2dyZWdhdGlvbihwcm9wcywgYWdncmVnYXRpb25QYXJhbXMpO1xuICAgICAgdGhpcy51cGRhdGVBbGxEaW1lbnNpb25zKHByb3BzKTtcblxuICAgICAgcmV0dXJuIHRoaXMuc3RhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgYWdncmVnYXRpb25DaGFuZ2VzID0gdGhpcy5fZ2V0QWdncmVnYXRpb25DaGFuZ2VzKG9sZFByb3BzLCBwcm9wcywgY2hhbmdlRmxhZ3MpO1xuXG4gICAgaWYgKGFnZ3JlZ2F0aW9uQ2hhbmdlcyAmJiBhZ2dyZWdhdGlvbkNoYW5nZXMubGVuZ3RoKSB7XG4gICAgICAvLyBnZXQgYWdncmVnYXRlZERhdGFcbiAgICAgIGFnZ3JlZ2F0aW9uQ2hhbmdlcy5mb3JFYWNoKGYgPT4gdHlwZW9mIGYgPT09ICdmdW5jdGlvbicgJiYgZihhZ2dyZWdhdGlvblBhcmFtcykpO1xuICAgICAgdGhpcy51cGRhdGVBbGxEaW1lbnNpb25zKHByb3BzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gb25seSB1cGRhdGUgZGltZW5zaW9uc1xuICAgICAgZGltZW5zaW9uQ2hhbmdlcyA9IHRoaXMuX2dldERpbWVuc2lvbkNoYW5nZXMob2xkUHJvcHMsIHByb3BzLCBjaGFuZ2VGbGFncykgfHwgW107XG4gICAgICBkaW1lbnNpb25DaGFuZ2VzLmZvckVhY2goZiA9PiB0eXBlb2YgZiA9PT0gJ2Z1bmN0aW9uJyAmJiBmKCkpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0YXRlO1xuICB9XG5cbiAgLy8gVXBkYXRlIHByaXZhdGUgc3RhdGVcbiAgc2V0U3RhdGUodXBkYXRlT2JqZWN0OiBQYXJ0aWFsPENQVUFnZ3JlZ2F0b3JTdGF0ZT4pIHtcbiAgICB0aGlzLnN0YXRlID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5zdGF0ZSwgdXBkYXRlT2JqZWN0KTtcbiAgfVxuXG4gIC8vIFVwZGF0ZSBwcml2YXRlIHN0YXRlLmRpbWVuc2lvbnNcbiAgX3NldERpbWVuc2lvblN0YXRlKGtleTogc3RyaW5nLCB1cGRhdGVPYmplY3Q6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGRpbWVuc2lvbnM6IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuc3RhdGUuZGltZW5zaW9ucywge1xuICAgICAgICBba2V5XTogT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5zdGF0ZS5kaW1lbnNpb25zW2tleV0sIHVwZGF0ZU9iamVjdClcbiAgICAgIH0pXG4gICAgfSk7XG4gIH1cblxuICBfYWRkQWdncmVnYXRpb24oYWdncmVnYXRpb246IEFnZ3JlZ2F0aW9uVHlwZSkge1xuICAgIHRoaXMuYWdncmVnYXRpb25VcGRhdGVyID0gYWdncmVnYXRpb247XG4gIH1cblxuICBfYWRkRGltZW5zaW9uKGRpbWVuc2lvbnM6IERpbWVuc2lvblR5cGVbXSA9IFtdKSB7XG4gICAgZGltZW5zaW9ucy5mb3JFYWNoKGRpbWVuc2lvbiA9PiB7XG4gICAgICBjb25zdCB7a2V5fSA9IGRpbWVuc2lvbjtcbiAgICAgIHRoaXMuZGltZW5zaW9uVXBkYXRlcnNba2V5XSA9IGRpbWVuc2lvbjtcbiAgICB9KTtcbiAgfVxuXG4gIF9uZWVkVXBkYXRlU3RlcChcbiAgICBkaW1lbnNpb25TdGVwOiBVcGRhdGVTdGVwc1R5cGUgfCBBZ2dyZWdhdGlvblVwZGF0ZVN0ZXBzVHlwZSxcbiAgICBvbGRQcm9wcyxcbiAgICBwcm9wcyxcbiAgICBjaGFuZ2VGbGFnc1xuICApIHtcbiAgICAvLyB3aGV0aGVyIG5lZWQgdG8gdXBkYXRlIGN1cnJlbnQgZGltZW5zaW9uIHN0ZXBcbiAgICAvLyBkaW1lbnNpb24gc3RlcCBpcyB0aGUgdmFsdWUsIGRvbWFpbiwgc2NhbGVGdW5jdGlvbiBvZiBlYWNoIGRpbWVuc2lvblxuICAgIC8vIGVhY2ggc3RlcCBpcyBhbiBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIGxpbmtzIHRvIGxheWVyIHByb3AgYW5kIHdoZXRoZXIgdGhlIHByb3AgaXNcbiAgICAvLyBjb250cm9sbGVkIGJ5IHVwZGF0ZVRyaWdnZXJzXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZGltZW5zaW9uU3RlcC50cmlnZ2Vycykuc29tZShpdGVtID0+IHtcbiAgICAgIGlmIChpdGVtLnVwZGF0ZVRyaWdnZXIpIHtcbiAgICAgICAgLy8gY2hlY2sgYmFzZWQgb24gdXBkYXRlVHJpZ2dlcnMgY2hhbmdlIGZpcnN0XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgY2hhbmdlRmxhZ3MudXBkYXRlVHJpZ2dlcnNDaGFuZ2VkICYmXG4gICAgICAgICAgKGNoYW5nZUZsYWdzLnVwZGF0ZVRyaWdnZXJzQ2hhbmdlZC5hbGwgfHxcbiAgICAgICAgICAgIGNoYW5nZUZsYWdzLnVwZGF0ZVRyaWdnZXJzQ2hhbmdlZFtpdGVtLnVwZGF0ZVRyaWdnZXJdKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgLy8gZmFsbGJhY2sgdG8gZGlyZWN0IGNvbXBhcmlzb25cbiAgICAgIHJldHVybiBvbGRQcm9wc1tpdGVtLnByb3BdICE9PSBwcm9wc1tpdGVtLnByb3BdO1xuICAgIH0pO1xuICB9XG5cbiAgX2FjY3VtdWxhdGVVcGRhdGVyczxVcGRhdGVyT2JqZWN0VHlwZSBleHRlbmRzIERpbWVuc2lvblR5cGUgfCBBZ2dyZWdhdGlvblR5cGU+KFxuICAgIHN0ZXAsXG4gICAgcHJvcHMsXG4gICAgZGltZW5zaW9uOiBVcGRhdGVyT2JqZWN0VHlwZVxuICApIHtcbiAgICB0eXBlIExvY2FsVXBkYXRlclR5cGUgPSBVcGRhdGVyT2JqZWN0VHlwZSBleHRlbmRzIERpbWVuc2lvblR5cGVcbiAgICAgID8gQmluZGVkVXBkYXRlclR5cGVcbiAgICAgIDogQmluZGVkQWdncmVnYXRlZFVwZGF0ZXJUeXBlO1xuICAgIGNvbnN0IHVwZGF0ZXJzOiBMb2NhbFVwZGF0ZXJUeXBlW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gc3RlcDsgaSA8IGRpbWVuc2lvbi51cGRhdGVTdGVwcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdXBkYXRlciA9IGRpbWVuc2lvbi51cGRhdGVTdGVwc1tpXS51cGRhdGVyO1xuICAgICAgaWYgKHR5cGVvZiB1cGRhdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHVwZGF0ZXJzLnB1c2goXG4gICAgICAgICAgKHVwZGF0ZXIgYXMgVXBkYXRlclR5cGUpLmJpbmQoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgZGltZW5zaW9uLnVwZGF0ZVN0ZXBzW2ldLFxuICAgICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgICBkaW1lbnNpb25cbiAgICAgICAgICApIGFzIExvY2FsVXBkYXRlclR5cGVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdXBkYXRlcnM7XG4gIH1cblxuICBfZ2V0QWxsVXBkYXRlcnM8VXBkYXRlck9iamVjdFR5cGUgZXh0ZW5kcyBEaW1lbnNpb25UeXBlIHwgQWdncmVnYXRpb25UeXBlPihcbiAgICBkaW1lbnNpb246IFVwZGF0ZXJPYmplY3RUeXBlLFxuICAgIG9sZFByb3BzLFxuICAgIHByb3BzLFxuICAgIGNoYW5nZUZsYWdzXG4gICkge1xuICAgIHR5cGUgTG9jYWxVcGRhdGVyVHlwZSA9IFVwZGF0ZXJPYmplY3RUeXBlIGV4dGVuZHMgRGltZW5zaW9uVHlwZVxuICAgICAgPyBCaW5kZWRVcGRhdGVyVHlwZVxuICAgICAgOiBCaW5kZWRBZ2dyZWdhdGVkVXBkYXRlclR5cGU7XG4gICAgbGV0IHVwZGF0ZXJzOiBMb2NhbFVwZGF0ZXJUeXBlW10gPSBbXTtcbiAgICBjb25zdCBuZWVkVXBkYXRlU3RlcCA9IGRpbWVuc2lvbi51cGRhdGVTdGVwcy5maW5kSW5kZXgoc3RlcCA9PlxuICAgICAgdGhpcy5fbmVlZFVwZGF0ZVN0ZXAoc3RlcCwgb2xkUHJvcHMsIHByb3BzLCBjaGFuZ2VGbGFncylcbiAgICApO1xuXG4gICAgaWYgKG5lZWRVcGRhdGVTdGVwID4gLTEpIHtcbiAgICAgIHVwZGF0ZXJzID0gdXBkYXRlcnMuY29uY2F0KHRoaXMuX2FjY3VtdWxhdGVVcGRhdGVycyhuZWVkVXBkYXRlU3RlcCwgcHJvcHMsIGRpbWVuc2lvbikpO1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGVycztcbiAgfVxuXG4gIF9nZXRBZ2dyZWdhdGlvbkNoYW5nZXMoXG4gICAgb2xkUHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgcHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgY2hhbmdlRmxhZ3M6IFJlY29yZDxzdHJpbmcsIGFueT5cbiAgKSB7XG4gICAgY29uc3QgdXBkYXRlcnMgPSB0aGlzLl9nZXRBbGxVcGRhdGVycyh0aGlzLmFnZ3JlZ2F0aW9uVXBkYXRlciwgb2xkUHJvcHMsIHByb3BzLCBjaGFuZ2VGbGFncyk7XG4gICAgcmV0dXJuIHVwZGF0ZXJzLmxlbmd0aCA/IHVwZGF0ZXJzIDogbnVsbDtcbiAgfVxuXG4gIF9nZXREaW1lbnNpb25DaGFuZ2VzKFxuICAgIG9sZFByb3BzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIHByb3BzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIGNoYW5nZUZsYWdzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICkge1xuICAgIGxldCB1cGRhdGVyczogQmluZGVkVXBkYXRlclR5cGVbXSA9IFtdO1xuXG4gICAgLy8gZ2V0IGRpbWVuc2lvbiB0byBiZSB1cGRhdGVkXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5kaW1lbnNpb25VcGRhdGVycykge1xuICAgICAgLy8gcmV0dXJuIHRoZSBmaXJzdCB0cmlnZ2VyZWQgdXBkYXRlciBmb3IgZWFjaCBkaW1lbnNpb25cbiAgICAgIGNvbnN0IGRpbWVuc2lvbiA9IHRoaXMuZGltZW5zaW9uVXBkYXRlcnNba2V5XTtcbiAgICAgIGNvbnN0IGRpbWVuc2lvblVwZGF0ZXJzID0gdGhpcy5fZ2V0QWxsVXBkYXRlcnMoZGltZW5zaW9uLCBvbGRQcm9wcywgcHJvcHMsIGNoYW5nZUZsYWdzKTtcbiAgICAgIHVwZGF0ZXJzID0gdXBkYXRlcnMuY29uY2F0KGRpbWVuc2lvblVwZGF0ZXJzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXBkYXRlcnMubGVuZ3RoID8gdXBkYXRlcnMgOiBudWxsO1xuICB9XG5cbiAgZ2V0VXBkYXRlVHJpZ2dlcnMocHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICBjb25zdCBfdXBkYXRlVHJpZ2dlcnMgPSBwcm9wcy51cGRhdGVUcmlnZ2VycyB8fCB7fTtcbiAgICBjb25zdCB1cGRhdGVUcmlnZ2VycyA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5kaW1lbnNpb25VcGRhdGVycykge1xuICAgICAgY29uc3Qge2FjY2Vzc29yLCB1cGRhdGVTdGVwc306IHthY2Nlc3Nvcjogc3RyaW5nOyB1cGRhdGVTdGVwczogVXBkYXRlU3RlcHNUeXBlW119ID1cbiAgICAgICAgdGhpcy5kaW1lbnNpb25VcGRhdGVyc1trZXldO1xuICAgICAgLy8gZm9sZCBkaW1lbnNpb24gdHJpZ2dlcnMgaW50byBlYWNoIGFjY2Vzc29yXG4gICAgICB1cGRhdGVUcmlnZ2Vyc1thY2Nlc3Nvcl0gPSB7fTtcblxuICAgICAgdXBkYXRlU3RlcHMuZm9yRWFjaChzdGVwID0+IHtcbiAgICAgICAgT2JqZWN0LnZhbHVlcyhzdGVwLnRyaWdnZXJzIHx8IFtdKS5mb3JFYWNoKCh7cHJvcCwgdXBkYXRlVHJpZ2dlcn0pID0+IHtcbiAgICAgICAgICBpZiAodXBkYXRlVHJpZ2dlcikge1xuICAgICAgICAgICAgLy8gaWYgcHJvcCBpcyBiYXNlZCBvbiB1cGRhdGVUcmlnZ2VyIGUuZy4gZ2V0Q29sb3JWYWx1ZSwgZ2V0Q29sb3JXZWlnaHRcbiAgICAgICAgICAgIC8vIGFuZCB1cGRhdGVUcmlnZ2VycyBpcyBwYXNzZWQgaW4gZnJvbSBsYXllciBwcm9wXG4gICAgICAgICAgICAvLyBmb2xkIHRoZSB1cGRhdGVUcmlnZ2VycyBpbnRvIGFjY2Vzc29yXG4gICAgICAgICAgICBjb25zdCBmcm9tUHJvcCA9IF91cGRhdGVUcmlnZ2Vyc1t1cGRhdGVUcmlnZ2VyXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZnJvbVByb3AgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGZyb21Qcm9wKSkge1xuICAgICAgICAgICAgICAvLyBpZiB1cGRhdGVUcmlnZ2VyIGlzIGFuIG9iamVjdCBzcHJlYWQgaXRcbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih1cGRhdGVUcmlnZ2Vyc1thY2Nlc3Nvcl0sIGZyb21Qcm9wKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZnJvbVByb3AgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB1cGRhdGVUcmlnZ2Vyc1thY2Nlc3Nvcl1bcHJvcF0gPSBmcm9tUHJvcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaWYgcHJvcCBpcyBub3QgYmFzZWQgb24gdXBkYXRlVHJpZ2dlclxuICAgICAgICAgICAgdXBkYXRlVHJpZ2dlcnNbYWNjZXNzb3JdW3Byb3BdID0gcHJvcHNbcHJvcF07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGVUcmlnZ2VycztcbiAgfVxuXG4gIGdldFBpY2tpbmdJbmZvKHtpbmZvfToge2luZm86IFJlY29yZDxzdHJpbmcsIGFueT59LCBsYXllclByb3BzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgY29uc3QgaXNQaWNrZWQgPSBpbmZvLnBpY2tlZCAmJiBpbmZvLmluZGV4ID4gLTE7XG4gICAgbGV0IG9iamVjdDogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwgPSBudWxsO1xuICAgIGNvbnN0IGNlbGwgPSBpc1BpY2tlZCA/IHRoaXMuc3RhdGUubGF5ZXJEYXRhLmRhdGE/LltpbmZvLmluZGV4XSA6IG51bGw7XG4gICAgaWYgKGNlbGwpIHtcbiAgICAgIGxldCBiaW5JbmZvID0ge307XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmRpbWVuc2lvblVwZGF0ZXJzKSB7XG4gICAgICAgIGNvbnN0IHtnZXRQaWNraW5nSW5mb30gPSB0aGlzLmRpbWVuc2lvblVwZGF0ZXJzW2tleV07XG4gICAgICAgIGlmICh0eXBlb2YgZ2V0UGlja2luZ0luZm8gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBiaW5JbmZvID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgYmluSW5mbyxcbiAgICAgICAgICAgIGdldFBpY2tpbmdJbmZvKHRoaXMuc3RhdGUuZGltZW5zaW9uc1trZXldLCBjZWxsLCBsYXllclByb3BzKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgb2JqZWN0ID0gT2JqZWN0LmFzc2lnbihiaW5JbmZvLCBjZWxsLCB7XG4gICAgICAgIHBvaW50czogY2VsbC5maWx0ZXJlZFBvaW50cyB8fCBjZWxsLnBvaW50c1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGJpbiAgYW5kICB0byBpbmZvXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oaW5mbywge1xuICAgICAgcGlja2VkOiBCb29sZWFuKG9iamVjdCksXG4gICAgICAvLyBvdmVycmlkZSBvYmplY3Qgd2l0aCBwaWNrZWQgY2VsbFxuICAgICAgb2JqZWN0XG4gICAgfSk7XG4gIH1cblxuICBnZXRBY2Nlc3NvcihkaW1lbnNpb25LZXk6IHN0cmluZywgbGF5ZXJQcm9wczogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuZGltZW5zaW9uVXBkYXRlcnMsIGRpbWVuc2lvbktleSkpIHtcbiAgICAgIHJldHVybiBub3A7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRpbWVuc2lvblVwZGF0ZXJzW2RpbWVuc2lvbktleV0uZ2V0U3ViTGF5ZXJBY2Nlc3NvcihcbiAgICAgIHRoaXMuc3RhdGUuZGltZW5zaW9uc1tkaW1lbnNpb25LZXldLFxuICAgICAgdGhpcy5kaW1lbnNpb25VcGRhdGVyc1tkaW1lbnNpb25LZXldLFxuICAgICAgbGF5ZXJQcm9wc1xuICAgICk7XG4gIH1cbn1cblxuQ1BVQWdncmVnYXRvci5nZXREaW1lbnNpb25TY2FsZSA9IGdldERpbWVuc2lvblNjYWxlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUlBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUVBLElBQUFDLE1BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFVBQUEsR0FBQUYsT0FBQTtBQUFtRSxTQUFBRyxRQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLElBQUEsQ0FBQUosQ0FBQSxPQUFBRyxNQUFBLENBQUFFLHFCQUFBLFFBQUFDLENBQUEsR0FBQUgsTUFBQSxDQUFBRSxxQkFBQSxDQUFBTCxDQUFBLEdBQUFDLENBQUEsS0FBQUssQ0FBQSxHQUFBQSxDQUFBLENBQUFDLE1BQUEsV0FBQU4sQ0FBQSxXQUFBRSxNQUFBLENBQUFLLHdCQUFBLENBQUFSLENBQUEsRUFBQUMsQ0FBQSxFQUFBUSxVQUFBLE9BQUFQLENBQUEsQ0FBQVEsSUFBQSxDQUFBQyxLQUFBLENBQUFULENBQUEsRUFBQUksQ0FBQSxZQUFBSixDQUFBO0FBQUEsU0FBQVUsY0FBQVosQ0FBQSxhQUFBQyxDQUFBLE1BQUFBLENBQUEsR0FBQVksU0FBQSxDQUFBQyxNQUFBLEVBQUFiLENBQUEsVUFBQUMsQ0FBQSxXQUFBVyxTQUFBLENBQUFaLENBQUEsSUFBQVksU0FBQSxDQUFBWixDQUFBLFFBQUFBLENBQUEsT0FBQUYsT0FBQSxDQUFBSSxNQUFBLENBQUFELENBQUEsT0FBQWEsT0FBQSxXQUFBZCxDQUFBLFFBQUFlLGdCQUFBLGFBQUFoQixDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxDQUFBRCxDQUFBLFNBQUFFLE1BQUEsQ0FBQWMseUJBQUEsR0FBQWQsTUFBQSxDQUFBZSxnQkFBQSxDQUFBbEIsQ0FBQSxFQUFBRyxNQUFBLENBQUFjLHlCQUFBLENBQUFmLENBQUEsS0FBQUgsT0FBQSxDQUFBSSxNQUFBLENBQUFE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
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { LineLayer, LineLayerProps } from '@deck.gl/layers';
|
|
2
|
-
import {
|
|
2
|
+
import type { Color } from '@deck.gl/core';
|
|
3
|
+
type RGBAColor = Color;
|
|
3
4
|
export default class EnhancedLineLayer extends LineLayer<any, LineLayerProps<any> & {
|
|
4
5
|
elevationScale: number;
|
|
5
6
|
getTargetColor: RGBAColor;
|
|
6
7
|
}> {
|
|
7
8
|
getShaders(): any;
|
|
8
|
-
draw(
|
|
9
|
-
uniforms: any;
|
|
10
|
-
}): void;
|
|
9
|
+
draw(opts: any): void;
|
|
11
10
|
initializeState(): void;
|
|
12
11
|
}
|
|
12
|
+
export {};
|