@c8y/ngx-components 1021.55.2 → 1021.55.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/core/common/interval-based-reload.abstract.d.ts +13 -3
  2. package/core/common/interval-based-reload.abstract.d.ts.map +1 -1
  3. package/core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.d.ts +3 -4
  4. package/core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.d.ts.map +1 -1
  5. package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.component.d.ts +1 -0
  6. package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.component.d.ts.map +1 -1
  7. package/core/dashboard/widgets-dashboard-event.service.d.ts +7 -0
  8. package/core/dashboard/widgets-dashboard-event.service.d.ts.map +1 -1
  9. package/core/dashboard/wiget-time-context/widget-time-context.component.d.ts +6 -2
  10. package/core/dashboard/wiget-time-context/widget-time-context.component.d.ts.map +1 -1
  11. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.d.ts.map +1 -1
  12. package/datapoints-export-selector/datapoints-export-selector.component.d.ts +3 -1
  13. package/datapoints-export-selector/datapoints-export-selector.component.d.ts.map +1 -1
  14. package/esm2022/core/aggregation/aggregation.model.mjs +2 -2
  15. package/esm2022/core/common/interval-based-reload.abstract.mjs +13 -13
  16. package/esm2022/core/dashboard/dashboard-child.component.mjs +3 -3
  17. package/esm2022/core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.mjs +6 -8
  18. package/esm2022/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.component.mjs +9 -1
  19. package/esm2022/core/dashboard/widgets-dashboard-event.service.mjs +19 -2
  20. package/esm2022/core/dashboard/widgets-dashboard.component.mjs +3 -3
  21. package/esm2022/core/dashboard/wiget-time-context/widget-time-context-icon-bar/widget-time-context-icon-bar.component.mjs +3 -3
  22. package/esm2022/core/dashboard/wiget-time-context/widget-time-context.component.mjs +48 -23
  23. package/esm2022/datapoint-explorer/view/datapoint-explorer.component.mjs +2 -2
  24. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.mjs +1 -3
  25. package/esm2022/datapoints-export-selector/datapoints-export-selector.component.mjs +9 -5
  26. package/esm2022/widgets/definitions/datapoints-table/index.mjs +3 -2
  27. package/esm2022/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.mjs +3 -3
  28. package/esm2022/widgets/implementations/alarms/alarm-widget-alarms-reload.component.mjs +17 -100
  29. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.mjs +47 -34
  30. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.mjs +35 -13
  31. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/datapoints-table.component.mjs +3 -3
  32. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.mjs +75 -35
  33. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-widget.model.mjs +3 -5
  34. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs +1 -1
  35. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -1
  36. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +7 -6
  37. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -1
  38. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs +2 -1
  39. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs.map +1 -1
  40. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +18 -101
  41. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
  42. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +147 -76
  43. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
  44. package/fesm2022/c8y-ngx-components.mjs +209 -162
  45. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  46. package/locales/locales.pot +3 -4
  47. package/package.json +1 -1
  48. package/widgets/definitions/datapoints-table/index.d.ts.map +1 -1
  49. package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts +18 -63
  50. package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts.map +1 -1
  51. package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.d.ts +4 -2
  52. package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.d.ts.map +1 -1
  53. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts +16 -8
  54. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts.map +1 -1
  55. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.d.ts +21 -4
  56. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.d.ts.map +1 -1
  57. package/widgets/implementations/datapoints-table/datapoints-table-widget.model.d.ts +4 -1
  58. package/widgets/implementations/datapoints-table/datapoints-table-widget.model.d.ts.map +1 -1
@@ -1,34 +1,34 @@
1
+ import { NgClass, NgIf, NgTemplateOutlet } from '@angular/common';
1
2
  import { Component, effect, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
3
  import { FormBuilder, FormsModule, ReactiveFormsModule } from '@angular/forms';
3
4
  import { ActivationEnd, NavigationEnd, NavigationStart, Router } from '@angular/router';
4
5
  import { aggregationType } from '@c8y/client';
6
+ import { INTERVAL_TITLES, IntervalPickerComponent } from '@c8y/ngx-components/interval-picker';
5
7
  import { BsDropdownDirective, BsDropdownModule } from 'ngx-bootstrap/dropdown';
8
+ import { TooltipModule } from 'ngx-bootstrap/tooltip';
6
9
  import { interval, Subject } from 'rxjs';
7
- import { filter, takeUntil } from 'rxjs/operators';
10
+ import { filter, takeUntil, tap } from 'rxjs/operators';
8
11
  import { ActionBarService } from '../../action-bar';
12
+ import { ActionBarItemComponent } from '../../action-bar/action-bar-item.component';
9
13
  import { AGGREGATION_LIMITS } from '../../aggregation/aggregation.model';
10
14
  import { AggregationService } from '../../aggregation/aggregation.service';
15
+ import { DatePipe } from '../../common/date.pipe';
16
+ import { IconDirective } from '../../common/icon.directive';
17
+ import { DateTimePickerComponent } from '../../date-time-picker';
18
+ import { FormGroupComponent } from '../../forms/form-group.component';
19
+ import { MessageDirective } from '../../forms/message.directive';
20
+ import { MessagesComponent } from '../../forms/messages.component';
11
21
  import { gettext } from '../../i18n';
22
+ import { C8yTranslateDirective } from '../../i18n/c8y-translate.directive';
23
+ import { C8yTranslatePipe } from '../../i18n/c8y-translate.pipe';
12
24
  import { DashboardChildActionComponent } from '../dashboard-child-action.component';
13
25
  import { DashboardChildComponent } from '../dashboard-child.component';
14
26
  import { WidgetsDashboardEventService } from '../widgets-dashboard-event.service';
27
+ import { AggregationPickerComponent } from './aggregation-picker/aggregation-picker.component';
28
+ import { RealtimeControlComponent } from './realtime-control/realtime-control.component';
29
+ import { WidgetTimeContextDateRangeService } from './widget-time-context-date-range.service';
15
30
  import { WidgetTimeContextHelperService } from './widget-time-context-helper.service';
16
31
  import { WidgetTimeContextQueryService } from './widget-time-context-query.service';
17
- import { INTERVAL_TITLES, IntervalPickerComponent } from '@c8y/ngx-components/interval-picker';
18
- import { WidgetTimeContextDateRangeService } from './widget-time-context-date-range.service';
19
- import { NgIf, NgTemplateOutlet, NgClass } from '@angular/common';
20
- import { ActionBarItemComponent } from '../../action-bar/action-bar-item.component';
21
- import { TooltipModule } from 'ngx-bootstrap/tooltip';
22
- import { IconDirective } from '../../common/icon.directive';
23
- import { FormGroupComponent } from '../../forms/form-group.component';
24
- import { C8yTranslateDirective } from '../../i18n/c8y-translate.directive';
25
- import { MessagesComponent } from '../../forms/messages.component';
26
- import { MessageDirective } from '../../forms/message.directive';
27
- import { RealtimeControlComponent } from './realtime-control/realtime-control.component';
28
- import { AggregationPickerComponent } from './aggregation-picker/aggregation-picker.component';
29
- import { C8yTranslatePipe } from '../../i18n/c8y-translate.pipe';
30
- import { DatePipe } from '../../common/date.pipe';
31
- import { DateTimePickerComponent } from '../../date-time-picker';
32
32
  import * as i0 from "@angular/core";
33
33
  import * as i1 from "../widgets-dashboard-event.service";
34
34
  import * as i2 from "../dashboard-child.component";
@@ -116,6 +116,16 @@ export class WidgetTimeContextComponent {
116
116
  this.subscribeToIntervalChange();
117
117
  this.subscribeToRealtimeChange();
118
118
  this.subscribeToAggregationChange();
119
+ this.widgetEventService.onAutoRefresh$
120
+ .pipe(takeUntil(this.destroy$), tap(autoRefresh => (this.isAutoRefreshEnabled = autoRefresh)))
121
+ .subscribe(autoRefresh => {
122
+ // Fix for:
123
+ // 1. Make a group with dashboard having a widget with with auto-refresh time context enabled.
124
+ // 2. When you route to e.g. home page and back to the group dashboard, none of a groups will be routable again.
125
+ queueMicrotask(() => {
126
+ autoRefresh ? this.onDisableAutoRefresh() : this.enableDateRangeAndAggregation();
127
+ });
128
+ });
119
129
  if (initialContext.realtime) {
120
130
  this.onRealtimeValueChange(initialContext.realtime);
121
131
  this.startRealtime();
@@ -179,6 +189,8 @@ export class WidgetTimeContextComponent {
179
189
  ngOnDestroy() {
180
190
  this.unsubscribeFromGlobalContext();
181
191
  this.clearQueryParamsIfNeeded();
192
+ this.widgetEventService.setRealtimeTimeContextSetting();
193
+ this.widgetEventService.emitAutoRefresh(false);
182
194
  this.destroy$.next();
183
195
  this.destroy$.complete();
184
196
  }
@@ -393,9 +405,7 @@ export class WidgetTimeContextComponent {
393
405
  };
394
406
  }
395
407
  startRealtime() {
396
- this.form.controls.temporaryUserSelectedFromDate.disable();
397
- this.form.controls.temporaryUserSelectedToDate.disable();
398
- this.form.controls.aggregation.disable();
408
+ this.disableDateRangeAndAggregation();
399
409
  this.realtimeSubscription = interval(this.REALTIME_INTERVAL)
400
410
  .pipe(takeUntil(this.destroy$))
401
411
  .subscribe(() => {
@@ -409,11 +419,26 @@ export class WidgetTimeContextComponent {
409
419
  });
410
420
  });
411
421
  }
422
+ onDisableAutoRefresh() {
423
+ this.form.controls.aggregation.setValue(null);
424
+ this.disableDateRangeAndAggregation();
425
+ }
426
+ disableDateRangeAndAggregation() {
427
+ this.form.controls.temporaryUserSelectedFromDate.disable();
428
+ this.form.controls.temporaryUserSelectedToDate.disable();
429
+ this.form.controls.aggregation.disable();
430
+ }
431
+ enableDateRangeAndAggregation() {
432
+ if (this.form.controls.realtime.value || this.isAutoRefreshEnabled) {
433
+ return;
434
+ }
435
+ this.form.controls.temporaryUserSelectedFromDate.enable();
436
+ this.form.controls.temporaryUserSelectedToDate.enable();
437
+ this.form.controls.aggregation.enable();
438
+ }
412
439
  stopRealtime() {
413
440
  this.realtimeSubscription?.unsubscribe();
414
- this.form?.controls.temporaryUserSelectedFromDate.enable();
415
- this.form?.controls.temporaryUserSelectedToDate.enable();
416
- this.form?.controls.aggregation.enable();
441
+ this.enableDateRangeAndAggregation();
417
442
  }
418
443
  onRealtimeValueChange(realtime) {
419
444
  let dateTimeContext;
@@ -496,4 +521,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
496
521
  type: ViewChild,
497
522
  args: [BsDropdownDirective]
498
523
  }] } });
499
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LXRpbWUtY29udGV4dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9jb3JlL2Rhc2hib2FyZC93aWdldC10aW1lLWNvbnRleHQvd2lkZ2V0LXRpbWUtY29udGV4dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9jb3JlL2Rhc2hib2FyZC93aWdldC10aW1lLWNvbnRleHQvd2lkZ2V0LXRpbWUtY29udGV4dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULE1BQU0sRUFDTixZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM5QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSw2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QUFhO3dCQUNiLGFBQWE7d0JBQ2IsdUJBQXVCO3dCQUN2QixrQkFBa0I7d0JBQ2xCLE9BQU87d0JBQ1AscUJBQXFCO3dCQUNyQixpQkFBaUI7d0JBQ2pCLGdCQUFnQjt3QkFDaEIsd0JBQXdCO3dCQUN4QiwwQkFBMEI7d0JBQzFCLGdCQUFnQjt3QkFDaEIsUUFBUTt3QkFDUiw2QkFBNkI7d0JBQzdCLHVCQUF1QjtxQkFDeEI7K1hBU0QsV0FBVztzQkFEVixLQUFLO2dCQUdHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQU1OLGlCQUFpQjtzQkFEaEIsTUFBTTtnQkFLbUMsTUFBTTtzQkFBL0MsU0FBUzt1QkFBQyw2QkFBNkI7Z0JBQ1IsUUFBUTtzQkFBdkMsU0FBUzt1QkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIGVmZmVjdCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGlvbkVuZCwgTmF2aWdhdGlvbkVuZCwgTmF2aWdhdGlvblN0YXJ0LCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgYWdncmVnYXRpb25UeXBlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQnNEcm9wZG93bkRpcmVjdGl2ZSwgQnNEcm9wZG93bk1vZHVsZSB9IGZyb20gJ25neC1ib290c3RyYXAvZHJvcGRvd24nO1xuaW1wb3J0IHsgaW50ZXJ2YWwsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBY3Rpb25CYXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYWN0aW9uLWJhcic7XG5pbXBvcnQgeyBBR0dSRUdBVElPTl9MSU1JVFMgfSBmcm9tICcuLi8uLi9hZ2dyZWdhdGlvbi9hZ2dyZWdhdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9hZ2dyZWdhdGlvbi9hZ2dyZWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICcuLi8uLi9pMThuJztcbmltcG9ydCB7IERhc2hib2FyZENoaWxkQWN0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vZGFzaGJvYXJkLWNoaWxkLWFjdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGFzaGJvYXJkQ2hpbGRDb21wb25lbnQgfSBmcm9tICcuLi9kYXNoYm9hcmQtY2hpbGQuY29tcG9uZW50JztcbmltcG9ydCB7IERhdGVUaW1lQ29udGV4dCwgVGltZUNvbnRleHRFdmVudCwgV2lkZ2V0VGltZUNvbnRleHQgfSBmcm9tICcuLi93aWRnZXQtY2hhbmdlLWV2ZW50Lm1vZGVsJztcbmltcG9ydCB7IFdpZGdldHNEYXNoYm9hcmRFdmVudFNlcnZpY2UgfSBmcm9tICcuLi93aWRnZXRzLWRhc2hib2FyZC1ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IFdpZGdldFRpbWVDb250ZXh0SGVscGVyU2VydmljZSB9IGZyb20gJy4vd2lkZ2V0LXRpbWUtY29udGV4dC1oZWxwZXIuc2VydmljZSc7XG5pbXBvcnQgeyBXaWRnZXRUaW1lQ29udGV4dFF1ZXJ5U2VydmljZSB9IGZyb20gJy4vd2lkZ2V0LXRpbWUtY29udGV4dC1xdWVyeS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIElucHV0RGF0ZUNvbnRleHRRdWVyeVBhcmFtcyxcbiAgV2lkZ2V0RGlzcGxheVNldHRpbmdzLFxuICBXaWRnZXRUaW1lQ29udGV4dFN0YXRlXG59IGZyb20gJy4vd2lkZ2V0LXRpbWUtY29udGV4dC5tb2RlbCc7XG5pbXBvcnQge1xuICBJbnRlcnZhbCxcbiAgSU5URVJWQUxfVElUTEVTLFxuICBJbnRlcnZhbFBpY2tlckNvbXBvbmVudFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2ludGVydmFsLXBpY2tlcic7XG5pbXBvcnQgeyBXaWRnZXRUaW1lQ29udGV4dERhdGVSYW5nZVNlcnZpY2UgfSBmcm9tICcuL3dpZGdldC10aW1lLWNvbnRleHQtZGF0ZS1yYW5nZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQsIE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQWN0aW9uQmFySXRlbUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2FjdGlvbi1iYXIvYWN0aW9uLWJhci1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC90b29sdGlwJztcbmltcG9ydCB7IEljb25EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9jb21tb24vaWNvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZm9ybXMvZm9ybS1ncm91cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQzh5VHJhbnNsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vaTE4bi9jOHktdHJhbnNsYXRlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBNZXNzYWdlc0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2Zvcm1zL21lc3NhZ2VzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNZXNzYWdlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZm9ybXMvbWVzc2FnZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUmVhbHRpbWVDb250cm9sQ29tcG9uZW50IH0gZnJvbSAnLi9yZWFsdGltZS1jb250cm9sL3JlYWx0aW1lLWNvbnRyb2wuY29tcG9uZW50JztcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9hZ2dyZWdhdGlvbi1waWNrZXIvYWdncmVnYXRpb24tcGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDOHlUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi4vLi4vaTE4bi9jOHktdHJhbnNsYXRlLnBpcGUnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICcuLi8uLi9jb21tb24vZGF0ZS5waXBlJztcbmltcG9ydCB7IERhdGVUaW1lUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZGF0ZS10aW1lLXBpY2tlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS13aWRnZXQtdGltZS1jb250ZXh0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3dpZGdldC10aW1lLWNvbnRleHQuY29tcG9uZW50Lmh0bWwnLFxuICBob3N0OiB7IGNsYXNzOiAnZC1mbGV4IGEtaS1jZW50ZXIgZ2FwLTQnIH0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0lmLFxuICAgIEFjdGlvbkJhckl0ZW1Db21wb25lbnQsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEJzRHJvcGRvd25Nb2R1bGUsXG4gICAgVG9vbHRpcE1vZHVsZSxcbiAgICBJY29uRGlyZWN0aXZlLFxuICAgIEludGVydmFsUGlja2VyQ29tcG9uZW50LFxuICAgIEZvcm1Hcm91cENvbXBvbmVudCxcbiAgICBOZ0NsYXNzLFxuICAgIEM4eVRyYW5zbGF0ZURpcmVjdGl2ZSxcbiAgICBNZXNzYWdlc0NvbXBvbmVudCxcbiAgICBNZXNzYWdlRGlyZWN0aXZlLFxuICAgIFJlYWx0aW1lQ29udHJvbENvbXBvbmVudCxcbiAgICBBZ2dyZWdhdGlvblBpY2tlckNvbXBvbmVudCxcbiAgICBDOHlUcmFuc2xhdGVQaXBlLFxuICAgIERhdGVQaXBlLFxuICAgIERhc2hib2FyZENoaWxkQWN0aW9uQ29tcG9uZW50LFxuICAgIERhdGVUaW1lUGlja2VyQ29tcG9uZW50XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgV2lkZ2V0VGltZUNvbnRleHRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG4gIHJlYWRvbmx5IElOVEVSVkFMX1RJVExFUyA9IElOVEVSVkFMX1RJVExFUztcbiAgcmVhZG9ubHkgREFURV9GT1JNQVQgPSAnc2hvcnQnO1xuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBjb21wb25lbnQgY2FuIGRlY291cGxlIG9yIG5vdC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGNhbkRlY291cGxlID0gdHJ1ZTtcblxuICBASW5wdXQoKSBkaXNwbGF5U2V0dGluZ3M6IFdpZGdldERpc3BsYXlTZXR0aW5ncztcblxuICBASW5wdXQoKSBoaWRkZW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogRW1pdHMgZWFjaCBjaGFuZ2UgYXMgYW4gYXJyYXkgb2YgZGF0ZXMgW2Zyb20sIHRvXS5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBkYXRlQ29udGV4dENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgQFZpZXdDaGlsZChEYXNoYm9hcmRDaGlsZEFjdGlvbkNvbXBvbmVudCkgYWN0aW9uOiBEYXNoYm9hcmRDaGlsZEFjdGlvbkNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZChCc0Ryb3Bkb3duRGlyZWN0aXZlKSBkcm9wZG93bjogQnNEcm9wZG93bkRpcmVjdGl2ZTtcbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgdGltZSBjb250ZXh0IGlzIGJvdW5kIHRvIHRoZSBnbG9iYWwgc2NvcGUuXG4gICAqL1xuICBpc0NvdXBsZWQgPSB0cnVlO1xuICBkZWNvdXBsZVRpbWVDb250ZXh0TGFiZWwgPSBnZXR0ZXh0KCdEZWNvdXBsZSB0aW1lIGNvbnRleHQnKTtcbiAgY291cGxlVGltZUNvbnRleHRMYWJlbCA9IGdldHRleHQoJ0NvdXBsZSB0aW1lIGNvbnRleHQnKTtcbiAgZm9ybTogUmV0dXJuVHlwZTxXaWRnZXRUaW1lQ29udGV4dENvbXBvbmVudFsnY3JlYXRlRm9ybSddPjtcbiAgYWN0aW9uQmFySW5Hcm91cFByaW9yaXR5OiBudW1iZXI7XG4gIGRpc2FibGVkQWdncmVnYXRpb25zOiBQYXJ0aWFsPFJlY29yZDxhZ2dyZWdhdGlvblR5cGUsIGJvb2xlYW4+PiA9IHt9O1xuICBzbGlkZXJDaGFuZ2U6IGJvb2xlYW47XG4gIHJlYWRvbmx5IERFRkFVTFRfSU5URVJWQUw6IEludGVydmFsWydpZCddID0gJ2RheXMnO1xuICByZWFkb25seSBBQ1RJT05fQkFSX1BSSU9SSVRZID0gNztcbiAgcmVhZG9ubHkgQUNUSU9OX0JBUl9HUk9VUF9JRCA9ICd0aW1lY29udGV4dCc7XG4gIHJlYWRvbmx5IFJFQUxUSU1FX0lOVEVSVkFMID0gMTAwMDtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBkZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgbmF2aWdhdGlvbkluUHJvZ3Jlc3M6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhbHRpbWVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAvKipcbiAgICogQGlnbm9yZSBvbmx5IERJLlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB3aWRnZXRFdmVudFNlcnZpY2U6IFdpZGdldHNEYXNoYm9hcmRFdmVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXNoYm9hcmRDaGlsZDogRGFzaGJvYXJkQ2hpbGRDb21wb25lbnQsXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFdpZGdldFRpbWVDb250ZXh0UXVlcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgaGVscGVyU2VydmljZTogV2lkZ2V0VGltZUNvbnRleHRIZWxwZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBhY3Rpb25CYXJTZXJ2aWNlOiBBY3Rpb25CYXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWdncmVnYXRpb25TZXJ2aWNlOiBBZ2dyZWdhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSB3aWRnZXRUaW1lQ29udGV4dERhdGVSYW5nZVNlcnZpY2U6IFdpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZVxuICApIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMud2lkZ2V0VGltZUNvbnRleHREYXRlUmFuZ2VTZXJ2aWNlLnRpbWVDb250ZXh0Q2hhbmdlKCk7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBjb25zdCB1cGRhdGVkRm9ybURhdGEgPSB7XG4gICAgICAgICAgZGF0ZTogW25ldyBEYXRlKGRhdGEuZGF0ZUZyb20pLCBuZXcgRGF0ZShkYXRhLmRhdGVUbyldLFxuICAgICAgICAgIGludGVydmFsOiBkYXRhLmludGVydmFsLFxuICAgICAgICAgIHJlYWx0aW1lOiBmYWxzZSxcbiAgICAgICAgICBhZ2dyZWdhdGlvbjogdGhpcy5mb3JtLnZhbHVlLmFnZ3JlZ2F0aW9uXG4gICAgICAgIH0gYXMgV2lkZ2V0VGltZUNvbnRleHRTdGF0ZTtcbiAgICAgICAgdGhpcy5zbGlkZXJDaGFuZ2UgPSB0cnVlO1xuICAgICAgICB0aGlzLmRhdGVDb250ZXh0Q2hhbmdlLmVtaXQoeyAuLi51cGRhdGVkRm9ybURhdGEsIHNsaWRlckNoYW5nZTogdHJ1ZSB9KTtcbiAgICAgICAgdGhpcy5zdG9wUmVhbHRpbWUoKTtcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtVmFsdWVzKHVwZGF0ZWRGb3JtRGF0YSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZSBTdWJzY3JpYmluZyB0byB0aGUgZ2xvYmFsIGNvbnRleHQuXG4gICAqL1xuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGlvbkJhckluR3JvdXBQcmlvcml0eSA9IHRoaXMuaGVscGVyU2VydmljZS5nZXRBY3Rpb25CYXJQcmlvcml0eSh0aGlzLmRpc3BsYXlTZXR0aW5ncyk7XG4gICAgY29uc3QgaW5pdGlhbENvbnRleHQ6IFdpZGdldFRpbWVDb250ZXh0U3RhdGUgPVxuICAgICAgdGhpcy5nZXRJbml0aWFsQ29udGV4dCgpIHx8IHRoaXMuZ2V0RGVmYXVsdENvbnRleHQoKTtcbiAgICBpbml0aWFsQ29udGV4dC5hZ2dyZWdhdGlvbiA9IHRoaXMuY2FsY3VsYXRlQWdncmVnYXRpb24oXG4gICAgICBpbml0aWFsQ29udGV4dC5kYXRlLFxuICAgICAgaW5pdGlhbENvbnRleHQuYWdncmVnYXRpb25cbiAgICApO1xuICAgIHRoaXMuZm9ybSA9IHRoaXMuY3JlYXRlRm9ybShpbml0aWFsQ29udGV4dCk7XG5cbiAgICB0aGlzLmRhdGVDb250ZXh0Q2hhbmdlLmVtaXQoe1xuICAgICAgZGF0ZTogaW5pdGlhbENvbnRleHQuZGF0ZSxcbiAgICAgIHJlYWx0aW1lOiBpbml0aWFsQ29udGV4dC5yZWFsdGltZSxcbiAgICAgIGFnZ3JlZ2F0aW9uOiBpbml0aWFsQ29udGV4dC5hZ2dyZWdhdGlvblxuICAgIH0pO1xuICAgIGlmICh0aGlzLmlzQ291cGxlZCkge1xuICAgICAgdGhpcy5xdWVyeVNlcnZpY2Uuc2V0RGF0ZUNvbnRleHRRdWVyeVBhcmFtcyhpbml0aWFsQ29udGV4dCk7XG4gICAgfVxuICAgIHRoaXMuc3Vic2NyaWJlVG9HbG9iYWxDb250ZXh0KCk7XG4gICAgdGhpcy5zdWJzY3JpYmVUb1F1ZXJ5UGFyYW1zQ2hhbmdlKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVUb1JvdXRlckV2ZW50cygpO1xuICAgIHRoaXMuc3Vic2NyaWJlVG9JbnRlcnZhbENoYW5nZSgpO1xuICAgIHRoaXMuc3Vic2NyaWJlVG9SZWFsdGltZUNoYW5nZSgpO1xuICAgIHRoaXMuc3Vic2NyaWJlVG9BZ2dyZWdhdGlvbkNoYW5nZSgpO1xuXG4gICAgaWYgKGluaXRpYWxDb250ZXh0LnJlYWx0aW1lKSB7XG4gICAgICB0aGlzLm9uUmVhbHRpbWVWYWx1ZUNoYW5nZShpbml0aWFsQ29udGV4dC5yZWFsdGltZSk7XG4gICAgICB0aGlzLnN0YXJ0UmVhbHRpbWUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZSBBZGRpbmcgY3VzdG9tIGFjdGlvbnMuXG4gICAqL1xuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2FuRGVjb3VwbGUpIHtcbiAgICAgIHRoaXMuZGFzaGJvYXJkQ2hpbGQuYWRkQWN0aW9ucyhbdGhpcy5hY3Rpb25dKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyB0aGUgY291cGxpbmcgb24gb3Igb2ZmLlxuICAgKi9cbiAgdG9nZ2xlRGVjb3VwbGluZygpOiB2b2lkIHtcbiAgICB0aGlzLmlzQ291cGxlZCA9ICF0aGlzLmlzQ291cGxlZDtcbiAgICBjb25zdCBsYXN0RXZlbnRWYWx1ZSA9IHRoaXMud2lkZ2V0RXZlbnRTZXJ2aWNlLmdldExhc3RWYWx1ZSgnVElNRV9DT05URVhUJyk7XG4gICAgY29uc3QgeyByZWFsdGltZSwgYWdncmVnYXRpb24sIGludGVydmFsIH0gPSBsYXN0RXZlbnRWYWx1ZTtcbiAgICBsZXQgZGF0ZTogRGF0ZVRpbWVDb250ZXh0O1xuICAgIGlmIChpbnRlcnZhbCkge1xuICAgICAgZGF0ZSA9IHRoaXMuaGVscGVyU2VydmljZS5nZXREYXRlVGltZUNvbnRleHRCeUludGVydmFsKGludGVydmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0ZSA9IGxhc3RFdmVudFZhbHVlLmRhdGVUaW1lQ29udGV4dDtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVGb3JtVmFsdWVzKHsgZGF0ZSwgaW50ZXJ2YWwsIHJlYWx0aW1lLCBhZ2dyZWdhdGlvbiB9KTtcblxuICAgIGlmICh0aGlzLmlzQ291cGxlZCkge1xuICAgICAgdGhpcy5zdWJzY3JpYmVUb0dsb2JhbENvbnRleHQoKTtcbiAgICAgIHRoaXMuZGF0ZUNvbnRleHRDaGFuZ2UuZW1pdCh7IGRhdGUsIHJlYWx0aW1lLCBhZ2dyZWdhdGlvbiB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51bnN1YnNjcmliZUZyb21HbG9iYWxDb250ZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgZm9ybSB2YWx1ZSB0byBnbG9iYWwgb3IgbG9jYWwgZGF0ZSBjb250ZXh0LlxuICAgKi9cbiAgYXBwbHlEYXRldGltZUNvbnRleHQoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGUoe1xuICAgICAgZGF0ZTogW1xuICAgICAgICBuZXcgRGF0ZSh0aGlzLmZvcm0udmFsdWUudGVtcG9yYXJ5VXNlclNlbGVjdGVkRnJvbURhdGUpLFxuICAgICAgICBuZXcgRGF0ZSh0aGlzLmZvcm0udmFsdWUudGVtcG9yYXJ5VXNlclNlbGVjdGVkVG9EYXRlKVxuICAgICAgXSxcbiAgICAgIGludGVydmFsOiBudWxsLFxuICAgICAgcmVhbHRpbWU6IHRoaXMuZm9ybS52YWx1ZS5yZWFsdGltZSxcbiAgICAgIGFnZ3JlZ2F0aW9uOiB0aGlzLmZvcm0udmFsdWUuYWdncmVnYXRpb25cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgZm9ybSB0byBpbml0aWFsIHZhbHVlIGFuZCB1cGRhdGUgY29udGV4dC5cbiAgICovXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcFJlYWx0aW1lKCk7XG4gICAgdGhpcy51cGRhdGUodGhpcy5nZXREZWZhdWx0Q29udGV4dCgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlIHVuc3Vic2NyaWJpbmcuXG4gICAqL1xuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlRnJvbUdsb2JhbENvbnRleHQoKTtcbiAgICB0aGlzLmNsZWFyUXVlcnlQYXJhbXNJZk5lZWRlZCgpO1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9JbnRlcnZhbENoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm0uY29udHJvbHMuY3VycmVudERhdGVDb250ZXh0SW50ZXJ2YWwudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKGludGVydmFsID0+IHtcbiAgICAgICAgbGV0IGRhdGU6IERhdGVUaW1lQ29udGV4dDtcbiAgICAgICAgaWYgKGludGVydmFsID09PSAnY3VzdG9tJykge1xuICAgICAgICAgIGRhdGUgPSBbXG4gICAgICAgICAgICBuZXcgRGF0ZSh0aGlzLmZvcm0uY29udHJvbHMuY3VycmVudERhdGVDb250ZXh0RnJvbURhdGUudmFsdWUpLFxuICAgICAgICAgICAgbmV3IERhdGUodGhpcy5mb3JtLmNvbnRyb2xzLmN1cnJlbnREYXRlQ29udGV4dFRvRGF0ZS52YWx1ZSlcbiAgICAgICAgICBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRhdGUgPSB0aGlzLmhlbHBlclNlcnZpY2UuZ2V0RGF0ZVRpbWVDb250ZXh0QnlJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgICAgICAgdGhpcy5kcm9wZG93bi5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZSh7XG4gICAgICAgICAgZGF0ZSxcbiAgICAgICAgICBpbnRlcnZhbCxcbiAgICAgICAgICByZWFsdGltZTogdGhpcy5mb3JtLnZhbHVlLnJlYWx0aW1lLFxuICAgICAgICAgIGFnZ3JlZ2F0aW9uOiB0aGlzLmZvcm0udmFsdWUuYWdncmVnYXRpb25cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9SZWFsdGltZUNoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm0uY29udHJvbHMucmVhbHRpbWUudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUocmVhbHRpbWUgPT4ge1xuICAgICAgdGhpcy5vblJlYWx0aW1lVmFsdWVDaGFuZ2UocmVhbHRpbWUpO1xuXG4gICAgICBpZiAocmVhbHRpbWUpIHtcbiAgICAgICAgdGhpcy5zdGFydFJlYWx0aW1lKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN0b3BSZWFsdGltZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb0FnZ3JlZ2F0aW9uQ2hhbmdlKCkge1xuICAgIHRoaXMuZm9ybS5jb250cm9scy5hZ2dyZWdhdGlvbi52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoYWdncmVnYXRpb24gPT4ge1xuICAgICAgICBpZiAodGhpcy5zbGlkZXJDaGFuZ2UpIHtcbiAgICAgICAgICB0aGlzLnNsaWRlckNoYW5nZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZSh7XG4gICAgICAgICAgZGF0ZTogW1xuICAgICAgICAgICAgbmV3IERhdGUodGhpcy5mb3JtLnZhbHVlLmN1cnJlbnREYXRlQ29udGV4dEZyb21EYXRlKSxcbiAgICAgICAgICAgIG5ldyBEYXRlKHRoaXMuZm9ybS52YWx1ZS5jdXJyZW50RGF0ZUNvbnRleHRUb0RhdGUpXG4gICAgICAgICAgXSxcbiAgICAgICAgICBpbnRlcnZhbDogdGhpcy5mb3JtLnZhbHVlLmN1cnJlbnREYXRlQ29udGV4dEludGVydmFsLFxuICAgICAgICAgIHJlYWx0aW1lOiB0aGlzLmZvcm0udmFsdWUucmVhbHRpbWUsXG4gICAgICAgICAgYWdncmVnYXRpb25cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRm9ybShjb250ZXh0OiBXaWRnZXRUaW1lQ29udGV4dFN0YXRlKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgdGVtcG9yYXJ5VXNlclNlbGVjdGVkRnJvbURhdGU6IGNvbnRleHQuZGF0ZVswXS50b0lTT1N0cmluZygpLFxuICAgICAgdGVtcG9yYXJ5VXNlclNlbGVjdGVkVG9EYXRlOiBjb250ZXh0LmRhdGVbMV0udG9JU09TdHJpbmcoKSxcbiAgICAgIGN1cnJlbnREYXRlQ29udGV4dEZyb21EYXRlOiBjb250ZXh0LmRhdGVbMF0udG9JU09TdHJpbmcoKSxcbiAgICAgIGN1cnJlbnREYXRlQ29udGV4dFRvRGF0ZTogY29udGV4dC5kYXRlWzFdLnRvSVNPU3RyaW5nKCksXG4gICAgICBjdXJyZW50RGF0ZUNvbnRleHRJbnRlcnZhbDogY29udGV4dC5pbnRlcnZhbCB8fCAnY3VzdG9tJyxcbiAgICAgIHJlYWx0aW1lOiBjb250ZXh0LnJlYWx0aW1lLFxuICAgICAgYWdncmVnYXRpb246IGNvbnRleHQuYWdncmVnYXRpb25cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaXJlcyBhIG5ldyBXaWRnZXRDaGFuZ2VFdmVudCBlaXRoZXIgb24gdGhlIGxvY2FsIGNoYW5nZSBlbWl0dGVyIG9yIG9uIHRoZSBnbG9iYWwgb25lLlxuICAgKiBAcGFyYW0gd2lkZ2V0VGltZUNvbnRleHRTdGF0ZSBOZXcgd2lkZ2V0IHRpbWUgY29udGV4dCB2YWx1ZS4qL1xuICBwcml2YXRlIHVwZGF0ZSh7IGRhdGUsIGludGVydmFsLCByZWFsdGltZSwgYWdncmVnYXRpb24gfTogV2lkZ2V0VGltZUNvbnRleHRTdGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IHZhbGlkQWdncmVnYXRpb24gPSB0aGlzLmNhbGN1bGF0ZUFnZ3JlZ2F0aW9uKGRhdGUsIGFnZ3JlZ2F0aW9uKTtcbiAgICBpZiAodGhpcy5pc0NvdXBsZWQpIHtcbiAgICAgIGNvbnN0IGV2ZW50RGF0YTogV2lkZ2V0VGltZUNvbnRleHQgPVxuICAgICAgICBpbnRlcnZhbCAmJiBpbnRlcnZhbCAhPT0gJ2N1c3RvbSdcbiAgICAgICAgICA/IHsgaW50ZXJ2YWwsIHJlYWx0aW1lLCBhZ2dyZWdhdGlvbjogdmFsaWRBZ2dyZWdhdGlvbiB9XG4gICAgICAgICAgOiB7IGRhdGVUaW1lQ29udGV4dDogZGF0ZSwgcmVhbHRpbWUsIGFnZ3JlZ2F0aW9uOiB2YWxpZEFnZ3JlZ2F0aW9uIH07XG4gICAgICB0aGlzLndpZGdldEV2ZW50U2VydmljZS5lbWl0KHsgdHlwZTogJ1RJTUVfQ09OVEVYVCcsIGRhdGE6IGV2ZW50RGF0YSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVGb3JtVmFsdWVzKHsgZGF0ZSwgaW50ZXJ2YWwsIHJlYWx0aW1lLCBhZ2dyZWdhdGlvbjogdmFsaWRBZ2dyZWdhdGlvbiB9KTtcbiAgICAgIHRoaXMuZGF0ZUNvbnRleHRDaGFuZ2UuZW1pdCh7IGRhdGUsIHJlYWx0aW1lLCBhZ2dyZWdhdGlvbjogdmFsaWRBZ2dyZWdhdGlvbiB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZVRvR2xvYmFsQ29udGV4dCgpOiB2b2lkIHtcbiAgICBjb25zdCBldmVudCQgPSB0aGlzLndpZGdldEV2ZW50U2VydmljZS5nZXRPYnNlcnZhYmxlPFRpbWVDb250ZXh0RXZlbnQ+KCdUSU1FX0NPTlRFWFQnKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IGV2ZW50JC5zdWJzY3JpYmUoKGNvbnRleHQ6IFdpZGdldFRpbWVDb250ZXh0KSA9PiB7XG4gICAgICBsZXQgZGF0ZTogRGF0ZVRpbWVDb250ZXh0O1xuICAgICAgY29uc3QgeyByZWFsdGltZSwgaW50ZXJ2YWwsIGFnZ3JlZ2F0aW9uIH0gPSBjb250ZXh0O1xuICAgICAgaWYgKGludGVydmFsKSB7XG4gICAgICAgIGRhdGUgPSB0aGlzLmhlbHBlclNlcnZpY2UuZ2V0RGF0ZVRpbWVDb250ZXh0QnlJbnRlcnZhbChjb250ZXh0LmludGVydmFsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGUgPSBjb250ZXh0LmRhdGVUaW1lQ29udGV4dDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5kYXRlQ29udGV4dENoYW5nZS5lbWl0KHtcbiAgICAgICAgZGF0ZSxcbiAgICAgICAgc2xpZGVyQ2hhbmdlOiBmYWxzZSxcbiAgICAgICAgaW50ZXJ2YWwsXG4gICAgICAgIHJlYWx0aW1lLFxuICAgICAgICBhZ2dyZWdhdGlvblxuICAgICAgfSk7XG4gICAgICB0aGlzLnVwZGF0ZUZvcm1WYWx1ZXMoeyBkYXRlLCBpbnRlcnZhbCwgcmVhbHRpbWUsIGFnZ3JlZ2F0aW9uIH0pO1xuICAgICAgdGhpcy5xdWVyeVNlcnZpY2Uuc2V0RGF0ZUNvbnRleHRRdWVyeVBhcmFtcyh7IGludGVydmFsLCBkYXRlLCByZWFsdGltZSwgYWdncmVnYXRpb24gfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUZvcm1WYWx1ZXMoe1xuICAgIGRhdGUsXG4gICAgaW50ZXJ2YWwsXG4gICAgcmVhbHRpbWUsXG4gICAgYWdncmVnYXRpb25cbiAgfTogV2lkZ2V0VGltZUNvbnRleHRTdGF0ZSk6IHZvaWQge1xuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKFxuICAgICAge1xuICAgICAgICB0ZW1wb3JhcnlVc2VyU2VsZWN0ZWRGcm9tRGF0ZTogZGF0ZVswXS50b0lTT1N0cmluZygpLFxuICAgICAgICB0ZW1wb3JhcnlVc2VyU2VsZWN0ZWRUb0RhdGU6IGRhdGVbMV0udG9JU09TdHJpbmcoKSxcbiAgICAgICAgY3VycmVudERhdGVDb250ZXh0RnJvbURhdGU6IGRhdGVbMF0udG9JU09TdHJpbmcoKSxcbiAgICAgICAgY3VycmVudERhdGVDb250ZXh0VG9EYXRlOiBkYXRlWzFdLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIHJlYWx0aW1lLFxuICAgICAgICBjdXJyZW50RGF0ZUNvbnRleHRJbnRlcnZhbDogaW50ZXJ2YWwgfHwgJ2N1c3RvbScsXG4gICAgICAgIGFnZ3JlZ2F0aW9uOiBhZ2dyZWdhdGlvbiB8fCBudWxsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdW5zdWJzY3JpYmVGcm9tR2xvYmFsQ29udGV4dCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbml0aWFsQ29udGV4dCgpOiBXaWRnZXRUaW1lQ29udGV4dFN0YXRlIHwgbnVsbCB7XG4gICAgY29uc3QgZGF0ZVRpbWVDb250ZXh0RnJvbVF1ZXJ5UGFyYW1zID0gdGhpcy5xdWVyeVNlcnZpY2UuZGF0ZVRpbWVDb250ZXh0RnJvbVF1ZXJ5UGFyYW1zKCk7XG4gICAgaWYgKGRhdGVUaW1lQ29udGV4dEZyb21RdWVyeVBhcmFtcykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZGF0ZVRpbWVDb250ZXh0RnJvbVF1ZXJ5UGFyYW1zLFxuICAgICAgICByZWFsdGltZTogZGF0ZVRpbWVDb250ZXh0RnJvbVF1ZXJ5UGFyYW1zLnJlYWx0aW1lID8/IGZhbHNlLFxuICAgICAgICBhZ2dyZWdhdGlvbjogZGF0ZVRpbWVDb250ZXh0RnJvbVF1ZXJ5UGFyYW1zLnJlYWx0aW1lXG4gICAgICAgICAgPyBudWxsXG4gICAgICAgICAgOiBkYXRlVGltZUNvbnRleHRGcm9tUXVlcnlQYXJhbXMuYWdncmVnYXRpb24gfHwgbnVsbFxuICAgICAgfTtcbiAgICB9XG4gICAgLy8gZ2V0IHZhbHVlIGZyb20gbGFzdCB2YWx1ZSBvZiBldmVudHMgc2VydmljZVxuICAgIGNvbnN0IGxhc3RFdmVudFZhbHVlID0gdGhpcy53aWRnZXRFdmVudFNlcnZpY2UuZ2V0TGFzdFZhbHVlKCdUSU1FX0NPTlRFWFQnKTtcbiAgICBjb25zdCByZWFsdGltZSA9IGxhc3RFdmVudFZhbHVlPy5yZWFsdGltZSA/PyBmYWxzZTtcbiAgICBpZiAobGFzdEV2ZW50VmFsdWUgJiYgbGFzdEV2ZW50VmFsdWUuZGF0ZVRpbWVDb250ZXh0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRlOiBsYXN0RXZlbnRWYWx1ZS5kYXRlVGltZUNvbnRleHQsXG4gICAgICAgIGludGVydmFsOiAnY3VzdG9tJyxcbiAgICAgICAgcmVhbHRpbWUsXG4gICAgICAgIGFnZ3JlZ2F0aW9uOiByZWFsdGltZSA/IG51bGwgOiBsYXN0RXZlbnRWYWx1ZS5hZ2dyZWdhdGlvblxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKGxhc3RFdmVudFZhbHVlICYmIGxhc3RFdmVudFZhbHVlLmludGVydmFsKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRlOiB0aGlzLmhlbHBlclNlcnZpY2UuZ2V0RGF0ZVRpbWVDb250ZXh0QnlJbnRlcnZhbChsYXN0RXZlbnRWYWx1ZS5pbnRlcnZhbCksXG4gICAgICAgIGludGVydmFsOiBsYXN0RXZlbnRWYWx1ZS5pbnRlcnZhbCxcbiAgICAgICAgcmVhbHRpbWUsXG4gICAgICAgIGFnZ3JlZ2F0aW9uOiByZWFsdGltZSA/IG51bGwgOiBsYXN0RXZlbnRWYWx1ZS5hZ2dyZWdhdGlvblxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9RdWVyeVBhcmFtc0NoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLnF1ZXJ5U2VydmljZVxuICAgICAgLnF1ZXJ5UGFyYW1zQ2hhbmdlJCgpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAoe1xuICAgICAgICAgIGRhdGVDb250ZXh0RnJvbSxcbiAgICAgICAgICBkYXRlQ29udGV4dFRvLFxuICAgICAgICAgIGRhdGVDb250ZXh0SW50ZXJ2YWwsXG4gICAgICAgICAgZGF0ZUNvbnRleHRSZWFsdGltZSxcbiAgICAgICAgICBkYXRlQ29udGV4dEFnZ3JlZ2F0aW9uXG4gICAgICAgIH06IElucHV0RGF0ZUNvbnRleHRRdWVyeVBhcmFtcykgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlYWx0aW1lID0gZGF0ZUNvbnRleHRSZWFsdGltZSA/PyB0aGlzLmZvcm0udmFsdWUucmVhbHRpbWU7XG4gICAgICAgICAgaWYgKGRhdGVDb250ZXh0SW50ZXJ2YWwpIHtcbiAgICAgICAgICAgIHRoaXMud2lkZ2V0RXZlbnRTZXJ2aWNlLmVtaXQoe1xuICAgICAgICAgICAgICB0eXBlOiAnVElNRV9DT05URVhUJyxcbiAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGludGVydmFsOiBkYXRlQ29udGV4dEludGVydmFsLFxuICAgICAgICAgICAgICAgIHJlYWx0aW1lLFxuICAgICAgICAgICAgICAgIGFnZ3JlZ2F0aW9uOiBkYXRlQ29udGV4dEFnZ3JlZ2F0aW9uXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBkYXRlQ29udGV4dDogRGF0ZVRpbWVDb250ZXh0ID0gW1xuICAgICAgICAgICAgICBuZXcgRGF0ZShkYXRlQ29udGV4dEZyb20pLFxuICAgICAgICAgICAgICBuZXcgRGF0ZShkYXRlQ29udGV4dFRvKVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIHRoaXMud2lkZ2V0RXZlbnRTZXJ2aWNlLmVtaXQoe1xuICAgICAgICAgICAgICB0eXBlOiAnVElNRV9DT05URVhUJyxcbiAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGRhdGVUaW1lQ29udGV4dDogZGF0ZUNvbnRleHQsXG4gICAgICAgICAgICAgICAgcmVhbHRpbWUsXG4gICAgICAgICAgICAgICAgYWdncmVnYXRpb246IGRhdGVDb250ZXh0QWdncmVnYXRpb25cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclF1ZXJ5UGFyYW1zSWZOZWVkZWQoKTogdm9pZCB7XG4gICAgLy8gSWYgbmF2aWdhdGlvbiBpcyBpbiBwcm9ncmVzcywgcm91dGVyIHdpbGwgdGFrZSBjYXJlIG9mIGNsZWFyaW5nIHF1ZXJ5IHBhcmFtcy4gVGhpcyB3YXkgd2UgYXZvaWQgdW5uZWNlc3NhcnkgbWFuaXB1bGF0aW9uIG9mIGJyb3dzZXIgaGlzdG9yeVxuICAgIGlmICh0aGlzLm5hdmlnYXRpb25JblByb2dyZXNzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGNoZWNrIGlmIGFueSBvdGhlciBXaWRnZXRUaW1lQ29udGV4dENvbXBvbmVudCBhY3Rpb24gaW4gYWN0aW9uIGJhciBleGlzdHNcbiAgICBjb25zdCBhbnlXaWRnZXRUaW1lQ29udGV4dEFjdGlvbkxlZnQgPSBBcnJheS5mcm9tKHRoaXMuYWN0aW9uQmFyU2VydmljZS5zdGF0ZSkuc29tZShcbiAgICAgIGFjdGlvbiA9PiBhY3Rpb24uZ3JvdXBJZCA9PT0gdGhpcy5BQ1RJT05fQkFSX0dST1VQX0lEXG4gICAgKTtcbiAgICBpZiAoIWFueVdpZGdldFRpbWVDb250ZXh0QWN0aW9uTGVmdCkge1xuICAgICAgdGhpcy5xdWVyeVNlcnZpY2UuY2xlYXJRdWVyeVBhcmFtcygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9Sb3V0ZXJFdmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5yb3V0ZXIuZXZlbnRzXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKFxuICAgICAgICAgIGUgPT5cbiAgICAgICAgICAgIGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQgfHwgZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQgfHwgZSBpbnN0YW5jZW9mIEFjdGl2YXRpb25FbmRcbiAgICAgICAgKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKGUgPT4ge1xuICAgICAgICB0aGlzLm5hdmlnYXRpb25JblByb2dyZXNzID0gZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydDtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0Q29udGV4dCgpOiBXaWRnZXRUaW1lQ29udGV4dFN0YXRlIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGF0ZTogdGhpcy5oZWxwZXJTZXJ2aWNlLmdldERhdGVUaW1lQ29udGV4dEJ5SW50ZXJ2YWwodGhpcy5ERUZBVUxUX0lOVEVSVkFMKSxcbiAgICAgIGludGVydmFsOiB0aGlzLkRFRkFVTFRfSU5URVJWQUwsXG4gICAgICByZWFsdGltZTogZmFsc2UsXG4gICAgICBhZ2dyZWdhdGlvbjogYWdncmVnYXRpb25UeXBlLk1JTlVURUxZXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRSZWFsdGltZSgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm0uY29udHJvbHMudGVtcG9yYXJ5VXNlclNlbGVjdGVkRnJvbURhdGUuZGlzYWJsZSgpO1xuICAgIHRoaXMuZm9ybS5jb250cm9scy50ZW1wb3JhcnlVc2VyU2VsZWN0ZWRUb0RhdGUuZGlzYWJsZSgpO1xuICAgIHRoaXMuZm9ybS5jb250cm9scy5hZ2dyZWdhdGlvbi5kaXNhYmxlKCk7XG5cbiAgICB0aGlzLnJlYWx0aW1lU3Vic2NyaXB0aW9uID0gaW50ZXJ2YWwodGhpcy5SRUFMVElNRV9JTlRFUlZBTClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBjb25zdCBuZXdEYXRlRnJvbSA9IG5ldyBEYXRlKFxuICAgICAgICAgIG5ldyBEYXRlKHRoaXMuZm9ybS52YWx1ZS5jdXJyZW50RGF0ZUNvbnRleHRGcm9tRGF0ZSkudmFsdWVPZigpICsgdGhpcy5SRUFMVElNRV9JTlRFUlZBTFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBuZXdEYXRlVG8gPSBuZXcgRGF0ZShcbiAgICAgICAgICBuZXcgRGF0ZSh0aGlzLmZvcm0udmFsdWUuY3VycmVudERhdGVDb250ZXh0VG9EYXRlKS52YWx1ZU9mKCkgKyB0aGlzLlJFQUxUSU1FX0lOVEVSVkFMXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMudXBkYXRlRm9ybVZhbHVlcyh7XG4gICAgICAgICAgZGF0ZTogW25ld0RhdGVGcm9tLCBuZXdEYXRlVG9dLFxuICAgICAgICAgIGludGVydmFsOiB0aGlzLmZvcm0udmFsdWUuY3VycmVudERhdGVDb250ZXh0SW50ZXJ2YWwsXG4gICAgICAgICAgcmVhbHRpbWU6IHRydWUsXG4gICAgICAgICAgYWdncmVnYXRpb246IG51bGxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcFJlYWx0aW1lKCk6IHZvaWQge1xuICAgIHRoaXMucmVhbHRpbWVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5mb3JtPy5jb250cm9scy50ZW1wb3JhcnlVc2VyU2VsZWN0ZWRGcm9tRGF0ZS5lbmFibGUoKTtcbiAgICB0aGlzLmZvcm0/LmNvbnRyb2xzLnRlbXBvcmFyeVVzZXJTZWxlY3RlZFRvRGF0ZS5lbmFibGUoKTtcbiAgICB0aGlzLmZvcm0/LmNvbnRyb2xzLmFnZ3JlZ2F0aW9uLmVuYWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBvblJlYWx0aW1lVmFsdWVDaGFuZ2UocmVhbHRpbWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBsZXQgZGF0ZVRpbWVDb250ZXh0OiBEYXRlVGltZUNvbnRleHQ7XG4gICAgaWYgKHRoaXMuZm9ybS52YWx1ZS5jdXJyZW50RGF0ZUNvbnRleHRJbnRlcnZhbCAhPT0gJ2N1c3RvbScpIHtcbiAgICAgIGRhdGVUaW1lQ29udGV4dCA9IHRoaXMuaGVscGVyU2VydmljZS5nZXREYXRlVGltZUNvbnRleHRCeUludGVydmFsKFxuICAgICAgICB0aGlzLmZvcm0udmFsdWUuY3VycmVudERhdGVDb250ZXh0SW50ZXJ2YWxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRUaW1lU3BhbkluTXMgPVxuICAgICAgICBuZXcgRGF0ZSh0aGlzLmZvcm0udmFsdWUuY3VycmVudERhdGVDb250ZXh0VG9EYXRlKS52YWx1ZU9mKCkgLVxuICAgICAgICBuZXcgRGF0ZSh0aGlzLmZvcm0udmFsdWUuY3VycmVudERhdGVDb250ZXh0RnJvbURhdGUpLnZhbHVlT2YoKTtcbiAgICAgIGNvbnN0IGRhdGVUbyA9IG5ldyBEYXRlKCk7XG4gICAgICBjb25zdCBkYXRlRnJvbSA9IG5ldyBEYXRlKGRhdGVUby52YWx1ZU9mKCkgLSBjdXJyZW50VGltZVNwYW5Jbk1zKTtcbiAgICAgIGRhdGVUaW1lQ29udGV4dCA9IFtkYXRlRnJvbSwgZGF0ZVRvXTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZSh7XG4gICAgICBkYXRlOiBkYXRlVGltZUNvbnRleHQsXG4gICAgICBpbnRlcnZhbDogdGhpcy5mb3JtLnZhbHVlLmN1cnJlbnREYXRlQ29udGV4dEludGVydmFsLFxuICAgICAgcmVhbHRpbWUsXG4gICAgICBhZ2dyZWdhdGlvbjogbnVsbFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVBZ2dyZWdhdGlvbihcbiAgICBbZGF0ZUZyb20sIGRhdGVUb106IERhdGVUaW1lQ29udGV4dCxcbiAgICBhZ2dyZWdhdGlvbjogYWdncmVnYXRpb25UeXBlXG4gICk6IGFnZ3JlZ2F0aW9uVHlwZSB7XG4gICAgdGhpcy5kaXNhYmxlZEFnZ3JlZ2F0aW9ucyA9IHRoaXMuYWdncmVnYXRpb25TZXJ2aWNlLmdldERpc2FibGVkQWdncmVnYXRpb25PcHRpb25zKFxuICAgICAgZGF0ZUZyb20sXG4gICAgICBkYXRlVG9cbiAgICApO1xuICAgIGNvbnN0IHRpbWVSYW5nZUluTXMgPSBkYXRlVG8udmFsdWVPZigpIC0gZGF0ZUZyb20udmFsdWVPZigpO1xuICAgIGNvbnN0IGlzUHJvcGVyQWdncmVnYXRpb24gPSAhdGhpcy5kaXNhYmxlZEFnZ3JlZ2F0aW9uc1thZ2dyZWdhdGlvbl0gfHwgYWdncmVnYXRpb24gPT09IG51bGw7XG5cbiAgICBpZiAoaXNQcm9wZXJBZ2dyZWdhdGlvbikge1xuICAgICAgcmV0dXJuIGFnZ3JlZ2F0aW9uO1xuICAgIH1cbiAgICBpZiAodGltZVJhbmdlSW5NcyA+PSBBR0dSRUdBVElPTl9MSU1JVFMuREFJTFlfTElNSVQpIHtcbiAgICAgIHJldHVybiBhZ2dyZWdhdGlvblR5cGUuREFJTFk7XG4gICAgfSBlbHNlIGlmICh0aW1lUmFuZ2VJbk1zID49IEFHR1JFR0FUSU9OX0xJTUlUUy5IT1VSTFlfTElNSVQpIHtcbiAgICAgIHJldHVybiBhZ2dyZWdhdGlvblR5cGUuSE9VUkxZO1xuICAgIH0gZWxzZSBpZiAodGltZVJhbmdlSW5NcyA+PSBBR0dSRUdBVElPTl9MSU1JVFMuTUlOVVRFTFlfTElNSVQpIHtcbiAgICAgIHJldHVybiBhZ2dyZWdhdGlvblR5cGUuTUlOVVRFTFk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufVxuIiwiPGM4eS1hY3Rpb24tYmFyLWl0ZW1cbiAgKm5nSWY9XCJpc0NvdXBsZWQgJiYgIWhpZGRlblwiXG4gIFtwcmlvcml0eV09XCJBQ1RJT05fQkFSX1BSSU9SSVRZXCJcbiAgW2dyb3VwSWRdPVwiQUNUSU9OX0JBUl9HUk9VUF9JRFwiXG4gIFtpbkdyb3VwUHJpb3JpdHldPVwiYWN0aW9uQmFySW5Hcm91cFByaW9yaXR5XCJcbiAgW3BsYWNlbWVudF09XCInbGVmdCdcIlxuPlxuICA8bmctY29udGFpbmVyXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZGF0ZVRpbWVQaWNrZXJcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICBkYXRlOiBbZm9ybS52YWx1ZS5jdXJyZW50RGF0ZUNvbnRleHRGcm9tRGF0ZSwgZm9ybS52YWx1ZS5jdXJyZW50RGF0ZUNvbnRleHRUb0RhdGVdXG4gICAgfVwiXG4gID48L25nLWNvbnRhaW5lcj5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPG5nLWNvbnRhaW5lclxuICAqbmdJZj1cIiFpc0NvdXBsZWRcIlxuICBbbmdUZW1wbGF0ZU91dGxldF09XCJkYXRlVGltZVBpY2tlclwiXG4gIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgZGF0ZTogW2Zvcm0udmFsdWUuY3VycmVudERhdGVDb250ZXh0RnJvbURhdGUsIGZvcm0udmFsdWUuY3VycmVudERhdGVDb250ZXh0VG9EYXRlXVxuICB9XCJcbj48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlXG4gICNkYXRlVGltZVBpY2tlclxuICBsZXQtZGF0ZT1cImRhdGVcIlxuPlxuICA8Zm9ybVxuICAgIGNsYXNzPVwiZC1mbGV4IGdhcC0xNiBwLWwteHMtMTYgcC1yLXhzLTE2IG0tdC14cy04IG0tYi14cy04XCJcbiAgICBbZm9ybUdyb3VwXT1cImZvcm1cIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRpc3BsYXlTZXR0aW5ncy5nbG9iYWxUaW1lQ29udGV4dFwiPlxuICAgICAgPGRpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24gZmxleC1ncm93XCJcbiAgICAgICAgICAjZHJvcGRvd249XCJicy1kcm9wZG93blwiXG4gICAgICAgICAgZHJvcGRvd25cbiAgICAgICAgICBbaW5zaWRlQ2xpY2tdPVwidHJ1ZVwiXG4gICAgICAgICAgKm5nSWY9XCJkYXRlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24tdG9nZ2xlIGZvcm0tY29udHJvbCBsLWgtdGlnaHQgZC1mbGV4IGEtaS1jZW50ZXJcIlxuICAgICAgICAgICAgYXR0ci5hcmlhLWxhYmVsPVwie3sgZGF0ZVswXSB8IGM4eURhdGU6IERBVEVfRk9STUFUIH19IOKAlCB7e1xuICAgICAgICAgICAgICBkYXRlWzFdIHwgYzh5RGF0ZTogREFURV9GT1JNQVRcbiAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgIHRvb2x0aXA9XCJ7eyBkYXRlWzBdIHwgYzh5RGF0ZTogREFURV9GT1JNQVQgfX0g4oCUIHt7IGRhdGVbMV0gfCBjOHlEYXRlOiBEQVRFX0ZPUk1BVCB9fVwiXG4gICAgICAgICAgICBwbGFjZW1lbnQ9XCJ0b3BcIlxuICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICBkYXRhLWN5PVwid2lkZ2V0LXRpbWUtY29udGV4dC0tZGF0ZS1waWNrZXItZHJvcGRvd24tYnV0dG9uXCJcbiAgICAgICAgICAgIFthZGFwdGl2ZVBvc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICAgIFtkZWxheV09XCI1MDBcIlxuICAgICAgICAgICAgZHJvcGRvd25Ub2dnbGVcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICBjbGFzcz1cIm0tci00XCJcbiAgICAgICAgICAgICAgYzh5SWNvbj1cInNjaGVkdWxlMVwiXG4gICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtY29sIHRleHQtbGVmdCBmaXQtd1wiPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC0xMlwiXG4gICAgICAgICAgICAgICAgZGF0YS1jeT1cIndpZGdldC10aW1lLWNvbnRleHQtLXNlbGVjdGVkLWludGVydmFsXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IElOVEVSVkFMX1RJVExFU1tmb3JtLmNvbnRyb2xzLmN1cnJlbnREYXRlQ29udGV4dEludGVydmFsLnZhbHVlXSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LTEwIHRleHQtbXV0ZWQgdGV4dC10cnVuY2F0ZVwiXG4gICAgICAgICAgICAgICAgZGF0YS1jeT1cIndpZGdldC10aW1lLWNvbnRleHQtLXNlbGVjdGVkLXRpbWUtcmFuZ2VcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgZGF0ZVswXSB8IGM4eURhdGU6IERBVEVfRk9STUFUIH19IOKAlCB7eyBkYXRlWzFdIHwgYzh5RGF0ZTogREFURV9GT1JNQVQgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmV0IG0tci0xNiBtLWwtNFwiPjwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDx1bFxuICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1tZW51IGRyb3Bkb3duLW1lbnUtLWRhdGUtcmFuZ2VcIlxuICAgICAgICAgICAgKmRyb3Bkb3duTWVudVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxjOHktaW50ZXJ2YWwtcGlja2VyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImN1cnJlbnREYXRlQ29udGV4dEludGVydmFsXCJcbiAgICAgICAgICAgID48L2M4eS1pbnRlcnZhbC1waWNrZXI+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmb3JtLmNvbnRyb2xzLmN1cnJlbnREYXRlQ29udGV4dEludGVydmFsLnZhbHVlID09PSAnY3VzdG9tJ1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1sLTE2IHAtci0xNlwiPlxuICAgICAgICAgICAgICAgIDxjOHktZm9ybS1ncm91cFxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZm9ybS5jb250cm9scy50ZW1wb3JhcnlVc2VyU2VsZWN0ZWRGcm9tRGF0ZS5lcnJvcnMgPyAnaGFzLWVycm9yJyA6ICcnXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidGcm9tYGRhdGVgJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIGZvcj1cInRlbXBvcmFyeVVzZXJTZWxlY3RlZEZyb21EYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIEZyb21gZGF0ZWBcbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8Yzh5LWRhdGUtdGltZS1waWNrZXJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJ0ZW1wb3JhcnlVc2VyU2VsZWN0ZWRGcm9tRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFttYXhEYXRlXT1cImZvcm0udmFsdWUudGVtcG9yYXJ5VXNlclNlbGVjdGVkVG9EYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidGcm9tYGRhdGVgJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtLmNvbnRyb2xzLnRlbXBvcmFyeVVzZXJTZWxlY3RlZEZyb21EYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybS5jb250cm9scy50ZW1wb3JhcnlVc2VyU2VsZWN0ZWRGcm9tRGF0ZS5lcnJvcnMgPyAnaGFzLWVycm9yJyA6ICcnXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PC9jOHktZGF0ZS10aW1lLXBpY2tlcj5cbiAgICAgICAgICAgICAgICAgIDxjOHktbWVzc2FnZXMgW3Nob3ddPVwiZm9ybS5jb250cm9scy50ZW1wb3JhcnlVc2VyU2VsZWN0ZWRGcm9tRGF0ZS5lcnJvcnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGM4eS1tZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImRhdGVBZnRlclJhbmdlTWF4XCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCInVGhpcyBkYXRlIGlzIGFmdGVyIHRoZSBsYXRlc3QgYWxsb3dlZCBkYXRlLicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICA+PC9jOHktbWVzc2FnZT5cbiAgICAgICAgICAgICAgICAgICAgPGM4eS1tZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImludmFsaWREYXRlVGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3RleHRdPVwiJ1RoaXMgZGF0ZSBpcyBpbnZhbGlkLicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICA+PC9jOHktbWVzc2FnZT5cbiAgICAgICAgICAgICAgICAgIDwvYzh5LW1lc3NhZ2VzPlxuICAgICAgICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG5cbiAgICAgICAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXBcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImZvcm0uY29udHJvbHMudGVtcG9yYXJ5VXNlclNlbGVjdGVkVG9EYXRlLmVycm9ycyA/ICdoYXMtZXJyb3InIDogJydcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ1RvYGRhdGVgJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIGZvcj1cInRlbXBvcmFyeVVzZXJTZWxlY3RlZFRvRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBUb2BkYXRlYFxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxjOHktZGF0ZS10aW1lLXBpY2tlclxuICAgICAgICAgICAgICAgICAgICBpZD1cInRlbXBvcmFyeVVzZXJTZWxlY3RlZFRvRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFttaW5EYXRlXT1cImZvcm0udmFsdWUudGVtcG9yYXJ5VXNlclNlbGVjdGVkRnJvbURhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1RvYGRhdGVgJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtLmNvbnRyb2xzLnRlbXBvcmFyeVVzZXJTZWxlY3RlZFRvRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImZvcm0uY29udHJvbHMudGVtcG9yYXJ5VXNlclNlbGVjdGVkVG9EYXRlLmVycm9ycyA/ICdoYXMtZXJyb3InIDogJydcIlxuICAgICAgICAgICAgICAgICAgPjwvYzh5LWRhdGUtdGltZS1waWNrZXI+XG4gICAgICAgICAgICAgICAgICA8Yzh5LW1lc3NhZ2VzIFtzaG93XT1cImZvcm0uY29udHJvbHMudGVtcG9yYXJ5VXNlclNlbGVjdGVkVG9EYXRlLmVycm9yc1wiPlxuICAgICAgICAgICAgICAgICAgICA8Yzh5LW1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiZGF0ZUJlZm9yZVJhbmdlTWluXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCInVGhpcyBkYXRlIGlzIGJlZm9yZSB0aGUgZWFybGllc3QgYWxsb3dlZCBkYXRlLicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICA+PC9jOHktbWVzc2FnZT5cbiAgICAgICAgICAgICAgICAgICAgPGM4eS1tZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImludmFsaWREYXRlVGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3RleHRdPVwiJ1RoaXMgZGF0ZSBpcyBpbnZhbGlkLicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICA+PC9jOHktbWVzc2FnZT5cbiAgICAgICAgICAgICAgICAgIDwvYzh5LW1lc3NhZ2VzPlxuICAgICAgICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTE2IGQtZmxleCBnYXAtOCBzZXBhcmF0b3ItdG9wXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIGZsZXgtZ3Jvd1wiXG4gICAgICAgICAgICAgICAgICB0aXRsZT1cInt7ICdSZXNldCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVzZXQoKTsgZHJvcGRvd24uaXNPcGVuID0gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm0udmFsdWUucmVhbHRpbWVcIlxuICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgUmVzZXRcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbSBmbGV4LWdyb3dcIlxuICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnQXBwbHknIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFwcGx5RGF0ZXRpbWVDb250ZXh0KCk7IGRyb3Bkb3duLmlzT3BlbiA9IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJcbiAgICAgICAgICAgICAgICAgICAgKGZvcm0ucHJpc3RpbmUgJiYgZm9ybS51bnRvdWNoZWQpIHx8IGZvcm0uaW52YWxpZCB8fCBmb3JtLnZhbHVlLnJlYWx0aW1lXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgQXBwbHlcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctYXV0b1wiPlxuICAgICAgPGM4eS1yZWFsdGltZS1jb250cm9sXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIHAtMCBmbGV4LW5vLWdyb3cgdy1hdXRvXCJcbiAgICAgICAgKm5nSWY9XCJkaXNwbGF5U2V0dGluZ3MuZ2xvYmFsUmVhbHRpbWVDb250ZXh0XCJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicmVhbHRpbWVcIlxuICAgICAgPjwvYzh5LXJlYWx0aW1lLWNvbnRyb2w+XG5cbiAgICAgIDxjOHktYWdncmVnYXRpb24tcGlja2VyXG4gICAgICAgICpuZ0lmPVwiZGlzcGxheVNldHRpbmdzLmdsb2JhbEFnZ3JlZ2F0aW9uQ29udGV4dFwiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImFnZ3JlZ2F0aW9uXCJcbiAgICAgICAgW2Rpc2FibGVkQWdncmVnYXRpb25zXT1cImRpc2FibGVkQWdncmVnYXRpb25zXCJcbiAgICAgID48L2M4eS1hZ2dyZWdhdGlvbi1waWNrZXI+XG4gICAgPC9kaXY+XG4gIDwvZm9ybT5cbjwvbmctdGVtcGxhdGU+XG5cbjxjOHktZGFzaGJvYXJkLWNoaWxkLWFjdGlvbj5cbiAgPGJ1dHRvblxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIChjbGljayk9XCJ0b2dnbGVEZWNvdXBsaW5nKClcIlxuICA+XG4gICAgPGkgW2M4eUljb25dPVwiaXNDb3VwbGVkID8gJ3NjaGVkdWxlMScgOiAndG9kYXknXCI+PC9pPlxuICAgIDxzcGFuIGNsYXNzPVwibS1sLTRcIj5cbiAgICAgIHt7IChpc0NvdXBsZWQgPyBkZWNvdXBsZVRpbWVDb250ZXh0TGFiZWwgOiBjb3VwbGVUaW1lQ29udGV4dExhYmVsKSB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvc3Bhbj5cbiAgPC9idXR0b24+XG48L2M4eS1kYXNoYm9hcmQtY2hpbGQtYWN0aW9uPlxuIl19
524
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LXRpbWUtY29udGV4dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9jb3JlL2Rhc2hib2FyZC93aWdldC10aW1lLWNvbnRleHQvd2lkZ2V0LXRpbWUtY29udGV4dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9jb3JlL2Rhc2hib2FyZC93aWdldC10aW1lLWNvbnRleHQvd2lkZ2V0LXRpbWUtY29udGV4dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xFLE9BQU8sRUFFTCxTQUFTLEVBQ1QsTUFBTSxFQUNOLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sRUFFTCxlQUFlLEVBQ2YsdUJBQXVCLEVBQ3hCLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUN2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZ0JB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UCxxQkFBcUI7d0JBQ3JCLGlCQUFpQjt3QkFDakIsZ0JBQWdCO3dCQUNoQix3QkFBd0I7d0JBQ3hCLDBCQUEwQjt3QkFDMUIsZ0JBQWdCO3dCQUNoQixRQUFRO3dCQUNSLDZCQUE2Qjt3QkFDN0IsdUJBQXVCO3FCQUN4QjsrWEFTRCxXQUFXO3NCQURWLEtBQUs7Z0JBR0csZUFBZTtzQkFBdkIsS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUs7Z0JBTU4saUJBQWlCO3NCQURoQixNQUFNO2dCQUttQyxNQUFNO3NCQUEvQyxTQUFTO3VCQUFDLDZCQUE2QjtnQkFDUixRQUFRO3NCQUF2QyxTQUFTO3VCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nQ2xhc3MsIE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBlZmZlY3QsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRpb25FbmQsIE5hdmlnYXRpb25FbmQsIE5hdmlnYXRpb25TdGFydCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGFnZ3JlZ2F0aW9uVHlwZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEludGVydmFsLFxuICBJTlRFUlZBTF9USVRMRVMsXG4gIEludGVydmFsUGlja2VyQ29tcG9uZW50XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvaW50ZXJ2YWwtcGlja2VyJztcbmltcG9ydCB7IEJzRHJvcGRvd25EaXJlY3RpdmUsIEJzRHJvcGRvd25Nb2R1bGUgfSBmcm9tICduZ3gtYm9vdHN0cmFwL2Ryb3Bkb3duJztcbmltcG9ydCB7IFRvb2x0aXBNb2R1bGUgfSBmcm9tICduZ3gtYm9vdHN0cmFwL3Rvb2x0aXAnO1xuaW1wb3J0IHsgaW50ZXJ2YWwsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFjdGlvbkJhclNlcnZpY2UgfSBmcm9tICcuLi8uLi9hY3Rpb24tYmFyJztcbmltcG9ydCB7IEFjdGlvbkJhckl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi8uLi9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQUdHUkVHQVRJT05fTElNSVRTIH0gZnJvbSAnLi4vLi4vYWdncmVnYXRpb24vYWdncmVnYXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgQWdncmVnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYWdncmVnYXRpb24vYWdncmVnYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9kYXRlLnBpcGUnO1xuaW1wb3J0IHsgSWNvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9pY29uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEYXRlVGltZVBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2RhdGUtdGltZS1waWNrZXInO1xuaW1wb3J0IHsgRm9ybUdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZm9ybXMvZm9ybS1ncm91cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWVzc2FnZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2Zvcm1zL21lc3NhZ2UuZGlyZWN0aXZlJztcbmltcG9ydCB7IE1lc3NhZ2VzQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZm9ybXMvbWVzc2FnZXMuY29tcG9uZW50JztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICcuLi8uLi9pMThuJztcbmltcG9ydCB7IEM4eVRyYW5zbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2kxOG4vYzh5LXRyYW5zbGF0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQzh5VHJhbnNsYXRlUGlwZSB9IGZyb20gJy4uLy4uL2kxOG4vYzh5LXRyYW5zbGF0ZS5waXBlJztcbmltcG9ydCB7IERhc2hib2FyZENoaWxkQWN0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vZGFzaGJvYXJkLWNoaWxkLWFjdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGFzaGJvYXJkQ2hpbGRDb21wb25lbnQgfSBmcm9tICcuLi9kYXNoYm9hcmQtY2hpbGQuY29tcG9uZW50JztcbmltcG9ydCB7IERhdGVUaW1lQ29udGV4dCwgVGltZUNvbnRleHRFdmVudCwgV2lkZ2V0VGltZUNvbnRleHQgfSBmcm9tICcuLi93aWRnZXQtY2hhbmdlLWV2ZW50Lm1vZGVsJztcbmltcG9ydCB7IFdpZGdldHNEYXNoYm9hcmRFdmVudFNlcnZpY2UgfSBmcm9tICcuLi93aWRnZXRzLWRhc2hib2FyZC1ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9hZ2dyZWdhdGlvbi1waWNrZXIvYWdncmVnYXRpb24tcGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZWFsdGltZUNvbnRyb2xDb21wb25lbnQgfSBmcm9tICcuL3JlYWx0aW1lLWNvbnRyb2wvcmVhbHRpbWUtY29udHJvbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgV2lkZ2V0VGltZUNvbnRleHREYXRlUmFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi93aWRnZXQtdGltZS1jb250ZXh0LWRhdGUtcmFuZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBXaWRnZXRUaW1lQ29udGV4dEhlbHBlclNlcnZpY2UgfSBmcm9tICcuL3dpZGdldC10aW1lLWNvbnRleHQtaGVscGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgV2lkZ2V0VGltZUNvbnRleHRRdWVyeVNlcnZpY2UgfSBmcm9tICcuL3dpZGdldC10aW1lLWNvbnRleHQtcXVlcnkuc2VydmljZSc7XG5pbXBvcnQge1xuICBJbnB1dERhdGVDb250ZXh0UXVlcnlQYXJhbXMsXG4gIFdpZGdldERpc3BsYXlTZXR0aW5ncyxcbiAgV2lkZ2V0VGltZUNvbnRleHRTdGF0ZVxufSBmcm9tICcuL3dpZGdldC10aW1lLWNvbnRleHQubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktd2lkZ2V0LXRpbWUtY29udGV4dCcsXG4gIHRlbXBsYXRlVXJsOiAnLi93aWRnZXQtdGltZS1jb250ZXh0LmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDogeyBjbGFzczogJ2QtZmxleCBhLWktY2VudGVyIGdhcC00JyB9LFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTmdJZixcbiAgICBBY3Rpb25CYXJJdGVtQ29tcG9uZW50LFxuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBCc0Ryb3Bkb3duTW9kdWxlLFxuICAgIFRvb2x0aXBNb2R1bGUsXG4gICAgSWNvbkRpcmVjdGl2ZSxcbiAgICBJbnRlcnZhbFBpY2tlckNvbXBvbmVudCxcbiAgICBGb3JtR3JvdXBDb21wb25lbnQsXG4gICAgTmdDbGFzcyxcbiAgICBDOHlUcmFuc2xhdGVEaXJlY3RpdmUsXG4gICAgTWVzc2FnZXNDb21wb25lbnQsXG4gICAgTWVzc2FnZURpcmVjdGl2ZSxcbiAgICBSZWFsdGltZUNvbnRyb2xDb21wb25lbnQsXG4gICAgQWdncmVnYXRpb25QaWNrZXJDb21wb25lbnQsXG4gICAgQzh5VHJhbnNsYXRlUGlwZSxcbiAgICBEYXRlUGlwZSxcbiAgICBEYXNoYm9hcmRDaGlsZEFjdGlvbkNvbXBvbmVudCxcbiAgICBEYXRlVGltZVBpY2tlckNvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFdpZGdldFRpbWVDb250ZXh0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICByZWFkb25seSBJTlRFUlZBTF9USVRMRVMgPSBJTlRFUlZBTF9USVRMRVM7XG4gIHJlYWRvbmx5IERBVEVfRk9STUFUID0gJ3Nob3J0JztcbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgY29tcG9uZW50IGNhbiBkZWNvdXBsZSBvciBub3QuXG4gICAqL1xuICBASW5wdXQoKVxuICBjYW5EZWNvdXBsZSA9IHRydWU7XG5cbiAgQElucHV0KCkgZGlzcGxheVNldHRpbmdzOiBXaWRnZXREaXNwbGF5U2V0dGluZ3M7XG5cbiAgQElucHV0KCkgaGlkZGVuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGVhY2ggY2hhbmdlIGFzIGFuIGFycmF5IG9mIGRhdGVzIFtmcm9tLCB0b10uXG4gICAqL1xuICBAT3V0cHV0KClcbiAgZGF0ZUNvbnRleHRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIEBWaWV3Q2hpbGQoRGFzaGJvYXJkQ2hpbGRBY3Rpb25Db21wb25lbnQpIGFjdGlvbjogRGFzaGJvYXJkQ2hpbGRBY3Rpb25Db21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoQnNEcm9wZG93bkRpcmVjdGl2ZSkgZHJvcGRvd246IEJzRHJvcGRvd25EaXJlY3RpdmU7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHRpbWUgY29udGV4dCBpcyBib3VuZCB0byB0aGUgZ2xvYmFsIHNjb3BlLlxuICAgKi9cbiAgaXNDb3VwbGVkID0gdHJ1ZTtcbiAgZGVjb3VwbGVUaW1lQ29udGV4dExhYmVsID0gZ2V0dGV4dCgnRGVjb3VwbGUgdGltZSBjb250ZXh0Jyk7XG4gIGNvdXBsZVRpbWVDb250ZXh0TGFiZWwgPSBnZXR0ZXh0KCdDb3VwbGUgdGltZSBjb250ZXh0Jyk7XG4gIGZvcm06IFJldHVyblR5cGU8V2lkZ2V0VGltZUNvbnRleHRDb21wb25lbnRbJ2NyZWF0ZUZvcm0nXT47XG4gIGFjdGlvbkJhckluR3JvdXBQcmlvcml0eTogbnVtYmVyO1xuICBkaXNhYmxlZEFnZ3JlZ2F0aW9uczogUGFydGlhbDxSZWNvcmQ8YWdncmVnYXRpb25UeXBlLCBib29sZWFuPj4gPSB7fTtcbiAgc2xpZGVyQ2hhbmdlOiBib29sZWFuO1xuICByZWFkb25seSBERUZBVUxUX0lOVEVSVkFMOiBJbnRlcnZhbFsnaWQnXSA9ICdkYXlzJztcbiAgcmVhZG9ubHkgQUNUSU9OX0JBUl9QUklPUklUWSA9IDc7XG4gIHJlYWRvbmx5IEFDVElPTl9CQVJfR1JPVVBfSUQgPSAndGltZWNvbnRleHQnO1xuICByZWFkb25seSBSRUFMVElNRV9JTlRFUlZBTCA9IDEwMDA7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICBwcml2YXRlIG5hdmlnYXRpb25JblByb2dyZXNzOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWx0aW1lU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgaXNBdXRvUmVmcmVzaEVuYWJsZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBpZ25vcmUgb25seSBESS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgd2lkZ2V0RXZlbnRTZXJ2aWNlOiBXaWRnZXRzRGFzaGJvYXJkRXZlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGFzaGJvYXJkQ2hpbGQ6IERhc2hib2FyZENoaWxkQ29tcG9uZW50LFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgcXVlcnlTZXJ2aWNlOiBXaWRnZXRUaW1lQ29udGV4dFF1ZXJ5U2VydmljZSxcbiAgICBwcml2YXRlIGhlbHBlclNlcnZpY2U6IFdpZGdldFRpbWVDb250ZXh0SGVscGVyU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgYWN0aW9uQmFyU2VydmljZTogQWN0aW9uQmFyU2VydmljZSxcbiAgICBwcml2YXRlIGFnZ3JlZ2F0aW9uU2VydmljZTogQWdncmVnYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgd2lkZ2V0VGltZUNvbnRleHREYXRlUmFuZ2VTZXJ2aWNlOiBXaWRnZXRUaW1lQ29udGV4dERhdGVSYW5nZVNlcnZpY2VcbiAgKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLndpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZS50aW1lQ29udGV4dENoYW5nZSgpO1xuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgY29uc3QgdXBkYXRlZEZvcm1EYXRhID0ge1xuICAgICAgICAgIGRhdGU6IFtuZXcgRGF0ZShkYXRhLmRhdGVGcm9tKSwgbmV3IERhdGUoZGF0YS5kYXRlVG8pXSxcbiAgICAgICAgICBpbnRlcnZhbDogZGF0YS5pbnRlcnZhbCxcbiAgICAgICAgICByZWFsdGltZTogZmFsc2UsXG4gICAgICAgICAgYWdncmVnYXRpb246IHRoaXMuZm9ybS52YWx1ZS5hZ2dyZWdhdGlvblxuICAgICAgICB9IGFzIFdpZGdldFRpbWVDb250ZXh0U3RhdGU7XG4gICAgICAgIHRoaXMuc2xpZGVyQ2hhbmdlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kYXRlQ29udGV4dENoYW5nZS5lbWl0KHsgLi4udXBkYXRlZEZvcm1EYXRhLCBzbGlkZXJDaGFuZ2U6IHRydWUgfSk7XG4gICAgICAgIHRoaXMuc3RvcFJlYWx0aW1lKCk7XG4gICAgICAgIHRoaXMudXBkYXRlRm9ybVZhbHVlcyh1cGRhdGVkRm9ybURhdGEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmUgU3Vic2NyaWJpbmcgdG8gdGhlIGdsb2JhbCBjb250ZXh0LlxuICAgKi9cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5hY3Rpb25CYXJJbkdyb3VwUHJpb3JpdHkgPSB0aGlzLmhlbHBlclNlcnZpY2UuZ2V0QWN0aW9uQmFyUHJpb3JpdHkodGhpcy5kaXNwbGF5U2V0dGluZ3MpO1xuICAgIGNvbnN0IGluaXRpYWxDb250ZXh0OiBXaWRnZXRUaW1lQ29udGV4dFN0YXRlID1cbiAgICAgIHRoaXMuZ2V0SW5pdGlhbENvbnRleHQoKSB8fCB0aGlzLmdldERlZmF1bHRDb250ZXh0KCk7XG4gICAgaW5pdGlhbENvbnRleHQuYWdncmVnYXRpb24gPSB0aGlzLmNhbGN1bGF0ZUFnZ3JlZ2F0aW9uKFxuICAgICAgaW5pdGlhbENvbnRleHQuZGF0ZSxcbiAgICAgIGluaXRpYWxDb250ZXh0LmFnZ3JlZ2F0aW9uXG4gICAgKTtcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmNyZWF0ZUZvcm0oaW5pdGlhbENvbnRleHQpO1xuXG4gICAgdGhpcy5kYXRlQ29udGV4dENoYW5nZS5lbWl0KHtcbiAgICAgIGRhdGU6IGluaXRpYWxDb250ZXh0LmRhdGUsXG4gICAgICByZWFsdGltZTogaW5pdGlhbENvbnRleHQucmVhbHRpbWUsXG4gICAgICBhZ2dyZWdhdGlvbjogaW5pdGlhbENvbnRleHQuYWdncmVnYXRpb25cbiAgICB9KTtcbiAgICBpZiAodGhpcy5pc0NvdXBsZWQpIHtcbiAgICAgIHRoaXMucXVlcnlTZXJ2aWNlLnNldERhdGVDb250ZXh0UXVlcnlQYXJhbXMoaW5pdGlhbENvbnRleHQpO1xuICAgIH1cbiAgICB0aGlzLnN1YnNjcmliZVRvR2xvYmFsQ29udGV4dCgpO1xuICAgIHRoaXMuc3Vic2NyaWJlVG9RdWVyeVBhcmFtc0NoYW5nZSgpO1xuICAgIHRoaXMuc3Vic2NyaWJlVG9Sb3V0ZXJFdmVudHMoKTtcbiAgICB0aGlzLnN1YnNjcmliZVRvSW50ZXJ2YWxDaGFuZ2UoKTtcbiAgICB0aGlzLnN1YnNjcmliZVRvUmVhbHRpbWVDaGFuZ2UoKTtcbiAgICB0aGlzLnN1YnNjcmliZVRvQWdncmVnYXRpb25DaGFuZ2UoKTtcblxuICAgIHRoaXMud2lkZ2V0RXZlbnRTZXJ2aWNlLm9uQXV0b1JlZnJlc2gkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICB0YXAoYXV0b1JlZnJlc2ggPT4gKHRoaXMuaXNBdXRvUmVmcmVzaEVuYWJsZWQgPSBhdXRvUmVmcmVzaCkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKGF1dG9SZWZyZXNoID0+IHtcbiAgICAgICAgLy8gRml4IGZvcjpcbiAgICAgICAgLy8gMS4gTWFrZSBhIGdyb3VwIHdpdGggZGFzaGJvYXJkIGhhdmluZyBhIHdpZGdldCB3aXRoIHdpdGggYXV0by1yZWZyZXNoIHRpbWUgY29udGV4dCBlbmFibGVkLlxuICAgICAgICAvLyAyLiBXaGVuIHlvdSByb3V0ZSB0byBlLmcuIGhvbWUgcGFnZSBhbmQgYmFjayB0byB0aGUgZ3JvdXAgZGFzaGJvYXJkLCBub25lIG9mIGEgZ3JvdXBzIHdpbGwgYmUgcm91dGFibGUgYWdhaW4uXG4gICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICBhdXRvUmVmcmVzaCA/IHRoaXMub25EaXNhYmxlQXV0b1JlZnJlc2goKSA6IHRoaXMuZW5hYmxlRGF0ZVJhbmdlQW5kQWdncmVnYXRpb24oKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIGlmIChpbml0aWFsQ29udGV4dC5yZWFsdGltZSkge1xuICAgICAgdGhpcy5vblJlYWx0aW1lVmFsdWVDaGFuZ2UoaW5pdGlhbENvbnRleHQucmVhbHRpbWUpO1xuICAgICAgdGhpcy5zdGFydFJlYWx0aW1lKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmUgQWRkaW5nIGN1c3RvbSBhY3Rpb25zLlxuICAgKi9cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNhbkRlY291cGxlKSB7XG4gICAgICB0aGlzLmRhc2hib2FyZENoaWxkLmFkZEFjdGlvbnMoW3RoaXMuYWN0aW9uXSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgdGhlIGNvdXBsaW5nIG9uIG9yIG9mZi5cbiAgICovXG4gIHRvZ2dsZURlY291cGxpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5pc0NvdXBsZWQgPSAhdGhpcy5pc0NvdXBsZWQ7XG4gICAgY29uc3QgbGFzdEV2ZW50VmFsdWUgPSB0aGlzLndpZGdldEV2ZW50U2VydmljZS5nZXRMYXN0VmFsdWUoJ1RJTUVfQ09OVEVYVCcpO1xuICAgIGNvbnN0IHsgcmVhbHRpbWUsIGFnZ3JlZ2F0aW9uLCBpbnRlcnZhbCB9ID0gbGFzdEV2ZW50VmFsdWU7XG4gICAgbGV0IGRhdGU6IERhdGVUaW1lQ29udGV4dDtcbiAgICBpZiAoaW50ZXJ2YWwpIHtcbiAgICAgIGRhdGUgPSB0aGlzLmhlbHBlclNlcnZpY2UuZ2V0RGF0ZVRpbWVDb250ZXh0QnlJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGUgPSBsYXN0RXZlbnRWYWx1ZS5kYXRlVGltZUNvbnRleHQ7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlRm9ybVZhbHVlcyh7IGRhdGUsIGludGVydmFsLCByZWFsdGltZSwgYWdncmVnYXRpb24gfSk7XG5cbiAgICBpZiAodGhpcy5pc0NvdXBsZWQpIHtcbiAgICAgIHRoaXMuc3Vic2NyaWJlVG9HbG9iYWxDb250ZXh0KCk7XG4gICAgICB0aGlzLmRhdGVDb250ZXh0Q2hhbmdlLmVtaXQoeyBkYXRlLCByZWFsdGltZSwgYWdncmVnYXRpb24gfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmVGcm9tR2xvYmFsQ29udGV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIGZvcm0gdmFsdWUgdG8gZ2xvYmFsIG9yIGxvY2FsIGRhdGUgY29udGV4dC5cbiAgICovXG4gIGFwcGx5RGF0ZXRpbWVDb250ZXh0KCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlKHtcbiAgICAgIGRhdGU6IFtcbiAgICAgICAgbmV3IERhdGUodGhpcy5mb3JtLnZhbHVlLnRlbXBvcmFyeVVzZXJTZWxlY3RlZEZyb21EYXRlKSxcbiAgICAgICAgbmV3IERhdGUodGhpcy5mb3JtLnZhbHVlLnRlbXBvcmFyeVVzZXJTZWxlY3RlZFRvRGF0ZSlcbiAgICAgIF0sXG4gICAgICBpbnRlcnZhbDogbnVsbCxcbiAgICAgIHJlYWx0aW1lOiB0aGlzLmZvcm0udmFsdWUucmVhbHRpbWUsXG4gICAgICBhZ2dyZWdhdGlvbjogdGhpcy5mb3JtLnZhbHVlLmFnZ3JlZ2F0aW9uXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIGZvcm0gdG8gaW5pdGlhbCB2YWx1ZSBhbmQgdXBkYXRlIGNvbnRleHQuXG4gICAqL1xuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BSZWFsdGltZSgpO1xuICAgIHRoaXMudXBkYXRlKHRoaXMuZ2V0RGVmYXVsdENvbnRleHQoKSk7XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZSB1bnN1YnNjcmliaW5nLlxuICAgKi9cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy51bnN1YnNjcmliZUZyb21HbG9iYWxDb250ZXh0KCk7XG4gICAgdGhpcy5jbGVhclF1ZXJ5UGFyYW1zSWZOZWVkZWQoKTtcbiAgICB0aGlzLndpZGdldEV2ZW50U2VydmljZS5zZXRSZWFsdGltZVRpbWVDb250ZXh0U2V0dGluZygpO1xuICAgIHRoaXMud2lkZ2V0RXZlbnRTZXJ2aWNlLmVtaXRBdXRvUmVmcmVzaChmYWxzZSk7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb0ludGVydmFsQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybS5jb250cm9scy5jdXJyZW50RGF0ZUNvbnRleHRJbnRlcnZhbC52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoaW50ZXJ2YWwgPT4ge1xuICAgICAgICBsZXQgZGF0ZTogRGF0ZVRpbWVDb250ZXh0O1xuICAgICAgICBpZiAoaW50ZXJ2YWwgPT09ICdjdXN0b20nKSB7XG4gICAgICAgICAgZGF0ZSA9IFtcbiAgICAgICAgICAgIG5ldyBEYXRlKHRoaXMuZm9ybS5jb250cm9scy5jdXJyZW50RGF0ZUNvbnRleHRGcm9tRGF0ZS52YWx1ZSksXG4gICAgICAgICAgICBuZXcgRGF0ZSh0aGlzLmZvcm0uY29udHJvbHMuY3VycmVudERhdGVDb250ZXh0VG9EYXRlLnZhbHVlKVxuICAgICAgICAgIF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGF0ZSA9IHRoaXMuaGVscGVyU2VydmljZS5nZXREYXRlVGltZUNvbnRleHRCeUludGVydmFsKGludGVydmFsKTtcbiAgICAgICAgICB0aGlzLmRyb3Bkb3duLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlKHtcbiAgICAgICAgICBkYXRlLFxuICAgICAgICAgIGludGVydmFsLFxuICAgICAgICAgIHJlYWx0aW1lOiB0aGlzLmZvcm0udmFsdWUucmVhbHRpbWUsXG4gICAgICAgICAgYWdncmVnYXRpb246IHRoaXMuZm9ybS52YWx1ZS5hZ2dyZWdhdGlvblxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb1JlYWx0aW1lQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybS5jb250cm9scy5yZWFsdGltZS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShyZWFsdGltZSA9PiB7XG4gICAgICB0aGlzLm9uUmVhbHRpbWVWYWx1ZUNoYW5nZShyZWFsdGltZSk7XG5cbiAgICAgIGlmIChyZWFsdGltZSkge1xuICAgICAgICB0aGlzLnN0YXJ0UmVhbHRpbWUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RvcFJlYWx0aW1lKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZVRvQWdncmVnYXRpb25DaGFuZ2UoKSB7XG4gICAgdGhpcy5mb3JtLmNvbnRyb2xzLmFnZ3JlZ2F0aW9uLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZShhZ2dyZWdhdGlvbiA9PiB7XG4gICAgICAgIGlmICh0aGlzLnNsaWRlckNoYW5nZSkge1xuICAgICAgICAgIHRoaXMuc2xpZGVyQ2hhbmdlID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlKHtcbiAgICAgICAgICBkYXRlOiBbXG4gICAgICAgICAgICBuZXcgRGF0ZSh0aGlzLmZvcm0udmFsdWUuY3VycmVudERhdGVDb250ZXh0RnJvbURhdGUpLFxuICAgICAgICAgICAgbmV3IERhdGUodGhpcy5mb3JtLnZhbHVlLmN1cnJlbnREYXRlQ29udGV4dFRvRGF0ZSlcbiAgICAgICAgICBdLFxuICAgICAgICAgIGludGVydmFsOiB0aGlzLmZvcm0udmFsdWUuY3VycmVudERhdGVDb250ZXh0SW50ZXJ2YWwsXG4gICAgICAgICAgcmVhbHRpbWU6IHRoaXMuZm9ybS52YWx1ZS5yZWFsdGltZSxcbiAgICAgICAgICBhZ2dyZWdhdGlvblxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVGb3JtKGNvbnRleHQ6IFdpZGdldFRpbWVDb250ZXh0U3RhdGUpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICB0ZW1wb3JhcnlVc2VyU2VsZWN0ZWRGcm9tRGF0ZTogY29udGV4dC5kYXRlWzBdLnRvSVNPU3RyaW5nKCksXG4gICAgICB0ZW1wb3JhcnlVc2VyU2VsZWN0ZWRUb0RhdGU6IGNvbnRleHQuZGF0ZVsxXS50b0lTT1N0cmluZygpLFxuICAgICAgY3VycmVudERhdGVDb250ZXh0RnJvbURhdGU6IGNvbnRleHQuZGF0ZVswXS50b0lTT1N0cmluZygpLFxuICAgICAgY3VycmVudERhdGVDb250ZXh0VG9EYXRlOiBjb250ZXh0LmRhdGVbMV0udG9JU09TdHJpbmcoKSxcbiAgICAgIGN1cnJlbnREYXRlQ29udGV4dEludGVydmFsOiBjb250ZXh0LmludGVydmFsIHx8ICdjdXN0b20nLFxuICAgICAgcmVhbHRpbWU6IGNvbnRleHQucmVhbHRpbWUsXG4gICAgICBhZ2dyZWdhdGlvbjogY29udGV4dC5hZ2dyZWdhdGlvblxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpcmVzIGEgbmV3IFdpZGdldENoYW5nZUV2ZW50IGVpdGhlciBvbiB0aGUgbG9jYWwgY2hhbmdlIGVtaXR0ZXIgb3Igb24gdGhlIGdsb2JhbCBvbmUuXG4gICAqIEBwYXJhbSB3aWRnZXRUaW1lQ29udGV4dFN0YXRlIE5ldyB3aWRnZXQgdGltZSBjb250ZXh0IHZhbHVlLiovXG4gIHByaXZhdGUgdXBkYXRlKHsgZGF0ZSwgaW50ZXJ2YWwsIHJlYWx0aW1lLCBhZ2dyZWdhdGlvbiB9OiBXaWRnZXRUaW1lQ29udGV4dFN0YXRlKTogdm9pZCB7XG4gICAgY29uc3QgdmFsaWRBZ2dyZWdhdGlvbiA9IHRoaXMuY2FsY3VsYXRlQWdncmVnYXRpb24oZGF0ZSwgYWdncmVnYXRpb24pO1xuICAgIGlmICh0aGlzLmlzQ291cGxlZCkge1xuICAgICAgY29uc3QgZXZlbnREYXRhOiBXaWRnZXRUaW1lQ29udGV4dCA9XG4gICAgICAgIGludGVydmFsICYmIGludGVydmFsICE9PSAnY3VzdG9tJ1xuICAgICAgICAgID8geyBpbnRlcnZhbCwgcmVhbHRpbWUsIGFnZ3JlZ2F0aW9uOiB2YWxpZEFnZ3JlZ2F0aW9uIH1cbiAgICAgICAgICA6IHsgZGF0ZVRpbWVDb250ZXh0OiBkYXRlLCByZWFsdGltZSwgYWdncmVnYXRpb246IHZhbGlkQWdncmVnYXRpb24gfTtcbiAgICAgIHRoaXMud2lkZ2V0RXZlbnRTZXJ2aWNlLmVtaXQoeyB0eXBlOiAnVElNRV9DT05URVhUJywgZGF0YTogZXZlbnREYXRhIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZUZvcm1WYWx1ZXMoeyBkYXRlLCBpbnRlcnZhbCwgcmVhbHRpbWUsIGFnZ3JlZ2F0aW9uOiB2YWxpZEFnZ3JlZ2F0aW9uIH0pO1xuICAgICAgdGhpcy5kYXRlQ29udGV4dENoYW5nZS5lbWl0KHsgZGF0ZSwgcmVhbHRpbWUsIGFnZ3JlZ2F0aW9uOiB2YWxpZEFnZ3JlZ2F0aW9uIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9HbG9iYWxDb250ZXh0KCk6IHZvaWQge1xuICAgIGNvbnN0IGV2ZW50JCA9IHRoaXMud2lkZ2V0RXZlbnRTZXJ2aWNlLmdldE9ic2VydmFibGU8VGltZUNvbnRleHRFdmVudD4oJ1RJTUVfQ09OVEVYVCcpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gZXZlbnQkLnN1YnNjcmliZSgoY29udGV4dDogV2lkZ2V0VGltZUNvbnRleHQpID0+IHtcbiAgICAgIGxldCBkYXRlOiBEYXRlVGltZUNvbnRleHQ7XG4gICAgICBjb25zdCB7IHJlYWx0aW1lLCBpbnRlcnZhbCwgYWdncmVnYXRpb24gfSA9IGNvbnRleHQ7XG4gICAgICBpZiAoaW50ZXJ2YWwpIHtcbiAgICAgICAgZGF0ZSA9IHRoaXMuaGVscGVyU2VydmljZS5nZXREYXRlVGltZUNvbnRleHRCeUludGVydmFsKGNvbnRleHQuaW50ZXJ2YWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0ZSA9IGNvbnRleHQuZGF0ZVRpbWVDb250ZXh0O1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRhdGVDb250ZXh0Q2hhbmdlLmVtaXQoe1xuICAgICAgICBkYXRlLFxuICAgICAgICBzbGlkZXJDaGFuZ2U6IGZhbHNlLFxuICAgICAgICBpbnRlcnZhbCxcbiAgICAgICAgcmVhbHRpbWUsXG4gICAgICAgIGFnZ3JlZ2F0aW9uXG4gICAgICB9KTtcbiAgICAgIHRoaXMudXBkYXRlRm9ybVZhbHVlcyh7IGRhdGUsIGludGVydmFsLCByZWFsdGltZSwgYWdncmVnYXRpb24gfSk7XG4gICAgICB0aGlzLnF1ZXJ5U2VydmljZS5zZXREYXRlQ29udGV4dFF1ZXJ5UGFyYW1zKHsgaW50ZXJ2YWwsIGRhdGUsIHJlYWx0aW1lLCBhZ2dyZWdhdGlvbiB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRm9ybVZhbHVlcyh7XG4gICAgZGF0ZSxcbiAgICBpbnRlcnZhbCxcbiAgICByZWFsdGltZSxcbiAgICBhZ2dyZWdhdGlvblxuICB9OiBXaWRnZXRUaW1lQ29udGV4dFN0YXRlKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoXG4gICAgICB7XG4gICAgICAgIHRlbXBvcmFyeVVzZXJTZWxlY3RlZEZyb21EYXRlOiBkYXRlWzBdLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIHRlbXBvcmFyeVVzZXJTZWxlY3RlZFRvRGF0ZTogZGF0ZVsxXS50b0lTT1N0cmluZygpLFxuICAgICAgICBjdXJyZW50RGF0ZUNvbnRleHRGcm9tRGF0ZTogZGF0ZVswXS50b0lTT1N0cmluZygpLFxuICAgICAgICBjdXJyZW50RGF0ZUNvbnRleHRUb0RhdGU6IGRhdGVbMV0udG9JU09TdHJpbmcoKSxcbiAgICAgICAgcmVhbHRpbWUsXG4gICAgICAgIGN1cnJlbnREYXRlQ29udGV4dEludGVydmFsOiBpbnRlcnZhbCB8fCAnY3VzdG9tJyxcbiAgICAgICAgYWdncmVnYXRpb246IGFnZ3JlZ2F0aW9uIHx8IG51bGxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB1bnN1YnNjcmliZUZyb21HbG9iYWxDb250ZXh0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEluaXRpYWxDb250ZXh0KCk6IFdpZGdldFRpbWVDb250ZXh0U3RhdGUgfCBudWxsIHtcbiAgICBjb25zdCBkYXRlVGltZUNvbnRleHRGcm9tUXVlcnlQYXJhbXMgPSB0aGlzLnF1ZXJ5U2VydmljZS5kYXRlVGltZUNvbnRleHRGcm9tUXVlcnlQYXJhbXMoKTtcbiAgICBpZiAoZGF0ZVRpbWVDb250ZXh0RnJvbVF1ZXJ5UGFyYW1zKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5kYXRlVGltZUNvbnRleHRGcm9tUXVlcnlQYXJhbXMsXG4gICAgICAgIHJlYWx0aW1lOiBkYXRlVGltZUNvbnRleHRGcm9tUXVlcnlQYXJhbXMucmVhbHRpbWUgPz8gZmFsc2UsXG4gICAgICAgIGFnZ3JlZ2F0aW9uOiBkYXRlVGltZUNvbnRleHRGcm9tUXVlcnlQYXJhbXMucmVhbHRpbWVcbiAgICAgICAgICA/IG51bGxcbiAgICAgICAgICA6IGRhdGVUaW1lQ29udGV4dEZyb21RdWVyeVBhcmFtcy5hZ2dyZWdhdGlvbiB8fCBudWxsXG4gICAgICB9O1xuICAgIH1cbiAgICAvLyBnZXQgdmFsdWUgZnJvbSBsYXN0IHZhbHVlIG9mIGV2ZW50cyBzZXJ2aWNlXG4gICAgY29uc3QgbGFzdEV2ZW50VmFsdWUgPSB0aGlzLndpZGdldEV2ZW50U2VydmljZS5nZXRMYXN0VmFsdWUoJ1RJTUVfQ09OVEVYVCcpO1xuICAgIGNvbnN0IHJlYWx0aW1lID0gbGFzdEV2ZW50VmFsdWU/LnJlYWx0aW1lID8/IGZhbHNlO1xuICAgIGlmIChsYXN0RXZlbnRWYWx1ZSAmJiBsYXN0RXZlbnRWYWx1ZS5kYXRlVGltZUNvbnRleHQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGU6IGxhc3RFdmVudFZhbHVlLmRhdGVUaW1lQ29udGV4dCxcbiAgICAgICAgaW50ZXJ2YWw6ICdjdXN0b20nLFxuICAgICAgICByZWFsdGltZSxcbiAgICAgICAgYWdncmVnYXRpb246IHJlYWx0aW1lID8gbnVsbCA6IGxhc3RFdmVudFZhbHVlLmFnZ3JlZ2F0aW9uXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAobGFzdEV2ZW50VmFsdWUgJiYgbGFzdEV2ZW50VmFsdWUuaW50ZXJ2YWwpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGU6IHRoaXMuaGVscGVyU2VydmljZS5nZXREYXRlVGltZUNvbnRleHRCeUludGVydmFsKGxhc3RFdmVudFZhbHVlLmludGVydmFsKSxcbiAgICAgICAgaW50ZXJ2YWw6IGxhc3RFdmVudFZhbHVlLmludGVydmFsLFxuICAgICAgICByZWFsdGltZSxcbiAgICAgICAgYWdncmVnYXRpb246IHJlYWx0aW1lID8gbnVsbCA6IGxhc3RFdmVudFZhbHVlLmFnZ3JlZ2F0aW9uXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb1F1ZXJ5UGFyYW1zQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMucXVlcnlTZXJ2aWNlXG4gICAgICAucXVlcnlQYXJhbXNDaGFuZ2UkKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICh7XG4gICAgICAgICAgZGF0ZUNvbnRleHRGcm9tLFxuICAgICAgICAgIGRhdGVDb250ZXh0VG8sXG4gICAgICAgICAgZGF0ZUNvbnRleHRJbnRlcnZhbCxcbiAgICAgICAgICBkYXRlQ29udGV4dFJlYWx0aW1lLFxuICAgICAgICAgIGRhdGVDb250ZXh0QWdncmVnYXRpb25cbiAgICAgICAgfTogSW5wdXREYXRlQ29udGV4dFF1ZXJ5UGFyYW1zKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVhbHRpbWUgPSBkYXRlQ29udGV4dFJlYWx0aW1lID8/IHRoaXMuZm9ybS52YWx1ZS5yZWFsdGltZTtcbiAgICAgICAgICBpZiAoZGF0ZUNvbnRleHRJbnRlcnZhbCkge1xuICAgICAgICAgICAgdGhpcy53aWRnZXRFdmVudFNlcnZpY2UuZW1pdCh7XG4gICAgICAgICAgICAgIHR5cGU6ICdUSU1FX0NPTlRFWFQnLFxuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgaW50ZXJ2YWw6IGRhdGVDb250ZXh0SW50ZXJ2YWwsXG4gICAgICAgICAgICAgICAgcmVhbHRpbWUsXG4gICAgICAgICAgICAgICAgYWdncmVnYXRpb246IGRhdGVDb250ZXh0QWdncmVnYXRpb25cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGVDb250ZXh0OiBEYXRlVGltZUNvbnRleHQgPSBbXG4gICAgICAgICAgICAgIG5ldyBEYXRlKGRhdGVDb250ZXh0RnJvbSksXG4gICAgICAgICAgICAgIG5ldyBEYXRlKGRhdGVDb250ZXh0VG8pXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgdGhpcy53aWRnZXRFdmVudFNlcnZpY2UuZW1pdCh7XG4gICAgICAgICAgICAgIHR5cGU6ICdUSU1FX0NPTlRFWFQnLFxuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgZGF0ZVRpbWVDb250ZXh0OiBkYXRlQ29udGV4dCxcbiAgICAgICAgICAgICAgICByZWFsdGltZSxcbiAgICAgICAgICAgICAgICBhZ2dyZWdhdGlvbjogZGF0ZUNvbnRleHRBZ2dyZWdhdGlvblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyUXVlcnlQYXJhbXNJZk5lZWRlZCgpOiB2b2lkIHtcbiAgICAvLyBJZiBuYXZpZ2F0aW9uIGlzIGluIHByb2dyZXNzLCByb3V0ZXIgd2lsbCB0YWtlIGNhcmUgb2YgY2xlYXJpbmcgcXVlcnkgcGFyYW1zLiBUaGlzIHdheSB3ZSBhdm9pZCB1bm5lY2Vzc2FyeSBtYW5pcHVsYXRpb24gb2YgYnJvd3NlciBoaXN0b3J5XG4gICAgaWYgKHRoaXMubmF2aWdhdGlvbkluUHJvZ3Jlc3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gY2hlY2sgaWYgYW55IG90aGVyIFdpZGdldFRpbWVDb250ZXh0Q29tcG9uZW50IGFjdGlvbiBpbiBhY3Rpb24gYmFyIGV4aXN0c1xuICAgIGNvbnN0IGFueVdpZGdldFRpbWVDb250ZXh0QWN0aW9uTGVmdCA9IEFycmF5LmZyb20odGhpcy5hY3Rpb25CYXJTZXJ2aWNlLnN0YXRlKS5zb21lKFxuICAgICAgYWN0aW9uID0+IGFjdGlvbi5ncm91cElkID09PSB0aGlzLkFDVElPTl9CQVJfR1JPVVBfSURcbiAgICApO1xuICAgIGlmICghYW55V2lkZ2V0VGltZUNvbnRleHRBY3Rpb25MZWZ0KSB7XG4gICAgICB0aGlzLnF1ZXJ5U2VydmljZS5jbGVhclF1ZXJ5UGFyYW1zKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb1JvdXRlckV2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLnJvdXRlci5ldmVudHNcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoXG4gICAgICAgICAgZSA9PlxuICAgICAgICAgICAgZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCB8fCBlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCB8fCBlIGluc3RhbmNlb2YgQWN0aXZhdGlvbkVuZFxuICAgICAgICApLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoZSA9PiB7XG4gICAgICAgIHRoaXMubmF2aWdhdGlvbkluUHJvZ3Jlc3MgPSBlIGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0O1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldERlZmF1bHRDb250ZXh0KCk6IFdpZGdldFRpbWVDb250ZXh0U3RhdGUge1xuICAgIHJldHVybiB7XG4gICAgICBkYXRlOiB0aGlzLmhlbHBlclNlcnZpY2UuZ2V0RGF0ZVRpbWVDb250ZXh0QnlJbnRlcnZhbCh0aGlzLkRFRkFVTFRfSU5URVJWQUwpLFxuICAgICAgaW50ZXJ2YWw6IHRoaXMuREVGQVVMVF9JTlRFUlZBTCxcbiAgICAgIHJlYWx0aW1lOiBmYWxzZSxcbiAgICAgIGFnZ3JlZ2F0aW9uOiBhZ2dyZWdhdGlvblR5cGUuTUlOVVRFTFlcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydFJlYWx0aW1lKCk6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZURhdGVSYW5nZUFuZEFnZ3JlZ2F0aW9uKCk7XG5cbiAgICB0aGlzLnJlYWx0aW1lU3Vic2NyaXB0aW9uID0gaW50ZXJ2YWwodGhpcy5SRUFMVElNRV9JTlRFUlZBTClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBjb25zdCBuZXdEYXRlRnJvbSA9IG5ldyBEYXRlKFxuICAgICAgICAgIG5ldyBEYXRlKHRoaXMuZm9ybS52YWx1ZS5jdXJyZW50RGF0ZUNvbnRleHRGcm9tRGF0ZSkudmFsdWVPZigpICsgdGhpcy5SRUFMVElNRV9JTlRFUlZBTFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBuZXdEYXRlVG8gPSBuZXcgRGF0ZShcbiAgICAgICAgICBuZXcgRGF0ZSh0aGlzLmZvcm0udmFsdWUuY3VycmVudERhdGVDb250ZXh0VG9EYXRlKS52YWx1ZU9mKCkgKyB0aGlzLlJFQUxUSU1FX0lOVEVSVkFMXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMudXBkYXRlRm9ybVZhbHVlcyh7XG4gICAgICAgICAgZGF0ZTogW25ld0RhdGVGcm9tLCBuZXdEYXRlVG9dLFxuICAgICAgICAgIGludGVydmFsOiB0aGlzLmZvcm0udmFsdWUuY3VycmVudERhdGVDb250ZXh0SW50ZXJ2YWwsXG4gICAgICAgICAgcmVhbHRpbWU6IHRydWUsXG4gICAgICAgICAgYWdncmVnYXRpb246IG51bGxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb25EaXNhYmxlQXV0b1JlZnJlc2goKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtLmNvbnRyb2xzLmFnZ3JlZ2F0aW9uLnNldFZhbHVlKG51bGwpO1xuICAgIHRoaXMuZGlzYWJsZURhdGVSYW5nZUFuZEFnZ3JlZ2F0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIGRpc2FibGVEYXRlUmFuZ2VBbmRBZ2dyZWdhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm0uY29udHJvbHMudGVtcG9yYXJ5VXNlclNlbGVjdGVkRnJvbURhdGUuZGlzYWJsZSgpO1xuICAgIHRoaXMuZm9ybS5jb250cm9scy50ZW1wb3JhcnlVc2VyU2VsZWN0ZWRUb0RhdGUuZGlzYWJsZSgpO1xuICAgIHRoaXMuZm9ybS5jb250cm9scy5hZ2dyZWdhdGlvbi5kaXNhYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIGVuYWJsZURhdGVSYW5nZUFuZEFnZ3JlZ2F0aW9uKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZvcm0uY29udHJvbHMucmVhbHRpbWUudmFsdWUgfHwgdGhpcy5pc0F1dG9SZWZyZXNoRW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmZvcm0uY29udHJvbHMudGVtcG9yYXJ5VXNlclNlbGVjdGVkRnJvbURhdGUuZW5hYmxlKCk7XG4gICAgdGhpcy5mb3JtLmNvbnRyb2xzLnRlbXBvcmFyeVVzZXJTZWxlY3RlZFRvRGF0ZS5lbmFibGUoKTtcbiAgICB0aGlzLmZvcm0uY29udHJvbHMuYWdncmVnYXRpb24uZW5hYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIHN0b3BSZWFsdGltZSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlYWx0aW1lU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuZW5hYmxlRGF0ZVJhbmdlQW5kQWdncmVnYXRpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgb25SZWFsdGltZVZhbHVlQ2hhbmdlKHJlYWx0aW1lOiBib29sZWFuKTogdm9pZCB7XG4gICAgbGV0IGRhdGVUaW1lQ29udGV4dDogRGF0ZVRpbWVDb250ZXh0O1xuICAgIGlmICh0aGlzLmZvcm0udmFsdWUuY3VycmVudERhdGVDb250ZXh0SW50ZXJ2YWwgIT09ICdjdXN0b20nKSB7XG4gICAgICBkYXRlVGltZUNvbnRleHQgPSB0aGlzLmhlbHBlclNlcnZpY2UuZ2V0RGF0ZVRpbWVDb250ZXh0QnlJbnRlcnZhbChcbiAgICAgICAgdGhpcy5mb3JtLnZhbHVlLmN1cnJlbnREYXRlQ29udGV4dEludGVydmFsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjdXJyZW50VGltZVNwYW5Jbk1zID1cbiAgICAgICAgbmV3IERhdGUodGhpcy5mb3JtLnZhbHVlLmN1cnJlbnREYXRlQ29udGV4dFRvRGF0ZSkudmFsdWVPZigpIC1cbiAgICAgICAgbmV3IERhdGUodGhpcy5mb3JtLnZhbHVlLmN1cnJlbnREYXRlQ29udGV4dEZyb21EYXRlKS52YWx1ZU9mKCk7XG4gICAgICBjb25zdCBkYXRlVG8gPSBuZXcgRGF0ZSgpO1xuICAgICAgY29uc3QgZGF0ZUZyb20gPSBuZXcgRGF0ZShkYXRlVG8udmFsdWVPZigpIC0gY3VycmVudFRpbWVTcGFuSW5Ncyk7XG4gICAgICBkYXRlVGltZUNvbnRleHQgPSBbZGF0ZUZyb20sIGRhdGVUb107XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGUoe1xuICAgICAgZGF0ZTogZGF0ZVRpbWVDb250ZXh0LFxuICAgICAgaW50ZXJ2YWw6IHRoaXMuZm9ybS52YWx1ZS5jdXJyZW50RGF0ZUNvbnRleHRJbnRlcnZhbCxcbiAgICAgIHJlYWx0aW1lLFxuICAgICAgYWdncmVnYXRpb246IG51bGxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY3VsYXRlQWdncmVnYXRpb24oXG4gICAgW2RhdGVGcm9tLCBkYXRlVG9dOiBEYXRlVGltZUNvbnRleHQsXG4gICAgYWdncmVnYXRpb246IGFnZ3JlZ2F0aW9uVHlwZVxuICApOiBhZ2dyZWdhdGlvblR5cGUge1xuICAgIHRoaXMuZGlzYWJsZWRBZ2dyZWdhdGlvbnMgPSB0aGlzLmFnZ3JlZ2F0aW9uU2VydmljZS5nZXREaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9ucyhcbiAgICAgIGRhdGVGcm9tLFxuICAgICAgZGF0ZVRvXG4gICAgKTtcbiAgICBjb25zdCB0aW1lUmFuZ2VJbk1zID0gZGF0ZVRvLnZhbHVlT2YoKSAtIGRhdGVGcm9tLnZhbHVlT2YoKTtcbiAgICBjb25zdCBpc1Byb3BlckFnZ3JlZ2F0aW9uID0gIXRoaXMuZGlzYWJsZWRBZ2dyZWdhdGlvbnNbYWdncmVnYXRpb25dIHx8IGFnZ3JlZ2F0aW9uID09PSBudWxsO1xuXG4gICAgaWYgKGlzUHJvcGVyQWdncmVnYXRpb24pIHtcbiAgICAgIHJldHVybiBhZ2dyZWdhdGlvbjtcbiAgICB9XG4gICAgaWYgKHRpbWVSYW5nZUluTXMgPj0gQUdHUkVHQVRJT05fTElNSVRTLkRBSUxZX0xJTUlUKSB7XG4gICAgICByZXR1cm4gYWdncmVnYXRpb25UeXBlLkRBSUxZO1xuICAgIH0gZWxzZSBpZiAodGltZVJhbmdlSW5NcyA+PSBBR0dSRUdBVElPTl9MSU1JVFMuSE9VUkxZX0xJTUlUKSB7XG4gICAgICByZXR1cm4gYWdncmVnYXRpb25UeXBlLkhPVVJMWTtcbiAgICB9IGVsc2UgaWYgKHRpbWVSYW5nZUluTXMgPj0gQUdHUkVHQVRJT05fTElNSVRTLk1JTlVURUxZX0xJTUlUKSB7XG4gICAgICByZXR1cm4gYWdncmVnYXRpb25UeXBlLk1JTlVURUxZO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiIsIjxjOHktYWN0aW9uLWJhci1pdGVtXG4gICpuZ0lmPVwiaXNDb3VwbGVkICYmICFoaWRkZW5cIlxuICBbcHJpb3JpdHldPVwiQUNUSU9OX0JBUl9QUklPUklUWVwiXG4gIFtncm91cElkXT1cIkFDVElPTl9CQVJfR1JPVVBfSURcIlxuICBbaW5Hcm91cFByaW9yaXR5XT1cImFjdGlvbkJhckluR3JvdXBQcmlvcml0eVwiXG4gIFtwbGFjZW1lbnRdPVwiJ2xlZnQnXCJcbj5cbiAgPG5nLWNvbnRhaW5lclxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImRhdGVUaW1lUGlja2VyXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgZGF0ZTogW2Zvcm0udmFsdWUuY3VycmVudERhdGVDb250ZXh0RnJvbURhdGUsIGZvcm0udmFsdWUuY3VycmVudERhdGVDb250ZXh0VG9EYXRlXVxuICAgIH1cIlxuICA+PC9uZy1jb250YWluZXI+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjxuZy1jb250YWluZXJcbiAgKm5nSWY9XCIhaXNDb3VwbGVkXCJcbiAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZGF0ZVRpbWVQaWNrZXJcIlxuICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgIGRhdGU6IFtmb3JtLnZhbHVlLmN1cnJlbnREYXRlQ29udGV4dEZyb21EYXRlLCBmb3JtLnZhbHVlLmN1cnJlbnREYXRlQ29udGV4dFRvRGF0ZV1cbiAgfVwiXG4+PC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZVxuICAjZGF0ZVRpbWVQaWNrZXJcbiAgbGV0LWRhdGU9XCJkYXRlXCJcbj5cbiAgPGZvcm1cbiAgICBjbGFzcz1cImQtZmxleCBnYXAtMTYgcC1sLXhzLTE2IHAtci14cy0xNiBtLXQteHMtOCBtLWIteHMtOFwiXG4gICAgW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkaXNwbGF5U2V0dGluZ3MuZ2xvYmFsVGltZUNvbnRleHRcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duIGZsZXgtZ3Jvd1wiXG4gICAgICAgICAgI2Ryb3Bkb3duPVwiYnMtZHJvcGRvd25cIlxuICAgICAgICAgIGRyb3Bkb3duXG4gICAgICAgICAgW2luc2lkZUNsaWNrXT1cInRydWVcIlxuICAgICAgICAgICpuZ0lmPVwiZGF0ZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLXRvZ2dsZSBmb3JtLWNvbnRyb2wgbC1oLXRpZ2h0IGQtZmxleCBhLWktY2VudGVyXCJcbiAgICAgICAgICAgIGF0dHIuYXJpYS1sYWJlbD1cInt7IGRhdGVbMF0gfCBjOHlEYXRlOiBEQVRFX0ZPUk1BVCB9fSDigJQge3tcbiAgICAgICAgICAgICAgZGF0ZVsxXSB8IGM4eURhdGU6IERBVEVfRk9STUFUXG4gICAgICAgICAgICB9fVwiXG4gICAgICAgICAgICB0b29sdGlwPVwie3sgZGF0ZVswXSB8IGM4eURhdGU6IERBVEVfRk9STUFUIH19IOKAlCB7eyBkYXRlWzFdIHwgYzh5RGF0ZTogREFURV9GT1JNQVQgfX1cIlxuICAgICAgICAgICAgcGxhY2VtZW50PVwidG9wXCJcbiAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgZGF0YS1jeT1cIndpZGdldC10aW1lLWNvbnRleHQtLWRhdGUtcGlja2VyLWRyb3Bkb3duLWJ1dHRvblwiXG4gICAgICAgICAgICBbYWRhcHRpdmVQb3NpdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICBbZGVsYXldPVwiNTAwXCJcbiAgICAgICAgICAgIGRyb3Bkb3duVG9nZ2xlXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgY2xhc3M9XCJtLXItNFwiXG4gICAgICAgICAgICAgIGM4eUljb249XCJzY2hlZHVsZTFcIlxuICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWNvbCB0ZXh0LWxlZnQgZml0LXdcIj5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtMTJcIlxuICAgICAgICAgICAgICAgIGRhdGEtY3k9XCJ3aWRnZXQtdGltZS1jb250ZXh0LS1zZWxlY3RlZC1pbnRlcnZhbFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBJTlRFUlZBTF9USVRMRVNbZm9ybS5jb250cm9scy5jdXJyZW50RGF0ZUNvbnRleHRJbnRlcnZhbC52YWx1ZV0gfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC0xMCB0ZXh0LW11dGVkIHRleHQtdHJ1bmNhdGVcIlxuICAgICAgICAgICAgICAgIGRhdGEtY3k9XCJ3aWRnZXQtdGltZS1jb250ZXh0LS1zZWxlY3RlZC10aW1lLXJhbmdlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGRhdGVbMF0gfCBjOHlEYXRlOiBEQVRFX0ZPUk1BVCB9fSDigJQge3sgZGF0ZVsxXSB8IGM4eURhdGU6IERBVEVfRk9STUFUIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJldCBtLXItMTYgbS1sLTRcIj48L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8dWxcbiAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24tbWVudSBkcm9wZG93bi1tZW51LS1kYXRlLXJhbmdlXCJcbiAgICAgICAgICAgICpkcm9wZG93bk1lbnVcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Yzh5LWludGVydmFsLXBpY2tlclxuICAgICAgICAgICAgICBjbGFzcz1cImQtY29udGVudHNcIlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjdXJyZW50RGF0ZUNvbnRleHRJbnRlcnZhbFwiXG4gICAgICAgICAgICA+PC9jOHktaW50ZXJ2YWwtcGlja2VyPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZm9ybS5jb250cm9scy5jdXJyZW50RGF0ZUNvbnRleHRJbnRlcnZhbC52YWx1ZSA9PT0gJ2N1c3RvbSdcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtbC0xNiBwLXItMTZcIj5cbiAgICAgICAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXBcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImZvcm0uY29udHJvbHMudGVtcG9yYXJ5VXNlclNlbGVjdGVkRnJvbURhdGUuZXJyb3JzID8gJ2hhcy1lcnJvcicgOiAnJ1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInRnJvbWBkYXRlYCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBmb3I9XCJ0ZW1wb3JhcnlVc2VyU2VsZWN0ZWRGcm9tRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBGcm9tYGRhdGVgXG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPGM4eS1kYXRlLXRpbWUtcGlja2VyXG4gICAgICAgICAgICAgICAgICAgIGlkPVwidGVtcG9yYXJ5VXNlclNlbGVjdGVkRnJvbURhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbbWF4RGF0ZV09XCJmb3JtLnZhbHVlLnRlbXBvcmFyeVVzZXJTZWxlY3RlZFRvRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInRnJvbWBkYXRlYCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybS5jb250cm9scy50ZW1wb3JhcnlVc2VyU2VsZWN0ZWRGcm9tRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGZvcm0uY29udHJvbHMudGVtcG9yYXJ5VXNlclNlbGVjdGVkRnJvbURhdGUuZXJyb3JzID8gJ2hhcy1lcnJvcicgOiAnJ1xuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPjwvYzh5LWRhdGUtdGltZS1waWNrZXI+XG4gICAgICAgICAgICAgICAgICA8Yzh5LW1lc3NhZ2VzIFtzaG93XT1cImZvcm0uY29udHJvbHMudGVtcG9yYXJ5VXNlclNlbGVjdGVkRnJvbURhdGUuZXJyb3JzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxjOHktbWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJkYXRlQWZ0ZXJSYW5nZU1heFwiXG4gICAgICAgICAgICAgICAgICAgICAgW3RleHRdPVwiJ1RoaXMgZGF0ZSBpcyBhZnRlciB0aGUgbGF0ZXN0IGFsbG93ZWQgZGF0ZS4nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYzh5LW1lc3NhZ2U+XG4gICAgICAgICAgICAgICAgICAgIDxjOHktbWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJpbnZhbGlkRGF0ZVRpbWVcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cIidUaGlzIGRhdGUgaXMgaW52YWxpZC4nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYzh5LW1lc3NhZ2U+XG4gICAgICAgICAgICAgICAgICA8L2M4eS1tZXNzYWdlcz5cbiAgICAgICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gICAgICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJmb3JtLmNvbnRyb2xzLnRlbXBvcmFyeVVzZXJTZWxlY3RlZFRvRGF0ZS5lcnJvcnMgPyAnaGFzLWVycm9yJyA6ICcnXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidUb2BkYXRlYCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBmb3I9XCJ0ZW1wb3JhcnlVc2VyU2VsZWN0ZWRUb0RhdGVcIlxuICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgVG9gZGF0ZWBcbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8Yzh5LWRhdGUtdGltZS1waWNrZXJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJ0ZW1wb3JhcnlVc2VyU2VsZWN0ZWRUb0RhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbbWluRGF0ZV09XCJmb3JtLnZhbHVlLnRlbXBvcmFyeVVzZXJTZWxlY3RlZEZyb21EYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidUb2BkYXRlYCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybS5jb250cm9scy50ZW1wb3JhcnlVc2VyU2VsZWN0ZWRUb0RhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJmb3JtLmNvbnRyb2xzLnRlbXBvcmFyeVVzZXJTZWxlY3RlZFRvRGF0ZS5lcnJvcnMgPyAnaGFzLWVycm9yJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgID48L2M4eS1kYXRlLXRpbWUtcGlja2VyPlxuICAgICAgICAgICAgICAgICAgPGM4eS1tZXNzYWdlcyBbc2hvd109XCJmb3JtLmNvbnRyb2xzLnRlbXBvcmFyeVVzZXJTZWxlY3RlZFRvRGF0ZS5lcnJvcnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGM4eS1tZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImRhdGVCZWZvcmVSYW5nZU1pblwiXG4gICAgICAgICAgICAgICAgICAgICAgW3RleHRdPVwiJ1RoaXMgZGF0ZSBpcyBiZWZvcmUgdGhlIGVhcmxpZXN0IGFsbG93ZWQgZGF0ZS4nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYzh5LW1lc3NhZ2U+XG4gICAgICAgICAgICAgICAgICAgIDxjOHktbWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJpbnZhbGlkRGF0ZVRpbWVcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cIidUaGlzIGRhdGUgaXMgaW52YWxpZC4nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYzh5LW1lc3NhZ2U+XG4gICAgICAgICAgICAgICAgICA8L2M4eS1tZXNzYWdlcz5cbiAgICAgICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC0xNiBkLWZsZXggZ2FwLTggc2VwYXJhdG9yLXRvcFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSBmbGV4LWdyb3dcIlxuICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnUmVzZXQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlc2V0KCk7IGRyb3Bkb3duLmlzT3BlbiA9IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtLnZhbHVlLnJlYWx0aW1lXCJcbiAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIFJlc2V0XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc20gZmxleC1ncm93XCJcbiAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ0FwcGx5JyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhcHBseURhdGV0aW1lQ29udGV4dCgpOyBkcm9wZG93bi5pc09wZW4gPSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgICAgIChmb3JtLnByaXN0aW5lICYmIGZvcm0udW50b3VjaGVkKSB8fCBmb3JtLmludmFsaWQgfHwgZm9ybS52YWx1ZS5yZWFsdGltZVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIEFwcGx5XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LWF1dG9cIj5cbiAgICAgIDxjOHktcmVhbHRpbWUtY29udHJvbFxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBwLTAgZmxleC1uby1ncm93IHctYXV0b1wiXG4gICAgICAgICpuZ0lmPVwiZGlzcGxheVNldHRpbmdzLmdsb2JhbFJlYWx0aW1lQ29udGV4dFwiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cInJlYWx0aW1lXCJcbiAgICAgID48L2M4eS1yZWFsdGltZS1jb250cm9sPlxuXG4gICAgICA8Yzh5LWFnZ3JlZ2F0aW9uLXBpY2tlclxuICAgICAgICAqbmdJZj1cImRpc3BsYXlTZXR0aW5ncy5nbG9iYWxBZ2dyZWdhdGlvbkNvbnRleHRcIlxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJhZ2dyZWdhdGlvblwiXG4gICAgICAgIFtkaXNhYmxlZEFnZ3JlZ2F0aW9uc109XCJkaXNhYmxlZEFnZ3JlZ2F0aW9uc1wiXG4gICAgICA+PC9jOHktYWdncmVnYXRpb24tcGlja2VyPlxuICAgIDwvZGl2PlxuICA8L2Zvcm0+XG48L25nLXRlbXBsYXRlPlxuXG48Yzh5LWRhc2hib2FyZC1jaGlsZC1hY3Rpb24+XG4gIDxidXR0b25cbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAoY2xpY2spPVwidG9nZ2xlRGVjb3VwbGluZygpXCJcbiAgPlxuICAgIDxpIFtjOHlJY29uXT1cImlzQ291cGxlZCA/ICdzY2hlZHVsZTEnIDogJ3RvZGF5J1wiPjwvaT5cbiAgICA8c3BhbiBjbGFzcz1cIm0tbC00XCI+XG4gICAgICB7eyAoaXNDb3VwbGVkID8gZGVjb3VwbGVUaW1lQ29udGV4dExhYmVsIDogY291cGxlVGltZUNvbnRleHRMYWJlbCkgfCB0cmFuc2xhdGUgfX1cbiAgICA8L3NwYW4+XG4gIDwvYnV0dG9uPlxuPC9jOHktZGFzaGJvYXJkLWNoaWxkLWFjdGlvbj5cbiJdfQ==