@annalib/anna-core 4.2.20 → 4.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,9 @@
1
1
  import { Injectable } from "@angular/core";
2
2
  // Third party import statements
3
3
  import { min, max, map, sortBy, uniq, cloneDeep, isEqual } from "lodash-es";
4
- import moment from "moment";
4
+ import dayjs from "dayjs";
5
+ import minMax from "dayjs/plugin/minMax";
6
+ import isBetween from "dayjs/plugin/isBetween";
5
7
  // User defined import statements
6
8
  import { AnnaDateTimeFormatService } from './anna-date-time-format.service';
7
9
  import { AnnaSortService } from './anna-sort.service';
@@ -67,6 +69,8 @@ export class AnnaFilterService {
67
69
  }
68
70
  return data.toString();
69
71
  };
72
+ dayjs.extend(minMax);
73
+ dayjs.extend(isBetween);
70
74
  console.log("AnnaFilterService service created.");
71
75
  const sliderArr = [
72
76
  "rcvPreempt",
@@ -115,9 +119,9 @@ export class AnnaFilterService {
115
119
  }
116
120
  returnMinAndMaxDate(data, key) {
117
121
  data = data.filter((obj) => !["", "-", null].includes(obj[key]));
118
- let DateArr = data.map((obj) => moment(obj[key]));
119
- let minDate = moment.min(DateArr);
120
- let maxDate = moment.max(DateArr);
122
+ let DateArr = data.map((obj) => dayjs(obj[key]));
123
+ let minDate = dayjs.min(DateArr);
124
+ let maxDate = dayjs.max(DateArr);
121
125
  return [minDate, maxDate];
122
126
  }
123
127
  isTooltipActive(header, sortMap) {
@@ -151,7 +155,7 @@ export class AnnaFilterService {
151
155
  let uniqueDates = uniq(data.map((u) => u["date"]));
152
156
  let uniqueDatesInNgbDateFormat = [];
153
157
  uniqueDates.forEach((date) => {
154
- uniqueDatesInNgbDateFormat.push(this.dateTimeFormatService.convertToNgbDateStandardFormat(moment(date, "MM/DD/YY").format("MM/DD/YYYY")));
158
+ uniqueDatesInNgbDateFormat.push(this.dateTimeFormatService.convertToNgbDateStandardFormat(dayjs(date, "MM/DD/YY").format("MM/DD/YYYY")));
155
159
  });
156
160
  return uniqueDatesInNgbDateFormat;
157
161
  }
@@ -244,17 +248,17 @@ export class AnnaFilterService {
244
248
  return filteredData;
245
249
  }
246
250
  returnOrdersInTheRange(order, range, key) {
247
- let isDateBetweenTheSelectedRange = moment(order[key]).isBetween(range.minSelectedDate, range.maxSelectedDate);
248
- let isDateSameAsTheMinSelectedDate = moment(order[key]).isSame(range.minSelectedDate);
249
- let isDateSameAsTheMaxSelectedDate = moment(order[key]).isSame(range.maxSelectedDate);
251
+ let isDateBetweenTheSelectedRange = dayjs(order[key]).isBetween(range.minSelectedDate, range.maxSelectedDate);
252
+ let isDateSameAsTheMinSelectedDate = dayjs(order[key]).isSame(range.minSelectedDate);
253
+ let isDateSameAsTheMaxSelectedDate = dayjs(order[key]).isSame(range.maxSelectedDate);
250
254
  return isDateBetweenTheSelectedRange || isDateSameAsTheMinSelectedDate || isDateSameAsTheMaxSelectedDate;
251
255
  }
252
256
  returnDataForTimeRange(obj, selectedData) {
253
257
  let format = "HH:mm:ss";
254
- let selectedStartDate = moment(selectedData.startTime, format);
255
- let selectedEndDate = moment(selectedData.endTime, format);
256
- let startTime = moment(obj.startTime, format);
257
- let endTime = moment(obj.endTime, format);
258
+ let selectedStartDate = dayjs(selectedData.startTime, format);
259
+ let selectedEndDate = dayjs(selectedData.endTime, format);
260
+ let startTime = dayjs(obj.startTime, format);
261
+ let endTime = dayjs(obj.endTime, format);
258
262
  let isStartTimeSameAsSelectedStartTime = startTime.isSame(selectedStartDate);
259
263
  let isStartTimeBetweenSelectedStartAndEndTime = startTime.isBetween(selectedStartDate, selectedEndDate);
260
264
  let isEndTimeSameAsSelectedEndTime = endTime.isSame(selectedEndDate);
@@ -266,8 +270,8 @@ export class AnnaFilterService {
266
270
  }
267
271
  returnDataForFromAndToTimeRange(obj, selectedData, key) {
268
272
  let format = "HH:mm:ss";
269
- let selectedFromTime = moment(selectedData.fromTime, format);
270
- let selectedToTime = moment(selectedData.toTime, format);
273
+ let selectedFromTime = dayjs(selectedData.fromTime, format);
274
+ let selectedToTime = dayjs(selectedData.toTime, format);
271
275
  let objTime = obj[key];
272
276
  if (["", "-", null].includes(objTime)) {
273
277
  return false;
@@ -287,18 +291,18 @@ export class AnnaFilterService {
287
291
  if (!selectedData.includeTimeRange) {
288
292
  return false;
289
293
  }
290
- let momentTime = moment(objTime, format);
291
- let isObjTimeSameAsSelectedFromTime = momentTime.isSame(selectedFromTime);
292
- let isObjTimeSameAsSelectedToTime = momentTime.isSame(selectedToTime);
293
- let isObjTimeBetweenSelectedFromTimeAndToTime = momentTime.isBetween(selectedFromTime, selectedToTime);
294
+ let dayjsTime = dayjs(objTime, format);
295
+ let isObjTimeSameAsSelectedFromTime = dayjsTime.isSame(selectedFromTime);
296
+ let isObjTimeSameAsSelectedToTime = dayjsTime.isSame(selectedToTime);
297
+ let isObjTimeBetweenSelectedFromTimeAndToTime = dayjsTime.isBetween(selectedFromTime, selectedToTime);
294
298
  return (isObjTimeSameAsSelectedFromTime ||
295
299
  isObjTimeSameAsSelectedToTime ||
296
300
  isObjTimeBetweenSelectedFromTimeAndToTime);
297
301
  }
298
302
  returnDataForStartAndEndTimeRange(obj, selectedData, key) {
299
303
  let format = "HH:mm:ss";
300
- let selectedFromTime = moment(selectedData.fromTime, format);
301
- let selectedToTime = moment(selectedData.toTime, format);
304
+ let selectedFromTime = dayjs(selectedData.fromTime, format);
305
+ let selectedToTime = dayjs(selectedData.toTime, format);
302
306
  if (selectedData.includeMulti && obj[key][0] == "<multi>") {
303
307
  return true;
304
308
  }
@@ -314,8 +318,8 @@ export class AnnaFilterService {
314
318
  if (!selectedData.includeTimeRange) {
315
319
  return false;
316
320
  }
317
- let startTime = moment(obj[key][1], format);
318
- let endTime = moment(obj[key][2], format);
321
+ let startTime = dayjs(obj[key][1], format);
322
+ let endTime = dayjs(obj[key][2], format);
319
323
  let isStartTimeSameAsSelectedStartTime = startTime.isSame(selectedFromTime);
320
324
  let isStartTimeBetweenSelectedStartAndEndTime = startTime.isBetween(selectedFromTime, selectedToTime);
321
325
  let isEndTimeSameAsSelectedEndTime = endTime.isSame(selectedToTime);
@@ -329,20 +333,20 @@ export class AnnaFilterService {
329
333
  let parsingFormat;
330
334
  if (key === "period") {
331
335
  parsingFormat = "YYYY-MM-DD";
332
- let momentStartDate = moment(obj.startDate);
333
- let momentEndDate = moment(obj.endDate);
334
- let startDateIsBetweenSelDate = momentStartDate.isBetween(value.fromDate, value.toDate);
335
- let endDateIsBetweenSelDate = momentEndDate.isBetween(value.fromDate, value.toDate);
336
- let startDateIsSameAsSelStartDate = value.fromDate.isSame(momentStartDate);
337
- let endDateIsSameAsSelEndDate = value.toDate.isSame(momentEndDate);
336
+ let dayjsStartDate = dayjs(obj.startDate);
337
+ let dayjsEndDate = dayjs(obj.endDate);
338
+ let startDateIsBetweenSelDate = dayjsStartDate.isBetween(value.fromDate, value.toDate);
339
+ let endDateIsBetweenSelDate = dayjsEndDate.isBetween(value.fromDate, value.toDate);
340
+ let startDateIsSameAsSelStartDate = value.fromDate.isSame(dayjsStartDate);
341
+ let endDateIsSameAsSelEndDate = value.toDate.isSame(dayjsEndDate);
338
342
  return ((startDateIsBetweenSelDate || startDateIsSameAsSelStartDate) &&
339
343
  (endDateIsBetweenSelDate || endDateIsSameAsSelEndDate));
340
344
  }
341
345
  else if (key === "AirDate" || key === "flightStartDate" || key === "flightEndDate") {
342
346
  parsingFormat = "MM/DD/YYYY";
343
- let dateIsBetweenSelDate = moment(obj[key], parsingFormat).isBetween(value.minSelectedDate, value.maxSelectedDate);
344
- let dateIsSameAsSelStartDate = moment(obj[key], parsingFormat).isSame(value.minSelectedDate);
345
- let dateIsSameAsSelEndDate = moment(obj[key], parsingFormat).isSame(value.maxSelectedDate);
347
+ let dateIsBetweenSelDate = dayjs(obj[key], parsingFormat).isBetween(value.minSelectedDate, value.maxSelectedDate);
348
+ let dateIsSameAsSelStartDate = dayjs(obj[key], parsingFormat).isSame(value.minSelectedDate);
349
+ let dateIsSameAsSelEndDate = dayjs(obj[key], parsingFormat).isSame(value.maxSelectedDate);
346
350
  return dateIsBetweenSelDate || dateIsSameAsSelStartDate || dateIsSameAsSelEndDate;
347
351
  }
348
352
  }
@@ -415,10 +419,10 @@ export class AnnaFilterService {
415
419
  }
416
420
  isObjectInTheRange(obj, value, key) {
417
421
  let objVal = obj[key];
418
- let momentDate = moment(objVal);
422
+ let dayjsDate = dayjs(objVal);
419
423
  let isDateSameAsStartOfTheRange = value.fromDate.isSame(objVal);
420
424
  let isDateSameAsEndOfTheRange = value.toDate.isSame(objVal);
421
- let isDateBetweenTheStartAndEndOfRange = momentDate.isBetween(value.fromDate, value.toDate);
425
+ let isDateBetweenTheStartAndEndOfRange = dayjsDate.isBetween(value.fromDate, value.toDate);
422
426
  return isDateSameAsStartOfTheRange || isDateSameAsEndOfTheRange || isDateBetweenTheStartAndEndOfRange;
423
427
  }
424
428
  updateStateOfTheCurrentFilterTab(sortMap) {
@@ -447,4 +451,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
447
451
  providedIn: 'root'
448
452
  }]
449
453
  }], ctorParameters: function () { return [{ type: i1.AnnaDateTimeFormatService }, { type: i2.AnnaSortService }]; } });
450
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS1maWx0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FubmEtY29yZS9zcmMvbGliL2FubmEtY29yZS1zaGFyZWQtbGliL3NlcnZpY2VzL2FubmEtZmlsdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxnQ0FBZ0M7QUFDaEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM1RSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFHNUIsa0NBQWtDO0FBQ2xDLE9BQU8sRUFBRSx5QkFBeUIsRUFBZSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7OztBQUt0RCxNQUFNLE9BQU8saUJBQWlCO0lBd0M1QixZQUFvQixxQkFBZ0QsRUFBVSxlQUFnQztRQUExRiwwQkFBcUIsR0FBckIscUJBQXFCLENBQTJCO1FBQVUsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBdEM5RyxlQUFVLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN2Qix1QkFBa0IsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBYy9CLHdCQUFtQixHQUFhLEVBQUUsQ0FBQztRQUluQyxzQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQztZQUMxQixRQUFRO1lBQ1IsS0FBSztZQUNMLEtBQUs7WUFDTCxZQUFZO1lBQ1osV0FBVztZQUNYLFdBQVc7WUFDWCxjQUFjO1lBQ2QsaUJBQWlCO1lBQ2pCLE1BQU07WUFDTixVQUFVO1lBQ1YsY0FBYztZQUNkLGFBQWE7WUFDYixRQUFRO1NBQ1QsQ0FBQyxDQUFDO1FBR0gsdUJBQWtCLEdBQVEs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QUE4QjtRQUNuRCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNqRCxJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBQyxPQUFPLENBQUMsQ0FBQztRQUN0RSxDQUFDLENBQUMsQ0FBQTtJQUNMLENBQUM7O0FBcmVhLDRCQUFVLEdBQUcsRUFBRyxDQUFBOzhHQXJDbkIsaUJBQWlCO2tIQUFqQixpQkFBaUIsY0FGaEIsTUFBTTsyRkFFUCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhciBpbXBvcnQgc3RhdGVtZW50c1xyXG5pbXBvcnQgeyBPcHRpb25zIH0gZnJvbSAnQGFuZ3VsYXItc2xpZGVyL25neC1zbGlkZXInO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbi8vIFRoaXJkIHBhcnR5IGltcG9ydCBzdGF0ZW1lbnRzXHJcbmltcG9ydCB7IG1pbiwgbWF4LCBtYXAsIHNvcnRCeSwgdW5pcSwgY2xvbmVEZWVwLCBpc0VxdWFsIH0gZnJvbSBcImxvZGFzaC1lc1wiO1xyXG5pbXBvcnQgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcclxuaW1wb3J0IHsgU29ydFR5cGUgfSBmcm9tICcuLi9tb2RlbHMvYW5uYS1zb3J0Lm1vZGVsJztcclxuXHJcbi8vIFVzZXIgZGVmaW5lZCBpbXBvcnQgc3RhdGVtZW50cyBcclxuaW1wb3J0IHsgQW5uYURhdGVUaW1lRm9ybWF0U2VydmljZSwgTmdiRGF0ZVR5cGUgfSBmcm9tICcuL2FubmEtZGF0ZS10aW1lLWZvcm1hdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQW5uYVNvcnRTZXJ2aWNlIH0gZnJvbSAnLi9hbm5hLXNvcnQuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBbm5hRmlsdGVyU2VydmljZSB7XHJcblxyXG4gIHRvb2x0aXBNYXAgPSBuZXcgTWFwKCk7XHJcbiAgdG9vbHRpcFNlbGVjdGVkTWFwID0gbmV3IE1hcCgpO1xyXG4gIGluaXRpYWxWYWx1ZU1hcDogTWFwPHN0cmluZywgYW55PjtcclxuICB0cmFuc2xhdGVGdW5jOiBzdHJpbmc7XHJcbiAgc2VsZWN0ZWRSYWRpbzogc3RyaW5nO1xyXG4gIHN1YlJhZGlvQnV0dG9uOiBzdHJpbmc7XHJcblxyXG4gIGNhbGVuZGFyU2V0OiBTZXQ8c3RyaW5nPjtcclxuICBzbGlkZXJTZXQ6IFNldDxzdHJpbmc+O1xyXG4gIHRpbWVTZXQ6IFNldDxzdHJpbmc+O1xyXG5cclxuICBpbmNsdWRlTXVsdGlUaW1lOiBib29sZWFuO1xyXG4gIGluY2x1ZGVaZXJvVGltZTogYm9vbGVhbjtcclxuICBpbmNsdWRlVGltZVJhbmdlOiBib29sZWFuO1xyXG5cclxuICBhcHBsaWVkRmlsdGVyc0FycmF5OiBzdHJpbmdbXSA9IFtdO1xyXG4gIGZsaWdodERhdGVSYW5nZTogeyBtaW5TZWxlY3RlZERhdGU6IGFueSwgbWF4U2VsZWN0ZWREYXRlOiBhbnkgfTtcclxuICBzbGlkZXJEYXRhOiB7IG1pbjogYW55LCBtYXg6IGFueSB9O1xyXG4gIG5neFNsaWRlck9iajogT3B0aW9ucztcclxuICBzbGlkZXJDdXJyZW5jeVNldCA9IG5ldyBTZXQoW1xyXG4gICAgJ2Jvb2tlZCcsXHJcbiAgICAnY3BwJyxcclxuICAgICdjcG0nLFxyXG4gICAgJ3JjdlByZWVtcHQnLFxyXG4gICAgJ29zUHJlZW1wdCcsXHJcbiAgICAncG9zdGVkQWR1JyxcclxuICAgICdzY2hlZHVsZWRBZHUnLFxyXG4gICAgJ2F1ZGllbmNlRGVmaWNpdCcsXHJcbiAgICAnUmF0ZScsXHJcbiAgICAndXNlckFEVXMnLFxyXG4gICAgJ2J1eWVyQ2hhbmdlcycsXHJcbiAgICAndXNlckNoYW5nZXMnLFxyXG4gICAgJ3VzZXJNRycsXHJcbiAgXSk7XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgYnVmZmVyU2l6ZSA9IDIwO1xyXG4gIGlzRmlsdGVyU29ydEFjdGl2ZTogYW55ID0gbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRlVGltZUZvcm1hdFNlcnZpY2U6IEFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UsIHByaXZhdGUgYW5uYVNvcnRTZXJ2aWNlOiBBbm5hU29ydFNlcnZpY2UpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiQW5uYUZpbHRlclNlcnZpY2Ugc2VydmljZSBjcmVhdGVkLlwiKVxyXG4gICAgY29uc3Qgc2xpZGVyQXJyID0gW1xyXG4gICAgICBcInJjdlByZWVtcHRcIixcclxuICAgICAgXCJvc1ByZWVtcHRcIixcclxuICAgICAgXCJyY3ZVbmRlckRseVwiLFxyXG4gICAgICBcInBvc3RlZEF1ZFBlcmNlbnRcIixcclxuICAgICAgXCJib29rZWRcIixcclxuICAgICAgXCJzcG90c1wiLFxyXG4gICAgICBcImdycFwiLFxyXG4gICAgICBcImNwcFwiLFxyXG4gICAgICBcImltcHNcIixcclxuICAgICAgXCJjcG1cIixcclxuICAgICAgXCJvc1VuZGVyRGx5XCIsXHJcbiAgICAgIFwidG90YWxXZWVrc1wiLFxyXG4gICAgICBcIldlZWtOdW1iZXJcIixcclxuICAgICAgXCJSYXRlXCIsXHJcbiAgICAgIFwiT3JkZXJlZFJhdGluZ3NPckltcHJlc3Npb25zXCIsXHJcbiAgICAgIFwiUG9zdGVkUmF0aW5nc09ySW1wcmVzc2lvbnNcIiwgLFxyXG4gICAgICBcInBvc3RlZEF1ZFBlcmNlbnRcIixcclxuICAgICAgXCJwb3N0ZWRBZHVcIixcclxuICAgICAgXCJzY2hlZHVsZWRBZHVcIixcclxuICAgICAgXCJhdWRpZW5jZURlZmljaXRcIixcclxuICAgICAgXCJvZmZlcmVkTUdzXCIsXHJcbiAgICAgIFwib3V0c3RhbmRpbmdQRVwiLFxyXG4gICAgICBcIm9mZmVyZWRBRFVzXCIsXHJcbiAgICAgIFwidWREZWZpY2l0VmFsdWVcIixcclxuICAgICAgXCJib29rZWRWYWx1ZVwiLFxyXG4gICAgICBcImJvb2tlZFNwb3RzXCIsXHJcbiAgICAgIFwidXNlckFEVXNcIixcclxuICAgICAgXCJidXllckNoYW5nZXNcIixcclxuICAgICAgXCJ1c2VyQ2hhbmdlc1wiLFxyXG4gICAgICBcInVzZXJNR1wiXHJcbiAgICBdO1xyXG4gICAgY29uc3QgY2FsZW5kYXJBcnIgPSBbXCJwZXJpb2RcIiwgXCJBaXJEYXRlXCIsIFwiZmxpZ2h0U3RhcnREYXRlXCIsIFwiZmxpZ2h0RW5kRGF0ZVwiLFwiZGF0ZVwiLCBcInN0YXJ0RGF0ZVwiLCBcImVuZERhdGVcIiwgXCJyZXZpc2lvblN0YXJ0RGF0ZVwiXTtcclxuICAgIGNvbnN0IHRpbWVBcnIgPSBbXCJTdGFydFRpbWVGb3JGaWx0ZXJcIiwgXCJFbmRUaW1lRm9yRmlsdGVyXCIsXHJcbiAgICAgIFwic3RhcnRfdGltZV9mb3JfZmlsdGVyXCIsIFwiZW5kX3RpbWVfZm9yX2ZpbHRlclwiLCBcInN0YXJ0RW5kVGltZU11bHRpXCIsIFwic3RhcnRFbmRUaW1lXCJdO1xyXG4gICAgdGhpcy5zbGlkZXJTZXQgPSBuZXcgU2V0KHNsaWRlckFycik7XHJcbiAgICB0aGlzLmNhbGVuZGFyU2V0ID0gbmV3IFNldChjYWxlbmRhckFycik7XHJcbiAgICB0aGlzLnRpbWVTZXQgPSBuZXcgU2V0KHRpbWVBcnIpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuTWF4QW5kTWluVmFsdWUoZGF0YTogYW55W10sIGtleTogc3RyaW5nLCBpc01pbjogYm9vbGVhbikge1xyXG4gICAgZGF0YSA9IGRhdGEuZmlsdGVyKChvYmopID0+ICFbXCJcIiwgXCItXCIsIG51bGxdLmluY2x1ZGVzKG9ialtrZXldKSk7XHJcbiAgICBjb25zdCB2YWx1ZXMgPSBkYXRhLm1hcCgoeCkgPT4geFtrZXldKTtcclxuICAgIGxldCB2YWx1ZVRvUmV0dXJuID0gaXNNaW4gPyBtaW4odmFsdWVzKSA6IG1heCh2YWx1ZXMpO1xyXG4gICAgcmV0dXJuIHZhbHVlVG9SZXR1cm47XHJcbiAgfVxyXG5cclxuICByZXR1cm5NaW5BbmRNYXhEYXRlKGRhdGE6IGFueVtdLCBrZXk6IHN0cmluZykge1xyXG4gICAgZGF0YSA9IGRhdGEuZmlsdGVyKChvYmopID0+ICFbXCJcIiwgXCItXCIsIG51bGxdLmluY2x1ZGVzKG9ialtrZXldKSk7XHJcbiAgICBsZXQgRGF0ZUFyciA9IGRhdGEubWFwKChvYmopID0+IG1vbWVudChvYmpba2V5XSkpO1xyXG4gICAgbGV0IG1pbkRhdGUgPSBtb21lbnQubWluKERhdGVBcnIpO1xyXG4gICAgbGV0IG1heERhdGUgPSBtb21lbnQubWF4KERhdGVBcnIpO1xyXG4gICAgcmV0dXJuIFttaW5EYXRlLCBtYXhEYXRlXTtcclxuICB9XHJcblxyXG4gIGlzVG9vbHRpcEFjdGl2ZShoZWFkZXI6IHN0cmluZ1tdLCBzb3J0TWFwOiBNYXA8c3RyaW5nLCBTb3J0VHlwZT4pOiBib29sZWFuIHtcclxuICAgIGxldCBzZXQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldCh0aGlzLmFwcGxpZWRGaWx0ZXJzQXJyYXkpO1xyXG4gICAgaWYoaGVhZGVyLmxlbmd0aCA9PSAxKXtcclxuICAgICAgcmV0dXJuICggKHNvcnRNYXAuc2l6ZSA+IDAgJiYgc29ydE1hcC5nZXQoaGVhZGVyWzBdKSAhPSBcIkRFRkFVTFRcIikgfHwgc2V0LmhhcyhoZWFkZXJbMF0pKTtcclxuICAgIH1cclxuICAgIC8vIHJldHVybiAoIChzb3J0TWFwLnNpemUgPiAwICYmIHNvcnRNYXAuZ2V0KGhlYWRlclswXSkgIT0gXCJERUZBVUxUXCIpIHx8IChzb3J0TWFwLnNpemUgPiAwICYmIHNvcnRNYXAuZ2V0KGhlYWRlclsxXSkgIT0gXCJERUZBVUxUXCIpIHx8IHNldC5oYXMoaGVhZGVyWzBdKSB8fCBzZXQuaGFzKGhlYWRlclsxXSkpOyBcclxuICAgIHJldHVybiAoIChzb3J0TWFwLnNpemUgPiAwICYmICBzb3J0TWFwLmhhcyhoZWFkZXJbMF0pICYmIHNvcnRNYXAuZ2V0KGhlYWRlclswXSkgIT0gXCJERUZBVUxUXCIpIHx8IChzb3J0TWFwLnNpemUgPiAwICYmICBzb3J0TWFwLmhhcyhoZWFkZXJbMV0pICYmIHNvcnRNYXAuZ2V0KGhlYWRlclsxXSkgIT0gXCJERUZBVUxUXCIpIHx8IHNldC5oYXMoaGVhZGVyWzBdKSB8fCBzZXQuaGFzKGhlYWRlclsxXSkpOyBcclxuXHJcbiAgfVxyXG5cclxuICBjbGVhckNvbHVtbkZpbHRlcigpIHtcclxuICAgIGlmKHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKXtcclxuICAgICAgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZGVsZXRlKHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgIGxldCBhcHBsaWVkRmlsdGVyU2V0OiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQodGhpcy5hcHBsaWVkRmlsdGVyc0FycmF5KTtcclxuICAgICAgYXBwbGllZEZpbHRlclNldC5kZWxldGUodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgdGhpcy5hcHBsaWVkRmlsdGVyc0FycmF5ID0gWy4uLmFwcGxpZWRGaWx0ZXJTZXRdOyAgXHJcbiAgICB9XHJcblxyXG4gICAgaWYodGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlLmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKXtcclxuICAgICAgdGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlLnNldCh0aGlzLnNlbGVjdGVkUmFkaW8sXCJERUZBVUxUXCIpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHNldE9wdGlvblZhbHVlcyhtaW5WYWx1ZTogbnVtYmVyLCBtYXhWYWx1ZTogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBmbG9vcjogbWluVmFsdWUsXHJcbiAgICAgIGNlaWw6IG1heFZhbHVlLFxyXG4gICAgICBkaXNhYmxlZDogdHJ1ZSxcclxuICAgICAgdHJhbnNsYXRlOiB0aGlzLm5vcm1hbFRyYW5zbGF0ZUZ1bmN0aW9uXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcGVyY2VudFRyYW5zbGF0ZUZ1bmN0aW9uID0gKGRhdGE6IG51bWJlcik6IHN0cmluZyA9PiB7XHJcbiAgICBcclxuICAgIGlmIChNYXRoLmFicyhkYXRhKSA+PSAxMDAwKSB7XHJcbiAgICAgIGxldCBpc05lZ1ZhbCA9IGRhdGEgPCAwO1xyXG4gICAgICBjb25zdCB2YWwgPSAoTWF0aC5hYnMoZGF0YSkgLyAxMDAwKS50b0ZpeGVkKDEpICsgXCJrJVwiO1xyXG4gICAgICByZXR1cm4gaXNOZWdWYWwgPyBcIi1cIiArIHZhbCA6IHZhbDtcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgaXNOZWdWYWwgPSBkYXRhIDwgMDtcclxuICAgICAgbGV0IGlzV2hvbGVOdW0gPSBwYXJzZUludChkYXRhLnRvU3RyaW5nKCkpID09IGRhdGE7XHJcbiAgICAgIGxldCB2YWwgPSBpc1dob2xlTnVtID8gTWF0aC5hYnMoZGF0YSkudG9TdHJpbmcoKSA6IE1hdGguYWJzKGRhdGEpLnRvRml4ZWQoMSk7IFxyXG4gICAgICByZXR1cm4gaXNOZWdWYWwgPyBcIi1cIiArIHZhbCArIFwiJVwiIDogdmFsICsgXCIlXCI7XHJcbiAgICB9XHJcblxyXG4gIH07XHJcblxyXG4gIGN1cnJlbmN5VHJhbnNsYXRlRnVuY3Rpb24gPSAoZGF0YTogbnVtYmVyKTogc3RyaW5nID0+IHtcclxuICAgIGlmIChNYXRoLmFicyhkYXRhKSA+PSAxMDAwKSB7XHJcbiAgICAgIGxldCBpc05lZ1ZhbCA9IGRhdGEgPCAwO1xyXG4gICAgICBjb25zdCB2YWwgPSBcIiRcIiArIChNYXRoLmFicyhkYXRhKSAvIDEwMDApLnRvRml4ZWQoMSkgKyBcImtcIjtcclxuICAgICAgcmV0dXJuIGlzTmVnVmFsID8gXCItXCIgKyB2YWwgOiB2YWw7XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGlzTmVnVmFsID0gZGF0YSA8IDA7XHJcbiAgICAgIGxldCBpc1dob2xlTnVtID0gcGFyc2VJbnQoZGF0YS50b1N0cmluZygpKSA9PSBkYXRhO1xyXG4gICAgICBsZXQgdmFsID0gaXNXaG9sZU51bSA/IE1hdGguYWJzKGRhdGEpLnRvU3RyaW5nKCkgOiBNYXRoLmFicyhkYXRhKS50b0ZpeGVkKDEpOyBcclxuICAgICAgcmV0dXJuIGlzTmVnVmFsID8gXCItJFwiICsgdmFsIDogXCIkXCIgKyB2YWw7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgbm9ybWFsVHJhbnNsYXRlRnVuY3Rpb24gPSAoZGF0YTogbnVtYmVyKTogc3RyaW5nID0+IHtcclxuICAgIGlmIChkYXRhID49IDEwMDApIHtcclxuICAgICAgY29uc3QgdmFsID0gKGRhdGEgLyAxMDAwKS50b0ZpeGVkKDEpICsgXCJrXCI7XHJcbiAgICAgIHJldHVybiB2YWw7XHJcbiAgICB9IGVsc2UgaWYgKGRhdGEgIT0gTWF0aC5mbG9vcihkYXRhKSkge1xyXG4gICAgICByZXR1cm4gZGF0YS50b0ZpeGVkKDEpLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xyXG4gIH07XHJcblxyXG4gIGZpbmRVbmlxdWVEYXRlc1dpdGhEYXRhKGRhdGE6IGFueVtdKSB7XHJcbiAgICBsZXQgdW5pcXVlRGF0ZXMgPSB1bmlxKGRhdGEubWFwKCh1KSA9PiB1W1wiZGF0ZVwiXSkpO1xyXG4gICAgbGV0IHVuaXF1ZURhdGVzSW5OZ2JEYXRlRm9ybWF0OiBOZ2JEYXRlVHlwZVtdID0gW107XHJcbiAgICB1bmlxdWVEYXRlcy5mb3JFYWNoKChkYXRlOiBhbnkpID0+IHtcclxuICAgICAgdW5pcXVlRGF0ZXNJbk5nYkRhdGVGb3JtYXQucHVzaChcclxuICAgICAgICB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0VG9OZ2JEYXRlU3RhbmRhcmRGb3JtYXQobW9tZW50KGRhdGUsIFwiTU0vREQvWVlcIikuZm9ybWF0KFwiTU0vREQvWVlZWVwiKSlcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHVuaXF1ZURhdGVzSW5OZ2JEYXRlRm9ybWF0O1xyXG4gIH1cclxuXHJcbiAgcmVPcmRlckFwcGxpZWRGaWx0ZXJzQXJyYXkoaXNIaWVyYXJjaGlhbFVzZXJGaWx0ZXJlZDogYm9vbGVhbiwgZGF0ZT86IGFueSkge1xyXG4gICAgbGV0IGlzRmlsdGVyZWQgPSB0cnVlO1xyXG4gICAgaXNGaWx0ZXJlZCA9IHRoaXMuY2hlY2tJZkRhdGFJc0ZpbHRlcmVkKGlzRmlsdGVyZWQsIGlzSGllcmFyY2hpYWxVc2VyRmlsdGVyZWQsIGRhdGUpO1xyXG4gICAgdGhpcy5yZW1vdmVPckNoYW5nZUxhdGVzdEZpbHRlckluZGV4KGlzRmlsdGVyZWQpO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tJZkRhdGFJc0ZpbHRlcmVkKGlzRmlsdGVyZWQ6IGJvb2xlYW4sIGlzSGllcmFyY2hpYWxVc2VyRmlsdGVyZWQ6IGJvb2xlYW4sIGRhdGU/OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUmFkaW8gPT0gXCJ1c2VyXCIgJiYgIXRoaXMudG9vbHRpcE1hcC5oYXMoXCJ1c2VyXCIpKSB7XHJcbiAgICAgIGlzRmlsdGVyZWQgPSBjbG9uZURlZXAoaXNIaWVyYXJjaGlhbFVzZXJGaWx0ZXJlZCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRSYWRpbyA9PSBcIlN0YXJ0VGltZUZvckZpbHRlclwiIHx8IHRoaXMuc2VsZWN0ZWRSYWRpbyA9PSBcIkVuZFRpbWVGb3JGaWx0ZXJcIlxyXG4gICAgICB8fCB0aGlzLnNlbGVjdGVkUmFkaW8gPT0gXCJzdGFydF90aW1lX2Zvcl9maWx0ZXJcIiB8fCB0aGlzLnNlbGVjdGVkUmFkaW8gPT0gXCJlbmRfdGltZV9mb3JfZmlsdGVyXCIgfHwgdGhpcy5zZWxlY3RlZFJhZGlvID09IFwic3RhcnRFbmRUaW1lTXVsdGlcIikge1xyXG4gICAgICBpc0ZpbHRlcmVkID0gIWlzRXF1YWwoXHJcbiAgICAgICAgdGhpcy5pbml0aWFsVmFsdWVNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyksXHJcbiAgICAgICAgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbylcclxuICAgICAgKSB8fCAhdGhpcy5pbmNsdWRlWmVyb1RpbWUgfHwgIXRoaXMuaW5jbHVkZU11bHRpVGltZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRSYWRpbyA9PSBcInN0YXJ0RW5kVGltZVwiIHx8IHRoaXMuc2VsZWN0ZWRSYWRpbyA9PSBcIlRpbWVCYW5kXCIpIHtcclxuICAgICAgaXNGaWx0ZXJlZCA9ICFpc0VxdWFsKHRoaXMuaW5pdGlhbFZhbHVlTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pLCB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKSkgfHwgIXRoaXMuaW5jbHVkZVplcm9UaW1lIHx8ICF0aGlzLmluY2x1ZGVNdWx0aVRpbWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLnNsaWRlclNldC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICBpc0ZpbHRlcmVkID0gIWlzRXF1YWwodGhpcy5pbml0aWFsVmFsdWVNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyksIHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pKSAmJiAhaXNFcXVhbCh0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKSwgdGhpcy5zbGlkZXJEYXRhKTtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRSYWRpbyA9PSBcInBvc3RlZEFkdVwiICYmIHRoaXMuc3ViUmFkaW9CdXR0b24gPT0gXCJub3RSZXF1aXJlZFwiKSB7XHJcbiAgICAgICAgaXNGaWx0ZXJlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFpc0ZpbHRlcmVkICYmIHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgICAgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZGVsZXRlKHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PSBcInN0YXJ0RGF0ZVwiIHx8XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PSBcImVuZERhdGVcIiB8fFxyXG4gICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT0gXCJwZXJpb2RcIiB8fFxyXG4gICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT0gXCJBaXJEYXRlXCIgfHxcclxuICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcImZsaWdodFN0YXJ0RGF0ZVwiIHx8XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJmbGlnaHRFbmREYXRlXCIgfHxcclxuICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09IFwiZGF0ZVwiIHx8XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PSBcInJldmlzaW9uU3RhcnREYXRlXCJcclxuICAgICkge1xyXG4gICAgICBpc0ZpbHRlcmVkID1cclxuICAgICAgICAhaXNFcXVhbCh0aGlzLmluaXRpYWxWYWx1ZU1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKSwgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbykpICYmXHJcbiAgICAgICAgIWlzRXF1YWwodGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyksIHRoaXMuZmxpZ2h0RGF0ZVJhbmdlKTtcclxuICAgICAgaWYgKCFpc0ZpbHRlcmVkICYmIHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgICAgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZGVsZXRlKHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCB0b3RhbE9wdGlvbnNDb3VudCA9IHRoaXMudG9vbHRpcE1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKS5maWx0ZXIoKHg6IGFueSkgPT4gIXguaXNIaWRkZW4pLmxlbmd0aDtcclxuICAgICAgbGV0IHNlbGVjdGVkT3B0aW9uc0NvdW50ID0gdGhpcy50b29sdGlwTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pLmZpbHRlcigoeDogYW55KSA9PiAheC5pc0hpZGRlbiAmJiB4LmlzU2VsZWN0ZWQpLmxlbmd0aDtcclxuICAgICAgaXNGaWx0ZXJlZCA9IHNlbGVjdGVkT3B0aW9uc0NvdW50ID4gMCAmJiBzZWxlY3RlZE9wdGlvbnNDb3VudCAhPSB0b3RhbE9wdGlvbnNDb3VudCA/IHRydWUgOiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiBpc0ZpbHRlcmVkO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlT3JDaGFuZ2VMYXRlc3RGaWx0ZXJJbmRleChpc0ZpbHRlcmVkOiBib29sZWFuKSB7XHJcbiAgICBsZXQgc2V0ID0gbmV3IFNldCh0aGlzLmFwcGxpZWRGaWx0ZXJzQXJyYXkpO1xyXG5cclxuICAgIGlmIChpc0ZpbHRlcmVkICYmICFzZXQuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykpIHtcclxuICAgICAgc2V0LmFkZCh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgfSBlbHNlIGlmIChpc0ZpbHRlcmVkICYmIHNldC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICBzZXQuZGVsZXRlKHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgIHNldC5hZGQodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNldC5kZWxldGUodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgIH1cclxuICAgIHRoaXMuYXBwbGllZEZpbHRlcnNBcnJheSA9IFsuLi5zZXRdO1xyXG4gIH1cclxuXHJcbiAgZmlsdGVyRGF0YShvcmlnaW5hbERhdGE6IGFueVtdLCBrZXlUb1NraXA6IHN0cmluZykge1xyXG4gICAgbGV0IGZpbHRlcmVkRGF0YSA9IFsuLi5vcmlnaW5hbERhdGFdO1xyXG5cclxuICAgIHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcclxuICAgICAgaWYgKGtleSAhPSBrZXlUb1NraXApIHtcclxuICAgICAgICBpZiAodGhpcy5zbGlkZXJTZXQuaGFzKGtleSkpIHtcclxuICAgICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gb2JqW2tleV0gPj0gdmFsdWUubWluICYmIG9ialtrZXldIDw9IHZhbHVlLm1heCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJzdGFydERhdGVcIiB8fCBrZXkgPT09IFwiZW5kRGF0ZVwiIHx8IGtleSA9PT0gXCJBaXJEYXRlXCIgfHwga2V5ID09PSBcImZsaWdodFN0YXJ0RGF0ZVwiIHx8IGtleSA9PT0gXCJmbGlnaHRFbmREYXRlXCIgfHwga2V5ID09IFwiZGF0ZVwiIHx8IGtleSA9PSBcInJldmlzaW9uU3RhcnREYXRlXCIpIHtcclxuICAgICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gdGhpcy5pc09iamVjdEluVGhlUmFuZ2Uob2JqLCB2YWx1ZSwga2V5KSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09IFwicGVyaW9kXCIgKSB7XHJcbiAgICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKChvYmopID0+IHRoaXMuZ2V0RGF0YUluVGhlRGF0ZVJhbmdlKG9iaiwgdmFsdWUsIGtleSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChrZXkgPT09IFwiU3RhcnRUaW1lRm9yRmlsdGVyXCIgfHwga2V5ID09PSBcIkVuZFRpbWVGb3JGaWx0ZXJcIlxyXG4gICAgICAgICAgfHwga2V5ID09PSBcInN0YXJ0X3RpbWVfZm9yX2ZpbHRlclwiIHx8IGtleSA9PT0gXCJlbmRfdGltZV9mb3JfZmlsdGVyXCIpIHtcclxuICAgICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gdGhpcy5yZXR1cm5EYXRhRm9yRnJvbUFuZFRvVGltZVJhbmdlKG9iaiwgdmFsdWUsIGtleSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChrZXkgPT09IFwic3RhcnRFbmRUaW1lTXVsdGlcIiB8fCBrZXkgPT0gXCJzdGFydEVuZFRpbWVcIiB8fCBrZXkgPT09IFwiVGltZUJhbmRcIikge1xyXG4gICAgICAgICAgZmlsdGVyZWREYXRhID0gZmlsdGVyZWREYXRhLmZpbHRlcigob2JqKSA9PiB0aGlzLnJldHVybkRhdGFGb3JTdGFydEFuZEVuZFRpbWVSYW5nZShvYmosIHZhbHVlLCBrZXkpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgZmlsdGVyZWREYXRhID0gZmlsdGVyZWREYXRhLmZpbHRlcigodSkgPT4gdmFsdWUuaW5jbHVkZXModVtrZXldKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBmaWx0ZXJlZERhdGE7XHJcbiAgfVxyXG5cclxuICByZXR1cm5PcmRlcnNJblRoZVJhbmdlKG9yZGVyOiBhbnksIHJhbmdlOiBhbnksIGtleTogYW55KSB7XHJcbiAgICBsZXQgaXNEYXRlQmV0d2VlblRoZVNlbGVjdGVkUmFuZ2UgPSBtb21lbnQob3JkZXJba2V5XSkuaXNCZXR3ZWVuKHJhbmdlLm1pblNlbGVjdGVkRGF0ZSwgcmFuZ2UubWF4U2VsZWN0ZWREYXRlKTtcclxuICAgIGxldCBpc0RhdGVTYW1lQXNUaGVNaW5TZWxlY3RlZERhdGUgPSBtb21lbnQob3JkZXJba2V5XSkuaXNTYW1lKHJhbmdlLm1pblNlbGVjdGVkRGF0ZSk7XHJcbiAgICBsZXQgaXNEYXRlU2FtZUFzVGhlTWF4U2VsZWN0ZWREYXRlID0gbW9tZW50KG9yZGVyW2tleV0pLmlzU2FtZShyYW5nZS5tYXhTZWxlY3RlZERhdGUpO1xyXG4gICAgcmV0dXJuIGlzRGF0ZUJldHdlZW5UaGVTZWxlY3RlZFJhbmdlIHx8IGlzRGF0ZVNhbWVBc1RoZU1pblNlbGVjdGVkRGF0ZSB8fCBpc0RhdGVTYW1lQXNUaGVNYXhTZWxlY3RlZERhdGU7XHJcbiAgfVxyXG5cclxuICByZXR1cm5EYXRhRm9yVGltZVJhbmdlKG9iajogYW55LCBzZWxlY3RlZERhdGE6IGFueSkge1xyXG4gICAgbGV0IGZvcm1hdCA9IFwiSEg6bW06c3NcIjtcclxuICAgIGxldCBzZWxlY3RlZFN0YXJ0RGF0ZSA9IG1vbWVudChzZWxlY3RlZERhdGEuc3RhcnRUaW1lLCBmb3JtYXQpO1xyXG4gICAgbGV0IHNlbGVjdGVkRW5kRGF0ZSA9IG1vbWVudChzZWxlY3RlZERhdGEuZW5kVGltZSwgZm9ybWF0KTtcclxuICAgIGxldCBzdGFydFRpbWUgPSBtb21lbnQob2JqLnN0YXJ0VGltZSwgZm9ybWF0KTtcclxuICAgIGxldCBlbmRUaW1lID0gbW9tZW50KG9iai5lbmRUaW1lLCBmb3JtYXQpO1xyXG5cclxuICAgIGxldCBpc1N0YXJ0VGltZVNhbWVBc1NlbGVjdGVkU3RhcnRUaW1lID0gc3RhcnRUaW1lLmlzU2FtZShzZWxlY3RlZFN0YXJ0RGF0ZSk7XHJcbiAgICBsZXQgaXNTdGFydFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWUgPSBzdGFydFRpbWUuaXNCZXR3ZWVuKHNlbGVjdGVkU3RhcnREYXRlLCBzZWxlY3RlZEVuZERhdGUpO1xyXG4gICAgbGV0IGlzRW5kVGltZVNhbWVBc1NlbGVjdGVkRW5kVGltZSA9IGVuZFRpbWUuaXNTYW1lKHNlbGVjdGVkRW5kRGF0ZSk7XHJcbiAgICBsZXQgaXNFbmRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lID0gZW5kVGltZS5pc0JldHdlZW4oc2VsZWN0ZWRTdGFydERhdGUsIHNlbGVjdGVkRW5kRGF0ZSk7XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgKGlzU3RhcnRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lICYmIGlzRW5kVGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSkgfHxcclxuICAgICAgKGlzU3RhcnRUaW1lU2FtZUFzU2VsZWN0ZWRTdGFydFRpbWUgJiYgaXNFbmRUaW1lU2FtZUFzU2VsZWN0ZWRFbmRUaW1lKSB8fFxyXG4gICAgICAoaXNTdGFydFRpbWVTYW1lQXNTZWxlY3RlZFN0YXJ0VGltZSAmJiBpc0VuZFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWUpIHx8XHJcbiAgICAgIChpc1N0YXJ0VGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSAmJiBpc0VuZFRpbWVTYW1lQXNTZWxlY3RlZEVuZFRpbWUpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuRGF0YUZvckZyb21BbmRUb1RpbWVSYW5nZShvYmo6IGFueSwgc2VsZWN0ZWREYXRhOiBhbnksIGtleTogYW55KSB7XHJcbiAgICBsZXQgZm9ybWF0ID0gXCJISDptbTpzc1wiO1xyXG4gICAgbGV0IHNlbGVjdGVkRnJvbVRpbWUgPSBtb21lbnQoc2VsZWN0ZWREYXRhLmZyb21UaW1lLCBmb3JtYXQpO1xyXG4gICAgbGV0IHNlbGVjdGVkVG9UaW1lID0gbW9tZW50KHNlbGVjdGVkRGF0YS50b1RpbWUsIGZvcm1hdCk7XHJcbiAgICBsZXQgb2JqVGltZSA9IG9ialtrZXldO1xyXG4gICAgXHJcbiAgICBpZiAoW1wiXCIsIFwiLVwiLCBudWxsXS5pbmNsdWRlcyhvYmpUaW1lKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoc2VsZWN0ZWREYXRhLmluY2x1ZGVNdWx0aSAmJiBvYmpba2V5XSA9PSBcIjxtdWx0aT5cIikge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmICghc2VsZWN0ZWREYXRhLmluY2x1ZGVNdWx0aSAmJiBvYmpba2V5XSA9PSBcIjxtdWx0aT5cIikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoc2VsZWN0ZWREYXRhLmluY2x1ZGVaZXJvICYmIG9ialtrZXldID09IFwiMFwiKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKCFzZWxlY3RlZERhdGEuaW5jbHVkZVplcm8gJiYgb2JqW2tleV0gPT0gXCIwXCIpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKCFzZWxlY3RlZERhdGEuaW5jbHVkZVRpbWVSYW5nZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGxldCBtb21lbnRUaW1lID0gbW9tZW50KG9ialRpbWUsZm9ybWF0KTtcclxuICAgIFxyXG4gICAgbGV0IGlzT2JqVGltZVNhbWVBc1NlbGVjdGVkRnJvbVRpbWUgPSBtb21lbnRUaW1lLmlzU2FtZShzZWxlY3RlZEZyb21UaW1lKTtcclxuICAgIGxldCBpc09ialRpbWVTYW1lQXNTZWxlY3RlZFRvVGltZSA9IG1vbWVudFRpbWUuaXNTYW1lKHNlbGVjdGVkVG9UaW1lKTtcclxuICAgIGxldCBpc09ialRpbWVCZXR3ZWVuU2VsZWN0ZWRGcm9tVGltZUFuZFRvVGltZSA9IG1vbWVudFRpbWUuaXNCZXR3ZWVuKHNlbGVjdGVkRnJvbVRpbWUsIHNlbGVjdGVkVG9UaW1lKTtcclxuXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBpc09ialRpbWVTYW1lQXNTZWxlY3RlZEZyb21UaW1lIHx8XHJcbiAgICAgIGlzT2JqVGltZVNhbWVBc1NlbGVjdGVkVG9UaW1lIHx8XHJcbiAgICAgIGlzT2JqVGltZUJldHdlZW5TZWxlY3RlZEZyb21UaW1lQW5kVG9UaW1lXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuRGF0YUZvclN0YXJ0QW5kRW5kVGltZVJhbmdlKG9iajogYW55LCBzZWxlY3RlZERhdGE6YW55LCBrZXk6IHN0cmluZykge1xyXG4gICAgbGV0IGZvcm1hdCA9IFwiSEg6bW06c3NcIjtcclxuICAgIGxldCBzZWxlY3RlZEZyb21UaW1lID0gbW9tZW50KHNlbGVjdGVkRGF0YS5mcm9tVGltZSwgZm9ybWF0KTtcclxuICAgIGxldCBzZWxlY3RlZFRvVGltZSA9IG1vbWVudChzZWxlY3RlZERhdGEudG9UaW1lLCBmb3JtYXQpO1xyXG4gICAgXHJcbiAgICBpZihzZWxlY3RlZERhdGEuaW5jbHVkZU11bHRpICYmIG9ialtrZXldWzBdID09IFwiPG11bHRpPlwiKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmKCFzZWxlY3RlZERhdGEuaW5jbHVkZU11bHRpICYmIG9ialtrZXldWzBdID09IFwiPG11bHRpPlwiKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKHNlbGVjdGVkRGF0YS5pbmNsdWRlWmVybyAmJiBvYmpba2V5XVswXSA9PSBcIjBcIikge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKCFzZWxlY3RlZERhdGEuaW5jbHVkZVplcm8gJiYgb2JqW2tleV1bMF0gPT0gXCIwXCIpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYoIXNlbGVjdGVkRGF0YS5pbmNsdWRlVGltZVJhbmdlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBsZXQgc3RhcnRUaW1lID0gbW9tZW50KG9ialtrZXldWzFdLCBmb3JtYXQpO1xyXG4gICAgbGV0IGVuZFRpbWUgPSBtb21lbnQob2JqW2tleV1bMl0sIGZvcm1hdCk7XHJcblxyXG4gICAgbGV0IGlzU3RhcnRUaW1lU2FtZUFzU2VsZWN0ZWRTdGFydFRpbWUgPSBzdGFydFRpbWUuaXNTYW1lKHNlbGVjdGVkRnJvbVRpbWUpO1xyXG4gICAgbGV0IGlzU3RhcnRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lID0gc3RhcnRUaW1lLmlzQmV0d2VlbihzZWxlY3RlZEZyb21UaW1lLCBzZWxlY3RlZFRvVGltZSk7XHJcbiAgICBsZXQgaXNFbmRUaW1lU2FtZUFzU2VsZWN0ZWRFbmRUaW1lID0gZW5kVGltZS5pc1NhbWUoc2VsZWN0ZWRUb1RpbWUpO1xyXG4gICAgbGV0IGlzRW5kVGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSA9IGVuZFRpbWUuaXNCZXR3ZWVuKHNlbGVjdGVkRnJvbVRpbWUsIHNlbGVjdGVkVG9UaW1lKTtcclxuXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIChpc1N0YXJ0VGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSAmJiBpc0VuZFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWUpIHx8XHJcbiAgICAgICAgKGlzU3RhcnRUaW1lU2FtZUFzU2VsZWN0ZWRTdGFydFRpbWUgJiYgaXNFbmRUaW1lU2FtZUFzU2VsZWN0ZWRFbmRUaW1lKSB8fFxyXG4gICAgICAgIChpc1N0YXJ0VGltZVNhbWVBc1NlbGVjdGVkU3RhcnRUaW1lICYmIGlzRW5kVGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSkgfHxcclxuICAgICAgICAoaXNTdGFydFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWUgJiYgaXNFbmRUaW1lU2FtZUFzU2VsZWN0ZWRFbmRUaW1lKVxyXG4gICAgKTtcclxuXHJcbn1cclxuXHJcbiAgZ2V0RGF0YUluVGhlRGF0ZVJhbmdlKG9iajogYW55LCB2YWx1ZTogYW55LCBrZXk6IGFueSkge1xyXG4gICAgbGV0IHBhcnNpbmdGb3JtYXQ6IHN0cmluZztcclxuICAgIGlmIChrZXkgPT09IFwicGVyaW9kXCIpIHtcclxuICAgICAgcGFyc2luZ0Zvcm1hdCA9IFwiWVlZWS1NTS1ERFwiO1xyXG4gICAgICBcclxuICAgICAgbGV0IG1vbWVudFN0YXJ0RGF0ZSA9IG1vbWVudChvYmouc3RhcnREYXRlKTtcclxuICAgICAgbGV0IG1vbWVudEVuZERhdGUgPSBtb21lbnQob2JqLmVuZERhdGUpO1xyXG4gICAgICBcclxuICAgICAgbGV0IHN0YXJ0RGF0ZUlzQmV0d2VlblNlbERhdGUgPSBtb21lbnRTdGFydERhdGUuaXNCZXR3ZWVuKFxyXG4gICAgICAgIHZhbHVlLmZyb21EYXRlLFxyXG4gICAgICAgIHZhbHVlLnRvRGF0ZVxyXG4gICAgICApO1xyXG4gICAgICBsZXQgZW5kRGF0ZUlzQmV0d2VlblNlbERhdGUgPSBtb21lbnRFbmREYXRlLmlzQmV0d2VlbihcclxuICAgICAgICB2YWx1ZS5mcm9tRGF0ZSxcclxuICAgICAgICB2YWx1ZS50b0RhdGVcclxuICAgICAgKTtcclxuICAgICAgXHJcbiAgICAgIFxyXG4gICAgICBsZXQgc3RhcnREYXRlSXNTYW1lQXNTZWxTdGFydERhdGUgPSB2YWx1ZS5mcm9tRGF0ZS5pc1NhbWUobW9tZW50U3RhcnREYXRlKTtcclxuICAgICAgbGV0IGVuZERhdGVJc1NhbWVBc1NlbEVuZERhdGUgPSB2YWx1ZS50b0RhdGUuaXNTYW1lKG1vbWVudEVuZERhdGUpO1xyXG5cclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICAoc3RhcnREYXRlSXNCZXR3ZWVuU2VsRGF0ZSB8fCBzdGFydERhdGVJc1NhbWVBc1NlbFN0YXJ0RGF0ZSkgJiZcclxuICAgICAgICAoZW5kRGF0ZUlzQmV0d2VlblNlbERhdGUgfHwgZW5kRGF0ZUlzU2FtZUFzU2VsRW5kRGF0ZSlcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcIkFpckRhdGVcIiB8fCBrZXkgPT09IFwiZmxpZ2h0U3RhcnREYXRlXCIgfHwga2V5ID09PSBcImZsaWdodEVuZERhdGVcIikge1xyXG4gICAgICBwYXJzaW5nRm9ybWF0ID0gXCJNTS9ERC9ZWVlZXCI7XHJcbiAgICAgIGxldCBkYXRlSXNCZXR3ZWVuU2VsRGF0ZSA9IG1vbWVudChvYmpba2V5XSwgcGFyc2luZ0Zvcm1hdCkuaXNCZXR3ZWVuKHZhbHVlLm1pblNlbGVjdGVkRGF0ZSwgdmFsdWUubWF4U2VsZWN0ZWREYXRlKTtcclxuXHJcbiAgICAgIGxldCBkYXRlSXNTYW1lQXNTZWxTdGFydERhdGUgPSBtb21lbnQob2JqW2tleV0sIHBhcnNpbmdGb3JtYXQpLmlzU2FtZSh2YWx1ZS5taW5TZWxlY3RlZERhdGUpO1xyXG4gICAgICBsZXQgZGF0ZUlzU2FtZUFzU2VsRW5kRGF0ZSA9IG1vbWVudChvYmpba2V5XSwgcGFyc2luZ0Zvcm1hdCkuaXNTYW1lKHZhbHVlLm1heFNlbGVjdGVkRGF0ZSk7XHJcblxyXG4gICAgICByZXR1cm4gZGF0ZUlzQmV0d2VlblNlbERhdGUgfHwgZGF0ZUlzU2FtZUFzU2VsU3RhcnREYXRlIHx8IGRhdGVJc1NhbWVBc1NlbEVuZERhdGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgcHVibGljIGluaXRpYWxpemVUaW1lRmlsdGVyRGF0YShjbG9uZWREYXRhOiBhbnlbXSwga2V5ID0gXCJzdGFydEVuZFRpbWVcIikge1xyXG4gICAgbGV0IHN0YXJ0VGltZUFyciA9IG1hcChjbG9uZWREYXRhLCBcInN0YXJ0VGltZVwiKTtcclxuICAgIGxldCBlbmRUaW1lQXJyID0gbWFwKGNsb25lZERhdGEsIFwiZW5kVGltZVwiKTtcclxuICBcclxuICAgIHN0YXJ0VGltZUFyci5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5zb3J0QnlUaW1lQXNjZW5kaW5nKGEsIGIpO1xyXG4gICAgfSk7XHJcbiAgXHJcbiAgICBlbmRUaW1lQXJyLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLnNvcnRCeVRpbWVEZXNjZW5kaW5nKGEsIGIpO1xyXG4gICAgfSk7XHJcbiAgXHJcbiAgICBsZXQgaW5pdGlhbFN0YXJ0RW5kVGltZSA9IHtcclxuICAgICAgICBzdGFydFRpbWU6IHN0YXJ0VGltZUFyclswXSxcclxuICAgICAgICBlbmRUaW1lOiBlbmRUaW1lQXJyWzBdLFxyXG4gICAgfTtcclxuICAgIHRoaXMuaW5pdGlhbFZhbHVlTWFwLnNldChrZXksIGluaXRpYWxTdGFydEVuZFRpbWUpO1xyXG4gIH0gXHJcblxyXG4gIHJldHVybkNvbHVtbkZpbHRlclN0YXR1cyhkYXRhOiBhbnlbXSwgaGVhZGVyTmFtZTogc3RyaW5nIHwgbnVtYmVyKSB7XHJcblxyXG4gICAgaWYoaGVhZGVyTmFtZSA9PSBcInN0YXJ0RW5kVGltZVwiKXtcclxuICAgICAgbGV0IHRpbWUgPSBkYXRhLm1hcCh1ID0+IHVbaGVhZGVyTmFtZV1bMF0pO1xyXG4gICAgICBsZXQgdW5pcVRpbWUgPSB1bmlxKHRpbWUpO1xyXG4gICAgICByZXR1cm4gdW5pcVRpbWUubGVuZ3RoID09IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHVuaXEoZGF0YS5tYXAoKHUpID0+IHVbaGVhZGVyTmFtZV0pKS5sZW5ndGggPiAxID8gZmFsc2UgOiB0cnVlO1xyXG4gIH1cclxuICBcclxuICBnZXRGaWx0ZXJPcHRpb25zRGF0YShkYXRhOiBhbnlbXSwgY2xvbmVkRGF0YTogYW55W10pe1xyXG4gICAgbGV0IGFwcGxpZWRGaWx0ZXJTZXQgPSBuZXcgU2V0KHRoaXMuYXBwbGllZEZpbHRlcnNBcnJheSk7XHJcbiAgICBpZihhcHBsaWVkRmlsdGVyU2V0Lmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKXtcclxuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyRGF0YShjbG9uZWREYXRhLCB0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgfVxyXG4gICAgZWxzZXtcclxuICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZU9yZGVyQXBwbGllZEZpbHRlcnNTdGF0ZShjbG9uZWREYXRhOiBhbnlbXSwgdmFsdWU6IGFueSl7XHJcbiAgICBsZXQgaXNGaWx0ZXJlZCA9IHRydWU7XHJcbiAgICBpc0ZpbHRlcmVkID0gdGhpcy5jaGVja0lmRmlsdGVySXNBcHBsaWVkKGNsb25lZERhdGEsdmFsdWUpO1xyXG4gICAgdGhpcy5yZW1vdmVPckNoYW5nZUxhdGVzdEZpbHRlckluZGV4KGlzRmlsdGVyZWQpO1xyXG4gICAgcmV0dXJuIGlzRmlsdGVyZWQ7XHJcbiAgfVxyXG5cclxuICBjaGVja0lmRmlsdGVySXNBcHBsaWVkKGNsb25lZERhdGE6IGFueVtdLHZhbHVlOiBhbnkpe1xyXG4gICAgbGV0IGluaXRpYWxWYWx1ZU9mQ29sdW1uID0gc29ydEJ5KGNsb25lZERhdGEubWFwKGl0ZW0gPT4gaXRlbVt0aGlzLnNlbGVjdGVkUmFkaW9dKSk7XHJcbiAgICBsZXQgY3VycmVudFZhbHVlT2ZDb2x1bW4gPSBzb3J0QnkodGhpcy5hcHBseUZpbHRlcihjbG9uZWREYXRhLHZhbHVlKS5tYXAoaXRlbSA9PiBpdGVtW3RoaXMuc2VsZWN0ZWRSYWRpb10pKTtcclxuICAgIHJldHVybiAhaXNFcXVhbChpbml0aWFsVmFsdWVPZkNvbHVtbiwgY3VycmVudFZhbHVlT2ZDb2x1bW4pO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlGaWx0ZXIoZGF0YTogYW55W10sdmFsdWU6IGFueSl7XHJcbiAgICBsZXQgZmlsdGVyZWREYXRhID0gZGF0YTtcclxuICAgIGxldCBrZXkgPSB0aGlzLnNlbGVjdGVkUmFkaW87XHJcbiAgICAgIGlmICh0aGlzLnNsaWRlclNldC5oYXMoa2V5KSkge1xyXG4gICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gb2JqW2tleV0gPj0gdmFsdWUubWluICYmIG9ialtrZXldIDw9IHZhbHVlLm1heCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcInN0YXJ0RGF0ZVwiIHx8IGtleSA9PT0gXCJlbmREYXRlXCIgfHwga2V5ID09PSBcIkFpckRhdGVcIiB8fCBrZXkgPT09IFwiZmxpZ2h0U3RhcnREYXRlXCIgfHwga2V5ID09PSBcImZsaWdodEVuZERhdGVcIiB8fCBrZXkgPT0gXCJkYXRlXCIgfHwga2V5ID09IFwicmV2aXNpb25TdGFydERhdGVcIikge1xyXG4gICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gdGhpcy5pc09iamVjdEluVGhlUmFuZ2Uob2JqLCB2YWx1ZSwga2V5KSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcInBlcmlvZFwiICkge1xyXG4gICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gdGhpcy5nZXREYXRhSW5UaGVEYXRlUmFuZ2Uob2JqLCB2YWx1ZSwga2V5KSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIlN0YXJ0VGltZUZvckZpbHRlclwiIHx8IGtleSA9PT0gXCJFbmRUaW1lRm9yRmlsdGVyXCJcclxuICAgICAgICB8fCBrZXkgPT09IFwic3RhcnRfdGltZV9mb3JfZmlsdGVyXCIgfHwga2V5ID09PSBcImVuZF90aW1lX2Zvcl9maWx0ZXJcIikge1xyXG4gICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gdGhpcy5yZXR1cm5EYXRhRm9yRnJvbUFuZFRvVGltZVJhbmdlKG9iaiwgdmFsdWUsIGtleSkpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJzdGFydEVuZFRpbWVNdWx0aVwiIHx8IGtleSA9PSBcInN0YXJ0RW5kVGltZVwiIHx8IGtleSA9PT0gXCJUaW1lQmFuZFwiKSB7XHJcbiAgICAgICAgZmlsdGVyZWREYXRhID0gZmlsdGVyZWREYXRhLmZpbHRlcigob2JqKSA9PiB0aGlzLnJldHVybkRhdGFGb3JTdGFydEFuZEVuZFRpbWVSYW5nZShvYmosIHZhbHVlLCBrZXkpKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgZmlsdGVyZWREYXRhID0gZmlsdGVyZWREYXRhLmZpbHRlcigodSkgPT4gdmFsdWUuaW5jbHVkZXModVtrZXldKSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZpbHRlcmVkRGF0YTsgIFxyXG4gIH1cclxuXHJcbiAgaXNPYmplY3RJblRoZVJhbmdlKG9iajogYW55LCB2YWx1ZToge2Zyb21EYXRlOiBtb21lbnQuTW9tZW50LCB0b0RhdGU6IG1vbWVudC5Nb21lbnR9LGtleTpzdHJpbmcpe1xyXG4gICAgbGV0IG9ialZhbCA9IG9ialtrZXldO1xyXG4gICAgbGV0IG1vbWVudERhdGUgPSBtb21lbnQob2JqVmFsKTtcclxuICAgIGxldCBpc0RhdGVTYW1lQXNTdGFydE9mVGhlUmFuZ2UgPSB2YWx1ZS5mcm9tRGF0ZS5pc1NhbWUob2JqVmFsKTtcclxuICAgIGxldCBpc0RhdGVTYW1lQXNFbmRPZlRoZVJhbmdlID0gdmFsdWUudG9EYXRlLmlzU2FtZShvYmpWYWwpO1xyXG4gICAgbGV0IGlzRGF0ZUJldHdlZW5UaGVTdGFydEFuZEVuZE9mUmFuZ2UgPSBtb21lbnREYXRlLmlzQmV0d2Vlbih2YWx1ZS5mcm9tRGF0ZSx2YWx1ZS50b0RhdGUpO1xyXG4gICAgcmV0dXJuIGlzRGF0ZVNhbWVBc1N0YXJ0T2ZUaGVSYW5nZSB8fCBpc0RhdGVTYW1lQXNFbmRPZlRoZVJhbmdlIHx8IGlzRGF0ZUJldHdlZW5UaGVTdGFydEFuZEVuZE9mUmFuZ2U7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVTdGF0ZU9mVGhlQ3VycmVudEZpbHRlclRhYihzb3J0TWFwOiBNYXA8c3RyaW5nLCBTb3J0VHlwZT4pe1xyXG4gICAgbGV0IGFjdGl2ZUtleSA9IHRoaXMuc2VsZWN0ZWRSYWRpbztcclxuICAgIGxldCBrZXlBcnI6IHN0cmluZ1tdID0gW107XHJcbiAgICBPYmplY3Qua2V5cyh0aGlzLmlzRmlsdGVyU29ydEFjdGl2ZSkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICBpZihrZXkuaW5jbHVkZXMoYWN0aXZlS2V5KSl7XHJcbiAgICAgICAga2V5QXJyID0ga2V5LnNwbGl0KFwiLFwiKTtcclxuICAgICAgICB0aGlzLmlzRmlsdGVyU29ydEFjdGl2ZVtrZXldID0gIHRoaXMuaXNUb29sdGlwQWN0aXZlKGtleUFyciwgc29ydE1hcCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIHVwZGF0ZVN0YXRlT2ZBbGxUaGVLZXlzKHNvcnRNYXA6IE1hcDxzdHJpbmcsIFNvcnRUeXBlPil7XHJcbiAgICAgT2JqZWN0LmtleXModGhpcy5pc0ZpbHRlclNvcnRBY3RpdmUpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgIGxldCBrZXlBcnIgPSBrZXkuc3BsaXQoXCIsXCIpO1xyXG4gICAgICAgdGhpcy5pc0ZpbHRlclNvcnRBY3RpdmVba2V5XSA9IHRoaXMuaXNUb29sdGlwQWN0aXZlKGtleUFycixzb3J0TWFwKTtcclxuICAgICB9KSAgICAgXHJcbiAgfVxyXG4gICAgXHJcbn1cclxuIl19
454
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS1maWx0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FubmEtY29yZS9zcmMvbGliL2FubmEtY29yZS1zaGFyZWQtbGliL3NlcnZpY2VzL2FubmEtZmlsdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxnQ0FBZ0M7QUFDaEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM1RSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxNQUFNLE1BQU0scUJBQXFCLENBQUM7QUFDekMsT0FBTyxTQUFTLE1BQU0sd0JBQXdCLENBQUM7QUFHL0Msa0NBQWtDO0FBQ2xDLE9BQU8sRUFBRSx5QkFBeUIsRUFBZSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7OztBQUt0RCxNQUFNLE9BQU8saUJBQWlCO0lBd0M1QixZQUFvQixxQkFBZ0QsRUFBVSxlQUFnQztRQUExRiwwQkFBcUIsR0FBckIscUJBQXFCLENBQTJCO1FBQVUsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBdEM5RyxlQUFVLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN2Qix1QkFBa0IsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBYy9CLHdCQUFtQixHQUFhLEVBQUUsQ0FBQztRQUluQyxzQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQztZQUMxQixRQUFRO1lBQ1IsS0FBSztZQUNMLEtBQUs7WUFDTCxZQUFZO1lBQ1osV0FBVztZQUNYLFdBQVc7WUFDWCxjQUFjO1lBQ2QsaUJBQWlCO1lBQ2pCLE1BQU07WUFDTixVQUFVO1lBQ1YsY0FBYztZQUNkLGFBQWE7WUFDYixRQUFRO1NBQ1QsQ0FBQyxDQUFDO1FBR0gsdUJBQWtCLEdBQVEsSUFBSSxDQUFDO1FBZ0cvQiw2QkFBd0IsR0FBRyxDQUFDLElBQVksRUFBVSxFQUFFO1lBRWxELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUU7Z0JBQzFCLElBQUksUUFBUSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7Z0JBQ3hCLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO2dCQUN0RCxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO2FBRW5DO2lCQUFNO2dCQUNMLElBQUksUUFBUSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7Z0JBQ3hCLElBQUksVUFBVSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUM7Z0JBQ25ELElBQUksR0FBRyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzdFLE9BQU8sUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQzthQUMvQztRQUVILENBQUMsQ0FBQztRQUVGLDhCQUF5QixHQUFHLENBQUMsSUFBWSxFQUFVLEVBQUU7WUFDbkQsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRTtnQkFDMUIsSUFBSSxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztnQkFDeEIsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO2dCQUMzRCxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO2FBRW5DO2lCQUFNO2dCQUNMLElBQUksUUFBUSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7Z0JBQ3hCLElBQUksVUFBVSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUM7Z0JBQ25ELElBQUksR0FBRyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzdFLE9BQU8sUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO2FBQzFDO1FBQ0gsQ0FBQyxDQUFDO1FBRUYsNEJBQXVCLEdBQUcsQ0FBQyxJQUFZLEVBQVUsRUFBRTtZQUNqRCxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUU7Z0JBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7Z0JBQzNDLE9BQU8sR0FBRyxDQUFDO2FBQ1o7aUJBQU0sSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDbkMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQ25DO1lBQ0QsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDekIsQ0FBQyxDQUFDO1FBbklBLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLG9DQUFvQyxDQUFDLENBQUE7UUFDakQsTUFBTSxTQUFTLEdBQUc7WUFDaEIsWUFBWTtZQUNaLFdBQVc7WUFDWCxhQUFhO1lBQ2Isa0JBQWtCO1lBQ2xCLFFBQVE7WUFDUixPQUFPO1lBQ1AsS0FBSztZQUNMLEtBQUs7WUFDTCxNQUFNO1lBQ04sS0FBSztZQUNMLFlBQVk7WUFDWixZQUFZO1lBQ1osWUFBWTtZQUNaLE1BQU07WUFDTiw2QkFBNkI7WUFDN0IsNEJBQTRCLEVBQUUsQUFBRDtZQUM3QixrQkFBa0I7WUFDbEIsV0FBVztZQUNYLGNBQWM7WUFDZCxpQkFBaUI7WUFDakIsWUFBWTtZQUNaLGVBQWU7WUFDZixhQUFhO1lBQ2IsZ0JBQWdCO1lBQ2hCLGFBQWE7WUFDYixhQUFhO1lBQ2IsVUFBVTtZQUNWLGNBQWM7WUFDZCxhQUFhO1lBQ2IsUUFBUTtTQUNULENBQUM7UUFDRixNQUFNLFdBQVcsR0FBRyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFDbEksTUFBTSxPQUFPLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxrQkFBa0I7WUFDdkQsdUJBQXVCLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDdkYsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELG9CQUFvQixDQUFDLElBQVcsRUFBRSxHQUFXLEVBQUUsS0FBYztRQUMzRCxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdkMsSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0RCxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0lBRUQsbUJBQW1CLENBQUMsSUFBVyxFQUFFLEdBQVc7UUFDMUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pELElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakMsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUdqQyxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxlQUFlLENBQUMsTUFBZ0IsRUFBRSxPQUE4QjtRQUM5RCxJQUFJLEdBQUcsR0FBZ0IsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDekQsSUFBRyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBQztZQUNwQixPQUFPLENBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMzRjtRQUNELGlMQUFpTDtRQUNqTCxPQUFPLENBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFck8sQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUM7WUFDakQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDbkQsSUFBSSxnQkFBZ0IsR0FBZ0IsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDdEUsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLENBQUM7U0FDbEQ7UUFFRCxJQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUM7WUFDOUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUMsU0FBUyxDQUFDLENBQUM7U0FDeEU7SUFFSCxDQUFDO0lBRUQsZUFBZSxDQUFDLFFBQWdCLEVBQUUsUUFBZ0I7UUFDaEQsT0FBTztZQUNMLEtBQUssRUFBRSxRQUFRO1lBQ2YsSUFBSSxFQUFFLFFBQVE7WUFDZCxRQUFRLEVBQUUsSUFBSTtZQUNkLFNBQVMsRUFBRSxJQUFJLENBQUMsdUJBQXVCO1NBQ3hDLENBQUM7SUFDSixDQUFDO0lBMENELHVCQUF1QixDQUFDLElBQVc7UUFDakMsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkQsSUFBSSwwQkFBMEIsR0FBa0IsRUFBRSxDQUFDO1FBQ25ELFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUNoQywwQkFBMEIsQ0FBQyxJQUFJLENBQzdCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyw4QkFBOEIsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUN4RyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLDBCQUEwQixDQUFDO0lBQ3BDLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyx5QkFBa0MsRUFBRSxJQUFVO1FBQ3ZFLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQztRQUN0QixVQUFVLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsRUFBRSx5QkFBeUIsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNyRixJQUFJLENBQUMsK0JBQStCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELHFCQUFxQixDQUFDLFVBQW1CLEVBQUUseUJBQWtDLEVBQUUsSUFBVTtRQUN2RixJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDaEUsVUFBVSxHQUFHLFNBQVMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1NBQ25EO2FBQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLG9CQUFvQixJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksa0JBQWtCO2VBQzVGLElBQUksQ0FBQyxhQUFhLElBQUksdUJBQXVCLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxxQkFBcUIsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLG1CQUFtQixFQUFFO1lBQzlJLFVBQVUsR0FBRyxDQUFDLE9BQU8sQ0FDbkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM1QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FDaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7U0FDdEQ7YUFDSSxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksY0FBYyxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksVUFBVSxFQUFFO1lBQ2pGLFVBQVUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7U0FDeks7YUFDSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRTtZQUMvQyxVQUFVLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ25NLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxXQUFXLElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxhQUFhLEVBQUU7Z0JBQzdFLFVBQVUsR0FBRyxJQUFJLENBQUM7YUFDbkI7WUFDRCxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFO2dCQUNsRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNwRDtTQUNGO2FBQU0sSUFDTCxJQUFJLENBQUMsYUFBYSxJQUFJLFdBQVc7WUFDakMsSUFBSSxDQUFDLGFBQWEsSUFBSSxTQUFTO1lBQy9CLElBQUksQ0FBQyxhQUFhLElBQUksUUFBUTtZQUM5QixJQUFJLENBQUMsYUFBYSxJQUFJLFNBQVM7WUFDL0IsSUFBSSxDQUFDLGFBQWEsS0FBSyxpQkFBaUI7WUFDeEMsSUFBSSxDQUFDLGFBQWEsS0FBSyxlQUFlO1lBQ3RDLElBQUksQ0FBQyxhQUFhLElBQUksTUFBTTtZQUM1QixJQUFJLENBQUMsYUFBYSxJQUFJLG1CQUFtQixFQUN6QztZQUNBLFVBQVU7Z0JBQ1IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUN2RyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDbEYsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRTtnQkFDbEUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDcEQ7U0FDRjthQUFNO1lBQ0wsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDdkcsSUFBSSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUMxSCxVQUFVLEdBQUcsb0JBQW9CLEdBQUcsQ0FBQyxJQUFJLG9CQUFvQixJQUFJLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztTQUNuRztRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRCwrQkFBK0IsQ0FBQyxVQUFtQjtRQUNqRCxJQUFJLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUU1QyxJQUFJLFVBQVUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQzlDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQzdCO2FBQU0sSUFBSSxVQUFVLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDcEQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDL0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDN0I7YUFBTTtZQUNMLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsVUFBVSxDQUFDLFlBQW1CLEVBQUUsU0FBaUI7UUFDL0MsSUFBSSxZQUFZLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDO1FBRXJDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDN0MsSUFBSSxHQUFHLElBQUksU0FBUyxFQUFFO2dCQUNwQixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUMzQixZQUFZLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDN0Y7cUJBQ0ksSUFBSSxHQUFHLEtBQUssV0FBVyxJQUFJLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssaUJBQWlCLElBQUksR0FBRyxLQUFLLGVBQWUsSUFBSSxHQUFHLElBQUksTUFBTSxJQUFJLEdBQUcsSUFBSSxtQkFBbUIsRUFBRTtvQkFDN0ssWUFBWSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7aUJBQ3ZGO3FCQUFNLElBQUksR0FBRyxLQUFLLFFBQVEsRUFBRztvQkFDNUIsWUFBWSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7aUJBQzFGO3FCQUNJLElBQUksR0FBRyxLQUFLLG9CQUFvQixJQUFJLEdBQUcsS0FBSyxrQkFBa0I7dUJBQzlELEdBQUcsS0FBSyx1QkFBdUIsSUFBSSxHQUFHLEtBQUsscUJBQXFCLEVBQUU7b0JBQ3JFLFlBQVksR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsK0JBQStCLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO2lCQUNwRztxQkFDSSxJQUFJLEdBQUcsS0FBSyxtQkFBbUIsSUFBSSxHQUFHLElBQUksY0FBYyxJQUFJLEdBQUcsS0FBSyxVQUFVLEVBQUU7b0JBQ25GLFlBQVksR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUNBQWlDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO2lCQUN0RztxQkFDSSxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUN6QixZQUFZLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNuRTthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRUQsc0JBQXNCLENBQUMsS0FBVSxFQUFFLEtBQVUsRUFBRSxHQUFRO1FBQ3JELElBQUksNkJBQTZCLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM5RyxJQUFJLDhCQUE4QixHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3JGLElBQUksOEJBQThCLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDckYsT0FBTyw2QkFBNkIsSUFBSSw4QkFBOEIsSUFBSSw4QkFBOEIsQ0FBQztJQUMzRyxDQUFDO0lBRUQsc0JBQXNCLENBQUMsR0FBUSxFQUFFLFlBQWlCO1FBQ2hELElBQUksTUFBTSxHQUFHLFVBQVUsQ0FBQztRQUN4QixJQUFJLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzlELElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzFELElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzdDLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXpDLElBQUksa0NBQWtDLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzdFLElBQUkseUNBQXlDLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUN4RyxJQUFJLDhCQUE4QixHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDckUsSUFBSSx1Q0FBdUMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLGlCQUFpQixFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBRXBHLE9BQU8sQ0FDTCxDQUFDLHlDQUF5QyxJQUFJLHVDQUF1QyxDQUFDO1lBQ3RGLENBQUMsa0NBQWtDLElBQUksOEJBQThCLENBQUM7WUFDdEUsQ0FBQyxrQ0FBa0MsSUFBSSx1Q0FBdUMsQ0FBQztZQUMvRSxDQUFDLHlDQUF5QyxJQUFJLDhCQUE4QixDQUFDLENBQzlFLENBQUM7SUFDSixDQUFDO0lBRUQsK0JBQStCLENBQUMsR0FBUSxFQUFFLFlBQWlCLEVBQUUsR0FBUTtRQUNuRSxJQUFJLE1BQU0sR0FBRyxVQUFVLENBQUM7UUFDeEIsSUFBSSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM1RCxJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN4RCxJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFdkIsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3JDLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxJQUFJLFlBQVksQ0FBQyxZQUFZLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLFNBQVMsRUFBRTtZQUN0RCxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLFNBQVMsRUFBRTtZQUN2RCxPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsSUFBSSxZQUFZLENBQUMsV0FBVyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUU7WUFDL0MsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUU7WUFDaEQsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLEVBQUU7WUFDbEMsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUdELElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUMsTUFBTSxDQUFDLENBQUM7UUFFdEMsSUFBSSwrQkFBK0IsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDekUsSUFBSSw2QkFBNkIsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3JFLElBQUkseUNBQXlDLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUV0RyxPQUFPLENBQ0wsK0JBQStCO1lBQy9CLDZCQUE2QjtZQUM3Qix5Q0FBeUMsQ0FDMUMsQ0FBQztJQUNKLENBQUM7SUFFRCxpQ0FBaUMsQ0FBQyxHQUFRLEVBQUUsWUFBZ0IsRUFBRSxHQUFXO1FBQ3ZFLElBQUksTUFBTSxHQUFHLFVBQVUsQ0FBQztRQUN4QixJQUFJLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzVELElBQUksY0FBYyxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXhELElBQUcsWUFBWSxDQUFDLFlBQVksSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxFQUFFO1lBQ3RELE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxJQUFHLENBQUMsWUFBWSxDQUFDLFlBQVksSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxFQUFFO1lBQ3ZELE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBRUQsSUFBRyxZQUFZLENBQUMsV0FBVyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUU7WUFDL0MsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELElBQUcsQ0FBQyxZQUFZLENBQUMsV0FBVyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUU7WUFDaEQsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFFRCxJQUFHLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFO1lBQy9CLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBRUQsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMzQyxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXpDLElBQUksa0NBQWtDLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVFLElBQUkseUNBQXlDLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN0RyxJQUFJLDhCQUE4QixHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDcEUsSUFBSSx1Q0FBdUMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBRWxHLE9BQU8sQ0FDSCxDQUFDLHlDQUF5QyxJQUFJLHVDQUF1QyxDQUFDO1lBQ3RGLENBQUMsa0NBQWtDLElBQUksOEJBQThCLENBQUM7WUFDdEUsQ0FBQyxrQ0FBa0MsSUFBSSx1Q0FBdUMsQ0FBQztZQUMvRSxDQUFDLHlDQUF5QyxJQUFJLDhCQUE4QixDQUFDLENBQ2hGLENBQUM7SUFFTixDQUFDO0lBRUMscUJBQXFCLENBQUMsR0FBUSxFQUFFLEtBQVUsRUFBRSxHQUFRO1FBQ2xELElBQUksYUFBcUIsQ0FBQztRQUMxQixJQUFJLEdBQUcsS0FBSyxRQUFRLEVBQUU7WUFDcEIsYUFBYSxHQUFHLFlBQVksQ0FBQztZQUU3QixJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzFDLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFdEMsSUFBSSx5QkFBeUIsR0FBRyxjQUFjLENBQUMsU0FBUyxDQUN0RCxLQUFLLENBQUMsUUFBUSxFQUNkLEtBQUssQ0FBQyxNQUFNLENBQ2IsQ0FBQztZQUNGLElBQUksdUJBQXVCLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FDbEQsS0FBSyxDQUFDLFFBQVEsRUFDZCxLQUFLLENBQUMsTUFBTSxDQUNiLENBQUM7WUFHRixJQUFJLDZCQUE2QixHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzFFLElBQUkseUJBQXlCLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFbEUsT0FBTyxDQUNMLENBQUMseUJBQXlCLElBQUksNkJBQTZCLENBQUM7Z0JBQzVELENBQUMsdUJBQXVCLElBQUkseUJBQXlCLENBQUMsQ0FDdkQsQ0FBQztTQUNIO2FBQU0sSUFBSSxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxpQkFBaUIsSUFBSSxHQUFHLEtBQUssZUFBZSxFQUFFO1lBQ3BGLGFBQWEsR0FBRyxZQUFZLENBQUM7WUFDN0IsSUFBSSxvQkFBb0IsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUVsSCxJQUFJLHdCQUF3QixHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUM1RixJQUFJLHNCQUFzQixHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUUxRixPQUFPLG9CQUFvQixJQUFJLHdCQUF3QixJQUFJLHNCQUFzQixDQUFDO1NBQ25GO0lBQ0gsQ0FBQztJQUdNLHdCQUF3QixDQUFDLFVBQWlCLEVBQUUsR0FBRyxHQUFHLGNBQWM7UUFDckUsSUFBSSxZQUFZLEdBQUcsR0FBRyxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNoRCxJQUFJLFVBQVUsR0FBRyxHQUFHLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRTVDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsQ0FBTSxFQUFFLEVBQUU7WUFDakMsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLENBQUMsQ0FBQyxDQUFDO1FBRUgsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxDQUFNLEVBQUUsRUFBRTtZQUMvQixPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDakUsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLG1CQUFtQixHQUFHO1lBQ3RCLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQzFCLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO1NBQ3pCLENBQUM7UUFDRixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsd0JBQXdCLENBQUMsSUFBVyxFQUFFLFVBQTJCO1FBRS9ELElBQUcsVUFBVSxJQUFJLGNBQWMsRUFBQztZQUM5QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0MsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzFCLE9BQU8sUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7U0FDN0I7UUFFRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3hFLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxJQUFXLEVBQUUsVUFBaUI7UUFDakQsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN6RCxJQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUM7WUFDMUMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDeEQ7YUFDRztZQUNGLE9BQU8sSUFBSSxDQUFDO1NBQ2I7SUFDSCxDQUFDO0lBRUQsMEJBQTBCLENBQUMsVUFBaUIsRUFBRSxLQUFVO1FBQ3RELElBQUksVUFBVSxHQUFHLElBQUksQ0FBQztRQUN0QixVQUFVLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsRUFBQyxLQUFLLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsK0JBQStCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakQsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVELHNCQUFzQixDQUFDLFVBQWlCLEVBQUMsS0FBVTtRQUNqRCxJQUFJLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEYsSUFBSSxvQkFBb0IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxXQUFXLENBQUMsSUFBVyxFQUFDLEtBQVU7UUFDaEMsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDM0IsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUMzQixZQUFZLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM3RjthQUNJLElBQUksR0FBRyxLQUFLLFdBQVcsSUFBSSxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRyxLQUFLLGlCQUFpQixJQUFJLEdBQUcsS0FBSyxlQUFlLElBQUksR0FBRyxJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksbUJBQW1CLEVBQUU7WUFDN0ssWUFBWSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDdkY7YUFBTSxJQUFJLEdBQUcsS0FBSyxRQUFRLEVBQUc7WUFDNUIsWUFBWSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDMUY7YUFDSSxJQUFJLEdBQUcsS0FBSyxvQkFBb0IsSUFBSSxHQUFHLEtBQUssa0JBQWtCO2VBQzlELEdBQUcsS0FBSyx1QkFBdUIsSUFBSSxHQUFHLEtBQUsscUJBQXFCLEVBQUU7WUFDckUsWUFBWSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDcEc7YUFDSSxJQUFJLEdBQUcsS0FBSyxtQkFBbUIsSUFBSSxHQUFHLElBQUksY0FBYyxJQUFJLEdBQUcsS0FBSyxVQUFVLEVBQUU7WUFDbkYsWUFBWSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDdEc7YUFDSSxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3pCLFlBQVksR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbkU7UUFDRCxPQUFPLFlBQVksQ0FBQztJQUN4QixDQUFDO0lBRUQsa0JBQWtCLENBQUMsR0FBUSxFQUFFLEtBQW1ELEVBQUMsR0FBVTtRQUN6RixJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEIsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlCLElBQUksMkJBQTJCLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEUsSUFBSSx5QkFBeUIsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1RCxJQUFJLGtDQUFrQyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUYsT0FBTywyQkFBMkIsSUFBSSx5QkFBeUIsSUFBSSxrQ0FBa0MsQ0FBQztJQUN4RyxDQUFDO0lBRUQsZ0NBQWdDLENBQUMsT0FBOEI7UUFDN0QsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUNuQyxJQUFJLE1BQU0sR0FBYSxFQUFFLENBQUM7UUFDMUIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDakQsSUFBRyxHQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFDO2dCQUN6QixNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxHQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQ3ZFO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFTCxDQUFDO0lBRUQsdUJBQXVCLENBQUMsT0FBOEI7UUFDbkQsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDakQsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEUsQ0FBQyxDQUFDLENBQUE7SUFDTCxDQUFDOztBQXplYSw0QkFBVSxHQUFHLEVBQUcsQ0FBQTs4R0FyQ25CLGlCQUFpQjtrSEFBakIsaUJBQWlCLGNBRmhCLE1BQU07MkZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXIgaW1wb3J0IHN0YXRlbWVudHNcclxuaW1wb3J0IHsgT3B0aW9ucyB9IGZyb20gJ0Bhbmd1bGFyLXNsaWRlci9uZ3gtc2xpZGVyJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vLyBUaGlyZCBwYXJ0eSBpbXBvcnQgc3RhdGVtZW50c1xyXG5pbXBvcnQgeyBtaW4sIG1heCwgbWFwLCBzb3J0QnksIHVuaXEsIGNsb25lRGVlcCwgaXNFcXVhbCB9IGZyb20gXCJsb2Rhc2gtZXNcIjtcclxuaW1wb3J0IGRheWpzIGZyb20gXCJkYXlqc1wiO1xyXG5pbXBvcnQgbWluTWF4IGZyb20gXCJkYXlqcy9wbHVnaW4vbWluTWF4XCI7XHJcbmltcG9ydCBpc0JldHdlZW4gZnJvbSBcImRheWpzL3BsdWdpbi9pc0JldHdlZW5cIjtcclxuaW1wb3J0IHsgU29ydFR5cGUgfSBmcm9tICcuLi9tb2RlbHMvYW5uYS1zb3J0Lm1vZGVsJztcclxuXHJcbi8vIFVzZXIgZGVmaW5lZCBpbXBvcnQgc3RhdGVtZW50cyBcclxuaW1wb3J0IHsgQW5uYURhdGVUaW1lRm9ybWF0U2VydmljZSwgTmdiRGF0ZVR5cGUgfSBmcm9tICcuL2FubmEtZGF0ZS10aW1lLWZvcm1hdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQW5uYVNvcnRTZXJ2aWNlIH0gZnJvbSAnLi9hbm5hLXNvcnQuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBbm5hRmlsdGVyU2VydmljZSB7XHJcblxyXG4gIHRvb2x0aXBNYXAgPSBuZXcgTWFwKCk7XHJcbiAgdG9vbHRpcFNlbGVjdGVkTWFwID0gbmV3IE1hcCgpO1xyXG4gIGluaXRpYWxWYWx1ZU1hcDogTWFwPHN0cmluZywgYW55PjtcclxuICB0cmFuc2xhdGVGdW5jOiBzdHJpbmc7XHJcbiAgc2VsZWN0ZWRSYWRpbzogc3RyaW5nO1xyXG4gIHN1YlJhZGlvQnV0dG9uOiBzdHJpbmc7XHJcblxyXG4gIGNhbGVuZGFyU2V0OiBTZXQ8c3RyaW5nPjtcclxuICBzbGlkZXJTZXQ6IFNldDxzdHJpbmc+O1xyXG4gIHRpbWVTZXQ6IFNldDxzdHJpbmc+O1xyXG5cclxuICBpbmNsdWRlTXVsdGlUaW1lOiBib29sZWFuO1xyXG4gIGluY2x1ZGVaZXJvVGltZTogYm9vbGVhbjtcclxuICBpbmNsdWRlVGltZVJhbmdlOiBib29sZWFuO1xyXG5cclxuICBhcHBsaWVkRmlsdGVyc0FycmF5OiBzdHJpbmdbXSA9IFtdO1xyXG4gIGZsaWdodERhdGVSYW5nZTogeyBtaW5TZWxlY3RlZERhdGU6IGFueSwgbWF4U2VsZWN0ZWREYXRlOiBhbnkgfTtcclxuICBzbGlkZXJEYXRhOiB7IG1pbjogYW55LCBtYXg6IGFueSB9O1xyXG4gIG5neFNsaWRlck9iajogT3B0aW9ucztcclxuICBzbGlkZXJDdXJyZW5jeVNldCA9IG5ldyBTZXQoW1xyXG4gICAgJ2Jvb2tlZCcsXHJcbiAgICAnY3BwJyxcclxuICAgICdjcG0nLFxyXG4gICAgJ3JjdlByZWVtcHQnLFxyXG4gICAgJ29zUHJlZW1wdCcsXHJcbiAgICAncG9zdGVkQWR1JyxcclxuICAgICdzY2hlZHVsZWRBZHUnLFxyXG4gICAgJ2F1ZGllbmNlRGVmaWNpdCcsXHJcbiAgICAnUmF0ZScsXHJcbiAgICAndXNlckFEVXMnLFxyXG4gICAgJ2J1eWVyQ2hhbmdlcycsXHJcbiAgICAndXNlckNoYW5nZXMnLFxyXG4gICAgJ3VzZXJNRycsXHJcbiAgXSk7XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgYnVmZmVyU2l6ZSA9IDIwO1xyXG4gIGlzRmlsdGVyU29ydEFjdGl2ZTogYW55ID0gbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRlVGltZUZvcm1hdFNlcnZpY2U6IEFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UsIHByaXZhdGUgYW5uYVNvcnRTZXJ2aWNlOiBBbm5hU29ydFNlcnZpY2UpIHtcclxuICAgIGRheWpzLmV4dGVuZChtaW5NYXgpO1xyXG4gICAgZGF5anMuZXh0ZW5kKGlzQmV0d2Vlbik7XHJcbiAgICBjb25zb2xlLmxvZyhcIkFubmFGaWx0ZXJTZXJ2aWNlIHNlcnZpY2UgY3JlYXRlZC5cIilcclxuICAgIGNvbnN0IHNsaWRlckFyciA9IFtcclxuICAgICAgXCJyY3ZQcmVlbXB0XCIsXHJcbiAgICAgIFwib3NQcmVlbXB0XCIsXHJcbiAgICAgIFwicmN2VW5kZXJEbHlcIixcclxuICAgICAgXCJwb3N0ZWRBdWRQZXJjZW50XCIsXHJcbiAgICAgIFwiYm9va2VkXCIsXHJcbiAgICAgIFwic3BvdHNcIixcclxuICAgICAgXCJncnBcIixcclxuICAgICAgXCJjcHBcIixcclxuICAgICAgXCJpbXBzXCIsXHJcbiAgICAgIFwiY3BtXCIsXHJcbiAgICAgIFwib3NVbmRlckRseVwiLFxyXG4gICAgICBcInRvdGFsV2Vla3NcIixcclxuICAgICAgXCJXZWVrTnVtYmVyXCIsXHJcbiAgICAgIFwiUmF0ZVwiLFxyXG4gICAgICBcIk9yZGVyZWRSYXRpbmdzT3JJbXByZXNzaW9uc1wiLFxyXG4gICAgICBcIlBvc3RlZFJhdGluZ3NPckltcHJlc3Npb25zXCIsICxcclxuICAgICAgXCJwb3N0ZWRBdWRQZXJjZW50XCIsXHJcbiAgICAgIFwicG9zdGVkQWR1XCIsXHJcbiAgICAgIFwic2NoZWR1bGVkQWR1XCIsXHJcbiAgICAgIFwiYXVkaWVuY2VEZWZpY2l0XCIsXHJcbiAgICAgIFwib2ZmZXJlZE1Hc1wiLFxyXG4gICAgICBcIm91dHN0YW5kaW5nUEVcIixcclxuICAgICAgXCJvZmZlcmVkQURVc1wiLFxyXG4gICAgICBcInVkRGVmaWNpdFZhbHVlXCIsXHJcbiAgICAgIFwiYm9va2VkVmFsdWVcIixcclxuICAgICAgXCJib29rZWRTcG90c1wiLFxyXG4gICAgICBcInVzZXJBRFVzXCIsXHJcbiAgICAgIFwiYnV5ZXJDaGFuZ2VzXCIsXHJcbiAgICAgIFwidXNlckNoYW5nZXNcIixcclxuICAgICAgXCJ1c2VyTUdcIlxyXG4gICAgXTtcclxuICAgIGNvbnN0IGNhbGVuZGFyQXJyID0gW1wicGVyaW9kXCIsIFwiQWlyRGF0ZVwiLCBcImZsaWdodFN0YXJ0RGF0ZVwiLCBcImZsaWdodEVuZERhdGVcIixcImRhdGVcIiwgXCJzdGFydERhdGVcIiwgXCJlbmREYXRlXCIsIFwicmV2aXNpb25TdGFydERhdGVcIl07XHJcbiAgICBjb25zdCB0aW1lQXJyID0gW1wiU3RhcnRUaW1lRm9yRmlsdGVyXCIsIFwiRW5kVGltZUZvckZpbHRlclwiLFxyXG4gICAgICBcInN0YXJ0X3RpbWVfZm9yX2ZpbHRlclwiLCBcImVuZF90aW1lX2Zvcl9maWx0ZXJcIiwgXCJzdGFydEVuZFRpbWVNdWx0aVwiLCBcInN0YXJ0RW5kVGltZVwiXTtcclxuICAgIHRoaXMuc2xpZGVyU2V0ID0gbmV3IFNldChzbGlkZXJBcnIpO1xyXG4gICAgdGhpcy5jYWxlbmRhclNldCA9IG5ldyBTZXQoY2FsZW5kYXJBcnIpO1xyXG4gICAgdGhpcy50aW1lU2V0ID0gbmV3IFNldCh0aW1lQXJyKTtcclxuICB9XHJcblxyXG4gIHJldHVybk1heEFuZE1pblZhbHVlKGRhdGE6IGFueVtdLCBrZXk6IHN0cmluZywgaXNNaW46IGJvb2xlYW4pIHtcclxuICAgIGRhdGEgPSBkYXRhLmZpbHRlcigob2JqKSA9PiAhW1wiXCIsIFwiLVwiLCBudWxsXS5pbmNsdWRlcyhvYmpba2V5XSkpO1xyXG4gICAgY29uc3QgdmFsdWVzID0gZGF0YS5tYXAoKHgpID0+IHhba2V5XSk7XHJcbiAgICBsZXQgdmFsdWVUb1JldHVybiA9IGlzTWluID8gbWluKHZhbHVlcykgOiBtYXgodmFsdWVzKTtcclxuICAgIHJldHVybiB2YWx1ZVRvUmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuTWluQW5kTWF4RGF0ZShkYXRhOiBhbnlbXSwga2V5OiBzdHJpbmcpIHtcclxuICAgIGRhdGEgPSBkYXRhLmZpbHRlcigob2JqKSA9PiAhW1wiXCIsIFwiLVwiLCBudWxsXS5pbmNsdWRlcyhvYmpba2V5XSkpO1xyXG4gICAgbGV0IERhdGVBcnIgPSBkYXRhLm1hcCgob2JqKSA9PiBkYXlqcyhvYmpba2V5XSkpO1xyXG4gICAgbGV0IG1pbkRhdGUgPSBkYXlqcy5taW4oRGF0ZUFycik7XHJcbiAgICBsZXQgbWF4RGF0ZSA9IGRheWpzLm1heChEYXRlQXJyKTtcclxuXHJcblxyXG4gICAgcmV0dXJuIFttaW5EYXRlLCBtYXhEYXRlXTtcclxuICB9XHJcblxyXG4gIGlzVG9vbHRpcEFjdGl2ZShoZWFkZXI6IHN0cmluZ1tdLCBzb3J0TWFwOiBNYXA8c3RyaW5nLCBTb3J0VHlwZT4pOiBib29sZWFuIHtcclxuICAgIGxldCBzZXQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldCh0aGlzLmFwcGxpZWRGaWx0ZXJzQXJyYXkpO1xyXG4gICAgaWYoaGVhZGVyLmxlbmd0aCA9PSAxKXtcclxuICAgICAgcmV0dXJuICggKHNvcnRNYXAuc2l6ZSA+IDAgJiYgc29ydE1hcC5nZXQoaGVhZGVyWzBdKSAhPSBcIkRFRkFVTFRcIikgfHwgc2V0LmhhcyhoZWFkZXJbMF0pKTtcclxuICAgIH1cclxuICAgIC8vIHJldHVybiAoIChzb3J0TWFwLnNpemUgPiAwICYmIHNvcnRNYXAuZ2V0KGhlYWRlclswXSkgIT0gXCJERUZBVUxUXCIpIHx8IChzb3J0TWFwLnNpemUgPiAwICYmIHNvcnRNYXAuZ2V0KGhlYWRlclsxXSkgIT0gXCJERUZBVUxUXCIpIHx8IHNldC5oYXMoaGVhZGVyWzBdKSB8fCBzZXQuaGFzKGhlYWRlclsxXSkpOyBcclxuICAgIHJldHVybiAoIChzb3J0TWFwLnNpemUgPiAwICYmICBzb3J0TWFwLmhhcyhoZWFkZXJbMF0pICYmIHNvcnRNYXAuZ2V0KGhlYWRlclswXSkgIT0gXCJERUZBVUxUXCIpIHx8IChzb3J0TWFwLnNpemUgPiAwICYmICBzb3J0TWFwLmhhcyhoZWFkZXJbMV0pICYmIHNvcnRNYXAuZ2V0KGhlYWRlclsxXSkgIT0gXCJERUZBVUxUXCIpIHx8IHNldC5oYXMoaGVhZGVyWzBdKSB8fCBzZXQuaGFzKGhlYWRlclsxXSkpOyBcclxuXHJcbiAgfVxyXG5cclxuICBjbGVhckNvbHVtbkZpbHRlcigpIHtcclxuICAgIGlmKHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKXtcclxuICAgICAgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZGVsZXRlKHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgIGxldCBhcHBsaWVkRmlsdGVyU2V0OiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQodGhpcy5hcHBsaWVkRmlsdGVyc0FycmF5KTtcclxuICAgICAgYXBwbGllZEZpbHRlclNldC5kZWxldGUodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgdGhpcy5hcHBsaWVkRmlsdGVyc0FycmF5ID0gWy4uLmFwcGxpZWRGaWx0ZXJTZXRdOyAgXHJcbiAgICB9XHJcblxyXG4gICAgaWYodGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlLmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKXtcclxuICAgICAgdGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlLnNldCh0aGlzLnNlbGVjdGVkUmFkaW8sXCJERUZBVUxUXCIpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHNldE9wdGlvblZhbHVlcyhtaW5WYWx1ZTogbnVtYmVyLCBtYXhWYWx1ZTogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBmbG9vcjogbWluVmFsdWUsXHJcbiAgICAgIGNlaWw6IG1heFZhbHVlLFxyXG4gICAgICBkaXNhYmxlZDogdHJ1ZSxcclxuICAgICAgdHJhbnNsYXRlOiB0aGlzLm5vcm1hbFRyYW5zbGF0ZUZ1bmN0aW9uXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcGVyY2VudFRyYW5zbGF0ZUZ1bmN0aW9uID0gKGRhdGE6IG51bWJlcik6IHN0cmluZyA9PiB7XHJcbiAgICBcclxuICAgIGlmIChNYXRoLmFicyhkYXRhKSA+PSAxMDAwKSB7XHJcbiAgICAgIGxldCBpc05lZ1ZhbCA9IGRhdGEgPCAwO1xyXG4gICAgICBjb25zdCB2YWwgPSAoTWF0aC5hYnMoZGF0YSkgLyAxMDAwKS50b0ZpeGVkKDEpICsgXCJrJVwiO1xyXG4gICAgICByZXR1cm4gaXNOZWdWYWwgPyBcIi1cIiArIHZhbCA6IHZhbDtcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgaXNOZWdWYWwgPSBkYXRhIDwgMDtcclxuICAgICAgbGV0IGlzV2hvbGVOdW0gPSBwYXJzZUludChkYXRhLnRvU3RyaW5nKCkpID09IGRhdGE7XHJcbiAgICAgIGxldCB2YWwgPSBpc1dob2xlTnVtID8gTWF0aC5hYnMoZGF0YSkudG9TdHJpbmcoKSA6IE1hdGguYWJzKGRhdGEpLnRvRml4ZWQoMSk7IFxyXG4gICAgICByZXR1cm4gaXNOZWdWYWwgPyBcIi1cIiArIHZhbCArIFwiJVwiIDogdmFsICsgXCIlXCI7XHJcbiAgICB9XHJcblxyXG4gIH07XHJcblxyXG4gIGN1cnJlbmN5VHJhbnNsYXRlRnVuY3Rpb24gPSAoZGF0YTogbnVtYmVyKTogc3RyaW5nID0+IHtcclxuICAgIGlmIChNYXRoLmFicyhkYXRhKSA+PSAxMDAwKSB7XHJcbiAgICAgIGxldCBpc05lZ1ZhbCA9IGRhdGEgPCAwO1xyXG4gICAgICBjb25zdCB2YWwgPSBcIiRcIiArIChNYXRoLmFicyhkYXRhKSAvIDEwMDApLnRvRml4ZWQoMSkgKyBcImtcIjtcclxuICAgICAgcmV0dXJuIGlzTmVnVmFsID8gXCItXCIgKyB2YWwgOiB2YWw7XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGlzTmVnVmFsID0gZGF0YSA8IDA7XHJcbiAgICAgIGxldCBpc1dob2xlTnVtID0gcGFyc2VJbnQoZGF0YS50b1N0cmluZygpKSA9PSBkYXRhO1xyXG4gICAgICBsZXQgdmFsID0gaXNXaG9sZU51bSA/IE1hdGguYWJzKGRhdGEpLnRvU3RyaW5nKCkgOiBNYXRoLmFicyhkYXRhKS50b0ZpeGVkKDEpOyBcclxuICAgICAgcmV0dXJuIGlzTmVnVmFsID8gXCItJFwiICsgdmFsIDogXCIkXCIgKyB2YWw7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgbm9ybWFsVHJhbnNsYXRlRnVuY3Rpb24gPSAoZGF0YTogbnVtYmVyKTogc3RyaW5nID0+IHtcclxuICAgIGlmIChkYXRhID49IDEwMDApIHtcclxuICAgICAgY29uc3QgdmFsID0gKGRhdGEgLyAxMDAwKS50b0ZpeGVkKDEpICsgXCJrXCI7XHJcbiAgICAgIHJldHVybiB2YWw7XHJcbiAgICB9IGVsc2UgaWYgKGRhdGEgIT0gTWF0aC5mbG9vcihkYXRhKSkge1xyXG4gICAgICByZXR1cm4gZGF0YS50b0ZpeGVkKDEpLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xyXG4gIH07XHJcblxyXG4gIGZpbmRVbmlxdWVEYXRlc1dpdGhEYXRhKGRhdGE6IGFueVtdKSB7XHJcbiAgICBsZXQgdW5pcXVlRGF0ZXMgPSB1bmlxKGRhdGEubWFwKCh1KSA9PiB1W1wiZGF0ZVwiXSkpO1xyXG4gICAgbGV0IHVuaXF1ZURhdGVzSW5OZ2JEYXRlRm9ybWF0OiBOZ2JEYXRlVHlwZVtdID0gW107XHJcbiAgICB1bmlxdWVEYXRlcy5mb3JFYWNoKChkYXRlOiBhbnkpID0+IHtcclxuICAgICAgdW5pcXVlRGF0ZXNJbk5nYkRhdGVGb3JtYXQucHVzaChcclxuICAgICAgICB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0VG9OZ2JEYXRlU3RhbmRhcmRGb3JtYXQoZGF5anMoZGF0ZSwgXCJNTS9ERC9ZWVwiKS5mb3JtYXQoXCJNTS9ERC9ZWVlZXCIpKVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdW5pcXVlRGF0ZXNJbk5nYkRhdGVGb3JtYXQ7XHJcbiAgfVxyXG5cclxuICByZU9yZGVyQXBwbGllZEZpbHRlcnNBcnJheShpc0hpZXJhcmNoaWFsVXNlckZpbHRlcmVkOiBib29sZWFuLCBkYXRlPzogYW55KSB7XHJcbiAgICBsZXQgaXNGaWx0ZXJlZCA9IHRydWU7XHJcbiAgICBpc0ZpbHRlcmVkID0gdGhpcy5jaGVja0lmRGF0YUlzRmlsdGVyZWQoaXNGaWx0ZXJlZCwgaXNIaWVyYXJjaGlhbFVzZXJGaWx0ZXJlZCwgZGF0ZSk7XHJcbiAgICB0aGlzLnJlbW92ZU9yQ2hhbmdlTGF0ZXN0RmlsdGVySW5kZXgoaXNGaWx0ZXJlZCk7XHJcbiAgfVxyXG5cclxuICBjaGVja0lmRGF0YUlzRmlsdGVyZWQoaXNGaWx0ZXJlZDogYm9vbGVhbiwgaXNIaWVyYXJjaGlhbFVzZXJGaWx0ZXJlZDogYm9vbGVhbiwgZGF0ZT86IGFueSkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSYWRpbyA9PSBcInVzZXJcIiAmJiAhdGhpcy50b29sdGlwTWFwLmhhcyhcInVzZXJcIikpIHtcclxuICAgICAgaXNGaWx0ZXJlZCA9IGNsb25lRGVlcChpc0hpZXJhcmNoaWFsVXNlckZpbHRlcmVkKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFJhZGlvID09IFwiU3RhcnRUaW1lRm9yRmlsdGVyXCIgfHwgdGhpcy5zZWxlY3RlZFJhZGlvID09IFwiRW5kVGltZUZvckZpbHRlclwiXHJcbiAgICAgIHx8IHRoaXMuc2VsZWN0ZWRSYWRpbyA9PSBcInN0YXJ0X3RpbWVfZm9yX2ZpbHRlclwiIHx8IHRoaXMuc2VsZWN0ZWRSYWRpbyA9PSBcImVuZF90aW1lX2Zvcl9maWx0ZXJcIiB8fCB0aGlzLnNlbGVjdGVkUmFkaW8gPT0gXCJzdGFydEVuZFRpbWVNdWx0aVwiKSB7XHJcbiAgICAgIGlzRmlsdGVyZWQgPSAhaXNFcXVhbChcclxuICAgICAgICB0aGlzLmluaXRpYWxWYWx1ZU1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKSxcclxuICAgICAgICB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKVxyXG4gICAgICApIHx8ICF0aGlzLmluY2x1ZGVaZXJvVGltZSB8fCAhdGhpcy5pbmNsdWRlTXVsdGlUaW1lO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5zZWxlY3RlZFJhZGlvID09IFwic3RhcnRFbmRUaW1lXCIgfHwgdGhpcy5zZWxlY3RlZFJhZGlvID09IFwiVGltZUJhbmRcIikge1xyXG4gICAgICBpc0ZpbHRlcmVkID0gIWlzRXF1YWwodGhpcy5pbml0aWFsVmFsdWVNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyksIHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pKSB8fCAhdGhpcy5pbmNsdWRlWmVyb1RpbWUgfHwgIXRoaXMuaW5jbHVkZU11bHRpVGltZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuc2xpZGVyU2V0Lmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgIGlzRmlsdGVyZWQgPSAhaXNFcXVhbCh0aGlzLmluaXRpYWxWYWx1ZU1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKSwgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbykpICYmICFpc0VxdWFsKHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pLCB0aGlzLnNsaWRlckRhdGEpO1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFJhZGlvID09IFwicG9zdGVkQWR1XCIgJiYgdGhpcy5zdWJSYWRpb0J1dHRvbiA9PSBcIm5vdFJlcXVpcmVkXCIpIHtcclxuICAgICAgICBpc0ZpbHRlcmVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIWlzRmlsdGVyZWQgJiYgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykpIHtcclxuICAgICAgICB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5kZWxldGUodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09IFwic3RhcnREYXRlXCIgfHxcclxuICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09IFwiZW5kRGF0ZVwiIHx8XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PSBcInBlcmlvZFwiIHx8XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PSBcIkFpckRhdGVcIiB8fFxyXG4gICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwiZmxpZ2h0U3RhcnREYXRlXCIgfHxcclxuICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcImZsaWdodEVuZERhdGVcIiB8fFxyXG4gICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT0gXCJkYXRlXCIgfHxcclxuICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09IFwicmV2aXNpb25TdGFydERhdGVcIlxyXG4gICAgKSB7XHJcbiAgICAgIGlzRmlsdGVyZWQgPVxyXG4gICAgICAgICFpc0VxdWFsKHRoaXMuaW5pdGlhbFZhbHVlTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pLCB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKSkgJiZcclxuICAgICAgICAhaXNFcXVhbCh0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKSwgdGhpcy5mbGlnaHREYXRlUmFuZ2UpO1xyXG4gICAgICBpZiAoIWlzRmlsdGVyZWQgJiYgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykpIHtcclxuICAgICAgICB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5kZWxldGUodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IHRvdGFsT3B0aW9uc0NvdW50ID0gdGhpcy50b29sdGlwTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pLmZpbHRlcigoeDogYW55KSA9PiAheC5pc0hpZGRlbikubGVuZ3RoO1xyXG4gICAgICBsZXQgc2VsZWN0ZWRPcHRpb25zQ291bnQgPSB0aGlzLnRvb2x0aXBNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbykuZmlsdGVyKCh4OiBhbnkpID0+ICF4LmlzSGlkZGVuICYmIHguaXNTZWxlY3RlZCkubGVuZ3RoO1xyXG4gICAgICBpc0ZpbHRlcmVkID0gc2VsZWN0ZWRPcHRpb25zQ291bnQgPiAwICYmIHNlbGVjdGVkT3B0aW9uc0NvdW50ICE9IHRvdGFsT3B0aW9uc0NvdW50ID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlzRmlsdGVyZWQ7XHJcbiAgfVxyXG5cclxuICByZW1vdmVPckNoYW5nZUxhdGVzdEZpbHRlckluZGV4KGlzRmlsdGVyZWQ6IGJvb2xlYW4pIHtcclxuICAgIGxldCBzZXQgPSBuZXcgU2V0KHRoaXMuYXBwbGllZEZpbHRlcnNBcnJheSk7XHJcblxyXG4gICAgaWYgKGlzRmlsdGVyZWQgJiYgIXNldC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICBzZXQuYWRkKHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICB9IGVsc2UgaWYgKGlzRmlsdGVyZWQgJiYgc2V0Lmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgIHNldC5kZWxldGUodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgc2V0LmFkZCh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2V0LmRlbGV0ZSh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hcHBsaWVkRmlsdGVyc0FycmF5ID0gWy4uLnNldF07XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJEYXRhKG9yaWdpbmFsRGF0YTogYW55W10sIGtleVRvU2tpcDogc3RyaW5nKSB7XHJcbiAgICBsZXQgZmlsdGVyZWREYXRhID0gWy4uLm9yaWdpbmFsRGF0YV07XHJcblxyXG4gICAgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICBpZiAoa2V5ICE9IGtleVRvU2tpcCkge1xyXG4gICAgICAgIGlmICh0aGlzLnNsaWRlclNldC5oYXMoa2V5KSkge1xyXG4gICAgICAgICAgZmlsdGVyZWREYXRhID0gZmlsdGVyZWREYXRhLmZpbHRlcigob2JqKSA9PiBvYmpba2V5XSA+PSB2YWx1ZS5taW4gJiYgb2JqW2tleV0gPD0gdmFsdWUubWF4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBcInN0YXJ0RGF0ZVwiIHx8IGtleSA9PT0gXCJlbmREYXRlXCIgfHwga2V5ID09PSBcIkFpckRhdGVcIiB8fCBrZXkgPT09IFwiZmxpZ2h0U3RhcnREYXRlXCIgfHwga2V5ID09PSBcImZsaWdodEVuZERhdGVcIiB8fCBrZXkgPT0gXCJkYXRlXCIgfHwga2V5ID09IFwicmV2aXNpb25TdGFydERhdGVcIikge1xyXG4gICAgICAgICAgZmlsdGVyZWREYXRhID0gZmlsdGVyZWREYXRhLmZpbHRlcigob2JqKSA9PiB0aGlzLmlzT2JqZWN0SW5UaGVSYW5nZShvYmosIHZhbHVlLCBrZXkpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gXCJwZXJpb2RcIiApIHtcclxuICAgICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gdGhpcy5nZXREYXRhSW5UaGVEYXRlUmFuZ2Uob2JqLCB2YWx1ZSwga2V5KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJTdGFydFRpbWVGb3JGaWx0ZXJcIiB8fCBrZXkgPT09IFwiRW5kVGltZUZvckZpbHRlclwiXHJcbiAgICAgICAgICB8fCBrZXkgPT09IFwic3RhcnRfdGltZV9mb3JfZmlsdGVyXCIgfHwga2V5ID09PSBcImVuZF90aW1lX2Zvcl9maWx0ZXJcIikge1xyXG4gICAgICAgICAgZmlsdGVyZWREYXRhID0gZmlsdGVyZWREYXRhLmZpbHRlcigob2JqKSA9PiB0aGlzLnJldHVybkRhdGFGb3JGcm9tQW5kVG9UaW1lUmFuZ2Uob2JqLCB2YWx1ZSwga2V5KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJzdGFydEVuZFRpbWVNdWx0aVwiIHx8IGtleSA9PSBcInN0YXJ0RW5kVGltZVwiIHx8IGtleSA9PT0gXCJUaW1lQmFuZFwiKSB7XHJcbiAgICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKChvYmopID0+IHRoaXMucmV0dXJuRGF0YUZvclN0YXJ0QW5kRW5kVGltZVJhbmdlKG9iaiwgdmFsdWUsIGtleSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKCh1KSA9PiB2YWx1ZS5pbmNsdWRlcyh1W2tleV0pKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGZpbHRlcmVkRGF0YTtcclxuICB9XHJcblxyXG4gIHJldHVybk9yZGVyc0luVGhlUmFuZ2Uob3JkZXI6IGFueSwgcmFuZ2U6IGFueSwga2V5OiBhbnkpIHtcclxuICAgIGxldCBpc0RhdGVCZXR3ZWVuVGhlU2VsZWN0ZWRSYW5nZSA9IGRheWpzKG9yZGVyW2tleV0pLmlzQmV0d2VlbihyYW5nZS5taW5TZWxlY3RlZERhdGUsIHJhbmdlLm1heFNlbGVjdGVkRGF0ZSk7XHJcbiAgICBsZXQgaXNEYXRlU2FtZUFzVGhlTWluU2VsZWN0ZWREYXRlID0gZGF5anMob3JkZXJba2V5XSkuaXNTYW1lKHJhbmdlLm1pblNlbGVjdGVkRGF0ZSk7XHJcbiAgICBsZXQgaXNEYXRlU2FtZUFzVGhlTWF4U2VsZWN0ZWREYXRlID0gZGF5anMob3JkZXJba2V5XSkuaXNTYW1lKHJhbmdlLm1heFNlbGVjdGVkRGF0ZSk7XHJcbiAgICByZXR1cm4gaXNEYXRlQmV0d2VlblRoZVNlbGVjdGVkUmFuZ2UgfHwgaXNEYXRlU2FtZUFzVGhlTWluU2VsZWN0ZWREYXRlIHx8IGlzRGF0ZVNhbWVBc1RoZU1heFNlbGVjdGVkRGF0ZTtcclxuICB9XHJcblxyXG4gIHJldHVybkRhdGFGb3JUaW1lUmFuZ2Uob2JqOiBhbnksIHNlbGVjdGVkRGF0YTogYW55KSB7XHJcbiAgICBsZXQgZm9ybWF0ID0gXCJISDptbTpzc1wiO1xyXG4gICAgbGV0IHNlbGVjdGVkU3RhcnREYXRlID0gZGF5anMoc2VsZWN0ZWREYXRhLnN0YXJ0VGltZSwgZm9ybWF0KTtcclxuICAgIGxldCBzZWxlY3RlZEVuZERhdGUgPSBkYXlqcyhzZWxlY3RlZERhdGEuZW5kVGltZSwgZm9ybWF0KTtcclxuICAgIGxldCBzdGFydFRpbWUgPSBkYXlqcyhvYmouc3RhcnRUaW1lLCBmb3JtYXQpO1xyXG4gICAgbGV0IGVuZFRpbWUgPSBkYXlqcyhvYmouZW5kVGltZSwgZm9ybWF0KTtcclxuXHJcbiAgICBsZXQgaXNTdGFydFRpbWVTYW1lQXNTZWxlY3RlZFN0YXJ0VGltZSA9IHN0YXJ0VGltZS5pc1NhbWUoc2VsZWN0ZWRTdGFydERhdGUpO1xyXG4gICAgbGV0IGlzU3RhcnRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lID0gc3RhcnRUaW1lLmlzQmV0d2VlbihzZWxlY3RlZFN0YXJ0RGF0ZSwgc2VsZWN0ZWRFbmREYXRlKTtcclxuICAgIGxldCBpc0VuZFRpbWVTYW1lQXNTZWxlY3RlZEVuZFRpbWUgPSBlbmRUaW1lLmlzU2FtZShzZWxlY3RlZEVuZERhdGUpO1xyXG4gICAgbGV0IGlzRW5kVGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSA9IGVuZFRpbWUuaXNCZXR3ZWVuKHNlbGVjdGVkU3RhcnREYXRlLCBzZWxlY3RlZEVuZERhdGUpO1xyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgIChpc1N0YXJ0VGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSAmJiBpc0VuZFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWUpIHx8XHJcbiAgICAgIChpc1N0YXJ0VGltZVNhbWVBc1NlbGVjdGVkU3RhcnRUaW1lICYmIGlzRW5kVGltZVNhbWVBc1NlbGVjdGVkRW5kVGltZSkgfHxcclxuICAgICAgKGlzU3RhcnRUaW1lU2FtZUFzU2VsZWN0ZWRTdGFydFRpbWUgJiYgaXNFbmRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lKSB8fFxyXG4gICAgICAoaXNTdGFydFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWUgJiYgaXNFbmRUaW1lU2FtZUFzU2VsZWN0ZWRFbmRUaW1lKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHJldHVybkRhdGFGb3JGcm9tQW5kVG9UaW1lUmFuZ2Uob2JqOiBhbnksIHNlbGVjdGVkRGF0YTogYW55LCBrZXk6IGFueSkge1xyXG4gICAgbGV0IGZvcm1hdCA9IFwiSEg6bW06c3NcIjtcclxuICAgIGxldCBzZWxlY3RlZEZyb21UaW1lID0gZGF5anMoc2VsZWN0ZWREYXRhLmZyb21UaW1lLCBmb3JtYXQpO1xyXG4gICAgbGV0IHNlbGVjdGVkVG9UaW1lID0gZGF5anMoc2VsZWN0ZWREYXRhLnRvVGltZSwgZm9ybWF0KTtcclxuICAgIGxldCBvYmpUaW1lID0gb2JqW2tleV07XHJcbiAgICBcclxuICAgIGlmIChbXCJcIiwgXCItXCIsIG51bGxdLmluY2x1ZGVzKG9ialRpbWUpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChzZWxlY3RlZERhdGEuaW5jbHVkZU11bHRpICYmIG9ialtrZXldID09IFwiPG11bHRpPlwiKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKCFzZWxlY3RlZERhdGEuaW5jbHVkZU11bHRpICYmIG9ialtrZXldID09IFwiPG11bHRpPlwiKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChzZWxlY3RlZERhdGEuaW5jbHVkZVplcm8gJiYgb2JqW2tleV0gPT0gXCIwXCIpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAoIXNlbGVjdGVkRGF0YS5pbmNsdWRlWmVybyAmJiBvYmpba2V5XSA9PSBcIjBcIikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoIXNlbGVjdGVkRGF0YS5pbmNsdWRlVGltZVJhbmdlKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgbGV0IGRheWpzVGltZSA9IGRheWpzKG9ialRpbWUsZm9ybWF0KTtcclxuICAgIFxyXG4gICAgbGV0IGlzT2JqVGltZVNhbWVBc1NlbGVjdGVkRnJvbVRpbWUgPSBkYXlqc1RpbWUuaXNTYW1lKHNlbGVjdGVkRnJvbVRpbWUpO1xyXG4gICAgbGV0IGlzT2JqVGltZVNhbWVBc1NlbGVjdGVkVG9UaW1lID0gZGF5anNUaW1lLmlzU2FtZShzZWxlY3RlZFRvVGltZSk7XHJcbiAgICBsZXQgaXNPYmpUaW1lQmV0d2VlblNlbGVjdGVkRnJvbVRpbWVBbmRUb1RpbWUgPSBkYXlqc1RpbWUuaXNCZXR3ZWVuKHNlbGVjdGVkRnJvbVRpbWUsIHNlbGVjdGVkVG9UaW1lKTtcclxuXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBpc09ialRpbWVTYW1lQXNTZWxlY3RlZEZyb21UaW1lIHx8XHJcbiAgICAgIGlzT2JqVGltZVNhbWVBc1NlbGVjdGVkVG9UaW1lIHx8XHJcbiAgICAgIGlzT2JqVGltZUJldHdlZW5TZWxlY3RlZEZyb21UaW1lQW5kVG9UaW1lXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuRGF0YUZvclN0YXJ0QW5kRW5kVGltZVJhbmdlKG9iajogYW55LCBzZWxlY3RlZERhdGE6YW55LCBrZXk6IHN0cmluZykge1xyXG4gICAgbGV0IGZvcm1hdCA9IFwiSEg6bW06c3NcIjtcclxuICAgIGxldCBzZWxlY3RlZEZyb21UaW1lID0gZGF5anMoc2VsZWN0ZWREYXRhLmZyb21UaW1lLCBmb3JtYXQpO1xyXG4gICAgbGV0IHNlbGVjdGVkVG9UaW1lID0gZGF5anMoc2VsZWN0ZWREYXRhLnRvVGltZSwgZm9ybWF0KTtcclxuICAgIFxyXG4gICAgaWYoc2VsZWN0ZWREYXRhLmluY2x1ZGVNdWx0aSAmJiBvYmpba2V5XVswXSA9PSBcIjxtdWx0aT5cIikge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBpZighc2VsZWN0ZWREYXRhLmluY2x1ZGVNdWx0aSAmJiBvYmpba2V5XVswXSA9PSBcIjxtdWx0aT5cIikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZihzZWxlY3RlZERhdGEuaW5jbHVkZVplcm8gJiYgb2JqW2tleV1bMF0gPT0gXCIwXCIpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZighc2VsZWN0ZWREYXRhLmluY2x1ZGVaZXJvICYmIG9ialtrZXldWzBdID09IFwiMFwiKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKCFzZWxlY3RlZERhdGEuaW5jbHVkZVRpbWVSYW5nZSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgbGV0IHN0YXJ0VGltZSA9IGRheWpzKG9ialtrZXldWzFdLCBmb3JtYXQpO1xyXG4gICAgbGV0IGVuZFRpbWUgPSBkYXlqcyhvYmpba2V5XVsyXSwgZm9ybWF0KTtcclxuXHJcbiAgICBsZXQgaXNTdGFydFRpbWVTYW1lQXNTZWxlY3RlZFN0YXJ0VGltZSA9IHN0YXJ0VGltZS5pc1NhbWUoc2VsZWN0ZWRGcm9tVGltZSk7XHJcbiAgICBsZXQgaXNTdGFydFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWUgPSBzdGFydFRpbWUuaXNCZXR3ZWVuKHNlbGVjdGVkRnJvbVRpbWUsIHNlbGVjdGVkVG9UaW1lKTtcclxuICAgIGxldCBpc0VuZFRpbWVTYW1lQXNTZWxlY3RlZEVuZFRpbWUgPSBlbmRUaW1lLmlzU2FtZShzZWxlY3RlZFRvVGltZSk7XHJcbiAgICBsZXQgaXNFbmRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lID0gZW5kVGltZS5pc0JldHdlZW4oc2VsZWN0ZWRGcm9tVGltZSwgc2VsZWN0ZWRUb1RpbWUpO1xyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgKGlzU3RhcnRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lICYmIGlzRW5kVGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSkgfHxcclxuICAgICAgICAoaXNTdGFydFRpbWVTYW1lQXNTZWxlY3RlZFN0YXJ0VGltZSAmJiBpc0VuZFRpbWVTYW1lQXNTZWxlY3RlZEVuZFRpbWUpIHx8XHJcbiAgICAgICAgKGlzU3RhcnRUaW1lU2FtZUFzU2VsZWN0ZWRTdGFydFRpbWUgJiYgaXNFbmRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lKSB8fFxyXG4gICAgICAgIChpc1N0YXJ0VGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSAmJiBpc0VuZFRpbWVTYW1lQXNTZWxlY3RlZEVuZFRpbWUpXHJcbiAgICApO1xyXG5cclxufVxyXG5cclxuICBnZXREYXRhSW5UaGVEYXRlUmFuZ2Uob2JqOiBhbnksIHZhbHVlOiBhbnksIGtleTogYW55KSB7XHJcbiAgICBsZXQgcGFyc2luZ0Zvcm1hdDogc3RyaW5nO1xyXG4gICAgaWYgKGtleSA9PT0gXCJwZXJpb2RcIikge1xyXG4gICAgICBwYXJzaW5nRm9ybWF0ID0gXCJZWVlZLU1NLUREXCI7XHJcbiAgICAgIFxyXG4gICAgICBsZXQgZGF5anNTdGFydERhdGUgPSBkYXlqcyhvYmouc3RhcnREYXRlKTtcclxuICAgICAgbGV0IGRheWpzRW5kRGF0ZSA9IGRheWpzKG9iai5lbmREYXRlKTtcclxuICAgICAgXHJcbiAgICAgIGxldCBzdGFydERhdGVJc0JldHdlZW5TZWxEYXRlID0gZGF5anNTdGFydERhdGUuaXNCZXR3ZWVuKFxyXG4gICAgICAgIHZhbHVlLmZyb21EYXRlLFxyXG4gICAgICAgIHZhbHVlLnRvRGF0ZVxyXG4gICAgICApO1xyXG4gICAgICBsZXQgZW5kRGF0ZUlzQmV0d2VlblNlbERhdGUgPSBkYXlqc0VuZERhdGUuaXNCZXR3ZWVuKFxyXG4gICAgICAgIHZhbHVlLmZyb21EYXRlLFxyXG4gICAgICAgIHZhbHVlLnRvRGF0ZVxyXG4gICAgICApO1xyXG4gICAgICBcclxuICAgICAgXHJcbiAgICAgIGxldCBzdGFydERhdGVJc1NhbWVBc1NlbFN0YXJ0RGF0ZSA9IHZhbHVlLmZyb21EYXRlLmlzU2FtZShkYXlqc1N0YXJ0RGF0ZSk7XHJcbiAgICAgIGxldCBlbmREYXRlSXNTYW1lQXNTZWxFbmREYXRlID0gdmFsdWUudG9EYXRlLmlzU2FtZShkYXlqc0VuZERhdGUpO1xyXG5cclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICAoc3RhcnREYXRlSXNCZXR3ZWVuU2VsRGF0ZSB8fCBzdGFydERhdGVJc1NhbWVBc1NlbFN0YXJ0RGF0ZSkgJiZcclxuICAgICAgICAoZW5kRGF0ZUlzQmV0d2VlblNlbERhdGUgfHwgZW5kRGF0ZUlzU2FtZUFzU2VsRW5kRGF0ZSlcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcIkFpckRhdGVcIiB8fCBrZXkgPT09IFwiZmxpZ2h0U3RhcnREYXRlXCIgfHwga2V5ID09PSBcImZsaWdodEVuZERhdGVcIikge1xyXG4gICAgICBwYXJzaW5nRm9ybWF0ID0gXCJNTS9ERC9ZWVlZXCI7XHJcbiAgICAgIGxldCBkYXRlSXNCZXR3ZWVuU2VsRGF0ZSA9IGRheWpzKG9ialtrZXldLCBwYXJzaW5nRm9ybWF0KS5pc0JldHdlZW4odmFsdWUubWluU2VsZWN0ZWREYXRlLCB2YWx1ZS5tYXhTZWxlY3RlZERhdGUpO1xyXG5cclxuICAgICAgbGV0IGRhdGVJc1NhbWVBc1NlbFN0YXJ0RGF0ZSA9IGRheWpzKG9ialtrZXldLCBwYXJzaW5nRm9ybWF0KS5pc1NhbWUodmFsdWUubWluU2VsZWN0ZWREYXRlKTtcclxuICAgICAgbGV0IGRhdGVJc1NhbWVBc1NlbEVuZERhdGUgPSBkYXlqcyhvYmpba2V5XSwgcGFyc2luZ0Zvcm1hdCkuaXNTYW1lKHZhbHVlLm1heFNlbGVjdGVkRGF0ZSk7XHJcblxyXG4gICAgICByZXR1cm4gZGF0ZUlzQmV0d2VlblNlbERhdGUgfHwgZGF0ZUlzU2FtZUFzU2VsU3RhcnREYXRlIHx8IGRhdGVJc1NhbWVBc1NlbEVuZERhdGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgcHVibGljIGluaXRpYWxpemVUaW1lRmlsdGVyRGF0YShjbG9uZWREYXRhOiBhbnlbXSwga2V5ID0gXCJzdGFydEVuZFRpbWVcIikge1xyXG4gICAgbGV0IHN0YXJ0VGltZUFyciA9IG1hcChjbG9uZWREYXRhLCBcInN0YXJ0VGltZVwiKTtcclxuICAgIGxldCBlbmRUaW1lQXJyID0gbWFwKGNsb25lZERhdGEsIFwiZW5kVGltZVwiKTtcclxuICBcclxuICAgIHN0YXJ0VGltZUFyci5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5zb3J0QnlUaW1lQXNjZW5kaW5nKGEsIGIpO1xyXG4gICAgfSk7XHJcbiAgXHJcbiAgICBlbmRUaW1lQXJyLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLnNvcnRCeVRpbWVEZXNjZW5kaW5nKGEsIGIpO1xyXG4gICAgfSk7XHJcbiAgXHJcbiAgICBsZXQgaW5pdGlhbFN0YXJ0RW5kVGltZSA9IHtcclxuICAgICAgICBzdGFydFRpbWU6IHN0YXJ0VGltZUFyclswXSxcclxuICAgICAgICBlbmRUaW1lOiBlbmRUaW1lQXJyWzBdLFxyXG4gICAgfTtcclxuICAgIHRoaXMuaW5pdGlhbFZhbHVlTWFwLnNldChrZXksIGluaXRpYWxTdGFydEVuZFRpbWUpO1xyXG4gIH0gXHJcblxyXG4gIHJldHVybkNvbHVtbkZpbHRlclN0YXR1cyhkYXRhOiBhbnlbXSwgaGVhZGVyTmFtZTogc3RyaW5nIHwgbnVtYmVyKSB7XHJcblxyXG4gICAgaWYoaGVhZGVyTmFtZSA9PSBcInN0YXJ0RW5kVGltZVwiKXtcclxuICAgICAgbGV0IHRpbWUgPSBkYXRhLm1hcCh1ID0+IHVbaGVhZGVyTmFtZV1bMF0pO1xyXG4gICAgICBsZXQgdW5pcVRpbWUgPSB1bmlxKHRpbWUpO1xyXG4gICAgICByZXR1cm4gdW5pcVRpbWUubGVuZ3RoID09IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHVuaXEoZGF0YS5tYXAoKHUpID0+IHVbaGVhZGVyTmFtZV0pKS5sZW5ndGggPiAxID8gZmFsc2UgOiB0cnVlO1xyXG4gIH1cclxuICBcclxuICBnZXRGaWx0ZXJPcHRpb25zRGF0YShkYXRhOiBhbnlbXSwgY2xvbmVkRGF0YTogYW55W10pe1xyXG4gICAgbGV0IGFwcGxpZWRGaWx0ZXJTZXQgPSBuZXcgU2V0KHRoaXMuYXBwbGllZEZpbHRlcnNBcnJheSk7XHJcbiAgICBpZihhcHBsaWVkRmlsdGVyU2V0Lmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKXtcclxuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyRGF0YShjbG9uZWREYXRhLCB0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgfVxyXG4gICAgZWxzZXtcclxuICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZU9yZGVyQXBwbGllZEZpbHRlcnNTdGF0ZShjbG9uZWREYXRhOiBhbnlbXSwgdmFsdWU6IGFueSl7XHJcbiAgICBsZXQgaXNGaWx0ZXJlZCA9IHRydWU7XHJcbiAgICBpc0ZpbHRlcmVkID0gdGhpcy5jaGVja0lmRmlsdGVySXNBcHBsaWVkKGNsb25lZERhdGEsdmFsdWUpO1xyXG4gICAgdGhpcy5yZW1vdmVPckNoYW5nZUxhdGVzdEZpbHRlckluZGV4KGlzRmlsdGVyZWQpO1xyXG4gICAgcmV0dXJuIGlzRmlsdGVyZWQ7XHJcbiAgfVxyXG5cclxuICBjaGVja0lmRmlsdGVySXNBcHBsaWVkKGNsb25lZERhdGE6IGFueVtdLHZhbHVlOiBhbnkpe1xyXG4gICAgbGV0IGluaXRpYWxWYWx1ZU9mQ29sdW1uID0gc29ydEJ5KGNsb25lZERhdGEubWFwKGl0ZW0gPT4gaXRlbVt0aGlzLnNlbGVjdGVkUmFkaW9dKSk7XHJcbiAgICBsZXQgY3VycmVudFZhbHVlT2ZDb2x1bW4gPSBzb3J0QnkodGhpcy5hcHBseUZpbHRlcihjbG9uZWREYXRhLHZhbHVlKS5tYXAoaXRlbSA9PiBpdGVtW3RoaXMuc2VsZWN0ZWRSYWRpb10pKTtcclxuICAgIHJldHVybiAhaXNFcXVhbChpbml0aWFsVmFsdWVPZkNvbHVtbiwgY3VycmVudFZhbHVlT2ZDb2x1bW4pO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlGaWx0ZXIoZGF0YTogYW55W10sdmFsdWU6IGFueSl7XHJcbiAgICBsZXQgZmlsdGVyZWREYXRhID0gZGF0YTtcclxuICAgIGxldCBrZXkgPSB0aGlzLnNlbGVjdGVkUmFkaW87XHJcbiAgICAgIGlmICh0aGlzLnNsaWRlclNldC5oYXMoa2V5KSkge1xyXG4gICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gb2JqW2tleV0gPj0gdmFsdWUubWluICYmIG9ialtrZXldIDw9IHZhbHVlLm1heCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcInN0YXJ0RGF0ZVwiIHx8IGtleSA9PT0gXCJlbmREYXRlXCIgfHwga2V5ID09PSBcIkFpckRhdGVcIiB8fCBrZXkgPT09IFwiZmxpZ2h0U3RhcnREYXRlXCIgfHwga2V5ID09PSBcImZsaWdodEVuZERhdGVcIiB8fCBrZXkgPT0gXCJkYXRlXCIgfHwga2V5ID09IFwicmV2aXNpb25TdGFydERhdGVcIikge1xyXG4gICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gdGhpcy5pc09iamVjdEluVGhlUmFuZ2Uob2JqLCB2YWx1ZSwga2V5KSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcInBlcmlvZFwiICkge1xyXG4gICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gdGhpcy5nZXREYXRhSW5UaGVEYXRlUmFuZ2Uob2JqLCB2YWx1ZSwga2V5KSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIlN0YXJ0VGltZUZvckZpbHRlclwiIHx8IGtleSA9PT0gXCJFbmRUaW1lRm9yRmlsdGVyXCJcclxuICAgICAgICB8fCBrZXkgPT09IFwic3RhcnRfdGltZV9mb3JfZmlsdGVyXCIgfHwga2V5ID09PSBcImVuZF90aW1lX2Zvcl9maWx0ZXJcIikge1xyXG4gICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gdGhpcy5yZXR1cm5EYXRhRm9yRnJvbUFuZFRvVGltZVJhbmdlKG9iaiwgdmFsdWUsIGtleSkpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJzdGFydEVuZFRpbWVNdWx0aVwiIHx8IGtleSA9PSBcInN0YXJ0RW5kVGltZVwiIHx8IGtleSA9PT0gXCJUaW1lQmFuZFwiKSB7XHJcbiAgICAgICAgZmlsdGVyZWREYXRhID0gZmlsdGVyZWREYXRhLmZpbHRlcigob2JqKSA9PiB0aGlzLnJldHVybkRhdGFGb3JTdGFydEFuZEVuZFRpbWVSYW5nZShvYmosIHZhbHVlLCBrZXkpKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgZmlsdGVyZWREYXRhID0gZmlsdGVyZWREYXRhLmZpbHRlcigodSkgPT4gdmFsdWUuaW5jbHVkZXModVtrZXldKSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZpbHRlcmVkRGF0YTsgIFxyXG4gIH1cclxuXHJcbiAgaXNPYmplY3RJblRoZVJhbmdlKG9iajogYW55LCB2YWx1ZToge2Zyb21EYXRlOiBkYXlqcy5EYXlqcywgdG9EYXRlOiBkYXlqcy5EYXlqc30sa2V5OnN0cmluZyl7XHJcbiAgICBsZXQgb2JqVmFsID0gb2JqW2tleV07XHJcbiAgICBsZXQgZGF5anNEYXRlID0gZGF5anMob2JqVmFsKTtcclxuICAgIGxldCBpc0RhdGVTYW1lQXNTdGFydE9mVGhlUmFuZ2UgPSB2YWx1ZS5mcm9tRGF0ZS5pc1NhbWUob2JqVmFsKTtcclxuICAgIGxldCBpc0RhdGVTYW1lQXNFbmRPZlRoZVJhbmdlID0gdmFsdWUudG9EYXRlLmlzU2FtZShvYmpWYWwpO1xyXG4gICAgbGV0IGlzRGF0ZUJldHdlZW5UaGVTdGFydEFuZEVuZE9mUmFuZ2UgPSBkYXlqc0RhdGUuaXNCZXR3ZWVuKHZhbHVlLmZyb21EYXRlLHZhbHVlLnRvRGF0ZSk7XHJcbiAgICByZXR1cm4gaXNEYXRlU2FtZUFzU3RhcnRPZlRoZVJhbmdlIHx8IGlzRGF0ZVNhbWVBc0VuZE9mVGhlUmFuZ2UgfHwgaXNEYXRlQmV0d2VlblRoZVN0YXJ0QW5kRW5kT2ZSYW5nZTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVN0YXRlT2ZUaGVDdXJyZW50RmlsdGVyVGFiKHNvcnRNYXA6IE1hcDxzdHJpbmcsIFNvcnRUeXBlPil7XHJcbiAgICBsZXQgYWN0aXZlS2V5ID0gdGhpcy5zZWxlY3RlZFJhZGlvO1xyXG4gICAgbGV0IGtleUFycjogc3RyaW5nW10gPSBbXTtcclxuICAgIE9iamVjdC5rZXlzKHRoaXMuaXNGaWx0ZXJTb3J0QWN0aXZlKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgIGlmKGtleS5pbmNsdWRlcyhhY3RpdmVLZXkpKXtcclxuICAgICAgICBrZXlBcnIgPSBrZXkuc3BsaXQoXCIsXCIpO1xyXG4gICAgICAgIHRoaXMuaXNGaWx0ZXJTb3J0QWN0aXZlW2tleV0gPSAgdGhpcy5pc1Rvb2x0aXBBY3RpdmUoa2V5QXJyLCBzb3J0TWFwKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgdXBkYXRlU3RhdGVPZkFsbFRoZUtleXMoc29ydE1hcDogTWFwPHN0cmluZywgU29ydFR5cGU+KXtcclxuICAgICBPYmplY3Qua2V5cyh0aGlzLmlzRmlsdGVyU29ydEFjdGl2ZSkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgbGV0IGtleUFyciA9IGtleS5zcGxpdChcIixcIik7XHJcbiAgICAgICB0aGlzLmlzRmlsdGVyU29ydEFjdGl2ZVtrZXldID0gdGhpcy5pc1Rvb2x0aXBBY3RpdmUoa2V5QXJyLHNvcnRNYXApO1xyXG4gICAgIH0pICAgICBcclxuICB9XHJcbiAgICBcclxufVxyXG4iXX0=
@@ -68,10 +68,10 @@ export class AnnaCalendarFilterComponent {
68
68
  }
69
69
  setInputText() {
70
70
  if (this.fromDate && this.toDate) {
71
- this.dateToBeShownInInput = `${this.annaTimeService.convertNgbDateToMoment(this.fromDate)} - ${this.annaTimeService.convertNgbDateToMoment(this.toDate)}`;
71
+ this.dateToBeShownInInput = `${this.annaTimeService.convertNgbDateToDayjs(this.fromDate)} - ${this.annaTimeService.convertNgbDateToDayjs(this.toDate)}`;
72
72
  }
73
73
  else if (this.fromDate) {
74
- this.dateToBeShownInInput = `${this.annaTimeService.convertNgbDateToMoment(this.fromDate)}`;
74
+ this.dateToBeShownInInput = `${this.annaTimeService.convertNgbDateToDayjs(this.fromDate)}`;
75
75
  }
76
76
  }
77
77
  }
@@ -97,4 +97,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
97
97
  }], cancel: [{
98
98
  type: Output
99
99
  }] } });
100
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS1jYWxlbmRhci1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5uYS1jb3JlL3NyYy9saWIvYW5uYS1kcm9wZG93bi1saWIvY29tcG9uZW50cy9hbm5hLWNhbGVuZGFyLWZpbHRlci9hbm5hLWNhbGVuZGFyLWZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbm5hLWNvcmUvc3JjL2xpYi9hbm5hLWRyb3Bkb3duLWxpYi9jb21wb25lbnRzL2FubmEtY2FsZW5kYXItZmlsdGVyL2FubmEtY2FsZW5kYXItZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRCQUE0QjtBQUM1QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFbEksK0JBQStCO0FBQy9CLE9BQU8sRUFBVyxtQkFBbUIsRUFBaUIsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxzRUFBc0UsQ0FBQzs7Ozs7QUFRakgsTUFBTSxPQUFPLDJCQUEyQjtJQWdCcEMsWUFBb0IsZUFBMEMsRUFDbEQsZ0JBQXFDO1FBRDdCLG9CQUFlLEdBQWYsZUFBZSxDQUEyQjtRQUNsRCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXFCO1FBWnZDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUdsQyxVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMzQixXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUl0QyxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUNqQyx5QkFBb0IsR0FBVyxFQUFFLENBQUM7SUFHa0IsQ0FBQztJQUdyRCxXQUFXLENBQUMsT0FBc0I7UUFDOUIs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QUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxZQUFZO1FBRVIsSUFBRyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUM7WUFDNUIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztTQUM3SjthQUNJLElBQUcsSUFBSSxDQUFDLFFBQVEsRUFBQztZQUNsQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1NBRS9GO0lBRUwsQ0FBQzs7d0hBMUZRLDJCQUEyQjs0R0FBM0IsMkJBQTJCLG1UQ2J4QyxveURBOENBOzJGRGpDYSwyQkFBMkI7a0JBTnZDLFNBQVM7K0JBQ0ksK0JBQStCLG1CQUd4Qix1QkFBdUIsQ0FBQyxNQUFNO2tKQUl0QyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDSSxZQUFZO3NCQUFyQixNQUFNO2dCQUNFLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNJLEtBQUs7c0JBQWQsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyIGltcG9ydCBzdGF0ZW1lbnRzXHJcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLy9UaGlyZCBwYXJ0eSBpbXBvcnQgc3RhdGVtZW50c1xyXG5pbXBvcnQgeyBOZ2JEYXRlLCBOZ2JEYXRlcGlja2VyQ29uZmlnLCBOZ2JEYXRlU3RydWN0IH0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcbmltcG9ydCB7IEFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9zZXJ2aWNlcy9hbm5hLWRhdGUtdGltZS1mb3JtYXQuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBcImFubmEtY29yZS1jYWxlbmRhci1maWx0ZXItbGliXCIsXHJcbiAgICB0ZW1wbGF0ZVVybDogXCIuL2FubmEtY2FsZW5kYXItZmlsdGVyLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgICBzdHlsZVVybHM6IFtcIi4vYW5uYS1jYWxlbmRhci1maWx0ZXIuY29tcG9uZW50LnNjc3NcIl0sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFubmFDYWxlbmRhckZpbHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCxPbkNoYW5nZXMge1xyXG4gICAgXHJcbiAgICBASW5wdXQoKSBtYXhEYXRlOiBhbnk7XHJcbiAgICBASW5wdXQoKSBsYWJlbDogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgbWluRGF0ZTogYW55O1xyXG4gICAgQE91dHB1dCgpIHNlbGVjdGVkRGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBJbnB1dCgpIHNlbGVjdGVkRnJvbURhdGU6IGFueTtcclxuICAgIEBJbnB1dCgpIHNlbGVjdGVkVG9EYXRlOiBhbnk7XHJcbiAgICBAT3V0cHV0KCkgYXBwbHkgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgY2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgZnJvbURhdGU6IGFueTtcclxuICAgIHRvRGF0ZTogYW55O1xyXG4gICAgaG92ZXJlZERhdGU6IGFueTtcclxuICAgIGRpc2FibGVBcHBseUJ0bjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgZGF0ZVRvQmVTaG93bkluSW5wdXQ6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBhbm5hVGltZVNlcnZpY2U6IEFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBkYXRlUGlja2VyQ29uZmlnOiBOZ2JEYXRlcGlja2VyQ29uZmlnKSB7fVxyXG4gICAgXHJcbiAgICBcclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZyb21EYXRlID0gdGhpcy5zZWxlY3RlZEZyb21EYXRlO1xyXG4gICAgICAgIHRoaXMudG9EYXRlID0gdGhpcy5zZWxlY3RlZFRvRGF0ZTtcclxuICAgICAgICB0aGlzLnNldElucHV0VGV4dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIC8vIHRoaXMuZnJvbURhdGUgPSB0aGlzLnNlbGVjdGVkRnJvbURhdGU7XHJcbiAgICAgICAgLy8gdGhpcy50b0RhdGUgPSB0aGlzLnNlbGVjdGVkVG9EYXRlO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuZGF0ZVBpY2tlckNvbmZpZy5tYXJrRGlzYWJsZWQgPSAoZGF0ZTogTmdiRGF0ZVN0cnVjdCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLy8gdGhpcy5zZXRJbnB1dFRleHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkRhdGVTZWxlY3Rpb24oZGF0ZTogTmdiRGF0ZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5mcm9tRGF0ZSAmJiAhdGhpcy50b0RhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5mcm9tRGF0ZSA9IGRhdGU7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZyb21EYXRlICYmICF0aGlzLnRvRGF0ZSAmJiAoZGF0ZS5hZnRlcih0aGlzLmZyb21EYXRlKSB8fCBkYXRlLmVxdWFscyh0aGlzLmZyb21EYXRlKSkpIHtcclxuICAgICAgICAgICAgdGhpcy50b0RhdGUgPSBkYXRlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9EYXRlID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5mcm9tRGF0ZSA9IGRhdGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlLmVtaXQoeyBmcm9tRGF0ZTogdGhpcy5mcm9tRGF0ZSwgdG9EYXRlOiB0aGlzLnRvRGF0ZSB9KTtcclxuICAgICAgICB0aGlzLmRpc2FibGVDYWxlbmRhckFwcGx5QnRuKCk7XHJcbiAgICAgICAgdGhpcy5zZXRJbnB1dFRleHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBpc0hvdmVyZWQoZGF0ZTogTmdiRGF0ZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZyb21EYXRlICYmICF0aGlzLnRvRGF0ZSAmJiB0aGlzLmhvdmVyZWREYXRlICYmIGRhdGUuYWZ0ZXIodGhpcy5mcm9tRGF0ZSkgJiYgZGF0ZS5iZWZvcmUodGhpcy5ob3ZlcmVkRGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNJbnNpZGUoZGF0ZTogTmdiRGF0ZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRvRGF0ZSAmJiBkYXRlLmFmdGVyKHRoaXMuZnJvbURhdGUpICYmIGRhdGUuYmVmb3JlKHRoaXMudG9EYXRlKTtcclxuICAgIH1cclxuXHJcbiAgICBpc1JhbmdlKGRhdGU6IE5nYkRhdGUpIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBkYXRlLmVxdWFscyh0aGlzLmZyb21EYXRlKSB8fCAodGhpcy50b0RhdGUgJiYgZGF0ZS5lcXVhbHModGhpcy50b0RhdGUpKSB8fCB0aGlzLmlzSW5zaWRlKGRhdGUpIHx8IHRoaXMuaXNIb3ZlcmVkKGRhdGUpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjYW5jZWxTZWxlY3Rpb24oKSB7XHJcbiAgICAgICAgdGhpcy5jYW5jZWwuZW1pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFwcGx5U2VsZWN0aW9uKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmZyb21EYXRlICYmIHRoaXMudG9EYXRlKSB7XHJcbiAgICAgICAgICAgIGxldCBkYXRlT2JqID0geyBmcm9tRGF0ZTogdGhpcy5mcm9tRGF0ZSwgdG9EYXRlOiB0aGlzLnRvRGF0ZSB9O1xyXG4gICAgICAgICAgICB0aGlzLmFwcGx5LmVtaXQoZGF0ZU9iaik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVDYWxlbmRhckFwcGx5QnRuKCkge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZUFwcGx5QnRuID0gISh0aGlzLmZyb21EYXRlICYmIHRoaXMudG9EYXRlKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJbnB1dFRleHQoKXtcclxuXHJcbiAgICAgICAgaWYodGhpcy5mcm9tRGF0ZSAmJiB0aGlzLnRvRGF0ZSl7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRvQmVTaG93bkluSW5wdXQgPSBgJHt0aGlzLmFubmFUaW1lU2VydmljZS5jb252ZXJ0TmdiRGF0ZVRvTW9tZW50KHRoaXMuZnJvbURhdGUpfSAtICR7dGhpcy5hbm5hVGltZVNlcnZpY2UuY29udmVydE5nYkRhdGVUb01vbWVudCh0aGlzLnRvRGF0ZSl9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZih0aGlzLmZyb21EYXRlKXtcclxuICAgICAgICAgICAgdGhpcy5kYXRlVG9CZVNob3duSW5JbnB1dCA9IGAke3RoaXMuYW5uYVRpbWVTZXJ2aWNlLmNvbnZlcnROZ2JEYXRlVG9Nb21lbnQodGhpcy5mcm9tRGF0ZSl9YDtcclxuICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcbiAgICBcclxufVxyXG4iLCI8IS0tIGNvbnRhaW5lcj1cImJvZHlcIlxyXG5kYXRlcGlja2VyQ2xhc3MgPSBcImNhbGVuZGFyLWZpbHRlclwiIC0tPlxyXG4gICAgICAgICAgICAgICAgIFxyXG48cCBjbGFzcz1cImNhbGVuZGFyLWxhYmVsXCI+e3tsYWJlbH19PC9wPlxyXG48Zm9ybT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImRwLWhpZGRlbiBwb3NpdGlvbi1hYnNvbHV0ZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxyXG4gICAgICAgICAgPGlucHV0IG5hbWU9XCJkYXRlcGlja2VyXCJcclxuICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgbmdiRGF0ZXBpY2tlclxyXG4gICAgICAgICAgICAgICAgICNkYXRlcGlja2VyPVwibmdiRGF0ZXBpY2tlclwiXHJcbiAgICAgICAgICAgICAgICAgKGRhdGVTZWxlY3QpPVwib25EYXRlU2VsZWN0aW9uKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgIFtkaXNwbGF5TW9udGhzXT1cIjFcIlxyXG4gICAgICAgICAgICAgICAgIFtkYXlUZW1wbGF0ZV09XCJ0XCJcclxuICAgICAgICAgICAgICAgICBbbWF4RGF0ZV09XCJtYXhEYXRlXCJcclxuICAgICAgICAgICAgICAgICBbbWluRGF0ZV09XCJtaW5EYXRlXCJcclxuICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cIidvdXRzaWRlJ1wiXHJcbiAgICAgICAgICAgICAgICAgW3N0YXJ0RGF0ZV09XCJmcm9tRGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgbmF2aWdhdGlvbj1cInNlbGVjdFwiXHJcbiAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICN0IGxldC1kYXRlIGxldC1mb2N1c2VkPVwiZm9jdXNlZFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kYXlcIlxyXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuZm9jdXNlZF09XCJmb2N1c2VkXCJcclxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnJhbmdlXT1cImlzUmFuZ2UoZGF0ZSlcIlxyXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuZmFkZWRdPVwiaXNIb3ZlcmVkKGRhdGUpIHx8IGlzSW5zaWRlKGRhdGUpXCJcclxuICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiaG92ZXJlZERhdGUgPSBkYXRlXCJcclxuICAgICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwiaG92ZXJlZERhdGUgPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAge3sgZGF0ZS5kYXkgfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxyXG4gICAgICAgIDxpbnB1dCAjZHBGcm9tRGF0ZVxyXG4gICAgICAgICAgICAgICBpZCA9IFwiZGF0ZXBpY2tlci1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcGxhY2Vob2xkZXI9XCJtbS9kZC95eXl5XCJcclxuICAgICAgICAgICAgICAgcmVhZG9ubHlcclxuICAgICAgICAgICAgICAgbmFtZT1cImRwRnJvbURhdGVcIlxyXG4gICAgICAgICAgICAgICBbdmFsdWVdPVwiZGF0ZVRvQmVTaG93bkluSW5wdXRcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1jb250YWluZXJcIiAoY2xpY2spPVwiZGF0ZXBpY2tlci50b2dnbGUoKVwiIHR5cGU9XCJidXR0b25cIj48aSBjbGFzcz1cIm1kaSBtZGktY2FsZW5kYXItcmFuZ2VcIj48L2k+PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZm9ybT5cclxuXHJcbiJdfQ==
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS1jYWxlbmRhci1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5uYS1jb3JlL3NyYy9saWIvYW5uYS1kcm9wZG93bi1saWIvY29tcG9uZW50cy9hbm5hLWNhbGVuZGFyLWZpbHRlci9hbm5hLWNhbGVuZGFyLWZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbm5hLWNvcmUvc3JjL2xpYi9hbm5hLWRyb3Bkb3duLWxpYi9jb21wb25lbnRzL2FubmEtY2FsZW5kYXItZmlsdGVyL2FubmEtY2FsZW5kYXItZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRCQUE0QjtBQUM1QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFbEksK0JBQStCO0FBQy9CLE9BQU8sRUFBVyxtQkFBbUIsRUFBaUIsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxzRUFBc0UsQ0FBQzs7Ozs7QUFRakgsTUFBTSxPQUFPLDJCQUEyQjtJQWdCcEMsWUFBb0IsZUFBMEMsRUFDbEQsZ0JBQXFDO1FBRDdCLG9CQUFlLEdBQWYsZUFBZSxDQUEyQjtRQUNsRCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXFCO1FBWnZDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUdsQyxVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMzQixXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUl0QyxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUNqQyx5QkFBb0IsR0FBVyxFQUFFLENBQUM7SUFHa0IsQ0FBQztJQUdyRCxXQUFXLENBQUMsT0FBc0I7UUFDOUIs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QUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxZQUFZO1FBRVIsSUFBRyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUM7WUFDNUIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztTQUMzSjthQUNJLElBQUcsSUFBSSxDQUFDLFFBQVEsRUFBQztZQUNsQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1NBRTlGO0lBRUwsQ0FBQzs7d0hBMUZRLDJCQUEyQjs0R0FBM0IsMkJBQTJCLG1UQ2J4QyxveURBOENBOzJGRGpDYSwyQkFBMkI7a0JBTnZDLFNBQVM7K0JBQ0ksK0JBQStCLG1CQUd4Qix1QkFBdUIsQ0FBQyxNQUFNO2tKQUl0QyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDSSxZQUFZO3NCQUFyQixNQUFNO2dCQUNFLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNJLEtBQUs7c0JBQWQsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyIGltcG9ydCBzdGF0ZW1lbnRzXHJcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLy9UaGlyZCBwYXJ0eSBpbXBvcnQgc3RhdGVtZW50c1xyXG5pbXBvcnQgeyBOZ2JEYXRlLCBOZ2JEYXRlcGlja2VyQ29uZmlnLCBOZ2JEYXRlU3RydWN0IH0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcbmltcG9ydCB7IEFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9zZXJ2aWNlcy9hbm5hLWRhdGUtdGltZS1mb3JtYXQuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBcImFubmEtY29yZS1jYWxlbmRhci1maWx0ZXItbGliXCIsXHJcbiAgICB0ZW1wbGF0ZVVybDogXCIuL2FubmEtY2FsZW5kYXItZmlsdGVyLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgICBzdHlsZVVybHM6IFtcIi4vYW5uYS1jYWxlbmRhci1maWx0ZXIuY29tcG9uZW50LnNjc3NcIl0sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFubmFDYWxlbmRhckZpbHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCxPbkNoYW5nZXMge1xyXG4gICAgXHJcbiAgICBASW5wdXQoKSBtYXhEYXRlOiBhbnk7XHJcbiAgICBASW5wdXQoKSBsYWJlbDogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgbWluRGF0ZTogYW55O1xyXG4gICAgQE91dHB1dCgpIHNlbGVjdGVkRGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBJbnB1dCgpIHNlbGVjdGVkRnJvbURhdGU6IGFueTtcclxuICAgIEBJbnB1dCgpIHNlbGVjdGVkVG9EYXRlOiBhbnk7XHJcbiAgICBAT3V0cHV0KCkgYXBwbHkgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgY2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgZnJvbURhdGU6IGFueTtcclxuICAgIHRvRGF0ZTogYW55O1xyXG4gICAgaG92ZXJlZERhdGU6IGFueTtcclxuICAgIGRpc2FibGVBcHBseUJ0bjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgZGF0ZVRvQmVTaG93bkluSW5wdXQ6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBhbm5hVGltZVNlcnZpY2U6IEFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBkYXRlUGlja2VyQ29uZmlnOiBOZ2JEYXRlcGlja2VyQ29uZmlnKSB7fVxyXG4gICAgXHJcbiAgICBcclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZyb21EYXRlID0gdGhpcy5zZWxlY3RlZEZyb21EYXRlO1xyXG4gICAgICAgIHRoaXMudG9EYXRlID0gdGhpcy5zZWxlY3RlZFRvRGF0ZTtcclxuICAgICAgICB0aGlzLnNldElucHV0VGV4dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIC8vIHRoaXMuZnJvbURhdGUgPSB0aGlzLnNlbGVjdGVkRnJvbURhdGU7XHJcbiAgICAgICAgLy8gdGhpcy50b0RhdGUgPSB0aGlzLnNlbGVjdGVkVG9EYXRlO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuZGF0ZVBpY2tlckNvbmZpZy5tYXJrRGlzYWJsZWQgPSAoZGF0ZTogTmdiRGF0ZVN0cnVjdCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLy8gdGhpcy5zZXRJbnB1dFRleHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkRhdGVTZWxlY3Rpb24oZGF0ZTogTmdiRGF0ZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5mcm9tRGF0ZSAmJiAhdGhpcy50b0RhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5mcm9tRGF0ZSA9IGRhdGU7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZyb21EYXRlICYmICF0aGlzLnRvRGF0ZSAmJiAoZGF0ZS5hZnRlcih0aGlzLmZyb21EYXRlKSB8fCBkYXRlLmVxdWFscyh0aGlzLmZyb21EYXRlKSkpIHtcclxuICAgICAgICAgICAgdGhpcy50b0RhdGUgPSBkYXRlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9EYXRlID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5mcm9tRGF0ZSA9IGRhdGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlLmVtaXQoeyBmcm9tRGF0ZTogdGhpcy5mcm9tRGF0ZSwgdG9EYXRlOiB0aGlzLnRvRGF0ZSB9KTtcclxuICAgICAgICB0aGlzLmRpc2FibGVDYWxlbmRhckFwcGx5QnRuKCk7XHJcbiAgICAgICAgdGhpcy5zZXRJbnB1dFRleHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBpc0hvdmVyZWQoZGF0ZTogTmdiRGF0ZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZyb21EYXRlICYmICF0aGlzLnRvRGF0ZSAmJiB0aGlzLmhvdmVyZWREYXRlICYmIGRhdGUuYWZ0ZXIodGhpcy5mcm9tRGF0ZSkgJiYgZGF0ZS5iZWZvcmUodGhpcy5ob3ZlcmVkRGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNJbnNpZGUoZGF0ZTogTmdiRGF0ZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRvRGF0ZSAmJiBkYXRlLmFmdGVyKHRoaXMuZnJvbURhdGUpICYmIGRhdGUuYmVmb3JlKHRoaXMudG9EYXRlKTtcclxuICAgIH1cclxuXHJcbiAgICBpc1JhbmdlKGRhdGU6IE5nYkRhdGUpIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBkYXRlLmVxdWFscyh0aGlzLmZyb21EYXRlKSB8fCAodGhpcy50b0RhdGUgJiYgZGF0ZS5lcXVhbHModGhpcy50b0RhdGUpKSB8fCB0aGlzLmlzSW5zaWRlKGRhdGUpIHx8IHRoaXMuaXNIb3ZlcmVkKGRhdGUpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjYW5jZWxTZWxlY3Rpb24oKSB7XHJcbiAgICAgICAgdGhpcy5jYW5jZWwuZW1pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFwcGx5U2VsZWN0aW9uKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmZyb21EYXRlICYmIHRoaXMudG9EYXRlKSB7XHJcbiAgICAgICAgICAgIGxldCBkYXRlT2JqID0geyBmcm9tRGF0ZTogdGhpcy5mcm9tRGF0ZSwgdG9EYXRlOiB0aGlzLnRvRGF0ZSB9O1xyXG4gICAgICAgICAgICB0aGlzLmFwcGx5LmVtaXQoZGF0ZU9iaik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVDYWxlbmRhckFwcGx5QnRuKCkge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZUFwcGx5QnRuID0gISh0aGlzLmZyb21EYXRlICYmIHRoaXMudG9EYXRlKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJbnB1dFRleHQoKXtcclxuXHJcbiAgICAgICAgaWYodGhpcy5mcm9tRGF0ZSAmJiB0aGlzLnRvRGF0ZSl7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRvQmVTaG93bkluSW5wdXQgPSBgJHt0aGlzLmFubmFUaW1lU2VydmljZS5jb252ZXJ0TmdiRGF0ZVRvRGF5anModGhpcy5mcm9tRGF0ZSl9IC0gJHt0aGlzLmFubmFUaW1lU2VydmljZS5jb252ZXJ0TmdiRGF0ZVRvRGF5anModGhpcy50b0RhdGUpfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYodGhpcy5mcm9tRGF0ZSl7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRvQmVTaG93bkluSW5wdXQgPSBgJHt0aGlzLmFubmFUaW1lU2VydmljZS5jb252ZXJ0TmdiRGF0ZVRvRGF5anModGhpcy5mcm9tRGF0ZSl9YDtcclxuICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcbiAgICBcclxufVxyXG4iLCI8IS0tIGNvbnRhaW5lcj1cImJvZHlcIlxyXG5kYXRlcGlja2VyQ2xhc3MgPSBcImNhbGVuZGFyLWZpbHRlclwiIC0tPlxyXG4gICAgICAgICAgICAgICAgIFxyXG48cCBjbGFzcz1cImNhbGVuZGFyLWxhYmVsXCI+e3tsYWJlbH19PC9wPlxyXG48Zm9ybT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImRwLWhpZGRlbiBwb3NpdGlvbi1hYnNvbHV0ZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxyXG4gICAgICAgICAgPGlucHV0IG5hbWU9XCJkYXRlcGlja2VyXCJcclxuICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgbmdiRGF0ZXBpY2tlclxyXG4gICAgICAgICAgICAgICAgICNkYXRlcGlja2VyPVwibmdiRGF0ZXBpY2tlclwiXHJcbiAgICAgICAgICAgICAgICAgKGRhdGVTZWxlY3QpPVwib25EYXRlU2VsZWN0aW9uKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgIFtkaXNwbGF5TW9udGhzXT1cIjFcIlxyXG4gICAgICAgICAgICAgICAgIFtkYXlUZW1wbGF0ZV09XCJ0XCJcclxuICAgICAgICAgICAgICAgICBbbWF4RGF0ZV09XCJtYXhEYXRlXCJcclxuICAgICAgICAgICAgICAgICBbbWluRGF0ZV09XCJtaW5EYXRlXCJcclxuICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cIidvdXRzaWRlJ1wiXHJcbiAgICAgICAgICAgICAgICAgW3N0YXJ0RGF0ZV09XCJmcm9tRGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgbmF2aWdhdGlvbj1cInNlbGVjdFwiXHJcbiAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICN0IGxldC1kYXRlIGxldC1mb2N1c2VkPVwiZm9jdXNlZFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1kYXlcIlxyXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuZm9jdXNlZF09XCJmb2N1c2VkXCJcclxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnJhbmdlXT1cImlzUmFuZ2UoZGF0ZSlcIlxyXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuZmFkZWRdPVwiaXNIb3ZlcmVkKGRhdGUpIHx8IGlzSW5zaWRlKGRhdGUpXCJcclxuICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiaG92ZXJlZERhdGUgPSBkYXRlXCJcclxuICAgICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwiaG92ZXJlZERhdGUgPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAge3sgZGF0ZS5kYXkgfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxyXG4gICAgICAgIDxpbnB1dCAjZHBGcm9tRGF0ZVxyXG4gICAgICAgICAgICAgICBpZCA9IFwiZGF0ZXBpY2tlci1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcGxhY2Vob2xkZXI9XCJtbS9kZC95eXl5XCJcclxuICAgICAgICAgICAgICAgcmVhZG9ubHlcclxuICAgICAgICAgICAgICAgbmFtZT1cImRwRnJvbURhdGVcIlxyXG4gICAgICAgICAgICAgICBbdmFsdWVdPVwiZGF0ZVRvQmVTaG93bkluSW5wdXRcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1jb250YWluZXJcIiAoY2xpY2spPVwiZGF0ZXBpY2tlci50b2dnbGUoKVwiIHR5cGU9XCJidXR0b25cIj48aSBjbGFzcz1cIm1kaSBtZGktY2FsZW5kYXItcmFuZ2VcIj48L2k+PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZm9ybT5cclxuXHJcbiJdfQ==