@c8y/ngx-components 1021.25.5 → 1021.29.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/alarms/alarm-details.component.d.ts +8 -13
- package/alarms/alarm-details.component.d.ts.map +1 -1
- package/alarms/alarm-details.service.d.ts +3 -20
- package/alarms/alarm-details.service.d.ts.map +1 -1
- package/alarms/alarm-info.component.d.ts +0 -1
- package/alarms/alarm-info.component.d.ts.map +1 -1
- package/branding/shared/data/branding-version.service.d.ts.map +1 -1
- package/branding/shared/lazy/branding-theme-form/branding-theme-form.component.d.ts.map +1 -1
- package/core/bootstrap/bootstrap.component.d.ts.map +1 -1
- package/core/common/geo.service.d.ts.map +1 -1
- package/core/common/inter-app.service.d.ts +1 -0
- package/core/common/inter-app.service.d.ts.map +1 -1
- package/core/plugins/plugins.model.d.ts +3 -1
- package/core/plugins/plugins.model.d.ts.map +1 -1
- package/core/plugins/plugins.service.d.ts.map +1 -1
- package/device-map/bounds-resolver.service.d.ts +12 -0
- package/device-map/bounds-resolver.service.d.ts.map +1 -0
- package/device-map/c8y-ngx-components-device-map.d.ts.map +1 -0
- package/device-map/device-map-navigation.factory.d.ts +9 -0
- package/device-map/device-map-navigation.factory.d.ts.map +1 -0
- package/device-map/device-map.component.d.ts +10 -0
- package/device-map/device-map.component.d.ts.map +1 -0
- package/device-map/device-map.feature.d.ts +3 -0
- package/device-map/device-map.feature.d.ts.map +1 -0
- package/device-map/index.d.ts +6 -0
- package/device-map/index.d.ts.map +1 -0
- package/device-map/location-resolver.service.d.ts +8 -0
- package/device-map/location-resolver.service.d.ts.map +1 -0
- package/ecosystem/application-plugins/application-plugins.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/orphaned-status-cell-renderer.component.d.ts.map +1 -1
- package/esm2022/alarms/alarm-details.component.mjs +14 -30
- package/esm2022/alarms/alarm-details.service.mjs +5 -25
- package/esm2022/alarms/alarm-info.component.mjs +1 -1
- package/esm2022/branding/shared/data/branding-version.service.mjs +9 -5
- package/esm2022/branding/shared/lazy/branding-theme-form/branding-theme-form.component.mjs +5 -2
- package/esm2022/core/bootstrap/bootstrap.component.mjs +4 -3
- package/esm2022/core/common/geo.service.mjs +2 -5
- package/esm2022/core/common/inter-app.service.mjs +3 -2
- package/esm2022/core/plugins/plugins.model.mjs +2 -1
- package/esm2022/core/plugins/plugins.service.mjs +7 -5
- package/esm2022/core/version/websdk-plugin-version.factory.mjs +2 -2
- package/esm2022/device-map/bounds-resolver.service.mjs +21 -0
- package/esm2022/device-map/c8y-ngx-components-device-map.mjs +5 -0
- package/esm2022/device-map/device-map-navigation.factory.mjs +25 -0
- package/esm2022/device-map/device-map.component.mjs +30 -0
- package/esm2022/device-map/device-map.feature.mjs +15 -0
- package/esm2022/device-map/index.mjs +6 -0
- package/esm2022/device-map/location-resolver.service.mjs +25 -0
- package/esm2022/ecosystem/application-plugins/application-plugins.component.mjs +66 -22
- package/esm2022/ecosystem/application-plugins/orphaned-status-cell-renderer.component.mjs +7 -1
- package/esm2022/location/location.component.mjs +3 -3
- package/esm2022/map/map-status.component.mjs +20 -7
- package/esm2022/map/map.component.mjs +15 -7
- package/esm2022/map/map.model.mjs +2 -2
- package/esm2022/map/map.module.mjs +25 -4
- package/esm2022/map/map.service.mjs +73 -7
- package/esm2022/repository/firmware/list/firmware-list.component.mjs +10 -10
- package/esm2022/repository/software/list/software-list.component.mjs +10 -10
- package/esm2022/tracking/tracking-marker-popup.component.mjs +10 -3
- package/esm2022/tracking/tracking.component.mjs +3 -4
- package/esm2022/tracking/tracking.service.mjs +6 -3
- package/fesm2022/c8y-ngx-components-alarms.mjs +18 -54
- package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-shared-data.mjs +8 -4
- package/fesm2022/c8y-ngx-components-branding-shared-data.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +4 -1
- package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-map.mjs +106 -0
- package/fesm2022/c8y-ngx-components-device-map.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +71 -21
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem.mjs +71 -21
- package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-location.mjs +2 -2
- package/fesm2022/c8y-ngx-components-location.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-map.mjs +122 -14
- package/fesm2022/c8y-ngx-components-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-firmware.mjs +9 -9
- package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-software.mjs +9 -9
- package/fesm2022/c8y-ngx-components-repository-software.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-tracking.mjs +16 -7
- package/fesm2022/c8y-ngx-components-tracking.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +14 -12
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/locales/de.po +13 -1
- package/locales/es.po +13 -1
- package/locales/fr.po +13 -1
- package/locales/ja_JP.po +15 -3
- package/locales/ko.po +13 -1
- package/locales/locales.pot +12 -0
- package/locales/nl.po +13 -1
- package/locales/pl.po +13 -1
- package/locales/pt_BR.po +13 -1
- package/locales/zh_CN.po +13 -1
- package/locales/zh_TW.po +13 -1
- package/map/map-status.component.d.ts +3 -1
- package/map/map-status.component.d.ts.map +1 -1
- package/map/map.component.d.ts +2 -1
- package/map/map.component.d.ts.map +1 -1
- package/map/map.model.d.ts +1 -0
- package/map/map.model.d.ts.map +1 -1
- package/map/map.module.d.ts +2 -1
- package/map/map.module.d.ts.map +1 -1
- package/map/map.service.d.ts +27 -2
- package/map/map.service.d.ts.map +1 -1
- package/package.json +1 -1
- package/repository/firmware/list/firmware-list.component.d.ts.map +1 -1
- package/repository/software/list/software-list.component.d.ts.map +1 -1
- package/tracking/tracking-marker-popup.component.d.ts +5 -1
- package/tracking/tracking-marker-popup.component.d.ts.map +1 -1
- package/tracking/tracking.component.d.ts.map +1 -1
- package/tracking/tracking.service.d.ts.map +1 -1
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
2
|
import { InventoryService } from '@c8y/client';
|
|
3
|
-
import { combineLatest, defer, of } from 'rxjs';
|
|
4
|
-
import { ClusterSize, defaultLayer, defaultMapConfig, MapTenantOptionKeys } from './map.model';
|
|
5
3
|
import { OptionsService, ServiceRegistry } from '@c8y/ngx-components';
|
|
4
|
+
import { latLng, latLngBounds } from 'leaflet';
|
|
5
|
+
import { get } from 'lodash-es';
|
|
6
|
+
import { combineLatest, defer, of } from 'rxjs';
|
|
6
7
|
import { map } from 'rxjs/operators';
|
|
8
|
+
import { ClusterSize, defaultLayer, defaultMapConfig, MapTenantOptionKeys } from './map.model';
|
|
7
9
|
import * as i0 from "@angular/core";
|
|
8
10
|
import * as i1 from "@c8y/client";
|
|
9
11
|
import * as i2 from "@c8y/ngx-components";
|
|
@@ -126,12 +128,20 @@ export class MapService {
|
|
|
126
128
|
return this.getPositionMOsFromBound(bound, byGroupIdMO, true);
|
|
127
129
|
}
|
|
128
130
|
async getPositionMOsFromBound(bound, byGroupIdMO, count = false) {
|
|
129
|
-
const { lat: latMin, lng:
|
|
130
|
-
const { lat: latMax, lng:
|
|
131
|
+
const { lat: latMin, lng: lngMinRaw } = bound.getSouthWest();
|
|
132
|
+
const { lat: latMax, lng: lngMaxRaw } = bound.getNorthEast();
|
|
133
|
+
const lngMin = lngMaxRaw - lngMinRaw > 360 ? -180 : this.normalizeLongitude(lngMinRaw);
|
|
134
|
+
const lngMax = lngMaxRaw - lngMinRaw > 360 ? 180 : this.normalizeLongitude(lngMaxRaw);
|
|
131
135
|
const byGroupIdFilter = byGroupIdMO
|
|
132
136
|
? `(bygroupid(${byGroupIdMO.id}) or id eq '${byGroupIdMO.id}') and `
|
|
133
137
|
: '';
|
|
134
|
-
|
|
138
|
+
let boundFilter = `$filter=${byGroupIdFilter}has(c8y_Position) and c8y_Position.lat gt ${latMin}d and c8y_Position.lat lt ${latMax}d`;
|
|
139
|
+
if (lngMin < lngMax) {
|
|
140
|
+
boundFilter = `${boundFilter} and c8y_Position.lng gt ${lngMin}d and c8y_Position.lng lt ${lngMax}d`;
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
boundFilter = `${boundFilter} and (c8y_Position.lng gt ${lngMin}d or c8y_Position.lng lt ${lngMax}d)`;
|
|
144
|
+
}
|
|
135
145
|
const { paging, data } = await this.inventory.list({
|
|
136
146
|
pageSize: count ? 1 : this.MAX_DEVICE_PER_CLUSTER,
|
|
137
147
|
withTotalPages: count,
|
|
@@ -140,7 +150,9 @@ export class MapService {
|
|
|
140
150
|
if (count) {
|
|
141
151
|
return paging.totalPages;
|
|
142
152
|
}
|
|
143
|
-
return data
|
|
153
|
+
return data.map((pmo) => bound.contains(latLng(pmo.c8y_Position.lat, pmo.c8y_Position.lng))
|
|
154
|
+
? pmo
|
|
155
|
+
: this.denormalizePMO(pmo, bound));
|
|
144
156
|
}
|
|
145
157
|
/**
|
|
146
158
|
* Returns all devices with c8y_Position.
|
|
@@ -181,6 +193,31 @@ export class MapService {
|
|
|
181
193
|
data: data
|
|
182
194
|
};
|
|
183
195
|
}
|
|
196
|
+
/**
|
|
197
|
+
* Determines a rectangular geographical area based on the positions of all devices.
|
|
198
|
+
*
|
|
199
|
+
* @returns A [[LatLngBounds]] object fitting all devices' geo positions.
|
|
200
|
+
*/
|
|
201
|
+
async getAllDevicesBounds() {
|
|
202
|
+
const filter = (coord, order) => ({
|
|
203
|
+
pageSize: 1,
|
|
204
|
+
q: `$filter=has(c8y_Position) $orderby=c8y_Position.${coord} ${order}`
|
|
205
|
+
});
|
|
206
|
+
const filterReverse = (op, order) => ({
|
|
207
|
+
pageSize: 1,
|
|
208
|
+
q: `$filter=has(c8y_Position) and c8y_Position.lng ${op} 0d $orderby=c8y_Position.lng ${order}`
|
|
209
|
+
});
|
|
210
|
+
const [latMin, latMax, lngMin, lngMax, lngRevMin, lngRevMax] = await Promise.all([
|
|
211
|
+
this.inventory.list(filter('lat', 'asc')),
|
|
212
|
+
this.inventory.list(filter('lat', 'desc')),
|
|
213
|
+
this.inventory.list(filter('lng', 'asc')),
|
|
214
|
+
this.inventory.list(filter('lng', 'desc')),
|
|
215
|
+
this.inventory.list(filterReverse('gt', 'asc')),
|
|
216
|
+
this.inventory.list(filterReverse('lt', 'desc'))
|
|
217
|
+
]).then(result => result.map(r => get(r.data, '[0].c8y_Position')));
|
|
218
|
+
const shiftWorld = (lngRevMin?.lng ?? 0) - (lngRevMax?.lng ?? 0) > 180;
|
|
219
|
+
return latLngBounds(latLng(latMin?.lat, shiftWorld ? lngRevMin?.lng : lngMin?.lng), latLng(latMax?.lat, shiftWorld ? lngRevMax?.lng + 360 : lngMax?.lng));
|
|
220
|
+
}
|
|
184
221
|
/**
|
|
185
222
|
* Returns the cluster size for clustered maps. Counting the position MOs in a bounding
|
|
186
223
|
* and if it reach a threshold, returning a [[ClusterSize]].
|
|
@@ -207,6 +244,35 @@ export class MapService {
|
|
|
207
244
|
return config;
|
|
208
245
|
}));
|
|
209
246
|
}
|
|
247
|
+
/**
|
|
248
|
+
* Shifts longitudes received from Leaflet.js in the [-180 - k*360; 180 + k*360] rangewhen
|
|
249
|
+
* `noWrap` is enabled to the [-180; 180] range expected for values of the c8y_Position fragment.
|
|
250
|
+
*
|
|
251
|
+
* @param lng Longitude to shift.
|
|
252
|
+
* @returns Longitude value in the [-180; 180] range
|
|
253
|
+
*/
|
|
254
|
+
normalizeLongitude(lng) {
|
|
255
|
+
return ((((lng + 180) % 360) + 360) % 360) - 180;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Shifts longitudes in the [-180; 180] range expected for values of the c8y_Position fragment
|
|
259
|
+
* the the [-180 - k*360; 180 + k*360] range expected from Leaflet.js when `noWrap` is enabled.
|
|
260
|
+
*
|
|
261
|
+
* The method naively adds/subtracts 360 degrees to the original value until the position fits in the expected bounds.
|
|
262
|
+
*
|
|
263
|
+
* @param pmo A managed object with a `c8y_Position` fragment
|
|
264
|
+
* @param bounds The bounds where the position should fit
|
|
265
|
+
* @returns A managed object whose `c8y_Position`'s `lng` values has been shifted to fit in bounds
|
|
266
|
+
*/
|
|
267
|
+
denormalizePMO(pmo, bounds) {
|
|
268
|
+
let { lng } = pmo.c8y_Position;
|
|
269
|
+
const shiftFactor = lng > bounds.getEast() ? -1 : 1;
|
|
270
|
+
while (!bounds.contains(latLng(pmo.c8y_Position.lat, lng))) {
|
|
271
|
+
lng += shiftFactor * 360;
|
|
272
|
+
}
|
|
273
|
+
pmo.c8y_Position.lng = lng;
|
|
274
|
+
return pmo;
|
|
275
|
+
}
|
|
210
276
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: MapService, deps: [{ token: i1.InventoryService }, { token: i2.OptionsService }, { token: i2.ServiceRegistry }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
211
277
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: MapService, providedIn: 'root' }); }
|
|
212
278
|
}
|
|
@@ -216,4 +282,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
216
282
|
providedIn: 'root'
|
|
217
283
|
}]
|
|
218
284
|
}], ctorParameters: () => [{ type: i1.InventoryService }, { type: i2.OptionsService }, { type: i2.ServiceRegistry }] });
|
|
219
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9tYXAvbWFwLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWtCLGdCQUFnQixFQUF1QixNQUFNLGFBQWEsQ0FBQztBQUVwRixPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUQsT0FBTyxFQUNMLFdBQVcsRUFDWCxZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUVwQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQUtyQyxNQUFNLE9BQU8sVUFBVTtJQUNyQjs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUE2QjtRQUM1QyxJQUFJLENBQUMsTUFBTSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDbkMsT0FBTyxZQUFZLENBQUM7UUFDdEIsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzNDLE9BQU8saUJBQWlCLENBQUM7UUFDM0IsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLHNCQUFzQixDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3hDLE9BQU8sY0FBYyxDQUFDO1FBQ3hCLENBQUM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN4QyxPQUFPLGNBQWMsQ0FBQztRQUN4QixDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsc0JBQXNCLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDMUMsT0FBTyxnQkFBZ0IsQ0FBQztRQUMxQixDQUFD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bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSU1hbmFnZWRPYmplY3QsIEludmVudG9yeVNlcnZpY2UsIElSZXN1bHRMaXN0LCBQYWdpbmcgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgdHlwZSAqIGFzIEwgZnJvbSAnbGVhZmxldCc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBkZWZlciwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIENsdXN0ZXJTaXplLFxuICBkZWZhdWx0TGF5ZXIsXG4gIGRlZmF1bHRNYXBDb25maWcsXG4gIE1hcFRlbmFudE9wdGlvbktleXMsXG4gIFBvc2l0aW9uTWFuYWdlZE9iamVjdFxufSBmcm9tICcuL21hcC5tb2RlbCc7XG5pbXBvcnQgeyBPcHRpb25zU2VydmljZSwgU2VydmljZVJlZ2lzdHJ5IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgdHlwZSB7IE1hcFRpbGVMYXllciwgTWFwRGVmYXVsdENvbmZpZyB9IGZyb20gJ0BjOHkvb3B0aW9ucyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIE1hcFNlcnZpY2Uge1xuICAvKipcbiAgICogUmV0dXJucyBhc3NldCBpY29uIHN0YXR1cyBmb3IgaGlnaGVzdCBhbGFybSBzZXZlcml0eSBmb3VuZCBpbiBkZXZpY2Ugb2JqZWN0LlxuICAgKiBAcGFyYW0gZGV2aWNlIERldmljZSB0aGF0IGNvbnRhaW5zIGFsYXJtcyBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMgU3RhdHVzIHN0cmluZyBhY2NvcmRpbmcgdG8gYWxhcm0gc2V2ZXJpdHlcbiAgICovXG4gIHN0YXRpYyBnZXRTdGF0dXMoZGV2aWNlOiBQb3NpdGlvbk1hbmFnZWRPYmplY3QpIHtcbiAgICBpZiAoIWRldmljZS5jOHlfQWN0aXZlQWxhcm1zU3RhdHVzKSB7XG4gICAgICByZXR1cm4gJ3RleHQtbXV0ZWQnO1xuICAgIH1cbiAgICBpZiAoZGV2aWNlLmM4eV9BY3RpdmVBbGFybXNTdGF0dXMuY3JpdGljYWwpIHtcbiAgICAgIHJldHVybiAnc3RhdHVzIGNyaXRpY2FsJztcbiAgICB9XG4gICAgaWYgKGRldmljZS5jOHlfQWN0aXZlQWxhcm1zU3RhdHVzLm1ham9yKSB7XG4gICAgICByZXR1cm4gJ3N0YXR1cyBtYWpvcic7XG4gICAgfVxuICAgIGlmIChkZXZpY2UuYzh5X0FjdGl2ZUFsYXJtc1N0YXR1cy5taW5vcikge1xuICAgICAgcmV0dXJuICdzdGF0dXMgbWlub3InO1xuICAgIH1cbiAgICBpZiAoZGV2aWNlLmM4eV9BY3RpdmVBbGFybXNTdGF0dXMud2FybmluZykge1xuICAgICAgcmV0dXJuICdzdGF0dXMgd2FybmluZyc7XG4gICAgfVxuICAgIHJldHVybiAndGV4dC1tdXRlZCc7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBkZXZpY2VzIHRoYXQgYXJlIG1heGltYWwgZGlzcGxheWVkIGluIG9uZSBjbHVzdGVyLlxuICAgKi9cbiAgTUFYX0RFVklDRV9QRVJfQ0xVU1RFUiA9IDIwMDtcbiAgLyoqXG4gICAqIFRoZSBjb3VudCB1bnRpbCB0aGUgY2x1c3RlciBpcyBzaXplZC4gVGhlcmUgYXJlIGEgbWF4aW11bSBvZlxuICAgKiB0aHJlZSBjbHVzdGVyczogMSwgNCBvciAxNi5cbiAgICovXG4gIENMVVNURVJfTEVWRUxfVEhSRVNIT0xEID0gNTAwO1xuXG4gIC8qKlxuICAgKiBAaWdub3JlOiBPbmx5IERJLlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBvcHRpb25zOiBPcHRpb25zU2VydmljZSxcbiAgICBwcml2YXRlIHNlcnZpY2VSZWdpc3RyeTogU2VydmljZVJlZ2lzdHJ5XG4gICkge31cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGVhZmxldCBpbnN0YW5jZSB1c2VkIGJ5IHRoZSBjdW11bG9jaXR5IGNvcmUuXG4gICAqL1xuICBhc3luYyBnZXRMZWFmbGV0KCkge1xuICAgIGNvbnN0IG9yaWdpbmFsTGVmbGV0ID0gd2luZG93Lkw7XG4gICAgY29uc3QgYzh5TGVhZmxldEluc3RhbmNlID0gKGF3YWl0IGltcG9ydCgnbGVhZmxldCcpKS5kZWZhdWx0O1xuICAgIGM4eUxlYWZsZXRJbnN0YW5jZS5ub0NvbmZsaWN0KCk7XG4gICAgd2luZG93LkwgPSBvcmlnaW5hbExlZmxldDtcbiAgICByZXR1cm4gYzh5TGVhZmxldEluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIGlmIGEgZ2l2ZW4gbWFuYWdlZCBvYmplY3QgaXMgYSBkZXZpY2Ugd2l0aCBhIHBvc2l0aW9uIGZyYWdtZW50LlxuICAgKiBAcGFyYW0gbW8gVGhlIGdpdmVuIG1hbmFnZWQgb2JqZWN0LlxuICAgKi9cbiAgaXNQb3NpdGlvbmVkRGV2aWNlKG1vOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHJldHVybiAhIShtbz8uYzh5X0lzRGV2aWNlICYmIHRoaXMuaGFzUG9zaXRpb24obW8pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmllcyBpZiBhIGdpdmVuIG1hbmFnZWQgb2JqZWN0IGhhcyBhIHBvc2l0aW9uIGZyYWdtZW50LlxuICAgKiBAcGFyYW0gbW8gVGhlIGdpdmVuIG1hbmFnZWQgb2JqZWN0LlxuICAgKi9cbiAgaGFzUG9zaXRpb24obW86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgcmV0dXJuIG1vPy5jOHlfUG9zaXRpb247XG4gIH1cblxuICBnZXRNYXBUaWxlTGF5ZXJQcm92aWRlcnMoKTogQ3VtdWxvY2l0eVNlcnZpY2VSZWdpc3RyeS5NYXBUaWxlTGF5ZXJQcm92aWRlcltdIHtcbiAgICBjb25zdCBsYXllclByb3ZpZGVycyA9IHRoaXMuc2VydmljZVJlZ2lzdHJ5LmdldCgnbWFwVGlsZUxheWVySG9vaycpO1xuXG4gICAgcmV0dXJuIGxheWVyUHJvdmlkZXJzO1xuICB9XG5cbiAgZ2V0TWFwVGlsZUxheWVyc0Zyb21Ib29rZWRQcm92aWRlcnMkKFxuICAgIGxheWVyUHJvdmlkZXJzOiBDdW11bG9jaXR5U2VydmljZVJlZ2lzdHJ5Lk1hcFRpbGVMYXllclByb3ZpZGVyW11cbiAgKTogT2JzZXJ2YWJsZTxNYXBUaWxlTGF5ZXJbXT4ge1xuICAgIGlmICghbGF5ZXJQcm92aWRlcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gb2YoW10pO1xuICAgIH1cbiAgICBjb25zdCBsYXllcnMgPSBjb21iaW5lTGF0ZXN0KGxheWVyUHJvdmlkZXJzLm1hcChwcm92aWRlciA9PiBwcm92aWRlci5nZXRNYXBUaWxlTGF5ZXJzJCgpKSk7XG4gICAgcmV0dXJuIGxheWVycy5waXBlKG1hcChsYXllcnMgPT4gbGF5ZXJzLmZsYXQoKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxheWVycyBhdmFpbGFibGUgaW4gdGhpcyBhcHBsaWNhdGlvbi5cbiAgICogTGF5ZXJzIGFyZSB0YWtlbiBmcm9tIHBsdWdpbnMgaW5zdGFsbGVkIHRvIHRoaXMgYXBwbGljYXRpb24uXG4gICAqIEluIGNhc2Ugbm9uZSBvZiB0aGUgcGx1Z2lucyBvdmVycmlkZSB0aGUgZGVmYXVsdCBsYXllcnMsIHRoZSBkZWZhdWx0IGxheWVycyBhcmUgYWxzbyBjb25zaWRlcmVkLlxuICAgKiBAcmV0dXJucyBUaGUgbGF5ZXJzLlxuICAgKi9cbiAgZ2V0TWFwVGlsZUxheWVycyQoKTogT2JzZXJ2YWJsZTxNYXBUaWxlTGF5ZXJbXT4ge1xuICAgIHJldHVybiBkZWZlcigoKSA9PiB7XG4gICAgICBjb25zdCBsYXllclByb3ZpZGVycyA9IHRoaXMuZ2V0TWFwVGlsZUxheWVyUHJvdmlkZXJzKCk7XG4gICAgICBjb25zdCBvdmVycmlkZXNEZWZhdWx0TGF5ZXIgPSBsYXllclByb3ZpZGVycy5zb21lKHByb3ZpZGVyID0+XG4gICAgICAgIHByb3ZpZGVyLm92ZXJyaWRlc0RlZmF1bHRMYXllcj8uKClcbiAgICAgICk7XG4gICAgICBjb25zdCBsYXllcnNGcm9tUHJvdmlkZXJzID0gZGVmZXIoKCkgPT5cbiAgICAgICAgdGhpcy5nZXRNYXBUaWxlTGF5ZXJzRnJvbUhvb2tlZFByb3ZpZGVycyQobGF5ZXJQcm92aWRlcnMpXG4gICAgICApO1xuICAgICAgaWYgKG92ZXJyaWRlc0RlZmF1bHRMYXllcikge1xuICAgICAgICByZXR1cm4gbGF5ZXJzRnJvbVByb3ZpZGVycztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW3RoaXMuZ2V0RGVmYXVsdExheWVycygpLCBsYXllcnNGcm9tUHJvdmlkZXJzXSkucGlwZShcbiAgICAgICAgbWFwKGxheWVycyA9PiB7XG4gICAgICAgICAgcmV0dXJuIGxheWVycy5mbGF0KCk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxheWVycyBjb25maWd1cmVkIGluIHRoZSBjdXJyZW50IHBsYXRmb3JtIHZpYSB0ZW5hbnQgb3B0aW9ucy5cbiAgICogQHJldHVybnMgVGhlIGxheWVycy4gSWYgbm90IHNldCBpbiB0ZW5hbnQgb3B0aW9ucyB0aGUgZGVmYXVsdCBsYXllcnMuXG4gICAqL1xuICBnZXREZWZhdWx0TGF5ZXJzKCk6IE9ic2VydmFibGU8TWFwVGlsZUxheWVyW10+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRNYXBPcHRpb248TWFwVGlsZUxheWVyW10+KFxuICAgICAgTWFwVGVuYW50T3B0aW9uS2V5cy5MQVlFUlMsXG4gICAgICB0aGlzLm9wdGlvbnMubWFwTGF5ZXJzIHx8IFtkZWZhdWx0TGF5ZXJdXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBtYXAgY29uZmlndXJhdGlvbiBjb25maWd1cmVkIG9uIHRoZSB0ZW5hbnQuXG4gICAqIEByZXR1cm5zIFRoZSBjb25maWd1cmF0aW9uLiBJZiBub3Qgc2V0IGluIHRlbmFudCBvcHRpb25zIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBnZXREZWZhdWx0Q29uZmlnKCk6IE9ic2VydmFibGU8TWFwRGVmYXVsdENvbmZpZz4ge1xuICAgIHJldHVybiB0aGlzLmdldE1hcE9wdGlvbjxNYXBEZWZhdWx0Q29uZmlnPihcbiAgICAgIE1hcFRlbmFudE9wdGlvbktleXMuQ09ORklHLFxuICAgICAgdGhpcy5vcHRpb25zLm1hcENvbmZpZyB8fCBkZWZhdWx0TWFwQ29uZmlnXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3VudHMgYWxsIG1hbmFnZWQgb2JqZWN0cyBpbiBhIGdpdmVuIGJvdW5kIHdpdGggYSBjOHlfUG9zaXRpb24gZnJhZ21lbnQuXG4gICAqIEBwYXJhbSBib3VuZCBUaGUgbGF0IGxuZyBib3VuZCB0byByZXF1ZXN0IHRoZSBtYW5hZ2VkIG9iamVjdHMgZm9yLlxuICAgKiBAcGFyYW0gYnlHcm91cElkTU8gVGhlIGdyb3VwIG1hbmFnZWQgb2JqZWN0IG9mIHdoaWNoIGRpcmVjdCBjaGlsZHJlbiBzaG91bGQgYmUgc2VhcmNoZWQgZm9yLlxuICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGFsbCBwb3NpdGlvbiBtYW5hZ2VkIG9iamVjdHMgaW4gdGhlIGdpdmVuIGJvdW5kIChhbmQgZ3JvdXApLlxuICAgKi9cbiAgYXN5bmMgZ2V0UG9zaXRpb25NT3NGcm9tQm91bmRDb3VudChcbiAgICBib3VuZDogTC5MYXRMbmdCb3VuZHMsXG4gICAgYnlHcm91cElkTU8/OiBJTWFuYWdlZE9iamVjdFxuICApOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLmdldFBvc2l0aW9uTU9zRnJvbUJvdW5kKGJvdW5kLCBieUdyb3VwSWRNTywgdHJ1ZSkgYXMgUHJvbWlzZTxudW1iZXI+O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYWxsIG1hbmFnZWQgb2JqZWN0cyB3aXRoIGEgYzh5X1Bvc2l0aW9uIGZyYWdtZW50IGluIGEgY2VydGFpbiBib3VuZGFyeS5cbiAgICogQHBhcmFtIGJvdW5kIFRoZSBsYXQgbG5nIGJvdW5kIHRvIHJlcXVlc3QgdGhlIG1hbmFnZWQgb2JqZWN0cyBmb3IuXG4gICAqIEByZXR1cm5zIEFsbCBwb3NpdGlvbiBtYW5hZ2VkIG9iamVjdHMgaW4gdGhlIGdpdmVuIGJvdW5kLlxuICAgKi9cbiAgYXN5bmMgZ2V0UG9zaXRpb25NT3NGcm9tQm91bmQoYm91bmQ6IEwuTGF0TG5nQm91bmRzKTogUHJvbWlzZTxQb3NpdGlvbk1hbmFnZWRPYmplY3RbXT47XG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCBtYW5hZ2VkIG9iamVjdHMgd2l0aCBhIGM4eV9Qb3NpdGlvbiBmcmFnbWVudCBpbiBhIGNlcnRhaW4gYm91bmRhcnkgdGhhdCBiZWxvbmdzIHRvIGEgY2VydGFpbiBncm91cC5cbiAgICogQHBhcmFtIGJvdW5kIFRoZSBsYXQgbG5nIGJvdW5kIHRvIHJlcXVlc3QgdGhlIG1hbmFnZWQgb2JqZWN0cyBmb3IuXG4gICAqIEBwYXJhbSBieUdyb3VwSWRNTyBUaGUgZ3JvdXAgbWFuYWdlZCBvYmplY3Qgb2Ygd2hpY2ggZGlyZWN0IGNoaWxkcmVuIHNob3VsZCBiZSBzZWFyY2hlZCBmb3IuXG4gICAqIEByZXR1cm5zIEFsbCBwb3NpdGlvbiBtYW5hZ2VkIG9iamVjdHMgaW4gdGhlIGdpdmVuIGJvdW5kIHRoYXQgYXJlIGNoaWxkcmVuIG9mIHRoZSBnaXZlbiBncm91cC5cbiAgICovXG4gIGFzeW5jIGdldFBvc2l0aW9uTU9zRnJvbUJvdW5kKFxuICAgIGJvdW5kOiBMLkxhdExuZ0JvdW5kcyxcbiAgICBieUdyb3VwSWRNTzogSU1hbmFnZWRPYmplY3RcbiAgKTogUHJvbWlzZTxQb3NpdGlvbk1hbmFnZWRPYmplY3RbXT47XG4gIC8qKlxuICAgKiBDb3VudHMgdGhlIG1hbmFnZWQgb2JqZWN0cyBpbiBhIGNlcnRhaW4gYm91bmRhcnkgYmVsb25naW5nIHRvIGEgZ3JvdXAuXG4gICAqIEBwYXJhbSBib3VuZCBUaGUgbGF0IGxuZyBib3VuZCB0byByZXF1ZXN0IHRoZSBtYW5hZ2VkIG9iamVjdHMgZm9yLlxuICAgKiBAcGFyYW0gYnlHcm91cElkTU8gVGhlIGdyb3VwIG1hbmFnZWQgb2JqZWN0IG9mIHdoaWNoIGRpcmVjdCBjaGlsZHJlbiBzaG91bGQgYmUgc2VhcmNoZWQgZm9yLlxuICAgKiBAcmV0dXJuIFRoZSBjb3VudCBvZiB0aGUgbWFuYWdlZCBvYmplY3RzLlxuICAgKi9cbiAgYXN5bmMgZ2V0UG9zaXRpb25NT3NGcm9tQm91bmQoXG4gICAgYm91bmQ6IEwuTGF0TG5nQm91bmRzLFxuICAgIGJ5R3JvdXBJZE1POiBJTWFuYWdlZE9iamVjdCxcbiAgICBjb3VudDogdHJ1ZVxuICApOiBQcm9taXNlPG51bWJlcj47XG4gIGFzeW5jIGdldFBvc2l0aW9uTU9zRnJvbUJvdW5kKFxuICAgIGJvdW5kOiBMLkxhdExuZ0JvdW5kcyxcbiAgICBieUdyb3VwSWRNTz86IElNYW5hZ2VkT2JqZWN0LFxuICAgIGNvdW50ID0gZmFsc2VcbiAgKTogUHJvbWlzZTxQb3NpdGlvbk1hbmFnZWRPYmplY3RbXSB8IG51bWJlcj4ge1xuICAgIGNvbnN0IHsgbGF0OiBsYXRNaW4sIGxuZzogbG5nTWluIH0gPSBib3VuZC5nZXRTb3V0aFdlc3QoKTtcbiAgICBjb25zdCB7IGxhdDogbGF0TWF4LCBsbmc6IGxuZ01heCB9ID0gYm91bmQuZ2V0Tm9ydGhFYXN0KCk7XG4gICAgY29uc3QgYnlHcm91cElkRmlsdGVyID0gYnlHcm91cElkTU9cbiAgICAgID8gYChieWdyb3VwaWQoJHtieUdyb3VwSWRNTy5pZH0pIG9yIGlkIGVxICcke2J5R3JvdXBJZE1PLmlkfScpIGFuZCBgXG4gICAgICA6ICcnO1xuICAgIGNvbnN0IGJvdW5kRmlsdGVyID0gYCRmaWx0ZXI9JHtieUdyb3VwSWRGaWx0ZXJ9aGFzKGM4eV9Qb3NpdGlvbikgYW5kIGM4eV9Qb3NpdGlvbi5sbmcgZ3QgJHtsbmdNaW59ZCBhbmQgYzh5X1Bvc2l0aW9uLmxhdCBndCAke2xhdE1pbn1kIGFuZCBjOHlfUG9zaXRpb24ubG5nIGx0ICR7bG5nTWF4fWQgYW5kIGM4eV9Qb3NpdGlvbi5sYXQgbHQgJHtsYXRNYXh9ZGA7XG4gICAgY29uc3QgeyBwYWdpbmcsIGRhdGEgfSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5Lmxpc3Qoe1xuICAgICAgcGFnZVNpemU6IGNvdW50ID8gMSA6IHRoaXMuTUFYX0RFVklDRV9QRVJfQ0xVU1RFUixcbiAgICAgIHdpdGhUb3RhbFBhZ2VzOiBjb3VudCxcbiAgICAgIHF1ZXJ5OiBib3VuZEZpbHRlclxuICAgIH0pO1xuICAgIGlmIChjb3VudCkge1xuICAgICAgcmV0dXJuIHBhZ2luZy50b3RhbFBhZ2VzO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YSBhcyBQb3NpdGlvbk1hbmFnZWRPYmplY3RbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCBkZXZpY2VzIHdpdGggYzh5X1Bvc2l0aW9uLlxuICAgKi9cbiAgYXN5bmMgZ2V0UG9zaXRpb25EZXZpY2VzKCk6IFByb21pc2U8UG9zaXRpb25NYW5hZ2VkT2JqZWN0W10+O1xuICAvKipcbiAgICogUmV0dXJucyBhbGwgZGV2aWNlcyB3aXRoIGM4eV9Qb3NpdGlvbi5cbiAgICogQHBhcmFtIHBhZ2VTaXplIFRoZSBwYWdlIHNpemUgdG8gcmV0dXJuLlxuICAgKi9cbiAgYXN5bmMgZ2V0UG9zaXRpb25EZXZpY2VzKHBhZ2VTaXplOiBudW1iZXIpOiBQcm9taXNlPFBvc2l0aW9uTWFuYWdlZE9iamVjdFtdPjtcbiAgLyoqXG4gICAqIFJldHVybnMgYWxsIGRldmljZXMgd2l0aCBjOHlfUG9zaXRpb24uXG4gICAqIEBwYXJhbSBwYWdlU2l6ZSBUaGUgcGFnZSBzaXplIHRvIHJldHVybi5cbiAgICogQHBhcmFtIGNvdW50IENvdW50aW5nIGlzIGRpc2FibGVkXG4gICAqL1xuICBhc3luYyBnZXRQb3NpdGlvbkRldmljZXMocGFnZVNpemU6IG51bWJlciwgY291bnQ6IGZhbHNlKTogUHJvbWlzZTxQb3NpdGlvbk1hbmFnZWRPYmplY3RbXT47XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYWxsIGRldmljZXMgd2l0aCBjOHlfUG9zaXRpb24uXG4gICAqIEBwYXJhbSBwYWdlU2l6ZSBUaGUgcGFnZSBzaXplIHRvIHJldHVybi5cbiAgICogQHBhcmFtIGNvdW50IENvdW50aW5nIGlzIGVuYWJsZWRcbiAgICovXG4gIGFzeW5jIGdldFBvc2l0aW9uRGV2aWNlcyhwYWdlU2l6ZTogbnVtYmVyLCBjb3VudDogdHJ1ZSk6IFByb21pc2U8bnVtYmVyPjtcbiAgLyoqXG4gICAqIFJldHVybnMgYWxsIGRldmljZXMgd2l0aCBjOHlfUG9zaXRpb24uXG4gICAqIEBwYXJhbSBwYWdlU2l6ZSBUaGUgcGFnZSBzaXplIHRvIHJldHVybi5cbiAgICogQHBhcmFtIGNvdW50IFN3aXRjaGVzIHRvIGNvdW50aW5nIG9ubHkuXG4gICAqIEByZXR1cm5zIEFsbCBkZXZpY2VzIG9yIHRoZSBkZXZpY2UgY291bnQgd2l0aCBhIGM4eV9Qb3NpdGlvbiBmcmFnbWVudC5cbiAgICovXG4gIGFzeW5jIGdldFBvc2l0aW9uRGV2aWNlcyhcbiAgICBwYWdlU2l6ZSA9IHRoaXMuTUFYX0RFVklDRV9QRVJfQ0xVU1RFUixcbiAgICBjb3VudD86IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxudW1iZXIgfCBQb3NpdGlvbk1hbmFnZWRPYmplY3RbXT4ge1xuICAgIGNvbnN0IHsgcGFnaW5nLCBkYXRhIH0gPSBhd2FpdCB0aGlzLmludmVudG9yeS5saXN0KHtcbiAgICAgIHBhZ2VTaXplOiBjb3VudCA/IDEgOiBwYWdlU2l6ZSxcbiAgICAgIHdpdGhUb3RhbFBhZ2VzOiAhIWNvdW50LFxuICAgICAgcXVlcnk6ICckZmlsdGVyPWhhcyhjOHlfUG9zaXRpb24pIGFuZCBoYXMoYzh5X0lzRGV2aWNlKSdcbiAgICB9KTtcbiAgICBpZiAoY291bnQpIHtcbiAgICAgIHJldHVybiBwYWdpbmcudG90YWxQYWdlcztcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEgYXMgUG9zaXRpb25NYW5hZ2VkT2JqZWN0W107XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbGwgbWFuYWdlZCBvYmplY3Qgd2l0aCBhIGM4eV9Qb3NpdGlvbiBmcmFnbWVudC5cbiAgICogQHBhcmFtIGJ5R3JvdXBJZE1PIFRoZSBncm91cCBtYW5hZ2VkIG9iamVjdCBvZiB3aGljaCBkaXJlY3QgY2hpbGRyZW4gc2hvdWxkIGJlIHNlYXJjaGVkIGZvci5cbiAgICogQHBhcmFtIHBhZ2VTaXplIERlZmluZXMgaG93IG1hbnkgcmVzdWx0cyBzaG91bGQgYmUgcmV0dXJuZWQuXG4gICAqIEByZXR1cm5zIFRoZSBtYW5hZ2VkIG9iamVjdHMgd2l0aCBwb3NpdGlvbi5cbiAgICovXG4gIGFzeW5jIGdldEFsbFBvc2l0aW9uTU9zKFxuICAgIGJ5R3JvdXBJZE1PPzogSU1hbmFnZWRPYmplY3QsXG4gICAgcGFnZVNpemUgPSA1MDBcbiAgKTogUHJvbWlzZTxJUmVzdWx0TGlzdDxQb3NpdGlvbk1hbmFnZWRPYmplY3Q+PiB7XG4gICAgY29uc3QgZmlsdGVyOiB7IHBhZ2VTaXplOiBudW1iZXI7IHdpdGhUb3RhbFBhZ2VzOiBib29sZWFuOyBxdWVyeTogc3RyaW5nIH0gPSB7XG4gICAgICBwYWdlU2l6ZSxcbiAgICAgIHdpdGhUb3RhbFBhZ2VzOiB0cnVlLFxuICAgICAgcXVlcnk6ICdoYXMoYzh5X1Bvc2l0aW9uKSdcbiAgICB9O1xuXG4gICAgaWYgKGJ5R3JvdXBJZE1PKSB7XG4gICAgICBmaWx0ZXIucXVlcnkgPSBgJGZpbHRlcj0oYnlncm91cGlkKCR7YnlHcm91cElkTU8uaWR9KSBvciBpZCBlcSAnJHtieUdyb3VwSWRNTy5pZH0nKSBhbmQgaGFzKGM4eV9Qb3NpdGlvbilgO1xuICAgIH1cblxuICAgIGNvbnN0IHsgcGFnaW5nLCBkYXRhLCByZXMgfSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5Lmxpc3QoZmlsdGVyKTtcblxuICAgIHJldHVybiB7XG4gICAgICByZXMsXG4gICAgICBwYWdpbmc6IHBhZ2luZyBhcyBQYWdpbmc8UG9zaXRpb25NYW5hZ2VkT2JqZWN0PixcbiAgICAgIGRhdGE6IGRhdGEgYXMgUG9zaXRpb25NYW5hZ2VkT2JqZWN0W11cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNsdXN0ZXIgc2l6ZSBmb3IgY2x1c3RlcmVkIG1hcHMuIENvdW50aW5nIHRoZSBwb3NpdGlvbiBNT3MgaW4gYSBib3VuZGluZ1xuICAgKiBhbmQgaWYgaXQgcmVhY2ggYSB0aHJlc2hvbGQsIHJldHVybmluZyBhIFtbQ2x1c3RlclNpemVdXS5cbiAgICogQHBhcmFtIGJvdW5kIFRoZSBib3VuZGluZyB0byBjaGVjayBmb3IgY2x1c3RlciBzaXplLlxuICAgKiBAcmV0dXJucyBUaGUgY2x1c3RlciBzaXplLCBjYW4gYmUgTk9ORSwgRk9VUiBvciBTSVhURUVOLlxuICAgKi9cbiAgYXN5bmMgZ2V0Q2x1c3RlclNpemUoYm91bmQ6IEwuTGF0TG5nQm91bmRzKSB7XG4gICAgY29uc3QgY291bnQgPSBhd2FpdCB0aGlzLmdldFBvc2l0aW9uTU9zRnJvbUJvdW5kQ291bnQoYm91bmQpO1xuICAgIGxldCBjbHVzdGVyU2l6ZSA9IENsdXN0ZXJTaXplLk5PTkU7XG4gICAgaWYgKGNvdW50ID4gdGhpcy5DTFVTVEVSX0xFVkVMX1RIUkVTSE9MRCkge1xuICAgICAgY2x1c3RlclNpemUgPSBDbHVzdGVyU2l6ZS5TSVhURUVOO1xuICAgIH0gZWxzZSBpZiAoY291bnQgPiB0aGlzLk1BWF9ERVZJQ0VfUEVSX0NMVVNURVIpIHtcbiAgICAgIGNsdXN0ZXJTaXplID0gQ2x1c3RlclNpemUuRk9VUjtcbiAgICB9XG4gICAgcmV0dXJuIGNsdXN0ZXJTaXplO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNYXBPcHRpb248VD4oa2V5OiBNYXBUZW5hbnRPcHRpb25LZXlzLCBkZWZhdWx0VmFsdWU6IFQpIHtcbiAgICByZXR1cm4gZGVmZXIoKCkgPT5cbiAgICAgIHRoaXMub3B0aW9ucy5nZXRUZW5hbnRPcHRpb248VCB8IHN0cmluZz4oJ2NvbmZpZ3VyYXRpb24nLCBrZXksIGRlZmF1bHRWYWx1ZSlcbiAgICApLnBpcGUoXG4gICAgICBtYXAoY29uZmlnID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGBUaGUgdGVuYW50IG9wdGlvbiBmb3IgbWFwcyAnY29uZmlndXJhdGlvbi4ke2tleX0nIGlzIG5vdCBhIHZhbGlkIEpTT04gc3RydWN0dXJlLmBcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
285
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9tYXAvbWFwLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWtCLGdCQUFnQixFQUF1QixNQUFNLGFBQWEsQ0FBQztBQUNwRixPQUFPLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR3RFLE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDaEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQ0wsV0FBVyxFQUNYLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsbUJBQW1CLEVBRXBCLE1BQU0sYUFBYSxDQUFDOzs7O0FBS3JCLE1BQU0sT0FBTyxVQUFVO0lBQ3JCOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQTZCO1FBQzVDLElBQUksQ0FBQyxNQUFNLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUNuQyxPQUFPLFlBQVksQ0FBQztRQUN0QixDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDM0MsT0FBTyxpQkFBaUIsQ0FBQztRQUMzQixDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDeEMsT0FBTyxjQUFjLENBQUM7UUFDeEIsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLHNCQUFzQixDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3hDLE9BQU8sY0FBYyxDQUFD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dXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0LCBJbnZlbnRvcnlTZXJ2aWNlLCBJUmVzdWx0TGlzdCwgUGFnaW5nIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgT3B0aW9uc1NlcnZpY2UsIFNlcnZpY2VSZWdpc3RyeSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHR5cGUgeyBNYXBEZWZhdWx0Q29uZmlnLCBNYXBUaWxlTGF5ZXIgfSBmcm9tICdAYzh5L29wdGlvbnMnO1xuaW1wb3J0IHR5cGUgKiBhcyBMIGZyb20gJ2xlYWZsZXQnO1xuaW1wb3J0IHsgbGF0TG5nLCBsYXRMbmdCb3VuZHMgfSBmcm9tICdsZWFmbGV0JztcbmltcG9ydCB7IGdldCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBkZWZlciwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIENsdXN0ZXJTaXplLFxuICBkZWZhdWx0TGF5ZXIsXG4gIGRlZmF1bHRNYXBDb25maWcsXG4gIE1hcFRlbmFudE9wdGlvbktleXMsXG4gIFBvc2l0aW9uTWFuYWdlZE9iamVjdFxufSBmcm9tICcuL21hcC5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIE1hcFNlcnZpY2Uge1xuICAvKipcbiAgICogUmV0dXJucyBhc3NldCBpY29uIHN0YXR1cyBmb3IgaGlnaGVzdCBhbGFybSBzZXZlcml0eSBmb3VuZCBpbiBkZXZpY2Ugb2JqZWN0LlxuICAgKiBAcGFyYW0gZGV2aWNlIERldmljZSB0aGF0IGNvbnRhaW5zIGFsYXJtcyBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMgU3RhdHVzIHN0cmluZyBhY2NvcmRpbmcgdG8gYWxhcm0gc2V2ZXJpdHlcbiAgICovXG4gIHN0YXRpYyBnZXRTdGF0dXMoZGV2aWNlOiBQb3NpdGlvbk1hbmFnZWRPYmplY3QpIHtcbiAgICBpZiAoIWRldmljZS5jOHlfQWN0aXZlQWxhcm1zU3RhdHVzKSB7XG4gICAgICByZXR1cm4gJ3RleHQtbXV0ZWQnO1xuICAgIH1cbiAgICBpZiAoZGV2aWNlLmM4eV9BY3RpdmVBbGFybXNTdGF0dXMuY3JpdGljYWwpIHtcbiAgICAgIHJldHVybiAnc3RhdHVzIGNyaXRpY2FsJztcbiAgICB9XG4gICAgaWYgKGRldmljZS5jOHlfQWN0aXZlQWxhcm1zU3RhdHVzLm1ham9yKSB7XG4gICAgICByZXR1cm4gJ3N0YXR1cyBtYWpvcic7XG4gICAgfVxuICAgIGlmIChkZXZpY2UuYzh5X0FjdGl2ZUFsYXJtc1N0YXR1cy5taW5vcikge1xuICAgICAgcmV0dXJuICdzdGF0dXMgbWlub3InO1xuICAgIH1cbiAgICBpZiAoZGV2aWNlLmM4eV9BY3RpdmVBbGFybXNTdGF0dXMud2FybmluZykge1xuICAgICAgcmV0dXJuICdzdGF0dXMgd2FybmluZyc7XG4gICAgfVxuICAgIHJldHVybiAndGV4dC1tdXRlZCc7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBkZXZpY2VzIHRoYXQgYXJlIG1heGltYWwgZGlzcGxheWVkIGluIG9uZSBjbHVzdGVyLlxuICAgKi9cbiAgTUFYX0RFVklDRV9QRVJfQ0xVU1RFUiA9IDIwMDtcbiAgLyoqXG4gICAqIFRoZSBjb3VudCB1bnRpbCB0aGUgY2x1c3RlciBpcyBzaXplZC4gVGhlcmUgYXJlIGEgbWF4aW11bSBvZlxuICAgKiB0aHJlZSBjbHVzdGVyczogMSwgNCBvciAxNi5cbiAgICovXG4gIENMVVNURVJfTEVWRUxfVEhSRVNIT0xEID0gNTAwO1xuXG4gIC8qKlxuICAgKiBAaWdub3JlOiBPbmx5IERJLlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBvcHRpb25zOiBPcHRpb25zU2VydmljZSxcbiAgICBwcml2YXRlIHNlcnZpY2VSZWdpc3RyeTogU2VydmljZVJlZ2lzdHJ5XG4gICkge31cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGVhZmxldCBpbnN0YW5jZSB1c2VkIGJ5IHRoZSBjdW11bG9jaXR5IGNvcmUuXG4gICAqL1xuICBhc3luYyBnZXRMZWFmbGV0KCkge1xuICAgIGNvbnN0IG9yaWdpbmFsTGVmbGV0ID0gd2luZG93Lkw7XG4gICAgY29uc3QgYzh5TGVhZmxldEluc3RhbmNlID0gKGF3YWl0IGltcG9ydCgnbGVhZmxldCcpKS5kZWZhdWx0O1xuICAgIGM4eUxlYWZsZXRJbnN0YW5jZS5ub0NvbmZsaWN0KCk7XG4gICAgd2luZG93LkwgPSBvcmlnaW5hbExlZmxldDtcbiAgICByZXR1cm4gYzh5TGVhZmxldEluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIGlmIGEgZ2l2ZW4gbWFuYWdlZCBvYmplY3QgaXMgYSBkZXZpY2Ugd2l0aCBhIHBvc2l0aW9uIGZyYWdtZW50LlxuICAgKiBAcGFyYW0gbW8gVGhlIGdpdmVuIG1hbmFnZWQgb2JqZWN0LlxuICAgKi9cbiAgaXNQb3NpdGlvbmVkRGV2aWNlKG1vOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHJldHVybiAhIShtbz8uYzh5X0lzRGV2aWNlICYmIHRoaXMuaGFzUG9zaXRpb24obW8pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmllcyBpZiBhIGdpdmVuIG1hbmFnZWQgb2JqZWN0IGhhcyBhIHBvc2l0aW9uIGZyYWdtZW50LlxuICAgKiBAcGFyYW0gbW8gVGhlIGdpdmVuIG1hbmFnZWQgb2JqZWN0LlxuICAgKi9cbiAgaGFzUG9zaXRpb24obW86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgcmV0dXJuIG1vPy5jOHlfUG9zaXRpb247XG4gIH1cblxuICBnZXRNYXBUaWxlTGF5ZXJQcm92aWRlcnMoKTogQ3VtdWxvY2l0eVNlcnZpY2VSZWdpc3RyeS5NYXBUaWxlTGF5ZXJQcm92aWRlcltdIHtcbiAgICBjb25zdCBsYXllclByb3ZpZGVycyA9IHRoaXMuc2VydmljZVJlZ2lzdHJ5LmdldCgnbWFwVGlsZUxheWVySG9vaycpO1xuXG4gICAgcmV0dXJuIGxheWVyUHJvdmlkZXJzO1xuICB9XG5cbiAgZ2V0TWFwVGlsZUxheWVyc0Zyb21Ib29rZWRQcm92aWRlcnMkKFxuICAgIGxheWVyUHJvdmlkZXJzOiBDdW11bG9jaXR5U2VydmljZVJlZ2lzdHJ5Lk1hcFRpbGVMYXllclByb3ZpZGVyW11cbiAgKTogT2JzZXJ2YWJsZTxNYXBUaWxlTGF5ZXJbXT4ge1xuICAgIGlmICghbGF5ZXJQcm92aWRlcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gb2YoW10pO1xuICAgIH1cbiAgICBjb25zdCBsYXllcnMgPSBjb21iaW5lTGF0ZXN0KGxheWVyUHJvdmlkZXJzLm1hcChwcm92aWRlciA9PiBwcm92aWRlci5nZXRNYXBUaWxlTGF5ZXJzJCgpKSk7XG4gICAgcmV0dXJuIGxheWVycy5waXBlKG1hcChsYXllcnMgPT4gbGF5ZXJzLmZsYXQoKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxheWVycyBhdmFpbGFibGUgaW4gdGhpcyBhcHBsaWNhdGlvbi5cbiAgICogTGF5ZXJzIGFyZSB0YWtlbiBmcm9tIHBsdWdpbnMgaW5zdGFsbGVkIHRvIHRoaXMgYXBwbGljYXRpb24uXG4gICAqIEluIGNhc2Ugbm9uZSBvZiB0aGUgcGx1Z2lucyBvdmVycmlkZSB0aGUgZGVmYXVsdCBsYXllcnMsIHRoZSBkZWZhdWx0IGxheWVycyBhcmUgYWxzbyBjb25zaWRlcmVkLlxuICAgKiBAcmV0dXJucyBUaGUgbGF5ZXJzLlxuICAgKi9cbiAgZ2V0TWFwVGlsZUxheWVycyQoKTogT2JzZXJ2YWJsZTxNYXBUaWxlTGF5ZXJbXT4ge1xuICAgIHJldHVybiBkZWZlcigoKSA9PiB7XG4gICAgICBjb25zdCBsYXllclByb3ZpZGVycyA9IHRoaXMuZ2V0TWFwVGlsZUxheWVyUHJvdmlkZXJzKCk7XG4gICAgICBjb25zdCBvdmVycmlkZXNEZWZhdWx0TGF5ZXIgPSBsYXllclByb3ZpZGVycy5zb21lKHByb3ZpZGVyID0+XG4gICAgICAgIHByb3ZpZGVyLm92ZXJyaWRlc0RlZmF1bHRMYXllcj8uKClcbiAgICAgICk7XG4gICAgICBjb25zdCBsYXllcnNGcm9tUHJvdmlkZXJzID0gZGVmZXIoKCkgPT5cbiAgICAgICAgdGhpcy5nZXRNYXBUaWxlTGF5ZXJzRnJvbUhvb2tlZFByb3ZpZGVycyQobGF5ZXJQcm92aWRlcnMpXG4gICAgICApO1xuICAgICAgaWYgKG92ZXJyaWRlc0RlZmF1bHRMYXllcikge1xuICAgICAgICByZXR1cm4gbGF5ZXJzRnJvbVByb3ZpZGVycztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW3RoaXMuZ2V0RGVmYXVsdExheWVycygpLCBsYXllcnNGcm9tUHJvdmlkZXJzXSkucGlwZShcbiAgICAgICAgbWFwKGxheWVycyA9PiB7XG4gICAgICAgICAgcmV0dXJuIGxheWVycy5mbGF0KCk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxheWVycyBjb25maWd1cmVkIGluIHRoZSBjdXJyZW50IHBsYXRmb3JtIHZpYSB0ZW5hbnQgb3B0aW9ucy5cbiAgICogQHJldHVybnMgVGhlIGxheWVycy4gSWYgbm90IHNldCBpbiB0ZW5hbnQgb3B0aW9ucyB0aGUgZGVmYXVsdCBsYXllcnMuXG4gICAqL1xuICBnZXREZWZhdWx0TGF5ZXJzKCk6IE9ic2VydmFibGU8TWFwVGlsZUxheWVyW10+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRNYXBPcHRpb248TWFwVGlsZUxheWVyW10+KFxuICAgICAgTWFwVGVuYW50T3B0aW9uS2V5cy5MQVlFUlMsXG4gICAgICB0aGlzLm9wdGlvbnMubWFwTGF5ZXJzIHx8IFtkZWZhdWx0TGF5ZXJdXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBtYXAgY29uZmlndXJhdGlvbiBjb25maWd1cmVkIG9uIHRoZSB0ZW5hbnQuXG4gICAqIEByZXR1cm5zIFRoZSBjb25maWd1cmF0aW9uLiBJZiBub3Qgc2V0IGluIHRlbmFudCBvcHRpb25zIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBnZXREZWZhdWx0Q29uZmlnKCk6IE9ic2VydmFibGU8TWFwRGVmYXVsdENvbmZpZz4ge1xuICAgIHJldHVybiB0aGlzLmdldE1hcE9wdGlvbjxNYXBEZWZhdWx0Q29uZmlnPihcbiAgICAgIE1hcFRlbmFudE9wdGlvbktleXMuQ09ORklHLFxuICAgICAgdGhpcy5vcHRpb25zLm1hcENvbmZpZyB8fCBkZWZhdWx0TWFwQ29uZmlnXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3VudHMgYWxsIG1hbmFnZWQgb2JqZWN0cyBpbiBhIGdpdmVuIGJvdW5kIHdpdGggYSBjOHlfUG9zaXRpb24gZnJhZ21lbnQuXG4gICAqIEBwYXJhbSBib3VuZCBUaGUgbGF0IGxuZyBib3VuZCB0byByZXF1ZXN0IHRoZSBtYW5hZ2VkIG9iamVjdHMgZm9yLlxuICAgKiBAcGFyYW0gYnlHcm91cElkTU8gVGhlIGdyb3VwIG1hbmFnZWQgb2JqZWN0IG9mIHdoaWNoIGRpcmVjdCBjaGlsZHJlbiBzaG91bGQgYmUgc2VhcmNoZWQgZm9yLlxuICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGFsbCBwb3NpdGlvbiBtYW5hZ2VkIG9iamVjdHMgaW4gdGhlIGdpdmVuIGJvdW5kIChhbmQgZ3JvdXApLlxuICAgKi9cbiAgYXN5bmMgZ2V0UG9zaXRpb25NT3NGcm9tQm91bmRDb3VudChcbiAgICBib3VuZDogTC5MYXRMbmdCb3VuZHMsXG4gICAgYnlHcm91cElkTU8/OiBJTWFuYWdlZE9iamVjdFxuICApOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLmdldFBvc2l0aW9uTU9zRnJvbUJvdW5kKGJvdW5kLCBieUdyb3VwSWRNTywgdHJ1ZSkgYXMgUHJvbWlzZTxudW1iZXI+O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYWxsIG1hbmFnZWQgb2JqZWN0cyB3aXRoIGEgYzh5X1Bvc2l0aW9uIGZyYWdtZW50IGluIGEgY2VydGFpbiBib3VuZGFyeS5cbiAgICogQHBhcmFtIGJvdW5kIFRoZSBsYXQgbG5nIGJvdW5kIHRvIHJlcXVlc3QgdGhlIG1hbmFnZWQgb2JqZWN0cyBmb3IuXG4gICAqIEByZXR1cm5zIEFsbCBwb3NpdGlvbiBtYW5hZ2VkIG9iamVjdHMgaW4gdGhlIGdpdmVuIGJvdW5kLlxuICAgKi9cbiAgYXN5bmMgZ2V0UG9zaXRpb25NT3NGcm9tQm91bmQoYm91bmQ6IEwuTGF0TG5nQm91bmRzKTogUHJvbWlzZTxQb3NpdGlvbk1hbmFnZWRPYmplY3RbXT47XG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCBtYW5hZ2VkIG9iamVjdHMgd2l0aCBhIGM4eV9Qb3NpdGlvbiBmcmFnbWVudCBpbiBhIGNlcnRhaW4gYm91bmRhcnkgdGhhdCBiZWxvbmdzIHRvIGEgY2VydGFpbiBncm91cC5cbiAgICogQHBhcmFtIGJvdW5kIFRoZSBsYXQgbG5nIGJvdW5kIHRvIHJlcXVlc3QgdGhlIG1hbmFnZWQgb2JqZWN0cyBmb3IuXG4gICAqIEBwYXJhbSBieUdyb3VwSWRNTyBUaGUgZ3JvdXAgbWFuYWdlZCBvYmplY3Qgb2Ygd2hpY2ggZGlyZWN0IGNoaWxkcmVuIHNob3VsZCBiZSBzZWFyY2hlZCBmb3IuXG4gICAqIEByZXR1cm5zIEFsbCBwb3NpdGlvbiBtYW5hZ2VkIG9iamVjdHMgaW4gdGhlIGdpdmVuIGJvdW5kIHRoYXQgYXJlIGNoaWxkcmVuIG9mIHRoZSBnaXZlbiBncm91cC5cbiAgICovXG4gIGFzeW5jIGdldFBvc2l0aW9uTU9zRnJvbUJvdW5kKFxuICAgIGJvdW5kOiBMLkxhdExuZ0JvdW5kcyxcbiAgICBieUdyb3VwSWRNTzogSU1hbmFnZWRPYmplY3RcbiAgKTogUHJvbWlzZTxQb3NpdGlvbk1hbmFnZWRPYmplY3RbXT47XG4gIC8qKlxuICAgKiBDb3VudHMgdGhlIG1hbmFnZWQgb2JqZWN0cyBpbiBhIGNlcnRhaW4gYm91bmRhcnkgYmVsb25naW5nIHRvIGEgZ3JvdXAuXG4gICAqIEBwYXJhbSBib3VuZCBUaGUgbGF0IGxuZyBib3VuZCB0byByZXF1ZXN0IHRoZSBtYW5hZ2VkIG9iamVjdHMgZm9yLlxuICAgKiBAcGFyYW0gYnlHcm91cElkTU8gVGhlIGdyb3VwIG1hbmFnZWQgb2JqZWN0IG9mIHdoaWNoIGRpcmVjdCBjaGlsZHJlbiBzaG91bGQgYmUgc2VhcmNoZWQgZm9yLlxuICAgKiBAcmV0dXJuIFRoZSBjb3VudCBvZiB0aGUgbWFuYWdlZCBvYmplY3RzLlxuICAgKi9cbiAgYXN5bmMgZ2V0UG9zaXRpb25NT3NGcm9tQm91bmQoXG4gICAgYm91bmQ6IEwuTGF0TG5nQm91bmRzLFxuICAgIGJ5R3JvdXBJZE1POiBJTWFuYWdlZE9iamVjdCxcbiAgICBjb3VudDogdHJ1ZVxuICApOiBQcm9taXNlPG51bWJlcj47XG4gIGFzeW5jIGdldFBvc2l0aW9uTU9zRnJvbUJvdW5kKFxuICAgIGJvdW5kOiBMLkxhdExuZ0JvdW5kcyxcbiAgICBieUdyb3VwSWRNTz86IElNYW5hZ2VkT2JqZWN0LFxuICAgIGNvdW50ID0gZmFsc2VcbiAgKTogUHJvbWlzZTxQb3NpdGlvbk1hbmFnZWRPYmplY3RbXSB8IG51bWJlcj4ge1xuICAgIGNvbnN0IHsgbGF0OiBsYXRNaW4sIGxuZzogbG5nTWluUmF3IH0gPSBib3VuZC5nZXRTb3V0aFdlc3QoKTtcbiAgICBjb25zdCB7IGxhdDogbGF0TWF4LCBsbmc6IGxuZ01heFJhdyB9ID0gYm91bmQuZ2V0Tm9ydGhFYXN0KCk7XG5cbiAgICBjb25zdCBsbmdNaW4gPSBsbmdNYXhSYXcgLSBsbmdNaW5SYXcgPiAzNjAgPyAtMTgwIDogdGhpcy5ub3JtYWxpemVMb25naXR1ZGUobG5nTWluUmF3KTtcbiAgICBjb25zdCBsbmdNYXggPSBsbmdNYXhSYXcgLSBsbmdNaW5SYXcgPiAzNjAgPyAxODAgOiB0aGlzLm5vcm1hbGl6ZUxvbmdpdHVkZShsbmdNYXhSYXcpO1xuXG4gICAgY29uc3QgYnlHcm91cElkRmlsdGVyID0gYnlHcm91cElkTU9cbiAgICAgID8gYChieWdyb3VwaWQoJHtieUdyb3VwSWRNTy5pZH0pIG9yIGlkIGVxICcke2J5R3JvdXBJZE1PLmlkfScpIGFuZCBgXG4gICAgICA6ICcnO1xuICAgIGxldCBib3VuZEZpbHRlciA9IGAkZmlsdGVyPSR7YnlHcm91cElkRmlsdGVyfWhhcyhjOHlfUG9zaXRpb24pIGFuZCBjOHlfUG9zaXRpb24ubGF0IGd0ICR7bGF0TWlufWQgYW5kIGM4eV9Qb3NpdGlvbi5sYXQgbHQgJHtsYXRNYXh9ZGA7XG5cbiAgICBpZiAobG5nTWluIDwgbG5nTWF4KSB7XG4gICAgICBib3VuZEZpbHRlciA9IGAke2JvdW5kRmlsdGVyfSBhbmQgYzh5X1Bvc2l0aW9uLmxuZyBndCAke2xuZ01pbn1kIGFuZCBjOHlfUG9zaXRpb24ubG5nIGx0ICR7bG5nTWF4fWRgO1xuICAgIH0gZWxzZSB7XG4gICAgICBib3VuZEZpbHRlciA9IGAke2JvdW5kRmlsdGVyfSBhbmQgKGM4eV9Qb3NpdGlvbi5sbmcgZ3QgJHtsbmdNaW59ZCBvciBjOHlfUG9zaXRpb24ubG5nIGx0ICR7bG5nTWF4fWQpYDtcbiAgICB9XG5cbiAgICBjb25zdCB7IHBhZ2luZywgZGF0YSB9ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnkubGlzdCh7XG4gICAgICBwYWdlU2l6ZTogY291bnQgPyAxIDogdGhpcy5NQVhfREVWSUNFX1BFUl9DTFVTVEVSLFxuICAgICAgd2l0aFRvdGFsUGFnZXM6IGNvdW50LFxuICAgICAgcXVlcnk6IGJvdW5kRmlsdGVyXG4gICAgfSk7XG4gICAgaWYgKGNvdW50KSB7XG4gICAgICByZXR1cm4gcGFnaW5nLnRvdGFsUGFnZXM7XG4gICAgfVxuICAgIHJldHVybiBkYXRhLm1hcCgocG1vOiBQb3NpdGlvbk1hbmFnZWRPYmplY3QpID0+XG4gICAgICBib3VuZC5jb250YWlucyhsYXRMbmcocG1vLmM4eV9Qb3NpdGlvbi5sYXQsIHBtby5jOHlfUG9zaXRpb24ubG5nKSlcbiAgICAgICAgPyBwbW9cbiAgICAgICAgOiB0aGlzLmRlbm9ybWFsaXplUE1PKHBtbywgYm91bmQpXG4gICAgKSBhcyBQb3NpdGlvbk1hbmFnZWRPYmplY3RbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCBkZXZpY2VzIHdpdGggYzh5X1Bvc2l0aW9uLlxuICAgKi9cbiAgYXN5bmMgZ2V0UG9zaXRpb25EZXZpY2VzKCk6IFByb21pc2U8UG9zaXRpb25NYW5hZ2VkT2JqZWN0W10+O1xuICAvKipcbiAgICogUmV0dXJucyBhbGwgZGV2aWNlcyB3aXRoIGM4eV9Qb3NpdGlvbi5cbiAgICogQHBhcmFtIHBhZ2VTaXplIFRoZSBwYWdlIHNpemUgdG8gcmV0dXJuLlxuICAgKi9cbiAgYXN5bmMgZ2V0UG9zaXRpb25EZXZpY2VzKHBhZ2VTaXplOiBudW1iZXIpOiBQcm9taXNlPFBvc2l0aW9uTWFuYWdlZE9iamVjdFtdPjtcbiAgLyoqXG4gICAqIFJldHVybnMgYWxsIGRldmljZXMgd2l0aCBjOHlfUG9zaXRpb24uXG4gICAqIEBwYXJhbSBwYWdlU2l6ZSBUaGUgcGFnZSBzaXplIHRvIHJldHVybi5cbiAgICogQHBhcmFtIGNvdW50IENvdW50aW5nIGlzIGRpc2FibGVkXG4gICAqL1xuICBhc3luYyBnZXRQb3NpdGlvbkRldmljZXMocGFnZVNpemU6IG51bWJlciwgY291bnQ6IGZhbHNlKTogUHJvbWlzZTxQb3NpdGlvbk1hbmFnZWRPYmplY3RbXT47XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYWxsIGRldmljZXMgd2l0aCBjOHlfUG9zaXRpb24uXG4gICAqIEBwYXJhbSBwYWdlU2l6ZSBUaGUgcGFnZSBzaXplIHRvIHJldHVybi5cbiAgICogQHBhcmFtIGNvdW50IENvdW50aW5nIGlzIGVuYWJsZWRcbiAgICovXG4gIGFzeW5jIGdldFBvc2l0aW9uRGV2aWNlcyhwYWdlU2l6ZTogbnVtYmVyLCBjb3VudDogdHJ1ZSk6IFByb21pc2U8bnVtYmVyPjtcbiAgLyoqXG4gICAqIFJldHVybnMgYWxsIGRldmljZXMgd2l0aCBjOHlfUG9zaXRpb24uXG4gICAqIEBwYXJhbSBwYWdlU2l6ZSBUaGUgcGFnZSBzaXplIHRvIHJldHVybi5cbiAgICogQHBhcmFtIGNvdW50IFN3aXRjaGVzIHRvIGNvdW50aW5nIG9ubHkuXG4gICAqIEByZXR1cm5zIEFsbCBkZXZpY2VzIG9yIHRoZSBkZXZpY2UgY291bnQgd2l0aCBhIGM4eV9Qb3NpdGlvbiBmcmFnbWVudC5cbiAgICovXG4gIGFzeW5jIGdldFBvc2l0aW9uRGV2aWNlcyhcbiAgICBwYWdlU2l6ZSA9IHRoaXMuTUFYX0RFVklDRV9QRVJfQ0xVU1RFUixcbiAgICBjb3VudD86IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxudW1iZXIgfCBQb3NpdGlvbk1hbmFnZWRPYmplY3RbXT4ge1xuICAgIGNvbnN0IHsgcGFnaW5nLCBkYXRhIH0gPSBhd2FpdCB0aGlzLmludmVudG9yeS5saXN0KHtcbiAgICAgIHBhZ2VTaXplOiBjb3VudCA/IDEgOiBwYWdlU2l6ZSxcbiAgICAgIHdpdGhUb3RhbFBhZ2VzOiAhIWNvdW50LFxuICAgICAgcXVlcnk6ICckZmlsdGVyPWhhcyhjOHlfUG9zaXRpb24pIGFuZCBoYXMoYzh5X0lzRGV2aWNlKSdcbiAgICB9KTtcbiAgICBpZiAoY291bnQpIHtcbiAgICAgIHJldHVybiBwYWdpbmcudG90YWxQYWdlcztcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEgYXMgUG9zaXRpb25NYW5hZ2VkT2JqZWN0W107XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbGwgbWFuYWdlZCBvYmplY3Qgd2l0aCBhIGM4eV9Qb3NpdGlvbiBmcmFnbWVudC5cbiAgICogQHBhcmFtIGJ5R3JvdXBJZE1PIFRoZSBncm91cCBtYW5hZ2VkIG9iamVjdCBvZiB3aGljaCBkaXJlY3QgY2hpbGRyZW4gc2hvdWxkIGJlIHNlYXJjaGVkIGZvci5cbiAgICogQHBhcmFtIHBhZ2VTaXplIERlZmluZXMgaG93IG1hbnkgcmVzdWx0cyBzaG91bGQgYmUgcmV0dXJuZWQuXG4gICAqIEByZXR1cm5zIFRoZSBtYW5hZ2VkIG9iamVjdHMgd2l0aCBwb3NpdGlvbi5cbiAgICovXG4gIGFzeW5jIGdldEFsbFBvc2l0aW9uTU9zKFxuICAgIGJ5R3JvdXBJZE1PPzogSU1hbmFnZWRPYmplY3QsXG4gICAgcGFnZVNpemUgPSA1MDBcbiAgKTogUHJvbWlzZTxJUmVzdWx0TGlzdDxQb3NpdGlvbk1hbmFnZWRPYmplY3Q+PiB7XG4gICAgY29uc3QgZmlsdGVyOiB7IHBhZ2VTaXplOiBudW1iZXI7IHdpdGhUb3RhbFBhZ2VzOiBib29sZWFuOyBxdWVyeTogc3RyaW5nIH0gPSB7XG4gICAgICBwYWdlU2l6ZSxcbiAgICAgIHdpdGhUb3RhbFBhZ2VzOiB0cnVlLFxuICAgICAgcXVlcnk6ICdoYXMoYzh5X1Bvc2l0aW9uKSdcbiAgICB9O1xuXG4gICAgaWYgKGJ5R3JvdXBJZE1PKSB7XG4gICAgICBmaWx0ZXIucXVlcnkgPSBgJGZpbHRlcj0oYnlncm91cGlkKCR7YnlHcm91cElkTU8uaWR9KSBvciBpZCBlcSAnJHtieUdyb3VwSWRNTy5pZH0nKSBhbmQgaGFzKGM4eV9Qb3NpdGlvbilgO1xuICAgIH1cblxuICAgIGNvbnN0IHsgcGFnaW5nLCBkYXRhLCByZXMgfSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5Lmxpc3QoZmlsdGVyKTtcblxuICAgIHJldHVybiB7XG4gICAgICByZXMsXG4gICAgICBwYWdpbmc6IHBhZ2luZyBhcyBQYWdpbmc8UG9zaXRpb25NYW5hZ2VkT2JqZWN0PixcbiAgICAgIGRhdGE6IGRhdGEgYXMgUG9zaXRpb25NYW5hZ2VkT2JqZWN0W11cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgYSByZWN0YW5ndWxhciBnZW9ncmFwaGljYWwgYXJlYSBiYXNlZCBvbiB0aGUgcG9zaXRpb25zIG9mIGFsbCBkZXZpY2VzLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIFtbTGF0TG5nQm91bmRzXV0gb2JqZWN0IGZpdHRpbmcgYWxsIGRldmljZXMnIGdlbyBwb3NpdGlvbnMuXG4gICAqL1xuICBhc3luYyBnZXRBbGxEZXZpY2VzQm91bmRzKCk6IFByb21pc2U8TC5MYXRMbmdCb3VuZHM+IHtcbiAgICBjb25zdCBmaWx0ZXIgPSAoY29vcmQ6ICdsYXQnIHwgJ2xuZycsIG9yZGVyOiAnYXNjJyB8ICdkZXNjJykgPT4gKHtcbiAgICAgIHBhZ2VTaXplOiAxLFxuICAgICAgcTogYCRmaWx0ZXI9aGFzKGM4eV9Qb3NpdGlvbikgJG9yZGVyYnk9Yzh5X1Bvc2l0aW9uLiR7Y29vcmR9ICR7b3JkZXJ9YFxuICAgIH0pO1xuXG4gICAgY29uc3QgZmlsdGVyUmV2ZXJzZSA9IChvcDogJ2x0JyB8ICdndCcsIG9yZGVyOiAnYXNjJyB8ICdkZXNjJykgPT4gKHtcbiAgICAgIHBhZ2VTaXplOiAxLFxuICAgICAgcTogYCRmaWx0ZXI9aGFzKGM4eV9Qb3NpdGlvbikgYW5kIGM4eV9Qb3NpdGlvbi5sbmcgJHtvcH0gMGQgJG9yZGVyYnk9Yzh5X1Bvc2l0aW9uLmxuZyAke29yZGVyfWBcbiAgICB9KTtcblxuICAgIGNvbnN0IFtsYXRNaW4sIGxhdE1heCwgbG5nTWluLCBsbmdNYXgsIGxuZ1Jldk1pbiwgbG5nUmV2TWF4XSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHRoaXMuaW52ZW50b3J5Lmxpc3QoZmlsdGVyKCdsYXQnLCAnYXNjJykpLFxuICAgICAgdGhpcy5pbnZlbnRvcnkubGlzdChmaWx0ZXIoJ2xhdCcsICdkZXNjJykpLFxuICAgICAgdGhpcy5pbnZlbnRvcnkubGlzdChmaWx0ZXIoJ2xuZycsICdhc2MnKSksXG4gICAgICB0aGlzLmludmVudG9yeS5saXN0KGZpbHRlcignbG5nJywgJ2Rlc2MnKSksXG4gICAgICB0aGlzLmludmVudG9yeS5saXN0KGZpbHRlclJldmVyc2UoJ2d0JywgJ2FzYycpKSxcbiAgICAgIHRoaXMuaW52ZW50b3J5Lmxpc3QoZmlsdGVyUmV2ZXJzZSgnbHQnLCAnZGVzYycpKVxuICAgIF0pLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5tYXAociA9PiBnZXQoci5kYXRhLCAnWzBdLmM4eV9Qb3NpdGlvbicpKSk7XG5cbiAgICBjb25zdCBzaGlmdFdvcmxkID0gKGxuZ1Jldk1pbj8ubG5nID8/IDApIC0gKGxuZ1Jldk1heD8ubG5nID8/IDApID4gMTgwO1xuXG4gICAgcmV0dXJuIGxhdExuZ0JvdW5kcyhcbiAgICAgIGxhdExuZyhsYXRNaW4/LmxhdCwgc2hpZnRXb3JsZCA/IGxuZ1Jldk1pbj8ubG5nIDogbG5nTWluPy5sbmcpLFxuICAgICAgbGF0TG5nKGxhdE1heD8ubGF0LCBzaGlmdFdvcmxkID8gbG5nUmV2TWF4Py5sbmcgKyAzNjAgOiBsbmdNYXg/LmxuZylcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNsdXN0ZXIgc2l6ZSBmb3IgY2x1c3RlcmVkIG1hcHMuIENvdW50aW5nIHRoZSBwb3NpdGlvbiBNT3MgaW4gYSBib3VuZGluZ1xuICAgKiBhbmQgaWYgaXQgcmVhY2ggYSB0aHJlc2hvbGQsIHJldHVybmluZyBhIFtbQ2x1c3RlclNpemVdXS5cbiAgICogQHBhcmFtIGJvdW5kIFRoZSBib3VuZGluZyB0byBjaGVjayBmb3IgY2x1c3RlciBzaXplLlxuICAgKiBAcmV0dXJucyBUaGUgY2x1c3RlciBzaXplLCBjYW4gYmUgTk9ORSwgRk9VUiBvciBTSVhURUVOLlxuICAgKi9cbiAgYXN5bmMgZ2V0Q2x1c3RlclNpemUoYm91bmQ6IEwuTGF0TG5nQm91bmRzKSB7XG4gICAgY29uc3QgY291bnQgPSBhd2FpdCB0aGlzLmdldFBvc2l0aW9uTU9zRnJvbUJvdW5kQ291bnQoYm91bmQpO1xuICAgIGxldCBjbHVzdGVyU2l6ZSA9IENsdXN0ZXJTaXplLk5PTkU7XG4gICAgaWYgKGNvdW50ID4gdGhpcy5DTFVTVEVSX0xFVkVMX1RIUkVTSE9MRCkge1xuICAgICAgY2x1c3RlclNpemUgPSBDbHVzdGVyU2l6ZS5TSVhURUVOO1xuICAgIH0gZWxzZSBpZiAoY291bnQgPiB0aGlzLk1BWF9ERVZJQ0VfUEVSX0NMVVNURVIpIHtcbiAgICAgIGNsdXN0ZXJTaXplID0gQ2x1c3RlclNpemUuRk9VUjtcbiAgICB9XG4gICAgcmV0dXJuIGNsdXN0ZXJTaXplO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNYXBPcHRpb248VD4oa2V5OiBNYXBUZW5hbnRPcHRpb25LZXlzLCBkZWZhdWx0VmFsdWU6IFQpIHtcbiAgICByZXR1cm4gZGVmZXIoKCkgPT5cbiAgICAgIHRoaXMub3B0aW9ucy5nZXRUZW5hbnRPcHRpb248VCB8IHN0cmluZz4oJ2NvbmZpZ3VyYXRpb24nLCBrZXksIGRlZmF1bHRWYWx1ZSlcbiAgICApLnBpcGUoXG4gICAgICBtYXAoY29uZmlnID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGBUaGUgdGVuYW50IG9wdGlvbiBmb3IgbWFwcyAnY29uZmlndXJhdGlvbi4ke2tleX0nIGlzIG5vdCBhIHZhbGlkIEpTT04gc3RydWN0dXJlLmBcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaGlmdHMgbG9uZ2l0dWRlcyByZWNlaXZlZCBmcm9tIExlYWZsZXQuanMgaW4gdGhlIFstMTgwIC0gayozNjA7IDE4MCArIGsqMzYwXSByYW5nZXdoZW5cbiAgICogYG5vV3JhcGAgaXMgZW5hYmxlZCB0byB0aGUgWy0xODA7IDE4MF0gcmFuZ2UgZXhwZWN0ZWQgZm9yIHZhbHVlcyBvZiB0aGUgYzh5X1Bvc2l0aW9uIGZyYWdtZW50LlxuICAgKlxuICAgKiBAcGFyYW0gbG5nIExvbmdpdHVkZSB0byBzaGlmdC5cbiAgICogQHJldHVybnMgIExvbmdpdHVkZSB2YWx1ZSBpbiB0aGUgWy0xODA7IDE4MF0gcmFuZ2VcbiAgICovXG4gIHByaXZhdGUgbm9ybWFsaXplTG9uZ2l0dWRlKGxuZzogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKCgoKGxuZyArIDE4MCkgJSAzNjApICsgMzYwKSAlIDM2MCkgLSAxODA7XG4gIH1cblxuICAvKipcbiAgICogU2hpZnRzIGxvbmdpdHVkZXMgaW4gdGhlIFstMTgwOyAxODBdIHJhbmdlIGV4cGVjdGVkIGZvciB2YWx1ZXMgb2YgdGhlIGM4eV9Qb3NpdGlvbiBmcmFnbWVudFxuICAgKiB0aGUgdGhlIFstMTgwIC0gayozNjA7IDE4MCArIGsqMzYwXSByYW5nZSBleHBlY3RlZCBmcm9tIExlYWZsZXQuanMgd2hlbiBgbm9XcmFwYCBpcyBlbmFibGVkLlxuICAgKlxuICAgKiBUaGUgbWV0aG9kIG5haXZlbHkgYWRkcy9zdWJ0cmFjdHMgMzYwIGRlZ3JlZXMgdG8gdGhlIG9yaWdpbmFsIHZhbHVlIHVudGlsIHRoZSBwb3NpdGlvbiBmaXRzIGluIHRoZSBleHBlY3RlZCBib3VuZHMuXG4gICAqXG4gICAqIEBwYXJhbSBwbW8gQSBtYW5hZ2VkIG9iamVjdCB3aXRoIGEgYGM4eV9Qb3NpdGlvbmAgZnJhZ21lbnRcbiAgICogQHBhcmFtIGJvdW5kcyBUaGUgYm91bmRzIHdoZXJlIHRoZSBwb3NpdGlvbiBzaG91bGQgZml0XG4gICAqIEByZXR1cm5zIEEgbWFuYWdlZCBvYmplY3Qgd2hvc2UgYGM4eV9Qb3NpdGlvbmAncyBgbG5nYCB2YWx1ZXMgaGFzIGJlZW4gc2hpZnRlZCB0byBmaXQgaW4gYm91bmRzXG4gICAqL1xuICBwcml2YXRlIGRlbm9ybWFsaXplUE1PKFxuICAgIHBtbzogUG9zaXRpb25NYW5hZ2VkT2JqZWN0LFxuICAgIGJvdW5kczogTC5MYXRMbmdCb3VuZHNcbiAgKTogUG9zaXRpb25NYW5hZ2VkT2JqZWN0IHtcbiAgICBsZXQgeyBsbmcgfSA9IHBtby5jOHlfUG9zaXRpb247XG4gICAgY29uc3Qgc2hpZnRGYWN0b3IgPSBsbmcgPiBib3VuZHMuZ2V0RWFzdCgpID8gLTEgOiAxO1xuXG4gICAgd2hpbGUgKCFib3VuZHMuY29udGFpbnMobGF0TG5nKHBtby5jOHlfUG9zaXRpb24ubGF0LCBsbmcpKSkge1xuICAgICAgbG5nICs9IHNoaWZ0RmFjdG9yICogMzYwO1xuICAgIH1cblxuICAgIHBtby5jOHlfUG9zaXRpb24ubG5nID0gbG5nO1xuICAgIHJldHVybiBwbW87XG4gIH1cbn1cbiJdfQ==
|
|
@@ -49,15 +49,6 @@ export class FirmwareListComponent {
|
|
|
49
49
|
this.noResultsSubtitle = gettext('Refine your search terms or check your spelling.');
|
|
50
50
|
this.noDataSubtitle = gettext('Add a new firmware by clicking below.');
|
|
51
51
|
this.serverSideDataCallback = this.onDataSourceModifier.bind(this);
|
|
52
|
-
this.sizeRequest = this.repositoryService
|
|
53
|
-
.listRepositoryEntries(RepositoryType.FIRMWARE, {
|
|
54
|
-
skipDefaultOrder: true,
|
|
55
|
-
params: { pageSize: 1 }
|
|
56
|
-
})
|
|
57
|
-
.then(response => {
|
|
58
|
-
this.sizeRequestDone = true;
|
|
59
|
-
return response?.paging?.totalPages;
|
|
60
|
-
});
|
|
61
52
|
}
|
|
62
53
|
ngOnInit() {
|
|
63
54
|
this.actionControls.push({
|
|
@@ -133,6 +124,15 @@ export class FirmwareListComponent {
|
|
|
133
124
|
params: { pageSize: 1 }
|
|
134
125
|
})
|
|
135
126
|
.then(response => response?.paging?.totalPages);
|
|
127
|
+
this.sizeRequest = this.repositoryService
|
|
128
|
+
.listRepositoryEntries(RepositoryType.FIRMWARE, {
|
|
129
|
+
skipDefaultOrder: true,
|
|
130
|
+
params: { pageSize: 1 }
|
|
131
|
+
})
|
|
132
|
+
.then(response => {
|
|
133
|
+
this.sizeRequestDone = true;
|
|
134
|
+
return response?.paging?.totalPages;
|
|
135
|
+
});
|
|
136
136
|
const [dataResponse, size, filteredSize] = await Promise.all([
|
|
137
137
|
dataRequest,
|
|
138
138
|
this.sizeRequest,
|
|
@@ -158,4 +158,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
158
158
|
type: Component,
|
|
159
159
|
args: [{ selector: 'c8y-firmware-list', template: "<c8y-title>\n {{ 'Firmware repository' | translate }}\n</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n icon=\"c8y-management\"\n label=\"{{ 'Management' | translate }}\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n icon=\"c8y-firmware\"\n label=\"{{ 'Firmware repository' | translate }}\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Add firmware' | translate }}\"\n (click)=\"addFirmware()\"\n data-cy=\"firmware-list--toolbar-add-firmware-btn\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add firmware' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Add firmware patch' | translate }}\"\n *ngIf=\"isDataPresent$ | async\"\n (click)=\"addFirmwarePatch()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add firmware patch' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help\n src=\"/docs/device-management-application/managing-device-data/#managing-firmware\"\n></c8y-help>\n\n<div class=\"content-fullpage border-top border-bottom\">\n <c8y-data-grid\n [title]=\"'Firmware' | translate\"\n [refresh]=\"refresh$\"\n [pagination]=\"pagination\"\n [columns]=\"columns\"\n [actionControls]=\"actionControls\"\n [infiniteScroll]=\"'auto'\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n >\n <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'c8y-tools'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"stats?.size > 0 ? (noResultsSubtitle | translate) : (noDataSubtitle | translate)\"\n *emptyStateContext=\"let stats\"\n [horizontal]=\"stats?.size > 0\"\n >\n <p *ngIf=\"stats?.size === 0\">\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Add firmware' | translate }}\"\n type=\"button\"\n (click)=\"addFirmware()\"\n >\n {{ 'Add firmware' | translate }}\n </button>\n </p>\n </c8y-ui-empty-state>\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n </c8y-data-grid>\n</div>\n" }]
|
|
160
160
|
}], ctorParameters: () => [{ type: i1.RepositoryService }, { type: i2.DataGridService }, { type: i2.ModalService }, { type: i3.BsModalService }, { type: i4.TranslateService }, { type: i2.AlertService }, { type: i5.Router }, { type: i5.ActivatedRoute }] });
|
|
161
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlybXdhcmUtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9yZXBvc2l0b3J5L2Zpcm13YXJlL2xpc3QvZmlybXdhcmUtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9yZXBvc2l0b3J5L2Zpcm13YXJlL2xpc3QvZmlybXdhcmUtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpELE9BQU8sRUFFTCxZQUFZLEVBQ1osaUJBQWlCLEVBRWpCLGVBQWUsRUFFZixZQUFZLEVBR1osTUFBTSxFQUNOLE9BQU8sRUFDUixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsb0JBQW9CLEVBQ3BCLG9DQUFvQyxFQUNwQyw0QkFBNEIsRUFDNUIsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxrQkFBa0IsRUFDbkIsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFnQixNQUFNLHFCQUFxQixDQUFDO0FBQ25FLE9BQU8sRUFBYyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOzs7Ozs7OztBQU10RixNQUFNLE9BQU8scUJBQXFCO0lBZ0NoQyxZQUNVLGlCQUFvQyxFQUNwQyxXQUE0QixFQUM1QixZQUEwQixFQUMxQixjQUE4QixFQUM5QixnQkFBa0MsRUFDbEMsWUFBMEIs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QztJQUVELFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBYztRQUNoQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQzs4R0ExS1UscUJBQXFCO2tHQUFyQixxQkFBcUIseURDbkNsQywrMEVBNEVBOzsyRkR6Q2EscUJBQXFCO2tCQUpqQyxTQUFTOytCQUNFLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0LCBJUmVzdWx0TGlzdCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEFjdGlvbkNvbnRyb2wsXG4gIEFsZXJ0U2VydmljZSxcbiAgQnVpbHRJbkFjdGlvblR5cGUsXG4gIENvbHVtbixcbiAgRGF0YUdyaWRTZXJ2aWNlLFxuICBEYXRhU291cmNlTW9kaWZpZXIsXG4gIE1vZGFsU2VydmljZSxcbiAgU2VydmVyU2lkZURhdGFDYWxsYmFjayxcbiAgU2VydmVyU2lkZURhdGFSZXN1bHQsXG4gIFN0YXR1cyxcbiAgZ2V0dGV4dFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7XG4gIERlc2NyaXB0aW9uR3JpZENvbHVtbixcbiAgRGV2aWNlVHlwZUdyaWRDb2x1bW4sXG4gIFBST0RVQ1RfRVhQRVJJRU5DRV9SRVBPU0lUT1JZX1NIQVJFRCxcbiAgUmVwb3NpdG9yeUl0ZW1OYW1lR3JpZENvbHVtbixcbiAgUmVwb3NpdG9yeVNlcnZpY2UsXG4gIFJlcG9zaXRvcnlUeXBlLFxuICBWZXJzaW9uc0dyaWRDb2x1bW5cbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9yZXBvc2l0b3J5L3NoYXJlZCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSwgTW9kYWxPcHRpb25zIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmcm9tLCBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFkZEZpcm13YXJlTW9kYWxDb21wb25lbnQgfSBmcm9tICcuL2FkZC1maXJtd2FyZS1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWRkRmlybXdhcmVQYXRjaE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi9hZGQtZmlybXdhcmUtcGF0Y2gtbW9kYWwuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWZpcm13YXJlLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJ2Zpcm13YXJlLWxpc3QuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEZpcm13YXJlTGlzdENvbXBvbmVudCB7XG4gIHNpemVSZXF1ZXN0OiBQcm9taXNlPG51bWJlcj47XG4gIHNpemVSZXF1ZXN0RG9uZSA9IGZhbHNlO1xuICByZWZyZXNoJDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBpc0RhdGFQcmVzZW50JDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IGZyb20oXG4gICAgdGhpcy5yZXBvc2l0b3J5U2VydmljZS5saXN0UmVwb3NpdG9yeUVudHJpZXMoUmVwb3NpdG9yeVR5cGUuRklSTVdBUkUsIHsgc2tpcExlZ2FjeTogdHJ1ZSB9KVxuICApLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YS5sZW5ndGggPiAwKSk7XG5cbiAgY29sdW1uczogQ29sdW1uW10gPSBbXG4gICAgbmV3IFJlcG9zaXRvcnlJdGVtTmFtZUdyaWRDb2x1bW4oe1xuICAgICAgZmlsdGVyTGFiZWw6IGdldHRleHQoJ0ZpbHRlciBmaXJtd2FyZSBieSBuYW1lJyksXG4gICAgICBwbGFjZWhvbGRlcjogZ2V0dGV4dCgndWJ1bnR1IGNvcmUnKVxuICAgIH0pLFxuICAgIG5ldyBEZXNjcmlwdGlvbkdyaWRDb2x1bW4oe1xuICAgICAgZmlsdGVyTGFiZWw6IGdldHRleHQoJ0ZpbHRlciBmaXJtd2FyZSBieSBkZXNjcmlwdGlvbicpLFxuICAgICAgcGxhY2Vob2xkZXI6IGdldHRleHQoJ0Zpcm13YXJlIGZvciBoYXJkd2FyZSByZXZpc2lvbiBCJylcbiAgICB9KSxcbiAgICBuZXcgRGV2aWNlVHlwZUdyaWRDb2x1bW4oeyBmaWx0ZXJMYWJlbDogZ2V0dGV4dCgnRmlsdGVyIGZpcm13YXJlIGJ5IGRldmljZSB0eXBlJykgfSksXG4gICAgbmV3IFZlcnNpb25zR3JpZENvbHVtbigpXG4gIF07XG4gIGFjdGlvbkNvbnRyb2xzOiBBY3Rpb25Db250cm9sW10gPSBbXTtcbiAgc2VydmVyU2lkZURhdGFDYWxsYmFjazogU2VydmVyU2lkZURhdGFDYWxsYmFjaztcbiAgcGFnaW5hdGlvbiA9IHtcbiAgICBwYWdlU2l6ZTogNTAsXG4gICAgY3VycmVudFBhZ2U6IDFcbiAgfTtcblxuICBub1Jlc3VsdHNNZXNzYWdlID0gZ2V0dGV4dCgnTm8gcmVzdWx0cyB0byBkaXNwbGF5LicpO1xuICBub0RhdGFNZXNzYWdlID0gZ2V0dGV4dCgnTm8gZmlybXdhcmUgdG8gZGlzcGxheS4nKTtcbiAgbm9SZXN1bHRzU3VidGl0bGUgPSBnZXR0ZXh0KCdSZWZpbmUgeW91ciBzZWFyY2ggdGVybXMgb3IgY2hlY2sgeW91ciBzcGVsbGluZy4nKTtcbiAgbm9EYXRhU3VidGl0bGUgPSBnZXR0ZXh0KCdBZGQgYSBuZXcgZmlybXdhcmUgYnkgY2xpY2tpbmcgYmVsb3cuJyk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZXBvc2l0b3J5U2VydmljZTogUmVwb3NpdG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBncmlkU2VydmljZTogRGF0YUdyaWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBic01vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVxuICApIHtcbiAgICB0aGlzLnNlcnZlclNpZGVEYXRhQ2FsbGJhY2sgPSB0aGlzLm9uRGF0YVNvdXJjZU1vZGlmaWVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5zaXplUmVxdWVzdCA9IHRoaXMucmVwb3NpdG9yeVNlcnZpY2VcbiAgICAgIC5saXN0UmVwb3NpdG9yeUVudHJpZXMoUmVwb3NpdG9yeVR5cGUuRklSTVdBUkUsIHtcbiAgICAgICAgc2tpcERlZmF1bHRPcmRlcjogdHJ1ZSxcbiAgICAgICAgcGFyYW1zOiB7IHBhZ2VTaXplOiAxIH1cbiAgICAgIH0pXG4gICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgIHRoaXMuc2l6ZVJlcXVlc3REb25lID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlPy5wYWdpbmc/LnRvdGFsUGFnZXM7XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuYWN0aW9uQ29udHJvbHMucHVzaCh7XG4gICAgICB0eXBlOiBCdWlsdEluQWN0aW9uVHlwZS5FZGl0LFxuICAgICAgY2FsbGJhY2s6IHRoaXMuZWRpdEZpcm13YXJlLmJpbmQodGhpcylcbiAgICB9KTtcbiAgICB0aGlzLmFjdGlvbkNvbnRyb2xzLnB1c2goe1xuICAgICAgdHlwZTogQnVpbHRJbkFjdGlvblR5cGUuRGVsZXRlLFxuICAgICAgY2FsbGJhY2s6IHRoaXMuZGVsZXRlRmlybXdhcmUuYmluZCh0aGlzKVxuICAgIH0pO1xuICB9XG5cbiAgYWRkRmlybXdhcmUoKSB7XG4gICAgY29uc3QgY29uZmlnOiBNb2RhbE9wdGlvbnM8QWRkRmlybXdhcmVNb2RhbENvbXBvbmVudD4gPSB7XG4gICAgICBjbGFzczogJ21vZGFsLXNtJyxcbiAgICAgIGFyaWFEZXNjcmliZWRieTogJ2FkZEZpcm13YXJlTW9kYWxEZXNjcmlwdGlvbicsXG4gICAgICBhcmlhTGFiZWxsZWRCeTogJ2FkZEZpcm13YXJlTW9kYWxUaXRsZScsXG4gICAgICBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlLFxuICAgICAga2V5Ym9hcmQ6IGZhbHNlXG4gICAgfTtcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMuYnNNb2RhbFNlcnZpY2Uuc2hvdyhBZGRGaXJtd2FyZU1vZGFsQ29tcG9uZW50LCBjb25maWcpO1xuICAgIG1vZGFsUmVmLmNvbnRlbnQuc2F2ZWQuc3Vic2NyaWJlKHNhdmVkRmlybXdhcmUgPT4gdGhpcy5lZGl0RmlybXdhcmUoc2F2ZWRGaXJtd2FyZSkpO1xuICB9XG5cbiAgYWRkRmlybXdhcmVQYXRjaCgpIHtcbiAgICBjb25zdCBjb25maWc6IE1vZGFsT3B0aW9uczxBZGRGaXJtd2FyZVBhdGNoTW9kYWxDb21wb25lbnQ+ID0ge1xuICAgICAgY2xhc3M6ICdtb2RhbC1zbScsXG4gICAgICBhcmlhRGVzY3JpYmVkYnk6ICdhZGRGaXJtd2FyZVBhdGNoTW9kYWxEZXNjcmlwdGlvbicsXG4gICAgICBhcmlhTGFiZWxsZWRCeTogJ2FkZEZpcm13YXJlUGF0Y2hNb2RhbFRpdGxlJyxcbiAgICAgIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IHRydWUsXG4gICAgICBrZXlib2FyZDogZmFsc2VcbiAgICB9O1xuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5ic01vZGFsU2VydmljZS5zaG93KEFkZEZpcm13YXJlUGF0Y2hNb2RhbENvbXBvbmVudCwgY29uZmlnKTtcbiAgICBtb2RhbFJlZi5jb250ZW50LnNhdmVkLnN1YnNjcmliZShzYXZlZEZpcm13YXJlID0+IHRoaXMuZWRpdEZpcm13YXJlKHNhdmVkRmlybXdhcmUpKTtcbiAgfVxuXG4gIGVkaXRGaXJtd2FyZShmaXJtd2FyZTogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4pIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbZmlybXdhcmUuaWRdLCB7IHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGUgfSk7XG4gIH1cblxuICBhc3luYyBkZWxldGVGaXJtd2FyZShmaXJtd2FyZTogSU1hbmFnZWRPYmplY3QpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdGl0bGUgPSBnZXR0ZXh0KCdEZWxldGUgZmlybXdhcmUnKTtcbiAgICAgIGNvbnN0IGJvZHkgPSBgXG4gICAgICAgICR7dGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgZ2V0dGV4dChcbiAgICAgICAgICAgICdZb3UgYXJlIGFib3V0IHRvIGRlbGV0ZSBmaXJtd2FyZSBcInt7IG5hbWUgfX1cIiB3aXRoIGFsbCBpdHMgdmVyc2lvbnMgYW5kIHBhdGNoZXMuJ1xuICAgICAgICAgICksXG4gICAgICAgICAgeyBuYW1lOiBmaXJtd2FyZS5uYW1lIH1cbiAgICAgICAgKX1cbiAgICAgICAgJHt0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChnZXR0ZXh0KCdUaGlzIG9wZXJhdGlvbiBpcyBpcnJldmVyc2libGUuJykpfVxuICAgICAgICAke3RoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGdldHRleHQoJ0RvIHlvdSB3YW50IHRvIHByb2NlZWQ/JykpfVxuICAgICAgYDtcbiAgICAgIGNvbnN0IGxhYmVscyA9IHtcbiAgICAgICAgb2s6IGdldHRleHQoJ0RlbGV0ZScpXG4gICAgICB9O1xuICAgICAgYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2UuY29uZmlybShcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIGJvZHksXG4gICAgICAgIFN0YXR1cy5EQU5HRVIsXG4gICAgICAgIGxhYmVscyxcbiAgICAgICAge30sXG4gICAgICAgIHsgZXZlbnROYW1lOiBQUk9EVUNUX0VYUEVSSUVOQ0VfUkVQT1NJVE9SWV9TSEFSRUQuRklSTVdBUkUuRVZFTlRTLlJFUE9TSVRPUlkgfVxuICAgICAgKTtcbiAgICAgIGF3YWl0IHRoaXMucmVwb3NpdG9yeVNlcnZpY2UuZGVsZXRlKGZpcm13YXJlKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnRmlybXdhcmUgZGVsZXRlZC4nKSk7XG4gICAgICB0aGlzLnJlZnJlc2gkLm5leHQoKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgLy8gb25seSBpZiBub3QgY2FuY2VsIGZyb20gbW9kYWxcbiAgICAgIGlmIChleCkge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGV4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBvbkRhdGFTb3VyY2VNb2RpZmllcihcbiAgICBkYXRhU291cmNlTW9kaWZpZXI6IERhdGFTb3VyY2VNb2RpZmllclxuICApOiBQcm9taXNlPFNlcnZlclNpZGVEYXRhUmVzdWx0PiB7XG4gICAgY29uc3QgZGF0YVJlcXVlc3Q6IFByb21pc2U8SVJlc3VsdExpc3Q8SU1hbmFnZWRPYmplY3Q+PiA9XG4gICAgICB0aGlzLnJlcG9zaXRvcnlTZXJ2aWNlLmxpc3RSZXBvc2l0b3J5RW50cmllcyhSZXBvc2l0b3J5VHlwZS5GSVJNV0FSRSwge1xuICAgICAgICBxdWVyeTogdGhpcy5ncmlkU2VydmljZS5nZXRRdWVyeU9iaihkYXRhU291cmNlTW9kaWZpZXIuY29sdW1ucyksXG4gICAgICAgIHNraXBEZWZhdWx0T3JkZXI6IHRydWUsXG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIHBhZ2VTaXplOiBkYXRhU291cmNlTW9kaWZpZXIucGFnaW5hdGlvbi5wYWdlU2l6ZSxcbiAgICAgICAgICBjdXJyZW50UGFnZTogZGF0YVNvdXJjZU1vZGlmaWVyLnBhZ2luYXRpb24uY3VycmVudFBhZ2VcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBjb25zdCBmaWx0ZXJlcmRTaXplUmVxdWVzdDogUHJvbWlzZTxudW1iZXI+ID0gdGhpcy5yZXBvc2l0b3J5U2VydmljZVxuICAgICAgLmxpc3RSZXBvc2l0b3J5RW50cmllcyhSZXBvc2l0b3J5VHlwZS5GSVJNV0FSRSwge1xuICAgICAgICBza2lwRGVmYXVsdE9yZGVyOiB0cnVlLFxuICAgICAgICBxdWVyeTogdGhpcy5ncmlkU2VydmljZS5nZXRRdWVyeU9iaihkYXRhU291cmNlTW9kaWZpZXIuY29sdW1ucyksXG4gICAgICAgIHBhcmFtczogeyBwYWdlU2l6ZTogMSB9XG4gICAgICB9KVxuICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2U/LnBhZ2luZz8udG90YWxQYWdlcyk7XG5cbiAgICBjb25zdCBbZGF0YVJlc3BvbnNlLCBzaXplLCBmaWx0ZXJlZFNpemVdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgZGF0YVJlcXVlc3QsXG4gICAgICB0aGlzLnNpemVSZXF1ZXN0LFxuICAgICAgZmlsdGVyZXJkU2l6ZVJlcXVlc3RcbiAgICBdKTtcblxuICAgIGNvbnN0IHsgcmVzLCBkYXRhLCBwYWdpbmcgfSA9IGRhdGFSZXNwb25zZTtcblxuICAgIGNvbnN0IHNlcnZlclNpZGVEYXRhUmVzdWx0OiBTZXJ2ZXJTaWRlRGF0YVJlc3VsdCA9IHtcbiAgICAgIHJlcyxcbiAgICAgIGRhdGEsXG4gICAgICBwYWdpbmcsXG4gICAgICBmaWx0ZXJlZFNpemUsXG4gICAgICBzaXplXG4gICAgfTtcblxuICAgIHJldHVybiBzZXJ2ZXJTaWRlRGF0YVJlc3VsdDtcbiAgfVxuXG4gIHRyYWNrQnlOYW1lKF9pbmRleCwgY29sdW1uOiBDb2x1bW4pOiBzdHJpbmcge1xuICAgIHJldHVybiBjb2x1bW4ubmFtZTtcbiAgfVxufVxuIiwiPGM4eS10aXRsZT5cbiAge3sgJ0Zpcm13YXJlIHJlcG9zaXRvcnknIHwgdHJhbnNsYXRlIH19XG48L2M4eS10aXRsZT5cblxuPGM4eS1icmVhZGNydW1iPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbVxuICAgIGljb249XCJjOHktbWFuYWdlbWVudFwiXG4gICAgbGFiZWw9XCJ7eyAnTWFuYWdlbWVudCcgfCB0cmFuc2xhdGUgfX1cIlxuICA+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbVxuICAgIGljb249XCJjOHktZmlybXdhcmVcIlxuICAgIGxhYmVsPVwie3sgJ0Zpcm13YXJlIHJlcG9zaXRvcnknIHwgdHJhbnNsYXRlIH19XCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbjwvYzh5LWJyZWFkY3J1bWI+XG5cbjxjOHktYWN0aW9uLWJhci1pdGVtIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJidG4gYnRuLWxpbmtcIlxuICAgIHRpdGxlPVwie3sgJ0FkZCBmaXJtd2FyZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgIChjbGljayk9XCJhZGRGaXJtd2FyZSgpXCJcbiAgICBkYXRhLWN5PVwiZmlybXdhcmUtbGlzdC0tdG9vbGJhci1hZGQtZmlybXdhcmUtYnRuXCJcbiAgPlxuICAgIDxpIGM4eUljb249XCJwbHVzLWNpcmNsZVwiPjwvaT5cbiAgICB7eyAnQWRkIGZpcm13YXJlJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW0gW3BsYWNlbWVudF09XCIncmlnaHQnXCI+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiXG4gICAgdGl0bGU9XCJ7eyAnQWRkIGZpcm13YXJlIHBhdGNoJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgKm5nSWY9XCJpc0RhdGFQcmVzZW50JCB8IGFzeW5jXCJcbiAgICAoY2xpY2spPVwiYWRkRmlybXdhcmVQYXRjaCgpXCJcbiAgPlxuICAgIDxpIGM4eUljb249XCJwbHVzLWNpcmNsZVwiPjwvaT5cbiAgICB7eyAnQWRkIGZpcm13YXJlIHBhdGNoJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPGM4eS1oZWxwXG4gIHNyYz1cIi9kb2NzL2RldmljZS1tYW5hZ2VtZW50LWFwcGxpY2F0aW9uL21hbmFnaW5nLWRldmljZS1kYXRhLyNtYW5hZ2luZy1maXJtd2FyZVwiXG4+PC9jOHktaGVscD5cblxuPGRpdiBjbGFzcz1cImNvbnRlbnQtZnVsbHBhZ2UgYm9yZGVyLXRvcCBib3JkZXItYm90dG9tXCI+XG4gIDxjOHktZGF0YS1ncmlkXG4gICAgW3RpdGxlXT1cIidGaXJtd2FyZScgfCB0cmFuc2xhdGVcIlxuICAgIFtyZWZyZXNoXT1cInJlZnJlc2gkXCJcbiAgICBbcGFnaW5hdGlvbl09XCJwYWdpbmF0aW9uXCJcbiAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcbiAgICBbYWN0aW9uQ29udHJvbHNdPVwiYWN0aW9uQ29udHJvbHNcIlxuICAgIFtpbmZpbml0ZVNjcm9sbF09XCInYXV0bydcIlxuICAgIFtzZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrXT1cInNlcnZlclNpZGVEYXRhQ2FsbGJhY2tcIlxuICA+XG4gICAgPGM4eS11aS1lbXB0eS1zdGF0ZVxuICAgICAgW2ljb25dPVwic3RhdHM/LnNpemUgPiAwID8gJ3NlYXJjaCcgOiAnYzh5LXRvb2xzJ1wiXG4gICAgICBbdGl0bGVdPVwic3RhdHM/LnNpemUgPiAwID8gKG5vUmVzdWx0c01lc3NhZ2UgfCB0cmFuc2xhdGUpIDogKG5vRGF0YU1lc3NhZ2UgfCB0cmFuc2xhdGUpXCJcbiAgICAgIFtzdWJ0aXRsZV09XCJzdGF0cz8uc2l6ZSA+IDAgPyAobm9SZXN1bHRzU3VidGl0bGUgfCB0cmFuc2xhdGUpIDogKG5vRGF0YVN1YnRpdGxlIHwgdHJhbnNsYXRlKVwiXG4gICAgICAqZW1wdHlTdGF0ZUNvbnRleHQ9XCJsZXQgc3RhdHNcIlxuICAgICAgW2hvcml6b250YWxdPVwic3RhdHM/LnNpemUgPiAwXCJcbiAgICA+XG4gICAgICA8cCAqbmdJZj1cInN0YXRzPy5zaXplID09PSAwXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICAgICAgdGl0bGU9XCJ7eyAnQWRkIGZpcm13YXJlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgKGNsaWNrKT1cImFkZEZpcm13YXJlKClcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgJ0FkZCBmaXJtd2FyZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3A+XG4gICAgPC9jOHktdWktZW1wdHktc3RhdGU+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnM7IHRyYWNrQnk6IHRyYWNrQnlOYW1lXCI+XG4gICAgICA8Yzh5LWNvbHVtbiBbbmFtZV09XCJjb2x1bW4ubmFtZVwiPjwvYzh5LWNvbHVtbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9jOHktZGF0YS1ncmlkPlxuPC9kaXY+XG4iXX0=
|
|
161
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlybXdhcmUtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9yZXBvc2l0b3J5L2Zpcm13YXJlL2xpc3QvZmlybXdhcmUtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9yZXBvc2l0b3J5L2Zpcm13YXJlL2xpc3QvZmlybXdhcmUtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpELE9BQU8sRUFFTCxZQUFZLEVBQ1osaUJBQWlCLEVBRWpCLGVBQWUsRUFFZixZQUFZLEVBR1osTUFBTSxFQUNOLE9BQU8sRUFDUixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsb0JBQW9CLEVBQ3BCLG9DQUFvQyxFQUNwQyw0QkFBNEIsRUFDNUIsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxrQkFBa0IsRUFDbkIsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFnQixNQUFNLHFCQUFxQixDQUFDO0FBQ25FLE9BQU8sRUFBYyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOzs7Ozs7OztBQU10RixNQUFNLE9BQU8scUJBQXFCO0lBZ0NoQyxZQUNVLGlCQUFvQyxFQUNwQyxXQUE0QixFQUM1QixZQUEwQixFQUMxQixjQUE4QixFQUM5QixnQkFBa0MsRUFDbEMsWUFBMEIs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QztJQUVELFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBYztRQUNoQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQzs4R0EzS1UscUJBQXFCO2tHQUFyQixxQkFBcUIseURDbkNsQywrMEVBNEVBOzsyRkR6Q2EscUJBQXFCO2tCQUpqQyxTQUFTOytCQUNFLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0LCBJUmVzdWx0TGlzdCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEFjdGlvbkNvbnRyb2wsXG4gIEFsZXJ0U2VydmljZSxcbiAgQnVpbHRJbkFjdGlvblR5cGUsXG4gIENvbHVtbixcbiAgRGF0YUdyaWRTZXJ2aWNlLFxuICBEYXRhU291cmNlTW9kaWZpZXIsXG4gIE1vZGFsU2VydmljZSxcbiAgU2VydmVyU2lkZURhdGFDYWxsYmFjayxcbiAgU2VydmVyU2lkZURhdGFSZXN1bHQsXG4gIFN0YXR1cyxcbiAgZ2V0dGV4dFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7XG4gIERlc2NyaXB0aW9uR3JpZENvbHVtbixcbiAgRGV2aWNlVHlwZUdyaWRDb2x1bW4sXG4gIFBST0RVQ1RfRVhQRVJJRU5DRV9SRVBPU0lUT1JZX1NIQVJFRCxcbiAgUmVwb3NpdG9yeUl0ZW1OYW1lR3JpZENvbHVtbixcbiAgUmVwb3NpdG9yeVNlcnZpY2UsXG4gIFJlcG9zaXRvcnlUeXBlLFxuICBWZXJzaW9uc0dyaWRDb2x1bW5cbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9yZXBvc2l0b3J5L3NoYXJlZCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSwgTW9kYWxPcHRpb25zIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmcm9tLCBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFkZEZpcm13YXJlTW9kYWxDb21wb25lbnQgfSBmcm9tICcuL2FkZC1maXJtd2FyZS1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWRkRmlybXdhcmVQYXRjaE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi9hZGQtZmlybXdhcmUtcGF0Y2gtbW9kYWwuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWZpcm13YXJlLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJ2Zpcm13YXJlLWxpc3QuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEZpcm13YXJlTGlzdENvbXBvbmVudCB7XG4gIHNpemVSZXF1ZXN0OiBQcm9taXNlPG51bWJlcj47XG4gIHNpemVSZXF1ZXN0RG9uZSA9IGZhbHNlO1xuICByZWZyZXNoJDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBpc0RhdGFQcmVzZW50JDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IGZyb20oXG4gICAgdGhpcy5yZXBvc2l0b3J5U2VydmljZS5saXN0UmVwb3NpdG9yeUVudHJpZXMoUmVwb3NpdG9yeVR5cGUuRklSTVdBUkUsIHsgc2tpcExlZ2FjeTogdHJ1ZSB9KVxuICApLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YS5sZW5ndGggPiAwKSk7XG5cbiAgY29sdW1uczogQ29sdW1uW10gPSBbXG4gICAgbmV3IFJlcG9zaXRvcnlJdGVtTmFtZUdyaWRDb2x1bW4oe1xuICAgICAgZmlsdGVyTGFiZWw6IGdldHRleHQoJ0ZpbHRlciBmaXJtd2FyZSBieSBuYW1lJyksXG4gICAgICBwbGFjZWhvbGRlcjogZ2V0dGV4dCgndWJ1bnR1IGNvcmUnKVxuICAgIH0pLFxuICAgIG5ldyBEZXNjcmlwdGlvbkdyaWRDb2x1bW4oe1xuICAgICAgZmlsdGVyTGFiZWw6IGdldHRleHQoJ0ZpbHRlciBmaXJtd2FyZSBieSBkZXNjcmlwdGlvbicpLFxuICAgICAgcGxhY2Vob2xkZXI6IGdldHRleHQoJ0Zpcm13YXJlIGZvciBoYXJkd2FyZSByZXZpc2lvbiBCJylcbiAgICB9KSxcbiAgICBuZXcgRGV2aWNlVHlwZUdyaWRDb2x1bW4oeyBmaWx0ZXJMYWJlbDogZ2V0dGV4dCgnRmlsdGVyIGZpcm13YXJlIGJ5IGRldmljZSB0eXBlJykgfSksXG4gICAgbmV3IFZlcnNpb25zR3JpZENvbHVtbigpXG4gIF07XG4gIGFjdGlvbkNvbnRyb2xzOiBBY3Rpb25Db250cm9sW10gPSBbXTtcbiAgc2VydmVyU2lkZURhdGFDYWxsYmFjazogU2VydmVyU2lkZURhdGFDYWxsYmFjaztcbiAgcGFnaW5hdGlvbiA9IHtcbiAgICBwYWdlU2l6ZTogNTAsXG4gICAgY3VycmVudFBhZ2U6IDFcbiAgfTtcblxuICBub1Jlc3VsdHNNZXNzYWdlID0gZ2V0dGV4dCgnTm8gcmVzdWx0cyB0byBkaXNwbGF5LicpO1xuICBub0RhdGFNZXNzYWdlID0gZ2V0dGV4dCgnTm8gZmlybXdhcmUgdG8gZGlzcGxheS4nKTtcbiAgbm9SZXN1bHRzU3VidGl0bGUgPSBnZXR0ZXh0KCdSZWZpbmUgeW91ciBzZWFyY2ggdGVybXMgb3IgY2hlY2sgeW91ciBzcGVsbGluZy4nKTtcbiAgbm9EYXRhU3VidGl0bGUgPSBnZXR0ZXh0KCdBZGQgYSBuZXcgZmlybXdhcmUgYnkgY2xpY2tpbmcgYmVsb3cuJyk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZXBvc2l0b3J5U2VydmljZTogUmVwb3NpdG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBncmlkU2VydmljZTogRGF0YUdyaWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBic01vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVxuICApIHtcbiAgICB0aGlzLnNlcnZlclNpZGVEYXRhQ2FsbGJhY2sgPSB0aGlzLm9uRGF0YVNvdXJjZU1vZGlmaWVyLmJpbmQodGhpcyk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGlvbkNvbnRyb2xzLnB1c2goe1xuICAgICAgdHlwZTogQnVpbHRJbkFjdGlvblR5cGUuRWRpdCxcbiAgICAgIGNhbGxiYWNrOiB0aGlzLmVkaXRGaXJtd2FyZS5iaW5kKHRoaXMpXG4gICAgfSk7XG4gICAgdGhpcy5hY3Rpb25Db250cm9scy5wdXNoKHtcbiAgICAgIHR5cGU6IEJ1aWx0SW5BY3Rpb25UeXBlLkRlbGV0ZSxcbiAgICAgIGNhbGxiYWNrOiB0aGlzLmRlbGV0ZUZpcm13YXJlLmJpbmQodGhpcylcbiAgICB9KTtcbiAgfVxuXG4gIGFkZEZpcm13YXJlKCkge1xuICAgIGNvbnN0IGNvbmZpZzogTW9kYWxPcHRpb25zPEFkZEZpcm13YXJlTW9kYWxDb21wb25lbnQ+ID0ge1xuICAgICAgY2xhc3M6ICdtb2RhbC1zbScsXG4gICAgICBhcmlhRGVzY3JpYmVkYnk6ICdhZGRGaXJtd2FyZU1vZGFsRGVzY3JpcHRpb24nLFxuICAgICAgYXJpYUxhYmVsbGVkQnk6ICdhZGRGaXJtd2FyZU1vZGFsVGl0bGUnLFxuICAgICAgaWdub3JlQmFja2Ryb3BDbGljazogdHJ1ZSxcbiAgICAgIGtleWJvYXJkOiBmYWxzZVxuICAgIH07XG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLmJzTW9kYWxTZXJ2aWNlLnNob3coQWRkRmlybXdhcmVNb2RhbENvbXBvbmVudCwgY29uZmlnKTtcbiAgICBtb2RhbFJlZi5jb250ZW50LnNhdmVkLnN1YnNjcmliZShzYXZlZEZpcm13YXJlID0+IHRoaXMuZWRpdEZpcm13YXJlKHNhdmVkRmlybXdhcmUpKTtcbiAgfVxuXG4gIGFkZEZpcm13YXJlUGF0Y2goKSB7XG4gICAgY29uc3QgY29uZmlnOiBNb2RhbE9wdGlvbnM8QWRkRmlybXdhcmVQYXRjaE1vZGFsQ29tcG9uZW50PiA9IHtcbiAgICAgIGNsYXNzOiAnbW9kYWwtc20nLFxuICAgICAgYXJpYURlc2NyaWJlZGJ5OiAnYWRkRmlybXdhcmVQYXRjaE1vZGFsRGVzY3JpcHRpb24nLFxuICAgICAgYXJpYUxhYmVsbGVkQnk6ICdhZGRGaXJtd2FyZVBhdGNoTW9kYWxUaXRsZScsXG4gICAgICBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlLFxuICAgICAga2V5Ym9hcmQ6IGZhbHNlXG4gICAgfTtcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMuYnNNb2RhbFNlcnZpY2Uuc2hvdyhBZGRGaXJtd2FyZVBhdGNoTW9kYWxDb21wb25lbnQsIGNvbmZpZyk7XG4gICAgbW9kYWxSZWYuY29udGVudC5zYXZlZC5zdWJzY3JpYmUoc2F2ZWRGaXJtd2FyZSA9PiB0aGlzLmVkaXRGaXJtd2FyZShzYXZlZEZpcm13YXJlKSk7XG4gIH1cblxuICBlZGl0RmlybXdhcmUoZmlybXdhcmU6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+KSB7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Zpcm13YXJlLmlkXSwgeyByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2YXRlZFJvdXRlIH0pO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlRmlybXdhcmUoZmlybXdhcmU6IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRpdGxlID0gZ2V0dGV4dCgnRGVsZXRlIGZpcm13YXJlJyk7XG4gICAgICBjb25zdCBib2R5ID0gYFxuICAgICAgICAke3RoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgIGdldHRleHQoXG4gICAgICAgICAgICAnWW91IGFyZSBhYm91dCB0byBkZWxldGUgZmlybXdhcmUgXCJ7eyBuYW1lIH19XCIgd2l0aCBhbGwgaXRzIHZlcnNpb25zIGFuZCBwYXRjaGVzLidcbiAgICAgICAgICApLFxuICAgICAgICAgIHsgbmFtZTogZmlybXdhcmUubmFtZSB9XG4gICAgICAgICl9XG4gICAgICAgICR7dGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZ2V0dGV4dCgnVGhpcyBvcGVyYXRpb24gaXMgaXJyZXZlcnNpYmxlLicpKX1cbiAgICAgICAgJHt0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChnZXR0ZXh0KCdEbyB5b3Ugd2FudCB0byBwcm9jZWVkPycpKX1cbiAgICAgIGA7XG4gICAgICBjb25zdCBsYWJlbHMgPSB7XG4gICAgICAgIG9rOiBnZXR0ZXh0KCdEZWxldGUnKVxuICAgICAgfTtcbiAgICAgIGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLmNvbmZpcm0oXG4gICAgICAgIHRpdGxlLFxuICAgICAgICBib2R5LFxuICAgICAgICBTdGF0dXMuREFOR0VSLFxuICAgICAgICBsYWJlbHMsXG4gICAgICAgIHt9LFxuICAgICAgICB7IGV2ZW50TmFtZTogUFJPRFVDVF9FWFBFUklFTkNFX1JFUE9TSVRPUllfU0hBUkVELkZJUk1XQVJFLkVWRU5UUy5SRVBPU0lUT1JZIH1cbiAgICAgICk7XG4gICAgICBhd2FpdCB0aGlzLnJlcG9zaXRvcnlTZXJ2aWNlLmRlbGV0ZShmaXJtd2FyZSk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGdldHRleHQoJ0Zpcm13YXJlIGRlbGV0ZWQuJykpO1xuICAgICAgdGhpcy5yZWZyZXNoJC5uZXh0KCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIC8vIG9ubHkgaWYgbm90IGNhbmNlbCBmcm9tIG1vZGFsXG4gICAgICBpZiAoZXgpIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShleCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgb25EYXRhU291cmNlTW9kaWZpZXIoXG4gICAgZGF0YVNvdXJjZU1vZGlmaWVyOiBEYXRhU291cmNlTW9kaWZpZXJcbiAgKTogUHJvbWlzZTxTZXJ2ZXJTaWRlRGF0YVJlc3VsdD4ge1xuICAgIGNvbnN0IGRhdGFSZXF1ZXN0OiBQcm9taXNlPElSZXN1bHRMaXN0PElNYW5hZ2VkT2JqZWN0Pj4gPVxuICAgICAgdGhpcy5yZXBvc2l0b3J5U2VydmljZS5saXN0UmVwb3NpdG9yeUVudHJpZXMoUmVwb3NpdG9yeVR5cGUuRklSTVdBUkUsIHtcbiAgICAgICAgcXVlcnk6IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0UXVlcnlPYmooZGF0YVNvdXJjZU1vZGlmaWVyLmNvbHVtbnMpLFxuICAgICAgICBza2lwRGVmYXVsdE9yZGVyOiB0cnVlLFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBwYWdlU2l6ZTogZGF0YVNvdXJjZU1vZGlmaWVyLnBhZ2luYXRpb24ucGFnZVNpemUsXG4gICAgICAgICAgY3VycmVudFBhZ2U6IGRhdGFTb3VyY2VNb2RpZmllci5wYWdpbmF0aW9uLmN1cnJlbnRQYWdlXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgY29uc3QgZmlsdGVyZXJkU2l6ZVJlcXVlc3Q6IFByb21pc2U8bnVtYmVyPiA9IHRoaXMucmVwb3NpdG9yeVNlcnZpY2VcbiAgICAgIC5saXN0UmVwb3NpdG9yeUVudHJpZXMoUmVwb3NpdG9yeVR5cGUuRklSTVdBUkUsIHtcbiAgICAgICAgc2tpcERlZmF1bHRPcmRlcjogdHJ1ZSxcbiAgICAgICAgcXVlcnk6IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0UXVlcnlPYmooZGF0YVNvdXJjZU1vZGlmaWVyLmNvbHVtbnMpLFxuICAgICAgICBwYXJhbXM6IHsgcGFnZVNpemU6IDEgfVxuICAgICAgfSlcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlPy5wYWdpbmc/LnRvdGFsUGFnZXMpO1xuXG4gICAgdGhpcy5zaXplUmVxdWVzdCA9IHRoaXMucmVwb3NpdG9yeVNlcnZpY2VcbiAgICAgIC5saXN0UmVwb3NpdG9yeUVudHJpZXMoUmVwb3NpdG9yeVR5cGUuRklSTVdBUkUsIHtcbiAgICAgICAgc2tpcERlZmF1bHRPcmRlcjogdHJ1ZSxcbiAgICAgICAgcGFyYW1zOiB7IHBhZ2VTaXplOiAxIH1cbiAgICAgIH0pXG4gICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgIHRoaXMuc2l6ZVJlcXVlc3REb25lID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlPy5wYWdpbmc/LnRvdGFsUGFnZXM7XG4gICAgICB9KTtcblxuICAgIGNvbnN0IFtkYXRhUmVzcG9uc2UsIHNpemUsIGZpbHRlcmVkU2l6ZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBkYXRhUmVxdWVzdCxcbiAgICAgIHRoaXMuc2l6ZVJlcXVlc3QsXG4gICAgICBmaWx0ZXJlcmRTaXplUmVxdWVzdFxuICAgIF0pO1xuXG4gICAgY29uc3QgeyByZXMsIGRhdGEsIHBhZ2luZyB9ID0gZGF0YVJlc3BvbnNlO1xuXG4gICAgY29uc3Qgc2VydmVyU2lkZURhdGFSZXN1bHQ6IFNlcnZlclNpZGVEYXRhUmVzdWx0ID0ge1xuICAgICAgcmVzLFxuICAgICAgZGF0YSxcbiAgICAgIHBhZ2luZyxcbiAgICAgIGZpbHRlcmVkU2l6ZSxcbiAgICAgIHNpemVcbiAgICB9O1xuXG4gICAgcmV0dXJuIHNlcnZlclNpZGVEYXRhUmVzdWx0O1xuICB9XG5cbiAgdHJhY2tCeU5hbWUoX2luZGV4LCBjb2x1bW46IENvbHVtbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNvbHVtbi5uYW1lO1xuICB9XG59XG4iLCI8Yzh5LXRpdGxlPlxuICB7eyAnRmlybXdhcmUgcmVwb3NpdG9yeScgfCB0cmFuc2xhdGUgfX1cbjwvYzh5LXRpdGxlPlxuXG48Yzh5LWJyZWFkY3J1bWI+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtXG4gICAgaWNvbj1cImM4eS1tYW5hZ2VtZW50XCJcbiAgICBsYWJlbD1cInt7ICdNYW5hZ2VtZW50JyB8IHRyYW5zbGF0ZSB9fVwiXG4gID48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtXG4gICAgaWNvbj1cImM4eS1maXJtd2FyZVwiXG4gICAgbGFiZWw9XCJ7eyAnRmlybXdhcmUgcmVwb3NpdG9yeScgfCB0cmFuc2xhdGUgfX1cIlxuICA+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuPC9jOHktYnJlYWRjcnVtYj5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW0gW3BsYWNlbWVudF09XCIncmlnaHQnXCI+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiXG4gICAgdGl0bGU9XCJ7eyAnQWRkIGZpcm13YXJlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgKGNsaWNrKT1cImFkZEZpcm13YXJlKClcIlxuICAgIGRhdGEtY3k9XCJmaXJtd2FyZS1saXN0LS10b29sYmFyLWFkZC1maXJtd2FyZS1idG5cIlxuICA+XG4gICAgPGkgYzh5SWNvbj1cInBsdXMtY2lyY2xlXCI+PC9pPlxuICAgIHt7ICdBZGQgZmlybXdhcmUnIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48Yzh5LWFjdGlvbi1iYXItaXRlbSBbcGxhY2VtZW50XT1cIidyaWdodCdcIj5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCJcbiAgICB0aXRsZT1cInt7ICdBZGQgZmlybXdhcmUgcGF0Y2gnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAqbmdJZj1cImlzRGF0YVByZXNlbnQkIHwgYXN5bmNcIlxuICAgIChjbGljayk9XCJhZGRGaXJtd2FyZVBhdGNoKClcIlxuICA+XG4gICAgPGkgYzh5SWNvbj1cInBsdXMtY2lyY2xlXCI+PC9pPlxuICAgIHt7ICdBZGQgZmlybXdhcmUgcGF0Y2gnIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48Yzh5LWhlbHBcbiAgc3JjPVwiL2RvY3MvZGV2aWNlLW1hbmFnZW1lbnQtYXBwbGljYXRpb24vbWFuYWdpbmctZGV2aWNlLWRhdGEvI21hbmFnaW5nLWZpcm13YXJlXCJcbj48L2M4eS1oZWxwPlxuXG48ZGl2IGNsYXNzPVwiY29udGVudC1mdWxscGFnZSBib3JkZXItdG9wIGJvcmRlci1ib3R0b21cIj5cbiAgPGM4eS1kYXRhLWdyaWRcbiAgICBbdGl0bGVdPVwiJ0Zpcm13YXJlJyB8IHRyYW5zbGF0ZVwiXG4gICAgW3JlZnJlc2hdPVwicmVmcmVzaCRcIlxuICAgIFtwYWdpbmF0aW9uXT1cInBhZ2luYXRpb25cIlxuICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxuICAgIFthY3Rpb25Db250cm9sc109XCJhY3Rpb25Db250cm9sc1wiXG4gICAgW2luZmluaXRlU2Nyb2xsXT1cIidhdXRvJ1wiXG4gICAgW3NlcnZlclNpZGVEYXRhQ2FsbGJhY2tdPVwic2VydmVyU2lkZURhdGFDYWxsYmFja1wiXG4gID5cbiAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICBbaWNvbl09XCJzdGF0cz8uc2l6ZSA+IDAgPyAnc2VhcmNoJyA6ICdjOHktdG9vbHMnXCJcbiAgICAgIFt0aXRsZV09XCJzdGF0cz8uc2l6ZSA+IDAgPyAobm9SZXN1bHRzTWVzc2FnZSB8IHRyYW5zbGF0ZSkgOiAobm9EYXRhTWVzc2FnZSB8IHRyYW5zbGF0ZSlcIlxuICAgICAgW3N1YnRpdGxlXT1cInN0YXRzPy5zaXplID4gMCA/IChub1Jlc3VsdHNTdWJ0aXRsZSB8IHRyYW5zbGF0ZSkgOiAobm9EYXRhU3VidGl0bGUgfCB0cmFuc2xhdGUpXCJcbiAgICAgICplbXB0eVN0YXRlQ29udGV4dD1cImxldCBzdGF0c1wiXG4gICAgICBbaG9yaXpvbnRhbF09XCJzdGF0cz8uc2l6ZSA+IDBcIlxuICAgID5cbiAgICAgIDxwICpuZ0lmPVwic3RhdHM/LnNpemUgPT09IDBcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICB0aXRsZT1cInt7ICdBZGQgZmlybXdhcmUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAoY2xpY2spPVwiYWRkRmlybXdhcmUoKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyAnQWRkIGZpcm13YXJlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvcD5cbiAgICA8L2M4eS11aS1lbXB0eS1zdGF0ZT5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uczsgdHJhY2tCeTogdHJhY2tCeU5hbWVcIj5cbiAgICAgIDxjOHktY29sdW1uIFtuYW1lXT1cImNvbHVtbi5uYW1lXCI+PC9jOHktY29sdW1uPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2M4eS1kYXRhLWdyaWQ+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -52,15 +52,6 @@ export class SoftwareListComponent {
|
|
|
52
52
|
this.noResultsSubtitle = gettext('Refine your search terms or check your spelling.');
|
|
53
53
|
this.noDataSubtitle = gettext('Add a new software by clicking below.');
|
|
54
54
|
this.serverSideDataCallback = this.onDataSourceModifier.bind(this);
|
|
55
|
-
this.sizeRequest = this.repositoryService
|
|
56
|
-
.listRepositoryEntries(RepositoryType.SOFTWARE, {
|
|
57
|
-
skipDefaultOrder: true,
|
|
58
|
-
params: { pageSize: 1 }
|
|
59
|
-
})
|
|
60
|
-
.then(response => {
|
|
61
|
-
this.sizeRequestDone = true;
|
|
62
|
-
return response?.paging?.totalPages;
|
|
63
|
-
});
|
|
64
55
|
}
|
|
65
56
|
ngOnInit() {
|
|
66
57
|
this.actionControls.push({
|
|
@@ -88,6 +79,15 @@ export class SoftwareListComponent {
|
|
|
88
79
|
params: { pageSize: 1 }
|
|
89
80
|
})
|
|
90
81
|
.then(response => response?.paging?.totalPages);
|
|
82
|
+
this.sizeRequest = this.repositoryService
|
|
83
|
+
.listRepositoryEntries(RepositoryType.SOFTWARE, {
|
|
84
|
+
skipDefaultOrder: true,
|
|
85
|
+
params: { pageSize: 1 }
|
|
86
|
+
})
|
|
87
|
+
.then(response => {
|
|
88
|
+
this.sizeRequestDone = true;
|
|
89
|
+
return response?.paging?.totalPages;
|
|
90
|
+
});
|
|
91
91
|
const [dataResponse, size, filteredSize] = await Promise.all([
|
|
92
92
|
dataRequest,
|
|
93
93
|
this.sizeRequest,
|
|
@@ -150,4 +150,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
150
150
|
type: Component,
|
|
151
151
|
args: [{ selector: 'c8y-software-list', template: "<c8y-title>\n {{ 'Software repository' | translate }}\n</c8y-title>\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n icon=\"c8y-management\"\n label=\"{{ 'Management' | translate }}\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n icon=\"c8y-tools\"\n label=\"{{ 'Software repository' | translate }}\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Add software' | translate }}\"\n type=\"button\"\n (click)=\"addSoftware()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add software' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help\n src=\"/docs/device-management-application/managing-device-data/#managing-software\"\n></c8y-help>\n\n<div class=\"content-fullpage border-top border-bottom\">\n <c8y-data-grid\n [title]=\"'Software' | translate\"\n [refresh]=\"refresh$\"\n [pagination]=\"pagination\"\n [columns]=\"columns\"\n [actionControls]=\"actionControls\"\n [infiniteScroll]=\"'auto'\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n >\n <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'c8y-tools'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"stats?.size > 0 ? (noResultsSubtitle | translate) : (noDataSubtitle | translate)\"\n *emptyStateContext=\"let stats\"\n [horizontal]=\"stats?.size > 0\"\n >\n <p *ngIf=\"stats?.size === 0\">\n <button\n class=\"btn btn-primary\"\n [title]=\"'Add software' | translate\"\n type=\"button\"\n (click)=\"addSoftware()\"\n >\n {{ 'Add software' | translate }}\n </button>\n </p>\n </c8y-ui-empty-state>\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n </c8y-data-grid>\n</div>\n" }]
|
|
152
152
|
}], ctorParameters: () => [{ type: i1.RepositoryService }, { type: i2.DataGridService }, { type: i2.ModalService }, { type: i3.BsModalService }, { type: i4.TranslateService }, { type: i2.AlertService }, { type: i5.Router }, { type: i5.ActivatedRoute }] });
|
|
153
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29mdHdhcmUtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9yZXBvc2l0b3J5L3NvZnR3YXJlL2xpc3Qvc29mdHdhcmUtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9yZXBvc2l0b3J5L3NvZnR3YXJlL2xpc3Qvc29mdHdhcmUtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpELE9BQU8sRUFFTCxZQUFZLEVBQ1osaUJBQWlCLEVBRWpCLGVBQWUsRUFFZixZQUFZLEVBR1osTUFBTSxFQUNOLE9BQU8sRUFDUixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsb0JBQW9CLEVBQ3BCLG9DQUFvQyxFQUNwQyw0QkFBNEIsRUFDNUIsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxjQUFjLEVBQ2Qsa0JBQWtCLEVBQ25CLE1BQU0sdUNBQXVDLENBQUM7QUFDL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBZ0IsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7Ozs7QUFNM0UsTUFBTSxPQUFPLHFCQUFxQjtJQW1DaEMsWUFDVSxpQkFBb0MsRUFDcEMsV0FBNEIsRUFDNUIsWUFBMEIsRUFDMUIsY0FBOEIsRUFDOUIsZ0JBQWtDLEVBQ2xDLFlBQTBCLEVBQzFCLE1BQWMsRUFDZCxjQUE4QjtRQVA5QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUM1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LEVBQUUsU0FBUyxFQUFFLG9DQUFvQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQy9FLENBQUM7WUFDRixNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztZQUN4RCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZCLENBQUM7UUFBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ1osZ0NBQWdDO1lBQ2hDLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQ1AsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6QyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQWM7UUFDaEMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ3JCLENBQUM7OEdBL0pVLHFCQUFxQjtrR0FBckIscUJBQXFCLHlEQ2xDbEMsKzhEQStEQTs7MkZEN0JhLHFCQUFxQjtrQkFKakMsU0FBUzsrQkFDRSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0LCBJUmVzdWx0TGlzdCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEFjdGlvbkNvbnRyb2wsXG4gIEFsZXJ0U2VydmljZSxcbiAgQnVpbHRJbkFjdGlvblR5cGUsXG4gIENvbHVtbixcbiAgRGF0YUdyaWRTZXJ2aWNlLFxuICBEYXRhU291cmNlTW9kaWZpZXIsXG4gIE1vZGFsU2VydmljZSxcbiAgU2VydmVyU2lkZURhdGFDYWxsYmFjayxcbiAgU2VydmVyU2lkZURhdGFSZXN1bHQsXG4gIFN0YXR1cyxcbiAgZ2V0dGV4dFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7XG4gIERlc2NyaXB0aW9uR3JpZENvbHVtbixcbiAgRGV2aWNlVHlwZUdyaWRDb2x1bW4sXG4gIFBST0RVQ1RfRVhQRVJJRU5DRV9SRVBPU0lUT1JZX1NIQVJFRCxcbiAgUmVwb3NpdG9yeUl0ZW1OYW1lR3JpZENvbHVtbixcbiAgUmVwb3NpdG9yeVNlcnZpY2UsXG4gIFJlcG9zaXRvcnlUeXBlLFxuICBUeXBlR3JpZENvbHVtbixcbiAgVmVyc2lvbnNHcmlkQ29sdW1uXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvcmVwb3NpdG9yeS9zaGFyZWQnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UsIE1vZGFsT3B0aW9ucyB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgQWRkU29mdHdhcmVNb2RhbENvbXBvbmVudCB9IGZyb20gJy4vYWRkLXNvZnR3YXJlLW1vZGFsLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1zb2Z0d2FyZS1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICdzb2Z0d2FyZS1saXN0LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBTb2Z0d2FyZUxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBzaXplUmVxdWVzdDogUHJvbWlzZTxudW1iZXI+O1xuICBzaXplUmVxdWVzdERvbmUgPSBmYWxzZTtcbiAgcmVmcmVzaCQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBjb2x1bW5zOiBDb2x1bW5bXSA9IFtcbiAgICBuZXcgUmVwb3NpdG9yeUl0ZW1OYW1lR3JpZENvbHVtbih7XG4gICAgICBmaWx0ZXJMYWJlbDogZ2V0dGV4dCgnRmlsdGVyIHNvZnR3YXJlIGJ5IG5hbWUnKVxuICAgIH0pLFxuICAgIG5ldyBEZXNjcmlwdGlvbkdyaWRDb2x1bW4oe1xuICAgICAgZmlsdGVyTGFiZWw6IGdldHRleHQoJ0ZpbHRlciBzb2Z0d2FyZSBieSBkZXNjcmlwdGlvbicpLFxuICAgICAgcGxhY2Vob2xkZXI6IGdldHRleHQoJ0Nsb3VkIGNvbm5lY3Rpdml0eSBzb2Z0d2FyZScpXG4gICAgfSksXG4gICAgbmV3IERldmljZVR5cGVHcmlkQ29sdW1uKHsgZmlsdGVyTGFiZWw6IGdldHRleHQoJ0ZpbHRlciBzb2Z0d2FyZSBieSBkZXZpY2UgdHlwZScpIH0pLFxuICAgIG5ldyBUeXBlR3JpZENvbHVtbih7XG4gICAgICBoZWFkZXI6IGdldHRleHQoJ1NvZnR3YXJlIHR5cGUnKSxcbiAgICAgIGZpbHRlckxhYmVsOiBnZXR0ZXh0KCdGaWx0ZXIgYnkgc29mdHdhcmUgdHlwZScpLFxuICAgICAgZXhhbXBsZTogJ3l1bScsXG4gICAgICBwYXRoOiAnc29mdHdhcmVUeXBlJyxcbiAgICAgIHJlcG9zaXRvcnlUeXBlOiBSZXBvc2l0b3J5VHlwZS5TT0ZUV0FSRVxuICAgIH0pLFxuICAgIG5ldyBWZXJzaW9uc0dyaWRDb2x1bW4oKVxuICBdO1xuICBhY3Rpb25Db250cm9sczogQWN0aW9uQ29udHJvbFtdID0gW107XG4gIHNlcnZlclNpZGVEYXRhQ2FsbGJhY2s6IFNlcnZlclNpZGVEYXRhQ2FsbGJhY2s7XG4gIHBhZ2luYXRpb24gPSB7XG4gICAgcGFnZVNpemU6IDUwLFxuICAgIGN1cnJlbnRQYWdlOiAxXG4gIH07XG5cbiAgbm9SZXN1bHRzTWVzc2FnZSA9IGdldHRleHQoJ05vIHJlc3VsdHMgdG8gZGlzcGxheS4nKTtcbiAgbm9EYXRhTWVzc2FnZSA9IGdldHRleHQoJ05vIHNvZnR3YXJlIHRvIGRpc3BsYXkuJyk7XG4gIG5vUmVzdWx0c1N1YnRpdGxlID0gZ2V0dGV4dCgnUmVmaW5lIHlvdXIgc2VhcmNoIHRlcm1zIG9yIGNoZWNrIHlvdXIgc3BlbGxpbmcuJyk7XG4gIG5vRGF0YVN1YnRpdGxlID0gZ2V0dGV4dCgnQWRkIGEgbmV3IHNvZnR3YXJlIGJ5IGNsaWNraW5nIGJlbG93LicpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVwb3NpdG9yeVNlcnZpY2U6IFJlcG9zaXRvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ3JpZFNlcnZpY2U6IERhdGFHcmlkU2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgYnNNb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGVcbiAgKSB7XG4gICAgdGhpcy5zZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrID0gdGhpcy5vbkRhdGFTb3VyY2VNb2RpZmllci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuc2l6ZVJlcXVlc3QgPSB0aGlzLnJlcG9zaXRvcnlTZXJ2aWNlXG4gICAgICAubGlzdFJlcG9zaXRvcnlFbnRyaWVzKFJlcG9zaXRvcnlUeXBlLlNPRlRXQVJFLCB7XG4gICAgICAgIHNraXBEZWZhdWx0T3JkZXI6IHRydWUsXG4gICAgICAgIHBhcmFtczogeyBwYWdlU2l6ZTogMSB9XG4gICAgICB9KVxuICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICB0aGlzLnNpemVSZXF1ZXN0RG9uZSA9IHRydWU7XG4gICAgICAgIHJldHVybiByZXNwb25zZT8ucGFnaW5nPy50b3RhbFBhZ2VzO1xuICAgICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGlvbkNvbnRyb2xzLnB1c2goe1xuICAgICAgdHlwZTogQnVpbHRJbkFjdGlvblR5cGUuRWRpdCxcbiAgICAgIGNhbGxiYWNrOiB0aGlzLmVkaXRTb2Z0d2FyZS5iaW5kKHRoaXMpXG4gICAgfSk7XG4gICAgdGhpcy5hY3Rpb25Db250cm9scy5wdXNoKHtcbiAgICAgIHR5cGU6IEJ1aWx0SW5BY3Rpb25UeXBlLkRlbGV0ZSxcbiAgICAgIGNhbGxiYWNrOiB0aGlzLmRlbGV0ZVNvZnR3YXJlLmJpbmQodGhpcylcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIG9uRGF0YVNvdXJjZU1vZGlmaWVyKFxuICAgIGRhdGFTb3VyY2VNb2RpZmllcjogRGF0YVNvdXJjZU1vZGlmaWVyXG4gICk6IFByb21pc2U8U2VydmVyU2lkZURhdGFSZXN1bHQ+IHtcbiAgICBjb25zdCBkYXRhUmVxdWVzdDogUHJvbWlzZTxJUmVzdWx0TGlzdDxJTWFuYWdlZE9iamVjdD4+ID1cbiAgICAgIHRoaXMucmVwb3NpdG9yeVNlcnZpY2UubGlzdFJlcG9zaXRvcnlFbnRyaWVzKFJlcG9zaXRvcnlUeXBlLlNPRlRXQVJFLCB7XG4gICAgICAgIHF1ZXJ5OiB0aGlzLmdyaWRTZXJ2aWNlLmdldFF1ZXJ5T2JqKGRhdGFTb3VyY2VNb2RpZmllci5jb2x1bW5zKSxcbiAgICAgICAgc2tpcERlZmF1bHRPcmRlcjogdHJ1ZSxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgcGFnZVNpemU6IGRhdGFTb3VyY2VNb2RpZmllci5wYWdpbmF0aW9uLnBhZ2VTaXplLFxuICAgICAgICAgIGN1cnJlbnRQYWdlOiBkYXRhU291cmNlTW9kaWZpZXIucGFnaW5hdGlvbi5jdXJyZW50UGFnZVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIGNvbnN0IGZpbHRlcmVyZFNpemVSZXF1ZXN0OiBQcm9taXNlPG51bWJlcj4gPSB0aGlzLnJlcG9zaXRvcnlTZXJ2aWNlXG4gICAgICAubGlzdFJlcG9zaXRvcnlFbnRyaWVzKFJlcG9zaXRvcnlUeXBlLlNPRlRXQVJFLCB7XG4gICAgICAgIHNraXBEZWZhdWx0T3JkZXI6IHRydWUsXG4gICAgICAgIHF1ZXJ5OiB0aGlzLmdyaWRTZXJ2aWNlLmdldFF1ZXJ5T2JqKGRhdGFTb3VyY2VNb2RpZmllci5jb2x1bW5zKSxcbiAgICAgICAgcGFyYW1zOiB7IHBhZ2VTaXplOiAxIH1cbiAgICAgIH0pXG4gICAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZT8ucGFnaW5nPy50b3RhbFBhZ2VzKTtcblxuICAgIGNvbnN0IFtkYXRhUmVzcG9uc2UsIHNpemUsIGZpbHRlcmVkU2l6ZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBkYXRhUmVxdWVzdCxcbiAgICAgIHRoaXMuc2l6ZVJlcXVlc3QsXG4gICAgICBmaWx0ZXJlcmRTaXplUmVxdWVzdFxuICAgIF0pO1xuXG4gICAgY29uc3QgeyByZXMsIGRhdGEsIHBhZ2luZyB9ID0gZGF0YVJlc3BvbnNlO1xuXG4gICAgY29uc3Qgc2VydmVyU2lkZURhdGFSZXN1bHQ6IFNlcnZlclNpZGVEYXRhUmVzdWx0ID0ge1xuICAgICAgcmVzLFxuICAgICAgZGF0YSxcbiAgICAgIHBhZ2luZyxcbiAgICAgIGZpbHRlcmVkU2l6ZSxcbiAgICAgIHNpemVcbiAgICB9O1xuXG4gICAgcmV0dXJuIHNlcnZlclNpZGVEYXRhUmVzdWx0O1xuICB9XG5cbiAgYWRkU29mdHdhcmUoKSB7XG4gICAgY29uc3QgY29uZmlnOiBNb2RhbE9wdGlvbnM8QWRkU29mdHdhcmVNb2RhbENvbXBvbmVudD4gPSB7XG4gICAgICBjbGFzczogJ21vZGFsLXNtJyxcbiAgICAgIGFyaWFEZXNjcmliZWRieTogJ2FkZFNvZnR3YXJlTW9kYWxEZXNjcmlwdGlvbicsXG4gICAgICBhcmlhTGFiZWxsZWRCeTogJ2FkZFNvZnR3YXJlTW9kYWxUaXRsZScsXG4gICAgICBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlLFxuICAgICAga2V5Ym9hcmQ6IGZhbHNlXG4gICAgfTtcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMuYnNNb2RhbFNlcnZpY2Uuc2hvdyhBZGRTb2Z0d2FyZU1vZGFsQ29tcG9uZW50LCBjb25maWcpO1xuICAgIG1vZGFsUmVmLmNvbnRlbnQuc2F2ZWQuc3Vic2NyaWJlKHNhdmVkU29mdHdhcmUgPT4gdGhpcy5lZGl0U29mdHdhcmUoc2F2ZWRTb2Z0d2FyZSkpO1xuICB9XG5cbiAgZWRpdFNvZnR3YXJlKHNvZnR3YXJlOiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0Pikge1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtzb2Z0d2FyZS5pZF0sIHsgcmVsYXRpdmVUbzogdGhpcy5hY3RpdmF0ZWRSb3V0ZSB9KTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVNvZnR3YXJlKHNvZnR3YXJlOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0aXRsZSA9IGdldHRleHQoJ0RlbGV0ZSBzb2Z0d2FyZScpO1xuICAgICAgY29uc3QgYm9keSA9IGBcbiAgICAgICAgJHt0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICBnZXR0ZXh0KCdZb3UgYXJlIGFib3V0IHRvIGRlbGV0ZSBzb2Z0d2FyZSBcInt7IG5hbWUgfX1cIiB3aXRoIGFsbCBpdHMgdmVyc2lvbnMuJyksXG4gICAgICAgICAgeyBuYW1lOiBzb2Z0d2FyZS5uYW1lIH1cbiAgICAgICAgKX1cbiAgICAgICAgJHt0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChnZXR0ZXh0KCdUaGlzIG9wZXJhdGlvbiBpcyBpcnJldmVyc2libGUuJykpfVxuICAgICAgICAke3RoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGdldHRleHQoJ0RvIHlvdSB3YW50IHRvIHByb2NlZWQ/JykpfVxuICAgICAgYDtcbiAgICAgIGNvbnN0IGxhYmVscyA9IHtcbiAgICAgICAgb2s6IGdldHRleHQoJ0RlbGV0ZScpXG4gICAgICB9O1xuICAgICAgYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2UuY29uZmlybShcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIGJvZHksXG4gICAgICAgIFN0YXR1cy5EQU5HRVIsXG4gICAgICAgIGxhYmVscyxcbiAgICAgICAge30sXG4gICAgICAgIHsgZXZlbnROYW1lOiBQUk9EVUNUX0VYUEVSSUVOQ0VfUkVQT1NJVE9SWV9TSEFSRUQuU09GVFdBUkUuRVZFTlRTLlJFUE9TSVRPUlkgfVxuICAgICAgKTtcbiAgICAgIGF3YWl0IHRoaXMucmVwb3NpdG9yeVNlcnZpY2UuZGVsZXRlKHNvZnR3YXJlKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnU29mdHdhcmUgZGVsZXRlZC4nKSk7XG4gICAgICB0aGlzLnJlZnJlc2gkLm5leHQoKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgLy8gb25seSBpZiBub3QgY2FuY2VsIGZyb20gbW9kYWxcbiAgICAgIGlmIChleCkge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGV4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0cmFja0J5TmFtZShfaW5kZXgsIGNvbHVtbjogQ29sdW1uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY29sdW1uLm5hbWU7XG4gIH1cbn1cbiIsIjxjOHktdGl0bGU+XG4gIHt7ICdTb2Z0d2FyZSByZXBvc2l0b3J5JyB8IHRyYW5zbGF0ZSB9fVxuPC9jOHktdGl0bGU+XG48Yzh5LWJyZWFkY3J1bWI+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtXG4gICAgaWNvbj1cImM4eS1tYW5hZ2VtZW50XCJcbiAgICBsYWJlbD1cInt7ICdNYW5hZ2VtZW50JyB8IHRyYW5zbGF0ZSB9fVwiXG4gID48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtXG4gICAgaWNvbj1cImM4eS10b29sc1wiXG4gICAgbGFiZWw9XCJ7eyAnU29mdHdhcmUgcmVwb3NpdG9yeScgfCB0cmFuc2xhdGUgfX1cIlxuICA+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuPC9jOHktYnJlYWRjcnVtYj5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW0gW3BsYWNlbWVudF09XCIncmlnaHQnXCI+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiXG4gICAgdGl0bGU9XCJ7eyAnQWRkIHNvZnR3YXJlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgKGNsaWNrKT1cImFkZFNvZnR3YXJlKClcIlxuICA+XG4gICAgPGkgYzh5SWNvbj1cInBsdXMtY2lyY2xlXCI+PC9pPlxuICAgIHt7ICdBZGQgc29mdHdhcmUnIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48Yzh5LWhlbHBcbiAgc3JjPVwiL2RvY3MvZGV2aWNlLW1hbmFnZW1lbnQtYXBwbGljYXRpb24vbWFuYWdpbmctZGV2aWNlLWRhdGEvI21hbmFnaW5nLXNvZnR3YXJlXCJcbj48L2M4eS1oZWxwPlxuXG48ZGl2IGNsYXNzPVwiY29udGVudC1mdWxscGFnZSBib3JkZXItdG9wIGJvcmRlci1ib3R0b21cIj5cbiAgPGM4eS1kYXRhLWdyaWRcbiAgICBbdGl0bGVdPVwiJ1NvZnR3YXJlJyB8IHRyYW5zbGF0ZVwiXG4gICAgW3JlZnJlc2hdPVwicmVmcmVzaCRcIlxuICAgIFtwYWdpbmF0aW9uXT1cInBhZ2luYXRpb25cIlxuICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxuICAgIFthY3Rpb25Db250cm9sc109XCJhY3Rpb25Db250cm9sc1wiXG4gICAgW2luZmluaXRlU2Nyb2xsXT1cIidhdXRvJ1wiXG4gICAgW3NlcnZlclNpZGVEYXRhQ2FsbGJhY2tdPVwic2VydmVyU2lkZURhdGFDYWxsYmFja1wiXG4gID5cbiAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICBbaWNvbl09XCJzdGF0cz8uc2l6ZSA+IDAgPyAnc2VhcmNoJyA6ICdjOHktdG9vbHMnXCJcbiAgICAgIFt0aXRsZV09XCJzdGF0cz8uc2l6ZSA+IDAgPyAobm9SZXN1bHRzTWVzc2FnZSB8IHRyYW5zbGF0ZSkgOiAobm9EYXRhTWVzc2FnZSB8IHRyYW5zbGF0ZSlcIlxuICAgICAgW3N1YnRpdGxlXT1cInN0YXRzPy5zaXplID4gMCA/IChub1Jlc3VsdHNTdWJ0aXRsZSB8IHRyYW5zbGF0ZSkgOiAobm9EYXRhU3VidGl0bGUgfCB0cmFuc2xhdGUpXCJcbiAgICAgICplbXB0eVN0YXRlQ29udGV4dD1cImxldCBzdGF0c1wiXG4gICAgICBbaG9yaXpvbnRhbF09XCJzdGF0cz8uc2l6ZSA+IDBcIlxuICAgID5cbiAgICAgIDxwICpuZ0lmPVwic3RhdHM/LnNpemUgPT09IDBcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ0FkZCBzb2Z0d2FyZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJhZGRTb2Z0d2FyZSgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7ICdBZGQgc29mdHdhcmUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9wPlxuICAgIDwvYzh5LXVpLWVtcHR5LXN0YXRlPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zOyB0cmFja0J5OiB0cmFja0J5TmFtZVwiPlxuICAgICAgPGM4eS1jb2x1bW4gW25hbWVdPVwiY29sdW1uLm5hbWVcIj48L2M4eS1jb2x1bW4+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvYzh5LWRhdGEtZ3JpZD5cbjwvZGl2PlxuIl19
|
|
153
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29mdHdhcmUtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9yZXBvc2l0b3J5L3NvZnR3YXJlL2xpc3Qvc29mdHdhcmUtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9yZXBvc2l0b3J5L3NvZnR3YXJlL2xpc3Qvc29mdHdhcmUtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpELE9BQU8sRUFFTCxZQUFZLEVBQ1osaUJBQWlCLEVBRWpCLGVBQWUsRUFFZixZQUFZLEVBR1osTUFBTSxFQUNOLE9BQU8sRUFDUixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsb0JBQW9CLEVBQ3BCLG9DQUFvQyxFQUNwQyw0QkFBNEIsRUFDNUIsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxjQUFjLEVBQ2Qsa0JBQWtCLEVBQ25CLE1BQU0sdUNBQXVDLENBQUM7QUFDL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBZ0IsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7Ozs7QUFNM0UsTUFBTSxPQUFPLHFCQUFxQjtJQW1DaEMsWUFDVSxpQkFBb0MsRUFDcEMsV0FBNEIsRUFDNUIsWUFBMEIsRUFDMUIsY0FBOEIsRUFDOUIsZ0JBQWtDLEVBQ2xDLFlBQTBCLEVBQzFCLE1BQWMsRUFDZCxjQUE4QjtRQVA5QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUM1QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBekN4QyxvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUN4QixhQUFRLEdBQXVCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFbEQsWUFBTyxHQUFhO1lBQ2xCLElBQUksNEJBQTRCLENBQUM7Z0JBQy9CLFdBQVcsRUFBRSxPQUFPLENBQUMseUJBQXlCLENBQUM7YUFDaEQsQ0FBQztZQUNGLElBQUkscUJBQXFCLENBQUM7Z0JBQ3hCLFdBQVcsRUFBRSxPQUFPLENBQUMsZ0NBQWdDLENBQUM7Z0JBQ3RELFdBQVcsRUFBRSxPQUFPLENBQUMsNkJBQTZCLENBQUM7YUFDcEQsQ0FBQztZQUNGLElBQUksb0JBQW9CLENBQUMsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLGdDQUFnQyxDQUFDLEVBQUUsQ0FBQztZQUNwRixJQUFJLGNBQWMsQ0FBQztnQkFDakIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxlQUFlLENBQUM7Z0JBQ2hDLFdBQVcsRUFBRSxPQUFPLENBQUMseUJBQXlCLENBQUM7Z0JBQy9DLE9BQU8sRUFBRSxLQUFLO2dCQUNkLElBQUksRUFBRSxjQUFjO2dCQUNwQixjQUFjLEVBQUUsY0FBYyxDQUFDLFFBQVE7YUFDeEMsQ0FBQztZQUNGLElBQUksa0JBQWtCLEVBQUU7U0FDekIsQ0FBQztRQUNGLG1CQUFjLEdBQW9CLEVBQUUsQ0FBQztRQUVyQyxlQUFVLEdBQUc7WUFDWCxRQUFRLEVBQUUsRUFBRTtZQUNaLFdBQVcsRUFBRSxDQUFDO1NBQ2YsQ0FBQztRQUVGLHFCQUFnQixHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ3JELGtCQUFhLEdBQUcsT0FBTyxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDbkQsc0JBQWlCLEdBQUcsT0FBTyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7UUFDaEYsbUJBQWMsR0FBRyxPQUFPLENBQUMsdUNBQXVDLENBQUMsQ0FBQztRQVloRSxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDO1lBQ3ZCLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO1lBQzVCLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7U0FDdkMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7WUFDdkIsSUFBSSxFQUFFLGlCQUFpQixDQUFDLE1BQU07WUFDOUIsUUFBUSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztTQUN6QyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLG9CQUFvQixDQUN4QixrQkFBc0M7UUFFdEMsTUFBTSxXQUFXLEdBQ2YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLHFCQUFxQixDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUU7WUFDcEUsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQztZQUMvRCxnQkFBZ0IsRUFBRSxJQUFJO1lBQ3RCLE1BQU0sRUFBRTtnQkFDTixRQUFRLEVBQUUsa0JBQWtCLENBQUMsVUFBVSxDQUFDLFFBQVE7Z0JBQ2hELFdBQVcsRUFBRSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsV0FBVzthQUN2RDtTQUNGLENBQUMsQ0FBQztRQUVMLE1BQU0sb0JBQW9CLEdBQW9CLElBQUksQ0FBQyxpQkFBaUI7YUFDakUscUJBQXFCLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRTtZQUM5QyxnQkFBZ0IsRUFBRSxJQUFJO1lBQ3RCLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUM7WUFDL0QsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRTtTQUN4QixDQUFDO2FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUVsRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUI7YUFDdEMscUJBQXFCLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRTtZQUM5QyxnQkFBZ0IsRUFBRSxJQUFJO1lBQ3RCLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUU7U0FDeEIsQ0FBQzthQUNELElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNmLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBQzVCLE9BQU8sUUFBUSxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7UUFFTCxNQUFNLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDM0QsV0FBVztZQUNYLElBQUksQ0FBQyxXQUFXO1lBQ2hCLG9CQUFvQjtTQUNyQixDQUFDLENBQUM7UUFFSCxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxZQUFZLENBQUM7UUFFM0MsTUFBTSxvQkFBb0IsR0FBeUI7WUFDakQsR0FBRztZQUNILElBQUk7WUFDSixNQUFNO1lBQ04sWUFBWTtZQUNaLElBQUk7U0FDTCxDQUFDO1FBRUYsT0FBTyxvQkFBb0IsQ0FBQztJQUM5QixDQUFDO0lBRUQsV0FBVztRQUNULE1BQU0sTUFBTSxHQUE0QztZQUN0RCxLQUFLLEVBQUUsVUFBVTtZQUNqQixlQUFlLEVBQUUsNkJBQTZCO1lBQzlDLGNBQWMsRUFBRSx1QkFBdUI7WUFDdkMsbUJBQW1CLEVBQUUsSUFBSTtZQUN6QixRQUFRLEVBQUUsS0FBSztTQUNoQixDQUFDO1FBQ0YsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDN0UsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFRCxZQUFZLENBQUMsUUFBaUM7UUFDNUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjLENBQUMsUUFBd0I7UUFDM0MsSUFBSSxDQUFDO1lBQ0gsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDekMsTUFBTSxJQUFJLEdBQUc7VUFDVCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUM3QixPQUFPLENBQUMsc0VBQXNFLENBQUMsRUFDL0UsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksRUFBRSxDQUN4QjtVQUNDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7VUFDekUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMseUJBQXlCLENBQUMsQ0FBQztPQUNwRSxDQUFDO1lBQ0YsTUFBTSxNQUFNLEdBQUc7Z0JBQ2IsRUFBRSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUM7YUFDdEIsQ0FBQztZQUNGLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQzdCLEtBQUssRUFDTCxJQUFJLEVBQ0osTUFBTSxDQUFDLE1BQU0sRUFDYixNQUFNLEVBQ04sRUFBRSxFQUNGLEVBQUUsU0FBUyxFQUFFLG9DQUFvQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQy9FLENBQUM7WUFDRixNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztZQUN4RCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZCLENBQUM7UUFBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ1osZ0NBQWdDO1lBQ2hDLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQ1AsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6QyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQWM7UUFDaEMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ3JCLENBQUM7OEdBaEtVLHFCQUFxQjtrR0FBckIscUJBQXFCLHlEQ2xDbEMsKzhEQStEQTs7MkZEN0JhLHFCQUFxQjtrQkFKakMsU0FBUzsrQkFDRSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0LCBJUmVzdWx0TGlzdCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEFjdGlvbkNvbnRyb2wsXG4gIEFsZXJ0U2VydmljZSxcbiAgQnVpbHRJbkFjdGlvblR5cGUsXG4gIENvbHVtbixcbiAgRGF0YUdyaWRTZXJ2aWNlLFxuICBEYXRhU291cmNlTW9kaWZpZXIsXG4gIE1vZGFsU2VydmljZSxcbiAgU2VydmVyU2lkZURhdGFDYWxsYmFjayxcbiAgU2VydmVyU2lkZURhdGFSZXN1bHQsXG4gIFN0YXR1cyxcbiAgZ2V0dGV4dFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7XG4gIERlc2NyaXB0aW9uR3JpZENvbHVtbixcbiAgRGV2aWNlVHlwZUdyaWRDb2x1bW4sXG4gIFBST0RVQ1RfRVhQRVJJRU5DRV9SRVBPU0lUT1JZX1NIQVJFRCxcbiAgUmVwb3NpdG9yeUl0ZW1OYW1lR3JpZENvbHVtbixcbiAgUmVwb3NpdG9yeVNlcnZpY2UsXG4gIFJlcG9zaXRvcnlUeXBlLFxuICBUeXBlR3JpZENvbHVtbixcbiAgVmVyc2lvbnNHcmlkQ29sdW1uXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvcmVwb3NpdG9yeS9zaGFyZWQnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UsIE1vZGFsT3B0aW9ucyB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgQWRkU29mdHdhcmVNb2RhbENvbXBvbmVudCB9IGZyb20gJy4vYWRkLXNvZnR3YXJlLW1vZGFsLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1zb2Z0d2FyZS1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICdzb2Z0d2FyZS1saXN0LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBTb2Z0d2FyZUxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBzaXplUmVxdWVzdDogUHJvbWlzZTxudW1iZXI+O1xuICBzaXplUmVxdWVzdERvbmUgPSBmYWxzZTtcbiAgcmVmcmVzaCQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBjb2x1bW5zOiBDb2x1bW5bXSA9IFtcbiAgICBuZXcgUmVwb3NpdG9yeUl0ZW1OYW1lR3JpZENvbHVtbih7XG4gICAgICBmaWx0ZXJMYWJlbDogZ2V0dGV4dCgnRmlsdGVyIHNvZnR3YXJlIGJ5IG5hbWUnKVxuICAgIH0pLFxuICAgIG5ldyBEZXNjcmlwdGlvbkdyaWRDb2x1bW4oe1xuICAgICAgZmlsdGVyTGFiZWw6IGdldHRleHQoJ0ZpbHRlciBzb2Z0d2FyZSBieSBkZXNjcmlwdGlvbicpLFxuICAgICAgcGxhY2Vob2xkZXI6IGdldHRleHQoJ0Nsb3VkIGNvbm5lY3Rpdml0eSBzb2Z0d2FyZScpXG4gICAgfSksXG4gICAgbmV3IERldmljZVR5cGVHcmlkQ29sdW1uKHsgZmlsdGVyTGFiZWw6IGdldHRleHQoJ0ZpbHRlciBzb2Z0d2FyZSBieSBkZXZpY2UgdHlwZScpIH0pLFxuICAgIG5ldyBUeXBlR3JpZENvbHVtbih7XG4gICAgICBoZWFkZXI6IGdldHRleHQoJ1NvZnR3YXJlIHR5cGUnKSxcbiAgICAgIGZpbHRlckxhYmVsOiBnZXR0ZXh0KCdGaWx0ZXIgYnkgc29mdHdhcmUgdHlwZScpLFxuICAgICAgZXhhbXBsZTogJ3l1bScsXG4gICAgICBwYXRoOiAnc29mdHdhcmVUeXBlJyxcbiAgICAgIHJlcG9zaXRvcnlUeXBlOiBSZXBvc2l0b3J5VHlwZS5TT0ZUV0FSRVxuICAgIH0pLFxuICAgIG5ldyBWZXJzaW9uc0dyaWRDb2x1bW4oKVxuICBdO1xuICBhY3Rpb25Db250cm9sczogQWN0aW9uQ29udHJvbFtdID0gW107XG4gIHNlcnZlclNpZGVEYXRhQ2FsbGJhY2s6IFNlcnZlclNpZGVEYXRhQ2FsbGJhY2s7XG4gIHBhZ2luYXRpb24gPSB7XG4gICAgcGFnZVNpemU6IDUwLFxuICAgIGN1cnJlbnRQYWdlOiAxXG4gIH07XG5cbiAgbm9SZXN1bHRzTWVzc2FnZSA9IGdldHRleHQoJ05vIHJlc3VsdHMgdG8gZGlzcGxheS4nKTtcbiAgbm9EYXRhTWVzc2FnZSA9IGdldHRleHQoJ05vIHNvZnR3YXJlIHRvIGRpc3BsYXkuJyk7XG4gIG5vUmVzdWx0c1N1YnRpdGxlID0gZ2V0dGV4dCgnUmVmaW5lIHlvdXIgc2VhcmNoIHRlcm1zIG9yIGNoZWNrIHlvdXIgc3BlbGxpbmcuJyk7XG4gIG5vRGF0YVN1YnRpdGxlID0gZ2V0dGV4dCgnQWRkIGEgbmV3IHNvZnR3YXJlIGJ5IGNsaWNraW5nIGJlbG93LicpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVwb3NpdG9yeVNlcnZpY2U6IFJlcG9zaXRvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ3JpZFNlcnZpY2U6IERhdGFHcmlkU2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgYnNNb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGVcbiAgKSB7XG4gICAgdGhpcy5zZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrID0gdGhpcy5vbkRhdGFTb3VyY2VNb2RpZmllci5iaW5kKHRoaXMpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5hY3Rpb25Db250cm9scy5wdXNoKHtcbiAgICAgIHR5cGU6IEJ1aWx0SW5BY3Rpb25UeXBlLkVkaXQsXG4gICAgICBjYWxsYmFjazogdGhpcy5lZGl0U29mdHdhcmUuYmluZCh0aGlzKVxuICAgIH0pO1xuICAgIHRoaXMuYWN0aW9uQ29udHJvbHMucHVzaCh7XG4gICAgICB0eXBlOiBCdWlsdEluQWN0aW9uVHlwZS5EZWxldGUsXG4gICAgICBjYWxsYmFjazogdGhpcy5kZWxldGVTb2Z0d2FyZS5iaW5kKHRoaXMpXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBvbkRhdGFTb3VyY2VNb2RpZmllcihcbiAgICBkYXRhU291cmNlTW9kaWZpZXI6IERhdGFTb3VyY2VNb2RpZmllclxuICApOiBQcm9taXNlPFNlcnZlclNpZGVEYXRhUmVzdWx0PiB7XG4gICAgY29uc3QgZGF0YVJlcXVlc3Q6IFByb21pc2U8SVJlc3VsdExpc3Q8SU1hbmFnZWRPYmplY3Q+PiA9XG4gICAgICB0aGlzLnJlcG9zaXRvcnlTZXJ2aWNlLmxpc3RSZXBvc2l0b3J5RW50cmllcyhSZXBvc2l0b3J5VHlwZS5TT0ZUV0FSRSwge1xuICAgICAgICBxdWVyeTogdGhpcy5ncmlkU2VydmljZS5nZXRRdWVyeU9iaihkYXRhU291cmNlTW9kaWZpZXIuY29sdW1ucyksXG4gICAgICAgIHNraXBEZWZhdWx0T3JkZXI6IHRydWUsXG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIHBhZ2VTaXplOiBkYXRhU291cmNlTW9kaWZpZXIucGFnaW5hdGlvbi5wYWdlU2l6ZSxcbiAgICAgICAgICBjdXJyZW50UGFnZTogZGF0YVNvdXJjZU1vZGlmaWVyLnBhZ2luYXRpb24uY3VycmVudFBhZ2VcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBjb25zdCBmaWx0ZXJlcmRTaXplUmVxdWVzdDogUHJvbWlzZTxudW1iZXI+ID0gdGhpcy5yZXBvc2l0b3J5U2VydmljZVxuICAgICAgLmxpc3RSZXBvc2l0b3J5RW50cmllcyhSZXBvc2l0b3J5VHlwZS5TT0ZUV0FSRSwge1xuICAgICAgICBza2lwRGVmYXVsdE9yZGVyOiB0cnVlLFxuICAgICAgICBxdWVyeTogdGhpcy5ncmlkU2VydmljZS5nZXRRdWVyeU9iaihkYXRhU291cmNlTW9kaWZpZXIuY29sdW1ucyksXG4gICAgICAgIHBhcmFtczogeyBwYWdlU2l6ZTogMSB9XG4gICAgICB9KVxuICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2U/LnBhZ2luZz8udG90YWxQYWdlcyk7XG5cbiAgICB0aGlzLnNpemVSZXF1ZXN0ID0gdGhpcy5yZXBvc2l0b3J5U2VydmljZVxuICAgICAgLmxpc3RSZXBvc2l0b3J5RW50cmllcyhSZXBvc2l0b3J5VHlwZS5TT0ZUV0FSRSwge1xuICAgICAgICBza2lwRGVmYXVsdE9yZGVyOiB0cnVlLFxuICAgICAgICBwYXJhbXM6IHsgcGFnZVNpemU6IDEgfVxuICAgICAgfSlcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgdGhpcy5zaXplUmVxdWVzdERvbmUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U/LnBhZ2luZz8udG90YWxQYWdlcztcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgW2RhdGFSZXNwb25zZSwgc2l6ZSwgZmlsdGVyZWRTaXplXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIGRhdGFSZXF1ZXN0LFxuICAgICAgdGhpcy5zaXplUmVxdWVzdCxcbiAgICAgIGZpbHRlcmVyZFNpemVSZXF1ZXN0XG4gICAgXSk7XG5cbiAgICBjb25zdCB7IHJlcywgZGF0YSwgcGFnaW5nIH0gPSBkYXRhUmVzcG9uc2U7XG5cbiAgICBjb25zdCBzZXJ2ZXJTaWRlRGF0YVJlc3VsdDogU2VydmVyU2lkZURhdGFSZXN1bHQgPSB7XG4gICAgICByZXMsXG4gICAgICBkYXRhLFxuICAgICAgcGFnaW5nLFxuICAgICAgZmlsdGVyZWRTaXplLFxuICAgICAgc2l6ZVxuICAgIH07XG5cbiAgICByZXR1cm4gc2VydmVyU2lkZURhdGFSZXN1bHQ7XG4gIH1cblxuICBhZGRTb2Z0d2FyZSgpIHtcbiAgICBjb25zdCBjb25maWc6IE1vZGFsT3B0aW9uczxBZGRTb2Z0d2FyZU1vZGFsQ29tcG9uZW50PiA9IHtcbiAgICAgIGNsYXNzOiAnbW9kYWwtc20nLFxuICAgICAgYXJpYURlc2NyaWJlZGJ5OiAnYWRkU29mdHdhcmVNb2RhbERlc2NyaXB0aW9uJyxcbiAgICAgIGFyaWFMYWJlbGxlZEJ5OiAnYWRkU29mdHdhcmVNb2RhbFRpdGxlJyxcbiAgICAgIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IHRydWUsXG4gICAgICBrZXlib2FyZDogZmFsc2VcbiAgICB9O1xuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5ic01vZGFsU2VydmljZS5zaG93KEFkZFNvZnR3YXJlTW9kYWxDb21wb25lbnQsIGNvbmZpZyk7XG4gICAgbW9kYWxSZWYuY29udGVudC5zYXZlZC5zdWJzY3JpYmUoc2F2ZWRTb2Z0d2FyZSA9PiB0aGlzLmVkaXRTb2Z0d2FyZShzYXZlZFNvZnR3YXJlKSk7XG4gIH1cblxuICBlZGl0U29mdHdhcmUoc29mdHdhcmU6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+KSB7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3NvZnR3YXJlLmlkXSwgeyByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2YXRlZFJvdXRlIH0pO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlU29mdHdhcmUoc29mdHdhcmU6IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRpdGxlID0gZ2V0dGV4dCgnRGVsZXRlIHNvZnR3YXJlJyk7XG4gICAgICBjb25zdCBib2R5ID0gYFxuICAgICAgICAke3RoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgIGdldHRleHQoJ1lvdSBhcmUgYWJvdXQgdG8gZGVsZXRlIHNvZnR3YXJlIFwie3sgbmFtZSB9fVwiIHdpdGggYWxsIGl0cyB2ZXJzaW9ucy4nKSxcbiAgICAgICAgICB7IG5hbWU6IHNvZnR3YXJlLm5hbWUgfVxuICAgICAgICApfVxuICAgICAgICAke3RoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGdldHRleHQoJ1RoaXMgb3BlcmF0aW9uIGlzIGlycmV2ZXJzaWJsZS4nKSl9XG4gICAgICAgICR7dGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZ2V0dGV4dCgnRG8geW91IHdhbnQgdG8gcHJvY2VlZD8nKSl9XG4gICAgICBgO1xuICAgICAgY29uc3QgbGFiZWxzID0ge1xuICAgICAgICBvazogZ2V0dGV4dCgnRGVsZXRlJylcbiAgICAgIH07XG4gICAgICBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5jb25maXJtKFxuICAgICAgICB0aXRsZSxcbiAgICAgICAgYm9keSxcbiAgICAgICAgU3RhdHVzLkRBTkdFUixcbiAgICAgICAgbGFiZWxzLFxuICAgICAgICB7fSxcbiAgICAgICAgeyBldmVudE5hbWU6IFBST0RVQ1RfRVhQRVJJRU5DRV9SRVBPU0lUT1JZX1NIQVJFRC5TT0ZUV0FSRS5FVkVOVFMuUkVQT1NJVE9SWSB9XG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5yZXBvc2l0b3J5U2VydmljZS5kZWxldGUoc29mdHdhcmUpO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdTb2Z0d2FyZSBkZWxldGVkLicpKTtcbiAgICAgIHRoaXMucmVmcmVzaCQubmV4dCgpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAvLyBvbmx5IGlmIG5vdCBjYW5jZWwgZnJvbSBtb2RhbFxuICAgICAgaWYgKGV4KSB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRyYWNrQnlOYW1lKF9pbmRleCwgY29sdW1uOiBDb2x1bW4pOiBzdHJpbmcge1xuICAgIHJldHVybiBjb2x1bW4ubmFtZTtcbiAgfVxufVxuIiwiPGM4eS10aXRsZT5cbiAge3sgJ1NvZnR3YXJlIHJlcG9zaXRvcnknIHwgdHJhbnNsYXRlIH19XG48L2M4eS10aXRsZT5cbjxjOHktYnJlYWRjcnVtYj5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW1cbiAgICBpY29uPVwiYzh5LW1hbmFnZW1lbnRcIlxuICAgIGxhYmVsPVwie3sgJ01hbmFnZW1lbnQnIHwgdHJhbnNsYXRlIH19XCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW1cbiAgICBpY29uPVwiYzh5LXRvb2xzXCJcbiAgICBsYWJlbD1cInt7ICdTb2Z0d2FyZSByZXBvc2l0b3J5JyB8IHRyYW5zbGF0ZSB9fVwiXG4gID48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG48L2M4eS1icmVhZGNydW1iPlxuXG48Yzh5LWFjdGlvbi1iYXItaXRlbSBbcGxhY2VtZW50XT1cIidyaWdodCdcIj5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCJcbiAgICB0aXRsZT1cInt7ICdBZGQgc29mdHdhcmUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAoY2xpY2spPVwiYWRkU29mdHdhcmUoKVwiXG4gID5cbiAgICA8aSBjOHlJY29uPVwicGx1cy1jaXJjbGVcIj48L2k+XG4gICAge3sgJ0FkZCBzb2Z0d2FyZScgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjxjOHktaGVscFxuICBzcmM9XCIvZG9jcy9kZXZpY2UtbWFuYWdlbWVudC1hcHBsaWNhdGlvbi9tYW5hZ2luZy1kZXZpY2UtZGF0YS8jbWFuYWdpbmctc29mdHdhcmVcIlxuPjwvYzh5LWhlbHA+XG5cbjxkaXYgY2xhc3M9XCJjb250ZW50LWZ1bGxwYWdlIGJvcmRlci10b3AgYm9yZGVyLWJvdHRvbVwiPlxuICA8Yzh5LWRhdGEtZ3JpZFxuICAgIFt0aXRsZV09XCInU29mdHdhcmUnIHwgdHJhbnNsYXRlXCJcbiAgICBbcmVmcmVzaF09XCJyZWZyZXNoJFwiXG4gICAgW3BhZ2luYXRpb25dPVwicGFnaW5hdGlvblwiXG4gICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXG4gICAgW2FjdGlvbkNvbnRyb2xzXT1cImFjdGlvbkNvbnRyb2xzXCJcbiAgICBbaW5maW5pdGVTY3JvbGxdPVwiJ2F1dG8nXCJcbiAgICBbc2VydmVyU2lkZURhdGFDYWxsYmFja109XCJzZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrXCJcbiAgPlxuICAgIDxjOHktdWktZW1wdHktc3RhdGVcbiAgICAgIFtpY29uXT1cInN0YXRzPy5zaXplID4gMCA/ICdzZWFyY2gnIDogJ2M4eS10b29scydcIlxuICAgICAgW3RpdGxlXT1cInN0YXRzPy5zaXplID4gMCA/IChub1Jlc3VsdHNNZXNzYWdlIHwgdHJhbnNsYXRlKSA6IChub0RhdGFNZXNzYWdlIHwgdHJhbnNsYXRlKVwiXG4gICAgICBbc3VidGl0bGVdPVwic3RhdHM/LnNpemUgPiAwID8gKG5vUmVzdWx0c1N1YnRpdGxlIHwgdHJhbnNsYXRlKSA6IChub0RhdGFTdWJ0aXRsZSB8IHRyYW5zbGF0ZSlcIlxuICAgICAgKmVtcHR5U3RhdGVDb250ZXh0PVwibGV0IHN0YXRzXCJcbiAgICAgIFtob3Jpem9udGFsXT1cInN0YXRzPy5zaXplID4gMFwiXG4gICAgPlxuICAgICAgPHAgKm5nSWY9XCJzdGF0cz8uc2l6ZSA9PT0gMFwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxuICAgICAgICAgIFt0aXRsZV09XCInQWRkIHNvZnR3YXJlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgKGNsaWNrKT1cImFkZFNvZnR3YXJlKClcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgJ0FkZCBzb2Z0d2FyZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3A+XG4gICAgPC9jOHktdWktZW1wdHktc3RhdGU+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnM7IHRyYWNrQnk6IHRyYWNrQnlOYW1lXCI+XG4gICAgICA8Yzh5LWNvbHVtbiBbbmFtZV09XCJjb2x1bW4ubmFtZVwiPjwvYzh5LWNvbHVtbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9jOHktZGF0YS1ncmlkPlxuPC9kaXY+XG4iXX0=
|
|
@@ -11,10 +11,15 @@ import * as i4 from "@angular/router";
|
|
|
11
11
|
export class TrackingMarkerPopupComponent {
|
|
12
12
|
constructor(trackingService) {
|
|
13
13
|
this.trackingService = trackingService;
|
|
14
|
+
/**
|
|
15
|
+
* Displays link to device tracking tab.
|
|
16
|
+
*/
|
|
17
|
+
this.showTrackingLink = false;
|
|
14
18
|
}
|
|
15
19
|
async ngOnInit() {
|
|
16
20
|
this.isDevice = !this.trackingService.isLocationUpdateEvent(this.context);
|
|
17
21
|
if (this.isDevice) {
|
|
22
|
+
this.trackingService.setDeviceId(this.context.id);
|
|
18
23
|
this.date = await this.trackingService.latestPositionUpdate(this.context);
|
|
19
24
|
}
|
|
20
25
|
else {
|
|
@@ -22,12 +27,14 @@ export class TrackingMarkerPopupComponent {
|
|
|
22
27
|
}
|
|
23
28
|
}
|
|
24
29
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TrackingMarkerPopupComponent, deps: [{ token: i1.TrackingService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
30
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.9", type: TrackingMarkerPopupComponent, isStandalone: true, selector: "c8y-tracking-marker-popup", inputs: { context: "context", showTrackingLink: "showTrackingLink" }, ngImport: i0, template: "<div class=\"map-marker\">\n <a\n class=\"text-truncate text-14 text-medium p-0 m-b-8 deviceLink\"\n [title]=\"context?.name\"\n *ngIf=\"isDevice\"\n [routerLink]=\"['/device/', context?.id]\"\n >\n {{ context?.name }}\n </a>\n <div\n class=\"m-b-8\"\n ng-if=\"lastUpdated\"\n >\n <p class=\"m-0\">{{ 'Position:' | translate }}</p>\n <div class=\"text-muted\">\n <p class=\"m-b-0\">{{ context?.c8y_Position?.lat }},</p>\n <p class=\"m-t-0\">{{ context?.c8y_Position?.lng }}</p>\n </div>\n @if (!!context?.c8y_Position?.alt || context?.c8y_Position?.alt === 0) {\n <p class=\"m-0\">{{ 'Altitude:' | translate }}</p>\n <div class=\"text-muted\">\n <p\n class=\"m-b-0\"\n [translate]=\"'{{alt}} m`meters, altitude`'\"\n [translateParams]=\"{ alt: context?.c8y_Position?.alt }\"\n ></p>\n </div>\n }\n @if (!!date) {\n <p class=\"m-0 p-t-4\">{{ 'Date and time:' | translate }}</p>\n <span class=\"text-muted\">{{ date | c8yDate }}</span>\n }\n </div>\n\n @if (isDevice) {\n @if (showTrackingLink) {\n <span>\n Go to\n <a [routerLink]=\"['/device', context?.id, 'tracking']\">Tracking</a>\n </span>\n } @else {\n <div class=\"d-flex a-i-center\">\n <label\n class=\"c8y-switch\"\n for=\"switch\"\n >\n <input\n id=\"switch\"\n type=\"checkbox\"\n [checked]=\"trackingService.trackVisible\"\n (change)=\"trackingService.toggleTrack()\"\n />\n <span></span>\n </label>\n <div class=\"description p-b-0\">\n {{ 'Show track' | translate }}\n </div>\n </div>\n }\n }\n</div>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.DatePipe, name: "c8yDate" }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: FormsModule }] }); }
|
|
26
31
|
}
|
|
27
32
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TrackingMarkerPopupComponent, decorators: [{
|
|
28
33
|
type: Component,
|
|
29
|
-
args: [{ standalone: true, selector: 'c8y-tracking-marker-popup', imports: [CoreModule, RouterModule, FormsModule], template: "<div class=\"map-marker\">\n <a\n class=\"text-truncate text-14 text-medium p-0 m-b-8 deviceLink\"\n [title]=\"context?.name\"\n *ngIf=\"isDevice\"\n [routerLink]=\"['/device/', context?.id]\"\n >\n {{ context?.name }}\n </a>\n <div\n class=\"m-b-8\"\n ng-if=\"lastUpdated\"\n >\n <p class=\"m-0\">{{ 'Position:' | translate }}</p>\n <
|
|
34
|
+
args: [{ standalone: true, selector: 'c8y-tracking-marker-popup', imports: [CoreModule, RouterModule, FormsModule], template: "<div class=\"map-marker\">\n <a\n class=\"text-truncate text-14 text-medium p-0 m-b-8 deviceLink\"\n [title]=\"context?.name\"\n *ngIf=\"isDevice\"\n [routerLink]=\"['/device/', context?.id]\"\n >\n {{ context?.name }}\n </a>\n <div\n class=\"m-b-8\"\n ng-if=\"lastUpdated\"\n >\n <p class=\"m-0\">{{ 'Position:' | translate }}</p>\n <div class=\"text-muted\">\n <p class=\"m-b-0\">{{ context?.c8y_Position?.lat }},</p>\n <p class=\"m-t-0\">{{ context?.c8y_Position?.lng }}</p>\n </div>\n @if (!!context?.c8y_Position?.alt || context?.c8y_Position?.alt === 0) {\n <p class=\"m-0\">{{ 'Altitude:' | translate }}</p>\n <div class=\"text-muted\">\n <p\n class=\"m-b-0\"\n [translate]=\"'{{alt}} m`meters, altitude`'\"\n [translateParams]=\"{ alt: context?.c8y_Position?.alt }\"\n ></p>\n </div>\n }\n @if (!!date) {\n <p class=\"m-0 p-t-4\">{{ 'Date and time:' | translate }}</p>\n <span class=\"text-muted\">{{ date | c8yDate }}</span>\n }\n </div>\n\n @if (isDevice) {\n @if (showTrackingLink) {\n <span>\n Go to\n <a [routerLink]=\"['/device', context?.id, 'tracking']\">Tracking</a>\n </span>\n } @else {\n <div class=\"d-flex a-i-center\">\n <label\n class=\"c8y-switch\"\n for=\"switch\"\n >\n <input\n id=\"switch\"\n type=\"checkbox\"\n [checked]=\"trackingService.trackVisible\"\n (change)=\"trackingService.toggleTrack()\"\n />\n <span></span>\n </label>\n <div class=\"description p-b-0\">\n {{ 'Show track' | translate }}\n </div>\n </div>\n }\n }\n</div>\n" }]
|
|
30
35
|
}], ctorParameters: () => [{ type: i1.TrackingService }], propDecorators: { context: [{
|
|
31
36
|
type: Input
|
|
37
|
+
}], showTrackingLink: [{
|
|
38
|
+
type: Input
|
|
32
39
|
}] } });
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2tpbmctbWFya2VyLXBvcHVwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RyYWNraW5nL3RyYWNraW5nLW1hcmtlci1wb3B1cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi90cmFja2luZy90cmFja2luZy1tYXJrZXItcG9wdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7QUFRckQsTUFBTSxPQUFPLDRCQUE0QjtJQWF2QyxZQUFtQixlQUFnQztRQUFoQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFUbkQ7O1dBRUc7UUFFSCxxQkFBZ0IsR0FBRyxLQUFLLENBQUM7SUFLNkIsQ0FBQztJQUV2RCxLQUFLLENBQUMsUUFBUTtRQUNaLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxPQUE0QixDQUFDLENBQUM7UUFDL0YsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNsRCxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxvQkFBb0IsQ0FDekQsSUFBSSxDQUFDLE9BQWdDLENBQ3RDLENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDaEMsQ0FBQztJQUNILENBQUM7OEdBekJVLDRCQUE0QjtrR0FBNUIsNEJBQTRCLDJKQ2R6QywwdURBNkRBLDJDRGpEWSxVQUFVLHdWQUFFLFlBQVksK1FBQUUsV0FBVzs7MkZBRXBDLDRCQUE0QjtrQkFOeEMsU0FBUztpQ0FDSSxJQUFJLFlBQ04sMkJBQTJCLFdBRTVCLENBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUM7b0ZBSWhELE9BQU87c0JBRE4sS0FBSztnQkFPTixnQkFBZ0I7c0JBRGYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSUV2ZW50IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQ29yZU1vZHVsZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgUG9zaXRpb25NYW5hZ2VkT2JqZWN0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9tYXAnO1xuaW1wb3J0IHsgVHJhY2tpbmdTZXJ2aWNlIH0gZnJvbSAnLi90cmFja2luZy5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnYzh5LXRyYWNraW5nLW1hcmtlci1wb3B1cCcsXG4gIHRlbXBsYXRlVXJsOiAnLi90cmFja2luZy1tYXJrZXItcG9wdXAuY29tcG9uZW50Lmh0bWwnLFxuICBpbXBvcnRzOiBbQ29yZU1vZHVsZSwgUm91dGVyTW9kdWxlLCBGb3Jtc01vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgVHJhY2tpbmdNYXJrZXJQb3B1cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpXG4gIGNvbnRleHQ6IFBvc2l0aW9uTWFuYWdlZE9iamVjdCB8IElFdmVudDtcblxuICAvKipcbiAgICogRGlzcGxheXMgbGluayB0byBkZXZpY2UgdHJhY2tpbmcgdGFiLlxuICAgKi9cbiAgQElucHV0KClcbiAgc2hvd1RyYWNraW5nTGluayA9IGZhbHNlO1xuXG4gIGlzRGV2aWNlOiBib29sZWFuO1xuICBkYXRlOiBEYXRlO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0cmFja2luZ1NlcnZpY2U6IFRyYWNraW5nU2VydmljZSkge31cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmlzRGV2aWNlID0gIXRoaXMudHJhY2tpbmdTZXJ2aWNlLmlzTG9jYXRpb25VcGRhdGVFdmVudCh0aGlzLmNvbnRleHQgYXMgdW5rbm93biBhcyBJRXZlbnQpO1xuICAgIGlmICh0aGlzLmlzRGV2aWNlKSB7XG4gICAgICB0aGlzLnRyYWNraW5nU2VydmljZS5zZXREZXZpY2VJZCh0aGlzLmNvbnRleHQuaWQpO1xuICAgICAgdGhpcy5kYXRlID0gYXdhaXQgdGhpcy50cmFja2luZ1NlcnZpY2UubGF0ZXN0UG9zaXRpb25VcGRhdGUoXG4gICAgICAgIHRoaXMuY29udGV4dCBhcyBQb3NpdGlvbk1hbmFnZWRPYmplY3RcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuY29udGV4dC50aW1lO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1hcC1tYXJrZXJcIj5cbiAgPGFcbiAgICBjbGFzcz1cInRleHQtdHJ1bmNhdGUgdGV4dC0xNCB0ZXh0LW1lZGl1bSBwLTAgbS1iLTggZGV2aWNlTGlua1wiXG4gICAgW3RpdGxlXT1cImNvbnRleHQ/Lm5hbWVcIlxuICAgICpuZ0lmPVwiaXNEZXZpY2VcIlxuICAgIFtyb3V0ZXJMaW5rXT1cIlsnL2RldmljZS8nLCBjb250ZXh0Py5pZF1cIlxuICA+XG4gICAge3sgY29udGV4dD8ubmFtZSB9fVxuICA8L2E+XG4gIDxkaXZcbiAgICBjbGFzcz1cIm0tYi04XCJcbiAgICBuZy1pZj1cImxhc3RVcGRhdGVkXCJcbiAgPlxuICAgIDxwIGNsYXNzPVwibS0wXCI+e3sgJ1Bvc2l0aW9uOicgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWRcIj5cbiAgICAgIDxwIGNsYXNzPVwibS1iLTBcIj57eyBjb250ZXh0Py5jOHlfUG9zaXRpb24/LmxhdCB9fSw8L3A+XG4gICAgICA8cCBjbGFzcz1cIm0tdC0wXCI+e3sgY29udGV4dD8uYzh5X1Bvc2l0aW9uPy5sbmcgfX08L3A+XG4gICAgPC9kaXY+XG4gICAgQGlmICghIWNvbnRleHQ/LmM4eV9Qb3NpdGlvbj8uYWx0IHx8IGNvbnRleHQ/LmM4eV9Qb3NpdGlvbj8uYWx0ID09PSAwKSB7XG4gICAgICA8cCBjbGFzcz1cIm0tMFwiPnt7ICdBbHRpdHVkZTonIHwgdHJhbnNsYXRlIH19PC9wPlxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWRcIj5cbiAgICAgICAgPHBcbiAgICAgICAgICBjbGFzcz1cIm0tYi0wXCJcbiAgICAgICAgICBbdHJhbnNsYXRlXT1cIid7e2FsdH19IG1gbWV0ZXJzLCBhbHRpdHVkZWAnXCJcbiAgICAgICAgICBbdHJhbnNsYXRlUGFyYW1zXT1cInsgYWx0OiBjb250ZXh0Py5jOHlfUG9zaXRpb24/LmFsdCB9XCJcbiAgICAgICAgPjwvcD5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgICBAaWYgKCEhZGF0ZSkge1xuICAgICAgPHAgY2xhc3M9XCJtLTAgcC10LTRcIj57eyAnRGF0ZSBhbmQgdGltZTonIHwgdHJhbnNsYXRlIH19PC9wPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkXCI+e3sgZGF0ZSB8IGM4eURhdGUgfX08L3NwYW4+XG4gICAgfVxuICA8L2Rpdj5cblxuICBAaWYgKGlzRGV2aWNlKSB7XG4gICAgQGlmIChzaG93VHJhY2tpbmdMaW5rKSB7XG4gICAgICA8c3Bhbj5cbiAgICAgICAgR28gdG9cbiAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwiWycvZGV2aWNlJywgY29udGV4dD8uaWQsICd0cmFja2luZyddXCI+VHJhY2tpbmc8L2E+XG4gICAgICA8L3NwYW4+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGEtaS1jZW50ZXJcIj5cbiAgICAgICAgPGxhYmVsXG4gICAgICAgICAgY2xhc3M9XCJjOHktc3dpdGNoXCJcbiAgICAgICAgICBmb3I9XCJzd2l0Y2hcIlxuICAgICAgICA+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBpZD1cInN3aXRjaFwiXG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgW2NoZWNrZWRdPVwidHJhY2tpbmdTZXJ2aWNlLnRyYWNrVmlzaWJsZVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cInRyYWNraW5nU2VydmljZS50b2dnbGVUcmFjaygpXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uIHAtYi0wXCI+XG4gICAgICAgICAge3sgJ1Nob3cgdHJhY2snIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgfVxuICB9XG48L2Rpdj5cbiJdfQ==
|