@sumaris-net/ngx-components 0.25.6 → 0.25.10
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/bundles/sumaris-net.ngx-components.umd.js +162 -149
- package/bundles/sumaris-net.ngx-components.umd.js.map +1 -1
- package/bundles/sumaris-net.ngx-components.umd.min.js +2 -2
- package/bundles/sumaris-net.ngx-components.umd.min.js.map +1 -1
- package/esm2015/src/app/core/install/install-upgrade-card.component.js +68 -51
- package/esm2015/src/app/core/services/model/person.model.js +4 -3
- package/esm2015/src/app/core/services/platform.service.js +38 -44
- package/esm2015/src/app/shared/material/autocomplete/material.autocomplete.js +10 -3
- package/esm2015/src/app/shared/material/autocomplete/testing/autocomplete.test.js +2 -2
- package/esm2015/src/app/shared/material/datetime/material.datetime.js +12 -7
- package/esm2015/src/app/shared/material/datetime/testing/mat-date-time.test.js +5 -3
- package/esm2015/src/app/shared/material/latlong/material.latlong.js +12 -17
- package/esm2015/src/app/shared/material/latlong/testing/latlong.test.js +2 -2
- package/fesm2015/sumaris-net.ngx-components.js +137 -117
- package/fesm2015/sumaris-net.ngx-components.js.map +1 -1
- package/package.json +1 -1
- package/src/app/core/install/install-upgrade-card.component.d.ts +6 -4
- package/src/app/core/services/platform.service.d.ts +4 -3
- package/src/app/shared/material/datetime/material.datetime.d.ts +4 -3
- package/src/app/shared/material/latlong/material.latlong.d.ts +5 -6
- package/src/assets/i18n/en-US.json +4 -0
- package/src/assets/i18n/en.json +4 -0
- package/src/theme/_icons.scss +0 -2
- package/src/theme/_ionic.scss +7 -0
- package/sumaris-net.ngx-components.metadata.json +1 -1
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
2
|
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Inject, Input, Output } from '@angular/core';
|
|
3
3
|
import { AlertController, ModalController, ToastController } from '@ionic/angular';
|
|
4
|
-
import { Subscription } from 'rxjs';
|
|
4
|
+
import { from, Subscription } from 'rxjs';
|
|
5
5
|
import { ConfigService } from '../services/config.service';
|
|
6
6
|
import { PlatformService } from '../services/platform.service';
|
|
7
|
-
import { debounceTime, distinctUntilChanged, filter, map } from 'rxjs/operators';
|
|
7
|
+
import { debounceTime, distinctUntilChanged, filter, map, switchMap } from 'rxjs/operators';
|
|
8
8
|
import { NetworkService } from '../services/network.service';
|
|
9
9
|
import { CORE_CONFIG_OPTIONS } from '../services/config/core.config';
|
|
10
10
|
import { VersionUtils } from '../../shared/version/versions';
|
|
11
11
|
import { slideUpDownAnimation } from '../../shared/material/material.animations';
|
|
12
|
-
import { isNilOrBlank, isNotEmptyArray, isNotNilOrBlank, sleep } from '../../shared/functions';
|
|
12
|
+
import { isNilOrBlank, isNotEmptyArray, isNotNil, isNotNilOrBlank, sleep } from '../../shared/functions';
|
|
13
13
|
import { ENVIRONMENT } from '../../../environments/environment.class';
|
|
14
14
|
import { Toasts } from '../../shared/toasts';
|
|
15
15
|
import { TranslateService } from '@ngx-translate/core';
|
|
@@ -31,6 +31,7 @@ export class AppInstallUpgradeCard {
|
|
|
31
31
|
this._subscription = new Subscription();
|
|
32
32
|
this._showUpdateOfflineFeature = false;
|
|
33
33
|
this.loading = true;
|
|
34
|
+
this.canDownload = false;
|
|
34
35
|
this.downloading = false;
|
|
35
36
|
this.waitingNetwork = false;
|
|
36
37
|
this.showUpgradeWarning = true;
|
|
@@ -48,26 +49,23 @@ export class AppInstallUpgradeCard {
|
|
|
48
49
|
return this._showUpdateOfflineFeature;
|
|
49
50
|
}
|
|
50
51
|
ngOnInit() {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
.
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
}
|
|
69
|
-
}));
|
|
70
|
-
});
|
|
52
|
+
this.offline = this.network.offline;
|
|
53
|
+
// Listen pod config
|
|
54
|
+
this._subscription.add(from(this.network.ready())
|
|
55
|
+
.pipe(debounceTime(1000), switchMap(() => this.configService.config), filter(isNotNil))
|
|
56
|
+
.subscribe(config => this.checkNeedInstallOrUpdate(config)));
|
|
57
|
+
// Listen network changes
|
|
58
|
+
this._subscription.add(this.network.onNetworkStatusChanges
|
|
59
|
+
.pipe(
|
|
60
|
+
//debounceTime(450),
|
|
61
|
+
//tap(() => this.waitingNetwork = false),
|
|
62
|
+
map(connectionType => connectionType === 'none'), distinctUntilChanged())
|
|
63
|
+
.subscribe(offline => {
|
|
64
|
+
if (this.offline !== offline) {
|
|
65
|
+
this.offline = offline;
|
|
66
|
+
this.markForCheck();
|
|
67
|
+
}
|
|
68
|
+
}));
|
|
71
69
|
}
|
|
72
70
|
ngOnDestroy() {
|
|
73
71
|
this._subscription.unsubscribe();
|
|
@@ -82,7 +80,7 @@ export class AppInstallUpgradeCard {
|
|
|
82
80
|
console.error('[install-upgrade-card] Missing required argument \'link.url\'');
|
|
83
81
|
return; // Skip
|
|
84
82
|
}
|
|
85
|
-
return this.
|
|
83
|
+
return this.listenDownloadJob(link.url, this.platform.download({
|
|
86
84
|
uri: link.url,
|
|
87
85
|
title: link.title,
|
|
88
86
|
filename: link.filename,
|
|
@@ -123,25 +121,32 @@ export class AppInstallUpgradeCard {
|
|
|
123
121
|
/* -- private method -- */
|
|
124
122
|
checkNeedInstallOrUpdate(config) {
|
|
125
123
|
return __awaiter(this, void 0, void 0, function* () {
|
|
126
|
-
|
|
124
|
+
if (!config)
|
|
125
|
+
return; // Skip
|
|
126
|
+
console.info('[install-upgrade-card] Check if need to install or upgrade...');
|
|
127
|
+
this.canDownload = this.platform.canDownload;
|
|
127
128
|
try {
|
|
128
129
|
const links = this.getLinks(config);
|
|
129
130
|
// Check for upgrade
|
|
130
131
|
this.upgradeLinks = this.getCompatibleUpgradeLinks(links, config);
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
132
|
+
if (isNotEmptyArray(this.upgradeLinks)) {
|
|
133
|
+
console.info(`[install-upgrade-card] Find upgrade links: ${this.upgradeLinks.map(l => l.url).join(',')}`);
|
|
134
|
+
this.installLinks = null;
|
|
135
|
+
this.listenDownloadJobs();
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
// Check for install links
|
|
139
|
+
this.installLinks = this.getCompatibleInstallLinks(links);
|
|
140
|
+
if (isNotEmptyArray(this.installLinks)) {
|
|
141
|
+
console.info(`[install-upgrade-card] Find install links ${this.installLinks.map(l => l.url).join(',')}`);
|
|
142
|
+
yield sleep(1000); // Add a delay, for animation
|
|
143
|
+
}
|
|
144
|
+
}
|
|
134
145
|
}
|
|
135
146
|
finally {
|
|
136
147
|
this.loading = false;
|
|
137
148
|
this.markForCheck();
|
|
138
149
|
}
|
|
139
|
-
// Listening downloading promise, if exists
|
|
140
|
-
(this.upgradeLinks || []).forEach(link => {
|
|
141
|
-
const promise = this.platform.getDownloadingPromise(link.url);
|
|
142
|
-
if (promise)
|
|
143
|
-
this.listenDownloadPromise(link.url, promise);
|
|
144
|
-
});
|
|
145
150
|
});
|
|
146
151
|
}
|
|
147
152
|
getCompatibleInstallLinks(installLinks) {
|
|
@@ -234,38 +239,40 @@ export class AppInstallUpgradeCard {
|
|
|
234
239
|
}
|
|
235
240
|
return filename;
|
|
236
241
|
}
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
242
|
+
listenDownloadJobs() {
|
|
243
|
+
// Listening downloading promise, if exists
|
|
244
|
+
(this.upgradeLinks || []).forEach(link => {
|
|
245
|
+
const job = this.platform.getDownloadingJob(link.url);
|
|
246
|
+
if (job)
|
|
247
|
+
this.listenDownloadJob(link.url, job);
|
|
243
248
|
});
|
|
244
249
|
}
|
|
245
|
-
|
|
250
|
+
listenDownloadJob(url, job) {
|
|
246
251
|
return __awaiter(this, void 0, void 0, function* () {
|
|
247
|
-
if (!url || !
|
|
252
|
+
if (!url || !job)
|
|
248
253
|
return; // Skip
|
|
249
254
|
try {
|
|
250
255
|
// Mark as downloading
|
|
251
256
|
if (!this.downloading) {
|
|
252
|
-
console.info(`[install-upgrade-card] Platform is downloading \'${url}\' ...`);
|
|
257
|
+
console.info(`[install-upgrade-card] Platform is already downloading \'${url}\' ...`);
|
|
253
258
|
this.downloading = true;
|
|
254
259
|
this.markForCheck();
|
|
255
260
|
}
|
|
256
|
-
const location = yield
|
|
257
|
-
|
|
261
|
+
const location = yield job.toPromise();
|
|
262
|
+
if (location) {
|
|
263
|
+
console.info('[install-upgrade-card] File downloaded at: ' + location);
|
|
264
|
+
return this.showDownloadCompleteDialog();
|
|
265
|
+
}
|
|
258
266
|
}
|
|
259
267
|
// Failed: display a toast
|
|
260
268
|
catch (err) {
|
|
261
|
-
console.error('[install-upgrade] Download failed: ' + (err && err.message || err));
|
|
269
|
+
console.error('[install-upgrade-card] Download failed: ' + (err && err.message || err));
|
|
262
270
|
return this.showDownloadFailedToast(err);
|
|
263
271
|
}
|
|
264
272
|
finally {
|
|
265
273
|
this.downloading = false;
|
|
266
274
|
this.markForCheck();
|
|
267
275
|
}
|
|
268
|
-
return this.showDownloadCompleteDialog();
|
|
269
276
|
});
|
|
270
277
|
}
|
|
271
278
|
showDownloadFailedToast(err) {
|
|
@@ -282,12 +289,12 @@ export class AppInstallUpgradeCard {
|
|
|
282
289
|
return; // Skip if component has been destroyed
|
|
283
290
|
const translations = yield this.translate.get([
|
|
284
291
|
'INFO.ALERT_HEADER',
|
|
285
|
-
'INFO.
|
|
292
|
+
'INFO.UPDATE_APP_DOWNLOADED',
|
|
286
293
|
'COMMON.BTN_CLOSE'
|
|
287
294
|
]).toPromise();
|
|
288
295
|
const alert = yield this.alertController.create({
|
|
289
296
|
header: translations['INFO.ALERT_HEADER'],
|
|
290
|
-
message: translations['INFO.
|
|
297
|
+
message: translations['INFO.UPDATE_APP_DOWNLOADED'],
|
|
291
298
|
buttons: [
|
|
292
299
|
{
|
|
293
300
|
text: translations['COMMON.BTN_CLOSE'],
|
|
@@ -300,11 +307,21 @@ export class AppInstallUpgradeCard {
|
|
|
300
307
|
yield alert.onDidDismiss();
|
|
301
308
|
});
|
|
302
309
|
}
|
|
310
|
+
markForCheck() {
|
|
311
|
+
this.cd.markForCheck();
|
|
312
|
+
}
|
|
313
|
+
showToast(opts) {
|
|
314
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
315
|
+
if (!this._subscription)
|
|
316
|
+
return; // Skip if component has been destroyed
|
|
317
|
+
yield Toasts.show(this.toastController, this.translate, opts);
|
|
318
|
+
});
|
|
319
|
+
}
|
|
303
320
|
}
|
|
304
321
|
AppInstallUpgradeCard.decorators = [
|
|
305
322
|
{ type: Component, args: [{
|
|
306
323
|
selector: 'app-install-upgrade-card',
|
|
307
|
-
template: "\n\n<!-- Offline mode card-->\n<ion-card *ngIf=\"showOfflineWarning && (!loading && offline || waitingNetwork)\"\n color=\"accent\"\n class=\"main ion-no-margin\"\n @slideUpDownAnimation>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row>\n <ion-col>\n <ion-text class=\"ion-text-wrap\" *ngIf=\"!waitingNetwork; else waitingNetworkText\">\n <h4>\n <b *ngIf=\"isLogin; else notLogin\" [innerHTML]=\"'NETWORK.INFO.OFFLINE_OR_UNAUTHORIZED'| translate\"></b>\n <ng-template #notLogin>\n <b [innerHTML]=\"'NETWORK.INFO.OFFLINE'| translate\"></b>\n </ng-template>\n </h4>\n <h3>\n <small [innerHTML]=\"'NETWORK.INFO.OFFLINE_HELP'|translate\"></small>\n </h3>\n </ion-text>\n <ng-template #waitingNetworkText>\n <ion-text class=\"ion-text-wrap\" [innerHTML]=\"'NETWORK.INFO.RETRY_TO_CONNECT'| translate\"></ion-text>\n </ng-template>\n </ion-col>\n <ion-col size=\"auto\">\n\n <!-- Retry button -->\n <ion-button *ngIf=\"!waitingNetwork; else waitingSpinner\" color=\"tertiary\" class=\"ion-float-end\"\n (click)=\"tryOnline()\">\n <span translate>NETWORK.BTN_CHECK_ALIVE</span>\n </ion-button>\n\n </ion-col>\n </ion-row>\n </ion-grid>\n\n </ion-card-content>\n</ion-card>\n\n<!-- Upgrade links -->\n<ion-card *ngIf=\"showUpgradeWarning && !loading && !offline && upgradeLinks\"\n color=\"accent\"\n class=\"ion-no-margin\"\n @slideUpDownAnimation>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row *ngFor=\"let link of upgradeLinks; last as last\">\n <ion-col>\n <ion-text class=\"ion-text-wrap\">\n <h3>\n <span *ngIf=\"link.version\" [innerHTML]=\"'INFO.UPDATE_APP_TO_VERSION'| translate: link\"></span>\n <span *ngIf=\"!link.version\" [innerHTML]=\"'INFO.UPDATE_APP'| translate: link\"></span>\n </h3>\n <h4>\n <small *ngIf=\"last\" [innerHTML]=\"'INFO.UPDATE_APP_HELP'|translate\"></small>\n </h4>\n </ion-text>\n </ion-col>\n\n <ion-col size=\"auto\">\n <ng-container *ngTemplateOutlet=\"downloadButton; context: { $implicit: link }\"></ng-container>\n </ion-col>\n </ion-row>\n\n </ion-grid>\n\n </ion-card-content>\n</ion-card>\n\n<!-- Install links -->\n<ion-card *ngIf=\"showInstallButton && !loading && !offline && installLinks\"\n color=\"secondary\"\n class=\"ion-no-margin\"\n @slideUpDownAnimation>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row *ngFor=\"let link of installLinks; last as last\">\n <ion-col>\n <ion-text class=\"ion-text-wrap\">\n <h3 [innerHTML]=\"'INFO.DOWNLOAD_APP_TITLE'| translate: {name: link.name, platform: getPlatformName(link.platform) }\"></h3>\n <h4><small *ngIf=\"last\" [innerHTML]=\"'INFO.DOWNLOAD_APP_HELP'|translate\"></small></h4>\n </ion-text>\n </ion-col>\n <ion-col size=\"auto\">\n <ng-container *ngTemplateOutlet=\"downloadButton; context: { $implicit: link }\"></ng-container>\n </ion-col>\n </ion-row>\n\n </ion-grid>\n\n </ion-card-content>\n</ion-card>\n\n<!-- Update offline feature card-->\n<ion-card *ngIf=\"showUpdateOfflineFeature && !loading && !offline\"\n color=\"accent\"\n class=\"main ion-no-margin\"\n @slideUpDownAnimation>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row>\n <ion-col>\n <ion-text class=\"ion-text-wrap\">\n <h4>\n <b [innerHTML]=\"'NETWORK.INFO.UPDATE_OFFLINE_MODE'| translate\"></b>\n </h4>\n <h3>\n <small [innerHTML]=\"'NETWORK.INFO.UPDATE_OFFLINE_MODE_HELP'|translate\"></small>\n </h3>\n </ion-text>\n </ion-col>\n <ion-col size=\"auto\">\n\n <!-- Retry button -->\n <ion-button color=\"tertiary\" class=\"ion-float-end\"\n (click)=\"onUpdateOfflineModeClick.emit($event)\">\n <span translate>NETWORK.BTN_UPDATE</span>\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n </ion-card-content>\n</ion-card>\n\n<!-- Display a download button, depending on the link URL, and the device platform -->\n<ng-template #downloadButton let-link>\n\n <ng-container *ngIf=\"link.
|
|
324
|
+
template: "\n\n<!-- Offline mode card-->\n<ion-card *ngIf=\"showOfflineWarning && (!loading && offline || waitingNetwork)\"\n color=\"accent\"\n class=\"main ion-no-margin\"\n @slideUpDownAnimation>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row>\n <ion-col>\n <ion-text class=\"ion-text-wrap\" *ngIf=\"!waitingNetwork; else waitingNetworkText\">\n <h4>\n <b *ngIf=\"isLogin; else notLogin\" [innerHTML]=\"'NETWORK.INFO.OFFLINE_OR_UNAUTHORIZED'| translate\"></b>\n <ng-template #notLogin>\n <b [innerHTML]=\"'NETWORK.INFO.OFFLINE'| translate\"></b>\n </ng-template>\n </h4>\n <h3>\n <small [innerHTML]=\"'NETWORK.INFO.OFFLINE_HELP'|translate\"></small>\n </h3>\n </ion-text>\n <ng-template #waitingNetworkText>\n <ion-text class=\"ion-text-wrap\" [innerHTML]=\"'NETWORK.INFO.RETRY_TO_CONNECT'| translate\"></ion-text>\n </ng-template>\n </ion-col>\n <ion-col size=\"auto\">\n\n <!-- Retry button -->\n <ion-button *ngIf=\"!waitingNetwork; else waitingSpinner\" color=\"tertiary\" class=\"ion-float-end\"\n (click)=\"tryOnline()\">\n <span translate>NETWORK.BTN_CHECK_ALIVE</span>\n </ion-button>\n\n </ion-col>\n </ion-row>\n </ion-grid>\n\n </ion-card-content>\n</ion-card>\n\n<!-- Upgrade links -->\n<ion-card *ngIf=\"showUpgradeWarning && !loading && !offline && upgradeLinks\"\n color=\"accent\"\n class=\"ion-no-margin\"\n @slideUpDownAnimation>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row *ngFor=\"let link of upgradeLinks; last as last\">\n <ion-col>\n <ion-text class=\"ion-text-wrap\">\n <h3>\n <span *ngIf=\"link.version\" [innerHTML]=\"'INFO.UPDATE_APP_TO_VERSION'| translate: link\"></span>\n <span *ngIf=\"!link.version\" [innerHTML]=\"'INFO.UPDATE_APP'| translate: link\"></span>\n </h3>\n <h4>\n <small *ngIf=\"last\" [innerHTML]=\"'INFO.UPDATE_APP_HELP'|translate\"></small>\n </h4>\n </ion-text>\n </ion-col>\n\n <ion-col size=\"auto\">\n <ng-container *ngTemplateOutlet=\"downloadButton; context: { $implicit: link }\"></ng-container>\n </ion-col>\n </ion-row>\n\n </ion-grid>\n\n </ion-card-content>\n</ion-card>\n\n<!-- Install links -->\n<ion-card *ngIf=\"showInstallButton && !loading && !offline && installLinks\"\n color=\"secondary\"\n class=\"ion-no-margin\"\n @slideUpDownAnimation>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row *ngFor=\"let link of installLinks; last as last\">\n <ion-col>\n <ion-text class=\"ion-text-wrap\">\n <h3 [innerHTML]=\"'INFO.DOWNLOAD_APP_TITLE'| translate: {name: link.name, platform: getPlatformName(link.platform) }\"></h3>\n <h4><small *ngIf=\"last\" [innerHTML]=\"'INFO.DOWNLOAD_APP_HELP'|translate\"></small></h4>\n </ion-text>\n </ion-col>\n <ion-col size=\"auto\">\n <ng-container *ngTemplateOutlet=\"downloadButton; context: { $implicit: link }\"></ng-container>\n </ion-col>\n </ion-row>\n\n </ion-grid>\n\n </ion-card-content>\n</ion-card>\n\n<!-- Update offline feature card-->\n<ion-card *ngIf=\"showUpdateOfflineFeature && !loading && !offline\"\n color=\"accent\"\n class=\"main ion-no-margin\"\n @slideUpDownAnimation>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row>\n <ion-col>\n <ion-text class=\"ion-text-wrap\">\n <h4>\n <b [innerHTML]=\"'NETWORK.INFO.UPDATE_OFFLINE_MODE'| translate\"></b>\n </h4>\n <h3>\n <small [innerHTML]=\"'NETWORK.INFO.UPDATE_OFFLINE_MODE_HELP'|translate\"></small>\n </h3>\n </ion-text>\n </ion-col>\n <ion-col size=\"auto\">\n\n <!-- Retry button -->\n <ion-button color=\"tertiary\" class=\"ion-float-end\"\n (click)=\"onUpdateOfflineModeClick.emit($event)\">\n <span translate>NETWORK.BTN_UPDATE</span>\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n </ion-card-content>\n</ion-card>\n\n<!-- Display a download button, depending on the link URL, and the device platform -->\n<ng-template #downloadButton let-link>\n\n <ng-container *ngIf=\"link.filename; else redirectButton\">\n\n <ng-container *ngIf=\"canDownload; else webDownloadButton\">\n <!-- Download using platform -->\n <ion-button (click)=\"download($event, asLink(link))\"\n [disabled]=\"link.downloading\"\n color=\"tertiary\" class=\"ion-float-end\">\n <ion-icon slot=\"start\" *ngIf=\"!link.downloading\" name=\"download\"></ion-icon>\n <ion-spinner slot=\"start\" class=\"ion-no-padding\" *ngIf=\"link.downloading\"></ion-spinner>\n <ion-label translate>COMMON.BTN_DOWNLOAD</ion-label>\n </ion-button>\n </ng-container>\n\n <!-- Web download button -->\n <ng-template #webDownloadButton>\n <ion-button [download]=\"link.downloadFilename\"\n [href]=\"link.url\"\n color=\"tertiary\" class=\"ion-float-end\" >\n <ion-label translate>COMMON.BTN_DOWNLOAD</ion-label>\n </ion-button>\n </ng-template>\n </ng-container>\n\n <!-- Web redirect button -->\n <ng-template #redirectButton>\n <ion-button [href]=\"link.url\" rel=\"external\" color=\"tertiary\" class=\"ion-float-end\" target=\"_blank\">\n <ion-label translate>COMMON.BTN_SHOW_MORE</ion-label>\n </ion-button>\n </ng-template>\n</ng-template>\n\n\n<!-- Waiting spinner -->\n<ng-template #waitingSpinner>\n <ion-spinner color=\"light\"></ion-spinner>\n</ng-template>\n",
|
|
308
325
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
309
326
|
animations: [slideUpDownAnimation],
|
|
310
327
|
styles: ["ion-text small{font-size:85%}"]
|
|
@@ -329,4 +346,4 @@ AppInstallUpgradeCard.propDecorators = {
|
|
|
329
346
|
showUpdateOfflineFeature: [{ type: Input }],
|
|
330
347
|
onUpdateOfflineModeClick: [{ type: Output }]
|
|
331
348
|
};
|
|
332
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFsbC11cGdyYWRlLWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL2luc3RhbGwvaW5zdGFsbC11cGdyYWRlLWNhcmQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDNUksT0FBTyxFQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDakYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUVsQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBQyxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFDL0UsT0FBTyxFQUFDLFlBQVksRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQzdGLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUNwRSxPQUFPLEVBQW1CLE1BQU0sRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzdELE9BQU8s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TyxFQUFFO29CQUNQO3dCQUNFLElBQUksRUFBRSxZQUFZLENBQUMsa0JBQWtCLENBQUM7d0JBQ3RDLElBQUksRUFBRSxRQUFRO3dCQUNkLFFBQVEsRUFBRSxXQUFXO3FCQUN0QjtpQkFDRjthQUNGLENBQUMsQ0FBQztZQUVILE1BQU0sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3RCLE1BQU0sS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzdCLENBQUM7S0FBQTs7O1lBNVZGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsMEJBQTBCO2dCQUNwQyxnOExBQWtEO2dCQUVsRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtnQkFDL0MsVUFBVSxFQUFFLENBQUMsb0JBQW9CLENBQUM7O2FBQ25DOzs7WUF2Q3dCLGVBQWU7WUFHaEMsYUFBYTtZQUhxQixlQUFlO1lBQWpELGVBQWU7WUFhZixnQkFBZ0I7WUFkUyxpQkFBaUI7WUFLMUMsZUFBZTtZQUVmLGNBQWM7NENBMEVqQixNQUFNLFNBQUMsV0FBVzs7O3NCQTNCcEIsS0FBSztpQ0FDTCxLQUFLO2lDQUNMLEtBQUs7Z0NBQ0wsS0FBSzt1Q0FFTCxLQUFLO3VDQVdMLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBbGVydENvbnRyb2xsZXIsIE1vZGFsQ29udHJvbGxlciwgVG9hc3RDb250cm9sbGVyfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0NvbmZpZ3VyYXRpb259IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL2NvbmZpZy5tb2RlbCc7XG5pbXBvcnQge0NvbmZpZ1NlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7UGxhdGZvcm1TZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy9wbGF0Zm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7TmV0d29ya1NlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL25ldHdvcmsuc2VydmljZSc7XG5pbXBvcnQge0NPUkVfQ09ORklHX09QVElPTlN9IGZyb20gJy4uL3NlcnZpY2VzL2NvbmZpZy9jb3JlLmNvbmZpZyc7XG5pbXBvcnQge1ZlcnNpb25VdGlsc30gZnJvbSAnLi4vLi4vc2hhcmVkL3ZlcnNpb24vdmVyc2lvbnMnO1xuaW1wb3J0IHtzbGlkZVVwRG93bkFuaW1hdGlvbn0gZnJvbSAnLi4vLi4vc2hhcmVkL21hdGVyaWFsL21hdGVyaWFsLmFuaW1hdGlvbnMnO1xuaW1wb3J0IHtpc05pbE9yQmxhbmssIGlzTm90RW1wdHlBcnJheSwgaXNOb3ROaWxPckJsYW5rLCBzbGVlcH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQge0VOVklST05NRU5UfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHtTaG93VG9hc3RPcHRpb25zLCBUb2FzdHN9IGZyb20gJy4uLy4uL3NoYXJlZC90b2FzdHMnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7UGVlcn0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvcGVlci5tb2RlbCc7XG5cblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIEluc3RhbGxBcHBMaW5rIHtcbiAgbmFtZTogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgcGxhdGZvcm0/OiAnYW5kcm9pZCcgfCAnaW9zJztcbiAgdmVyc2lvbj86IHN0cmluZztcbiAgZmlsZW5hbWU/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgbWltZVR5cGU/OiBzdHJpbmc7XG4gIGRvd25sb2FkaW5nPzogYm9vbGVhbjtcbn1cblxuY29uc3QgTWltZVR5cGVzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIEFORFJPSURfQVBLOiAnYXBwbGljYXRpb24vdm5kLmFuZHJvaWQucGFja2FnZS1hcmNoaXZlJ1xufSk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1pbnN0YWxsLXVwZ3JhZGUtY2FyZCcsXG4gIHRlbXBsYXRlVXJsOiAnaW5zdGFsbC11cGdyYWRlLWNhcmQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pbnN0YWxsLXVwZ3JhZGUtY2FyZC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgYW5pbWF0aW9uczogW3NsaWRlVXBEb3duQW5pbWF0aW9uXVxufSlcbmV4cG9ydCBjbGFzcyBBcHBJbnN0YWxsVXBncmFkZUNhcmQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIF9zaG93VXBkYXRlT2ZmbGluZUZlYXR1cmUgPSBmYWxzZTtcblxuICBsb2FkaW5nID0gdHJ1ZTtcbiAgZG93bmxvYWRpbmcgPSBmYWxzZTtcbiAgd2FpdGluZ05ldHdvcmsgPSBmYWxzZTtcbiAgaW5zdGFsbExpbmtzOiBJbnN0YWxsQXBwTGlua1tdO1xuICB1cGdyYWRlTGlua3M6IEluc3RhbGxBcHBMaW5rW107XG4gIG9mZmxpbmU6IGJvb2xlYW47XG4gIHVwZ3JhZGVWZXJzaW9uOiBzdHJpbmc7XG5cbiAgQElucHV0KCkgaXNMb2dpbjogYm9vbGVhbjtcbiAgQElucHV0KCkgc2hvd1VwZ3JhZGVXYXJuaW5nID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd09mZmxpbmVXYXJuaW5nID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd0luc3RhbGxCdXR0b24gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBzZXQgc2hvd1VwZGF0ZU9mZmxpbmVGZWF0dXJlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlID09PSB0aGlzLl9zaG93VXBkYXRlT2ZmbGluZUZlYXR1cmUpIHJldHVybjsgLy8gU2tpcFxuICAgIHRoaXMuX3Nob3dVcGRhdGVPZmZsaW5lRmVhdHVyZSA9IHZhbHVlO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBnZXQgc2hvd1VwZGF0ZU9mZmxpbmVGZWF0dXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zaG93VXBkYXRlT2ZmbGluZUZlYXR1cmU7XG4gIH1cblxuICBAT3V0cHV0KCkgb25VcGRhdGVPZmZsaW5lTW9kZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxVSUV2ZW50PigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbW9kYWxDdHJsOiBNb2RhbENvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9hc3RDb250cm9sbGVyOiBUb2FzdENvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSBhbGVydENvbnRyb2xsZXI6IEFsZXJ0Q29udHJvbGxlcixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwdWJsaWMgcGxhdGZvcm06IFBsYXRmb3JtU2VydmljZSxcbiAgICBwdWJsaWMgbmV0d29yazogTmV0d29ya1NlcnZpY2UsXG4gICAgQEluamVjdChFTlZJUk9OTUVOVCkgcHJvdGVjdGVkIGVudmlyb25tZW50XG4gICkge1xuICB9XG5cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcblxuICAgIGF3YWl0IHRoaXMucGxhdGZvcm0ucmVhZHkoKTtcblxuICAgIHRoaXMub2ZmbGluZSA9IHRoaXMubmV0d29yay5vZmZsaW5lO1xuXG4gICAgLy8gTGlzdGVuIHBvZCBjb25maWdcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLmNvbmZpZ1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoMTAwMCksXG4gICAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMubmV0d29yay5vbmxpbmUpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZShjb25maWcgPT4gdGhpcy5jaGVja05lZWRJbnN0YWxsT3JVcGRhdGUoY29uZmlnKSkpO1xuXG4gICAgLy8gTGlzdGVuIG5ldHdvcmsgY2hhbmdlc1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLm5ldHdvcmsub25OZXR3b3JrU3RhdHVzQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICAvL2RlYm91bmNlVGltZSg0NTApLFxuICAgICAgICAgIC8vdGFwKCgpID0+IHRoaXMud2FpdGluZ05ldHdvcmsgPSBmYWxzZSksXG4gICAgICAgICAgbWFwKGNvbm5lY3Rpb25UeXBlID0+IGNvbm5lY3Rpb25UeXBlID09PSAnbm9uZScpLFxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKG9mZmxpbmUgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLm9mZmxpbmUgIT09IG9mZmxpbmUpIHtcbiAgICAgICAgICAgIHRoaXMub2ZmbGluZSA9IG9mZmxpbmU7XG4gICAgICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICB0aGlzLm9uVXBkYXRlT2ZmbGluZU1vZGVDbGljay5jb21wbGV0ZSgpO1xuICAgIHRoaXMuaW5zdGFsbExpbmtzID0gbnVsbDtcbiAgICB0aGlzLnVwZ3JhZGVMaW5rcyA9IG51bGw7XG4gIH1cblxuICBhc3luYyBkb3dubG9hZChldmVudDogVUlFdmVudCwgbGluazogSW5zdGFsbEFwcExpbmspIHtcbiAgICBpZiAoIWxpbmsgfHwgIWxpbmsudXJsKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbaW5zdGFsbC11cGdyYWRlLWNhcmRdIE1pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQgXFwnbGluay51cmxcXCcnKTtcbiAgICAgIHJldHVybjsgLy8gU2tpcFxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmxpc3RlbkRvd25sb2FkUHJvbWlzZShsaW5rLnVybCwgdGhpcy5wbGF0Zm9ybS5kb3dubG9hZCh7XG4gICAgICB1cmk6IGxpbmsudXJsLFxuICAgICAgdGl0bGU6IGxpbmsudGl0bGUsXG4gICAgICBmaWxlbmFtZTogbGluay5maWxlbmFtZSxcbiAgICAgIG1pbWVUeXBlOiBsaW5rLm1pbWVUeXBlXG4gICAgfSkpO1xuICB9XG5cbiAgYXN5bmMgdHJ5T25saW5lKCkge1xuICAgIHRoaXMud2FpdGluZ05ldHdvcmsgPSB0cnVlO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5uZXR3b3JrLnRyeU9ubGluZSh7XG4gICAgICAgIHNob3dMb2FkaW5nVG9hc3Q6IGZhbHNlLFxuICAgICAgICBzaG93T25saW5lVG9hc3Q6IHRydWUsXG4gICAgICAgIHNob3dPZmZsaW5lVG9hc3Q6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9XG4gICAgZmluYWxseSB7XG4gICAgICB0aGlzLndhaXRpbmdOZXR3b3JrID0gZmFsc2U7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGdldFBsYXRmb3JtTmFtZShwbGF0Zm9ybTogJ2FuZHJvaWQnfCdpb3MnKSB7XG4gICAgc3dpdGNoIChwbGF0Zm9ybSkge1xuICAgICAgY2FzZSAnYW5kcm9pZCc6XG4gICAgICAgIHJldHVybiAnQW5kcm9pZCc7XG4gICAgICBjYXNlICdpb3MnOlxuICAgICAgICByZXR1cm4gJ2lPUyc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgYXNMaW5rKHZhbHVlOiBhbnkpOiBJbnN0YWxsQXBwTGluayB7XG4gICAgcmV0dXJuIHZhbHVlIGFzIEluc3RhbGxBcHBMaW5rO1xuICB9XG5cbiAgLyogLS0gcHJpdmF0ZSBtZXRob2QgIC0tICovXG5cbiAgcHJpdmF0ZSBhc3luYyBjaGVja05lZWRJbnN0YWxsT3JVcGRhdGUoY29uZmlnOiBDb25maWd1cmF0aW9uKSB7XG4gICAgY29uc29sZS5pbmZvKCdbaW5zdGFsbF0gQ2hlY2sgaWYgbmVlZCB0byBpbnN0YWxsIG9yIHVwZ3JhZGUuLi4nKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBsaW5rcyA9IHRoaXMuZ2V0TGlua3MoY29uZmlnKTtcblxuICAgICAgLy8gQ2hlY2sgZm9yIHVwZ3JhZGVcbiAgICAgIHRoaXMudXBncmFkZUxpbmtzID0gdGhpcy5nZXRDb21wYXRpYmxlVXBncmFkZUxpbmtzKGxpbmtzLCBjb25maWcpO1xuXG4gICAgICAvLyBDaGVjayBmb3IgaW5zdGFsbCBsaW5rcyAoaWYgbm8gdXBncmFkZSBuZWVkKVxuICAgICAgdGhpcy5pbnN0YWxsTGlua3MgPSAhdGhpcy51cGdyYWRlTGlua3MgJiYgdGhpcy5nZXRDb21wYXRpYmxlSW5zdGFsbExpbmtzKGxpbmtzKTtcblxuICAgICAgYXdhaXQgc2xlZXAoMTAwMCk7IC8vIEFkZCBhIGRlbGF5LCBmb3IgYW5pbWF0aW9uXG5cbiAgICB9XG4gICAgZmluYWxseSB7XG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLy8gTGlzdGVuaW5nIGRvd25sb2FkaW5nIHByb21pc2UsIGlmIGV4aXN0c1xuICAgICh0aGlzLnVwZ3JhZGVMaW5rcyB8fCBbXSkuZm9yRWFjaChsaW5rID0+IHtcbiAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLnBsYXRmb3JtLmdldERvd25sb2FkaW5nUHJvbWlzZShsaW5rLnVybCk7XG4gICAgICBpZiAocHJvbWlzZSkgdGhpcy5saXN0ZW5Eb3dubG9hZFByb21pc2UobGluay51cmwsIHByb21pc2UpO1xuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIGdldENvbXBhdGlibGVJbnN0YWxsTGlua3MoaW5zdGFsbExpbmtzOiBJbnN0YWxsQXBwTGlua1tdKTogSW5zdGFsbEFwcExpbmtbXSB7XG5cbiAgICAvLyBDb3Jkb3ZhIGFscmVhZHkgcnVubmluZzogbm90IG5lZWQgdG8gaW5zdGFsbFxuICAgIGlmICh0aGlzLnBsYXRmb3JtLmlzKCdjb3Jkb3ZhJykpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAvLyBJZiBtb2JpbGUgd2ViOiByZXR1cm4gYWxsXG4gICAgaWYgKHRoaXMucGxhdGZvcm0uaXMoJ21vYmlsZXdlYicpKSB7XG4gICAgICByZXR1cm4gaW5zdGFsbExpbmtzO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGdldENvbXBhdGlibGVVcGdyYWRlTGlua3MoaW5zdGFsbExpbmtzOiBJbnN0YWxsQXBwTGlua1tdLCBjb25maWc6IENvbmZpZ3VyYXRpb24pOiBJbnN0YWxsQXBwTGlua1tdIHtcbiAgICBjb25zdCBhcHBWZXJzaW9uID0gdGhpcy5lbnZpcm9ubWVudC52ZXJzaW9uO1xuICAgIGNvbnN0IGFwcE1pblZlcnNpb25Gcm9tUG9kID0gY29uZmlnLmdldFByb3BlcnR5KENPUkVfQ09ORklHX09QVElPTlMuQVBQX01JTl9WRVJTSU9OKTtcblxuICAgIGlmICghYXBwVmVyc2lvbikge1xuICAgICAgY29uc29sZS5lcnJvcignTWlzc2luZyB2YWx1ZSBmb3IgXFwnZW52aXJvbm1lbnQudmVyc2lvblxcJzogY2Fubm90IGNoZWNrIGFwcCBjb21wYXRpYmlsaXR5IScpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBuZWVkVXBncmFkZSA9IGFwcE1pblZlcnNpb25Gcm9tUG9kICYmICFWZXJzaW9uVXRpbHMuaXNDb21wYXRpYmxlKGFwcE1pblZlcnNpb25Gcm9tUG9kLCBhcHBWZXJzaW9uKTtcbiAgICBpZiAoIW5lZWRVcGdyYWRlKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgdXBncmFkZUxpbmtzID0gaW5zdGFsbExpbmtzXG4gICAgICAuZmlsdGVyKGxpbmsgPT4gdGhpcy5wbGF0Zm9ybS5pcygnbW9iaWxld2ViJykgfHwgKGxpbmsucGxhdGZvcm0gJiYgdGhpcy5wbGF0Zm9ybS5pcyhsaW5rLnBsYXRmb3JtKSkpO1xuXG4gICAgLy8gVXNlIG1pbiB2ZXJzaW9uIGFzIGRlZmF1bHQgdmVyc2lvblxuICAgIHVwZ3JhZGVMaW5rcy5mb3JFYWNoKGxpbmsgPT4ge1xuICAgICAgbGluay52ZXJzaW9uID0gbGluay52ZXJzaW9uIHx8IGFwcE1pblZlcnNpb25Gcm9tUG9kO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGlzTm90RW1wdHlBcnJheSh1cGdyYWRlTGlua3MpID8gdXBncmFkZUxpbmtzIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMaW5rcyhjb25maWc6IENvbmZpZ3VyYXRpb24pOiBJbnN0YWxsQXBwTGlua1tdIHtcbiAgICBjb25zdCByZXN1bHQ6IEluc3RhbGxBcHBMaW5rW10gPSBbXTtcblxuICAgIC8vIEFuZHJvaWRcbiAgICB7XG4gICAgICAvLyBHZXQgVVJMIChmcm9tIGNvbmZpZywgb3IgZW52aXJvbm1lbnQpXG4gICAgICBsZXQgdXJsID0gY29uZmlnLmdldFByb3BlcnR5KENPUkVfQ09ORklHX09QVElPTlMuQU5EUk9JRF9JTlNUQUxMX1VSTCk7XG4gICAgICBpZiAoaXNOaWxPckJsYW5rKHVybCkpIHVybCA9IHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdEFuZHJvaWRJbnN0YWxsVXJsIHx8IG51bGw7XG5cbiAgICAgIC8vIFJlc29sdmUgcmVsYXRpdmUgVVJMXG4gICAgICBjb25zdCBwZWVyID0gdGhpcy5uZXR3b3JrLnBlZXI7XG4gICAgICBpZiAocGVlciAmJiAodXJsLnN0YXJ0c1dpdGgoJy4vJykgfHwgdXJsLnN0YXJ0c1dpdGgoJy8nKSkpIHtcbiAgICAgICAgdXJsID0gUGVlci5wYXRoKHBlZXIsIHVybCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1pblZlcnNpb24gPSBjb25maWcuZ2V0UHJvcGVydHkoQ09SRV9DT05GSUdfT1BUSU9OUy5BUFBfTUlOX1ZFUlNJT04pO1xuXG4gICAgICAvLyBDb21wdXRlIEFwcCBuYW1lXG4gICAgICBjb25zdCBuYW1lOiBzdHJpbmcgPSBpc05vdE5pbE9yQmxhbmsodXJsKSAmJiBjb25maWcubGFiZWwgfHwgdGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0QXBwTmFtZSB8fCAnU1VNQVJpUyc7XG5cbiAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgbGV0IHRpdGxlOiBzdHJpbmc7XG4gICAgICAgIGxldCBtaW1lVHlwZTogc3RyaW5nO1xuXG4gICAgICAgIC8vIEdldCBmaWxlIG5hbWVcbiAgICAgICAgbGV0IGZpbGVuYW1lID0gdGhpcy5nZXRGaWxlbmFtZSh1cmwpO1xuICAgICAgICBsZXQgdmVyc2lvbiA9IG1pblZlcnNpb24gfHwgJ2xhdGVzdCc7XG5cbiAgICAgICAgLy8gT0ssIHRoaXMgaXMgYSBkb3dubG9hZGFibGUgQVBLIGZpbGUgKGUuZy4gTk9UIGEgbGluayB0byBhIHBsYXlzdG9yZSlcbiAgICAgICAgaWYgKGZpbGVuYW1lPy5lbmRzV2l0aCgnLmFwaycpKSB7XG4gICAgICAgICAgLy8gRGVmaW5lIG1pbWUgdHlwZVxuICAgICAgICAgIG1pbWVUeXBlID0gTWltZVR5cGVzLkFORFJPSURfQVBLO1xuXG4gICAgICAgICAgLy8gR2V0IHRoZSBmaWxlIHZlcnNpb24gKGlmIGFueSlcbiAgICAgICAgICBjb25zdCB2ZXJzaW9uTWF0Y2hlcyA9IC8tdihbMS05XVswLTldKlxcLlswLTldK1xcLig6Pyg6P2FscGhhfGJldGF8cmMpP1swLTldKikpL2kuZXhlYyhmaWxlbmFtZSk7XG4gICAgICAgICAgdmVyc2lvbiA9IHZlcnNpb25NYXRjaGVzICYmIHZlcnNpb25NYXRjaGVzWzFdIHx8IHZlcnNpb247XG5cbiAgICAgICAgICAvLyBDb21wdXRlIGEgbmV3IGZpbGUgbmFtZSwgd2l0aCB0aGUgdmVyc2lvblxuICAgICAgICAgIGlmIChpc05vdE5pbE9yQmxhbmsobmFtZSkgJiYgdmVyc2lvbiAhPT0gJ2xhdGVzdCcpIHtcbiAgICAgICAgICAgIGZpbGVuYW1lID0gYCR7bmFtZX0tdiR7dmVyc2lvbn0uYXBrYC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgdGl0bGUgPSBgJHtuYW1lfSB2JHt2ZXJzaW9ufWA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZWxzZSB7XG5cbiAgICAgICAgICAgIC8vIFJlcGxhY2UgJ2xhdGVzdCcgd2l0aCB0aGUgYXBwIHZlcnNpb24sIGlmIHByZXNlbnRcbiAgICAgICAgICAgIGlmIChmaWxlbmFtZS5pbmRleE9mKCdsYXRlc3QnKSkge1xuICAgICAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnJlcGxhY2UoJ2xhdGVzdCcsIHZlcnNpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdC5wdXNoKHsgbmFtZSwgdXJsLCBwbGF0Zm9ybTogJ2FuZHJvaWQnLCB2ZXJzaW9uLCBmaWxlbmFtZSwgdGl0bGUsIG1pbWVUeXBlIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlPUyAtIFRPRE9cbiAgICAvL3tcbiAgICAvLyAgKC4uLilcbiAgICAvL31cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGdldEZpbGVuYW1lKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXVybCkgcmV0dXJuO1xuICAgIC8vIEdldCBsYXN0IHBhcnQgKG9yIGFsbCBzdHJpbmcsIGlmIG5vICcvJylcbiAgICBsZXQgZmlsZW5hbWUgPSB1cmwuc3Vic3RyaW5nKHVybC5sYXN0SW5kZXhPZignLycpKzEpO1xuXG4gICAgY29uc3QgcXVlcnlQYXJhbUluZGV4ID0gZmlsZW5hbWUuaW5kZXhPZignPycpO1xuICAgIGlmIChxdWVyeVBhcmFtSW5kZXggIT09IC0xKSB7XG4gICAgICAvLyBSZW1vdmUgcXVlcnkgcGFyYW1zXG4gICAgICByZXR1cm4gZmlsZW5hbWUuc3Vic3RyaW5nKDAsIHF1ZXJ5UGFyYW1JbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbGVuYW1lO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2hvd1RvYXN0KG9wdHM6IFNob3dUb2FzdE9wdGlvbnMpIHtcbiAgICBhd2FpdCBUb2FzdHMuc2hvdyh0aGlzLnRvYXN0Q29udHJvbGxlciwgdGhpcy50cmFuc2xhdGUsIG9wdHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsaXN0ZW5Eb3dubG9hZFByb21pc2UodXJsOiBzdHJpbmcsIHByb21pc2U6IFByb21pc2U8c3RyaW5nPikge1xuICAgIGlmICghdXJsIHx8ICFwcm9taXNlKSByZXR1cm47IC8vIFNraXBcblxuICAgIHRyeSB7XG4gICAgICAvLyBNYXJrIGFzIGRvd25sb2FkaW5nXG4gICAgICBpZiAoIXRoaXMuZG93bmxvYWRpbmcpIHtcbiAgICAgICAgY29uc29sZS5pbmZvKGBbaW5zdGFsbC11cGdyYWRlLWNhcmRdIFBsYXRmb3JtIGlzIGRvd25sb2FkaW5nIFxcJyR7dXJsfVxcJyAuLi5gKTtcbiAgICAgICAgdGhpcy5kb3dubG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxvY2F0aW9uID0gYXdhaXQgcHJvbWlzZTtcbiAgICAgIGNvbnNvbGUuaW5mbygnW2luc3RhbGwtdXBncmFkZS1jYXJkXSBGaWxlIGRvd25sb2FkZWQgYXQ6ICcgKyBsb2NhdGlvbik7XG4gICAgfVxuICAgICAgLy8gRmFpbGVkOiBkaXNwbGF5IGEgdG9hc3RcbiAgICBjYXRjaChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tpbnN0YWxsLXVwZ3JhZGVdIERvd25sb2FkIGZhaWxlZDogJyArIChlcnIgJiYgZXJyLm1lc3NhZ2UgfHwgZXJyKSk7XG4gICAgICByZXR1cm4gdGhpcy5zaG93RG93bmxvYWRGYWlsZWRUb2FzdChlcnIpO1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgIHRoaXMuZG93bmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc2hvd0Rvd25sb2FkQ29tcGxldGVEaWFsb2coKTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd0Rvd25sb2FkRmFpbGVkVG9hc3QoZXJyKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd1RvYXN0KHtcbiAgICAgIG1lc3NhZ2U6ICdFUlJPUi5ET1dOTE9BRF9GQUlMRUQnLFxuICAgICAgbWVzc2FnZVBhcmFtczoge2Vycm9yOiBlcnJ9LFxuICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgIHNob3dDbG9zZUJ1dHRvbjogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzaG93RG93bmxvYWRDb21wbGV0ZURpYWxvZygpIHtcbiAgICBpZiAoIXRoaXMuX3N1YnNjcmlwdGlvbikgcmV0dXJuOyAvLyBTa2lwIGlmIGNvbXBvbmVudCBoYXMgYmVlbiBkZXN0cm95ZWRcblxuICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IGF3YWl0IHRoaXMudHJhbnNsYXRlLmdldChbXG4gICAgICAnSU5GTy5BTEVSVF9IRUFERVInLFxuICAgICAgJ0lORk8uRE9XTkxPQURfVVBEQVRFX1NVQ0NFRUQnLFxuICAgICAgJ0NPTU1PTi5CVE5fQ0xPU0UnXG4gICAgXSkudG9Qcm9taXNlKCk7XG4gICAgY29uc3QgYWxlcnQgPSBhd2FpdCB0aGlzLmFsZXJ0Q29udHJvbGxlci5jcmVhdGUoe1xuICAgICAgaGVhZGVyOiB0cmFuc2xhdGlvbnNbJ0lORk8uQUxFUlRfSEVBREVSJ10sXG4gICAgICBtZXNzYWdlOiB0cmFuc2xhdGlvbnNbJ0lORk8uRE9XTkxPQURfVVBEQVRFX1NVQ0NFRUQnXSxcbiAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6IHRyYW5zbGF0aW9uc1snQ09NTU9OLkJUTl9DTE9TRSddLFxuICAgICAgICAgIHJvbGU6ICdjYW5jZWwnLFxuICAgICAgICAgIGNzc0NsYXNzOiAnc2Vjb25kYXJ5J1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBhd2FpdCBhbGVydC5wcmVzZW50KCk7XG4gICAgYXdhaXQgYWxlcnQub25EaWREaXNtaXNzKCk7XG4gIH1cbn1cbiJdfQ==
|
|
349
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFsbC11cGdyYWRlLWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL2luc3RhbGwvaW5zdGFsbC11cGdyYWRlLWNhcmQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDNUksT0FBTyxFQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDakYsT0FBTyxFQUFDLElBQUksRUFBYyxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFcEQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ3pELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUMsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQVksU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEcsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUMvRSxPQUFPLEVBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZHLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUNwRSxPQUFPLEVBQW1CLE1BQU0sRUFB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LENBQUM7UUFDaEUsQ0FBQztLQUFBOzs7WUE1V0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSwwQkFBMEI7Z0JBQ3BDLCs2TEFBa0Q7Z0JBRWxELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2dCQUMvQyxVQUFVLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQzs7YUFDbkM7OztZQXZDd0IsZUFBZTtZQUdoQyxhQUFhO1lBSHFCLGVBQWU7WUFBakQsZUFBZTtZQWFmLGdCQUFnQjtZQWRTLGlCQUFpQjtZQUsxQyxlQUFlO1lBRWYsY0FBYzs0Q0EyRWpCLE1BQU0sU0FBQyxXQUFXOzs7c0JBM0JwQixLQUFLO2lDQUNMLEtBQUs7aUNBQ0wsS0FBSztnQ0FDTCxLQUFLO3VDQUVMLEtBQUs7dUNBV0wsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FsZXJ0Q29udHJvbGxlciwgTW9kYWxDb250cm9sbGVyLCBUb2FzdENvbnRyb2xsZXJ9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7ZnJvbSwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7Q29uZmlndXJhdGlvbn0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvY29uZmlnLm1vZGVsJztcbmltcG9ydCB7Q29uZmlnU2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHtQbGF0Zm9ybVNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL3BsYXRmb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgbWVyZ2VNYXAsIHN3aXRjaE1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtOZXR3b3JrU2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvbmV0d29yay5zZXJ2aWNlJztcbmltcG9ydCB7Q09SRV9DT05GSUdfT1BUSU9OU30gZnJvbSAnLi4vc2VydmljZXMvY29uZmlnL2NvcmUuY29uZmlnJztcbmltcG9ydCB7VmVyc2lvblV0aWxzfSBmcm9tICcuLi8uLi9zaGFyZWQvdmVyc2lvbi92ZXJzaW9ucyc7XG5pbXBvcnQge3NsaWRlVXBEb3duQW5pbWF0aW9ufSBmcm9tICcuLi8uLi9zaGFyZWQvbWF0ZXJpYWwvbWF0ZXJpYWwuYW5pbWF0aW9ucyc7XG5pbXBvcnQge2lzTmlsT3JCbGFuaywgaXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbCwgaXNOb3ROaWxPckJsYW5rLCBzbGVlcH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQge0VOVklST05NRU5UfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHtTaG93VG9hc3RPcHRpb25zLCBUb2FzdHN9IGZyb20gJy4uLy4uL3NoYXJlZC90b2FzdHMnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7UGVlcn0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvcGVlci5tb2RlbCc7XG5cblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIEluc3RhbGxBcHBMaW5rIHtcbiAgbmFtZTogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgcGxhdGZvcm0/OiAnYW5kcm9pZCcgfCAnaW9zJztcbiAgdmVyc2lvbj86IHN0cmluZztcbiAgZmlsZW5hbWU/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgbWltZVR5cGU/OiBzdHJpbmc7XG4gIGRvd25sb2FkaW5nPzogYm9vbGVhbjtcbn1cblxuY29uc3QgTWltZVR5cGVzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIEFORFJPSURfQVBLOiAnYXBwbGljYXRpb24vdm5kLmFuZHJvaWQucGFja2FnZS1hcmNoaXZlJ1xufSk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1pbnN0YWxsLXVwZ3JhZGUtY2FyZCcsXG4gIHRlbXBsYXRlVXJsOiAnaW5zdGFsbC11cGdyYWRlLWNhcmQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pbnN0YWxsLXVwZ3JhZGUtY2FyZC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgYW5pbWF0aW9uczogW3NsaWRlVXBEb3duQW5pbWF0aW9uXVxufSlcbmV4cG9ydCBjbGFzcyBBcHBJbnN0YWxsVXBncmFkZUNhcmQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIF9zaG93VXBkYXRlT2ZmbGluZUZlYXR1cmUgPSBmYWxzZTtcblxuICBsb2FkaW5nID0gdHJ1ZTtcbiAgY2FuRG93bmxvYWQgPSBmYWxzZTtcbiAgZG93bmxvYWRpbmcgPSBmYWxzZTtcbiAgd2FpdGluZ05ldHdvcmsgPSBmYWxzZTtcbiAgaW5zdGFsbExpbmtzOiBJbnN0YWxsQXBwTGlua1tdO1xuICB1cGdyYWRlTGlua3M6IEluc3RhbGxBcHBMaW5rW107XG4gIG9mZmxpbmU6IGJvb2xlYW47XG4gIHVwZ3JhZGVWZXJzaW9uOiBzdHJpbmc7XG5cbiAgQElucHV0KCkgaXNMb2dpbjogYm9vbGVhbjtcbiAgQElucHV0KCkgc2hvd1VwZ3JhZGVXYXJuaW5nID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd09mZmxpbmVXYXJuaW5nID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd0luc3RhbGxCdXR0b24gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBzZXQgc2hvd1VwZGF0ZU9mZmxpbmVGZWF0dXJlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlID09PSB0aGlzLl9zaG93VXBkYXRlT2ZmbGluZUZlYXR1cmUpIHJldHVybjsgLy8gU2tpcFxuICAgIHRoaXMuX3Nob3dVcGRhdGVPZmZsaW5lRmVhdHVyZSA9IHZhbHVlO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBnZXQgc2hvd1VwZGF0ZU9mZmxpbmVGZWF0dXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zaG93VXBkYXRlT2ZmbGluZUZlYXR1cmU7XG4gIH1cblxuICBAT3V0cHV0KCkgb25VcGRhdGVPZmZsaW5lTW9kZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxVSUV2ZW50PigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbW9kYWxDdHJsOiBNb2RhbENvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9hc3RDb250cm9sbGVyOiBUb2FzdENvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSBhbGVydENvbnRyb2xsZXI6IEFsZXJ0Q29udHJvbGxlcixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwdWJsaWMgcGxhdGZvcm06IFBsYXRmb3JtU2VydmljZSxcbiAgICBwdWJsaWMgbmV0d29yazogTmV0d29ya1NlcnZpY2UsXG4gICAgQEluamVjdChFTlZJUk9OTUVOVCkgcHJvdGVjdGVkIGVudmlyb25tZW50XG4gICkge1xuICB9XG5cblxuICBuZ09uSW5pdCgpIHtcblxuICAgIHRoaXMub2ZmbGluZSA9IHRoaXMubmV0d29yay5vZmZsaW5lO1xuXG4gICAgLy8gTGlzdGVuIHBvZCBjb25maWdcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgZnJvbSh0aGlzLm5ldHdvcmsucmVhZHkoKSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDEwMDApLFxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnKSxcbiAgICAgICAgICBmaWx0ZXIoaXNOb3ROaWwpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZShjb25maWcgPT4gdGhpcy5jaGVja05lZWRJbnN0YWxsT3JVcGRhdGUoY29uZmlnKSkpO1xuXG4gICAgLy8gTGlzdGVuIG5ldHdvcmsgY2hhbmdlc1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLm5ldHdvcmsub25OZXR3b3JrU3RhdHVzQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICAvL2RlYm91bmNlVGltZSg0NTApLFxuICAgICAgICAgIC8vdGFwKCgpID0+IHRoaXMud2FpdGluZ05ldHdvcmsgPSBmYWxzZSksXG4gICAgICAgICAgbWFwKGNvbm5lY3Rpb25UeXBlID0+IGNvbm5lY3Rpb25UeXBlID09PSAnbm9uZScpLFxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKG9mZmxpbmUgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLm9mZmxpbmUgIT09IG9mZmxpbmUpIHtcbiAgICAgICAgICAgIHRoaXMub2ZmbGluZSA9IG9mZmxpbmU7XG4gICAgICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICB0aGlzLm9uVXBkYXRlT2ZmbGluZU1vZGVDbGljay5jb21wbGV0ZSgpO1xuICAgIHRoaXMuaW5zdGFsbExpbmtzID0gbnVsbDtcbiAgICB0aGlzLnVwZ3JhZGVMaW5rcyA9IG51bGw7XG4gIH1cblxuICBhc3luYyBkb3dubG9hZChldmVudDogVUlFdmVudCwgbGluazogSW5zdGFsbEFwcExpbmspIHtcbiAgICBpZiAoIWxpbmsgfHwgIWxpbmsudXJsKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbaW5zdGFsbC11cGdyYWRlLWNhcmRdIE1pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQgXFwnbGluay51cmxcXCcnKTtcbiAgICAgIHJldHVybjsgLy8gU2tpcFxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmxpc3RlbkRvd25sb2FkSm9iKGxpbmsudXJsLCB0aGlzLnBsYXRmb3JtLmRvd25sb2FkKHtcbiAgICAgIHVyaTogbGluay51cmwsXG4gICAgICB0aXRsZTogbGluay50aXRsZSxcbiAgICAgIGZpbGVuYW1lOiBsaW5rLmZpbGVuYW1lLFxuICAgICAgbWltZVR5cGU6IGxpbmsubWltZVR5cGVcbiAgICB9KSk7XG4gIH1cblxuICBhc3luYyB0cnlPbmxpbmUoKSB7XG4gICAgdGhpcy53YWl0aW5nTmV0d29yayA9IHRydWU7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLm5ldHdvcmsudHJ5T25saW5lKHtcbiAgICAgICAgc2hvd0xvYWRpbmdUb2FzdDogZmFsc2UsXG4gICAgICAgIHNob3dPbmxpbmVUb2FzdDogdHJ1ZSxcbiAgICAgICAgc2hvd09mZmxpbmVUb2FzdDogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgIHRoaXMud2FpdGluZ05ldHdvcmsgPSBmYWxzZTtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0UGxhdGZvcm1OYW1lKHBsYXRmb3JtOiAnYW5kcm9pZCd8J2lvcycpIHtcbiAgICBzd2l0Y2ggKHBsYXRmb3JtKSB7XG4gICAgICBjYXNlICdhbmRyb2lkJzpcbiAgICAgICAgcmV0dXJuICdBbmRyb2lkJztcbiAgICAgIGNhc2UgJ2lvcyc6XG4gICAgICAgIHJldHVybiAnaU9TJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICBhc0xpbmsodmFsdWU6IGFueSk6IEluc3RhbGxBcHBMaW5rIHtcbiAgICByZXR1cm4gdmFsdWUgYXMgSW5zdGFsbEFwcExpbms7XG4gIH1cblxuICAvKiAtLSBwcml2YXRlIG1ldGhvZCAgLS0gKi9cblxuICBwcml2YXRlIGFzeW5jIGNoZWNrTmVlZEluc3RhbGxPclVwZGF0ZShjb25maWc6IENvbmZpZ3VyYXRpb24pIHtcbiAgICBpZiAoIWNvbmZpZykgcmV0dXJuOyAvLyBTa2lwXG5cbiAgICBjb25zb2xlLmluZm8oJ1tpbnN0YWxsLXVwZ3JhZGUtY2FyZF0gQ2hlY2sgaWYgbmVlZCB0byBpbnN0YWxsIG9yIHVwZ3JhZGUuLi4nKTtcblxuICAgIHRoaXMuY2FuRG93bmxvYWQgPSB0aGlzLnBsYXRmb3JtLmNhbkRvd25sb2FkO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxpbmtzID0gdGhpcy5nZXRMaW5rcyhjb25maWcpO1xuXG4gICAgICAvLyBDaGVjayBmb3IgdXBncmFkZVxuICAgICAgdGhpcy51cGdyYWRlTGlua3MgPSB0aGlzLmdldENvbXBhdGlibGVVcGdyYWRlTGlua3MobGlua3MsIGNvbmZpZyk7XG5cbiAgICAgIGlmIChpc05vdEVtcHR5QXJyYXkodGhpcy51cGdyYWRlTGlua3MpKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW2luc3RhbGwtdXBncmFkZS1jYXJkXSBGaW5kIHVwZ3JhZGUgbGlua3M6ICR7dGhpcy51cGdyYWRlTGlua3MubWFwKGwgPT4gbC51cmwpLmpvaW4oJywnKX1gKTtcbiAgICAgICAgdGhpcy5pbnN0YWxsTGlua3MgPSBudWxsO1xuICAgICAgICB0aGlzLmxpc3RlbkRvd25sb2FkSm9icygpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIENoZWNrIGZvciBpbnN0YWxsIGxpbmtzXG4gICAgICAgIHRoaXMuaW5zdGFsbExpbmtzID0gdGhpcy5nZXRDb21wYXRpYmxlSW5zdGFsbExpbmtzKGxpbmtzKTtcbiAgICAgICAgaWYgKGlzTm90RW1wdHlBcnJheSh0aGlzLmluc3RhbGxMaW5rcykpIHtcbiAgICAgICAgICBjb25zb2xlLmluZm8oYFtpbnN0YWxsLXVwZ3JhZGUtY2FyZF0gRmluZCBpbnN0YWxsIGxpbmtzICR7dGhpcy5pbnN0YWxsTGlua3MubWFwKGwgPT4gbC51cmwpLmpvaW4oJywnKX1gKTtcbiAgICAgICAgICBhd2FpdCBzbGVlcCgxMDAwKTsgLy8gQWRkIGEgZGVsYXksIGZvciBhbmltYXRpb25cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldENvbXBhdGlibGVJbnN0YWxsTGlua3MoaW5zdGFsbExpbmtzOiBJbnN0YWxsQXBwTGlua1tdKTogSW5zdGFsbEFwcExpbmtbXSB7XG5cbiAgICAvLyBDb3Jkb3ZhIGFscmVhZHkgcnVubmluZzogbm90IG5lZWQgdG8gaW5zdGFsbFxuICAgIGlmICh0aGlzLnBsYXRmb3JtLmlzKCdjb3Jkb3ZhJykpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAvLyBJZiBtb2JpbGUgd2ViOiByZXR1cm4gYWxsXG4gICAgaWYgKHRoaXMucGxhdGZvcm0uaXMoJ21vYmlsZXdlYicpKSB7XG4gICAgICByZXR1cm4gaW5zdGFsbExpbmtzO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGdldENvbXBhdGlibGVVcGdyYWRlTGlua3MoaW5zdGFsbExpbmtzOiBJbnN0YWxsQXBwTGlua1tdLCBjb25maWc6IENvbmZpZ3VyYXRpb24pOiBJbnN0YWxsQXBwTGlua1tdIHtcbiAgICBjb25zdCBhcHBWZXJzaW9uID0gdGhpcy5lbnZpcm9ubWVudC52ZXJzaW9uO1xuICAgIGNvbnN0IGFwcE1pblZlcnNpb25Gcm9tUG9kID0gY29uZmlnLmdldFByb3BlcnR5KENPUkVfQ09ORklHX09QVElPTlMuQVBQX01JTl9WRVJTSU9OKTtcblxuICAgIGlmICghYXBwVmVyc2lvbikge1xuICAgICAgY29uc29sZS5lcnJvcignTWlzc2luZyB2YWx1ZSBmb3IgXFwnZW52aXJvbm1lbnQudmVyc2lvblxcJzogY2Fubm90IGNoZWNrIGFwcCBjb21wYXRpYmlsaXR5IScpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBuZWVkVXBncmFkZSA9IGFwcE1pblZlcnNpb25Gcm9tUG9kICYmICFWZXJzaW9uVXRpbHMuaXNDb21wYXRpYmxlKGFwcE1pblZlcnNpb25Gcm9tUG9kLCBhcHBWZXJzaW9uKTtcbiAgICBpZiAoIW5lZWRVcGdyYWRlKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgdXBncmFkZUxpbmtzID0gaW5zdGFsbExpbmtzXG4gICAgICAuZmlsdGVyKGxpbmsgPT4gdGhpcy5wbGF0Zm9ybS5pcygnbW9iaWxld2ViJykgfHwgKGxpbmsucGxhdGZvcm0gJiYgdGhpcy5wbGF0Zm9ybS5pcyhsaW5rLnBsYXRmb3JtKSkpO1xuXG4gICAgLy8gVXNlIG1pbiB2ZXJzaW9uIGFzIGRlZmF1bHQgdmVyc2lvblxuICAgIHVwZ3JhZGVMaW5rcy5mb3JFYWNoKGxpbmsgPT4ge1xuICAgICAgbGluay52ZXJzaW9uID0gbGluay52ZXJzaW9uIHx8IGFwcE1pblZlcnNpb25Gcm9tUG9kO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGlzTm90RW1wdHlBcnJheSh1cGdyYWRlTGlua3MpID8gdXBncmFkZUxpbmtzIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMaW5rcyhjb25maWc6IENvbmZpZ3VyYXRpb24pOiBJbnN0YWxsQXBwTGlua1tdIHtcbiAgICBjb25zdCByZXN1bHQ6IEluc3RhbGxBcHBMaW5rW10gPSBbXTtcblxuICAgIC8vIEFuZHJvaWRcbiAgICB7XG4gICAgICAvLyBHZXQgVVJMIChmcm9tIGNvbmZpZywgb3IgZW52aXJvbm1lbnQpXG4gICAgICBsZXQgdXJsID0gY29uZmlnLmdldFByb3BlcnR5KENPUkVfQ09ORklHX09QVElPTlMuQU5EUk9JRF9JTlNUQUxMX1VSTCk7XG4gICAgICBpZiAoaXNOaWxPckJsYW5rKHVybCkpIHVybCA9IHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdEFuZHJvaWRJbnN0YWxsVXJsIHx8IG51bGw7XG5cbiAgICAgIC8vIFJlc29sdmUgcmVsYXRpdmUgVVJMXG4gICAgICBjb25zdCBwZWVyID0gdGhpcy5uZXR3b3JrLnBlZXI7XG4gICAgICBpZiAocGVlciAmJiAodXJsLnN0YXJ0c1dpdGgoJy4vJykgfHwgdXJsLnN0YXJ0c1dpdGgoJy8nKSkpIHtcbiAgICAgICAgdXJsID0gUGVlci5wYXRoKHBlZXIsIHVybCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1pblZlcnNpb24gPSBjb25maWcuZ2V0UHJvcGVydHkoQ09SRV9DT05GSUdfT1BUSU9OUy5BUFBfTUlOX1ZFUlNJT04pO1xuXG4gICAgICAvLyBDb21wdXRlIEFwcCBuYW1lXG4gICAgICBjb25zdCBuYW1lOiBzdHJpbmcgPSBpc05vdE5pbE9yQmxhbmsodXJsKSAmJiBjb25maWcubGFiZWwgfHwgdGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0QXBwTmFtZSB8fCAnU1VNQVJpUyc7XG5cbiAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgbGV0IHRpdGxlOiBzdHJpbmc7XG4gICAgICAgIGxldCBtaW1lVHlwZTogc3RyaW5nO1xuXG4gICAgICAgIC8vIEdldCBmaWxlIG5hbWVcbiAgICAgICAgbGV0IGZpbGVuYW1lID0gdGhpcy5nZXRGaWxlbmFtZSh1cmwpO1xuICAgICAgICBsZXQgdmVyc2lvbiA9IG1pblZlcnNpb24gfHwgJ2xhdGVzdCc7XG5cbiAgICAgICAgLy8gT0ssIHRoaXMgaXMgYSBkb3dubG9hZGFibGUgQVBLIGZpbGUgKGUuZy4gTk9UIGEgbGluayB0byBhIHBsYXlzdG9yZSlcbiAgICAgICAgaWYgKGZpbGVuYW1lPy5lbmRzV2l0aCgnLmFwaycpKSB7XG4gICAgICAgICAgLy8gRGVmaW5lIG1pbWUgdHlwZVxuICAgICAgICAgIG1pbWVUeXBlID0gTWltZVR5cGVzLkFORFJPSURfQVBLO1xuXG4gICAgICAgICAgLy8gR2V0IHRoZSBmaWxlIHZlcnNpb24gKGlmIGFueSlcbiAgICAgICAgICBjb25zdCB2ZXJzaW9uTWF0Y2hlcyA9IC8tdihbMS05XVswLTldKlxcLlswLTldK1xcLig6Pyg6P2FscGhhfGJldGF8cmMpP1swLTldKikpL2kuZXhlYyhmaWxlbmFtZSk7XG4gICAgICAgICAgdmVyc2lvbiA9IHZlcnNpb25NYXRjaGVzICYmIHZlcnNpb25NYXRjaGVzWzFdIHx8IHZlcnNpb247XG5cbiAgICAgICAgICAvLyBDb21wdXRlIGEgbmV3IGZpbGUgbmFtZSwgd2l0aCB0aGUgdmVyc2lvblxuICAgICAgICAgIGlmIChpc05vdE5pbE9yQmxhbmsobmFtZSkgJiYgdmVyc2lvbiAhPT0gJ2xhdGVzdCcpIHtcbiAgICAgICAgICAgIGZpbGVuYW1lID0gYCR7bmFtZX0tdiR7dmVyc2lvbn0uYXBrYC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgdGl0bGUgPSBgJHtuYW1lfSB2JHt2ZXJzaW9ufWA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZWxzZSB7XG5cbiAgICAgICAgICAgIC8vIFJlcGxhY2UgJ2xhdGVzdCcgd2l0aCB0aGUgYXBwIHZlcnNpb24sIGlmIHByZXNlbnRcbiAgICAgICAgICAgIGlmIChmaWxlbmFtZS5pbmRleE9mKCdsYXRlc3QnKSkge1xuICAgICAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnJlcGxhY2UoJ2xhdGVzdCcsIHZlcnNpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdC5wdXNoKHsgbmFtZSwgdXJsLCBwbGF0Zm9ybTogJ2FuZHJvaWQnLCB2ZXJzaW9uLCBmaWxlbmFtZSwgdGl0bGUsIG1pbWVUeXBlIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlPUyAtIFRPRE9cbiAgICAvL3tcbiAgICAvLyAgKC4uLilcbiAgICAvL31cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGdldEZpbGVuYW1lKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXVybCkgcmV0dXJuO1xuICAgIC8vIEdldCBsYXN0IHBhcnQgKG9yIGFsbCBzdHJpbmcsIGlmIG5vICcvJylcbiAgICBsZXQgZmlsZW5hbWUgPSB1cmwuc3Vic3RyaW5nKHVybC5sYXN0SW5kZXhPZignLycpKzEpO1xuXG4gICAgY29uc3QgcXVlcnlQYXJhbUluZGV4ID0gZmlsZW5hbWUuaW5kZXhPZignPycpO1xuICAgIGlmIChxdWVyeVBhcmFtSW5kZXggIT09IC0xKSB7XG4gICAgICAvLyBSZW1vdmUgcXVlcnkgcGFyYW1zXG4gICAgICByZXR1cm4gZmlsZW5hbWUuc3Vic3RyaW5nKDAsIHF1ZXJ5UGFyYW1JbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbGVuYW1lO1xuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5Eb3dubG9hZEpvYnMoKSB7XG4gICAgLy8gTGlzdGVuaW5nIGRvd25sb2FkaW5nIHByb21pc2UsIGlmIGV4aXN0c1xuICAgICh0aGlzLnVwZ3JhZGVMaW5rcyB8fCBbXSkuZm9yRWFjaChsaW5rID0+IHtcbiAgICAgIGNvbnN0IGpvYiA9IHRoaXMucGxhdGZvcm0uZ2V0RG93bmxvYWRpbmdKb2IobGluay51cmwpO1xuICAgICAgaWYgKGpvYikgdGhpcy5saXN0ZW5Eb3dubG9hZEpvYihsaW5rLnVybCwgam9iKTtcbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsaXN0ZW5Eb3dubG9hZEpvYih1cmw6IHN0cmluZywgam9iOiBPYnNlcnZhYmxlPHN0cmluZz4pIHtcbiAgICBpZiAoIXVybCB8fCAham9iKSByZXR1cm47IC8vIFNraXBcblxuICAgIHRyeSB7XG4gICAgICAvLyBNYXJrIGFzIGRvd25sb2FkaW5nXG4gICAgICBpZiAoIXRoaXMuZG93bmxvYWRpbmcpIHtcbiAgICAgICAgY29uc29sZS5pbmZvKGBbaW5zdGFsbC11cGdyYWRlLWNhcmRdIFBsYXRmb3JtIGlzIGFscmVhZHkgZG93bmxvYWRpbmcgXFwnJHt1cmx9XFwnIC4uLmApO1xuICAgICAgICB0aGlzLmRvd25sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbG9jYXRpb24gPSBhd2FpdCBqb2IudG9Qcm9taXNlKCk7XG4gICAgICBpZiAobG9jYXRpb24pIHtcbiAgICAgICAgY29uc29sZS5pbmZvKCdbaW5zdGFsbC11cGdyYWRlLWNhcmRdIEZpbGUgZG93bmxvYWRlZCBhdDogJyArIGxvY2F0aW9uKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hvd0Rvd25sb2FkQ29tcGxldGVEaWFsb2coKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gRmFpbGVkOiBkaXNwbGF5IGEgdG9hc3RcbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbaW5zdGFsbC11cGdyYWRlLWNhcmRdIERvd25sb2FkIGZhaWxlZDogJyArIChlcnIgJiYgZXJyLm1lc3NhZ2UgfHwgZXJyKSk7XG4gICAgICByZXR1cm4gdGhpcy5zaG93RG93bmxvYWRGYWlsZWRUb2FzdChlcnIpO1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgIHRoaXMuZG93bmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzaG93RG93bmxvYWRGYWlsZWRUb2FzdChlcnIpIHtcbiAgICByZXR1cm4gdGhpcy5zaG93VG9hc3Qoe1xuICAgICAgbWVzc2FnZTogJ0VSUk9SLkRPV05MT0FEX0ZBSUxFRCcsXG4gICAgICBtZXNzYWdlUGFyYW1zOiB7ZXJyb3I6IGVycn0sXG4gICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNob3dEb3dubG9hZENvbXBsZXRlRGlhbG9nKCkge1xuICAgIGlmICghdGhpcy5fc3Vic2NyaXB0aW9uKSByZXR1cm47IC8vIFNraXAgaWYgY29tcG9uZW50IGhhcyBiZWVuIGRlc3Ryb3llZFxuXG4gICAgY29uc3QgdHJhbnNsYXRpb25zID0gYXdhaXQgdGhpcy50cmFuc2xhdGUuZ2V0KFtcbiAgICAgICdJTkZPLkFMRVJUX0hFQURFUicsXG4gICAgICAnSU5GTy5VUERBVEVfQVBQX0RPV05MT0FERUQnLFxuICAgICAgJ0NPTU1PTi5CVE5fQ0xPU0UnXG4gICAgXSkudG9Qcm9taXNlKCk7XG4gICAgY29uc3QgYWxlcnQgPSBhd2FpdCB0aGlzLmFsZXJ0Q29udHJvbGxlci5jcmVhdGUoe1xuICAgICAgaGVhZGVyOiB0cmFuc2xhdGlvbnNbJ0lORk8uQUxFUlRfSEVBREVSJ10sXG4gICAgICBtZXNzYWdlOiB0cmFuc2xhdGlvbnNbJ0lORk8uVVBEQVRFX0FQUF9ET1dOTE9BREVEJ10sXG4gICAgICBidXR0b25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiB0cmFuc2xhdGlvbnNbJ0NPTU1PTi5CVE5fQ0xPU0UnXSxcbiAgICAgICAgICByb2xlOiAnY2FuY2VsJyxcbiAgICAgICAgICBjc3NDbGFzczogJ3NlY29uZGFyeSdcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgYXdhaXQgYWxlcnQucHJlc2VudCgpO1xuICAgIGF3YWl0IGFsZXJ0Lm9uRGlkRGlzbWlzcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2hvd1RvYXN0KG9wdHM6IFNob3dUb2FzdE9wdGlvbnMpIHtcbiAgICBpZiAoIXRoaXMuX3N1YnNjcmlwdGlvbikgcmV0dXJuOyAvLyBTa2lwIGlmIGNvbXBvbmVudCBoYXMgYmVlbiBkZXN0cm95ZWRcbiAgICBhd2FpdCBUb2FzdHMuc2hvdyh0aGlzLnRvYXN0Q29udHJvbGxlciwgdGhpcy50cmFuc2xhdGUsIG9wdHMpO1xuICB9XG59XG4iXX0=
|
|
@@ -4,6 +4,7 @@ import { Entity } from './entity.model';
|
|
|
4
4
|
import { Department } from './department.model';
|
|
5
5
|
import { fromDateISOString, toDateISOString } from '../../../shared/dates';
|
|
6
6
|
import { EntityClass } from './entity.decorators';
|
|
7
|
+
import { isEmptyArray } from '../../../shared/functions';
|
|
7
8
|
export const PRIORITIZED_AUTHORITIES = Object.freeze(['ADMIN', 'SUPERVISOR', 'USER', 'GUEST']);
|
|
8
9
|
// @dynamic
|
|
9
10
|
let Person = Person_1 = class Person extends Entity {
|
|
@@ -56,12 +57,12 @@ Person = Person_1 = __decorate([
|
|
|
56
57
|
export { Person };
|
|
57
58
|
export class PersonUtils {
|
|
58
59
|
static getMainProfile(profiles) {
|
|
59
|
-
if (
|
|
60
|
+
if (isEmptyArray(profiles))
|
|
60
61
|
return 'GUEST';
|
|
61
62
|
return PRIORITIZED_AUTHORITIES.find(label => profiles.includes(label)) || 'GUEST';
|
|
62
63
|
}
|
|
63
64
|
static getMainProfileIndex(profiles) {
|
|
64
|
-
if (
|
|
65
|
+
if (isEmptyArray(profiles))
|
|
65
66
|
return PRIORITIZED_AUTHORITIES.length - 1; // return last (lower) profile
|
|
66
67
|
const index = PRIORITIZED_AUTHORITIES.findIndex(label => profiles.includes(label));
|
|
67
68
|
return (index !== -1) ? index : (PRIORITIZED_AUTHORITIES.length - 1);
|
|
@@ -77,4 +78,4 @@ export class PersonUtils {
|
|
|
77
78
|
return (data || []).map(PersonUtils.personToString).join(separator || ', ');
|
|
78
79
|
}
|
|
79
80
|
}
|
|
80
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc29uLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL21vZGVsL3BlcnNvbi5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDOUMsT0FBTyxFQUFDLGlCQUFpQixFQUFFLGVBQWUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ3pFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUloRCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBaUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFFN0gsV0FBVztJQUVFLE1BQU0sb0JBQU4sTUFFVCxTQUFRLE1BQTZDO0lBaUJ2RCxZQUFZLFVBQW1CO1FBQzdCLEtBQUssQ0FBQyxVQUFVLElBQUksUUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBUHZDLGVBQVUsR0FBZSxJQUFJLENBQUM7SUFROUIsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFpQztRQUN4QyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFHO1lBQ3hCLE9BQU87Z0JBQ0wsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUNYLFVBQVUsRUFBRSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksU0FBUztnQkFDN0QsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2dCQUN6QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7YUFDeEIsQ0FBQztTQUNIO1FBQ0QsTUFBTSxNQUFNLEdBQVEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztR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U0FBUyxJQUFJLElBQUksQ0FBQyxDQUFDO0lBQzlFLENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TW9tZW50fSBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHtSZWZlcmVudGlhbEFzT2JqZWN0T3B0aW9uc30gZnJvbSAnLi9yZWZlcmVudGlhbC5tb2RlbCc7XG5pbXBvcnQge0VudGl0eX0gZnJvbSAnLi9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHtEZXBhcnRtZW50fSBmcm9tICcuL2RlcGFydG1lbnQubW9kZWwnO1xuaW1wb3J0IHtmcm9tRGF0ZUlTT1N0cmluZywgdG9EYXRlSVNPU3RyaW5nfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZGF0ZXMnO1xuaW1wb3J0IHtFbnRpdHlDbGFzc30gZnJvbSAnLi9lbnRpdHkuZGVjb3JhdG9ycyc7XG5cblxuZXhwb3J0IHR5cGUgVXNlclByb2ZpbGVMYWJlbCA9ICdBRE1JTicgfCAnVVNFUicgfCAnU1VQRVJWSVNPUicgfCAnR1VFU1QnO1xuZXhwb3J0IGNvbnN0IFBSSU9SSVRJWkVEX0FVVEhPUklUSUVTOiBSZWFkb25seTxVc2VyUHJvZmlsZUxhYmVsW10+ID0gT2JqZWN0LmZyZWV6ZShbJ0FETUlOJywgJ1NVUEVSVklTT1InLCAnVVNFUicsICdHVUVTVCddKTtcblxuLy8gQGR5bmFtaWNcbkBFbnRpdHlDbGFzcyh7dHlwZW5hbWU6ICdQZXJzb25WTyd9KVxuZXhwb3J0IGNsYXNzIFBlcnNvbjxcbiAgVCBleHRlbmRzIFBlcnNvbjxhbnk+ID0gUGVyc29uPGFueT5cbiAgPiBleHRlbmRzIEVudGl0eTxULCBudW1iZXIsIFJlZmVyZW50aWFsQXNPYmplY3RPcHRpb25zPiB7XG5cbiAgc3RhdGljIGZyb21PYmplY3Q6IChzb3VyY2U6IGFueSwgb3B0cz86IGFueSkgPT4gIFBlcnNvbjtcblxuICBmaXJzdE5hbWU6IHN0cmluZztcbiAgbGFzdE5hbWU6IHN0cmluZztcbiAgZW1haWw6IHN0cmluZztcbiAgcHVia2V5OiBzdHJpbmc7XG4gIGF2YXRhcjogc3RyaW5nO1xuICBjcmVhdGlvbkRhdGU6IERhdGUgfCBNb21lbnQ7XG4gIHN0YXR1c0lkOiBudW1iZXI7XG4gIGRlcGFydG1lbnQ6IERlcGFydG1lbnQgPSBudWxsO1xuICB1c2VybmFtZTogc3RyaW5nO1xuICB1c2VybmFtZUV4dHJhbmV0OiBzdHJpbmc7XG4gIHByb2ZpbGVzOiBzdHJpbmdbXTtcbiAgbWFpblByb2ZpbGU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihfX3R5cGVuYW1lPzogc3RyaW5nKSB7XG4gICAgc3VwZXIoX190eXBlbmFtZSB8fCBQZXJzb24uVFlQRU5BTUUpO1xuICB9XG5cbiAgYXNPYmplY3Qob3B0cz86IFJlZmVyZW50aWFsQXNPYmplY3RPcHRpb25zKTogYW55IHtcbiAgICBpZiAob3B0cyAmJiBvcHRzLm1pbmlmeSkgIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgICBfX3R5cGVuYW1lOiBvcHRzLmtlZXBUeXBlbmFtZSAmJiB0aGlzLl9fdHlwZW5hbWUgfHwgdW5kZWZpbmVkLFxuICAgICAgICBmaXJzdE5hbWU6IHRoaXMuZmlyc3ROYW1lLFxuICAgICAgICBsYXN0TmFtZTogdGhpcy5sYXN0TmFtZVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgdGFyZ2V0OiBhbnkgPSBzdXBlci5hc09iamVjdChvcHRzKTtcbiAgICB0YXJnZXQuZGVwYXJ0bWVudCA9IHRoaXMuZGVwYXJ0bWVudCAmJiB0aGlzLmRlcGFydG1lbnQuYXNPYmplY3Qob3B0cykgfHwgdW5kZWZpbmVkO1xuICAgIHRhcmdldC5wcm9maWxlcyA9IHRoaXMucHJvZmlsZXMgJiYgdGhpcy5wcm9maWxlcy5zbGljZSgwKSB8fCBbXTtcbiAgICAvLyBTZXQgcHJvZmlsZSBsaXN0IGZyb20gdGhlIG1haW4gcHJvZmlsZVxuICAgIHRhcmdldC5wcm9maWxlcyA9IHRoaXMubWFpblByb2ZpbGUgJiYgW3RoaXMubWFpblByb2ZpbGVdIHx8IHRhcmdldC5wcm9maWxlcztcbiAgICB0YXJnZXQuY3JlYXRpb25EYXRlID0gdG9EYXRlSVNPU3RyaW5nKHRoaXMuY3JlYXRpb25EYXRlKTtcblxuICAgIGlmICghb3B0cyB8fCBvcHRzLm1pbmlmeSAhPT0gdHJ1ZSkgdGFyZ2V0Lm1haW5Qcm9maWxlID0gUGVyc29uVXRpbHMuZ2V0TWFpblByb2ZpbGUodGFyZ2V0LnByb2ZpbGVzKTtcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgZnJvbU9iamVjdChzb3VyY2U6IGFueSkge1xuICAgIHN1cGVyLmZyb21PYmplY3Qoc291cmNlKTtcbiAgICB0aGlzLmZpcnN0TmFtZSA9IHNvdXJjZS5maXJzdE5hbWU7XG4gICAgdGhpcy5sYXN0TmFtZSA9IHNvdXJjZS5sYXN0TmFtZTtcbiAgICB0aGlzLmVtYWlsID0gc291cmNlLmVtYWlsO1xuICAgIHRoaXMuY3JlYXRpb25EYXRlID0gZnJvbURhdGVJU09TdHJpbmcoc291cmNlLmNyZWF0aW9uRGF0ZSk7XG4gICAgdGhpcy5wdWJrZXkgPSBzb3VyY2UucHVia2V5O1xuICAgIHRoaXMudXNlcm5hbWUgPSBzb3VyY2UudXNlcm5hbWU7XG4gICAgdGhpcy51c2VybmFtZUV4dHJhbmV0ID0gc291cmNlLnVzZXJuYW1lRXh0cmFuZXQ7XG4gICAgdGhpcy5hdmF0YXIgPSBzb3VyY2UuYXZhdGFyO1xuICAgIHRoaXMuc3RhdHVzSWQgPSBzb3VyY2Uuc3RhdHVzSWQ7XG4gICAgdGhpcy5kZXBhcnRtZW50ID0gc291cmNlLmRlcGFydG1lbnQgJiYgRGVwYXJ0bWVudC5mcm9tT2JqZWN0KHNvdXJjZS5kZXBhcnRtZW50KSB8fCB1bmRlZmluZWQ7XG4gICAgdGhpcy5wcm9maWxlcyA9IHNvdXJjZS5wcm9maWxlcyAmJiBzb3VyY2UucHJvZmlsZXMuc2xpY2UoMCkgfHwgW107XG4gICAgLy8gQWRkIG1haW4gcHJvZmlsZSB0byB0aGUgbGlzdCwgaWYgbmVlZFxuICAgIGlmIChzb3VyY2UubWFpblByb2ZpbGUgJiYgIXRoaXMucHJvZmlsZXMuZmluZChwID0+IHAgPT09IHNvdXJjZS5tYWluUHJvZmlsZSkpIHtcbiAgICAgIHRoaXMucHJvZmlsZXMgPSB0aGlzLnByb2ZpbGVzLmNvbmNhdChzb3VyY2UubWFpblByb2ZpbGUpO1xuICAgIH1cbiAgICB0aGlzLm1haW5Qcm9maWxlID0gUGVyc29uVXRpbHMuZ2V0TWFpblByb2ZpbGUodGhpcy5wcm9maWxlcyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBlcnNvblV0aWxzIHtcbiAgc3RhdGljIGdldE1haW5Qcm9maWxlKHByb2ZpbGVzPzogc3RyaW5nW10pOiBVc2VyUHJvZmlsZUxhYmVsIHtcbiAgICBpZiAoIXByb2ZpbGVzICYmICFwcm9maWxlcy5sZW5ndGgpIHJldHVybiAnR1VFU1QnO1xuICAgIHJldHVybiBQUklPUklUSVpFRF9BVVRIT1JJVElFUy5maW5kKGxhYmVsID0+IHByb2ZpbGVzLmluY2x1ZGVzKGxhYmVsKSkgfHwgJ0dVRVNUJztcbiAgfVxuXG4gIHN0YXRpYyBnZXRNYWluUHJvZmlsZUluZGV4KHByb2ZpbGVzPzogc3RyaW5nW10pOiBudW1iZXIge1xuICAgIGlmICghcHJvZmlsZXMgJiYgIXByb2ZpbGVzLmxlbmd0aCkgcmV0dXJuIFBSSU9SSVRJWkVEX0FVVEhPUklUSUVTLmxlbmd0aCAtIDE7IC8vIHJldHVybiBsYXN0IChsb3dlcikgcHJvZmlsZVxuICAgIGNvbnN0IGluZGV4ID0gUFJJT1JJVElaRURfQVVUSE9SSVRJRVMuZmluZEluZGV4KGxhYmVsID0+IHByb2ZpbGVzLmluY2x1ZGVzKGxhYmVsKSk7XG4gICAgcmV0dXJuIChpbmRleCAhPT0gLTEpID8gaW5kZXggOiAoUFJJT1JJVElaRURfQVVUSE9SSVRJRVMubGVuZ3RoIC0gMSk7XG4gIH1cblxuICBzdGF0aWMgaGFzVXBwZXJPckVxdWFsc1Byb2ZpbGUoYWN0dWFsUHJvZmlsZXM6IHN0cmluZ1tdLCBleHBlY3RlZFByb2ZpbGU6IFVzZXJQcm9maWxlTGFiZWwpOiBib29sZWFuIHtcbiAgICBjb25zdCBleHBlY3RlZFByb2ZpbGVJbmRleCA9IFBSSU9SSVRJWkVEX0FVVEhPUklUSUVTLmluZGV4T2YoZXhwZWN0ZWRQcm9maWxlKTtcbiAgICByZXR1cm4gZXhwZWN0ZWRQcm9maWxlSW5kZXggIT09IC0xICYmIFBlcnNvblV0aWxzLmdldE1haW5Qcm9maWxlSW5kZXgoYWN0dWFsUHJvZmlsZXMpIDw9IGV4cGVjdGVkUHJvZmlsZUluZGV4O1xuICB9XG5cbiAgc3RhdGljIHBlcnNvblRvU3RyaW5nKG9iajogUGVyc29uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gb2JqICYmIG9iai5pZCAmJiAob2JqLmxhc3ROYW1lICsgJyAnICsgb2JqLmZpcnN0TmFtZSkgfHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgc3RhdGljIHBlcnNvbnNUb1N0cmluZyhkYXRhOiBQZXJzb25bXSwgc2VwYXJhdG9yPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKGRhdGEgfHwgW10pLm1hcChQZXJzb25VdGlscy5wZXJzb25Ub1N0cmluZykuam9pbihzZXBhcmF0b3IgfHwgJywgJyk7XG4gIH1cblxufVxuXG5cblxuXG5cblxuXG4iXX0=
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc29uLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL21vZGVsL3BlcnNvbi5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDOUMsT0FBTyxFQUFDLGlCQUFpQixFQUFFLGVBQWUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ3pFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFJdkQsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQWlDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBRTdILFdBQVc7SUFFRSxNQUFNLG9CQUFOLE1BRVQsU0FBUSxNQUE2QztJQWlCdkQsWUFBWSxVQUFtQjtRQUM3QixLQUFLLENBQUMsVUFBVSxJQUFJLFFBQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQVB2QyxlQUFVLEdBQWUsSUFBSSxDQUFDO0lBUTlCLENBQUM7SUFFRCxRQUFRLENBQUMsSUFBaUM7UUFDeEMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRztZQUN4QixPQUFPO2dCQUNMLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtnQkFDWCxVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLFNBQVM7Z0JBQzdELFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztnQkFDekIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2FBQ3hCLENBQUM7U0FDSDtRQUNELE1BQU0sTUFB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QUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQztJQUM5RSxDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge01vbWVudH0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7UmVmZXJlbnRpYWxBc09iamVjdE9wdGlvbnN9IGZyb20gJy4vcmVmZXJlbnRpYWwubW9kZWwnO1xuaW1wb3J0IHtFbnRpdHl9IGZyb20gJy4vZW50aXR5Lm1vZGVsJztcbmltcG9ydCB7RGVwYXJ0bWVudH0gZnJvbSAnLi9kZXBhcnRtZW50Lm1vZGVsJztcbmltcG9ydCB7ZnJvbURhdGVJU09TdHJpbmcsIHRvRGF0ZUlTT1N0cmluZ30gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2RhdGVzJztcbmltcG9ydCB7RW50aXR5Q2xhc3N9IGZyb20gJy4vZW50aXR5LmRlY29yYXRvcnMnO1xuaW1wb3J0IHtpc0VtcHR5QXJyYXl9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuXG5cbmV4cG9ydCB0eXBlIFVzZXJQcm9maWxlTGFiZWwgPSAnQURNSU4nIHwgJ1VTRVInIHwgJ1NVUEVSVklTT1InIHwgJ0dVRVNUJztcbmV4cG9ydCBjb25zdCBQUklPUklUSVpFRF9BVVRIT1JJVElFUzogUmVhZG9ubHk8VXNlclByb2ZpbGVMYWJlbFtdPiA9IE9iamVjdC5mcmVlemUoWydBRE1JTicsICdTVVBFUlZJU09SJywgJ1VTRVInLCAnR1VFU1QnXSk7XG5cbi8vIEBkeW5hbWljXG5ARW50aXR5Q2xhc3Moe3R5cGVuYW1lOiAnUGVyc29uVk8nfSlcbmV4cG9ydCBjbGFzcyBQZXJzb248XG4gIFQgZXh0ZW5kcyBQZXJzb248YW55PiA9IFBlcnNvbjxhbnk+XG4gID4gZXh0ZW5kcyBFbnRpdHk8VCwgbnVtYmVyLCBSZWZlcmVudGlhbEFzT2JqZWN0T3B0aW9ucz4ge1xuXG4gIHN0YXRpYyBmcm9tT2JqZWN0OiAoc291cmNlOiBhbnksIG9wdHM/OiBhbnkpID0+ICBQZXJzb247XG5cbiAgZmlyc3ROYW1lOiBzdHJpbmc7XG4gIGxhc3ROYW1lOiBzdHJpbmc7XG4gIGVtYWlsOiBzdHJpbmc7XG4gIHB1YmtleTogc3RyaW5nO1xuICBhdmF0YXI6IHN0cmluZztcbiAgY3JlYXRpb25EYXRlOiBEYXRlIHwgTW9tZW50O1xuICBzdGF0dXNJZDogbnVtYmVyO1xuICBkZXBhcnRtZW50OiBEZXBhcnRtZW50ID0gbnVsbDtcbiAgdXNlcm5hbWU6IHN0cmluZztcbiAgdXNlcm5hbWVFeHRyYW5ldDogc3RyaW5nO1xuICBwcm9maWxlczogc3RyaW5nW107XG4gIG1haW5Qcm9maWxlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoX190eXBlbmFtZT86IHN0cmluZykge1xuICAgIHN1cGVyKF9fdHlwZW5hbWUgfHwgUGVyc29uLlRZUEVOQU1FKTtcbiAgfVxuXG4gIGFzT2JqZWN0KG9wdHM/OiBSZWZlcmVudGlhbEFzT2JqZWN0T3B0aW9ucyk6IGFueSB7XG4gICAgaWYgKG9wdHMgJiYgb3B0cy5taW5pZnkpICB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogdGhpcy5pZCxcbiAgICAgICAgX190eXBlbmFtZTogb3B0cy5rZWVwVHlwZW5hbWUgJiYgdGhpcy5fX3R5cGVuYW1lIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgZmlyc3ROYW1lOiB0aGlzLmZpcnN0TmFtZSxcbiAgICAgICAgbGFzdE5hbWU6IHRoaXMubGFzdE5hbWVcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHRhcmdldDogYW55ID0gc3VwZXIuYXNPYmplY3Qob3B0cyk7XG4gICAgdGFyZ2V0LmRlcGFydG1lbnQgPSB0aGlzLmRlcGFydG1lbnQgJiYgdGhpcy5kZXBhcnRtZW50LmFzT2JqZWN0KG9wdHMpIHx8IHVuZGVmaW5lZDtcbiAgICB0YXJnZXQucHJvZmlsZXMgPSB0aGlzLnByb2ZpbGVzICYmIHRoaXMucHJvZmlsZXMuc2xpY2UoMCkgfHwgW107XG4gICAgLy8gU2V0IHByb2ZpbGUgbGlzdCBmcm9tIHRoZSBtYWluIHByb2ZpbGVcbiAgICB0YXJnZXQucHJvZmlsZXMgPSB0aGlzLm1haW5Qcm9maWxlICYmIFt0aGlzLm1haW5Qcm9maWxlXSB8fCB0YXJnZXQucHJvZmlsZXM7XG4gICAgdGFyZ2V0LmNyZWF0aW9uRGF0ZSA9IHRvRGF0ZUlTT1N0cmluZyh0aGlzLmNyZWF0aW9uRGF0ZSk7XG5cbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5taW5pZnkgIT09IHRydWUpIHRhcmdldC5tYWluUHJvZmlsZSA9IFBlcnNvblV0aWxzLmdldE1haW5Qcm9maWxlKHRhcmdldC5wcm9maWxlcyk7XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuXG4gIGZyb21PYmplY3Qoc291cmNlOiBhbnkpIHtcbiAgICBzdXBlci5mcm9tT2JqZWN0KHNvdXJjZSk7XG4gICAgdGhpcy5maXJzdE5hbWUgPSBzb3VyY2UuZmlyc3ROYW1lO1xuICAgIHRoaXMubGFzdE5hbWUgPSBzb3VyY2UubGFzdE5hbWU7XG4gICAgdGhpcy5lbWFpbCA9IHNvdXJjZS5lbWFpbDtcbiAgICB0aGlzLmNyZWF0aW9uRGF0ZSA9IGZyb21EYXRlSVNPU3RyaW5nKHNvdXJjZS5jcmVhdGlvbkRhdGUpO1xuICAgIHRoaXMucHVia2V5ID0gc291cmNlLnB1YmtleTtcbiAgICB0aGlzLnVzZXJuYW1lID0gc291cmNlLnVzZXJuYW1lO1xuICAgIHRoaXMudXNlcm5hbWVFeHRyYW5ldCA9IHNvdXJjZS51c2VybmFtZUV4dHJhbmV0O1xuICAgIHRoaXMuYXZhdGFyID0gc291cmNlLmF2YXRhcjtcbiAgICB0aGlzLnN0YXR1c0lkID0gc291cmNlLnN0YXR1c0lkO1xuICAgIHRoaXMuZGVwYXJ0bWVudCA9IHNvdXJjZS5kZXBhcnRtZW50ICYmIERlcGFydG1lbnQuZnJvbU9iamVjdChzb3VyY2UuZGVwYXJ0bWVudCkgfHwgdW5kZWZpbmVkO1xuICAgIHRoaXMucHJvZmlsZXMgPSBzb3VyY2UucHJvZmlsZXMgJiYgc291cmNlLnByb2ZpbGVzLnNsaWNlKDApIHx8IFtdO1xuICAgIC8vIEFkZCBtYWluIHByb2ZpbGUgdG8gdGhlIGxpc3QsIGlmIG5lZWRcbiAgICBpZiAoc291cmNlLm1haW5Qcm9maWxlICYmICF0aGlzLnByb2ZpbGVzLmZpbmQocCA9PiBwID09PSBzb3VyY2UubWFpblByb2ZpbGUpKSB7XG4gICAgICB0aGlzLnByb2ZpbGVzID0gdGhpcy5wcm9maWxlcy5jb25jYXQoc291cmNlLm1haW5Qcm9maWxlKTtcbiAgICB9XG4gICAgdGhpcy5tYWluUHJvZmlsZSA9IFBlcnNvblV0aWxzLmdldE1haW5Qcm9maWxlKHRoaXMucHJvZmlsZXMpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQZXJzb25VdGlscyB7XG4gIHN0YXRpYyBnZXRNYWluUHJvZmlsZShwcm9maWxlcz86IHN0cmluZ1tdKTogVXNlclByb2ZpbGVMYWJlbCB7XG4gICAgaWYgKGlzRW1wdHlBcnJheShwcm9maWxlcykpIHJldHVybiAnR1VFU1QnO1xuICAgIHJldHVybiBQUklPUklUSVpFRF9BVVRIT1JJVElFUy5maW5kKGxhYmVsID0+IHByb2ZpbGVzLmluY2x1ZGVzKGxhYmVsKSkgfHwgJ0dVRVNUJztcbiAgfVxuXG4gIHN0YXRpYyBnZXRNYWluUHJvZmlsZUluZGV4KHByb2ZpbGVzPzogc3RyaW5nW10pOiBudW1iZXIge1xuICAgIGlmIChpc0VtcHR5QXJyYXkocHJvZmlsZXMpKSByZXR1cm4gUFJJT1JJVElaRURfQVVUSE9SSVRJRVMubGVuZ3RoIC0gMTsgLy8gcmV0dXJuIGxhc3QgKGxvd2VyKSBwcm9maWxlXG4gICAgY29uc3QgaW5kZXggPSBQUklPUklUSVpFRF9BVVRIT1JJVElFUy5maW5kSW5kZXgobGFiZWwgPT4gcHJvZmlsZXMuaW5jbHVkZXMobGFiZWwpKTtcbiAgICByZXR1cm4gKGluZGV4ICE9PSAtMSkgPyBpbmRleCA6IChQUklPUklUSVpFRF9BVVRIT1JJVElFUy5sZW5ndGggLSAxKTtcbiAgfVxuXG4gIHN0YXRpYyBoYXNVcHBlck9yRXF1YWxzUHJvZmlsZShhY3R1YWxQcm9maWxlczogc3RyaW5nW10sIGV4cGVjdGVkUHJvZmlsZTogVXNlclByb2ZpbGVMYWJlbCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGV4cGVjdGVkUHJvZmlsZUluZGV4ID0gUFJJT1JJVElaRURfQVVUSE9SSVRJRVMuaW5kZXhPZihleHBlY3RlZFByb2ZpbGUpO1xuICAgIHJldHVybiBleHBlY3RlZFByb2ZpbGVJbmRleCAhPT0gLTEgJiYgUGVyc29uVXRpbHMuZ2V0TWFpblByb2ZpbGVJbmRleChhY3R1YWxQcm9maWxlcykgPD0gZXhwZWN0ZWRQcm9maWxlSW5kZXg7XG4gIH1cblxuICBzdGF0aWMgcGVyc29uVG9TdHJpbmcob2JqOiBQZXJzb24pOiBzdHJpbmcge1xuICAgIHJldHVybiBvYmogJiYgb2JqLmlkICYmIChvYmoubGFzdE5hbWUgKyAnICcgKyBvYmouZmlyc3ROYW1lKSB8fCB1bmRlZmluZWQ7XG4gIH1cblxuICBzdGF0aWMgcGVyc29uc1RvU3RyaW5nKGRhdGE6IFBlcnNvbltdLCBzZXBhcmF0b3I/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAoZGF0YSB8fCBbXSkubWFwKFBlcnNvblV0aWxzLnBlcnNvblRvU3RyaW5nKS5qb2luKHNlcGFyYXRvciB8fCAnLCAnKTtcbiAgfVxuXG59XG5cblxuXG5cblxuXG5cbiJdfQ==
|