@c8y/ngx-components 1021.55.1 → 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 (64) 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/datapoint-explorer/view/configuration/workspace-configuration.component.d.ts.map +1 -1
  12. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.d.ts.map +1 -1
  13. package/datapoints-export-selector/datapoints-export-selector.component.d.ts +3 -1
  14. package/datapoints-export-selector/datapoints-export-selector.component.d.ts.map +1 -1
  15. package/echart/charts.component.d.ts.map +1 -1
  16. package/esm2022/core/aggregation/aggregation.model.mjs +2 -2
  17. package/esm2022/core/common/interval-based-reload.abstract.mjs +13 -13
  18. package/esm2022/core/dashboard/dashboard-child.component.mjs +3 -3
  19. package/esm2022/core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.mjs +6 -8
  20. package/esm2022/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.component.mjs +9 -1
  21. package/esm2022/core/dashboard/widgets-dashboard-event.service.mjs +19 -2
  22. package/esm2022/core/dashboard/widgets-dashboard.component.mjs +3 -3
  23. package/esm2022/core/dashboard/wiget-time-context/widget-time-context-icon-bar/widget-time-context-icon-bar.component.mjs +3 -3
  24. package/esm2022/core/dashboard/wiget-time-context/widget-time-context.component.mjs +48 -23
  25. package/esm2022/datapoint-explorer/view/configuration/workspace-configuration.component.mjs +13 -8
  26. package/esm2022/datapoint-explorer/view/datapoint-explorer.component.mjs +2 -2
  27. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.mjs +1 -3
  28. package/esm2022/datapoints-export-selector/datapoints-export-selector.component.mjs +9 -5
  29. package/esm2022/echart/charts.component.mjs +22 -84
  30. package/esm2022/widgets/definitions/datapoints-table/index.mjs +3 -2
  31. package/esm2022/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.mjs +3 -3
  32. package/esm2022/widgets/implementations/alarms/alarm-widget-alarms-reload.component.mjs +17 -100
  33. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.mjs +47 -34
  34. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.mjs +35 -13
  35. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/datapoints-table.component.mjs +3 -3
  36. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.mjs +75 -35
  37. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-widget.model.mjs +3 -5
  38. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs +13 -8
  39. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -1
  40. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +7 -6
  41. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -1
  42. package/fesm2022/c8y-ngx-components-echart.mjs +21 -83
  43. package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
  44. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs +2 -1
  45. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs.map +1 -1
  46. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +18 -101
  47. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
  48. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +147 -76
  49. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
  50. package/fesm2022/c8y-ngx-components.mjs +209 -162
  51. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  52. package/locales/locales.pot +3 -7
  53. package/package.json +1 -1
  54. package/widgets/definitions/datapoints-table/index.d.ts.map +1 -1
  55. package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts +18 -63
  56. package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts.map +1 -1
  57. package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.d.ts +4 -2
  58. package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.d.ts.map +1 -1
  59. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts +16 -8
  60. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts.map +1 -1
  61. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.d.ts +21 -4
  62. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.d.ts.map +1 -1
  63. package/widgets/implementations/datapoints-table/datapoints-table-widget.model.d.ts +4 -1
  64. 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==
@@ -39,9 +39,7 @@ export class WorkspaceConfigComponent {
39
39
  }
40
40
  }
41
41
  addConfig(duplicatedConfig) {
42
- const name = uniqueNamesGenerator({
43
- dictionaries: [adjectives, nouns]
44
- });
42
+ const name = uniqueNamesGenerator({ dictionaries: [adjectives, nouns] });
45
43
  const workspace = {
46
44
  id: new Date().toISOString(),
47
45
  label: name,
@@ -50,11 +48,9 @@ export class WorkspaceConfigComponent {
50
48
  if (duplicatedConfig) {
51
49
  workspace.config = duplicatedConfig;
52
50
  }
53
- this.currentConfiguration = { ...workspace };
54
- this.configurations.unshift(workspace);
51
+ this.configurations = [workspace, ...this.configurations];
55
52
  this.initWorkspaceForm();
56
- this.workspaceConfigurationService.saveConfigurations(this.configurations, this.currentConfiguration.id);
57
- this.onConfigurationChange.emit(this.currentConfiguration.config);
53
+ this.changeConfiguration(true, workspace);
58
54
  }
59
55
  changeConfiguration(selected, configuration) {
60
56
  if (!selected) {
@@ -97,6 +93,15 @@ export class WorkspaceConfigComponent {
97
93
  config: JSON.stringify(this.updatedConfig)
98
94
  };
99
95
  this.workspaceConfigurationService.saveConfigurations(this.configurations, this.currentConfiguration.id);
96
+ const control = this.configurationsFormGroup.controls['configurations'];
97
+ const index = this.configurations.findIndex(c => c.id === this.currentConfiguration.id);
98
+ if (index !== -1) {
99
+ control.at(index).patchValue({
100
+ label: this.currentConfiguration.label,
101
+ config: this.currentConfiguration.config,
102
+ id: this.currentConfiguration.id
103
+ });
104
+ }
100
105
  this.router.navigate([], { queryParams });
101
106
  }
102
107
  initializeConfigurations() {
@@ -166,4 +171,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
166
171
  }], onConfigurationChange: [{
167
172
  type: Output
168
173
  }] } });
169
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vZGF0YXBvaW50LWV4cGxvcmVyL3ZpZXcvY29uZmlndXJhdGlvbi93b3Jrc3BhY2UtY29uZmlndXJhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9kYXRhcG9pbnQtZXhwbG9yZXIvdmlldy9jb25maWd1cmF0aW9uL3dvcmtzcGFjZS1jb25maWd1cmF0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLE1BQU0sRUFFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWEsV0FBVyxFQUFhLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hGLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsbUJBQW1CLEVBQ25CLFVBQVUsRUFDVixPQUFPLEVBQ1AsV0FBVyxFQUNaLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBR3RELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7QUFReEQsTUFBTSxPQUFPLHdCQUF3QjtJQU5yQztRQVFZLDBCQUFxQixHQUFHLElB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LENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztTQUNuQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8seUJBQXlCO1FBQy9CLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2xGLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQixPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLEdBQUcsWUFBWSxDQUFDO1FBQzlDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM5RCxJQUFJLENBQUMsNkJBQTZCLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDMUUsQ0FBQztJQUNILENBQUM7K0dBdkxVLHdCQUF3QjttR0FBeEIsd0JBQXdCLDhNQ2xDckMsdzlKQTZJQSwyQ0Q3R1ksVUFBVSxpekVBQUUsZ0JBQWdCLHNsQkFBRSxXQUFXLDhCQUFFLFVBQVUseUxBQUUsYUFBYTs7NEZBRW5FLHdCQUF3QjtrQkFOcEMsU0FBUzsrQkFDRSxzQkFBc0IsY0FFcEIsSUFBSSxXQUNQLENBQUMsVUFBVSxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsYUFBYSxDQUFDOzhCQUd0RSxhQUFhO3NCQUFyQixLQUFLO2dCQUNJLHFCQUFxQjtzQkFBOUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEExMXlNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBDbGlwYm9hcmRTZXJ2aWNlLFxuICBDb250ZXh0Um91dGVTZXJ2aWNlLFxuICBDb3JlTW9kdWxlLFxuICBnZXR0ZXh0LFxuICBWaWV3Q29udGV4dFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEJzRHJvcGRvd25Nb2R1bGUgfSBmcm9tICduZ3gtYm9vdHN0cmFwL2Ryb3Bkb3duJztcbmltcG9ydCB7IFRvb2x0aXBNb2R1bGUgfSBmcm9tICduZ3gtYm9vdHN0cmFwL3Rvb2x0aXAnO1xuaW1wb3J0IHsgV29ya3NwYWNlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vd29ya3NwYWNlLWNvbmZpZ3VyYXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgRGF0YXBvaW50c0dyYXBoV2lkZ2V0Q29uZmlnIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9lY2hhcnQnO1xuaW1wb3J0IHsgV29ya3NwYWNlQ29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuL3dvcmtzcGFjZS1jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyB1bmlxdWVOYW1lc0dlbmVyYXRvciB9IGZyb20gJ3VuaXF1ZS1uYW1lcy1nZW5lcmF0b3InO1xuaW1wb3J0IHsgYWRqZWN0aXZlcywgbm91bnMgfSBmcm9tICcuL25hbWluZy1kaWN0aW9uYXJ5JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXdvcmtzcGFjZS1jb25maWcnLFxuICB0ZW1wbGF0ZVVybDogJy4vd29ya3NwYWNlLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29yZU1vZHVsZSwgQnNEcm9wZG93bk1vZHVsZSwgRm9ybXNNb2R1bGUsIEExMXlNb2R1bGUsIFRvb2x0aXBNb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIFdvcmtzcGFjZUNvbmZpZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgdXBkYXRlZENvbmZpZzogRGF0YXBvaW50c0dyYXBoV2lkZ2V0Q29uZmlnO1xuICBAT3V0cHV0KCkgb25Db25maWd1cmF0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRhcG9pbnRzR3JhcGhXaWRnZXRDb25maWc+KCk7XG5cbiAgY3VycmVudENvbmZpZ3VyYXRpb246IFdvcmtzcGFjZUNvbmZpZ3VyYXRpb247XG4gIGNvbmZpZ3VyYXRpb25zOiBXb3Jrc3BhY2VDb25maWd1cmF0aW9uW10gPSBbXTtcbiAgY29uZmlndXJhdGlvbnNGb3JtR3JvdXA6IEZvcm1Hcm91cDtcbiAgYWN0aXZlQ29uZmlnVG9vbHRpcCA9IGdldHRleHQoJ0FjdGl2ZSBjb25maWd1cmF0aW9uIGNhbm5vdCBiZSByZW1vdmVkJyk7XG4gIHJlbW92ZUNvbmZpZ1Rvb2x0aXAgPSBnZXR0ZXh0KCdSZW1vdmUgY29uZmlndXJhdGlvbicpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZm9ybUJ1aWxkZXIgPSBpbmplY3QoRm9ybUJ1aWxkZXIpO1xuICBwcml2YXRlIHJlYWRvbmx5IHdvcmtzcGFjZUNvbmZpZ3VyYXRpb25TZXJ2aWNlID0gaW5qZWN0KFdvcmtzcGFjZUNvbmZpZ3VyYXRpb25TZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjb250ZXh0Um91dGVTZXJ2aWNlID0gaW5qZWN0KENvbnRleHRSb3V0ZVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNsaXBib2FyZFNlcnZpY2UgPSBpbmplY3QoQ2xpcGJvYXJkU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWN0aXZhdGVkUm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdGlhbGl6ZUNvbnRleHRTb3VyY2VJZCgpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZUNvbmZpZ3VyYXRpb25zKCk7XG4gICAgdGhpcy5pbml0V29ya3NwYWNlRm9ybSgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLnVwZGF0ZWRDb25maWcgJiYgIWNoYW5nZXMudXBkYXRlZENvbmZpZy5maXJzdENoYW5nZSkge1xuICAgICAgdGhpcy51cGRhdGVDb25maWd1cmF0aW9ucygpO1xuICAgIH1cbiAgfVxuXG4gIGFkZENvbmZpZyhkdXBsaWNhdGVkQ29uZmlnPzogRGF0YXBvaW50c0dyYXBoV2lkZ2V0Q29uZmlnKTogdm9pZCB7XG4gICAgY29uc3QgbmFtZSA9IHVuaXF1ZU5hbWVzR2VuZXJhdG9yKHtcbiAgICAgIGRpY3Rpb25hcmllczogW2FkamVjdGl2ZXMsIG5vdW5zXVxuICAgIH0pO1xuICAgIGNvbnN0IHdvcmtzcGFjZTogV29ya3NwYWNlQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgIGlkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBsYWJlbDogbmFtZSxcbiAgICAgIGNvbmZpZzogeyBkYXRhcG9pbnRzOiBbXSwgYWxhcm1zRXZlbnRzQ29uZmlnczogW10gfVxuICAgIH07XG4gICAgaWYgKGR1cGxpY2F0ZWRDb25maWcpIHtcbiAgICAgIHdvcmtzcGFjZS5jb25maWcgPSBkdXBsaWNhdGVkQ29uZmlnO1xuICAgIH1cbiAgICB0aGlzLmN1cnJlbnRDb25maWd1cmF0aW9uID0geyAuLi53b3Jrc3BhY2UgfTtcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLnVuc2hpZnQod29ya3NwYWNlKTtcbiAgICB0aGlzLmluaXRXb3Jrc3BhY2VGb3JtKCk7XG4gICAgdGhpcy53b3Jrc3BhY2VDb25maWd1cmF0aW9uU2VydmljZS5zYXZlQ29uZmlndXJhdGlvbnMoXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLFxuICAgICAgdGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbi5pZFxuICAgICk7XG4gICAgdGhpcy5vbkNvbmZpZ3VyYXRpb25DaGFuZ2UuZW1pdCh0aGlzLmN1cnJlbnRDb25maWd1cmF0aW9uLmNvbmZpZyk7XG4gIH1cblxuICBjaGFuZ2VDb25maWd1cmF0aW9uKHNlbGVjdGVkOiBib29sZWFuLCBjb25maWd1cmF0aW9uOiBXb3Jrc3BhY2VDb25maWd1cmF0aW9uKTogdm9pZCB7XG4gICAgaWYgKCFzZWxlY3RlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmN1cnJlbnRDb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgIHRoaXMud29ya3NwYWNlQ29uZmlndXJhdGlvblNlcnZpY2UuTE9DQUxfU1RPUkFHRV9ERUZBVUxUX0lEX0tFWSxcbiAgICAgIHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb24uaWRcbiAgICApO1xuICAgIHRoaXMub25Db25maWd1cmF0aW9uQ2hhbmdlLmVtaXQoY29uZmlndXJhdGlvbi5jb25maWcpO1xuICB9XG5cbiAgdXBkYXRlQ29uZmlndXJhdGlvbkxhYmVsKGNvbmZpZ3VyYXRpb246IFdvcmtzcGFjZUNvbmZpZ3VyYXRpb24pOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb25zID0gdGhpcy5jb25maWd1cmF0aW9ucy5tYXAoYyA9PlxuICAgICAgYy5pZCA9PT0gY29uZmlndXJhdGlvbi5pZCA/IGNvbmZpZ3VyYXRpb24gOiBjXG4gICAgKTtcbiAgICB0aGlzLndvcmtzcGFjZUNvbmZpZ3VyYXRpb25TZXJ2aWNlLnNhdmVDb25maWd1cmF0aW9ucyhcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMsXG4gICAgICB0aGlzLmN1cnJlbnRDb25maWd1cmF0aW9uPy5pZCB8fCAnJ1xuICAgICk7XG4gICAgdGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XG4gICAgdGhpcy5vbkNvbmZpZ3VyYXRpb25DaGFuZ2UuZW1pdChjb25maWd1cmF0aW9uLmNvbmZpZyk7XG4gIH1cblxuICBkZWxldGVDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb246IFdvcmtzcGFjZUNvbmZpZ3VyYXRpb24pOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb25zID0gdGhpcy5jb25maWd1cmF0aW9ucy5maWx0ZXIoYyA9PiBjLmlkICE9PSBjb25maWd1cmF0aW9uLmlkKTtcbiAgICB0aGlzLmluaXRXb3Jrc3BhY2VGb3JtKCk7XG4gICAgdGhpcy53b3Jrc3BhY2VDb25maWd1cmF0aW9uU2VydmljZS5zYXZlQ29uZmlndXJhdGlvbnMoXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLFxuICAgICAgdGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbj8uaWQgfHwgJydcbiAgICApO1xuICB9XG5cbiAgY2xlYXJBbGwoKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWd1cmF0aW9ucyA9IFt0aGlzLmN1cnJlbnRDb25maWd1cmF0aW9uXTtcbiAgICB0aGlzLmluaXRXb3Jrc3BhY2VGb3JtKCk7XG4gICAgdGhpcy53b3Jrc3BhY2VDb25maWd1cmF0aW9uU2VydmljZS5zYXZlQ29uZmlndXJhdGlvbnMoXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLFxuICAgICAgdGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbj8uaWQgfHwgJydcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgc2hhcmVDb25maWcoY29uZmlndXJhdGlvbjogV29ya3NwYWNlQ29uZmlndXJhdGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuY2xpcGJvYXJkU2VydmljZS53cml0ZVRleHQoSlNPTi5zdHJpbmdpZnkoY29uZmlndXJhdGlvbi5jb25maWcpKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQ29uZmlnRnJvbVVybChxdWVyeVBhcmFtczogYW55KTogdm9pZCB7XG4gICAgdGhpcy5hZGRDb25maWcoKTtcbiAgICBjb25zdCBjb25maWcgPSBKU09OLnBhcnNlKHF1ZXJ5UGFyYW1zLmNvbmZpZyk7XG4gICAgdGhpcy5vbkNvbmZpZ3VyYXRpb25DaGFuZ2UuZW1pdChjb25maWcpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDb25maWd1cmF0aW9ucygpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRDb25maWd1cmF0aW9uLmNvbmZpZyA9IHRoaXMudXBkYXRlZENvbmZpZztcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb25zID0gdGhpcy5jb25maWd1cmF0aW9ucy5tYXAoY3VycmVudENvbmZpZyA9PlxuICAgICAgY3VycmVudENvbmZpZy5pZCA9PT0gdGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbi5pZCA/IHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb24gOiBjdXJyZW50Q29uZmlnXG4gICAgKTtcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHtcbiAgICAgIGNvbmZpZ0lkOiB0aGlzLmN1cnJlbnRDb25maWd1cmF0aW9uLmlkLFxuICAgICAgbGFiZWw6IHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb24ubGFiZWwsXG4gICAgICBjb25maWc6IEpTT04uc3RyaW5naWZ5KHRoaXMudXBkYXRlZENvbmZpZylcbiAgICB9O1xuICAgIHRoaXMud29ya3NwYWNlQ29uZmlndXJhdGlvblNlcnZpY2Uuc2F2ZUNvbmZpZ3VyYXRpb25zKFxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucyxcbiAgICAgIHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb24uaWRcbiAgICApO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7IHF1ZXJ5UGFyYW1zIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplQ29uZmlndXJhdGlvbnMoKTogdm9pZCB7XG4gICAgY29uc3QgY29uZmlndXJhdGlvbnMgPSB0aGlzLndvcmtzcGFjZUNvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldENvbmZpZ3VyYXRpb25zKCk7XG4gICAgY29uc3QgZGVmYXVsdElkID0gdGhpcy53b3Jrc3BhY2VDb25maWd1cmF0aW9uU2VydmljZS5nZXREZWZhdWx0Q29uZmlndXJhdGlvbklkKCk7XG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLnJvdXRlci5wYXJzZVVybCh0aGlzLnJvdXRlci51cmwpLnF1ZXJ5UGFyYW1zO1xuICAgIGlmIChjb25maWd1cmF0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMgPSBjb25maWd1cmF0aW9ucztcbiAgICAgIHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb24gPVxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLmZpbmQoYyA9PiBjLmlkID09PSBkZWZhdWx0SWQpIHx8IHRoaXMuY29uZmlndXJhdGlvbnNbMF07XG5cbiAgICAgIHRoaXMub25Db25maWd1cmF0aW9uQ2hhbmdlLmVtaXQodGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbi5jb25maWcpO1xuICAgICAgaWYgKHF1ZXJ5UGFyYW1zPy5jb25maWdJZCAmJiAhdGhpcy5jb25maWd1cmF0aW9ucy5maW5kKGMgPT4gYy5pZCA9PT0gcXVlcnlQYXJhbXMuY29uZmlnSWQpKSB7XG4gICAgICAgIHRoaXMuYWRkQ29uZmlnRnJvbVVybChxdWVyeVBhcmFtcyk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBxdWVyeVBhcmFtcz8uY29uZmlnSWQgJiZcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy5maW5kKGMgPT4gYy5pZCA9PT0gcXVlcnlQYXJhbXMuY29uZmlnSWQpICYmXG4gICAgICAgIHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb24uaWQgIT09IHF1ZXJ5UGFyYW1zLmNvbmZpZ0lkXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbiA9IHRoaXMuY29uZmlndXJhdGlvbnMuZmluZChjID0+IGMuaWQgPT09IHF1ZXJ5UGFyYW1zLmNvbmZpZ0lkKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VDb25maWd1cmF0aW9uKHRydWUsIHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb24pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbikge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHF1ZXJ5UGFyYW1zKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5hZGRDb25maWcoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5hZGRDb25maWdGcm9tVXJsKHF1ZXJ5UGFyYW1zKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRXb3Jrc3BhY2VGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlndXJhdGlvbnNGb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIGNvbmZpZ3VyYXRpb25zOiB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KFtdKVxuICAgIH0pO1xuXG4gICAgdGhpcy5wYXRjaEZvcm0oKTtcbiAgfVxuXG4gIHByaXZhdGUgcGF0Y2hGb3JtKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRyb2wgPSA8Rm9ybUFycmF5PnRoaXMuY29uZmlndXJhdGlvbnNGb3JtR3JvdXAuY29udHJvbHNbJ2NvbmZpZ3VyYXRpb25zJ107XG4gICAgdGhpcy5jb25maWd1cmF0aW9ucy5mb3JFYWNoKHdvcmtzcGFjZSA9PiB7XG4gICAgICBjb250cm9sLnB1c2godGhpcy5wYXRjaFZhbHVlcyh3b3Jrc3BhY2UpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcGF0Y2hWYWx1ZXMod29ya3NwYWNlOiBXb3Jrc3BhY2VDb25maWd1cmF0aW9uKTogRm9ybUdyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBsYWJlbDogW3dvcmtzcGFjZS5sYWJlbF0sXG4gICAgICBjb25maWc6IFt3b3Jrc3BhY2UuY29uZmlnXSxcbiAgICAgIGlkOiBbd29ya3NwYWNlLmlkXVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplQ29udGV4dFNvdXJjZUlkKCk6IHZvaWQge1xuICAgIGNvbnN0IHJvdXRlQ29udGV4dCA9IHRoaXMuY29udGV4dFJvdXRlU2VydmljZS5nZXRDb250ZXh0RGF0YSh0aGlzLmFjdGl2YXRlZFJvdXRlKTtcbiAgICBpZiAoIXJvdXRlQ29udGV4dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB7IGNvbnRleHQsIGNvbnRleHREYXRhIH0gPSByb3V0ZUNvbnRleHQ7XG4gICAgaWYgKFtWaWV3Q29udGV4dC5EZXZpY2UsIFZpZXdDb250ZXh0Lkdyb3VwXS5pbmNsdWRlcyhjb250ZXh0KSkge1xuICAgICAgdGhpcy53b3Jrc3BhY2VDb25maWd1cmF0aW9uU2VydmljZS5jb250ZXh0SWRTaWduYWwuc2V0KGNvbnRleHREYXRhPy5pZCk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiZHJvcGRvd25cIlxuICAjYWN0aW9uYmFyX2Ryb3Bkb3duPVwiYnMtZHJvcGRvd25cIlxuICBbY2RrVHJhcEZvY3VzXT1cImFjdGlvbmJhcl9kcm9wZG93bi5pc09wZW5cIlxuICBkcm9wZG93blxuICBbaW5zaWRlQ2xpY2tdPVwidHJ1ZVwiXG4+XG5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwiZHJvcGRvd24tdG9nZ2xlIGZvcm0tY29udHJvbCBsLWgtdGlnaHQgZC1mbGV4IGEtaS1jZW50ZXJcIlxuICAgIGF0dHIuYXJpYS1sYWJlbD1cInt7IGN1cnJlbnRDb25maWd1cmF0aW9uLmxhYmVsIH19XCJcbiAgICB0b29sdGlwPVwie3sgJ1NlbGVjdGVkIGNvbmZpZ3VyYXRpb24nIHwgdHJhbnNsYXRlIH19XCJcbiAgICBwbGFjZW1lbnQ9XCJ0b3BcIlxuICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgIGRhdGEtY3k9XCJjdXJyZW50LWNvbmZpZ3VyYXRpb24tZHJvcGRvd24tYnV0dG9uXCJcbiAgICBbYWRhcHRpdmVQb3NpdGlvbl09XCJmYWxzZVwiXG4gICAgW2RlbGF5XT1cIjUwMFwiXG4gICAgZHJvcGRvd25Ub2dnbGVcbiAgPlxuICAgIDxpXG4gICAgICBjbGFzcz1cIm0tci00XCJcbiAgICAgIGM4eUljb249XCJsaXN0XCJcbiAgICA+PC9pPlxuICAgIDxkaXYgY2xhc3M9XCJkLWNvbCB0ZXh0LWxlZnQgZml0LXdcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC0xMlwiPlxuICAgICAgICB7eyAnQ29uZmlndXJhdGlvbicgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC0xMCB0ZXh0LW11dGVkIHRleHQtdHJ1bmNhdGVcIj5cbiAgICAgICAge3sgY3VycmVudENvbmZpZ3VyYXRpb24ubGFiZWwgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8c3BhbiBjbGFzcz1cImNhcmV0IG0tci0xNiBtLWwtNFwiPjwvc3Bhbj5cbiAgPC9idXR0b24+XG4gIDxkaXZcbiAgICBjbGFzcz1cImRyb3Bkb3duLW1lbnUgZHJvcGRvd24tbWVudS13aWRlIGRyb3Bkb3duLW1lbnUtYWN0aW9uLWJhclwiXG4gICAgKmRyb3Bkb3duTWVudVxuICA+XG4gICAgPGRpdiBjbGFzcz1cInN0aWNreS10b3Agc2VwYXJhdG9yLWJvdHRvbSBwLXQtOCBwLWItOCBwLWwtMTYgcC1yLTE2XCI+XG4gICAgICA8cD5cbiAgICAgICAgPHN0cm9uZz57eyAnRGF0YSBleHBsb3JlciBjb25maWd1cmF0aW9ucycgfCB0cmFuc2xhdGUgfX08L3N0cm9uZz5cbiAgICAgIDwvcD5cbiAgICAgIDxwPlxuICAgICAgICA8c21hbGw+e3sgJ0Vhc2lseSBzd2l0Y2ggYW5kIG1hbmFnZSBjb25maWd1cmF0aW9ucy4nIHwgdHJhbnNsYXRlIH19PC9zbWFsbD5cbiAgICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgICA8Yzh5LWxpc3QtZ3JvdXAgY2xhc3M9XCJuby1ib3JkZXItbGFzdFwiPlxuICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJjb25maWd1cmF0aW9uc0Zvcm1Hcm91cFwiPlxuICAgICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJjb25maWd1cmF0aW9uc1wiPlxuICAgICAgICAgIDxjOHktbGlcbiAgICAgICAgICAgIGNsYXNzPVwicC0wXCJcbiAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICBsZXQgY29uZmlndXJhdGlvbiBvZiBjb25maWd1cmF0aW9uc0Zvcm1Hcm91cC5jb250cm9scy5jb25maWd1cmF0aW9uc1snY29udHJvbHMnXTtcbiAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtkZW5zZV09XCJ0cnVlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Yzh5LWxpLXJhZGlvXG4gICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJjb25maWd1cmF0aW9uLnZhbHVlLmlkID09PSBjdXJyZW50Q29uZmlndXJhdGlvbi5pZFwiXG4gICAgICAgICAgICAgIChvblNlbGVjdCk9XCJjaGFuZ2VDb25maWd1cmF0aW9uKCRldmVudCwgY29uZmlndXJhdGlvbi52YWx1ZSlcIlxuICAgICAgICAgICAgPjwvYzh5LWxpLXJhZGlvPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyIGdhcC04XCI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXgtZ3JvdyBtaW4td2lkdGgtMFwiXG4gICAgICAgICAgICAgICAgW2Zvcm1Hcm91cE5hbWVdPVwiaVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVkOlxuICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uY29udHJvbHMubGFiZWwudG91Y2hlZCAmJiBjb25maWd1cmF0aW9uLmNvbnRyb2xzLmxhYmVsLmRpcnR5XG4gICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGguY2hdPVwiY29uZmlndXJhdGlvbi52YWx1ZS5sYWJlbCB8fCAyNVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0NvbmZpZ3VyYXRpb24gbGFiZWwnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnQ29uZmlndXJhdGlvbiAxJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJ1cGRhdGVDb25maWd1cmF0aW9uTGFiZWwoY29uZmlndXJhdGlvbi52YWx1ZSlcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtbm9ncm93IGQtZmxleCBnYXAtOFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWRvdCBidG5cIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInRHVwbGljYXRlIGNvbmZpZ3VyYXRpb24nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIHRvb2x0aXA9XCJ7eyAnRHVwbGljYXRlIGNvbmZpZ3VyYXRpb24nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZENvbmZpZyhjb25maWd1cmF0aW9uLnZhbHVlLmNvbmZpZylcIlxuICAgICAgICAgICAgICAgICAgW2RlbGF5XT1cIjUwMFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cImNvcHlcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1kb3QgYnRuIGJ0bi1kb3QtLWRhbmdlclwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidSZW1vdmUgY29uZmlndXJhdGlvbnMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIHRvb2x0aXA9XCJ7e1xuICAgICAgICAgICAgICAgICAgICAoY29uZmlndXJhdGlvbi52YWx1ZS5pZCA9PT0gY3VycmVudENvbmZpZ3VyYXRpb24uaWRcbiAgICAgICAgICAgICAgICAgICAgICA/IGFjdGl2ZUNvbmZpZ1Rvb2x0aXBcbiAgICAgICAgICAgICAgICAgICAgICA6IHJlbW92ZUNvbmZpZ1Rvb2x0aXBcbiAgICAgICAgICAgICAgICAgICAgKSB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgfX1cIlxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwibGVmdFwiXG4gICAgICAgICAgICAgICAgICBbZGVsYXldPVwiNTAwXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGRlbGV0ZUNvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbi52YWx1ZSlcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbmZpZ3VyYXRpb24udmFsdWUuaWQgPT09IGN1cnJlbnRDb25maWd1cmF0aW9uLmlkXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aSBjOHlJY29uPVwibWludXMtY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYzh5LWxpPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZm9ybT5cbiAgICA8L2M4eS1saXN0LWdyb3VwPlxuICAgIDxkaXYgY2xhc3M9XCJzdGlja3ktYm90dG9tIHNlcGFyYXRvci10b3BcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggcC1sLTE2IHAtci0xNiBwLXQtOCBwLWItOFwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRhbmdlciBidG4tc20gZmxleC1ncm93XCJcbiAgICAgICAgICAoY2xpY2spPVwiY2xlYXJBbGwoKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImNvbmZpZ3VyYXRpb25zLmxlbmd0aCA8IDJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgW2M4eUljb25dPVwiJ2RlbGV0ZSdcIj48L2k+XG4gICAgICAgICAge3sgJ0RlbGV0ZSBhbGwgY29uZmlndXJhdGlvbnMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIGZsZXgtZ3Jvd1wiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgKGNsaWNrKT1cImFkZENvbmZpZygpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpIFtjOHlJY29uXT1cIidhZGQtY2lyY2xlLW91dGxpbmUnXCI+PC9pPlxuICAgICAgICAgIHt7ICdBZGQgY29uZmlndXJhdGlvbicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
174
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vZGF0YXBvaW50LWV4cGxvcmVyL3ZpZXcvY29uZmlndXJhdGlvbi93b3Jrc3BhY2UtY29uZmlndXJhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9kYXRhcG9pbnQtZXhwbG9yZXIvdmlldy9jb25maWd1cmF0aW9uL3dvcmtzcGFjZS1jb25maWd1cmF0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLE1BQU0sRUFFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWEsV0FBVyxFQUFhLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hGLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsbUJBQW1CLEVBQ25CLFVBQVUsRUFDVixPQUFPLEVBQ1AsV0FBVyxFQUNaLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBR3RELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7QUFReEQsTUFBTSxPQUFPLHdCQUF3QjtJQU5yQztRQVFZLDBCQUFxQixHQUFHLElB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Z0IsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLGFBQWEsQ0FBQzs4QkFHdEUsYUFBYTtzQkFBckIsS0FBSztnQkFDSSxxQkFBcUI7c0JBQTlCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBMTF5TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIGluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgQ2xpcGJvYXJkU2VydmljZSxcbiAgQ29udGV4dFJvdXRlU2VydmljZSxcbiAgQ29yZU1vZHVsZSxcbiAgZ2V0dGV4dCxcbiAgVmlld0NvbnRleHRcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBCc0Ryb3Bkb3duTW9kdWxlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kcm9wZG93bic7XG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC90b29sdGlwJztcbmltcG9ydCB7IFdvcmtzcGFjZUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuL3dvcmtzcGFjZS1jb25maWd1cmF0aW9uLm1vZGVsJztcbmltcG9ydCB7IERhdGFwb2ludHNHcmFwaFdpZGdldENvbmZpZyB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZWNoYXJ0JztcbmltcG9ydCB7IFdvcmtzcGFjZUNvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi93b3Jrc3BhY2UtY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgdW5pcXVlTmFtZXNHZW5lcmF0b3IgfSBmcm9tICd1bmlxdWUtbmFtZXMtZ2VuZXJhdG9yJztcbmltcG9ydCB7IGFkamVjdGl2ZXMsIG5vdW5zIH0gZnJvbSAnLi9uYW1pbmctZGljdGlvbmFyeSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS13b3Jrc3BhY2UtY29uZmlnJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3dvcmtzcGFjZS1jb25maWd1cmF0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvcmVNb2R1bGUsIEJzRHJvcGRvd25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBBMTF5TW9kdWxlLCBUb29sdGlwTW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBXb3Jrc3BhY2VDb25maWdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIHVwZGF0ZWRDb25maWc6IERhdGFwb2ludHNHcmFwaFdpZGdldENvbmZpZztcbiAgQE91dHB1dCgpIG9uQ29uZmlndXJhdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YXBvaW50c0dyYXBoV2lkZ2V0Q29uZmlnPigpO1xuXG4gIGN1cnJlbnRDb25maWd1cmF0aW9uOiBXb3Jrc3BhY2VDb25maWd1cmF0aW9uO1xuICBjb25maWd1cmF0aW9uczogV29ya3NwYWNlQ29uZmlndXJhdGlvbltdID0gW107XG4gIGNvbmZpZ3VyYXRpb25zRm9ybUdyb3VwOiBGb3JtR3JvdXA7XG4gIGFjdGl2ZUNvbmZpZ1Rvb2x0aXAgPSBnZXR0ZXh0KCdBY3RpdmUgY29uZmlndXJhdGlvbiBjYW5ub3QgYmUgcmVtb3ZlZCcpO1xuICByZW1vdmVDb25maWdUb29sdGlwID0gZ2V0dGV4dCgnUmVtb3ZlIGNvbmZpZ3VyYXRpb24nKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGZvcm1CdWlsZGVyID0gaW5qZWN0KEZvcm1CdWlsZGVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSB3b3Jrc3BhY2VDb25maWd1cmF0aW9uU2VydmljZSA9IGluamVjdChXb3Jrc3BhY2VDb25maWd1cmF0aW9uU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29udGV4dFJvdXRlU2VydmljZSA9IGluamVjdChDb250ZXh0Um91dGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjbGlwYm9hcmRTZXJ2aWNlID0gaW5qZWN0KENsaXBib2FyZFNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2YXRlZFJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxpemVDb250ZXh0U291cmNlSWQoKTtcbiAgICB0aGlzLmluaXRpYWxpemVDb25maWd1cmF0aW9ucygpO1xuICAgIHRoaXMuaW5pdFdvcmtzcGFjZUZvcm0oKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy51cGRhdGVkQ29uZmlnICYmICFjaGFuZ2VzLnVwZGF0ZWRDb25maWcuZmlyc3RDaGFuZ2UpIHtcbiAgICAgIHRoaXMudXBkYXRlQ29uZmlndXJhdGlvbnMoKTtcbiAgICB9XG4gIH1cblxuICBhZGRDb25maWcoZHVwbGljYXRlZENvbmZpZz86IERhdGFwb2ludHNHcmFwaFdpZGdldENvbmZpZyk6IHZvaWQge1xuICAgIGNvbnN0IG5hbWUgPSB1bmlxdWVOYW1lc0dlbmVyYXRvcih7IGRpY3Rpb25hcmllczogW2FkamVjdGl2ZXMsIG5vdW5zXSB9KTtcbiAgICBjb25zdCB3b3Jrc3BhY2U6IFdvcmtzcGFjZUNvbmZpZ3VyYXRpb24gPSB7XG4gICAgICBpZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgbGFiZWw6IG5hbWUsXG4gICAgICBjb25maWc6IHsgZGF0YXBvaW50czogW10sIGFsYXJtc0V2ZW50c0NvbmZpZ3M6IFtdIH1cbiAgICB9O1xuICAgIGlmIChkdXBsaWNhdGVkQ29uZmlnKSB7XG4gICAgICB3b3Jrc3BhY2UuY29uZmlnID0gZHVwbGljYXRlZENvbmZpZztcbiAgICB9XG4gICAgdGhpcy5jb25maWd1cmF0aW9ucyA9IFt3b3Jrc3BhY2UsIC4uLnRoaXMuY29uZmlndXJhdGlvbnNdO1xuICAgIHRoaXMuaW5pdFdvcmtzcGFjZUZvcm0oKTtcbiAgICB0aGlzLmNoYW5nZUNvbmZpZ3VyYXRpb24odHJ1ZSwgd29ya3NwYWNlKTtcbiAgfVxuXG4gIGNoYW5nZUNvbmZpZ3VyYXRpb24oc2VsZWN0ZWQ6IGJvb2xlYW4sIGNvbmZpZ3VyYXRpb246IFdvcmtzcGFjZUNvbmZpZ3VyYXRpb24pOiB2b2lkIHtcbiAgICBpZiAoIXNlbGVjdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFxuICAgICAgdGhpcy53b3Jrc3BhY2VDb25maWd1cmF0aW9uU2VydmljZS5MT0NBTF9TVE9SQUdFX0RFRkFVTFRfSURfS0VZLFxuICAgICAgdGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbi5pZFxuICAgICk7XG4gICAgdGhpcy5vbkNvbmZpZ3VyYXRpb25DaGFuZ2UuZW1pdChjb25maWd1cmF0aW9uLmNvbmZpZyk7XG4gIH1cblxuICB1cGRhdGVDb25maWd1cmF0aW9uTGFiZWwoY29uZmlndXJhdGlvbjogV29ya3NwYWNlQ29uZmlndXJhdGlvbik6IHZvaWQge1xuICAgIHRoaXMuY29uZmlndXJhdGlvbnMgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLm1hcChjID0+XG4gICAgICBjLmlkID09PSBjb25maWd1cmF0aW9uLmlkID8gY29uZmlndXJhdGlvbiA6IGNcbiAgICApO1xuICAgIHRoaXMud29ya3NwYWNlQ29uZmlndXJhdGlvblNlcnZpY2Uuc2F2ZUNvbmZpZ3VyYXRpb25zKFxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucyxcbiAgICAgIHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb24/LmlkIHx8ICcnXG4gICAgKTtcbiAgICB0aGlzLmN1cnJlbnRDb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjtcbiAgICB0aGlzLm9uQ29uZmlndXJhdGlvbkNoYW5nZS5lbWl0KGNvbmZpZ3VyYXRpb24uY29uZmlnKTtcbiAgfVxuXG4gIGRlbGV0ZUNvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbjogV29ya3NwYWNlQ29uZmlndXJhdGlvbik6IHZvaWQge1xuICAgIHRoaXMuY29uZmlndXJhdGlvbnMgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmZpbHRlcihjID0+IGMuaWQgIT09IGNvbmZpZ3VyYXRpb24uaWQpO1xuICAgIHRoaXMuaW5pdFdvcmtzcGFjZUZvcm0oKTtcbiAgICB0aGlzLndvcmtzcGFjZUNvbmZpZ3VyYXRpb25TZXJ2aWNlLnNhdmVDb25maWd1cmF0aW9ucyhcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMsXG4gICAgICB0aGlzLmN1cnJlbnRDb25maWd1cmF0aW9uPy5pZCB8fCAnJ1xuICAgICk7XG4gIH1cblxuICBjbGVhckFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb25zID0gW3RoaXMuY3VycmVudENvbmZpZ3VyYXRpb25dO1xuICAgIHRoaXMuaW5pdFdvcmtzcGFjZUZvcm0oKTtcbiAgICB0aGlzLndvcmtzcGFjZUNvbmZpZ3VyYXRpb25TZXJ2aWNlLnNhdmVDb25maWd1cmF0aW9ucyhcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMsXG4gICAgICB0aGlzLmN1cnJlbnRDb25maWd1cmF0aW9uPy5pZCB8fCAnJ1xuICAgICk7XG4gIH1cblxuICBhc3luYyBzaGFyZUNvbmZpZyhjb25maWd1cmF0aW9uOiBXb3Jrc3BhY2VDb25maWd1cmF0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5jbGlwYm9hcmRTZXJ2aWNlLndyaXRlVGV4dChKU09OLnN0cmluZ2lmeShjb25maWd1cmF0aW9uLmNvbmZpZykpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRDb25maWdGcm9tVXJsKHF1ZXJ5UGFyYW1zOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmFkZENvbmZpZygpO1xuICAgIGNvbnN0IGNvbmZpZyA9IEpTT04ucGFyc2UocXVlcnlQYXJhbXMuY29uZmlnKTtcbiAgICB0aGlzLm9uQ29uZmlndXJhdGlvbkNoYW5nZS5lbWl0KGNvbmZpZyk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNvbmZpZ3VyYXRpb25zKCk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb24uY29uZmlnID0gdGhpcy51cGRhdGVkQ29uZmlnO1xuICAgIHRoaXMuY29uZmlndXJhdGlvbnMgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLm1hcChjdXJyZW50Q29uZmlnID0+XG4gICAgICBjdXJyZW50Q29uZmlnLmlkID09PSB0aGlzLmN1cnJlbnRDb25maWd1cmF0aW9uLmlkID8gdGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbiA6IGN1cnJlbnRDb25maWdcbiAgICApO1xuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0ge1xuICAgICAgY29uZmlnSWQ6IHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb24uaWQsXG4gICAgICBsYWJlbDogdGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbi5sYWJlbCxcbiAgICAgIGNvbmZpZzogSlNPTi5zdHJpbmdpZnkodGhpcy51cGRhdGVkQ29uZmlnKVxuICAgIH07XG4gICAgdGhpcy53b3Jrc3BhY2VDb25maWd1cmF0aW9uU2VydmljZS5zYXZlQ29uZmlndXJhdGlvbnMoXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLFxuICAgICAgdGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbi5pZFxuICAgICk7XG4gICAgY29uc3QgY29udHJvbCA9IDxGb3JtQXJyYXk+dGhpcy5jb25maWd1cmF0aW9uc0Zvcm1Hcm91cC5jb250cm9sc1snY29uZmlndXJhdGlvbnMnXTtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuY29uZmlndXJhdGlvbnMuZmluZEluZGV4KGMgPT4gYy5pZCA9PT0gdGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbi5pZCk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgY29udHJvbC5hdChpbmRleCkucGF0Y2hWYWx1ZSh7XG4gICAgICAgIGxhYmVsOiB0aGlzLmN1cnJlbnRDb25maWd1cmF0aW9uLmxhYmVsLFxuICAgICAgICBjb25maWc6IHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb24uY29uZmlnLFxuICAgICAgICBpZDogdGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbi5pZFxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7IHF1ZXJ5UGFyYW1zIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplQ29uZmlndXJhdGlvbnMoKTogdm9pZCB7XG4gICAgY29uc3QgY29uZmlndXJhdGlvbnMgPSB0aGlzLndvcmtzcGFjZUNvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldENvbmZpZ3VyYXRpb25zKCk7XG4gICAgY29uc3QgZGVmYXVsdElkID0gdGhpcy53b3Jrc3BhY2VDb25maWd1cmF0aW9uU2VydmljZS5nZXREZWZhdWx0Q29uZmlndXJhdGlvbklkKCk7XG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLnJvdXRlci5wYXJzZVVybCh0aGlzLnJvdXRlci51cmwpLnF1ZXJ5UGFyYW1zO1xuICAgIGlmIChjb25maWd1cmF0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMgPSBjb25maWd1cmF0aW9ucztcbiAgICAgIHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb24gPVxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLmZpbmQoYyA9PiBjLmlkID09PSBkZWZhdWx0SWQpIHx8IHRoaXMuY29uZmlndXJhdGlvbnNbMF07XG5cbiAgICAgIHRoaXMub25Db25maWd1cmF0aW9uQ2hhbmdlLmVtaXQodGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbi5jb25maWcpO1xuICAgICAgaWYgKHF1ZXJ5UGFyYW1zPy5jb25maWdJZCAmJiAhdGhpcy5jb25maWd1cmF0aW9ucy5maW5kKGMgPT4gYy5pZCA9PT0gcXVlcnlQYXJhbXMuY29uZmlnSWQpKSB7XG4gICAgICAgIHRoaXMuYWRkQ29uZmlnRnJvbVVybChxdWVyeVBhcmFtcyk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBxdWVyeVBhcmFtcz8uY29uZmlnSWQgJiZcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy5maW5kKGMgPT4gYy5pZCA9PT0gcXVlcnlQYXJhbXMuY29uZmlnSWQpICYmXG4gICAgICAgIHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb24uaWQgIT09IHF1ZXJ5UGFyYW1zLmNvbmZpZ0lkXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbiA9IHRoaXMuY29uZmlndXJhdGlvbnMuZmluZChjID0+IGMuaWQgPT09IHF1ZXJ5UGFyYW1zLmNvbmZpZ0lkKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VDb25maWd1cmF0aW9uKHRydWUsIHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb24pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbikge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHF1ZXJ5UGFyYW1zKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5hZGRDb25maWcoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5hZGRDb25maWdGcm9tVXJsKHF1ZXJ5UGFyYW1zKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRXb3Jrc3BhY2VGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlndXJhdGlvbnNGb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIGNvbmZpZ3VyYXRpb25zOiB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KFtdKVxuICAgIH0pO1xuXG4gICAgdGhpcy5wYXRjaEZvcm0oKTtcbiAgfVxuXG4gIHByaXZhdGUgcGF0Y2hGb3JtKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRyb2wgPSA8Rm9ybUFycmF5PnRoaXMuY29uZmlndXJhdGlvbnNGb3JtR3JvdXAuY29udHJvbHNbJ2NvbmZpZ3VyYXRpb25zJ107XG4gICAgdGhpcy5jb25maWd1cmF0aW9ucy5mb3JFYWNoKHdvcmtzcGFjZSA9PiB7XG4gICAgICBjb250cm9sLnB1c2godGhpcy5wYXRjaFZhbHVlcyh3b3Jrc3BhY2UpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcGF0Y2hWYWx1ZXMod29ya3NwYWNlOiBXb3Jrc3BhY2VDb25maWd1cmF0aW9uKTogRm9ybUdyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBsYWJlbDogW3dvcmtzcGFjZS5sYWJlbF0sXG4gICAgICBjb25maWc6IFt3b3Jrc3BhY2UuY29uZmlnXSxcbiAgICAgIGlkOiBbd29ya3NwYWNlLmlkXVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplQ29udGV4dFNvdXJjZUlkKCk6IHZvaWQge1xuICAgIGNvbnN0IHJvdXRlQ29udGV4dCA9IHRoaXMuY29udGV4dFJvdXRlU2VydmljZS5nZXRDb250ZXh0RGF0YSh0aGlzLmFjdGl2YXRlZFJvdXRlKTtcbiAgICBpZiAoIXJvdXRlQ29udGV4dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB7IGNvbnRleHQsIGNvbnRleHREYXRhIH0gPSByb3V0ZUNvbnRleHQ7XG4gICAgaWYgKFtWaWV3Q29udGV4dC5EZXZpY2UsIFZpZXdDb250ZXh0Lkdyb3VwXS5pbmNsdWRlcyhjb250ZXh0KSkge1xuICAgICAgdGhpcy53b3Jrc3BhY2VDb25maWd1cmF0aW9uU2VydmljZS5jb250ZXh0SWRTaWduYWwuc2V0KGNvbnRleHREYXRhPy5pZCk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiZHJvcGRvd25cIlxuICAjYWN0aW9uYmFyX2Ryb3Bkb3duPVwiYnMtZHJvcGRvd25cIlxuICBbY2RrVHJhcEZvY3VzXT1cImFjdGlvbmJhcl9kcm9wZG93bi5pc09wZW5cIlxuICBkcm9wZG93blxuICBbaW5zaWRlQ2xpY2tdPVwidHJ1ZVwiXG4+XG5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwiZHJvcGRvd24tdG9nZ2xlIGZvcm0tY29udHJvbCBsLWgtdGlnaHQgZC1mbGV4IGEtaS1jZW50ZXJcIlxuICAgIGF0dHIuYXJpYS1sYWJlbD1cInt7IGN1cnJlbnRDb25maWd1cmF0aW9uLmxhYmVsIH19XCJcbiAgICB0b29sdGlwPVwie3sgJ1NlbGVjdGVkIGNvbmZpZ3VyYXRpb24nIHwgdHJhbnNsYXRlIH19XCJcbiAgICBwbGFjZW1lbnQ9XCJ0b3BcIlxuICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgIGRhdGEtY3k9XCJjdXJyZW50LWNvbmZpZ3VyYXRpb24tZHJvcGRvd24tYnV0dG9uXCJcbiAgICBbYWRhcHRpdmVQb3NpdGlvbl09XCJmYWxzZVwiXG4gICAgW2RlbGF5XT1cIjUwMFwiXG4gICAgZHJvcGRvd25Ub2dnbGVcbiAgPlxuICAgIDxpXG4gICAgICBjbGFzcz1cIm0tci00XCJcbiAgICAgIGM4eUljb249XCJsaXN0XCJcbiAgICA+PC9pPlxuICAgIDxkaXYgY2xhc3M9XCJkLWNvbCB0ZXh0LWxlZnQgZml0LXdcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC0xMlwiPlxuICAgICAgICB7eyAnQ29uZmlndXJhdGlvbicgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC0xMCB0ZXh0LW11dGVkIHRleHQtdHJ1bmNhdGVcIj5cbiAgICAgICAge3sgY3VycmVudENvbmZpZ3VyYXRpb24ubGFiZWwgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8c3BhbiBjbGFzcz1cImNhcmV0IG0tci0xNiBtLWwtNFwiPjwvc3Bhbj5cbiAgPC9idXR0b24+XG4gIDxkaXZcbiAgICBjbGFzcz1cImRyb3Bkb3duLW1lbnUgZHJvcGRvd24tbWVudS13aWRlIGRyb3Bkb3duLW1lbnUtYWN0aW9uLWJhclwiXG4gICAgKmRyb3Bkb3duTWVudVxuICA+XG4gICAgPGRpdiBjbGFzcz1cInN0aWNreS10b3Agc2VwYXJhdG9yLWJvdHRvbSBwLXQtOCBwLWItOCBwLWwtMTYgcC1yLTE2XCI+XG4gICAgICA8cD5cbiAgICAgICAgPHN0cm9uZz57eyAnRGF0YSBleHBsb3JlciBjb25maWd1cmF0aW9ucycgfCB0cmFuc2xhdGUgfX08L3N0cm9uZz5cbiAgICAgIDwvcD5cbiAgICAgIDxwPlxuICAgICAgICA8c21hbGw+e3sgJ0Vhc2lseSBzd2l0Y2ggYW5kIG1hbmFnZSBjb25maWd1cmF0aW9ucy4nIHwgdHJhbnNsYXRlIH19PC9zbWFsbD5cbiAgICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgICA8Yzh5LWxpc3QtZ3JvdXAgY2xhc3M9XCJuby1ib3JkZXItbGFzdFwiPlxuICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJjb25maWd1cmF0aW9uc0Zvcm1Hcm91cFwiPlxuICAgICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJjb25maWd1cmF0aW9uc1wiPlxuICAgICAgICAgIDxjOHktbGlcbiAgICAgICAgICAgIGNsYXNzPVwicC0wXCJcbiAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICBsZXQgY29uZmlndXJhdGlvbiBvZiBjb25maWd1cmF0aW9uc0Zvcm1Hcm91cC5jb250cm9scy5jb25maWd1cmF0aW9uc1snY29udHJvbHMnXTtcbiAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtkZW5zZV09XCJ0cnVlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Yzh5LWxpLXJhZGlvXG4gICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJjb25maWd1cmF0aW9uLnZhbHVlLmlkID09PSBjdXJyZW50Q29uZmlndXJhdGlvbi5pZFwiXG4gICAgICAgICAgICAgIChvblNlbGVjdCk9XCJjaGFuZ2VDb25maWd1cmF0aW9uKCRldmVudCwgY29uZmlndXJhdGlvbi52YWx1ZSlcIlxuICAgICAgICAgICAgPjwvYzh5LWxpLXJhZGlvPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyIGdhcC04XCI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXgtZ3JvdyBtaW4td2lkdGgtMFwiXG4gICAgICAgICAgICAgICAgW2Zvcm1Hcm91cE5hbWVdPVwiaVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVkOlxuICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uY29udHJvbHMubGFiZWwudG91Y2hlZCAmJiBjb25maWd1cmF0aW9uLmNvbnRyb2xzLmxhYmVsLmRpcnR5XG4gICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGguY2hdPVwiY29uZmlndXJhdGlvbi52YWx1ZS5sYWJlbCB8fCAyNVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0NvbmZpZ3VyYXRpb24gbGFiZWwnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnQ29uZmlndXJhdGlvbiAxJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJ1cGRhdGVDb25maWd1cmF0aW9uTGFiZWwoY29uZmlndXJhdGlvbi52YWx1ZSlcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtbm9ncm93IGQtZmxleCBnYXAtOFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWRvdCBidG5cIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInRHVwbGljYXRlIGNvbmZpZ3VyYXRpb24nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIHRvb2x0aXA9XCJ7eyAnRHVwbGljYXRlIGNvbmZpZ3VyYXRpb24nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZENvbmZpZyhjb25maWd1cmF0aW9uLnZhbHVlLmNvbmZpZylcIlxuICAgICAgICAgICAgICAgICAgW2RlbGF5XT1cIjUwMFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cImNvcHlcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1kb3QgYnRuIGJ0bi1kb3QtLWRhbmdlclwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidSZW1vdmUgY29uZmlndXJhdGlvbnMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIHRvb2x0aXA9XCJ7e1xuICAgICAgICAgICAgICAgICAgICAoY29uZmlndXJhdGlvbi52YWx1ZS5pZCA9PT0gY3VycmVudENvbmZpZ3VyYXRpb24uaWRcbiAgICAgICAgICAgICAgICAgICAgICA/IGFjdGl2ZUNvbmZpZ1Rvb2x0aXBcbiAgICAgICAgICAgICAgICAgICAgICA6IHJlbW92ZUNvbmZpZ1Rvb2x0aXBcbiAgICAgICAgICAgICAgICAgICAgKSB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgfX1cIlxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwibGVmdFwiXG4gICAgICAgICAgICAgICAgICBbZGVsYXldPVwiNTAwXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGRlbGV0ZUNvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbi52YWx1ZSlcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbmZpZ3VyYXRpb24udmFsdWUuaWQgPT09IGN1cnJlbnRDb25maWd1cmF0aW9uLmlkXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aSBjOHlJY29uPVwibWludXMtY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYzh5LWxpPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZm9ybT5cbiAgICA8L2M4eS1saXN0LWdyb3VwPlxuICAgIDxkaXYgY2xhc3M9XCJzdGlja3ktYm90dG9tIHNlcGFyYXRvci10b3BcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggcC1sLTE2IHAtci0xNiBwLXQtOCBwLWItOFwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRhbmdlciBidG4tc20gZmxleC1ncm93XCJcbiAgICAgICAgICAoY2xpY2spPVwiY2xlYXJBbGwoKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImNvbmZpZ3VyYXRpb25zLmxlbmd0aCA8IDJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgW2M4eUljb25dPVwiJ2RlbGV0ZSdcIj48L2k+XG4gICAgICAgICAge3sgJ0RlbGV0ZSBhbGwgY29uZmlndXJhdGlvbnMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIGZsZXgtZ3Jvd1wiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgKGNsaWNrKT1cImFkZENvbmZpZygpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpIFtjOHlJY29uXT1cIidhZGQtY2lyY2xlLW91dGxpbmUnXCI+PC9pPlxuICAgICAgICAgIHt7ICdBZGQgY29uZmlndXJhdGlvbicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==