@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,30 +1,33 @@
1
1
  import { Component, Input, signal } from '@angular/core';
2
2
  import { FormBuilder, FormControl, ReactiveFormsModule } from '@angular/forms';
3
- import { CommonModule, DismissAlertStrategy, DynamicComponentAlert, gettext } from '@c8y/ngx-components';
3
+ import { AlertService, CommonModule, DismissAlertStrategy, DynamicComponentAlert, WidgetGlobalAutoRefreshService, gettext, globalAutoRefreshLoading } from '@c8y/ngx-components';
4
4
  import { DataFetchingService, DatapointsExportSelectorComponent, dateRangeValidator } from '@c8y/ngx-components/datapoints-export-selector';
5
5
  import { INTERVAL_VALUES } from '@c8y/ngx-components/interval-picker';
6
6
  import { TranslateService } from '@ngx-translate/core';
7
- import { Subject, debounceTime } from 'rxjs';
8
- import { DATE_SELECTION_VALUES, DEFAULT_DPT_REFRESH_INTERVAL_VALUE } from '../datapoints-table-widget.model';
7
+ import { BehaviorSubject, Subject, debounceTime, takeUntil } from 'rxjs';
8
+ import { DEFAULT_DPT_REFRESH_INTERVAL_VALUE } from '../datapoints-table-widget.model';
9
9
  import { DatapointsTableService } from '../datapoints-table.service';
10
10
  import { DateRangePickerComponent } from '../date-range-picker.component';
11
11
  import { DatapointsReloadComponent } from './datapoints-reload/datapoints-reload.component';
12
12
  import { DatapointsTableViewService } from './datapoints-table-view.service';
13
13
  import { DatapointsTableComponent } from './datapoints-table/datapoints-table.component';
14
14
  import * as i0 from "@angular/core";
15
- import * as i1 from "@c8y/ngx-components/datapoints-export-selector";
16
- import * as i2 from "../datapoints-table.service";
17
- import * as i3 from "./datapoints-table-view.service";
18
- import * as i4 from "@angular/forms";
19
- import * as i5 from "@ngx-translate/core";
20
- import * as i6 from "@angular/common";
15
+ import * as i1 from "@c8y/ngx-components";
16
+ import * as i2 from "@c8y/ngx-components/datapoints-export-selector";
17
+ import * as i3 from "../datapoints-table.service";
18
+ import * as i4 from "./datapoints-table-view.service";
19
+ import * as i5 from "@angular/forms";
20
+ import * as i6 from "@ngx-translate/core";
21
+ import * as i7 from "@angular/common";
21
22
  export class DatapointsTableViewWidgetComponent {
22
- constructor(dataFetchingService, datapointsTableConfigService, datapointsTableViewService, formBuilder, translateService) {
23
+ constructor(alertService, dataFetchingService, datapointsTableConfigService, datapointsTableViewService, formBuilder, translateService, widgetGlobalAutoRefresh) {
24
+ this.alertService = alertService;
23
25
  this.dataFetchingService = dataFetchingService;
24
26
  this.datapointsTableConfigService = datapointsTableConfigService;
25
27
  this.datapointsTableViewService = datapointsTableViewService;
26
28
  this.formBuilder = formBuilder;
27
29
  this.translateService = translateService;
30
+ this.widgetGlobalAutoRefresh = widgetGlobalAutoRefresh;
28
31
  /**
29
32
  * Represents the data points where __active property is set to true.
30
33
  */
@@ -34,7 +37,11 @@ export class DatapointsTableViewWidgetComponent {
34
37
  * Used to populate the table with data.
35
38
  */
36
39
  this.datapointsTableItems = [];
37
- this.isDisabled = false;
40
+ /**
41
+ * Indicates whether refreshing should be enabled or disabled.
42
+ * It's 'true' when user is not allowed to view a measurements.
43
+ */
44
+ this.isRefreshDisabled = false;
38
45
  /**
39
46
  * Indicates whether the component is in the initial request state
40
47
  * where data for a table structure is being prepared.
@@ -43,9 +50,12 @@ export class DatapointsTableViewWidgetComponent {
43
50
  /**
44
51
  * Current isLoading state. Indicates whether the data is being loaded.
45
52
  */
46
- this.isLoading = signal(true);
53
+ this.isLoading$ = new BehaviorSubject(true);
47
54
  this.isExportModalOpen = false;
48
55
  this.isScrolling = signal(false);
56
+ this.TIMEOUT_ERROR_TEXT = gettext('The request is taking longer than usual. We apologize for the inconvenience.');
57
+ this.SERVER_ERROR_TEXT = gettext('Server error occurred.');
58
+ this.destroy$ = new Subject();
49
59
  this.scrollingSubject$ = new Subject();
50
60
  /**
51
61
  * Indicates if the alert has already been displayed and can be dismissed.
@@ -54,25 +64,26 @@ export class DatapointsTableViewWidgetComponent {
54
64
  this.isMissingAnyPermissionAlertShown = false;
55
65
  }
56
66
  async ngOnInit() {
57
- // Will be uncommented in MTM-61920
58
- // if (this.config.widgetInstanceGlobalTimeContext) {
59
- // this.handleGlobalTimeContextSettings();
60
- // }
61
- // Condition will be removed in MTM-61920
62
- // Dashboard context is temporary not supported in the new implementation
67
+ if (this.config.widgetInstanceGlobalAutoRefreshContext) {
68
+ this.containerClass = 'a-i-center input-group p-t-4 p-b-4 max-width-fit m-l-auto';
69
+ }
70
+ /**
71
+ * Legacy widget used realtime so it must be converted to refresh approach
72
+ * if it was enabled before migration.
73
+ */
63
74
  if (this.config.widgetInstanceGlobalTimeContext) {
75
+ this.config.widgetInstanceGlobalAutoRefreshContext = true;
64
76
  this.config.widgetInstanceGlobalTimeContext = false;
77
+ this.config.displaySettings.globalAutoRefreshContext = true;
65
78
  }
66
- // Condition will be removed in MTM-61920
67
- // Dashboard context is temporary not supported in the new implementation
68
- if (this.config['globalDateSelector'] === 'dashboard_context') {
69
- this.config['globalDateSelector'] = DATE_SELECTION_VALUES.config;
79
+ if (this.config.widgetInstanceGlobalAutoRefreshContext) {
80
+ this.handleGlobalRefreshLoading();
70
81
  }
71
82
  this.setScrollingSubscription();
72
83
  const isLegacyWidgetRealtimeActive = this.config.realtime &&
73
- !this.config.decimalPlaces &&
74
- !this.config.refreshInterval &&
75
- !this.config.isAutoRefreshEnabled;
84
+ !this.config.hasOwnProperty('decimalPlaces') &&
85
+ !this.config.hasOwnProperty('refreshInterval') &&
86
+ !this.config.hasOwnProperty('isAutoRefreshEnabled');
76
87
  if (isLegacyWidgetRealtimeActive) {
77
88
  this.setDefaultRefreshRelatedProperties();
78
89
  }
@@ -99,6 +110,8 @@ export class DatapointsTableViewWidgetComponent {
99
110
  if (this.subscription) {
100
111
  this.subscription.unsubscribe();
101
112
  }
113
+ this.destroy$.next();
114
+ this.destroy$.complete();
102
115
  }
103
116
  onDateChange(data) {
104
117
  if (this.formGroup.invalid) {
@@ -152,7 +165,7 @@ export class DatapointsTableViewWidgetComponent {
152
165
  this.config.refreshInterval = DEFAULT_DPT_REFRESH_INTERVAL_VALUE;
153
166
  }
154
167
  recalculateIntervalToMatchFromNowDate() {
155
- if (this.config.widgetInstanceGlobalTimeContext) {
168
+ if (this.config.widgetInstanceGlobalAutoRefreshContext) {
156
169
  return;
157
170
  }
158
171
  const { dateFrom, dateTo } = this.datapointsTableConfigService.calculateDateRange(this.config.interval);
@@ -184,7 +197,7 @@ export class DatapointsTableViewWidgetComponent {
184
197
  * If false, the seconds will be displayed as they are.
185
198
  */
186
199
  async prepareTableData(roundSeconds = true) {
187
- this.isLoading.set(true);
200
+ this.isLoading$.next(true);
188
201
  if (this.isInitialRequest) {
189
202
  this.activeDatapoints = this.datapointsTableViewService.filterOutInactiveDatapoints(this.config.datapoints);
190
203
  this.hasMultipleDatapoints = this.datapointsTableViewService.hasMultipleDatapoints(this.activeDatapoints);
@@ -193,6 +206,9 @@ export class DatapointsTableViewWidgetComponent {
193
206
  }
194
207
  const activeDatapointsIdsWithSeries = this.datapointsTableViewService.groupSeriesByDeviceId(this.activeDatapoints);
195
208
  const activeDatapointsSeriesData = await this.getActiveDatapointsSeriesDataMap(activeDatapointsIdsWithSeries, this.config, roundSeconds);
209
+ if (this.isFailedToFetchSeriesData) {
210
+ return;
211
+ }
196
212
  this.seriesWithoutPermissionToRead =
197
213
  this.datapointsTableViewService.getSeriesWithoutPermissionToRead(activeDatapointsSeriesData, activeDatapointsIdsWithSeries);
198
214
  if (!this.isMissingAnyPermissionAlertShown &&
@@ -208,7 +224,7 @@ export class DatapointsTableViewWidgetComponent {
208
224
  const datapointsListItems = this.datapointsTableViewService.mapDatapointsWithValuesToList(this.datapointsWithValues);
209
225
  const groupedDatapointsListItems = this.datapointsTableViewService.groupByDateAndDevice(datapointsListItems, this.devicesColumnHeaders);
210
226
  this.datapointsTableItems = this.datapointsTableViewService.sortDataByDateDescending(groupedDatapointsListItems);
211
- this.isLoading.set(false);
227
+ this.isLoading$.next(false);
212
228
  }
213
229
  /**
214
230
  * Retrieves the active data points series data and returns it as a map.
@@ -224,13 +240,32 @@ export class DatapointsTableViewWidgetComponent {
224
240
  */
225
241
  async getActiveDatapointsSeriesDataMap(datapointsIdsWithSeries, config, roundSeconds) {
226
242
  try {
243
+ this.isFailedToFetchSeriesData = false;
227
244
  return await this.datapointsTableViewService.getAllActiveSeriesDataMap(datapointsIdsWithSeries, config, roundSeconds);
228
245
  }
229
246
  catch (error) {
230
- this.isDisabled = true;
231
- this.isLoading.set(false);
247
+ this.isLoading$.next(false);
248
+ this.handleFetchError(error);
232
249
  }
233
250
  }
251
+ handleFetchError(error) {
252
+ if (error?.message.includes('403')) {
253
+ this.alerts.setAlertGroupDismissStrategy('warning', DismissAlertStrategy.NONE);
254
+ this.isRefreshDisabled = true;
255
+ return;
256
+ }
257
+ const isTimeoutError = error?.name === 'TimeoutError';
258
+ const errorMessage = isTimeoutError
259
+ ? this.TIMEOUT_ERROR_TEXT
260
+ : error?.message ?? this.SERVER_ERROR_TEXT;
261
+ this.alerts.setAlertGroupDismissStrategy('warning', DismissAlertStrategy.TEMPORARY_OR_PERMANENT);
262
+ this.alerts.addAlerts(new DynamicComponentAlert({
263
+ type: 'warning',
264
+ text: errorMessage
265
+ }));
266
+ this.isFailedToFetchSeriesData = true;
267
+ this.alertService.addServerFailure(error);
268
+ }
234
269
  handleMissingAnyPermissionErrorMessage() {
235
270
  this.alerts.setAlertGroupDismissStrategy('system', DismissAlertStrategy.TEMPORARY);
236
271
  this.alerts.addAlerts(new DynamicComponentAlert({
@@ -269,8 +304,13 @@ export class DatapointsTableViewWidgetComponent {
269
304
  this.exportConfig.dateFrom = this.config.dateFrom;
270
305
  this.exportConfig.dateTo = this.config.dateTo;
271
306
  }
272
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatapointsTableViewWidgetComponent, deps: [{ token: i1.DataFetchingService }, { token: i2.DatapointsTableService }, { token: i3.DatapointsTableViewService }, { token: i4.FormBuilder }, { token: i5.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
273
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DatapointsTableViewWidgetComponent, isStandalone: true, selector: "c8y-datapoints-table-view", inputs: { config: "config" }, host: { classAttribute: "d-col fit-h" }, ngImport: i0, template: "<div class=\"d-flex gap-16 p-l-16 p-r-16 flex-wrap\">\n <ng-container *ngIf=\"config.displayDateSelection\">\n <form [formGroup]=\"formGroup\">\n <c8y-date-range-picker\n class=\"d-contents\"\n [isEmittingDateChange]=\"true\"\n [showLabel]=\"true\"\n (updatedDate)=\"onDateChange($event)\"\n ></c8y-date-range-picker>\n </form>\n </ng-container>\n <ng-container *ngIf=\"config.datapoints.length > 0\">\n <c8y-datapoints-reload\n class=\"d-contents\"\n [isAutoRefreshEnabled]=\"config.isAutoRefreshEnabled\"\n [refreshInterval]=\"config.refreshInterval\"\n [isDisabled]=\"isDisabled\"\n [isLoading]=\"isLoading\"\n [isScrolling]=\"isScrolling()\"\n [isExportModalOpen]=\"isExportModalOpen\"\n (onCountdownEnded)=\"onCountdownEnded()\"\n ></c8y-datapoints-reload>\n </ng-container>\n <c8y-datapoints-export-selector\n class=\"d-contents\"\n [exportConfig]=\"exportConfig\"\n (isOpen)=\"onExportModalOpen($event)\"\n ></c8y-datapoints-export-selector>\n</div>\n<ng-container *ngIf=\"devicesColumnHeaders\">\n <c8y-datapoints-table\n [aggregationType]=\"config.aggregation\"\n [datapointsTableItems]=\"datapointsTableItems\"\n [decimalPlaces]=\"config.decimalPlaces\"\n [devicesColumnHeaders]=\"devicesColumnHeaders\"\n [hasMultipleDatapoints]=\"hasMultipleDatapoints\"\n [isLoading]=\"isLoading()\"\n [seriesWithoutPermissionToReadCount]=\"seriesWithoutPermissionToRead?.length\"\n (isScrolling)=\"onScrolling($event)\"\n ></c8y-datapoints-table>\n</ng-container>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: DatapointsExportSelectorComponent, selector: "c8y-datapoints-export-selector", inputs: ["exportConfig"], outputs: ["isOpen"] }, { kind: "component", type: DatapointsReloadComponent, selector: "c8y-datapoints-reload", inputs: ["isAutoRefreshEnabled", "isDisabled", "isLoading", "isScrolling", "isExportModalOpen", "refreshInterval"], outputs: ["onCountdownEnded"] }, { kind: "component", type: DatapointsTableComponent, selector: "c8y-datapoints-table", inputs: ["aggregationType", "datapointsTableItems", "devicesColumnHeaders", "decimalPlaces", "hasMultipleDatapoints", "isLoading", "seriesWithoutPermissionToReadCount"], outputs: ["isScrolling"] }, { kind: "component", type: DateRangePickerComponent, selector: "c8y-date-range-picker", inputs: ["isEmittingDateChange", "showLabel"], outputs: ["updatedDate"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] }); }
307
+ handleGlobalRefreshLoading() {
308
+ this.isLoading$
309
+ .pipe(globalAutoRefreshLoading(this.widgetGlobalAutoRefresh), takeUntil(this.destroy$))
310
+ .subscribe();
311
+ }
312
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatapointsTableViewWidgetComponent, deps: [{ token: i1.AlertService }, { token: i2.DataFetchingService }, { token: i3.DatapointsTableService }, { token: i4.DatapointsTableViewService }, { token: i5.FormBuilder }, { token: i6.TranslateService }, { token: i1.WidgetGlobalAutoRefreshService }], target: i0.ɵɵFactoryTarget.Component }); }
313
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DatapointsTableViewWidgetComponent, isStandalone: true, selector: "c8y-datapoints-table-view", inputs: { config: "config" }, host: { classAttribute: "d-col fit-h" }, ngImport: i0, template: "<div class=\"d-flex gap-16 p-l-16 p-r-16 flex-wrap\">\n <ng-container *ngIf=\"config.displayDateSelection\">\n <form [formGroup]=\"formGroup\">\n <c8y-date-range-picker\n class=\"d-contents\"\n [isEmittingDateChange]=\"true\"\n [showLabel]=\"true\"\n (updatedDate)=\"onDateChange($event)\"\n ></c8y-date-range-picker>\n </form>\n </ng-container>\n <ng-container *ngIf=\"config.datapoints.length > 0\">\n <c8y-datapoints-reload\n class=\"d-contents\"\n [isAutoRefreshEnabled]=\"config.isAutoRefreshEnabled\"\n [refreshInterval]=\"config.refreshInterval\"\n [isRefreshDisabled]=\"isRefreshDisabled\"\n [isLoading]=\"isLoading$\"\n [isScrolling]=\"isScrolling()\"\n [isExportModalOpen]=\"isExportModalOpen\"\n [widgetInstanceGlobalAutoRefreshContext]=\"config.widgetInstanceGlobalAutoRefreshContext\"\n (onCountdownEnded)=\"onCountdownEnded()\"\n ></c8y-datapoints-reload>\n </ng-container>\n <c8y-datapoints-export-selector\n class=\"d-contents\"\n [exportConfig]=\"exportConfig\"\n (isOpen)=\"onExportModalOpen($event)\"\n ></c8y-datapoints-export-selector>\n</div>\n<ng-container *ngIf=\"devicesColumnHeaders\">\n <c8y-datapoints-table\n [aggregationType]=\"config.aggregation\"\n [datapointsTableItems]=\"datapointsTableItems\"\n [decimalPlaces]=\"config.decimalPlaces\"\n [devicesColumnHeaders]=\"devicesColumnHeaders\"\n [hasMultipleDatapoints]=\"hasMultipleDatapoints\"\n [isLoading]=\"isLoading$ | async\"\n [seriesWithoutPermissionToReadCount]=\"seriesWithoutPermissionToRead?.length\"\n (isScrolling)=\"onScrolling($event)\"\n ></c8y-datapoints-table>\n</ng-container>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "component", type: DatapointsExportSelectorComponent, selector: "c8y-datapoints-export-selector", inputs: ["containerClass", "exportConfig"], outputs: ["isOpen"] }, { kind: "component", type: DatapointsReloadComponent, selector: "c8y-datapoints-reload", inputs: ["isAutoRefreshEnabled", "isRefreshDisabled", "isLoading", "isScrolling", "isExportModalOpen", "refreshInterval", "widgetInstanceGlobalAutoRefreshContext"], outputs: ["onCountdownEnded"] }, { kind: "component", type: DatapointsTableComponent, selector: "c8y-datapoints-table", inputs: ["aggregationType", "datapointsTableItems", "devicesColumnHeaders", "decimalPlaces", "hasMultipleDatapoints", "isLoading", "seriesWithoutPermissionToReadCount"], outputs: ["isScrolling"] }, { kind: "component", type: DateRangePickerComponent, selector: "c8y-date-range-picker", inputs: ["isEmittingDateChange", "showLabel"], outputs: ["updatedDate"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] }); }
274
314
  }
275
315
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatapointsTableViewWidgetComponent, decorators: [{
276
316
  type: Component,
@@ -281,8 +321,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
281
321
  DatapointsTableComponent,
282
322
  DateRangePickerComponent,
283
323
  ReactiveFormsModule
284
- ], template: "<div class=\"d-flex gap-16 p-l-16 p-r-16 flex-wrap\">\n <ng-container *ngIf=\"config.displayDateSelection\">\n <form [formGroup]=\"formGroup\">\n <c8y-date-range-picker\n class=\"d-contents\"\n [isEmittingDateChange]=\"true\"\n [showLabel]=\"true\"\n (updatedDate)=\"onDateChange($event)\"\n ></c8y-date-range-picker>\n </form>\n </ng-container>\n <ng-container *ngIf=\"config.datapoints.length > 0\">\n <c8y-datapoints-reload\n class=\"d-contents\"\n [isAutoRefreshEnabled]=\"config.isAutoRefreshEnabled\"\n [refreshInterval]=\"config.refreshInterval\"\n [isDisabled]=\"isDisabled\"\n [isLoading]=\"isLoading\"\n [isScrolling]=\"isScrolling()\"\n [isExportModalOpen]=\"isExportModalOpen\"\n (onCountdownEnded)=\"onCountdownEnded()\"\n ></c8y-datapoints-reload>\n </ng-container>\n <c8y-datapoints-export-selector\n class=\"d-contents\"\n [exportConfig]=\"exportConfig\"\n (isOpen)=\"onExportModalOpen($event)\"\n ></c8y-datapoints-export-selector>\n</div>\n<ng-container *ngIf=\"devicesColumnHeaders\">\n <c8y-datapoints-table\n [aggregationType]=\"config.aggregation\"\n [datapointsTableItems]=\"datapointsTableItems\"\n [decimalPlaces]=\"config.decimalPlaces\"\n [devicesColumnHeaders]=\"devicesColumnHeaders\"\n [hasMultipleDatapoints]=\"hasMultipleDatapoints\"\n [isLoading]=\"isLoading()\"\n [seriesWithoutPermissionToReadCount]=\"seriesWithoutPermissionToRead?.length\"\n (isScrolling)=\"onScrolling($event)\"\n ></c8y-datapoints-table>\n</ng-container>\n" }]
285
- }], ctorParameters: () => [{ type: i1.DataFetchingService }, { type: i2.DatapointsTableService }, { type: i3.DatapointsTableViewService }, { type: i4.FormBuilder }, { type: i5.TranslateService }], propDecorators: { config: [{
324
+ ], template: "<div class=\"d-flex gap-16 p-l-16 p-r-16 flex-wrap\">\n <ng-container *ngIf=\"config.displayDateSelection\">\n <form [formGroup]=\"formGroup\">\n <c8y-date-range-picker\n class=\"d-contents\"\n [isEmittingDateChange]=\"true\"\n [showLabel]=\"true\"\n (updatedDate)=\"onDateChange($event)\"\n ></c8y-date-range-picker>\n </form>\n </ng-container>\n <ng-container *ngIf=\"config.datapoints.length > 0\">\n <c8y-datapoints-reload\n class=\"d-contents\"\n [isAutoRefreshEnabled]=\"config.isAutoRefreshEnabled\"\n [refreshInterval]=\"config.refreshInterval\"\n [isRefreshDisabled]=\"isRefreshDisabled\"\n [isLoading]=\"isLoading$\"\n [isScrolling]=\"isScrolling()\"\n [isExportModalOpen]=\"isExportModalOpen\"\n [widgetInstanceGlobalAutoRefreshContext]=\"config.widgetInstanceGlobalAutoRefreshContext\"\n (onCountdownEnded)=\"onCountdownEnded()\"\n ></c8y-datapoints-reload>\n </ng-container>\n <c8y-datapoints-export-selector\n class=\"d-contents\"\n [exportConfig]=\"exportConfig\"\n (isOpen)=\"onExportModalOpen($event)\"\n ></c8y-datapoints-export-selector>\n</div>\n<ng-container *ngIf=\"devicesColumnHeaders\">\n <c8y-datapoints-table\n [aggregationType]=\"config.aggregation\"\n [datapointsTableItems]=\"datapointsTableItems\"\n [decimalPlaces]=\"config.decimalPlaces\"\n [devicesColumnHeaders]=\"devicesColumnHeaders\"\n [hasMultipleDatapoints]=\"hasMultipleDatapoints\"\n [isLoading]=\"isLoading$ | async\"\n [seriesWithoutPermissionToReadCount]=\"seriesWithoutPermissionToRead?.length\"\n (isScrolling)=\"onScrolling($event)\"\n ></c8y-datapoints-table>\n</ng-container>\n" }]
325
+ }], ctorParameters: () => [{ type: i1.AlertService }, { type: i2.DataFetchingService }, { type: i3.DatapointsTableService }, { type: i4.DatapointsTableViewService }, { type: i5.FormBuilder }, { type: i6.TranslateService }, { type: i1.WidgetGlobalAutoRefreshService }], propDecorators: { config: [{
286
326
  type: Input
287
327
  }] } });
288
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50cy10YWJsZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3dpZGdldHMvaW1wbGVtZW50YXRpb25zL2RhdGFwb2ludHMtdGFibGUvZGF0YXBvaW50cy10YWJsZS12aWV3L2RhdGFwb2ludHMtdGFibGUtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi93aWRnZXRzL2ltcGxlbWVudGF0aW9ucy9kYXRhcG9pbnRzLXRhYmxlL2RhdGFwb2ludHMtdGFibGUtdmlldy9kYXRhcG9pbnRzLXRhYmxlLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRS9FLE9BQU8sRUFDTCxZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLHFCQUFxQixFQUVyQixPQUFPLEVBQ1IsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGlDQUFpQyxFQUlqQyxrQkFBa0IsRUFDbkIsTUFBTSxnREFBZ0QsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNELE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsa0NBQWtDLEVBTW5DLE1BQU0sa0NBQWtDLENBQUM7QUFDMUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDckUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0s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QUUsQ0FBQztZQUN0RixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUNsRCxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNoRCxDQUFDOytHQXRZVSxrQ0FBa0M7bUdBQWxDLGtDQUFrQyw0SkNuRC9DLDJqREF5Q0EsMkNERUksWUFBWSxtSUFDWixpQ0FBaUMsMEhBQ2pDLHlCQUF5QixxTkFDekIsd0JBQXdCLHFRQUN4Qix3QkFBd0IsMElBQ3hCLG1CQUFtQjs7NEZBR1Ysa0NBQWtDO2tCQWQ5QyxTQUFTOytCQUNFLDJCQUEyQixRQUUvQixFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsY0FDbEIsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osaUNBQWlDO3dCQUNqQyx5QkFBeUI7d0JBQ3pCLHdCQUF3Qjt3QkFDeEIsd0JBQXdCO3dCQUN4QixtQkFBbUI7cUJBQ3BCOytOQU1RLE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElTZXJpZXMgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBDb21tb25Nb2R1bGUsXG4gIERpc21pc3NBbGVydFN0cmF0ZWd5LFxuICBEeW5hbWljQ29tcG9uZW50QWxlcnQsXG4gIER5bmFtaWNDb21wb25lbnRBbGVydEFnZ3JlZ2F0b3IsXG4gIGdldHRleHRcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBLUElEZXRhaWxzIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9kYXRhcG9pbnQtc2VsZWN0b3InO1xuaW1wb3J0IHtcbiAgRGF0YUZldGNoaW5nU2VydmljZSxcbiAgRGF0YXBvaW50c0V4cG9ydFNlbGVjdG9yQ29tcG9uZW50LFxuICBEYXRhcG9pbnRzVmFsdWVzRGF0YU1hcCxcbiAgRXhwb3J0Q29uZmlnLFxuICBTb3VyY2VJZCxcbiAgZGF0ZVJhbmdlVmFsaWRhdG9yXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3InO1xuaW1wb3J0IHsgSU5URVJWQUxfVkFMVUVTIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9pbnRlcnZhbC1waWNrZXInO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIERBVEVfU0VMRUNUSU9OX1ZBTFVFUyxcbiAgREVGQVVMVF9EUFRfUkVGUkVTSF9JTlRFUlZBTF9WQUxVRSxcbiAgRGF0YXBvaW50VGFibGVJdGVtLFxuICBEYXRhcG9pbnRXaXRoVmFsdWVzLFxuICBEYXRhcG9pbnRzVGFibGVDb25maWcsXG4gIEdyb3VwZWREYXRhcG9pbnRUYWJsZUl0ZW0sXG4gIFRhYmxlQ29sdW1uSGVhZGVyXG59IGZyb20gJy4uL2RhdGFwb2ludHMtdGFibGUtd2lkZ2V0Lm1vZGVsJztcbmltcG9ydCB7IERhdGFwb2ludHNUYWJsZVNlcnZpY2UgfSBmcm9tICcuLi9kYXRhcG9pbnRzLXRhYmxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IERhdGFwb2ludHNSZWxvYWRDb21wb25lbnQgfSBmcm9tICcuL2RhdGFwb2ludHMtcmVsb2FkL2RhdGFwb2ludHMtcmVsb2FkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRhcG9pbnRzVGFibGVWaWV3U2VydmljZSB9IGZyb20gJy4vZGF0YXBvaW50cy10YWJsZS12aWV3LnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0YXBvaW50c1RhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRhcG9pbnRzLXRhYmxlL2RhdGFwb2ludHMtdGFibGUuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWRhdGFwb2ludHMtdGFibGUtdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhcG9pbnRzLXRhYmxlLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBob3N0OiB7IGNsYXNzOiAnZC1jb2wgZml0LWgnIH0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRGF0YXBvaW50c0V4cG9ydFNlbGVjdG9yQ29tcG9uZW50LFxuICAgIERhdGFwb2ludHNSZWxvYWRDb21wb25lbnQsXG4gICAgRGF0YXBvaW50c1RhYmxlQ29tcG9uZW50LFxuICAgIERhdGVSYW5nZVBpY2tlckNvbXBvbmVudCxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRGF0YXBvaW50c1RhYmxlVmlld1dpZGdldENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqICBEYXRhIHBvaW50cyB0YWJsZSB3aWRnZXQgY29uZmlnLlxuICAgKi9cbiAgQElucHV0KCkgY29uZmlnOiBEYXRhcG9pbnRzVGFibGVDb25maWc7XG5cbiAgYWxlcnRzOiBEeW5hbWljQ29tcG9uZW50QWxlcnRBZ2dyZWdhdG9yO1xuXG4gIC8qKlxuICAgKiBSZXByZXNlbnRzIHRoZSBkYXRhIHBvaW50cyB3aGVyZSBfX2FjdGl2ZSBwcm9wZXJ0eSBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIGFjdGl2ZURhdGFwb2ludHM6IEtQSURldGFpbHNbXSA9IFtdO1xuICAvKipcbiAgICogQW4gYXJyYXkgb2Ygb2JqZWN0cyByZXByZXNlbnRpbmcgZGF0YXBvaW50cyB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICAgKiBVc2VkIHRvIHBvcHVsYXRlIHRoZSBDU1YvRXhjZWwgZmlsZSB3aXRoIGRhdGEuXG4gICAqL1xuICBkYXRhcG9pbnRzV2l0aFZhbHVlczogRGF0YXBvaW50V2l0aFZhbHVlc1tdO1xuICAvKipcbiAgICogQW4gYXJyYXkgb2YgYEdyb3VwZWREYXRhcG9pbnRUYWJsZUl0ZW1gIG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSBkYXRhcG9pbnRzIHRhYmxlIGl0ZW1zLlxuICAgKiBVc2VkIHRvIHBvcHVsYXRlIHRoZSB0YWJsZSB3aXRoIGRhdGEuXG4gICAqL1xuICBkYXRhcG9pbnRzVGFibGVJdGVtczogR3JvdXBlZERhdGFwb2ludFRhYmxlSXRlbVtdID0gW107XG5cbiAgZGV2aWNlc0NvbHVtbkhlYWRlcnM6IFRhYmxlQ29sdW1uSGVhZGVyW107XG4gIC8qKlxuICAgKiBSZXByZXNlbnRzIGEgY29uZmlndXJhdGlvbiBvcHRpb25zIHVzZWQgYnkgYSBjOHktZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3IuXG4gICAqL1xuICBleHBvcnRDb25maWc6IEV4cG9ydENvbmZpZztcblxuICBmb3JtR3JvdXA6IFJldHVyblR5cGU8RGF0YXBvaW50c1RhYmxlVmlld1dpZGdldENvbXBvbmVudFsnY3JlYXRlRm9ybSddPjtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgZGF0YSBwb2ludC5cbiAgICogSWYgaXMgdHJ1ZSwgdGhlbiBhIGNvbHVtbiAnRGV2aWNlJyB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUgdGFibGUuXG4gICAqL1xuICBoYXNNdWx0aXBsZURhdGFwb2ludHM6IGJvb2xlYW47XG5cbiAgaXNEaXNhYmxlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29tcG9uZW50IGlzIGluIHRoZSBpbml0aWFsIHJlcXVlc3Qgc3RhdGVcbiAgICogd2hlcmUgZGF0YSBmb3IgYSB0YWJsZSBzdHJ1Y3R1cmUgaXMgYmVpbmcgcHJlcGFyZWQuXG4gICAqL1xuICBpc0luaXRpYWxSZXF1ZXN0ID0gdHJ1ZTtcbiAgLyoqXG4gICAqIEN1cnJlbnQgaXNMb2FkaW5nIHN0YXRlLiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZGF0YSBpcyBiZWluZyBsb2FkZWQuXG4gICAqL1xuICBpc0xvYWRpbmcgPSBzaWduYWwodHJ1ZSk7XG5cbiAgaXNFeHBvcnRNb2RhbE9wZW4gPSBmYWxzZTtcblxuICBpc1Njcm9sbGluZyA9IHNpZ25hbChmYWxzZSk7XG5cbiAgc2VyaWVzV2l0aG91dFBlcm1pc3Npb25Ub1JlYWQ6IHsga2V5OiBTb3VyY2VJZDsgdmFsdWU6IHN0cmluZ1tdIH1bXTtcblxuICBwcml2YXRlIHNjcm9sbGluZ1N1YmplY3QkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgYWxlcnQgaGFzIGFscmVhZHkgYmVlbiBkaXNwbGF5ZWQgYW5kIGNhbiBiZSBkaXNtaXNzZWQuXG4gICAqIFRoZSBtZXNzYWdlIGlzIG9ubHkgZGlzcGxheWVkIHdoZW4gYSBjb21wb25lbnQgaXMgaW5pdGlhbGl6ZWQuXG4gICAqL1xuICBwcml2YXRlIGlzTWlzc2luZ0FueVBlcm1pc3Npb25BbGVydFNob3duID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkYXRhRmV0Y2hpbmdTZXJ2aWNlOiBEYXRhRmV0Y2hpbmdTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGF0YXBvaW50c1RhYmxlQ29uZmlnU2VydmljZTogRGF0YXBvaW50c1RhYmxlU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGFwb2ludHNUYWJsZVZpZXdTZXJ2aWNlOiBEYXRhcG9pbnRzVGFibGVWaWV3U2VydmljZSxcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2VcbiAgKSB7fVxuXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFdpbGwgYmUgdW5jb21tZW50ZWQgaW4gTVRNLTYxOTIwXG4gICAgLy8gaWYgKHRoaXMuY29uZmlnLndpZGdldEluc3RhbmNlR2xvYmFsVGltZUNvbnRleHQpIHtcbiAgICAvLyAgIHRoaXMuaGFuZGxlR2xvYmFsVGltZUNvbnRleHRTZXR0aW5ncygpO1xuICAgIC8vIH1cblxuICAgIC8vIENvbmRpdGlvbiB3aWxsIGJlIHJlbW92ZWQgaW4gTVRNLTYxOTIwXG4gICAgLy8gRGFzaGJvYXJkIGNvbnRleHQgaXMgdGVtcG9yYXJ5IG5vdCBzdXBwb3J0ZWQgaW4gdGhlIG5ldyBpbXBsZW1lbnRhdGlvblxuICAgIGlmICh0aGlzLmNvbmZpZy53aWRnZXRJbnN0YW5jZUdsb2JhbFRpbWVDb250ZXh0KSB7XG4gICAgICB0aGlzLmNvbmZpZy53aWRnZXRJbnN0YW5jZUdsb2JhbFRpbWVDb250ZXh0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQ29uZGl0aW9uIHdpbGwgYmUgcmVtb3ZlZCBpbiBNVE0tNjE5MjBcbiAgICAvLyBEYXNoYm9hcmQgY29udGV4dCBpcyB0ZW1wb3Jhcnkgbm90IHN1cHBvcnRlZCBpbiB0aGUgbmV3IGltcGxlbWVudGF0aW9uXG4gICAgaWYgKHRoaXMuY29uZmlnWydnbG9iYWxEYXRlU2VsZWN0b3InXSA9PT0gJ2Rhc2hib2FyZF9jb250ZXh0Jykge1xuICAgICAgdGhpcy5jb25maWdbJ2dsb2JhbERhdGVTZWxlY3RvciddID0gREFURV9TRUxFQ1RJT05fVkFMVUVTLmNvbmZpZztcbiAgICB9XG5cbiAgICB0aGlzLnNldFNjcm9sbGluZ1N1YnNjcmlwdGlvbigpO1xuXG4gICAgY29uc3QgaXNMZWdhY3lXaWRnZXRSZWFsdGltZUFjdGl2ZSA9XG4gICAgICB0aGlzLmNvbmZpZy5yZWFsdGltZSAmJlxuICAgICAgIXRoaXMuY29uZmlnLmRlY2ltYWxQbGFjZXMgJiZcbiAgICAgICF0aGlzLmNvbmZpZy5yZWZyZXNoSW50ZXJ2YWwgJiZcbiAgICAgICF0aGlzLmNvbmZpZy5pc0F1dG9SZWZyZXNoRW5hYmxlZDtcblxuICAgIGlmIChpc0xlZ2FjeVdpZGdldFJlYWx0aW1lQWN0aXZlKSB7XG4gICAgICB0aGlzLnNldERlZmF1bHRSZWZyZXNoUmVsYXRlZFByb3BlcnRpZXMoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcuaW50ZXJ2YWwgIT09IElOVEVSVkFMX1ZBTFVFUy5jdXN0b20pIHtcbiAgICAgIHRoaXMucmVjYWxjdWxhdGVJbnRlcnZhbFRvTWF0Y2hGcm9tTm93RGF0ZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5kaXNwbGF5RGF0ZVNlbGVjdGlvbikge1xuICAgICAgdGhpcy5wcmVwYXJlRGF0ZVJhbmdlRm9ybSgpO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMucHJlcGFyZVRhYmxlRGF0YSgpO1xuXG4gICAgdGhpcy5leHBvcnRDb25maWcgPSB7XG4gICAgICBhZ2dyZWdhdGlvbjogdGhpcy5jb25maWcuYWdncmVnYXRpb24sXG4gICAgICBkYXRlRnJvbTogdGhpcy5jb25maWcuZGF0ZUZyb20sXG4gICAgICBkYXRlVG86IHRoaXMuY29uZmlnLmRhdGVUbyxcbiAgICAgIGRhdGFwb2ludERldGFpbHM6IHRoaXMuYWN0aXZlRGF0YXBvaW50cy5tYXAoKHsgX190YXJnZXQsIGZyYWdtZW50LCBzZXJpZXMgfSkgPT4gKHtcbiAgICAgICAgZGV2aWNlTmFtZTogX190YXJnZXQubmFtZSxcbiAgICAgICAgc291cmNlOiBfX3RhcmdldC5pZCxcbiAgICAgICAgdmFsdWVGcmFnbWVudFNlcmllczogc2VyaWVzLFxuICAgICAgICB2YWx1ZUZyYWdtZW50VHlwZTogZnJhZ21lbnRcbiAgICAgIH0pKVxuICAgIH07XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgb25EYXRlQ2hhbmdlKGRhdGE6IHsgZGF0ZUZyb20/OiBzdHJpbmcgfCBudWxsOyBkYXRlVG8/OiBzdHJpbmcgfCBudWxsIH0pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb3JtR3JvdXAuaW52YWxpZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkYXRhLmRhdGVGcm9tKSB7XG4gICAgICB0aGlzLmNvbmZpZy5kYXRlRnJvbSA9IGRhdGEuZGF0ZUZyb207XG4gICAgfVxuICAgIGlmIChkYXRhLmRhdGVUbykge1xuICAgICAgdGhpcy5jb25maWcuZGF0ZVRvID0gZGF0YS5kYXRlVG87XG4gICAgfVxuICAgIHRoaXMucHJlcGFyZVRhYmxlRGF0YSgpO1xuXG4gICAgdGhpcy51cGRhdGVFeHBvcnRDb25maWdEYXRlUmFuZ2UoKTtcbiAgfVxuXG4gIG9uRXhwb3J0TW9kYWxPcGVuKGlzT3BlbmVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pc0V4cG9ydE1vZGFsT3BlbiA9IGlzT3BlbmVkO1xuICB9XG5cbiAgb25TY3JvbGxpbmcodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnNjcm9sbGluZ1N1YmplY3QkLm5leHQodmFsdWUpO1xuICB9XG5cbiAgYXN5bmMgb25Db3VudGRvd25FbmRlZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBkYXRlUmFuZ2UgPSB0aGlzLmRhdGFwb2ludHNUYWJsZVZpZXdTZXJ2aWNlLnByZXBhcmVUaW1lUmFuZ2UoXG4gICAgICB0aGlzLmNvbmZpZy5pbnRlcnZhbCxcbiAgICAgIHRoaXMuY29uZmlnLmRhdGVGcm9tLFxuICAgICAgdGhpcy5jb25maWcuZGF0ZVRvXG4gICAgKTtcblxuICAgIHRoaXMuY29uZmlnLmRhdGVGcm9tID0gZGF0ZVJhbmdlLmRhdGVGcm9tO1xuICAgIHRoaXMuY29uZmlnLmRhdGVUbyA9IGRhdGVSYW5nZS5kYXRlVG87XG5cbiAgICB0aGlzLnVwZGF0ZUV4cG9ydENvbmZpZ0RhdGVSYW5nZSgpO1xuICAgIGF3YWl0IHRoaXMucHJlcGFyZVRhYmxlRGF0YShmYWxzZSk7XG5cbiAgICB0aGlzLm9uU2Nyb2xsaW5nKGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlR2xvYmFsVGltZUNvbnRleHRTZXR0aW5ncygpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZy5kYXRlRnJvbSA9IHRoaXMuZGF0YUZldGNoaW5nU2VydmljZS5hZGp1c3REYXRlKHRoaXMuY29uZmlnLmRhdGVbMF0sIDAsIGZhbHNlKTtcbiAgICB0aGlzLmNvbmZpZy5kYXRlVG8gPSB0aGlzLmRhdGFGZXRjaGluZ1NlcnZpY2UuYWRqdXN0RGF0ZSh0aGlzLmNvbmZpZy5kYXRlWzFdLCAwLCBmYWxzZSk7XG4gICAgaWYgKHRoaXMuY29uZmlnLnJlYWx0aW1lKSB7XG4gICAgICB0aGlzLnNldERlZmF1bHRSZWZyZXNoUmVsYXRlZFByb3BlcnRpZXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb25maWcuaXNBdXRvUmVmcmVzaEVuYWJsZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCB0aGUgc2Nyb2xsaW5nIHN1YnNjcmlwdGlvbi5cbiAgICpcbiAgICogRW5zdXJlcyBzaW1pbGFyIFVYIGFzIGluIHRoZSBhbGFybXMgY291bnRkb3duLXBhdXNlIGxvZ2ljLlxuICAgKi9cbiAgcHJpdmF0ZSBzZXRTY3JvbGxpbmdTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLnNjcm9sbGluZ1N1YmplY3QkXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMzAwKSlcbiAgICAgIC5zdWJzY3JpYmUodmFsdWUgPT4gdGhpcy5pc1Njcm9sbGluZy5zZXQodmFsdWUpKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0RGVmYXVsdFJlZnJlc2hSZWxhdGVkUHJvcGVydGllcygpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZy5pc0F1dG9SZWZyZXNoRW5hYmxlZCA9IHRydWU7XG4gICAgdGhpcy5jb25maWcucmVmcmVzaEludGVydmFsID0gREVGQVVMVF9EUFRfUkVGUkVTSF9JTlRFUlZBTF9WQUxVRTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjYWxjdWxhdGVJbnRlcnZhbFRvTWF0Y2hGcm9tTm93RGF0ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb25maWcud2lkZ2V0SW5zdGFuY2VHbG9iYWxUaW1lQ29udGV4dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgZGF0ZUZyb20sIGRhdGVUbyB9ID0gdGhpcy5kYXRhcG9pbnRzVGFibGVDb25maWdTZXJ2aWNlLmNhbGN1bGF0ZURhdGVSYW5nZShcbiAgICAgIHRoaXMuY29uZmlnLmludGVydmFsXG4gICAgKTtcbiAgICB0aGlzLmNvbmZpZy5kYXRlRnJvbSA9IGRhdGVGcm9tO1xuICAgIHRoaXMuY29uZmlnLmRhdGVUbyA9IGRhdGVUbztcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZURhdGVSYW5nZUZvcm0oKSB7XG4gICAgdGhpcy5mb3JtR3JvdXAgPSB0aGlzLmNyZWF0ZUZvcm0oKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRm9ybSgpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cChcbiAgICAgIHtcbiAgICAgICAgZGF0ZUZyb206IG5ldyBGb3JtQ29udHJvbCh0aGlzLmNvbmZpZy5kYXRlRnJvbSksXG4gICAgICAgIGRhdGVUbzogbmV3IEZvcm1Db250cm9sKHRoaXMuY29uZmlnLmRhdGVUbylcbiAgICAgIH0sXG4gICAgICB7IHZhbGlkYXRvcnM6IGRhdGVSYW5nZVZhbGlkYXRvciB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlcyB0aGUgdGFibGUgZGF0YSBieTpcbiAgICogLSBmaWx0ZXJpbmcgb3V0IGluYWN0aXZlIGRhdGEgcG9pbnRzLFxuICAgKiAtIGNoZWNraW5nIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBkZXZpY2VzIGFzIGEgc291cmNlIG9mIGRhdGEgcG9pbnRzLFxuICAgKiAtIGdldHRpbmcgdGhlIGNvbHVtbiBoZWFkZXJzIGZvciBkZXZpY2VzLFxuICAgKiAtIGdldHRpbmcgdGhlIHNlcmllcyBkYXRhIGZvciBhY3RpdmUgZGF0YSBwb2ludHMgKEFQSSBjYWxsKSxcbiAgICogLSBwcmVwYXJpbmcgZGF0YSBwb2ludHMgd2l0aCB2YWx1ZXMgbGlzdCxcbiAgICogLSBtYXBwaW5nIGRhdGEgcG9pbnRzIHdpdGggdmFsdWVzIHRvIGxpc3QgaXRlbXMsXG4gICAqIC0gZ3JvdXBpbmcgZGF0YSBwb2ludHMgYnkgZGF0ZSBhbmQgZGV2aWNlLFxuICAgKiAtIHNvcnRpbmcgZGF0YSBieSBkYXRlIGRlc2NlbmRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSByb3VuZFNlY29uZHMgLSBXaGV0aGVyIHRvIHJvdW5kIHRoZSBzZWNvbmRzIG9yIG5vdC5cbiAgICogICAgICAgICAgICAgICAgICAgICAgIElmIHRydWUsIHRoZSBzZWNvbmRzIHdpbGwgYmUgcm91bmRlZCB0byAwLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgSWYgZmFsc2UsIHRoZSBzZWNvbmRzIHdpbGwgYmUgZGlzcGxheWVkIGFzIHRoZXkgYXJlLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlVGFibGVEYXRhKHJvdW5kU2Vjb25kcyA9IHRydWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmlzTG9hZGluZy5zZXQodHJ1ZSk7XG5cbiAgICBpZiAodGhpcy5pc0luaXRpYWxSZXF1ZXN0KSB7XG4gICAgICB0aGlzLmFjdGl2ZURhdGFwb2ludHMgPSB0aGlzLmRhdGFwb2ludHNUYWJsZVZpZXdTZXJ2aWNlLmZpbHRlck91dEluYWN0aXZlRGF0YXBvaW50cyhcbiAgICAgICAgdGhpcy5jb25maWcuZGF0YXBvaW50c1xuICAgICAgKTtcblxuICAgICAgdGhpcy5oYXNNdWx0aXBsZURhdGFwb2ludHMgPSB0aGlzLmRhdGFwb2ludHNUYWJsZVZpZXdTZXJ2aWNlLmhhc011bHRpcGxlRGF0YXBvaW50cyhcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRhcG9pbnRzXG4gICAgICApO1xuXG4gICAgICB0aGlzLmRldmljZXNDb2x1bW5IZWFkZXJzID0gdGhpcy5kYXRhcG9pbnRzVGFibGVWaWV3U2VydmljZS5nZXRDb2x1bW5IZWFkZXJzKFxuICAgICAgICB0aGlzLmFjdGl2ZURhdGFwb2ludHNcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuaXNJbml0aWFsUmVxdWVzdCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGFjdGl2ZURhdGFwb2ludHNJZHNXaXRoU2VyaWVzOiBEYXRhcG9pbnRzVmFsdWVzRGF0YU1hcCA9XG4gICAgICB0aGlzLmRhdGFwb2ludHNUYWJsZVZpZXdTZXJ2aWNlLmdyb3VwU2VyaWVzQnlEZXZpY2VJZCh0aGlzLmFjdGl2ZURhdGFwb2ludHMpO1xuXG4gICAgY29uc3QgYWN0aXZlRGF0YXBvaW50c1Nlcmllc0RhdGE6IE1hcDxzdHJpbmcgfCBudW1iZXIsIElTZXJpZXM+ID1cbiAgICAgIGF3YWl0IHRoaXMuZ2V0QWN0aXZlRGF0YXBvaW50c1Nlcmllc0RhdGFNYXAoXG4gICAgICAgIGFjdGl2ZURhdGFwb2ludHNJZHNXaXRoU2VyaWVzLFxuICAgICAgICB0aGlzLmNvbmZpZyxcbiAgICAgICAgcm91bmRTZWNvbmRzXG4gICAgICApO1xuXG4gICAgdGhpcy5zZXJpZXNXaXRob3V0UGVybWlzc2lvblRvUmVhZCA9XG4gICAgICB0aGlzLmRhdGFwb2ludHNUYWJsZVZpZXdTZXJ2aWNlLmdldFNlcmllc1dpdGhvdXRQZXJtaXNzaW9uVG9SZWFkKFxuICAgICAgICBhY3RpdmVEYXRhcG9pbnRzU2VyaWVzRGF0YSxcbiAgICAgICAgYWN0aXZlRGF0YXBvaW50c0lkc1dpdGhTZXJpZXNcbiAgICAgICk7XG5cbiAgICBpZiAoXG4gICAgICAhdGhpcy5pc01pc3NpbmdBbnlQZXJtaXNzaW9uQWxlcnRTaG93biAmJlxuICAgICAgdGhpcy5zZXJpZXNXaXRob3V0UGVybWlzc2lvblRvUmVhZD8ubGVuZ3RoID4gMCAmJlxuICAgICAgYWN0aXZlRGF0YXBvaW50c1Nlcmllc0RhdGE/LnNpemVcbiAgICApIHtcbiAgICAgIHRoaXMuaGFuZGxlTWlzc2luZ0FueVBlcm1pc3Npb25FcnJvck1lc3NhZ2UoKTtcbiAgICAgIHRoaXMuaXNNaXNzaW5nQW55UGVybWlzc2lvbkFsZXJ0U2hvd24gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICghYWN0aXZlRGF0YXBvaW50c1Nlcmllc0RhdGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGFwb2ludHNXaXRoVmFsdWVzID0gdGhpcy5kYXRhcG9pbnRzVGFibGVWaWV3U2VydmljZS5nZXREYXRhcG9pbnRzV2l0aFZhbHVlcyhcbiAgICAgIHRoaXMuYWN0aXZlRGF0YXBvaW50cyxcbiAgICAgIGFjdGl2ZURhdGFwb2ludHNTZXJpZXNEYXRhXG4gICAgKTtcblxuICAgIGNvbnN0IGRhdGFwb2ludHNMaXN0SXRlbXM6IERhdGFwb2ludFRhYmxlSXRlbVtdID1cbiAgICAgIHRoaXMuZGF0YXBvaW50c1RhYmxlVmlld1NlcnZpY2UubWFwRGF0YXBvaW50c1dpdGhWYWx1ZXNUb0xpc3QodGhpcy5kYXRhcG9pbnRzV2l0aFZhbHVlcyk7XG5cbiAgICBjb25zdCBncm91cGVkRGF0YXBvaW50c0xpc3RJdGVtczogR3JvdXBlZERhdGFwb2ludFRhYmxlSXRlbVtdID1cbiAgICAgIHRoaXMuZGF0YXBvaW50c1RhYmxlVmlld1NlcnZpY2UuZ3JvdXBCeURhdGVBbmREZXZpY2UoXG4gICAgICAgIGRhdGFwb2ludHNMaXN0SXRlbXMsXG4gICAgICAgIHRoaXMuZGV2aWNlc0NvbHVtbkhlYWRlcnNcbiAgICAgICk7XG5cbiAgICB0aGlzLmRhdGFwb2ludHNUYWJsZUl0ZW1zID0gdGhpcy5kYXRhcG9pbnRzVGFibGVWaWV3U2VydmljZS5zb3J0RGF0YUJ5RGF0ZURlc2NlbmRpbmcoXG4gICAgICBncm91cGVkRGF0YXBvaW50c0xpc3RJdGVtc1xuICAgICk7XG5cbiAgICB0aGlzLmlzTG9hZGluZy5zZXQoZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgYWN0aXZlIGRhdGEgcG9pbnRzIHNlcmllcyBkYXRhIGFuZCByZXR1cm5zIGl0IGFzIGEgbWFwLlxuICAgKlxuICAgKiBJdCdzIGEgd3JhcHBlciBtZXRob2Qgd2l0aCB0cnktY2F0Y2ggYmxvY2suXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhcG9pbnRzSWRzV2l0aFNlcmllcyAtIEEgbWFwIG9mIGRhdGEgcG9pbnQgSURzIHdpdGggdGhlaXIgYXNzb2NpYXRlZCBzZXJpZXMuXG4gICAqIEBwYXJhbSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBvZiB0aGUgZGF0YSBwb2ludHMgdGFibGUuXG4gICAqIEBwYXJhbSByb3VuZFNlY29uZHMgLSBXaGV0aGVyIHRvIHJvdW5kIHRoZSBzZWNvbmRzIG9yIG5vdC5cbiAgICogICAgICAgICAgICAgICAgICAgICAgIElmIHRydWUsIHRoZSBzZWNvbmRzIHdpbGwgYmUgcm91bmRlZCB0byAwLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgSWYgZmFsc2UsIHRoZSBzZWNvbmRzIHdpbGwgYmUgZGlzcGxheWVkIGFzIHRoZXkgYXJlLlxuICAgKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIE1hcCBvYmplY3Qgd2l0aCBkYXRhIHBvaW50IElEcyBhcyBrZXlzIGFuZCBEYXRhT2JqZWN0IGFzIHZhbHVlcy5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZ2V0QWN0aXZlRGF0YXBvaW50c1Nlcmllc0RhdGFNYXAoXG4gICAgZGF0YXBvaW50c0lkc1dpdGhTZXJpZXM6IERhdGFwb2ludHNWYWx1ZXNEYXRhTWFwLFxuICAgIGNvbmZpZzogRGF0YXBvaW50c1RhYmxlQ29uZmlnLFxuICAgIHJvdW5kU2Vjb25kczogYm9vbGVhblxuICApOiBQcm9taXNlPE1hcDxzdHJpbmcgfCBudW1iZXIsIElTZXJpZXM+PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRhdGFwb2ludHNUYWJsZVZpZXdTZXJ2aWNlLmdldEFsbEFjdGl2ZVNlcmllc0RhdGFNYXAoXG4gICAgICAgIGRhdGFwb2ludHNJZHNXaXRoU2VyaWVzLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJvdW5kU2Vjb25kc1xuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5pc0Rpc2FibGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVNaXNzaW5nQW55UGVybWlzc2lvbkVycm9yTWVzc2FnZSgpIHtcbiAgICB0aGlzLmFsZXJ0cy5zZXRBbGVydEdyb3VwRGlzbWlzc1N0cmF0ZWd5KCdzeXN0ZW0nLCBEaXNtaXNzQWxlcnRTdHJhdGVneS5URU1QT1JBUlkpO1xuXG4gICAgdGhpcy5hbGVydHMuYWRkQWxlcnRzKFxuICAgICAgbmV3IER5bmFtaWNDb21wb25lbnRBbGVydCh7XG4gICAgICAgIGFsbG93SHRtbDogdHJ1ZSxcbiAgICAgICAgdGV4dDogdGhpcy5nZXRNaXNzaW5nUGVybWlzc2lvbnNNZXNzYWdlKCksXG4gICAgICAgIHR5cGU6ICdzeXN0ZW0nXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldE1pc3NpbmdQZXJtaXNzaW9uc01lc3NhZ2UoKTogc3RyaW5nIHtcbiAgICBjb25zdCBiYXNlTWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgZ2V0dGV4dChgWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbnMgdG8gcmVhZCB0aGUgZm9sbG93aW5nIHNlcmllczpgKVxuICAgICk7XG5cbiAgICBjb25zdCBmb3JtYXR0ZWRMaXN0ID0gdGhpcy5zZXJpZXNXaXRob3V0UGVybWlzc2lvblRvUmVhZFxuICAgICAgLm1hcChkYXRhcG9pbnQgPT4gYDxsaT4ke2RhdGFwb2ludC5rZXkudmFsdWVPZigpfV8ke2RhdGFwb2ludC52YWx1ZX08L2xpPmApXG4gICAgICAuam9pbignJyk7XG5cbiAgICByZXR1cm4gYFxuICAgICAgPGRpdj5cbiAgICAgICAgPHA+JHtiYXNlTWVzc2FnZX08L3A+XG4gICAgICAgIDx1bD5cbiAgICAgICAgICAke2Zvcm1hdHRlZExpc3R9XG4gICAgICAgIDwvdWw+XG4gICAgICAgIDxwPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gVGhlIG5hbWUgY29udmVudGlvbiBmb3IgZWFjaCBsaXN0IGl0ZW0gaXM6IDxjb2RlPltzb3VyY2VdX1tmcmFnbWVudC5zZXJpZXNdPC9jb2RlPjwvcD5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUV4cG9ydENvbmZpZ0RhdGVSYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZy5kYXRlVG8gPSB0aGlzLmFkanVzdFRhcmdldERhdGVCYXNlZE9uQ29uZGl0aW9uVGltZShcbiAgICAgIHRoaXMuY29uZmlnLmRhdGVGcm9tLFxuICAgICAgdGhpcy5jb25maWcuZGF0ZVRvXG4gICAgKTtcblxuICAgIHRoaXMuY29uZmlnLmRhdGVGcm9tID0gdGhpcy5hZGp1c3RUYXJnZXREYXRlQmFzZWRPbkNvbmRpdGlvblRpbWUoXG4gICAgICB0aGlzLmNvbmZpZy5kYXRlVG8sXG4gICAgICB0aGlzLmNvbmZpZy5kYXRlRnJvbVxuICAgICk7XG5cbiAgICB0aGlzLnN5bmNFeHBvcnRDb25maWdEYXRlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGp1c3RUYXJnZXREYXRlQmFzZWRPbkNvbmRpdGlvblRpbWUoY29uZGl0aW9uRGF0ZTogc3RyaW5nLCB0YXJnZXREYXRlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmRhdGFwb2ludHNUYWJsZVZpZXdTZXJ2aWNlLmhhc1NlY29uZHNBbmRNaWxsaXNlY29uZHNFcXVhbFplcm8oY29uZGl0aW9uRGF0ZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFGZXRjaGluZ1NlcnZpY2UuYWRqdXN0RGF0ZSh0YXJnZXREYXRlLCAwLCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldERhdGU7XG4gIH1cblxuICBwcml2YXRlIHN5bmNFeHBvcnRDb25maWdEYXRlcygpOiB2b2lkIHtcbiAgICB0aGlzLmV4cG9ydENvbmZpZy5kYXRlRnJvbSA9IHRoaXMuY29uZmlnLmRhdGVGcm9tO1xuICAgIHRoaXMuZXhwb3J0Q29uZmlnLmRhdGVUbyA9IHRoaXMuY29uZmlnLmRhdGVUbztcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMTYgcC1sLTE2IHAtci0xNiBmbGV4LXdyYXBcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbmZpZy5kaXNwbGF5RGF0ZVNlbGVjdGlvblwiPlxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XG4gICAgICA8Yzh5LWRhdGUtcmFuZ2UtcGlja2VyXG4gICAgICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgICAgIFtpc0VtaXR0aW5nRGF0ZUNoYW5nZV09XCJ0cnVlXCJcbiAgICAgICAgW3Nob3dMYWJlbF09XCJ0cnVlXCJcbiAgICAgICAgKHVwZGF0ZWREYXRlKT1cIm9uRGF0ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgID48L2M4eS1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICA8L2Zvcm0+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29uZmlnLmRhdGFwb2ludHMubGVuZ3RoID4gMFwiPlxuICAgIDxjOHktZGF0YXBvaW50cy1yZWxvYWRcbiAgICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgICBbaXNBdXRvUmVmcmVzaEVuYWJsZWRdPVwiY29uZmlnLmlzQXV0b1JlZnJlc2hFbmFibGVkXCJcbiAgICAgIFtyZWZyZXNoSW50ZXJ2YWxdPVwiY29uZmlnLnJlZnJlc2hJbnRlcnZhbFwiXG4gICAgICBbaXNEaXNhYmxlZF09XCJpc0Rpc2FibGVkXCJcbiAgICAgIFtpc0xvYWRpbmddPVwiaXNMb2FkaW5nXCJcbiAgICAgIFtpc1Njcm9sbGluZ109XCJpc1Njcm9sbGluZygpXCJcbiAgICAgIFtpc0V4cG9ydE1vZGFsT3Blbl09XCJpc0V4cG9ydE1vZGFsT3BlblwiXG4gICAgICAob25Db3VudGRvd25FbmRlZCk9XCJvbkNvdW50ZG93bkVuZGVkKClcIlxuICAgID48L2M4eS1kYXRhcG9pbnRzLXJlbG9hZD5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxjOHktZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3JcbiAgICBjbGFzcz1cImQtY29udGVudHNcIlxuICAgIFtleHBvcnRDb25maWddPVwiZXhwb3J0Q29uZmlnXCJcbiAgICAoaXNPcGVuKT1cIm9uRXhwb3J0TW9kYWxPcGVuKCRldmVudClcIlxuICA+PC9jOHktZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3I+XG48L2Rpdj5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJkZXZpY2VzQ29sdW1uSGVhZGVyc1wiPlxuICA8Yzh5LWRhdGFwb2ludHMtdGFibGVcbiAgICBbYWdncmVnYXRpb25UeXBlXT1cImNvbmZpZy5hZ2dyZWdhdGlvblwiXG4gICAgW2RhdGFwb2ludHNUYWJsZUl0ZW1zXT1cImRhdGFwb2ludHNUYWJsZUl0ZW1zXCJcbiAgICBbZGVjaW1hbFBsYWNlc109XCJjb25maWcuZGVjaW1hbFBsYWNlc1wiXG4gICAgW2RldmljZXNDb2x1bW5IZWFkZXJzXT1cImRldmljZXNDb2x1bW5IZWFkZXJzXCJcbiAgICBbaGFzTXVsdGlwbGVEYXRhcG9pbnRzXT1cImhhc011bHRpcGxlRGF0YXBvaW50c1wiXG4gICAgW2lzTG9hZGluZ109XCJpc0xvYWRpbmcoKVwiXG4gICAgW3Nlcmllc1dpdGhvdXRQZXJtaXNzaW9uVG9SZWFkQ291bnRdPVwic2VyaWVzV2l0aG91dFBlcm1pc3Npb25Ub1JlYWQ/Lmxlbmd0aFwiXG4gICAgKGlzU2Nyb2xsaW5nKT1cIm9uU2Nyb2xsaW5nKCRldmVudClcIlxuICA+PC9jOHktZGF0YXBvaW50cy10YWJsZT5cbjwvbmctY29udGFpbmVyPlxuIl19
328
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50cy10YWJsZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3dpZGdldHMvaW1wbGVtZW50YXRpb25zL2RhdGFwb2ludHMtdGFibGUvZGF0YXBvaW50cy10YWJsZS12aWV3L2RhdGFwb2ludHMtdGFibGUtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi93aWRnZXRzL2ltcGxlbWVudGF0aW9ucy9kYXRhcG9pbnRzLXRhYmxlL2RhdGFwb2ludHMtdGFibGUtdmlldy9kYXRhcG9pbnRzLXRhYmxlLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRS9FLE9BQU8sRUFDTCxZQUFZLEVBQ1osWUFBWSxFQUNaLG9CQUFvQixFQUNwQixxQkFBcUIsRUFFckIsOEJBQThCLEVBQzlCLE9BQU8sRUFDUCx3QkFBd0IsRUFDekIsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGlDQUFpQyxFQUlqQyxrQkFBa0IsRUFDbkIsTUFBTSxnREFBZ0QsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQWdCLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkYsT0FBTyxFQUNMLGtDQUFrQyxFQU1uQyxNQUFNLGtDQUFrQyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZC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Q3hCLG1CQUFtQjs7NEZBR1Ysa0NBQWtDO2tCQWQ5QyxTQUFTOytCQUNFLDJCQUEyQixRQUUvQixFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsY0FDbEIsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osaUNBQWlDO3dCQUNqQyx5QkFBeUI7d0JBQ3pCLHdCQUF3Qjt3QkFDeEIsd0JBQXdCO3dCQUN4QixtQkFBbUI7cUJBQ3BCO3VTQU1RLE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElTZXJpZXMgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBBbGVydFNlcnZpY2UsXG4gIENvbW1vbk1vZHVsZSxcbiAgRGlzbWlzc0FsZXJ0U3RyYXRlZ3ksXG4gIER5bmFtaWNDb21wb25lbnRBbGVydCxcbiAgRHluYW1pY0NvbXBvbmVudEFsZXJ0QWdncmVnYXRvcixcbiAgV2lkZ2V0R2xvYmFsQXV0b1JlZnJlc2hTZXJ2aWNlLFxuICBnZXR0ZXh0LFxuICBnbG9iYWxBdXRvUmVmcmVzaExvYWRpbmdcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBLUElEZXRhaWxzIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9kYXRhcG9pbnQtc2VsZWN0b3InO1xuaW1wb3J0IHtcbiAgRGF0YUZldGNoaW5nU2VydmljZSxcbiAgRGF0YXBvaW50c0V4cG9ydFNlbGVjdG9yQ29tcG9uZW50LFxuICBEYXRhcG9pbnRzVmFsdWVzRGF0YU1hcCxcbiAgRXhwb3J0Q29uZmlnLFxuICBTb3VyY2VJZCxcbiAgZGF0ZVJhbmdlVmFsaWRhdG9yXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3InO1xuaW1wb3J0IHsgSU5URVJWQUxfVkFMVUVTIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9pbnRlcnZhbC1waWNrZXInO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGRlYm91bmNlVGltZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBERUZBVUxUX0RQVF9SRUZSRVNIX0lOVEVSVkFMX1ZBTFVFLFxuICBEYXRhcG9pbnRUYWJsZUl0ZW0sXG4gIERhdGFwb2ludFdpdGhWYWx1ZXMsXG4gIERhdGFwb2ludHNUYWJsZUNvbmZpZyxcbiAgR3JvdXBlZERhdGFwb2ludFRhYmxlSXRlbSxcbiAgVGFibGVDb2x1bW5IZWFkZXJcbn0gZnJvbSAnLi4vZGF0YXBvaW50cy10YWJsZS13aWRnZXQubW9kZWwnO1xuaW1wb3J0IHsgRGF0YXBvaW50c1RhYmxlU2VydmljZSB9IGZyb20gJy4uL2RhdGFwb2ludHMtdGFibGUuc2VydmljZSc7XG5pbXBvcnQgeyBEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0YXBvaW50c1JlbG9hZENvbXBvbmVudCB9IGZyb20gJy4vZGF0YXBvaW50cy1yZWxvYWQvZGF0YXBvaW50cy1yZWxvYWQuY29tcG9uZW50JztcbmltcG9ydCB7IERhdGFwb2ludHNUYWJsZVZpZXdTZXJ2aWNlIH0gZnJvbSAnLi9kYXRhcG9pbnRzLXRhYmxlLXZpZXcuc2VydmljZSc7XG5pbXBvcnQgeyBEYXRhcG9pbnRzVGFibGVDb21wb25lbnQgfSBmcm9tICcuL2RhdGFwb2ludHMtdGFibGUvZGF0YXBvaW50cy10YWJsZS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZGF0YXBvaW50cy10YWJsZS12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGFwb2ludHMtdGFibGUtdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIGhvc3Q6IHsgY2xhc3M6ICdkLWNvbCBmaXQtaCcgfSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBEYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JDb21wb25lbnQsXG4gICAgRGF0YXBvaW50c1JlbG9hZENvbXBvbmVudCxcbiAgICBEYXRhcG9pbnRzVGFibGVDb21wb25lbnQsXG4gICAgRGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50LFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRhcG9pbnRzVGFibGVWaWV3V2lkZ2V0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogIERhdGEgcG9pbnRzIHRhYmxlIHdpZGdldCBjb25maWcuXG4gICAqL1xuICBASW5wdXQoKSBjb25maWc6IERhdGFwb2ludHNUYWJsZUNvbmZpZztcblxuICBhbGVydHM6IER5bmFtaWNDb21wb25lbnRBbGVydEFnZ3JlZ2F0b3I7XG5cbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgdGhlIGRhdGEgcG9pbnRzIHdoZXJlIF9fYWN0aXZlIHByb3BlcnR5IGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgYWN0aXZlRGF0YXBvaW50czogS1BJRGV0YWlsc1tdID0gW107XG4gIC8qKlxuICAgKiBSZXByZXNlbnRzIHRoZSBjdXN0b20gQ1NTIHN0eWxlIGZvciB0aGUgZXhwb3J0IHNlbGVjdG9yIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbnRhaW5lckNsYXNzOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiBvYmplY3RzIHJlcHJlc2VudGluZyBkYXRhcG9pbnRzIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4gICAqIFVzZWQgdG8gcG9wdWxhdGUgdGhlIENTVi9FeGNlbCBmaWxlIHdpdGggZGF0YS5cbiAgICovXG4gIGRhdGFwb2ludHNXaXRoVmFsdWVzOiBEYXRhcG9pbnRXaXRoVmFsdWVzW107XG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiBgR3JvdXBlZERhdGFwb2ludFRhYmxlSXRlbWAgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIGRhdGFwb2ludHMgdGFibGUgaXRlbXMuXG4gICAqIFVzZWQgdG8gcG9wdWxhdGUgdGhlIHRhYmxlIHdpdGggZGF0YS5cbiAgICovXG4gIGRhdGFwb2ludHNUYWJsZUl0ZW1zOiBHcm91cGVkRGF0YXBvaW50VGFibGVJdGVtW10gPSBbXTtcblxuICBkZXZpY2VzQ29sdW1uSGVhZGVyczogVGFibGVDb2x1bW5IZWFkZXJbXTtcbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgYSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdXNlZCBieSBhIGM4eS1kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci5cbiAgICovXG4gIGV4cG9ydENvbmZpZzogRXhwb3J0Q29uZmlnO1xuXG4gIGZvcm1Hcm91cDogUmV0dXJuVHlwZTxEYXRhcG9pbnRzVGFibGVWaWV3V2lkZ2V0Q29tcG9uZW50WydjcmVhdGVGb3JtJ10+O1xuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBkYXRhIHBvaW50LlxuICAgKiBJZiBpcyB0cnVlLCB0aGVuIGEgY29sdW1uICdEZXZpY2UnIHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSB0YWJsZS5cbiAgICovXG4gIGhhc011bHRpcGxlRGF0YXBvaW50czogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHJlZnJlc2hpbmcgc2hvdWxkIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuXG4gICAqIEl0J3MgJ3RydWUnIHdoZW4gdXNlciBpcyBub3QgYWxsb3dlZCB0byB2aWV3IGEgbWVhc3VyZW1lbnRzLlxuICAgKi9cbiAgaXNSZWZyZXNoRGlzYWJsZWQgPSBmYWxzZTtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb21wb25lbnQgaXMgaW4gdGhlIGluaXRpYWwgcmVxdWVzdCBzdGF0ZVxuICAgKiB3aGVyZSBkYXRhIGZvciBhIHRhYmxlIHN0cnVjdHVyZSBpcyBiZWluZyBwcmVwYXJlZC5cbiAgICovXG4gIGlzSW5pdGlhbFJlcXVlc3QgPSB0cnVlO1xuICAvKipcbiAgICogQ3VycmVudCBpc0xvYWRpbmcgc3RhdGUuIEluZGljYXRlcyB3aGV0aGVyIHRoZSBkYXRhIGlzIGJlaW5nIGxvYWRlZC5cbiAgICovXG4gIGlzTG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuXG4gIGlzRXhwb3J0TW9kYWxPcGVuID0gZmFsc2U7XG5cbiAgaXNTY3JvbGxpbmcgPSBzaWduYWwoZmFsc2UpO1xuXG4gIHNlcmllc1dpdGhvdXRQZXJtaXNzaW9uVG9SZWFkOiB7IGtleTogU291cmNlSWQ7IHZhbHVlOiBzdHJpbmdbXSB9W107XG5cbiAgcHJpdmF0ZSBUSU1FT1VUX0VSUk9SX1RFWFQgPSBnZXR0ZXh0KFxuICAgICdUaGUgcmVxdWVzdCBpcyB0YWtpbmcgbG9uZ2VyIHRoYW4gdXN1YWwuIFdlIGFwb2xvZ2l6ZSBmb3IgdGhlIGluY29udmVuaWVuY2UuJ1xuICApO1xuICBwcml2YXRlIFNFUlZFUl9FUlJPUl9URVhUID0gZ2V0dGV4dCgnU2VydmVyIGVycm9yIG9jY3VycmVkLicpO1xuXG4gIHByaXZhdGUgZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICBwcml2YXRlIHNjcm9sbGluZ1N1YmplY3QkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBpc0ZhaWxlZFRvRmV0Y2hTZXJpZXNEYXRhOiBib29sZWFuO1xuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBhbGVydCBoYXMgYWxyZWFkeSBiZWVuIGRpc3BsYXllZCBhbmQgY2FuIGJlIGRpc21pc3NlZC5cbiAgICogVGhlIG1lc3NhZ2UgaXMgb25seSBkaXNwbGF5ZWQgd2hlbiBhIGNvbXBvbmVudCBpcyBpbml0aWFsaXplZC5cbiAgICovXG4gIHByaXZhdGUgaXNNaXNzaW5nQW55UGVybWlzc2lvbkFsZXJ0U2hvd24gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGF0YUZldGNoaW5nU2VydmljZTogRGF0YUZldGNoaW5nU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGFwb2ludHNUYWJsZUNvbmZpZ1NlcnZpY2U6IERhdGFwb2ludHNUYWJsZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRhcG9pbnRzVGFibGVWaWV3U2VydmljZTogRGF0YXBvaW50c1RhYmxlVmlld1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgd2lkZ2V0R2xvYmFsQXV0b1JlZnJlc2g6IFdpZGdldEdsb2JhbEF1dG9SZWZyZXNoU2VydmljZVxuICApIHt9XG5cbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuY29uZmlnLndpZGdldEluc3RhbmNlR2xvYmFsQXV0b1JlZnJlc2hDb250ZXh0KSB7XG4gICAgICB0aGlzLmNvbnRhaW5lckNsYXNzID0gJ2EtaS1jZW50ZXIgaW5wdXQtZ3JvdXAgcC10LTQgcC1iLTQgbWF4LXdpZHRoLWZpdCBtLWwtYXV0byc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTGVnYWN5IHdpZGdldCB1c2VkIHJlYWx0aW1lIHNvIGl0IG11c3QgYmUgY29udmVydGVkIHRvIHJlZnJlc2ggYXBwcm9hY2hcbiAgICAgKiBpZiBpdCB3YXMgZW5hYmxlZCBiZWZvcmUgbWlncmF0aW9uLlxuICAgICAqL1xuICAgIGlmICh0aGlzLmNvbmZpZy53aWRnZXRJbnN0YW5jZUdsb2JhbFRpbWVDb250ZXh0KSB7XG4gICAgICB0aGlzLmNvbmZpZy53aWRnZXRJbnN0YW5jZUdsb2JhbEF1dG9SZWZyZXNoQ29udGV4dCA9IHRydWU7XG4gICAgICB0aGlzLmNvbmZpZy53aWRnZXRJbnN0YW5jZUdsb2JhbFRpbWVDb250ZXh0ID0gZmFsc2U7XG4gICAgICB0aGlzLmNvbmZpZy5kaXNwbGF5U2V0dGluZ3MuZ2xvYmFsQXV0b1JlZnJlc2hDb250ZXh0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcud2lkZ2V0SW5zdGFuY2VHbG9iYWxBdXRvUmVmcmVzaENvbnRleHQpIHtcbiAgICAgIHRoaXMuaGFuZGxlR2xvYmFsUmVmcmVzaExvYWRpbmcoKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFNjcm9sbGluZ1N1YnNjcmlwdGlvbigpO1xuXG4gICAgY29uc3QgaXNMZWdhY3lXaWRnZXRSZWFsdGltZUFjdGl2ZSA9XG4gICAgICB0aGlzLmNvbmZpZy5yZWFsdGltZSAmJlxuICAgICAgIXRoaXMuY29uZmlnLmhhc093blByb3BlcnR5KCdkZWNpbWFsUGxhY2VzJykgJiZcbiAgICAgICF0aGlzLmNvbmZpZy5oYXNPd25Qcm9wZXJ0eSgncmVmcmVzaEludGVydmFsJykgJiZcbiAgICAgICF0aGlzLmNvbmZpZy5oYXNPd25Qcm9wZXJ0eSgnaXNBdXRvUmVmcmVzaEVuYWJsZWQnKTtcblxuICAgIGlmIChpc0xlZ2FjeVdpZGdldFJlYWx0aW1lQWN0aXZlKSB7XG4gICAgICB0aGlzLnNldERlZmF1bHRSZWZyZXNoUmVsYXRlZFByb3BlcnRpZXMoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcuaW50ZXJ2YWwgIT09IElOVEVSVkFMX1ZBTFVFUy5jdXN0b20pIHtcbiAgICAgIHRoaXMucmVjYWxjdWxhdGVJbnRlcnZhbFRvTWF0Y2hGcm9tTm93RGF0ZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5kaXNwbGF5RGF0ZVNlbGVjdGlvbikge1xuICAgICAgdGhpcy5wcmVwYXJlRGF0ZVJhbmdlRm9ybSgpO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMucHJlcGFyZVRhYmxlRGF0YSgpO1xuXG4gICAgdGhpcy5leHBvcnRDb25maWcgPSB7XG4gICAgICBhZ2dyZWdhdGlvbjogdGhpcy5jb25maWcuYWdncmVnYXRpb24sXG4gICAgICBkYXRlRnJvbTogdGhpcy5jb25maWcuZGF0ZUZyb20sXG4gICAgICBkYXRlVG86IHRoaXMuY29uZmlnLmRhdGVUbyxcbiAgICAgIGRhdGFwb2ludERldGFpbHM6IHRoaXMuYWN0aXZlRGF0YXBvaW50cy5tYXAoKHsgX190YXJnZXQsIGZyYWdtZW50LCBzZXJpZXMgfSkgPT4gKHtcbiAgICAgICAgZGV2aWNlTmFtZTogX190YXJnZXQubmFtZSxcbiAgICAgICAgc291cmNlOiBfX3RhcmdldC5pZCxcbiAgICAgICAgdmFsdWVGcmFnbWVudFNlcmllczogc2VyaWVzLFxuICAgICAgICB2YWx1ZUZyYWdtZW50VHlwZTogZnJhZ21lbnRcbiAgICAgIH0pKVxuICAgIH07XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgb25EYXRlQ2hhbmdlKGRhdGE6IHsgZGF0ZUZyb20/OiBzdHJpbmcgfCBudWxsOyBkYXRlVG8/OiBzdHJpbmcgfCBudWxsIH0pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb3JtR3JvdXAuaW52YWxpZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkYXRhLmRhdGVGcm9tKSB7XG4gICAgICB0aGlzLmNvbmZpZy5kYXRlRnJvbSA9IGRhdGEuZGF0ZUZyb207XG4gICAgfVxuICAgIGlmIChkYXRhLmRhdGVUbykge1xuICAgICAgdGhpcy5jb25maWcuZGF0ZVRvID0gZGF0YS5kYXRlVG87XG4gICAgfVxuICAgIHRoaXMucHJlcGFyZVRhYmxlRGF0YSgpO1xuXG4gICAgdGhpcy51cGRhdGVFeHBvcnRDb25maWdEYXRlUmFuZ2UoKTtcbiAgfVxuXG4gIG9uRXhwb3J0TW9kYWxPcGVuKGlzT3BlbmVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pc0V4cG9ydE1vZGFsT3BlbiA9IGlzT3BlbmVkO1xuICB9XG5cbiAgb25TY3JvbGxpbmcodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnNjcm9sbGluZ1N1YmplY3QkLm5leHQodmFsdWUpO1xuICB9XG5cbiAgYXN5bmMgb25Db3VudGRvd25FbmRlZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBkYXRlUmFuZ2UgPSB0aGlzLmRhdGFwb2ludHNUYWJsZVZpZXdTZXJ2aWNlLnByZXBhcmVUaW1lUmFuZ2UoXG4gICAgICB0aGlzLmNvbmZpZy5pbnRlcnZhbCxcbiAgICAgIHRoaXMuY29uZmlnLmRhdGVGcm9tLFxuICAgICAgdGhpcy5jb25maWcuZGF0ZVRvXG4gICAgKTtcblxuICAgIHRoaXMuY29uZmlnLmRhdGVGcm9tID0gZGF0ZVJhbmdlLmRhdGVGcm9tO1xuICAgIHRoaXMuY29uZmlnLmRhdGVUbyA9IGRhdGVSYW5nZS5kYXRlVG87XG5cbiAgICB0aGlzLnVwZGF0ZUV4cG9ydENvbmZpZ0RhdGVSYW5nZSgpO1xuICAgIGF3YWl0IHRoaXMucHJlcGFyZVRhYmxlRGF0YShmYWxzZSk7XG5cbiAgICB0aGlzLm9uU2Nyb2xsaW5nKGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlR2xvYmFsVGltZUNvbnRleHRTZXR0aW5ncygpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZy5kYXRlRnJvbSA9IHRoaXMuZGF0YUZldGNoaW5nU2VydmljZS5hZGp1c3REYXRlKHRoaXMuY29uZmlnLmRhdGVbMF0sIDAsIGZhbHNlKTtcbiAgICB0aGlzLmNvbmZpZy5kYXRlVG8gPSB0aGlzLmRhdGFGZXRjaGluZ1NlcnZpY2UuYWRqdXN0RGF0ZSh0aGlzLmNvbmZpZy5kYXRlWzFdLCAwLCBmYWxzZSk7XG4gICAgaWYgKHRoaXMuY29uZmlnLnJlYWx0aW1lKSB7XG4gICAgICB0aGlzLnNldERlZmF1bHRSZWZyZXNoUmVsYXRlZFByb3BlcnRpZXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb25maWcuaXNBdXRvUmVmcmVzaEVuYWJsZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCB0aGUgc2Nyb2xsaW5nIHN1YnNjcmlwdGlvbi5cbiAgICpcbiAgICogRW5zdXJlcyBzaW1pbGFyIFVYIGFzIGluIHRoZSBhbGFybXMgY291bnRkb3duLXBhdXNlIGxvZ2ljLlxuICAgKi9cbiAgcHJpdmF0ZSBzZXRTY3JvbGxpbmdTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLnNjcm9sbGluZ1N1YmplY3QkXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMzAwKSlcbiAgICAgIC5zdWJzY3JpYmUodmFsdWUgPT4gdGhpcy5pc1Njcm9sbGluZy5zZXQodmFsdWUpKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0RGVmYXVsdFJlZnJlc2hSZWxhdGVkUHJvcGVydGllcygpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZy5pc0F1dG9SZWZyZXNoRW5hYmxlZCA9IHRydWU7XG4gICAgdGhpcy5jb25maWcucmVmcmVzaEludGVydmFsID0gREVGQVVMVF9EUFRfUkVGUkVTSF9JTlRFUlZBTF9WQUxVRTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjYWxjdWxhdGVJbnRlcnZhbFRvTWF0Y2hGcm9tTm93RGF0ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb25maWcud2lkZ2V0SW5zdGFuY2VHbG9iYWxBdXRvUmVmcmVzaENvbnRleHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IGRhdGVGcm9tLCBkYXRlVG8gfSA9IHRoaXMuZGF0YXBvaW50c1RhYmxlQ29uZmlnU2VydmljZS5jYWxjdWxhdGVEYXRlUmFuZ2UoXG4gICAgICB0aGlzLmNvbmZpZy5pbnRlcnZhbFxuICAgICk7XG4gICAgdGhpcy5jb25maWcuZGF0ZUZyb20gPSBkYXRlRnJvbTtcbiAgICB0aGlzLmNvbmZpZy5kYXRlVG8gPSBkYXRlVG87XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVEYXRlUmFuZ2VGb3JtKCkge1xuICAgIHRoaXMuZm9ybUdyb3VwID0gdGhpcy5jcmVhdGVGb3JtKCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZvcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoXG4gICAgICB7XG4gICAgICAgIGRhdGVGcm9tOiBuZXcgRm9ybUNvbnRyb2wodGhpcy5jb25maWcuZGF0ZUZyb20pLFxuICAgICAgICBkYXRlVG86IG5ldyBGb3JtQ29udHJvbCh0aGlzLmNvbmZpZy5kYXRlVG8pXG4gICAgICB9LFxuICAgICAgeyB2YWxpZGF0b3JzOiBkYXRlUmFuZ2VWYWxpZGF0b3IgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZXMgdGhlIHRhYmxlIGRhdGEgYnk6XG4gICAqIC0gZmlsdGVyaW5nIG91dCBpbmFjdGl2ZSBkYXRhIHBvaW50cyxcbiAgICogLSBjaGVja2luZyBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgZGV2aWNlcyBhcyBhIHNvdXJjZSBvZiBkYXRhIHBvaW50cyxcbiAgICogLSBnZXR0aW5nIHRoZSBjb2x1bW4gaGVhZGVycyBmb3IgZGV2aWNlcyxcbiAgICogLSBnZXR0aW5nIHRoZSBzZXJpZXMgZGF0YSBmb3IgYWN0aXZlIGRhdGEgcG9pbnRzIChBUEkgY2FsbCksXG4gICAqIC0gcHJlcGFyaW5nIGRhdGEgcG9pbnRzIHdpdGggdmFsdWVzIGxpc3QsXG4gICAqIC0gbWFwcGluZyBkYXRhIHBvaW50cyB3aXRoIHZhbHVlcyB0byBsaXN0IGl0ZW1zLFxuICAgKiAtIGdyb3VwaW5nIGRhdGEgcG9pbnRzIGJ5IGRhdGUgYW5kIGRldmljZSxcbiAgICogLSBzb3J0aW5nIGRhdGEgYnkgZGF0ZSBkZXNjZW5kaW5nLlxuICAgKlxuICAgKiBAcGFyYW0gcm91bmRTZWNvbmRzIC0gV2hldGhlciB0byByb3VuZCB0aGUgc2Vjb25kcyBvciBub3QuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBJZiB0cnVlLCB0aGUgc2Vjb25kcyB3aWxsIGJlIHJvdW5kZWQgdG8gMC5cbiAgICogICAgICAgICAgICAgICAgICAgICAgIElmIGZhbHNlLCB0aGUgc2Vjb25kcyB3aWxsIGJlIGRpc3BsYXllZCBhcyB0aGV5IGFyZS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZVRhYmxlRGF0YShyb3VuZFNlY29uZHMgPSB0cnVlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5pc0xvYWRpbmckLm5leHQodHJ1ZSk7XG5cbiAgICBpZiAodGhpcy5pc0luaXRpYWxSZXF1ZXN0KSB7XG4gICAgICB0aGlzLmFjdGl2ZURhdGFwb2ludHMgPSB0aGlzLmRhdGFwb2ludHNUYWJsZVZpZXdTZXJ2aWNlLmZpbHRlck91dEluYWN0aXZlRGF0YXBvaW50cyhcbiAgICAgICAgdGhpcy5jb25maWcuZGF0YXBvaW50c1xuICAgICAgKTtcblxuICAgICAgdGhpcy5oYXNNdWx0aXBsZURhdGFwb2ludHMgPSB0aGlzLmRhdGFwb2ludHNUYWJsZVZpZXdTZXJ2aWNlLmhhc011bHRpcGxlRGF0YXBvaW50cyhcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRhcG9pbnRzXG4gICAgICApO1xuXG4gICAgICB0aGlzLmRldmljZXNDb2x1bW5IZWFkZXJzID0gdGhpcy5kYXRhcG9pbnRzVGFibGVWaWV3U2VydmljZS5nZXRDb2x1bW5IZWFkZXJzKFxuICAgICAgICB0aGlzLmFjdGl2ZURhdGFwb2ludHNcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuaXNJbml0aWFsUmVxdWVzdCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGFjdGl2ZURhdGFwb2ludHNJZHNXaXRoU2VyaWVzOiBEYXRhcG9pbnRzVmFsdWVzRGF0YU1hcCA9XG4gICAgICB0aGlzLmRhdGFwb2ludHNUYWJsZVZpZXdTZXJ2aWNlLmdyb3VwU2VyaWVzQnlEZXZpY2VJZCh0aGlzLmFjdGl2ZURhdGFwb2ludHMpO1xuXG4gICAgY29uc3QgYWN0aXZlRGF0YXBvaW50c1Nlcmllc0RhdGE6IE1hcDxzdHJpbmcgfCBudW1iZXIsIElTZXJpZXM+ID1cbiAgICAgIGF3YWl0IHRoaXMuZ2V0QWN0aXZlRGF0YXBvaW50c1Nlcmllc0RhdGFNYXAoXG4gICAgICAgIGFjdGl2ZURhdGFwb2ludHNJZHNXaXRoU2VyaWVzLFxuICAgICAgICB0aGlzLmNvbmZpZyxcbiAgICAgICAgcm91bmRTZWNvbmRzXG4gICAgICApO1xuXG4gICAgaWYgKHRoaXMuaXNGYWlsZWRUb0ZldGNoU2VyaWVzRGF0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VyaWVzV2l0aG91dFBlcm1pc3Npb25Ub1JlYWQgPVxuICAgICAgdGhpcy5kYXRhcG9pbnRzVGFibGVWaWV3U2VydmljZS5nZXRTZXJpZXNXaXRob3V0UGVybWlzc2lvblRvUmVhZChcbiAgICAgICAgYWN0aXZlRGF0YXBvaW50c1Nlcmllc0RhdGEsXG4gICAgICAgIGFjdGl2ZURhdGFwb2ludHNJZHNXaXRoU2VyaWVzXG4gICAgICApO1xuXG4gICAgaWYgKFxuICAgICAgIXRoaXMuaXNNaXNzaW5nQW55UGVybWlzc2lvbkFsZXJ0U2hvd24gJiZcbiAgICAgIHRoaXMuc2VyaWVzV2l0aG91dFBlcm1pc3Npb25Ub1JlYWQ/Lmxlbmd0aCA+IDAgJiZcbiAgICAgIGFjdGl2ZURhdGFwb2ludHNTZXJpZXNEYXRhPy5zaXplXG4gICAgKSB7XG4gICAgICB0aGlzLmhhbmRsZU1pc3NpbmdBbnlQZXJtaXNzaW9uRXJyb3JNZXNzYWdlKCk7XG4gICAgICB0aGlzLmlzTWlzc2luZ0FueVBlcm1pc3Npb25BbGVydFNob3duID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIWFjdGl2ZURhdGFwb2ludHNTZXJpZXNEYXRhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhcG9pbnRzV2l0aFZhbHVlcyA9IHRoaXMuZGF0YXBvaW50c1RhYmxlVmlld1NlcnZpY2UuZ2V0RGF0YXBvaW50c1dpdGhWYWx1ZXMoXG4gICAgICB0aGlzLmFjdGl2ZURhdGFwb2ludHMsXG4gICAgICBhY3RpdmVEYXRhcG9pbnRzU2VyaWVzRGF0YVxuICAgICk7XG5cbiAgICBjb25zdCBkYXRhcG9pbnRzTGlzdEl0ZW1zOiBEYXRhcG9pbnRUYWJsZUl0ZW1bXSA9XG4gICAgICB0aGlzLmRhdGFwb2ludHNUYWJsZVZpZXdTZXJ2aWNlLm1hcERhdGFwb2ludHNXaXRoVmFsdWVzVG9MaXN0KHRoaXMuZGF0YXBvaW50c1dpdGhWYWx1ZXMpO1xuXG4gICAgY29uc3QgZ3JvdXBlZERhdGFwb2ludHNMaXN0SXRlbXM6IEdyb3VwZWREYXRhcG9pbnRUYWJsZUl0ZW1bXSA9XG4gICAgICB0aGlzLmRhdGFwb2ludHNUYWJsZVZpZXdTZXJ2aWNlLmdyb3VwQnlEYXRlQW5kRGV2aWNlKFxuICAgICAgICBkYXRhcG9pbnRzTGlzdEl0ZW1zLFxuICAgICAgICB0aGlzLmRldmljZXNDb2x1bW5IZWFkZXJzXG4gICAgICApO1xuXG4gICAgdGhpcy5kYXRhcG9pbnRzVGFibGVJdGVtcyA9IHRoaXMuZGF0YXBvaW50c1RhYmxlVmlld1NlcnZpY2Uuc29ydERhdGFCeURhdGVEZXNjZW5kaW5nKFxuICAgICAgZ3JvdXBlZERhdGFwb2ludHNMaXN0SXRlbXNcbiAgICApO1xuXG4gICAgdGhpcy5pc0xvYWRpbmckLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgYWN0aXZlIGRhdGEgcG9pbnRzIHNlcmllcyBkYXRhIGFuZCByZXR1cm5zIGl0IGFzIGEgbWFwLlxuICAgKlxuICAgKiBJdCdzIGEgd3JhcHBlciBtZXRob2Qgd2l0aCB0cnktY2F0Y2ggYmxvY2suXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhcG9pbnRzSWRzV2l0aFNlcmllcyAtIEEgbWFwIG9mIGRhdGEgcG9pbnQgSURzIHdpdGggdGhlaXIgYXNzb2NpYXRlZCBzZXJpZXMuXG4gICAqIEBwYXJhbSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBvZiB0aGUgZGF0YSBwb2ludHMgdGFibGUuXG4gICAqIEBwYXJhbSByb3VuZFNlY29uZHMgLSBXaGV0aGVyIHRvIHJvdW5kIHRoZSBzZWNvbmRzIG9yIG5vdC5cbiAgICogICAgICAgICAgICAgICAgICAgICAgIElmIHRydWUsIHRoZSBzZWNvbmRzIHdpbGwgYmUgcm91bmRlZCB0byAwLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgSWYgZmFsc2UsIHRoZSBzZWNvbmRzIHdpbGwgYmUgZGlzcGxheWVkIGFzIHRoZXkgYXJlLlxuICAgKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIE1hcCBvYmplY3Qgd2l0aCBkYXRhIHBvaW50IElEcyBhcyBrZXlzIGFuZCBEYXRhT2JqZWN0IGFzIHZhbHVlcy5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZ2V0QWN0aXZlRGF0YXBvaW50c1Nlcmllc0RhdGFNYXAoXG4gICAgZGF0YXBvaW50c0lkc1dpdGhTZXJpZXM6IERhdGFwb2ludHNWYWx1ZXNEYXRhTWFwLFxuICAgIGNvbmZpZzogRGF0YXBvaW50c1RhYmxlQ29uZmlnLFxuICAgIHJvdW5kU2Vjb25kczogYm9vbGVhblxuICApOiBQcm9taXNlPE1hcDxzdHJpbmcgfCBudW1iZXIsIElTZXJpZXM+PiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuaXNGYWlsZWRUb0ZldGNoU2VyaWVzRGF0YSA9IGZhbHNlO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZGF0YXBvaW50c1RhYmxlVmlld1NlcnZpY2UuZ2V0QWxsQWN0aXZlU2VyaWVzRGF0YU1hcChcbiAgICAgICAgZGF0YXBvaW50c0lkc1dpdGhTZXJpZXMsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcm91bmRTZWNvbmRzXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICB0aGlzLmhhbmRsZUZldGNoRXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRmV0Y2hFcnJvcihlcnJvcjogRXJyb3IpOiB2b2lkIHtcbiAgICBpZiAoZXJyb3I/Lm1lc3NhZ2UuaW5jbHVkZXMoJzQwMycpKSB7XG4gICAgICB0aGlzLmFsZXJ0cy5zZXRBbGVydEdyb3VwRGlzbWlzc1N0cmF0ZWd5KCd3YXJuaW5nJywgRGlzbWlzc0FsZXJ0U3RyYXRlZ3kuTk9ORSk7XG4gICAgICB0aGlzLmlzUmVmcmVzaERpc2FibGVkID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpc1RpbWVvdXRFcnJvciA9IGVycm9yPy5uYW1lID09PSAnVGltZW91dEVycm9yJztcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBpc1RpbWVvdXRFcnJvclxuICAgICAgPyB0aGlzLlRJTUVPVVRfRVJST1JfVEVYVFxuICAgICAgOiBlcnJvcj8ubWVzc2FnZSA/PyB0aGlzLlNFUlZFUl9FUlJPUl9URVhUO1xuXG4gICAgdGhpcy5hbGVydHMuc2V0QWxlcnRHcm91cERpc21pc3NTdHJhdGVneShcbiAgICAgICd3YXJuaW5nJyxcbiAgICAgIERpc21pc3NBbGVydFN0cmF0ZWd5LlRFTVBPUkFSWV9PUl9QRVJNQU5FTlRcbiAgICApO1xuXG4gICAgdGhpcy5hbGVydHMuYWRkQWxlcnRzKFxuICAgICAgbmV3IER5bmFtaWNDb21wb25lbnRBbGVydCh7XG4gICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAgICAgdGV4dDogZXJyb3JNZXNzYWdlXG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmlzRmFpbGVkVG9GZXRjaFNlcmllc0RhdGEgPSB0cnVlO1xuICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXJyb3IpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVNaXNzaW5nQW55UGVybWlzc2lvbkVycm9yTWVzc2FnZSgpIHtcbiAgICB0aGlzLmFsZXJ0cy5zZXRBbGVydEdyb3VwRGlzbWlzc1N0cmF0ZWd5KCdzeXN0ZW0nLCBEaXNtaXNzQWxlcnRTdHJhdGVneS5URU1QT1JBUlkpO1xuXG4gICAgdGhpcy5hbGVydHMuYWRkQWxlcnRzKFxuICAgICAgbmV3IER5bmFtaWNDb21wb25lbnRBbGVydCh7XG4gICAgICAgIGFsbG93SHRtbDogdHJ1ZSxcbiAgICAgICAgdGV4dDogdGhpcy5nZXRNaXNzaW5nUGVybWlzc2lvbnNNZXNzYWdlKCksXG4gICAgICAgIHR5cGU6ICdzeXN0ZW0nXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldE1pc3NpbmdQZXJtaXNzaW9uc01lc3NhZ2UoKTogc3RyaW5nIHtcbiAgICBjb25zdCBiYXNlTWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgZ2V0dGV4dChgWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbnMgdG8gcmVhZCB0aGUgZm9sbG93aW5nIHNlcmllczpgKVxuICAgICk7XG5cbiAgICBjb25zdCBmb3JtYXR0ZWRMaXN0ID0gdGhpcy5zZXJpZXNXaXRob3V0UGVybWlzc2lvblRvUmVhZFxuICAgICAgLm1hcChkYXRhcG9pbnQgPT4gYDxsaT4ke2RhdGFwb2ludC5rZXkudmFsdWVPZigpfV8ke2RhdGFwb2ludC52YWx1ZX08L2xpPmApXG4gICAgICAuam9pbignJyk7XG5cbiAgICByZXR1cm4gYFxuICAgICAgPGRpdj5cbiAgICAgICAgPHA+JHtiYXNlTWVzc2FnZX08L3A+XG4gICAgICAgIDx1bD5cbiAgICAgICAgICAke2Zvcm1hdHRlZExpc3R9XG4gICAgICAgIDwvdWw+XG4gICAgICAgIDxwPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gVGhlIG5hbWUgY29udmVudGlvbiBmb3IgZWFjaCBsaXN0IGl0ZW0gaXM6IDxjb2RlPltzb3VyY2VdX1tmcmFnbWVudC5zZXJpZXNdPC9jb2RlPjwvcD5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUV4cG9ydENvbmZpZ0RhdGVSYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZy5kYXRlVG8gPSB0aGlzLmFkanVzdFRhcmdldERhdGVCYXNlZE9uQ29uZGl0aW9uVGltZShcbiAgICAgIHRoaXMuY29uZmlnLmRhdGVGcm9tLFxuICAgICAgdGhpcy5jb25maWcuZGF0ZVRvXG4gICAgKTtcblxuICAgIHRoaXMuY29uZmlnLmRhdGVGcm9tID0gdGhpcy5hZGp1c3RUYXJnZXREYXRlQmFzZWRPbkNvbmRpdGlvblRpbWUoXG4gICAgICB0aGlzLmNvbmZpZy5kYXRlVG8sXG4gICAgICB0aGlzLmNvbmZpZy5kYXRlRnJvbVxuICAgICk7XG5cbiAgICB0aGlzLnN5bmNFeHBvcnRDb25maWdEYXRlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGp1c3RUYXJnZXREYXRlQmFzZWRPbkNvbmRpdGlvblRpbWUoY29uZGl0aW9uRGF0ZTogc3RyaW5nLCB0YXJnZXREYXRlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmRhdGFwb2ludHNUYWJsZVZpZXdTZXJ2aWNlLmhhc1NlY29uZHNBbmRNaWxsaXNlY29uZHNFcXVhbFplcm8oY29uZGl0aW9uRGF0ZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFGZXRjaGluZ1NlcnZpY2UuYWRqdXN0RGF0ZSh0YXJnZXREYXRlLCAwLCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldERhdGU7XG4gIH1cblxuICBwcml2YXRlIHN5bmNFeHBvcnRDb25maWdEYXRlcygpOiB2b2lkIHtcbiAgICB0aGlzLmV4cG9ydENvbmZpZy5kYXRlRnJvbSA9IHRoaXMuY29uZmlnLmRhdGVGcm9tO1xuICAgIHRoaXMuZXhwb3J0Q29uZmlnLmRhdGVUbyA9IHRoaXMuY29uZmlnLmRhdGVUbztcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlR2xvYmFsUmVmcmVzaExvYWRpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5pc0xvYWRpbmckXG4gICAgICAucGlwZShnbG9iYWxBdXRvUmVmcmVzaExvYWRpbmcodGhpcy53aWRnZXRHbG9iYWxBdXRvUmVmcmVzaCksIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMTYgcC1sLTE2IHAtci0xNiBmbGV4LXdyYXBcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbmZpZy5kaXNwbGF5RGF0ZVNlbGVjdGlvblwiPlxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XG4gICAgICA8Yzh5LWRhdGUtcmFuZ2UtcGlja2VyXG4gICAgICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgICAgIFtpc0VtaXR0aW5nRGF0ZUNoYW5nZV09XCJ0cnVlXCJcbiAgICAgICAgW3Nob3dMYWJlbF09XCJ0cnVlXCJcbiAgICAgICAgKHVwZGF0ZWREYXRlKT1cIm9uRGF0ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgID48L2M4eS1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICA8L2Zvcm0+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29uZmlnLmRhdGFwb2ludHMubGVuZ3RoID4gMFwiPlxuICAgIDxjOHktZGF0YXBvaW50cy1yZWxvYWRcbiAgICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgICBbaXNBdXRvUmVmcmVzaEVuYWJsZWRdPVwiY29uZmlnLmlzQXV0b1JlZnJlc2hFbmFibGVkXCJcbiAgICAgIFtyZWZyZXNoSW50ZXJ2YWxdPVwiY29uZmlnLnJlZnJlc2hJbnRlcnZhbFwiXG4gICAgICBbaXNSZWZyZXNoRGlzYWJsZWRdPVwiaXNSZWZyZXNoRGlzYWJsZWRcIlxuICAgICAgW2lzTG9hZGluZ109XCJpc0xvYWRpbmckXCJcbiAgICAgIFtpc1Njcm9sbGluZ109XCJpc1Njcm9sbGluZygpXCJcbiAgICAgIFtpc0V4cG9ydE1vZGFsT3Blbl09XCJpc0V4cG9ydE1vZGFsT3BlblwiXG4gICAgICBbd2lkZ2V0SW5zdGFuY2VHbG9iYWxBdXRvUmVmcmVzaENvbnRleHRdPVwiY29uZmlnLndpZGdldEluc3RhbmNlR2xvYmFsQXV0b1JlZnJlc2hDb250ZXh0XCJcbiAgICAgIChvbkNvdW50ZG93bkVuZGVkKT1cIm9uQ291bnRkb3duRW5kZWQoKVwiXG4gICAgPjwvYzh5LWRhdGFwb2ludHMtcmVsb2FkPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPGM4eS1kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3RvclxuICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgW2V4cG9ydENvbmZpZ109XCJleHBvcnRDb25maWdcIlxuICAgIChpc09wZW4pPVwib25FeHBvcnRNb2RhbE9wZW4oJGV2ZW50KVwiXG4gID48L2M4eS1kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvcj5cbjwvZGl2PlxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImRldmljZXNDb2x1bW5IZWFkZXJzXCI+XG4gIDxjOHktZGF0YXBvaW50cy10YWJsZVxuICAgIFthZ2dyZWdhdGlvblR5cGVdPVwiY29uZmlnLmFnZ3JlZ2F0aW9uXCJcbiAgICBbZGF0YXBvaW50c1RhYmxlSXRlbXNdPVwiZGF0YXBvaW50c1RhYmxlSXRlbXNcIlxuICAgIFtkZWNpbWFsUGxhY2VzXT1cImNvbmZpZy5kZWNpbWFsUGxhY2VzXCJcbiAgICBbZGV2aWNlc0NvbHVtbkhlYWRlcnNdPVwiZGV2aWNlc0NvbHVtbkhlYWRlcnNcIlxuICAgIFtoYXNNdWx0aXBsZURhdGFwb2ludHNdPVwiaGFzTXVsdGlwbGVEYXRhcG9pbnRzXCJcbiAgICBbaXNMb2FkaW5nXT1cImlzTG9hZGluZyQgfCBhc3luY1wiXG4gICAgW3Nlcmllc1dpdGhvdXRQZXJtaXNzaW9uVG9SZWFkQ291bnRdPVwic2VyaWVzV2l0aG91dFBlcm1pc3Npb25Ub1JlYWQ/Lmxlbmd0aFwiXG4gICAgKGlzU2Nyb2xsaW5nKT1cIm9uU2Nyb2xsaW5nKCRldmVudClcIlxuICA+PC9jOHktZGF0YXBvaW50cy10YWJsZT5cbjwvbmctY29udGFpbmVyPlxuIl19
@@ -2,14 +2,12 @@ import { gettext } from '@c8y/ngx-components';
2
2
  import { INTERVAL_VALUES } from '@c8y/ngx-components/interval-picker';
3
3
  export const DEFAULT_DPT_REFRESH_INTERVAL_VALUE = 30_000;
4
4
  export const DATE_SELECTION_VALUES = {
5
- // Will be uncommented in MTM-61920
6
- // dashboard_context: 'dashboard_context',
5
+ dashboard_context: 'dashboard_context',
7
6
  config: 'config',
8
7
  view_and_config: 'view_and_config'
9
8
  };
10
9
  export const DATE_SELECTION_VALUES_ARR = [
11
- // Will be uncommented in MTM-61920
12
- // DATE_SELECTION_VALUES.dashboard_context,
10
+ DATE_SELECTION_VALUES.dashboard_context,
13
11
  DATE_SELECTION_VALUES.config,
14
12
  DATE_SELECTION_VALUES.view_and_config
15
13
  ];
@@ -73,4 +71,4 @@ export const DURATION_OPTIONS = [
73
71
  },
74
72
  { id: INTERVAL_VALUES.custom, label: TIME_RANGE_INTERVAL_LABELS.custom }
75
73
  ];
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50cy10YWJsZS13aWRnZXQubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi93aWRnZXRzL2ltcGxlbWVudGF0aW9ucy9kYXRhcG9pbnRzLXRhYmxlL2RhdGFwb2ludHMtdGFibGUtd2lkZ2V0Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBcUIsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHakUsT0FBTyxFQUFZLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRWhGLE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFHLE1BQU0sQ0FBQztBQWtDekQsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUc7SUFDbkMsbUNBQW1DO0lBQ25DLDBDQUEwQztJQUMxQyxNQUFNLEVBQUUsUUFBUTtJQUNoQixlQUFlLEVBQUUsaUJBQWlCO0NBQzFCLENBQUM7QUFFWCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRztJQUN2QyxtQ0FBbUM7SUFDbkMsMkNBQTJDO0lBQzNDLHFCQUFxQixDQUFDLE1BQU07SUFDNUIscUJBQXFCLENBQUMsZUFBZTtDQUM3QixDQUFDO0FBRVgsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUc7SUFDbkMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBMkI7SUFDakUsZUFBZSxFQUFFLE9BQU8sQ0FBQyxpQ0FBaUMsQ0FBc0M7SUFDaEcsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLHNCQUFzQixDQUEyQjtDQUNwRSxDQUFDO0FBRVgsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFFbkYsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUc7SUFDakMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQWM7SUFDcEMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQWM7SUFDcEMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQVc7Q0FDdkIsQ0FBQztBQUVYLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHO0lBQ2pDLGVBQWUsQ0FBQyxPQUFPO0lBQ3ZCLGVBQWUsQ0FBQyxLQUFLO0lBQ3JCLGVBQWUsQ0FBQyxJQUFJO0lBQ3BCLGVBQWUsQ0FBQyxLQUFLO0lBQ3JCLGVBQWUsQ0FBQyxNQUFNO0lBQ3RCLGVBQWUsQ0FBQyxNQUFNO0NBQ2QsQ0FBQztBQUVYLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHO0lBQ3hDLE9BQU8sRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFrQjtJQUNoRCxLQUFLLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBZ0I7SUFDMUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQWU7SUFDdkMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQWdCO0lBQzFDLE1BQU0sRUFBRSxPQUFPLENBQUMsWUFBWSxDQUFpQjtJQUM3QyxNQUFNLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBYTtDQUM3QixDQUFDO0FBRVgsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUc7SUFDOUI7UUFDRSxFQUFFLEVBQUUsZUFBZSxDQUFDLE9BQU87UUFDM0IsS0FBSyxFQUFFLDBCQUEwQixDQUFDLE9BQU87UUFDekMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxPQUFPO1FBQzdCLE1BQU0sRUFBRSxDQUFDO0tBQ1Y7SUFDRDtRQUNFLEVBQUUsRUFBRSxlQUFlLENBQUMsS0FBSztRQUN6QixLQUFLLEVBQUUsMEJBQTBCLENBQUMsS0FBSztRQUN2QyxJQUFJLEVBQUUsZUFBZSxDQUFDLEtBQUs7UUFDM0IsTUFBTSxFQUFFLENBQUM7S0FDVjtJQUNEO1FBQ0UsRUFBRSxFQUFFLGVBQWUsQ0FBQyxJQUFJO1FBQ3hCLEtBQUssRUFBRSwwQkFBMEIsQ0FBQyxJQUFJO1FBQ3RDLElBQUksRUFBRSxlQUFlLENBQUMsSUFBSTtRQUMxQixNQUFNLEVBQUUsQ0FBQztLQUNWO0lBQ0Q7UUFDRSxFQUFFLEVBQUUsZUFBZSxDQUFDLEtBQUs7UUFDekIsS0FBSyxFQUFFLDBCQUEwQixDQUFDLEtBQUs7UUFDdkMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxLQUFLO1FBQzNCLE1BQU0sRUFBRSxDQUFDO0tBQ1Y7SUFDRDtRQUNFLEVBQUUsRUFBRSxlQUFlLENBQUMsTUFBTTtRQUMxQixLQUFLLEVBQUUsMEJBQTBCLENBQUMsTUFBTTtRQUN4QyxJQUFJLEVBQUUsZUFBZSxDQUFDLE1BQU07UUFDNUIsTUFBTSxFQUFFLENBQUM7S0FDVjtJQUNELEVBQUUsRUFBRSxFQUFFLGVBQWUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLDBCQUEwQixDQUFDLE1BQU0sRUFBRTtDQUN6RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUZldGNoUmVzcG9uc2UsIElTZXJpZXMgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvbk9wdGlvbiwgZ2V0dGV4dCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgS1BJRGV0YWlscyB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZGF0YXBvaW50LXNlbGVjdG9yJztcbmltcG9ydCB7IE1pbk1heFZhbHVlcywgU291cmNlSWQsIFRpbWVTdGFtcCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3InO1xuaW1wb3J0IHsgSW50ZXJ2YWwsIElOVEVSVkFMX1ZBTFVFUyB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvaW50ZXJ2YWwtcGlja2VyJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfRFBUX1JFRlJFU0hfSU5URVJWQUxfVkFMVUUgPSAzMF8wMDA7XG5cbmV4cG9ydCB0eXBlIERhdGFwb2ludFRhYmxlTWFwS2V5ID0gYCR7VGltZVN0YW1wfV8ke0RldmljZU5hbWV9YDtcbi8qKlxuICogUmVwcmVzZW50cyBhIG1hcHBpbmcgd2hlcmUgdGhlIGtleSBpcyBhIGRhdGFwb2ludCBpZGVudGlmaWVyIGNvbnRhaW5pbmcgdGhlIGRhdGUgYW5kIGRldmljZSBuYW1lLCBhbmQgdGhlIHZhbHVlIGlzIGFuIGFycmF5IG9mIGRhdGEgcG9pbnQgdGFibGUgaXRlbXMgb3IgbnVsbC5cbiAqL1xuZXhwb3J0IHR5cGUgRGF0YVBvaW50c1RhYmxlTWFwID0gTWFwPERhdGFwb2ludFRhYmxlTWFwS2V5LCAoRGF0YXBvaW50VGFibGVJdGVtIHwgbnVsbClbXT47XG5cbnR5cGUgRGV2aWNlTmFtZSA9IHN0cmluZztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgbWFwIG9mIGRhdGFwb2ludHMgc2VyaWVzIGRhdGEuXG4gKiBUaGUga2V5IG9mIHRoZSBtYXAgaXMgYSBzb3VyY2UsIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRhdGEgZm9yIHJlcXVlc3RlZCBzZXJpZXMuXG4gKi9cbmV4cG9ydCB0eXBlIERhdGFwb2ludHNTZXJpZXNEYXRhTWFwID0gTWFwPFNvdXJjZUlkLCBJU2VyaWVzPjtcbi8qKlxuICogRGV0ZXJtaW5lcyB3aGljaCB2YWx1ZXMgd2lsbCBiZSBkaXNwbGF5ZWQgYXMgdmFsdWVzIGZvciBkYXRhcG9pbnRzLlxuICogZS5nLiBpZiB1c2VyIGNob3NlICdtaW4nLCBvbmx5IHRoZSBtaW5pbXVtIHZhbHVlcyB3aWxsIGJlIGRpc3BsYXllZC5cbiAqL1xuZXhwb3J0IHR5cGUgUmVuZGVyVHlwZSA9IGtleW9mIHR5cGVvZiBSRU5ERVJfVFlQRVNfTEFCRUxTO1xuLyoqXG4gKiBSZXByZXNlbnRzIGFuIG9iamVjdCB3aGVyZSBrZXkgaXMgYSB0aW1lc3RhbXAgYW5kIHZhbHVlIGlzIGFuIGFycmF5XG4gKiB3aGVyZSBmaXJzdCByZWNvcmQgY29udGFpbnMgbWluIGFuZCBtYXggdmFsdWVzIGZvciBhIGNvcnJlc3BvbmRpbmcgdGltZXN0YW1wLlxuICovXG5leHBvcnQgdHlwZSBNZWFzdXJlbWVudFJhbmdlcyA9IHtcbiAgW2tleTogVGltZVN0YW1wXTogQXJyYXk8TWluTWF4VmFsdWVzPjtcbn07XG4vKipcbiAqIFJlcHJlc2VudHMgYSB2YWx1ZSBvYmplY3Qgd2hlcmUga2V5IGlzIGFuIG9iamVjdCB3aXRoIG1pbiBhbmQgbWF4IHByb3BlcnRpZXMgd2l0aCBpdHMgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4gKi9cbmV4cG9ydCB0eXBlIFZhbHVlID0ge1xuICBba2V5IGluIGtleW9mIE1pbk1heFZhbHVlc106IG51bWJlcjtcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFX1NFTEVDVElPTl9WQUxVRVMgPSB7XG4gIC8vIFdpbGwgYmUgdW5jb21tZW50ZWQgaW4gTVRNLTYxOTIwXG4gIC8vIGRhc2hib2FyZF9jb250ZXh0OiAnZGFzaGJvYXJkX2NvbnRleHQnLFxuICBjb25maWc6ICdjb25maWcnLFxuICB2aWV3X2FuZF9jb25maWc6ICd2aWV3X2FuZF9jb25maWcnXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgREFURV9TRUxFQ1RJT05fVkFMVUVTX0FSUiA9IFtcbiAgLy8gV2lsbCBiZSB1bmNvbW1lbnRlZCBpbiBNVE0tNjE5MjBcbiAgLy8gREFURV9TRUxFQ1RJT05fVkFMVUVTLmRhc2hib2FyZF9jb250ZXh0LFxuICBEQVRFX1NFTEVDVElPTl9WQUxVRVMuY29uZmlnLFxuICBEQVRFX1NFTEVDVElPTl9WQUxVRVMudmlld19hbmRfY29uZmlnXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgREFURV9TRUxFQ1RJT05fTEFCRUxTID0ge1xuICBjb25maWc6IGdldHRleHQoJ1dpZGdldCBjb25maWd1cmF0aW9uJykgYXMgJ1dpZGdldCBjb25maWd1cmF0aW9uJyxcbiAgdmlld19hbmRfY29uZmlnOiBnZXR0ZXh0KCdXaWRnZXQgYW5kIHdpZGdldCBjb25maWd1cmF0aW9uJykgYXMgJ1dpZGdldCBhbmQgd2lkZ2V0IGNvbmZpZ3VyYXRpb24nLFxuICBkYXNoYm9hcmRfY29udGV4dDogZ2V0dGV4dCgnRGFzaGJvYXJkIHRpbWUgcmFuZ2UnKSBhcyAnRGFzaGJvYXJkIHRpbWUgcmFuZ2UnXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgUkVGUkVTSF9JTlRFUlZBTF9WQUxVRVNfQVJSID0gWzVfMDAwLCAxMF8wMDAsIDE1XzAwMCwgMzBfMDAwLCA2MF8wMDBdO1xuXG5leHBvcnQgY29uc3QgUkVOREVSX1RZUEVTX0xBQkVMUyA9IHtcbiAgbWluOiBnZXR0ZXh0KCdNaW5pbXVtJykgYXMgJ01pbmltdW0nLFxuICBtYXg6IGdldHRleHQoJ01heGltdW0nKSBhcyAnTWF4aW11bScsXG4gIGFyZWE6IGdldHRleHQoJ0FyZWEnKSBhcyAnQXJlYSdcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBJTlRFUlZBTF9WQUxVRVNfQVJSID0gW1xuICBJTlRFUlZBTF9WQUxVRVMubWludXRlcyxcbiAgSU5URVJWQUxfVkFMVUVTLmhvdXJzLFxuICBJTlRFUlZBTF9WQUxVRVMuZGF5cyxcbiAgSU5URVJWQUxfVkFMVUVTLndlZWtzLFxuICBJTlRFUlZBTF9WQUxVRVMubW9udGhzLFxuICBJTlRFUlZBTF9WQUxVRVMuY3VzdG9tXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgVElNRV9SQU5HRV9JTlRFUlZBTF9MQUJFTFMgPSB7XG4gIG1pbnV0ZXM6IGdldHRleHQoJ0xhc3QgbWludXRlJykgYXMgJ0xhc3QgbWludXRlJyxcbiAgaG91cnM6IGdldHRleHQoJ0xhc3QgaG91cicpIGFzICdMYXN0IGhvdXInLFxuICBkYXlzOiBnZXR0ZXh0KCdMYXN0IGRheScpIGFzICdMYXN0IGRheScsXG4gIHdlZWtzOiBnZXR0ZXh0KCdMYXN0IHdlZWsnKSBhcyAnTGFzdCB3ZWVrJyxcbiAgbW9udGhzOiBnZXR0ZXh0KCdMYXN0IG1vbnRoJykgYXMgJ0xhc3QgbW9udGgnLFxuICBjdXN0b206IGdldHRleHQoJ0N1c3RvbScpIGFzICdDdXN0b20nXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgRFVSQVRJT05fT1BUSU9OUyA9IFtcbiAge1xuICAgIGlkOiBJTlRFUlZBTF9WQUxVRVMubWludXRlcyxcbiAgICBsYWJlbDogVElNRV9SQU5HRV9JTlRFUlZBTF9MQUJFTFMubWludXRlcyxcbiAgICB1bml0OiBJTlRFUlZBTF9WQUxVRVMubWludXRlcyxcbiAgICBhbW91bnQ6IDFcbiAgfSxcbiAge1xuICAgIGlkOiBJTlRFUlZBTF9WQUxVRVMuaG91cnMsXG4gICAgbGFiZWw6IFRJTUVfUkFOR0VfSU5URVJWQUxfTEFCRUxTLmhvdXJzLFxuICAgIHVuaXQ6IElOVEVSVkFMX1ZBTFVFUy5ob3VycyxcbiAgICBhbW91bnQ6IDFcbiAgfSxcbiAge1xuICAgIGlkOiBJTlRFUlZBTF9WQUxVRVMuZGF5cyxcbiAgICBsYWJlbDogVElNRV9SQU5HRV9JTlRFUlZBTF9MQUJFTFMuZGF5cyxcbiAgICB1bml0OiBJTlRFUlZBTF9WQUxVRVMuZGF5cyxcbiAgICBhbW91bnQ6IDFcbiAgfSxcbiAge1xuICAgIGlkOiBJTlRFUlZBTF9WQUxVRVMud2Vla3MsXG4gICAgbGFiZWw6IFRJTUVfUkFOR0VfSU5URVJWQUxfTEFCRUxTLndlZWtzLFxuICAgIHVuaXQ6IElOVEVSVkFMX1ZBTFVFUy53ZWVrcyxcbiAgICBhbW91bnQ6IDFcbiAgfSxcbiAge1xuICAgIGlkOiBJTlRFUlZBTF9WQUxVRVMubW9udGhzLFxuICAgIGxhYmVsOiBUSU1FX1JBTkdFX0lOVEVSVkFMX0xBQkVMUy5tb250aHMsXG4gICAgdW5pdDogSU5URVJWQUxfVkFMVUVTLm1vbnRocyxcbiAgICBhbW91bnQ6IDFcbiAgfSxcbiAgeyBpZDogSU5URVJWQUxfVkFMVUVTLmN1c3RvbSwgbGFiZWw6IFRJTUVfUkFOR0VfSU5URVJWQUxfTEFCRUxTLmN1c3RvbSB9XG5dO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbG9yUmFuZ2VCb3VuZGFyaWVzIHtcbiAgeWVsbG93UmFuZ2VNaW46IG51bWJlcjtcbiAgeWVsbG93UmFuZ2VNYXg6IG51bWJlcjtcbiAgcmVkUmFuZ2VNaW46IG51bWJlcjtcbiAgcmVkUmFuZ2VNYXg6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXRhcG9pbnRXaXRoVmFsdWVzIGV4dGVuZHMgS1BJRGV0YWlscyB7XG4gIHNlcmllc1VuaXQ/OiBzdHJpbmc7XG4gIHZhbHVlczogTWVhc3VyZW1lbnRSYW5nZXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHVyYXRpb24ge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICB1bml0Pzogc3RyaW5nO1xuICBhbW91bnQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVDb2x1bW5IZWFkZXIge1xuICBkZXZpY2VOYW1lOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHJlbmRlclR5cGU6IHN0cmluZztcbiAgdW5pdDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGVSYW5nZSB7XG4gIGRhdGVGcm9tOiBzdHJpbmc7XG4gIGRhdGVUbzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFwb2ludHNUYWJsZUNvbmZpZyB7XG4gIGFnZ3JlZ2F0aW9uPzogQWdncmVnYXRpb25PcHRpb247XG4gIGNvbnRleHQ/OiBudW1iZXI7XG4gIGRhdGFwb2ludHM6IEtQSURldGFpbHNbXTtcbiAgLyoqXG4gICAqIEFycmF5IHRoYXQgY29udGFpbnMgZ2xvYmFsIHRpbWUgY29udGV4dCBkYXRlRnJvbSBhbmQgZGF0ZVRvLlxuICAgKi9cbiAgZGF0ZT86IHN0cmluZ1tdO1xuICBkYXRlRnJvbTogc3RyaW5nO1xuICBkYXRlVG86IHN0cmluZztcbiAgZGVjaW1hbFBsYWNlcz86IG51bWJlcjtcbiAgZGlzcGxheURhdGVTZWxlY3Rpb246IGJvb2xlYW47XG4gIGRpc3BsYXlTZXR0aW5nczoge1xuICAgIGdsb2JhbFRpbWVDb250ZXh0OiBib29sZWFuO1xuICAgIGdsb2JhbFJlYWx0aW1lQ29udGV4dDogYm9vbGVhbjtcbiAgICBnbG9iYWxBZ2dyZWdhdGlvbkNvbnRleHQ6IGJvb2xlYW47XG4gIH07XG4gIGludGVydmFsOiBJbnRlcnZhbFsnaWQnXTtcbiAgaXNBdXRvUmVmcmVzaEVuYWJsZWQ6IGJvb2xlYW47XG4gIHJlYWx0aW1lOiBib29sZWFuO1xuICByZWZyZXNoSW50ZXJ2YWw/OiBudW1iZXI7XG4gIHNlbGVjdGVkOiBvYmplY3Q7XG4gIHdpZGdldEluc3RhbmNlR2xvYmFsVGltZUNvbnRleHQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YXBvaW50VGFibGVJdGVtIHtcbiAgZGF0ZUFuZFRpbWU6IHN0cmluZztcbiAgZGV2aWNlTmFtZTogc3RyaW5nO1xuICBmcmFnbWVudDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICByZWRSYW5nZU1heD86IG51bWJlcjtcbiAgcmVkUmFuZ2VNaW4/OiBudW1iZXI7XG4gIHJlbmRlclR5cGU6IHN0cmluZztcbiAgc2VyaWVzOiBzdHJpbmc7XG4gIHZhbHVlOiBWYWx1ZTtcbiAgeWVsbG93UmFuZ2VNYXg/OiBudW1iZXI7XG4gIHllbGxvd1JhbmdlTWluPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwZWREYXRhcG9pbnRUYWJsZUl0ZW0ge1xuICBkYXRlQW5kVGltZTogc3RyaW5nO1xuICBkZXZpY2VOYW1lOiBzdHJpbmc7XG4gIHJvd0l0ZW1zOiAoe1xuICAgIGZyYWdtZW50OiBzdHJpbmc7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICByZWRSYW5nZU1heD86IG51bWJlcjtcbiAgICByZWRSYW5nZU1pbj86IG51bWJlcjtcbiAgICByZW5kZXJUeXBlOiBzdHJpbmc7XG4gICAgc2VyaWVzOiBzdHJpbmc7XG4gICAgdmFsdWU6IFZhbHVlO1xuICAgIHllbGxvd1JhbmdlTWF4PzogbnVtYmVyO1xuICAgIHllbGxvd1JhbmdlTWluPzogbnVtYmVyO1xuICB9IHwgbnVsbClbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXJpZXNEYXRhV2l0aFJlc3BvbnNlIHtcbiAgc291cmNlOiBTb3VyY2VJZDtcbiAgZGF0YTogSVNlcmllcztcbiAgcmVzOiBJRmV0Y2hSZXNwb25zZTtcbn1cbiJdfQ==
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50cy10YWJsZS13aWRnZXQubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi93aWRnZXRzL2ltcGxlbWVudGF0aW9ucy9kYXRhcG9pbnRzLXRhYmxlL2RhdGFwb2ludHMtdGFibGUtd2lkZ2V0Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBcUIsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHakUsT0FBTyxFQUFZLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRWhGLE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFHLE1BQU0sQ0FBQztBQWtDekQsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUc7SUFDbkMsaUJBQWlCLEVBQUUsbUJBQW1CO0lBQ3RDLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLGVBQWUsRUFBRSxpQkFBaUI7Q0FDMUIsQ0FBQztBQUVYLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHO0lBQ3ZDLHFCQUFxQixDQUFDLGlCQUFpQjtJQUN2QyxxQkFBcUIsQ0FBQyxNQUFNO0lBQzVCLHFCQUFxQixDQUFDLGVBQWU7Q0FDN0IsQ0FBQztBQUVYLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHO0lBQ25DLE1BQU0sRUFBRSxPQUFPLENBQUMsc0JBQXNCLENBQTJCO0lBQ2pFLGVBQWUsRUFBRSxPQUFPLENBQUMsaUNBQWlDLENBQXNDO0lBQ2hHLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBMkI7Q0FDcEUsQ0FBQztBQUVYLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBRW5GLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHO0lBQ2pDLEdBQUcsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFjO0lBQ3BDLEdBQUcsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFjO0lBQ3BDLElBQUksRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFXO0NBQ3ZCLENBQUM7QUFFWCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRztJQUNqQyxlQUFlLENBQUMsT0FBTztJQUN2QixlQUFlLENBQUMsS0FBSztJQUNyQixlQUFlLENBQUMsSUFBSTtJQUNwQixlQUFlLENBQUMsS0FBSztJQUNyQixlQUFlLENBQUMsTUFBTTtJQUN0QixlQUFlLENBQUMsTUFBTTtDQUNkLENBQUM7QUFFWCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRztJQUN4QyxPQUFPLEVBQUUsT0FBTyxDQUFDLGFBQWEsQ0FBa0I7SUFDaEQsS0FBSyxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQWdCO0lBQzFDLElBQUksRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFlO0lBQ3ZDLEtBQUssRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFnQjtJQUMxQyxNQUFNLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBaUI7SUFDN0MsTUFBTSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQWE7Q0FDN0IsQ0FBQztBQUVYLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHO0lBQzlCO1FBQ0UsRUFBRSxFQUFFLGVBQWUsQ0FBQyxPQUFPO1FBQzNCLEtBQUssRUFBRSwwQkFBMEIsQ0FBQyxPQUFPO1FBQ3pDLElBQUksRUFBRSxlQUFlLENBQUMsT0FBTztRQUM3QixNQUFNLEVBQUUsQ0FBQztLQUNWO0lBQ0Q7UUFDRSxFQUFFLEVBQUUsZUFBZSxDQUFDLEtBQUs7UUFDekIsS0FBSyxFQUFFLDBCQUEwQixDQUFDLEtBQUs7UUFDdkMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxLQUFLO1FBQzNCLE1BQU0sRUFBRSxDQUFDO0tBQ1Y7SUFDRDtRQUNFLEVBQUUsRUFBRSxlQUFlLENBQUMsSUFBSTtRQUN4QixLQUFLLEVBQUUsMEJBQTBCLENBQUMsSUFBSTtRQUN0QyxJQUFJLEVBQUUsZUFBZSxDQUFDLElBQUk7UUFDMUIsTUFBTSxFQUFFLENBQUM7S0FDVjtJQUNEO1FBQ0UsRUFBRSxFQUFFLGVBQWUsQ0FBQyxLQUFLO1FBQ3pCLEtBQUssRUFBRSwwQkFBMEIsQ0FBQyxLQUFLO1FBQ3ZDLElBQUksRUFBRSxlQUFlLENBQUMsS0FBSztRQUMzQixNQUFNLEVBQUUsQ0FBQztLQUNWO0lBQ0Q7UUFDRSxFQUFFLEVBQUUsZUFBZSxDQUFDLE1BQU07UUFDMUIsS0FBSyxFQUFFLDBCQUEwQixDQUFDLE1BQU07UUFDeEMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxNQUFNO1FBQzVCLE1BQU0sRUFBRSxDQUFDO0tBQ1Y7SUFDRCxFQUFFLEVBQUUsRUFBRSxlQUFlLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSwwQkFBMEIsQ0FBQyxNQUFNLEVBQUU7Q0FDekUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElGZXRjaFJlc3BvbnNlLCBJU2VyaWVzIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQWdncmVnYXRpb25PcHRpb24sIGdldHRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEtQSURldGFpbHMgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2RhdGFwb2ludC1zZWxlY3Rvcic7XG5pbXBvcnQgeyBNaW5NYXhWYWx1ZXMsIFNvdXJjZUlkLCBUaW1lU3RhbXAgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2RhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yJztcbmltcG9ydCB7IEludGVydmFsLCBJTlRFUlZBTF9WQUxVRVMgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2ludGVydmFsLXBpY2tlcic7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0RQVF9SRUZSRVNIX0lOVEVSVkFMX1ZBTFVFID0gMzBfMDAwO1xuXG5leHBvcnQgdHlwZSBEYXRhcG9pbnRUYWJsZU1hcEtleSA9IGAke1RpbWVTdGFtcH1fJHtEZXZpY2VOYW1lfWA7XG4vKipcbiAqIFJlcHJlc2VudHMgYSBtYXBwaW5nIHdoZXJlIHRoZSBrZXkgaXMgYSBkYXRhcG9pbnQgaWRlbnRpZmllciBjb250YWluaW5nIHRoZSBkYXRlIGFuZCBkZXZpY2UgbmFtZSwgYW5kIHRoZSB2YWx1ZSBpcyBhbiBhcnJheSBvZiBkYXRhIHBvaW50IHRhYmxlIGl0ZW1zIG9yIG51bGwuXG4gKi9cbmV4cG9ydCB0eXBlIERhdGFQb2ludHNUYWJsZU1hcCA9IE1hcDxEYXRhcG9pbnRUYWJsZU1hcEtleSwgKERhdGFwb2ludFRhYmxlSXRlbSB8IG51bGwpW10+O1xuXG50eXBlIERldmljZU5hbWUgPSBzdHJpbmc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIG1hcCBvZiBkYXRhcG9pbnRzIHNlcmllcyBkYXRhLlxuICogVGhlIGtleSBvZiB0aGUgbWFwIGlzIGEgc291cmNlLCBhbmQgdGhlIHZhbHVlIGlzIHRoZSBkYXRhIGZvciByZXF1ZXN0ZWQgc2VyaWVzLlxuICovXG5leHBvcnQgdHlwZSBEYXRhcG9pbnRzU2VyaWVzRGF0YU1hcCA9IE1hcDxTb3VyY2VJZCwgSVNlcmllcz47XG4vKipcbiAqIERldGVybWluZXMgd2hpY2ggdmFsdWVzIHdpbGwgYmUgZGlzcGxheWVkIGFzIHZhbHVlcyBmb3IgZGF0YXBvaW50cy5cbiAqIGUuZy4gaWYgdXNlciBjaG9zZSAnbWluJywgb25seSB0aGUgbWluaW11bSB2YWx1ZXMgd2lsbCBiZSBkaXNwbGF5ZWQuXG4gKi9cbmV4cG9ydCB0eXBlIFJlbmRlclR5cGUgPSBrZXlvZiB0eXBlb2YgUkVOREVSX1RZUEVTX0xBQkVMUztcbi8qKlxuICogUmVwcmVzZW50cyBhbiBvYmplY3Qgd2hlcmUga2V5IGlzIGEgdGltZXN0YW1wIGFuZCB2YWx1ZSBpcyBhbiBhcnJheVxuICogd2hlcmUgZmlyc3QgcmVjb3JkIGNvbnRhaW5zIG1pbiBhbmQgbWF4IHZhbHVlcyBmb3IgYSBjb3JyZXNwb25kaW5nIHRpbWVzdGFtcC5cbiAqL1xuZXhwb3J0IHR5cGUgTWVhc3VyZW1lbnRSYW5nZXMgPSB7XG4gIFtrZXk6IFRpbWVTdGFtcF06IEFycmF5PE1pbk1heFZhbHVlcz47XG59O1xuLyoqXG4gKiBSZXByZXNlbnRzIGEgdmFsdWUgb2JqZWN0IHdoZXJlIGtleSBpcyBhbiBvYmplY3Qgd2l0aCBtaW4gYW5kIG1heCBwcm9wZXJ0aWVzIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICovXG5leHBvcnQgdHlwZSBWYWx1ZSA9IHtcbiAgW2tleSBpbiBrZXlvZiBNaW5NYXhWYWx1ZXNdOiBudW1iZXI7XG59O1xuXG5leHBvcnQgY29uc3QgREFURV9TRUxFQ1RJT05fVkFMVUVTID0ge1xuICBkYXNoYm9hcmRfY29udGV4dDogJ2Rhc2hib2FyZF9jb250ZXh0JyxcbiAgY29uZmlnOiAnY29uZmlnJyxcbiAgdmlld19hbmRfY29uZmlnOiAndmlld19hbmRfY29uZmlnJ1xufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IERBVEVfU0VMRUNUSU9OX1ZBTFVFU19BUlIgPSBbXG4gIERBVEVfU0VMRUNUSU9OX1ZBTFVFUy5kYXNoYm9hcmRfY29udGV4dCxcbiAgREFURV9TRUxFQ1RJT05fVkFMVUVTLmNvbmZpZyxcbiAgREFURV9TRUxFQ1RJT05fVkFMVUVTLnZpZXdfYW5kX2NvbmZpZ1xuXSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IERBVEVfU0VMRUNUSU9OX0xBQkVMUyA9IHtcbiAgY29uZmlnOiBnZXR0ZXh0KCdXaWRnZXQgY29uZmlndXJhdGlvbicpIGFzICdXaWRnZXQgY29uZmlndXJhdGlvbicsXG4gIHZpZXdfYW5kX2NvbmZpZzogZ2V0dGV4dCgnV2lkZ2V0IGFuZCB3aWRnZXQgY29uZmlndXJhdGlvbicpIGFzICdXaWRnZXQgYW5kIHdpZGdldCBjb25maWd1cmF0aW9uJyxcbiAgZGFzaGJvYXJkX2NvbnRleHQ6IGdldHRleHQoJ0Rhc2hib2FyZCB0aW1lIHJhbmdlJykgYXMgJ0Rhc2hib2FyZCB0aW1lIHJhbmdlJ1xufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IFJFRlJFU0hfSU5URVJWQUxfVkFMVUVTX0FSUiA9IFs1XzAwMCwgMTBfMDAwLCAxNV8wMDAsIDMwXzAwMCwgNjBfMDAwXTtcblxuZXhwb3J0IGNvbnN0IFJFTkRFUl9UWVBFU19MQUJFTFMgPSB7XG4gIG1pbjogZ2V0dGV4dCgnTWluaW11bScpIGFzICdNaW5pbXVtJyxcbiAgbWF4OiBnZXR0ZXh0KCdNYXhpbXVtJykgYXMgJ01heGltdW0nLFxuICBhcmVhOiBnZXR0ZXh0KCdBcmVhJykgYXMgJ0FyZWEnXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgSU5URVJWQUxfVkFMVUVTX0FSUiA9IFtcbiAgSU5URVJWQUxfVkFMVUVTLm1pbnV0ZXMsXG4gIElOVEVSVkFMX1ZBTFVFUy5ob3VycyxcbiAgSU5URVJWQUxfVkFMVUVTLmRheXMsXG4gIElOVEVSVkFMX1ZBTFVFUy53ZWVrcyxcbiAgSU5URVJWQUxfVkFMVUVTLm1vbnRocyxcbiAgSU5URVJWQUxfVkFMVUVTLmN1c3RvbVxuXSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IFRJTUVfUkFOR0VfSU5URVJWQUxfTEFCRUxTID0ge1xuICBtaW51dGVzOiBnZXR0ZXh0KCdMYXN0IG1pbnV0ZScpIGFzICdMYXN0IG1pbnV0ZScsXG4gIGhvdXJzOiBnZXR0ZXh0KCdMYXN0IGhvdXInKSBhcyAnTGFzdCBob3VyJyxcbiAgZGF5czogZ2V0dGV4dCgnTGFzdCBkYXknKSBhcyAnTGFzdCBkYXknLFxuICB3ZWVrczogZ2V0dGV4dCgnTGFzdCB3ZWVrJykgYXMgJ0xhc3Qgd2VlaycsXG4gIG1vbnRoczogZ2V0dGV4dCgnTGFzdCBtb250aCcpIGFzICdMYXN0IG1vbnRoJyxcbiAgY3VzdG9tOiBnZXR0ZXh0KCdDdXN0b20nKSBhcyAnQ3VzdG9tJ1xufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IERVUkFUSU9OX09QVElPTlMgPSBbXG4gIHtcbiAgICBpZDogSU5URVJWQUxfVkFMVUVTLm1pbnV0ZXMsXG4gICAgbGFiZWw6IFRJTUVfUkFOR0VfSU5URVJWQUxfTEFCRUxTLm1pbnV0ZXMsXG4gICAgdW5pdDogSU5URVJWQUxfVkFMVUVTLm1pbnV0ZXMsXG4gICAgYW1vdW50OiAxXG4gIH0sXG4gIHtcbiAgICBpZDogSU5URVJWQUxfVkFMVUVTLmhvdXJzLFxuICAgIGxhYmVsOiBUSU1FX1JBTkdFX0lOVEVSVkFMX0xBQkVMUy5ob3VycyxcbiAgICB1bml0OiBJTlRFUlZBTF9WQUxVRVMuaG91cnMsXG4gICAgYW1vdW50OiAxXG4gIH0sXG4gIHtcbiAgICBpZDogSU5URVJWQUxfVkFMVUVTLmRheXMsXG4gICAgbGFiZWw6IFRJTUVfUkFOR0VfSU5URVJWQUxfTEFCRUxTLmRheXMsXG4gICAgdW5pdDogSU5URVJWQUxfVkFMVUVTLmRheXMsXG4gICAgYW1vdW50OiAxXG4gIH0sXG4gIHtcbiAgICBpZDogSU5URVJWQUxfVkFMVUVTLndlZWtzLFxuICAgIGxhYmVsOiBUSU1FX1JBTkdFX0lOVEVSVkFMX0xBQkVMUy53ZWVrcyxcbiAgICB1bml0OiBJTlRFUlZBTF9WQUxVRVMud2Vla3MsXG4gICAgYW1vdW50OiAxXG4gIH0sXG4gIHtcbiAgICBpZDogSU5URVJWQUxfVkFMVUVTLm1vbnRocyxcbiAgICBsYWJlbDogVElNRV9SQU5HRV9JTlRFUlZBTF9MQUJFTFMubW9udGhzLFxuICAgIHVuaXQ6IElOVEVSVkFMX1ZBTFVFUy5tb250aHMsXG4gICAgYW1vdW50OiAxXG4gIH0sXG4gIHsgaWQ6IElOVEVSVkFMX1ZBTFVFUy5jdXN0b20sIGxhYmVsOiBUSU1FX1JBTkdFX0lOVEVSVkFMX0xBQkVMUy5jdXN0b20gfVxuXTtcblxuZXhwb3J0IGludGVyZmFjZSBDb2xvclJhbmdlQm91bmRhcmllcyB7XG4gIHllbGxvd1JhbmdlTWluOiBudW1iZXI7XG4gIHllbGxvd1JhbmdlTWF4OiBudW1iZXI7XG4gIHJlZFJhbmdlTWluOiBudW1iZXI7XG4gIHJlZFJhbmdlTWF4OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YXBvaW50V2l0aFZhbHVlcyBleHRlbmRzIEtQSURldGFpbHMge1xuICBzZXJpZXNVbml0Pzogc3RyaW5nO1xuICB2YWx1ZXM6IE1lYXN1cmVtZW50UmFuZ2VzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIER1cmF0aW9uIHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgdW5pdD86IHN0cmluZztcbiAgYW1vdW50PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlQ29sdW1uSGVhZGVyIHtcbiAgZGV2aWNlTmFtZTogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICByZW5kZXJUeXBlOiBzdHJpbmc7XG4gIHVuaXQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXRlUmFuZ2Uge1xuICBkYXRlRnJvbTogc3RyaW5nO1xuICBkYXRlVG86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXRhcG9pbnRzVGFibGVDb25maWcge1xuICBhZ2dyZWdhdGlvbj86IEFnZ3JlZ2F0aW9uT3B0aW9uO1xuICBjb250ZXh0PzogbnVtYmVyO1xuICBkYXRhcG9pbnRzOiBLUElEZXRhaWxzW107XG4gIC8qKlxuICAgKiBBcnJheSB0aGF0IGNvbnRhaW5zIGdsb2JhbCB0aW1lIGNvbnRleHQgZGF0ZUZyb20gYW5kIGRhdGVUby5cbiAgICovXG4gIGRhdGU/OiBzdHJpbmdbXTtcbiAgZGF0ZUZyb206IHN0cmluZztcbiAgZGF0ZVRvOiBzdHJpbmc7XG4gIGRlY2ltYWxQbGFjZXM/OiBudW1iZXI7XG4gIGRpc3BsYXlEYXRlU2VsZWN0aW9uOiBib29sZWFuO1xuICBkaXNwbGF5U2V0dGluZ3M6IHtcbiAgICBnbG9iYWxUaW1lQ29udGV4dDogYm9vbGVhbjtcbiAgICBnbG9iYWxSZWFsdGltZUNvbnRleHQ6IGJvb2xlYW47XG4gICAgZ2xvYmFsQWdncmVnYXRpb25Db250ZXh0OiBib29sZWFuO1xuICAgIGdsb2JhbEF1dG9SZWZyZXNoQ29udGV4dDogYm9vbGVhbjtcbiAgfTtcbiAgaW50ZXJ2YWw6IEludGVydmFsWydpZCddO1xuICBpc0F1dG9SZWZyZXNoRW5hYmxlZDogYm9vbGVhbjtcbiAgcmVhbHRpbWU6IGJvb2xlYW47XG4gIHJlZnJlc2hJbnRlcnZhbD86IG51bWJlcjtcbiAgc2VsZWN0ZWQ6IG9iamVjdDtcbiAgd2lkZ2V0SW5zdGFuY2VHbG9iYWxUaW1lQ29udGV4dDogYm9vbGVhbjtcbiAgd2lkZ2V0SW5zdGFuY2VHbG9iYWxBdXRvUmVmcmVzaENvbnRleHQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YXBvaW50VGFibGVJdGVtIHtcbiAgZGF0ZUFuZFRpbWU6IHN0cmluZztcbiAgZGV2aWNlTmFtZTogc3RyaW5nO1xuICBmcmFnbWVudDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICByZWRSYW5nZU1heD86IG51bWJlcjtcbiAgcmVkUmFuZ2VNaW4/OiBudW1iZXI7XG4gIHJlbmRlclR5cGU6IHN0cmluZztcbiAgc2VyaWVzOiBzdHJpbmc7XG4gIHZhbHVlOiBWYWx1ZTtcbiAgeWVsbG93UmFuZ2VNYXg/OiBudW1iZXI7XG4gIHllbGxvd1JhbmdlTWluPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwZWREYXRhcG9pbnRUYWJsZUl0ZW0ge1xuICBkYXRlQW5kVGltZTogc3RyaW5nO1xuICBkZXZpY2VOYW1lOiBzdHJpbmc7XG4gIHJvd0l0ZW1zOiAoe1xuICAgIGZyYWdtZW50OiBzdHJpbmc7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICByZWRSYW5nZU1heD86IG51bWJlcjtcbiAgICByZWRSYW5nZU1pbj86IG51bWJlcjtcbiAgICByZW5kZXJUeXBlOiBzdHJpbmc7XG4gICAgc2VyaWVzOiBzdHJpbmc7XG4gICAgdmFsdWU6IFZhbHVlO1xuICAgIHllbGxvd1JhbmdlTWF4PzogbnVtYmVyO1xuICAgIHllbGxvd1JhbmdlTWluPzogbnVtYmVyO1xuICB9IHwgbnVsbClbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXJpZXNEYXRhV2l0aFJlc3BvbnNlIHtcbiAgc291cmNlOiBTb3VyY2VJZDtcbiAgZGF0YTogSVNlcmllcztcbiAgcmVzOiBJRmV0Y2hSZXNwb25zZTtcbn1cbiJdfQ==
@@ -270,9 +270,7 @@ class WorkspaceConfigComponent {
270
270
  }
271
271
  }
272
272
  addConfig(duplicatedConfig) {
273
- const name = uniqueNamesGenerator({
274
- dictionaries: [adjectives, nouns]
275
- });
273
+ const name = uniqueNamesGenerator({ dictionaries: [adjectives, nouns] });
276
274
  const workspace = {
277
275
  id: new Date().toISOString(),
278
276
  label: name,
@@ -281,11 +279,9 @@ class WorkspaceConfigComponent {
281
279
  if (duplicatedConfig) {
282
280
  workspace.config = duplicatedConfig;
283
281
  }
284
- this.currentConfiguration = { ...workspace };
285
- this.configurations.unshift(workspace);
282
+ this.configurations = [workspace, ...this.configurations];
286
283
  this.initWorkspaceForm();
287
- this.workspaceConfigurationService.saveConfigurations(this.configurations, this.currentConfiguration.id);
288
- this.onConfigurationChange.emit(this.currentConfiguration.config);
284
+ this.changeConfiguration(true, workspace);
289
285
  }
290
286
  changeConfiguration(selected, configuration) {
291
287
  if (!selected) {
@@ -328,6 +324,15 @@ class WorkspaceConfigComponent {
328
324
  config: JSON.stringify(this.updatedConfig)
329
325
  };
330
326
  this.workspaceConfigurationService.saveConfigurations(this.configurations, this.currentConfiguration.id);
327
+ const control = this.configurationsFormGroup.controls['configurations'];
328
+ const index = this.configurations.findIndex(c => c.id === this.currentConfiguration.id);
329
+ if (index !== -1) {
330
+ control.at(index).patchValue({
331
+ label: this.currentConfiguration.label,
332
+ config: this.currentConfiguration.config,
333
+ id: this.currentConfiguration.id
334
+ });
335
+ }
331
336
  this.router.navigate([], { queryParams });
332
337
  }
333
338
  initializeConfigurations() {
@@ -626,7 +631,7 @@ class DatapointExplorerComponent {
626
631
  });
627
632
  }
628
633
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatapointExplorerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
629
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DatapointExplorerComponent, isStandalone: true, selector: "c8y-datapoint-explorer", providers: [ChartEventsService, ChartAlarmsService], viewQueries: [{ propertyName: "chart", first: true, predicate: ["chart"], descendants: true }], ngImport: i0, template: "<c8y-title>{{ 'Data explorer' | translate }}</c8y-title>\n\n<c8y-time-context\n (contextChange)=\"onTimeContextChange($event)\"\n [changedDateContext]=\"timeProps\"\n></c8y-time-context>\n\n<c8y-action-bar-item [placement]=\"'left'\">\n <c8y-workspace-config\n [updatedConfig]=\"config\"\n (onConfigurationChange)=\"onConfigurationChange($event)\"\n ></c8y-workspace-config>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item placement=\"right\">\n <c8y-datapoints-export-selector [exportConfig]=\"exportConfig\"></c8y-datapoints-export-selector>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'more'\"\n [priority]=\"-2000\"\n>\n <button\n title=\"{{ 'Send as widget to report' | translate }}\"\n type=\"button\"\n data-cy=\"widgets-dashboard--copy-dashboard\"\n (click)=\"sendAsWidgetToReport()\"\n [disabled]=\"config?.datapoints?.length === 0 || !canAddReport\"\n >\n <i c8yIcon=\"c8y-reports\"></i>\n <span>{{ 'Send as widget to report' | translate }}</span>\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'more'\"\n [priority]=\"-2000\"\n>\n <button\n title=\"{{ 'Create a new report with widget' | translate }}\"\n type=\"button\"\n data-cy=\"widgets-dashboard--copy-dashboard\"\n (click)=\"createNewReportWithWidget()\"\n [disabled]=\"config?.datapoints?.length === 0 || !canAddReport\"\n >\n <i c8yIcon=\"c8y-reports\"></i>\n <span>{{ 'Create a new report with widget' | translate }}</span>\n </button>\n</c8y-action-bar-item>\n\n<div class=\"content-fullpage d-grid grid_col--auto-360 gap-24\">\n <div class=\"d-col gap-16\">\n <c8y-charts\n class=\"flex-grow data-point-explorer\"\n #chart\n [config]=\"config\"\n [alerts]=\"alerts\"\n (updateAlarmsAndEvents)=\"updateAlarmsAndEvents($event)\"\n (configChangeOnZoomOut)=\"onSliderZoom($event)\"\n (datapointOutOfSync)=\"handleDatapointOutOfSync($event)\"\n (timeRangeChangeOnRealtime)=\"updateTimeRangeOnRealtime($event)\"\n (isMarkedAreaEnabled)=\"isMarkedAreaEnabled = $event\"\n ></c8y-charts>\n <form\n class=\"m-l-48 m-r-48\"\n [formGroup]=\"formGroup\"\n >\n <div class=\"d-grid-md grid__col--4-4-4 gap-16\">\n <fieldset class=\"c8y-fieldset form-group-sm m-t-md-0 p-b-8\">\n <legend>{{ 'Axis' | translate }}</legend>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Y axis helper lines' | translate\"\n >\n <input\n name=\"yAxisSplitLines\"\n type=\"checkbox\"\n formControlName=\"yAxisSplitLines\"\n />\n <span></span>\n <span translate>Y-axis helper lines</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'X axis helper lines' | translate\"\n >\n <input\n name=\"xAxisSplitLines\"\n type=\"checkbox\"\n formControlName=\"xAxisSplitLines\"\n />\n <span></span>\n <span translate>X-axis helper lines</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Merge matching data points into single axis' | translate\"\n >\n <input\n name=\"mergeMatchingDatapoints\"\n type=\"checkbox\"\n formControlName=\"mergeMatchingDatapoints\"\n />\n <span></span>\n <span translate>Merge matching data points into single axis</span>\n </label>\n </fieldset>\n <fieldset class=\"c8y-fieldset form-group-sm m-t-md-0 p-b-8\">\n <legend>{{ 'Alarms & events' | translate }}</legend>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show vertical line when alarm occurs' | translate\"\n >\n <input\n name=\"displayMarkedLine\"\n type=\"checkbox\"\n formControlName=\"displayMarkedLine\"\n />\n <span></span>\n <span translate>Show vertical line on every occurrence</span>\n </label>\n\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show icon when alarm or event occurs' | translate\"\n >\n <input\n name=\"displayMarkedPoint\"\n type=\"checkbox\"\n formControlName=\"displayMarkedPoint\"\n />\n <span></span>\n <span>\n {{\n 'Show icon when triggered`When alarms and events occur the icon will be shown`'\n | translate\n }}\n </span>\n <button\n class=\"btn-dot m-l-8\"\n [attr.aria-label]=\"\n 'Some alarms or events have no matching data points. No icons will be shown for them.'\n | translate\n \"\n [tooltip]=\"\n 'Some alarms or events have no matching data points. No icons will be shown for them.'\n | translate\n \"\n container=\"body\"\n type=\"button\"\n *ngIf=\"alarmsOrEventsHaveNoMatchingDps\"\n (click)=\"$event.stopPropagation()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"text-info\"\n c8yIcon=\"info\"\n ></i>\n </button>\n </label>\n </fieldset>\n <fieldset class=\"c8y-fieldset form-group-sm m-t-md-0 p-b-8\">\n <legend>{{ 'Chart' | translate }}</legend>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show labels and units' | translate\"\n >\n <input\n name=\"showLabelAndUnit\"\n type=\"checkbox\"\n formControlName=\"showLabelAndUnit\"\n />\n <span></span>\n <span translate>Display labels and units on Y-axis</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show slider' | translate\"\n >\n <input\n name=\"showSlider\"\n type=\"checkbox\"\n formControlName=\"showSlider\"\n />\n <span></span>\n <span translate>Show slider</span>\n </label>\n </fieldset>\n </div>\n </form>\n </div>\n <div class=\"card inner-scroll bg-level-1\">\n <form\n class=\"bg-inherit\"\n [formGroup]=\"formGroup\"\n >\n <c8y-datapoint-selection-list\n class=\"bg-inherit separator-top d-block\"\n name=\"datapoints\"\n [minActiveCount]=\"0\"\n [defaultFormOptions]=\"datapointSelectDefaultFormOptions\"\n [config]=\"{ contextAsset: contextAsset }\"\n formControlName=\"datapoints\"\n [allowDragAndDrop]=\"true\"\n ></c8y-datapoint-selection-list>\n\n <c8y-alarm-event-selection-list\n class=\"bg-inherit\"\n name=\"alarms\"\n formControlName=\"alarms\"\n [timelineType]=\"'ALARM'\"\n [datapoints]=\"config.datapoints\"\n ></c8y-alarm-event-selection-list>\n\n <c8y-alarm-event-selection-list\n class=\"bg-inherit\"\n name=\"events\"\n formControlName=\"events\"\n [timelineType]=\"'EVENT'\"\n [datapoints]=\"config.datapoints\"\n ></c8y-alarm-event-selection-list>\n </form>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "component", type: i1.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "directive", type: i1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: DatapointSelectorModule }, { kind: "component", type: i4$1.DatapointSelectionListComponent, selector: "c8y-datapoint-selection-list", inputs: ["actions", "allowDragAndDrop", "config", "defaultFormOptions", "maxActiveCount", "minActiveCount", "resolveContext", "listTitle"], outputs: ["isValid", "change"] }, { kind: "ngmodule", type: AlarmEventSelectorModule }, { kind: "component", type: i5$1.AlarmEventSelectionListComponent, selector: "c8y-alarm-event-selection-list", inputs: ["timelineType", "canRemove", "canEdit", "canDragAndDrop", "title", "addButtonLabel", "hideSource", "inline", "activeToggleAsSwitch", "omitProperties", "datapoints", "config"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i6.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "ngmodule", type: PopoverModule }, { kind: "component", type: TimeContextComponent, selector: "c8y-time-context", inputs: ["changedDateContext", "controlsAvailable", "context"], outputs: ["contextChange"] }, { kind: "component", type: ChartsComponent, selector: "c8y-charts", inputs: ["config", "alerts"], outputs: ["configChangeOnZoomOut", "timeRangeChangeOnRealtime", "datapointOutOfSync", "updateAlarmsAndEvents", "isMarkedAreaEnabled"] }, { kind: "ngmodule", type: BsDropdownModule }, { kind: "ngmodule", type: FormsModule$1 }, { kind: "ngmodule", type: A11yModule }, { kind: "component", type: DatapointsExportSelectorComponent, selector: "c8y-datapoints-export-selector", inputs: ["exportConfig"], outputs: ["isOpen"] }, { kind: "component", type: WorkspaceConfigComponent, selector: "c8y-workspace-config", inputs: ["updatedConfig"], outputs: ["onConfigurationChange"] }] }); }
634
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DatapointExplorerComponent, isStandalone: true, selector: "c8y-datapoint-explorer", providers: [ChartEventsService, ChartAlarmsService], viewQueries: [{ propertyName: "chart", first: true, predicate: ["chart"], descendants: true }], ngImport: i0, template: "<c8y-title>{{ 'Data explorer' | translate }}</c8y-title>\n\n<c8y-time-context\n (contextChange)=\"onTimeContextChange($event)\"\n [changedDateContext]=\"timeProps\"\n></c8y-time-context>\n\n<c8y-action-bar-item [placement]=\"'left'\">\n <c8y-workspace-config\n [updatedConfig]=\"config\"\n (onConfigurationChange)=\"onConfigurationChange($event)\"\n ></c8y-workspace-config>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item placement=\"right\">\n <c8y-datapoints-export-selector [exportConfig]=\"exportConfig\"></c8y-datapoints-export-selector>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'more'\"\n [priority]=\"-2000\"\n>\n <button\n title=\"{{ 'Send as widget to report' | translate }}\"\n type=\"button\"\n data-cy=\"widgets-dashboard--copy-dashboard\"\n (click)=\"sendAsWidgetToReport()\"\n [disabled]=\"config?.datapoints?.length === 0 || !canAddReport\"\n >\n <i c8yIcon=\"c8y-reports\"></i>\n <span>{{ 'Send as widget to report' | translate }}</span>\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'more'\"\n [priority]=\"-2000\"\n>\n <button\n title=\"{{ 'Create a new report with widget' | translate }}\"\n type=\"button\"\n data-cy=\"widgets-dashboard--copy-dashboard\"\n (click)=\"createNewReportWithWidget()\"\n [disabled]=\"config?.datapoints?.length === 0 || !canAddReport\"\n >\n <i c8yIcon=\"c8y-reports\"></i>\n <span>{{ 'Create a new report with widget' | translate }}</span>\n </button>\n</c8y-action-bar-item>\n\n<div class=\"content-fullpage d-grid grid_col--auto-360 gap-24\">\n <div class=\"d-col gap-16\">\n <c8y-charts\n class=\"flex-grow data-point-explorer\"\n #chart\n [config]=\"config\"\n [alerts]=\"alerts\"\n (updateAlarmsAndEvents)=\"updateAlarmsAndEvents($event)\"\n (configChangeOnZoomOut)=\"onSliderZoom($event)\"\n (datapointOutOfSync)=\"handleDatapointOutOfSync($event)\"\n (timeRangeChangeOnRealtime)=\"updateTimeRangeOnRealtime($event)\"\n (isMarkedAreaEnabled)=\"isMarkedAreaEnabled = $event\"\n ></c8y-charts>\n <form\n class=\"m-l-48 m-r-48\"\n [formGroup]=\"formGroup\"\n >\n <div class=\"d-grid-md grid__col--4-4-4 gap-16\">\n <fieldset class=\"c8y-fieldset form-group-sm m-t-md-0 p-b-8\">\n <legend>{{ 'Axis' | translate }}</legend>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Y axis helper lines' | translate\"\n >\n <input\n name=\"yAxisSplitLines\"\n type=\"checkbox\"\n formControlName=\"yAxisSplitLines\"\n />\n <span></span>\n <span translate>Y-axis helper lines</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'X axis helper lines' | translate\"\n >\n <input\n name=\"xAxisSplitLines\"\n type=\"checkbox\"\n formControlName=\"xAxisSplitLines\"\n />\n <span></span>\n <span translate>X-axis helper lines</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Merge matching data points into single axis' | translate\"\n >\n <input\n name=\"mergeMatchingDatapoints\"\n type=\"checkbox\"\n formControlName=\"mergeMatchingDatapoints\"\n />\n <span></span>\n <span translate>Merge matching data points into single axis</span>\n </label>\n </fieldset>\n <fieldset class=\"c8y-fieldset form-group-sm m-t-md-0 p-b-8\">\n <legend>{{ 'Alarms & events' | translate }}</legend>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show vertical line when alarm occurs' | translate\"\n >\n <input\n name=\"displayMarkedLine\"\n type=\"checkbox\"\n formControlName=\"displayMarkedLine\"\n />\n <span></span>\n <span translate>Show vertical line on every occurrence</span>\n </label>\n\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show icon when alarm or event occurs' | translate\"\n >\n <input\n name=\"displayMarkedPoint\"\n type=\"checkbox\"\n formControlName=\"displayMarkedPoint\"\n />\n <span></span>\n <span>\n {{\n 'Show icon when triggered`When alarms and events occur the icon will be shown`'\n | translate\n }}\n </span>\n <button\n class=\"btn-dot m-l-8\"\n [attr.aria-label]=\"\n 'Some alarms or events have no matching data points. No icons will be shown for them.'\n | translate\n \"\n [tooltip]=\"\n 'Some alarms or events have no matching data points. No icons will be shown for them.'\n | translate\n \"\n container=\"body\"\n type=\"button\"\n *ngIf=\"alarmsOrEventsHaveNoMatchingDps\"\n (click)=\"$event.stopPropagation()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"text-info\"\n c8yIcon=\"info\"\n ></i>\n </button>\n </label>\n </fieldset>\n <fieldset class=\"c8y-fieldset form-group-sm m-t-md-0 p-b-8\">\n <legend>{{ 'Chart' | translate }}</legend>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show labels and units' | translate\"\n >\n <input\n name=\"showLabelAndUnit\"\n type=\"checkbox\"\n formControlName=\"showLabelAndUnit\"\n />\n <span></span>\n <span translate>Display labels and units on Y-axis</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show slider' | translate\"\n >\n <input\n name=\"showSlider\"\n type=\"checkbox\"\n formControlName=\"showSlider\"\n />\n <span></span>\n <span translate>Show slider</span>\n </label>\n </fieldset>\n </div>\n </form>\n </div>\n <div class=\"card inner-scroll bg-level-1\">\n <form\n class=\"bg-inherit\"\n [formGroup]=\"formGroup\"\n >\n <c8y-datapoint-selection-list\n class=\"bg-inherit separator-top d-block\"\n name=\"datapoints\"\n [minActiveCount]=\"0\"\n [defaultFormOptions]=\"datapointSelectDefaultFormOptions\"\n [config]=\"{ contextAsset: contextAsset }\"\n formControlName=\"datapoints\"\n [allowDragAndDrop]=\"true\"\n ></c8y-datapoint-selection-list>\n\n <c8y-alarm-event-selection-list\n class=\"bg-inherit\"\n name=\"alarms\"\n formControlName=\"alarms\"\n [timelineType]=\"'ALARM'\"\n [datapoints]=\"config.datapoints\"\n ></c8y-alarm-event-selection-list>\n\n <c8y-alarm-event-selection-list\n class=\"bg-inherit\"\n name=\"events\"\n formControlName=\"events\"\n [timelineType]=\"'EVENT'\"\n [datapoints]=\"config.datapoints\"\n ></c8y-alarm-event-selection-list>\n </form>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "component", type: i1.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "directive", type: i1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: DatapointSelectorModule }, { kind: "component", type: i4$1.DatapointSelectionListComponent, selector: "c8y-datapoint-selection-list", inputs: ["actions", "allowDragAndDrop", "config", "defaultFormOptions", "maxActiveCount", "minActiveCount", "resolveContext", "listTitle"], outputs: ["isValid", "change"] }, { kind: "ngmodule", type: AlarmEventSelectorModule }, { kind: "component", type: i5$1.AlarmEventSelectionListComponent, selector: "c8y-alarm-event-selection-list", inputs: ["timelineType", "canRemove", "canEdit", "canDragAndDrop", "title", "addButtonLabel", "hideSource", "inline", "activeToggleAsSwitch", "omitProperties", "datapoints", "config"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i6.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "ngmodule", type: PopoverModule }, { kind: "component", type: TimeContextComponent, selector: "c8y-time-context", inputs: ["changedDateContext", "controlsAvailable", "context"], outputs: ["contextChange"] }, { kind: "component", type: ChartsComponent, selector: "c8y-charts", inputs: ["config", "alerts"], outputs: ["configChangeOnZoomOut", "timeRangeChangeOnRealtime", "datapointOutOfSync", "updateAlarmsAndEvents", "isMarkedAreaEnabled"] }, { kind: "ngmodule", type: BsDropdownModule }, { kind: "ngmodule", type: FormsModule$1 }, { kind: "ngmodule", type: A11yModule }, { kind: "component", type: DatapointsExportSelectorComponent, selector: "c8y-datapoints-export-selector", inputs: ["containerClass", "exportConfig"], outputs: ["isOpen"] }, { kind: "component", type: WorkspaceConfigComponent, selector: "c8y-workspace-config", inputs: ["updatedConfig"], outputs: ["onConfigurationChange"] }] }); }
630
635
  }
631
636
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatapointExplorerComponent, decorators: [{
632
637
  type: Component,