@rivet-health/design-system 4.9.0 → 4.9.1

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.
@@ -1,17 +1,17 @@
1
- import { timeDay, timeMonth, timeWeek, timeYear } from 'd3-time';
1
+ import { utcDay, utcMonth, utcWeek, utcYear } from 'd3-time';
2
2
  export const intervals = ['year', 'quarter', 'month', 'week', 'day'];
3
3
  export function getTimeInterval(interval) {
4
4
  switch (interval) {
5
5
  case 'day':
6
- return timeDay;
6
+ return utcDay;
7
7
  case 'week':
8
- return timeWeek;
8
+ return utcWeek;
9
9
  case 'month':
10
- return timeMonth;
10
+ return utcMonth;
11
11
  case 'quarter':
12
- return timeMonth.every(3);
12
+ return utcMonth.every(3);
13
13
  case 'year':
14
- return timeYear;
14
+ return utcYear;
15
15
  }
16
16
  }
17
17
  export function getMinorIntervalFormat(interval) {
@@ -60,4 +60,4 @@ export function getIntervalTitle(interval) {
60
60
  return 'Days';
61
61
  }
62
62
  }
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJ2YWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdmlzdWFsaXphdGlvbi9pbnRlcnZhbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFL0UsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBVSxDQUFDO0FBRzlFLE1BQU0sVUFBVSxlQUFlLENBQUMsUUFBa0I7SUFDaEQsUUFBUSxRQUFRLEVBQUU7UUFDaEIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxPQUFPLENBQUM7UUFDakIsS0FBSyxNQUFNO1lBQ1QsT0FBTyxRQUFRLENBQUM7UUFDbEIsS0FBSyxPQUFPO1lBQ1YsT0FBTyxTQUFTLENBQUM7UUFDbkIsS0FBSyxTQUFTO1lBQ1osT0FBTyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBRSxDQUFDO1FBQzdCLEtBQUssTUFBTTtZQUNULE9BQU8sUUFBUSxDQUFDO0tBQ25CO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxRQUFrQjtJQUN2RCxRQUFRLFFBQVEsRUFBRTtRQUNoQixLQUFLLEtBQUssQ0FBQztRQUNYLEtBQUssTUFBTTtZQUNULE9BQU8sS0FBSyxDQUFDO1FBQ2YsS0FBSyxPQUFPO1lBQ1YsT0FBTyxJQUFJLENBQUM7UUFDZCxLQUFLLFNBQVM7WUFDWixPQUFPLEtBQUssQ0FBQztRQUNmLEtBQUssTUFBTTtZQUNULE9BQU8sSUFBSSxDQUFDO0tBQ2Y7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLFFBQWtCO0lBQ2pELFFBQVEsUUFBUSxFQUFFO1FBQ2hCLEtBQUssS0FBSyxDQUFDO1FBQ1gsS0FBSyxNQUFNO1lBQ1QsT0FBTyxPQUFPLENBQUM7UUFDakIsS0FBSyxPQUFPLENBQUM7UUFDYixLQUFLLFNBQVMsQ0FBQztRQUNmLEtBQUssTUFBTTtZQUNULE9BQU8sTUFBTSxDQUFDO0tBQ2pCO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxzQkFBc0IsQ0FDcEMsUUFBNkMsRUFDN0MsZ0JBQXlCO0lBRXpCLFFBQVEsUUFBUSxFQUFFO1FBQ2hCLEtBQUssTUFBTTtZQUNULE9BQU8sZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3RDLEtBQUssT0FBTztZQUNWLE9BQU8sZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0tBQzVDO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxRQUFrQjtJQUNqRCxRQUFRLFFBQVEsRUFBRTtRQUNoQixLQUFLLE1BQU07WUFDVCxPQUFPLE9BQU8sQ0FBQztRQUNqQixLQUFLLFNBQVM7WUFDWixPQUFPLFVBQVUsQ0FBQztRQUNwQixLQUFLLE9BQU87WUFDVixPQUFPLFFBQVEsQ0FBQztRQUNsQixLQUFLLE1BQU07WUFDVCxPQUFPLE9BQU8sQ0FBQztRQUNqQixLQUFLLEtBQUs7WUFDUixPQUFPLE1BQU0sQ0FBQztLQUNqQjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUaW1lSW50ZXJ2YWwsIHRpbWVEYXksIHRpbWVNb250aCwgdGltZVdlZWssIHRpbWVZZWFyIH0gZnJvbSAnZDMtdGltZSc7XG5cbmV4cG9ydCBjb25zdCBpbnRlcnZhbHMgPSBbJ3llYXInLCAncXVhcnRlcicsICdtb250aCcsICd3ZWVrJywgJ2RheSddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgSW50ZXJ2YWwgPSAodHlwZW9mIGludGVydmFscylbbnVtYmVyXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRpbWVJbnRlcnZhbChpbnRlcnZhbDogSW50ZXJ2YWwpOiBUaW1lSW50ZXJ2YWwge1xuICBzd2l0Y2ggKGludGVydmFsKSB7XG4gICAgY2FzZSAnZGF5JzpcbiAgICAgIHJldHVybiB0aW1lRGF5O1xuICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgcmV0dXJuIHRpbWVXZWVrO1xuICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgIHJldHVybiB0aW1lTW9udGg7XG4gICAgY2FzZSAncXVhcnRlcic6XG4gICAgICByZXR1cm4gdGltZU1vbnRoLmV2ZXJ5KDMpITtcbiAgICBjYXNlICd5ZWFyJzpcbiAgICAgIHJldHVybiB0aW1lWWVhcjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWlub3JJbnRlcnZhbEZvcm1hdChpbnRlcnZhbDogSW50ZXJ2YWwpIHtcbiAgc3dpdGNoIChpbnRlcnZhbCkge1xuICAgIGNhc2UgJ2RheSc6XG4gICAgY2FzZSAnd2Vlayc6XG4gICAgICByZXR1cm4gJyUtZCc7XG4gICAgY2FzZSAnbW9udGgnOlxuICAgICAgcmV0dXJuICclYic7XG4gICAgY2FzZSAncXVhcnRlcic6XG4gICAgICByZXR1cm4gJ1ElcSc7XG4gICAgY2FzZSAneWVhcic6XG4gICAgICByZXR1cm4gJyVZJztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFqb3JJbnRlcnZhbChpbnRlcnZhbDogSW50ZXJ2YWwpIHtcbiAgc3dpdGNoIChpbnRlcnZhbCkge1xuICAgIGNhc2UgJ2RheSc6XG4gICAgY2FzZSAnd2Vlayc6XG4gICAgICByZXR1cm4gJ21vbnRoJztcbiAgICBjYXNlICdtb250aCc6XG4gICAgY2FzZSAncXVhcnRlcic6XG4gICAgY2FzZSAneWVhcic6XG4gICAgICByZXR1cm4gJ3llYXInO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYWpvckludGVydmFsRm9ybWF0KFxuICBpbnRlcnZhbDogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0TWFqb3JJbnRlcnZhbD4sXG4gIGhhc011bHRpcGxlWWVhcnM6IGJvb2xlYW4sXG4pIHtcbiAgc3dpdGNoIChpbnRlcnZhbCkge1xuICAgIGNhc2UgJ3llYXInOlxuICAgICAgcmV0dXJuIGhhc011bHRpcGxlWWVhcnMgPyAnJVknIDogJyc7XG4gICAgY2FzZSAnbW9udGgnOlxuICAgICAgcmV0dXJuIGhhc011bHRpcGxlWWVhcnMgPyAnJWIgJVknIDogJyViJztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW50ZXJ2YWxUaXRsZShpbnRlcnZhbDogSW50ZXJ2YWwpIHtcbiAgc3dpdGNoIChpbnRlcnZhbCkge1xuICAgIGNhc2UgJ3llYXInOlxuICAgICAgcmV0dXJuICdZZWFycyc7XG4gICAgY2FzZSAncXVhcnRlcic6XG4gICAgICByZXR1cm4gJ1F1YXJ0ZXJzJztcbiAgICBjYXNlICdtb250aCc6XG4gICAgICByZXR1cm4gJ01vbnRocyc7XG4gICAgY2FzZSAnd2Vlayc6XG4gICAgICByZXR1cm4gJ1dlZWtzJztcbiAgICBjYXNlICdkYXknOlxuICAgICAgcmV0dXJuICdEYXlzJztcbiAgfVxufVxuIl19
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJ2YWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdmlzdWFsaXphdGlvbi9pbnRlcnZhbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFM0UsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBVSxDQUFDO0FBRzlFLE1BQU0sVUFBVSxlQUFlLENBQUMsUUFBa0I7SUFDaEQsUUFBUSxRQUFRLEVBQUU7UUFDaEIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxNQUFNLENBQUM7UUFDaEIsS0FBSyxNQUFNO1lBQ1QsT0FBTyxPQUFPLENBQUM7UUFDakIsS0FBSyxPQUFPO1lBQ1YsT0FBTyxRQUFRLENBQUM7UUFDbEIsS0FBSyxTQUFTO1lBQ1osT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBRSxDQUFDO1FBQzVCLEtBQUssTUFBTTtZQUNULE9BQU8sT0FBTyxDQUFDO0tBQ2xCO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxRQUFrQjtJQUN2RCxRQUFRLFFBQVEsRUFBRTtRQUNoQixLQUFLLEtBQUssQ0FBQztRQUNYLEtBQUssTUFBTTtZQUNULE9BQU8sS0FBSyxDQUFDO1FBQ2YsS0FBSyxPQUFPO1lBQ1YsT0FBTyxJQUFJLENBQUM7UUFDZCxLQUFLLFNBQVM7WUFDWixPQUFPLEtBQUssQ0FBQztRQUNmLEtBQUssTUFBTTtZQUNULE9BQU8sSUFBSSxDQUFDO0tBQ2Y7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLFFBQWtCO0lBQ2pELFFBQVEsUUFBUSxFQUFFO1FBQ2hCLEtBQUssS0FBSyxDQUFDO1FBQ1gsS0FBSyxNQUFNO1lBQ1QsT0FBTyxPQUFPLENBQUM7UUFDakIsS0FBSyxPQUFPLENBQUM7UUFDYixLQUFLLFNBQVMsQ0FBQztRQUNmLEtBQUssTUFBTTtZQUNULE9BQU8sTUFBTSxDQUFDO0tBQ2pCO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxzQkFBc0IsQ0FDcEMsUUFBNkMsRUFDN0MsZ0JBQXlCO0lBRXpCLFFBQVEsUUFBUSxFQUFFO1FBQ2hCLEtBQUssTUFBTTtZQUNULE9BQU8sZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3RDLEtBQUssT0FBTztZQUNWLE9BQU8sZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0tBQzVDO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxRQUFrQjtJQUNqRCxRQUFRLFFBQVEsRUFBRTtRQUNoQixLQUFLLE1BQU07WUFDVCxPQUFPLE9BQU8sQ0FBQztRQUNqQixLQUFLLFNBQVM7WUFDWixPQUFPLFVBQVUsQ0FBQztRQUNwQixLQUFLLE9BQU87WUFDVixPQUFPLFFBQVEsQ0FBQztRQUNsQixLQUFLLE1BQU07WUFDVCxPQUFPLE9BQU8sQ0FBQztRQUNqQixLQUFLLEtBQUs7WUFDUixPQUFPLE1BQU0sQ0FBQztLQUNqQjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUaW1lSW50ZXJ2YWwsIHV0Y0RheSwgdXRjTW9udGgsIHV0Y1dlZWssIHV0Y1llYXIgfSBmcm9tICdkMy10aW1lJztcblxuZXhwb3J0IGNvbnN0IGludGVydmFscyA9IFsneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF5J10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBJbnRlcnZhbCA9ICh0eXBlb2YgaW50ZXJ2YWxzKVtudW1iZXJdO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGltZUludGVydmFsKGludGVydmFsOiBJbnRlcnZhbCk6IFRpbWVJbnRlcnZhbCB7XG4gIHN3aXRjaCAoaW50ZXJ2YWwpIHtcbiAgICBjYXNlICdkYXknOlxuICAgICAgcmV0dXJuIHV0Y0RheTtcbiAgICBjYXNlICd3ZWVrJzpcbiAgICAgIHJldHVybiB1dGNXZWVrO1xuICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgIHJldHVybiB1dGNNb250aDtcbiAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgIHJldHVybiB1dGNNb250aC5ldmVyeSgzKSE7XG4gICAgY2FzZSAneWVhcic6XG4gICAgICByZXR1cm4gdXRjWWVhcjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWlub3JJbnRlcnZhbEZvcm1hdChpbnRlcnZhbDogSW50ZXJ2YWwpIHtcbiAgc3dpdGNoIChpbnRlcnZhbCkge1xuICAgIGNhc2UgJ2RheSc6XG4gICAgY2FzZSAnd2Vlayc6XG4gICAgICByZXR1cm4gJyUtZCc7XG4gICAgY2FzZSAnbW9udGgnOlxuICAgICAgcmV0dXJuICclYic7XG4gICAgY2FzZSAncXVhcnRlcic6XG4gICAgICByZXR1cm4gJ1ElcSc7XG4gICAgY2FzZSAneWVhcic6XG4gICAgICByZXR1cm4gJyVZJztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFqb3JJbnRlcnZhbChpbnRlcnZhbDogSW50ZXJ2YWwpIHtcbiAgc3dpdGNoIChpbnRlcnZhbCkge1xuICAgIGNhc2UgJ2RheSc6XG4gICAgY2FzZSAnd2Vlayc6XG4gICAgICByZXR1cm4gJ21vbnRoJztcbiAgICBjYXNlICdtb250aCc6XG4gICAgY2FzZSAncXVhcnRlcic6XG4gICAgY2FzZSAneWVhcic6XG4gICAgICByZXR1cm4gJ3llYXInO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYWpvckludGVydmFsRm9ybWF0KFxuICBpbnRlcnZhbDogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0TWFqb3JJbnRlcnZhbD4sXG4gIGhhc011bHRpcGxlWWVhcnM6IGJvb2xlYW4sXG4pIHtcbiAgc3dpdGNoIChpbnRlcnZhbCkge1xuICAgIGNhc2UgJ3llYXInOlxuICAgICAgcmV0dXJuIGhhc011bHRpcGxlWWVhcnMgPyAnJVknIDogJyc7XG4gICAgY2FzZSAnbW9udGgnOlxuICAgICAgcmV0dXJuIGhhc011bHRpcGxlWWVhcnMgPyAnJWIgJVknIDogJyViJztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW50ZXJ2YWxUaXRsZShpbnRlcnZhbDogSW50ZXJ2YWwpIHtcbiAgc3dpdGNoIChpbnRlcnZhbCkge1xuICAgIGNhc2UgJ3llYXInOlxuICAgICAgcmV0dXJuICdZZWFycyc7XG4gICAgY2FzZSAncXVhcnRlcic6XG4gICAgICByZXR1cm4gJ1F1YXJ0ZXJzJztcbiAgICBjYXNlICdtb250aCc6XG4gICAgICByZXR1cm4gJ01vbnRocyc7XG4gICAgY2FzZSAnd2Vlayc6XG4gICAgICByZXR1cm4gJ1dlZWtzJztcbiAgICBjYXNlICdkYXknOlxuICAgICAgcmV0dXJuICdEYXlzJztcbiAgfVxufVxuIl19
@@ -2,7 +2,7 @@ import { ChangeDetectionStrategy, Component, Input, ViewChild, } from '@angular/
2
2
  import { index } from 'd3-array';
3
3
  import { scaleBand, scaleLinear } from 'd3-scale';
4
4
  import { stack } from 'd3-shape';
5
- import { timeFormat } from 'd3-time-format';
5
+ import { utcFormat } from 'd3-time-format';
6
6
  import { BehaviorSubject, combineLatest, map, shareReplay, } from 'rxjs';
7
7
  import { getIntervalTitle, getMajorInterval, getMajorIntervalFormat, getMinorIntervalFormat, getTimeInterval, intervals, } from '../intervals';
8
8
  import { getColumnWidth, getDateRange, pointReducer, } from './stacked-column.helpers';
@@ -90,13 +90,13 @@ export class StackedColumnComponent {
90
90
  const [minDate, maxDate] = getDateRange(binnedData);
91
91
  const hasMultipleYears = minDate.getFullYear() < maxDate.getFullYear();
92
92
  const xMinorIntervalFormat = getMinorIntervalFormat(interval);
93
- const minorFormatter = timeFormat(xMinorIntervalFormat);
93
+ const minorFormatter = utcFormat(xMinorIntervalFormat);
94
94
  const minorTimeInterval = getTimeInterval(interval);
95
95
  const xSteps = minorTimeInterval.range(minorTimeInterval.floor(minDate), minorTimeInterval.floor(minorTimeInterval.offset(maxDate, 1)));
96
96
  const xMajorInterval = getMajorInterval(interval);
97
97
  const xMajorIntervalFormat = getMajorIntervalFormat(xMajorInterval, hasMultipleYears);
98
- const majorFormatter = timeFormat(xMajorIntervalFormat);
99
- const fullFormatter = timeFormat(`${xMinorIntervalFormat} ${xMajorIntervalFormat}`);
98
+ const majorFormatter = utcFormat(xMajorIntervalFormat);
99
+ const fullFormatter = utcFormat(`${xMinorIntervalFormat} ${xMajorIntervalFormat}`);
100
100
  const xOuterScale = scaleBand()
101
101
  .domain(xSteps.map(date => fullFormatter(date)))
102
102
  .range([0, width]);
@@ -326,4 +326,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
326
326
  type: ViewChild,
327
327
  args: ['controls']
328
328
  }] } });
329
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2tlZC1jb2x1bW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdmlzdWFsaXphdGlvbi9zdGFja2VkLWNvbHVtbi9zdGFja2VkLWNvbHVtbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi92aXN1YWxpemF0aW9uL3N0YWNrZWQtY29sdW1uL3N0YWNrZWQtY29sdW1uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULEtBQUssRUFFTCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNqQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQ0wsZUFBZSxFQUVmLGFBQWEsRUFDYixHQUFHLEVBQ0gsV0FBVyxHQUNaLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUVMLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsc0JBQXNCLEVBQ3RCLHNCQUFzQixFQUN0QixlQUFlLEVBQ2YsU0FBUyxHQUNWLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFDTCxjQUFjLEVBQ2QsWUFBWSxFQUNaLFlBQVksR0FDYixNQUFNLDBCQUEwQixDQUFDOzs7Ozs7O0FBRWxDLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUN2QixNQUFNLGdCQUFnQixHQUFhLE9BQU8sQ0FBQztBQUUzQyw2RUFBNkU7QUFDN0UsMkJBQTJCO0FBTzNCLE1BQU0sT0FBTyxzQkFBc0I7SUFObkM7UUFPbUIsV0FBTSxHQUFHLElBQUksZUFBZSxDQUMzQyxFQUFFLENBQ0gsQ0FBQztRQVNlLFdBQU0sR0FBRyxJQUFJLGVBQWUsQ0FBUyxHQUFHLENBQUMsQ0FBQztRQVMxQyxZQUFPLEdBQUcsSUFBSSxlQUFlLENBQVMsR0FBRyxDQUFDLENBQUM7UUFVckQsbUJBQWMsR0FBMEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFaEQsY0FBUyxHQUFHLElBQUksZUFBZSxDQUFXLGdCQUFnQixDQUFDLENBQUM7UUFZNUQsc0JBQWlCLEdBQTJCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUMzRSxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDVixNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxNQUFNLENBQ3BDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssYUFBYSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FDbkUsQ0FBQyxNQUFNLENBQUM7WUFFVCxNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUUvQyxPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ2pDLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDL0MsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FDcEMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFDM0IsWUFBWSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUNwRCxDQUFDLE1BQU0sQ0FBQztnQkFDVCxPQUFPLGlCQUFpQixHQUFHLFdBQVcsSUFBSSxXQUFXLENBQUM7WUFDeEQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsRUFDRixXQUFXLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUMvQyxDQUFDO1FBRU8scUJBQWdCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FDckQsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQ2QsU0FBUyxDQUFDLEdBQUcsQ0FDWCxDQUFDLFFBQVEsRUFBZ0MsRUFBRSxDQUFDLENBQUM7WUFDM0MsRUFBRSxFQUFFLFFBQVE7WUFDWixLQUFLLEVBQUUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO1NBQ2xDLENBQUMsQ0FDSCxDQUNGLEVBQ0QsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FDL0MsQ0FBQztRQUVPLDRCQUF1QixHQUFHLGFBQWEsQ0FBQztZQUMvQyxJQUFJLENBQUMsU0FBUztZQUNkLElBQUksQ0FBQyxnQkFBZ0I7U0FDdEIsQ0FBQyxDQUFDLElBQUksQ0FDTCxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFO1lBQzFCLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQWMsQ0FBQyxDQUFDO1lBQ2pFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ3hDLE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDNUMsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxXQUFXO29CQUFFLE9BQU8sSUFBSSxDQUFDO2dCQUUvQyxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7b0JBQy9ELFFBQVEsR0FBRyxZQUFZLENBQUM7Z0JBQzFCLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztvQkFDOUQsUUFBUSxHQUFHLFdBQVcsQ0FBQzthQUMxQjtZQUNELE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDO1FBQ3RELENBQUMsQ0FBQyxFQUNGLFdBQVcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQy9DLENBQUM7UUFFTyxzQkFBaUIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUM1RCxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUUsTUFBTSxDQUFDLEVBQWUsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUNyRSxDQUFDO1FBTU8sZ0JBQVcsR0FBRyxhQUFhLENBQUM7WUFDbkMsSUFBSSxDQUFDLE1BQU07WUFDWCxJQUFJLENBQUMsaUJBQWlCO1NBQ3ZCLENBQUMsQ0FBQyxJQUFJLENBQ0wsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUN4QixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFnQyxFQUFFO1lBQ2hELE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUUvQyxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3hCLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUEwQyxDQUFDO2dCQUNqRSxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUU7b0JBQy9CLE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNyRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTt3QkFDcEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7cUJBQ3JCO29CQUNELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUM5QjtnQkFDRCxPQUFPO29CQUNMLEdBQUcsTUFBTTtvQkFDVCxJQUFJLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO3dCQUN4RCxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDO3dCQUN6QixLQUFLLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQztxQkFDNUIsQ0FBQyxDQUFDO2lCQUNKLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUNILEVBQ0QsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FDL0MsQ0FBQztRQUVPLGNBQVMsR0FBRyxhQUFhLENBQUM7WUFDakMsSUFBSSxDQUFDLFdBQVc7WUFDaEIsSUFBSSxDQUFDLE1BQU07WUFDWCxJQUFJLENBQUMsT0FBTztZQUNaLElBQUksQ0FBQyxpQkFBaUI7U0FDdkIsQ0FBQyxDQUFDLElBQUksQ0FDTCxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUU7WUFDNUMsTUFBTSxPQUFPLEdBQUcsT0FBTyxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7WUFDekMsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBRW5CLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQ3BDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksYUFBYSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FDaEUsQ0FBQyxNQUFNLENBQUM7WUFDVCxNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQztZQUV4RCxNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNwRCxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdkUsTUFBTSxvQkFBb0IsR0FBRyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM5RCxNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUN4RCxNQUFNLGlCQUFpQixHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNwRCxNQUFNLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQ3BDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFDaEMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FDOUQsQ0FBQztZQUNGLE1BQU0sY0FBYyxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2xELE1BQU0sb0JBQW9CLEdBQUcsc0JBQXNCLENBQ2pELGNBQWMsRUFDZCxnQkFBZ0IsQ0FDakIsQ0FBQztZQUNGLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ3hELE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FDOUIsR0FBRyxvQkFBb0IsSUFBSSxvQkFBb0IsRUFBRSxDQUNsRCxDQUFDO1lBRUYsTUFBTSxXQUFXLEdBQUcsU0FBUyxFQUFFO2lCQUM1QixNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2lCQUMvQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUVyQixNQUFNLFdBQVcsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUMsQ0FBQztZQUNuRSxNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUM7WUFDeEIsTUFBTSxZQUFZLEdBQ2hCLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRTtnQkFDdEIsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUM7b0JBQ3JELFdBQVcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQztnQkFDdEQsQ0FBQyxDQUFDO1lBTUosTUFBTSxpQkFBaUIsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUNuRDs7O2tCQUdFO2dCQUNGLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQ25DLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQ1osR0FBRyxLQUFLO29CQUNSLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUN0QixHQUFHLEtBQUs7d0JBQ1IsTUFBTSxFQUFFLENBQUM7cUJBQ1YsQ0FBQyxDQUFDO2lCQUNKLEVBQ0QsRUFBRSxDQUNILENBQUM7Z0JBRUY7Ozs7Ozs7Ozs7O2tCQVdFO2dCQUNGLE1BQU0sWUFBWSxHQUF3QyxLQUFLLENBQzdELFlBQVksRUFDWixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQ1gsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDcEIsQ0FBQztnQkFFRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2tCQXdCRTtnQkFDRixNQUFNLE9BQU8sR0FBRyxLQUFLLEVBRWxCO3FCQUNBLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUNqQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRTtvQkFDekIsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBRSxDQUFDLEtBQUssQ0FBQztnQkFDL0IsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBRW5CLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDbkMsQ0FBQyxDQUFDLENBQUM7WUFFSCw2RUFBNkU7WUFDN0UsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ2xCLHlCQUF5QjtZQUN6QixpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFO2dCQUN0RCxpQkFBaUI7Z0JBQ2pCLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ2pELG1CQUFtQjtvQkFDbkIsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTt3QkFDdEMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxhQUFhLEVBQUU7NEJBQ25DLE9BQU87eUJBQ1I7d0JBQ0QsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3BELENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLFNBQVMsS0FBSyxDQUFDO2dCQUFFLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDbkMsTUFBTSxNQUFNLEdBQUcsV0FBVyxFQUFFO2lCQUN6QixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7aUJBQ3RCLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxPQUFPLEdBQUcsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFFMUMsTUFBTSxLQUFLLEdBU0wsRUFBRSxDQUFDO1lBQ1QsSUFBSSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7WUFDMUIseUJBQXlCO1lBQ3pCLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUM3RCxJQUFJLGdCQUFnQixHQUFHLEtBQUssQ0FBQztnQkFDN0IsaUJBQWlCO2dCQUNqQixDQUFDLEdBQUcsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQzFELG1CQUFtQjtvQkFDbkIsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUN0RCxnREFBZ0Q7d0JBQ2hELE1BQU0sQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUUxQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLGFBQWEsRUFBRTs0QkFDN0MsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO3lCQUN6Qjt3QkFDRCxNQUFNLEtBQUssR0FDVCxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO3dCQUM5RCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO3dCQUNsRCxNQUFNLENBQUMsR0FDTCxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQ3ZDLFlBQVk7NEJBQ1osV0FBVyxHQUFHLENBQUMsS0FBSyxHQUFHLGlCQUFpQixDQUFDOzRCQUN6QyxhQUFhLEdBQUcsQ0FBQyxLQUFLLEdBQUcsaUJBQWlCLENBQUMsQ0FBQzt3QkFDOUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQzt3QkFDcEMsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO3dCQUNkLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksYUFBYSxFQUFFOzRCQUM3QyxJQUFJLEdBQUcsT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDLFVBQVUsR0FBRyxDQUFDO3lCQUNoRDt3QkFFRCxLQUFLLENBQUMsSUFBSSxDQUFDOzRCQUNULFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFOzRCQUN6QixDQUFDOzRCQUNELENBQUM7NEJBQ0QsS0FBSzs0QkFDTCxNQUFNOzRCQUNOLElBQUk7NEJBQ0osT0FBTyxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLFNBQVM7NEJBQy9DLFdBQVc7eUJBQ1osQ0FBQyxDQUFDO29CQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksZ0JBQWdCLEVBQUU7b0JBQ3BCLGlCQUFpQixFQUFFLENBQUM7aUJBQ3JCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDdEMsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ3pCLEtBQUssRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDO2dCQUMzQixDQUFDLEVBQ0MsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUM7YUFDeEUsQ0FBQyxDQUFDLENBQUM7WUFDSixNQUFNLFdBQVcsR0FDZixRQUFRLEtBQUssTUFBTTtnQkFDakIsQ0FBQyxDQUFDLE1BQU07cUJBQ0gsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDWixTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRTtvQkFDekIsS0FBSyxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUM7b0JBQzNCLENBQUMsRUFDQyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ3ZDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDO2lCQUM5QixDQUFDLENBQUM7cUJBQ0YsTUFBTSxDQUNMLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUNqQixDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQy9DO2dCQUNMLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFFVCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRS9CLE1BQU0sY0FBYyxHQUNsQixDQUFDLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsR0FBRyxXQUFXO2dCQUN2RCxDQUFDLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUFDLEdBQUcsYUFBYSxDQUFDO1lBQ2hFLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNyQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDekIsQ0FBQyxFQUNDLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdkMsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQztnQkFDaEQsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUM7Z0JBQ3BCLEtBQUssRUFBRSxjQUFjO2dCQUNyQixNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7YUFDdEMsQ0FBQyxDQUFDLENBQUM7WUFFSixPQUFPO2dCQUNMLFdBQVc7Z0JBQ1gsVUFBVTtnQkFDVixLQUFLO2dCQUNMLE9BQU87Z0JBQ1AsV0FBVztnQkFDWCxXQUFXO2dCQUNYLE1BQU07Z0JBQ04sTUFBTTthQUNQLENBQUM7UUFDSixDQUFDLENBQUMsRUFDRixXQUFXLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUMvQyxDQUFDO1FBRU8sV0FBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNoQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FDVixLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQ3RFLEVBQ0QsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FDL0MsQ0FBQztRQUVPLGlCQUFZLEdBQUcsSUFBSSxlQUFlLENBR2pDLElBQUksQ0FBQyxDQUFDO1FBRVAsYUFBUSxHQUFHLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUN6RSxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFO1lBQzlCLElBQUksQ0FBQyxXQUFXO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBRTlCLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxNQUFNO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQ3pCLE1BQU0sTUFBTSxHQUFvQixNQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUdoRSxNQUFNLE9BQU8sR0FBYSxRQUFRLENBQUMsS0FBSztpQkFDckMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxXQUFXLENBQUMsU0FBUyxDQUFDO2lCQUN4RCxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNaLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLO2dCQUNwQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQzthQUNuRCxDQUFDLENBQUMsQ0FBQztZQUVOLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDLEVBQ0YsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FDL0MsQ0FBQztLQUNIO0lBMVpDLElBQ1csS0FBSyxDQUFDLENBQWlDO1FBQ2hELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFDRCxJQUFXLEtBQUs7UUFDZCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUdELElBQ1csS0FBSyxDQUFDLENBQVM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUNELElBQVcsS0FBSztRQUNkLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBR0QsSUFDVyxNQUFNLENBQUMsQ0FBUztRQUN6QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBQ0QsSUFBVyxNQUFNO1FBQ2YsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFNRCxJQUNXLFFBQVEsQ0FBQyxDQUFXO1FBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFDRCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUE4REQsaUJBQWlCLENBQUMsTUFBb0M7UUFDcEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsRUFBYyxDQUFDO0lBQ3hDLENBQUM7O21IQXhHVSxzQkFBc0I7dUdBQXRCLHNCQUFzQixzUkM3Q25DLG9zSEF3SUE7MkZEM0ZhLHNCQUFzQjtrQkFObEMsU0FBUzsrQkFDRSxvQkFBb0IsbUJBR2IsdUJBQXVCLENBQUMsTUFBTTs4QkFPcEMsS0FBSztzQkFEZixLQUFLO2dCQVVLLEtBQUs7c0JBRGYsS0FBSztnQkFVSyxNQUFNO3NCQURoQixLQUFLO2dCQVNDLGNBQWM7c0JBRHBCLEtBQUs7Z0JBS0ssUUFBUTtzQkFEbEIsS0FBSztnQkFTVSxRQUFRO3NCQUR2QixTQUFTO3VCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpbmRleCB9IGZyb20gJ2QzLWFycmF5JztcbmltcG9ydCB7IHNjYWxlQmFuZCwgc2NhbGVMaW5lYXIgfSBmcm9tICdkMy1zY2FsZSc7XG5pbXBvcnQgeyBzdGFjayB9IGZyb20gJ2QzLXNoYXBlJztcbmltcG9ydCB7IHRpbWVGb3JtYXQgfSBmcm9tICdkMy10aW1lLWZvcm1hdCc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIE9ic2VydmFibGUsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIG1hcCxcbiAgc2hhcmVSZXBsYXksXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU2luZ2xlU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vaW5wdXQvc2luZ2xlLXNlbGVjdC9zaW5nbGUtc2VsZWN0LmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBJbnRlcnZhbCxcbiAgZ2V0SW50ZXJ2YWxUaXRsZSxcbiAgZ2V0TWFqb3JJbnRlcnZhbCxcbiAgZ2V0TWFqb3JJbnRlcnZhbEZvcm1hdCxcbiAgZ2V0TWlub3JJbnRlcnZhbEZvcm1hdCxcbiAgZ2V0VGltZUludGVydmFsLFxuICBpbnRlcnZhbHMsXG59IGZyb20gJy4uL2ludGVydmFscyc7XG5pbXBvcnQge1xuICBnZXRDb2x1bW5XaWR0aCxcbiAgZ2V0RGF0ZVJhbmdlLFxuICBwb2ludFJlZHVjZXIsXG59IGZyb20gJy4vc3RhY2tlZC1jb2x1bW4uaGVscGVycyc7XG5cbmNvbnN0IE1BWF9DT0xVTU5TID0gNzI7XG5jb25zdCBERUZBVUxUX0lOVEVSVkFMOiBJbnRlcnZhbCA9ICdtb250aCc7XG5cbi8vIFRPRE86IG9uY2Ugd2UgdXBncmFkZSB0byBBbmd1bGFyIDE2LCB0aGlzIGNvbXBvbmVudCBjYW4gYmUgY2xlYW5lZCB1cCB3aXRoXG4vLyBzaWduYWxzIGluc3RlYWQgb2YgUnhKUy5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Jpdi1zdGFja2VkLWNvbHVtbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdGFja2VkLWNvbHVtbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3N0YWNrZWQtY29sdW1uLmNvbXBvbmVudC5jc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFN0YWNrZWRDb2x1bW5Db21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IGlucHV0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U3RhY2tlZENvbHVtbkNvbXBvbmVudC5TdGFja1tdPihcbiAgICBbXSxcbiAgKTtcbiAgQElucHV0KClcbiAgcHVibGljIHNldCBpbnB1dCh2OiBTdGFja2VkQ29sdW1uQ29tcG9uZW50LlN0YWNrW10pIHtcbiAgICB0aGlzLmlucHV0JC5uZXh0KHYpO1xuICB9XG4gIHB1YmxpYyBnZXQgaW5wdXQoKTogU3RhY2tlZENvbHVtbkNvbXBvbmVudC5TdGFja1tdIHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dCQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgd2lkdGgkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDk2MCk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgd2lkdGgodjogbnVtYmVyKSB7XG4gICAgdGhpcy53aWR0aCQubmV4dCh2KTtcbiAgfVxuICBwdWJsaWMgZ2V0IHdpZHRoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMud2lkdGgkLmdldFZhbHVlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGhlaWdodCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMjU2KTtcbiAgQElucHV0KClcbiAgcHVibGljIHNldCBoZWlnaHQodjogbnVtYmVyKSB7XG4gICAgdGhpcy5oZWlnaHQkLm5leHQodik7XG4gIH1cbiAgcHVibGljIGdldCBoZWlnaHQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5oZWlnaHQkLmdldFZhbHVlKCk7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgdmFsdWVGb3JtYXR0ZXI6ICh2OiBudW1iZXIpID0+IHN0cmluZyA9IHYgPT4gdi50b1N0cmluZygpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaW50ZXJ2YWwkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJbnRlcnZhbD4oREVGQVVMVF9JTlRFUlZBTCk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgaW50ZXJ2YWwodjogSW50ZXJ2YWwpIHtcbiAgICB0aGlzLmludGVydmFsJC5uZXh0KHYpO1xuICB9XG4gIHB1YmxpYyBnZXQgaW50ZXJ2YWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW50ZXJ2YWwkLmdldFZhbHVlKCk7XG4gIH1cblxuICBAVmlld0NoaWxkKCdjb250cm9scycpXG4gIHB1YmxpYyByZWFkb25seSBjb250cm9scz86IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhbGxvd2VkSW50ZXJ2YWxzJDogT2JzZXJ2YWJsZTxJbnRlcnZhbFtdPiA9IHRoaXMuaW5wdXQkLnBpcGUoXG4gICAgbWFwKGlucHV0ID0+IHtcbiAgICAgIGNvbnN0IG51bVZpc2libGVDb2x1bW5zID0gaW5wdXQuZmlsdGVyKFxuICAgICAgICBzdGFjayA9PiBzdGFjay5maWx0ZXIocyA9PiBzLnN0eWxlID09PSAndG9vbHRpcE9ubHknKS5sZW5ndGggPT09IDAsXG4gICAgICApLmxlbmd0aDtcblxuICAgICAgY29uc3QgW21pbkRhdGUsIG1heERhdGVdID0gZ2V0RGF0ZVJhbmdlKGlucHV0KTtcblxuICAgICAgcmV0dXJuIGludGVydmFscy5maWx0ZXIoaW50ZXJ2YWwgPT4ge1xuICAgICAgICBjb25zdCB0aW1lSW50ZXJ2YWwgPSBnZXRUaW1lSW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgICBjb25zdCB4U3RlcHNDb3VudCA9IHRpbWVJbnRlcnZhbC5yYW5nZShcbiAgICAgICAgICB0aW1lSW50ZXJ2YWwuZmxvb3IobWluRGF0ZSksXG4gICAgICAgICAgdGltZUludGVydmFsLmZsb29yKHRpbWVJbnRlcnZhbC5vZmZzZXQobWF4RGF0ZSwgMSkpLFxuICAgICAgICApLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIG51bVZpc2libGVDb2x1bW5zICogeFN0ZXBzQ291bnQgPD0gTUFYX0NPTFVNTlM7XG4gICAgICB9KTtcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pLFxuICApO1xuXG4gIHJlYWRvbmx5IGludGVydmFsT3B0aW9ucyQgPSB0aGlzLmFsbG93ZWRJbnRlcnZhbHMkLnBpcGUoXG4gICAgbWFwKGludGVydmFscyA9PlxuICAgICAgaW50ZXJ2YWxzLm1hcChcbiAgICAgICAgKGludGVydmFsKTogU2luZ2xlU2VsZWN0Q29tcG9uZW50Lk9wdGlvbiA9PiAoe1xuICAgICAgICAgIGlkOiBpbnRlcnZhbCxcbiAgICAgICAgICB0aXRsZTogZ2V0SW50ZXJ2YWxUaXRsZShpbnRlcnZhbCksXG4gICAgICAgIH0pLFxuICAgICAgKSxcbiAgICApLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgcmVhZG9ubHkgc2VsZWN0ZWRJbnRlcnZhbE9wdGlvbiQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmludGVydmFsJCxcbiAgICB0aGlzLmludGVydmFsT3B0aW9ucyQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbaW50ZXJ2YWwsIG9wdGlvbnNdKSA9PiB7XG4gICAgICBjb25zdCBhbGxvd2VkSW50ZXJ2YWxzID0gb3B0aW9ucy5tYXAoKHsgaWQgfSkgPT4gaWQgYXMgSW50ZXJ2YWwpO1xuICAgICAgaWYgKCFhbGxvd2VkSW50ZXJ2YWxzLmluY2x1ZGVzKGludGVydmFsKSkge1xuICAgICAgICBjb25zdCBmaXJzdEFsbG93ZWQgPSBhbGxvd2VkSW50ZXJ2YWxzLmF0KDApO1xuICAgICAgICBjb25zdCBsYXN0QWxsb3dlZCA9IGFsbG93ZWRJbnRlcnZhbHMuYXQoLTEpO1xuICAgICAgICBpZiAoIWZpcnN0QWxsb3dlZCB8fCAhbGFzdEFsbG93ZWQpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGlmIChpbnRlcnZhbHMuaW5kZXhPZihpbnRlcnZhbCkgPCBpbnRlcnZhbHMuaW5kZXhPZihmaXJzdEFsbG93ZWQpKVxuICAgICAgICAgIGludGVydmFsID0gZmlyc3RBbGxvd2VkO1xuICAgICAgICBpZiAoaW50ZXJ2YWxzLmluZGV4T2YoaW50ZXJ2YWwpID4gaW50ZXJ2YWxzLmluZGV4T2YobGFzdEFsbG93ZWQpKVxuICAgICAgICAgIGludGVydmFsID0gbGFzdEFsbG93ZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gb3B0aW9ucy5maW5kKG8gPT4gby5pZCA9PT0gaW50ZXJ2YWwpID8/IG51bGw7XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KSxcbiAgKTtcblxuICByZWFkb25seSBzZWxlY3RlZEludGVydmFsJCA9IHRoaXMuc2VsZWN0ZWRJbnRlcnZhbE9wdGlvbiQucGlwZShcbiAgICBtYXAob3B0aW9uID0+IChvcHRpb24gPyAob3B0aW9uLmlkIGFzIEludGVydmFsKSA6IERFRkFVTFRfSU5URVJWQUwpKSxcbiAgKTtcblxuICBzZXRJbnRlcnZhbE9wdGlvbihvcHRpb246IFNpbmdsZVNlbGVjdENvbXBvbmVudC5PcHRpb24pIHtcbiAgICB0aGlzLmludGVydmFsID0gb3B0aW9uLmlkIGFzIEludGVydmFsO1xuICB9XG5cbiAgcmVhZG9ubHkgYmlubmVkRGF0YSQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmlucHV0JCxcbiAgICB0aGlzLnNlbGVjdGVkSW50ZXJ2YWwkLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW2lucHV0LCBpbnRlcnZhbF0pID0+XG4gICAgICBpbnB1dC5tYXAoKHN0YWNrKTogU3RhY2tlZENvbHVtbkNvbXBvbmVudC5TdGFjayA9PiB7XG4gICAgICAgIGNvbnN0IHRpbWVJbnRlcnZhbCA9IGdldFRpbWVJbnRlcnZhbChpbnRlcnZhbCk7XG5cbiAgICAgICAgcmV0dXJuIHN0YWNrLm1hcChzZXJpZXMgPT4ge1xuICAgICAgICAgIGNvbnN0IGJpbm5lZCA9IG5ldyBNYXA8bnVtYmVyLCBTdGFja2VkQ29sdW1uQ29tcG9uZW50LlZhbHVlW10+KCk7XG4gICAgICAgICAgZm9yIChjb25zdCBwb2ludCBvZiBzZXJpZXMuZGF0YSkge1xuICAgICAgICAgICAgY29uc3QgYmluID0gdGltZUludGVydmFsLmZsb29yKHBvaW50LmRhdGUpLnZhbHVlT2YoKTtcbiAgICAgICAgICAgIGlmICghYmlubmVkLmhhcyhiaW4pKSB7XG4gICAgICAgICAgICAgIGJpbm5lZC5zZXQoYmluLCBbXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBiaW5uZWQuZ2V0KGJpbikhLnB1c2gocG9pbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc2VyaWVzLFxuICAgICAgICAgICAgZGF0YTogWy4uLmJpbm5lZC5lbnRyaWVzKCldLm1hcCgoW2RhdGVWYWx1ZSwgcG9pbnRzXSkgPT4gKHtcbiAgICAgICAgICAgICAgZGF0ZTogbmV3IERhdGUoZGF0ZVZhbHVlKSxcbiAgICAgICAgICAgICAgdmFsdWU6IHBvaW50UmVkdWNlcihwb2ludHMpLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgKSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pLFxuICApO1xuXG4gIHJlYWRvbmx5IGRyYXdEYXRhJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuYmlubmVkRGF0YSQsXG4gICAgdGhpcy53aWR0aCQsXG4gICAgdGhpcy5oZWlnaHQkLFxuICAgIHRoaXMuc2VsZWN0ZWRJbnRlcnZhbCQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbYmlubmVkRGF0YSwgd2lkdGgsIGhlaWdodCwgaW50ZXJ2YWxdKSA9PiB7XG4gICAgICBjb25zdCB2aWV3Qm94ID0gYDAgMCAke3dpZHRofSAke2hlaWdodH1gO1xuICAgICAgY29uc3QgcGFkZGluZyA9IDE2O1xuXG4gICAgICBjb25zdCBpbnZpc0NvbHVtbnMgPSBiaW5uZWREYXRhLmZpbHRlcihcbiAgICAgICAgc3RhY2sgPT4gc3RhY2suZmlsdGVyKHMgPT4gcy5zdHlsZSA9PSAndG9vbHRpcE9ubHknKS5sZW5ndGggPiAwLFxuICAgICAgKS5sZW5ndGg7XG4gICAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IGJpbm5lZERhdGEubGVuZ3RoIC0gaW52aXNDb2x1bW5zO1xuXG4gICAgICBjb25zdCBbbWluRGF0ZSwgbWF4RGF0ZV0gPSBnZXREYXRlUmFuZ2UoYmlubmVkRGF0YSk7XG4gICAgICBjb25zdCBoYXNNdWx0aXBsZVllYXJzID0gbWluRGF0ZS5nZXRGdWxsWWVhcigpIDwgbWF4RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgY29uc3QgeE1pbm9ySW50ZXJ2YWxGb3JtYXQgPSBnZXRNaW5vckludGVydmFsRm9ybWF0KGludGVydmFsKTtcbiAgICAgIGNvbnN0IG1pbm9yRm9ybWF0dGVyID0gdGltZUZvcm1hdCh4TWlub3JJbnRlcnZhbEZvcm1hdCk7XG4gICAgICBjb25zdCBtaW5vclRpbWVJbnRlcnZhbCA9IGdldFRpbWVJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgICBjb25zdCB4U3RlcHMgPSBtaW5vclRpbWVJbnRlcnZhbC5yYW5nZShcbiAgICAgICAgbWlub3JUaW1lSW50ZXJ2YWwuZmxvb3IobWluRGF0ZSksXG4gICAgICAgIG1pbm9yVGltZUludGVydmFsLmZsb29yKG1pbm9yVGltZUludGVydmFsLm9mZnNldChtYXhEYXRlLCAxKSksXG4gICAgICApO1xuICAgICAgY29uc3QgeE1ham9ySW50ZXJ2YWwgPSBnZXRNYWpvckludGVydmFsKGludGVydmFsKTtcbiAgICAgIGNvbnN0IHhNYWpvckludGVydmFsRm9ybWF0ID0gZ2V0TWFqb3JJbnRlcnZhbEZvcm1hdChcbiAgICAgICAgeE1ham9ySW50ZXJ2YWwsXG4gICAgICAgIGhhc011bHRpcGxlWWVhcnMsXG4gICAgICApO1xuICAgICAgY29uc3QgbWFqb3JGb3JtYXR0ZXIgPSB0aW1lRm9ybWF0KHhNYWpvckludGVydmFsRm9ybWF0KTtcbiAgICAgIGNvbnN0IGZ1bGxGb3JtYXR0ZXIgPSB0aW1lRm9ybWF0KFxuICAgICAgICBgJHt4TWlub3JJbnRlcnZhbEZvcm1hdH0gJHt4TWFqb3JJbnRlcnZhbEZvcm1hdH1gLFxuICAgICAgKTtcblxuICAgICAgY29uc3QgeE91dGVyU2NhbGUgPSBzY2FsZUJhbmQoKVxuICAgICAgICAuZG9tYWluKHhTdGVwcy5tYXAoZGF0ZSA9PiBmdWxsRm9ybWF0dGVyKGRhdGUpKSlcbiAgICAgICAgLnJhbmdlKFswLCB3aWR0aF0pO1xuXG4gICAgICBjb25zdCBjb2x1bW5XaWR0aCA9IGdldENvbHVtbldpZHRoKHhTdGVwcy5sZW5ndGggKiB2aXNpYmxlQ29sdW1ucyk7XG4gICAgICBjb25zdCBjb2x1bW5QYWRkaW5nID0gNDtcbiAgICAgIGNvbnN0IG91dGVyUGFkZGluZyA9XG4gICAgICAgICh4T3V0ZXJTY2FsZS5iYW5kd2lkdGgoKSAtXG4gICAgICAgICAgKGNvbHVtblBhZGRpbmcgKiAoYmlubmVkRGF0YS5sZW5ndGggLSAxIC0gaW52aXNDb2x1bW5zKSArXG4gICAgICAgICAgICBjb2x1bW5XaWR0aCAqIChiaW5uZWREYXRhLmxlbmd0aCAtIGludmlzQ29sdW1ucykpKSAvXG4gICAgICAgIDI7XG5cbiAgICAgIHR5cGUgU2VyaWVzUG9pbnQgPSBTdGFja2VkQ29sdW1uQ29tcG9uZW50LlZhbHVlICYge1xuICAgICAgICBzZXJpZXM6IFN0YWNrZWRDb2x1bW5Db21wb25lbnQuU2VyaWVzO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVuZGVySW5mb3JtYXRpb24gPSBiaW5uZWREYXRhLm1hcChzdGFja0RhdGEgPT4ge1xuICAgICAgICAvKlxuICAgICAgICAgIENyZWF0ZSBhbiBhcnJheSB3aXRoIGV2ZXJ5IGRhdGEgcG9pbnQgKyB0aGVpciBhc3NvY2lhdGVkIHNlcmllcy5cbiAgICAgICAgICBpLmUuIE1ha2UgYW4gYmFja2xpbmsgZm9yIGVhY2ggZWxlbWVudCB0byBpdHMgc2VyaWVzLlxuICAgICAgICAqL1xuICAgICAgICBjb25zdCBzdGFja2VkVGFibGUgPSBzdGFja0RhdGEucmVkdWNlPFNlcmllc1BvaW50W10+KFxuICAgICAgICAgICh0YWJsZSwgcykgPT4gW1xuICAgICAgICAgICAgLi4udGFibGUsXG4gICAgICAgICAgICAuLi5zLmRhdGEubWFwKHBvaW50ID0+ICh7XG4gICAgICAgICAgICAgIC4uLnBvaW50LFxuICAgICAgICAgICAgICBzZXJpZXM6IHMsXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgXSxcbiAgICAgICAgICBbXSxcbiAgICAgICAgKTtcblxuICAgICAgICAvKlxuICAgICAgICAgIE1hcHMgZWFjaCBvZiB0aGUgU2VyaWVzUG9pbnRzIGJhc2VkIG9uIGxhYmVsLlxuICAgICAgICAgIFRoZW4gbWFwIGVhY2ggb2YgdGhvc2UgbWFwcyB0byBhIGRhdGUuXG5cbiAgICAgICAgICBFeGFtcGxlOlxuICAgICAgICAgICAgSWYgd2Ugd2VyZSBpbmRleGluZyB0aGUgZm9sbG93aW5nIGRhdGE6XG4gICAgICAgICAgICAgICogRXN0aW1hdGVzIENvbXBsZXRlIC0+IDUgaW4gSmFudWFyeSwgNyBpbiBGZWJydWFyeVxuICAgICAgICAgICAgICAqIEVzdGltYXRlcyBJbmNvbXBsZXRlIC0+IDMgaW4gSmFudWFyeSwgMyBpbiBGZWJydWFyeVxuICAgICAgICAgICAgV2Ugd291bGQgZ2V0IGFuIGluZGV4ZWQgdGFibGUgbGlrZSB0aGUgZm9sbG93aW5nLCAobm90ZSB0aGlzIGlzIHBzZXVkb2NvZGUpOlxuICAgICAgICAgICAgICAnSmFudWFyeSc6IHsgJ0VzdGltYXRlcyBDb21wbGV0ZSc6IDUsICdFc3RpbWF0ZXMgSW5jb21wbGV0ZSc6IDMgfVxuICAgICAgICAgICAgICAnRmVicnVhcnknOiB7ICdFc3RpbWF0ZXMgQ29tcGxldGUnOiA3LCAnRXN0aW1hdGVzIEluY29tcGxldGUnOiAzIH1cbiAgICAgICAgKi9cbiAgICAgICAgY29uc3QgaW5kZXhlZFRhYmxlOiBNYXA8RGF0ZSwgTWFwPHN0cmluZywgU2VyaWVzUG9pbnQ+PiA9IGluZGV4KFxuICAgICAgICAgIHN0YWNrZWRUYWJsZSxcbiAgICAgICAgICBkID0+IGQuZGF0ZSxcbiAgICAgICAgICBkID0+IGQuc2VyaWVzLmxhYmVsLFxuICAgICAgICApO1xuXG4gICAgICAgIC8qXG4gICAgICAgICAgVGhlIG91dHB1dCBvZiBcInN0YWNrKClcIiBpcyBhbiBhcnJheSBvZiBhcnJheXMgb2YgdHVwbGVzLlxuICAgICAgICAgICAgVGhlIHR1cGxlcyB1bm5lc3QgYXMgW2Jhc2VsaW5lLCB0b3BsaW5lXS5cbiAgICAgICAgICAgIEVhY2ggXCJrZXlcIiBpbnZvbHZlZCBpbiB0aGUgc3RhY2sgaGFzIGFuIGFycmF5IG9mIHR1cGxlcyByZWxhdGluZyB0byBpdC5cbiAgICAgICAgICAgICAgaS5lLiBbIERhdGUgMSBUdXBsZSwgRGF0ZSAyIFR1cGxlIF1cbiAgICAgICAgICAgIEFsbCBcImtleVwiIGFycmF5cyBhcmUgY29udGFpbmVkIGluIHRoZSBvdXRlciBhcnJheS5cbiAgICAgICAgICAgICAgaS5lLiBbIEtleSAxIFR1cGxlcywgS2V5IDIgVHVwbGVzXVxuXG4gICAgICAgICAgV2Ugc2VsZWN0IHRoZSBrZXlzIHVzaW5nIFwiLmtleXMoKVwiLlxuICAgICAgICAgICAgRm9yIG91ciBwdXJwb3NlcywgdGhlIGtleXMgYXJlIHRoZSBsZWdlbmQgZWxlbWVudHMuXG4gICAgICAgICAgICBpLmUuIElmIHlvdSBoYXZlIHR3byBibG9ja3Mgb2YgdGhlIHNhbWUgY29sb3IsIHRoZXkgaGF2ZSB0aGUgc2FtZSBrZXkuXG5cbiAgICAgICAgICBXZSBzZWxlY3QgdGhlIGhlaWdodHMgb2YgdGhlIGJsb2NrcyB1c2luZyBcIi52YWx1ZSgpXCIuXG5cbiAgICAgICAgICBXZSBhcmUgZ29pbmcgdG8gc3RhY2sgdGhlIGJsb2NrcyBvbiB0b3Agb2YgZWFjaCBvdGhlci5cbiAgICAgICAgICAgIFRoZSBiYXNlbGluZSBvZiB0aGUgZmlyc3Qga2V5IHR1cGxlcyBhcmUgMC5cbiAgICAgICAgICAgIFRoZSBiYXNlbGluZSBvZiB0aGUgc2Vjb25kIGtleSB0dXBsZXMgYXJlIHRoZSB0b3BsaW5lIG9mIHRoZSBhc3NvY2lhdGVkIGZpcnN0IGtleSB0dXBsZS5cblxuICAgICAgICAgIEV4YW1wbGU6XG4gICAgICAgICAgICBJZiB3ZSB3ZXJlIHN0YWNraW5nIHRoZSBmb2xsb3dpbmcgZGF0YTpcbiAgICAgICAgICAgICAgKiBFc3RpbWF0ZXMgQ29tcGxldGUgLT4gNSBpbiBKYW51YXJ5LCA3IGluIEZlYnJ1YXJ5XG4gICAgICAgICAgICAgICogRXN0aW1hdGVzIEluY29tcGxldGUgLT4gMyBpbiBKYW51YXJ5LCAzIGluIEZlYnJ1YXJ5XG4gICAgICAgICAgICBXZSB3b3VsZCBnZXQgYSBzdGFjayBvZjpcbiAgICAgICAgICAgICAgWyAgWyBbMCw1XSxbMCw3XSBdLCBbIFs1LDhdLFs3LDEwXSBdICBdXG4gICAgICAgICovXG4gICAgICAgIGNvbnN0IHN0YWNrZWQgPSBzdGFjazxcbiAgICAgICAgICB0eXBlb2YgaW5kZXhlZFRhYmxlIGV4dGVuZHMgTWFwPGluZmVyIEssIGluZmVyIFY+ID8gW0ssIFZdIDogbmV2ZXJcbiAgICAgICAgPigpXG4gICAgICAgICAgLmtleXMoc3RhY2tEYXRhLm1hcCh2ID0+IHYubGFiZWwpKVxuICAgICAgICAgIC52YWx1ZSgoW18sIGdyb3VwXSwga2V5KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZ3JvdXAuZ2V0KGtleSkhLnZhbHVlO1xuICAgICAgICAgIH0pKGluZGV4ZWRUYWJsZSk7XG5cbiAgICAgICAgcmV0dXJuIHsgaW5kZXhlZFRhYmxlLCBzdGFja2VkIH07XG4gICAgICB9KTtcblxuICAgICAgLy8gVGhlIGRvbWFpbiBzaG91bGQgYmUgYmFzZWQgb24gdGhlIGhpZ2hlc3QgdmFsdWUgaW4gYW55IHN0YWNrLCBvbiBhbnkgZGF0ZS5cbiAgICAgIGxldCBkb21haW5NYXggPSAwO1xuICAgICAgLy8gRm9yIGVhY2ggdW5pcXVlIHN0YWNrLFxuICAgICAgcmVuZGVySW5mb3JtYXRpb24uZm9yRWFjaCgoeyBzdGFja2VkLCBpbmRleGVkVGFibGUgfSkgPT4ge1xuICAgICAgICAvLyBGb3IgZWFjaCBkYXRlLFxuICAgICAgICBbLi4uaW5kZXhlZFRhYmxlLnZhbHVlcygpXS5mb3JFYWNoKChwb2ludE1hcCwgaSkgPT4ge1xuICAgICAgICAgIC8vIEZvciBlYWNoIHNlcmllcyxcbiAgICAgICAgICBbLi4ucG9pbnRNYXAudmFsdWVzKCldLmZvckVhY2goKF8sIGopID0+IHtcbiAgICAgICAgICAgIGlmIChfLnNlcmllcy5zdHlsZSA9PSAndG9vbHRpcE9ubHknKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRvbWFpbk1heCA9IE1hdGgubWF4KGRvbWFpbk1heCwgLi4uc3RhY2tlZFtqXVtpXSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBpZiAoZG9tYWluTWF4ID09PSAwKSBkb21haW5NYXggPSAxO1xuICAgICAgY29uc3QgeVNjYWxlID0gc2NhbGVMaW5lYXIoKVxuICAgICAgICAuZG9tYWluKFswLCBkb21haW5NYXhdKVxuICAgICAgICAucmFuZ2UoW2hlaWdodCAtIHBhZGRpbmcgKiAyLCBwYWRkaW5nXSk7XG5cbiAgICAgIGNvbnN0IHJlY3RzOiB7XG4gICAgICAgIGRhdGVWYWx1ZTogbnVtYmVyO1xuICAgICAgICB4OiBudW1iZXI7XG4gICAgICAgIHk6IG51bWJlcjtcbiAgICAgICAgd2lkdGg6IG51bWJlcjtcbiAgICAgICAgaGVpZ2h0OiBudW1iZXI7XG4gICAgICAgIGZpbGw6IHN0cmluZztcbiAgICAgICAgc3RyaXBlZDogYm9vbGVhbjtcbiAgICAgICAgc2VyaWVzUG9pbnQ6IFNlcmllc1BvaW50O1xuICAgICAgfVtdID0gW107XG4gICAgICBsZXQgaW52aXNDb2x1bW5zU29GYXIgPSAwO1xuICAgICAgLy8gRm9yIGVhY2ggdW5pcXVlIHN0YWNrLFxuICAgICAgcmVuZGVySW5mb3JtYXRpb24uZm9yRWFjaCgoeyBzdGFja2VkLCBpbmRleGVkVGFibGUgfSwgaW5kZXgpID0+IHtcbiAgICAgICAgbGV0IGludmlzQ29sdW1uRm91bmQgPSBmYWxzZTtcbiAgICAgICAgLy8gRm9yIGVhY2ggZGF0ZSxcbiAgICAgICAgWy4uLmluZGV4ZWRUYWJsZS5lbnRyaWVzKCldLmZvckVhY2goKFtkYXRlLCBwb2ludE1hcF0sIGkpID0+IHtcbiAgICAgICAgICAvLyBGb3IgZWFjaCBzZXJpZXMsXG4gICAgICAgICAgWy4uLnBvaW50TWFwLmVudHJpZXMoKV0uZm9yRWFjaCgoW18sIHNlcmllc1BvaW50XSwgaikgPT4ge1xuICAgICAgICAgICAgLy8gR2V0IHRoZSBzaXplIG9mIHRoZSBib3ggd2UgYXJlIGFib3V0IHRvIGRyYXcuXG4gICAgICAgICAgICBjb25zdCBbYmFzZWxpbmUsIHRvcGxpbmVdID0gc3RhY2tlZFtqXVtpXTtcblxuICAgICAgICAgICAgaWYgKHNlcmllc1BvaW50LnNlcmllcy5zdHlsZSA9PSAndG9vbHRpcE9ubHknKSB7XG4gICAgICAgICAgICAgIGludmlzQ29sdW1uRm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgd2lkdGggPVxuICAgICAgICAgICAgICBzZXJpZXNQb2ludC5zZXJpZXMuc3R5bGUgPT0gJ3Rvb2x0aXBPbmx5JyA/IDAgOiBjb2x1bW5XaWR0aDtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IHlTY2FsZShiYXNlbGluZSkgLSB5U2NhbGUodG9wbGluZSk7XG4gICAgICAgICAgICBjb25zdCB4ID1cbiAgICAgICAgICAgICAgKHhPdXRlclNjYWxlKGZ1bGxGb3JtYXR0ZXIoZGF0ZSkpID8/IDApICtcbiAgICAgICAgICAgICAgb3V0ZXJQYWRkaW5nICtcbiAgICAgICAgICAgICAgY29sdW1uV2lkdGggKiAoaW5kZXggLSBpbnZpc0NvbHVtbnNTb0ZhcikgK1xuICAgICAgICAgICAgICBjb2x1bW5QYWRkaW5nICogKGluZGV4IC0gaW52aXNDb2x1bW5zU29GYXIpO1xuICAgICAgICAgICAgY29uc3QgeSA9IHlTY2FsZShiYXNlbGluZSkgLSBoZWlnaHQ7XG4gICAgICAgICAgICBsZXQgZmlsbCA9ICcnO1xuICAgICAgICAgICAgaWYgKHNlcmllc1BvaW50LnNlcmllcy5zdHlsZSAhPSAndG9vbHRpcE9ubHknKSB7XG4gICAgICAgICAgICAgIGZpbGwgPSBgdmFyKCR7c2VyaWVzUG9pbnQuc2VyaWVzLmNvbG9yVG9rZW59KWA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlY3RzLnB1c2goe1xuICAgICAgICAgICAgICBkYXRlVmFsdWU6IGRhdGUudmFsdWVPZigpLFxuICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICB5LFxuICAgICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgICBmaWxsLFxuICAgICAgICAgICAgICBzdHJpcGVkOiBzZXJpZXNQb2ludC5zZXJpZXMuc3R5bGUgPT09ICdzdHJpcGVkJyxcbiAgICAgICAgICAgICAgc2VyaWVzUG9pbnQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpbnZpc0NvbHVtbkZvdW5kKSB7XG4gICAgICAgICAgaW52aXNDb2x1bW5zU29GYXIrKztcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHhNaW5vclRpY2tzID0geFN0ZXBzLm1hcChkYXRlID0+ICh7XG4gICAgICAgIGRhdGVWYWx1ZTogZGF0ZS52YWx1ZU9mKCksXG4gICAgICAgIGxhYmVsOiBtaW5vckZvcm1hdHRlcihkYXRlKSxcbiAgICAgICAgeDpcbiAgICAgICAgICAoeE91dGVyU2NhbGUoZnVsbEZvcm1hdHRlcihkYXRlKSkgPz8gMCkgKyB4T3V0ZXJTY2FsZS5iYW5kd2lkdGgoKSAvIDIsXG4gICAgICB9KSk7XG4gICAgICBjb25zdCB4TWFqb3JUaWNrcyA9XG4gICAgICAgIGludGVydmFsICE9PSAneWVhcidcbiAgICAgICAgICA/IHhTdGVwc1xuICAgICAgICAgICAgICAubWFwKGRhdGUgPT4gKHtcbiAgICAgICAgICAgICAgICBkYXRlVmFsdWU6IGRhdGUudmFsdWVPZigpLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBtYWpvckZvcm1hdHRlcihkYXRlKSxcbiAgICAgICAgICAgICAgICB4OlxuICAgICAgICAgICAgICAgICAgKHhPdXRlclNjYWxlKGZ1bGxGb3JtYXR0ZXIoZGF0ZSkpID8/IDApICtcbiAgICAgICAgICAgICAgICAgIHhPdXRlclNjYWxlLmJhbmR3aWR0aCgpIC8gMixcbiAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKHRpY2ssIGksIHRpY2tzKSA9PlxuICAgICAgICAgICAgICAgICAgaSA9PT0gMCB8fCB0aWNrLmxhYmVsICE9PSB0aWNrc1tpIC0gMV0ubGFiZWwsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICA6IFtdO1xuXG4gICAgICBjb25zdCB5VGlja3MgPSB5U2NhbGUudGlja3MoNSk7XG5cbiAgICAgIGNvbnN0IGhvdmVyQmFuZFdpZHRoID1cbiAgICAgICAgKHJlbmRlckluZm9ybWF0aW9uLmxlbmd0aCAtIGludmlzQ29sdW1ucykgKiBjb2x1bW5XaWR0aCArXG4gICAgICAgIChyZW5kZXJJbmZvcm1hdGlvbi5sZW5ndGggKyAxIC0gaW52aXNDb2x1bW5zKSAqIGNvbHVtblBhZGRpbmc7XG4gICAgICBjb25zdCBob3ZlckJhbmRzID0geFN0ZXBzLm1hcChkYXRlID0+ICh7XG4gICAgICAgIGRhdGVWYWx1ZTogZGF0ZS52YWx1ZU9mKCksXG4gICAgICAgIHg6XG4gICAgICAgICAgKHhPdXRlclNjYWxlKGZ1bGxGb3JtYXR0ZXIoZGF0ZSkpID8/IDApICtcbiAgICAgICAgICAoeE91dGVyU2NhbGUuYmFuZHdpZHRoKCkgLSBob3ZlckJhbmRXaWR0aCkgLyAyLFxuICAgICAgICB5OiB5U2NhbGUoZG9tYWluTWF4KSxcbiAgICAgICAgd2lkdGg6IGhvdmVyQmFuZFdpZHRoLFxuICAgICAgICBoZWlnaHQ6IHlTY2FsZSgwKSAtIHlTY2FsZShkb21haW5NYXgpLFxuICAgICAgfSkpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2x1bW5XaWR0aCxcbiAgICAgICAgaG92ZXJCYW5kcyxcbiAgICAgICAgcmVjdHMsXG4gICAgICAgIHZpZXdCb3gsXG4gICAgICAgIHhNaW5vclRpY2tzLFxuICAgICAgICB4TWFqb3JUaWNrcyxcbiAgICAgICAgeVNjYWxlLFxuICAgICAgICB5VGlja3MsXG4gICAgICB9O1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgcmVhZG9ubHkgZW1wdHkkID0gdGhpcy5pbnB1dCQucGlwZShcbiAgICBtYXAoaW5wdXQgPT5cbiAgICAgIGlucHV0LmV2ZXJ5KHN0YWNrID0+IHN0YWNrLmV2ZXJ5KHNlcmllcyA9PiBzZXJpZXMuZGF0YS5sZW5ndGggPT09IDApKSxcbiAgICApLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgcmVhZG9ubHkgaG92ZXJlZEJhbmQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7XG4gICAgZGF0ZVZhbHVlOiBudW1iZXI7XG4gICAgZXZlbnQ6IE1vdXNlRXZlbnQ7XG4gIH0gfCBudWxsPihudWxsKTtcblxuICByZWFkb25seSBjYWxsb3V0JCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuaG92ZXJlZEJhbmQkLCB0aGlzLmRyYXdEYXRhJF0pLnBpcGUoXG4gICAgbWFwKChbaG92ZXJlZEJhbmQsIGRyYXdEYXRhXSkgPT4ge1xuICAgICAgaWYgKCFob3ZlcmVkQmFuZCkgcmV0dXJuIG51bGw7XG5cbiAgICAgIGNvbnN0IHsgdGFyZ2V0IH0gPSBob3ZlcmVkQmFuZC5ldmVudDtcbiAgICAgIGlmICghdGFyZ2V0KSByZXR1cm4gbnVsbDtcbiAgICAgIGNvbnN0IGFuY2hvciA9ICg8U1ZHUmVjdEVsZW1lbnQ+dGFyZ2V0KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgdHlwZSBNZXRyaWMgPSB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfTtcbiAgICAgIGNvbnN0IG1ldHJpY3M6IE1ldHJpY1tdID0gZHJhd0RhdGEucmVjdHNcbiAgICAgICAgLmZpbHRlcihyZWN0ID0+IHJlY3QuZGF0ZVZhbHVlID09PSBob3ZlcmVkQmFuZC5kYXRlVmFsdWUpXG4gICAgICAgIC5tYXAocmVjdCA9PiAoe1xuICAgICAgICAgIGxhYmVsOiByZWN0LnNlcmllc1BvaW50LnNlcmllcy5sYWJlbCxcbiAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZUZvcm1hdHRlcihyZWN0LnNlcmllc1BvaW50LnZhbHVlKSxcbiAgICAgICAgfSkpO1xuXG4gICAgICByZXR1cm4geyBhbmNob3IsIG1ldHJpY3MgfTtcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pLFxuICApO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIFN0YWNrZWRDb2x1bW5Db21wb25lbnQge1xuICBleHBvcnQgdHlwZSBWYWx1ZSA9IHsgZGF0ZTogRGF0ZTsgdmFsdWU6IG51bWJlciB9O1xuXG4gIGV4cG9ydCB0eXBlIFNlcmllcyA9IHtcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIGRhdGE6IFZhbHVlW107XG4gIH0gJiAoXG4gICAgfCB7XG4gICAgICAgIGNvbG9yVG9rZW46IHN0cmluZztcbiAgICAgICAgc3R5bGU/OiAnc29saWQnIHwgJ3N0cmlwZWQnO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICBzdHlsZTogJ3Rvb2x0aXBPbmx5JztcbiAgICAgIH1cbiAgKTtcblxuICBleHBvcnQgdHlwZSBTdGFjayA9IFNlcmllc1tdO1xufVxuIiwiPGRpdiAqbmdJZj1cIiEoZW1wdHkkIHwgYXN5bmMpOyBlbHNlIHplcm9TdGF0ZVwiIGNsYXNzPVwiY29udGFpbmVyXCI+XG4gIDxzdmdcbiAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAqbmdJZj1cImRyYXdEYXRhJCB8IGFzeW5jOyBsZXQgZFwiXG4gICAgW2F0dHIudmlld0JveF09XCJkLnZpZXdCb3hcIlxuICA+XG4gICAgPGRlZnM+XG4gICAgICA8cGF0dGVyblxuICAgICAgICBpZD1cInN0cmlwZXNcIlxuICAgICAgICB4PVwiMFwiXG4gICAgICAgIHk9XCIwXCJcbiAgICAgICAgW2F0dHIud2lkdGhdPVwiZC5jb2x1bW5XaWR0aFwiXG4gICAgICAgIFthdHRyLmhlaWdodF09XCJkLmNvbHVtbldpZHRoXCJcbiAgICAgICAgcGF0dGVyblVuaXRzPVwidXNlclNwYWNlT25Vc2VcIlxuICAgICAgPlxuICAgICAgICA8bGluZVxuICAgICAgICAgIHgxPVwiMFwiXG4gICAgICAgICAgW2F0dHIueTFdPVwiZC5jb2x1bW5XaWR0aFwiXG4gICAgICAgICAgW2F0dHIueDJdPVwiZC5jb2x1bW5XaWR0aFwiXG4gICAgICAgICAgeTI9XCIwXCJcbiAgICAgICAgICBzdHJva2U9XCJ2YXIoLS13aGl0ZS0xMDApXCJcbiAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxXCJcbiAgICAgICAgPjwvbGluZT5cbiAgICAgIDwvcGF0dGVybj5cbiAgICA8L2RlZnM+XG4gICAgPGcgKm5nRm9yPVwibGV0IHRpY2sgb2YgZC54TWlub3JUaWNrc1wiPlxuICAgICAgPHJlY3RcbiAgICAgICAgY2xhc3M9XCJ0aWNrLWJhY2tncm91bmRcIlxuICAgICAgICBbY2xhc3MuZm9jdXNlZF09XCIoaG92ZXJlZEJhbmQkIHwgYXN5bmMpPy5kYXRlVmFsdWUgPT09IHRpY2suZGF0ZVZhbHVlXCJcbiAgICAgICAgW2F0dHIueF09XCJ0aWNrLnggLSAyMFwiXG4gICAgICAgIFthdHRyLnldPVwiZC55U2NhbGUoMCkgKyAzXCJcbiAgICAgICAgd2lkdGg9XCI0MFwiXG4gICAgICAgIGhlaWdodD1cIjEyXCJcbiAgICAgICAgcng9XCIyXCJcbiAgICAgID48L3JlY3Q+XG4gICAgICA8dGV4dFxuICAgICAgICBjbGFzcz1cInRpY2stbGFiZWxcIlxuICAgICAgICBbYXR0ci54XT1cInRpY2sueFwiXG4gICAgICAgIFthdHRyLnldPVwiZC55U2NhbGUoMCkgKyAxMlwiXG4gICAgICAgIHRleHQtYW5jaG9yPVwibWlkZGxlXCJcbiAgICAgID5cbiAgICAgICAge3sgdGljay5sYWJlbCB9fVxuICAgICAgPC90ZXh0PlxuICAgIDwvZz5cbiAgICA8ZyAqbmdGb3I9XCJsZXQgdGljayBvZiBkLnhNYWpvclRpY2tzXCI+XG4gICAgICA8dGV4dFxuICAgICAgICBjbGFzcz1cInRpY2stbGFiZWxcIlxuICAgICAgICBbYXR0ci54XT1cInRpY2sueFwiXG4gICAgICAgIFthdHRyLnldPVwiZC55U2NhbGUoMCkgKyAyNFwiXG4gICAgICAgIHRleHQtYW5jaG9yPVwibWlkZGxlXCJcbiAgICAgID5cbiAgICAgICAge3sgdGljay5sYWJlbCB9fVxuICAgICAgPC90ZXh0PlxuICAgIDwvZz5cbiAgICA8ZyAqbmdGb3I9XCJsZXQgdGljayBvZiBkLnlUaWNrc1wiPlxuICAgICAgPHJlY3RcbiAgICAgICAgY2xhc3M9XCJ0aWNrXCJcbiAgICAgICAgeD1cIjBcIlxuICAgICAgICBbYXR0ci55XT1cImQueVNjYWxlKHRpY2spXCJcbiAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgaGVpZ2h0PVwiMVwiXG4gICAgICA+PC9yZWN0PlxuICAgICAgPHRleHQgY2xhc3M9XCJ0aWNrLWxhYmVsXCIgeD1cIjBcIiBbYXR0ci55XT1cImQueVNjYWxlKHRpY2spXCIgZHk9XCItNFwiPlxuICAgICAgICB7eyB2YWx1ZUZvcm1hdHRlcih0aWNrKSB9fVxuICAgICAgPC90ZXh0PlxuICAgIDwvZz5cbiAgICA8ZyAqbmdGb3I9XCJsZXQgcmVjdCBvZiBkLnJlY3RzXCI+XG4gICAgICA8cmVjdFxuICAgICAgICBjbGFzcz1cImNvbHVtblwiXG4gICAgICAgIFthdHRyLnhdPVwicmVjdC54XCJcbiAgICAgICAgW2F0dHIueV09XCJyZWN0LnlcIlxuICAgICAgICBbYXR0ci53aWR0aF09XCJyZWN0LndpZHRoXCJcbiAgICAgICAgW2F0dHIuaGVpZ2h0XT1cInJlY3QuaGVpZ2h0XCJcbiAgICAgICAgW2F0dHIuZmlsbF09XCJyZWN0LmZpbGxcIlxuICAgICAgICBbY2xhc3MuYmx1cnJlZF09XCJcbiAgICAgICAgICAoaG92ZXJlZEJhbmQkIHwgYXN5bmMpICE9PSBudWxsICYmXG4gICAgICAgICAgKGhvdmVyZWRCYW5kJCB8IGFzeW5jKT8uZGF0ZVZhbHVlICE9PSByZWN0LmRhdGVWYWx1ZVxuICAgICAgICBcIlxuICAgICAgPjwvcmVjdD5cbiAgICAgIDxyZWN0XG4gICAgICAgICpuZ0lmPVwicmVjdC5zdHJpcGVkXCJcbiAgICAgICAgW2F0dHIueF09XCJyZWN0LnhcIlxuICAgICAgICBbYXR0ci55XT1cInJlY3QueVwiXG4gICAgICAgIFthdHRyLndpZHRoXT1cInJlY3Qud2lkdGhcIlxuICAgICAgICBbYXR0ci5oZWlnaHRdPVwicmVjdC5oZWlnaHRcIlxuICAgICAgICBmaWxsPVwidXJsKCNzdHJpcGVzKVwiXG4gICAgICA+PC9yZWN0PlxuICAgIDwvZz5cbiAgICA8cmVjdFxuICAgICAgKm5nRm9yPVwibGV0IHJlY3Qgb2YgZC5ob3ZlckJhbmRzXCJcbiAgICAgIFthdHRyLnhdPVwicmVjdC54XCJcbiAgICAgIFthdHRyLnldPVwicmVjdC55XCJcbiAgICAgIFthdHRyLndpZHRoXT1cInJlY3Qud2lkdGhcIlxuICAgICAgW2F0dHIuaGVpZ2h0XT1cInJlY3QuaGVpZ2h0XCJcbiAgICAgIGZpbGw9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAobW91c2VlbnRlcik9XCJcbiAgICAgICAgaG92ZXJlZEJhbmQkLm5leHQoeyBkYXRlVmFsdWU6IHJlY3QuZGF0ZVZhbHVlLCBldmVudDogJGV2ZW50IH0pXG4gICAgICBcIlxuICAgICAgKG1vdXNlbGVhdmUpPVwiaG92ZXJlZEJhbmQkLm5leHQobnVsbClcIlxuICAgID48L3JlY3Q+XG4gIDwvc3ZnPlxuPC9kaXY+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJjYWxsb3V0JCB8IGFzeW5jOyBsZXQgY2FsbG91dFwiPlxuICA8cml2LWNhbGxvdXRcbiAgICAqcml2LWNhbGxvdXRcbiAgICBbYW5jaG9yXT1cImNhbGxvdXQuYW5jaG9yXCJcbiAgICBbaXNNb2RhbF09XCJmYWxzZVwiXG4gICAgW3ByZWZlcnJlZFBvc2l0aW9uXT1cIidjZW50ZXItcmlnaHQnXCJcbiAgICBbYWxsb3dlZFBvc2l0aW9uc109XCJbXG4gICAgICAnY2VudGVyLXJpZ2h0JyxcbiAgICAgICdjZW50ZXItbGVmdCcsXG4gICAgICAndG9wLWNlbnRlcicsXG4gICAgICAnYm90dG9tLWNlbnRlcidcbiAgICBdXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJjYWxsb3V0LWNvbnRlbnRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYWxsb3V0LW1ldHJpY1wiICpuZ0Zvcj1cImxldCBtZXRyaWMgb2YgY2FsbG91dC5tZXRyaWNzXCI+XG4gICAgICAgIDxkaXY+e3sgbWV0cmljLmxhYmVsIH19PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYWxsb3V0LW1ldHJpYy12YWx1ZVwiPnt7IG1ldHJpYy52YWx1ZSB9fTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvcml2LWNhbGxvdXQ+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICN6ZXJvU3RhdGU+XG4gIDxyaXYtemVyby1zdGF0ZT48L3Jpdi16ZXJvLXN0YXRlPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjb250cm9scz5cbiAgPHJpdi1zaW5nbGUtc2VsZWN0XG4gICAgW29wdGlvbnNdPVwiKGludGVydmFsT3B0aW9ucyQgfCBhc3luYykgfHwgW11cIlxuICAgIFtzZWxlY3RlZE9wdGlvbl09XCJzZWxlY3RlZEludGVydmFsT3B0aW9uJCB8IGFzeW5jXCJcbiAgICAoc2VsZWN0ZWRPcHRpb25DaGFuZ2UpPVwic2V0SW50ZXJ2YWxPcHRpb24oJGV2ZW50KVwiXG4gID48L3Jpdi1zaW5nbGUtc2VsZWN0PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
329
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2tlZC1jb2x1bW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdmlzdWFsaXphdGlvbi9zdGFja2VkLWNvbHVtbi9zdGFja2VkLWNvbHVtbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi92aXN1YWxpemF0aW9uL3N0YWNrZWQtY29sdW1uL3N0YWNrZWQtY29sdW1uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULEtBQUssRUFFTCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNqQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsZUFBZSxFQUVmLGFBQWEsRUFDYixHQUFHLEVBQ0gsV0FBVyxHQUNaLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUVMLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsc0JBQXNCLEVBQ3RCLHNCQUFzQixFQUN0QixlQUFlLEVBQ2YsU0FBUyxHQUNWLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFDTCxjQUFjLEVBQ2QsWUFBWSxFQUNaLFlBQVksR0FDYixNQUFNLDBCQUEwQixDQUFDOzs7Ozs7O0FBRWxDLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUN2QixNQUFNLGdCQUFnQixHQUFhLE9BQU8sQ0FBQztBQUUzQyw2RUFBNkU7QUFDN0UsMkJBQTJCO0FBTzNCLE1BQU0sT0FBTyxzQkFB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LElBQ1csS0FBSyxDQUFDLENBQVM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUNELElBQVcsS0FBSztRQUNkLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBR0QsSUFDVyxNQUFNLENBQUMsQ0FBUztRQUN6QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBQ0QsSUFBVyxNQUFNO1FBQ2YsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFNRCxJQUNXLFFBQVEsQ0FBQyxDQUFXO1FBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFDRCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUE4REQsaUJBQWlCLENBQUMsTUFBb0M7UUFDcEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsRUFBYyxDQUFDO0lBQ3hDLENBQUM7O21IQXhHVSxzQkFBc0I7dUdBQXRCLHNCQUFzQixzUkM3Q25DLG9zSEF3SUE7MkZEM0ZhLHNCQUFzQjtrQkFObEMsU0FBUzsrQkFDRSxvQkFBb0IsbUJBR2IsdUJBQXVCLENBQUMsTUFBTTs4QkFPcEMsS0FBSztzQkFEZixLQUFLO2dCQVVLLEtBQUs7c0JBRGYsS0FBSztnQkFVSyxNQUFNO3NCQURoQixLQUFLO2dCQVNDLGNBQWM7c0JBRHBCLEtBQUs7Z0JBS0ssUUFBUTtzQkFEbEIsS0FBSztnQkFTVSxRQUFRO3NCQUR2QixTQUFTO3VCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpbmRleCB9IGZyb20gJ2QzLWFycmF5JztcbmltcG9ydCB7IHNjYWxlQmFuZCwgc2NhbGVMaW5lYXIgfSBmcm9tICdkMy1zY2FsZSc7XG5pbXBvcnQgeyBzdGFjayB9IGZyb20gJ2QzLXNoYXBlJztcbmltcG9ydCB7IHV0Y0Zvcm1hdCB9IGZyb20gJ2QzLXRpbWUtZm9ybWF0JztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgT2JzZXJ2YWJsZSxcbiAgY29tYmluZUxhdGVzdCxcbiAgbWFwLFxuICBzaGFyZVJlcGxheSxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBTaW5nbGVTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi9pbnB1dC9zaW5nbGUtc2VsZWN0L3NpbmdsZS1zZWxlY3QuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIEludGVydmFsLFxuICBnZXRJbnRlcnZhbFRpdGxlLFxuICBnZXRNYWpvckludGVydmFsLFxuICBnZXRNYWpvckludGVydmFsRm9ybWF0LFxuICBnZXRNaW5vckludGVydmFsRm9ybWF0LFxuICBnZXRUaW1lSW50ZXJ2YWwsXG4gIGludGVydmFscyxcbn0gZnJvbSAnLi4vaW50ZXJ2YWxzJztcbmltcG9ydCB7XG4gIGdldENvbHVtbldpZHRoLFxuICBnZXREYXRlUmFuZ2UsXG4gIHBvaW50UmVkdWNlcixcbn0gZnJvbSAnLi9zdGFja2VkLWNvbHVtbi5oZWxwZXJzJztcblxuY29uc3QgTUFYX0NPTFVNTlMgPSA3MjtcbmNvbnN0IERFRkFVTFRfSU5URVJWQUw6IEludGVydmFsID0gJ21vbnRoJztcblxuLy8gVE9ETzogb25jZSB3ZSB1cGdyYWRlIHRvIEFuZ3VsYXIgMTYsIHRoaXMgY29tcG9uZW50IGNhbiBiZSBjbGVhbmVkIHVwIHdpdGhcbi8vIHNpZ25hbHMgaW5zdGVhZCBvZiBSeEpTLlxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncml2LXN0YWNrZWQtY29sdW1uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N0YWNrZWQtY29sdW1uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3RhY2tlZC1jb2x1bW4uY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU3RhY2tlZENvbHVtbkNvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5wdXQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTdGFja2VkQ29sdW1uQ29tcG9uZW50LlN0YWNrW10+KFxuICAgIFtdLFxuICApO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGlucHV0KHY6IFN0YWNrZWRDb2x1bW5Db21wb25lbnQuU3RhY2tbXSkge1xuICAgIHRoaXMuaW5wdXQkLm5leHQodik7XG4gIH1cbiAgcHVibGljIGdldCBpbnB1dCgpOiBTdGFja2VkQ29sdW1uQ29tcG9uZW50LlN0YWNrW10ge1xuICAgIHJldHVybiB0aGlzLmlucHV0JC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSB3aWR0aCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oOTYwKTtcbiAgQElucHV0KClcbiAgcHVibGljIHNldCB3aWR0aCh2OiBudW1iZXIpIHtcbiAgICB0aGlzLndpZHRoJC5uZXh0KHYpO1xuICB9XG4gIHB1YmxpYyBnZXQgd2lkdGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy53aWR0aCQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgaGVpZ2h0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigyNTYpO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGhlaWdodCh2OiBudW1iZXIpIHtcbiAgICB0aGlzLmhlaWdodCQubmV4dCh2KTtcbiAgfVxuICBwdWJsaWMgZ2V0IGhlaWdodCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmhlaWdodCQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB2YWx1ZUZvcm1hdHRlcjogKHY6IG51bWJlcikgPT4gc3RyaW5nID0gdiA9PiB2LnRvU3RyaW5nKCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBpbnRlcnZhbCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEludGVydmFsPihERUZBVUxUX0lOVEVSVkFMKTtcbiAgQElucHV0KClcbiAgcHVibGljIHNldCBpbnRlcnZhbCh2OiBJbnRlcnZhbCkge1xuICAgIHRoaXMuaW50ZXJ2YWwkLm5leHQodik7XG4gIH1cbiAgcHVibGljIGdldCBpbnRlcnZhbCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbnRlcnZhbCQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ2NvbnRyb2xzJylcbiAgcHVibGljIHJlYWRvbmx5IGNvbnRyb2xzPzogVGVtcGxhdGVSZWY8YW55PjtcblxuICBwcml2YXRlIHJlYWRvbmx5IGFsbG93ZWRJbnRlcnZhbHMkOiBPYnNlcnZhYmxlPEludGVydmFsW10+ID0gdGhpcy5pbnB1dCQucGlwZShcbiAgICBtYXAoaW5wdXQgPT4ge1xuICAgICAgY29uc3QgbnVtVmlzaWJsZUNvbHVtbnMgPSBpbnB1dC5maWx0ZXIoXG4gICAgICAgIHN0YWNrID0+IHN0YWNrLmZpbHRlcihzID0+IHMuc3R5bGUgPT09ICd0b29sdGlwT25seScpLmxlbmd0aCA9PT0gMCxcbiAgICAgICkubGVuZ3RoO1xuXG4gICAgICBjb25zdCBbbWluRGF0ZSwgbWF4RGF0ZV0gPSBnZXREYXRlUmFuZ2UoaW5wdXQpO1xuXG4gICAgICByZXR1cm4gaW50ZXJ2YWxzLmZpbHRlcihpbnRlcnZhbCA9PiB7XG4gICAgICAgIGNvbnN0IHRpbWVJbnRlcnZhbCA9IGdldFRpbWVJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgICAgIGNvbnN0IHhTdGVwc0NvdW50ID0gdGltZUludGVydmFsLnJhbmdlKFxuICAgICAgICAgIHRpbWVJbnRlcnZhbC5mbG9vcihtaW5EYXRlKSxcbiAgICAgICAgICB0aW1lSW50ZXJ2YWwuZmxvb3IodGltZUludGVydmFsLm9mZnNldChtYXhEYXRlLCAxKSksXG4gICAgICAgICkubGVuZ3RoO1xuICAgICAgICByZXR1cm4gbnVtVmlzaWJsZUNvbHVtbnMgKiB4U3RlcHNDb3VudCA8PSBNQVhfQ09MVU1OUztcbiAgICAgIH0pO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgcmVhZG9ubHkgaW50ZXJ2YWxPcHRpb25zJCA9IHRoaXMuYWxsb3dlZEludGVydmFscyQucGlwZShcbiAgICBtYXAoaW50ZXJ2YWxzID0+XG4gICAgICBpbnRlcnZhbHMubWFwKFxuICAgICAgICAoaW50ZXJ2YWwpOiBTaW5nbGVTZWxlY3RDb21wb25lbnQuT3B0aW9uID0+ICh7XG4gICAgICAgICAgaWQ6IGludGVydmFsLFxuICAgICAgICAgIHRpdGxlOiBnZXRJbnRlcnZhbFRpdGxlKGludGVydmFsKSxcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgICksXG4gICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KSxcbiAgKTtcblxuICByZWFkb25seSBzZWxlY3RlZEludGVydmFsT3B0aW9uJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuaW50ZXJ2YWwkLFxuICAgIHRoaXMuaW50ZXJ2YWxPcHRpb25zJCxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtpbnRlcnZhbCwgb3B0aW9uc10pID0+IHtcbiAgICAgIGNvbnN0IGFsbG93ZWRJbnRlcnZhbHMgPSBvcHRpb25zLm1hcCgoeyBpZCB9KSA9PiBpZCBhcyBJbnRlcnZhbCk7XG4gICAgICBpZiAoIWFsbG93ZWRJbnRlcnZhbHMuaW5jbHVkZXMoaW50ZXJ2YWwpKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0QWxsb3dlZCA9IGFsbG93ZWRJbnRlcnZhbHMuYXQoMCk7XG4gICAgICAgIGNvbnN0IGxhc3RBbGxvd2VkID0gYWxsb3dlZEludGVydmFscy5hdCgtMSk7XG4gICAgICAgIGlmICghZmlyc3RBbGxvd2VkIHx8ICFsYXN0QWxsb3dlZCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgaWYgKGludGVydmFscy5pbmRleE9mKGludGVydmFsKSA8IGludGVydmFscy5pbmRleE9mKGZpcnN0QWxsb3dlZCkpXG4gICAgICAgICAgaW50ZXJ2YWwgPSBmaXJzdEFsbG93ZWQ7XG4gICAgICAgIGlmIChpbnRlcnZhbHMuaW5kZXhPZihpbnRlcnZhbCkgPiBpbnRlcnZhbHMuaW5kZXhPZihsYXN0QWxsb3dlZCkpXG4gICAgICAgICAgaW50ZXJ2YWwgPSBsYXN0QWxsb3dlZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvcHRpb25zLmZpbmQobyA9PiBvLmlkID09PSBpbnRlcnZhbCkgPz8gbnVsbDtcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pLFxuICApO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGVkSW50ZXJ2YWwkID0gdGhpcy5zZWxlY3RlZEludGVydmFsT3B0aW9uJC5waXBlKFxuICAgIG1hcChvcHRpb24gPT4gKG9wdGlvbiA/IChvcHRpb24uaWQgYXMgSW50ZXJ2YWwpIDogREVGQVVMVF9JTlRFUlZBTCkpLFxuICApO1xuXG4gIHNldEludGVydmFsT3B0aW9uKG9wdGlvbjogU2luZ2xlU2VsZWN0Q29tcG9uZW50Lk9wdGlvbikge1xuICAgIHRoaXMuaW50ZXJ2YWwgPSBvcHRpb24uaWQgYXMgSW50ZXJ2YWw7XG4gIH1cblxuICByZWFkb25seSBiaW5uZWREYXRhJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuaW5wdXQkLFxuICAgIHRoaXMuc2VsZWN0ZWRJbnRlcnZhbCQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbaW5wdXQsIGludGVydmFsXSkgPT5cbiAgICAgIGlucHV0Lm1hcCgoc3RhY2spOiBTdGFja2VkQ29sdW1uQ29tcG9uZW50LlN0YWNrID0+IHtcbiAgICAgICAgY29uc3QgdGltZUludGVydmFsID0gZ2V0VGltZUludGVydmFsKGludGVydmFsKTtcblxuICAgICAgICByZXR1cm4gc3RhY2subWFwKHNlcmllcyA9PiB7XG4gICAgICAgICAgY29uc3QgYmlubmVkID0gbmV3IE1hcDxudW1iZXIsIFN0YWNrZWRDb2x1bW5Db21wb25lbnQuVmFsdWVbXT4oKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IHBvaW50IG9mIHNlcmllcy5kYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBiaW4gPSB0aW1lSW50ZXJ2YWwuZmxvb3IocG9pbnQuZGF0ZSkudmFsdWVPZigpO1xuICAgICAgICAgICAgaWYgKCFiaW5uZWQuaGFzKGJpbikpIHtcbiAgICAgICAgICAgICAgYmlubmVkLnNldChiaW4sIFtdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJpbm5lZC5nZXQoYmluKSEucHVzaChwb2ludCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zZXJpZXMsXG4gICAgICAgICAgICBkYXRhOiBbLi4uYmlubmVkLmVudHJpZXMoKV0ubWFwKChbZGF0ZVZhbHVlLCBwb2ludHNdKSA9PiAoe1xuICAgICAgICAgICAgICBkYXRlOiBuZXcgRGF0ZShkYXRlVmFsdWUpLFxuICAgICAgICAgICAgICB2YWx1ZTogcG9pbnRSZWR1Y2VyKHBvaW50cyksXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICApLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgcmVhZG9ubHkgZHJhd0RhdGEkID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5iaW5uZWREYXRhJCxcbiAgICB0aGlzLndpZHRoJCxcbiAgICB0aGlzLmhlaWdodCQsXG4gICAgdGhpcy5zZWxlY3RlZEludGVydmFsJCxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtiaW5uZWREYXRhLCB3aWR0aCwgaGVpZ2h0LCBpbnRlcnZhbF0pID0+IHtcbiAgICAgIGNvbnN0IHZpZXdCb3ggPSBgMCAwICR7d2lkdGh9ICR7aGVpZ2h0fWA7XG4gICAgICBjb25zdCBwYWRkaW5nID0gMTY7XG5cbiAgICAgIGNvbnN0IGludmlzQ29sdW1ucyA9IGJpbm5lZERhdGEuZmlsdGVyKFxuICAgICAgICBzdGFjayA9PiBzdGFjay5maWx0ZXIocyA9PiBzLnN0eWxlID09ICd0b29sdGlwT25seScpLmxlbmd0aCA+IDAsXG4gICAgICApLmxlbmd0aDtcbiAgICAgIGNvbnN0IHZpc2libGVDb2x1bW5zID0gYmlubmVkRGF0YS5sZW5ndGggLSBpbnZpc0NvbHVtbnM7XG5cbiAgICAgIGNvbnN0IFttaW5EYXRlLCBtYXhEYXRlXSA9IGdldERhdGVSYW5nZShiaW5uZWREYXRhKTtcbiAgICAgIGNvbnN0IGhhc011bHRpcGxlWWVhcnMgPSBtaW5EYXRlLmdldEZ1bGxZZWFyKCkgPCBtYXhEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICBjb25zdCB4TWlub3JJbnRlcnZhbEZvcm1hdCA9IGdldE1pbm9ySW50ZXJ2YWxGb3JtYXQoaW50ZXJ2YWwpO1xuICAgICAgY29uc3QgbWlub3JGb3JtYXR0ZXIgPSB1dGNGb3JtYXQoeE1pbm9ySW50ZXJ2YWxGb3JtYXQpO1xuICAgICAgY29uc3QgbWlub3JUaW1lSW50ZXJ2YWwgPSBnZXRUaW1lSW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgY29uc3QgeFN0ZXBzID0gbWlub3JUaW1lSW50ZXJ2YWwucmFuZ2UoXG4gICAgICAgIG1pbm9yVGltZUludGVydmFsLmZsb29yKG1pbkRhdGUpLFxuICAgICAgICBtaW5vclRpbWVJbnRlcnZhbC5mbG9vcihtaW5vclRpbWVJbnRlcnZhbC5vZmZzZXQobWF4RGF0ZSwgMSkpLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHhNYWpvckludGVydmFsID0gZ2V0TWFqb3JJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgICBjb25zdCB4TWFqb3JJbnRlcnZhbEZvcm1hdCA9IGdldE1ham9ySW50ZXJ2YWxGb3JtYXQoXG4gICAgICAgIHhNYWpvckludGVydmFsLFxuICAgICAgICBoYXNNdWx0aXBsZVllYXJzLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IG1ham9yRm9ybWF0dGVyID0gdXRjRm9ybWF0KHhNYWpvckludGVydmFsRm9ybWF0KTtcbiAgICAgIGNvbnN0IGZ1bGxGb3JtYXR0ZXIgPSB1dGNGb3JtYXQoXG4gICAgICAgIGAke3hNaW5vckludGVydmFsRm9ybWF0fSAke3hNYWpvckludGVydmFsRm9ybWF0fWAsXG4gICAgICApO1xuXG4gICAgICBjb25zdCB4T3V0ZXJTY2FsZSA9IHNjYWxlQmFuZCgpXG4gICAgICAgIC5kb21haW4oeFN0ZXBzLm1hcChkYXRlID0+IGZ1bGxGb3JtYXR0ZXIoZGF0ZSkpKVxuICAgICAgICAucmFuZ2UoWzAsIHdpZHRoXSk7XG5cbiAgICAgIGNvbnN0IGNvbHVtbldpZHRoID0gZ2V0Q29sdW1uV2lkdGgoeFN0ZXBzLmxlbmd0aCAqIHZpc2libGVDb2x1bW5zKTtcbiAgICAgIGNvbnN0IGNvbHVtblBhZGRpbmcgPSA0O1xuICAgICAgY29uc3Qgb3V0ZXJQYWRkaW5nID1cbiAgICAgICAgKHhPdXRlclNjYWxlLmJhbmR3aWR0aCgpIC1cbiAgICAgICAgICAoY29sdW1uUGFkZGluZyAqIChiaW5uZWREYXRhLmxlbmd0aCAtIDEgLSBpbnZpc0NvbHVtbnMpICtcbiAgICAgICAgICAgIGNvbHVtbldpZHRoICogKGJpbm5lZERhdGEubGVuZ3RoIC0gaW52aXNDb2x1bW5zKSkpIC9cbiAgICAgICAgMjtcblxuICAgICAgdHlwZSBTZXJpZXNQb2ludCA9IFN0YWNrZWRDb2x1bW5Db21wb25lbnQuVmFsdWUgJiB7XG4gICAgICAgIHNlcmllczogU3RhY2tlZENvbHVtbkNvbXBvbmVudC5TZXJpZXM7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZW5kZXJJbmZvcm1hdGlvbiA9IGJpbm5lZERhdGEubWFwKHN0YWNrRGF0YSA9PiB7XG4gICAgICAgIC8qXG4gICAgICAgICAgQ3JlYXRlIGFuIGFycmF5IHdpdGggZXZlcnkgZGF0YSBwb2ludCArIHRoZWlyIGFzc29jaWF0ZWQgc2VyaWVzLlxuICAgICAgICAgIGkuZS4gTWFrZSBhbiBiYWNrbGluayBmb3IgZWFjaCBlbGVtZW50IHRvIGl0cyBzZXJpZXMuXG4gICAgICAgICovXG4gICAgICAgIGNvbnN0IHN0YWNrZWRUYWJsZSA9IHN0YWNrRGF0YS5yZWR1Y2U8U2VyaWVzUG9pbnRbXT4oXG4gICAgICAgICAgKHRhYmxlLCBzKSA9PiBbXG4gICAgICAgICAgICAuLi50YWJsZSxcbiAgICAgICAgICAgIC4uLnMuZGF0YS5tYXAocG9pbnQgPT4gKHtcbiAgICAgICAgICAgICAgLi4ucG9pbnQsXG4gICAgICAgICAgICAgIHNlcmllczogcyxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIFtdLFxuICAgICAgICApO1xuXG4gICAgICAgIC8qXG4gICAgICAgICAgTWFwcyBlYWNoIG9mIHRoZSBTZXJpZXNQb2ludHMgYmFzZWQgb24gbGFiZWwuXG4gICAgICAgICAgVGhlbiBtYXAgZWFjaCBvZiB0aG9zZSBtYXBzIHRvIGEgZGF0ZS5cblxuICAgICAgICAgIEV4YW1wbGU6XG4gICAgICAgICAgICBJZiB3ZSB3ZXJlIGluZGV4aW5nIHRoZSBmb2xsb3dpbmcgZGF0YTpcbiAgICAgICAgICAgICAgKiBFc3RpbWF0ZXMgQ29tcGxldGUgLT4gNSBpbiBKYW51YXJ5LCA3IGluIEZlYnJ1YXJ5XG4gICAgICAgICAgICAgICogRXN0aW1hdGVzIEluY29tcGxldGUgLT4gMyBpbiBKYW51YXJ5LCAzIGluIEZlYnJ1YXJ5XG4gICAgICAgICAgICBXZSB3b3VsZCBnZXQgYW4gaW5kZXhlZCB0YWJsZSBsaWtlIHRoZSBmb2xsb3dpbmcsIChub3RlIHRoaXMgaXMgcHNldWRvY29kZSk6XG4gICAgICAgICAgICAgICdKYW51YXJ5JzogeyAnRXN0aW1hdGVzIENvbXBsZXRlJzogNSwgJ0VzdGltYXRlcyBJbmNvbXBsZXRlJzogMyB9XG4gICAgICAgICAgICAgICdGZWJydWFyeSc6IHsgJ0VzdGltYXRlcyBDb21wbGV0ZSc6IDcsICdFc3RpbWF0ZXMgSW5jb21wbGV0ZSc6IDMgfVxuICAgICAgICAqL1xuICAgICAgICBjb25zdCBpbmRleGVkVGFibGU6IE1hcDxEYXRlLCBNYXA8c3RyaW5nLCBTZXJpZXNQb2ludD4+ID0gaW5kZXgoXG4gICAgICAgICAgc3RhY2tlZFRhYmxlLFxuICAgICAgICAgIGQgPT4gZC5kYXRlLFxuICAgICAgICAgIGQgPT4gZC5zZXJpZXMubGFiZWwsXG4gICAgICAgICk7XG5cbiAgICAgICAgLypcbiAgICAgICAgICBUaGUgb3V0cHV0IG9mIFwic3RhY2soKVwiIGlzIGFuIGFycmF5IG9mIGFycmF5cyBvZiB0dXBsZXMuXG4gICAgICAgICAgICBUaGUgdHVwbGVzIHVubmVzdCBhcyBbYmFzZWxpbmUsIHRvcGxpbmVdLlxuICAgICAgICAgICAgRWFjaCBcImtleVwiIGludm9sdmVkIGluIHRoZSBzdGFjayBoYXMgYW4gYXJyYXkgb2YgdHVwbGVzIHJlbGF0aW5nIHRvIGl0LlxuICAgICAgICAgICAgICBpLmUuIFsgRGF0ZSAxIFR1cGxlLCBEYXRlIDIgVHVwbGUgXVxuICAgICAgICAgICAgQWxsIFwia2V5XCIgYXJyYXlzIGFyZSBjb250YWluZWQgaW4gdGhlIG91dGVyIGFycmF5LlxuICAgICAgICAgICAgICBpLmUuIFsgS2V5IDEgVHVwbGVzLCBLZXkgMiBUdXBsZXNdXG5cbiAgICAgICAgICBXZSBzZWxlY3QgdGhlIGtleXMgdXNpbmcgXCIua2V5cygpXCIuXG4gICAgICAgICAgICBGb3Igb3VyIHB1cnBvc2VzLCB0aGUga2V5cyBhcmUgdGhlIGxlZ2VuZCBlbGVtZW50cy5cbiAgICAgICAgICAgIGkuZS4gSWYgeW91IGhhdmUgdHdvIGJsb2NrcyBvZiB0aGUgc2FtZSBjb2xvciwgdGhleSBoYXZlIHRoZSBzYW1lIGtleS5cblxuICAgICAgICAgIFdlIHNlbGVjdCB0aGUgaGVpZ2h0cyBvZiB0aGUgYmxvY2tzIHVzaW5nIFwiLnZhbHVlKClcIi5cblxuICAgICAgICAgIFdlIGFyZSBnb2luZyB0byBzdGFjayB0aGUgYmxvY2tzIG9uIHRvcCBvZiBlYWNoIG90aGVyLlxuICAgICAgICAgICAgVGhlIGJhc2VsaW5lIG9mIHRoZSBmaXJzdCBrZXkgdHVwbGVzIGFyZSAwLlxuICAgICAgICAgICAgVGhlIGJhc2VsaW5lIG9mIHRoZSBzZWNvbmQga2V5IHR1cGxlcyBhcmUgdGhlIHRvcGxpbmUgb2YgdGhlIGFzc29jaWF0ZWQgZmlyc3Qga2V5IHR1cGxlLlxuXG4gICAgICAgICAgRXhhbXBsZTpcbiAgICAgICAgICAgIElmIHdlIHdlcmUgc3RhY2tpbmcgdGhlIGZvbGxvd2luZyBkYXRhOlxuICAgICAgICAgICAgICAqIEVzdGltYXRlcyBDb21wbGV0ZSAtPiA1IGluIEphbnVhcnksIDcgaW4gRmVicnVhcnlcbiAgICAgICAgICAgICAgKiBFc3RpbWF0ZXMgSW5jb21wbGV0ZSAtPiAzIGluIEphbnVhcnksIDMgaW4gRmVicnVhcnlcbiAgICAgICAgICAgIFdlIHdvdWxkIGdldCBhIHN0YWNrIG9mOlxuICAgICAgICAgICAgICBbICBbIFswLDVdLFswLDddIF0sIFsgWzUsOF0sWzcsMTBdIF0gIF1cbiAgICAgICAgKi9cbiAgICAgICAgY29uc3Qgc3RhY2tlZCA9IHN0YWNrPFxuICAgICAgICAgIHR5cGVvZiBpbmRleGVkVGFibGUgZXh0ZW5kcyBNYXA8aW5mZXIgSywgaW5mZXIgVj4gPyBbSywgVl0gOiBuZXZlclxuICAgICAgICA+KClcbiAgICAgICAgICAua2V5cyhzdGFja0RhdGEubWFwKHYgPT4gdi5sYWJlbCkpXG4gICAgICAgICAgLnZhbHVlKChbXywgZ3JvdXBdLCBrZXkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBncm91cC5nZXQoa2V5KSEudmFsdWU7XG4gICAgICAgICAgfSkoaW5kZXhlZFRhYmxlKTtcblxuICAgICAgICByZXR1cm4geyBpbmRleGVkVGFibGUsIHN0YWNrZWQgfTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBUaGUgZG9tYWluIHNob3VsZCBiZSBiYXNlZCBvbiB0aGUgaGlnaGVzdCB2YWx1ZSBpbiBhbnkgc3RhY2ssIG9uIGFueSBkYXRlLlxuICAgICAgbGV0IGRvbWFpbk1heCA9IDA7XG4gICAgICAvLyBGb3IgZWFjaCB1bmlxdWUgc3RhY2ssXG4gICAgICByZW5kZXJJbmZvcm1hdGlvbi5mb3JFYWNoKCh7IHN0YWNrZWQsIGluZGV4ZWRUYWJsZSB9KSA9PiB7XG4gICAgICAgIC8vIEZvciBlYWNoIGRhdGUsXG4gICAgICAgIFsuLi5pbmRleGVkVGFibGUudmFsdWVzKCldLmZvckVhY2goKHBvaW50TWFwLCBpKSA9PiB7XG4gICAgICAgICAgLy8gRm9yIGVhY2ggc2VyaWVzLFxuICAgICAgICAgIFsuLi5wb2ludE1hcC52YWx1ZXMoKV0uZm9yRWFjaCgoXywgaikgPT4ge1xuICAgICAgICAgICAgaWYgKF8uc2VyaWVzLnN0eWxlID09ICd0b29sdGlwT25seScpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZG9tYWluTWF4ID0gTWF0aC5tYXgoZG9tYWluTWF4LCAuLi5zdGFja2VkW2pdW2ldKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGlmIChkb21haW5NYXggPT09IDApIGRvbWFpbk1heCA9IDE7XG4gICAgICBjb25zdCB5U2NhbGUgPSBzY2FsZUxpbmVhcigpXG4gICAgICAgIC5kb21haW4oWzAsIGRvbWFpbk1heF0pXG4gICAgICAgIC5yYW5nZShbaGVpZ2h0IC0gcGFkZGluZyAqIDIsIHBhZGRpbmddKTtcblxuICAgICAgY29uc3QgcmVjdHM6IHtcbiAgICAgICAgZGF0ZVZhbHVlOiBudW1iZXI7XG4gICAgICAgIHg6IG51bWJlcjtcbiAgICAgICAgeTogbnVtYmVyO1xuICAgICAgICB3aWR0aDogbnVtYmVyO1xuICAgICAgICBoZWlnaHQ6IG51bWJlcjtcbiAgICAgICAgZmlsbDogc3RyaW5nO1xuICAgICAgICBzdHJpcGVkOiBib29sZWFuO1xuICAgICAgICBzZXJpZXNQb2ludDogU2VyaWVzUG9pbnQ7XG4gICAgICB9W10gPSBbXTtcbiAgICAgIGxldCBpbnZpc0NvbHVtbnNTb0ZhciA9IDA7XG4gICAgICAvLyBGb3IgZWFjaCB1bmlxdWUgc3RhY2ssXG4gICAgICByZW5kZXJJbmZvcm1hdGlvbi5mb3JFYWNoKCh7IHN0YWNrZWQsIGluZGV4ZWRUYWJsZSB9LCBpbmRleCkgPT4ge1xuICAgICAgICBsZXQgaW52aXNDb2x1bW5Gb3VuZCA9IGZhbHNlO1xuICAgICAgICAvLyBGb3IgZWFjaCBkYXRlLFxuICAgICAgICBbLi4uaW5kZXhlZFRhYmxlLmVudHJpZXMoKV0uZm9yRWFjaCgoW2RhdGUsIHBvaW50TWFwXSwgaSkgPT4ge1xuICAgICAgICAgIC8vIEZvciBlYWNoIHNlcmllcyxcbiAgICAgICAgICBbLi4ucG9pbnRNYXAuZW50cmllcygpXS5mb3JFYWNoKChbXywgc2VyaWVzUG9pbnRdLCBqKSA9PiB7XG4gICAgICAgICAgICAvLyBHZXQgdGhlIHNpemUgb2YgdGhlIGJveCB3ZSBhcmUgYWJvdXQgdG8gZHJhdy5cbiAgICAgICAgICAgIGNvbnN0IFtiYXNlbGluZSwgdG9wbGluZV0gPSBzdGFja2VkW2pdW2ldO1xuXG4gICAgICAgICAgICBpZiAoc2VyaWVzUG9pbnQuc2VyaWVzLnN0eWxlID09ICd0b29sdGlwT25seScpIHtcbiAgICAgICAgICAgICAgaW52aXNDb2x1bW5Gb3VuZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9XG4gICAgICAgICAgICAgIHNlcmllc1BvaW50LnNlcmllcy5zdHlsZSA9PSAndG9vbHRpcE9ubHknID8gMCA6IGNvbHVtbldpZHRoO1xuICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0geVNjYWxlKGJhc2VsaW5lKSAtIHlTY2FsZSh0b3BsaW5lKTtcbiAgICAgICAgICAgIGNvbnN0IHggPVxuICAgICAgICAgICAgICAoeE91dGVyU2NhbGUoZnVsbEZvcm1hdHRlcihkYXRlKSkgPz8gMCkgK1xuICAgICAgICAgICAgICBvdXRlclBhZGRpbmcgK1xuICAgICAgICAgICAgICBjb2x1bW5XaWR0aCAqIChpbmRleCAtIGludmlzQ29sdW1uc1NvRmFyKSArXG4gICAgICAgICAgICAgIGNvbHVtblBhZGRpbmcgKiAoaW5kZXggLSBpbnZpc0NvbHVtbnNTb0Zhcik7XG4gICAgICAgICAgICBjb25zdCB5ID0geVNjYWxlKGJhc2VsaW5lKSAtIGhlaWdodDtcbiAgICAgICAgICAgIGxldCBmaWxsID0gJyc7XG4gICAgICAgICAgICBpZiAoc2VyaWVzUG9pbnQuc2VyaWVzLnN0eWxlICE9ICd0b29sdGlwT25seScpIHtcbiAgICAgICAgICAgICAgZmlsbCA9IGB2YXIoJHtzZXJpZXNQb2ludC5zZXJpZXMuY29sb3JUb2tlbn0pYDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVjdHMucHVzaCh7XG4gICAgICAgICAgICAgIGRhdGVWYWx1ZTogZGF0ZS52YWx1ZU9mKCksXG4gICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgIHksXG4gICAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICAgIGZpbGwsXG4gICAgICAgICAgICAgIHN0cmlwZWQ6IHNlcmllc1BvaW50LnNlcmllcy5zdHlsZSA9PT0gJ3N0cmlwZWQnLFxuICAgICAgICAgICAgICBzZXJpZXNQb2ludCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGludmlzQ29sdW1uRm91bmQpIHtcbiAgICAgICAgICBpbnZpc0NvbHVtbnNTb0ZhcisrO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgeE1pbm9yVGlja3MgPSB4U3RlcHMubWFwKGRhdGUgPT4gKHtcbiAgICAgICAgZGF0ZVZhbHVlOiBkYXRlLnZhbHVlT2YoKSxcbiAgICAgICAgbGFiZWw6IG1pbm9yRm9ybWF0dGVyKGRhdGUpLFxuICAgICAgICB4OlxuICAgICAgICAgICh4T3V0ZXJTY2FsZShmdWxsRm9ybWF0dGVyKGRhdGUpKSA/PyAwKSArIHhPdXRlclNjYWxlLmJhbmR3aWR0aCgpIC8gMixcbiAgICAgIH0pKTtcbiAgICAgIGNvbnN0IHhNYWpvclRpY2tzID1cbiAgICAgICAgaW50ZXJ2YWwgIT09ICd5ZWFyJ1xuICAgICAgICAgID8geFN0ZXBzXG4gICAgICAgICAgICAgIC5tYXAoZGF0ZSA9PiAoe1xuICAgICAgICAgICAgICAgIGRhdGVWYWx1ZTogZGF0ZS52YWx1ZU9mKCksXG4gICAgICAgICAgICAgICAgbGFiZWw6IG1ham9yRm9ybWF0dGVyKGRhdGUpLFxuICAgICAgICAgICAgICAgIHg6XG4gICAgICAgICAgICAgICAgICAoeE91dGVyU2NhbGUoZnVsbEZvcm1hdHRlcihkYXRlKSkgPz8gMCkgK1xuICAgICAgICAgICAgICAgICAgeE91dGVyU2NhbGUuYmFuZHdpZHRoKCkgLyAyLFxuICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAodGljaywgaSwgdGlja3MpID0+XG4gICAgICAgICAgICAgICAgICBpID09PSAwIHx8IHRpY2subGFiZWwgIT09IHRpY2tzW2kgLSAxXS5sYWJlbCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgIDogW107XG5cbiAgICAgIGNvbnN0IHlUaWNrcyA9IHlTY2FsZS50aWNrcyg1KTtcblxuICAgICAgY29uc3QgaG92ZXJCYW5kV2lkdGggPVxuICAgICAgICAocmVuZGVySW5mb3JtYXRpb24ubGVuZ3RoIC0gaW52aXNDb2x1bW5zKSAqIGNvbHVtbldpZHRoICtcbiAgICAgICAgKHJlbmRlckluZm9ybWF0aW9uLmxlbmd0aCArIDEgLSBpbnZpc0NvbHVtbnMpICogY29sdW1uUGFkZGluZztcbiAgICAgIGNvbnN0IGhvdmVyQmFuZHMgPSB4U3RlcHMubWFwKGRhdGUgPT4gKHtcbiAgICAgICAgZGF0ZVZhbHVlOiBkYXRlLnZhbHVlT2YoKSxcbiAgICAgICAgeDpcbiAgICAgICAgICAoeE91dGVyU2NhbGUoZnVsbEZvcm1hdHRlcihkYXRlKSkgPz8gMCkgK1xuICAgICAgICAgICh4T3V0ZXJTY2FsZS5iYW5kd2lkdGgoKSAtIGhvdmVyQmFuZFdpZHRoKSAvIDIsXG4gICAgICAgIHk6IHlTY2FsZShkb21haW5NYXgpLFxuICAgICAgICB3aWR0aDogaG92ZXJCYW5kV2lkdGgsXG4gICAgICAgIGhlaWdodDogeVNjYWxlKDApIC0geVNjYWxlKGRvbWFpbk1heCksXG4gICAgICB9KSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbHVtbldpZHRoLFxuICAgICAgICBob3ZlckJhbmRzLFxuICAgICAgICByZWN0cyxcbiAgICAgICAgdmlld0JveCxcbiAgICAgICAgeE1pbm9yVGlja3MsXG4gICAgICAgIHhNYWpvclRpY2tzLFxuICAgICAgICB5U2NhbGUsXG4gICAgICAgIHlUaWNrcyxcbiAgICAgIH07XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KSxcbiAgKTtcblxuICByZWFkb25seSBlbXB0eSQgPSB0aGlzLmlucHV0JC5waXBlKFxuICAgIG1hcChpbnB1dCA9PlxuICAgICAgaW5wdXQuZXZlcnkoc3RhY2sgPT4gc3RhY2suZXZlcnkoc2VyaWVzID0+IHNlcmllcy5kYXRhLmxlbmd0aCA9PT0gMCkpLFxuICAgICksXG4gICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KSxcbiAgKTtcblxuICByZWFkb25seSBob3ZlcmVkQmFuZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHtcbiAgICBkYXRlVmFsdWU6IG51bWJlcjtcbiAgICBldmVudDogTW91c2VFdmVudDtcbiAgfSB8IG51bGw+KG51bGwpO1xuXG4gIHJlYWRvbmx5IGNhbGxvdXQkID0gY29tYmluZUxhdGVzdChbdGhpcy5ob3ZlcmVkQmFuZCQsIHRoaXMuZHJhd0RhdGEkXSkucGlwZShcbiAgICBtYXAoKFtob3ZlcmVkQmFuZCwgZHJhd0RhdGFdKSA9PiB7XG4gICAgICBpZiAoIWhvdmVyZWRCYW5kKSByZXR1cm4gbnVsbDtcblxuICAgICAgY29uc3QgeyB0YXJnZXQgfSA9IGhvdmVyZWRCYW5kLmV2ZW50O1xuICAgICAgaWYgKCF0YXJnZXQpIHJldHVybiBudWxsO1xuICAgICAgY29uc3QgYW5jaG9yID0gKDxTVkdSZWN0RWxlbWVudD50YXJnZXQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICB0eXBlIE1ldHJpYyA9IHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9O1xuICAgICAgY29uc3QgbWV0cmljczogTWV0cmljW10gPSBkcmF3RGF0YS5yZWN0c1xuICAgICAgICAuZmlsdGVyKHJlY3QgPT4gcmVjdC5kYXRlVmFsdWUgPT09IGhvdmVyZWRCYW5kLmRhdGVWYWx1ZSlcbiAgICAgICAgLm1hcChyZWN0ID0+ICh7XG4gICAgICAgICAgbGFiZWw6IHJlY3Quc2VyaWVzUG9pbnQuc2VyaWVzLmxhYmVsLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlRm9ybWF0dGVyKHJlY3Quc2VyaWVzUG9pbnQudmFsdWUpLFxuICAgICAgICB9KSk7XG5cbiAgICAgIHJldHVybiB7IGFuY2hvciwgbWV0cmljcyB9O1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgU3RhY2tlZENvbHVtbkNvbXBvbmVudCB7XG4gIGV4cG9ydCB0eXBlIFZhbHVlID0geyBkYXRlOiBEYXRlOyB2YWx1ZTogbnVtYmVyIH07XG5cbiAgZXhwb3J0IHR5cGUgU2VyaWVzID0ge1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgZGF0YTogVmFsdWVbXTtcbiAgfSAmIChcbiAgICB8IHtcbiAgICAgICAgY29sb3JUb2tlbjogc3RyaW5nO1xuICAgICAgICBzdHlsZT86ICdzb2xpZCcgfCAnc3RyaXBlZCc7XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHN0eWxlOiAndG9vbHRpcE9ubHknO1xuICAgICAgfVxuICApO1xuXG4gIGV4cG9ydCB0eXBlIFN0YWNrID0gU2VyaWVzW107XG59XG4iLCI8ZGl2ICpuZ0lmPVwiIShlbXB0eSQgfCBhc3luYyk7IGVsc2UgemVyb1N0YXRlXCIgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgPHN2Z1xuICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICpuZ0lmPVwiZHJhd0RhdGEkIHwgYXN5bmM7IGxldCBkXCJcbiAgICBbYXR0ci52aWV3Qm94XT1cImQudmlld0JveFwiXG4gID5cbiAgICA8ZGVmcz5cbiAgICAgIDxwYXR0ZXJuXG4gICAgICAgIGlkPVwic3RyaXBlc1wiXG4gICAgICAgIHg9XCIwXCJcbiAgICAgICAgeT1cIjBcIlxuICAgICAgICBbYXR0ci53aWR0aF09XCJkLmNvbHVtbldpZHRoXCJcbiAgICAgICAgW2F0dHIuaGVpZ2h0XT1cImQuY29sdW1uV2lkdGhcIlxuICAgICAgICBwYXR0ZXJuVW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiXG4gICAgICA+XG4gICAgICAgIDxsaW5lXG4gICAgICAgICAgeDE9XCIwXCJcbiAgICAgICAgICBbYXR0ci55MV09XCJkLmNvbHVtbldpZHRoXCJcbiAgICAgICAgICBbYXR0ci54Ml09XCJkLmNvbHVtbldpZHRoXCJcbiAgICAgICAgICB5Mj1cIjBcIlxuICAgICAgICAgIHN0cm9rZT1cInZhcigtLXdoaXRlLTEwMClcIlxuICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjFcIlxuICAgICAgICA+PC9saW5lPlxuICAgICAgPC9wYXR0ZXJuPlxuICAgIDwvZGVmcz5cbiAgICA8ZyAqbmdGb3I9XCJsZXQgdGljayBvZiBkLnhNaW5vclRpY2tzXCI+XG4gICAgICA8cmVjdFxuICAgICAgICBjbGFzcz1cInRpY2stYmFja2dyb3VuZFwiXG4gICAgICAgIFtjbGFzcy5mb2N1c2VkXT1cIihob3ZlcmVkQmFuZCQgfCBhc3luYyk/LmRhdGVWYWx1ZSA9PT0gdGljay5kYXRlVmFsdWVcIlxuICAgICAgICBbYXR0ci54XT1cInRpY2sueCAtIDIwXCJcbiAgICAgICAgW2F0dHIueV09XCJkLnlTY2FsZSgwKSArIDNcIlxuICAgICAgICB3aWR0aD1cIjQwXCJcbiAgICAgICAgaGVpZ2h0PVwiMTJcIlxuICAgICAgICByeD1cIjJcIlxuICAgICAgPjwvcmVjdD5cbiAgICAgIDx0ZXh0XG4gICAgICAgIGNsYXNzPVwidGljay1sYWJlbFwiXG4gICAgICAgIFthdHRyLnhdPVwidGljay54XCJcbiAgICAgICAgW2F0dHIueV09XCJkLnlTY2FsZSgwKSArIDEyXCJcbiAgICAgICAgdGV4dC1hbmNob3I9XCJtaWRkbGVcIlxuICAgICAgPlxuICAgICAgICB7eyB0aWNrLmxhYmVsIH19XG4gICAgICA8L3RleHQ+XG4gICAgPC9nPlxuICAgIDxnICpuZ0Zvcj1cImxldCB0aWNrIG9mIGQueE1ham9yVGlja3NcIj5cbiAgICAgIDx0ZXh0XG4gICAgICAgIGNsYXNzPVwidGljay1sYWJlbFwiXG4gICAgICAgIFthdHRyLnhdPVwidGljay54XCJcbiAgICAgICAgW2F0dHIueV09XCJkLnlTY2FsZSgwKSArIDI0XCJcbiAgICAgICAgdGV4dC1hbmNob3I9XCJtaWRkbGVcIlxuICAgICAgPlxuICAgICAgICB7eyB0aWNrLmxhYmVsIH19XG4gICAgICA8L3RleHQ+XG4gICAgPC9nPlxuICAgIDxnICpuZ0Zvcj1cImxldCB0aWNrIG9mIGQueVRpY2tzXCI+XG4gICAgICA8cmVjdFxuICAgICAgICBjbGFzcz1cInRpY2tcIlxuICAgICAgICB4PVwiMFwiXG4gICAgICAgIFthdHRyLnldPVwiZC55U2NhbGUodGljaylcIlxuICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICBoZWlnaHQ9XCIxXCJcbiAgICAgID48L3JlY3Q+XG4gICAgICA8dGV4dCBjbGFzcz1cInRpY2stbGFiZWxcIiB4PVwiMFwiIFthdHRyLnldPVwiZC55U2NhbGUodGljaylcIiBkeT1cIi00XCI+XG4gICAgICAgIHt7IHZhbHVlRm9ybWF0dGVyKHRpY2spIH19XG4gICAgICA8L3RleHQ+XG4gICAgPC9nPlxuICAgIDxnICpuZ0Zvcj1cImxldCByZWN0IG9mIGQucmVjdHNcIj5cbiAgICAgIDxyZWN0XG4gICAgICAgIGNsYXNzPVwiY29sdW1uXCJcbiAgICAgICAgW2F0dHIueF09XCJyZWN0LnhcIlxuICAgICAgICBbYXR0ci55XT1cInJlY3QueVwiXG4gICAgICAgIFthdHRyLndpZHRoXT1cInJlY3Qud2lkdGhcIlxuICAgICAgICBbYXR0ci5oZWlnaHRdPVwicmVjdC5oZWlnaHRcIlxuICAgICAgICBbYXR0ci5maWxsXT1cInJlY3QuZmlsbFwiXG4gICAgICAgIFtjbGFzcy5ibHVycmVkXT1cIlxuICAgICAgICAgIChob3ZlcmVkQmFuZCQgfCBhc3luYykgIT09IG51bGwgJiZcbiAgICAgICAgICAoaG92ZXJlZEJhbmQkIHwgYXN5bmMpPy5kYXRlVmFsdWUgIT09IHJlY3QuZGF0ZVZhbHVlXG4gICAgICAgIFwiXG4gICAgICA+PC9yZWN0PlxuICAgICAgPHJlY3RcbiAgICAgICAgKm5nSWY9XCJyZWN0LnN0cmlwZWRcIlxuICAgICAgICBbYXR0ci54XT1cInJlY3QueFwiXG4gICAgICAgIFthdHRyLnldPVwicmVjdC55XCJcbiAgICAgICAgW2F0dHIud2lkdGhdPVwicmVjdC53aWR0aFwiXG4gICAgICAgIFthdHRyLmhlaWdodF09XCJyZWN0LmhlaWdodFwiXG4gICAgICAgIGZpbGw9XCJ1cmwoI3N0cmlwZXMpXCJcbiAgICAgID48L3JlY3Q+XG4gICAgPC9nPlxuICAgIDxyZWN0XG4gICAgICAqbmdGb3I9XCJsZXQgcmVjdCBvZiBkLmhvdmVyQmFuZHNcIlxuICAgICAgW2F0dHIueF09XCJyZWN0LnhcIlxuICAgICAgW2F0dHIueV09XCJyZWN0LnlcIlxuICAgICAgW2F0dHIud2lkdGhdPVwicmVjdC53aWR0aFwiXG4gICAgICBbYXR0ci5oZWlnaHRdPVwicmVjdC5oZWlnaHRcIlxuICAgICAgZmlsbD1cInRyYW5zcGFyZW50XCJcbiAgICAgIChtb3VzZWVudGVyKT1cIlxuICAgICAgICBob3ZlcmVkQmFuZCQubmV4dCh7IGRhdGVWYWx1ZTogcmVjdC5kYXRlVmFsdWUsIGV2ZW50OiAkZXZlbnQgfSlcbiAgICAgIFwiXG4gICAgICAobW91c2VsZWF2ZSk9XCJob3ZlcmVkQmFuZCQubmV4dChudWxsKVwiXG4gICAgPjwvcmVjdD5cbiAgPC9zdmc+XG48L2Rpdj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImNhbGxvdXQkIHwgYXN5bmM7IGxldCBjYWxsb3V0XCI+XG4gIDxyaXYtY2FsbG91dFxuICAgICpyaXYtY2FsbG91dFxuICAgIFthbmNob3JdPVwiY2FsbG91dC5hbmNob3JcIlxuICAgIFtpc01vZGFsXT1cImZhbHNlXCJcbiAgICBbcHJlZmVycmVkUG9zaXRpb25dPVwiJ2NlbnRlci1yaWdodCdcIlxuICAgIFthbGxvd2VkUG9zaXRpb25zXT1cIltcbiAgICAgICdjZW50ZXItcmlnaHQnLFxuICAgICAgJ2NlbnRlci1sZWZ0JyxcbiAgICAgICd0b3AtY2VudGVyJyxcbiAgICAgICdib3R0b20tY2VudGVyJ1xuICAgIF1cIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImNhbGxvdXQtY29udGVudFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNhbGxvdXQtbWV0cmljXCIgKm5nRm9yPVwibGV0IG1ldHJpYyBvZiBjYWxsb3V0Lm1ldHJpY3NcIj5cbiAgICAgICAgPGRpdj57eyBtZXRyaWMubGFiZWwgfX08L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhbGxvdXQtbWV0cmljLXZhbHVlXCI+e3sgbWV0cmljLnZhbHVlIH19PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9yaXYtY2FsbG91dD5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI3plcm9TdGF0ZT5cbiAgPHJpdi16ZXJvLXN0YXRlPjwvcml2LXplcm8tc3RhdGU+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2NvbnRyb2xzPlxuICA8cml2LXNpbmdsZS1zZWxlY3RcbiAgICBbb3B0aW9uc109XCIoaW50ZXJ2YWxPcHRpb25zJCB8IGFzeW5jKSB8fCBbXVwiXG4gICAgW3NlbGVjdGVkT3B0aW9uXT1cInNlbGVjdGVkSW50ZXJ2YWxPcHRpb24kIHwgYXN5bmNcIlxuICAgIChzZWxlY3RlZE9wdGlvbkNoYW5nZSk9XCJzZXRJbnRlcnZhbE9wdGlvbigkZXZlbnQpXCJcbiAgPjwvcml2LXNpbmdsZS1zZWxlY3Q+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -1,8 +1,8 @@
1
1
  import { ChangeDetectionStrategy, Component, Input, ViewChild, } from '@angular/core';
2
2
  import { scaleLinear } from 'd3-scale';
3
3
  import { line } from 'd3-shape';
4
- import { timeDay } from 'd3-time';
5
- import { timeFormat } from 'd3-time-format';
4
+ import { utcDay } from 'd3-time';
5
+ import { utcFormat } from 'd3-time-format';
6
6
  import { BehaviorSubject, combineLatest, map, shareReplay, } from 'rxjs';
7
7
  import { NumberPipe } from '../../format/pipes/number.pipe';
8
8
  import { getIntervalTitle, getMajorInterval, getMajorIntervalFormat, getMinorIntervalFormat, getTimeInterval, intervals, } from '../intervals';
@@ -43,7 +43,7 @@ export class TimeSeriesComponent {
43
43
  const [minDateValue, maxDateValue] = getDateRange(input);
44
44
  return intervals.filter(interval => {
45
45
  const timeInterval = getTimeInterval(interval);
46
- const numSteps = timeInterval.range(timeInterval.floor(minDateValue), timeInterval.ceil(timeDay.offset(maxDateValue, 1))).length;
46
+ const numSteps = timeInterval.range(timeInterval.floor(minDateValue), timeInterval.ceil(utcDay.offset(maxDateValue, 1))).length;
47
47
  return numSteps <= MAX_POINTS && numSteps > 1;
48
48
  });
49
49
  }), shareReplay({ refCount: true, bufferSize: 1 }));
@@ -112,9 +112,9 @@ export class TimeSeriesComponent {
112
112
  const [minDateValue, maxDateValue] = binnedDateRange;
113
113
  const hasMultipleYears = minDateValue.getFullYear() < maxDateValue.getFullYear();
114
114
  const xMinorIntervalFormat = getMinorIntervalFormat(interval);
115
- const minorFormatter = timeFormat(xMinorIntervalFormat);
115
+ const minorFormatter = utcFormat(xMinorIntervalFormat);
116
116
  const xMinorTicks = getTimeInterval(interval)
117
- .range(minDateValue, timeDay.offset(maxDateValue, 1))
117
+ .range(minDateValue, utcDay.offset(maxDateValue, 1))
118
118
  .map(date => ({
119
119
  value: date.valueOf(),
120
120
  label: minorFormatter(date),
@@ -126,8 +126,8 @@ export class TimeSeriesComponent {
126
126
  const xMajorIntervalFormat = getMajorIntervalFormat(xMajorInterval, hasMultipleYears);
127
127
  const timeInterval = getTimeInterval(xMajorInterval);
128
128
  const tickFloor = timeInterval.floor(minDateValue);
129
- const tickCeiling = timeInterval.ceil(timeDay.offset(maxDateValue, 1));
130
- const majorFormatter = timeFormat(xMajorIntervalFormat);
129
+ const tickCeiling = timeInterval.ceil(utcDay.offset(maxDateValue, 1));
130
+ const majorFormatter = utcFormat(xMajorIntervalFormat);
131
131
  const xMajorTicks = timeInterval
132
132
  .range(tickFloor, tickCeiling)
133
133
  .map(tickDate => ({
@@ -280,4 +280,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
280
280
  type: ViewChild,
281
281
  args: ['controls']
282
282
  }] } });
283
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1zZXJpZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdmlzdWFsaXphdGlvbi90aW1lLXNlcmllcy90aW1lLXNlcmllcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi92aXN1YWxpemF0aW9uL3RpbWUtc2VyaWVzL3RpbWUtc2VyaWVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULEtBQUssRUFFTCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDbEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFDTCxlQUFlLEVBRWYsYUFBYSxFQUNiLEdBQUcsRUFDSCxXQUFXLEdBQ1osTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFNUQsT0FBTyxFQUVMLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsc0JBQXNCLEVBQ3RCLHNCQUFzQixFQUN0QixlQUFlLEVBQ2YsU0FBUyxHQUNWLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBb0IsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7O0FBRXZFLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUN0QixNQUFNLGdCQUFnQixHQUFhLEtBQUssQ0FBQztBQUV6Qyw2RUFBNkU7QUFDN0UsK0NBQStDO0FBTy9DLE1BQU0sT0FBTyxtQkFB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LEtBQUs7Z0JBVUssTUFBTTtzQkFEaEIsS0FBSztnQkFZSyxnQkFBZ0I7c0JBRDFCLEtBQUs7Z0JBdUJLLFFBQVE7c0JBRGxCLEtBQUs7Z0JBU1UsUUFBUTtzQkFEdkIsU0FBUzt1QkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgc2NhbGVMaW5lYXIgfSBmcm9tICdkMy1zY2FsZSc7XG5pbXBvcnQgeyBsaW5lIH0gZnJvbSAnZDMtc2hhcGUnO1xuaW1wb3J0IHsgdGltZURheSB9IGZyb20gJ2QzLXRpbWUnO1xuaW1wb3J0IHsgdGltZUZvcm1hdCB9IGZyb20gJ2QzLXRpbWUtZm9ybWF0JztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgT2JzZXJ2YWJsZSxcbiAgY29tYmluZUxhdGVzdCxcbiAgbWFwLFxuICBzaGFyZVJlcGxheSxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBOdW1iZXJQaXBlIH0gZnJvbSAnLi4vLi4vZm9ybWF0L3BpcGVzL251bWJlci5waXBlJztcbmltcG9ydCB7IFNpbmdsZVNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2lucHV0L3NpbmdsZS1zZWxlY3Qvc2luZ2xlLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgSW50ZXJ2YWwsXG4gIGdldEludGVydmFsVGl0bGUsXG4gIGdldE1ham9ySW50ZXJ2YWwsXG4gIGdldE1ham9ySW50ZXJ2YWxGb3JtYXQsXG4gIGdldE1pbm9ySW50ZXJ2YWxGb3JtYXQsXG4gIGdldFRpbWVJbnRlcnZhbCxcbiAgaW50ZXJ2YWxzLFxufSBmcm9tICcuLi9pbnRlcnZhbHMnO1xuaW1wb3J0IHsgRHJhd0RhdGEsIE1hcmtlciwgZ2V0RGF0ZVJhbmdlIH0gZnJvbSAnLi90aW1lLXNlcmllcy5oZWxwZXJzJztcblxuY29uc3QgTUFYX1BPSU5UUyA9IDkwO1xuY29uc3QgREVGQVVMVF9JTlRFUlZBTDogSW50ZXJ2YWwgPSAnZGF5JztcblxuLy8gVE9ETzogb25jZSB3ZSB1cGdyYWRlIHRvIEFuZ3VsYXIgMTYsIHRoaXMgY29tcG9uZW50IGNhbiBiZSBjbGVhbmVkIHVwIHdpdGhcbi8vIHNpZ25hbHMgaW5zdGVhZCBvZiBSeEpTLiBTZWUgY29tbWl0IGUyMzhjMmQuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyaXYtdGltZS1zZXJpZXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGltZS1zZXJpZXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90aW1lLXNlcmllcy5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUaW1lU2VyaWVzQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBpbnB1dCQgPVxuICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8VGltZVNlcmllc0NvbXBvbmVudC5UaW1lU2VyaWVzSW5wdXQ+KFtcbiAgICAgIHtcbiAgICAgICAgcG9pbnRSZWR1Y2VyOiBwb2ludHMgPT5cbiAgICAgICAgICBwb2ludHMucmVkdWNlKCh0b3RhbCwgeyB2YWx1ZSB9KSA9PiB0b3RhbCArIHZhbHVlLCAwKSxcbiAgICAgICAgdmFsdWVGb3JtYXR0ZXI6IHYgPT4gbmV3IE51bWJlclBpcGUoKS50cmFuc2Zvcm0odikgPz8gJycsXG4gICAgICAgIHNlcmllczogW10sXG4gICAgICB9LFxuICAgIF0pO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGlucHV0KHY6IFRpbWVTZXJpZXNDb21wb25lbnQuVGltZVNlcmllc0lucHV0KSB7XG4gICAgdGhpcy5pbnB1dCQubmV4dCh2KTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlucHV0KCk6IFRpbWVTZXJpZXNDb21wb25lbnQuVGltZVNlcmllc0lucHV0IHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dCQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgd2lkdGgkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDk2MCk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgd2lkdGgodjogbnVtYmVyKSB7XG4gICAgdGhpcy53aWR0aCQubmV4dCh2KTtcbiAgfVxuICBwdWJsaWMgZ2V0IHdpZHRoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMud2lkdGgkLmdldFZhbHVlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGhlaWdodCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMjU2KTtcbiAgQElucHV0KClcbiAgcHVibGljIHNldCBoZWlnaHQodjogbnVtYmVyKSB7XG4gICAgdGhpcy5oZWlnaHQkLm5leHQodik7XG4gIH1cbiAgcHVibGljIGdldCBoZWlnaHQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5oZWlnaHQkLmdldFZhbHVlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IHplcm9TdGF0ZU1lc3NhZ2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KFxuICAgICdObyBkYXRhIHRvIGRpc3BsYXkuJyxcbiAgKTtcbiAgQElucHV0KClcbiAgcHVibGljIHNldCB6ZXJvU3RhdGVNZXNzYWdlKHY6IHN0cmluZykge1xuICAgIHRoaXMuemVyb1N0YXRlTWVzc2FnZSQubmV4dCh2KTtcbiAgfVxuICBwdWJsaWMgZ2V0IHplcm9TdGF0ZU1lc3NhZ2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy56ZXJvU3RhdGVNZXNzYWdlJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcmVhZG9ubHkgQk9UVE9NX09GRlNFVCA9IDI0O1xuICByZWFkb25seSBMRUZUX09GRlNFVCA9IDQ4O1xuICByZWFkb25seSBUT1BfUEFERElORyA9IDE2O1xuICByZWFkb25seSBMRUZUX1JJR0hUX1BBRERJTkcgPSA4O1xuICByZWFkb25seSBCT1RUT01fUEFERElORyA9IDg7XG4gIHJlYWRvbmx5IFlfVElDS19DT1VOVCA9IDU7XG4gIHJlYWRvbmx5IFhfTUlOT1JfVElDS19MSU1JVCA9IDE1O1xuXG4gIHJlYWRvbmx5IGRhdGVSYW5nZSQgPSB0aGlzLmlucHV0JC5waXBlKFxuICAgIG1hcChnZXREYXRlUmFuZ2UpLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBpbnRlcnZhbCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEludGVydmFsPihERUZBVUxUX0lOVEVSVkFMKTtcbiAgQElucHV0KClcbiAgcHVibGljIHNldCBpbnRlcnZhbCh2OiBJbnRlcnZhbCkge1xuICAgIHRoaXMuaW50ZXJ2YWwkLm5leHQodik7XG4gIH1cbiAgcHVibGljIGdldCBpbnRlcnZhbCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbnRlcnZhbCQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ2NvbnRyb2xzJylcbiAgcHVibGljIHJlYWRvbmx5IGNvbnRyb2xzPzogVGVtcGxhdGVSZWY8YW55PjtcblxuICBwcml2YXRlIHJlYWRvbmx5IGFsbG93ZWRJbnRlcnZhbHMkOiBPYnNlcnZhYmxlPEludGVydmFsW10+ID0gdGhpcy5pbnB1dCQucGlwZShcbiAgICBtYXAoaW5wdXQgPT4ge1xuICAgICAgY29uc3QgW21pbkRhdGVWYWx1ZSwgbWF4RGF0ZVZhbHVlXSA9IGdldERhdGVSYW5nZShpbnB1dCk7XG5cbiAgICAgIHJldHVybiBpbnRlcnZhbHMuZmlsdGVyKGludGVydmFsID0+IHtcbiAgICAgICAgY29uc3QgdGltZUludGVydmFsID0gZ2V0VGltZUludGVydmFsKGludGVydmFsKTtcbiAgICAgICAgY29uc3QgbnVtU3RlcHMgPSB0aW1lSW50ZXJ2YWwucmFuZ2UoXG4gICAgICAgICAgdGltZUludGVydmFsLmZsb29yKG1pbkRhdGVWYWx1ZSksXG4gICAgICAgICAgdGltZUludGVydmFsLmNlaWwodGltZURheS5vZmZzZXQobWF4RGF0ZVZhbHVlLCAxKSksXG4gICAgICAgICkubGVuZ3RoO1xuXG4gICAgICAgIHJldHVybiBudW1TdGVwcyA8PSBNQVhfUE9JTlRTICYmIG51bVN0ZXBzID4gMTtcbiAgICAgIH0pO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgcmVhZG9ubHkgaW50ZXJ2YWxPcHRpb25zJCA9IHRoaXMuYWxsb3dlZEludGVydmFscyQucGlwZShcbiAgICBtYXAoaW50ZXJ2YWxzID0+XG4gICAgICBpbnRlcnZhbHMubWFwKFxuICAgICAgICAoaW50ZXJ2YWwpOiBTaW5nbGVTZWxlY3RDb21wb25lbnQuT3B0aW9uID0+ICh7XG4gICAgICAgICAgaWQ6IGludGVydmFsLFxuICAgICAgICAgIHRpdGxlOiBnZXRJbnRlcnZhbFRpdGxlKGludGVydmFsKSxcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgICksXG4gICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KSxcbiAgKTtcblxuICByZWFkb25seSBzZWxlY3RlZEludGVydmFsT3B0aW9uJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuaW50ZXJ2YWwkLFxuICAgIHRoaXMuaW50ZXJ2YWxPcHRpb25zJCxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtpbnRlcnZhbCwgb3B0aW9uc10pID0+IHtcbiAgICAgIGNvbnN0IGFsbG93ZWRJbnRlcnZhbHMgPSBvcHRpb25zLm1hcCgoeyBpZCB9KSA9PiBpZCBhcyBJbnRlcnZhbCk7XG4gICAgICBpZiAoIWFsbG93ZWRJbnRlcnZhbHMuaW5jbHVkZXMoaW50ZXJ2YWwpKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0QWxsb3dlZCA9IGFsbG93ZWRJbnRlcnZhbHMuYXQoMCk7XG4gICAgICAgIGNvbnN0IGxhc3RBbGxvd2VkID0gYWxsb3dlZEludGVydmFscy5hdCgtMSk7XG4gICAgICAgIGlmICghZmlyc3RBbGxvd2VkIHx8ICFsYXN0QWxsb3dlZCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgaWYgKGludGVydmFscy5pbmRleE9mKGludGVydmFsKSA8IGludGVydmFscy5pbmRleE9mKGZpcnN0QWxsb3dlZCkpXG4gICAgICAgICAgaW50ZXJ2YWwgPSBmaXJzdEFsbG93ZWQ7XG4gICAgICAgIGlmIChpbnRlcnZhbHMuaW5kZXhPZihpbnRlcnZhbCkgPiBpbnRlcnZhbHMuaW5kZXhPZihsYXN0QWxsb3dlZCkpXG4gICAgICAgICAgaW50ZXJ2YWwgPSBsYXN0QWxsb3dlZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvcHRpb25zLmZpbmQobyA9PiBvLmlkID09PSBpbnRlcnZhbCkgPz8gbnVsbDtcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pLFxuICApO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGVkSW50ZXJ2YWwkID0gdGhpcy5zZWxlY3RlZEludGVydmFsT3B0aW9uJC5waXBlKFxuICAgIG1hcChvcHRpb24gPT4gKG9wdGlvbiA/IChvcHRpb24uaWQgYXMgSW50ZXJ2YWwpIDogREVGQVVMVF9JTlRFUlZBTCkpLFxuICApO1xuXG4gIHNldEludGVydmFsT3B0aW9uKG9wdGlvbjogU2luZ2xlU2VsZWN0Q29tcG9uZW50Lk9wdGlvbikge1xuICAgIHRoaXMuaW50ZXJ2YWwgPSBvcHRpb24uaWQgYXMgSW50ZXJ2YWw7XG4gIH1cblxuICByZWFkb25seSBiaW5uZWREYXRhJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuaW5wdXQkLFxuICAgIHRoaXMuc2VsZWN0ZWRJbnRlcnZhbCQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbaW5wdXQsIGludGVydmFsXSkgPT5cbiAgICAgIGlucHV0Lm1hcCgoY29uZmlnKTogVGltZVNlcmllc0NvbXBvbmVudC5ZQ29uZmlnID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgc2VyaWVzOiBjb25maWcuc2VyaWVzLm1hcCgoc2VyaWVzLCBpKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBiaW5uZWQgPSBuZXcgTWFwPG51bWJlciwgVGltZVNlcmllc0NvbXBvbmVudC5EYXRhUG9pbnRbXT4oKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcG9pbnQgb2Ygc2VyaWVzLmRhdGEpIHtcbiAgICAgICAgICAgICAgY29uc3QgYmluID0gZ2V0VGltZUludGVydmFsKGludGVydmFsKS5mbG9vcihwb2ludC5kYXRlKS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgIGlmICghYmlubmVkLmhhcyhiaW4pKSB7XG4gICAgICAgICAgICAgICAgYmlubmVkLnNldChiaW4sIFtdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBiaW5uZWQuZ2V0KGJpbikhLnB1c2gocG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uc2VyaWVzLFxuICAgICAgICAgICAgICBkYXRhOiBbLi4uYmlubmVkLmVudHJpZXMoKV0ubWFwKChbZGF0ZVZhbHVlLCBwb2ludHNdKSA9PiAoe1xuICAgICAgICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKGRhdGVWYWx1ZSksXG4gICAgICAgICAgICAgICAgdmFsdWU6IGNvbmZpZy5wb2ludFJlZHVjZXIocG9pbnRzLCBpKSxcbiAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICksXG4gICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KSxcbiAgKTtcblxuICByZWFkb25seSBiaW5uZWREYXRlUmFuZ2UkID0gdGhpcy5iaW5uZWREYXRhJC5waXBlKFxuICAgIG1hcChnZXREYXRlUmFuZ2UpLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgcmVhZG9ubHkgZHJhd0RhdGEkOiBPYnNlcnZhYmxlPERyYXdEYXRhPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuYmlubmVkRGF0YSQsXG4gICAgdGhpcy5iaW5uZWREYXRlUmFuZ2UkLFxuICAgIHRoaXMuc2VsZWN0ZWRJbnRlcnZhbCQsXG4gICAgdGhpcy53aWR0aCQsXG4gICAgdGhpcy5oZWlnaHQkLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW2Jpbm5lZERhdGEsIGJpbm5lZERhdGVSYW5nZSwgaW50ZXJ2YWwsIHdpZHRoLCBoZWlnaHRdKSA9PiB7XG4gICAgICBjb25zdCB2aWV3Qm94ID0gYDAgMCAke3dpZHRofSAke2hlaWdodH1gO1xuXG4gICAgICBjb25zdCB4U2NhbGUgPSBzY2FsZUxpbmVhcigpXG4gICAgICAgIC5kb21haW4oYmlubmVkRGF0ZVJhbmdlKVxuICAgICAgICAucmFuZ2UoW1xuICAgICAgICAgIHRoaXMuTEVGVF9PRkZTRVQgKyB0aGlzLkxFRlRfUklHSFRfUEFERElORyxcbiAgICAgICAgICB3aWR0aCAtIHRoaXMuTEVGVF9SSUdIVF9QQURESU5HICogMixcbiAgICAgICAgXSk7XG4gICAgICBjb25zdCBbbWluRGF0ZVZhbHVlLCBtYXhEYXRlVmFsdWVdID0gYmlubmVkRGF0ZVJhbmdlO1xuICAgICAgY29uc3QgaGFzTXVsdGlwbGVZZWFycyA9XG4gICAgICAgIG1pbkRhdGVWYWx1ZS5nZXRGdWxsWWVhcigpIDwgbWF4RGF0ZVZhbHVlLmdldEZ1bGxZZWFyKCk7XG4gICAgICBjb25zdCB4TWlub3JJbnRlcnZhbEZvcm1hdCA9IGdldE1pbm9ySW50ZXJ2YWxGb3JtYXQoaW50ZXJ2YWwpO1xuICAgICAgY29uc3QgbWlub3JGb3JtYXR0ZXIgPSB0aW1lRm9ybWF0KHhNaW5vckludGVydmFsRm9ybWF0KTtcbiAgICAgIGNvbnN0IHhNaW5vclRpY2tzID0gZ2V0VGltZUludGVydmFsKGludGVydmFsKVxuICAgICAgICAucmFuZ2UobWluRGF0ZVZhbHVlLCB0aW1lRGF5Lm9mZnNldChtYXhEYXRlVmFsdWUsIDEpKVxuICAgICAgICAubWFwKGRhdGUgPT4gKHtcbiAgICAgICAgICB2YWx1ZTogZGF0ZS52YWx1ZU9mKCksXG4gICAgICAgICAgbGFiZWw6IG1pbm9yRm9ybWF0dGVyKGRhdGUpLFxuICAgICAgICB9KSlcbiAgICAgICAgLmZpbHRlcigoXywgaSwgYXJyKSA9PlxuICAgICAgICAgIGFyci5sZW5ndGggPiB0aGlzLlhfTUlOT1JfVElDS19MSU1JVFxuICAgICAgICAgICAgPyBpICUgTWF0aC5yb3VuZChhcnIubGVuZ3RoIC8gdGhpcy5YX01JTk9SX1RJQ0tfTElNSVQpID09PSAwXG4gICAgICAgICAgICA6IHRydWUsXG4gICAgICAgICk7XG4gICAgICBjb25zdCB4TWFqb3JJbnRlcnZhbCA9IGdldE1ham9ySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgY29uc3QgeE1ham9ySW50ZXJ2YWxGb3JtYXQgPSBnZXRNYWpvckludGVydmFsRm9ybWF0KFxuICAgICAgICB4TWFqb3JJbnRlcnZhbCxcbiAgICAgICAgaGFzTXVsdGlwbGVZZWFycyxcbiAgICAgICk7XG4gICAgICBjb25zdCB0aW1lSW50ZXJ2YWwgPSBnZXRUaW1lSW50ZXJ2YWwoeE1ham9ySW50ZXJ2YWwpO1xuICAgICAgY29uc3QgdGlja0Zsb29yID0gdGltZUludGVydmFsLmZsb29yKG1pbkRhdGVWYWx1ZSk7XG4gICAgICBjb25zdCB0aWNrQ2VpbGluZyA9IHRpbWVJbnRlcnZhbC5jZWlsKHRpbWVEYXkub2Zmc2V0KG1heERhdGVWYWx1ZSwgMSkpO1xuICAgICAgY29uc3QgbWFqb3JGb3JtYXR0ZXIgPSB0aW1lRm9ybWF0KHhNYWpvckludGVydmFsRm9ybWF0KTtcbiAgICAgIGNvbnN0IHhNYWpvclRpY2tzID0gdGltZUludGVydmFsXG4gICAgICAgIC5yYW5nZSh0aWNrRmxvb3IsIHRpY2tDZWlsaW5nKVxuICAgICAgICAubWFwKHRpY2tEYXRlID0+ICh7XG4gICAgICAgICAgbGFiZWw6IHhNYWpvckludGVydmFsID09PSBpbnRlcnZhbCA/ICcnIDogbWFqb3JGb3JtYXR0ZXIodGlja0RhdGUpLFxuICAgICAgICAgIHZhbHVlOiB0aWNrRGF0ZS52YWx1ZU9mKCksXG4gICAgICAgIH0pKTtcbiAgICAgIGNvbnN0IHggPSB7IHhNYXg6IG1heERhdGVWYWx1ZSwgeFNjYWxlLCB4TWlub3JUaWNrcywgeE1ham9yVGlja3MgfTtcblxuICAgICAgY29uc3QgW3kxLCB5Ml0gPSBiaW5uZWREYXRhLm1hcChjb25maWcgPT4ge1xuICAgICAgICBjb25zdCBmbGF0dGVuZWRWYWx1ZXMgPSBjb25maWcuc2VyaWVzLnJlZHVjZTxudW1iZXJbXT4oXG4gICAgICAgICAgKHZhbHVlcywgc2VyaWVzKSA9PiBbXG4gICAgICAgICAgICAuLi52YWx1ZXMsXG4gICAgICAgICAgICAuLi5zZXJpZXMuZGF0YS5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUpLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgW10sXG4gICAgICAgICk7XG4gICAgICAgIGxldCB5TWF4ID0gY29uZmlnLm1heCA/PyBNYXRoLm1heCguLi5mbGF0dGVuZWRWYWx1ZXMsIDApO1xuICAgICAgICBjb25zdCB5TWluID0gY29uZmlnLm1pbiA/PyBNYXRoLm1pbiguLi5mbGF0dGVuZWRWYWx1ZXMsIDApO1xuICAgICAgICAvLyBSSVZFVC0xNDYwNSAtIGlmIHJhbmdlIGlzIFswLDBdLCBtYWtlIGl0IFswLDFdIGluc3RlYWRcbiAgICAgICAgaWYgKHlNYXggPT0gMCAmJiB5TWluID09IDApIHtcbiAgICAgICAgICB5TWF4ID0gMTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB5U2NhbGUgPSBzY2FsZUxpbmVhcigpXG4gICAgICAgICAgLmRvbWFpbihbeU1pbiwgeU1heF0pXG4gICAgICAgICAgLnJhbmdlKFtcbiAgICAgICAgICAgIGhlaWdodCAtXG4gICAgICAgICAgICAgIHRoaXMuQk9UVE9NX09GRlNFVCAtXG4gICAgICAgICAgICAgICh0aGlzLkJPVFRPTV9QQURESU5HICsgdGhpcy5UT1BfUEFERElORyksXG4gICAgICAgICAgICB0aGlzLlRPUF9QQURESU5HLFxuICAgICAgICAgIF0pO1xuICAgICAgICBjb25zdCB5VGlja3MgPSB5U2NhbGUudGlja3ModGhpcy5ZX1RJQ0tfQ09VTlQpO1xuICAgICAgICBjb25zdCBzZXJpZXMgPSBjb25maWcuc2VyaWVzLm1hcChzZXJpZXMgPT4gKHtcbiAgICAgICAgICAuLi5zZXJpZXMsXG4gICAgICAgICAgcGF0aDogbGluZTxUaW1lU2VyaWVzQ29tcG9uZW50LkRhdGFQb2ludD4oKVxuICAgICAgICAgICAgLngoZCA9PiB4U2NhbGUoZC5kYXRlKSlcbiAgICAgICAgICAgIC55KGQgPT4geVNjYWxlKGQudmFsdWUpKShzZXJpZXMuZGF0YSksXG4gICAgICAgICAgc3Ryb2tlOiBgdmFyKCR7c2VyaWVzLmNvbG9yVG9rZW59KWAsXG4gICAgICAgICAgbWFya2Vyczogc2VyaWVzLmRhdGEubWFwKHBvaW50ID0+ICh7XG4gICAgICAgICAgICAuLi5wb2ludCxcbiAgICAgICAgICAgIHg6IHhTY2FsZShwb2ludC5kYXRlKSxcbiAgICAgICAgICAgIHk6IHlTY2FsZShwb2ludC52YWx1ZSksXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgIHNlcmllcyxcbiAgICAgICAgICB5TWF4LFxuICAgICAgICAgIHlNaW4sXG4gICAgICAgICAgeVNjYWxlLFxuICAgICAgICAgIHlUaWNrcyxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBJZiB3ZSBoYXZlIGEgeTIsIGNvZXJjZSB5MSdzIHRpY2tzIHRvIGJlIHZpc3VhbGx5IGVxdWl2YWxlbnQgdG8geTIncyB0aWNrcy5cbiAgICAgIGlmICh5Mj8ueVRpY2tzKSB7XG4gICAgICAgIGNvbnN0IHRpY2tDb252ZXJzaW9uU2NhbGUgPSBzY2FsZUxpbmVhcigpXG4gICAgICAgICAgLnJhbmdlKHkxLnlTY2FsZS5kb21haW4oKSlcbiAgICAgICAgICAuZG9tYWluKHkyLnlTY2FsZS5kb21haW4oKSk7XG4gICAgICAgIHkxLnlUaWNrcyA9IHkyLnlUaWNrcy5tYXAodGlja0NvbnZlcnNpb25TY2FsZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IHZpZXdCb3gsIHgsIHkxLCB5MiB9O1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgcmVhZG9ubHkgbGVnZW5kJCA9IHRoaXMuYmlubmVkRGF0YSQucGlwZShcbiAgICBtYXAoYmlubmVkRGF0YSA9PlxuICAgICAgYmlubmVkRGF0YS5yZWR1Y2U8eyBsYWJlbDogc3RyaW5nOyBjb2xvclRva2VuOiBzdHJpbmcgfVtdPihcbiAgICAgICAgKGl0ZW1zLCBjb25maWcpID0+IFtcbiAgICAgICAgICAuLi5pdGVtcyxcbiAgICAgICAgICAuLi5jb25maWcuc2VyaWVzLm1hcChzZXJpZXMgPT4gKHtcbiAgICAgICAgICAgIGxhYmVsOiBzZXJpZXMubGFiZWwsXG4gICAgICAgICAgICBjb2xvclRva2VuOiBzZXJpZXMuY29sb3JUb2tlbixcbiAgICAgICAgICB9KSksXG4gICAgICAgIF0sXG4gICAgICAgIFtdLFxuICAgICAgKSxcbiAgICApLFxuICApO1xuXG4gIHJlYWRvbmx5IGVtcHR5JCA9IHRoaXMuYmlubmVkRGF0YSQucGlwZShcbiAgICBtYXAoYmlubmVkRGF0YSA9PlxuICAgICAgYmlubmVkRGF0YS5ldmVyeShjb25maWcgPT5cbiAgICAgICAgY29uZmlnLnNlcmllcy5ldmVyeShzZXJpZXMgPT4gc2VyaWVzLmRhdGEubGVuZ3RoID09PSAwKSxcbiAgICAgICksXG4gICAgKSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pLFxuICApO1xuXG4gIHJlYWRvbmx5IGhvdmVyZWRNYXJrZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7XG4gICAgZXZlbnQ6IE1vdXNlRXZlbnQ7XG4gICAgbWFya2VyOiBNYXJrZXI7XG4gIH0gfCBudWxsPihudWxsKTtcblxuICByZWFkb25seSBjYWxsb3V0JCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuaG92ZXJlZE1hcmtlciQsIHRoaXMuZHJhd0RhdGEkXSkucGlwZShcbiAgICBtYXAoKFtob3ZlcmVkTWFya2VyLCBkcmF3RGF0YV0pID0+IHtcbiAgICAgIGlmICghaG92ZXJlZE1hcmtlcikgcmV0dXJuIG51bGw7XG5cbiAgICAgIGNvbnN0IHsgdGFyZ2V0IH0gPSBob3ZlcmVkTWFya2VyLmV2ZW50O1xuICAgICAgaWYgKCF0YXJnZXQpIHJldHVybiBudWxsO1xuICAgICAgY29uc3QgbWFya2VyUmVjdCA9ICg8U1ZHQ2lyY2xlRWxlbWVudD50YXJnZXQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgcGFkZGluZyA9IDg7XG4gICAgICBjb25zdCBhbmNob3IgPSBuZXcgRE9NUmVjdChcbiAgICAgICAgbWFya2VyUmVjdC5sZWZ0IC0gcGFkZGluZyxcbiAgICAgICAgbWFya2VyUmVjdC50b3AgLSBwYWRkaW5nLFxuICAgICAgICBtYXJrZXJSZWN0LndpZHRoICsgcGFkZGluZyAqIDIsXG4gICAgICAgIG1hcmtlclJlY3QuaGVpZ2h0ICsgcGFkZGluZyAqIDIsXG4gICAgICApO1xuXG4gICAgICB0eXBlIE1ldHJpYyA9IHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9O1xuICAgICAgY29uc3QgbWV0cmljczogTWV0cmljW10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBzZXJpZXMgb2YgZHJhd0RhdGEueTEuc2VyaWVzKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gc2VyaWVzLm1hcmtlcnMuZmluZChcbiAgICAgICAgICBtYXJrZXIgPT4gbWFya2VyLnggPT09IGhvdmVyZWRNYXJrZXIubWFya2VyLngsXG4gICAgICAgICk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIG1ldHJpY3MucHVzaCh7XG4gICAgICAgICAgICBsYWJlbDogc2VyaWVzLmxhYmVsLFxuICAgICAgICAgICAgdmFsdWU6IGRyYXdEYXRhLnkxLnZhbHVlRm9ybWF0dGVyKG1hdGNoLnZhbHVlKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZHJhd0RhdGEueTIpIHtcbiAgICAgICAgZm9yIChjb25zdCBzZXJpZXMgb2YgZHJhd0RhdGEueTIuc2VyaWVzKSB7XG4gICAgICAgICAgY29uc3QgbWF0Y2ggPSBzZXJpZXMubWFya2Vycy5maW5kKFxuICAgICAgICAgICAgbWFya2VyID0+IG1hcmtlci54ID09PSBob3ZlcmVkTWFya2VyLm1hcmtlci54LFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBtZXRyaWNzLnB1c2goe1xuICAgICAgICAgICAgICBsYWJlbDogc2VyaWVzLmxhYmVsLFxuICAgICAgICAgICAgICB2YWx1ZTogZHJhd0RhdGEueTIudmFsdWVGb3JtYXR0ZXIobWF0Y2gudmFsdWUpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IGFuY2hvciwgbWV0cmljcyB9O1xuICAgIH0pLFxuICApO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIFRpbWVTZXJpZXNDb21wb25lbnQge1xuICBleHBvcnQgdHlwZSBTZXJpZXMgPSB7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBjb2xvclRva2VuOiBzdHJpbmc7XG4gICAgZGF0YTogVGltZVNlcmllc0NvbXBvbmVudC5EYXRhUG9pbnRbXTtcbiAgICBzdHlsZT86ICdzb2xpZCcgfCAnZGFzaGVkJztcbiAgfTtcblxuICBleHBvcnQgdHlwZSBEYXRhUG9pbnQgPSB7XG4gICAgdmFsdWU6IG51bWJlcjtcbiAgICBkYXRlOiBEYXRlO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFlDb25maWcgPSB7XG4gICAgcG9pbnRSZWR1Y2VyOiAocG9pbnRzOiBEYXRhUG9pbnRbXSwgc2VyaWVzSW5kZXg6IG51bWJlcikgPT4gbnVtYmVyO1xuICAgIHZhbHVlRm9ybWF0dGVyOiAocmVkdWNlZFZhbHVlOiBudW1iZXIpID0+IHN0cmluZztcbiAgICBzZXJpZXM6IFNlcmllc1tdO1xuICAgIG1pbj86IG51bWJlcjtcbiAgICBtYXg/OiBudW1iZXI7XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgVGltZVNlcmllc0lucHV0ID0gW1lDb25maWddIHwgW1lDb25maWcsIFlDb25maWddO1xufVxuIiwiPGRpdiAqbmdJZj1cIiEoZW1wdHkkIHwgYXN5bmMpOyBlbHNlIHplcm9TdGF0ZVwiIGNsYXNzPVwiY29udGFpbmVyXCI+XG4gIDxzdmdcbiAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAqbmdJZj1cImRyYXdEYXRhJCB8IGFzeW5jOyBsZXQgZFwiXG4gICAgW2F0dHIudmlld0JveF09XCJkLnZpZXdCb3hcIlxuICA+XG4gICAgPGcgKm5nRm9yPVwibGV0IHRpY2sgb2YgZC54LnhNYWpvclRpY2tzXCI+XG4gICAgICA8cmVjdFxuICAgICAgICBjbGFzcz1cInRpY2tcIlxuICAgICAgICBbYXR0ci54XT1cImQueC54U2NhbGUodGljay52YWx1ZSlcIlxuICAgICAgICB5PVwiMFwiXG4gICAgICAgIHdpZHRoPVwiMVwiXG4gICAgICAgIFthdHRyLmhlaWdodF09XCJkLnkxLnlTY2FsZShkLnkxLnlNaW4pXCJcbiAgICAgID48L3JlY3Q+XG4gICAgICA8dGV4dFxuICAgICAgICAqbmdJZj1cImQueC54U2NhbGUodGljay52YWx1ZSkgPj0gMFwiXG4gICAgICAgIGNsYXNzPVwieC1tYWpvci10aWNrLWxhYmVsXCJcbiAgICAgICAgW2F0dHIueF09XCJkLngueFNjYWxlKHRpY2sudmFsdWUpXCJcbiAgICAgICAgW2F0dHIueV09XCJkLnkxLnlTY2FsZShkLnkxLnlNaW4pXCJcbiAgICAgICAgZHg9XCI0XCJcbiAgICAgICAgZHk9XCItNFwiXG4gICAgICA+XG4gICAgICAgIHt7IHRpY2subGFiZWwgfX1cbiAgICAgIDwvdGV4dD5cbiAgICA8L2c+XG4gICAgPGcgKm5nRm9yPVwibGV0IHRpY2sgb2YgZC54LnhNaW5vclRpY2tzXCI+XG4gICAgICA8dGV4dFxuICAgICAgICBjbGFzcz1cIngtbWlub3ItdGljay1sYWJlbFwiXG4gICAgICAgIFthdHRyLnhdPVwiZC54LnhTY2FsZSh0aWNrLnZhbHVlKVwiXG4gICAgICAgIFthdHRyLnldPVwiZC55MS55U2NhbGUoZC55MS55TWluKVwiXG4gICAgICAgIHRleHQtYW5jaG9yPVwibWlkZGxlXCJcbiAgICAgICAgZG9taW5hbnQtYmFzZWxpbmU9XCJoYW5naW5nXCJcbiAgICAgICAgZHk9XCI4XCJcbiAgICAgID5cbiAgICAgICAge3sgdGljay5sYWJlbCB9fVxuICAgICAgICA8dGl0bGU+e3sgdGljay52YWx1ZSB8IGRhdGUgfX08L3RpdGxlPlxuICAgICAgPC90ZXh0PlxuICAgIDwvZz5cbiAgICA8ZyAqbmdGb3I9XCJsZXQgdGljayBvZiBkLnkxLnlUaWNrc1wiPlxuICAgICAgPHJlY3RcbiAgICAgICAgY2xhc3M9XCJ0aWNrXCJcbiAgICAgICAgeD1cIjBcIlxuICAgICAgICBbYXR0ci55XT1cImQueTEueVNjYWxlKHRpY2spXCJcbiAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgaGVpZ2h0PVwiMVwiXG4gICAgICA+PC9yZWN0PlxuICAgICAgPHRleHQgY2xhc3M9XCJ5LXRpY2stbGFiZWxcIiB4PVwiMFwiIFthdHRyLnldPVwiZC55MS55U2NhbGUodGljaylcIiBkeT1cIi00XCI+XG4gICAgICAgIHt7IGQueTEudmFsdWVGb3JtYXR0ZXIodGljaykgfX1cbiAgICAgIDwvdGV4dD5cbiAgICA8L2c+XG5cbiAgICA8ZyAqbmdGb3I9XCJsZXQgdGljayBvZiBkLnkyPy55VGlja3NcIj5cbiAgICAgIDx0ZXh0XG4gICAgICAgIGNsYXNzPVwieS10aWNrLWxhYmVsXCJcbiAgICAgICAgW2F0dHIueF09XCJkLngueFNjYWxlKGQueC54TWF4KVwiXG4gICAgICAgIFthdHRyLnldPVwiZC55Mj8ueVNjYWxlKHRpY2spXCJcbiAgICAgICAgdGV4dC1hbmNob3I9XCJlbmRcIlxuICAgICAgICBkeT1cIi00XCJcbiAgICAgID5cbiAgICAgICAge3sgZC55Mj8udmFsdWVGb3JtYXR0ZXIodGljaykgfX1cbiAgICAgIDwvdGV4dD5cbiAgICA8L2c+XG5cbiAgICA8ZyAqbmdJZj1cImhvdmVyZWRNYXJrZXIkIHwgYXN5bmM7IGxldCBob3ZlcmVkTWFya2VyXCI+XG4gICAgICA8bGluZVxuICAgICAgICBjbGFzcz1cImhvdmVyLXJ1bGVcIlxuICAgICAgICBbYXR0ci54MV09XCJob3ZlcmVkTWFya2VyLm1hcmtlci54XCJcbiAgICAgICAgW2F0dHIueTFdPVwiZC55MS55U2NhbGUoZC55MS55TWluKVwiXG4gICAgICAgIFthdHRyLngyXT1cImhvdmVyZWRNYXJrZXIubWFya2VyLnhcIlxuICAgICAgICBbYXR0ci55Ml09XCJkLnkxLnlTY2FsZShkLnkxLnlNYXgpXCJcbiAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgIHN0cm9rZS1kYXNoYXJyYXk9XCI0XCJcbiAgICAgIC8+XG4gICAgPC9nPlxuXG4gICAgPG5nLXRlbXBsYXRlICNzZXJpZXNUcGwgbGV0LXNlcmllcz1cInNlcmllc1wiPlxuICAgICAgPHBhdGhcbiAgICAgICAgY2xhc3M9XCJkYXRhIHBhdGhcIlxuICAgICAgICBbY2xhc3MubWFya2VyLWhvdmVyZWRdPVwiISEoaG92ZXJlZE1hcmtlciQgfCBhc3luYylcIlxuICAgICAgICBbYXR0ci5kXT1cInNlcmllcy5wYXRoXCJcbiAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNlcmllcy5zdHJva2VcIlxuICAgICAgICBbYXR0ci5zdHJva2UtZGFzaGFycmF5XT1cInNlcmllcy5zdHlsZSA9PT0gJ2Rhc2hlZCcgPyAnNCcgOiBudWxsXCJcbiAgICAgID48L3BhdGg+XG4gICAgICA8Y2lyY2xlXG4gICAgICAgICpuZ0Zvcj1cImxldCBtYXJrZXIgb2Ygc2VyaWVzLm1hcmtlcnNcIlxuICAgICAgICBjbGFzcz1cImRhdGEgbWFya2VyXCJcbiAgICAgICAgW2NsYXNzLmZvY3VzZWRdPVwiKGhvdmVyZWRNYXJrZXIkIHwgYXN5bmMpPy5tYXJrZXI/LnggPT09IG1hcmtlci54XCJcbiAgICAgICAgW2NsYXNzLmJsdXJyZWRdPVwiXG4gICAgICAgICAgKGhvdmVyZWRNYXJrZXIkIHwgYXN5bmMpICE9PSBudWxsICYmXG4gICAgICAgICAgKGhvdmVyZWRNYXJrZXIkIHwgYXN5bmMpPy5tYXJrZXI/LnggIT09IG1hcmtlci54XG4gICAgICAgIFwiXG4gICAgICAgIFthdHRyLmN4XT1cIm1hcmtlci54XCJcbiAgICAgICAgW2F0dHIuY3ldPVwibWFya2VyLnlcIlxuICAgICAgICByPVwiMy41XCJcbiAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgIFthdHRyLnN0cm9rZV09XCJzZXJpZXMuc3Ryb2tlXCJcbiAgICAgICAgKG1vdXNlb3Zlcik9XCJob3ZlcmVkTWFya2VyJC5uZXh0KHsgZXZlbnQ6ICRldmVudCwgbWFya2VyOiBtYXJrZXIgfSlcIlxuICAgICAgICAobW91c2VsZWF2ZSk9XCJob3ZlcmVkTWFya2VyJC5uZXh0KG51bGwpXCJcbiAgICAgID48L2NpcmNsZT5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxnICpuZ0Zvcj1cImxldCBzZXJpZXMgb2YgZC55MS5zZXJpZXNcIj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZXJpZXNUcGw7IGNvbnRleHQ6IHsgc2VyaWVzOiBzZXJpZXMgfVwiXG4gICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9nPlxuICAgIDxnICpuZ0Zvcj1cImxldCBzZXJpZXMgb2YgZC55Mj8uc2VyaWVzXCI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VyaWVzVHBsOyBjb250ZXh0OiB7IHNlcmllczogc2VyaWVzIH1cIlxuICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvZz5cbiAgPC9zdmc+XG4gIDxsZWdlbmQ+XG4gICAgPHJpdi1sZWdlbmQtaXRlbVxuICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgbGVnZW5kJCB8IGFzeW5jXCJcbiAgICAgIFtsYWJlbF09XCJpdGVtLmxhYmVsXCJcbiAgICAgIFtjb2xvclRva2VuXT1cIml0ZW0uY29sb3JUb2tlblwiXG4gICAgPjwvcml2LWxlZ2VuZC1pdGVtPlxuICA8L2xlZ2VuZD5cbjwvZGl2PlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiY2FsbG91dCQgfCBhc3luYzsgbGV0IGNhbGxvdXRcIj5cbiAgPHJpdi1jYWxsb3V0XG4gICAgKnJpdi1jYWxsb3V0XG4gICAgW2FuY2hvcl09XCJjYWxsb3V0LmFuY2hvclwiXG4gICAgW2lzTW9kYWxdPVwiZmFsc2VcIlxuICAgIFtwcmVmZXJyZWRQb3NpdGlvbl09XCIndG9wLWNlbnRlcidcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImNhbGxvdXQtY29udGVudFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNhbGxvdXQtbWV0cmljXCIgKm5nRm9yPVwibGV0IG1ldHJpYyBvZiBjYWxsb3V0Lm1ldHJpY3NcIj5cbiAgICAgICAgPGRpdj57eyBtZXRyaWMubGFiZWwgfX08L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhbGxvdXQtbWV0cmljLXZhbHVlXCI+e3sgbWV0cmljLnZhbHVlIH19PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9yaXYtY2FsbG91dD5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI3plcm9TdGF0ZT5cbiAgPHJpdi16ZXJvLXN0YXRlIFttZXNzYWdlXT1cInplcm9TdGF0ZU1lc3NhZ2VcIj48L3Jpdi16ZXJvLXN0YXRlPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjb250cm9scz5cbiAgPHJpdi1zaW5nbGUtc2VsZWN0XG4gICAgW29wdGlvbnNdPVwiKGludGVydmFsT3B0aW9ucyQgfCBhc3luYykgfHwgW11cIlxuICAgIFtzZWxlY3RlZE9wdGlvbl09XCJzZWxlY3RlZEludGVydmFsT3B0aW9uJCB8IGFzeW5jXCJcbiAgICAoc2VsZWN0ZWRPcHRpb25DaGFuZ2UpPVwic2V0SW50ZXJ2YWxPcHRpb24oJGV2ZW50KVwiXG4gID48L3Jpdi1zaW5nbGUtc2VsZWN0PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
283
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1zZXJpZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdmlzdWFsaXphdGlvbi90aW1lLXNlcmllcy90aW1lLXNlcmllcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi92aXN1YWxpemF0aW9uL3RpbWUtc2VyaWVzL3RpbWUtc2VyaWVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULEtBQUssRUFFTCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDakMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFDTCxlQUFlLEVBRWYsYUFBYSxFQUNiLEdBQUcsRUFDSCxXQUFXLEdBQ1osTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFNUQsT0FBTyxFQUVMLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsc0JBQXNCLEVBQ3RCLHNCQUFzQixFQUN0QixlQUFlLEVBQ2YsU0FBUyxHQUNWLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBb0IsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7O0FBRXZFLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUN0QixNQUFNLGdCQUFnQixHQUFhLEtBQUssQ0FBQztBQUV6Qyw2RUFBNkU7QUFDN0UsK0NBQStDO0FBTy9DLE1BQU0sT0FBTyxtQkFB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LEtBQUs7Z0JBVUssTUFBTTtzQkFEaEIsS0FBSztnQkFZSyxnQkFBZ0I7c0JBRDFCLEtBQUs7Z0JBdUJLLFFBQVE7c0JBRGxCLEtBQUs7Z0JBU1UsUUFBUTtzQkFEdkIsU0FBUzt1QkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgc2NhbGVMaW5lYXIgfSBmcm9tICdkMy1zY2FsZSc7XG5pbXBvcnQgeyBsaW5lIH0gZnJvbSAnZDMtc2hhcGUnO1xuaW1wb3J0IHsgdXRjRGF5IH0gZnJvbSAnZDMtdGltZSc7XG5pbXBvcnQgeyB1dGNGb3JtYXQgfSBmcm9tICdkMy10aW1lLWZvcm1hdCc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIE9ic2VydmFibGUsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIG1hcCxcbiAgc2hhcmVSZXBsYXksXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTnVtYmVyUGlwZSB9IGZyb20gJy4uLy4uL2Zvcm1hdC9waXBlcy9udW1iZXIucGlwZSc7XG5pbXBvcnQgeyBTaW5nbGVTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi9pbnB1dC9zaW5nbGUtc2VsZWN0L3NpbmdsZS1zZWxlY3QuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIEludGVydmFsLFxuICBnZXRJbnRlcnZhbFRpdGxlLFxuICBnZXRNYWpvckludGVydmFsLFxuICBnZXRNYWpvckludGVydmFsRm9ybWF0LFxuICBnZXRNaW5vckludGVydmFsRm9ybWF0LFxuICBnZXRUaW1lSW50ZXJ2YWwsXG4gIGludGVydmFscyxcbn0gZnJvbSAnLi4vaW50ZXJ2YWxzJztcbmltcG9ydCB7IERyYXdEYXRhLCBNYXJrZXIsIGdldERhdGVSYW5nZSB9IGZyb20gJy4vdGltZS1zZXJpZXMuaGVscGVycyc7XG5cbmNvbnN0IE1BWF9QT0lOVFMgPSA5MDtcbmNvbnN0IERFRkFVTFRfSU5URVJWQUw6IEludGVydmFsID0gJ2RheSc7XG5cbi8vIFRPRE86IG9uY2Ugd2UgdXBncmFkZSB0byBBbmd1bGFyIDE2LCB0aGlzIGNvbXBvbmVudCBjYW4gYmUgY2xlYW5lZCB1cCB3aXRoXG4vLyBzaWduYWxzIGluc3RlYWQgb2YgUnhKUy4gU2VlIGNvbW1pdCBlMjM4YzJkLlxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncml2LXRpbWUtc2VyaWVzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RpbWUtc2VyaWVzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGltZS1zZXJpZXMuY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgVGltZVNlcmllc0NvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5wdXQkID1cbiAgICBuZXcgQmVoYXZpb3JTdWJqZWN0PFRpbWVTZXJpZXNDb21wb25lbnQuVGltZVNlcmllc0lucHV0PihbXG4gICAgICB7XG4gICAgICAgIHBvaW50UmVkdWNlcjogcG9pbnRzID0+XG4gICAgICAgICAgcG9pbnRzLnJlZHVjZSgodG90YWwsIHsgdmFsdWUgfSkgPT4gdG90YWwgKyB2YWx1ZSwgMCksXG4gICAgICAgIHZhbHVlRm9ybWF0dGVyOiB2ID0+IG5ldyBOdW1iZXJQaXBlKCkudHJhbnNmb3JtKHYpID8/ICcnLFxuICAgICAgICBzZXJpZXM6IFtdLFxuICAgICAgfSxcbiAgICBdKTtcbiAgQElucHV0KClcbiAgcHVibGljIHNldCBpbnB1dCh2OiBUaW1lU2VyaWVzQ29tcG9uZW50LlRpbWVTZXJpZXNJbnB1dCkge1xuICAgIHRoaXMuaW5wdXQkLm5leHQodik7XG4gIH1cbiAgcHVibGljIGdldCBpbnB1dCgpOiBUaW1lU2VyaWVzQ29tcG9uZW50LlRpbWVTZXJpZXNJbnB1dCB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXQkLmdldFZhbHVlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IHdpZHRoJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPig5NjApO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHdpZHRoKHY6IG51bWJlcikge1xuICAgIHRoaXMud2lkdGgkLm5leHQodik7XG4gIH1cbiAgcHVibGljIGdldCB3aWR0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLndpZHRoJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBoZWlnaHQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDI1Nik7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgaGVpZ2h0KHY6IG51bWJlcikge1xuICAgIHRoaXMuaGVpZ2h0JC5uZXh0KHYpO1xuICB9XG4gIHB1YmxpYyBnZXQgaGVpZ2h0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaGVpZ2h0JC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSB6ZXJvU3RhdGVNZXNzYWdlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihcbiAgICAnTm8gZGF0YSB0byBkaXNwbGF5LicsXG4gICk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgemVyb1N0YXRlTWVzc2FnZSh2OiBzdHJpbmcpIHtcbiAgICB0aGlzLnplcm9TdGF0ZU1lc3NhZ2UkLm5leHQodik7XG4gIH1cbiAgcHVibGljIGdldCB6ZXJvU3RhdGVNZXNzYWdlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuemVyb1N0YXRlTWVzc2FnZSQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHJlYWRvbmx5IEJPVFRPTV9PRkZTRVQgPSAyNDtcbiAgcmVhZG9ubHkgTEVGVF9PRkZTRVQgPSA0ODtcbiAgcmVhZG9ubHkgVE9QX1BBRERJTkcgPSAxNjtcbiAgcmVhZG9ubHkgTEVGVF9SSUdIVF9QQURESU5HID0gODtcbiAgcmVhZG9ubHkgQk9UVE9NX1BBRERJTkcgPSA4O1xuICByZWFkb25seSBZX1RJQ0tfQ09VTlQgPSA1O1xuICByZWFkb25seSBYX01JTk9SX1RJQ0tfTElNSVQgPSAxNTtcblxuICByZWFkb25seSBkYXRlUmFuZ2UkID0gdGhpcy5pbnB1dCQucGlwZShcbiAgICBtYXAoZ2V0RGF0ZVJhbmdlKSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pLFxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaW50ZXJ2YWwkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJbnRlcnZhbD4oREVGQVVMVF9JTlRFUlZBTCk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgaW50ZXJ2YWwodjogSW50ZXJ2YWwpIHtcbiAgICB0aGlzLmludGVydmFsJC5uZXh0KHYpO1xuICB9XG4gIHB1YmxpYyBnZXQgaW50ZXJ2YWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW50ZXJ2YWwkLmdldFZhbHVlKCk7XG4gIH1cblxuICBAVmlld0NoaWxkKCdjb250cm9scycpXG4gIHB1YmxpYyByZWFkb25seSBjb250cm9scz86IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhbGxvd2VkSW50ZXJ2YWxzJDogT2JzZXJ2YWJsZTxJbnRlcnZhbFtdPiA9IHRoaXMuaW5wdXQkLnBpcGUoXG4gICAgbWFwKGlucHV0ID0+IHtcbiAgICAgIGNvbnN0IFttaW5EYXRlVmFsdWUsIG1heERhdGVWYWx1ZV0gPSBnZXREYXRlUmFuZ2UoaW5wdXQpO1xuXG4gICAgICByZXR1cm4gaW50ZXJ2YWxzLmZpbHRlcihpbnRlcnZhbCA9PiB7XG4gICAgICAgIGNvbnN0IHRpbWVJbnRlcnZhbCA9IGdldFRpbWVJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgICAgIGNvbnN0IG51bVN0ZXBzID0gdGltZUludGVydmFsLnJhbmdlKFxuICAgICAgICAgIHRpbWVJbnRlcnZhbC5mbG9vcihtaW5EYXRlVmFsdWUpLFxuICAgICAgICAgIHRpbWVJbnRlcnZhbC5jZWlsKHV0Y0RheS5vZmZzZXQobWF4RGF0ZVZhbHVlLCAxKSksXG4gICAgICAgICkubGVuZ3RoO1xuXG4gICAgICAgIHJldHVybiBudW1TdGVwcyA8PSBNQVhfUE9JTlRTICYmIG51bVN0ZXBzID4gMTtcbiAgICAgIH0pO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgcmVhZG9ubHkgaW50ZXJ2YWxPcHRpb25zJCA9IHRoaXMuYWxsb3dlZEludGVydmFscyQucGlwZShcbiAgICBtYXAoaW50ZXJ2YWxzID0+XG4gICAgICBpbnRlcnZhbHMubWFwKFxuICAgICAgICAoaW50ZXJ2YWwpOiBTaW5nbGVTZWxlY3RDb21wb25lbnQuT3B0aW9uID0+ICh7XG4gICAgICAgICAgaWQ6IGludGVydmFsLFxuICAgICAgICAgIHRpdGxlOiBnZXRJbnRlcnZhbFRpdGxlKGludGVydmFsKSxcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgICksXG4gICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KSxcbiAgKTtcblxuICByZWFkb25seSBzZWxlY3RlZEludGVydmFsT3B0aW9uJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuaW50ZXJ2YWwkLFxuICAgIHRoaXMuaW50ZXJ2YWxPcHRpb25zJCxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtpbnRlcnZhbCwgb3B0aW9uc10pID0+IHtcbiAgICAgIGNvbnN0IGFsbG93ZWRJbnRlcnZhbHMgPSBvcHRpb25zLm1hcCgoeyBpZCB9KSA9PiBpZCBhcyBJbnRlcnZhbCk7XG4gICAgICBpZiAoIWFsbG93ZWRJbnRlcnZhbHMuaW5jbHVkZXMoaW50ZXJ2YWwpKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0QWxsb3dlZCA9IGFsbG93ZWRJbnRlcnZhbHMuYXQoMCk7XG4gICAgICAgIGNvbnN0IGxhc3RBbGxvd2VkID0gYWxsb3dlZEludGVydmFscy5hdCgtMSk7XG4gICAgICAgIGlmICghZmlyc3RBbGxvd2VkIHx8ICFsYXN0QWxsb3dlZCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgaWYgKGludGVydmFscy5pbmRleE9mKGludGVydmFsKSA8IGludGVydmFscy5pbmRleE9mKGZpcnN0QWxsb3dlZCkpXG4gICAgICAgICAgaW50ZXJ2YWwgPSBmaXJzdEFsbG93ZWQ7XG4gICAgICAgIGlmIChpbnRlcnZhbHMuaW5kZXhPZihpbnRlcnZhbCkgPiBpbnRlcnZhbHMuaW5kZXhPZihsYXN0QWxsb3dlZCkpXG4gICAgICAgICAgaW50ZXJ2YWwgPSBsYXN0QWxsb3dlZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvcHRpb25zLmZpbmQobyA9PiBvLmlkID09PSBpbnRlcnZhbCkgPz8gbnVsbDtcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pLFxuICApO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGVkSW50ZXJ2YWwkID0gdGhpcy5zZWxlY3RlZEludGVydmFsT3B0aW9uJC5waXBlKFxuICAgIG1hcChvcHRpb24gPT4gKG9wdGlvbiA/IChvcHRpb24uaWQgYXMgSW50ZXJ2YWwpIDogREVGQVVMVF9JTlRFUlZBTCkpLFxuICApO1xuXG4gIHNldEludGVydmFsT3B0aW9uKG9wdGlvbjogU2luZ2xlU2VsZWN0Q29tcG9uZW50Lk9wdGlvbikge1xuICAgIHRoaXMuaW50ZXJ2YWwgPSBvcHRpb24uaWQgYXMgSW50ZXJ2YWw7XG4gIH1cblxuICByZWFkb25seSBiaW5uZWREYXRhJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuaW5wdXQkLFxuICAgIHRoaXMuc2VsZWN0ZWRJbnRlcnZhbCQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbaW5wdXQsIGludGVydmFsXSkgPT5cbiAgICAgIGlucHV0Lm1hcCgoY29uZmlnKTogVGltZVNlcmllc0NvbXBvbmVudC5ZQ29uZmlnID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgc2VyaWVzOiBjb25maWcuc2VyaWVzLm1hcCgoc2VyaWVzLCBpKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBiaW5uZWQgPSBuZXcgTWFwPG51bWJlciwgVGltZVNlcmllc0NvbXBvbmVudC5EYXRhUG9pbnRbXT4oKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcG9pbnQgb2Ygc2VyaWVzLmRhdGEpIHtcbiAgICAgICAgICAgICAgY29uc3QgYmluID0gZ2V0VGltZUludGVydmFsKGludGVydmFsKS5mbG9vcihwb2ludC5kYXRlKS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgIGlmICghYmlubmVkLmhhcyhiaW4pKSB7XG4gICAgICAgICAgICAgICAgYmlubmVkLnNldChiaW4sIFtdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBiaW5uZWQuZ2V0KGJpbikhLnB1c2gocG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uc2VyaWVzLFxuICAgICAgICAgICAgICBkYXRhOiBbLi4uYmlubmVkLmVudHJpZXMoKV0ubWFwKChbZGF0ZVZhbHVlLCBwb2ludHNdKSA9PiAoe1xuICAgICAgICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKGRhdGVWYWx1ZSksXG4gICAgICAgICAgICAgICAgdmFsdWU6IGNvbmZpZy5wb2ludFJlZHVjZXIocG9pbnRzLCBpKSxcbiAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICksXG4gICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KSxcbiAgKTtcblxuICByZWFkb25seSBiaW5uZWREYXRlUmFuZ2UkID0gdGhpcy5iaW5uZWREYXRhJC5waXBlKFxuICAgIG1hcChnZXREYXRlUmFuZ2UpLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgcmVhZG9ubHkgZHJhd0RhdGEkOiBPYnNlcnZhYmxlPERyYXdEYXRhPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuYmlubmVkRGF0YSQsXG4gICAgdGhpcy5iaW5uZWREYXRlUmFuZ2UkLFxuICAgIHRoaXMuc2VsZWN0ZWRJbnRlcnZhbCQsXG4gICAgdGhpcy53aWR0aCQsXG4gICAgdGhpcy5oZWlnaHQkLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW2Jpbm5lZERhdGEsIGJpbm5lZERhdGVSYW5nZSwgaW50ZXJ2YWwsIHdpZHRoLCBoZWlnaHRdKSA9PiB7XG4gICAgICBjb25zdCB2aWV3Qm94ID0gYDAgMCAke3dpZHRofSAke2hlaWdodH1gO1xuXG4gICAgICBjb25zdCB4U2NhbGUgPSBzY2FsZUxpbmVhcigpXG4gICAgICAgIC5kb21haW4oYmlubmVkRGF0ZVJhbmdlKVxuICAgICAgICAucmFuZ2UoW1xuICAgICAgICAgIHRoaXMuTEVGVF9PRkZTRVQgKyB0aGlzLkxFRlRfUklHSFRfUEFERElORyxcbiAgICAgICAgICB3aWR0aCAtIHRoaXMuTEVGVF9SSUdIVF9QQURESU5HICogMixcbiAgICAgICAgXSk7XG4gICAgICBjb25zdCBbbWluRGF0ZVZhbHVlLCBtYXhEYXRlVmFsdWVdID0gYmlubmVkRGF0ZVJhbmdlO1xuICAgICAgY29uc3QgaGFzTXVsdGlwbGVZZWFycyA9XG4gICAgICAgIG1pbkRhdGVWYWx1ZS5nZXRGdWxsWWVhcigpIDwgbWF4RGF0ZVZhbHVlLmdldEZ1bGxZZWFyKCk7XG4gICAgICBjb25zdCB4TWlub3JJbnRlcnZhbEZvcm1hdCA9IGdldE1pbm9ySW50ZXJ2YWxGb3JtYXQoaW50ZXJ2YWwpO1xuICAgICAgY29uc3QgbWlub3JGb3JtYXR0ZXIgPSB1dGNGb3JtYXQoeE1pbm9ySW50ZXJ2YWxGb3JtYXQpO1xuICAgICAgY29uc3QgeE1pbm9yVGlja3MgPSBnZXRUaW1lSW50ZXJ2YWwoaW50ZXJ2YWwpXG4gICAgICAgIC5yYW5nZShtaW5EYXRlVmFsdWUsIHV0Y0RheS5vZmZzZXQobWF4RGF0ZVZhbHVlLCAxKSlcbiAgICAgICAgLm1hcChkYXRlID0+ICh7XG4gICAgICAgICAgdmFsdWU6IGRhdGUudmFsdWVPZigpLFxuICAgICAgICAgIGxhYmVsOiBtaW5vckZvcm1hdHRlcihkYXRlKSxcbiAgICAgICAgfSkpXG4gICAgICAgIC5maWx0ZXIoKF8sIGksIGFycikgPT5cbiAgICAgICAgICBhcnIubGVuZ3RoID4gdGhpcy5YX01JTk9SX1RJQ0tfTElNSVRcbiAgICAgICAgICAgID8gaSAlIE1hdGgucm91bmQoYXJyLmxlbmd0aCAvIHRoaXMuWF9NSU5PUl9USUNLX0xJTUlUKSA9PT0gMFxuICAgICAgICAgICAgOiB0cnVlLFxuICAgICAgICApO1xuICAgICAgY29uc3QgeE1ham9ySW50ZXJ2YWwgPSBnZXRNYWpvckludGVydmFsKGludGVydmFsKTtcbiAgICAgIGNvbnN0IHhNYWpvckludGVydmFsRm9ybWF0ID0gZ2V0TWFqb3JJbnRlcnZhbEZvcm1hdChcbiAgICAgICAgeE1ham9ySW50ZXJ2YWwsXG4gICAgICAgIGhhc011bHRpcGxlWWVhcnMsXG4gICAgICApO1xuICAgICAgY29uc3QgdGltZUludGVydmFsID0gZ2V0VGltZUludGVydmFsKHhNYWpvckludGVydmFsKTtcbiAgICAgIGNvbnN0IHRpY2tGbG9vciA9IHRpbWVJbnRlcnZhbC5mbG9vcihtaW5EYXRlVmFsdWUpO1xuICAgICAgY29uc3QgdGlja0NlaWxpbmcgPSB0aW1lSW50ZXJ2YWwuY2VpbCh1dGNEYXkub2Zmc2V0KG1heERhdGVWYWx1ZSwgMSkpO1xuICAgICAgY29uc3QgbWFqb3JGb3JtYXR0ZXIgPSB1dGNGb3JtYXQoeE1ham9ySW50ZXJ2YWxGb3JtYXQpO1xuICAgICAgY29uc3QgeE1ham9yVGlja3MgPSB0aW1lSW50ZXJ2YWxcbiAgICAgICAgLnJhbmdlKHRpY2tGbG9vciwgdGlja0NlaWxpbmcpXG4gICAgICAgIC5tYXAodGlja0RhdGUgPT4gKHtcbiAgICAgICAgICBsYWJlbDogeE1ham9ySW50ZXJ2YWwgPT09IGludGVydmFsID8gJycgOiBtYWpvckZvcm1hdHRlcih0aWNrRGF0ZSksXG4gICAgICAgICAgdmFsdWU6IHRpY2tEYXRlLnZhbHVlT2YoKSxcbiAgICAgICAgfSkpO1xuICAgICAgY29uc3QgeCA9IHsgeE1heDogbWF4RGF0ZVZhbHVlLCB4U2NhbGUsIHhNaW5vclRpY2tzLCB4TWFqb3JUaWNrcyB9O1xuXG4gICAgICBjb25zdCBbeTEsIHkyXSA9IGJpbm5lZERhdGEubWFwKGNvbmZpZyA9PiB7XG4gICAgICAgIGNvbnN0IGZsYXR0ZW5lZFZhbHVlcyA9IGNvbmZpZy5zZXJpZXMucmVkdWNlPG51bWJlcltdPihcbiAgICAgICAgICAodmFsdWVzLCBzZXJpZXMpID0+IFtcbiAgICAgICAgICAgIC4uLnZhbHVlcyxcbiAgICAgICAgICAgIC4uLnNlcmllcy5kYXRhLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSksXG4gICAgICAgICAgXSxcbiAgICAgICAgICBbXSxcbiAgICAgICAgKTtcbiAgICAgICAgbGV0IHlNYXggPSBjb25maWcubWF4ID8/IE1hdGgubWF4KC4uLmZsYXR0ZW5lZFZhbHVlcywgMCk7XG4gICAgICAgIGNvbnN0IHlNaW4gPSBjb25maWcubWluID8/IE1hdGgubWluKC4uLmZsYXR0ZW5lZFZhbHVlcywgMCk7XG4gICAgICAgIC8vIFJJVkVULTE0NjA1IC0gaWYgcmFuZ2UgaXMgWzAsMF0sIG1ha2UgaXQgWzAsMV0gaW5zdGVhZFxuICAgICAgICBpZiAoeU1heCA9PSAwICYmIHlNaW4gPT0gMCkge1xuICAgICAgICAgIHlNYXggPSAxO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHlTY2FsZSA9IHNjYWxlTGluZWFyKClcbiAgICAgICAgICAuZG9tYWluKFt5TWluLCB5TWF4XSlcbiAgICAgICAgICAucmFuZ2UoW1xuICAgICAgICAgICAgaGVpZ2h0IC1cbiAgICAgICAgICAgICAgdGhpcy5CT1RUT01fT0ZGU0VUIC1cbiAgICAgICAgICAgICAgKHRoaXMuQk9UVE9NX1BBRERJTkcgKyB0aGlzLlRPUF9QQURESU5HKSxcbiAgICAgICAgICAgIHRoaXMuVE9QX1BBRERJTkcsXG4gICAgICAgICAgXSk7XG4gICAgICAgIGNvbnN0IHlUaWNrcyA9IHlTY2FsZS50aWNrcyh0aGlzLllfVElDS19DT1VOVCk7XG4gICAgICAgIGNvbnN0IHNlcmllcyA9IGNvbmZpZy5zZXJpZXMubWFwKHNlcmllcyA9PiAoe1xuICAgICAgICAgIC4uLnNlcmllcyxcbiAgICAgICAgICBwYXRoOiBsaW5lPFRpbWVTZXJpZXNDb21wb25lbnQuRGF0YVBvaW50PigpXG4gICAgICAgICAgICAueChkID0+IHhTY2FsZShkLmRhdGUpKVxuICAgICAgICAgICAgLnkoZCA9PiB5U2NhbGUoZC52YWx1ZSkpKHNlcmllcy5kYXRhKSxcbiAgICAgICAgICBzdHJva2U6IGB2YXIoJHtzZXJpZXMuY29sb3JUb2tlbn0pYCxcbiAgICAgICAgICBtYXJrZXJzOiBzZXJpZXMuZGF0YS5tYXAocG9pbnQgPT4gKHtcbiAgICAgICAgICAgIC4uLnBvaW50LFxuICAgICAgICAgICAgeDogeFNjYWxlKHBvaW50LmRhdGUpLFxuICAgICAgICAgICAgeTogeVNjYWxlKHBvaW50LnZhbHVlKSxcbiAgICAgICAgICB9KSksXG4gICAgICAgIH0pKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgc2VyaWVzLFxuICAgICAgICAgIHlNYXgsXG4gICAgICAgICAgeU1pbixcbiAgICAgICAgICB5U2NhbGUsXG4gICAgICAgICAgeVRpY2tzLFxuICAgICAgICB9O1xuICAgICAgfSk7XG5cbiAgICAgIC8vIElmIHdlIGhhdmUgYSB5MiwgY29lcmNlIHkxJ3MgdGlja3MgdG8gYmUgdmlzdWFsbHkgZXF1aXZhbGVudCB0byB5MidzIHRpY2tzLlxuICAgICAgaWYgKHkyPy55VGlja3MpIHtcbiAgICAgICAgY29uc3QgdGlja0NvbnZlcnNpb25TY2FsZSA9IHNjYWxlTGluZWFyKClcbiAgICAgICAgICAucmFuZ2UoeTEueVNjYWxlLmRvbWFpbigpKVxuICAgICAgICAgIC5kb21haW4oeTIueVNjYWxlLmRvbWFpbigpKTtcbiAgICAgICAgeTEueVRpY2tzID0geTIueVRpY2tzLm1hcCh0aWNrQ29udmVyc2lvblNjYWxlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHsgdmlld0JveCwgeCwgeTEsIHkyIH07XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KSxcbiAgKTtcblxuICByZWFkb25seSBsZWdlbmQkID0gdGhpcy5iaW5uZWREYXRhJC5waXBlKFxuICAgIG1hcChiaW5uZWREYXRhID0+XG4gICAgICBiaW5uZWREYXRhLnJlZHVjZTx7IGxhYmVsOiBzdHJpbmc7IGNvbG9yVG9rZW46IHN0cmluZyB9W10+KFxuICAgICAgICAoaXRlbXMsIGNvbmZpZykgPT4gW1xuICAgICAgICAgIC4uLml0ZW1zLFxuICAgICAgICAgIC4uLmNvbmZpZy5zZXJpZXMubWFwKHNlcmllcyA9PiAoe1xuICAgICAgICAgICAgbGFiZWw6IHNlcmllcy5sYWJlbCxcbiAgICAgICAgICAgIGNvbG9yVG9rZW46IHNlcmllcy5jb2xvclRva2VuLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgXSxcbiAgICAgICAgW10sXG4gICAgICApLFxuICAgICksXG4gICk7XG5cbiAgcmVhZG9ubHkgZW1wdHkkID0gdGhpcy5iaW5uZWREYXRhJC5waXBlKFxuICAgIG1hcChiaW5uZWREYXRhID0+XG4gICAgICBiaW5uZWREYXRhLmV2ZXJ5KGNvbmZpZyA9PlxuICAgICAgICBjb25maWcuc2VyaWVzLmV2ZXJ5KHNlcmllcyA9PiBzZXJpZXMuZGF0YS5sZW5ndGggPT09IDApLFxuICAgICAgKSxcbiAgICApLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgcmVhZG9ubHkgaG92ZXJlZE1hcmtlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHtcbiAgICBldmVudDogTW91c2VFdmVudDtcbiAgICBtYXJrZXI6IE1hcmtlcjtcbiAgfSB8IG51bGw+KG51bGwpO1xuXG4gIHJlYWRvbmx5IGNhbGxvdXQkID0gY29tYmluZUxhdGVzdChbdGhpcy5ob3ZlcmVkTWFya2VyJCwgdGhpcy5kcmF3RGF0YSRdKS5waXBlKFxuICAgIG1hcCgoW2hvdmVyZWRNYXJrZXIsIGRyYXdEYXRhXSkgPT4ge1xuICAgICAgaWYgKCFob3ZlcmVkTWFya2VyKSByZXR1cm4gbnVsbDtcblxuICAgICAgY29uc3QgeyB0YXJnZXQgfSA9IGhvdmVyZWRNYXJrZXIuZXZlbnQ7XG4gICAgICBpZiAoIXRhcmdldCkgcmV0dXJuIG51bGw7XG4gICAgICBjb25zdCBtYXJrZXJSZWN0ID0gKDxTVkdDaXJjbGVFbGVtZW50PnRhcmdldCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBwYWRkaW5nID0gODtcbiAgICAgIGNvbnN0IGFuY2hvciA9IG5ldyBET01SZWN0KFxuICAgICAgICBtYXJrZXJSZWN0LmxlZnQgLSBwYWRkaW5nLFxuICAgICAgICBtYXJrZXJSZWN0LnRvcCAtIHBhZGRpbmcsXG4gICAgICAgIG1hcmtlclJlY3Qud2lkdGggKyBwYWRkaW5nICogMixcbiAgICAgICAgbWFya2VyUmVjdC5oZWlnaHQgKyBwYWRkaW5nICogMixcbiAgICAgICk7XG5cbiAgICAgIHR5cGUgTWV0cmljID0geyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH07XG4gICAgICBjb25zdCBtZXRyaWNzOiBNZXRyaWNbXSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IHNlcmllcyBvZiBkcmF3RGF0YS55MS5zZXJpZXMpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBzZXJpZXMubWFya2Vycy5maW5kKFxuICAgICAgICAgIG1hcmtlciA9PiBtYXJrZXIueCA9PT0gaG92ZXJlZE1hcmtlci5tYXJrZXIueCxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgbWV0cmljcy5wdXNoKHtcbiAgICAgICAgICAgIGxhYmVsOiBzZXJpZXMubGFiZWwsXG4gICAgICAgICAgICB2YWx1ZTogZHJhd0RhdGEueTEudmFsdWVGb3JtYXR0ZXIobWF0Y2gudmFsdWUpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChkcmF3RGF0YS55Mikge1xuICAgICAgICBmb3IgKGNvbnN0IHNlcmllcyBvZiBkcmF3RGF0YS55Mi5zZXJpZXMpIHtcbiAgICAgICAgICBjb25zdCBtYXRjaCA9IHNlcmllcy5tYXJrZXJzLmZpbmQoXG4gICAgICAgICAgICBtYXJrZXIgPT4gbWFya2VyLnggPT09IGhvdmVyZWRNYXJrZXIubWFya2VyLngsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIG1ldHJpY3MucHVzaCh7XG4gICAgICAgICAgICAgIGxhYmVsOiBzZXJpZXMubGFiZWwsXG4gICAgICAgICAgICAgIHZhbHVlOiBkcmF3RGF0YS55Mi52YWx1ZUZvcm1hdHRlcihtYXRjaC52YWx1ZSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHsgYW5jaG9yLCBtZXRyaWNzIH07XG4gICAgfSksXG4gICk7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgVGltZVNlcmllc0NvbXBvbmVudCB7XG4gIGV4cG9ydCB0eXBlIFNlcmllcyA9IHtcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIGNvbG9yVG9rZW46IHN0cmluZztcbiAgICBkYXRhOiBUaW1lU2VyaWVzQ29tcG9uZW50LkRhdGFQb2ludFtdO1xuICAgIHN0eWxlPzogJ3NvbGlkJyB8ICdkYXNoZWQnO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIERhdGFQb2ludCA9IHtcbiAgICB2YWx1ZTogbnVtYmVyO1xuICAgIGRhdGU6IERhdGU7XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgWUNvbmZpZyA9IHtcbiAgICBwb2ludFJlZHVjZXI6IChwb2ludHM6IERhdGFQb2ludFtdLCBzZXJpZXNJbmRleDogbnVtYmVyKSA9PiBudW1iZXI7XG4gICAgdmFsdWVGb3JtYXR0ZXI6IChyZWR1Y2VkVmFsdWU6IG51bWJlcikgPT4gc3RyaW5nO1xuICAgIHNlcmllczogU2VyaWVzW107XG4gICAgbWluPzogbnVtYmVyO1xuICAgIG1heD86IG51bWJlcjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBUaW1lU2VyaWVzSW5wdXQgPSBbWUNvbmZpZ10gfCBbWUNvbmZpZywgWUNvbmZpZ107XG59XG4iLCI8ZGl2ICpuZ0lmPVwiIShlbXB0eSQgfCBhc3luYyk7IGVsc2UgemVyb1N0YXRlXCIgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgPHN2Z1xuICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICpuZ0lmPVwiZHJhd0RhdGEkIHwgYXN5bmM7IGxldCBkXCJcbiAgICBbYXR0ci52aWV3Qm94XT1cImQudmlld0JveFwiXG4gID5cbiAgICA8ZyAqbmdGb3I9XCJsZXQgdGljayBvZiBkLngueE1ham9yVGlja3NcIj5cbiAgICAgIDxyZWN0XG4gICAgICAgIGNsYXNzPVwidGlja1wiXG4gICAgICAgIFthdHRyLnhdPVwiZC54LnhTY2FsZSh0aWNrLnZhbHVlKVwiXG4gICAgICAgIHk9XCIwXCJcbiAgICAgICAgd2lkdGg9XCIxXCJcbiAgICAgICAgW2F0dHIuaGVpZ2h0XT1cImQueTEueVNjYWxlKGQueTEueU1pbilcIlxuICAgICAgPjwvcmVjdD5cbiAgICAgIDx0ZXh0XG4gICAgICAgICpuZ0lmPVwiZC54LnhTY2FsZSh0aWNrLnZhbHVlKSA+PSAwXCJcbiAgICAgICAgY2xhc3M9XCJ4LW1ham9yLXRpY2stbGFiZWxcIlxuICAgICAgICBbYXR0ci54XT1cImQueC54U2NhbGUodGljay52YWx1ZSlcIlxuICAgICAgICBbYXR0ci55XT1cImQueTEueVNjYWxlKGQueTEueU1pbilcIlxuICAgICAgICBkeD1cIjRcIlxuICAgICAgICBkeT1cIi00XCJcbiAgICAgID5cbiAgICAgICAge3sgdGljay5sYWJlbCB9fVxuICAgICAgPC90ZXh0PlxuICAgIDwvZz5cbiAgICA8ZyAqbmdGb3I9XCJsZXQgdGljayBvZiBkLngueE1pbm9yVGlja3NcIj5cbiAgICAgIDx0ZXh0XG4gICAgICAgIGNsYXNzPVwieC1taW5vci10aWNrLWxhYmVsXCJcbiAgICAgICAgW2F0dHIueF09XCJkLngueFNjYWxlKHRpY2sudmFsdWUpXCJcbiAgICAgICAgW2F0dHIueV09XCJkLnkxLnlTY2FsZShkLnkxLnlNaW4pXCJcbiAgICAgICAgdGV4dC1hbmNob3I9XCJtaWRkbGVcIlxuICAgICAgICBkb21pbmFudC1iYXNlbGluZT1cImhhbmdpbmdcIlxuICAgICAgICBkeT1cIjhcIlxuICAgICAgPlxuICAgICAgICB7eyB0aWNrLmxhYmVsIH19XG4gICAgICAgIDx0aXRsZT57eyB0aWNrLnZhbHVlIHwgZGF0ZSB9fTwvdGl0bGU+XG4gICAgICA8L3RleHQ+XG4gICAgPC9nPlxuICAgIDxnICpuZ0Zvcj1cImxldCB0aWNrIG9mIGQueTEueVRpY2tzXCI+XG4gICAgICA8cmVjdFxuICAgICAgICBjbGFzcz1cInRpY2tcIlxuICAgICAgICB4PVwiMFwiXG4gICAgICAgIFthdHRyLnldPVwiZC55MS55U2NhbGUodGljaylcIlxuICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICBoZWlnaHQ9XCIxXCJcbiAgICAgID48L3JlY3Q+XG4gICAgICA8dGV4dCBjbGFzcz1cInktdGljay1sYWJlbFwiIHg9XCIwXCIgW2F0dHIueV09XCJkLnkxLnlTY2FsZSh0aWNrKVwiIGR5PVwiLTRcIj5cbiAgICAgICAge3sgZC55MS52YWx1ZUZvcm1hdHRlcih0aWNrKSB9fVxuICAgICAgPC90ZXh0PlxuICAgIDwvZz5cblxuICAgIDxnICpuZ0Zvcj1cImxldCB0aWNrIG9mIGQueTI/LnlUaWNrc1wiPlxuICAgICAgPHRleHRcbiAgICAgICAgY2xhc3M9XCJ5LXRpY2stbGFiZWxcIlxuICAgICAgICBbYXR0ci54XT1cImQueC54U2NhbGUoZC54LnhNYXgpXCJcbiAgICAgICAgW2F0dHIueV09XCJkLnkyPy55U2NhbGUodGljaylcIlxuICAgICAgICB0ZXh0LWFuY2hvcj1cImVuZFwiXG4gICAgICAgIGR5PVwiLTRcIlxuICAgICAgPlxuICAgICAgICB7eyBkLnkyPy52YWx1ZUZvcm1hdHRlcih0aWNrKSB9fVxuICAgICAgPC90ZXh0PlxuICAgIDwvZz5cblxuICAgIDxnICpuZ0lmPVwiaG92ZXJlZE1hcmtlciQgfCBhc3luYzsgbGV0IGhvdmVyZWRNYXJrZXJcIj5cbiAgICAgIDxsaW5lXG4gICAgICAgIGNsYXNzPVwiaG92ZXItcnVsZVwiXG4gICAgICAgIFthdHRyLngxXT1cImhvdmVyZWRNYXJrZXIubWFya2VyLnhcIlxuICAgICAgICBbYXR0ci55MV09XCJkLnkxLnlTY2FsZShkLnkxLnlNaW4pXCJcbiAgICAgICAgW2F0dHIueDJdPVwiaG92ZXJlZE1hcmtlci5tYXJrZXIueFwiXG4gICAgICAgIFthdHRyLnkyXT1cImQueTEueVNjYWxlKGQueTEueU1heClcIlxuICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgICAgc3Ryb2tlLWRhc2hhcnJheT1cIjRcIlxuICAgICAgLz5cbiAgICA8L2c+XG5cbiAgICA8bmctdGVtcGxhdGUgI3Nlcmllc1RwbCBsZXQtc2VyaWVzPVwic2VyaWVzXCI+XG4gICAgICA8cGF0aFxuICAgICAgICBjbGFzcz1cImRhdGEgcGF0aFwiXG4gICAgICAgIFtjbGFzcy5tYXJrZXItaG92ZXJlZF09XCIhIShob3ZlcmVkTWFya2VyJCB8IGFzeW5jKVwiXG4gICAgICAgIFthdHRyLmRdPVwic2VyaWVzLnBhdGhcIlxuICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgICBbYXR0ci5zdHJva2VdPVwic2VyaWVzLnN0cm9rZVwiXG4gICAgICAgIFthdHRyLnN0cm9rZS1kYXNoYXJyYXldPVwic2VyaWVzLnN0eWxlID09PSAnZGFzaGVkJyA/ICc0JyA6IG51bGxcIlxuICAgICAgPjwvcGF0aD5cbiAgICAgIDxjaXJjbGVcbiAgICAgICAgKm5nRm9yPVwibGV0IG1hcmtlciBvZiBzZXJpZXMubWFya2Vyc1wiXG4gICAgICAgIGNsYXNzPVwiZGF0YSBtYXJrZXJcIlxuICAgICAgICBbY2xhc3MuZm9jdXNlZF09XCIoaG92ZXJlZE1hcmtlciQgfCBhc3luYyk/Lm1hcmtlcj8ueCA9PT0gbWFya2VyLnhcIlxuICAgICAgICBbY2xhc3MuYmx1cnJlZF09XCJcbiAgICAgICAgICAoaG92ZXJlZE1hcmtlciQgfCBhc3luYykgIT09IG51bGwgJiZcbiAgICAgICAgICAoaG92ZXJlZE1hcmtlciQgfCBhc3luYyk/Lm1hcmtlcj8ueCAhPT0gbWFya2VyLnhcbiAgICAgICAgXCJcbiAgICAgICAgW2F0dHIuY3hdPVwibWFya2VyLnhcIlxuICAgICAgICBbYXR0ci5jeV09XCJtYXJrZXIueVwiXG4gICAgICAgIHI9XCIzLjVcIlxuICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNlcmllcy5zdHJva2VcIlxuICAgICAgICAobW91c2VvdmVyKT1cImhvdmVyZWRNYXJrZXIkLm5leHQoeyBldmVudDogJGV2ZW50LCBtYXJrZXI6IG1hcmtlciB9KVwiXG4gICAgICAgIChtb3VzZWxlYXZlKT1cImhvdmVyZWRNYXJrZXIkLm5leHQobnVsbClcIlxuICAgICAgPjwvY2lyY2xlPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPGcgKm5nRm9yPVwibGV0IHNlcmllcyBvZiBkLnkxLnNlcmllc1wiPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInNlcmllc1RwbDsgY29udGV4dDogeyBzZXJpZXM6IHNlcmllcyB9XCJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L2c+XG4gICAgPGcgKm5nRm9yPVwibGV0IHNlcmllcyBvZiBkLnkyPy5zZXJpZXNcIj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZXJpZXNUcGw7IGNvbnRleHQ6IHsgc2VyaWVzOiBzZXJpZXMgfVwiXG4gICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9nPlxuICA8L3N2Zz5cbiAgPGxlZ2VuZD5cbiAgICA8cml2LWxlZ2VuZC1pdGVtXG4gICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBsZWdlbmQkIHwgYXN5bmNcIlxuICAgICAgW2xhYmVsXT1cIml0ZW0ubGFiZWxcIlxuICAgICAgW2NvbG9yVG9rZW5dPVwiaXRlbS5jb2xvclRva2VuXCJcbiAgICA+PC9yaXYtbGVnZW5kLWl0ZW0+XG4gIDwvbGVnZW5kPlxuPC9kaXY+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJjYWxsb3V0JCB8IGFzeW5jOyBsZXQgY2FsbG91dFwiPlxuICA8cml2LWNhbGxvdXRcbiAgICAqcml2LWNhbGxvdXRcbiAgICBbYW5jaG9yXT1cImNhbGxvdXQuYW5jaG9yXCJcbiAgICBbaXNNb2RhbF09XCJmYWxzZVwiXG4gICAgW3ByZWZlcnJlZFBvc2l0aW9uXT1cIid0b3AtY2VudGVyJ1wiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiY2FsbG91dC1jb250ZW50XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FsbG91dC1tZXRyaWNcIiAqbmdGb3I9XCJsZXQgbWV0cmljIG9mIGNhbGxvdXQubWV0cmljc1wiPlxuICAgICAgICA8ZGl2Pnt7IG1ldHJpYy5sYWJlbCB9fTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbG91dC1tZXRyaWMtdmFsdWVcIj57eyBtZXRyaWMudmFsdWUgfX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L3Jpdi1jYWxsb3V0PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjemVyb1N0YXRlPlxuICA8cml2LXplcm8tc3RhdGUgW21lc3NhZ2VdPVwiemVyb1N0YXRlTWVzc2FnZVwiPjwvcml2LXplcm8tc3RhdGU+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2NvbnRyb2xzPlxuICA8cml2LXNpbmdsZS1zZWxlY3RcbiAgICBbb3B0aW9uc109XCIoaW50ZXJ2YWxPcHRpb25zJCB8IGFzeW5jKSB8fCBbXVwiXG4gICAgW3NlbGVjdGVkT3B0aW9uXT1cInNlbGVjdGVkSW50ZXJ2YWxPcHRpb24kIHwgYXN5bmNcIlxuICAgIChzZWxlY3RlZE9wdGlvbkNoYW5nZSk9XCJzZXRJbnRlcnZhbE9wdGlvbigkZXZlbnQpXCJcbiAgPjwvcml2LXNpbmdsZS1zZWxlY3Q+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -2,9 +2,9 @@ import * as i0 from '@angular/core';
2
2
  import { Component, ChangeDetectionStrategy, Input, HostBinding, Pipe, Injectable, Directive, EventEmitter, ViewChild, Output, HostListener, ViewContainerRef, Self, NgModule } from '@angular/core';
3
3
  import * as i1 from '@angular/common';
4
4
  import { DatePipe as DatePipe$1, DecimalPipe, CurrencyPipe, PercentPipe, CommonModule } from '@angular/common';
5
- import { timeYears, timeYear, timeMonths, timeMonth, timeDays, timeDay, timeSunday, timeWeek } from 'd3-time';
5
+ import { timeYears, timeYear, timeMonths, timeMonth, timeDays, timeDay, timeSunday, timeWeek, utcYear, utcMonth, utcWeek, utcDay } from 'd3-time';
6
6
  import { BehaviorSubject, debounceTime, switchMap, from, map, startWith, pairwise, combineLatest, shareReplay, Subject, merge, scan, filter, distinctUntilChanged } from 'rxjs';
7
- import { timeFormat } from 'd3-time-format';
7
+ import { timeFormat, utcFormat } from 'd3-time-format';
8
8
  import Fuse from 'fuse.js';
9
9
  import { pie, arc, area, stack, line } from 'd3-shape';
10
10
  import { index, union } from 'd3-array';
@@ -2467,15 +2467,15 @@ const intervals = ['year', 'quarter', 'month', 'week', 'day'];
2467
2467
  function getTimeInterval(interval) {
2468
2468
  switch (interval) {
2469
2469
  case 'day':
2470
- return timeDay;
2470
+ return utcDay;
2471
2471
  case 'week':
2472
- return timeWeek;
2472
+ return utcWeek;
2473
2473
  case 'month':
2474
- return timeMonth;
2474
+ return utcMonth;
2475
2475
  case 'quarter':
2476
- return timeMonth.every(3);
2476
+ return utcMonth.every(3);
2477
2477
  case 'year':
2478
- return timeYear;
2478
+ return utcYear;
2479
2479
  }
2480
2480
  }
2481
2481
  function getMinorIntervalFormat(interval) {
@@ -2628,13 +2628,13 @@ class StackedColumnComponent {
2628
2628
  const [minDate, maxDate] = getDateRange$1(binnedData);
2629
2629
  const hasMultipleYears = minDate.getFullYear() < maxDate.getFullYear();
2630
2630
  const xMinorIntervalFormat = getMinorIntervalFormat(interval);
2631
- const minorFormatter = timeFormat(xMinorIntervalFormat);
2631
+ const minorFormatter = utcFormat(xMinorIntervalFormat);
2632
2632
  const minorTimeInterval = getTimeInterval(interval);
2633
2633
  const xSteps = minorTimeInterval.range(minorTimeInterval.floor(minDate), minorTimeInterval.floor(minorTimeInterval.offset(maxDate, 1)));
2634
2634
  const xMajorInterval = getMajorInterval(interval);
2635
2635
  const xMajorIntervalFormat = getMajorIntervalFormat(xMajorInterval, hasMultipleYears);
2636
- const majorFormatter = timeFormat(xMajorIntervalFormat);
2637
- const fullFormatter = timeFormat(`${xMinorIntervalFormat} ${xMajorIntervalFormat}`);
2636
+ const majorFormatter = utcFormat(xMajorIntervalFormat);
2637
+ const fullFormatter = utcFormat(`${xMinorIntervalFormat} ${xMajorIntervalFormat}`);
2638
2638
  const xOuterScale = scaleBand()
2639
2639
  .domain(xSteps.map(date => fullFormatter(date)))
2640
2640
  .range([0, width]);
@@ -3205,7 +3205,7 @@ class TimeSeriesComponent {
3205
3205
  const [minDateValue, maxDateValue] = getDateRange(input);
3206
3206
  return intervals.filter(interval => {
3207
3207
  const timeInterval = getTimeInterval(interval);
3208
- const numSteps = timeInterval.range(timeInterval.floor(minDateValue), timeInterval.ceil(timeDay.offset(maxDateValue, 1))).length;
3208
+ const numSteps = timeInterval.range(timeInterval.floor(minDateValue), timeInterval.ceil(utcDay.offset(maxDateValue, 1))).length;
3209
3209
  return numSteps <= MAX_POINTS && numSteps > 1;
3210
3210
  });
3211
3211
  }), shareReplay({ refCount: true, bufferSize: 1 }));
@@ -3269,9 +3269,9 @@ class TimeSeriesComponent {
3269
3269
  const [minDateValue, maxDateValue] = binnedDateRange;
3270
3270
  const hasMultipleYears = minDateValue.getFullYear() < maxDateValue.getFullYear();
3271
3271
  const xMinorIntervalFormat = getMinorIntervalFormat(interval);
3272
- const minorFormatter = timeFormat(xMinorIntervalFormat);
3272
+ const minorFormatter = utcFormat(xMinorIntervalFormat);
3273
3273
  const xMinorTicks = getTimeInterval(interval)
3274
- .range(minDateValue, timeDay.offset(maxDateValue, 1))
3274
+ .range(minDateValue, utcDay.offset(maxDateValue, 1))
3275
3275
  .map(date => ({
3276
3276
  value: date.valueOf(),
3277
3277
  label: minorFormatter(date),
@@ -3283,8 +3283,8 @@ class TimeSeriesComponent {
3283
3283
  const xMajorIntervalFormat = getMajorIntervalFormat(xMajorInterval, hasMultipleYears);
3284
3284
  const timeInterval = getTimeInterval(xMajorInterval);
3285
3285
  const tickFloor = timeInterval.floor(minDateValue);
3286
- const tickCeiling = timeInterval.ceil(timeDay.offset(maxDateValue, 1));
3287
- const majorFormatter = timeFormat(xMajorIntervalFormat);
3286
+ const tickCeiling = timeInterval.ceil(utcDay.offset(maxDateValue, 1));
3287
+ const majorFormatter = utcFormat(xMajorIntervalFormat);
3288
3288
  const xMajorTicks = timeInterval
3289
3289
  .range(tickFloor, tickCeiling)
3290
3290
  .map(tickDate => ({