@c8y/ngx-components 1021.50.0 → 1021.52.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core/aggregation/aggregation.model.d.ts.map +1 -0
- package/core/aggregation/aggregation.service.d.ts +44 -0
- package/core/aggregation/aggregation.service.d.ts.map +1 -0
- package/core/aggregation/index.d.ts +3 -0
- package/core/aggregation/index.d.ts.map +1 -0
- package/core/common/index.d.ts +0 -2
- package/core/common/index.d.ts.map +1 -1
- package/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.d.ts +2 -2
- package/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.d.ts.map +1 -1
- package/core/dashboard/wiget-time-context/widget-time-context-icon-bar/widget-time-context-icon-bar.component.d.ts +1 -1
- package/core/dashboard/wiget-time-context/widget-time-context-icon-bar/widget-time-context-icon-bar.component.d.ts.map +1 -1
- package/core/dashboard/wiget-time-context/widget-time-context.component.d.ts +1 -1
- package/core/dashboard/wiget-time-context/widget-time-context.component.d.ts.map +1 -1
- package/core/index.d.ts +1 -0
- package/core/index.d.ts.map +1 -1
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.d.ts +54 -42
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.d.ts.map +1 -1
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.d.ts +28 -8
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.d.ts.map +1 -1
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.service.d.ts +3 -52
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.service.d.ts.map +1 -1
- package/datapoints-export-selector/datapoints-export-selector.model.d.ts +5 -14
- package/datapoints-export-selector/datapoints-export-selector.model.d.ts.map +1 -1
- package/device-grid/device-grid.component.d.ts.map +1 -1
- package/device-grid/device-grid.service.d.ts +2 -0
- package/device-grid/device-grid.service.d.ts.map +1 -1
- package/esm2022/core/aggregation/aggregation.model.mjs +46 -0
- package/esm2022/core/aggregation/aggregation.service.mjs +76 -0
- package/esm2022/core/aggregation/index.mjs +3 -0
- package/esm2022/core/common/index.mjs +1 -3
- package/esm2022/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.mjs +2 -2
- package/esm2022/core/dashboard/wiget-time-context/widget-time-context-icon-bar/widget-time-context-icon-bar.component.mjs +2 -2
- package/esm2022/core/dashboard/wiget-time-context/widget-time-context.component.mjs +4 -4
- package/esm2022/core/index.mjs +2 -1
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.mjs +165 -163
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.mjs +82 -48
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.service.mjs +5 -95
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-data-scope/datapoints-exports-selector-data-scope.component.mjs +3 -3
- package/esm2022/datapoints-export-selector/datapoints-export-selector.component.mjs +3 -3
- package/esm2022/datapoints-export-selector/datapoints-export-selector.model.mjs +1 -9
- package/esm2022/device-grid/device-grid.component.mjs +3 -3
- package/esm2022/device-grid/device-grid.service.mjs +16 -1
- package/esm2022/icon-selector/icons/platform/index.mjs +10 -8
- package/esm2022/interval-picker/interval-picker.model.mjs +5 -1
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.mjs +25 -41
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.mjs +3 -3
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.mjs +55 -49
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.service.mjs +25 -73
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-widget.model.mjs +20 -20
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table.service.mjs +19 -19
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +247 -307
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-grid.mjs +17 -2
- package/fesm2022/c8y-ngx-components-device-grid.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector-icons-platform.mjs +9 -7
- package/fesm2022/c8y-ngx-components-icon-selector-icons-platform.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-interval-picker.mjs +5 -1
- package/fesm2022/c8y-ngx-components-interval-picker.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +1075 -1253
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +118 -76
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/icon-selector/icons/index.d.ts +1 -1
- package/icon-selector/icons/platform/index.d.ts +2 -2
- package/icon-selector/icons/platform/index.d.ts.map +1 -1
- package/interval-picker/interval-picker.model.d.ts +6 -0
- package/interval-picker/interval-picker.model.d.ts.map +1 -1
- package/locales/de.po +40 -27
- package/locales/es.po +40 -27
- package/locales/fr.po +40 -27
- package/locales/ja_JP.po +40 -26
- package/locales/ko.po +38 -24
- package/locales/locales.pot +23 -307
- package/locales/nl.po +40 -27
- package/locales/pl.po +40 -26
- package/locales/pt_BR.po +40 -27
- package/locales/zh_CN.po +38 -24
- package/locales/zh_TW.po +38 -24
- package/package.json +1 -1
- package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.d.ts +3 -5
- package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.d.ts.map +1 -1
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.d.ts +7 -2
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.d.ts.map +1 -1
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.service.d.ts +7 -27
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.service.d.ts.map +1 -1
- package/widgets/implementations/datapoints-table/datapoints-table-widget.model.d.ts +4 -3
- package/widgets/implementations/datapoints-table/datapoints-table-widget.model.d.ts.map +1 -1
- package/widgets/implementations/datapoints-table/datapoints-table.service.d.ts +5 -5
- package/widgets/implementations/datapoints-table/datapoints-table.service.d.ts.map +1 -1
- package/core/common/aggregation/aggregation.model.d.ts.map +0 -1
- package/core/common/aggregation/aggregation.service.d.ts +0 -17
- package/core/common/aggregation/aggregation.service.d.ts.map +0 -1
- package/esm2022/core/common/aggregation/aggregation.model.mjs +0 -46
- package/esm2022/core/common/aggregation/aggregation.service.mjs +0 -34
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.service.mjs +0 -124
- package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.service.d.ts +0 -56
- package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.service.d.ts.map +0 -1
- /package/core/{common/aggregation → aggregation}/aggregation.model.d.ts +0 -0
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { DataFetchingService } from '@c8y/ngx-components/datapoints-export-selector';
|
|
3
|
+
import { INTERVAL_VALUES } from '@c8y/ngx-components/interval-picker';
|
|
4
4
|
import { DURATION_OPTIONS } from '../datapoints-table-widget.model';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@c8y/
|
|
6
|
+
import * as i1 from "@c8y/ngx-components/datapoints-export-selector";
|
|
7
7
|
function mapToSourceValueObject([key, value]) {
|
|
8
8
|
return { key, value };
|
|
9
9
|
}
|
|
10
10
|
export class DatapointsTableViewService {
|
|
11
|
-
constructor(
|
|
12
|
-
this.
|
|
11
|
+
constructor(dataFetchingService) {
|
|
12
|
+
this.dataFetchingService = dataFetchingService;
|
|
13
13
|
}
|
|
14
14
|
/**
|
|
15
15
|
* Filters out inactive data points from the given array.
|
|
@@ -74,8 +74,7 @@ export class DatapointsTableViewService {
|
|
|
74
74
|
series,
|
|
75
75
|
aggregationType: config.aggregation
|
|
76
76
|
};
|
|
77
|
-
|
|
78
|
-
const { data, res } = await this.loadSeriesData(params, roundSeconds);
|
|
77
|
+
const { data, res } = await this.dataFetchingService.fetchSeriesData(params, roundSeconds);
|
|
79
78
|
return { source, data, res };
|
|
80
79
|
});
|
|
81
80
|
const results = await Promise.all(promises);
|
|
@@ -88,63 +87,6 @@ export class DatapointsTableViewService {
|
|
|
88
87
|
filteredResults.forEach(result => resultMap.set(result.source, result.data));
|
|
89
88
|
return resultMap;
|
|
90
89
|
}
|
|
91
|
-
/**
|
|
92
|
-
* Asynchronously loads series data based on the provided parameters.
|
|
93
|
-
*
|
|
94
|
-
* This method constructs a filter for retrieving series data within a specified date range,
|
|
95
|
-
* from a specific source, and optionally applying an aggregation type.
|
|
96
|
-
*
|
|
97
|
-
* @param params - The parameters for loading series data, including date range, source, series names, and aggregation type.
|
|
98
|
-
* @param roundSeconds - Indicates whether to round the seconds in the date range to the nearest whole number.
|
|
99
|
-
* @returns A promise that resolves to series data wrapped in result object.
|
|
100
|
-
*/
|
|
101
|
-
// TODO: same method as in the datapoints-export-selector service, when integrating with it (MTM-59689), remove this method and use the one from the service
|
|
102
|
-
async loadSeriesData(params, roundSeconds) {
|
|
103
|
-
const { dateFrom, dateTo, source, series, aggregationType } = params;
|
|
104
|
-
const from = this.adjustDate(dateFrom, 0, roundSeconds);
|
|
105
|
-
const to = this.adjustDate(dateTo, 0, roundSeconds);
|
|
106
|
-
const filter = {
|
|
107
|
-
dateFrom: from,
|
|
108
|
-
dateTo: to,
|
|
109
|
-
source: source,
|
|
110
|
-
revert: true
|
|
111
|
-
};
|
|
112
|
-
if (aggregationType) {
|
|
113
|
-
filter.aggregationType = aggregationType;
|
|
114
|
-
}
|
|
115
|
-
// TODO: it is a temporal workaround for a bug in the backend,
|
|
116
|
-
// where the series with more than one dot are impossible to retrieve:
|
|
117
|
-
// https://cumulocity.atlassian.net/browse/MTM-59277
|
|
118
|
-
const hasMoreThanOneDot = series.some(s => s.split('.').length > 2);
|
|
119
|
-
if (!hasMoreThanOneDot) {
|
|
120
|
-
filter.series = series;
|
|
121
|
-
}
|
|
122
|
-
return await this.measurementService.listSeries(filter);
|
|
123
|
-
}
|
|
124
|
-
// TODO: same method as in the datapoints-export-selector service, when integrating with it (MTM-59689), remove this method and use the one from the service
|
|
125
|
-
// Integration task: MTM-60221
|
|
126
|
-
// TODO: Compare implementations.
|
|
127
|
-
/**
|
|
128
|
-
* Adjusts the given date by adding the specified number of minutes and setting seconds to 0.
|
|
129
|
-
*
|
|
130
|
-
* @param date - The date to be adjusted in string format.
|
|
131
|
-
* @param minutes - The number of minutes to add to the date.
|
|
132
|
-
* @param roundSeconds - Whether to round the seconds or not.
|
|
133
|
-
* If true, the seconds will be rounded to 0.
|
|
134
|
-
* If false, the seconds will be displayed as they are.
|
|
135
|
-
* @returns The adjusted date in ISO string format.
|
|
136
|
-
*/
|
|
137
|
-
adjustDate(date, minutes, roundSeconds = true) {
|
|
138
|
-
const dateTime = new Date(date);
|
|
139
|
-
if (isNaN(dateTime.getTime())) {
|
|
140
|
-
throw new Error('Invalid date');
|
|
141
|
-
}
|
|
142
|
-
dateTime.setUTCMinutes(dateTime.getUTCMinutes() + minutes);
|
|
143
|
-
if (roundSeconds) {
|
|
144
|
-
dateTime.setUTCSeconds(0, 0);
|
|
145
|
-
}
|
|
146
|
-
return dateTime.toISOString();
|
|
147
|
-
}
|
|
148
90
|
/**
|
|
149
91
|
* Creates an array of DatapointsWithValues based on the provided datapoints and datapointsSeriesDataMap.
|
|
150
92
|
*
|
|
@@ -316,7 +258,7 @@ export class DatapointsTableViewService {
|
|
|
316
258
|
* @returns An object containing the `dateFrom` and `dateTo` in ISO string format.
|
|
317
259
|
*/
|
|
318
260
|
prepareTimeRange(interval, dateFromInput, dateToInput) {
|
|
319
|
-
if (!interval || interval ===
|
|
261
|
+
if (!interval || interval === INTERVAL_VALUES.custom) {
|
|
320
262
|
return { dateFrom: dateFromInput, dateTo: dateToInput };
|
|
321
263
|
}
|
|
322
264
|
const selected = DURATION_OPTIONS.find(selectedDuration => selectedDuration.id === interval);
|
|
@@ -340,19 +282,19 @@ export class DatapointsTableViewService {
|
|
|
340
282
|
subtractTime(date, amount, unit) {
|
|
341
283
|
const newDate = new Date(date);
|
|
342
284
|
switch (unit) {
|
|
343
|
-
case
|
|
285
|
+
case INTERVAL_VALUES.minutes:
|
|
344
286
|
newDate.setUTCMinutes(newDate.getUTCMinutes() - amount);
|
|
345
287
|
break;
|
|
346
|
-
case
|
|
288
|
+
case INTERVAL_VALUES.hours:
|
|
347
289
|
newDate.setUTCHours(newDate.getUTCHours() - amount);
|
|
348
290
|
break;
|
|
349
|
-
case
|
|
291
|
+
case INTERVAL_VALUES.days:
|
|
350
292
|
newDate.setUTCDate(newDate.getUTCDate() - amount);
|
|
351
293
|
break;
|
|
352
|
-
case
|
|
294
|
+
case INTERVAL_VALUES.weeks:
|
|
353
295
|
newDate.setUTCDate(newDate.getUTCDate() - amount * 7);
|
|
354
296
|
break;
|
|
355
|
-
case
|
|
297
|
+
case INTERVAL_VALUES.months:
|
|
356
298
|
this.subtractMonthsAndAdjustDay(newDate, amount);
|
|
357
299
|
break;
|
|
358
300
|
}
|
|
@@ -369,6 +311,16 @@ export class DatapointsTableViewService {
|
|
|
369
311
|
.filter(([source]) => !availableSources.has(source))
|
|
370
312
|
.map(mapToSourceValueObject);
|
|
371
313
|
}
|
|
314
|
+
hasSecondsAndMillisecondsEqualZero(timeString) {
|
|
315
|
+
if (!timeString) {
|
|
316
|
+
return false;
|
|
317
|
+
}
|
|
318
|
+
const date = new Date(timeString);
|
|
319
|
+
if (isNaN(date.getTime())) {
|
|
320
|
+
return false;
|
|
321
|
+
}
|
|
322
|
+
return date.getUTCSeconds() === 0 && date.getUTCMilliseconds() === 0;
|
|
323
|
+
}
|
|
372
324
|
/**
|
|
373
325
|
* Converts a date string to ISO format.
|
|
374
326
|
*
|
|
@@ -418,7 +370,7 @@ export class DatapointsTableViewService {
|
|
|
418
370
|
setToLastDayOfPreviousMonth(date) {
|
|
419
371
|
date.setUTCDate(0);
|
|
420
372
|
}
|
|
421
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DatapointsTableViewService, deps: [{ token: i1.
|
|
373
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DatapointsTableViewService, deps: [{ token: i1.DataFetchingService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
422
374
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DatapointsTableViewService, providedIn: 'root' }); }
|
|
423
375
|
}
|
|
424
376
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DatapointsTableViewService, decorators: [{
|
|
@@ -426,5 +378,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
426
378
|
args: [{
|
|
427
379
|
providedIn: 'root'
|
|
428
380
|
}]
|
|
429
|
-
}], ctorParameters: () => [{ type: i1.
|
|
430
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50cy10YWJsZS12aWV3LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi93aWRnZXRzL2ltcGxlbWVudGF0aW9ucy9kYXRhcG9pbnRzLXRhYmxlL2RhdGFwb2ludHMtdGFibGUtdmlldy9kYXRhcG9pbnRzLXRhYmxlLXZpZXcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBbUMsa0JBQWtCLEVBQW1CLE1BQU0sYUFBYSxDQUFDO0FBRW5HLE9BQU8sRUFJTCxnQ0FBZ0MsRUFFakMsTUFBTSxnREFBZ0QsQ0FBQztBQUN4RCxPQUFPLEVBQ0wsZ0JBQWdCLEVBYWpCLE1BQU0sa0NBQWtDLENBQUM7OztBQUUxQyxTQUFTLHNCQUFzQixDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBdUI7SUFJaEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUN4QixDQUFDO0FBS0QsTUFBTSxPQUFPLDBCQUEwQjtJQUNyQyxZQUFvQixrQkFBc0M7UUFBdEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtJQUFHLENBQUM7SUFFOUQ7Ozs7O09BS0c7SUFDSCwyQkFBMkIsQ0FBQyxVQUF3QjtRQUNsRCxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFxQixFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVELHFCQUFxQixDQUFDLFVBQXdCO1FBQzVDLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELE9BQU8sR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7Ozs7Ozs7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QkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJUmVzdWx0LCBJU2VyaWVzLCBJU2VyaWVzRmlsdGVyLCBNZWFzdXJlbWVudFNlcnZpY2UsIGFnZ3JlZ2F0aW9uVHlwZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEtQSURldGFpbHMgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2RhdGFwb2ludC1zZWxlY3Rvcic7XG5pbXBvcnQge1xuICBEYXRhcG9pbnRzVmFsdWVzRGF0YU1hcCxcbiAgTWluTWF4VmFsdWVzLFxuICBTb3VyY2VJZCxcbiAgVElNRV9SQU5HRV9JTlRFUlZBTF9VTklUU19WQUxVRVMsXG4gIFRpbWVSYW5nZUludGVydmFsXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3InO1xuaW1wb3J0IHtcbiAgRFVSQVRJT05fT1BUSU9OUyxcbiAgRGF0YVBvaW50c1RhYmxlTWFwLFxuICBEYXRhcG9pbnRUYWJsZUl0ZW0sXG4gIERhdGFwb2ludFRhYmxlTWFwS2V5LFxuICBEYXRhcG9pbnRXaXRoVmFsdWVzLFxuICBEYXRhcG9pbnRzU2VyaWVzRGF0YU1hcCxcbiAgRGF0YXBvaW50c1RhYmxlQ29uZmlnLFxuICBEdXJhdGlvbixcbiAgR3JvdXBlZERhdGFwb2ludFRhYmxlSXRlbSxcbiAgTWVhc3VyZW1lbnRSYW5nZXMsXG4gIFNlcmllc0RhdGFXaXRoUmVzcG9uc2UsXG4gIFRhYmxlQ29sdW1uSGVhZGVyLFxuICBWYWx1ZVxufSBmcm9tICcuLi9kYXRhcG9pbnRzLXRhYmxlLXdpZGdldC5tb2RlbCc7XG5cbmZ1bmN0aW9uIG1hcFRvU291cmNlVmFsdWVPYmplY3QoW2tleSwgdmFsdWVdOiBbU291cmNlSWQsIHN0cmluZ1tdXSk6IHtcbiAga2V5OiBTb3VyY2VJZDtcbiAgdmFsdWU6IHN0cmluZ1tdO1xufSB7XG4gIHJldHVybiB7IGtleSwgdmFsdWUgfTtcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRGF0YXBvaW50c1RhYmxlVmlld1NlcnZpY2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1lYXN1cmVtZW50U2VydmljZTogTWVhc3VyZW1lbnRTZXJ2aWNlKSB7fVxuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIG91dCBpbmFjdGl2ZSBkYXRhIHBvaW50cyBmcm9tIHRoZSBnaXZlbiBhcnJheS5cbiAgICpcbiAgICogQHBhcmFtIGRhdGFwb2ludHMgLSBUaGUgYXJyYXkgb2YgZGF0YSBwb2ludHMgdG8gZmlsdGVyLlxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBkYXRhIHBvaW50cyB0aGF0IGFyZSBhY3RpdmUuXG4gICAqL1xuICBmaWx0ZXJPdXRJbmFjdGl2ZURhdGFwb2ludHMoZGF0YXBvaW50czogS1BJRGV0YWlsc1tdKTogS1BJRGV0YWlsc1tdIHtcbiAgICByZXR1cm4gZGF0YXBvaW50cy5maWx0ZXIoKGRhdGFwb2ludDogS1BJRGV0YWlscykgPT4gZGF0YXBvaW50Ll9fYWN0aXZlKTtcbiAgfVxuXG4gIGhhc011bHRpcGxlRGF0YXBvaW50cyhkYXRhcG9pbnRzOiBLUElEZXRhaWxzW10pOiBib29sZWFuIHtcbiAgICBjb25zdCBpZHMgPSBkYXRhcG9pbnRzLm1hcChkcCA9PiBkcC5fX3RhcmdldC5pZCk7XG4gICAgcmV0dXJuIGlkcy5sZW5ndGggPiAxO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBtYXAgb2YgYWN0aXZlIGRhdGEgcG9pbnRzIGRldmljZSBJRHMgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIHNlcmllcy5cbiAgICpcbiAgICogRXhhbXBsZSBvdXRwdXQ6XG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogbmV3IE1hcChbXG4gICAqICAgW1xuICAgKiAgICAgXCI4NDQ2NTcyMDJcIixcbiAgICogICAgIFtcbiAgICogICAgICAgXCJjOHlfVGVtcGVyYXR1cmUuVFwiXG4gICAqICAgICBdXG4gICAqICAgXSxcbiAgICogICBbXG4gICAqICAgICBcIjMyNjY2NDI3XCIsXG4gICAqICAgICBbXG4gICAqICAgICAgIFwiYzh5X0JhdHRlcnkuQmF0dGVyeVwiXG4gICAqICAgICBdXG4gICAqICAgXVxuICAgKiBdKTtcbiAgICogYGBgXG4gICAqIEBwYXJhbSBkYXRhcG9pbnRzIC0gQW4gYXJyYXkgb2YgZGF0YSBwb2ludHMuXG4gICAqIEByZXR1cm5zIEEgbWFwIHdoZXJlIHRoZSBrZXkgaXMgdGhlIGRhdGEgcG9pbnQgSUQgYW5kIHRoZSB2YWx1ZSBpcyBhbiBhcnJheSBvZiBkYXRhIHBvaW50IHNlcmllcy5cbiAgICovXG4gIGdyb3VwU2VyaWVzQnlEZXZpY2VJZChhY3RpdmVEYXRhcG9pbnRzOiBLUElEZXRhaWxzW10pOiBEYXRhcG9pbnRzVmFsdWVzRGF0YU1hcCB7XG4gICAgcmV0dXJuIGFjdGl2ZURhdGFwb2ludHMucmVkdWNlKFxuICAgICAgKG1hcDogRGF0YXBvaW50c1ZhbHVlc0RhdGFNYXAsIHsgZnJhZ21lbnQsIHNlcmllcywgX190YXJnZXQ6IHsgaWQgfSB9OiBLUElEZXRhaWxzKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gYCR7ZnJhZ21lbnR9LiR7c2VyaWVzfWA7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nVmFsdWUgPSBtYXAuZ2V0KGlkKSA/PyBbXTtcbiAgICAgICAgbWFwLnNldChpZCwgWy4uLmV4aXN0aW5nVmFsdWUsIHZhbHVlXSk7XG4gICAgICAgIHJldHVybiBtYXA7XG4gICAgICB9LFxuICAgICAgbmV3IE1hcDxTb3VyY2VJZCwgc3RyaW5nW10+KClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgYWN0aXZlIGRhdGEgcG9pbnRzIHNlcmllcyBkYXRhIGFuZCByZXR1cm5zIGl0IGFzIGEgbWFwLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YXBvaW50c1ZhbHVlc0RhdGFNYXAgLSBBIG1hcCBvZiBkYXRhIHBvaW50IHNvdXJjZXMgd2l0aCB0aGVpciBhc3NvY2lhdGVkIHNlcmllcy5cbiAgICogQHBhcmFtIGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBkYXRhIHBvaW50cyB0YWJsZS5cbiAgICogQHBhcmFtIHJvdW5kU2Vjb25kcyAtIFdoZXRoZXIgdG8gcm91bmQgdGhlIHNlY29uZHMgb3Igbm90LlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgSWYgdHJ1ZSwgdGhlIHNlY29uZHMgd2lsbCBiZSByb3VuZGVkIHRvIDAuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBJZiBmYWxzZSwgdGhlIHNlY29uZHMgd2lsbCBiZSBkaXNwbGF5ZWQgYXMgdGhleSBhcmUuXG4gICAqIEByZXR1cm5zIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgTWFwIG9iamVjdCB3aXRoIGRhdGEgcG9pbnQgSURzIGFzIGtleXMgYW5kIERhdGFPYmplY3QgYXMgdmFsdWVzIG9yIHVuZGVmaW5lZCB3aGVuIGFsbCBzZXJpZXMgaGFzIGZvcmJpZGRlbiBhY2Nlc3MuXG4gICAqL1xuICBhc3luYyBnZXRBbGxBY3RpdmVTZXJpZXNEYXRhTWFwKFxuICAgIGRhdGFwb2ludHNWYWx1ZXNEYXRhTWFwOiBEYXRhcG9pbnRzVmFsdWVzRGF0YU1hcCxcbiAgICBjb25maWc6IERhdGFwb2ludHNUYWJsZUNvbmZpZyxcbiAgICByb3VuZFNlY29uZHM6IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxNYXA8c3RyaW5nIHwgbnVtYmVyLCBJU2VyaWVzPj4ge1xuICAgIGNvbnN0IHByb21pc2VzID0gQXJyYXkuZnJvbShkYXRhcG9pbnRzVmFsdWVzRGF0YU1hcCkubWFwKGFzeW5jIChbc291cmNlLCBzZXJpZXNdKSA9PiB7XG4gICAgICBjb25zdCBwYXJhbXM6IElTZXJpZXNGaWx0ZXIgPSB7XG4gICAgICAgIGRhdGVGcm9tOiBjb25maWcuZGF0ZUZyb20sXG4gICAgICAgIGRhdGVUbzogY29uZmlnLmRhdGVUbyxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBzZXJpZXMsXG4gICAgICAgIGFnZ3JlZ2F0aW9uVHlwZTogY29uZmlnLmFnZ3JlZ2F0aW9uIGFzIGFnZ3JlZ2F0aW9uVHlwZVxuICAgICAgfTtcbiAgICAgIC8vIFRPRE86IGNvbnNpZGVyIGFkZGluZyBhIGNhY2hlIG1lY2hhbmlzbSAtPiBNVE0tNTkyMzNcbiAgICAgIGNvbnN0IHsgZGF0YSwgcmVzIH06IElSZXN1bHQ8SVNlcmllcz4gPSBhd2FpdCB0aGlzLmxvYWRTZXJpZXNEYXRhKHBhcmFtcywgcm91bmRTZWNvbmRzKTtcblxuICAgICAgcmV0dXJuIHsgc291cmNlLCBkYXRhLCByZXMgfTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3VsdHM6IFNlcmllc0RhdGFXaXRoUmVzcG9uc2VbXSA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcblxuICAgIGNvbnN0IGFsbFNlcmllc0hhc0ZvcmJpZGRlbkFjY2VzcyA9IHJlc3VsdHMuZXZlcnkoaXRlbSA9PiBpdGVtLnJlcz8uc3RhdHVzID09PSA0MDMpO1xuICAgIGlmIChhbGxTZXJpZXNIYXNGb3JiaWRkZW5BY2Nlc3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQWNjZXNzIGZvcmJpZGRlbjogQWxsIHNlcmllcyBoYXZlIGEgNDAzIHN0YXR1cyBjb2RlJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyZWRSZXN1bHRzOiBTZXJpZXNEYXRhV2l0aFJlc3BvbnNlW10gPVxuICAgICAgdGhpcy5maWx0ZXJPdXRFbGVtZW50c1dpdGhGb3JiaWRkZW5SZXNwb25zZXMocmVzdWx0cyk7XG5cbiAgICBjb25zdCByZXN1bHRNYXA6IERhdGFwb2ludHNTZXJpZXNEYXRhTWFwID0gbmV3IE1hcDxzdHJpbmcgfCBudW1iZXIsIElTZXJpZXM+KCk7XG4gICAgZmlsdGVyZWRSZXN1bHRzLmZvckVhY2gocmVzdWx0ID0+IHJlc3VsdE1hcC5zZXQocmVzdWx0LnNvdXJjZSwgcmVzdWx0LmRhdGEpKTtcblxuICAgIHJldHVybiByZXN1bHRNYXA7XG4gIH1cblxuICAvKipcbiAgICogQXN5bmNocm9ub3VzbHkgbG9hZHMgc2VyaWVzIGRhdGEgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHBhcmFtZXRlcnMuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGNvbnN0cnVjdHMgYSBmaWx0ZXIgZm9yIHJldHJpZXZpbmcgc2VyaWVzIGRhdGEgd2l0aGluIGEgc3BlY2lmaWVkIGRhdGUgcmFuZ2UsXG4gICAqIGZyb20gYSBzcGVjaWZpYyBzb3VyY2UsIGFuZCBvcHRpb25hbGx5IGFwcGx5aW5nIGFuIGFnZ3JlZ2F0aW9uIHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgbG9hZGluZyBzZXJpZXMgZGF0YSwgaW5jbHVkaW5nIGRhdGUgcmFuZ2UsIHNvdXJjZSwgc2VyaWVzIG5hbWVzLCBhbmQgYWdncmVnYXRpb24gdHlwZS5cbiAgICogQHBhcmFtIHJvdW5kU2Vjb25kcyAtIEluZGljYXRlcyB3aGV0aGVyIHRvIHJvdW5kIHRoZSBzZWNvbmRzIGluIHRoZSBkYXRlIHJhbmdlIHRvIHRoZSBuZWFyZXN0IHdob2xlIG51bWJlci5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gc2VyaWVzIGRhdGEgd3JhcHBlZCBpbiByZXN1bHQgb2JqZWN0LlxuICAgKi9cbiAgLy8gVE9ETzogc2FtZSBtZXRob2QgYXMgaW4gdGhlIGRhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yIHNlcnZpY2UsIHdoZW4gaW50ZWdyYXRpbmcgd2l0aCBpdCAoTVRNLTU5Njg5KSwgcmVtb3ZlIHRoaXMgbWV0aG9kIGFuZCB1c2UgdGhlIG9uZSBmcm9tIHRoZSBzZXJ2aWNlXG4gIGFzeW5jIGxvYWRTZXJpZXNEYXRhKHBhcmFtczogSVNlcmllc0ZpbHRlciwgcm91bmRTZWNvbmRzOiBib29sZWFuKTogUHJvbWlzZTxJUmVzdWx0PElTZXJpZXM+PiB7XG4gICAgY29uc3QgeyBkYXRlRnJvbSwgZGF0ZVRvLCBzb3VyY2UsIHNlcmllcywgYWdncmVnYXRpb25UeXBlIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgZnJvbSA9IHRoaXMuYWRqdXN0RGF0ZShkYXRlRnJvbSwgMCwgcm91bmRTZWNvbmRzKTtcbiAgICBjb25zdCB0byA9IHRoaXMuYWRqdXN0RGF0ZShkYXRlVG8sIDAsIHJvdW5kU2Vjb25kcyk7XG5cbiAgICBjb25zdCBmaWx0ZXI6IElTZXJpZXNGaWx0ZXIgPSB7XG4gICAgICBkYXRlRnJvbTogZnJvbSxcbiAgICAgIGRhdGVUbzogdG8sXG4gICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgIHJldmVydDogdHJ1ZVxuICAgIH07XG5cbiAgICBpZiAoYWdncmVnYXRpb25UeXBlKSB7XG4gICAgICBmaWx0ZXIuYWdncmVnYXRpb25UeXBlID0gYWdncmVnYXRpb25UeXBlO1xuICAgIH1cblxuICAgIC8vIFRPRE86IGl0IGlzIGEgdGVtcG9yYWwgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gdGhlIGJhY2tlbmQsXG4gICAgLy8gd2hlcmUgdGhlIHNlcmllcyB3aXRoIG1vcmUgdGhhbiBvbmUgZG90IGFyZSBpbXBvc3NpYmxlIHRvIHJldHJpZXZlOlxuICAgIC8vIGh0dHBzOi8vY3VtdWxvY2l0eS5hdGxhc3NpYW4ubmV0L2Jyb3dzZS9NVE0tNTkyNzdcbiAgICBjb25zdCBoYXNNb3JlVGhhbk9uZURvdCA9IChzZXJpZXMgYXMgc3RyaW5nW10pLnNvbWUocyA9PiBzLnNwbGl0KCcuJykubGVuZ3RoID4gMik7XG4gICAgaWYgKCFoYXNNb3JlVGhhbk9uZURvdCkge1xuICAgICAgZmlsdGVyLnNlcmllcyA9IHNlcmllcztcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5tZWFzdXJlbWVudFNlcnZpY2UubGlzdFNlcmllcyhmaWx0ZXIpO1xuICB9XG5cbiAgLy8gVE9ETzogc2FtZSBtZXRob2QgYXMgaW4gdGhlIGRhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yIHNlcnZpY2UsIHdoZW4gaW50ZWdyYXRpbmcgd2l0aCBpdCAoTVRNLTU5Njg5KSwgcmVtb3ZlIHRoaXMgbWV0aG9kIGFuZCB1c2UgdGhlIG9uZSBmcm9tIHRoZSBzZXJ2aWNlXG4gIC8vIEludGVncmF0aW9uIHRhc2s6IE1UTS02MDIyMVxuICAvLyBUT0RPOiBDb21wYXJlIGltcGxlbWVudGF0aW9ucy5cbiAgLyoqXG4gICAqIEFkanVzdHMgdGhlIGdpdmVuIGRhdGUgYnkgYWRkaW5nIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbnV0ZXMgYW5kIHNldHRpbmcgc2Vjb25kcyB0byAwLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGJlIGFkanVzdGVkIGluIHN0cmluZyBmb3JtYXQuXG4gICAqIEBwYXJhbSBtaW51dGVzIC0gVGhlIG51bWJlciBvZiBtaW51dGVzIHRvIGFkZCB0byB0aGUgZGF0ZS5cbiAgICogQHBhcmFtIHJvdW5kU2Vjb25kcyAtIFdoZXRoZXIgdG8gcm91bmQgdGhlIHNlY29uZHMgb3Igbm90LlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgSWYgdHJ1ZSwgdGhlIHNlY29uZHMgd2lsbCBiZSByb3VuZGVkIHRvIDAuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBJZiBmYWxzZSwgdGhlIHNlY29uZHMgd2lsbCBiZSBkaXNwbGF5ZWQgYXMgdGhleSBhcmUuXG4gICAqIEByZXR1cm5zIFRoZSBhZGp1c3RlZCBkYXRlIGluIElTTyBzdHJpbmcgZm9ybWF0LlxuICAgKi9cbiAgYWRqdXN0RGF0ZShkYXRlOiBzdHJpbmcgfCBEYXRlLCBtaW51dGVzOiBudW1iZXIsIHJvdW5kU2Vjb25kcyA9IHRydWUpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRhdGVUaW1lID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgaWYgKGlzTmFOKGRhdGVUaW1lLmdldFRpbWUoKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkYXRlJyk7XG4gICAgfVxuXG4gICAgZGF0ZVRpbWUuc2V0VVRDTWludXRlcyhkYXRlVGltZS5nZXRVVENNaW51dGVzKCkgKyBtaW51dGVzKTtcbiAgICBpZiAocm91bmRTZWNvbmRzKSB7XG4gICAgICBkYXRlVGltZS5zZXRVVENTZWNvbmRzKDAsIDApO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRlVGltZS50b0lTT1N0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgRGF0YXBvaW50c1dpdGhWYWx1ZXMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGRhdGFwb2ludHMgYW5kIGRhdGFwb2ludHNTZXJpZXNEYXRhTWFwLlxuICAgKlxuICAgKiBGaW5kcyBhbiBpbmRleCBvZiBhIGN1cnJlbnQgZGF0YSBwb2ludCB3aXRoaW4gc2VyaWVzIG9iamVjdCBhbmQgYmFzZWQgb24gdGhhdCBpbmRleCBmaWx0ZXJzIHZhbHVlcyBhcnJheS5cbiAgICpcbiAgICogQHBhcmFtIGRhdGFwb2ludHMgLSBBbiBhcnJheSBvZiBkYXRhIHBvaW50cy5cbiAgICogQHBhcmFtIGRhdGFwb2ludHNTZXJpZXNEYXRhTWFwIC0gQSBtYXAgY29udGFpbmluZyBzZXJpZXMgZGF0YSBmb3IgZGF0YSBwb2ludHMuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIERhdGFwb2ludHNXaXRoVmFsdWVzLlxuICAgKi9cbiAgZ2V0RGF0YXBvaW50c1dpdGhWYWx1ZXMoXG4gICAgZGF0YXBvaW50czogS1BJRGV0YWlsc1tdLFxuICAgIGRhdGFwb2ludHNTZXJpZXNEYXRhTWFwOiBEYXRhcG9pbnRzU2VyaWVzRGF0YU1hcFxuICApOiBEYXRhcG9pbnRXaXRoVmFsdWVzW10ge1xuICAgIHJldHVybiBkYXRhcG9pbnRzLm1hcCgoZHA6IEtQSURldGFpbHMpID0+IHtcbiAgICAgIGNvbnN0IHNlcmllc0RhdGE6IElTZXJpZXMgPSBkYXRhcG9pbnRzU2VyaWVzRGF0YU1hcC5nZXQoZHAuX190YXJnZXQuaWQpO1xuXG4gICAgICBpZiAoIXNlcmllc0RhdGEpIHtcbiAgICAgICAgcmV0dXJuIHsgLi4uZHAsIHZhbHVlczoge30gfTtcbiAgICAgIH1cblxuICAgICAgLy8gRmluZCBhbiBpbmRleCBvZiBhIGNvcnJlc3BvbmRpbmcgZGF0YXBvaW50IGRhdGEsIHdpdGhpbiBzZXJpZXMgb2JqZWN0LlxuICAgICAgY29uc3QgZGF0YXBvaW50U2VyaWVzQXJyYXlJbmRleCA9IHNlcmllc0RhdGEuc2VyaWVzLmZpbmRJbmRleChcbiAgICAgICAgcyA9PiBzLm5hbWUgPT09IGRwLnNlcmllcyAmJiBzLnR5cGUgPT09IGRwLmZyYWdtZW50XG4gICAgICApO1xuXG4gICAgICBjb25zdCB2YWx1ZXNGaWx0ZXJlZEJ5RGF0YXBvaW50U2VyaWVzQXJyYXlJbmRleDogTWVhc3VyZW1lbnRSYW5nZXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHNlcmllc0RhdGEudmFsdWVzKS5tYXAoKFtrZXksIGFycl0pID0+IFtcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgYXJyLmZpbHRlcigoXywgaW5kZXgpID0+IGluZGV4ID09PSBkYXRhcG9pbnRTZXJpZXNBcnJheUluZGV4KVxuICAgICAgICBdKVxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZHAsXG4gICAgICAgIHNlcmllc1VuaXQ6IHNlcmllc0RhdGEuc2VyaWVzW2RhdGFwb2ludFNlcmllc0FycmF5SW5kZXhdPy51bml0LFxuICAgICAgICB2YWx1ZXM6IHZhbHVlc0ZpbHRlcmVkQnlEYXRhcG9pbnRTZXJpZXNBcnJheUluZGV4XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIGNvbHVtbiBoZWFkZXJzIGZvciB0aGUgZGV2aWNlcyBpbiB0aGUgZGF0YSBwb2ludHMgdGFibGUuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhcG9pbnRzV2l0aFZhbHVlcyAtIEFuIGFycmF5IG9mIGRhdGEgcG9pbnRzLlxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBjb2x1bW4gaGVhZGVycyBmb3IgdGhlIGRldmljZXMuXG4gICAqL1xuICBnZXRDb2x1bW5IZWFkZXJzKGRhdGFwb2ludHNXaXRoVmFsdWVzOiBLUElEZXRhaWxzW10pOiBUYWJsZUNvbHVtbkhlYWRlcltdIHtcbiAgICByZXR1cm4gZGF0YXBvaW50c1dpdGhWYWx1ZXMubWFwKFxuICAgICAgKHsgX190YXJnZXQ6IHsgbmFtZSB9LCBsYWJlbCwgcmVuZGVyVHlwZSwgdW5pdCB9KTogVGFibGVDb2x1bW5IZWFkZXIgPT4ge1xuICAgICAgICByZXR1cm4geyBkZXZpY2VOYW1lOiBuYW1lLCBsYWJlbCwgcmVuZGVyVHlwZSwgdW5pdCB9O1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBtYXBEYXRhcG9pbnRzV2l0aFZhbHVlc1RvTGlzdChkYXRhcG9pbnRzV2l0aFZhbHVlczogRGF0YXBvaW50V2l0aFZhbHVlc1tdKTogRGF0YXBvaW50VGFibGVJdGVtW10ge1xuICAgIHJldHVybiBkYXRhcG9pbnRzV2l0aFZhbHVlcy5mbGF0TWFwKGRwID0+IHtcbiAgICAgIGlmICghZHAudmFsdWVzKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhkcC52YWx1ZXMpLmZsYXRNYXAoKFtkYXRlLCB2YWx1ZXNBcnJheV0pID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmZpbmRNaW5NYXhWYWx1ZXModmFsdWVzQXJyYXkpO1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRhdGVBbmRUaW1lOiBkYXRlLFxuICAgICAgICAgICAgZGV2aWNlTmFtZTogZHAuX190YXJnZXQubmFtZSxcbiAgICAgICAgICAgIGZyYWdtZW50OiBkcC5mcmFnbWVudCxcbiAgICAgICAgICAgIGxhYmVsOiBkcC5sYWJlbCxcbiAgICAgICAgICAgIHJlZFJhbmdlTWF4OiBkcC5yZWRSYW5nZU1heCxcbiAgICAgICAgICAgIHJlZFJhbmdlTWluOiBkcC5yZWRSYW5nZU1pbixcbiAgICAgICAgICAgIHJlbmRlclR5cGU6IGRwLnJlbmRlclR5cGUsXG4gICAgICAgICAgICBzZXJpZXM6IGRwLnNlcmllcyxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIHllbGxvd1JhbmdlTWF4OiBkcC55ZWxsb3dSYW5nZU1heCxcbiAgICAgICAgICAgIHllbGxvd1JhbmdlTWluOiBkcC55ZWxsb3dSYW5nZU1pblxuICAgICAgICAgIH1cbiAgICAgICAgXTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSBvdmVyYWxsIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIGZyb20gYW4gYXJyYXkgb2Ygb2JqZWN0cyBjb250YWluaW5nICdtaW4nIGFuZCAnbWF4JyBwcm9wZXJ0aWVzLlxuICAgKlxuICAgKiBJZiB0aGUgYXJyYXkgY29udGFpbnMgb25seSBvbmUgb2JqZWN0LCB0aGF0IG9iamVjdCdzICdtaW4nIGFuZCAnbWF4JyB2YWx1ZXMgd2lsbCBiZSByZXR1cm5lZC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlc0FycmF5IC0gQW4gYXJyYXkgd2l0aCBvYmplY3RzLCB3aGVyZSBlYWNoIGNvbnRhaW5zICdtaW4nIGFuZCAnbWF4JyBwcm9wZXJ0aWVzLlxuICAgKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCB0aGUgc21hbGxlc3QgJ21pbicgYW5kIGxhcmdlc3QgJ21heCcgdmFsdWVzIGZvdW5kIGluIHRoZSBhcnJheS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29uc3QgdmFsdWVzID0gW1xuICAgKiAgIHsgbWluOiAxLCBtYXg6IDEwIH1cbiAgICogXTtcbiAgICpcbiAgICogY29uc3QgcmVzdWx0ID0gZmluZE1pbk1heFZhbHVlcyh2YWx1ZXMpO1xuICAgKiAvLyByZXN1bHQgaXMgeyBtaW46IDEsIG1heDogMTAgfVxuICAgKi9cbiAgZmluZE1pbk1heFZhbHVlcyh2YWx1ZXNBcnJheTogTWluTWF4VmFsdWVzW10pOiBWYWx1ZSB8IG51bGwge1xuICAgIGNvbnN0IHZhbGlkSXRlbXMgPSB2YWx1ZXNBcnJheS5maWx0ZXIoXG4gICAgICAoaXRlbSk6IGl0ZW0gaXMgVmFsdWUgPT4gaXRlbSAmJiBpdGVtLm1pbiAhPSBudWxsICYmIGl0ZW0ubWF4ICE9IG51bGxcbiAgICApO1xuXG4gICAgaWYgKHZhbGlkSXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBpbml0aWFsVmFsdWU6IFZhbHVlID0geyBtaW46IHZhbGlkSXRlbXNbMF0ubWluLCBtYXg6IHZhbGlkSXRlbXNbMF0ubWF4IH07XG5cbiAgICByZXR1cm4gdmFsaWRJdGVtcy5yZWR1Y2U8VmFsdWU+KFxuICAgICAgKGFjYywgaXRlbSkgPT4gKHtcbiAgICAgICAgbWluOiBNYXRoLm1pbihhY2MubWluLCBpdGVtLm1pbiksXG4gICAgICAgIG1heDogTWF0aC5tYXgoYWNjLm1heCwgaXRlbS5tYXgpXG4gICAgICB9KSxcbiAgICAgIGluaXRpYWxWYWx1ZVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR3JvdXBzIGEgbGlzdCBvZiBkYXRhIHBvaW50cyBieSBkYXRlIGFuZCBkZXZpY2UsIGJhc2VkIG9uIGdpdmVuIHJlZmVyZW5jZXMuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhTGlzdCAtIFRoZSBsaXN0IG9mIGRhdGEgcG9pbnRzIHRvIGJlIGdyb3VwZWQuXG4gICAqIEBwYXJhbSByZWZlcmVuY2VzIC0gVGhlIGNvbHVtbiBoZWFkZXJzIHRoYXQgc2VydmUgYXMgcmVmZXJlbmNlcyBmb3IgZ3JvdXBpbmcuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGdyb3VwZWQgZGF0YSBwb2ludHMsIHdoZXJlIGVhY2ggZ3JvdXAgY29ycmVzcG9uZHMgdG8gYSB1bmlxdWUgZGF0ZSBhbmQgZGV2aWNlLlxuICAgKi9cbiAgZ3JvdXBCeURhdGVBbmREZXZpY2UoXG4gICAgZGF0YUxpc3Q6IERhdGFwb2ludFRhYmxlSXRlbVtdLFxuICAgIHJlZmVyZW5jZXM6IFRhYmxlQ29sdW1uSGVhZGVyW11cbiAgKTogR3JvdXBlZERhdGFwb2ludFRhYmxlSXRlbVtdIHtcbiAgICBjb25zdCBtYXAgPSB0aGlzLmdlbmVyYXRlRGF0YVBvaW50TWFwKGRhdGFMaXN0LCByZWZlcmVuY2VzKTtcbiAgICByZXR1cm4gdGhpcy5tZXJnZURhdGFwb2ludHMobWFwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYW5kIHBvcHVsYXRlcyBhIG1hcCB3aXRoIGRhdGEgcG9pbnRzLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIHByb2Nlc3NlcyB0aGUgcHJvdmlkZWQgZGF0YSBwb2ludHMgYW5kIG9yZ2FuaXplcyB0aGVtIGludG8gYSBtYXAgc3RydWN0dXJlXG4gICAqIHdoZXJlIGVhY2gga2V5IGlzIGEgdW5pcXVlIGNvbWJpbmF0aW9uIG9mIGRhdGUgYW5kIGRldmljZSBpZGVudGlmaWVycywgYW5kIHRoZSB2YWx1ZSBpcyBhblxuICAgKiBhcnJheSBvZiBkYXRhIHBvaW50cyAob3IgbnVsbCB2YWx1ZXMpIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGtleS4gVGhpcyBzdHJ1Y3R1cmVkIGRhdGEgaXMgdGhlblxuICAgKiB1c2VkIGluIHRoZSBkYXRhIHBvaW50IHRhYmxlIHRvIHJlbmRlciB0aGUgZGF0YSBhcHByb3ByaWF0ZWx5LlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YUxpc3QgLSBUaGUgbGlzdCBvZiBkYXRhIHBvaW50IHRhYmxlIGl0ZW1zIHRvIGJlIHByb2Nlc3NlZC5cbiAgICogQHBhcmFtIGNvbHVtbnNIZWFkZXJzUmVmZXJlbmNlcyAtIFRoZSBsaXN0IG9mIGNvbHVtbiBoZWFkZXJzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBvcmRlciBhbmQgc3RydWN0dXJlIG9mIHRoZSBtYXAgdmFsdWVzLlxuICAgKiBAcmV0dXJucyBBIG1hcCB3aGVyZSB0aGUga2V5IGlzIGEgZGF0YXBvaW50IGlkZW50aWZpZXIgY29udGFpbmluZyB0aGUgZGF0ZSBhbmQgZGV2aWNlIG5hbWUsIGFuZCB0aGUgdmFsdWUgaXMgYW4gYXJyYXkgb2YgZGF0YSBwb2ludCB0YWJsZSBpdGVtcyBvciBudWxsLlxuICAgKi9cbiAgZ2VuZXJhdGVEYXRhUG9pbnRNYXAoXG4gICAgZGF0YUxpc3Q6IERhdGFwb2ludFRhYmxlSXRlbVtdLFxuICAgIGNvbHVtbnNIZWFkZXJzUmVmZXJlbmNlczogVGFibGVDb2x1bW5IZWFkZXJbXVxuICApOiBEYXRhUG9pbnRzVGFibGVNYXAge1xuICAgIC8vIE1hcCB0byBzdG9yZSB0aGUgZGF0YSBwb2ludHMgaW5kZXhlZCBieSBhIHVuaXF1ZSBpZGVudGlmaWVyLlxuICAgIGNvbnN0IG1hcDogRGF0YVBvaW50c1RhYmxlTWFwID0gbmV3IE1hcDxEYXRhcG9pbnRUYWJsZU1hcEtleSwgKERhdGFwb2ludFRhYmxlSXRlbSB8IG51bGwpW10+KCk7XG5cbiAgICBkYXRhTGlzdC5mb3JFYWNoKG9iaiA9PiB7XG4gICAgICAvLyBHZW5lcmF0ZSBhIHVuaXF1ZSBpZGVudGlmaWVyIGZvciBlYWNoIGRhdGEgcG9pbnQgdXNpbmcgdGhlIGRhdGUgYW5kIGRldmljZSBuYW1lLlxuICAgICAgY29uc3QgZGF0ZUtleSA9IHRoaXMudG9JU09Gb3JtYXQob2JqLmRhdGVBbmRUaW1lKTtcbiAgICAgIGNvbnN0IGRhdGFwb2ludElkZW50aWZpZXI6IERhdGFwb2ludFRhYmxlTWFwS2V5ID0gYCR7ZGF0ZUtleX1fJHtvYmouZGV2aWNlTmFtZX1gO1xuXG4gICAgICAvLyBJbml0aWFsaXplIHRoZSBtYXAgZW50cnkgaWYgaXQgZG9lcyBub3QgZXhpc3Qgd2l0aCBhIHVuaXF1ZSBpZGVudGlmaWVyLlxuICAgICAgaWYgKCFtYXAuaGFzKGRhdGFwb2ludElkZW50aWZpZXIpKSB7XG4gICAgICAgIG1hcC5zZXQoZGF0YXBvaW50SWRlbnRpZmllciwgQXJyYXkoY29sdW1uc0hlYWRlcnNSZWZlcmVuY2VzLmxlbmd0aCkuZmlsbChudWxsKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEZpbmQgdGhlIGluZGV4IG9mIHRoZSByZWZlcmVuY2UgdGhhdCBtYXRjaGVzIHRoZSBjdXJyZW50IGRhdGEgcG9pbnQuXG4gICAgICBjb25zdCBtYXRjaGluZ0NvbHVtbkluZGV4ID0gY29sdW1uc0hlYWRlcnNSZWZlcmVuY2VzLmZpbmRJbmRleChcbiAgICAgICAgcmVmID0+IHJlZi5kZXZpY2VOYW1lID09PSBvYmouZGV2aWNlTmFtZSAmJiByZWYubGFiZWwgPT09IG9iai5sYWJlbFxuICAgICAgKTtcblxuICAgICAgLy8gVXBkYXRlIHRoZSBtYXAgZW50cnkgd2l0aCB0aGUgZGF0YSBwb2ludC5cbiAgICAgIGNvbnN0IHRhYmxlSXRlbTogRGF0YXBvaW50VGFibGVJdGVtW10gPSBtYXAuZ2V0KGRhdGFwb2ludElkZW50aWZpZXIpO1xuICAgICAgaWYgKHRhYmxlSXRlbSkge1xuICAgICAgICB0YWJsZUl0ZW1bbWF0Y2hpbmdDb2x1bW5JbmRleF0gPSB7IC4uLm9iaiB9O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1hcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXJnZXMgdGhlIGRhdGEgcG9pbnRzIGZyb20gdGhlIGdpdmVuIG1hcCBpbnRvIGFuIGFycmF5IG9mIGdyb3VwZWQgZGF0YSBwb2ludCB0YWJsZSBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIG1hcCAtIFRoZSBtYXAgY29udGFpbmluZyB0aGUgZGF0YSBwb2ludHMgdG8gYmUgbWVyZ2VkLlxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBncm91cGVkIGRhdGEgcG9pbnQgdGFibGUgaXRlbXMuXG4gICAqL1xuICBtZXJnZURhdGFwb2ludHMobWFwOiBEYXRhUG9pbnRzVGFibGVNYXApOiBHcm91cGVkRGF0YXBvaW50VGFibGVJdGVtW10ge1xuICAgIGNvbnN0IG1lcmdlZERhdGE6IEdyb3VwZWREYXRhcG9pbnRUYWJsZUl0ZW1bXSA9IFtdO1xuXG4gICAgbWFwLmZvckVhY2goKHZhbHVlcywgZGF0YXBvaW50SWRlbnRpZmllcikgPT4ge1xuICAgICAgY29uc3QgW2RhdGVLZXksIGRldmljZU5hbWVdID0gZGF0YXBvaW50SWRlbnRpZmllci5zcGxpdCgnXycpO1xuICAgICAgY29uc3QgdmFsaWREYXRhUG9pbnQgPSB2YWx1ZXMuc29tZShpdGVtID0+IGl0ZW0gJiYgT2JqZWN0LmtleXMoaXRlbS52YWx1ZSkubGVuZ3RoID4gMCk7XG5cbiAgICAgIGlmICh2YWxpZERhdGFQb2ludCkge1xuICAgICAgICBtZXJnZWREYXRhLnB1c2goe1xuICAgICAgICAgIGRhdGVBbmRUaW1lOiBkYXRlS2V5LFxuICAgICAgICAgIGRldmljZU5hbWU6IGRldmljZU5hbWUsXG4gICAgICAgICAgcm93SXRlbXM6IHZhbHVlcy5tYXAoaXRlbSA9PiAoaXRlbSA/IHsgLi4uaXRlbSB9IDogbnVsbCkpXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1lcmdlZERhdGE7XG4gIH1cblxuICBzb3J0RGF0YUJ5RGF0ZURlc2NlbmRpbmcoZGF0YTogR3JvdXBlZERhdGFwb2ludFRhYmxlSXRlbVtdKTogR3JvdXBlZERhdGFwb2ludFRhYmxlSXRlbVtdIHtcbiAgICByZXR1cm4gZGF0YS5zb3J0KFxuICAgICAgKGEsIGIpID0+IG5ldyBEYXRlKGIuZGF0ZUFuZFRpbWUpLmdldFRpbWUoKSAtIG5ldyBEYXRlKGEuZGF0ZUFuZFRpbWUpLmdldFRpbWUoKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZXMgdGhlIHVwZGF0ZWQgdGltZSByYW5nZSBiYXNlZCBvbiB0aGUgc2VsZWN0ZWQgaW50ZXJ2YWwuXG4gICAqXG4gICAqIEluIGNhc2Ugb2YgYSAnY3VzdG9tJyBpbnRlcnZhbCBvciBubyBxdWFudGl0eSwgdGhlIG9yaWdpbmFsIGRhdGUgcmFuZ2UgaXMgcmV0dXJuZWQuXG4gICAqXG4gICAqIEBwYXJhbSBpbnRlcnZhbCAtIFRoZSBzZWxlY3RlZCBpbnRlcnZhbCB0eXBlLlxuICAgKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgYGRhdGVGcm9tYCBhbmQgYGRhdGVUb2AgaW4gSVNPIHN0cmluZyBmb3JtYXQuXG4gICAqL1xuICBwcmVwYXJlVGltZVJhbmdlKFxuICAgIGludGVydmFsOiBUaW1lUmFuZ2VJbnRlcnZhbCxcbiAgICBkYXRlRnJvbUlucHV0OiBzdHJpbmcsXG4gICAgZGF0ZVRvSW5wdXQ6IHN0cmluZ1xuICApOiB7IGRhdGVGcm9tOiBzdHJpbmc7IGRhdGVUbzogc3RyaW5nIH0ge1xuICAgIGlmICghaW50ZXJ2YWwgfHwgaW50ZXJ2YWwgPT09IFRJTUVfUkFOR0VfSU5URVJWQUxfVU5JVFNfVkFMVUVTLmN1c3RvbSkge1xuICAgICAgcmV0dXJuIHsgZGF0ZUZyb206IGRhdGVGcm9tSW5wdXQsIGRhdGVUbzogZGF0ZVRvSW5wdXQgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzZWxlY3RlZDogRHVyYXRpb24gPSBEVVJBVElPTl9PUFRJT05TLmZpbmQoXG4gICAgICBzZWxlY3RlZER1cmF0aW9uID0+IHNlbGVjdGVkRHVyYXRpb24uaWQgPT09IGludGVydmFsXG4gICAgKTtcblxuICAgIGlmICghc2VsZWN0ZWQ/LmFtb3VudCkge1xuICAgICAgcmV0dXJuIHsgZGF0ZUZyb206IGRhdGVGcm9tSW5wdXQsIGRhdGVUbzogZGF0ZVRvSW5wdXQgfTtcbiAgICB9XG5cbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGVGcm9tOiB0aGlzLnN1YnRyYWN0VGltZShub3csIHNlbGVjdGVkLmFtb3VudCwgc2VsZWN0ZWQudW5pdCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGRhdGVUbzogbm93LnRvSVNPU3RyaW5nKClcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN1YnRyYWN0cyBhbiBhbW91bnQgb2YgdGltZSBmcm9tIGEgZ2l2ZW4gZGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIGRhdGUgLSBUaGUgb3JpZ2luYWwgZGF0ZS5cbiAgICogQHBhcmFtIGFtb3VudCAtIFRoZSBhbW91bnQgb2YgdGltZSB1bml0cyB0byBzdWJ0cmFjdC5cbiAgICogQHBhcmFtIHVuaXQgLSBUaGUgdW5pdCBvZiB0aW1lIHRvIHN1YnRyYWN0IChlLmcuLCBtaW51dGVzLCBob3VycywgZGF5cywgd2Vla3MsIG1vbnRocykuXG4gICAqIEByZXR1cm5zIEEgbmV3IGRhdGUgd2l0aCB0aGUgc3BlY2lmaWVkIHRpbWUgc3VidHJhY3RlZC5cbiAgICovXG4gIHN1YnRyYWN0VGltZShkYXRlOiBEYXRlLCBhbW91bnQ6IG51bWJlciwgdW5pdDogc3RyaW5nKTogRGF0ZSB7XG4gICAgY29uc3QgbmV3RGF0ZSA9IG5ldyBEYXRlKGRhdGUpO1xuXG4gICAgc3dpdGNoICh1bml0KSB7XG4gICAgICBjYXNlIFRJTUVfUkFOR0VfSU5URVJWQUxfVU5JVFNfVkFMVUVTLm1pbnV0ZXM6XG4gICAgICAgIG5ld0RhdGUuc2V0VVRDTWludXRlcyhuZXdEYXRlLmdldFVUQ01pbnV0ZXMoKSAtIGFtb3VudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUSU1FX1JBTkdFX0lOVEVSVkFMX1VOSVRTX1ZBTFVFUy5ob3VyczpcbiAgICAgICAgbmV3RGF0ZS5zZXRVVENIb3VycyhuZXdEYXRlLmdldFVUQ0hvdXJzKCkgLSBhbW91bnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVElNRV9SQU5HRV9JTlRFUlZBTF9VTklUU19WQUxVRVMuZGF5czpcbiAgICAgICAgbmV3RGF0ZS5zZXRVVENEYXRlKG5ld0RhdGUuZ2V0VVRDRGF0ZSgpIC0gYW1vdW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFRJTUVfUkFOR0VfSU5URVJWQUxfVU5JVFNfVkFMVUVTLndlZWtzOlxuICAgICAgICBuZXdEYXRlLnNldFVUQ0RhdGUobmV3RGF0ZS5nZXRVVENEYXRlKCkgLSBhbW91bnQgKiA3KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFRJTUVfUkFOR0VfSU5URVJWQUxfVU5JVFNfVkFMVUVTLm1vbnRoczpcbiAgICAgICAgdGhpcy5zdWJ0cmFjdE1vbnRoc0FuZEFkanVzdERheShuZXdEYXRlLCBhbW91bnQpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIG5ld0RhdGU7XG4gIH1cblxuICBnZXRTZXJpZXNXaXRob3V0UGVybWlzc2lvblRvUmVhZChcbiAgICBhY3RpdmVEYXRhcG9pbnRzU2VyaWVzRGF0YTogTWFwPHN0cmluZyB8IG51bWJlciwgSVNlcmllcz4gfCB1bmRlZmluZWQsXG4gICAgYWN0aXZlRGF0YXBvaW50c0lkc1dpdGhTZXJpZXM6IERhdGFwb2ludHNWYWx1ZXNEYXRhTWFwXG4gICk6IHsga2V5OiBTb3VyY2VJZDsgdmFsdWU6IHN0cmluZ1tdIH1bXSB7XG4gICAgaWYgKCFhY3RpdmVEYXRhcG9pbnRzU2VyaWVzRGF0YSkge1xuICAgICAgLy8gUmV0dXJucyBhbGwgYWN0aXZlRGF0YXBvaW50c0lkc1dpdGhTZXJpZXMgZW50cmllcyBpZiBhY3RpdmVEYXRhcG9pbnRzU2VyaWVzRGF0YSBpcyB1bmRlZmluZWQuXG4gICAgICAvLyBJdCBtZWFucyB0aGF0IHRoZSB1c2VyIGRvZXMgbm90IGhhdmUgcGVybWlzc2lvbiB0byBzZWUgYW55IG9mIHRoZSBzZWxlY3RlZCBkYXRhcG9pbnRzIGRhdGEuXG4gICAgICByZXR1cm4gQXJyYXkuZnJvbShhY3RpdmVEYXRhcG9pbnRzSWRzV2l0aFNlcmllcywgbWFwVG9Tb3VyY2VWYWx1ZU9iamVjdCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXZhaWxhYmxlU291cmNlcyA9IG5ldyBTZXQoYWN0aXZlRGF0YXBvaW50c1Nlcmllc0RhdGEua2V5cygpKTtcblxuICAgIHJldHVybiBBcnJheS5mcm9tKGFjdGl2ZURhdGFwb2ludHNJZHNXaXRoU2VyaWVzKVxuICAgICAgLmZpbHRlcigoW3NvdXJjZV0pID0+ICFhdmFpbGFibGVTb3VyY2VzLmhhcyhzb3VyY2UpKVxuICAgICAgLm1hcChtYXBUb1NvdXJjZVZhbHVlT2JqZWN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIGRhdGUgc3RyaW5nIHRvIElTTyBmb3JtYXQuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRlU3RyIC0gVGhlIGRhdGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAqIEByZXR1cm5zIFRoZSBJU08gZm9ybWF0IG9mIHRoZSBnaXZlbiBkYXRlIHN0cmluZy5cbiAgICovXG4gIHByaXZhdGUgdG9JU09Gb3JtYXQoZGF0ZVN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IERhdGUoZGF0ZVN0cikudG9JU09TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgZmlsdGVyT3V0RWxlbWVudHNXaXRoRm9yYmlkZGVuUmVzcG9uc2VzKFxuICAgIHNlcmllc0RhdGFXaXRoUmVzcG9uc2U6IFNlcmllc0RhdGFXaXRoUmVzcG9uc2VbXVxuICApOiBTZXJpZXNEYXRhV2l0aFJlc3BvbnNlW10ge1xuICAgIHJldHVybiBzZXJpZXNEYXRhV2l0aFJlc3BvbnNlLmZpbHRlcihpdGVtID0+IHtcbiAgICAgIHJldHVybiAhKGl0ZW0ucmVzPy5zdGF0dXMgPT09IDQwMyk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHN1YnRyYWN0TW9udGhzQW5kQWRqdXN0RGF5KGRhdGU6IERhdGUsIG1vbnRoc1RvU3VidHJhY3Q6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRNb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICBjb25zdCBleHBlY3RlZFRhcmdldE1vbnRoID0gdGhpcy5jYWxjdWxhdGVUYXJnZXRNb250aChjdXJyZW50TW9udGgsIG1vbnRoc1RvU3VidHJhY3QpO1xuXG4gICAgZGF0ZS5zZXRVVENNb250aChjdXJyZW50TW9udGggLSBtb250aHNUb1N1YnRyYWN0KTtcblxuICAgIGNvbnN0IGFjdHVhbE1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIGNvbnN0IGRheURvZXNOb3RFeGlzdEluVGFyZ2V0TW9udGggPSBhY3R1YWxNb250aCAhPT0gZXhwZWN0ZWRUYXJnZXRNb250aDtcblxuICAgIGlmIChkYXlEb2VzTm90RXhpc3RJblRhcmdldE1vbnRoKSB7XG4gICAgICB0aGlzLnNldFRvTGFzdERheU9mUHJldmlvdXNNb250aChkYXRlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgdGFyZ2V0IG1vbnRoIG51bWJlciAoMC0xMSkgYWZ0ZXIgc3VidHJhY3RpbmcgbW9udGhzIGZyb20gdGhlIGN1cnJlbnQgbW9udGguXG4gICAqIEhhbmRsZXMgbmVnYXRpdmUgbW9udGggbnVtYmVycyBieSBub3JtYWxpemluZyB0aGVtIHRvIHRoZSB2YWxpZCAwLTExIHJhbmdlLlxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICogLSBKYW51YXJ5KDApIC0gMSBtb250aCA9IERlY2VtYmVyKDExKVxuICAgKiAtIE1hcmNoKDIpIC0gNCBtb250aHMgPSBOb3ZlbWJlcigxMClcbiAgICogLSBEZWNlbWJlcigxMSkgLSAxIG1vbnRoID0gTm92ZW1iZXIoMTApXG4gICAqXG4gICAqIEBwYXJhbSBjdXJyZW50TW9udGggLSBDdXJyZW50IG1vbnRoICgwLTExLCB3aGVyZSAwIGlzIEphbnVhcnkpXG4gICAqIEBwYXJhbSBtb250aHNUb1N1YnRyYWN0IC0gTnVtYmVyIG9mIG1vbnRocyB0byBzdWJ0cmFjdFxuICAgKiBAcmV0dXJucyBOb3JtYWxpemVkIG1vbnRoIG51bWJlciBpbiByYW5nZSAwLTExXG4gICAqL1xuICBwcml2YXRlIGNhbGN1bGF0ZVRhcmdldE1vbnRoKGN1cnJlbnRNb250aDogbnVtYmVyLCBtb250aHNUb1N1YnRyYWN0OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiAoY3VycmVudE1vbnRoIC0gbW9udGhzVG9TdWJ0cmFjdCArIDEyKSAlIDEyO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGRhdGUgdG8gdGhlIGxhc3QgZGF5IG9mIHRoZSBwcmV2aW91cyBtb250aC5cbiAgICogVXNpbmcgMCBhcyBkYXRlVmFsdWUgbWFrZXMgSmF2YVNjcmlwdCBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZVxuICAgKiBsYXN0IGRheSBvZiBwcmV2aW91cyBtb250aCwgcGVyIEphdmFTY3JpcHQgRGF0ZSBBUEkgYmVoYXZpb3IuXG4gICAqIEBwYXJhbSBkYXRlIC0gRGF0ZSB0byBtb2RpZnlcbiAgICovXG4gIHByaXZhdGUgc2V0VG9MYXN0RGF5T2ZQcmV2aW91c01vbnRoKGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBkYXRlLnNldFVUQ0RhdGUoMCk7XG4gIH1cbn1cbiJdfQ==
|
|
381
|
+
}], ctorParameters: () => [{ type: i1.DataFetchingService }] });
|
|
382
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50cy10YWJsZS12aWV3LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi93aWRnZXRzL2ltcGxlbWVudGF0aW9ucy9kYXRhcG9pbnRzLXRhYmxlL2RhdGFwb2ludHMtdGFibGUtdmlldy9kYXRhcG9pbnRzLXRhYmxlLXZpZXcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFDTCxtQkFBbUIsRUFJcEIsTUFBTSxnREFBZ0QsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZUFBZSxFQUFZLE1BQU0scUNBQXFDLENBQUM7QUFDaEYsT0FBTyxFQUNMLGdCQUFnQixFQWFqQixNQUFNLGtDQUFrQyxDQUFDOzs7QUFFMUMsU0FBUyxzQkFBc0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQXVCO0lBSWhFLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDeEIsQ0FBQztBQUtELE1BQU0sT0FBTywwQkFBMEI7SUFDckMsWUFBb0IsbUJBQXdDO1FBQXhDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7SUFBRyxDQUFDO0lBRWhFOzs7OztPQUtHO0lBQ0gsMkJBQTJCLENBQUMsVUFBd0I7UUFDbEQsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBcUIsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxVQUF3QjtRQUM1QyxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqRCxPQUFPLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7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bXBvcnQgeyBJUmVzdWx0LCBJU2VyaWVzLCBJU2VyaWVzRmlsdGVyLCBhZ2dyZWdhdGlvblR5cGUgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBLUElEZXRhaWxzIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9kYXRhcG9pbnQtc2VsZWN0b3InO1xuaW1wb3J0IHtcbiAgRGF0YUZldGNoaW5nU2VydmljZSxcbiAgRGF0YXBvaW50c1ZhbHVlc0RhdGFNYXAsXG4gIE1pbk1heFZhbHVlcyxcbiAgU291cmNlSWRcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvcic7XG5pbXBvcnQgeyBJTlRFUlZBTF9WQUxVRVMsIEludGVydmFsIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9pbnRlcnZhbC1waWNrZXInO1xuaW1wb3J0IHtcbiAgRFVSQVRJT05fT1BUSU9OUyxcbiAgRGF0YVBvaW50c1RhYmxlTWFwLFxuICBEYXRhcG9pbnRUYWJsZUl0ZW0sXG4gIERhdGFwb2ludFRhYmxlTWFwS2V5LFxuICBEYXRhcG9pbnRXaXRoVmFsdWVzLFxuICBEYXRhcG9pbnRzU2VyaWVzRGF0YU1hcCxcbiAgRGF0YXBvaW50c1RhYmxlQ29uZmlnLFxuICBEdXJhdGlvbixcbiAgR3JvdXBlZERhdGFwb2ludFRhYmxlSXRlbSxcbiAgTWVhc3VyZW1lbnRSYW5nZXMsXG4gIFNlcmllc0RhdGFXaXRoUmVzcG9uc2UsXG4gIFRhYmxlQ29sdW1uSGVhZGVyLFxuICBWYWx1ZVxufSBmcm9tICcuLi9kYXRhcG9pbnRzLXRhYmxlLXdpZGdldC5tb2RlbCc7XG5cbmZ1bmN0aW9uIG1hcFRvU291cmNlVmFsdWVPYmplY3QoW2tleSwgdmFsdWVdOiBbU291cmNlSWQsIHN0cmluZ1tdXSk6IHtcbiAga2V5OiBTb3VyY2VJZDtcbiAgdmFsdWU6IHN0cmluZ1tdO1xufSB7XG4gIHJldHVybiB7IGtleSwgdmFsdWUgfTtcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRGF0YXBvaW50c1RhYmxlVmlld1NlcnZpY2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhdGFGZXRjaGluZ1NlcnZpY2U6IERhdGFGZXRjaGluZ1NlcnZpY2UpIHt9XG5cbiAgLyoqXG4gICAqIEZpbHRlcnMgb3V0IGluYWN0aXZlIGRhdGEgcG9pbnRzIGZyb20gdGhlIGdpdmVuIGFycmF5LlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YXBvaW50cyAtIFRoZSBhcnJheSBvZiBkYXRhIHBvaW50cyB0byBmaWx0ZXIuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGRhdGEgcG9pbnRzIHRoYXQgYXJlIGFjdGl2ZS5cbiAgICovXG4gIGZpbHRlck91dEluYWN0aXZlRGF0YXBvaW50cyhkYXRhcG9pbnRzOiBLUElEZXRhaWxzW10pOiBLUElEZXRhaWxzW10ge1xuICAgIHJldHVybiBkYXRhcG9pbnRzLmZpbHRlcigoZGF0YXBvaW50OiBLUElEZXRhaWxzKSA9PiBkYXRhcG9pbnQuX19hY3RpdmUpO1xuICB9XG5cbiAgaGFzTXVsdGlwbGVEYXRhcG9pbnRzKGRhdGFwb2ludHM6IEtQSURldGFpbHNbXSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlkcyA9IGRhdGFwb2ludHMubWFwKGRwID0+IGRwLl9fdGFyZ2V0LmlkKTtcbiAgICByZXR1cm4gaWRzLmxlbmd0aCA+IDE7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIG1hcCBvZiBhY3RpdmUgZGF0YSBwb2ludHMgZGV2aWNlIElEcyB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgc2VyaWVzLlxuICAgKlxuICAgKiBFeGFtcGxlIG91dHB1dDpcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBuZXcgTWFwKFtcbiAgICogICBbXG4gICAqICAgICBcIjg0NDY1NzIwMlwiLFxuICAgKiAgICAgW1xuICAgKiAgICAgICBcImM4eV9UZW1wZXJhdHVyZS5UXCJcbiAgICogICAgIF1cbiAgICogICBdLFxuICAgKiAgIFtcbiAgICogICAgIFwiMzI2NjY0MjdcIixcbiAgICogICAgIFtcbiAgICogICAgICAgXCJjOHlfQmF0dGVyeS5CYXR0ZXJ5XCJcbiAgICogICAgIF1cbiAgICogICBdXG4gICAqIF0pO1xuICAgKiBgYGBcbiAgICogQHBhcmFtIGRhdGFwb2ludHMgLSBBbiBhcnJheSBvZiBkYXRhIHBvaW50cy5cbiAgICogQHJldHVybnMgQSBtYXAgd2hlcmUgdGhlIGtleSBpcyB0aGUgZGF0YSBwb2ludCBJRCBhbmQgdGhlIHZhbHVlIGlzIGFuIGFycmF5IG9mIGRhdGEgcG9pbnQgc2VyaWVzLlxuICAgKi9cbiAgZ3JvdXBTZXJpZXNCeURldmljZUlkKGFjdGl2ZURhdGFwb2ludHM6IEtQSURldGFpbHNbXSk6IERhdGFwb2ludHNWYWx1ZXNEYXRhTWFwIHtcbiAgICByZXR1cm4gYWN0aXZlRGF0YXBvaW50cy5yZWR1Y2UoXG4gICAgICAobWFwOiBEYXRhcG9pbnRzVmFsdWVzRGF0YU1hcCwgeyBmcmFnbWVudCwgc2VyaWVzLCBfX3RhcmdldDogeyBpZCB9IH06IEtQSURldGFpbHMpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBgJHtmcmFnbWVudH0uJHtzZXJpZXN9YDtcbiAgICAgICAgY29uc3QgZXhpc3RpbmdWYWx1ZSA9IG1hcC5nZXQoaWQpID8/IFtdO1xuICAgICAgICBtYXAuc2V0KGlkLCBbLi4uZXhpc3RpbmdWYWx1ZSwgdmFsdWVdKTtcbiAgICAgICAgcmV0dXJuIG1hcDtcbiAgICAgIH0sXG4gICAgICBuZXcgTWFwPFNvdXJjZUlkLCBzdHJpbmdbXT4oKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBhY3RpdmUgZGF0YSBwb2ludHMgc2VyaWVzIGRhdGEgYW5kIHJldHVybnMgaXQgYXMgYSBtYXAuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhcG9pbnRzVmFsdWVzRGF0YU1hcCAtIEEgbWFwIG9mIGRhdGEgcG9pbnQgc291cmNlcyB3aXRoIHRoZWlyIGFzc29jaWF0ZWQgc2VyaWVzLlxuICAgKiBAcGFyYW0gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGRhdGEgcG9pbnRzIHRhYmxlLlxuICAgKiBAcGFyYW0gcm91bmRTZWNvbmRzIC0gV2hldGhlciB0byByb3VuZCB0aGUgc2Vjb25kcyBvciBub3QuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBJZiB0cnVlLCB0aGUgc2Vjb25kcyB3aWxsIGJlIHJvdW5kZWQgdG8gMC5cbiAgICogICAgICAgICAgICAgICAgICAgICAgIElmIGZhbHNlLCB0aGUgc2Vjb25kcyB3aWxsIGJlIGRpc3BsYXllZCBhcyB0aGV5IGFyZS5cbiAgICogQHJldHVybnMgQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBNYXAgb2JqZWN0IHdpdGggZGF0YSBwb2ludCBJRHMgYXMga2V5cyBhbmQgRGF0YU9iamVjdCBhcyB2YWx1ZXMgb3IgdW5kZWZpbmVkIHdoZW4gYWxsIHNlcmllcyBoYXMgZm9yYmlkZGVuIGFjY2Vzcy5cbiAgICovXG4gIGFzeW5jIGdldEFsbEFjdGl2ZVNlcmllc0RhdGFNYXAoXG4gICAgZGF0YXBvaW50c1ZhbHVlc0RhdGFNYXA6IERhdGFwb2ludHNWYWx1ZXNEYXRhTWFwLFxuICAgIGNvbmZpZzogRGF0YXBvaW50c1RhYmxlQ29uZmlnLFxuICAgIHJvdW5kU2Vjb25kczogYm9vbGVhblxuICApOiBQcm9taXNlPE1hcDxzdHJpbmcgfCBudW1iZXIsIElTZXJpZXM+PiB7XG4gICAgY29uc3QgcHJvbWlzZXMgPSBBcnJheS5mcm9tKGRhdGFwb2ludHNWYWx1ZXNEYXRhTWFwKS5tYXAoYXN5bmMgKFtzb3VyY2UsIHNlcmllc10pID0+IHtcbiAgICAgIGNvbnN0IHBhcmFtczogSVNlcmllc0ZpbHRlciA9IHtcbiAgICAgICAgZGF0ZUZyb206IGNvbmZpZy5kYXRlRnJvbSxcbiAgICAgICAgZGF0ZVRvOiBjb25maWcuZGF0ZVRvLFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIHNlcmllcyxcbiAgICAgICAgYWdncmVnYXRpb25UeXBlOiBjb25maWcuYWdncmVnYXRpb24gYXMgYWdncmVnYXRpb25UeXBlXG4gICAgICB9O1xuICAgICAgY29uc3QgeyBkYXRhLCByZXMgfTogSVJlc3VsdDxJU2VyaWVzPiA9IGF3YWl0IHRoaXMuZGF0YUZldGNoaW5nU2VydmljZS5mZXRjaFNlcmllc0RhdGEoXG4gICAgICAgIHBhcmFtcyxcbiAgICAgICAgcm91bmRTZWNvbmRzXG4gICAgICApO1xuXG4gICAgICByZXR1cm4geyBzb3VyY2UsIGRhdGEsIHJlcyB9O1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0czogU2VyaWVzRGF0YVdpdGhSZXNwb25zZVtdID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuXG4gICAgY29uc3QgYWxsU2VyaWVzSGFzRm9yYmlkZGVuQWNjZXNzID0gcmVzdWx0cy5ldmVyeShpdGVtID0+IGl0ZW0ucmVzPy5zdGF0dXMgPT09IDQwMyk7XG4gICAgaWYgKGFsbFNlcmllc0hhc0ZvcmJpZGRlbkFjY2Vzcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBY2Nlc3MgZm9yYmlkZGVuOiBBbGwgc2VyaWVzIGhhdmUgYSA0MDMgc3RhdHVzIGNvZGUnKTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWx0ZXJlZFJlc3VsdHM6IFNlcmllc0RhdGFXaXRoUmVzcG9uc2VbXSA9XG4gICAgICB0aGlzLmZpbHRlck91dEVsZW1lbnRzV2l0aEZvcmJpZGRlblJlc3BvbnNlcyhyZXN1bHRzKTtcblxuICAgIGNvbnN0IHJlc3VsdE1hcDogRGF0YXBvaW50c1Nlcmllc0RhdGFNYXAgPSBuZXcgTWFwPHN0cmluZyB8IG51bWJlciwgSVNlcmllcz4oKTtcbiAgICBmaWx0ZXJlZFJlc3VsdHMuZm9yRWFjaChyZXN1bHQgPT4gcmVzdWx0TWFwLnNldChyZXN1bHQuc291cmNlLCByZXN1bHQuZGF0YSkpO1xuXG4gICAgcmV0dXJuIHJlc3VsdE1hcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIERhdGFwb2ludHNXaXRoVmFsdWVzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBkYXRhcG9pbnRzIGFuZCBkYXRhcG9pbnRzU2VyaWVzRGF0YU1hcC5cbiAgICpcbiAgICogRmluZHMgYW4gaW5kZXggb2YgYSBjdXJyZW50IGRhdGEgcG9pbnQgd2l0aGluIHNlcmllcyBvYmplY3QgYW5kIGJhc2VkIG9uIHRoYXQgaW5kZXggZmlsdGVycyB2YWx1ZXMgYXJyYXkuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhcG9pbnRzIC0gQW4gYXJyYXkgb2YgZGF0YSBwb2ludHMuXG4gICAqIEBwYXJhbSBkYXRhcG9pbnRzU2VyaWVzRGF0YU1hcCAtIEEgbWFwIGNvbnRhaW5pbmcgc2VyaWVzIGRhdGEgZm9yIGRhdGEgcG9pbnRzLlxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBEYXRhcG9pbnRzV2l0aFZhbHVlcy5cbiAgICovXG4gIGdldERhdGFwb2ludHNXaXRoVmFsdWVzKFxuICAgIGRhdGFwb2ludHM6IEtQSURldGFpbHNbXSxcbiAgICBkYXRhcG9pbnRzU2VyaWVzRGF0YU1hcDogRGF0YXBvaW50c1Nlcmllc0RhdGFNYXBcbiAgKTogRGF0YXBvaW50V2l0aFZhbHVlc1tdIHtcbiAgICByZXR1cm4gZGF0YXBvaW50cy5tYXAoKGRwOiBLUElEZXRhaWxzKSA9PiB7XG4gICAgICBjb25zdCBzZXJpZXNEYXRhOiBJU2VyaWVzID0gZGF0YXBvaW50c1Nlcmllc0RhdGFNYXAuZ2V0KGRwLl9fdGFyZ2V0LmlkKTtcblxuICAgICAgaWYgKCFzZXJpZXNEYXRhKSB7XG4gICAgICAgIHJldHVybiB7IC4uLmRwLCB2YWx1ZXM6IHt9IH07XG4gICAgICB9XG5cbiAgICAgIC8vIEZpbmQgYW4gaW5kZXggb2YgYSBjb3JyZXNwb25kaW5nIGRhdGFwb2ludCBkYXRhLCB3aXRoaW4gc2VyaWVzIG9iamVjdC5cbiAgICAgIGNvbnN0IGRhdGFwb2ludFNlcmllc0FycmF5SW5kZXggPSBzZXJpZXNEYXRhLnNlcmllcy5maW5kSW5kZXgoXG4gICAgICAgIHMgPT4gcy5uYW1lID09PSBkcC5zZXJpZXMgJiYgcy50eXBlID09PSBkcC5mcmFnbWVudFxuICAgICAgKTtcblxuICAgICAgY29uc3QgdmFsdWVzRmlsdGVyZWRCeURhdGFwb2ludFNlcmllc0FycmF5SW5kZXg6IE1lYXN1cmVtZW50UmFuZ2VzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3QuZW50cmllcyhzZXJpZXNEYXRhLnZhbHVlcykubWFwKChba2V5LCBhcnJdKSA9PiBbXG4gICAgICAgICAga2V5LFxuICAgICAgICAgIGFyci5maWx0ZXIoKF8sIGluZGV4KSA9PiBpbmRleCA9PT0gZGF0YXBvaW50U2VyaWVzQXJyYXlJbmRleClcbiAgICAgICAgXSlcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmRwLFxuICAgICAgICBzZXJpZXNVbml0OiBzZXJpZXNEYXRhLnNlcmllc1tkYXRhcG9pbnRTZXJpZXNBcnJheUluZGV4XT8udW5pdCxcbiAgICAgICAgdmFsdWVzOiB2YWx1ZXNGaWx0ZXJlZEJ5RGF0YXBvaW50U2VyaWVzQXJyYXlJbmRleFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBjb2x1bW4gaGVhZGVycyBmb3IgdGhlIGRldmljZXMgaW4gdGhlIGRhdGEgcG9pbnRzIHRhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YXBvaW50c1dpdGhWYWx1ZXMgLSBBbiBhcnJheSBvZiBkYXRhIHBvaW50cy5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgY29sdW1uIGhlYWRlcnMgZm9yIHRoZSBkZXZpY2VzLlxuICAgKi9cbiAgZ2V0Q29sdW1uSGVhZGVycyhkYXRhcG9pbnRzV2l0aFZhbHVlczogS1BJRGV0YWlsc1tdKTogVGFibGVDb2x1bW5IZWFkZXJbXSB7XG4gICAgcmV0dXJuIGRhdGFwb2ludHNXaXRoVmFsdWVzLm1hcChcbiAgICAgICh7IF9fdGFyZ2V0OiB7IG5hbWUgfSwgbGFiZWwsIHJlbmRlclR5cGUsIHVuaXQgfSk6IFRhYmxlQ29sdW1uSGVhZGVyID0+IHtcbiAgICAgICAgcmV0dXJuIHsgZGV2aWNlTmFtZTogbmFtZSwgbGFiZWwsIHJlbmRlclR5cGUsIHVuaXQgfTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgbWFwRGF0YXBvaW50c1dpdGhWYWx1ZXNUb0xpc3QoZGF0YXBvaW50c1dpdGhWYWx1ZXM6IERhdGFwb2ludFdpdGhWYWx1ZXNbXSk6IERhdGFwb2ludFRhYmxlSXRlbVtdIHtcbiAgICByZXR1cm4gZGF0YXBvaW50c1dpdGhWYWx1ZXMuZmxhdE1hcChkcCA9PiB7XG4gICAgICBpZiAoIWRwLnZhbHVlcykge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZHAudmFsdWVzKS5mbGF0TWFwKChbZGF0ZSwgdmFsdWVzQXJyYXldKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5maW5kTWluTWF4VmFsdWVzKHZhbHVlc0FycmF5KTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkYXRlQW5kVGltZTogZGF0ZSxcbiAgICAgICAgICAgIGRldmljZU5hbWU6IGRwLl9fdGFyZ2V0Lm5hbWUsXG4gICAgICAgICAgICBmcmFnbWVudDogZHAuZnJhZ21lbnQsXG4gICAgICAgICAgICBsYWJlbDogZHAubGFiZWwsXG4gICAgICAgICAgICByZWRSYW5nZU1heDogZHAucmVkUmFuZ2VNYXgsXG4gICAgICAgICAgICByZWRSYW5nZU1pbjogZHAucmVkUmFuZ2VNaW4sXG4gICAgICAgICAgICByZW5kZXJUeXBlOiBkcC5yZW5kZXJUeXBlLFxuICAgICAgICAgICAgc2VyaWVzOiBkcC5zZXJpZXMsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICB5ZWxsb3dSYW5nZU1heDogZHAueWVsbG93UmFuZ2VNYXgsXG4gICAgICAgICAgICB5ZWxsb3dSYW5nZU1pbjogZHAueWVsbG93UmFuZ2VNaW5cbiAgICAgICAgICB9XG4gICAgICAgIF07XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyB0aGUgb3ZlcmFsbCBtaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcyBmcm9tIGFuIGFycmF5IG9mIG9iamVjdHMgY29udGFpbmluZyAnbWluJyBhbmQgJ21heCcgcHJvcGVydGllcy5cbiAgICpcbiAgICogSWYgdGhlIGFycmF5IGNvbnRhaW5zIG9ubHkgb25lIG9iamVjdCwgdGhhdCBvYmplY3QncyAnbWluJyBhbmQgJ21heCcgdmFsdWVzIHdpbGwgYmUgcmV0dXJuZWQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZXNBcnJheSAtIEFuIGFycmF5IHdpdGggb2JqZWN0cywgd2hlcmUgZWFjaCBjb250YWlucyAnbWluJyBhbmQgJ21heCcgcHJvcGVydGllcy5cbiAgICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggdGhlIHNtYWxsZXN0ICdtaW4nIGFuZCBsYXJnZXN0ICdtYXgnIHZhbHVlcyBmb3VuZCBpbiB0aGUgYXJyYXkuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IHZhbHVlcyA9IFtcbiAgICogICB7IG1pbjogMSwgbWF4OiAxMCB9XG4gICAqIF07XG4gICAqXG4gICAqIGNvbnN0IHJlc3VsdCA9IGZpbmRNaW5NYXhWYWx1ZXModmFsdWVzKTtcbiAgICogLy8gcmVzdWx0IGlzIHsgbWluOiAxLCBtYXg6IDEwIH1cbiAgICovXG4gIGZpbmRNaW5NYXhWYWx1ZXModmFsdWVzQXJyYXk6IE1pbk1heFZhbHVlc1tdKTogVmFsdWUgfCBudWxsIHtcbiAgICBjb25zdCB2YWxpZEl0ZW1zID0gdmFsdWVzQXJyYXkuZmlsdGVyKFxuICAgICAgKGl0ZW0pOiBpdGVtIGlzIFZhbHVlID0+IGl0ZW0gJiYgaXRlbS5taW4gIT0gbnVsbCAmJiBpdGVtLm1heCAhPSBudWxsXG4gICAgKTtcblxuICAgIGlmICh2YWxpZEl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgaW5pdGlhbFZhbHVlOiBWYWx1ZSA9IHsgbWluOiB2YWxpZEl0ZW1zWzBdLm1pbiwgbWF4OiB2YWxpZEl0ZW1zWzBdLm1heCB9O1xuXG4gICAgcmV0dXJuIHZhbGlkSXRlbXMucmVkdWNlPFZhbHVlPihcbiAgICAgIChhY2MsIGl0ZW0pID0+ICh7XG4gICAgICAgIG1pbjogTWF0aC5taW4oYWNjLm1pbiwgaXRlbS5taW4pLFxuICAgICAgICBtYXg6IE1hdGgubWF4KGFjYy5tYXgsIGl0ZW0ubWF4KVxuICAgICAgfSksXG4gICAgICBpbml0aWFsVmFsdWVcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyb3VwcyBhIGxpc3Qgb2YgZGF0YSBwb2ludHMgYnkgZGF0ZSBhbmQgZGV2aWNlLCBiYXNlZCBvbiBnaXZlbiByZWZlcmVuY2VzLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YUxpc3QgLSBUaGUgbGlzdCBvZiBkYXRhIHBvaW50cyB0byBiZSBncm91cGVkLlxuICAgKiBAcGFyYW0gcmVmZXJlbmNlcyAtIFRoZSBjb2x1bW4gaGVhZGVycyB0aGF0IHNlcnZlIGFzIHJlZmVyZW5jZXMgZm9yIGdyb3VwaW5nLlxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBncm91cGVkIGRhdGEgcG9pbnRzLCB3aGVyZSBlYWNoIGdyb3VwIGNvcnJlc3BvbmRzIHRvIGEgdW5pcXVlIGRhdGUgYW5kIGRldmljZS5cbiAgICovXG4gIGdyb3VwQnlEYXRlQW5kRGV2aWNlKFxuICAgIGRhdGFMaXN0OiBEYXRhcG9pbnRUYWJsZUl0ZW1bXSxcbiAgICByZWZlcmVuY2VzOiBUYWJsZUNvbHVtbkhlYWRlcltdXG4gICk6IEdyb3VwZWREYXRhcG9pbnRUYWJsZUl0ZW1bXSB7XG4gICAgY29uc3QgbWFwID0gdGhpcy5nZW5lcmF0ZURhdGFQb2ludE1hcChkYXRhTGlzdCwgcmVmZXJlbmNlcyk7XG4gICAgcmV0dXJuIHRoaXMubWVyZ2VEYXRhcG9pbnRzKG1hcCk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGFuZCBwb3B1bGF0ZXMgYSBtYXAgd2l0aCBkYXRhIHBvaW50cy5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgdGhlIHByb3ZpZGVkIGRhdGEgcG9pbnRzIGFuZCBvcmdhbml6ZXMgdGhlbSBpbnRvIGEgbWFwIHN0cnVjdHVyZVxuICAgKiB3aGVyZSBlYWNoIGtleSBpcyBhIHVuaXF1ZSBjb21iaW5hdGlvbiBvZiBkYXRlIGFuZCBkZXZpY2UgaWRlbnRpZmllcnMsIGFuZCB0aGUgdmFsdWUgaXMgYW5cbiAgICogYXJyYXkgb2YgZGF0YSBwb2ludHMgKG9yIG51bGwgdmFsdWVzKSBhc3NvY2lhdGVkIHdpdGggdGhhdCBrZXkuIFRoaXMgc3RydWN0dXJlZCBkYXRhIGlzIHRoZW5cbiAgICogdXNlZCBpbiB0aGUgZGF0YSBwb2ludCB0YWJsZSB0byByZW5kZXIgdGhlIGRhdGEgYXBwcm9wcmlhdGVseS5cbiAgICpcbiAgICogQHBhcmFtIGRhdGFMaXN0IC0gVGhlIGxpc3Qgb2YgZGF0YSBwb2ludCB0YWJsZSBpdGVtcyB0byBiZSBwcm9jZXNzZWQuXG4gICAqIEBwYXJhbSBjb2x1bW5zSGVhZGVyc1JlZmVyZW5jZXMgLSBUaGUgbGlzdCBvZiBjb2x1bW4gaGVhZGVycyB1c2VkIHRvIGRldGVybWluZSB0aGUgb3JkZXIgYW5kIHN0cnVjdHVyZSBvZiB0aGUgbWFwIHZhbHVlcy5cbiAgICogQHJldHVybnMgQSBtYXAgd2hlcmUgdGhlIGtleSBpcyBhIGRhdGFwb2ludCBpZGVudGlmaWVyIGNvbnRhaW5pbmcgdGhlIGRhdGUgYW5kIGRldmljZSBuYW1lLCBhbmQgdGhlIHZhbHVlIGlzIGFuIGFycmF5IG9mIGRhdGEgcG9pbnQgdGFibGUgaXRlbXMgb3IgbnVsbC5cbiAgICovXG4gIGdlbmVyYXRlRGF0YVBvaW50TWFwKFxuICAgIGRhdGFMaXN0OiBEYXRhcG9pbnRUYWJsZUl0ZW1bXSxcbiAgICBjb2x1bW5zSGVhZGVyc1JlZmVyZW5jZXM6IFRhYmxlQ29sdW1uSGVhZGVyW11cbiAgKTogRGF0YVBvaW50c1RhYmxlTWFwIHtcbiAgICAvLyBNYXAgdG8gc3RvcmUgdGhlIGRhdGEgcG9pbnRzIGluZGV4ZWQgYnkgYSB1bmlxdWUgaWRlbnRpZmllci5cbiAgICBjb25zdCBtYXA6IERhdGFQb2ludHNUYWJsZU1hcCA9IG5ldyBNYXA8RGF0YXBvaW50VGFibGVNYXBLZXksIChEYXRhcG9pbnRUYWJsZUl0ZW0gfCBudWxsKVtdPigpO1xuXG4gICAgZGF0YUxpc3QuZm9yRWFjaChvYmogPT4ge1xuICAgICAgLy8gR2VuZXJhdGUgYSB1bmlxdWUgaWRlbnRpZmllciBmb3IgZWFjaCBkYXRhIHBvaW50IHVzaW5nIHRoZSBkYXRlIGFuZCBkZXZpY2UgbmFtZS5cbiAgICAgIGNvbnN0IGRhdGVLZXkgPSB0aGlzLnRvSVNPRm9ybWF0KG9iai5kYXRlQW5kVGltZSk7XG4gICAgICBjb25zdCBkYXRhcG9pbnRJZGVudGlmaWVyOiBEYXRhcG9pbnRUYWJsZU1hcEtleSA9IGAke2RhdGVLZXl9XyR7b2JqLmRldmljZU5hbWV9YDtcblxuICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgbWFwIGVudHJ5IGlmIGl0IGRvZXMgbm90IGV4aXN0IHdpdGggYSB1bmlxdWUgaWRlbnRpZmllci5cbiAgICAgIGlmICghbWFwLmhhcyhkYXRhcG9pbnRJZGVudGlmaWVyKSkge1xuICAgICAgICBtYXAuc2V0KGRhdGFwb2ludElkZW50aWZpZXIsIEFycmF5KGNvbHVtbnNIZWFkZXJzUmVmZXJlbmNlcy5sZW5ndGgpLmZpbGwobnVsbCkpO1xuICAgICAgfVxuXG4gICAgICAvLyBGaW5kIHRoZSBpbmRleCBvZiB0aGUgcmVmZXJlbmNlIHRoYXQgbWF0Y2hlcyB0aGUgY3VycmVudCBkYXRhIHBvaW50LlxuICAgICAgY29uc3QgbWF0Y2hpbmdDb2x1bW5JbmRleCA9IGNvbHVtbnNIZWFkZXJzUmVmZXJlbmNlcy5maW5kSW5kZXgoXG4gICAgICAgIHJlZiA9PiByZWYuZGV2aWNlTmFtZSA9PT0gb2JqLmRldmljZU5hbWUgJiYgcmVmLmxhYmVsID09PSBvYmoubGFiZWxcbiAgICAgICk7XG5cbiAgICAgIC8vIFVwZGF0ZSB0aGUgbWFwIGVudHJ5IHdpdGggdGhlIGRhdGEgcG9pbnQuXG4gICAgICBjb25zdCB0YWJsZUl0ZW06IERhdGFwb2ludFRhYmxlSXRlbVtdID0gbWFwLmdldChkYXRhcG9pbnRJZGVudGlmaWVyKTtcbiAgICAgIGlmICh0YWJsZUl0ZW0pIHtcbiAgICAgICAgdGFibGVJdGVtW21hdGNoaW5nQ29sdW1uSW5kZXhdID0geyAuLi5vYmogfTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBtYXA7XG4gIH1cblxuICAvKipcbiAgICogTWVyZ2VzIHRoZSBkYXRhIHBvaW50cyBmcm9tIHRoZSBnaXZlbiBtYXAgaW50byBhbiBhcnJheSBvZiBncm91cGVkIGRhdGEgcG9pbnQgdGFibGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBtYXAgLSBUaGUgbWFwIGNvbnRhaW5pbmcgdGhlIGRhdGEgcG9pbnRzIHRvIGJlIG1lcmdlZC5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZ3JvdXBlZCBkYXRhIHBvaW50IHRhYmxlIGl0ZW1zLlxuICAgKi9cbiAgbWVyZ2VEYXRhcG9pbnRzKG1hcDogRGF0YVBvaW50c1RhYmxlTWFwKTogR3JvdXBlZERhdGFwb2ludFRhYmxlSXRlbVtdIHtcbiAgICBjb25zdCBtZXJnZWREYXRhOiBHcm91cGVkRGF0YXBvaW50VGFibGVJdGVtW10gPSBbXTtcblxuICAgIG1hcC5mb3JFYWNoKCh2YWx1ZXMsIGRhdGFwb2ludElkZW50aWZpZXIpID0+IHtcbiAgICAgIGNvbnN0IFtkYXRlS2V5LCBkZXZpY2VOYW1lXSA9IGRhdGFwb2ludElkZW50aWZpZXIuc3BsaXQoJ18nKTtcbiAgICAgIGNvbnN0IHZhbGlkRGF0YVBvaW50ID0gdmFsdWVzLnNvbWUoaXRlbSA9PiBpdGVtICYmIE9iamVjdC5rZXlzKGl0ZW0udmFsdWUpLmxlbmd0aCA+IDApO1xuXG4gICAgICBpZiAodmFsaWREYXRhUG9pbnQpIHtcbiAgICAgICAgbWVyZ2VkRGF0YS5wdXNoKHtcbiAgICAgICAgICBkYXRlQW5kVGltZTogZGF0ZUtleSxcbiAgICAgICAgICBkZXZpY2VOYW1lOiBkZXZpY2VOYW1lLFxuICAgICAgICAgIHJvd0l0ZW1zOiB2YWx1ZXMubWFwKGl0ZW0gPT4gKGl0ZW0gPyB7IC4uLml0ZW0gfSA6IG51bGwpKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBtZXJnZWREYXRhO1xuICB9XG5cbiAgc29ydERhdGFCeURhdGVEZXNjZW5kaW5nKGRhdGE6IEdyb3VwZWREYXRhcG9pbnRUYWJsZUl0ZW1bXSk6IEdyb3VwZWREYXRhcG9pbnRUYWJsZUl0ZW1bXSB7XG4gICAgcmV0dXJuIGRhdGEuc29ydChcbiAgICAgIChhLCBiKSA9PiBuZXcgRGF0ZShiLmRhdGVBbmRUaW1lKS5nZXRUaW1lKCkgLSBuZXcgRGF0ZShhLmRhdGVBbmRUaW1lKS5nZXRUaW1lKClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmVzIHRoZSB1cGRhdGVkIHRpbWUgcmFuZ2UgYmFzZWQgb24gdGhlIHNlbGVjdGVkIGludGVydmFsLlxuICAgKlxuICAgKiBJbiBjYXNlIG9mIGEgJ2N1c3RvbScgaW50ZXJ2YWwgb3Igbm8gcXVhbnRpdHksIHRoZSBvcmlnaW5hbCBkYXRlIHJhbmdlIGlzIHJldHVybmVkLlxuICAgKlxuICAgKiBAcGFyYW0gaW50ZXJ2YWwgLSBUaGUgc2VsZWN0ZWQgaW50ZXJ2YWwgdHlwZS5cbiAgICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGBkYXRlRnJvbWAgYW5kIGBkYXRlVG9gIGluIElTTyBzdHJpbmcgZm9ybWF0LlxuICAgKi9cbiAgcHJlcGFyZVRpbWVSYW5nZShcbiAgICBpbnRlcnZhbDogSW50ZXJ2YWxbJ2lkJ10sXG4gICAgZGF0ZUZyb21JbnB1dDogc3RyaW5nLFxuICAgIGRhdGVUb0lucHV0OiBzdHJpbmdcbiAgKTogeyBkYXRlRnJvbTogc3RyaW5nOyBkYXRlVG86IHN0cmluZyB9IHtcbiAgICBpZiAoIWludGVydmFsIHx8IGludGVydmFsID09PSBJTlRFUlZBTF9WQUxVRVMuY3VzdG9tKSB7XG4gICAgICByZXR1cm4geyBkYXRlRnJvbTogZGF0ZUZyb21JbnB1dCwgZGF0ZVRvOiBkYXRlVG9JbnB1dCB9O1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGVjdGVkOiBEdXJhdGlvbiA9IERVUkFUSU9OX09QVElPTlMuZmluZChcbiAgICAgIHNlbGVjdGVkRHVyYXRpb24gPT4gc2VsZWN0ZWREdXJhdGlvbi5pZCA9PT0gaW50ZXJ2YWxcbiAgICApO1xuXG4gICAgaWYgKCFzZWxlY3RlZD8uYW1vdW50KSB7XG4gICAgICByZXR1cm4geyBkYXRlRnJvbTogZGF0ZUZyb21JbnB1dCwgZGF0ZVRvOiBkYXRlVG9JbnB1dCB9O1xuICAgIH1cblxuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0ZUZyb206IHRoaXMuc3VidHJhY3RUaW1lKG5vdywgc2VsZWN0ZWQuYW1vdW50LCBzZWxlY3RlZC51bml0KS50b0lTT1N0cmluZygpLFxuICAgICAgZGF0ZVRvOiBub3cudG9JU09TdHJpbmcoKVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU3VidHJhY3RzIGFuIGFtb3VudCBvZiB0aW1lIGZyb20gYSBnaXZlbiBkYXRlLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0ZSAtIFRoZSBvcmlnaW5hbCBkYXRlLlxuICAgKiBAcGFyYW0gYW1vdW50IC0gVGhlIGFtb3VudCBvZiB0aW1lIHVuaXRzIHRvIHN1YnRyYWN0LlxuICAgKiBAcGFyYW0gdW5pdCAtIFRoZSB1bml0IG9mIHRpbWUgdG8gc3VidHJhY3QgKGUuZy4sIG1pbnV0ZXMsIGhvdXJzLCBkYXlzLCB3ZWVrcywgbW9udGhzKS5cbiAgICogQHJldHVybnMgQSBuZXcgZGF0ZSB3aXRoIHRoZSBzcGVjaWZpZWQgdGltZSBzdWJ0cmFjdGVkLlxuICAgKi9cbiAgc3VidHJhY3RUaW1lKGRhdGU6IERhdGUsIGFtb3VudDogbnVtYmVyLCB1bml0OiBzdHJpbmcpOiBEYXRlIHtcbiAgICBjb25zdCBuZXdEYXRlID0gbmV3IERhdGUoZGF0ZSk7XG5cbiAgICBzd2l0Y2ggKHVuaXQpIHtcbiAgICAgIGNhc2UgSU5URVJWQUxfVkFMVUVTLm1pbnV0ZXM6XG4gICAgICAgIG5ld0RhdGUuc2V0VVRDTWludXRlcyhuZXdEYXRlLmdldFVUQ01pbnV0ZXMoKSAtIGFtb3VudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBJTlRFUlZBTF9WQUxVRVMuaG91cnM6XG4gICAgICAgIG5ld0RhdGUuc2V0VVRDSG91cnMobmV3RGF0ZS5nZXRVVENIb3VycygpIC0gYW1vdW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIElOVEVSVkFMX1ZBTFVFUy5kYXlzOlxuICAgICAgICBuZXdEYXRlLnNldFVUQ0RhdGUobmV3RGF0ZS5nZXRVVENEYXRlKCkgLSBhbW91bnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgSU5URVJWQUxfVkFMVUVTLndlZWtzOlxuICAgICAgICBuZXdEYXRlLnNldFVUQ0RhdGUobmV3RGF0ZS5nZXRVVENEYXRlKCkgLSBhbW91bnQgKiA3KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIElOVEVSVkFMX1ZBTFVFUy5tb250aHM6XG4gICAgICAgIHRoaXMuc3VidHJhY3RNb250aHNBbmRBZGp1c3REYXkobmV3RGF0ZSwgYW1vdW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBuZXdEYXRlO1xuICB9XG5cbiAgZ2V0U2VyaWVzV2l0aG91dFBlcm1pc3Npb25Ub1JlYWQoXG4gICAgYWN0aXZlRGF0YXBvaW50c1Nlcmllc0RhdGE6IE1hcDxzdHJpbmcgfCBudW1iZXIsIElTZXJpZXM+IHwgdW5kZWZpbmVkLFxuICAgIGFjdGl2ZURhdGFwb2ludHNJZHNXaXRoU2VyaWVzOiBEYXRhcG9pbnRzVmFsdWVzRGF0YU1hcFxuICApOiB7IGtleTogU291cmNlSWQ7IHZhbHVlOiBzdHJpbmdbXSB9W10ge1xuICAgIGlmICghYWN0aXZlRGF0YXBvaW50c1Nlcmllc0RhdGEpIHtcbiAgICAgIC8vIFJldHVybnMgYWxsIGFjdGl2ZURhdGFwb2ludHNJZHNXaXRoU2VyaWVzIGVudHJpZXMgaWYgYWN0aXZlRGF0YXBvaW50c1Nlcmllc0RhdGEgaXMgdW5kZWZpbmVkLlxuICAgICAgLy8gSXQgbWVhbnMgdGhhdCB0aGUgdXNlciBkb2VzIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gc2VlIGFueSBvZiB0aGUgc2VsZWN0ZWQgZGF0YXBvaW50cyBkYXRhLlxuICAgICAgcmV0dXJuIEFycmF5LmZyb20oYWN0aXZlRGF0YXBvaW50c0lkc1dpdGhTZXJpZXMsIG1hcFRvU291cmNlVmFsdWVPYmplY3QpO1xuICAgIH1cblxuICAgIGNvbnN0IGF2YWlsYWJsZVNvdXJjZXMgPSBuZXcgU2V0KGFjdGl2ZURhdGFwb2ludHNTZXJpZXNEYXRhLmtleXMoKSk7XG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShhY3RpdmVEYXRhcG9pbnRzSWRzV2l0aFNlcmllcylcbiAgICAgIC5maWx0ZXIoKFtzb3VyY2VdKSA9PiAhYXZhaWxhYmxlU291cmNlcy5oYXMoc291cmNlKSlcbiAgICAgIC5tYXAobWFwVG9Tb3VyY2VWYWx1ZU9iamVjdCk7XG4gIH1cblxuICBoYXNTZWNvbmRzQW5kTWlsbGlzZWNvbmRzRXF1YWxaZXJvKHRpbWVTdHJpbmc6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghdGltZVN0cmluZykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh0aW1lU3RyaW5nKTtcbiAgICBpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGUuZ2V0VVRDU2Vjb25kcygpID09PSAwICYmIGRhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCkgPT09IDA7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBkYXRlIHN0cmluZyB0byBJU08gZm9ybWF0LlxuICAgKlxuICAgKiBAcGFyYW0gZGF0ZVN0ciAtIFRoZSBkYXRlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgKiBAcmV0dXJucyBUaGUgSVNPIGZvcm1hdCBvZiB0aGUgZ2l2ZW4gZGF0ZSBzdHJpbmcuXG4gICAqL1xuICBwcml2YXRlIHRvSVNPRm9ybWF0KGRhdGVTdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGVTdHIpLnRvSVNPU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGZpbHRlck91dEVsZW1lbnRzV2l0aEZvcmJpZGRlblJlc3BvbnNlcyhcbiAgICBzZXJpZXNEYXRhV2l0aFJlc3BvbnNlOiBTZXJpZXNEYXRhV2l0aFJlc3BvbnNlW11cbiAgKTogU2VyaWVzRGF0YVdpdGhSZXNwb25zZVtdIHtcbiAgICByZXR1cm4gc2VyaWVzRGF0YVdpdGhSZXNwb25zZS5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICByZXR1cm4gIShpdGVtLnJlcz8uc3RhdHVzID09PSA0MDMpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJ0cmFjdE1vbnRoc0FuZEFkanVzdERheShkYXRlOiBEYXRlLCBtb250aHNUb1N1YnRyYWN0OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50TW9udGggPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgY29uc3QgZXhwZWN0ZWRUYXJnZXRNb250aCA9IHRoaXMuY2FsY3VsYXRlVGFyZ2V0TW9udGgoY3VycmVudE1vbnRoLCBtb250aHNUb1N1YnRyYWN0KTtcblxuICAgIGRhdGUuc2V0VVRDTW9udGgoY3VycmVudE1vbnRoIC0gbW9udGhzVG9TdWJ0cmFjdCk7XG5cbiAgICBjb25zdCBhY3R1YWxNb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICBjb25zdCBkYXlEb2VzTm90RXhpc3RJblRhcmdldE1vbnRoID0gYWN0dWFsTW9udGggIT09IGV4cGVjdGVkVGFyZ2V0TW9udGg7XG5cbiAgICBpZiAoZGF5RG9lc05vdEV4aXN0SW5UYXJnZXRNb250aCkge1xuICAgICAgdGhpcy5zZXRUb0xhc3REYXlPZlByZXZpb3VzTW9udGgoZGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIHRhcmdldCBtb250aCBudW1iZXIgKDAtMTEpIGFmdGVyIHN1YnRyYWN0aW5nIG1vbnRocyBmcm9tIHRoZSBjdXJyZW50IG1vbnRoLlxuICAgKiBIYW5kbGVzIG5lZ2F0aXZlIG1vbnRoIG51bWJlcnMgYnkgbm9ybWFsaXppbmcgdGhlbSB0byB0aGUgdmFsaWQgMC0xMSByYW5nZS5cbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqIC0gSmFudWFyeSgwKSAtIDEgbW9udGggPSBEZWNlbWJlcigxMSlcbiAgICogLSBNYXJjaCgyKSAtIDQgbW9udGhzID0gTm92ZW1iZXIoMTApXG4gICAqIC0gRGVjZW1iZXIoMTEpIC0gMSBtb250aCA9IE5vdmVtYmVyKDEwKVxuICAgKlxuICAgKiBAcGFyYW0gY3VycmVudE1vbnRoIC0gQ3VycmVudCBtb250aCAoMC0xMSwgd2hlcmUgMCBpcyBKYW51YXJ5KVxuICAgKiBAcGFyYW0gbW9udGhzVG9TdWJ0cmFjdCAtIE51bWJlciBvZiBtb250aHMgdG8gc3VidHJhY3RcbiAgICogQHJldHVybnMgTm9ybWFsaXplZCBtb250aCBudW1iZXIgaW4gcmFuZ2UgMC0xMVxuICAgKi9cbiAgcHJpdmF0ZSBjYWxjdWxhdGVUYXJnZXRNb250aChjdXJyZW50TW9udGg6IG51bWJlciwgbW9udGhzVG9TdWJ0cmFjdDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKGN1cnJlbnRNb250aCAtIG1vbnRoc1RvU3VidHJhY3QgKyAxMikgJSAxMjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBkYXRlIHRvIHRoZSBsYXN0IGRheSBvZiB0aGUgcHJldmlvdXMgbW9udGguXG4gICAqIFVzaW5nIDAgYXMgZGF0ZVZhbHVlIG1ha2VzIEphdmFTY3JpcHQgYXV0b21hdGljYWxseSBjYWxjdWxhdGVcbiAgICogbGFzdCBkYXkgb2YgcHJldmlvdXMgbW9udGgsIHBlciBKYXZhU2NyaXB0IERhdGUgQVBJIGJlaGF2aW9yLlxuICAgKiBAcGFyYW0gZGF0ZSAtIERhdGUgdG8gbW9kaWZ5XG4gICAqL1xuICBwcml2YXRlIHNldFRvTGFzdERheU9mUHJldmlvdXNNb250aChkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgZGF0ZS5zZXRVVENEYXRlKDApO1xuICB9XG59XG4iXX0=
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { gettext } from '@c8y/ngx-components';
|
|
2
|
-
import {
|
|
3
|
-
export const
|
|
2
|
+
import { INTERVAL_VALUES } from '@c8y/ngx-components/interval-picker';
|
|
3
|
+
export const DEFAULT_DPT_REFRESH_INTERVAL_VALUE = 30_000;
|
|
4
4
|
export const DATE_SELECTION_VALUES = {
|
|
5
5
|
// Will be uncommented in MTM-61920
|
|
6
6
|
// dashboard_context: 'dashboard_context',
|
|
@@ -25,12 +25,12 @@ export const RENDER_TYPES_LABELS = {
|
|
|
25
25
|
area: gettext('Area')
|
|
26
26
|
};
|
|
27
27
|
export const INTERVAL_VALUES_ARR = [
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
28
|
+
INTERVAL_VALUES.minutes,
|
|
29
|
+
INTERVAL_VALUES.hours,
|
|
30
|
+
INTERVAL_VALUES.days,
|
|
31
|
+
INTERVAL_VALUES.weeks,
|
|
32
|
+
INTERVAL_VALUES.months,
|
|
33
|
+
INTERVAL_VALUES.custom
|
|
34
34
|
];
|
|
35
35
|
export const TIME_RANGE_INTERVAL_LABELS = {
|
|
36
36
|
minutes: gettext('Last minute'),
|
|
@@ -42,35 +42,35 @@ export const TIME_RANGE_INTERVAL_LABELS = {
|
|
|
42
42
|
};
|
|
43
43
|
export const DURATION_OPTIONS = [
|
|
44
44
|
{
|
|
45
|
-
id:
|
|
45
|
+
id: INTERVAL_VALUES.minutes,
|
|
46
46
|
label: TIME_RANGE_INTERVAL_LABELS.minutes,
|
|
47
|
-
unit:
|
|
47
|
+
unit: INTERVAL_VALUES.minutes,
|
|
48
48
|
amount: 1
|
|
49
49
|
},
|
|
50
50
|
{
|
|
51
|
-
id:
|
|
51
|
+
id: INTERVAL_VALUES.hours,
|
|
52
52
|
label: TIME_RANGE_INTERVAL_LABELS.hours,
|
|
53
|
-
unit:
|
|
53
|
+
unit: INTERVAL_VALUES.hours,
|
|
54
54
|
amount: 1
|
|
55
55
|
},
|
|
56
56
|
{
|
|
57
|
-
id:
|
|
57
|
+
id: INTERVAL_VALUES.days,
|
|
58
58
|
label: TIME_RANGE_INTERVAL_LABELS.days,
|
|
59
|
-
unit:
|
|
59
|
+
unit: INTERVAL_VALUES.days,
|
|
60
60
|
amount: 1
|
|
61
61
|
},
|
|
62
62
|
{
|
|
63
|
-
id:
|
|
63
|
+
id: INTERVAL_VALUES.weeks,
|
|
64
64
|
label: TIME_RANGE_INTERVAL_LABELS.weeks,
|
|
65
|
-
unit:
|
|
65
|
+
unit: INTERVAL_VALUES.weeks,
|
|
66
66
|
amount: 1
|
|
67
67
|
},
|
|
68
68
|
{
|
|
69
|
-
id:
|
|
69
|
+
id: INTERVAL_VALUES.months,
|
|
70
70
|
label: TIME_RANGE_INTERVAL_LABELS.months,
|
|
71
|
-
unit:
|
|
71
|
+
unit: INTERVAL_VALUES.months,
|
|
72
72
|
amount: 1
|
|
73
73
|
},
|
|
74
|
-
{ id:
|
|
74
|
+
{ id: INTERVAL_VALUES.custom, label: TIME_RANGE_INTERVAL_LABELS.custom }
|
|
75
75
|
];
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50cy10YWJsZS13aWRnZXQubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi93aWRnZXRzL2ltcGxlbWVudGF0aW9ucy9kYXRhcG9pbnRzLXRhYmxlL2RhdGFwb2ludHMtdGFibGUtd2lkZ2V0Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBcUIsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFakUsT0FBTyxFQUdMLGdDQUFnQyxFQUdqQyxNQUFNLGdEQUFnRCxDQUFDO0FBRXhELE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLE1BQU0sQ0FBQztBQWtDOUMsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUc7SUFDbkMsbUNBQW1DO0lBQ25DLDBDQUEwQztJQUMxQyxNQUFNLEVBQUUsUUFBUTtJQUNoQixlQUFlLEVBQUUsaUJBQWlCO0NBQzFCLENBQUM7QUFFWCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRztJQUN2QyxtQ0FBbUM7SUFDbkMsMkNBQTJDO0lBQzNDLHFCQUFxQixDQUFDLE1BQU07SUFDNUIscUJBQXFCLENBQUMsZUFBZTtDQUM3QixDQUFDO0FBRVgsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUc7SUFDbkMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBMkI7SUFDakUsZUFBZSxFQUFFLE9BQU8sQ0FBQyxpQ0FBaUMsQ0FBc0M7SUFDaEcsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLHNCQUFzQixDQUEyQjtDQUNwRSxDQUFDO0FBRVgsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFFbkYsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUc7SUFDakMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQWM7SUFDcEMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQWM7SUFDcEMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQVc7Q0FDdkIsQ0FBQztBQUVYLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHO0lBQ2pDLGdDQUFnQyxDQUFDLE9BQU87SUFDeEMsZ0NBQWdDLENBQUMsS0FBSztJQUN0QyxnQ0FBZ0MsQ0FBQyxJQUFJO0lBQ3JDLGdDQUFnQyxDQUFDLEtBQUs7SUFDdEMsZ0NBQWdDLENBQUMsTUFBTTtJQUN2QyxnQ0FBZ0MsQ0FBQyxNQUFNO0NBQy9CLENBQUM7QUFFWCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRztJQUN4QyxPQUFPLEVBQUUsT0FBTyxDQUFDLGFBQWEsQ0FBa0I7SUFDaEQsS0FBSyxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQWdCO0lBQzFDLElBQUksRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFlO0lBQ3ZDLEtBQUssRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFnQjtJQUMxQyxNQUFNLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBaUI7SUFDN0MsTUFBTSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQWE7Q0FDN0IsQ0FBQztBQUVYLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHO0lBQzlCO1FBQ0UsRUFBRSxFQUFFLGdDQUFnQyxDQUFDLE9BQU87UUFDNUMsS0FBSyxFQUFFLDBCQUEwQixDQUFDLE9BQU87UUFDekMsSUFBSSxFQUFFLGdDQUFnQyxDQUFDLE9BQU87UUFDOUMsTUFBTSxFQUFFLENBQUM7S0FDVjtJQUNEO1FBQ0UsRUFBRSxFQUFFLGdDQUFnQyxDQUFDLEtBQUs7UUFDMUMsS0FBSyxFQUFFLDBCQUEwQixDQUFDLEtBQUs7UUFDdkMsSUFBSSxFQUFFLGdDQUFnQyxDQUFDLEtBQUs7UUFDNUMsTUFBTSxFQUFFLENBQUM7S0FDVjtJQUNEO1FBQ0UsRUFBRSxFQUFFLGdDQUFnQyxDQUFDLElBQUk7UUFDekMsS0FBSyxFQUFFLDBCQUEwQixDQUFDLElBQUk7UUFDdEMsSUFBSSxFQUFFLGdDQUFnQyxDQUFDLElBQUk7UUFDM0MsTUFBTSxFQUFFLENBQUM7S0FDVjtJQUNEO1FBQ0UsRUFBRSxFQUFFLGdDQUFnQyxDQUFDLEtBQUs7UUFDMUMsS0FBSyxFQUFFLDBCQUEwQixDQUFDLEtBQUs7UUFDdkMsSUFBSSxFQUFFLGdDQUFnQyxDQUFDLEtBQUs7UUFDNUMsTUFBTSxFQUFFLENBQUM7S0FDVjtJQUNEO1FBQ0UsRUFBRSxFQUFFLGdDQUFnQyxDQUFDLE1BQU07UUFDM0MsS0FBSyxFQUFFLDBCQUEwQixDQUFDLE1BQU07UUFDeEMsSUFBSSxFQUFFLGdDQUFnQyxDQUFDLE1BQU07UUFDN0MsTUFBTSxFQUFFLENBQUM7S0FDVjtJQUNELEVBQUUsRUFBRSxFQUFFLGdDQUFnQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsMEJBQTBCLENBQUMsTUFBTSxFQUFFO0NBQzFGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJRmV0Y2hSZXNwb25zZSwgSVNlcmllcyB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uT3B0aW9uLCBnZXR0ZXh0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBLUElEZXRhaWxzIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9kYXRhcG9pbnQtc2VsZWN0b3InO1xuaW1wb3J0IHtcbiAgTWluTWF4VmFsdWVzLFxuICBTb3VyY2VJZCxcbiAgVElNRV9SQU5HRV9JTlRFUlZBTF9VTklUU19WQUxVRVMsXG4gIFRpbWVSYW5nZUludGVydmFsLFxuICBUaW1lU3RhbXBcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvcic7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0NPVU5URE9XTl9WQUxVRSA9IDMwXzAwMDtcblxuZXhwb3J0IHR5cGUgRGF0YXBvaW50VGFibGVNYXBLZXkgPSBgJHtUaW1lU3RhbXB9XyR7RGV2aWNlTmFtZX1gO1xuLyoqXG4gKiBSZXByZXNlbnRzIGEgbWFwcGluZyB3aGVyZSB0aGUga2V5IGlzIGEgZGF0YXBvaW50IGlkZW50aWZpZXIgY29udGFpbmluZyB0aGUgZGF0ZSBhbmQgZGV2aWNlIG5hbWUsIGFuZCB0aGUgdmFsdWUgaXMgYW4gYXJyYXkgb2YgZGF0YSBwb2ludCB0YWJsZSBpdGVtcyBvciBudWxsLlxuICovXG5leHBvcnQgdHlwZSBEYXRhUG9pbnRzVGFibGVNYXAgPSBNYXA8RGF0YXBvaW50VGFibGVNYXBLZXksIChEYXRhcG9pbnRUYWJsZUl0ZW0gfCBudWxsKVtdPjtcblxudHlwZSBEZXZpY2VOYW1lID0gc3RyaW5nO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBtYXAgb2YgZGF0YXBvaW50cyBzZXJpZXMgZGF0YS5cbiAqIFRoZSBrZXkgb2YgdGhlIG1hcCBpcyBhIHNvdXJjZSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGF0YSBmb3IgcmVxdWVzdGVkIHNlcmllcy5cbiAqL1xuZXhwb3J0IHR5cGUgRGF0YXBvaW50c1Nlcmllc0RhdGFNYXAgPSBNYXA8U291cmNlSWQsIElTZXJpZXM+O1xuLyoqXG4gKiBEZXRlcm1pbmVzIHdoaWNoIHZhbHVlcyB3aWxsIGJlIGRpc3BsYXllZCBhcyB2YWx1ZXMgZm9yIGRhdGFwb2ludHMuXG4gKiBlLmcuIGlmIHVzZXIgY2hvc2UgJ21pbicsIG9ubHkgdGhlIG1pbmltdW0gdmFsdWVzIHdpbGwgYmUgZGlzcGxheWVkLlxuICovXG5leHBvcnQgdHlwZSBSZW5kZXJUeXBlID0ga2V5b2YgdHlwZW9mIFJFTkRFUl9UWVBFU19MQUJFTFM7XG4vKipcbiAqIFJlcHJlc2VudHMgYW4gb2JqZWN0IHdoZXJlIGtleSBpcyBhIHRpbWVzdGFtcCBhbmQgdmFsdWUgaXMgYW4gYXJyYXlcbiAqIHdoZXJlIGZpcnN0IHJlY29yZCBjb250YWlucyBtaW4gYW5kIG1heCB2YWx1ZXMgZm9yIGEgY29ycmVzcG9uZGluZyB0aW1lc3RhbXAuXG4gKi9cbmV4cG9ydCB0eXBlIE1lYXN1cmVtZW50UmFuZ2VzID0ge1xuICBba2V5OiBUaW1lU3RhbXBdOiBBcnJheTxNaW5NYXhWYWx1ZXM+O1xufTtcbi8qKlxuICogUmVwcmVzZW50cyBhIHZhbHVlIG9iamVjdCB3aGVyZSBrZXkgaXMgYW4gb2JqZWN0IHdpdGggbWluIGFuZCBtYXggcHJvcGVydGllcyB3aXRoIGl0cyBjb3JyZXNwb25kaW5nIHZhbHVlcy5cbiAqL1xuZXhwb3J0IHR5cGUgVmFsdWUgPSB7XG4gIFtrZXkgaW4ga2V5b2YgTWluTWF4VmFsdWVzXTogbnVtYmVyO1xufTtcblxuZXhwb3J0IGNvbnN0IERBVEVfU0VMRUNUSU9OX1ZBTFVFUyA9IHtcbiAgLy8gV2lsbCBiZSB1bmNvbW1lbnRlZCBpbiBNVE0tNjE5MjBcbiAgLy8gZGFzaGJvYXJkX2NvbnRleHQ6ICdkYXNoYm9hcmRfY29udGV4dCcsXG4gIGNvbmZpZzogJ2NvbmZpZycsXG4gIHZpZXdfYW5kX2NvbmZpZzogJ3ZpZXdfYW5kX2NvbmZpZydcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBEQVRFX1NFTEVDVElPTl9WQUxVRVNfQVJSID0gW1xuICAvLyBXaWxsIGJlIHVuY29tbWVudGVkIGluIE1UTS02MTkyMFxuICAvLyBEQVRFX1NFTEVDVElPTl9WQUxVRVMuZGFzaGJvYXJkX2NvbnRleHQsXG4gIERBVEVfU0VMRUNUSU9OX1ZBTFVFUy5jb25maWcsXG4gIERBVEVfU0VMRUNUSU9OX1ZBTFVFUy52aWV3X2FuZF9jb25maWdcbl0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBEQVRFX1NFTEVDVElPTl9MQUJFTFMgPSB7XG4gIGNvbmZpZzogZ2V0dGV4dCgnV2lkZ2V0IGNvbmZpZ3VyYXRpb24nKSBhcyAnV2lkZ2V0IGNvbmZpZ3VyYXRpb24nLFxuICB2aWV3X2FuZF9jb25maWc6IGdldHRleHQoJ1dpZGdldCBhbmQgd2lkZ2V0IGNvbmZpZ3VyYXRpb24nKSBhcyAnV2lkZ2V0IGFuZCB3aWRnZXQgY29uZmlndXJhdGlvbicsXG4gIGRhc2hib2FyZF9jb250ZXh0OiBnZXR0ZXh0KCdEYXNoYm9hcmQgdGltZSByYW5nZScpIGFzICdEYXNoYm9hcmQgdGltZSByYW5nZSdcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBSRUZSRVNIX0lOVEVSVkFMX1ZBTFVFU19BUlIgPSBbNV8wMDAsIDEwXzAwMCwgMTVfMDAwLCAzMF8wMDAsIDYwXzAwMF07XG5cbmV4cG9ydCBjb25zdCBSRU5ERVJfVFlQRVNfTEFCRUxTID0ge1xuICBtaW46IGdldHRleHQoJ01pbmltdW0nKSBhcyAnTWluaW11bScsXG4gIG1heDogZ2V0dGV4dCgnTWF4aW11bScpIGFzICdNYXhpbXVtJyxcbiAgYXJlYTogZ2V0dGV4dCgnQXJlYScpIGFzICdBcmVhJ1xufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IElOVEVSVkFMX1ZBTFVFU19BUlIgPSBbXG4gIFRJTUVfUkFOR0VfSU5URVJWQUxfVU5JVFNfVkFMVUVTLm1pbnV0ZXMsXG4gIFRJTUVfUkFOR0VfSU5URVJWQUxfVU5JVFNfVkFMVUVTLmhvdXJzLFxuICBUSU1FX1JBTkdFX0lOVEVSVkFMX1VOSVRTX1ZBTFVFUy5kYXlzLFxuICBUSU1FX1JBTkdFX0lOVEVSVkFMX1VOSVRTX1ZBTFVFUy53ZWVrcyxcbiAgVElNRV9SQU5HRV9JTlRFUlZBTF9VTklUU19WQUxVRVMubW9udGhzLFxuICBUSU1FX1JBTkdFX0lOVEVSVkFMX1VOSVRTX1ZBTFVFUy5jdXN0b21cbl0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBUSU1FX1JBTkdFX0lOVEVSVkFMX0xBQkVMUyA9IHtcbiAgbWludXRlczogZ2V0dGV4dCgnTGFzdCBtaW51dGUnKSBhcyAnTGFzdCBtaW51dGUnLFxuICBob3VyczogZ2V0dGV4dCgnTGFzdCBob3VyJykgYXMgJ0xhc3QgaG91cicsXG4gIGRheXM6IGdldHRleHQoJ0xhc3QgZGF5JykgYXMgJ0xhc3QgZGF5JyxcbiAgd2Vla3M6IGdldHRleHQoJ0xhc3Qgd2VlaycpIGFzICdMYXN0IHdlZWsnLFxuICBtb250aHM6IGdldHRleHQoJ0xhc3QgbW9udGgnKSBhcyAnTGFzdCBtb250aCcsXG4gIGN1c3RvbTogZ2V0dGV4dCgnQ3VzdG9tJykgYXMgJ0N1c3RvbSdcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBEVVJBVElPTl9PUFRJT05TID0gW1xuICB7XG4gICAgaWQ6IFRJTUVfUkFOR0VfSU5URVJWQUxfVU5JVFNfVkFMVUVTLm1pbnV0ZXMsXG4gICAgbGFiZWw6IFRJTUVfUkFOR0VfSU5URVJWQUxfTEFCRUxTLm1pbnV0ZXMsXG4gICAgdW5pdDogVElNRV9SQU5HRV9JTlRFUlZBTF9VTklUU19WQUxVRVMubWludXRlcyxcbiAgICBhbW91bnQ6IDFcbiAgfSxcbiAge1xuICAgIGlkOiBUSU1FX1JBTkdFX0lOVEVSVkFMX1VOSVRTX1ZBTFVFUy5ob3VycyxcbiAgICBsYWJlbDogVElNRV9SQU5HRV9JTlRFUlZBTF9MQUJFTFMuaG91cnMsXG4gICAgdW5pdDogVElNRV9SQU5HRV9JTlRFUlZBTF9VTklUU19WQUxVRVMuaG91cnMsXG4gICAgYW1vdW50OiAxXG4gIH0sXG4gIHtcbiAgICBpZDogVElNRV9SQU5HRV9JTlRFUlZBTF9VTklUU19WQUxVRVMuZGF5cyxcbiAgICBsYWJlbDogVElNRV9SQU5HRV9JTlRFUlZBTF9MQUJFTFMuZGF5cyxcbiAgICB1bml0OiBUSU1FX1JBTkdFX0lOVEVSVkFMX1VOSVRTX1ZBTFVFUy5kYXlzLFxuICAgIGFtb3VudDogMVxuICB9LFxuICB7XG4gICAgaWQ6IFRJTUVfUkFOR0VfSU5URVJWQUxfVU5JVFNfVkFMVUVTLndlZWtzLFxuICAgIGxhYmVsOiBUSU1FX1JBTkdFX0lOVEVSVkFMX0xBQkVMUy53ZWVrcyxcbiAgICB1bml0OiBUSU1FX1JBTkdFX0lOVEVSVkFMX1VOSVRTX1ZBTFVFUy53ZWVrcyxcbiAgICBhbW91bnQ6IDFcbiAgfSxcbiAge1xuICAgIGlkOiBUSU1FX1JBTkdFX0lOVEVSVkFMX1VOSVRTX1ZBTFVFUy5tb250aHMsXG4gICAgbGFiZWw6IFRJTUVfUkFOR0VfSU5URVJWQUxfTEFCRUxTLm1vbnRocyxcbiAgICB1bml0OiBUSU1FX1JBTkdFX0lOVEVSVkFMX1VOSVRTX1ZBTFVFUy5tb250aHMsXG4gICAgYW1vdW50OiAxXG4gIH0sXG4gIHsgaWQ6IFRJTUVfUkFOR0VfSU5URVJWQUxfVU5JVFNfVkFMVUVTLmN1c3RvbSwgbGFiZWw6IFRJTUVfUkFOR0VfSU5URVJWQUxfTEFCRUxTLmN1c3RvbSB9XG5dO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbG9yUmFuZ2VCb3VuZGFyaWVzIHtcbiAgeWVsbG93UmFuZ2VNaW46IG51bWJlcjtcbiAgeWVsbG93UmFuZ2VNYXg6IG51bWJlcjtcbiAgcmVkUmFuZ2VNaW46IG51bWJlcjtcbiAgcmVkUmFuZ2VNYXg6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXRhcG9pbnRXaXRoVmFsdWVzIGV4dGVuZHMgS1BJRGV0YWlscyB7XG4gIHNlcmllc1VuaXQ/OiBzdHJpbmc7XG4gIHZhbHVlczogTWVhc3VyZW1lbnRSYW5nZXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHVyYXRpb24ge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICB1bml0Pzogc3RyaW5nO1xuICBhbW91bnQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVDb2x1bW5IZWFkZXIge1xuICBkZXZpY2VOYW1lOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHJlbmRlclR5cGU6IHN0cmluZztcbiAgdW5pdDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGVSYW5nZSB7XG4gIGRhdGVGcm9tOiBzdHJpbmc7XG4gIGRhdGVUbzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFwb2ludHNUYWJsZUNvbmZpZyB7XG4gIGFnZ3JlZ2F0aW9uPzogQWdncmVnYXRpb25PcHRpb247XG4gIGNvbnRleHQ/OiBudW1iZXI7XG4gIGRhdGFwb2ludHM6IEtQSURldGFpbHNbXTtcbiAgLyoqXG4gICAqIEFycmF5IHRoYXQgY29udGFpbnMgZ2xvYmFsIHRpbWUgY29udGV4dCBkYXRlRnJvbSBhbmQgZGF0ZVRvLlxuICAgKi9cbiAgZGF0ZT86IHN0cmluZ1tdO1xuICBkYXRlRnJvbTogc3RyaW5nO1xuICBkYXRlVG86IHN0cmluZztcbiAgZGVjaW1hbFBsYWNlcz86IG51bWJlcjtcbiAgZGlzcGxheURhdGVTZWxlY3Rpb246IGJvb2xlYW47XG4gIGRpc3BsYXlTZXR0aW5nczoge1xuICAgIGdsb2JhbFRpbWVDb250ZXh0OiBib29sZWFuO1xuICAgIGdsb2JhbFJlYWx0aW1lQ29udGV4dDogYm9vbGVhbjtcbiAgICBnbG9iYWxBZ2dyZWdhdGlvbkNvbnRleHQ6IGJvb2xlYW47XG4gIH07XG4gIGludGVydmFsOiBUaW1lUmFuZ2VJbnRlcnZhbDtcbiAgaXNBdXRvUmVmcmVzaEVuYWJsZWQ6IGJvb2xlYW47XG4gIHJlYWx0aW1lOiBib29sZWFuO1xuICByZWZyZXNoSW50ZXJ2YWw/OiBudW1iZXI7XG4gIHNlbGVjdGVkOiBvYmplY3Q7XG4gIHdpZGdldEluc3RhbmNlR2xvYmFsVGltZUNvbnRleHQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YXBvaW50VGFibGVJdGVtIHtcbiAgZGF0ZUFuZFRpbWU6IHN0cmluZztcbiAgZGV2aWNlTmFtZTogc3RyaW5nO1xuICBmcmFnbWVudDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICByZWRSYW5nZU1heD86IG51bWJlcjtcbiAgcmVkUmFuZ2VNaW4/OiBudW1iZXI7XG4gIHJlbmRlclR5cGU6IHN0cmluZztcbiAgc2VyaWVzOiBzdHJpbmc7XG4gIHZhbHVlOiBWYWx1ZTtcbiAgeWVsbG93UmFuZ2VNYXg/OiBudW1iZXI7XG4gIHllbGxvd1JhbmdlTWluPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwZWREYXRhcG9pbnRUYWJsZUl0ZW0ge1xuICBkYXRlQW5kVGltZTogc3RyaW5nO1xuICBkZXZpY2VOYW1lOiBzdHJpbmc7XG4gIHJvd0l0ZW1zOiAoe1xuICAgIGZyYWdtZW50OiBzdHJpbmc7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICByZWRSYW5nZU1heD86IG51bWJlcjtcbiAgICByZWRSYW5nZU1pbj86IG51bWJlcjtcbiAgICByZW5kZXJUeXBlOiBzdHJpbmc7XG4gICAgc2VyaWVzOiBzdHJpbmc7XG4gICAgdmFsdWU6IFZhbHVlO1xuICAgIHllbGxvd1JhbmdlTWF4PzogbnVtYmVyO1xuICAgIHllbGxvd1JhbmdlTWluPzogbnVtYmVyO1xuICB9IHwgbnVsbClbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXJpZXNEYXRhV2l0aFJlc3BvbnNlIHtcbiAgc291cmNlOiBTb3VyY2VJZDtcbiAgZGF0YTogSVNlcmllcztcbiAgcmVzOiBJRmV0Y2hSZXNwb25zZTtcbn1cbiJdfQ==
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50cy10YWJsZS13aWRnZXQubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi93aWRnZXRzL2ltcGxlbWVudGF0aW9ucy9kYXRhcG9pbnRzLXRhYmxlL2RhdGFwb2ludHMtdGFibGUtd2lkZ2V0Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBcUIsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHakUsT0FBTyxFQUFZLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRWhGLE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFHLE1BQU0sQ0FBQztBQWtDekQsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUc7SUFDbkMsbUNBQW1DO0lBQ25DLDBDQUEwQztJQUMxQyxNQUFNLEVBQUUsUUFBUTtJQUNoQixlQUFlLEVBQUUsaUJBQWlCO0NBQzFCLENBQUM7QUFFWCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRztJQUN2QyxtQ0FBbUM7SUFDbkMsMkNBQTJDO0lBQzNDLHFCQUFxQixDQUFDLE1BQU07SUFDNUIscUJBQXFCLENBQUMsZUFBZTtDQUM3QixDQUFDO0FBRVgsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUc7SUFDbkMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBMkI7SUFDakUsZUFBZSxFQUFFLE9BQU8sQ0FBQyxpQ0FBaUMsQ0FBc0M7SUFDaEcsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLHNCQUFzQixDQUEyQjtDQUNwRSxDQUFDO0FBRVgsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFFbkYsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUc7SUFDakMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQWM7SUFDcEMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQWM7SUFDcEMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQVc7Q0FDdkIsQ0FBQztBQUVYLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHO0lBQ2pDLGVBQWUsQ0FBQyxPQUFPO0lBQ3ZCLGVBQWUsQ0FBQyxLQUFLO0lBQ3JCLGVBQWUsQ0FBQyxJQUFJO0lBQ3BCLGVBQWUsQ0FBQyxLQUFLO0lBQ3JCLGVBQWUsQ0FBQyxNQUFNO0lBQ3RCLGVBQWUsQ0FBQyxNQUFNO0NBQ2QsQ0FBQztBQUVYLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHO0lBQ3hDLE9BQU8sRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFrQjtJQUNoRCxLQUFLLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBZ0I7SUFDMUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQWU7SUFDdkMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQWdCO0lBQzFDLE1BQU0sRUFBRSxPQUFPLENBQUMsWUFBWSxDQUFpQjtJQUM3QyxNQUFNLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBYTtDQUM3QixDQUFDO0FBRVgsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUc7SUFDOUI7UUFDRSxFQUFFLEVBQUUsZUFBZSxDQUFDLE9BQU87UUFDM0IsS0FBSyxFQUFFLDBCQUEwQixDQUFDLE9BQU87UUFDekMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxPQUFPO1FBQzdCLE1BQU0sRUFBRSxDQUFDO0tBQ1Y7SUFDRDtRQUNFLEVBQUUsRUFBRSxlQUFlLENBQUMsS0FBSztRQUN6QixLQUFLLEVBQUUsMEJBQTBCLENBQUMsS0FBSztRQUN2QyxJQUFJLEVBQUUsZUFBZSxDQUFDLEtBQUs7UUFDM0IsTUFBTSxFQUFFLENBQUM7S0FDVjtJQUNEO1FBQ0UsRUFBRSxFQUFFLGVBQWUsQ0FBQyxJQUFJO1FBQ3hCLEtBQUssRUFBRSwwQkFBMEIsQ0FBQyxJQUFJO1FBQ3RDLElBQUksRUFBRSxlQUFlLENBQUMsSUFBSTtRQUMxQixNQUFNLEVBQUUsQ0FBQztLQUNWO0lBQ0Q7UUFDRSxFQUFFLEVBQUUsZUFBZSxDQUFDLEtBQUs7UUFDekIsS0FBSyxFQUFFLDBCQUEwQixDQUFDLEtBQUs7UUFDdkMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxLQUFLO1FBQzNCLE1BQU0sRUFBRSxDQUFDO0tBQ1Y7SUFDRDtRQUNFLEVBQUUsRUFBRSxlQUFlLENBQUMsTUFBTTtRQUMxQixLQUFLLEVBQUUsMEJBQTBCLENBQUMsTUFBTTtRQUN4QyxJQUFJLEVBQUUsZUFBZSxDQUFDLE1BQU07UUFDNUIsTUFBTSxFQUFFLENBQUM7S0FDVjtJQUNELEVBQUUsRUFBRSxFQUFFLGVBQWUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLDBCQUEwQixDQUFDLE1BQU0sRUFBRTtDQUN6RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUZldGNoUmVzcG9uc2UsIElTZXJpZXMgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvbk9wdGlvbiwgZ2V0dGV4dCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgS1BJRGV0YWlscyB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZGF0YXBvaW50LXNlbGVjdG9yJztcbmltcG9ydCB7IE1pbk1heFZhbHVlcywgU291cmNlSWQsIFRpbWVTdGFtcCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3InO1xuaW1wb3J0IHsgSW50ZXJ2YWwsIElOVEVSVkFMX1ZBTFVFUyB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvaW50ZXJ2YWwtcGlja2VyJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfRFBUX1JFRlJFU0hfSU5URVJWQUxfVkFMVUUgPSAzMF8wMDA7XG5cbmV4cG9ydCB0eXBlIERhdGFwb2ludFRhYmxlTWFwS2V5ID0gYCR7VGltZVN0YW1wfV8ke0RldmljZU5hbWV9YDtcbi8qKlxuICogUmVwcmVzZW50cyBhIG1hcHBpbmcgd2hlcmUgdGhlIGtleSBpcyBhIGRhdGFwb2ludCBpZGVudGlmaWVyIGNvbnRhaW5pbmcgdGhlIGRhdGUgYW5kIGRldmljZSBuYW1lLCBhbmQgdGhlIHZhbHVlIGlzIGFuIGFycmF5IG9mIGRhdGEgcG9pbnQgdGFibGUgaXRlbXMgb3IgbnVsbC5cbiAqL1xuZXhwb3J0IHR5cGUgRGF0YVBvaW50c1RhYmxlTWFwID0gTWFwPERhdGFwb2ludFRhYmxlTWFwS2V5LCAoRGF0YXBvaW50VGFibGVJdGVtIHwgbnVsbClbXT47XG5cbnR5cGUgRGV2aWNlTmFtZSA9IHN0cmluZztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgbWFwIG9mIGRhdGFwb2ludHMgc2VyaWVzIGRhdGEuXG4gKiBUaGUga2V5IG9mIHRoZSBtYXAgaXMgYSBzb3VyY2UsIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRhdGEgZm9yIHJlcXVlc3RlZCBzZXJpZXMuXG4gKi9cbmV4cG9ydCB0eXBlIERhdGFwb2ludHNTZXJpZXNEYXRhTWFwID0gTWFwPFNvdXJjZUlkLCBJU2VyaWVzPjtcbi8qKlxuICogRGV0ZXJtaW5lcyB3aGljaCB2YWx1ZXMgd2lsbCBiZSBkaXNwbGF5ZWQgYXMgdmFsdWVzIGZvciBkYXRhcG9pbnRzLlxuICogZS5nLiBpZiB1c2VyIGNob3NlICdtaW4nLCBvbmx5IHRoZSBtaW5pbXVtIHZhbHVlcyB3aWxsIGJlIGRpc3BsYXllZC5cbiAqL1xuZXhwb3J0IHR5cGUgUmVuZGVyVHlwZSA9IGtleW9mIHR5cGVvZiBSRU5ERVJfVFlQRVNfTEFCRUxTO1xuLyoqXG4gKiBSZXByZXNlbnRzIGFuIG9iamVjdCB3aGVyZSBrZXkgaXMgYSB0aW1lc3RhbXAgYW5kIHZhbHVlIGlzIGFuIGFycmF5XG4gKiB3aGVyZSBmaXJzdCByZWNvcmQgY29udGFpbnMgbWluIGFuZCBtYXggdmFsdWVzIGZvciBhIGNvcnJlc3BvbmRpbmcgdGltZXN0YW1wLlxuICovXG5leHBvcnQgdHlwZSBNZWFzdXJlbWVudFJhbmdlcyA9IHtcbiAgW2tleTogVGltZVN0YW1wXTogQXJyYXk8TWluTWF4VmFsdWVzPjtcbn07XG4vKipcbiAqIFJlcHJlc2VudHMgYSB2YWx1ZSBvYmplY3Qgd2hlcmUga2V5IGlzIGFuIG9iamVjdCB3aXRoIG1pbiBhbmQgbWF4IHByb3BlcnRpZXMgd2l0aCBpdHMgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4gKi9cbmV4cG9ydCB0eXBlIFZhbHVlID0ge1xuICBba2V5IGluIGtleW9mIE1pbk1heFZhbHVlc106IG51bWJlcjtcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFX1NFTEVDVElPTl9WQUxVRVMgPSB7XG4gIC8vIFdpbGwgYmUgdW5jb21tZW50ZWQgaW4gTVRNLTYxOTIwXG4gIC8vIGRhc2hib2FyZF9jb250ZXh0OiAnZGFzaGJvYXJkX2NvbnRleHQnLFxuICBjb25maWc6ICdjb25maWcnLFxuICB2aWV3X2FuZF9jb25maWc6ICd2aWV3X2FuZF9jb25maWcnXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgREFURV9TRUxFQ1RJT05fVkFMVUVTX0FSUiA9IFtcbiAgLy8gV2lsbCBiZSB1bmNvbW1lbnRlZCBpbiBNVE0tNjE5MjBcbiAgLy8gREFURV9TRUxFQ1RJT05fVkFMVUVTLmRhc2hib2FyZF9jb250ZXh0LFxuICBEQVRFX1NFTEVDVElPTl9WQUxVRVMuY29uZmlnLFxuICBEQVRFX1NFTEVDVElPTl9WQUxVRVMudmlld19hbmRfY29uZmlnXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgREFURV9TRUxFQ1RJT05fTEFCRUxTID0ge1xuICBjb25maWc6IGdldHRleHQoJ1dpZGdldCBjb25maWd1cmF0aW9uJykgYXMgJ1dpZGdldCBjb25maWd1cmF0aW9uJyxcbiAgdmlld19hbmRfY29uZmlnOiBnZXR0ZXh0KCdXaWRnZXQgYW5kIHdpZGdldCBjb25maWd1cmF0aW9uJykgYXMgJ1dpZGdldCBhbmQgd2lkZ2V0IGNvbmZpZ3VyYXRpb24nLFxuICBkYXNoYm9hcmRfY29udGV4dDogZ2V0dGV4dCgnRGFzaGJvYXJkIHRpbWUgcmFuZ2UnKSBhcyAnRGFzaGJvYXJkIHRpbWUgcmFuZ2UnXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgUkVGUkVTSF9JTlRFUlZBTF9WQUxVRVNfQVJSID0gWzVfMDAwLCAxMF8wMDAsIDE1XzAwMCwgMzBfMDAwLCA2MF8wMDBdO1xuXG5leHBvcnQgY29uc3QgUkVOREVSX1RZUEVTX0xBQkVMUyA9IHtcbiAgbWluOiBnZXR0ZXh0KCdNaW5pbXVtJykgYXMgJ01pbmltdW0nLFxuICBtYXg6IGdldHRleHQoJ01heGltdW0nKSBhcyAnTWF4aW11bScsXG4gIGFyZWE6IGdldHRleHQoJ0FyZWEnKSBhcyAnQXJlYSdcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBJTlRFUlZBTF9WQUxVRVNfQVJSID0gW1xuICBJTlRFUlZBTF9WQUxVRVMubWludXRlcyxcbiAgSU5URVJWQUxfVkFMVUVTLmhvdXJzLFxuICBJTlRFUlZBTF9WQUxVRVMuZGF5cyxcbiAgSU5URVJWQUxfVkFMVUVTLndlZWtzLFxuICBJTlRFUlZBTF9WQUxVRVMubW9udGhzLFxuICBJTlRFUlZBTF9WQUxVRVMuY3VzdG9tXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgVElNRV9SQU5HRV9JTlRFUlZBTF9MQUJFTFMgPSB7XG4gIG1pbnV0ZXM6IGdldHRleHQoJ0xhc3QgbWludXRlJykgYXMgJ0xhc3QgbWludXRlJyxcbiAgaG91cnM6IGdldHRleHQoJ0xhc3QgaG91cicpIGFzICdMYXN0IGhvdXInLFxuICBkYXlzOiBnZXR0ZXh0KCdMYXN0IGRheScpIGFzICdMYXN0IGRheScsXG4gIHdlZWtzOiBnZXR0ZXh0KCdMYXN0IHdlZWsnKSBhcyAnTGFzdCB3ZWVrJyxcbiAgbW9udGhzOiBnZXR0ZXh0KCdMYXN0IG1vbnRoJykgYXMgJ0xhc3QgbW9udGgnLFxuICBjdXN0b206IGdldHRleHQoJ0N1c3RvbScpIGFzICdDdXN0b20nXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgRFVSQVRJT05fT1BUSU9OUyA9IFtcbiAge1xuICAgIGlkOiBJTlRFUlZBTF9WQUxVRVMubWludXRlcyxcbiAgICBsYWJlbDogVElNRV9SQU5HRV9JTlRFUlZBTF9MQUJFTFMubWludXRlcyxcbiAgICB1bml0OiBJTlRFUlZBTF9WQUxVRVMubWludXRlcyxcbiAgICBhbW91bnQ6IDFcbiAgfSxcbiAge1xuICAgIGlkOiBJTlRFUlZBTF9WQUxVRVMuaG91cnMsXG4gICAgbGFiZWw6IFRJTUVfUkFOR0VfSU5URVJWQUxfTEFCRUxTLmhvdXJzLFxuICAgIHVuaXQ6IElOVEVSVkFMX1ZBTFVFUy5ob3VycyxcbiAgICBhbW91bnQ6IDFcbiAgfSxcbiAge1xuICAgIGlkOiBJTlRFUlZBTF9WQUxVRVMuZGF5cyxcbiAgICBsYWJlbDogVElNRV9SQU5HRV9JTlRFUlZBTF9MQUJFTFMuZGF5cyxcbiAgICB1bml0OiBJTlRFUlZBTF9WQUxVRVMuZGF5cyxcbiAgICBhbW91bnQ6IDFcbiAgfSxcbiAge1xuICAgIGlkOiBJTlRFUlZBTF9WQUxVRVMud2Vla3MsXG4gICAgbGFiZWw6IFRJTUVfUkFOR0VfSU5URVJWQUxfTEFCRUxTLndlZWtzLFxuICAgIHVuaXQ6IElOVEVSVkFMX1ZBTFVFUy53ZWVrcyxcbiAgICBhbW91bnQ6IDFcbiAgfSxcbiAge1xuICAgIGlkOiBJTlRFUlZBTF9WQUxVRVMubW9udGhzLFxuICAgIGxhYmVsOiBUSU1FX1JBTkdFX0lOVEVSVkFMX0xBQkVMUy5tb250aHMsXG4gICAgdW5pdDogSU5URVJWQUxfVkFMVUVTLm1vbnRocyxcbiAgICBhbW91bnQ6IDFcbiAgfSxcbiAgeyBpZDogSU5URVJWQUxfVkFMVUVTLmN1c3RvbSwgbGFiZWw6IFRJTUVfUkFOR0VfSU5URVJWQUxfTEFCRUxTLmN1c3RvbSB9XG5dO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbG9yUmFuZ2VCb3VuZGFyaWVzIHtcbiAgeWVsbG93UmFuZ2VNaW46IG51bWJlcjtcbiAgeWVsbG93UmFuZ2VNYXg6IG51bWJlcjtcbiAgcmVkUmFuZ2VNaW46IG51bWJlcjtcbiAgcmVkUmFuZ2VNYXg6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXRhcG9pbnRXaXRoVmFsdWVzIGV4dGVuZHMgS1BJRGV0YWlscyB7XG4gIHNlcmllc1VuaXQ/OiBzdHJpbmc7XG4gIHZhbHVlczogTWVhc3VyZW1lbnRSYW5nZXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHVyYXRpb24ge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICB1bml0Pzogc3RyaW5nO1xuICBhbW91bnQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVDb2x1bW5IZWFkZXIge1xuICBkZXZpY2VOYW1lOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHJlbmRlclR5cGU6IHN0cmluZztcbiAgdW5pdDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGVSYW5nZSB7XG4gIGRhdGVGcm9tOiBzdHJpbmc7XG4gIGRhdGVUbzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFwb2ludHNUYWJsZUNvbmZpZyB7XG4gIGFnZ3JlZ2F0aW9uPzogQWdncmVnYXRpb25PcHRpb247XG4gIGNvbnRleHQ/OiBudW1iZXI7XG4gIGRhdGFwb2ludHM6IEtQSURldGFpbHNbXTtcbiAgLyoqXG4gICAqIEFycmF5IHRoYXQgY29udGFpbnMgZ2xvYmFsIHRpbWUgY29udGV4dCBkYXRlRnJvbSBhbmQgZGF0ZVRvLlxuICAgKi9cbiAgZGF0ZT86IHN0cmluZ1tdO1xuICBkYXRlRnJvbTogc3RyaW5nO1xuICBkYXRlVG86IHN0cmluZztcbiAgZGVjaW1hbFBsYWNlcz86IG51bWJlcjtcbiAgZGlzcGxheURhdGVTZWxlY3Rpb246IGJvb2xlYW47XG4gIGRpc3BsYXlTZXR0aW5nczoge1xuICAgIGdsb2JhbFRpbWVDb250ZXh0OiBib29sZWFuO1xuICAgIGdsb2JhbFJlYWx0aW1lQ29udGV4dDogYm9vbGVhbjtcbiAgICBnbG9iYWxBZ2dyZWdhdGlvbkNvbnRleHQ6IGJvb2xlYW47XG4gIH07XG4gIGludGVydmFsOiBJbnRlcnZhbFsnaWQnXTtcbiAgaXNBdXRvUmVmcmVzaEVuYWJsZWQ6IGJvb2xlYW47XG4gIHJlYWx0aW1lOiBib29sZWFuO1xuICByZWZyZXNoSW50ZXJ2YWw/OiBudW1iZXI7XG4gIHNlbGVjdGVkOiBvYmplY3Q7XG4gIHdpZGdldEluc3RhbmNlR2xvYmFsVGltZUNvbnRleHQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YXBvaW50VGFibGVJdGVtIHtcbiAgZGF0ZUFuZFRpbWU6IHN0cmluZztcbiAgZGV2aWNlTmFtZTogc3RyaW5nO1xuICBmcmFnbWVudDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICByZWRSYW5nZU1heD86IG51bWJlcjtcbiAgcmVkUmFuZ2VNaW4/OiBudW1iZXI7XG4gIHJlbmRlclR5cGU6IHN0cmluZztcbiAgc2VyaWVzOiBzdHJpbmc7XG4gIHZhbHVlOiBWYWx1ZTtcbiAgeWVsbG93UmFuZ2VNYXg/OiBudW1iZXI7XG4gIHllbGxvd1JhbmdlTWluPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwZWREYXRhcG9pbnRUYWJsZUl0ZW0ge1xuICBkYXRlQW5kVGltZTogc3RyaW5nO1xuICBkZXZpY2VOYW1lOiBzdHJpbmc7XG4gIHJvd0l0ZW1zOiAoe1xuICAgIGZyYWdtZW50OiBzdHJpbmc7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICByZWRSYW5nZU1heD86IG51bWJlcjtcbiAgICByZWRSYW5nZU1pbj86IG51bWJlcjtcbiAgICByZW5kZXJUeXBlOiBzdHJpbmc7XG4gICAgc2VyaWVzOiBzdHJpbmc7XG4gICAgdmFsdWU6IFZhbHVlO1xuICAgIHllbGxvd1JhbmdlTWF4PzogbnVtYmVyO1xuICAgIHllbGxvd1JhbmdlTWluPzogbnVtYmVyO1xuICB9IHwgbnVsbClbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXJpZXNEYXRhV2l0aFJlc3BvbnNlIHtcbiAgc291cmNlOiBTb3VyY2VJZDtcbiAgZGF0YTogSVNlcmllcztcbiAgcmVzOiBJRmV0Y2hSZXNwb25zZTtcbn1cbiJdfQ==
|
|
@@ -1,46 +1,46 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { DataFetchingService } from '@c8y/ngx-components/datapoints-export-selector';
|
|
3
|
+
import { INTERVAL_VALUES } from '@c8y/ngx-components/interval-picker';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "
|
|
5
|
+
import * as i1 from "@c8y/ngx-components/datapoints-export-selector";
|
|
6
6
|
export class DatapointsTableService {
|
|
7
|
-
constructor(
|
|
8
|
-
this.
|
|
7
|
+
constructor(dataFetchingService) {
|
|
8
|
+
this.dataFetchingService = dataFetchingService;
|
|
9
9
|
}
|
|
10
10
|
calculateDateRange(interval) {
|
|
11
11
|
const now = new Date();
|
|
12
12
|
const nowString = now.toISOString();
|
|
13
13
|
let dateFrom;
|
|
14
14
|
switch (interval) {
|
|
15
|
-
case
|
|
16
|
-
dateFrom = this.
|
|
15
|
+
case INTERVAL_VALUES.minutes:
|
|
16
|
+
dateFrom = this.dataFetchingService.adjustDate(nowString, -1, true);
|
|
17
17
|
break;
|
|
18
|
-
case
|
|
18
|
+
case INTERVAL_VALUES.hours:
|
|
19
19
|
const minutesInAnHourNegative = -60;
|
|
20
|
-
dateFrom = this.
|
|
20
|
+
dateFrom = this.dataFetchingService.adjustDate(nowString, minutesInAnHourNegative, true);
|
|
21
21
|
break;
|
|
22
|
-
case
|
|
22
|
+
case INTERVAL_VALUES.days:
|
|
23
23
|
const minutesInADayNegative = -24 * 60;
|
|
24
|
-
dateFrom = this.
|
|
24
|
+
dateFrom = this.dataFetchingService.adjustDate(nowString, minutesInADayNegative, true);
|
|
25
25
|
break;
|
|
26
|
-
case
|
|
26
|
+
case INTERVAL_VALUES.weeks:
|
|
27
27
|
const minutesInAWeekNegative = -7 * 24 * 60;
|
|
28
|
-
dateFrom = this.
|
|
28
|
+
dateFrom = this.dataFetchingService.adjustDate(nowString, minutesInAWeekNegative, true);
|
|
29
29
|
break;
|
|
30
|
-
case
|
|
30
|
+
case INTERVAL_VALUES.months:
|
|
31
31
|
const oneMonthAgo = new Date(now);
|
|
32
32
|
oneMonthAgo.setMonth(oneMonthAgo.getMonth() - 1);
|
|
33
|
-
dateFrom = this.
|
|
33
|
+
dateFrom = this.dataFetchingService.adjustDate(oneMonthAgo.toISOString(), 0, true);
|
|
34
34
|
break;
|
|
35
35
|
default:
|
|
36
36
|
throw new Error('Invalid time interval');
|
|
37
37
|
}
|
|
38
38
|
return {
|
|
39
39
|
dateFrom: dateFrom,
|
|
40
|
-
dateTo: this.
|
|
40
|
+
dateTo: this.dataFetchingService.adjustDate(nowString, 0, true)
|
|
41
41
|
};
|
|
42
42
|
}
|
|
43
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DatapointsTableService, deps: [{ token: i1.
|
|
43
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DatapointsTableService, deps: [{ token: i1.DataFetchingService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
44
44
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DatapointsTableService, providedIn: 'root' }); }
|
|
45
45
|
}
|
|
46
46
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DatapointsTableService, decorators: [{
|
|
@@ -48,5 +48,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
48
48
|
args: [{
|
|
49
49
|
providedIn: 'root'
|
|
50
50
|
}]
|
|
51
|
-
}], ctorParameters: () => [{ type: i1.
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
51
|
+
}], ctorParameters: () => [{ type: i1.DataFetchingService }] });
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50cy10YWJsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vd2lkZ2V0cy9pbXBsZW1lbnRhdGlvbnMvZGF0YXBvaW50cy10YWJsZS9kYXRhcG9pbnRzLXRhYmxlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNyRixPQUFPLEVBQUUsZUFBZSxFQUFZLE1BQU0scUNBQXFDLENBQUM7OztBQU1oRixNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLFlBQW9CLG1CQUF3QztRQUF4Qyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO0lBQUcsQ0FBQztJQUVoRSxrQkFBa0IsQ0FBQyxRQUF3QjtRQUN6QyxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVwQyxJQUFJLFFBQWdCLENBQUM7UUFFckIsUUFBUSxRQUFRLEVBQUUsQ0FBQztZQUNqQixLQUFLLGVBQWUsQ0FBQyxPQUFPO2dCQUMxQixRQUFRLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3BFLE1BQU07WUFDUixLQUFLLGVBQWUsQ0FBQyxLQUFLO2dCQUN4QixNQUFNLHVCQUF1QixHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNwQyxRQUFRLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3pGLE1BQU07WUFDUixLQUFLLGVBQWUsQ0FBQyxJQUFJO2dCQUN2QixNQUFNLHFCQUFxQixHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDdkMsUUFBUSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLHFCQUFxQixFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUN2RixNQUFNO1lBQ1IsS0FBSyxlQUFlLENBQUMsS0FBSztnQkFDeEIsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO2dCQUM1QyxRQUFRLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3hGLE1BQU07WUFDUixLQUFLLGVBQWUsQ0FBQyxNQUFNO2dCQUN6QixNQUFNLFdBQVcsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDbEMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pELFFBQVEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ25GLE1BQU07WUFDUjtnQkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDN0MsQ0FBQztRQUVELE9BQU87WUFDTCxRQUFRLEVBQUUsUUFBUTtZQUNsQixNQUFNLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQztTQUNoRSxDQUFDO0lBQ0osQ0FBQzs4R0F0Q1Usc0JBQXNCO2tIQUF0QixzQkFBc0IsY0FGckIsTUFBTTs7MkZBRVAsc0JBQXNCO2tCQUhsQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdGFGZXRjaGluZ1NlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2RhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yJztcbmltcG9ydCB7IElOVEVSVkFMX1ZBTFVFUywgSW50ZXJ2YWwgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2ludGVydmFsLXBpY2tlcic7XG5pbXBvcnQgeyBEYXRlUmFuZ2UgfSBmcm9tICcuL2RhdGFwb2ludHMtdGFibGUtd2lkZ2V0Lm1vZGVsJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRGF0YXBvaW50c1RhYmxlU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGF0YUZldGNoaW5nU2VydmljZTogRGF0YUZldGNoaW5nU2VydmljZSkge31cblxuICBjYWxjdWxhdGVEYXRlUmFuZ2UoaW50ZXJ2YWw6IEludGVydmFsWydpZCddKTogRGF0ZVJhbmdlIHtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IG5vd1N0cmluZyA9IG5vdy50b0lTT1N0cmluZygpO1xuXG4gICAgbGV0IGRhdGVGcm9tOiBzdHJpbmc7XG5cbiAgICBzd2l0Y2ggKGludGVydmFsKSB7XG4gICAgICBjYXNlIElOVEVSVkFMX1ZBTFVFUy5taW51dGVzOlxuICAgICAgICBkYXRlRnJvbSA9IHRoaXMuZGF0YUZldGNoaW5nU2VydmljZS5hZGp1c3REYXRlKG5vd1N0cmluZywgLTEsIHRydWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgSU5URVJWQUxfVkFMVUVTLmhvdXJzOlxuICAgICAgICBjb25zdCBtaW51dGVzSW5BbkhvdXJOZWdhdGl2ZSA9IC02MDtcbiAgICAgICAgZGF0ZUZyb20gPSB0aGlzLmRhdGFGZXRjaGluZ1NlcnZpY2UuYWRqdXN0RGF0ZShub3dTdHJpbmcsIG1pbnV0ZXNJbkFuSG91ck5lZ2F0aXZlLCB0cnVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIElOVEVSVkFMX1ZBTFVFUy5kYXlzOlxuICAgICAgICBjb25zdCBtaW51dGVzSW5BRGF5TmVnYXRpdmUgPSAtMjQgKiA2MDtcbiAgICAgICAgZGF0ZUZyb20gPSB0aGlzLmRhdGFGZXRjaGluZ1NlcnZpY2UuYWRqdXN0RGF0ZShub3dTdHJpbmcsIG1pbnV0ZXNJbkFEYXlOZWdhdGl2ZSwgdHJ1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBJTlRFUlZBTF9WQUxVRVMud2Vla3M6XG4gICAgICAgIGNvbnN0IG1pbnV0ZXNJbkFXZWVrTmVnYXRpdmUgPSAtNyAqIDI0ICogNjA7XG4gICAgICAgIGRhdGVGcm9tID0gdGhpcy5kYXRhRmV0Y2hpbmdTZXJ2aWNlLmFkanVzdERhdGUobm93U3RyaW5nLCBtaW51dGVzSW5BV2Vla05lZ2F0aXZlLCB0cnVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIElOVEVSVkFMX1ZBTFVFUy5tb250aHM6XG4gICAgICAgIGNvbnN0IG9uZU1vbnRoQWdvID0gbmV3IERhdGUobm93KTtcbiAgICAgICAgb25lTW9udGhBZ28uc2V0TW9udGgob25lTW9udGhBZ28uZ2V0TW9udGgoKSAtIDEpO1xuICAgICAgICBkYXRlRnJvbSA9IHRoaXMuZGF0YUZldGNoaW5nU2VydmljZS5hZGp1c3REYXRlKG9uZU1vbnRoQWdvLnRvSVNPU3RyaW5nKCksIDAsIHRydWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB0aW1lIGludGVydmFsJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGVGcm9tOiBkYXRlRnJvbSxcbiAgICAgIGRhdGVUbzogdGhpcy5kYXRhRmV0Y2hpbmdTZXJ2aWNlLmFkanVzdERhdGUobm93U3RyaW5nLCAwLCB0cnVlKVxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|