@kando-env/kando-ui 1.2.122 → 1.2.123
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/lib/Widgets/Map/Map.js +40 -163
- package/lib/Widgets/Map/MapUtils.js +102 -0
- package/lib/Widgets/Map/areas/AreaPolygon.js +2 -2
- package/lib/Widgets/Map/events/Event.js +69 -0
- package/lib/Widgets/Map/events/EventIndicator.js +21 -46
- package/lib/Widgets/Map/events/EventPath.js +16 -38
- package/lib/Widgets/Map/events/EventUtils.js +245 -0
- package/lib/Widgets/Map/events/NetworkForSpecificEvent.js +3 -117
- package/lib/Widgets/Map/events/PointOfEvent.js +142 -0
- package/lib/Widgets/Map/events/PointsForSpecificEvent.js +66 -0
- package/lib/Widgets/Map/events/Snail.js +60 -0
- package/lib/Widgets/Map/points/PointMarker.js +10 -472
- package/lib/Widgets/Map/points/PointMarkers.js +24 -17
- package/lib/Widgets/Map/points/PointUtils.js +373 -0
- package/lib/components/Header/Toolbar/Toolbar.js +2 -2
- package/lib/macros/getVersion.js +1 -1
- package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainer.js +1 -4
- package/lib/pages/EventsPage/events/events_list/EventsList.js +25 -8
- package/lib/pages/EventsPage/events/events_list/Filter/FilterContainer.js +2 -2
- package/package.json +1 -1
- package/lib/Widgets/Map/events/EventIndicatorHover.js +0 -252
- package/lib/Widgets/Map/events/EventPathHover.js +0 -81
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
3
|
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
4
|
|
|
7
5
|
Object.defineProperty(exports, "__esModule", {
|
|
@@ -9,499 +7,39 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
9
7
|
});
|
|
10
8
|
exports.default = void 0;
|
|
11
9
|
|
|
12
|
-
var _jquery = _interopRequireDefault(require("jquery"));
|
|
13
|
-
|
|
14
10
|
var _react = _interopRequireWildcard(require("react"));
|
|
15
11
|
|
|
16
|
-
var _reactDom = _interopRequireDefault(require("react-dom"));
|
|
17
|
-
|
|
18
12
|
var _reactRedux = require("react-redux");
|
|
19
13
|
|
|
20
|
-
var _lineChart = _interopRequireDefault(require("assets/line-chart.svg"));
|
|
21
|
-
|
|
22
|
-
var _pinWater = _interopRequireDefault(require("assets/map/pin-water.svg"));
|
|
23
|
-
|
|
24
|
-
var _waterNoBackground = _interopRequireDefault(require("assets/point_icons/water-no-background.svg"));
|
|
25
|
-
|
|
26
|
-
var _blueCircle = _interopRequireDefault(require("assets/point_icons/blue-circle.svg"));
|
|
27
|
-
|
|
28
|
-
var _brightBlueCircle = _interopRequireDefault(require("assets/point_icons/bright-blue-circle.svg"));
|
|
29
|
-
|
|
30
|
-
var _factoryIcon = _interopRequireDefault(require("assets/point_icons/factory-icon.svg"));
|
|
31
|
-
|
|
32
|
-
var _greenCircle = _interopRequireDefault(require("assets/point_icons/green-circle.svg"));
|
|
33
|
-
|
|
34
|
-
var _observationIcon = _interopRequireDefault(require("assets/point_icons/observation-icon.svg"));
|
|
35
|
-
|
|
36
|
-
var _pinkCircle = _interopRequireDefault(require("assets/point_icons/pink-circle.svg"));
|
|
37
|
-
|
|
38
|
-
var _pumpStationIcon = _interopRequireDefault(require("assets/point_icons/pump-station-icon.svg"));
|
|
39
|
-
|
|
40
|
-
var _redPinRedShadow = _interopRequireDefault(require("assets/point_icons/red-pin-red-shadow.png"));
|
|
41
|
-
|
|
42
|
-
var _samplingIcon = _interopRequireDefault(require("assets/point_icons/sampling-icon.svg"));
|
|
43
|
-
|
|
44
|
-
var _whitePinBlackShadow = _interopRequireDefault(require("assets/point_icons/white-pin-black-shadow.png"));
|
|
45
|
-
|
|
46
|
-
var _whitePinRedShadow = _interopRequireDefault(require("assets/point_icons/white-pin-red-shadow.png"));
|
|
47
|
-
|
|
48
|
-
var _WWTPIcon = _interopRequireDefault(require("assets/point_icons/WWTP-icon.svg"));
|
|
49
|
-
|
|
50
|
-
var _yellowCircle = _interopRequireDefault(require("assets/point_icons/yellow-circle.svg"));
|
|
51
|
-
|
|
52
|
-
var _whitePoint = _interopRequireDefault(require("assets/white-point.png"));
|
|
53
|
-
|
|
54
|
-
var _Sector = _interopRequireDefault(require("components/Sector"));
|
|
55
|
-
|
|
56
14
|
var _useRemoveExistingLayers = _interopRequireWildcard(require("hooks/useRemoveExistingLayers"));
|
|
57
15
|
|
|
58
|
-
var
|
|
59
|
-
|
|
60
|
-
var _i18n = _interopRequireDefault(require("utilities/i18n"));
|
|
61
|
-
|
|
62
|
-
var _TimeFormat = _interopRequireDefault(require("utilities/TimeFormat"));
|
|
16
|
+
var _PointUtils = require("./PointUtils");
|
|
63
17
|
|
|
64
18
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
65
19
|
|
|
66
20
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
67
21
|
|
|
68
22
|
function mapStateToProps(state) {
|
|
69
|
-
var events_data = state.events_data
|
|
70
|
-
edges_data = state.edges_data;
|
|
23
|
+
var events_data = state.events_data;
|
|
71
24
|
return {
|
|
72
|
-
events_data: events_data
|
|
73
|
-
edges_data: edges_data
|
|
25
|
+
events_data: events_data
|
|
74
26
|
};
|
|
75
27
|
}
|
|
76
28
|
|
|
77
29
|
var PointMarker = function PointMarker(props) {
|
|
78
|
-
var
|
|
79
|
-
map = props.map,
|
|
30
|
+
var map = props.map,
|
|
80
31
|
point = props.point,
|
|
81
|
-
|
|
82
|
-
edges_data = props.edges_data;
|
|
83
|
-
var focusedEvent = events_data.focusedEvent,
|
|
84
|
-
hoveredEvent = events_data.hoveredEvent;
|
|
85
|
-
var dispatch = (0, _reactRedux.useDispatch)();
|
|
86
|
-
var centeredEvent = (0, _react.useMemo)(function () {
|
|
87
|
-
return focusedEvent || hoveredEvent;
|
|
88
|
-
}, [focusedEvent, hoveredEvent]); // iconSize: [width, height],
|
|
89
|
-
// Icon Anchor: [(-right)(+left), (-down)(+up)]
|
|
90
|
-
|
|
91
|
-
var selectedBackground = function selectedBackground() {
|
|
92
|
-
return L.icon({
|
|
93
|
-
iconUrl: _redPinRedShadow.default,
|
|
94
|
-
iconSize: [67, 70],
|
|
95
|
-
iconAnchor: [32, 54],
|
|
96
|
-
popupAnchor: [0, -30]
|
|
97
|
-
});
|
|
98
|
-
};
|
|
99
|
-
|
|
100
|
-
var belongsToSourceBackground = function belongsToSourceBackground() {
|
|
101
|
-
return L.icon({
|
|
102
|
-
iconUrl: _whitePinRedShadow.default,
|
|
103
|
-
iconSize: [67, 70],
|
|
104
|
-
iconAnchor: [32, 54],
|
|
105
|
-
popupAnchor: [0, -30]
|
|
106
|
-
});
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
var standardBackground = function standardBackground() {
|
|
110
|
-
var secondary = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
111
|
-
var third = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
112
|
-
return L.icon({
|
|
113
|
-
iconUrl: _whitePinBlackShadow.default,
|
|
114
|
-
iconSize: secondary ? [20, 20] : [43, 46],
|
|
115
|
-
iconAnchor: secondary && third ? [-2, 19] : secondary ? [-2, 44] : [20, 42],
|
|
116
|
-
popupAnchor: [0, -30]
|
|
117
|
-
});
|
|
118
|
-
};
|
|
119
|
-
|
|
120
|
-
var combinedFactoryIcon = [L.icon({
|
|
121
|
-
iconUrl: _yellowCircle.default,
|
|
122
|
-
iconSize: [25, 24],
|
|
123
|
-
iconAnchor: [10.7, 33.7],
|
|
124
|
-
popupAnchor: [0, -30]
|
|
125
|
-
}), L.icon({
|
|
126
|
-
iconUrl: _factoryIcon.default,
|
|
127
|
-
iconSize: [15, 15],
|
|
128
|
-
iconAnchor: [5, 30],
|
|
129
|
-
popupAnchor: [0, -30]
|
|
130
|
-
})];
|
|
131
|
-
var combinedPumpStationIcon = [L.icon({
|
|
132
|
-
iconUrl: _greenCircle.default,
|
|
133
|
-
iconSize: [25, 24],
|
|
134
|
-
iconAnchor: [10.7, 33.7],
|
|
135
|
-
popupAnchor: [0, -30]
|
|
136
|
-
}), L.icon({
|
|
137
|
-
iconUrl: _pumpStationIcon.default,
|
|
138
|
-
iconSize: [20, 20],
|
|
139
|
-
iconAnchor: [7, 32],
|
|
140
|
-
popupAnchor: [0, -30]
|
|
141
|
-
})];
|
|
142
|
-
var combinedCollectorsIcon = [L.icon({
|
|
143
|
-
iconUrl: _pinWater.default,
|
|
144
|
-
iconSize: [45, 45],
|
|
145
|
-
iconAnchor: [25, 50],
|
|
146
|
-
popupAnchor: [0, -30]
|
|
147
|
-
})];
|
|
148
|
-
var combinedWWTPIcon = [L.icon({
|
|
149
|
-
iconUrl: _brightBlueCircle.default,
|
|
150
|
-
iconSize: [25, 25],
|
|
151
|
-
iconAnchor: [10.7, 33.7],
|
|
152
|
-
popupAnchor: [0, -30]
|
|
153
|
-
}), L.icon({
|
|
154
|
-
iconUrl: _WWTPIcon.default,
|
|
155
|
-
iconSize: [20, 20],
|
|
156
|
-
iconAnchor: [8, 31],
|
|
157
|
-
popupAnchor: [0, -30]
|
|
158
|
-
})];
|
|
159
|
-
|
|
160
|
-
var markerBelongsToSelectedSource = function markerBelongsToSelectedSource() {
|
|
161
|
-
var source;
|
|
162
|
-
|
|
163
|
-
if (centeredEvent !== null) {
|
|
164
|
-
source = centeredEvent.sources.filter(function (source) {
|
|
165
|
-
return source.point_id === point.id;
|
|
166
|
-
})[0];
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
return centeredEvent !== null && source && centeredEvent.selected_source === source.point_id;
|
|
170
|
-
};
|
|
171
|
-
|
|
172
|
-
var markerBelongsToSource = function markerBelongsToSource() {
|
|
173
|
-
return centeredEvent !== null && centeredEvent.sources.filter(function (source) {
|
|
174
|
-
return source.point_id === point.id;
|
|
175
|
-
})[0];
|
|
176
|
-
};
|
|
177
|
-
|
|
178
|
-
var isCollectorFocused = function isCollectorFocused(point) {
|
|
179
|
-
var _centeredEvent$observ;
|
|
180
|
-
|
|
181
|
-
return (centeredEvent === null || centeredEvent === void 0 ? void 0 : (_centeredEvent$observ = centeredEvent.observations) === null || _centeredEvent$observ === void 0 ? void 0 : _centeredEvent$observ.length) === 1 && point.id === centeredEvent.observations[0].point_id;
|
|
182
|
-
};
|
|
183
|
-
|
|
184
|
-
var matchIconToPoint = function matchIconToPoint(point) {
|
|
185
|
-
switch (point.group.type) {
|
|
186
|
-
case 'Groups::Factory':
|
|
187
|
-
if (combinedFactoryIcon.length === 2) {
|
|
188
|
-
if (markerBelongsToSelectedSource()) {
|
|
189
|
-
combinedFactoryIcon.unshift(selectedBackground());
|
|
190
|
-
} else if (markerBelongsToSource()) {
|
|
191
|
-
combinedFactoryIcon.unshift(belongsToSourceBackground());
|
|
192
|
-
} else {
|
|
193
|
-
combinedFactoryIcon.unshift(standardBackground());
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
return combinedFactoryIcon;
|
|
198
|
-
|
|
199
|
-
case 'Groups::PumpStation':
|
|
200
|
-
if (combinedPumpStationIcon.length === 2) {
|
|
201
|
-
if (markerBelongsToSelectedSource()) {
|
|
202
|
-
combinedPumpStationIcon.unshift(selectedBackground());
|
|
203
|
-
} else if (markerBelongsToSource()) {
|
|
204
|
-
combinedPumpStationIcon.unshift(belongsToSourceBackground());
|
|
205
|
-
} else {
|
|
206
|
-
combinedPumpStationIcon.unshift(standardBackground());
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
return combinedPumpStationIcon;
|
|
211
|
-
|
|
212
|
-
case 'Groups::WastewaterTreatmentPlant':
|
|
213
|
-
if (combinedWWTPIcon.length === 2) {
|
|
214
|
-
if (markerBelongsToSelectedSource()) {
|
|
215
|
-
combinedWWTPIcon.unshift(selectedBackground());
|
|
216
|
-
} else if (markerBelongsToSource()) {
|
|
217
|
-
combinedWWTPIcon.unshift(belongsToSourceBackground());
|
|
218
|
-
} else {
|
|
219
|
-
combinedWWTPIcon.unshift(standardBackground());
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
return combinedWWTPIcon;
|
|
224
|
-
|
|
225
|
-
case 'Groups::Collectors':
|
|
226
|
-
if (isCollectorFocused(point)) {
|
|
227
|
-
return [L.icon({
|
|
228
|
-
iconUrl: _redPinRedShadow.default,
|
|
229
|
-
iconSize: [62, 62],
|
|
230
|
-
iconAnchor: [30, 52]
|
|
231
|
-
}), L.icon({
|
|
232
|
-
iconUrl: _waterNoBackground.default,
|
|
233
|
-
iconSize: [46, 46],
|
|
234
|
-
iconAnchor: [22, 44],
|
|
235
|
-
popupAnchor: [0, -30]
|
|
236
|
-
})];
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
return combinedCollectorsIcon;
|
|
240
|
-
|
|
241
|
-
default:
|
|
242
|
-
return null;
|
|
243
|
-
}
|
|
244
|
-
};
|
|
245
|
-
|
|
246
|
-
var createManholePoint = function createManholePoint(markerLocation) {
|
|
247
|
-
var pointIcon = L.icon({
|
|
248
|
-
iconUrl: _whitePoint.default,
|
|
249
|
-
iconSize: [9, 9],
|
|
250
|
-
iconAnchor: [4.5, 4.5]
|
|
251
|
-
});
|
|
252
|
-
var manholeIcon = L.marker(markerLocation, {
|
|
253
|
-
icon: pointIcon,
|
|
254
|
-
riseOnHover: true
|
|
255
|
-
}).addTo(map);
|
|
256
|
-
manholeIcon.bindTooltip("".concat(point.group.name, " (").concat(point.id, ")"));
|
|
257
|
-
manholeIcon['kando_object_id'] = point.id;
|
|
258
|
-
manholeIcon['kando_object'] = 'Point';
|
|
259
|
-
};
|
|
260
|
-
|
|
261
|
-
var createCustomIconPoint = function createCustomIconPoint(markerLocation) {
|
|
262
|
-
// @ts-ignore
|
|
263
|
-
matchIconToPoint(point) !== null && // @ts-ignore
|
|
264
|
-
matchIconToPoint(point).forEach(function (icon) {
|
|
265
|
-
var pointCustomIcon = L.marker(markerLocation, {
|
|
266
|
-
icon: icon,
|
|
267
|
-
riseOnHover: false
|
|
268
|
-
}).addTo(map);
|
|
269
|
-
pointCustomIcon.bindTooltip("".concat(point.group.name, " (").concat(point.id, ")"));
|
|
270
|
-
pointCustomIcon['kando_object_id'] = point.id;
|
|
271
|
-
pointCustomIcon['kando_object'] = 'Point';
|
|
272
|
-
});
|
|
273
|
-
|
|
274
|
-
if (point.relatedEventsAmount) {
|
|
275
|
-
var pointCustomIcon = L.marker(markerLocation, {
|
|
276
|
-
icon: L.divIcon({
|
|
277
|
-
className: "\n ".concat(point.relatedEventsAmount >= 100 ? 'circle-events-amount circle-events-amount--tridigit' : 'circle-events-amount', " \n ").concat(point.relatedEventsAmount > 2 ? 'alert-color' : '', "\n "),
|
|
278
|
-
html: "<p>".concat(point.relatedEventsAmount, "</p>"),
|
|
279
|
-
iconAnchor: [-5, 42]
|
|
280
|
-
}),
|
|
281
|
-
riseOnHover: false
|
|
282
|
-
}).addTo(map);
|
|
283
|
-
pointCustomIcon['kando_object_id'] = point.id;
|
|
284
|
-
pointCustomIcon['kando_object'] = 'IconNumber';
|
|
285
|
-
}
|
|
286
|
-
};
|
|
287
|
-
|
|
288
|
-
var createSamplingIconPoint = function createSamplingIconPoint(markerLocation, secondaryIcon) {
|
|
289
|
-
// iconSize: [width, height],
|
|
290
|
-
// Icon Anchor: [(-right)(+left), (-down)(+up)]
|
|
291
|
-
var samplingIcon = [L.icon({
|
|
292
|
-
iconUrl: _blueCircle.default,
|
|
293
|
-
iconSize: secondaryIcon ? [10, 10] : [25, 24],
|
|
294
|
-
iconAnchor: secondaryIcon ? [-7, 15] : [10.7, 33.7],
|
|
295
|
-
popupAnchor: [0, -30]
|
|
296
|
-
}), L.icon({
|
|
297
|
-
iconUrl: _samplingIcon.default,
|
|
298
|
-
iconSize: secondaryIcon ? [7, 7] : [13, 15],
|
|
299
|
-
iconAnchor: secondaryIcon ? [-8, 13] : [5, 30],
|
|
300
|
-
popupAnchor: [0, -30]
|
|
301
|
-
})];
|
|
302
|
-
|
|
303
|
-
if (markerBelongsToSelectedSource() && !secondaryIcon) {
|
|
304
|
-
samplingIcon.unshift(selectedBackground());
|
|
305
|
-
} else if (markerBelongsToSource() && !secondaryIcon) {
|
|
306
|
-
samplingIcon.unshift(belongsToSourceBackground());
|
|
307
|
-
} else {
|
|
308
|
-
samplingIcon.unshift(standardBackground(secondaryIcon, true));
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
samplingIcon.forEach(function (icon) {
|
|
312
|
-
var pointCustomIcon = L.marker(markerLocation, {
|
|
313
|
-
icon: icon,
|
|
314
|
-
riseOnHover: false
|
|
315
|
-
}).addTo(map);
|
|
316
|
-
pointCustomIcon.bindTooltip("".concat(point.group.name, " (").concat(point.id, ")"));
|
|
317
|
-
pointCustomIcon['kando_object_id'] = point.id;
|
|
318
|
-
pointCustomIcon['kando_object'] = 'Sampling';
|
|
319
|
-
});
|
|
320
|
-
};
|
|
321
|
-
|
|
322
|
-
var createObservationIconPoint = function createObservationIconPoint(markerLocation, secondaryIcon) {
|
|
323
|
-
// iconSize: [width, height],
|
|
324
|
-
// Icon Anchor: [(-right)(+left), (-down)(+up)]
|
|
325
|
-
var observationIcon = [L.icon({
|
|
326
|
-
iconUrl: _pinkCircle.default,
|
|
327
|
-
iconSize: secondaryIcon ? [10, 10] : [25, 24],
|
|
328
|
-
iconAnchor: secondaryIcon ? [-7, 40] : [10.7, 33.7],
|
|
329
|
-
popupAnchor: [0, -30]
|
|
330
|
-
}), L.icon({
|
|
331
|
-
iconUrl: _observationIcon.default,
|
|
332
|
-
iconSize: secondaryIcon ? [7, 7] : [13, 15],
|
|
333
|
-
iconAnchor: secondaryIcon ? [-8, 38] : [5, 30],
|
|
334
|
-
popupAnchor: [0, -30]
|
|
335
|
-
})];
|
|
336
|
-
|
|
337
|
-
if (markerBelongsToSelectedSource() && !secondaryIcon) {
|
|
338
|
-
observationIcon.unshift(selectedBackground());
|
|
339
|
-
} else if (markerBelongsToSource() && !secondaryIcon) {
|
|
340
|
-
observationIcon.unshift(belongsToSourceBackground());
|
|
341
|
-
} else {
|
|
342
|
-
observationIcon.unshift(standardBackground(secondaryIcon));
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
observationIcon.forEach(function (icon) {
|
|
346
|
-
var pointCustomIcon = L.marker(markerLocation, {
|
|
347
|
-
icon: icon,
|
|
348
|
-
riseOnHover: false
|
|
349
|
-
}).addTo(map);
|
|
350
|
-
pointCustomIcon.bindTooltip("".concat(point.group.name, " (").concat(point.id, ")"));
|
|
351
|
-
pointCustomIcon['kando_object_id'] = point.id;
|
|
352
|
-
pointCustomIcon['kando_object'] = 'Observation';
|
|
353
|
-
});
|
|
354
|
-
};
|
|
355
|
-
|
|
356
|
-
var popupContent = function popupContent(obs) {
|
|
357
|
-
if (obs === null) {
|
|
358
|
-
return "\n <div class=\"event-popup\">\n <div class=\"popup-graph-icon popup-graph-icon-".concat(point.id, "\">\n <img src=\"").concat(_lineChart.default, "\"/>\n </div>\n <div class=\"popup-content\">\n <h5 class=\"popup-content__site-name\"><b>").concat(point.group.name, "</b></h5>\n <hr/>\n \n <div id=\"sector\"></div>\n </div>\n </div>\n ");
|
|
359
|
-
} else {
|
|
360
|
-
return "\n <div class=\"event-popup\">\n <div class=\"popup-graph-icon popup-graph-icon-".concat(obs.id, "\">\n <img src=\"").concat(_lineChart.default, "\"/>\n </div>\n <div class=\"popup-content\">\n <h5 class=\"popup-content__site-name\"><b>").concat(point.group.name, "</b></h5>\n <div class=\"popup-content__severity\">\n <p class=\"popup-content__severity-p\">").concat(_i18n.default.t("events_overview.severity"), "</p>\n <span class=\"").concat('popup-content__severity--' + obs.severity, "\">\n <b class=\"popup-content__severity-b\">\n ").concat(_i18n.default.t("events_overview.severities.".concat(obs.severity)), "\n </b>\n </span>\n </div>\n \n <hr class=\"popup-content__hr\" />\n\n <div class=\"popup-content__discharge-time\">\n <div>\n <p class=\"popup-content__severity-p\">").concat(_i18n.default.t("events_overview.first_seen"), ":</p>\n <span><b id=\"first-seen-popup\"></b></span>\n </div>\n <div>\n <p class=\"popup-content__severity-p\">").concat(_i18n.default.t("events_overview.last_seen"), ":</p>\n <span><b id=\"last-seen-popup\"></b></span>\n </div> \n </div>\n </div>\n </div>\n ");
|
|
361
|
-
}
|
|
362
|
-
};
|
|
363
|
-
|
|
32
|
+
rerender = props.rerender;
|
|
364
33
|
(0, _useRemoveExistingLayers.default)(map, point, 'Point');
|
|
365
34
|
(0, _useRemoveExistingLayers.default)(map, point, 'Observation');
|
|
366
35
|
(0, _useRemoveExistingLayers.default)(map, point, 'Sampling');
|
|
367
36
|
(0, _useRemoveExistingLayers.default)(map, point, 'IconNumber');
|
|
368
37
|
|
|
369
|
-
var pointIsObservation = function pointIsObservation() {
|
|
370
|
-
return centeredEvent !== null && centeredEvent.observations.filter(function (obs) {
|
|
371
|
-
return obs.point_id === point.id;
|
|
372
|
-
})[0];
|
|
373
|
-
};
|
|
374
|
-
|
|
375
|
-
var pointBelongsToEvent = function pointBelongsToEvent() {
|
|
376
|
-
return true;
|
|
377
|
-
};
|
|
378
|
-
|
|
379
|
-
var bindPopupToPoint = function bindPopupToPoint() {
|
|
380
|
-
var obs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
|
|
381
|
-
var layers = map._layers;
|
|
382
|
-
|
|
383
|
-
var _loop = function _loop(property) {
|
|
384
|
-
if (['Point', 'Observation'].includes(layers[property].kando_object) && layers[property].kando_object_id === point.id) {
|
|
385
|
-
layers[property].bindPopup(popupContent(obs), {
|
|
386
|
-
minWidth: 200
|
|
387
|
-
});
|
|
388
|
-
layers[property].on('popupopen', function (e) {
|
|
389
|
-
if (focusedEvent !== null) {
|
|
390
|
-
var firstSeen = document.createElement('div');
|
|
391
|
-
var lastSeen = document.createElement('div');
|
|
392
|
-
var sector = document.createElement('div');
|
|
393
|
-
|
|
394
|
-
if (obs !== null) {
|
|
395
|
-
_reactDom.default.render( /*#__PURE__*/_react.default.createElement(_TimeFormat.default, {
|
|
396
|
-
timestamp: obs.start_time,
|
|
397
|
-
time_zone: obs.time_zone
|
|
398
|
-
}), firstSeen);
|
|
399
|
-
|
|
400
|
-
_reactDom.default.render( /*#__PURE__*/_react.default.createElement(_TimeFormat.default, {
|
|
401
|
-
timestamp: obs.last_seen_time,
|
|
402
|
-
time_zone: obs.time_zone
|
|
403
|
-
}), lastSeen);
|
|
404
|
-
} else {
|
|
405
|
-
_reactDom.default.render( /*#__PURE__*/_react.default.createElement(_Sector.default, {
|
|
406
|
-
sectorName: point.group.sector_name,
|
|
407
|
-
sectorIconName: point.group.sector_icon_name,
|
|
408
|
-
width: "37"
|
|
409
|
-
}), sector);
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
setTimeout(function () {
|
|
413
|
-
(0, _jquery.default)('#first-seen-popup').append(firstSeen);
|
|
414
|
-
(0, _jquery.default)('#last-seen-popup').append(lastSeen);
|
|
415
|
-
(0, _jquery.default)('#sector').append(sector);
|
|
416
|
-
}, 200);
|
|
417
|
-
}
|
|
418
|
-
|
|
419
|
-
var attachClickEvent = function attachClickEvent(selector, observation) {
|
|
420
|
-
(0, _jquery.default)(document.body).on('click', selector, function () {
|
|
421
|
-
dispatch((0, _actions.closeFloatingGraph)());
|
|
422
|
-
dispatch((0, _actions.openFloatingGraph)(true, observation, point));
|
|
423
|
-
});
|
|
424
|
-
};
|
|
425
|
-
|
|
426
|
-
if (obs !== null) {
|
|
427
|
-
attachClickEvent('.popup-graph-icon-' + obs.id, obs);
|
|
428
|
-
} else {
|
|
429
|
-
attachClickEvent('.popup-graph-icon-' + point.id, null);
|
|
430
|
-
}
|
|
431
|
-
});
|
|
432
|
-
layers[property].on('click', function () {
|
|
433
|
-
layers[property].openPopup();
|
|
434
|
-
});
|
|
435
|
-
}
|
|
436
|
-
};
|
|
437
|
-
|
|
438
|
-
for (var property in layers) {
|
|
439
|
-
_loop(property);
|
|
440
|
-
}
|
|
441
|
-
};
|
|
442
|
-
|
|
443
|
-
var customIconForPointsIfPartOfPathAndMonitored = function customIconForPointsIfPartOfPathAndMonitored(markerLocation) {
|
|
444
|
-
if (centeredEvent) {
|
|
445
|
-
var edgesIds = [];
|
|
446
|
-
centeredEvent.path.forEach(function (part) {
|
|
447
|
-
edgesIds.push(part.edge_id);
|
|
448
|
-
});
|
|
449
|
-
var relevantEdges = edges_data.items.filter(function (edge) {
|
|
450
|
-
return edgesIds.includes(edge.id);
|
|
451
|
-
});
|
|
452
|
-
var relevantPoints = [];
|
|
453
|
-
relevantEdges.forEach(function (edge) {
|
|
454
|
-
relevantPoints.push(edge.source_point_id);
|
|
455
|
-
});
|
|
456
|
-
|
|
457
|
-
if (relevantPoints.includes(point.id)) {
|
|
458
|
-
createManholePoint(markerLocation);
|
|
459
|
-
createCustomIconPoint(markerLocation);
|
|
460
|
-
}
|
|
461
|
-
}
|
|
462
|
-
};
|
|
463
|
-
|
|
464
|
-
var createSamplingIcons = function createSamplingIcons(markerLocation) {
|
|
465
|
-
if (focusedEvent !== null) {
|
|
466
|
-
var sampledPointIds = focusedEvent.samplings.map(function (s) {
|
|
467
|
-
return s.point_id;
|
|
468
|
-
});
|
|
469
|
-
|
|
470
|
-
if (focusedEvent !== null && focusedEvent.samplings.length !== 0 && sampledPointIds.includes(point.id)) {
|
|
471
|
-
createSamplingIconPoint(markerLocation, matchIconToPoint(point) !== null);
|
|
472
|
-
}
|
|
473
|
-
}
|
|
474
|
-
};
|
|
475
|
-
|
|
476
38
|
var renderLogic = function renderLogic() {
|
|
477
39
|
var markerLocation = [point['latitude'], point['longitude']];
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
if (markerLocation[0] !== null) {
|
|
482
|
-
createSamplingIcons(markerLocation);
|
|
483
|
-
if (point.part_of_monitored_path && !point.has_device) return;
|
|
484
|
-
|
|
485
|
-
if (matchIconToPoint(point) !== null && (centeredEvent === null || centeredEvent !== null && pointIsObservation() || point.group.type === 'Groups::WastewaterTreatmentPlant')) {
|
|
486
|
-
if (point.eventsViewHovered) createManholePoint(markerLocation);
|
|
487
|
-
createCustomIconPoint(markerLocation);
|
|
488
|
-
}
|
|
489
|
-
|
|
490
|
-
if (focusedEvent !== null) {
|
|
491
|
-
var hasPrimaryIcon = matchIconToPoint(point) !== null;
|
|
492
|
-
|
|
493
|
-
if (pointIsObservation()) {
|
|
494
|
-
createObservationIconPoint(markerLocation, hasPrimaryIcon);
|
|
495
|
-
}
|
|
496
|
-
}
|
|
497
|
-
|
|
498
|
-
if (centeredEvent !== null && pointBelongsToEvent()) {
|
|
499
|
-
var obs = centeredEvent.observations.filter(function (obs) {
|
|
500
|
-
return obs.point_id === point.id;
|
|
501
|
-
})[0];
|
|
502
|
-
bindPopupToPoint(obs);
|
|
503
|
-
}
|
|
504
|
-
}
|
|
40
|
+
if (markerLocation[0] === null) return;
|
|
41
|
+
(0, _PointUtils.createManholePoint)(markerLocation, point, map);
|
|
42
|
+
(0, _PointUtils.createBubblePoint)(markerLocation, point, map);
|
|
505
43
|
};
|
|
506
44
|
|
|
507
45
|
(0, _react.useEffect)(function () {
|
|
@@ -513,7 +51,7 @@ var PointMarker = function PointMarker(props) {
|
|
|
513
51
|
(0, _useRemoveExistingLayers.removeFromMap)(map, point, 'Sampling');
|
|
514
52
|
(0, _useRemoveExistingLayers.removeFromMap)(map, point, 'IconNumber');
|
|
515
53
|
};
|
|
516
|
-
}, [
|
|
54
|
+
}, [rerender]);
|
|
517
55
|
return /*#__PURE__*/_react.default.createElement("div", null);
|
|
518
56
|
};
|
|
519
57
|
|
|
@@ -528,4 +66,4 @@ var _default = connector( /*#__PURE__*/_react.default.memo(PointMarker, function
|
|
|
528
66
|
}));
|
|
529
67
|
|
|
530
68
|
exports.default = _default;
|
|
531
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9XaWRnZXRzL01hcC9wb2ludHMvUG9pbnRNYXJrZXIudHN4Il0sIm5hbWVzIjpbIm1hcFN0YXRlVG9Qcm9wcyIsInN0YXRlIiwiZXZlbnRzX2RhdGEiLCJlZGdlc19kYXRhIiwiUG9pbnRNYXJrZXIiLCJwcm9wcyIsIkwiLCJtYXAiLCJwb2ludCIsImZvY3VzZWRFdmVudCIsImhvdmVyZWRFdmVudCIsImRpc3BhdGNoIiwiY2VudGVyZWRFdmVudCIsInNlbGVjdGVkQmFja2dyb3VuZCIsImljb24iLCJpY29uVXJsIiwicmVkUGluUmVkU2hhZG93IiwiaWNvblNpemUiLCJpY29uQW5jaG9yIiwicG9wdXBBbmNob3IiLCJiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kIiwid2hpdGVQaW5SZWRTaGFkb3ciLCJzdGFuZGFyZEJhY2tncm91bmQiLCJzZWNvbmRhcnkiLCJ0aGlyZCIsIndoaXRlUGluQmxhY2tTaGFkb3ciLCJjb21iaW5lZEZhY3RvcnlJY29uIiwieWVsbG93Q2lyY2xlVVJMIiwicGxhbnRJY29uVVJMIiwiY29tYmluZWRQdW1wU3RhdGlvbkljb24iLCJncmVlbkNpcmNsZVVSTCIsInB1bXBTdGF0aW9uSWNvblVSTCIsImNvbWJpbmVkQ29sbGVjdG9yc0ljb24iLCJjb2xsZWN0b3JJY29uIiwiY29tYmluZWRXV1RQSWNvbiIsImJyaWdodEJsdWVDaXJjbGVVUkwiLCJXV1RQSWNvblVSTCIsIm1hcmtlckJlbG9uZ3NUb1NlbGVjdGVkU291cmNlIiwic291cmNlIiwic291cmNlcyIsImZpbHRlciIsInBvaW50X2lkIiwiaWQiLCJzZWxlY3RlZF9zb3VyY2UiLCJtYXJrZXJCZWxvbmdzVG9Tb3VyY2UiLCJpc0NvbGxlY3RvckZvY3VzZWQiLCJvYnNlcnZhdGlvbnMiLCJsZW5ndGgiLCJtYXRjaEljb25Ub1BvaW50IiwiZ3JvdXAiLCJ0eXBlIiwidW5zaGlmdCIsIndhdGVySWNvbk5vQmFja2dyb3VuZCIsImNyZWF0ZU1hbmhvbGVQb2ludCIsIm1hcmtlckxvY2F0aW9uIiwicG9pbnRJY29uIiwid2hpdGVQb2ludCIsIm1hbmhvbGVJY29uIiwibWFya2VyIiwicmlzZU9uSG92ZXIiLCJhZGRUbyIsImJpbmRUb29sdGlwIiwibmFtZSIsImNyZWF0ZUN1c3RvbUljb25Qb2ludCIsImZvckVhY2giLCJwb2ludEN1c3RvbUljb24iLCJyZWxhdGVkRXZlbnRzQW1vdW50IiwiZGl2SWNvbiIsImNsYXNzTmFtZSIsImh0bWwiLCJjcmVhdGVTYW1wbGluZ0ljb25Qb2ludCIsInNlY29uZGFyeUljb24iLCJzYW1wbGluZ0ljb24iLCJibHVlQ2lyY2xlVVJMIiwic2FtcGxpbmdJY29uVVJMIiwiY3JlYXRlT2JzZXJ2YXRpb25JY29uUG9pbnQiLCJvYnNlcnZhdGlvbkljb24iLCJwaW5rQ2lyY2xlVVJMIiwib2JzZXJ2YXRpb25JY29uVVJMIiwicG9wdXBDb250ZW50Iiwib2JzIiwiR3JhcGhJY29uIiwiaTE4biIsInQiLCJzZXZlcml0eSIsInBvaW50SXNPYnNlcnZhdGlvbiIsInBvaW50QmVsb25nc1RvRXZlbnQiLCJiaW5kUG9wdXBUb1BvaW50IiwibGF5ZXJzIiwiX2xheWVycyIsInByb3BlcnR5IiwiaW5jbHVkZXMiLCJrYW5kb19vYmplY3QiLCJrYW5kb19vYmplY3RfaWQiLCJiaW5kUG9wdXAiLCJtaW5XaWR0aCIsIm9uIiwiZSIsImZpcnN0U2VlbiIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImxhc3RTZWVuIiwic2VjdG9yIiwiUmVhY3RET00iLCJyZW5kZXIiLCJzdGFydF90aW1lIiwidGltZV96b25lIiwibGFzdF9zZWVuX3RpbWUiLCJzZWN0b3JfbmFtZSIsInNlY3Rvcl9pY29uX25hbWUiLCJzZXRUaW1lb3V0IiwiYXBwZW5kIiwiYXR0YWNoQ2xpY2tFdmVudCIsInNlbGVjdG9yIiwib2JzZXJ2YXRpb24iLCJib2R5Iiwib3BlblBvcHVwIiwiY3VzdG9tSWNvbkZvclBvaW50c0lmUGFydE9mUGF0aEFuZE1vbml0b3JlZCIsImVkZ2VzSWRzIiwicGF0aCIsInBhcnQiLCJwdXNoIiwiZWRnZV9pZCIsInJlbGV2YW50RWRnZXMiLCJpdGVtcyIsImVkZ2UiLCJyZWxldmFudFBvaW50cyIsInNvdXJjZV9wb2ludF9pZCIsImNyZWF0ZVNhbXBsaW5nSWNvbnMiLCJzYW1wbGVkUG9pbnRJZHMiLCJzYW1wbGluZ3MiLCJzIiwicmVuZGVyTG9naWMiLCJldmVudHNWaWV3SG92ZXJlZCIsInBhcnRfb2ZfbW9uaXRvcmVkX3BhdGgiLCJoYXNfZGV2aWNlIiwiaGFzUHJpbWFyeUljb24iLCJjbGVhbnVwIiwiY29ubmVjdG9yIiwiUmVhY3QiLCJtZW1vIiwicHJldlByb3BzIiwibmV4dFByb3BzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBV0E7Ozs7QUFFQTs7QUFDQTs7Ozs7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBSUE7O0FBS0E7O0FBQ0E7Ozs7OztBQUVBLFNBQVNBLGVBQVQsQ0FBeUJDLEtBQXpCLEVBQTJDO0FBQ3pDLE1BQVFDLFdBQVIsR0FBb0NELEtBQXBDLENBQVFDLFdBQVI7QUFBQSxNQUFxQkMsVUFBckIsR0FBb0NGLEtBQXBDLENBQXFCRSxVQUFyQjtBQUVBLFNBQU87QUFDTEQsSUFBQUEsV0FBVyxFQUFYQSxXQURLO0FBRUxDLElBQUFBLFVBQVUsRUFBVkE7QUFGSyxHQUFQO0FBSUQ7O0FBUUQsSUFBTUMsV0FBNEIsR0FBRyxTQUEvQkEsV0FBK0IsQ0FBQ0MsS0FBRCxFQUFXO0FBQzlDLE1BQVFDLENBQVIsR0FBbURELEtBQW5ELENBQVFDLENBQVI7QUFBQSxNQUFXQyxHQUFYLEdBQW1ERixLQUFuRCxDQUFXRSxHQUFYO0FBQUEsTUFBZ0JDLEtBQWhCLEdBQW1ESCxLQUFuRCxDQUFnQkcsS0FBaEI7QUFBQSxNQUF1Qk4sV0FBdkIsR0FBbURHLEtBQW5ELENBQXVCSCxXQUF2QjtBQUFBLE1BQW9DQyxVQUFwQyxHQUFtREUsS0FBbkQsQ0FB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QSxXQUFXO0FBRVgsV0FBTyxTQUFTSyxPQUFULEdBQW1CO0FBQ3hCO0FBQ0Esa0RBQWNsSSxHQUFkLEVBQW1CQyxLQUFuQixFQUEwQixhQUExQjtBQUNBLGtEQUFjRCxHQUFkLEVBQW1CQyxLQUFuQixFQUEwQixPQUExQjtBQUNBLGtEQUFjRCxHQUFkLEVBQW1CQyxLQUFuQixFQUEwQixVQUExQjtBQUNBLGtEQUFjRCxHQUFkLEVBQW1CQyxLQUFuQixFQUEwQixZQUExQjtBQUNELEtBTkQ7QUFPRCxHQVZELEVBVUcsQ0FBQ0ksYUFBRCxDQVZIO0FBWUEsc0JBQU8seUNBQVA7QUFDRCxDQTVpQkQ7O0FBOGlCQSxJQUFNOEgsU0FBUyxHQUFHLHlCQUFRMUksZUFBUixDQUFsQjs7ZUFDZTBJLFNBQVMsZUFDdEJDLGVBQU1DLElBQU4sQ0FBV3hJLFdBQVgsRUFBd0IsVUFBQ3lJLFNBQUQsRUFBWUMsU0FBWixFQUEwQjtBQUNoRCxNQUNFRCxTQUFTLENBQUMzSSxXQUFWLENBQXNCTyxZQUF0QixLQUF1Q3FJLFNBQVMsQ0FBQzVJLFdBQVYsQ0FBc0JPLFlBRC9ELEVBRUU7QUFDQSxXQUFPLEtBQVA7QUFDRDs7QUFFRCxTQUFPLElBQVA7QUFDRCxDQVJELENBRHNCLEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IHsgY29ubmVjdCwgQ29ubmVjdGVkUHJvcHMsIHVzZURpc3BhdGNoIH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IEdyYXBoSWNvbiBmcm9tICdzcmMvYXNzZXRzL2xpbmUtY2hhcnQuc3ZnJztcbmltcG9ydCBjb2xsZWN0b3JJY29uIGZyb20gJ3NyYy9hc3NldHMvbWFwL3Bpbi13YXRlci5zdmcnO1xuaW1wb3J0IHdhdGVySWNvbk5vQmFja2dyb3VuZCBmcm9tICdzcmMvYXNzZXRzL3BvaW50X2ljb25zL3dhdGVyLW5vLWJhY2tncm91bmQuc3ZnJztcbmltcG9ydCBibHVlQ2lyY2xlVVJMIGZyb20gJ3NyYy9hc3NldHMvcG9pbnRfaWNvbnMvYmx1ZS1jaXJjbGUuc3ZnJztcbmltcG9ydCBicmlnaHRCbHVlQ2lyY2xlVVJMIGZyb20gJ3NyYy9hc3NldHMvcG9pbnRfaWNvbnMvYnJpZ2h0LWJsdWUtY2lyY2xlLnN2Zyc7XG5pbXBvcnQgcGxhbnRJY29uVVJMIGZyb20gJ3NyYy9hc3NldHMvcG9pbnRfaWNvbnMvZmFjdG9yeS1pY29uLnN2Zyc7XG5pbXBvcnQgZ3JlZW5DaXJjbGVVUkwgZnJvbSAnc3JjL2Fzc2V0cy9wb2ludF9pY29ucy9ncmVlbi1jaXJjbGUuc3ZnJztcbmltcG9ydCBvYnNlcnZhdGlvbkljb25VUkwgZnJvbSAnc3JjL2Fzc2V0cy9wb2ludF9pY29ucy9vYnNlcnZhdGlvbi1pY29uLnN2Zyc7XG5pbXBvcnQgcGlua0NpcmNsZVVSTCBmcm9tICdzcmMvYXNzZXRzL3BvaW50X2ljb25zL3BpbmstY2lyY2xlLnN2Zyc7XG5pbXBvcnQgcHVtcFN0YXRpb25JY29uVVJMIGZyb20gJ3NyYy9hc3NldHMvcG9pbnRfaWNvbnMvcHVtcC1zdGF0aW9uLWljb24uc3ZnJztcbmltcG9ydCByZWRQaW5SZWRTaGFkb3cgZnJvbSAnc3JjL2Fzc2V0cy9wb2ludF9pY29ucy9yZWQtcGluLXJlZC1zaGFkb3cucG5nJztcbmltcG9ydCBzYW1wbGluZ0ljb25VUkwgZnJvbSAnc3JjL2Fzc2V0cy9wb2ludF9pY29ucy9zYW1wbGluZy1pY29uLnN2Zyc7XG5pbXBvcnQgd2hpdGVQaW5CbGFja1NoYWRvdyBmcm9tICdzcmMvYXNzZXRzL3BvaW50X2ljb25zL3doaXRlLXBpbi1ibGFjay1zaGFkb3cucG5nJztcbmltcG9ydCB3aGl0ZVBpblJlZFNoYWRvdyBmcm9tICdzcmMvYXNzZXRzL3BvaW50X2ljb25zL3doaXRlLXBpbi1yZWQtc2hhZG93LnBuZyc7XG5pbXBvcnQgV1dUUEljb25VUkwgZnJvbSAnc3JjL2Fzc2V0cy9wb2ludF9pY29ucy9XV1RQLWljb24uc3ZnJztcbmltcG9ydCB5ZWxsb3dDaXJjbGVVUkwgZnJvbSAnc3JjL2Fzc2V0cy9wb2ludF9pY29ucy95ZWxsb3ctY2lyY2xlLnN2Zyc7XG5pbXBvcnQgd2hpdGVQb2ludCBmcm9tICdzcmMvYXNzZXRzL3doaXRlLXBvaW50LnBuZyc7XG5pbXBvcnQgU2VjdG9yIGZyb20gJ3NyYy9jb21wb25lbnRzL1NlY3Rvcic7XG5pbXBvcnQgdXNlUmVtb3ZlRXhpc3RpbmdMYXllcnMsIHtcbiAgcmVtb3ZlRnJvbU1hcCxcbn0gZnJvbSAnc3JjL2hvb2tzL3VzZVJlbW92ZUV4aXN0aW5nTGF5ZXJzJztcbmltcG9ydCB7IElBcHBTdGF0ZSB9IGZyb20gJ3NyYy9tb2RlbHMvSUFwcFN0YXRlJztcbmltcG9ydCB7XG4gIGNsb3NlRmxvYXRpbmdHcmFwaCxcbiAgb3BlbkZsb2F0aW5nR3JhcGgsXG59IGZyb20gJ3NyYy9zdG9yZS9nbG9iYWwvYWN0aW9ucyc7XG5pbXBvcnQgeyBJUG9pbnQgfSBmcm9tICdzcmMvc3RvcmUvcG9pbnRzL21vZGVscy9JUG9pbnQnO1xuaW1wb3J0IGkxOG4gZnJvbSAnc3JjL3V0aWxpdGllcy9pMThuJztcbmltcG9ydCBUaW1lRm9ybWF0IGZyb20gJ3NyYy91dGlsaXRpZXMvVGltZUZvcm1hdCc7XG5cbmZ1bmN0aW9uIG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZTogSUFwcFN0YXRlKSB7XG4gIGNvbnN0IHsgZXZlbnRzX2RhdGEsIGVkZ2VzX2RhdGEgfSA9IHN0YXRlO1xuXG4gIHJldHVybiB7XG4gICAgZXZlbnRzX2RhdGEsXG4gICAgZWRnZXNfZGF0YSxcbiAgfTtcbn1cblxudHlwZSBQcm9wcyA9IENvbm5lY3RlZFByb3BzPHR5cGVvZiBjb25uZWN0b3I+ICYge1xuICBtYXA6IGFueTtcbiAgTDogYW55O1xuICBwb2ludDogSVBvaW50O1xufTtcblxuY29uc3QgUG9pbnRNYXJrZXI6IFJlYWN0LkZDPFByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IEwsIG1hcCwgcG9pbnQsIGV2ZW50c19kYXRhLCBlZGdlc19kYXRhIH0gPSBwcm9wcztcbiAgY29uc3QgeyBmb2N1c2VkRXZlbnQsIGhvdmVyZWRFdmVudCB9ID0gZXZlbnRzX2RhdGE7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcblxuICBjb25zdCBjZW50ZXJlZEV2ZW50ID0gdXNlTWVtbyhcbiAgICAoKSA9PiBmb2N1c2VkRXZlbnQgfHwgaG92ZXJlZEV2ZW50LFxuICAgIFtmb2N1c2VkRXZlbnQsIGhvdmVyZWRFdmVudF0sXG4gICk7XG4gIC8vIGljb25TaXplOiBbd2lkdGgsIGhlaWdodF0sXG4gIC8vIEljb24gQW5jaG9yOiBbKC1yaWdodCkoK2xlZnQpLCAoLWRvd24pKCt1cCldXG4gIGNvbnN0IHNlbGVjdGVkQmFja2dyb3VuZCA9ICgpID0+IHtcbiAgICByZXR1cm4gTC5pY29uKHtcbiAgICAgIGljb25Vcmw6IHJlZFBpblJlZFNoYWRvdyxcbiAgICAgIGljb25TaXplOiBbNjcsIDcwXSxcbiAgICAgIGljb25BbmNob3I6IFszMiwgNTRdLFxuICAgICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IGJlbG9uZ3NUb1NvdXJjZUJhY2tncm91bmQgPSAoKSA9PiB7XG4gICAgcmV0dXJuIEwuaWNvbih7XG4gICAgICBpY29uVXJsOiB3aGl0ZVBpblJlZFNoYWRvdyxcbiAgICAgIGljb25TaXplOiBbNjcsIDcwXSxcbiAgICAgIGljb25BbmNob3I6IFszMiwgNTRdLFxuICAgICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IHN0YW5kYXJkQmFja2dyb3VuZCA9IChcbiAgICBzZWNvbmRhcnk6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICB0aGlyZDogYm9vbGVhbiA9IGZhbHNlLFxuICApID0+IHtcbiAgICByZXR1cm4gTC5pY29uKHtcbiAgICAgIGljb25Vcmw6IHdoaXRlUGluQmxhY2tTaGFkb3csXG4gICAgICBpY29uU2l6ZTogc2Vjb25kYXJ5ID8gWzIwLCAyMF0gOiBbNDMsIDQ2XSxcbiAgICAgIGljb25BbmNob3I6XG4gICAgICAgIHNlY29uZGFyeSAmJiB0aGlyZCA/IFstMiwgMTldIDogc2Vjb25kYXJ5ID8gWy0yLCA0NF0gOiBbMjAsIDQyXSxcbiAgICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCBjb21iaW5lZEZhY3RvcnlJY29uID0gW1xuICAgIEwuaWNvbih7XG4gICAgICBpY29uVXJsOiB5ZWxsb3dDaXJjbGVVUkwsXG4gICAgICBpY29uU2l6ZTogWzI1LCAyNF0sXG4gICAgICBpY29uQW5jaG9yOiBbMTAuNywgMzMuN10sXG4gICAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gICAgfSksXG4gICAgTC5pY29uKHtcbiAgICAgIGljb25Vcmw6IHBsYW50SWNvblVSTCxcbiAgICAgIGljb25TaXplOiBbMTUsIDE1XSxcbiAgICAgIGljb25BbmNob3I6IFs1LCAzMF0sXG4gICAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gICAgfSksXG4gIF07XG5cbiAgY29uc3QgY29tYmluZWRQdW1wU3RhdGlvbkljb24gPSBbXG4gICAgTC5pY29uKHtcbiAgICAgIGljb25Vcmw6IGdyZWVuQ2lyY2xlVVJMLFxuICAgICAgaWNvblNpemU6IFsyNSwgMjRdLFxuICAgICAgaWNvbkFuY2hvcjogWzEwLjcsIDMzLjddLFxuICAgICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICAgIH0pLFxuICAgIEwuaWNvbih7XG4gICAgICBpY29uVXJsOiBwdW1wU3RhdGlvbkljb25VUkwsXG4gICAgICBpY29uU2l6ZTogWzIwLCAyMF0sXG4gICAgICBpY29uQW5jaG9yOiBbNywgMzJdLFxuICAgICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICAgIH0pLFxuICBdO1xuXG4gIGNvbnN0IGNvbWJpbmVkQ29sbGVjdG9yc0ljb24gPSBbXG4gICAgTC5pY29uKHtcbiAgICAgIGljb25Vcmw6IGNvbGxlY3Rvckljb24sXG4gICAgICBpY29uU2l6ZTogWzQ1LCA0NV0sXG5cbiAgICAgIGljb25BbmNob3I6IFsyNSwgNTBdLFxuICAgICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICAgIH0pLFxuICBdO1xuXG4gIGNvbnN0IGNvbWJpbmVkV1dUUEljb24gPSBbXG4gICAgTC5pY29uKHtcbiAgICAgIGljb25Vcmw6IGJyaWdodEJsdWVDaXJjbGVVUkwsXG4gICAgICBpY29uU2l6ZTogWzI1LCAyNV0sXG4gICAgICBpY29uQW5jaG9yOiBbMTAuNywgMzMuN10sXG4gICAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gICAgfSksXG4gICAgTC5pY29uKHtcbiAgICAgIGljb25Vcmw6IFdXVFBJY29uVVJMLFxuICAgICAgaWNvblNpemU6IFsyMCwgMjBdLFxuICAgICAgaWNvbkFuY2hvcjogWzgsIDMxXSxcbiAgICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgICB9KSxcbiAgXTtcblxuICBjb25zdCBtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZSA9ICgpID0+IHtcbiAgICBsZXQgc291cmNlO1xuXG4gICAgaWYgKGNlbnRlcmVkRXZlbnQgIT09IG51bGwpIHtcbiAgICAgIHNvdXJjZSA9IGNlbnRlcmVkRXZlbnQuc291cmNlcy5maWx0ZXIoXG4gICAgICAgIChzb3VyY2UpID0+IHNvdXJjZS5wb2ludF9pZCA9PT0gcG9pbnQuaWQsXG4gICAgICApWzBdO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICBjZW50ZXJlZEV2ZW50ICE9PSBudWxsICYmXG4gICAgICBzb3VyY2UgJiZcbiAgICAgIGNlbnRlcmVkRXZlbnQuc2VsZWN0ZWRfc291cmNlID09PSBzb3VyY2UucG9pbnRfaWRcbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IG1hcmtlckJlbG9uZ3NUb1NvdXJjZSA9ICgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgY2VudGVyZWRFdmVudCAhPT0gbnVsbCAmJlxuICAgICAgY2VudGVyZWRFdmVudC5zb3VyY2VzLmZpbHRlcigoc291cmNlKSA9PiBzb3VyY2UucG9pbnRfaWQgPT09IHBvaW50LmlkKVswXVxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgaXNDb2xsZWN0b3JGb2N1c2VkID0gKHBvaW50OiBJUG9pbnQpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgY2VudGVyZWRFdmVudD8ub2JzZXJ2YXRpb25zPy5sZW5ndGggPT09IDEgJiZcbiAgICAgIHBvaW50LmlkID09PSBjZW50ZXJlZEV2ZW50Lm9ic2VydmF0aW9uc1swXS5wb2ludF9pZFxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgbWF0Y2hJY29uVG9Qb2ludCA9IChwb2ludDogSVBvaW50KSA9PiB7XG4gICAgc3dpdGNoIChwb2ludC5ncm91cC50eXBlKSB7XG4gICAgICBjYXNlICdHcm91cHM6OkZhY3RvcnknOlxuICAgICAgICBpZiAoY29tYmluZWRGYWN0b3J5SWNvbi5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICBpZiAobWFya2VyQmVsb25nc1RvU2VsZWN0ZWRTb3VyY2UoKSkge1xuICAgICAgICAgICAgY29tYmluZWRGYWN0b3J5SWNvbi51bnNoaWZ0KHNlbGVjdGVkQmFja2dyb3VuZCgpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG1hcmtlckJlbG9uZ3NUb1NvdXJjZSgpKSB7XG4gICAgICAgICAgICBjb21iaW5lZEZhY3RvcnlJY29uLnVuc2hpZnQoYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCgpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29tYmluZWRGYWN0b3J5SWNvbi51bnNoaWZ0KHN0YW5kYXJkQmFja2dyb3VuZCgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29tYmluZWRGYWN0b3J5SWNvbjtcbiAgICAgIGNhc2UgJ0dyb3Vwczo6UHVtcFN0YXRpb24nOlxuICAgICAgICBpZiAoY29tYmluZWRQdW1wU3RhdGlvbkljb24ubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgaWYgKG1hcmtlckJlbG9uZ3NUb1NlbGVjdGVkU291cmNlKCkpIHtcbiAgICAgICAgICAgIGNvbWJpbmVkUHVtcFN0YXRpb25JY29uLnVuc2hpZnQoc2VsZWN0ZWRCYWNrZ3JvdW5kKCkpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobWFya2VyQmVsb25nc1RvU291cmNlKCkpIHtcbiAgICAgICAgICAgIGNvbWJpbmVkUHVtcFN0YXRpb25JY29uLnVuc2hpZnQoYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCgpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29tYmluZWRQdW1wU3RhdGlvbkljb24udW5zaGlmdChzdGFuZGFyZEJhY2tncm91bmQoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbWJpbmVkUHVtcFN0YXRpb25JY29uO1xuICAgICAgY2FzZSAnR3JvdXBzOjpXYXN0ZXdhdGVyVHJlYXRtZW50UGxhbnQnOlxuICAgICAgICBpZiAoY29tYmluZWRXV1RQSWNvbi5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICBpZiAobWFya2VyQmVsb25nc1RvU2VsZWN0ZWRTb3VyY2UoKSkge1xuICAgICAgICAgICAgY29tYmluZWRXV1RQSWNvbi51bnNoaWZ0KHNlbGVjdGVkQmFja2dyb3VuZCgpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG1hcmtlckJlbG9uZ3NUb1NvdXJjZSgpKSB7XG4gICAgICAgICAgICBjb21iaW5lZFdXVFBJY29uLnVuc2hpZnQoYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCgpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29tYmluZWRXV1RQSWNvbi51bnNoaWZ0KHN0YW5kYXJkQmFja2dyb3VuZCgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29tYmluZWRXV1RQSWNvbjtcblxuICAgICAgY2FzZSAnR3JvdXBzOjpDb2xsZWN0b3JzJzpcbiAgICAgICAgaWYgKGlzQ29sbGVjdG9yRm9jdXNlZChwb2ludCkpIHtcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgTC5pY29uKHtcbiAgICAgICAgICAgICAgaWNvblVybDogcmVkUGluUmVkU2hhZG93LFxuICAgICAgICAgICAgICBpY29uU2l6ZTogWzYyLCA2Ml0sXG4gICAgICAgICAgICAgIGljb25BbmNob3I6IFszMCwgNTJdLFxuICAgICAgICAgICAgfSksXG5cbiAgICAgICAgICAgIEwuaWNvbih7XG4gICAgICAgICAgICAgIGljb25Vcmw6IHdhdGVySWNvbk5vQmFja2dyb3VuZCxcbiAgICAgICAgICAgICAgaWNvblNpemU6IFs0NiwgNDZdLFxuXG4gICAgICAgICAgICAgIGljb25BbmNob3I6IFsyMiwgNDRdLFxuICAgICAgICAgICAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbWJpbmVkQ29sbGVjdG9yc0ljb247XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBjcmVhdGVNYW5ob2xlUG9pbnQgPSAobWFya2VyTG9jYXRpb246IG9iamVjdCkgPT4ge1xuICAgIGxldCBwb2ludEljb24gPSBMLmljb24oe1xuICAgICAgaWNvblVybDogd2hpdGVQb2ludCxcbiAgICAgIGljb25TaXplOiBbOSwgOV0sXG4gICAgICBpY29uQW5jaG9yOiBbNC41LCA0LjVdLFxuICAgIH0pO1xuICAgIGxldCBtYW5ob2xlSWNvbjogYW55ID0gTC5tYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICAgIGljb246IHBvaW50SWNvbixcbiAgICAgIHJpc2VPbkhvdmVyOiB0cnVlLFxuICAgIH0pLmFkZFRvKG1hcCk7XG4gICAgbWFuaG9sZUljb24uYmluZFRvb2x0aXAoYCR7cG9pbnQuZ3JvdXAubmFtZX0gKCR7cG9pbnQuaWR9KWApO1xuICAgIG1hbmhvbGVJY29uWydrYW5kb19vYmplY3RfaWQnXSA9IHBvaW50LmlkO1xuICAgIG1hbmhvbGVJY29uWydrYW5kb19vYmplY3QnXSA9ICdQb2ludCc7XG4gIH07XG5cbiAgY29uc3QgY3JlYXRlQ3VzdG9tSWNvblBvaW50ID0gKG1hcmtlckxvY2F0aW9uOiBvYmplY3QpID0+IHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgbWF0Y2hJY29uVG9Qb2ludChwb2ludCkgIT09IG51bGwgJiZcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG1hdGNoSWNvblRvUG9pbnQocG9pbnQpLmZvckVhY2goKGljb246IGFueSkgPT4ge1xuICAgICAgICBsZXQgcG9pbnRDdXN0b21JY29uOiBhbnkgPSBMLm1hcmtlcihtYXJrZXJMb2NhdGlvbiwge1xuICAgICAgICAgIGljb246IGljb24sXG4gICAgICAgICAgcmlzZU9uSG92ZXI6IGZhbHNlLFxuICAgICAgICB9KS5hZGRUbyhtYXApO1xuICAgICAgICBwb2ludEN1c3RvbUljb24uYmluZFRvb2x0aXAoYCR7cG9pbnQuZ3JvdXAubmFtZX0gKCR7cG9pbnQuaWR9KWApO1xuICAgICAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdF9pZCddID0gcG9pbnQuaWQ7XG4gICAgICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0J10gPSAnUG9pbnQnO1xuICAgICAgfSk7XG5cbiAgICBpZiAocG9pbnQucmVsYXRlZEV2ZW50c0Ftb3VudCkge1xuICAgICAgbGV0IHBvaW50Q3VzdG9tSWNvbiA9IEwubWFya2VyKG1hcmtlckxvY2F0aW9uLCB7XG4gICAgICAgIGljb246IEwuZGl2SWNvbih7XG4gICAgICAgICAgY2xhc3NOYW1lOiBgXG4gICAgICAgICAgJHtcbiAgICAgICAgICAgIHBvaW50LnJlbGF0ZWRFdmVudHNBbW91bnQgPj0gMTAwXG4gICAgICAgICAgICAgID8gJ2NpcmNsZS1ldmVudHMtYW1vdW50IGNpcmNsZS1ldmVudHMtYW1vdW50LS10cmlkaWdpdCdcbiAgICAgICAgICAgICAgOiAnY2lyY2xlLWV2ZW50cy1hbW91bnQnXG4gICAgICAgICAgfSBcbiAgICAgICAgICAke3BvaW50LnJlbGF0ZWRFdmVudHNBbW91bnQgPiAyID8gJ2FsZXJ0LWNvbG9yJyA6ICcnfVxuICAgICAgICAgICAgYCxcbiAgICAgICAgICBodG1sOiBgPHA+JHtwb2ludC5yZWxhdGVkRXZlbnRzQW1vdW50fTwvcD5gLFxuICAgICAgICAgIGljb25BbmNob3I6IFstNSwgNDJdLFxuICAgICAgICB9KSxcbiAgICAgICAgcmlzZU9uSG92ZXI6IGZhbHNlLFxuICAgICAgfSkuYWRkVG8obWFwKTtcblxuICAgICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3RfaWQnXSA9IHBvaW50LmlkO1xuICAgICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdJY29uTnVtYmVyJztcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgY3JlYXRlU2FtcGxpbmdJY29uUG9pbnQgPSAoXG4gICAgbWFya2VyTG9jYXRpb246IG9iamVjdCxcbiAgICBzZWNvbmRhcnlJY29uOiBib29sZWFuLFxuICApID0+IHtcbiAgICAvLyBpY29uU2l6ZTogW3dpZHRoLCBoZWlnaHRdLFxuICAgIC8vIEljb24gQW5jaG9yOiBbKC1yaWdodCkoK2xlZnQpLCAoLWRvd24pKCt1cCldXG4gICAgbGV0IHNhbXBsaW5nSWNvbiA9IFtcbiAgICAgIEwuaWNvbih7XG4gICAgICAgIGljb25Vcmw6IGJsdWVDaXJjbGVVUkwsXG4gICAgICAgIGljb25TaXplOiBzZWNvbmRhcnlJY29uID8gWzEwLCAxMF0gOiBbMjUsIDI0XSxcbiAgICAgICAgaWNvbkFuY2hvcjogc2Vjb25kYXJ5SWNvbiA/IFstNywgMTVdIDogWzEwLjcsIDMzLjddLFxuICAgICAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gICAgICB9KSxcbiAgICAgIEwuaWNvbih7XG4gICAgICAgIGljb25Vcmw6IHNhbXBsaW5nSWNvblVSTCxcbiAgICAgICAgaWNvblNpemU6IHNlY29uZGFyeUljb24gPyBbNywgN10gOiBbMTMsIDE1XSxcbiAgICAgICAgaWNvbkFuY2hvcjogc2Vjb25kYXJ5SWNvbiA/IFstOCwgMTNdIDogWzUsIDMwXSxcbiAgICAgICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICAgICAgfSksXG4gICAgXTtcblxuICAgIGlmIChtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZSgpICYmICFzZWNvbmRhcnlJY29uKSB7XG4gICAgICBzYW1wbGluZ0ljb24udW5zaGlmdChzZWxlY3RlZEJhY2tncm91bmQoKSk7XG4gICAgfSBlbHNlIGlmIChtYXJrZXJCZWxvbmdzVG9Tb3VyY2UoKSAmJiAhc2Vjb25kYXJ5SWNvbikge1xuICAgICAgc2FtcGxpbmdJY29uLnVuc2hpZnQoYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2FtcGxpbmdJY29uLnVuc2hpZnQoc3RhbmRhcmRCYWNrZ3JvdW5kKHNlY29uZGFyeUljb24sIHRydWUpKTtcbiAgICB9XG5cbiAgICBzYW1wbGluZ0ljb24uZm9yRWFjaCgoaWNvbikgPT4ge1xuICAgICAgbGV0IHBvaW50Q3VzdG9tSWNvbjogYW55ID0gTC5tYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICAgICAgaWNvbjogaWNvbixcbiAgICAgICAgcmlzZU9uSG92ZXI6IGZhbHNlLFxuICAgICAgfSkuYWRkVG8obWFwKTtcbiAgICAgIHBvaW50Q3VzdG9tSWNvbi5iaW5kVG9vbHRpcChgJHtwb2ludC5ncm91cC5uYW1lfSAoJHtwb2ludC5pZH0pYCk7XG4gICAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdF9pZCddID0gcG9pbnQuaWQ7XG4gICAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdCddID0gJ1NhbXBsaW5nJztcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCBjcmVhdGVPYnNlcnZhdGlvbkljb25Qb2ludCA9IChcbiAgICBtYXJrZXJMb2NhdGlvbjogb2JqZWN0LFxuICAgIHNlY29uZGFyeUljb246IGJvb2xlYW4sXG4gICkgPT4ge1xuICAgIC8vIGljb25TaXplOiBbd2lkdGgsIGhlaWdodF0sXG4gICAgLy8gSWNvbiBBbmNob3I6IFsoLXJpZ2h0KSgrbGVmdCksICgtZG93bikoK3VwKV1cbiAgICBsZXQgb2JzZXJ2YXRpb25JY29uID0gW1xuICAgICAgTC5pY29uKHtcbiAgICAgICAgaWNvblVybDogcGlua0NpcmNsZVVSTCxcbiAgICAgICAgaWNvblNpemU6IHNlY29uZGFyeUljb24gPyBbMTAsIDEwXSA6IFsyNSwgMjRdLFxuICAgICAgICBpY29uQW5jaG9yOiBzZWNvbmRhcnlJY29uID8gWy03LCA0MF0gOiBbMTAuNywgMzMuN10sXG4gICAgICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgICAgIH0pLFxuICAgICAgTC5pY29uKHtcbiAgICAgICAgaWNvblVybDogb2JzZXJ2YXRpb25JY29uVVJMLFxuICAgICAgICBpY29uU2l6ZTogc2Vjb25kYXJ5SWNvbiA/IFs3LCA3XSA6IFsxMywgMTVdLFxuICAgICAgICBpY29uQW5jaG9yOiBzZWNvbmRhcnlJY29uID8gWy04LCAzOF0gOiBbNSwgMzBdLFxuICAgICAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gICAgICB9KSxcbiAgICBdO1xuXG4gICAgaWYgKG1hcmtlckJlbG9uZ3NUb1NlbGVjdGVkU291cmNlKCkgJiYgIXNlY29uZGFyeUljb24pIHtcbiAgICAgIG9ic2VydmF0aW9uSWNvbi51bnNoaWZ0KHNlbGVjdGVkQmFja2dyb3VuZCgpKTtcbiAgICB9IGVsc2UgaWYgKG1hcmtlckJlbG9uZ3NUb1NvdXJjZSgpICYmICFzZWNvbmRhcnlJY29uKSB7XG4gICAgICBvYnNlcnZhdGlvbkljb24udW5zaGlmdChiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYnNlcnZhdGlvbkljb24udW5zaGlmdChzdGFuZGFyZEJhY2tncm91bmQoc2Vjb25kYXJ5SWNvbikpO1xuICAgIH1cblxuICAgIG9ic2VydmF0aW9uSWNvbi5mb3JFYWNoKChpY29uKSA9PiB7XG4gICAgICBsZXQgcG9pbnRDdXN0b21JY29uOiBhbnkgPSBMLm1hcmtlcihtYXJrZXJMb2NhdGlvbiwge1xuICAgICAgICBpY29uOiBpY29uLFxuICAgICAgICByaXNlT25Ib3ZlcjogZmFsc2UsXG4gICAgICB9KS5hZGRUbyhtYXApO1xuICAgICAgcG9pbnRDdXN0b21JY29uLmJpbmRUb29sdGlwKGAke3BvaW50Lmdyb3VwLm5hbWV9ICgke3BvaW50LmlkfSlgKTtcbiAgICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0X2lkJ10gPSBwb2ludC5pZDtcbiAgICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0J10gPSAnT2JzZXJ2YXRpb24nO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IHBvcHVwQ29udGVudCA9IChvYnM6IGFueSkgPT4ge1xuICAgIGlmIChvYnMgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXZlbnQtcG9wdXBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtZ3JhcGgtaWNvbiBwb3B1cC1ncmFwaC1pY29uLSR7cG9pbnQuaWR9XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiJHtHcmFwaEljb259XCIvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX3NpdGUtbmFtZVwiPjxiPiR7cG9pbnQuZ3JvdXAubmFtZX08L2I+PC9oNT5cbiAgICAgICAgICAgICAgICAgICAgPGhyLz5cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJzZWN0b3JcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudC1wb3B1cFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1ncmFwaC1pY29uIHBvcHVwLWdyYXBoLWljb24tJHtvYnMuaWR9XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiJHtHcmFwaEljb259XCIvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX3NpdGUtbmFtZVwiPjxiPiR7XG4gICAgICAgICAgICAgICAgICAgICAgcG9pbnQuZ3JvdXAubmFtZVxuICAgICAgICAgICAgICAgICAgICB9PC9iPjwvaDU+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zZXZlcml0eVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zZXZlcml0eS1wXCI+JHtpMThuLnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBldmVudHNfb3ZlcnZpZXcuc2V2ZXJpdHlgLFxuICAgICAgICAgICAgICAgICAgICAgICAgKX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIiR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICdwb3B1cC1jb250ZW50X19zZXZlcml0eS0tJyArIG9icy5zZXZlcml0eVxuICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiIGNsYXNzPVwicG9wdXAtY29udGVudF9fc2V2ZXJpdHktYlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2kxOG4udChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZXZlbnRzX292ZXJ2aWV3LnNldmVyaXRpZXMuJHtvYnMuc2V2ZXJpdHl9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPGhyIGNsYXNzPVwicG9wdXAtY29udGVudF9faHJcIiAvPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250ZW50X19kaXNjaGFyZ2UtdGltZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX3NldmVyaXR5LXBcIj4ke2kxOG4udChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBldmVudHNfb3ZlcnZpZXcuZmlyc3Rfc2VlbmAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX06PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxiIGlkPVwiZmlyc3Qtc2Vlbi1wb3B1cFwiPjwvYj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zZXZlcml0eS1wXCI+JHtpMThuLnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZXZlbnRzX292ZXJ2aWV3Lmxhc3Rfc2VlbmAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX06PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxiIGlkPVwibGFzdC1zZWVuLXBvcHVwXCI+PC9iPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBgO1xuICAgIH1cbiAgfTtcblxuICB1c2VSZW1vdmVFeGlzdGluZ0xheWVycyhtYXAsIHBvaW50LCAnUG9pbnQnKTtcbiAgdXNlUmVtb3ZlRXhpc3RpbmdMYXllcnMobWFwLCBwb2ludCwgJ09ic2VydmF0aW9uJyk7XG4gIHVzZVJlbW92ZUV4aXN0aW5nTGF5ZXJzKG1hcCwgcG9pbnQsICdTYW1wbGluZycpO1xuICB1c2VSZW1vdmVFeGlzdGluZ0xheWVycyhtYXAsIHBvaW50LCAnSWNvbk51bWJlcicpO1xuXG4gIGNvbnN0IHBvaW50SXNPYnNlcnZhdGlvbiA9ICgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgY2VudGVyZWRFdmVudCAhPT0gbnVsbCAmJlxuICAgICAgY2VudGVyZWRFdmVudC5vYnNlcnZhdGlvbnMuZmlsdGVyKChvYnMpID0+IG9icy5wb2ludF9pZCA9PT0gcG9pbnQuaWQpWzBdXG4gICAgKTtcbiAgfTtcblxuICBjb25zdCBwb2ludEJlbG9uZ3NUb0V2ZW50ID0gKCkgPT4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIGNvbnN0IGJpbmRQb3B1cFRvUG9pbnQgPSAob2JzOiBhbnkgPSBudWxsKSA9PiB7XG4gICAgbGV0IGxheWVycyA9IG1hcC5fbGF5ZXJzO1xuICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gbGF5ZXJzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIFsnUG9pbnQnLCAnT2JzZXJ2YXRpb24nXS5pbmNsdWRlcyhsYXllcnNbcHJvcGVydHldLmthbmRvX29iamVjdCkgJiZcbiAgICAgICAgbGF5ZXJzW3Byb3BlcnR5XS5rYW5kb19vYmplY3RfaWQgPT09IHBvaW50LmlkXG4gICAgICApIHtcbiAgICAgICAgbGF5ZXJzW3Byb3BlcnR5XS5iaW5kUG9wdXAocG9wdXBDb250ZW50KG9icyksIHtcbiAgICAgICAgICBtaW5XaWR0aDogMjAwLFxuICAgICAgICB9KTtcbiAgICAgICAgbGF5ZXJzW3Byb3BlcnR5XS5vbigncG9wdXBvcGVuJywgZnVuY3Rpb24gKGU6IGFueSkge1xuICAgICAgICAgIGlmIChmb2N1c2VkRXZlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxldCBmaXJzdFNlZW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGxldCBsYXN0U2VlbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgbGV0IHNlY3RvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gICAgICAgICAgICBpZiAob2JzICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIFJlYWN0RE9NLnJlbmRlcihcbiAgICAgICAgICAgICAgICA8VGltZUZvcm1hdFxuICAgICAgICAgICAgICAgICAgdGltZXN0YW1wPXtvYnMuc3RhcnRfdGltZX1cbiAgICAgICAgICAgICAgICAgIHRpbWVfem9uZT17b2JzLnRpbWVfem9uZX1cbiAgICAgICAgICAgICAgICAvPixcbiAgICAgICAgICAgICAgICBmaXJzdFNlZW4sXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIFJlYWN0RE9NLnJlbmRlcihcbiAgICAgICAgICAgICAgICA8VGltZUZvcm1hdFxuICAgICAgICAgICAgICAgICAgdGltZXN0YW1wPXtvYnMubGFzdF9zZWVuX3RpbWV9XG4gICAgICAgICAgICAgICAgICB0aW1lX3pvbmU9e29icy50aW1lX3pvbmV9XG4gICAgICAgICAgICAgICAgLz4sXG4gICAgICAgICAgICAgICAgbGFzdFNlZW4sXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBSZWFjdERPTS5yZW5kZXIoXG4gICAgICAgICAgICAgICAgPFNlY3RvclxuICAgICAgICAgICAgICAgICAgc2VjdG9yTmFtZT17cG9pbnQuZ3JvdXAuc2VjdG9yX25hbWV9XG4gICAgICAgICAgICAgICAgICBzZWN0b3JJY29uTmFtZT17cG9pbnQuZ3JvdXAuc2VjdG9yX2ljb25fbmFtZX1cbiAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMzdcIlxuICAgICAgICAgICAgICAgIC8+LFxuICAgICAgICAgICAgICAgIHNlY3RvcixcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICQoJyNmaXJzdC1zZWVuLXBvcHVwJykuYXBwZW5kKGZpcnN0U2Vlbik7XG4gICAgICAgICAgICAgICQoJyNsYXN0LXNlZW4tcG9wdXAnKS5hcHBlbmQobGFzdFNlZW4pO1xuICAgICAgICAgICAgICAkKCcjc2VjdG9yJykuYXBwZW5kKHNlY3Rvcik7XG4gICAgICAgICAgICB9LCAyMDApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCBhdHRhY2hDbGlja0V2ZW50ID0gKHNlbGVjdG9yOiBzdHJpbmcsIG9ic2VydmF0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgICQoZG9jdW1lbnQuYm9keSkub24oJ2NsaWNrJywgc2VsZWN0b3IsICgpID0+IHtcbiAgICAgICAgICAgICAgZGlzcGF0Y2goY2xvc2VGbG9hdGluZ0dyYXBoKCkpO1xuICAgICAgICAgICAgICBkaXNwYXRjaChvcGVuRmxvYXRpbmdHcmFwaCh0cnVlLCBvYnNlcnZhdGlvbiwgcG9pbnQpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAob2JzICE9PSBudWxsKSB7XG4gICAgICAgICAgICBhdHRhY2hDbGlja0V2ZW50KCcucG9wdXAtZ3JhcGgtaWNvbi0nICsgb2JzLmlkLCBvYnMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhdHRhY2hDbGlja0V2ZW50KCcucG9wdXAtZ3JhcGgtaWNvbi0nICsgcG9pbnQuaWQsIG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGxheWVyc1twcm9wZXJ0eV0ub24oJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgIGxheWVyc1twcm9wZXJ0eV0ub3BlblBvcHVwKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBjdXN0b21JY29uRm9yUG9pbnRzSWZQYXJ0T2ZQYXRoQW5kTW9uaXRvcmVkID0gKG1hcmtlckxvY2F0aW9uKSA9PiB7XG4gICAgaWYgKGNlbnRlcmVkRXZlbnQpIHtcbiAgICAgIGxldCBlZGdlc0lkczogbnVtYmVyW10gPSBbXTtcbiAgICAgIGNlbnRlcmVkRXZlbnQucGF0aC5mb3JFYWNoKChwYXJ0KSA9PiB7XG4gICAgICAgIGVkZ2VzSWRzLnB1c2gocGFydC5lZGdlX2lkKTtcbiAgICAgIH0pO1xuXG4gICAgICBsZXQgcmVsZXZhbnRFZGdlcyA9IGVkZ2VzX2RhdGEuaXRlbXMuZmlsdGVyKChlZGdlKSA9PlxuICAgICAgICBlZGdlc0lkcy5pbmNsdWRlcyhlZGdlLmlkKSxcbiAgICAgICk7XG5cbiAgICAgIGxldCByZWxldmFudFBvaW50czogbnVtYmVyW10gPSBbXTtcbiAgICAgIHJlbGV2YW50RWRnZXMuZm9yRWFjaCgoZWRnZSkgPT4ge1xuICAgICAgICByZWxldmFudFBvaW50cy5wdXNoKGVkZ2Uuc291cmNlX3BvaW50X2lkKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocmVsZXZhbnRQb2ludHMuaW5jbHVkZXMocG9pbnQuaWQpKSB7XG4gICAgICAgIGNyZWF0ZU1hbmhvbGVQb2ludChtYXJrZXJMb2NhdGlvbik7XG4gICAgICAgIGNyZWF0ZUN1c3RvbUljb25Qb2ludChtYXJrZXJMb2NhdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGNyZWF0ZVNhbXBsaW5nSWNvbnMgPSAobWFya2VyTG9jYXRpb246IG51bWJlcltdKSA9PiB7XG4gICAgaWYgKGZvY3VzZWRFdmVudCAhPT0gbnVsbCkge1xuICAgICAgbGV0IHNhbXBsZWRQb2ludElkcyA9IGZvY3VzZWRFdmVudC5zYW1wbGluZ3MubWFwKChzKSA9PiBzLnBvaW50X2lkKTtcbiAgICAgIGlmIChcbiAgICAgICAgZm9jdXNlZEV2ZW50ICE9PSBudWxsICYmXG4gICAgICAgIGZvY3VzZWRFdmVudC5zYW1wbGluZ3MubGVuZ3RoICE9PSAwICYmXG4gICAgICAgIHNhbXBsZWRQb2ludElkcy5pbmNsdWRlcyhwb2ludC5pZClcbiAgICAgICkge1xuICAgICAgICBjcmVhdGVTYW1wbGluZ0ljb25Qb2ludChcbiAgICAgICAgICBtYXJrZXJMb2NhdGlvbixcbiAgICAgICAgICBtYXRjaEljb25Ub1BvaW50KHBvaW50KSAhPT0gbnVsbCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcmVuZGVyTG9naWMgPSAoKSA9PiB7XG4gICAgbGV0IG1hcmtlckxvY2F0aW9uID0gW3BvaW50WydsYXRpdHVkZSddLCBwb2ludFsnbG9uZ2l0dWRlJ11dO1xuICAgIGN1c3RvbUljb25Gb3JQb2ludHNJZlBhcnRPZlBhdGhBbmRNb25pdG9yZWQobWFya2VyTG9jYXRpb24pO1xuICAgIGlmICghcG9pbnQuZXZlbnRzVmlld0hvdmVyZWQpIGNyZWF0ZU1hbmhvbGVQb2ludChtYXJrZXJMb2NhdGlvbik7XG4gICAgaWYgKG1hcmtlckxvY2F0aW9uWzBdICE9PSBudWxsKSB7XG4gICAgICBjcmVhdGVTYW1wbGluZ0ljb25zKG1hcmtlckxvY2F0aW9uKTtcbiAgICAgIGlmIChwb2ludC5wYXJ0X29mX21vbml0b3JlZF9wYXRoICYmICFwb2ludC5oYXNfZGV2aWNlKSByZXR1cm47XG4gICAgICBpZiAoXG4gICAgICAgIG1hdGNoSWNvblRvUG9pbnQocG9pbnQpICE9PSBudWxsICYmXG4gICAgICAgIChjZW50ZXJlZEV2ZW50ID09PSBudWxsIHx8XG4gICAgICAgICAgKGNlbnRlcmVkRXZlbnQgIT09IG51bGwgJiYgcG9pbnRJc09ic2VydmF0aW9uKCkpIHx8XG4gICAgICAgICAgcG9pbnQuZ3JvdXAudHlwZSA9PT0gJ0dyb3Vwczo6V2FzdGV3YXRlclRyZWF0bWVudFBsYW50JylcbiAgICAgICkge1xuICAgICAgICBpZiAocG9pbnQuZXZlbnRzVmlld0hvdmVyZWQpIGNyZWF0ZU1hbmhvbGVQb2ludChtYXJrZXJMb2NhdGlvbik7XG4gICAgICAgIGNyZWF0ZUN1c3RvbUljb25Qb2ludChtYXJrZXJMb2NhdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb2N1c2VkRXZlbnQgIT09IG51bGwpIHtcbiAgICAgICAgbGV0IGhhc1ByaW1hcnlJY29uID0gbWF0Y2hJY29uVG9Qb2ludChwb2ludCkgIT09IG51bGw7XG5cbiAgICAgICAgaWYgKHBvaW50SXNPYnNlcnZhdGlvbigpKSB7XG4gICAgICAgICAgY3JlYXRlT2JzZXJ2YXRpb25JY29uUG9pbnQobWFya2VyTG9jYXRpb24sIGhhc1ByaW1hcnlJY29uKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY2VudGVyZWRFdmVudCAhPT0gbnVsbCAmJiBwb2ludEJlbG9uZ3NUb0V2ZW50KCkpIHtcbiAgICAgICAgbGV0IG9icyA9IGNlbnRlcmVkRXZlbnQub2JzZXJ2YXRpb25zLmZpbHRlcihcbiAgICAgICAgICAob2JzKSA9PiBvYnMucG9pbnRfaWQgPT09IHBvaW50LmlkLFxuICAgICAgICApWzBdO1xuICAgICAgICBiaW5kUG9wdXBUb1BvaW50KG9icyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmVuZGVyTG9naWMoKTtcblxuICAgIHJldHVybiBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgICAgLy8gVU5CSU5EIFBPUFVQXG4gICAgICByZW1vdmVGcm9tTWFwKG1hcCwgcG9pbnQsICdPYnNlcnZhdGlvbicpO1xuICAgICAgcmVtb3ZlRnJvbU1hcChtYXAsIHBvaW50LCAnUG9pbnQnKTtcbiAgICAgIHJlbW92ZUZyb21NYXAobWFwLCBwb2ludCwgJ1NhbXBsaW5nJyk7XG4gICAgICByZW1vdmVGcm9tTWFwKG1hcCwgcG9pbnQsICdJY29uTnVtYmVyJyk7XG4gICAgfTtcbiAgfSwgW2NlbnRlcmVkRXZlbnRdKTtcblxuICByZXR1cm4gPGRpdj48L2Rpdj47XG59O1xuXG5jb25zdCBjb25uZWN0b3IgPSBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcyk7XG5leHBvcnQgZGVmYXVsdCBjb25uZWN0b3IoXG4gIFJlYWN0Lm1lbW8oUG9pbnRNYXJrZXIsIChwcmV2UHJvcHMsIG5leHRQcm9wcykgPT4ge1xuICAgIGlmIChcbiAgICAgIHByZXZQcm9wcy5ldmVudHNfZGF0YS5mb2N1c2VkRXZlbnQgIT09IG5leHRQcm9wcy5ldmVudHNfZGF0YS5mb2N1c2VkRXZlbnRcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSksXG4pO1xuIl19
|
|
69
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9XaWRnZXRzL01hcC9wb2ludHMvUG9pbnRNYXJrZXIudHN4Il0sIm5hbWVzIjpbIm1hcFN0YXRlVG9Qcm9wcyIsInN0YXRlIiwiZXZlbnRzX2RhdGEiLCJQb2ludE1hcmtlciIsInByb3BzIiwibWFwIiwicG9pbnQiLCJyZXJlbmRlciIsInJlbmRlckxvZ2ljIiwibWFya2VyTG9jYXRpb24iLCJjbGVhbnVwIiwiY29ubmVjdG9yIiwiUmVhY3QiLCJtZW1vIiwicHJldlByb3BzIiwibmV4dFByb3BzIiwiZm9jdXNlZEV2ZW50Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFLQTs7Ozs7O0FBR0EsU0FBU0EsZUFBVCxDQUF5QkMsS0FBekIsRUFBMkM7QUFDekMsTUFBUUMsV0FBUixHQUF3QkQsS0FBeEIsQ0FBUUMsV0FBUjtBQUVBLFNBQU87QUFDTEEsSUFBQUEsV0FBVyxFQUFYQTtBQURLLEdBQVA7QUFHRDs7QUFRRCxJQUFNQyxXQUE0QixHQUFHLFNBQS9CQSxXQUErQixDQUFDQyxLQUFELEVBQVc7QUFDOUMsTUFBUUMsR0FBUixHQUFpQ0QsS0FBakMsQ0FBUUMsR0FBUjtBQUFBLE1BQWFDLEtBQWIsR0FBaUNGLEtBQWpDLENBQWFFLEtBQWI7QUFBQSxNQUFvQkMsUUFBcEIsR0FBaUNILEtBQWpDLENBQW9CRyxRQUFwQjtBQUVBLHdDQUF3QkYsR0FBeEIsRUFBNkJDLEtBQTdCLEVBQW9DLE9BQXBDO0FBQ0Esd0NBQXdCRCxHQUF4QixFQUE2QkMsS0FBN0IsRUFBb0MsYUFBcEM7QUFDQSx3Q0FBd0JELEdBQXhCLEVBQTZCQyxLQUE3QixFQUFvQyxVQUFwQztBQUNBLHdDQUF3QkQsR0FBeEIsRUFBNkJDLEtBQTdCLEVBQW9DLFlBQXBDOztBQUVBLE1BQU1FLFdBQVcsR0FBRyxTQUFkQSxXQUFjLEdBQU07QUFDeEIsUUFBSUMsY0FBMkIsR0FBRyxDQUFDSCxLQUFLLENBQUMsVUFBRCxDQUFOLEVBQW9CQSxLQUFLLENBQUMsV0FBRCxDQUF6QixDQUFsQztBQUNBLFFBQUlHLGNBQWMsQ0FBQyxDQUFELENBQWQsS0FBc0IsSUFBMUIsRUFBZ0M7QUFFaEMsd0NBQW1CQSxjQUFuQixFQUFtQ0gsS0FBbkMsRUFBMENELEdBQTFDO0FBQ0EsdUNBQWtCSSxjQUFsQixFQUFrQ0gsS0FBbEMsRUFBeUNELEdBQXpDO0FBQ0QsR0FORDs7QUFRQSx3QkFBVSxZQUFNO0FBQ2RHLElBQUFBLFdBQVc7QUFFWCxXQUFPLFNBQVNFLE9BQVQsR0FBbUI7QUFDeEI7QUFDQSxrREFBY0wsR0FBZCxFQUFtQkMsS0FBbkIsRUFBMEIsYUFBMUI7QUFDQSxrREFBY0QsR0FBZCxFQUFtQkMsS0FBbkIsRUFBMEIsT0FBMUI7QUFDQSxrREFBY0QsR0FBZCxFQUFtQkMsS0FBbkIsRUFBMEIsVUFBMUI7QUFDQSxrREFBY0QsR0FBZCxFQUFtQkMsS0FBbkIsRUFBMEIsWUFBMUI7QUFDRCxLQU5EO0FBT0QsR0FWRCxFQVVHLENBQUNDLFFBQUQsQ0FWSDtBQVlBLHNCQUFPLHlDQUFQO0FBQ0QsQ0E3QkQ7O0FBK0JBLElBQU1JLFNBQVMsR0FBRyx5QkFBUVgsZUFBUixDQUFsQjs7ZUFDZVcsU0FBUyxlQUN0QkMsZUFBTUMsSUFBTixDQUFXVixXQUFYLEVBQXdCLFVBQUNXLFNBQUQsRUFBWUMsU0FBWixFQUEwQjtBQUNoRCxNQUNFRCxTQUFTLENBQUNaLFdBQVYsQ0FBc0JjLFlBQXRCLEtBQXVDRCxTQUFTLENBQUNiLFdBQVYsQ0FBc0JjLFlBRC9ELEVBRUU7QUFDQSxXQUFPLEtBQVA7QUFDRDs7QUFFRCxTQUFPLElBQVA7QUFDRCxDQVJELENBRHNCLEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY29ubmVjdCwgQ29ubmVjdGVkUHJvcHMgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgdXNlUmVtb3ZlRXhpc3RpbmdMYXllcnMsIHtcbiAgcmVtb3ZlRnJvbU1hcCxcbn0gZnJvbSAnc3JjL2hvb2tzL3VzZVJlbW92ZUV4aXN0aW5nTGF5ZXJzJztcbmltcG9ydCB7IElBcHBTdGF0ZSB9IGZyb20gJ3NyYy9tb2RlbHMvSUFwcFN0YXRlJztcbmltcG9ydCB7IElQb2ludCB9IGZyb20gJ3NyYy9zdG9yZS9wb2ludHMvbW9kZWxzL0lQb2ludCc7XG5pbXBvcnQgeyBjcmVhdGVCdWJibGVQb2ludCwgY3JlYXRlTWFuaG9sZVBvaW50IH0gZnJvbSAnLi9Qb2ludFV0aWxzJztcbmltcG9ydCB7IExhdExuZ1R1cGxlIH0gZnJvbSAnbGVhZmxldCc7XG5cbmZ1bmN0aW9uIG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZTogSUFwcFN0YXRlKSB7XG4gIGNvbnN0IHsgZXZlbnRzX2RhdGEgfSA9IHN0YXRlO1xuXG4gIHJldHVybiB7XG4gICAgZXZlbnRzX2RhdGEsXG4gIH07XG59XG5cbnR5cGUgUHJvcHMgPSBDb25uZWN0ZWRQcm9wczx0eXBlb2YgY29ubmVjdG9yPiAmIHtcbiAgbWFwOiBhbnk7XG4gIHBvaW50OiBJUG9pbnQ7XG4gIHJlcmVuZGVyOiBib29sZWFuO1xufTtcblxuY29uc3QgUG9pbnRNYXJrZXI6IFJlYWN0LkZDPFByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IG1hcCwgcG9pbnQsIHJlcmVuZGVyIH0gPSBwcm9wcztcblxuICB1c2VSZW1vdmVFeGlzdGluZ0xheWVycyhtYXAsIHBvaW50LCAnUG9pbnQnKTtcbiAgdXNlUmVtb3ZlRXhpc3RpbmdMYXllcnMobWFwLCBwb2ludCwgJ09ic2VydmF0aW9uJyk7XG4gIHVzZVJlbW92ZUV4aXN0aW5nTGF5ZXJzKG1hcCwgcG9pbnQsICdTYW1wbGluZycpO1xuICB1c2VSZW1vdmVFeGlzdGluZ0xheWVycyhtYXAsIHBvaW50LCAnSWNvbk51bWJlcicpO1xuXG4gIGNvbnN0IHJlbmRlckxvZ2ljID0gKCkgPT4ge1xuICAgIGxldCBtYXJrZXJMb2NhdGlvbjogTGF0TG5nVHVwbGUgPSBbcG9pbnRbJ2xhdGl0dWRlJ10sIHBvaW50Wydsb25naXR1ZGUnXV07XG4gICAgaWYgKG1hcmtlckxvY2F0aW9uWzBdID09PSBudWxsKSByZXR1cm47XG5cbiAgICBjcmVhdGVNYW5ob2xlUG9pbnQobWFya2VyTG9jYXRpb24sIHBvaW50LCBtYXApO1xuICAgIGNyZWF0ZUJ1YmJsZVBvaW50KG1hcmtlckxvY2F0aW9uLCBwb2ludCwgbWFwKTtcbiAgfTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJlbmRlckxvZ2ljKCk7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICAgIC8vIFVOQklORCBQT1BVUFxuICAgICAgcmVtb3ZlRnJvbU1hcChtYXAsIHBvaW50LCAnT2JzZXJ2YXRpb24nKTtcbiAgICAgIHJlbW92ZUZyb21NYXAobWFwLCBwb2ludCwgJ1BvaW50Jyk7XG4gICAgICByZW1vdmVGcm9tTWFwKG1hcCwgcG9pbnQsICdTYW1wbGluZycpO1xuICAgICAgcmVtb3ZlRnJvbU1hcChtYXAsIHBvaW50LCAnSWNvbk51bWJlcicpO1xuICAgIH07XG4gIH0sIFtyZXJlbmRlcl0pO1xuXG4gIHJldHVybiA8ZGl2PjwvZGl2Pjtcbn07XG5cbmNvbnN0IGNvbm5lY3RvciA9IGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzKTtcbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3RvcihcbiAgUmVhY3QubWVtbyhQb2ludE1hcmtlciwgKHByZXZQcm9wcywgbmV4dFByb3BzKSA9PiB7XG4gICAgaWYgKFxuICAgICAgcHJldlByb3BzLmV2ZW50c19kYXRhLmZvY3VzZWRFdmVudCAhPT0gbmV4dFByb3BzLmV2ZW50c19kYXRhLmZvY3VzZWRFdmVudFxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9KSxcbik7XG4iXX0=
|