@kepler.gl/components 3.3.0-alpha.8 → 3.3.0-alpha.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/cjs/common/file-uploader/file-upload.js +2 -1
  2. package/dist/cjs/effects/effect-configurator.js +2 -2
  3. package/dist/cjs/effects/effect-manager.js +32 -17
  4. package/dist/cjs/effects/effect-time-configurator.js +110 -42
  5. package/dist/cjs/kepler-gl.js +6 -2
  6. package/dist/cjs/modals/export-map-modal/components.js +16 -7
  7. package/dist/cjs/modals/export-map-modal/export-html-map.js +5 -9
  8. package/dist/cjs/modals/export-map-modal/export-json-map.js +4 -8
  9. package/dist/cjs/modals/export-map-modal/export-map-modal.js +21 -16
  10. package/dist/cjs/notification-panel/notification-item.js +58 -12
  11. package/dist/cjs/remote-dataset-refresh-controller.js +50 -0
  12. package/dist/cjs/side-panel/common/dataset-info.js +187 -8
  13. package/dist/cjs/side-panel/common/dataset-refresh-progress.js +63 -0
  14. package/dist/cjs/side-panel/common/dataset-title.js +76 -13
  15. package/dist/cjs/side-panel/common/source-data-catalog.js +31 -6
  16. package/dist/cjs/side-panel/filter-manager.js +7 -3
  17. package/dist/cjs/side-panel/layer-manager.js +14 -4
  18. package/dist/cjs/side-panel/layer-panel/dataset-layer-section.js +14 -4
  19. package/dist/cjs/side-panel/layer-panel/dataset-section.js +7 -3
  20. package/dist/cjs/side-panel/layer-panel/layer-configurator.js +49 -35
  21. package/dist/cjs/side-panel/layer-panel/vector-tile-layer-configurator.js +4 -3
  22. package/dist/effects/effect-manager.d.ts +1 -1
  23. package/dist/esm/common/file-uploader/file-upload.js +2 -1
  24. package/dist/esm/effects/effect-configurator.js +2 -2
  25. package/dist/esm/effects/effect-manager.js +34 -19
  26. package/dist/esm/effects/effect-time-configurator.js +111 -43
  27. package/dist/esm/kepler-gl.js +6 -2
  28. package/dist/esm/modals/export-map-modal/components.js +16 -7
  29. package/dist/esm/modals/export-map-modal/export-html-map.js +6 -10
  30. package/dist/esm/modals/export-map-modal/export-json-map.js +5 -9
  31. package/dist/esm/modals/export-map-modal/export-map-modal.js +21 -14
  32. package/dist/esm/notification-panel/notification-item.js +60 -14
  33. package/dist/esm/remote-dataset-refresh-controller.js +44 -0
  34. package/dist/esm/side-panel/common/dataset-info.js +186 -9
  35. package/dist/esm/side-panel/common/dataset-refresh-progress.js +56 -0
  36. package/dist/esm/side-panel/common/dataset-title.js +77 -14
  37. package/dist/esm/side-panel/common/source-data-catalog.js +29 -6
  38. package/dist/esm/side-panel/filter-manager.js +7 -3
  39. package/dist/esm/side-panel/layer-manager.js +14 -4
  40. package/dist/esm/side-panel/layer-panel/dataset-layer-section.js +14 -4
  41. package/dist/esm/side-panel/layer-panel/dataset-section.js +7 -3
  42. package/dist/esm/side-panel/layer-panel/layer-configurator.js +49 -35
  43. package/dist/esm/side-panel/layer-panel/vector-tile-layer-configurator.js +4 -3
  44. package/dist/kepler-gl.d.ts +1 -0
  45. package/dist/modals/export-map-modal/components.d.ts +14 -0
  46. package/dist/remote-dataset-refresh-controller.d.ts +11 -0
  47. package/dist/side-panel/common/dataset-info.d.ts +10 -0
  48. package/dist/side-panel/common/dataset-refresh-progress.d.ts +11 -0
  49. package/dist/side-panel/common/dataset-title.d.ts +5 -0
  50. package/dist/side-panel/common/source-data-catalog.d.ts +3 -0
  51. package/dist/side-panel/layer-panel/dataset-section.d.ts +2 -0
  52. package/package.json +16 -16
@@ -4,7 +4,8 @@ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _temp
4
4
  // SPDX-License-Identifier: MIT
5
5
  // Copyright contributors to the kepler.gl project
6
6
 
7
- import React, { useCallback, useMemo } from 'react';
7
+ import React, { useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';
8
+ import { useSelector } from 'react-redux';
8
9
  import { injectIntl } from 'react-intl';
9
10
  import styled from 'styled-components';
10
11
  import moment from 'moment-timezone';
@@ -12,8 +13,7 @@ import SunCalc from 'suncalc';
12
13
  import { FormattedMessage } from '@kepler.gl/localization';
13
14
  import { clamp } from '@kepler.gl/utils';
14
15
  import { LIGHT_AND_SHADOW_EFFECT_TIME_MODES, DEFAULT_TIMEZONE } from '@kepler.gl/constants';
15
- import { mapStateLens } from '@kepler.gl/reducers';
16
- import { withState } from '../injector';
16
+ import KeplerGlContext from '../context';
17
17
  import { StyledDatePicker as DatePicker, Tooltip } from '../common/styled-components';
18
18
  import Checkbox from '../common/checkbox';
19
19
  import Button from '../common/data-table/button';
@@ -99,6 +99,26 @@ var getTimestamp = function getTimestamp(dateStr, timeStr, timezone) {
99
99
  var getDayRatio = function getDayRatio(date) {
100
100
  return (date.hours() * 60 + date.minutes()) * 60 * 1000 / DAY_MILISECONDS;
101
101
  };
102
+
103
+ /**
104
+ * Normalize TimePicker output (HH:mm, h:mm a, or Date) to HH:mm.
105
+ * react-time-picker with format "hh:mm a" can echo a 12-hour string when its
106
+ * controlled value is rewritten, which would otherwise parse as a different UTC time.
107
+ */
108
+ var normalizeTimeInput = function normalizeTimeInput(newTime) {
109
+ if (newTime instanceof Date && Number.isFinite(newTime.getTime())) {
110
+ return moment(newTime).format('HH:mm');
111
+ }
112
+ if (typeof newTime !== 'string' || !newTime) {
113
+ return null;
114
+ }
115
+ var trimmed = newTime.trim();
116
+ if (/^\d{2}:\d{2}/.test(trimmed)) {
117
+ return trimmed.slice(0, 5);
118
+ }
119
+ var parsed = moment(trimmed, ['HH:mm', 'H:mm', 'hh:mm A', 'h:mm A', 'hh:mm a', 'h:mm a'], true);
120
+ return parsed.isValid() ? parsed.format('HH:mm') : null;
121
+ };
102
122
  EffectTimeConfiguratorFactory.deps = [TimezoneSelectorFactory, EffectTimeSliderFactory, EffectTimeSelectorFactory];
103
123
  export default function EffectTimeConfiguratorFactory(TimezoneSelector, EffectTimeSlider, EffectTimeSelector) {
104
124
  var EffectTimeConfigurator = function EffectTimeConfigurator(_ref) {
@@ -106,8 +126,21 @@ export default function EffectTimeConfiguratorFactory(TimezoneSelector, EffectTi
106
126
  _timezone = _ref.timezone,
107
127
  timeMode = _ref.timeMode,
108
128
  onTimeParametersChanged = _ref.onChange,
109
- mapState = _ref.mapState,
110
129
  intl = _ref.intl;
130
+ // Subscribe only to lat/lon. Connecting this panel to the full store (via
131
+ // withState) re-rendered it on every effect timestamp tick while dragging
132
+ // the day-time slider, and react-redux nested connect layout effects then
133
+ // hit "Maximum update depth exceeded".
134
+ var _useContext = useContext(KeplerGlContext),
135
+ selector = _useContext.selector;
136
+ var latitude = useSelector(function (state) {
137
+ var _selector$mapState$la, _selector;
138
+ return (_selector$mapState$la = (_selector = selector(state)) === null || _selector === void 0 || (_selector = _selector.mapState) === null || _selector === void 0 ? void 0 : _selector.latitude) !== null && _selector$mapState$la !== void 0 ? _selector$mapState$la : 0;
139
+ });
140
+ var longitude = useSelector(function (state) {
141
+ var _selector$mapState$lo, _selector2;
142
+ return (_selector$mapState$lo = (_selector2 = selector(state)) === null || _selector2 === void 0 || (_selector2 = _selector2.mapState) === null || _selector2 === void 0 ? void 0 : _selector2.longitude) !== null && _selector$mapState$lo !== void 0 ? _selector$mapState$lo : 0;
143
+ });
111
144
  var timezone = useMemo(function () {
112
145
  return moment.tz.names().includes(_timezone) ? _timezone : DEFAULT_TIMEZONE;
113
146
  }, [_timezone]);
@@ -116,24 +149,50 @@ export default function EffectTimeConfiguratorFactory(TimezoneSelector, EffectTi
116
149
  // "Invalid Date" for the date picker (react-date-picker throws on it).
117
150
  var safeTimestamp = Number.isFinite(timestamp) ? timestamp : Date.now();
118
151
  var currentMoment = moment.tz(safeTimestamp, timezone);
152
+ return {
153
+ fullDate: currentMoment.toDate(),
154
+ formattedTime: currentMoment.format('HH:mm'),
155
+ formattedDate: currentMoment.format('YYYY-MM-DD'),
156
+ dayTimeProgress: getDayRatio(currentMoment)
157
+ };
158
+ }, [timestamp, timezone]),
159
+ fullDate = _useMemo.fullDate,
160
+ formattedTime = _useMemo.formattedTime,
161
+ formattedDate = _useMemo.formattedDate,
162
+ dayTimeProgress = _useMemo.dayTimeProgress;
119
163
 
120
- // Slider value from 0 to 1
121
- var dayProgress = getDayRatio(currentMoment);
164
+ // Only allocate a new Date when the calendar day changes. A new object on
165
+ // every timestamp tick makes react-date-picker fire onChange while dragging.
166
+ var datePickerDate = useMemo(function () {
167
+ var _formattedDate$split$ = formattedDate.split('-').map(Number),
168
+ _formattedDate$split$2 = _slicedToArray(_formattedDate$split$, 3),
169
+ year = _formattedDate$split$2[0],
170
+ month = _formattedDate$split$2[1],
171
+ day = _formattedDate$split$2[2];
172
+ return new Date(year, month - 1, day);
173
+ }, [formattedDate]);
122
174
 
123
- // Date picker always renders Date in local timezone
124
- var date = new Date();
125
- date.setFullYear(currentMoment.year(), currentMoment.month(), currentMoment.date());
126
- date.setHours(0, 0, 0, 0);
127
- return [date, currentMoment.toDate(), currentMoment.format('HH:mm'), currentMoment.format('YYYY-MM-DD'), dayProgress];
128
- }, [timestamp, timezone]),
129
- _useMemo2 = _slicedToArray(_useMemo, 5),
130
- datePickerDate = _useMemo2[0],
131
- fullDate = _useMemo2[1],
132
- formattedTime = _useMemo2[2],
133
- formattedDate = _useMemo2[3],
134
- dayTimeProgress = _useMemo2[4];
175
+ // Keep the slider on the pointer while dragging so Redux minute-quantization
176
+ // cannot snap it (and so date/time widgets cannot echo onChange mid-gesture).
177
+ var _useState = useState(null),
178
+ _useState2 = _slicedToArray(_useState, 2),
179
+ sliderDragProgress = _useState2[0],
180
+ setSliderDragProgress = _useState2[1];
181
+ var isSliderDraggingRef = useRef(false);
182
+ var endSliderDrag = useCallback(function () {
183
+ isSliderDraggingRef.current = false;
184
+ setSliderDragProgress(null);
185
+ }, []);
186
+ useEffect(function () {
187
+ document.addEventListener('mouseup', endSliderDrag);
188
+ document.addEventListener('touchend', endSliderDrag);
189
+ return function () {
190
+ document.removeEventListener('mouseup', endSliderDrag);
191
+ document.removeEventListener('touchend', endSliderDrag);
192
+ };
193
+ }, [endSliderDrag]);
135
194
  var timeSliderConfig = useMemo(function () {
136
- var times = SunCalc.getTimes(fullDate, mapState.latitude, mapState.longitude);
195
+ var times = SunCalc.getTimes(fullDate, latitude, longitude);
137
196
  var dawn = times.dawn,
138
197
  sunrise = times.sunrise,
139
198
  sunset = times.sunset,
@@ -146,31 +205,42 @@ export default function EffectTimeConfiguratorFactory(TimezoneSelector, EffectTi
146
205
  sunriseTime: moment.tz(sunrise.valueOf(), timezone).format('hh:mm A'),
147
206
  sunsetTime: moment.tz(sunset.valueOf(), timezone).format('hh:mm A')
148
207
  };
149
- }, [fullDate, timezone, mapState.latitude, mapState.longitude]);
150
- var onTimeSliderChange = useCallback(function (value) {
151
- var hours = clamp([0, 23], Math.floor(value[1] * 24));
152
- var minutes = clamp([0, 59], Math.floor((value[1] * 24 - hours) * 60));
153
- var newFormattedTime = "".concat(hours < 10 ? "0".concat(hours) : hours, ":").concat(minutes < 10 ? "0".concat(minutes) : minutes);
154
- var newTimestamp = getTimestamp(formattedDate, newFormattedTime, timezone);
208
+ }, [fullDate, timezone, latitude, longitude]);
209
+
210
+ // Date/time widgets (and the slider itself) can echo onChange when their
211
+ // controlled value is rewritten from the store. Skip no-op timestamp
212
+ // updates so those echoes cannot dispatch in a loop.
213
+ var timestampRef = useRef(timestamp);
214
+ timestampRef.current = timestamp;
215
+ var commitTimestamp = useCallback(function (newTimestamp) {
216
+ if (newTimestamp == null || newTimestamp === timestampRef.current) return;
155
217
  onTimeParametersChanged({
156
218
  timestamp: newTimestamp
157
219
  });
158
- }, [formattedDate, timezone, onTimeParametersChanged]);
220
+ }, [onTimeParametersChanged]);
221
+ var onTimeSliderChange = useCallback(function (value) {
222
+ isSliderDraggingRef.current = true;
223
+ setSliderDragProgress(value[1]);
224
+ // Round to the nearest minute. Flooring (value * 24) then (fraction * 60)
225
+ // can drop a minute to floating point (e.g. 16:46 → 16:45) and dispatch
226
+ // a false change when the handle is already on the current time.
227
+ var totalMinutes = clamp([0, 24 * 60 - 1], Math.round(value[1] * 24 * 60));
228
+ var hours = Math.floor(totalMinutes / 60);
229
+ var minutes = totalMinutes % 60;
230
+ var newFormattedTime = "".concat(hours < 10 ? "0".concat(hours) : hours, ":").concat(minutes < 10 ? "0".concat(minutes) : minutes);
231
+ commitTimestamp(getTimestamp(formattedDate, newFormattedTime, timezone));
232
+ }, [formattedDate, timezone, commitTimestamp]);
159
233
  var setDate = useCallback(function (newDate) {
160
- if (!newDate) return;
234
+ if (isSliderDraggingRef.current || !newDate) return;
161
235
  var newFormattedDate = moment(newDate).format('YYYY-MM-DD');
162
- var newTimestamp = getTimestamp(newFormattedDate, formattedTime, timezone);
163
- onTimeParametersChanged({
164
- timestamp: newTimestamp
165
- });
166
- }, [formattedTime, timezone, onTimeParametersChanged]);
236
+ commitTimestamp(getTimestamp(newFormattedDate, formattedTime, timezone));
237
+ }, [formattedTime, timezone, commitTimestamp]);
167
238
  var setTime = useCallback(function (newTime) {
168
- if (!newTime) return;
169
- var newTimestamp = getTimestamp(formattedDate, newTime, timezone);
170
- onTimeParametersChanged({
171
- timestamp: newTimestamp
172
- });
173
- }, [formattedDate, timezone, onTimeParametersChanged]);
239
+ if (isSliderDraggingRef.current || !newTime) return;
240
+ var timeStr = normalizeTimeInput(newTime);
241
+ if (!timeStr) return;
242
+ commitTimestamp(getTimestamp(formattedDate, timeStr, timezone));
243
+ }, [formattedDate, timezone, commitTimestamp]);
174
244
  var setTimezone = useCallback(function (newTimezone) {
175
245
  if (!newTimezone) return;
176
246
  var newTimestamp = getTimestamp(formattedDate, formattedTime, newTimezone);
@@ -206,7 +276,7 @@ export default function EffectTimeConfiguratorFactory(TimezoneSelector, EffectTi
206
276
  })), /*#__PURE__*/React.createElement(SliderWrapper, {
207
277
  hidden: disableDateTimePick
208
278
  }, /*#__PURE__*/React.createElement(EffectTimeSlider, {
209
- value: dayTimeProgress,
279
+ value: sliderDragProgress !== null && sliderDragProgress !== void 0 ? sliderDragProgress : dayTimeProgress,
210
280
  onChange: onTimeSliderChange,
211
281
  config: timeSliderConfig
212
282
  })), /*#__PURE__*/React.createElement(StyledWrapper, {
@@ -299,8 +369,6 @@ export default function EffectTimeConfiguratorFactory(TimezoneSelector, EffectTi
299
369
  }
300
370
  })));
301
371
  };
302
-
303
- // @ts-expect-error how to properly type?
304
- return withState([mapStateLens])(injectIntl(EffectTimeConfigurator));
372
+ return injectIntl(EffectTimeConfigurator);
305
373
  }
306
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZUNhbGxiYWNrIiwidXNlTWVtbyIsImluamVjdEludGwiLCJzdHlsZWQiLCJtb21lbnQiLCJTdW5DYWxjIiwiRm9ybWF0dGVkTWVzc2FnZSIsImNsYW1wIiwiTElHSFRfQU5EX1NIQURPV19FRkZFQ1RfVElNRV9NT0RFUyIsIkRFRkFVTFRfVElNRVpPTkUiLCJtYXBTdGF0ZUxlbnMiLCJ3aXRoU3RhdGUiLCJTdHlsZWREYXRlUGlja2VyIiwiRGF0ZVBpY2tlciIsIlRvb2x0aXAiLCJDaGVja2JveCIsIkJ1dHRvbiIsIkxvY2F0aW9uTWFya2VyIiwiQ2FsZW5kYXIiLCJDbG9jayIsIkdsb2JlIiwiVGltZXpvbmVTZWxlY3RvckZhY3RvcnkiLCJFZmZlY3RUaW1lU2xpZGVyRmFjdG9yeSIsIkVmZmVjdFRpbWVTZWxlY3RvckZhY3RvcnkiLCJEQVlfTUlMSVNFQ09ORFMiLCJTdHlsZWRXcmFwcGVyIiwiZGl2IiwiX3RlbXBsYXRlT2JqZWN0IiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCIsInByb3BzIiwiX3Byb3BzJCRtYXJnaW5Cb3R0b20iLCIkbWFyZ2luQm90dG9tIiwiaGlkZGVuIiwiU2xpZGVyV3JhcHBlciIsIl90ZW1wbGF0ZU9iamVjdDIiLCJTdHlsZWRCdXR0b24iLCJfdGVtcGxhdGVPYmplY3QzIiwidGhlbWUiLCJlZmZlY3RQYW5lbFRleHRTZWNvbmRhcnkyIiwiaW5wdXRCZ2QiLCJlZmZlY3RQYW5lbFRleHRNYWluIiwiaW5wdXRCZ2RIb3ZlciIsIlN0eWxlZFJhZGlvIiwiX3RlbXBsYXRlT2JqZWN0NCIsImZvbnRGYW1pbHkiLCJpbnB1dEZvbnRTaXplIiwiYWN0aXZlQ29sb3IiLCJTdHlsZWRFZmZlY3RUaW1lQ29uZmlndXJhdG9yIiwiX3RlbXBsYXRlT2JqZWN0NSIsIl90ZW1wbGF0ZU9iamVjdDYiLCJXaXRoSWNvbldyYXBwZXIiLCJfdGVtcGxhdGVPYmplY3Q3Iiwid2lkdGgiLCJjb25jYXQiLCJTdHlsZWRFeHRyYUljb24iLCJfdGVtcGxhdGVPYmplY3Q4IiwiVGV4dEJsb2NrIiwiX3RlbXBsYXRlT2JqZWN0OSIsImdldFRpbWVzdGFtcCIsImRhdGVTdHIiLCJ0aW1lU3RyIiwidGltZXpvbmUiLCJ0ZXN0IiwidGltZXN0YW1wIiwiY3VyciIsInR6IiwiaXNWYWxpZCIsInV0YyIsInZhbHVlT2YiLCJnZXREYXlSYXRpbyIsImRhdGUiLCJob3VycyIsIm1pbnV0ZXMiLCJFZmZlY3RUaW1lQ29uZmlndXJhdG9yRmFjdG9yeSIsImRlcHMiLCJUaW1lem9uZVNlbGVjdG9yIiwiRWZmZWN0VGltZVNsaWRlciIsIkVmZmVjdFRpbWVTZWxlY3RvciIsIkVmZmVjdFRpbWVDb25maWd1cmF0b3IiLCJfcmVmIiwiX3RpbWV6b25lIiwidGltZU1vZGUiLCJvblRpbWVQYXJhbWV0ZXJzQ2hhbmdlZCIsIm9uQ2hhbmdlIiwibWFwU3RhdGUiLCJpbnRsIiwibmFtZXMiLCJpbmNsdWRlcyIsIl91c2VNZW1vIiwic2FmZVRpbWVzdGFtcCIsIk51bWJlciIsImlzRmluaXRlIiwiRGF0ZSIsIm5vdyIsImN1cnJlbnRNb21lbnQiLCJkYXlQcm9ncmVzcyIsInNldEZ1bGxZZWFyIiwieWVhciIsIm1vbnRoIiwic2V0SG91cnMiLCJ0b0RhdGUiLCJmb3JtYXQiLCJfdXNlTWVtbzIiLCJfc2xpY2VkVG9BcnJheSIsImRhdGVQaWNrZXJEYXRlIiwiZnVsbERhdGUiLCJmb3JtYXR0ZWRUaW1lIiwiZm9ybWF0dGVkRGF0ZSIsImRheVRpbWVQcm9ncmVzcyIsInRpbWVTbGlkZXJDb25maWciLCJ0aW1lcyIsImdldFRpbWVzIiwibGF0aXR1ZGUiLCJsb25naXR1ZGUiLCJkYXduIiwic3VucmlzZSIsInN1bnNldCIsImR1c2siLCJzdW5yaXNlVGltZSIsInN1bnNldFRpbWUiLCJvblRpbWVTbGlkZXJDaGFuZ2UiLCJ2YWx1ZSIsIk1hdGgiLCJmbG9vciIsIm5ld0Zvcm1hdHRlZFRpbWUiLCJuZXdUaW1lc3RhbXAiLCJzZXREYXRlIiwibmV3RGF0ZSIsIm5ld0Zvcm1hdHRlZERhdGUiLCJzZXRUaW1lIiwibmV3VGltZSIsInNldFRpbWV6b25lIiwibmV3VGltZXpvbmUiLCJzZXRDdXJyZW50RGF0ZVRpbWUiLCJmb3JtYXRTaG9ydFdlZWtkYXkiLCJsb2NhbGUiLCJnZXREYXkiLCJkaXNhYmxlRGF0ZVRpbWVQaWNrIiwicGljayIsImNyZWF0ZUVsZW1lbnQiLCJ0eXBlIiwiY2hlY2tlZCIsImlkIiwibGFiZWwiLCJmb3JtYXRNZXNzYWdlIiwiY29uZmlnIiwib25DbGljayIsImhlaWdodCIsImVmZmVjdCIsInBsYWNlIiwiZGVsYXlTaG93IiwibWF4RGV0YWlsIiwiY2FsZW5kYXJQcm9wcyIsIm1pbkRldGFpbCIsInNlbGVjdGVkIiwib25TZWxlY3QiLCJjdXJyZW50IiwiYW5pbWF0aW9uIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VmZmVjdHMvZWZmZWN0LXRpbWUtY29uZmlndXJhdG9yLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgUmVhY3QsIHt1c2VDYWxsYmFjaywgdXNlTWVtb30gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtpbmplY3RJbnRsLCBJbnRsU2hhcGV9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudC10aW1lem9uZSc7XG5pbXBvcnQgU3VuQ2FsYyBmcm9tICdzdW5jYWxjJztcblxuaW1wb3J0IHtNYXBTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge0Zvcm1hdHRlZE1lc3NhZ2V9IGZyb20gJ0BrZXBsZXIuZ2wvbG9jYWxpemF0aW9uJztcbmltcG9ydCB7Y2xhbXB9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtcbiAgTElHSFRfQU5EX1NIQURPV19FRkZFQ1RfVElNRV9NT0RFUyxcbiAgTGlnaHRBbmRTaGFkb3dFZmZlY3RUaW1lTW9kZSxcbiAgREVGQVVMVF9USU1FWk9ORVxufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge21hcFN0YXRlTGVuc30gZnJvbSAnQGtlcGxlci5nbC9yZWR1Y2Vycyc7XG5cbmltcG9ydCB7d2l0aFN0YXRlfSBmcm9tICcuLi9pbmplY3Rvcic7XG5pbXBvcnQge1N0eWxlZERhdGVQaWNrZXIgYXMgRGF0ZVBpY2tlciwgVG9vbHRpcH0gZnJvbSAnLi4vY29tbW9uL3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCBDaGVja2JveCBmcm9tICcuLi9jb21tb24vY2hlY2tib3gnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICcuLi9jb21tb24vZGF0YS10YWJsZS9idXR0b24nO1xuaW1wb3J0IHtMb2NhdGlvbk1hcmtlciwgQ2FsZW5kYXIsIENsb2NrLCBHbG9iZX0gZnJvbSAnLi4vY29tbW9uL2ljb25zJztcbmltcG9ydCBUaW1lem9uZVNlbGVjdG9yRmFjdG9yeSBmcm9tICcuL3RpbWV6b25lLXNlbGVjdG9yJztcbmltcG9ydCBFZmZlY3RUaW1lU2xpZGVyRmFjdG9yeSBmcm9tICcuL2VmZmVjdC10aW1lLXNsaWRlcic7XG5pbXBvcnQgRWZmZWN0VGltZVNlbGVjdG9yRmFjdG9yeSBmcm9tICcuL2VmZmVjdC10aW1lLXNlbGVjdG9yJztcblxuY29uc3QgREFZX01JTElTRUNPTkRTID0gMTAwMCAqIDYwICogNjAgKiAyNDtcblxuZXhwb3J0IHR5cGUgRWZmZWN0VGltZUNvbmZpZ3VyYXRvclByb3BzID0ge1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbiAgdGltZXpvbmU6IHN0cmluZztcbiAgdGltZU1vZGU6IExpZ2h0QW5kU2hhZG93RWZmZWN0VGltZU1vZGU7XG4gIG9uQ2hhbmdlOiAocGFyYW1ldGVyczoge1xuICAgIHRpbWVzdGFtcD86IG51bWJlciB8IG51bGw7XG4gICAgdGltZXpvbmU/OiBzdHJpbmc7XG4gICAgdGltZU1vZGU/OiBMaWdodEFuZFNoYWRvd0VmZmVjdFRpbWVNb2RlO1xuICB9KSA9PiB2b2lkO1xufTtcblxudHlwZSBTdHlsZWRXcmFwcGVyUHJvcHMgPSB7ZGlzYWJsZWQ/OiBib29sZWFuOyAkbWFyZ2luQm90dG9tPzogbnVtYmVyfTtcbmNvbnN0IFN0eWxlZFdyYXBwZXIgPSBzdHlsZWQuZGl2PFN0eWxlZFdyYXBwZXJQcm9wcz5gXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgbWFyZ2luLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy4kbWFyZ2luQm90dG9tID8/IDl9cHg7XG4gICR7cHJvcHMgPT4gKHByb3BzLmhpZGRlbiA/ICdkaXNwbGF5OiBub25lOycgOiAnJyl9XG5gO1xuXG50eXBlIFNsaWRlcldyYXBwZXJQcm9wcyA9IHtkaXNhYmxlZD86IGJvb2xlYW59O1xuY29uc3QgU2xpZGVyV3JhcHBlciA9IHN0eWxlZC5kaXY8U2xpZGVyV3JhcHBlclByb3BzPmBcbiAgbWFyZ2luLXRvcDogMTNweDtcbiAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgJHtwcm9wcyA9PiAocHJvcHMuaGlkZGVuID8gJ2Rpc3BsYXk6IG5vbmU7JyA6ICcnKX1cbmA7XG5cbmNvbnN0IFN0eWxlZEJ1dHRvbiA9IHN0eWxlZChCdXR0b24pYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5lZmZlY3RQYW5lbFRleHRTZWNvbmRhcnkyfTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pbnB1dEJnZH07XG4gIGhlaWdodDogMzJweDtcbiAgd2lkdGg6IDMycHg7XG4gIHBhZGRpbmc6IDVweDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgJjpob3ZlciB7XG4gICAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuZWZmZWN0UGFuZWxUZXh0TWFpbn07XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pbnB1dEJnZEhvdmVyfTtcbiAgfVxuYDtcblxuY29uc3QgU3R5bGVkUmFkaW8gPSBzdHlsZWQoQ2hlY2tib3gpYFxuICAua2ctY2hlY2tib3hfX2xhYmVsIHtcbiAgICBmb250LWZhbWlseTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5mb250RmFtaWx5fTtcbiAgICBmb250LXNpemU6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuaW5wdXRGb250U2l6ZX07XG4gIH1cbiAgLmtnLWNoZWNrYm94X19sYWJlbDpiZWZvcmUge1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGJvcmRlci1jb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5lZmZlY3RQYW5lbFRleHRTZWNvbmRhcnkyfTtcbiAgfVxuICBpbnB1dDpjaGVja2VkICsgLmtnLWNoZWNrYm94X19sYWJlbDpiZWZvcmUge1xuICAgIGJvcmRlci1jb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5hY3RpdmVDb2xvcn07XG4gIH1cbiAgLmtnLWNoZWNrYm94X19sYWJlbDphZnRlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5hY3RpdmVDb2xvcn07XG4gIH1cbmA7XG5cbmNvbnN0IFN0eWxlZEVmZmVjdFRpbWVDb25maWd1cmF0b3IgPSBzdHlsZWQuZGl2YFxuICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gIG1hcmdpbi10b3A6IDNweDtcbmA7XG5cbmNvbnN0IFN0eWxlZERhdGVQaWNrZXIgPSBzdHlsZWQuZGl2YFxuICAucmVhY3QtZGF0ZS1waWNrZXItLW9wZW4gLnJlYWN0LWRhdGUtcGlja2VyX193cmFwcGVyIC5yZWFjdC1kYXRlLXBpY2tlcl9faW5wdXRHcm91cCB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5hY3RpdmVDb2xvcn07XG4gICAgYm9yZGVyLXJhZGl1czogNHB4IDRweCAwcHggMHB4ICFpbXBvcnRhbnQ7XG4gIH1cbiAgLnJlYWN0LWNhbGVuZGFyX19uYXZpZ2F0aW9uX19wcmV2Mi1idXR0b24sXG4gIC5yZWFjdC1jYWxlbmRhcl9fbmF2aWdhdGlvbl9fbmV4dDItYnV0dG9uIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5yZWFjdC1jYWxlbmRhcl9fbmF2aWdhdGlvbl9fbGFiZWwge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDIwcHg7XG4gIH1cbiAgLnJlYWN0LWNhbGVuZGFyX19uYXZpZ2F0aW9uX19hcnJvdyB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMThweDtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gIH1cbiAgLnJlYWN0LWNhbGVuZGFyX19uYXZpZ2F0aW9uX19wcmV2LWJ1dHRvbiB7XG4gICAgcmlnaHQ6IDM2cHg7XG4gIH1cbiAgLnJlYWN0LWNhbGVuZGFyX19uYXZpZ2F0aW9uX19uZXh0LWJ1dHRvbiB7XG4gICAgcmlnaHQ6IDEycHg7XG4gIH1cbmA7XG5cbnR5cGUgV2l0aEljb25XcmFwcGVyUHJvcHMgPSB7d2lkdGg/OiBzdHJpbmd9O1xuY29uc3QgV2l0aEljb25XcmFwcGVyID0gc3R5bGVkLmRpdjxXaXRoSWNvbldyYXBwZXJQcm9wcz5gXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgJHtwcm9wcyA9PiAocHJvcHMud2lkdGggPyBgd2lkdGg6ICR7cHJvcHMud2lkdGh9YCA6ICcnKX1cbmA7XG5cbmNvbnN0IFN0eWxlZEV4dHJhSWNvbiA9IHN0eWxlZC5kaXZgXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwcHg7XG4gIGxlZnQ6IDhweDtcbiAgd2lkdGg6IDBweDtcbiAgaGVpZ2h0OiAzMnB4O1xuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5lZmZlY3RQYW5lbFRleHRTZWNvbmRhcnkyfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG5gO1xuXG50eXBlIFRleHRCbG9ja1Byb3BzID0ge1xuICB3aWR0aD86IHN0cmluZztcbn07XG5jb25zdCBUZXh0QmxvY2sgPSBzdHlsZWQuZGl2PFRleHRCbG9ja1Byb3BzPmBcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuZWZmZWN0UGFuZWxUZXh0U2Vjb25kYXJ5Mn07XG4gIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLndpZHRofTtcbiAgZm9udC1zaXplOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmlucHV0Rm9udFNpemV9O1xuYDtcblxuLyoqXG4gKiBDb252ZXJ0cyBkYXRlLCB0aW1lIGFuZCB0aW1lem9uZSBpbnRvIGEgVVRDIHRpbWVzdGFtcC5cbiAqIEBwYXJhbSBkYXRlU3RyIERhdGUgc3RyaW5nIGluIFlZWVktTU0tREQgZm9ybWF0LlxuICogQHBhcmFtIHRpbWVTdHIgVGltZSBzdHJpbmcgaW4gSEg6TU0gZm9ybWF0LlxuICogQHBhcmFtIHRpbWV6b25lIFRpbWV6b25lIG5hbWUuXG4gKiBAcmV0dXJucyBUaW1lc3RhbXAgb3IgbnVsbCBpZiBjYXNlIG9mIGJhZCBpbnB1dHMuXG4gKi9cbmNvbnN0IGdldFRpbWVzdGFtcCA9IChkYXRlU3RyOiBzdHJpbmcsIHRpbWVTdHI6IHN0cmluZywgdGltZXpvbmU6IHN0cmluZyk6IG51bWJlciB8IG51bGwgPT4ge1xuICAvLyBCYWlsIG91dCBlYXJseSBvbiBtYWxmb3JtZWQgaW5wdXRzIChlLmcuIHBhcnRpYWxseSBlZGl0ZWQgZGF0ZS90aW1lIGZpZWxkc1xuICAvLyB0aGF0IHByb2R1Y2UgdmFsdWVzIGxpa2UgXCJOYU46TmFOXCIpLiBPdGhlcndpc2UgbW9tZW50IGZhbGxzIGJhY2sgdG9cbiAgLy8gYG5ldyBEYXRlKClgIGFuZCBsb2dzIGEgZGVwcmVjYXRpb24gd2FybmluZyB3aGlsZSBzdGlsbCByZXR1cm5pbmcgaW52YWxpZC5cbiAgaWYgKCEvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9JC8udGVzdChkYXRlU3RyKSB8fCAhL15cXGR7Mn06XFxkezJ9JC8udGVzdCh0aW1lU3RyKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbGV0IHRpbWVzdGFtcDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIGNvbnN0IGN1cnIgPSBtb21lbnQudHooYCR7ZGF0ZVN0cn1UJHt0aW1lU3RyfTowMGAsICdZWVlZLU1NLUREVEhIOm1tOnNzJywgdHJ1ZSwgdGltZXpvbmUpO1xuICBpZiAoY3Vyci5pc1ZhbGlkKCkpIHtcbiAgICB0aW1lc3RhbXAgPSBjdXJyLnV0YygpLnZhbHVlT2YoKTtcbiAgfVxuICByZXR1cm4gdGltZXN0YW1wO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyB0aW1lIG9mIHRoZSBkYXkgaW50byBbMCwgMV0gcmFuZ2VcbiAqIEBwYXJhbSBkYXRlXG4gKiBAcmV0dXJuc1xuICovXG5jb25zdCBnZXREYXlSYXRpbyA9IChkYXRlOiBtb21lbnQuTW9tZW50KSA9PiB7XG4gIHJldHVybiAoKGRhdGUuaG91cnMoKSAqIDYwICsgZGF0ZS5taW51dGVzKCkpICogNjAgKiAxMDAwKSAvIERBWV9NSUxJU0VDT05EUztcbn07XG5cbkVmZmVjdFRpbWVDb25maWd1cmF0b3JGYWN0b3J5LmRlcHMgPSBbXG4gIFRpbWV6b25lU2VsZWN0b3JGYWN0b3J5LFxuICBFZmZlY3RUaW1lU2xpZGVyRmFjdG9yeSxcbiAgRWZmZWN0VGltZVNlbGVjdG9yRmFjdG9yeVxuXTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRWZmZWN0VGltZUNvbmZpZ3VyYXRvckZhY3RvcnkoXG4gIFRpbWV6b25lU2VsZWN0b3I6IFJldHVyblR5cGU8dHlwZW9mIFRpbWV6b25lU2VsZWN0b3JGYWN0b3J5PixcbiAgRWZmZWN0VGltZVNsaWRlcjogUmV0dXJuVHlwZTx0eXBlb2YgRWZmZWN0VGltZVNsaWRlckZhY3Rvcnk+LFxuICBFZmZlY3RUaW1lU2VsZWN0b3I6IFJldHVyblR5cGU8dHlwZW9mIEVmZmVjdFRpbWVTZWxlY3RvckZhY3Rvcnk+XG4pOiBSZWFjdC5GQzxFZmZlY3RUaW1lQ29uZmlndXJhdG9yUHJvcHM+IHtcbiAgY29uc3QgRWZmZWN0VGltZUNvbmZpZ3VyYXRvciA9ICh7XG4gICAgdGltZXN0YW1wLFxuICAgIHRpbWV6b25lOiBfdGltZXpvbmUsXG4gICAgdGltZU1vZGUsXG4gICAgb25DaGFuZ2U6IG9uVGltZVBhcmFtZXRlcnNDaGFuZ2VkLFxuICAgIG1hcFN0YXRlLFxuICAgIGludGxcbiAgfTogRWZmZWN0VGltZUNvbmZpZ3VyYXRvclByb3BzICYge2ludGw6IEludGxTaGFwZTsgbWFwU3RhdGU6IE1hcFN0YXRlfSkgPT4ge1xuICAgIGNvbnN0IHRpbWV6b25lID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICByZXR1cm4gbW9tZW50LnR6Lm5hbWVzKCkuaW5jbHVkZXMoX3RpbWV6b25lKSA/IF90aW1lem9uZSA6IERFRkFVTFRfVElNRVpPTkU7XG4gICAgfSwgW190aW1lem9uZV0pO1xuXG4gICAgY29uc3QgW2RhdGVQaWNrZXJEYXRlLCBmdWxsRGF0ZSwgZm9ybWF0dGVkVGltZSwgZm9ybWF0dGVkRGF0ZSwgZGF5VGltZVByb2dyZXNzXSA9XG4gICAgICB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgLy8gR3VhcmQgYWdhaW5zdCBhbiBpbnZhbGlkIHN0b3JlZCB0aW1lc3RhbXAgc28gd2UgbmV2ZXIgYnVpbGQgYW5cbiAgICAgICAgLy8gXCJJbnZhbGlkIERhdGVcIiBmb3IgdGhlIGRhdGUgcGlja2VyIChyZWFjdC1kYXRlLXBpY2tlciB0aHJvd3Mgb24gaXQpLlxuICAgICAgICBjb25zdCBzYWZlVGltZXN0YW1wID0gTnVtYmVyLmlzRmluaXRlKHRpbWVzdGFtcCkgPyB0aW1lc3RhbXAgOiBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCBjdXJyZW50TW9tZW50ID0gbW9tZW50LnR6KHNhZmVUaW1lc3RhbXAsIHRpbWV6b25lKTtcblxuICAgICAgICAvLyBTbGlkZXIgdmFsdWUgZnJvbSAwIHRvIDFcbiAgICAgICAgY29uc3QgZGF5UHJvZ3Jlc3MgPSBnZXREYXlSYXRpbyhjdXJyZW50TW9tZW50KTtcblxuICAgICAgICAvLyBEYXRlIHBpY2tlciBhbHdheXMgcmVuZGVycyBEYXRlIGluIGxvY2FsIHRpbWV6b25lXG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBkYXRlLnNldEZ1bGxZZWFyKGN1cnJlbnRNb21lbnQueWVhcigpLCBjdXJyZW50TW9tZW50Lm1vbnRoKCksIGN1cnJlbnRNb21lbnQuZGF0ZSgpKTtcbiAgICAgICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgY3VycmVudE1vbWVudC50b0RhdGUoKSxcbiAgICAgICAgICBjdXJyZW50TW9tZW50LmZvcm1hdCgnSEg6bW0nKSxcbiAgICAgICAgICBjdXJyZW50TW9tZW50LmZvcm1hdCgnWVlZWS1NTS1ERCcpLFxuICAgICAgICAgIGRheVByb2dyZXNzXG4gICAgICAgIF07XG4gICAgICB9LCBbdGltZXN0YW1wLCB0aW1lem9uZV0pO1xuXG4gICAgY29uc3QgdGltZVNsaWRlckNvbmZpZyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgY29uc3QgdGltZXMgPSBTdW5DYWxjLmdldFRpbWVzKGZ1bGxEYXRlLCBtYXBTdGF0ZS5sYXRpdHVkZSwgbWFwU3RhdGUubG9uZ2l0dWRlKTtcbiAgICAgIGNvbnN0IHtkYXduLCBzdW5yaXNlLCBzdW5zZXQsIGR1c2t9ID0gdGltZXM7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhd246IGdldERheVJhdGlvKG1vbWVudC50eihkYXduLnZhbHVlT2YoKSwgdGltZXpvbmUpKSxcbiAgICAgICAgc3VucmlzZTogZ2V0RGF5UmF0aW8obW9tZW50LnR6KHN1bnJpc2UudmFsdWVPZigpLCB0aW1lem9uZSkpLFxuICAgICAgICBzdW5zZXQ6IGdldERheVJhdGlvKG1vbWVudC50eihzdW5zZXQudmFsdWVPZigpLCB0aW1lem9uZSkpLFxuICAgICAgICBkdXNrOiBnZXREYXlSYXRpbyhtb21lbnQudHooZHVzay52YWx1ZU9mKCksIHRpbWV6b25lKSksXG4gICAgICAgIHN1bnJpc2VUaW1lOiBtb21lbnQudHooc3VucmlzZS52YWx1ZU9mKCksIHRpbWV6b25lKS5mb3JtYXQoJ2hoOm1tIEEnKSxcbiAgICAgICAgc3Vuc2V0VGltZTogbW9tZW50LnR6KHN1bnNldC52YWx1ZU9mKCksIHRpbWV6b25lKS5mb3JtYXQoJ2hoOm1tIEEnKVxuICAgICAgfTtcbiAgICB9LCBbZnVsbERhdGUsIHRpbWV6b25lLCBtYXBTdGF0ZS5sYXRpdHVkZSwgbWFwU3RhdGUubG9uZ2l0dWRlXSk7XG5cbiAgICBjb25zdCBvblRpbWVTbGlkZXJDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAgIHZhbHVlID0+IHtcbiAgICAgICAgY29uc3QgaG91cnMgPSBjbGFtcChbMCwgMjNdLCBNYXRoLmZsb29yKHZhbHVlWzFdICogMjQpKTtcbiAgICAgICAgY29uc3QgbWludXRlcyA9IGNsYW1wKFswLCA1OV0sIE1hdGguZmxvb3IoKHZhbHVlWzFdICogMjQgLSBob3VycykgKiA2MCkpO1xuXG4gICAgICAgIGNvbnN0IG5ld0Zvcm1hdHRlZFRpbWUgPSBgJHtob3VycyA8IDEwID8gYDAke2hvdXJzfWAgOiBob3Vyc306JHtcbiAgICAgICAgICBtaW51dGVzIDwgMTAgPyBgMCR7bWludXRlc31gIDogbWludXRlc1xuICAgICAgICB9YDtcbiAgICAgICAgY29uc3QgbmV3VGltZXN0YW1wID0gZ2V0VGltZXN0YW1wKGZvcm1hdHRlZERhdGUsIG5ld0Zvcm1hdHRlZFRpbWUsIHRpbWV6b25lKTtcbiAgICAgICAgb25UaW1lUGFyYW1ldGVyc0NoYW5nZWQoe3RpbWVzdGFtcDogbmV3VGltZXN0YW1wfSk7XG4gICAgICB9LFxuICAgICAgW2Zvcm1hdHRlZERhdGUsIHRpbWV6b25lLCBvblRpbWVQYXJhbWV0ZXJzQ2hhbmdlZF1cbiAgICApO1xuXG4gICAgY29uc3Qgc2V0RGF0ZSA9IHVzZUNhbGxiYWNrKFxuICAgICAgbmV3RGF0ZSA9PiB7XG4gICAgICAgIGlmICghbmV3RGF0ZSkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IG5ld0Zvcm1hdHRlZERhdGUgPSBtb21lbnQobmV3RGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG4gICAgICAgIGNvbnN0IG5ld1RpbWVzdGFtcCA9IGdldFRpbWVzdGFtcChuZXdGb3JtYXR0ZWREYXRlLCBmb3JtYXR0ZWRUaW1lLCB0aW1lem9uZSk7XG4gICAgICAgIG9uVGltZVBhcmFtZXRlcnNDaGFuZ2VkKHt0aW1lc3RhbXA6IG5ld1RpbWVzdGFtcH0pO1xuICAgICAgfSxcbiAgICAgIFtmb3JtYXR0ZWRUaW1lLCB0aW1lem9uZSwgb25UaW1lUGFyYW1ldGVyc0NoYW5nZWRdXG4gICAgKTtcblxuICAgIGNvbnN0IHNldFRpbWUgPSB1c2VDYWxsYmFjayhcbiAgICAgIG5ld1RpbWUgPT4ge1xuICAgICAgICBpZiAoIW5ld1RpbWUpIHJldHVybjtcblxuICAgICAgICBjb25zdCBuZXdUaW1lc3RhbXAgPSBnZXRUaW1lc3RhbXAoZm9ybWF0dGVkRGF0ZSwgbmV3VGltZSwgdGltZXpvbmUpO1xuICAgICAgICBvblRpbWVQYXJhbWV0ZXJzQ2hhbmdlZCh7dGltZXN0YW1wOiBuZXdUaW1lc3RhbXB9KTtcbiAgICAgIH0sXG4gICAgICBbZm9ybWF0dGVkRGF0ZSwgdGltZXpvbmUsIG9uVGltZVBhcmFtZXRlcnNDaGFuZ2VkXVxuICAgICk7XG5cbiAgICBjb25zdCBzZXRUaW1lem9uZSA9IHVzZUNhbGxiYWNrKFxuICAgICAgbmV3VGltZXpvbmUgPT4ge1xuICAgICAgICBpZiAoIW5ld1RpbWV6b25lKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgbmV3VGltZXN0YW1wID0gZ2V0VGltZXN0YW1wKGZvcm1hdHRlZERhdGUsIGZvcm1hdHRlZFRpbWUsIG5ld1RpbWV6b25lKTtcbiAgICAgICAgLy8gZGF0ZSBhbmQgdGltZSBhcmUgYWRqdXN0ZWQgdG8gaGF2ZSB0aGUgc2FtZSB2YWx1ZSBidXQgaW4gdGhlIG5ldyB0aW1lem9uZVxuICAgICAgICBvblRpbWVQYXJhbWV0ZXJzQ2hhbmdlZCh7dGltZXN0YW1wOiBuZXdUaW1lc3RhbXAsIHRpbWV6b25lOiBuZXdUaW1lem9uZX0pO1xuICAgICAgfSxcbiAgICAgIFtmb3JtYXR0ZWREYXRlLCBmb3JtYXR0ZWRUaW1lLCBvblRpbWVQYXJhbWV0ZXJzQ2hhbmdlZF1cbiAgICApO1xuXG4gICAgY29uc3Qgc2V0Q3VycmVudERhdGVUaW1lID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgb25UaW1lUGFyYW1ldGVyc0NoYW5nZWQoe3RpbWVzdGFtcDogbmV3IERhdGUoKS52YWx1ZU9mKCl9KTtcbiAgICB9LCBbb25UaW1lUGFyYW1ldGVyc0NoYW5nZWRdKTtcblxuICAgIGNvbnN0IGZvcm1hdFNob3J0V2Vla2RheSA9IHVzZUNhbGxiYWNrKChsb2NhbGUsIGRhdGUpID0+IHtcbiAgICAgIHJldHVybiBbJ1MnLCAnTScsICdUJywgJ1cnLCAnVCcsICdGJywgJ1MnXVtkYXRlLmdldERheSgpXTtcbiAgICB9LCBbXSk7XG5cbiAgICBjb25zdCBkaXNhYmxlRGF0ZVRpbWVQaWNrID0gdGltZU1vZGUgIT09IExJR0hUX0FORF9TSEFET1dfRUZGRUNUX1RJTUVfTU9ERVMucGljaztcblxuICAgIHJldHVybiAoXG4gICAgICA8U3R5bGVkRWZmZWN0VGltZUNvbmZpZ3VyYXRvcj5cbiAgICAgICAgPFN0eWxlZFdyYXBwZXIgJG1hcmdpbkJvdHRvbT17MTZ9PlxuICAgICAgICAgIDxTdHlsZWRSYWRpb1xuICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgIGNoZWNrZWQ9e3RpbWVNb2RlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVF9USU1FX01PREVTLnBpY2t9XG4gICAgICAgICAgICBpZD17YGVmZmVjdC10aW1lLXRvZ2dsZS11c2UtcGljay10aW1lYH1cbiAgICAgICAgICAgIGxhYmVsPXtpbnRsLmZvcm1hdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICBpZDogJ2VmZmVjdE1hbmFnZXIucGlja0RhdGVUaW1lJ1xuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICBvbkNoYW5nZT17KCkgPT4ge1xuICAgICAgICAgICAgICBvblRpbWVQYXJhbWV0ZXJzQ2hhbmdlZCh7dGltZU1vZGU6IExJR0hUX0FORF9TSEFET1dfRUZGRUNUX1RJTUVfTU9ERVMucGlja30pO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1N0eWxlZFdyYXBwZXI+XG5cbiAgICAgICAgPFNsaWRlcldyYXBwZXIgaGlkZGVuPXtkaXNhYmxlRGF0ZVRpbWVQaWNrfT5cbiAgICAgICAgICA8RWZmZWN0VGltZVNsaWRlclxuICAgICAgICAgICAgdmFsdWU9e2RheVRpbWVQcm9ncmVzc31cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtvblRpbWVTbGlkZXJDaGFuZ2V9XG4gICAgICAgICAgICBjb25maWc9e3RpbWVTbGlkZXJDb25maWd9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TbGlkZXJXcmFwcGVyPlxuXG4gICAgICAgIDxTdHlsZWRXcmFwcGVyIGhpZGRlbj17ZGlzYWJsZURhdGVUaW1lUGlja30gJG1hcmdpbkJvdHRvbT17Mn0+XG4gICAgICAgICAgPFRleHRCbG9jayB3aWR0aD1cIjMycHhcIiAvPlxuICAgICAgICAgIDxUZXh0QmxvY2sgd2lkdGg9XCIxMTBweFwiPlxuICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydlZmZlY3RNYW5hZ2VyLmRhdGUnfSAvPlxuICAgICAgICAgIDwvVGV4dEJsb2NrPlxuICAgICAgICAgIDxUZXh0QmxvY2sgd2lkdGg9XCIxMTBweFwiPlxuICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydlZmZlY3RNYW5hZ2VyLnRpbWUnfSAvPlxuICAgICAgICAgIDwvVGV4dEJsb2NrPlxuICAgICAgICA8L1N0eWxlZFdyYXBwZXI+XG5cbiAgICAgICAgPFN0eWxlZFdyYXBwZXIgaGlkZGVuPXtkaXNhYmxlRGF0ZVRpbWVQaWNrfSAkbWFyZ2luQm90dG9tPXsxNn0+XG4gICAgICAgICAgPFN0eWxlZEJ1dHRvbiBvbkNsaWNrPXtzZXRDdXJyZW50RGF0ZVRpbWV9IGRhdGEtZm9yPVwicGljay10aW1lLWJ1dHRvblwiIGRhdGEtdGlwPlxuICAgICAgICAgICAgPExvY2F0aW9uTWFya2VyIGhlaWdodD1cIjE2cHhcIiAvPlxuICAgICAgICAgICAgPFRvb2x0aXAgaWQ9XCJwaWNrLXRpbWUtYnV0dG9uXCIgZWZmZWN0PVwic29saWRcIiBwbGFjZT1cInRvcFwiIGRlbGF5U2hvdz17NTAwfT5cbiAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydlZmZlY3RNYW5hZ2VyLnBpY2tDdXJycmVudFRpbWUnfSAvPlxuICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgIDwvU3R5bGVkQnV0dG9uPlxuICAgICAgICAgIDxXaXRoSWNvbldyYXBwZXI+XG4gICAgICAgICAgICA8U3R5bGVkRGF0ZVBpY2tlcj5cbiAgICAgICAgICAgICAgPERhdGVQaWNrZXJcbiAgICAgICAgICAgICAgICB2YWx1ZT17ZGF0ZVBpY2tlckRhdGV9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e3NldERhdGV9XG4gICAgICAgICAgICAgICAgbWF4RGV0YWlsPVwibW9udGhcIlxuICAgICAgICAgICAgICAgIHsuLi4oe2NhbGVuZGFyUHJvcHM6IHttaW5EZXRhaWw6ICdtb250aCcsIGZvcm1hdFNob3J0V2Vla2RheX19IGFzIGFueSl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1N0eWxlZERhdGVQaWNrZXI+XG4gICAgICAgICAgICA8U3R5bGVkRXh0cmFJY29uPlxuICAgICAgICAgICAgICA8Q2FsZW5kYXIgd2lkdGg9XCIxNnB4XCIgaGVpZ2h0PVwiMzJweFwiIC8+XG4gICAgICAgICAgICA8L1N0eWxlZEV4dHJhSWNvbj5cbiAgICAgICAgICA8L1dpdGhJY29uV3JhcHBlcj5cbiAgICAgICAgICA8V2l0aEljb25XcmFwcGVyPlxuICAgICAgICAgICAgPEVmZmVjdFRpbWVTZWxlY3RvciB2YWx1ZT17Zm9ybWF0dGVkVGltZX0gb25DaGFuZ2U9e3NldFRpbWV9IC8+XG4gICAgICAgICAgICA8U3R5bGVkRXh0cmFJY29uPlxuICAgICAgICAgICAgICA8Q2xvY2sgd2lkdGg9XCIxNnB4XCIgaGVpZ2h0PVwiMzJweFwiIC8+XG4gICAgICAgICAgICA8L1N0eWxlZEV4dHJhSWNvbj5cbiAgICAgICAgICA8L1dpdGhJY29uV3JhcHBlcj5cbiAgICAgICAgPC9TdHlsZWRXcmFwcGVyPlxuXG4gICAgICAgIDxTdHlsZWRXcmFwcGVyIGhpZGRlbj17ZGlzYWJsZURhdGVUaW1lUGlja30gJG1hcmdpbkJvdHRvbT17Mn0+XG4gICAgICAgICAgPFRleHRCbG9jaz5cbiAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXsnZWZmZWN0TWFuYWdlci50aW1lem9uZSd9IC8+XG4gICAgICAgICAgPC9UZXh0QmxvY2s+XG4gICAgICAgIDwvU3R5bGVkV3JhcHBlcj5cblxuICAgICAgICA8U3R5bGVkV3JhcHBlciBoaWRkZW49e2Rpc2FibGVEYXRlVGltZVBpY2t9ICRtYXJnaW5Cb3R0b209ezI0fT5cbiAgICAgICAgICA8V2l0aEljb25XcmFwcGVyIHdpZHRoPXsnMTAwJSd9PlxuICAgICAgICAgICAgPFRpbWV6b25lU2VsZWN0b3Igc2VsZWN0ZWQ9e3RpbWV6b25lfSBvblNlbGVjdD17c2V0VGltZXpvbmV9IC8+XG4gICAgICAgICAgICA8U3R5bGVkRXh0cmFJY29uPlxuICAgICAgICAgICAgICA8R2xvYmUgd2lkdGg9XCIxNnB4XCIgaGVpZ2h0PVwiMzJweFwiIC8+XG4gICAgICAgICAgICA8L1N0eWxlZEV4dHJhSWNvbj5cbiAgICAgICAgICA8L1dpdGhJY29uV3JhcHBlcj5cbiAgICAgICAgPC9TdHlsZWRXcmFwcGVyPlxuXG4gICAgICAgIDxTdHlsZWRXcmFwcGVyICRtYXJnaW5Cb3R0b209ezE2fT5cbiAgICAgICAgICA8U3R5bGVkUmFkaW9cbiAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICBjaGVja2VkPXt0aW1lTW9kZSA9PT0gTElHSFRfQU5EX1NIQURPV19FRkZFQ1RfVElNRV9NT0RFUy5jdXJyZW50fVxuICAgICAgICAgICAgaWQ9e2BlZmZlY3QtdGltZS10b2dnbGUtdXNlLWN1cnJlbnQtdGltZWB9XG4gICAgICAgICAgICBsYWJlbD17aW50bC5mb3JtYXRNZXNzYWdlKHtcbiAgICAgICAgICAgICAgaWQ6ICdlZmZlY3RNYW5hZ2VyLmN1cnJlbnRUaW1lJ1xuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICBvbkNoYW5nZT17KCkgPT4ge1xuICAgICAgICAgICAgICBvblRpbWVQYXJhbWV0ZXJzQ2hhbmdlZCh7dGltZU1vZGU6IExJR0hUX0FORF9TSEFET1dfRUZGRUNUX1RJTUVfTU9ERVMuY3VycmVudH0pO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1N0eWxlZFdyYXBwZXI+XG5cbiAgICAgICAgPFN0eWxlZFdyYXBwZXIgJG1hcmdpbkJvdHRvbT17MTZ9PlxuICAgICAgICAgIDxTdHlsZWRSYWRpb1xuICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgIGNoZWNrZWQ9e3RpbWVNb2RlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVF9USU1FX01PREVTLmFuaW1hdGlvbn1cbiAgICAgICAgICAgIGlkPXtgZWZmZWN0LXRpbWUtdG9nZ2xlLXVzZS1hbmltYXRpb24tdGltZWB9XG4gICAgICAgICAgICBsYWJlbD17J0FuaW1hdGlvbiB0aW1lJ31cbiAgICAgICAgICAgIG9uQ2hhbmdlPXsoKSA9PiB7XG4gICAgICAgICAgICAgIG9uVGltZVBhcmFtZXRlcnNDaGFuZ2VkKHt0aW1lTW9kZTogTElHSFRfQU5EX1NIQURPV19FRkZFQ1RfVElNRV9NT0RFUy5hbmltYXRpb259KTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TdHlsZWRXcmFwcGVyPlxuICAgICAgPC9TdHlsZWRFZmZlY3RUaW1lQ29uZmlndXJhdG9yPlxuICAgICk7XG4gIH07XG5cbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBob3cgdG8gcHJvcGVybHkgdHlwZT9cbiAgcmV0dXJuIHdpdGhTdGF0ZShbbWFwU3RhdGVMZW5zXSkoaW5qZWN0SW50bChFZmZlY3RUaW1lQ29uZmlndXJhdG9yKSk7XG59XG4iXSwibWFwcGluZ3MiOiI7OztBQUFBO0FBQ0E7O0FBRUEsT0FBT0EsS0FBSyxJQUFHQyxXQUFXLEVBQUVDLE9BQU8sUUFBTyxPQUFPO0FBQ2pELFNBQVFDLFVBQVUsUUFBa0IsWUFBWTtBQUNoRCxPQUFPQyxNQUFNLE1BQU0sbUJBQW1CO0FBQ3RDLE9BQU9DLE1BQU0sTUFBTSxpQkFBaUI7QUFDcEMsT0FBT0MsT0FBTyxNQUFNLFNBQVM7QUFHN0IsU0FBUUMsZ0JBQWdCLFFBQU8seUJBQXlCO0FBQ3hELFNBQVFDLEtBQUssUUFBTyxrQkFBa0I7QUFDdEMsU0FDRUMsa0NBQWtDLEVBRWxDQyxnQkFBZ0IsUUFDWCxzQkFBc0I7QUFDN0IsU0FBUUMsWUFBWSxRQUFPLHFCQUFxQjtBQUVoRCxTQUFRQyxTQUFTLFFBQU8sYUFBYTtBQUNyQyxTQUFRQyxnQkFBZ0IsSUFBSUMsVUFBVSxFQUFFQyxPQUFPLFFBQU8sNkJBQTZCO0FBQ25GLE9BQU9DLFFBQVEsTUFBTSxvQkFBb0I7QUFDekMsT0FBT0MsTUFBTSxNQUFNLDZCQUE2QjtBQUNoRCxTQUFRQyxjQUFjLEVBQUVDLFFBQVEsRUFBRUMsS0FBSyxFQUFFQyxLQUFLLFFBQU8saUJBQWlCO0FBQ3RFLE9BQU9DLHVCQUF1QixNQUFNLHFCQUFxQjtBQUN6RCxPQUFPQyx1QkFBdUIsTUFBTSxzQkFBc0I7QUFDMUQsT0FBT0MseUJBQXlCLE1BQU0sd0JBQXdC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LGdCQUFnQjtNQUFDK0UsUUFBUSxFQUFFN0YsUUFBUztNQUFDOEYsUUFBUSxFQUFFeEI7SUFBWSxDQUFFLENBQUMsZUFDL0RwSSxLQUFBLENBQUE0SSxhQUFBLENBQUNyRixlQUFlLHFCQUNkdkQsS0FBQSxDQUFBNEksYUFBQSxDQUFDdkgsS0FBSztNQUFDZ0MsS0FBSyxFQUFDLE1BQU07TUFBQytGLE1BQU0sRUFBQztJQUFNLENBQUUsQ0FDcEIsQ0FDRixDQUNKLENBQUMsZUFFaEJwSixLQUFBLENBQUE0SSxhQUFBLENBQUNsSCxhQUFhO01BQUNNLGFBQWEsRUFBRTtJQUFHLGdCQUMvQmhDLEtBQUEsQ0FBQTRJLGFBQUEsQ0FBQ2pHLFdBQVc7TUFDVmtHLElBQUksRUFBQyxPQUFPO01BQ1pDLE9BQU8sRUFBRTVELFFBQVEsS0FBS3pFLGtDQUFrQyxDQUFDb0osT0FBUTtNQUNqRWQsRUFBRSx1Q0FBd0M7TUFDMUNDLEtBQUssRUFBRTFELElBQUksQ0FBQzJELGFBQWEsQ0FBQztRQUN4QkYsRUFBRSxFQUFFO01BQ04sQ0FBQyxDQUFFO01BQ0gzRCxRQUFRLEVBQUUsU0FBVkEsUUFBUUEsQ0FBQSxFQUFRO1FBQ2RELHVCQUF1QixDQUFDO1VBQUNELFFBQVEsRUFBRXpFLGtDQUFrQyxDQUFDb0o7UUFBTyxDQUFDLENBQUM7TUFDakY7SUFBRSxDQUNILENBQ1ksQ0FBQyxlQUVoQjdKLEtBQUEsQ0FBQTRJLGFBQUEsQ0FBQ2xILGFBQWE7TUFBQ00sYUFBYSxFQUFFO0lBQUcsZ0JBQy9CaEMsS0FBQSxDQUFBNEksYUFBQSxDQUFDakcsV0FBVztNQUNWa0csSUFBSSxFQUFDLE9BQU87TUFDWkMsT0FBTyxFQUFFNUQsUUFBUSxLQUFLekUsa0NBQWtDLENBQUNxSixTQUFVO01BQ25FZixFQUFFLHlDQUEwQztNQUM1Q0MsS0FBSyxFQUFFLGdCQUFpQjtNQUN4QjVELFFBQVEsRUFBRSxTQUFWQSxRQUFRQSxDQUFBLEVBQVE7UUFDZEQsdUJBQXVCLENBQUM7VUFBQ0QsUUFBUSxFQUFFekUsa0NBQWtDLENBQUNxSjtRQUFTLENBQUMsQ0FBQztNQUNuRjtJQUFFLENBQ0gsQ0FDWSxDQUNhLENBQUM7RUFFbkMsQ0FBQzs7RUFFRDtFQUNBLE9BQU9sSixTQUFTLENBQUMsQ0FBQ0QsWUFBWSxDQUFDLENBQUMsQ0FBQ1IsVUFBVSxDQUFDNEUsc0JBQXNCLENBQUMsQ0FBQztBQUN0RSIsImlnbm9yZUxpc3QiOltdfQ==
374
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZUNhbGxiYWNrIiwidXNlQ29udGV4dCIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsInVzZVNlbGVjdG9yIiwiaW5qZWN0SW50bCIsInN0eWxlZCIsIm1vbWVudCIsIlN1bkNhbGMiLCJGb3JtYXR0ZWRNZXNzYWdlIiwiY2xhbXAiLCJMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVF9USU1FX01PREVTIiwiREVGQVVMVF9USU1FWk9ORSIsIktlcGxlckdsQ29udGV4dCIsIlN0eWxlZERhdGVQaWNrZXIiLCJEYXRlUGlja2VyIiwiVG9vbHRpcCIsIkNoZWNrYm94IiwiQnV0dG9uIiwiTG9jYXRpb25NYXJrZXIiLCJDYWxlbmRhciIsIkNsb2NrIiwiR2xvYmUiLCJUaW1lem9uZVNlbGVjdG9yRmFjdG9yeSIsIkVmZmVjdFRpbWVTbGlkZXJGYWN0b3J5IiwiRWZmZWN0VGltZVNlbGVjdG9yRmFjdG9yeSIsIkRBWV9NSUxJU0VDT05EUyIsIlN0eWxlZFdyYXBwZXIiLCJkaXYiLCJfdGVtcGxhdGVPYmplY3QiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsIiwicHJvcHMiLCJfcHJvcHMkJG1hcmdpbkJvdHRvbSIsIiRtYXJnaW5Cb3R0b20iLCJoaWRkZW4iLCJTbGlkZXJXcmFwcGVyIiwiX3RlbXBsYXRlT2JqZWN0MiIsIlN0eWxlZEJ1dHRvbiIsIl90ZW1wbGF0ZU9iamVjdDMiLCJ0aGVtZSIsImVmZmVjdFBhbmVsVGV4dFNlY29uZGFyeTIiLCJpbnB1dEJnZCIsImVmZmVjdFBhbmVsVGV4dE1haW4iLCJpbnB1dEJnZEhvdmVyIiwiU3R5bGVkUmFkaW8iLCJfdGVtcGxhdGVPYmplY3Q0IiwiZm9udEZhbWlseSIsImlucHV0Rm9udFNpemUiLCJhY3RpdmVDb2xvciIsIlN0eWxlZEVmZmVjdFRpbWVDb25maWd1cmF0b3IiLCJfdGVtcGxhdGVPYmplY3Q1IiwiX3RlbXBsYXRlT2JqZWN0NiIsIldpdGhJY29uV3JhcHBlciIsIl90ZW1wbGF0ZU9iamVjdDciLCJ3aWR0aCIsImNvbmNhdCIsIlN0eWxlZEV4dHJhSWNvbiIsIl90ZW1wbGF0ZU9iamVjdDgiLCJUZXh0QmxvY2siLCJfdGVtcGxhdGVPYmplY3Q5IiwiZ2V0VGltZXN0YW1wIiwiZGF0ZVN0ciIsInRpbWVTdHIiLCJ0aW1lem9uZSIsInRlc3QiLCJ0aW1lc3RhbXAiLCJjdXJyIiwidHoiLCJpc1ZhbGlkIiwidXRjIiwidmFsdWVPZiIsImdldERheVJhdGlvIiwiZGF0ZSIsImhvdXJzIiwibWludXRlcyIsIm5vcm1hbGl6ZVRpbWVJbnB1dCIsIm5ld1RpbWUiLCJEYXRlIiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJnZXRUaW1lIiwiZm9ybWF0IiwidHJpbW1lZCIsInRyaW0iLCJzbGljZSIsInBhcnNlZCIsIkVmZmVjdFRpbWVDb25maWd1cmF0b3JGYWN0b3J5IiwiZGVwcyIsIlRpbWV6b25lU2VsZWN0b3IiLCJFZmZlY3RUaW1lU2xpZGVyIiwiRWZmZWN0VGltZVNlbGVjdG9yIiwiRWZmZWN0VGltZUNvbmZpZ3VyYXRvciIsIl9yZWYiLCJfdGltZXpvbmUiLCJ0aW1lTW9kZSIsIm9uVGltZVBhcmFtZXRlcnNDaGFuZ2VkIiwib25DaGFuZ2UiLCJpbnRsIiwiX3VzZUNvbnRleHQiLCJzZWxlY3RvciIsImxhdGl0dWRlIiwic3RhdGUiLCJfc2VsZWN0b3IkbWFwU3RhdGUkbGEiLCJfc2VsZWN0b3IiLCJtYXBTdGF0ZSIsImxvbmdpdHVkZSIsIl9zZWxlY3RvciRtYXBTdGF0ZSRsbyIsIl9zZWxlY3RvcjIiLCJuYW1lcyIsImluY2x1ZGVzIiwiX3VzZU1lbW8iLCJzYWZlVGltZXN0YW1wIiwibm93IiwiY3VycmVudE1vbWVudCIsImZ1bGxEYXRlIiwidG9EYXRlIiwiZm9ybWF0dGVkVGltZSIsImZvcm1hdHRlZERhdGUiLCJkYXlUaW1lUHJvZ3Jlc3MiLCJkYXRlUGlja2VyRGF0ZSIsIl9mb3JtYXR0ZWREYXRlJHNwbGl0JCIsInNwbGl0IiwibWFwIiwiX2Zvcm1hdHRlZERhdGUkc3BsaXQkMiIsIl9zbGljZWRUb0FycmF5IiwieWVhciIsIm1vbnRoIiwiZGF5IiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsInNsaWRlckRyYWdQcm9ncmVzcyIsInNldFNsaWRlckRyYWdQcm9ncmVzcyIsImlzU2xpZGVyRHJhZ2dpbmdSZWYiLCJlbmRTbGlkZXJEcmFnIiwiY3VycmVudCIsImRvY3VtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJ0aW1lU2xpZGVyQ29uZmlnIiwidGltZXMiLCJnZXRUaW1lcyIsImRhd24iLCJzdW5yaXNlIiwic3Vuc2V0IiwiZHVzayIsInN1bnJpc2VUaW1lIiwic3Vuc2V0VGltZSIsInRpbWVzdGFtcFJlZiIsImNvbW1pdFRpbWVzdGFtcCIsIm5ld1RpbWVzdGFtcCIsIm9uVGltZVNsaWRlckNoYW5nZSIsInZhbHVlIiwidG90YWxNaW51dGVzIiwiTWF0aCIsInJvdW5kIiwiZmxvb3IiLCJuZXdGb3JtYXR0ZWRUaW1lIiwic2V0RGF0ZSIsIm5ld0RhdGUiLCJuZXdGb3JtYXR0ZWREYXRlIiwic2V0VGltZSIsInNldFRpbWV6b25lIiwibmV3VGltZXpvbmUiLCJzZXRDdXJyZW50RGF0ZVRpbWUiLCJmb3JtYXRTaG9ydFdlZWtkYXkiLCJsb2NhbGUiLCJnZXREYXkiLCJkaXNhYmxlRGF0ZVRpbWVQaWNrIiwicGljayIsImNyZWF0ZUVsZW1lbnQiLCJ0eXBlIiwiY2hlY2tlZCIsImlkIiwibGFiZWwiLCJmb3JtYXRNZXNzYWdlIiwiY29uZmlnIiwib25DbGljayIsImhlaWdodCIsImVmZmVjdCIsInBsYWNlIiwiZGVsYXlTaG93IiwibWF4RGV0YWlsIiwiY2FsZW5kYXJQcm9wcyIsIm1pbkRldGFpbCIsInNlbGVjdGVkIiwib25TZWxlY3QiLCJhbmltYXRpb24iXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWZmZWN0cy9lZmZlY3QtdGltZS1jb25maWd1cmF0b3IudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge3VzZUNhbGxiYWNrLCB1c2VDb250ZXh0LCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7dXNlU2VsZWN0b3J9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7aW5qZWN0SW50bCwgSW50bFNoYXBlfSBmcm9tICdyZWFjdC1pbnRsJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQtdGltZXpvbmUnO1xuaW1wb3J0IFN1bkNhbGMgZnJvbSAnc3VuY2FsYyc7XG5cbmltcG9ydCB7Rm9ybWF0dGVkTWVzc2FnZX0gZnJvbSAnQGtlcGxlci5nbC9sb2NhbGl6YXRpb24nO1xuaW1wb3J0IHtjbGFtcH0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge1xuICBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVF9USU1FX01PREVTLFxuICBMaWdodEFuZFNoYWRvd0VmZmVjdFRpbWVNb2RlLFxuICBERUZBVUxUX1RJTUVaT05FXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcblxuaW1wb3J0IEtlcGxlckdsQ29udGV4dCBmcm9tICcuLi9jb250ZXh0JztcbmltcG9ydCB7U3R5bGVkRGF0ZVBpY2tlciBhcyBEYXRlUGlja2VyLCBUb29sdGlwfSBmcm9tICcuLi9jb21tb24vc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IENoZWNrYm94IGZyb20gJy4uL2NvbW1vbi9jaGVja2JveCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJy4uL2NvbW1vbi9kYXRhLXRhYmxlL2J1dHRvbic7XG5pbXBvcnQge0xvY2F0aW9uTWFya2VyLCBDYWxlbmRhciwgQ2xvY2ssIEdsb2JlfSBmcm9tICcuLi9jb21tb24vaWNvbnMnO1xuaW1wb3J0IFRpbWV6b25lU2VsZWN0b3JGYWN0b3J5IGZyb20gJy4vdGltZXpvbmUtc2VsZWN0b3InO1xuaW1wb3J0IEVmZmVjdFRpbWVTbGlkZXJGYWN0b3J5IGZyb20gJy4vZWZmZWN0LXRpbWUtc2xpZGVyJztcbmltcG9ydCBFZmZlY3RUaW1lU2VsZWN0b3JGYWN0b3J5IGZyb20gJy4vZWZmZWN0LXRpbWUtc2VsZWN0b3InO1xuXG5jb25zdCBEQVlfTUlMSVNFQ09ORFMgPSAxMDAwICogNjAgKiA2MCAqIDI0O1xuXG5leHBvcnQgdHlwZSBFZmZlY3RUaW1lQ29uZmlndXJhdG9yUHJvcHMgPSB7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICB0aW1lem9uZTogc3RyaW5nO1xuICB0aW1lTW9kZTogTGlnaHRBbmRTaGFkb3dFZmZlY3RUaW1lTW9kZTtcbiAgb25DaGFuZ2U6IChwYXJhbWV0ZXJzOiB7XG4gICAgdGltZXN0YW1wPzogbnVtYmVyIHwgbnVsbDtcbiAgICB0aW1lem9uZT86IHN0cmluZztcbiAgICB0aW1lTW9kZT86IExpZ2h0QW5kU2hhZG93RWZmZWN0VGltZU1vZGU7XG4gIH0pID0+IHZvaWQ7XG59O1xuXG50eXBlIFN0eWxlZFdyYXBwZXJQcm9wcyA9IHtkaXNhYmxlZD86IGJvb2xlYW47ICRtYXJnaW5Cb3R0b20/OiBudW1iZXJ9O1xuY29uc3QgU3R5bGVkV3JhcHBlciA9IHN0eWxlZC5kaXY8U3R5bGVkV3JhcHBlclByb3BzPmBcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBtYXJnaW4tYm90dG9tOiAke3Byb3BzID0+IHByb3BzLiRtYXJnaW5Cb3R0b20gPz8gOX1weDtcbiAgJHtwcm9wcyA9PiAocHJvcHMuaGlkZGVuID8gJ2Rpc3BsYXk6IG5vbmU7JyA6ICcnKX1cbmA7XG5cbnR5cGUgU2xpZGVyV3JhcHBlclByb3BzID0ge2Rpc2FibGVkPzogYm9vbGVhbn07XG5jb25zdCBTbGlkZXJXcmFwcGVyID0gc3R5bGVkLmRpdjxTbGlkZXJXcmFwcGVyUHJvcHM+YFxuICBtYXJnaW4tdG9wOiAxM3B4O1xuICBtYXJnaW4tYm90dG9tOiAxMnB4O1xuICAke3Byb3BzID0+IChwcm9wcy5oaWRkZW4gPyAnZGlzcGxheTogbm9uZTsnIDogJycpfVxuYDtcblxuY29uc3QgU3R5bGVkQnV0dG9uID0gc3R5bGVkKEJ1dHRvbilgXG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmVmZmVjdFBhbmVsVGV4dFNlY29uZGFyeTJ9O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmlucHV0QmdkfTtcbiAgaGVpZ2h0OiAzMnB4O1xuICB3aWR0aDogMzJweDtcbiAgcGFkZGluZzogNXB4O1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAmOmhvdmVyIHtcbiAgICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5lZmZlY3RQYW5lbFRleHRNYWlufTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmlucHV0QmdkSG92ZXJ9O1xuICB9XG5gO1xuXG5jb25zdCBTdHlsZWRSYWRpbyA9IHN0eWxlZChDaGVja2JveClgXG4gIC5rZy1jaGVja2JveF9fbGFiZWwge1xuICAgIGZvbnQtZmFtaWx5OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmZvbnRGYW1pbHl9O1xuICAgIGZvbnQtc2l6ZTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pbnB1dEZvbnRTaXplfTtcbiAgfVxuICAua2ctY2hlY2tib3hfX2xhYmVsOmJlZm9yZSB7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyLWNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmVmZmVjdFBhbmVsVGV4dFNlY29uZGFyeTJ9O1xuICB9XG4gIGlucHV0OmNoZWNrZWQgKyAua2ctY2hlY2tib3hfX2xhYmVsOmJlZm9yZSB7XG4gICAgYm9yZGVyLWNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmFjdGl2ZUNvbG9yfTtcbiAgfVxuICAua2ctY2hlY2tib3hfX2xhYmVsOmFmdGVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmFjdGl2ZUNvbG9yfTtcbiAgfVxuYDtcblxuY29uc3QgU3R5bGVkRWZmZWN0VGltZUNvbmZpZ3VyYXRvciA9IHN0eWxlZC5kaXZgXG4gIG1hcmdpbi1ib3R0b206IDhweDtcbiAgbWFyZ2luLXRvcDogM3B4O1xuYDtcblxuY29uc3QgU3R5bGVkRGF0ZVBpY2tlciA9IHN0eWxlZC5kaXZgXG4gIC5yZWFjdC1kYXRlLXBpY2tlci0tb3BlbiAucmVhY3QtZGF0ZS1waWNrZXJfX3dyYXBwZXIgLnJlYWN0LWRhdGUtcGlja2VyX19pbnB1dEdyb3VwIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAke3Byb3BzID0+IHByb3BzLnRoZW1lLmFjdGl2ZUNvbG9yfTtcbiAgICBib3JkZXItcmFkaXVzOiA0cHggNHB4IDBweCAwcHggIWltcG9ydGFudDtcbiAgfVxuICAucmVhY3QtY2FsZW5kYXJfX25hdmlnYXRpb25fX3ByZXYyLWJ1dHRvbixcbiAgLnJlYWN0LWNhbGVuZGFyX19uYXZpZ2F0aW9uX19uZXh0Mi1idXR0b24ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLnJlYWN0LWNhbGVuZGFyX19uYXZpZ2F0aW9uX19sYWJlbCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMjBweDtcbiAgfVxuICAucmVhY3QtY2FsZW5kYXJfX25hdmlnYXRpb25fX2Fycm93IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAxOHB4O1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgfVxuICAucmVhY3QtY2FsZW5kYXJfX25hdmlnYXRpb25fX3ByZXYtYnV0dG9uIHtcbiAgICByaWdodDogMzZweDtcbiAgfVxuICAucmVhY3QtY2FsZW5kYXJfX25hdmlnYXRpb25fX25leHQtYnV0dG9uIHtcbiAgICByaWdodDogMTJweDtcbiAgfVxuYDtcblxudHlwZSBXaXRoSWNvbldyYXBwZXJQcm9wcyA9IHt3aWR0aD86IHN0cmluZ307XG5jb25zdCBXaXRoSWNvbldyYXBwZXIgPSBzdHlsZWQuZGl2PFdpdGhJY29uV3JhcHBlclByb3BzPmBcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAke3Byb3BzID0+IChwcm9wcy53aWR0aCA/IGB3aWR0aDogJHtwcm9wcy53aWR0aH1gIDogJycpfVxuYDtcblxuY29uc3QgU3R5bGVkRXh0cmFJY29uID0gc3R5bGVkLmRpdmBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDBweDtcbiAgbGVmdDogOHB4O1xuICB3aWR0aDogMHB4O1xuICBoZWlnaHQ6IDMycHg7XG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmVmZmVjdFBhbmVsVGV4dFNlY29uZGFyeTJ9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbmA7XG5cbnR5cGUgVGV4dEJsb2NrUHJvcHMgPSB7XG4gIHdpZHRoPzogc3RyaW5nO1xufTtcbmNvbnN0IFRleHRCbG9jayA9IHN0eWxlZC5kaXY8VGV4dEJsb2NrUHJvcHM+YFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5lZmZlY3RQYW5lbFRleHRTZWNvbmRhcnkyfTtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gcHJvcHMud2lkdGh9O1xuICBmb250LXNpemU6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuaW5wdXRGb250U2l6ZX07XG5gO1xuXG4vKipcbiAqIENvbnZlcnRzIGRhdGUsIHRpbWUgYW5kIHRpbWV6b25lIGludG8gYSBVVEMgdGltZXN0YW1wLlxuICogQHBhcmFtIGRhdGVTdHIgRGF0ZSBzdHJpbmcgaW4gWVlZWS1NTS1ERCBmb3JtYXQuXG4gKiBAcGFyYW0gdGltZVN0ciBUaW1lIHN0cmluZyBpbiBISDpNTSBmb3JtYXQuXG4gKiBAcGFyYW0gdGltZXpvbmUgVGltZXpvbmUgbmFtZS5cbiAqIEByZXR1cm5zIFRpbWVzdGFtcCBvciBudWxsIGlmIGNhc2Ugb2YgYmFkIGlucHV0cy5cbiAqL1xuY29uc3QgZ2V0VGltZXN0YW1wID0gKGRhdGVTdHI6IHN0cmluZywgdGltZVN0cjogc3RyaW5nLCB0aW1lem9uZTogc3RyaW5nKTogbnVtYmVyIHwgbnVsbCA9PiB7XG4gIC8vIEJhaWwgb3V0IGVhcmx5IG9uIG1hbGZvcm1lZCBpbnB1dHMgKGUuZy4gcGFydGlhbGx5IGVkaXRlZCBkYXRlL3RpbWUgZmllbGRzXG4gIC8vIHRoYXQgcHJvZHVjZSB2YWx1ZXMgbGlrZSBcIk5hTjpOYU5cIikuIE90aGVyd2lzZSBtb21lbnQgZmFsbHMgYmFjayB0b1xuICAvLyBgbmV3IERhdGUoKWAgYW5kIGxvZ3MgYSBkZXByZWNhdGlvbiB3YXJuaW5nIHdoaWxlIHN0aWxsIHJldHVybmluZyBpbnZhbGlkLlxuICBpZiAoIS9eXFxkezR9LVxcZHsyfS1cXGR7Mn0kLy50ZXN0KGRhdGVTdHIpIHx8ICEvXlxcZHsyfTpcXGR7Mn0kLy50ZXN0KHRpbWVTdHIpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBsZXQgdGltZXN0YW1wOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgY29uc3QgY3VyciA9IG1vbWVudC50eihgJHtkYXRlU3RyfVQke3RpbWVTdHJ9OjAwYCwgJ1lZWVktTU0tRERUSEg6bW06c3MnLCB0cnVlLCB0aW1lem9uZSk7XG4gIGlmIChjdXJyLmlzVmFsaWQoKSkge1xuICAgIHRpbWVzdGFtcCA9IGN1cnIudXRjKCkudmFsdWVPZigpO1xuICB9XG4gIHJldHVybiB0aW1lc3RhbXA7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIHRpbWUgb2YgdGhlIGRheSBpbnRvIFswLCAxXSByYW5nZVxuICogQHBhcmFtIGRhdGVcbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IGdldERheVJhdGlvID0gKGRhdGU6IG1vbWVudC5Nb21lbnQpID0+IHtcbiAgcmV0dXJuICgoZGF0ZS5ob3VycygpICogNjAgKyBkYXRlLm1pbnV0ZXMoKSkgKiA2MCAqIDEwMDApIC8gREFZX01JTElTRUNPTkRTO1xufTtcblxuLyoqXG4gKiBOb3JtYWxpemUgVGltZVBpY2tlciBvdXRwdXQgKEhIOm1tLCBoOm1tIGEsIG9yIERhdGUpIHRvIEhIOm1tLlxuICogcmVhY3QtdGltZS1waWNrZXIgd2l0aCBmb3JtYXQgXCJoaDptbSBhXCIgY2FuIGVjaG8gYSAxMi1ob3VyIHN0cmluZyB3aGVuIGl0c1xuICogY29udHJvbGxlZCB2YWx1ZSBpcyByZXdyaXR0ZW4sIHdoaWNoIHdvdWxkIG90aGVyd2lzZSBwYXJzZSBhcyBhIGRpZmZlcmVudCBVVEMgdGltZS5cbiAqL1xuY29uc3Qgbm9ybWFsaXplVGltZUlucHV0ID0gKG5ld1RpbWU6IHVua25vd24pOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgaWYgKG5ld1RpbWUgaW5zdGFuY2VvZiBEYXRlICYmIE51bWJlci5pc0Zpbml0ZShuZXdUaW1lLmdldFRpbWUoKSkpIHtcbiAgICByZXR1cm4gbW9tZW50KG5ld1RpbWUpLmZvcm1hdCgnSEg6bW0nKTtcbiAgfVxuICBpZiAodHlwZW9mIG5ld1RpbWUgIT09ICdzdHJpbmcnIHx8ICFuZXdUaW1lKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgdHJpbW1lZCA9IG5ld1RpbWUudHJpbSgpO1xuICBpZiAoL15cXGR7Mn06XFxkezJ9Ly50ZXN0KHRyaW1tZWQpKSB7XG4gICAgcmV0dXJuIHRyaW1tZWQuc2xpY2UoMCwgNSk7XG4gIH1cbiAgY29uc3QgcGFyc2VkID0gbW9tZW50KHRyaW1tZWQsIFsnSEg6bW0nLCAnSDptbScsICdoaDptbSBBJywgJ2g6bW0gQScsICdoaDptbSBhJywgJ2g6bW0gYSddLCB0cnVlKTtcbiAgcmV0dXJuIHBhcnNlZC5pc1ZhbGlkKCkgPyBwYXJzZWQuZm9ybWF0KCdISDptbScpIDogbnVsbDtcbn07XG5cbkVmZmVjdFRpbWVDb25maWd1cmF0b3JGYWN0b3J5LmRlcHMgPSBbXG4gIFRpbWV6b25lU2VsZWN0b3JGYWN0b3J5LFxuICBFZmZlY3RUaW1lU2xpZGVyRmFjdG9yeSxcbiAgRWZmZWN0VGltZVNlbGVjdG9yRmFjdG9yeVxuXTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRWZmZWN0VGltZUNvbmZpZ3VyYXRvckZhY3RvcnkoXG4gIFRpbWV6b25lU2VsZWN0b3I6IFJldHVyblR5cGU8dHlwZW9mIFRpbWV6b25lU2VsZWN0b3JGYWN0b3J5PixcbiAgRWZmZWN0VGltZVNsaWRlcjogUmV0dXJuVHlwZTx0eXBlb2YgRWZmZWN0VGltZVNsaWRlckZhY3Rvcnk+LFxuICBFZmZlY3RUaW1lU2VsZWN0b3I6IFJldHVyblR5cGU8dHlwZW9mIEVmZmVjdFRpbWVTZWxlY3RvckZhY3Rvcnk+XG4pOiBSZWFjdC5GQzxFZmZlY3RUaW1lQ29uZmlndXJhdG9yUHJvcHM+IHtcbiAgY29uc3QgRWZmZWN0VGltZUNvbmZpZ3VyYXRvciA9ICh7XG4gICAgdGltZXN0YW1wLFxuICAgIHRpbWV6b25lOiBfdGltZXpvbmUsXG4gICAgdGltZU1vZGUsXG4gICAgb25DaGFuZ2U6IG9uVGltZVBhcmFtZXRlcnNDaGFuZ2VkLFxuICAgIGludGxcbiAgfTogRWZmZWN0VGltZUNvbmZpZ3VyYXRvclByb3BzICYge2ludGw6IEludGxTaGFwZX0pID0+IHtcbiAgICAvLyBTdWJzY3JpYmUgb25seSB0byBsYXQvbG9uLiBDb25uZWN0aW5nIHRoaXMgcGFuZWwgdG8gdGhlIGZ1bGwgc3RvcmUgKHZpYVxuICAgIC8vIHdpdGhTdGF0ZSkgcmUtcmVuZGVyZWQgaXQgb24gZXZlcnkgZWZmZWN0IHRpbWVzdGFtcCB0aWNrIHdoaWxlIGRyYWdnaW5nXG4gICAgLy8gdGhlIGRheS10aW1lIHNsaWRlciwgYW5kIHJlYWN0LXJlZHV4IG5lc3RlZCBjb25uZWN0IGxheW91dCBlZmZlY3RzIHRoZW5cbiAgICAvLyBoaXQgXCJNYXhpbXVtIHVwZGF0ZSBkZXB0aCBleGNlZWRlZFwiLlxuICAgIGNvbnN0IHtzZWxlY3Rvcn0gPSB1c2VDb250ZXh0KEtlcGxlckdsQ29udGV4dCk7XG4gICAgY29uc3QgbGF0aXR1ZGUgPSB1c2VTZWxlY3RvcihzdGF0ZSA9PiBzZWxlY3RvcihzdGF0ZSk/Lm1hcFN0YXRlPy5sYXRpdHVkZSA/PyAwKTtcbiAgICBjb25zdCBsb25naXR1ZGUgPSB1c2VTZWxlY3RvcihzdGF0ZSA9PiBzZWxlY3RvcihzdGF0ZSk/Lm1hcFN0YXRlPy5sb25naXR1ZGUgPz8gMCk7XG5cbiAgICBjb25zdCB0aW1lem9uZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgcmV0dXJuIG1vbWVudC50ei5uYW1lcygpLmluY2x1ZGVzKF90aW1lem9uZSkgPyBfdGltZXpvbmUgOiBERUZBVUxUX1RJTUVaT05FO1xuICAgIH0sIFtfdGltZXpvbmVdKTtcblxuICAgIGNvbnN0IHtmdWxsRGF0ZSwgZm9ybWF0dGVkVGltZSwgZm9ybWF0dGVkRGF0ZSwgZGF5VGltZVByb2dyZXNzfSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgLy8gR3VhcmQgYWdhaW5zdCBhbiBpbnZhbGlkIHN0b3JlZCB0aW1lc3RhbXAgc28gd2UgbmV2ZXIgYnVpbGQgYW5cbiAgICAgIC8vIFwiSW52YWxpZCBEYXRlXCIgZm9yIHRoZSBkYXRlIHBpY2tlciAocmVhY3QtZGF0ZS1waWNrZXIgdGhyb3dzIG9uIGl0KS5cbiAgICAgIGNvbnN0IHNhZmVUaW1lc3RhbXAgPSBOdW1iZXIuaXNGaW5pdGUodGltZXN0YW1wKSA/IHRpbWVzdGFtcCA6IERhdGUubm93KCk7XG4gICAgICBjb25zdCBjdXJyZW50TW9tZW50ID0gbW9tZW50LnR6KHNhZmVUaW1lc3RhbXAsIHRpbWV6b25lKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZnVsbERhdGU6IGN1cnJlbnRNb21lbnQudG9EYXRlKCksXG4gICAgICAgIGZvcm1hdHRlZFRpbWU6IGN1cnJlbnRNb21lbnQuZm9ybWF0KCdISDptbScpLFxuICAgICAgICBmb3JtYXR0ZWREYXRlOiBjdXJyZW50TW9tZW50LmZvcm1hdCgnWVlZWS1NTS1ERCcpLFxuICAgICAgICBkYXlUaW1lUHJvZ3Jlc3M6IGdldERheVJhdGlvKGN1cnJlbnRNb21lbnQpXG4gICAgICB9O1xuICAgIH0sIFt0aW1lc3RhbXAsIHRpbWV6b25lXSk7XG5cbiAgICAvLyBPbmx5IGFsbG9jYXRlIGEgbmV3IERhdGUgd2hlbiB0aGUgY2FsZW5kYXIgZGF5IGNoYW5nZXMuIEEgbmV3IG9iamVjdCBvblxuICAgIC8vIGV2ZXJ5IHRpbWVzdGFtcCB0aWNrIG1ha2VzIHJlYWN0LWRhdGUtcGlja2VyIGZpcmUgb25DaGFuZ2Ugd2hpbGUgZHJhZ2dpbmcuXG4gICAgY29uc3QgZGF0ZVBpY2tlckRhdGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgIGNvbnN0IFt5ZWFyLCBtb250aCwgZGF5XSA9IGZvcm1hdHRlZERhdGUuc3BsaXQoJy0nKS5tYXAoTnVtYmVyKTtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheSk7XG4gICAgfSwgW2Zvcm1hdHRlZERhdGVdKTtcblxuICAgIC8vIEtlZXAgdGhlIHNsaWRlciBvbiB0aGUgcG9pbnRlciB3aGlsZSBkcmFnZ2luZyBzbyBSZWR1eCBtaW51dGUtcXVhbnRpemF0aW9uXG4gICAgLy8gY2Fubm90IHNuYXAgaXQgKGFuZCBzbyBkYXRlL3RpbWUgd2lkZ2V0cyBjYW5ub3QgZWNobyBvbkNoYW5nZSBtaWQtZ2VzdHVyZSkuXG4gICAgY29uc3QgW3NsaWRlckRyYWdQcm9ncmVzcywgc2V0U2xpZGVyRHJhZ1Byb2dyZXNzXSA9IHVzZVN0YXRlPG51bWJlciB8IG51bGw+KG51bGwpO1xuICAgIGNvbnN0IGlzU2xpZGVyRHJhZ2dpbmdSZWYgPSB1c2VSZWYoZmFsc2UpO1xuXG4gICAgY29uc3QgZW5kU2xpZGVyRHJhZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgIGlzU2xpZGVyRHJhZ2dpbmdSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgc2V0U2xpZGVyRHJhZ1Byb2dyZXNzKG51bGwpO1xuICAgIH0sIFtdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgZW5kU2xpZGVyRHJhZyk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIGVuZFNsaWRlckRyYWcpO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIGVuZFNsaWRlckRyYWcpO1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIGVuZFNsaWRlckRyYWcpO1xuICAgICAgfTtcbiAgICB9LCBbZW5kU2xpZGVyRHJhZ10pO1xuXG4gICAgY29uc3QgdGltZVNsaWRlckNvbmZpZyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgY29uc3QgdGltZXMgPSBTdW5DYWxjLmdldFRpbWVzKGZ1bGxEYXRlLCBsYXRpdHVkZSwgbG9uZ2l0dWRlKTtcbiAgICAgIGNvbnN0IHtkYXduLCBzdW5yaXNlLCBzdW5zZXQsIGR1c2t9ID0gdGltZXM7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhd246IGdldERheVJhdGlvKG1vbWVudC50eihkYXduLnZhbHVlT2YoKSwgdGltZXpvbmUpKSxcbiAgICAgICAgc3VucmlzZTogZ2V0RGF5UmF0aW8obW9tZW50LnR6KHN1bnJpc2UudmFsdWVPZigpLCB0aW1lem9uZSkpLFxuICAgICAgICBzdW5zZXQ6IGdldERheVJhdGlvKG1vbWVudC50eihzdW5zZXQudmFsdWVPZigpLCB0aW1lem9uZSkpLFxuICAgICAgICBkdXNrOiBnZXREYXlSYXRpbyhtb21lbnQudHooZHVzay52YWx1ZU9mKCksIHRpbWV6b25lKSksXG4gICAgICAgIHN1bnJpc2VUaW1lOiBtb21lbnQudHooc3VucmlzZS52YWx1ZU9mKCksIHRpbWV6b25lKS5mb3JtYXQoJ2hoOm1tIEEnKSxcbiAgICAgICAgc3Vuc2V0VGltZTogbW9tZW50LnR6KHN1bnNldC52YWx1ZU9mKCksIHRpbWV6b25lKS5mb3JtYXQoJ2hoOm1tIEEnKVxuICAgICAgfTtcbiAgICB9LCBbZnVsbERhdGUsIHRpbWV6b25lLCBsYXRpdHVkZSwgbG9uZ2l0dWRlXSk7XG5cbiAgICAvLyBEYXRlL3RpbWUgd2lkZ2V0cyAoYW5kIHRoZSBzbGlkZXIgaXRzZWxmKSBjYW4gZWNobyBvbkNoYW5nZSB3aGVuIHRoZWlyXG4gICAgLy8gY29udHJvbGxlZCB2YWx1ZSBpcyByZXdyaXR0ZW4gZnJvbSB0aGUgc3RvcmUuIFNraXAgbm8tb3AgdGltZXN0YW1wXG4gICAgLy8gdXBkYXRlcyBzbyB0aG9zZSBlY2hvZXMgY2Fubm90IGRpc3BhdGNoIGluIGEgbG9vcC5cbiAgICBjb25zdCB0aW1lc3RhbXBSZWYgPSB1c2VSZWYodGltZXN0YW1wKTtcbiAgICB0aW1lc3RhbXBSZWYuY3VycmVudCA9IHRpbWVzdGFtcDtcblxuICAgIGNvbnN0IGNvbW1pdFRpbWVzdGFtcCA9IHVzZUNhbGxiYWNrKFxuICAgICAgKG5ld1RpbWVzdGFtcDogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgICBpZiAobmV3VGltZXN0YW1wID09IG51bGwgfHwgbmV3VGltZXN0YW1wID09PSB0aW1lc3RhbXBSZWYuY3VycmVudCkgcmV0dXJuO1xuICAgICAgICBvblRpbWVQYXJhbWV0ZXJzQ2hhbmdlZCh7dGltZXN0YW1wOiBuZXdUaW1lc3RhbXB9KTtcbiAgICAgIH0sXG4gICAgICBbb25UaW1lUGFyYW1ldGVyc0NoYW5nZWRdXG4gICAgKTtcblxuICAgIGNvbnN0IG9uVGltZVNsaWRlckNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgICAgdmFsdWUgPT4ge1xuICAgICAgICBpc1NsaWRlckRyYWdnaW5nUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICBzZXRTbGlkZXJEcmFnUHJvZ3Jlc3ModmFsdWVbMV0pO1xuICAgICAgICAvLyBSb3VuZCB0byB0aGUgbmVhcmVzdCBtaW51dGUuIEZsb29yaW5nICh2YWx1ZSAqIDI0KSB0aGVuIChmcmFjdGlvbiAqIDYwKVxuICAgICAgICAvLyBjYW4gZHJvcCBhIG1pbnV0ZSB0byBmbG9hdGluZyBwb2ludCAoZS5nLiAxNjo0NiDihpIgMTY6NDUpIGFuZCBkaXNwYXRjaFxuICAgICAgICAvLyBhIGZhbHNlIGNoYW5nZSB3aGVuIHRoZSBoYW5kbGUgaXMgYWxyZWFkeSBvbiB0aGUgY3VycmVudCB0aW1lLlxuICAgICAgICBjb25zdCB0b3RhbE1pbnV0ZXMgPSBjbGFtcChbMCwgMjQgKiA2MCAtIDFdLCBNYXRoLnJvdW5kKHZhbHVlWzFdICogMjQgKiA2MCkpO1xuICAgICAgICBjb25zdCBob3VycyA9IE1hdGguZmxvb3IodG90YWxNaW51dGVzIC8gNjApO1xuICAgICAgICBjb25zdCBtaW51dGVzID0gdG90YWxNaW51dGVzICUgNjA7XG5cbiAgICAgICAgY29uc3QgbmV3Rm9ybWF0dGVkVGltZSA9IGAke2hvdXJzIDwgMTAgPyBgMCR7aG91cnN9YCA6IGhvdXJzfToke1xuICAgICAgICAgIG1pbnV0ZXMgPCAxMCA/IGAwJHttaW51dGVzfWAgOiBtaW51dGVzXG4gICAgICAgIH1gO1xuICAgICAgICBjb21taXRUaW1lc3RhbXAoZ2V0VGltZXN0YW1wKGZvcm1hdHRlZERhdGUsIG5ld0Zvcm1hdHRlZFRpbWUsIHRpbWV6b25lKSk7XG4gICAgICB9LFxuICAgICAgW2Zvcm1hdHRlZERhdGUsIHRpbWV6b25lLCBjb21taXRUaW1lc3RhbXBdXG4gICAgKTtcblxuICAgIGNvbnN0IHNldERhdGUgPSB1c2VDYWxsYmFjayhcbiAgICAgIG5ld0RhdGUgPT4ge1xuICAgICAgICBpZiAoaXNTbGlkZXJEcmFnZ2luZ1JlZi5jdXJyZW50IHx8ICFuZXdEYXRlKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgbmV3Rm9ybWF0dGVkRGF0ZSA9IG1vbWVudChuZXdEYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcbiAgICAgICAgY29tbWl0VGltZXN0YW1wKGdldFRpbWVzdGFtcChuZXdGb3JtYXR0ZWREYXRlLCBmb3JtYXR0ZWRUaW1lLCB0aW1lem9uZSkpO1xuICAgICAgfSxcbiAgICAgIFtmb3JtYXR0ZWRUaW1lLCB0aW1lem9uZSwgY29tbWl0VGltZXN0YW1wXVxuICAgICk7XG5cbiAgICBjb25zdCBzZXRUaW1lID0gdXNlQ2FsbGJhY2soXG4gICAgICBuZXdUaW1lID0+IHtcbiAgICAgICAgaWYgKGlzU2xpZGVyRHJhZ2dpbmdSZWYuY3VycmVudCB8fCAhbmV3VGltZSkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHRpbWVTdHIgPSBub3JtYWxpemVUaW1lSW5wdXQobmV3VGltZSk7XG4gICAgICAgIGlmICghdGltZVN0cikgcmV0dXJuO1xuICAgICAgICBjb21taXRUaW1lc3RhbXAoZ2V0VGltZXN0YW1wKGZvcm1hdHRlZERhdGUsIHRpbWVTdHIsIHRpbWV6b25lKSk7XG4gICAgICB9LFxuICAgICAgW2Zvcm1hdHRlZERhdGUsIHRpbWV6b25lLCBjb21taXRUaW1lc3RhbXBdXG4gICAgKTtcblxuICAgIGNvbnN0IHNldFRpbWV6b25lID0gdXNlQ2FsbGJhY2soXG4gICAgICBuZXdUaW1lem9uZSA9PiB7XG4gICAgICAgIGlmICghbmV3VGltZXpvbmUpIHJldHVybjtcblxuICAgICAgICBjb25zdCBuZXdUaW1lc3RhbXAgPSBnZXRUaW1lc3RhbXAoZm9ybWF0dGVkRGF0ZSwgZm9ybWF0dGVkVGltZSwgbmV3VGltZXpvbmUpO1xuICAgICAgICAvLyBkYXRlIGFuZCB0aW1lIGFyZSBhZGp1c3RlZCB0byBoYXZlIHRoZSBzYW1lIHZhbHVlIGJ1dCBpbiB0aGUgbmV3IHRpbWV6b25lXG4gICAgICAgIG9uVGltZVBhcmFtZXRlcnNDaGFuZ2VkKHt0aW1lc3RhbXA6IG5ld1RpbWVzdGFtcCwgdGltZXpvbmU6IG5ld1RpbWV6b25lfSk7XG4gICAgICB9LFxuICAgICAgW2Zvcm1hdHRlZERhdGUsIGZvcm1hdHRlZFRpbWUsIG9uVGltZVBhcmFtZXRlcnNDaGFuZ2VkXVxuICAgICk7XG5cbiAgICBjb25zdCBzZXRDdXJyZW50RGF0ZVRpbWUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICBvblRpbWVQYXJhbWV0ZXJzQ2hhbmdlZCh7dGltZXN0YW1wOiBuZXcgRGF0ZSgpLnZhbHVlT2YoKX0pO1xuICAgIH0sIFtvblRpbWVQYXJhbWV0ZXJzQ2hhbmdlZF0pO1xuXG4gICAgY29uc3QgZm9ybWF0U2hvcnRXZWVrZGF5ID0gdXNlQ2FsbGJhY2soKGxvY2FsZSwgZGF0ZSkgPT4ge1xuICAgICAgcmV0dXJuIFsnUycsICdNJywgJ1QnLCAnVycsICdUJywgJ0YnLCAnUyddW2RhdGUuZ2V0RGF5KCldO1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IGRpc2FibGVEYXRlVGltZVBpY2sgPSB0aW1lTW9kZSAhPT0gTElHSFRfQU5EX1NIQURPV19FRkZFQ1RfVElNRV9NT0RFUy5waWNrO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTdHlsZWRFZmZlY3RUaW1lQ29uZmlndXJhdG9yPlxuICAgICAgICA8U3R5bGVkV3JhcHBlciAkbWFyZ2luQm90dG9tPXsxNn0+XG4gICAgICAgICAgPFN0eWxlZFJhZGlvXG4gICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgY2hlY2tlZD17dGltZU1vZGUgPT09IExJR0hUX0FORF9TSEFET1dfRUZGRUNUX1RJTUVfTU9ERVMucGlja31cbiAgICAgICAgICAgIGlkPXtgZWZmZWN0LXRpbWUtdG9nZ2xlLXVzZS1waWNrLXRpbWVgfVxuICAgICAgICAgICAgbGFiZWw9e2ludGwuZm9ybWF0TWVzc2FnZSh7XG4gICAgICAgICAgICAgIGlkOiAnZWZmZWN0TWFuYWdlci5waWNrRGF0ZVRpbWUnXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXsoKSA9PiB7XG4gICAgICAgICAgICAgIG9uVGltZVBhcmFtZXRlcnNDaGFuZ2VkKHt0aW1lTW9kZTogTElHSFRfQU5EX1NIQURPV19FRkZFQ1RfVElNRV9NT0RFUy5waWNrfSk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3R5bGVkV3JhcHBlcj5cblxuICAgICAgICA8U2xpZGVyV3JhcHBlciBoaWRkZW49e2Rpc2FibGVEYXRlVGltZVBpY2t9PlxuICAgICAgICAgIDxFZmZlY3RUaW1lU2xpZGVyXG4gICAgICAgICAgICB2YWx1ZT17c2xpZGVyRHJhZ1Byb2dyZXNzID8/IGRheVRpbWVQcm9ncmVzc31cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtvblRpbWVTbGlkZXJDaGFuZ2V9XG4gICAgICAgICAgICBjb25maWc9e3RpbWVTbGlkZXJDb25maWd9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TbGlkZXJXcmFwcGVyPlxuXG4gICAgICAgIDxTdHlsZWRXcmFwcGVyIGhpZGRlbj17ZGlzYWJsZURhdGVUaW1lUGlja30gJG1hcmdpbkJvdHRvbT17Mn0+XG4gICAgICAgICAgPFRleHRCbG9jayB3aWR0aD1cIjMycHhcIiAvPlxuICAgICAgICAgIDxUZXh0QmxvY2sgd2lkdGg9XCIxMTBweFwiPlxuICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydlZmZlY3RNYW5hZ2VyLmRhdGUnfSAvPlxuICAgICAgICAgIDwvVGV4dEJsb2NrPlxuICAgICAgICAgIDxUZXh0QmxvY2sgd2lkdGg9XCIxMTBweFwiPlxuICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydlZmZlY3RNYW5hZ2VyLnRpbWUnfSAvPlxuICAgICAgICAgIDwvVGV4dEJsb2NrPlxuICAgICAgICA8L1N0eWxlZFdyYXBwZXI+XG5cbiAgICAgICAgPFN0eWxlZFdyYXBwZXIgaGlkZGVuPXtkaXNhYmxlRGF0ZVRpbWVQaWNrfSAkbWFyZ2luQm90dG9tPXsxNn0+XG4gICAgICAgICAgPFN0eWxlZEJ1dHRvbiBvbkNsaWNrPXtzZXRDdXJyZW50RGF0ZVRpbWV9IGRhdGEtZm9yPVwicGljay10aW1lLWJ1dHRvblwiIGRhdGEtdGlwPlxuICAgICAgICAgICAgPExvY2F0aW9uTWFya2VyIGhlaWdodD1cIjE2cHhcIiAvPlxuICAgICAgICAgICAgPFRvb2x0aXAgaWQ9XCJwaWNrLXRpbWUtYnV0dG9uXCIgZWZmZWN0PVwic29saWRcIiBwbGFjZT1cInRvcFwiIGRlbGF5U2hvdz17NTAwfT5cbiAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydlZmZlY3RNYW5hZ2VyLnBpY2tDdXJycmVudFRpbWUnfSAvPlxuICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgIDwvU3R5bGVkQnV0dG9uPlxuICAgICAgICAgIDxXaXRoSWNvbldyYXBwZXI+XG4gICAgICAgICAgICA8U3R5bGVkRGF0ZVBpY2tlcj5cbiAgICAgICAgICAgICAgPERhdGVQaWNrZXJcbiAgICAgICAgICAgICAgICB2YWx1ZT17ZGF0ZVBpY2tlckRhdGV9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e3NldERhdGV9XG4gICAgICAgICAgICAgICAgbWF4RGV0YWlsPVwibW9udGhcIlxuICAgICAgICAgICAgICAgIHsuLi4oe2NhbGVuZGFyUHJvcHM6IHttaW5EZXRhaWw6ICdtb250aCcsIGZvcm1hdFNob3J0V2Vla2RheX19IGFzIGFueSl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1N0eWxlZERhdGVQaWNrZXI+XG4gICAgICAgICAgICA8U3R5bGVkRXh0cmFJY29uPlxuICAgICAgICAgICAgICA8Q2FsZW5kYXIgd2lkdGg9XCIxNnB4XCIgaGVpZ2h0PVwiMzJweFwiIC8+XG4gICAgICAgICAgICA8L1N0eWxlZEV4dHJhSWNvbj5cbiAgICAgICAgICA8L1dpdGhJY29uV3JhcHBlcj5cbiAgICAgICAgICA8V2l0aEljb25XcmFwcGVyPlxuICAgICAgICAgICAgPEVmZmVjdFRpbWVTZWxlY3RvciB2YWx1ZT17Zm9ybWF0dGVkVGltZX0gb25DaGFuZ2U9e3NldFRpbWV9IC8+XG4gICAgICAgICAgICA8U3R5bGVkRXh0cmFJY29uPlxuICAgICAgICAgICAgICA8Q2xvY2sgd2lkdGg9XCIxNnB4XCIgaGVpZ2h0PVwiMzJweFwiIC8+XG4gICAgICAgICAgICA8L1N0eWxlZEV4dHJhSWNvbj5cbiAgICAgICAgICA8L1dpdGhJY29uV3JhcHBlcj5cbiAgICAgICAgPC9TdHlsZWRXcmFwcGVyPlxuXG4gICAgICAgIDxTdHlsZWRXcmFwcGVyIGhpZGRlbj17ZGlzYWJsZURhdGVUaW1lUGlja30gJG1hcmdpbkJvdHRvbT17Mn0+XG4gICAgICAgICAgPFRleHRCbG9jaz5cbiAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXsnZWZmZWN0TWFuYWdlci50aW1lem9uZSd9IC8+XG4gICAgICAgICAgPC9UZXh0QmxvY2s+XG4gICAgICAgIDwvU3R5bGVkV3JhcHBlcj5cblxuICAgICAgICA8U3R5bGVkV3JhcHBlciBoaWRkZW49e2Rpc2FibGVEYXRlVGltZVBpY2t9ICRtYXJnaW5Cb3R0b209ezI0fT5cbiAgICAgICAgICA8V2l0aEljb25XcmFwcGVyIHdpZHRoPXsnMTAwJSd9PlxuICAgICAgICAgICAgPFRpbWV6b25lU2VsZWN0b3Igc2VsZWN0ZWQ9e3RpbWV6b25lfSBvblNlbGVjdD17c2V0VGltZXpvbmV9IC8+XG4gICAgICAgICAgICA8U3R5bGVkRXh0cmFJY29uPlxuICAgICAgICAgICAgICA8R2xvYmUgd2lkdGg9XCIxNnB4XCIgaGVpZ2h0PVwiMzJweFwiIC8+XG4gICAgICAgICAgICA8L1N0eWxlZEV4dHJhSWNvbj5cbiAgICAgICAgICA8L1dpdGhJY29uV3JhcHBlcj5cbiAgICAgICAgPC9TdHlsZWRXcmFwcGVyPlxuXG4gICAgICAgIDxTdHlsZWRXcmFwcGVyICRtYXJnaW5Cb3R0b209ezE2fT5cbiAgICAgICAgICA8U3R5bGVkUmFkaW9cbiAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICBjaGVja2VkPXt0aW1lTW9kZSA9PT0gTElHSFRfQU5EX1NIQURPV19FRkZFQ1RfVElNRV9NT0RFUy5jdXJyZW50fVxuICAgICAgICAgICAgaWQ9e2BlZmZlY3QtdGltZS10b2dnbGUtdXNlLWN1cnJlbnQtdGltZWB9XG4gICAgICAgICAgICBsYWJlbD17aW50bC5mb3JtYXRNZXNzYWdlKHtcbiAgICAgICAgICAgICAgaWQ6ICdlZmZlY3RNYW5hZ2VyLmN1cnJlbnRUaW1lJ1xuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICBvbkNoYW5nZT17KCkgPT4ge1xuICAgICAgICAgICAgICBvblRpbWVQYXJhbWV0ZXJzQ2hhbmdlZCh7dGltZU1vZGU6IExJR0hUX0FORF9TSEFET1dfRUZGRUNUX1RJTUVfTU9ERVMuY3VycmVudH0pO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1N0eWxlZFdyYXBwZXI+XG5cbiAgICAgICAgPFN0eWxlZFdyYXBwZXIgJG1hcmdpbkJvdHRvbT17MTZ9PlxuICAgICAgICAgIDxTdHlsZWRSYWRpb1xuICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgIGNoZWNrZWQ9e3RpbWVNb2RlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVF9USU1FX01PREVTLmFuaW1hdGlvbn1cbiAgICAgICAgICAgIGlkPXtgZWZmZWN0LXRpbWUtdG9nZ2xlLXVzZS1hbmltYXRpb24tdGltZWB9XG4gICAgICAgICAgICBsYWJlbD17J0FuaW1hdGlvbiB0aW1lJ31cbiAgICAgICAgICAgIG9uQ2hhbmdlPXsoKSA9PiB7XG4gICAgICAgICAgICAgIG9uVGltZVBhcmFtZXRlcnNDaGFuZ2VkKHt0aW1lTW9kZTogTElHSFRfQU5EX1NIQURPV19FRkZFQ1RfVElNRV9NT0RFUy5hbmltYXRpb259KTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TdHlsZWRXcmFwcGVyPlxuICAgICAgPC9TdHlsZWRFZmZlY3RUaW1lQ29uZmlndXJhdG9yPlxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIGluamVjdEludGwoRWZmZWN0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