@sumaris-net/ngx-components 0.25.1 → 0.25.2
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 +150 -77
- package/bundles/sumaris-net.ngx-components.umd.js.map +1 -1
- package/bundles/sumaris-net.ngx-components.umd.min.js +1 -1
- package/bundles/sumaris-net.ngx-components.umd.min.js.map +1 -1
- package/esm2015/src/app/core/graphql/graphql.service.js +10 -11
- package/esm2015/src/app/core/install/install-upgrade-card.component.js +86 -39
- package/esm2015/src/app/core/services/network.service.js +2 -2
- package/esm2015/src/app/core/services/platform.service.js +8 -6
- package/esm2015/src/app/shared/services/startable-service.class.js +4 -1
- package/fesm2015/sumaris-net.ngx-components.js +100 -51
- 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 +10 -5
- package/src/app/shared/services/startable-service.class.d.ts +1 -0
- package/src/assets/i18n/fr.json +2 -0
- package/sumaris-net.ngx-components.metadata.json +1 -1
|
@@ -92,7 +92,7 @@ export class PlatformService {
|
|
|
92
92
|
return this._android && this._cordova;
|
|
93
93
|
}
|
|
94
94
|
get canDownload() {
|
|
95
|
-
return !!this.downloader;
|
|
95
|
+
return this._android && !!this.downloader;
|
|
96
96
|
}
|
|
97
97
|
width() {
|
|
98
98
|
return this.platform.width();
|
|
@@ -135,7 +135,7 @@ export class PlatformService {
|
|
|
135
135
|
.then(() => {
|
|
136
136
|
this._started = true;
|
|
137
137
|
this._startPromise = undefined;
|
|
138
|
-
console.info(`[platform] Starting platform [OK] {mobile: ${this._mobile}, touchUi: ${this.touchUi},
|
|
138
|
+
console.info(`[platform] Starting platform [OK] {mobile: ${this._mobile}, touchUi: ${this.touchUi}, canDownload: ${this.canDownload}} in ${Date.now() - now}ms`);
|
|
139
139
|
// Update cache configuration when network changed
|
|
140
140
|
this.networkService.onNetworkStatusChanges.subscribe((type) => this.configureCache(type !== 'none'));
|
|
141
141
|
// Update authentication type
|
|
@@ -186,20 +186,22 @@ export class PlatformService {
|
|
|
186
186
|
return __awaiter(this, void 0, void 0, function* () {
|
|
187
187
|
if (!request || !request.uri)
|
|
188
188
|
throw new Error('Missing argument \'request\' or \'request.uri\'');
|
|
189
|
-
if (this.downloader) {
|
|
190
|
-
request = Object.assign(
|
|
189
|
+
if (this._android && this.downloader) {
|
|
190
|
+
request = Object.assign({ visibleInDownloadsUi: true, notificationVisibility: NotificationVisibility.VisibleNotifyCompleted }, request);
|
|
191
191
|
try {
|
|
192
|
+
console.debug('[platform] Downloading, using request: ' + JSON.stringify(request));
|
|
192
193
|
const location = yield this.downloader.download(request);
|
|
193
194
|
console.info('[platform] File successfully downloaded at:' + location);
|
|
194
195
|
return location;
|
|
195
196
|
}
|
|
196
197
|
catch (err) {
|
|
197
|
-
console.error('[platform]
|
|
198
|
+
console.error('[platform] Unable to download: ' + (err && err.message || err));
|
|
198
199
|
throw err;
|
|
199
200
|
}
|
|
200
201
|
}
|
|
201
202
|
// Fallback (no Cordova)
|
|
202
203
|
// Web mode: open URI using the browser
|
|
204
|
+
// TODO: find a way to download under iOS (see https://www.c-sharpcorner.com/article/how-to-download-a-file-using-file-transfer-plugin-in-ionic-3/)
|
|
203
205
|
else {
|
|
204
206
|
console.warn('[platform] Cannot use Cordova downloader: using browser open()');
|
|
205
207
|
this.open(request.uri, '_system', 'location=no', true);
|
|
@@ -412,4 +414,4 @@ PlatformService.ctorParameters = () => [
|
|
|
412
414
|
{ type: InAppBrowser, decorators: [{ type: Optional }] },
|
|
413
415
|
{ type: Downloader, decorators: [{ type: Optional }] }
|
|
414
416
|
];
|
|
415
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm0uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9wbGF0Zm9ybS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFDLFFBQVEsRUFBRSxlQUFlLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RCxPQUFPLEVBQWdCLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRWhFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDdkQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ3BELE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQzlELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDekMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxRQUFRLElBQUksV0FBVyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFOUQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQzlELE9BQU8sRUFBQyxZQUFZLEVBQUUsS0FBSyxFQUFtQixRQUFRLEVBQUUsZUFBZSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDdkcsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUNuRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFDakUsT0FBTyxFQUFtQixNQUFNLEVBQUMsTUFB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T0FBTyxDQUFDLENBQUM7YUFDN0Q7UUFDSCxDQUFDO0tBQUE7Ozs7WUExWkYsVUFBVSxTQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQzs7O1lBOUJ4QixRQUFRO1lBU0ksV0FBVztZQVRiLGVBQWU7WUFpQnpCLGdCQUFnQjtZQVFoQixpQkFBaUI7WUFYakIsZUFBZTtZQVJmLG9CQUFvQjtZQUxMLGNBQWM7WUFrQjdCLGNBQWM7WUFJZCxhQUFhO1lBaEJiLFlBQVk7WUFNWixPQUFPO1lBTFAsYUFBYTs0Q0F3RGhCLE1BQU0sU0FBQyxXQUFXO1lBNURmLFNBQVMsdUJBNkRaLFFBQVE7WUE1REwsUUFBUSx1QkE2RFgsUUFBUTtZQS9ETCxZQUFZLHVCQWdFZixRQUFRO1lBeERMLFlBQVksdUJBeURmLFFBQVE7WUExQ0wsVUFBVSx1QkEyQ2IsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1BsYXRmb3JtLCBUb2FzdENvbnRyb2xsZXJ9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7QXV0aFRva2VuVHlwZSwgTmV0d29ya1NlcnZpY2V9IGZyb20gJy4vbmV0d29yay5zZXJ2aWNlJztcbmltcG9ydCB7UGxhdGZvcm1zfSBmcm9tICdAaW9uaWMvY29yZSc7XG5pbXBvcnQge1NwbGFzaFNjcmVlbn0gZnJvbSAnQGlvbmljLW5hdGl2ZS9zcGxhc2gtc2NyZWVuL25neCc7XG5pbXBvcnQge1N0YXR1c0Jhcn0gZnJvbSAnQGlvbmljLW5hdGl2ZS9zdGF0dXMtYmFyL25neCc7XG5pbXBvcnQge0tleWJvYXJkfSBmcm9tICdAaW9uaWMtbmF0aXZlL2tleWJvYXJkL25neCc7XG5pbXBvcnQge0xvY2FsU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuL2xvY2FsLXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHtDYWNoZVNlcnZpY2V9IGZyb20gJ2lvbmljLWNhY2hlJztcbmltcG9ydCB7QXVkaW9Qcm92aWRlcn0gZnJvbSAnLi4vLi4vc2hhcmVkL2F1ZGlvL2F1ZGlvJztcbmltcG9ydCB7UGxhdGZvcm0gYXMgQ2RrUGxhdGZvcm19IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSc7XG5cbmltcG9ydCB7SW5BcHBCcm93c2VyfSBmcm9tICdAaW9uaWMtbmF0aXZlL2luLWFwcC1icm93c2VyL25neCc7XG5pbXBvcnQge2lzRW1wdHlBcnJheSwgaXNOaWwsIGlzTm90RW1wdHlBcnJheSwgaXNOb3ROaWwsIGlzTm90TmlsT3JCbGFua30gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQge1N0b3JhZ2V9IGZyb20gJ0Bpb25pYy9zdG9yYWdlJztcbmltcG9ydCB7RW50aXRpZXNTdG9yYWdlfSBmcm9tICcuL3N0b3JhZ2UvZW50aXRpZXMtc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7U3RvcmFnZVV0aWxzfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvc3RvcmFnZS51dGlscyc7XG5pbXBvcnQge1Nob3dUb2FzdE9wdGlvbnMsIFRvYXN0c30gZnJvbSAnLi4vLi4vc2hhcmVkL3RvYXN0cyc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0ICogYXMgbW9tZW50SW1wb3J0ZWQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7QWNjb3VudFNlcnZpY2V9IGZyb20gJy4vYWNjb3VudC5zZXJ2aWNlJztcbmltcG9ydCB7dGltZXJ9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBmaXJzdCwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0VOVklST05NRU5UfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHtDb25maWdTZXJ2aWNlfSBmcm9tICcuL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7Q09SRV9DT05GSUdfT1BUSU9OU30gZnJvbSAnLi9jb25maWcvY29yZS5jb25maWcnO1xuaW1wb3J0IHtNb21lbnREYXRlQWRhcHRlcn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwtbW9tZW50LWFkYXB0ZXInO1xuaW1wb3J0IHtEb3dubG9hZGVyLCBEb3dubG9hZFJlcXVlc3QsIE5vdGlmaWNhdGlvblZpc2liaWxpdHl9IGZyb20gJ0Bpb25pYy1uYXRpdmUvZG93bmxvYWRlci9uZ3gnO1xuXG5jb25zdCBtb21lbnQgPSBtb21lbnRJbXBvcnRlZDtcblxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgUGxhdGZvcm1TZXJ2aWNlIHtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kZWJ1ZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfc3RhcnRlZCA9IGZhbHNlO1xuICBwcml2YXRlIF9zdGFydFByb21pc2U6IFByb21pc2U8dm9pZD47XG4gIHByaXZhdGUgX21vYmlsZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfY29yZG92YTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfYW5kcm9pZDogYm9vbGVhbjtcblxuICB0b3VjaFVpOiBib29sZWFuO1xuXG4gIGdldCBzdGFydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zdGFydGVkO1xuICB9XG5cbiAgZ2V0IG1vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNOb3ROaWwodGhpcy5fbW9iaWxlKSA/IHRoaXMuX21vYmlsZSA6IHRoaXMucGxhdGZvcm0uaXMoJ21vYmlsZScpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBwbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgcHJpdmF0ZSBjZGtQbGF0Zm9ybTogQ2RrUGxhdGZvcm0sXG4gICAgcHJpdmF0ZSB0b2FzdENvbnRyb2xsZXI6IFRvYXN0Q29udHJvbGxlcixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGVBZGFwdGVyOiBNb21lbnREYXRlQWRhcHRlcixcbiAgICBwcml2YXRlIGVudGl0aWVzU3RvcmFnZTogRW50aXRpZXNTdG9yYWdlLFxuICAgIHByaXZhdGUgc2V0dGluZ3M6IExvY2FsU2V0dGluZ3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgbmV0d29ya1NlcnZpY2U6IE5ldHdvcmtTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWNjb3VudFNlcnZpY2U6IEFjY291bnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIGNhY2hlOiBDYWNoZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yYWdlOiBTdG9yYWdlLFxuICAgIHByaXZhdGUgYXVkaW9Qcm92aWRlcjogQXVkaW9Qcm92aWRlcixcbiAgICBASW5qZWN0KEVOVklST05NRU5UKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBzdGF0dXNCYXI6IFN0YXR1c0JhcixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGtleWJvYXJkOiBLZXlib2FyZCxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHNwbGFzaFNjcmVlbjogU3BsYXNoU2NyZWVuLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgYnJvd3NlcjogSW5BcHBCcm93c2VyLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZG93bmxvYWRlcjogRG93bmxvYWRlcixcbiAgKSB7XG5cbiAgICB0aGlzLl9kZWJ1ZyA9ICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3BsYXRmb3JtXSBDcmVhdGluZyBzZXJ2aWNlJyk7XG5cbiAgICB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBpcyhwbGF0Zm9ybU5hbWU6IFBsYXRmb3Jtcyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBsYXRmb3JtLmlzKHBsYXRmb3JtTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogU2F5IGlmIG9wZW5lZCBoYXMgYmVlbiBvcGVuZWQgZnJvbSBhIHdlYiBicm93c2VyIChhbmQgTk9UIGluc2lkZSBhbiBBbmRyb2lkIG9yIGlPcyBBcHApLlxuICAgKiBUaGlzIGlzIHVzZWQgdG8ga25vd24gaWYgdGhlcmUgaXMgY29yZG92YSBmZWF0dXJlc1xuICAgKi9cbiAgaXNXZWJPckRlc2t0b3AoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLnBsYXRmb3JtLmlzKCdtb2JpbGUnKSB8fCB0aGlzLnBsYXRmb3JtLmlzKCdtb2JpbGV3ZWInKTtcbiAgfVxuXG4gIGlzQW5kcm9pZENvcmRvdmEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2FuZHJvaWQgJiYgdGhpcy5fY29yZG92YTtcbiAgfVxuXG4gIGdldCBjYW5Eb3dubG9hZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmRvd25sb2FkZXI7XG4gIH1cblxuICB3aWR0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBsYXRmb3JtLndpZHRoKCk7XG4gIH1cblxuICBoZWlnaHQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wbGF0Zm9ybS5oZWlnaHQoKTtcbiAgfVxuXG4gIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9zdGFydFByb21pc2UpIHJldHVybiB0aGlzLl9zdGFydFByb21pc2U7XG4gICAgaWYgKHRoaXMuX3N0YXJ0ZWQpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblxuICAgIHRoaXMuX3N0YXJ0ZWQgPSBmYWxzZTtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuYWNjb3VudFNlcnZpY2UudG9rZW5UeXBlID0gdW5kZWZpbmVkO1xuICAgIGNvbnNvbGUuaW5mbygnW3BsYXRmb3JtXSBTdGFydGluZyBwbGF0Zm9ybS4uLicpO1xuXG4gICAgdGhpcy5fc3RhcnRQcm9taXNlID0gdGhpcy5wbGF0Zm9ybS5yZWFkeSgpXG4gICAgICAudGhlbigoKSA9PiB7XG5cbiAgICAgICAgdGhpcy5fbW9iaWxlID0gdGhpcy5wbGF0Zm9ybS5pcygnbW9iaWxlJyk7XG4gICAgICAgIHRoaXMuX2NvcmRvdmEgPSB0aGlzLnBsYXRmb3JtLmlzKCdjb3Jkb3ZhJyk7XG4gICAgICAgIHRoaXMuX2FuZHJvaWQgPSB0aGlzLnBsYXRmb3JtLmlzKCdhbmRyb2lkJyk7XG5cbiAgICAgICAgdGhpcy5jb25maWd1cmVDb3Jkb3ZhUGx1Z2lucyh0aGlzLl9tb2JpbGUpO1xuICAgICAgICB0aGlzLnRvdWNoVWkgPSB0aGlzLl9tb2JpbGUgfHwgdGhpcy5wbGF0Zm9ybS5pcygndGFibGV0JykgfHwgdGhpcy5wbGF0Zm9ybS5pcygncGhhYmxldCcpO1xuXG4gICAgICAgIC8vIEZvcmNlIG1vYmlsZSBpbiBzZXR0aW5nc1xuICAgICAgICBpZiAodGhpcy5fbW9iaWxlKSB7XG4gICAgICAgICAgdGhpcy5zZXR0aW5ncy5tb2JpbGUgPSB0aGlzLl9tb2JpbGU7XG4gICAgICAgICAgdGhpcy5zZXR0aW5ncy50b3VjaFVpID0gdGhpcy50b3VjaFVpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWd1cmVUcmFuc2xhdGUoKTtcbiAgICB9KVxuICAgIC50aGVuKCgpID0+IHRoaXMuc3RvcmFnZVJlYWR5KCkpXG4gICAgLnRoZW4oKGZvcmFnZSkgPT4gdGhpcy5taWdyYXRlU3RvcmFnZShmb3JhZ2UpKVxuICAgIC50aGVuKCgpID0+IFByb21pc2UuYWxsKFtcbiAgICAgIHRoaXMuZW50aXRpZXNTdG9yYWdlLnJlYWR5KCksXG4gICAgICB0aGlzLmNhY2hlLnJlYWR5KCkudGhlbigoKSA9PiB0aGlzLmNvbmZpZ3VyZUNhY2hlKCkpLFxuICAgICAgdGhpcy5zZXR0aW5ncy5yZWFkeSgpLFxuICAgICAgdGhpcy5uZXR3b3JrU2VydmljZS5yZWFkeSgpLFxuICAgICAgdGhpcy5hdWRpb1Byb3ZpZGVyLnJlYWR5KClcbiAgICBdKSlcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9zdGFydGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3N0YXJ0UHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICAgIGNvbnNvbGUuaW5mbyhgW3BsYXRmb3JtXSBTdGFydGluZyBwbGF0Zm9ybSBbT0tdIHttb2JpbGU6ICR7dGhpcy5fbW9iaWxlfSwgdG91Y2hVaTogJHt0aGlzLnRvdWNoVWl9LCBkb3dubG9hZGVyOiAke3RoaXMuY2FuRG93bmxvYWR9IGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2ApO1xuXG4gICAgICAvLyBVcGRhdGUgY2FjaGUgY29uZmlndXJhdGlvbiB3aGVuIG5ldHdvcmsgY2hhbmdlZFxuICAgICAgdGhpcy5uZXR3b3JrU2VydmljZS5vbk5ldHdvcmtTdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSgodHlwZSkgPT4gdGhpcy5jb25maWd1cmVDYWNoZSh0eXBlICE9PSAnbm9uZScpKTtcblxuICAgICAgLy8gVXBkYXRlIGF1dGhlbnRpY2F0aW9uIHR5cGVcbiAgICAgIHRoaXMuY29uZmlnU2VydmljZS5jb25maWdcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKGNvbmZpZyA9PiBjb25maWc/LmdldFByb3BlcnR5KENPUkVfQ09ORklHX09QVElPTlMuQVVUSF9UT0tFTl9UWVBFKSBhcyBBdXRoVG9rZW5UeXBlKSxcbiAgICAgICAgICBmaWx0ZXIoaXNOb3ROaWxPckJsYW5rKSxcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSh0b2tlblR5cGUgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuaW5mbyhgW3BsYXRmb3JtXSBVc2luZyBhdXRoIHRva2VuIHR5cGUgeyR7dG9rZW5UeXBlfX1gKTtcbiAgICAgICAgICB0aGlzLmFjY291bnRTZXJ2aWNlLnRva2VuVHlwZSA9IHRva2VuVHlwZTtcbiAgICAgICAgfSk7XG5cbiAgICAgIC8vIFdhaXQgMSBtb3JlIHNlY29uZHMsIGJlZm9yZSBoaWRpbmcgdGhlIHNwbGFzaCBzY3JlZW5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5zcGxhc2hTY3JlZW4pIHRoaXMuc3BsYXNoU2NyZWVuLmhpZGUoKTtcblxuICAgICAgICAvLyBQbGF5IHN0YXJ0dXAgc291bmRcbiAgICAgICAgdGhpcy5hdWRpb1Byb3ZpZGVyLnBsYXlTdGFydHVwU291bmQoKTtcbiAgICAgIH0sIDEwMDApO1xuICAgIH0pXG4gICAgICAvLyBNYW5hZ2UgZXJyb3JcbiAgICAgIC5jYXRjaChlcnIgPT4gdGhpcy5vblN0YXJ0dXBFcnJvcihlcnIpKTtcbiAgICByZXR1cm4gdGhpcy5fc3RhcnRQcm9taXNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFdhaXQgcGxhdGZvcm0gaXMgcmVhZHkuPGJyLz5cbiAgICogSW1wb3J0YW50OiB0aGlzIHdpbGwgTk9UIHN0YXJ0IHRoZSBwbGF0Zm9ybSwgaGFzIGl0IHNob3VsZCBiZSBzdGFydGVkIGJ5IHRoZSBBcHBDb21wb25lbnRcbiAgICpcbiAgICogQHBhcmFtIG9wdHNcbiAgICovXG4gIHJlYWR5KG9wdHM/OiB7XG4gICAgY2hlY2tQZXJpb2Q6IG51bWJlcjtcbiAgfSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgcGVyaW9kID0gb3B0cyAmJiBvcHRzLmNoZWNrUGVyaW9kIHx8IDMwMDtcbiAgICBpZiAodGhpcy5fc3RhcnRlZCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIHJldHVybiB0aW1lcihwZXJpb2QsIHBlcmlvZClcbiAgICAgIC5waXBlKFxuICAgICAgICAvLyBGb3IgREVCVUcgOlxuICAgICAgICAvL3RhcCgoKSA9PiB0aGlzLl9kZWJ1ZyAmJiBjb25zb2xlLmRlYnVnKFwiV2FpdGluZyBwbGF0Zm9ybSByZWFkeS4uLlwiKSksXG4gICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLl9zdGFydGVkKSxcbiAgICAgICAgZmlyc3QoKVxuICAgICAgKS50b1Byb21pc2UoKTtcbiAgfVxuXG4gIG9wZW4odXJsOiBzdHJpbmcsIHRhcmdldD86IHN0cmluZywgZmVhdHVyZXM/OiBzdHJpbmcsIHJlcGxhY2U/OiBib29sZWFuKSB7XG4gICAgY29uc29sZS5pbmZvKGBbcGxhdGZvcm1dIE9wZW5pbmcgbGluazogJHt1cmx9YCk7XG4gICAgaWYgKHRoaXMuYnJvd3NlciAmJiB0aGlzLl9tb2JpbGUpIHtcbiAgICAgIHRoaXMuYnJvd3Nlci5jcmVhdGUodXJsLCB0YXJnZXQsIGZlYXR1cmVzKS5zaG93KCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgd2luZG93Lm9wZW4odXJsLCB0YXJnZXQsIGZlYXR1cmVzLCByZXBsYWNlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkb3dubG9hZChyZXF1ZXN0OiB7dXJpOiBzdHJpbmc7IGZpbGVuYW1lPzogc3RyaW5nIH0gJiBQYXJ0aWFsPERvd25sb2FkUmVxdWVzdD4gKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIXJlcXVlc3QgfHwgIXJlcXVlc3QudXJpKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgYXJndW1lbnQgXFwncmVxdWVzdFxcJyBvciBcXCdyZXF1ZXN0LnVyaVxcJycpO1xuICAgIGlmICh0aGlzLmRvd25sb2FkZXIpIHtcbiAgICAgIHJlcXVlc3QgPSB7XG4gICAgICAgIHZpc2libGVJbkRvd25sb2Fkc1VpOiB0cnVlLFxuICAgICAgICBub3RpZmljYXRpb25WaXNpYmlsaXR5OiBOb3RpZmljYXRpb25WaXNpYmlsaXR5LlZpc2libGVOb3RpZnlDb21wbGV0ZWQsXG4gICAgICAgIHRpdGxlOiByZXF1ZXN0LmZpbGVuYW1lIHx8ICcnLFxuICAgICAgICAuLi5yZXF1ZXN0LFxuICAgICAgICBkZXN0aW5hdGlvbkluRXh0ZXJuYWxGaWxlc0Rpcjoge1xuICAgICAgICAgIGRpclR5cGU6ICdEb3dubG9hZHMnLFxuICAgICAgICAgIHN1YlBhdGg6IHJlcXVlc3QuZmlsZW5hbWUgfHwgcmVxdWVzdC50aXRsZSB8fCAnJyxcbiAgICAgICAgICAuLi5yZXF1ZXN0LmRlc3RpbmF0aW9uSW5FeHRlcm5hbEZpbGVzRGlyXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gYXdhaXQgdGhpcy5kb3dubG9hZGVyLmRvd25sb2FkKHJlcXVlc3QpO1xuICAgICAgICBjb25zb2xlLmluZm8oJ1twbGF0Zm9ybV0gRmlsZSBzdWNjZXNzZnVsbHkgZG93bmxvYWRlZCBhdDonICsgbG9jYXRpb24pXG4gICAgICAgIHJldHVybiBsb2NhdGlvbjtcbiAgICAgIH1cbiAgICAgIGNhdGNoKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdbcGxhdGZvcm1dIEVycm9yIHdoaWxlIGRvd25sb2FkaW5nOiAnICsgKGVyciAmJiBlcnIubWVzc2FnZSB8fCBlcnIpLCBlcnIpO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEZhbGxiYWNrIChubyBDb3Jkb3ZhKVxuICAgIC8vIFdlYiBtb2RlOiBvcGVuIFVSSSB1c2luZyB0aGUgYnJvd3NlclxuICAgIGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKCdbcGxhdGZvcm1dIENhbm5vdCB1c2UgQ29yZG92YSBkb3dubG9hZGVyOiB1c2luZyBicm93c2VyIG9wZW4oKScpO1xuICAgICAgdGhpcy5vcGVuKHJlcXVlc3QudXJpLCAnX3N5c3RlbScsICdsb2NhdGlvbj1ubycsIHRydWUpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgbWV0aG9kcyAtLSAqL1xuXG4gIHByb3RlY3RlZCBjb25maWd1cmVDb3Jkb3ZhUGx1Z2lucyhtb2JpbGU6IGJvb2xlYW4pIHtcbiAgICBjb25zb2xlLmluZm8oJ1twbGF0Zm9ybV0gQ29uZmlndXJpbmcgQ29yZG92YSBwbHVnaW5zLi4uJyk7XG5cbiAgICBpZiAodGhpcy5zdGF0dXNCYXIpIHtcbiAgICAgIHRoaXMuc3RhdHVzQmFyLnN0eWxlRGVmYXVsdCgpO1xuICAgICAgdGhpcy5zdGF0dXNCYXIub3ZlcmxheXNXZWJWaWV3KGZhbHNlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMua2V5Ym9hcmQpIHtcbiAgICAgIHRoaXMua2V5Ym9hcmQuaGlkZUZvcm1BY2Nlc3NvcnlCYXIodHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gRm9yY2UgdG8gdXNlIEluQXBwQnJvd3NlciBpbnN0ZWFkIG9mIGRlZmF1bHQgd2luZG93Lm9wZW4oKVxuICAgIGlmICh0aGlzLmJyb3dzZXIpIHtcbiAgICAgIC8vIEZJWE1FOiB0aGlzIGNyZWF0ZSBhIGluZmluaXRlIGxvb3AgKGUuZy4gd2hlbiBkb3dubG9hZGluZyBhbiBleHRyYWN0aW9uIGZpbGUpXG4gICAgICAvLyB3aW5kb3cub3BlbiA9ICh1cmw/OiBzdHJpbmcsIHRhcmdldD86IHN0cmluZywgZmVhdHVyZXM/OiBzdHJpbmcsIHJlcGxhY2U/OiBib29sZWFuKSA9PiB7XG4gICAgICAvLyAgIGNvbnNvbGUuZGVidWcoXCJbcGxhdGZvcm1dIENhbGwgdG8gd2luZG93Lm9wZW4oKSByZWRpcmVjdGVkIHRvIEluQXBwQnJvd3Nlci5vcGVuKClcIik7XG4gICAgICAvLyAgIHRoaXMuYnJvd3Nlci5jcmVhdGUodXJsLCB0YXJnZXQsIGZlYXR1cmVzKS5zaG93KCk7XG4gICAgICAvLyAgIHJldHVybiB3aW5kb3c7XG4gICAgICAvLyB9O1xuICAgIH1cbiAgfVxuXG5cbiAgcHJvdGVjdGVkIGNvbmZpZ3VyZVRyYW5zbGF0ZSgpIHtcbiAgICBjb25zb2xlLmluZm8oJ1twbGF0Zm9ybV0gQ29uZmlndXJpbmcgaTE4biAuLi4nKTtcblxuICAgIC8vIHRoaXMgbGFuZ3VhZ2Ugd2lsbCBiZSB1c2VkIGFzIGEgZmFsbGJhY2sgd2hlbiBhIHRyYW5zbGF0aW9uIGlzbid0IGZvdW5kIGluIHRoZSBjdXJyZW50IGxhbmd1YWdlXG4gICAgdGhpcy50cmFuc2xhdGUuc2V0RGVmYXVsdExhbmcodGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0TG9jYWxlKTtcblxuICAgIC8vIFdoZW4gbG9jYWxlIGNoYW5nZXMsIGFwcGx5IHRvIGRhdGUgYWRhcHRlclxuICAgIHRoaXMudHJhbnNsYXRlLm9uTGFuZ0NoYW5nZS5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LmxhbmcpIHtcblxuICAgICAgICAvLyBmb3JjZSAnZW4nIGFzICdlbl9HQidcbiAgICAgICAgaWYgKGV2ZW50LmxhbmcgPT09ICdlbicpIHtcbiAgICAgICAgICBldmVudC5sYW5nID0gJ2VuX0dCJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNvbmZpZyBtb21lbnQgbGliXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbW9tZW50LmxvY2FsZShldmVudC5sYW5nKTtcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKCdbcGxhdGZvcm1dIFVzZSBsb2NhbGUgeycgKyBldmVudC5sYW5nICsgJ30nKTtcbiAgICAgICAgfVxuICAgICAgICAgIC8vIElmIGVycm9yLCBmYWxsYmFjayB0byBlblxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgbW9tZW50LmxvY2FsZSgnZW4nKTtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1twbGF0Zm9ybV0gVW5rbm93biBsb2NhbCBmb3IgbW9tZW50IGxpYi4gVXNpbmcgZGVmYXVsdCBbZW5dJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb25maWcgZGF0ZSBhZGFwdGVyXG4gICAgICAgIHRoaXMuZGF0ZUFkYXB0ZXIuc2V0TG9jYWxlKG1vbWVudC5sb2NhbGUoKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnNldHRpbmdzLm9uQ2hhbmdlLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgIGlmIChkYXRhICYmIGRhdGEubG9jYWxlICYmIGRhdGEubG9jYWxlICE9PSB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZykge1xuICAgICAgICB0aGlzLnRyYW5zbGF0ZS51c2UoZGF0YS5sb2NhbGUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gVXNlIGFjY291bnQncyBsb2NhbGUsIHdoZW4gYWNjb3VudCBpbmhlcml0YW5jZSBlbmFibGVkIGluIHNldHRpbmdzXG4gICAgdGhpcy5hY2NvdW50U2VydmljZS5vbkxvZ2luLnN1YnNjcmliZShhY2NvdW50ID0+IHtcbiAgICAgIGlmICh0aGlzLnNldHRpbmdzLnNldHRpbmdzLmFjY291bnRJbmhlcml0YW5jZSkge1xuICAgICAgICBjb25zdCBhY2NvdW50TG9jYWxlID0gYWNjb3VudC5zZXR0aW5ncyAmJiBhY2NvdW50LnNldHRpbmdzLmxvY2FsZTtcbiAgICAgICAgaWYgKGFjY291bnRMb2NhbGUgJiYgYWNjb3VudExvY2FsZSAhPT0gdGhpcy5zZXR0aW5ncy5sb2NhbGUpIHtcbiAgICAgICAgICB0aGlzLnNldHRpbmdzLmFwcGx5KHtcbiAgICAgICAgICAgIGxvY2FsZTogYWNjb3VudExvY2FsZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29uZmlndXJlQ2FjaGUob25saW5lPzogYm9vbGVhbikge1xuICAgIG9ubGluZSA9IGlzTm90TmlsKG9ubGluZSkgPyBvbmxpbmUgOiB0aGlzLmNhY2hlLmlzT25saW5lKCk7XG4gICAgY29uc3QgY2FjaGVUVEwgPSBvbmxpbmUgPyAzNjAwIC8qIDFoICovIDogMzYwMCAqIDI0ICogMzA7IC8qIDEgbW9udGggKi9cbiAgICBjb25zb2xlLmluZm8oYFtwbGF0Zm9ybV0gQ29uZmlndXJpbmcgY2FjaGUgW09LXSB7b25saW5lOiAke29ubGluZX19LCB7dGltZVRvTGl2ZTogJHtjYWNoZVRUTCAvIDM2MDB9aH0sIHtvZmZsaW5lSW52YWxpZGF0ZTogZmFsc2V9YCk7XG4gICAgdGhpcy5jYWNoZS5zZXREZWZhdWx0VFRMKGNhY2hlVFRMKTtcbiAgICB0aGlzLmNhY2hlLnNldE9mZmxpbmVJbnZhbGlkYXRlKGZhbHNlKTsgLy8gRG8gbm90IGludmFsaWRhdGUgY2FjaGUgd2hlbiBvZmZsaW5lXG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgc3RvcmFnZVJlYWR5KCk6IFByb21pc2U8TG9jYWxGb3JhZ2U+IHtcblxuICAgIGNvbnNvbGUuaW5mbyhgW3BsYXRmb3JtXSBTdGFydGluZyBzdG9yYWdlLi4uYCk7XG4gICAgY29uc3QgZm9yYWdlID0gYXdhaXQgdGhpcy5zdG9yYWdlLnJlYWR5KCk7XG4gICAgY29uc3QgZHJpdmVyID0gZm9yYWdlLmRyaXZlcigpO1xuXG4gICAgaWYgKGlzTmlsKGRyaXZlcikpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1twbGF0Zm9ybV0gTk8gRFJJVkVSIERFRklORUQgSU4gU1RPUkFHRS4gTG9jYWwgc3RvcmFnZSBjYW5ub3QgYmUgdXNlZCAhJyk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZvcmFnZSk7XG4gICAgfVxuXG4gICAgY29uc29sZS5pbmZvKGBbcGxhdGZvcm1dIFN0YXJ0aW5nIHN0b3JhZ2UgW09LXSB7bmFtZTogJyR7Zm9yYWdlLmNvbmZpZygpLm5hbWV9JywgZHJpdmVyOiAnJHtmb3JhZ2UuZHJpdmVyKCl9Jywgc2l6ZTogJHtmb3JhZ2UuY29uZmlnKCkuc2l6ZX1gKTtcbiAgICBjb25zb2xlLmRlYnVnKGBbcGxhdGZvcm1dIFN0b3JhZ2Ugc3VwcG9ydHM6IHske2ZvcmFnZS5XRUJTUUx9OiAke2ZvcmFnZS5zdXBwb3J0cyhmb3JhZ2UuV0VCU1FMKX0sICR7Zm9yYWdlLklOREVYRUREQn06ICR7Zm9yYWdlLnN1cHBvcnRzKGZvcmFnZS5JTkRFWEVEREIpfSwgJHtmb3JhZ2UuTE9DQUxTVE9SQUdFfTogJHtmb3JhZ2Uuc3VwcG9ydHMoZm9yYWdlLkxPQ0FMU1RPUkFHRSl9fWApO1xuXG4gICAgcmV0dXJuIGZvcmFnZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBtaWdyYXRlU3RvcmFnZShmb3JhZ2U6IExvY2FsRm9yYWdlKSB7XG4gICAgY29uc3QgY2FuTWlncmF0ZSA9IGZvcmFnZSAmJlxuICAgICAgKChmb3JhZ2UuZHJpdmVyKCkgPT09ICdjb3Jkb3ZhU1FMaXRlRHJpdmVyJyAmJiAoZm9yYWdlLnN1cHBvcnRzKGZvcmFnZS5JTkRFWEVEREIpIHx8IGZvcmFnZS5zdXBwb3J0cyhmb3JhZ2UuV0VCU1FMKSkpIHx8XG4gICAgICAgKGZvcmFnZS5kcml2ZXIoKSA9PT0gZm9yYWdlLldFQlNRTCAmJiBmb3JhZ2Uuc3VwcG9ydHMoZm9yYWdlLklOREVYRUREQikpKTtcblxuICAgIGlmICghY2FuTWlncmF0ZSkgcmV0dXJuOyAvLyBTa2lwXG5cbiAgICBjb25zdCBvbGRGb3JhZ2UgPSBmb3JhZ2UuY3JlYXRlSW5zdGFuY2Uoe1xuICAgICAgbmFtZTogZm9yYWdlLmNvbmZpZygpLm5hbWUsXG4gICAgICBzdG9yZU5hbWU6IGZvcmFnZS5jb25maWcoKS5zdG9yZU5hbWUsXG4gICAgICBkcml2ZXI6IFtmb3JhZ2UuSU5ERVhFRERCLCBmb3JhZ2UuV0VCU1FMXVxuICAgIH0pO1xuXG4gICAgY29uc3Qga2V5cyA9IGF3YWl0IG9sZEZvcmFnZS5rZXlzKCk7XG5cbiAgICAvLyBObyBkYXRhIGluIHRoZSBvZGwgc3RvcmFnZTogc2tpcCBtaWdyYXRpb25cbiAgICBpZiAoaXNFbXB0eUFycmF5KGtleXMpKSB7XG4gICAgICAvLyBEcm9wIHRoZSBvbGQgaW5zdGFuY2UgKG5vdCBuZWVkIGFueW1vcmUpXG4gICAgICBjb25zb2xlLmRlYnVnKGBbcGxhdGZvcm1dIE9sZCBzdG9yYWdlIGlzIGVtcHR5OiBkcm9wcGluZyB1bnVzZWQgaW5zdGFuY2Uge25hbWU6ICcke2ZvcmFnZS5jb25maWcoKS5uYW1lfScsIGRyaXZlcjogJyR7b2xkRm9yYWdlLmRyaXZlcigpfSd9YCk7XG4gICAgICBhd2FpdCBvbGRGb3JhZ2UuZHJvcEluc3RhbmNlKCk7XG4gICAgfVxuICAgIC8vIElGIHNvbWUgZGF0YSBzdG9yZWQgaW4gdGhlIE9MRCBzdG9yYWdlOiBzdGFydCBtaWdyYXRpb25cbiAgICBlbHNlIHtcblxuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgIGNvbnNvbGUuaW5mbyhgW3BsYXRmb3JtXSBTdGFydGluZyBzdG9yYWdlIG1pZ3JhdGlvbi4uLmApO1xuXG4gICAgICBjb25zdCB0b2FzdCA9IGF3YWl0IHRoaXMuc2hvd1RvYXN0KHttZXNzYWdlOiAnSU5GTy5EQVRBX01JR1JBVElPTl9TVEFSVEVEJyxcbiAgICAgICAgICBkdXJhdGlvbjogMzAwMDB9KTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IFN0b3JhZ2VVdGlscy5jb3B5KG9sZEZvcmFnZSwgZm9yYWdlLCB7a2V5cywgZGVsZXRlQWZ0ZXJDb3B5OiBmYWxzZX0pO1xuXG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gRGF0ZS5ub3coKSAtIG5vdztcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0b2FzdC5kaXNtaXNzKCksICBNYXRoLm1heCgyMDAwIC0gZHVyYXRpb24sIDApKTtcbiAgICAgICAgYXdhaXQgdGhpcy5zaG93VG9hc3Qoe21lc3NhZ2U6ICdJTkZPLkRBVEFfTUlHUkFUSU9OX1NVQ0NFRUQnLFxuICAgICAgICAgIHR5cGU6ICdpbmZvJyxcbiAgICAgICAgICBzaG93Q2xvc2VCdXR0b246IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnNvbGUuaW5mbygnW3BsYXRmb3JtXSBTdGFydGluZyBzdG9yYWdlIG1pZ3JhdGlvbiBbT0tdJyk7XG5cbiAgICAgICAgLy8gRHJvcCB0aGUgb2xkIGluc3RhbmNlXG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW3BsYXRmb3JtXSBEcm9wIG9sZCBzdG9yYWdlIHtuYW1lOiAnJHtmb3JhZ2UuY29uZmlnKCkubmFtZX0nLCBkcml2ZXI6ICcke29sZEZvcmFnZS5kcml2ZXIoKX0nfWApO1xuICAgICAgICBhd2FpdCBvbGRGb3JhZ2UuZHJvcEluc3RhbmNlKCk7XG4gICAgICB9XG4gICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyICYmIGVyci5tZXNzYWdlIHx8IGVyciwgZXJyKTtcbiAgICAgICAgYXdhaXQgdG9hc3QuZGlzbWlzcygpO1xuICAgICAgICBhd2FpdCB0aGlzLnNob3dUb2FzdCh7bWVzc2FnZTogJ0VSUk9SLkRBVEFfTUlHUkFUSU9OX0ZBSUxFRCcsXG4gICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICBzaG93Q2xvc2VCdXR0b246IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHNob3dUb2FzdChvcHRzOiBTaG93VG9hc3RPcHRpb25zKTogUHJvbWlzZTxIVE1MSW9uVG9hc3RFbGVtZW50PiB7XG4gICAgaWYgKCF0aGlzLnRvYXN0Q29udHJvbGxlcikgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHRvYXN0Q29udHJvbGxlciBpbiBjb21wb25lbnRcXCdzIGNvbnN0cnVjdG9yJyk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gVG9hc3RzLnNob3codGhpcy50b2FzdENvbnRyb2xsZXIsIHRoaXMudHJhbnNsYXRlLCB7XG4gICAgICAgIC4uLm9wdHMsXG4gICAgICAgIG9uV2lsbFByZXNlbnQ6ICh0KSA9PiByZXNvbHZlKHQpXG4gICAgICB9KSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgb25TdGFydHVwRXJyb3IoZXJyKSB7XG4gICAgY29uc29sZS5lcnJvcignW3BsYXRmb3JtXSBGYWlsZWQgc3RhcnRpbmcgdGhlIHBsYXRmb3JtISAnLCBlcnIpO1xuICAgIGxldCBtZXNzYWdlID0gZXJyICYmIGVyci5tZXNzYWdlIHx8IGVycjtcbiAgICBjb25zdCBkZXRhaWxzTWVzc2FnZSA9IGVyciAmJiAoZXJyLmRldGFpbHMgJiYgZXJyLmRldGFpbHMubWVzc2FnZSB8fCBlcnIuZGV0YWlscyk7XG4gICAgLy8gU2V0IHNwZWNpZmljIGVycm9yIHdoZW4gRmlyZWZveCBpcyBpbiBwcml2YXRlIG1vZGUgb3IgaGlzdG9yeSBuZXZlciByZW1lbWJlcmVkIChzZWUgTWFudGlzIElmcmVtZXIgIzU2NDQxKVxuICAgIGlmIChlcnIuY29kZSA9PT0gMTEgJiYgdGhpcy5jZGtQbGF0Zm9ybS5GSVJFRk9YKSB7XG4gICAgICBtZXNzYWdlID0gJ0VSUk9SLkZJUkVGT1hfTk9fU1RPUkFHRSc7XG4gICAgfVxuICAgIGlmICh0aGlzLnRyYW5zbGF0ZSkge1xuICAgICAgbWVzc2FnZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRlLmdldChtZXNzYWdlKS50b1Byb21pc2UoKTtcbiAgICAgIGlmIChlcnIgJiYgZXJyLmNvZGUpIHtcbiAgICAgICAgbWVzc2FnZSArPSBgIHtjb2RlOiAke2Vyci5jb2RlfX1gO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIG1lc3NhZ2UgPSBgRmF0YWwgZXJyb3I6IFBsZWFzZSBjb250YWN0IHlvdXIgYWRtaW5pc3RyYXRvci5cXG5cXG57Y29kZTogJHtlcnIgJiYgZXJyLmNvZGUgfHwgJ251bGwnfSwgbWVzc2FnZTogXCIke21lc3NhZ2V9XCJ9YDtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9hc3RDb250cm9sbGVyKSB7XG4gICAgICBpZiAoZGV0YWlsc01lc3NhZ2UpIHtcbiAgICAgICAgbWVzc2FnZSArPSBgPGJyLz48c21hbGw+JHtkZXRhaWxzTWVzc2FnZX08L3NtYWxsPmA7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLnNob3dUb2FzdCh7XG4gICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgIGR1cmF0aW9uOiAtMSxcbiAgICAgICAgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlLFxuICAgICAgICBtZXNzYWdlXG4gICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSBpZiAod2luZG93KSB7XG4gICAgICBpZiAoZGV0YWlsc01lc3NhZ2UpIHtcbiAgICAgICAgbWVzc2FnZSArPSBgXFxuXFxue2NhdXNlOiBcIiR7ZGV0YWlsc01lc3NhZ2V9XCJ9YDtcbiAgICAgIH1cbiAgICAgIHdpbmRvdy5hbGVydChtZXNzYWdlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgICAgaWYgKGVyciAmJiBlcnIuZGV0YWlscykgY29uc29sZS5lcnJvcignY2F1c2UnLCBlcnIuZGV0YWlscyk7XG4gICAgfVxuICB9XG59XG5cbiJdfQ==
|
|
417
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm0uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9wbGF0Zm9ybS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFDLFFBQVEsRUFBRSxlQUFlLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RCxPQUFPLEVBQWdCLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRWhFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDdkQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ3BELE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQzlELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDekMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxRQUFRLElBQUksV0FBVyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFOUQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQzlELE9BQU8sRUFBQyxZQUFZLEVBQUUsS0FBSyxFQUFtQixRQUFRLEVBQUUsZUFBZSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDdkcsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUNuRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFDakUsT0FBTyxFQUFtQixNQUFNLEVBQUMsTUFB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O1lBN1pGLFVBQVUsU0FBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUM7OztZQTlCeEIsUUFBUTtZQVNJLFdBQVc7WUFUYixlQUFlO1lBaUJ6QixnQkFBZ0I7WUFRaEIsaUJBQWlCO1lBWGpCLGVBQWU7WUFSZixvQkFBb0I7WUFMTCxjQUFjO1lBa0I3QixjQUFjO1lBSWQsYUFBYTtZQWhCYixZQUFZO1lBTVosT0FBTztZQUxQLGFBQWE7NENBd0RoQixNQUFNLFNBQUMsV0FBVztZQTVEZixTQUFTLHVCQTZEWixRQUFRO1lBNURMLFFBQVEsdUJBNkRYLFFBQVE7WUEvREwsWUFBWSx1QkFnRWYsUUFBUTtZQXhETCxZQUFZLHVCQXlEZixRQUFRO1lBMUNMLFVBQVUsdUJBMkNiLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtQbGF0Zm9ybSwgVG9hc3RDb250cm9sbGVyfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQge0F1dGhUb2tlblR5cGUsIE5ldHdvcmtTZXJ2aWNlfSBmcm9tICcuL25ldHdvcmsuc2VydmljZSc7XG5pbXBvcnQge1BsYXRmb3Jtc30gZnJvbSAnQGlvbmljL2NvcmUnO1xuaW1wb3J0IHtTcGxhc2hTY3JlZW59IGZyb20gJ0Bpb25pYy1uYXRpdmUvc3BsYXNoLXNjcmVlbi9uZ3gnO1xuaW1wb3J0IHtTdGF0dXNCYXJ9IGZyb20gJ0Bpb25pYy1uYXRpdmUvc3RhdHVzLWJhci9uZ3gnO1xuaW1wb3J0IHtLZXlib2FyZH0gZnJvbSAnQGlvbmljLW5hdGl2ZS9rZXlib2FyZC9uZ3gnO1xuaW1wb3J0IHtMb2NhbFNldHRpbmdzU2VydmljZX0gZnJvbSAnLi9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7Q2FjaGVTZXJ2aWNlfSBmcm9tICdpb25pYy1jYWNoZSc7XG5pbXBvcnQge0F1ZGlvUHJvdmlkZXJ9IGZyb20gJy4uLy4uL3NoYXJlZC9hdWRpby9hdWRpbyc7XG5pbXBvcnQge1BsYXRmb3JtIGFzIENka1BsYXRmb3JtfSBmcm9tICdAYW5ndWxhci9jZGsvcGxhdGZvcm0nO1xuXG5pbXBvcnQge0luQXBwQnJvd3Nlcn0gZnJvbSAnQGlvbmljLW5hdGl2ZS9pbi1hcHAtYnJvd3Nlci9uZ3gnO1xuaW1wb3J0IHtpc0VtcHR5QXJyYXksIGlzTmlsLCBpc05vdEVtcHR5QXJyYXksIGlzTm90TmlsLCBpc05vdE5pbE9yQmxhbmt9IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHtTdG9yYWdlfSBmcm9tICdAaW9uaWMvc3RvcmFnZSc7XG5pbXBvcnQge0VudGl0aWVzU3RvcmFnZX0gZnJvbSAnLi9zdG9yYWdlL2VudGl0aWVzLXN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQge1N0b3JhZ2VVdGlsc30gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3N0b3JhZ2UudXRpbHMnO1xuaW1wb3J0IHtTaG93VG9hc3RPcHRpb25zLCBUb2FzdHN9IGZyb20gJy4uLy4uL3NoYXJlZC90b2FzdHMnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCAqIGFzIG1vbWVudEltcG9ydGVkIGZyb20gJ21vbWVudCc7XG5pbXBvcnQge0FjY291bnRTZXJ2aWNlfSBmcm9tICcuL2FjY291bnQuc2VydmljZSc7XG5pbXBvcnQge3RpbWVyfSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgZmlyc3QsIG1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtFTlZJUk9OTUVOVH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7Q29uZmlnU2VydmljZX0gZnJvbSAnLi9jb25maWcuc2VydmljZSc7XG5pbXBvcnQge0NPUkVfQ09ORklHX09QVElPTlN9IGZyb20gJy4vY29uZmlnL2NvcmUuY29uZmlnJztcbmltcG9ydCB7TW9tZW50RGF0ZUFkYXB0ZXJ9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsLW1vbWVudC1hZGFwdGVyJztcbmltcG9ydCB7RG93bmxvYWRlciwgRG93bmxvYWRSZXF1ZXN0LCBOb3RpZmljYXRpb25WaXNpYmlsaXR5fSBmcm9tICdAaW9uaWMtbmF0aXZlL2Rvd25sb2FkZXIvbmd4JztcblxuY29uc3QgbW9tZW50ID0gbW9tZW50SW1wb3J0ZWQ7XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIFBsYXRmb3JtU2VydmljZSB7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZGVidWc6IGJvb2xlYW47XG4gIHByaXZhdGUgX3N0YXJ0ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfc3RhcnRQcm9taXNlOiBQcm9taXNlPHZvaWQ+O1xuICBwcml2YXRlIF9tb2JpbGU6IGJvb2xlYW47XG4gIHByaXZhdGUgX2NvcmRvdmE6IGJvb2xlYW47XG4gIHByaXZhdGUgX2FuZHJvaWQ6IGJvb2xlYW47XG5cbiAgdG91Y2hVaTogYm9vbGVhbjtcblxuICBnZXQgc3RhcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhcnRlZDtcbiAgfVxuXG4gIGdldCBtb2JpbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzTm90TmlsKHRoaXMuX21vYmlsZSkgPyB0aGlzLl9tb2JpbGUgOiB0aGlzLnBsYXRmb3JtLmlzKCdtb2JpbGUnKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtLFxuICAgIHByaXZhdGUgY2RrUGxhdGZvcm06IENka1BsYXRmb3JtLFxuICAgIHByaXZhdGUgdG9hc3RDb250cm9sbGVyOiBUb2FzdENvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRlQWRhcHRlcjogTW9tZW50RGF0ZUFkYXB0ZXIsXG4gICAgcHJpdmF0ZSBlbnRpdGllc1N0b3JhZ2U6IEVudGl0aWVzU3RvcmFnZSxcbiAgICBwcml2YXRlIHNldHRpbmdzOiBMb2NhbFNldHRpbmdzU2VydmljZSxcbiAgICBwcml2YXRlIG5ldHdvcmtTZXJ2aWNlOiBOZXR3b3JrU2VydmljZSxcbiAgICBwcml2YXRlIGFjY291bnRTZXJ2aWNlOiBBY2NvdW50U2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjYWNoZTogQ2FjaGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3RvcmFnZTogU3RvcmFnZSxcbiAgICBwcml2YXRlIGF1ZGlvUHJvdmlkZXI6IEF1ZGlvUHJvdmlkZXIsXG4gICAgQEluamVjdChFTlZJUk9OTUVOVCkgcHJvdGVjdGVkIGVudmlyb25tZW50LFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgc3RhdHVzQmFyOiBTdGF0dXNCYXIsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBrZXlib2FyZDogS2V5Ym9hcmQsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBzcGxhc2hTY3JlZW46IFNwbGFzaFNjcmVlbixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGJyb3dzZXI6IEluQXBwQnJvd3NlcixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGRvd25sb2FkZXI6IERvd25sb2FkZXIsXG4gICkge1xuXG4gICAgdGhpcy5fZGVidWcgPSAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1twbGF0Zm9ybV0gQ3JlYXRpbmcgc2VydmljZScpO1xuXG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgaXMocGxhdGZvcm1OYW1lOiBQbGF0Zm9ybXMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wbGF0Zm9ybS5pcyhwbGF0Zm9ybU5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNheSBpZiBvcGVuZWQgaGFzIGJlZW4gb3BlbmVkIGZyb20gYSB3ZWIgYnJvd3NlciAoYW5kIE5PVCBpbnNpZGUgYW4gQW5kcm9pZCBvciBpT3MgQXBwKS5cbiAgICogVGhpcyBpcyB1c2VkIHRvIGtub3duIGlmIHRoZXJlIGlzIGNvcmRvdmEgZmVhdHVyZXNcbiAgICovXG4gIGlzV2ViT3JEZXNrdG9wKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5wbGF0Zm9ybS5pcygnbW9iaWxlJykgfHwgdGhpcy5wbGF0Zm9ybS5pcygnbW9iaWxld2ViJyk7XG4gIH1cblxuICBpc0FuZHJvaWRDb3Jkb3ZhKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9hbmRyb2lkICYmIHRoaXMuX2NvcmRvdmE7XG4gIH1cblxuICBnZXQgY2FuRG93bmxvYWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2FuZHJvaWQgJiYgISF0aGlzLmRvd25sb2FkZXI7XG4gIH1cblxuICB3aWR0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBsYXRmb3JtLndpZHRoKCk7XG4gIH1cblxuICBoZWlnaHQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wbGF0Zm9ybS5oZWlnaHQoKTtcbiAgfVxuXG4gIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9zdGFydFByb21pc2UpIHJldHVybiB0aGlzLl9zdGFydFByb21pc2U7XG4gICAgaWYgKHRoaXMuX3N0YXJ0ZWQpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblxuICAgIHRoaXMuX3N0YXJ0ZWQgPSBmYWxzZTtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuYWNjb3VudFNlcnZpY2UudG9rZW5UeXBlID0gdW5kZWZpbmVkO1xuICAgIGNvbnNvbGUuaW5mbygnW3BsYXRmb3JtXSBTdGFydGluZyBwbGF0Zm9ybS4uLicpO1xuXG4gICAgdGhpcy5fc3RhcnRQcm9taXNlID0gdGhpcy5wbGF0Zm9ybS5yZWFkeSgpXG4gICAgICAudGhlbigoKSA9PiB7XG5cbiAgICAgICAgdGhpcy5fbW9iaWxlID0gdGhpcy5wbGF0Zm9ybS5pcygnbW9iaWxlJyk7XG4gICAgICAgIHRoaXMuX2NvcmRvdmEgPSB0aGlzLnBsYXRmb3JtLmlzKCdjb3Jkb3ZhJyk7XG4gICAgICAgIHRoaXMuX2FuZHJvaWQgPSB0aGlzLnBsYXRmb3JtLmlzKCdhbmRyb2lkJyk7XG5cbiAgICAgICAgdGhpcy5jb25maWd1cmVDb3Jkb3ZhUGx1Z2lucyh0aGlzLl9tb2JpbGUpO1xuICAgICAgICB0aGlzLnRvdWNoVWkgPSB0aGlzLl9tb2JpbGUgfHwgdGhpcy5wbGF0Zm9ybS5pcygndGFibGV0JykgfHwgdGhpcy5wbGF0Zm9ybS5pcygncGhhYmxldCcpO1xuXG4gICAgICAgIC8vIEZvcmNlIG1vYmlsZSBpbiBzZXR0aW5nc1xuICAgICAgICBpZiAodGhpcy5fbW9iaWxlKSB7XG4gICAgICAgICAgdGhpcy5zZXR0aW5ncy5tb2JpbGUgPSB0aGlzLl9tb2JpbGU7XG4gICAgICAgICAgdGhpcy5zZXR0aW5ncy50b3VjaFVpID0gdGhpcy50b3VjaFVpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWd1cmVUcmFuc2xhdGUoKTtcbiAgICB9KVxuICAgIC50aGVuKCgpID0+IHRoaXMuc3RvcmFnZVJlYWR5KCkpXG4gICAgLnRoZW4oKGZvcmFnZSkgPT4gdGhpcy5taWdyYXRlU3RvcmFnZShmb3JhZ2UpKVxuICAgIC50aGVuKCgpID0+IFByb21pc2UuYWxsKFtcbiAgICAgIHRoaXMuZW50aXRpZXNTdG9yYWdlLnJlYWR5KCksXG4gICAgICB0aGlzLmNhY2hlLnJlYWR5KCkudGhlbigoKSA9PiB0aGlzLmNvbmZpZ3VyZUNhY2hlKCkpLFxuICAgICAgdGhpcy5zZXR0aW5ncy5yZWFkeSgpLFxuICAgICAgdGhpcy5uZXR3b3JrU2VydmljZS5yZWFkeSgpLFxuICAgICAgdGhpcy5hdWRpb1Byb3ZpZGVyLnJlYWR5KClcbiAgICBdKSlcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9zdGFydGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3N0YXJ0UHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICAgIGNvbnNvbGUuaW5mbyhgW3BsYXRmb3JtXSBTdGFydGluZyBwbGF0Zm9ybSBbT0tdIHttb2JpbGU6ICR7dGhpcy5fbW9iaWxlfSwgdG91Y2hVaTogJHt0aGlzLnRvdWNoVWl9LCBjYW5Eb3dubG9hZDogJHt0aGlzLmNhbkRvd25sb2FkfX0gaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYCk7XG5cbiAgICAgIC8vIFVwZGF0ZSBjYWNoZSBjb25maWd1cmF0aW9uIHdoZW4gbmV0d29yayBjaGFuZ2VkXG4gICAgICB0aGlzLm5ldHdvcmtTZXJ2aWNlLm9uTmV0d29ya1N0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKCh0eXBlKSA9PiB0aGlzLmNvbmZpZ3VyZUNhY2hlKHR5cGUgIT09ICdub25lJykpO1xuXG4gICAgICAvLyBVcGRhdGUgYXV0aGVudGljYXRpb24gdHlwZVxuICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLmNvbmZpZ1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoY29uZmlnID0+IGNvbmZpZz8uZ2V0UHJvcGVydHkoQ09SRV9DT05GSUdfT1BUSU9OUy5BVVRIX1RPS0VOX1RZUEUpIGFzIEF1dGhUb2tlblR5cGUpLFxuICAgICAgICAgIGZpbHRlcihpc05vdE5pbE9yQmxhbmspLFxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKHRva2VuVHlwZSA9PiB7XG4gICAgICAgICAgY29uc29sZS5pbmZvKGBbcGxhdGZvcm1dIFVzaW5nIGF1dGggdG9rZW4gdHlwZSB7JHt0b2tlblR5cGV9fWApO1xuICAgICAgICAgIHRoaXMuYWNjb3VudFNlcnZpY2UudG9rZW5UeXBlID0gdG9rZW5UeXBlO1xuICAgICAgICB9KTtcblxuICAgICAgLy8gV2FpdCAxIG1vcmUgc2Vjb25kcywgYmVmb3JlIGhpZGluZyB0aGUgc3BsYXNoIHNjcmVlblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnNwbGFzaFNjcmVlbikgdGhpcy5zcGxhc2hTY3JlZW4uaGlkZSgpO1xuXG4gICAgICAgIC8vIFBsYXkgc3RhcnR1cCBzb3VuZFxuICAgICAgICB0aGlzLmF1ZGlvUHJvdmlkZXIucGxheVN0YXJ0dXBTb3VuZCgpO1xuICAgICAgfSwgMTAwMCk7XG4gICAgfSlcbiAgICAgIC8vIE1hbmFnZSBlcnJvclxuICAgICAgLmNhdGNoKGVyciA9PiB0aGlzLm9uU3RhcnR1cEVycm9yKGVycikpO1xuICAgIHJldHVybiB0aGlzLl9zdGFydFByb21pc2U7XG4gIH1cblxuICAvKipcbiAgICogV2FpdCBwbGF0Zm9ybSBpcyByZWFkeS48YnIvPlxuICAgKiBJbXBvcnRhbnQ6IHRoaXMgd2lsbCBOT1Qgc3RhcnQgdGhlIHBsYXRmb3JtLCBoYXMgaXQgc2hvdWxkIGJlIHN0YXJ0ZWQgYnkgdGhlIEFwcENvbXBvbmVudFxuICAgKlxuICAgKiBAcGFyYW0gb3B0c1xuICAgKi9cbiAgcmVhZHkob3B0cz86IHtcbiAgICBjaGVja1BlcmlvZDogbnVtYmVyO1xuICB9KTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBwZXJpb2QgPSBvcHRzICYmIG9wdHMuY2hlY2tQZXJpb2QgfHwgMzAwO1xuICAgIGlmICh0aGlzLl9zdGFydGVkKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgcmV0dXJuIHRpbWVyKHBlcmlvZCwgcGVyaW9kKVxuICAgICAgLnBpcGUoXG4gICAgICAgIC8vIEZvciBERUJVRyA6XG4gICAgICAgIC8vdGFwKCgpID0+IHRoaXMuX2RlYnVnICYmIGNvbnNvbGUuZGVidWcoXCJXYWl0aW5nIHBsYXRmb3JtIHJlYWR5Li4uXCIpKSxcbiAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuX3N0YXJ0ZWQpLFxuICAgICAgICBmaXJzdCgpXG4gICAgICApLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgb3Blbih1cmw6IHN0cmluZywgdGFyZ2V0Pzogc3RyaW5nLCBmZWF0dXJlcz86IHN0cmluZywgcmVwbGFjZT86IGJvb2xlYW4pIHtcbiAgICBjb25zb2xlLmluZm8oYFtwbGF0Zm9ybV0gT3BlbmluZyBsaW5rOiAke3VybH1gKTtcbiAgICBpZiAodGhpcy5icm93c2VyICYmIHRoaXMuX21vYmlsZSkge1xuICAgICAgdGhpcy5icm93c2VyLmNyZWF0ZSh1cmwsIHRhcmdldCwgZmVhdHVyZXMpLnNob3coKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB3aW5kb3cub3Blbih1cmwsIHRhcmdldCwgZmVhdHVyZXMsIHJlcGxhY2UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRvd25sb2FkKHJlcXVlc3Q6IHt1cmk6IHN0cmluZzsgZmlsZW5hbWU/OiBzdHJpbmcgfSAmIFBhcnRpYWw8RG93bmxvYWRSZXF1ZXN0PiApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmICghcmVxdWVzdCB8fCAhcmVxdWVzdC51cmkpIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBhcmd1bWVudCBcXCdyZXF1ZXN0XFwnIG9yIFxcJ3JlcXVlc3QudXJpXFwnJyk7XG4gICAgaWYgKHRoaXMuX2FuZHJvaWQgJiYgdGhpcy5kb3dubG9hZGVyKSB7XG4gICAgICByZXF1ZXN0ID0ge1xuICAgICAgICB2aXNpYmxlSW5Eb3dubG9hZHNVaTogdHJ1ZSxcbiAgICAgICAgbm90aWZpY2F0aW9uVmlzaWJpbGl0eTogTm90aWZpY2F0aW9uVmlzaWJpbGl0eS5WaXNpYmxlTm90aWZ5Q29tcGxldGVkLFxuICAgICAgICAuLi5yZXF1ZXN0LFxuICAgICAgICAvKmRlc3RpbmF0aW9uSW5FeHRlcm5hbEZpbGVzRGlyOiB7XG4gICAgICAgICAgZGlyVHlwZTogJ0Rvd25sb2FkcycsXG4gICAgICAgICAgc3ViUGF0aDogcmVxdWVzdC5maWxlbmFtZSB8fCByZXF1ZXN0LnRpdGxlIHx8ICcnLFxuICAgICAgICAgIC4uLnJlcXVlc3QuZGVzdGluYXRpb25JbkV4dGVybmFsRmlsZXNEaXJcbiAgICAgICAgfSovXG4gICAgICB9O1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zb2xlLmRlYnVnKCdbcGxhdGZvcm1dIERvd25sb2FkaW5nLCB1c2luZyByZXF1ZXN0OiAnICsgSlNPTi5zdHJpbmdpZnkocmVxdWVzdCkpO1xuXG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gYXdhaXQgdGhpcy5kb3dubG9hZGVyLmRvd25sb2FkKHJlcXVlc3QpO1xuXG4gICAgICAgIGNvbnNvbGUuaW5mbygnW3BsYXRmb3JtXSBGaWxlIHN1Y2Nlc3NmdWxseSBkb3dubG9hZGVkIGF0OicgKyBsb2NhdGlvbik7XG4gICAgICAgIHJldHVybiBsb2NhdGlvbjtcbiAgICAgIH1cbiAgICAgIGNhdGNoKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdbcGxhdGZvcm1dIFVuYWJsZSB0byBkb3dubG9hZDogJyArIChlcnIgJiYgZXJyLm1lc3NhZ2UgfHwgZXJyKSk7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gRmFsbGJhY2sgKG5vIENvcmRvdmEpXG4gICAgLy8gV2ViIG1vZGU6IG9wZW4gVVJJIHVzaW5nIHRoZSBicm93c2VyXG4gICAgLy8gVE9ETzogZmluZCBhIHdheSB0byBkb3dubG9hZCB1bmRlciBpT1MgKHNlZSBodHRwczovL3d3dy5jLXNoYXJwY29ybmVyLmNvbS9hcnRpY2xlL2hvdy10by1kb3dubG9hZC1hLWZpbGUtdXNpbmctZmlsZS10cmFuc2Zlci1wbHVnaW4taW4taW9uaWMtMy8pXG4gICAgZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1twbGF0Zm9ybV0gQ2Fubm90IHVzZSBDb3Jkb3ZhIGRvd25sb2FkZXI6IHVzaW5nIGJyb3dzZXIgb3BlbigpJyk7XG4gICAgICB0aGlzLm9wZW4ocmVxdWVzdC51cmksICdfc3lzdGVtJywgJ2xvY2F0aW9uPW5vJywgdHJ1ZSk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2RzIC0tICovXG5cbiAgcHJvdGVjdGVkIGNvbmZpZ3VyZUNvcmRvdmFQbHVnaW5zKG1vYmlsZTogYm9vbGVhbikge1xuICAgIGNvbnNvbGUuaW5mbygnW3BsYXRmb3JtXSBDb25maWd1cmluZyBDb3Jkb3ZhIHBsdWdpbnMuLi4nKTtcblxuICAgIGlmICh0aGlzLnN0YXR1c0Jhcikge1xuICAgICAgdGhpcy5zdGF0dXNCYXIuc3R5bGVEZWZhdWx0KCk7XG4gICAgICB0aGlzLnN0YXR1c0Jhci5vdmVybGF5c1dlYlZpZXcoZmFsc2UpO1xuICAgIH1cbiAgICBpZiAodGhpcy5rZXlib2FyZCkge1xuICAgICAgdGhpcy5rZXlib2FyZC5oaWRlRm9ybUFjY2Vzc29yeUJhcih0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBGb3JjZSB0byB1c2UgSW5BcHBCcm93c2VyIGluc3RlYWQgb2YgZGVmYXVsdCB3aW5kb3cub3BlbigpXG4gICAgaWYgKHRoaXMuYnJvd3Nlcikge1xuICAgICAgLy8gRklYTUU6IHRoaXMgY3JlYXRlIGEgaW5maW5pdGUgbG9vcCAoZS5nLiB3aGVuIGRvd25sb2FkaW5nIGFuIGV4dHJhY3Rpb24gZmlsZSlcbiAgICAgIC8vIHdpbmRvdy5vcGVuID0gKHVybD86IHN0cmluZywgdGFyZ2V0Pzogc3RyaW5nLCBmZWF0dXJlcz86IHN0cmluZywgcmVwbGFjZT86IGJvb2xlYW4pID0+IHtcbiAgICAgIC8vICAgY29uc29sZS5kZWJ1ZyhcIltwbGF0Zm9ybV0gQ2FsbCB0byB3aW5kb3cub3BlbigpIHJlZGlyZWN0ZWQgdG8gSW5BcHBCcm93c2VyLm9wZW4oKVwiKTtcbiAgICAgIC8vICAgdGhpcy5icm93c2VyLmNyZWF0ZSh1cmwsIHRhcmdldCwgZmVhdHVyZXMpLnNob3coKTtcbiAgICAgIC8vICAgcmV0dXJuIHdpbmRvdztcbiAgICAgIC8vIH07XG4gICAgfVxuICB9XG5cblxuICBwcm90ZWN0ZWQgY29uZmlndXJlVHJhbnNsYXRlKCkge1xuICAgIGNvbnNvbGUuaW5mbygnW3BsYXRmb3JtXSBDb25maWd1cmluZyBpMThuIC4uLicpO1xuXG4gICAgLy8gdGhpcyBsYW5ndWFnZSB3aWxsIGJlIHVzZWQgYXMgYSBmYWxsYmFjayB3aGVuIGEgdHJhbnNsYXRpb24gaXNuJ3QgZm91bmQgaW4gdGhlIGN1cnJlbnQgbGFuZ3VhZ2VcbiAgICB0aGlzLnRyYW5zbGF0ZS5zZXREZWZhdWx0TGFuZyh0aGlzLmVudmlyb25tZW50LmRlZmF1bHRMb2NhbGUpO1xuXG4gICAgLy8gV2hlbiBsb2NhbGUgY2hhbmdlcywgYXBwbHkgdG8gZGF0ZSBhZGFwdGVyXG4gICAgdGhpcy50cmFuc2xhdGUub25MYW5nQ2hhbmdlLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICBpZiAoZXZlbnQgJiYgZXZlbnQubGFuZykge1xuXG4gICAgICAgIC8vIGZvcmNlICdlbicgYXMgJ2VuX0dCJ1xuICAgICAgICBpZiAoZXZlbnQubGFuZyA9PT0gJ2VuJykge1xuICAgICAgICAgIGV2ZW50LmxhbmcgPSAnZW5fR0InO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY29uZmlnIG1vbWVudCBsaWJcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBtb21lbnQubG9jYWxlKGV2ZW50LmxhbmcpO1xuICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1twbGF0Zm9ybV0gVXNlIGxvY2FsZSB7JyArIGV2ZW50LmxhbmcgKyAnfScpO1xuICAgICAgICB9XG4gICAgICAgICAgLy8gSWYgZXJyb3IsIGZhbGxiYWNrIHRvIGVuXG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBtb21lbnQubG9jYWxlKCdlbicpO1xuICAgICAgICAgIGNvbnNvbGUud2FybignW3BsYXRmb3JtXSBVbmtub3duIGxvY2FsIGZvciBtb21lbnQgbGliLiBVc2luZyBkZWZhdWx0IFtlbl0nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbmZpZyBkYXRlIGFkYXB0ZXJcbiAgICAgICAgdGhpcy5kYXRlQWRhcHRlci5zZXRMb2NhbGUobW9tZW50LmxvY2FsZSgpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuc2V0dGluZ3Mub25DaGFuZ2Uuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgaWYgKGRhdGEgJiYgZGF0YS5sb2NhbGUgJiYgZGF0YS5sb2NhbGUgIT09IHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nKSB7XG4gICAgICAgIHRoaXMudHJhbnNsYXRlLnVzZShkYXRhLmxvY2FsZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBVc2UgYWNjb3VudCdzIGxvY2FsZSwgd2hlbiBhY2NvdW50IGluaGVyaXRhbmNlIGVuYWJsZWQgaW4gc2V0dGluZ3NcbiAgICB0aGlzLmFjY291bnRTZXJ2aWNlLm9uTG9naW4uc3Vic2NyaWJlKGFjY291bnQgPT4ge1xuICAgICAgaWYgKHRoaXMuc2V0dGluZ3Muc2V0dGluZ3MuYWNjb3VudEluaGVyaXRhbmNlKSB7XG4gICAgICAgIGNvbnN0IGFjY291bnRMb2NhbGUgPSBhY2NvdW50LnNldHRpbmdzICYmIGFjY291bnQuc2V0dGluZ3MubG9jYWxlO1xuICAgICAgICBpZiAoYWNjb3VudExvY2FsZSAmJiBhY2NvdW50TG9jYWxlICE9PSB0aGlzLnNldHRpbmdzLmxvY2FsZSkge1xuICAgICAgICAgIHRoaXMuc2V0dGluZ3MuYXBwbHkoe1xuICAgICAgICAgICAgbG9jYWxlOiBhY2NvdW50TG9jYWxlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb25maWd1cmVDYWNoZShvbmxpbmU/OiBib29sZWFuKSB7XG4gICAgb25saW5lID0gaXNOb3ROaWwob25saW5lKSA/IG9ubGluZSA6IHRoaXMuY2FjaGUuaXNPbmxpbmUoKTtcbiAgICBjb25zdCBjYWNoZVRUTCA9IG9ubGluZSA/IDM2MDAgLyogMWggKi8gOiAzNjAwICogMjQgKiAzMDsgLyogMSBtb250aCAqL1xuICAgIGNvbnNvbGUuaW5mbyhgW3BsYXRmb3JtXSBDb25maWd1cmluZyBjYWNoZSBbT0tdIHtvbmxpbmU6ICR7b25saW5lfX0sIHt0aW1lVG9MaXZlOiAke2NhY2hlVFRMIC8gMzYwMH1ofSwge29mZmxpbmVJbnZhbGlkYXRlOiBmYWxzZX1gKTtcbiAgICB0aGlzLmNhY2hlLnNldERlZmF1bHRUVEwoY2FjaGVUVEwpO1xuICAgIHRoaXMuY2FjaGUuc2V0T2ZmbGluZUludmFsaWRhdGUoZmFsc2UpOyAvLyBEbyBub3QgaW52YWxpZGF0ZSBjYWNoZSB3aGVuIG9mZmxpbmVcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBzdG9yYWdlUmVhZHkoKTogUHJvbWlzZTxMb2NhbEZvcmFnZT4ge1xuXG4gICAgY29uc29sZS5pbmZvKGBbcGxhdGZvcm1dIFN0YXJ0aW5nIHN0b3JhZ2UuLi5gKTtcbiAgICBjb25zdCBmb3JhZ2UgPSBhd2FpdCB0aGlzLnN0b3JhZ2UucmVhZHkoKTtcbiAgICBjb25zdCBkcml2ZXIgPSBmb3JhZ2UuZHJpdmVyKCk7XG5cbiAgICBpZiAoaXNOaWwoZHJpdmVyKSkge1xuICAgICAgY29uc29sZS5lcnJvcignW3BsYXRmb3JtXSBOTyBEUklWRVIgREVGSU5FRCBJTiBTVE9SQUdFLiBMb2NhbCBzdG9yYWdlIGNhbm5vdCBiZSB1c2VkICEnKTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZm9yYWdlKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmluZm8oYFtwbGF0Zm9ybV0gU3RhcnRpbmcgc3RvcmFnZSBbT0tdIHtuYW1lOiAnJHtmb3JhZ2UuY29uZmlnKCkubmFtZX0nLCBkcml2ZXI6ICcke2ZvcmFnZS5kcml2ZXIoKX0nLCBzaXplOiAke2ZvcmFnZS5jb25maWcoKS5zaXplfWApO1xuICAgIGNvbnNvbGUuZGVidWcoYFtwbGF0Zm9ybV0gU3RvcmFnZSBzdXBwb3J0czogeyR7Zm9yYWdlLldFQlNRTH06ICR7Zm9yYWdlLnN1cHBvcnRzKGZvcmFnZS5XRUJTUUwpfSwgJHtmb3JhZ2UuSU5ERVhFRERCfTogJHtmb3JhZ2Uuc3VwcG9ydHMoZm9yYWdlLklOREVYRUREQil9LCAke2ZvcmFnZS5MT0NBTFNUT1JBR0V9OiAke2ZvcmFnZS5zdXBwb3J0cyhmb3JhZ2UuTE9DQUxTVE9SQUdFKX19YCk7XG5cbiAgICByZXR1cm4gZm9yYWdlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG1pZ3JhdGVTdG9yYWdlKGZvcmFnZTogTG9jYWxGb3JhZ2UpIHtcbiAgICBjb25zdCBjYW5NaWdyYXRlID0gZm9yYWdlICYmXG4gICAgICAoKGZvcmFnZS5kcml2ZXIoKSA9PT0gJ2NvcmRvdmFTUUxpdGVEcml2ZXInICYmIChmb3JhZ2Uuc3VwcG9ydHMoZm9yYWdlLklOREVYRUREQikgfHwgZm9yYWdlLnN1cHBvcnRzKGZvcmFnZS5XRUJTUUwpKSkgfHxcbiAgICAgICAoZm9yYWdlLmRyaXZlcigpID09PSBmb3JhZ2UuV0VCU1FMICYmIGZvcmFnZS5zdXBwb3J0cyhmb3JhZ2UuSU5ERVhFRERCKSkpO1xuXG4gICAgaWYgKCFjYW5NaWdyYXRlKSByZXR1cm47IC8vIFNraXBcblxuICAgIGNvbnN0IG9sZEZvcmFnZSA9IGZvcmFnZS5jcmVhdGVJbnN0YW5jZSh7XG4gICAgICBuYW1lOiBmb3JhZ2UuY29uZmlnKCkubmFtZSxcbiAgICAgIHN0b3JlTmFtZTogZm9yYWdlLmNvbmZpZygpLnN0b3JlTmFtZSxcbiAgICAgIGRyaXZlcjogW2ZvcmFnZS5JTkRFWEVEREIsIGZvcmFnZS5XRUJTUUxdXG4gICAgfSk7XG5cbiAgICBjb25zdCBrZXlzID0gYXdhaXQgb2xkRm9yYWdlLmtleXMoKTtcblxuICAgIC8vIE5vIGRhdGEgaW4gdGhlIG9kbCBzdG9yYWdlOiBza2lwIG1pZ3JhdGlvblxuICAgIGlmIChpc0VtcHR5QXJyYXkoa2V5cykpIHtcbiAgICAgIC8vIERyb3AgdGhlIG9sZCBpbnN0YW5jZSAobm90IG5lZWQgYW55bW9yZSlcbiAgICAgIGNvbnNvbGUuZGVidWcoYFtwbGF0Zm9ybV0gT2xkIHN0b3JhZ2UgaXMgZW1wdHk6IGRyb3BwaW5nIHVudXNlZCBpbnN0YW5jZSB7bmFtZTogJyR7Zm9yYWdlLmNvbmZpZygpLm5hbWV9JywgZHJpdmVyOiAnJHtvbGRGb3JhZ2UuZHJpdmVyKCl9J31gKTtcbiAgICAgIGF3YWl0IG9sZEZvcmFnZS5kcm9wSW5zdGFuY2UoKTtcbiAgICB9XG4gICAgLy8gSUYgc29tZSBkYXRhIHN0b3JlZCBpbiB0aGUgT0xEIHN0b3JhZ2U6IHN0YXJ0IG1pZ3JhdGlvblxuICAgIGVsc2Uge1xuXG4gICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgY29uc29sZS5pbmZvKGBbcGxhdGZvcm1dIFN0YXJ0aW5nIHN0b3JhZ2UgbWlncmF0aW9uLi4uYCk7XG5cbiAgICAgIGNvbnN0IHRvYXN0ID0gYXdhaXQgdGhpcy5zaG93VG9hc3Qoe21lc3NhZ2U6ICdJTkZPLkRBVEFfTUlHUkFUSU9OX1NUQVJURUQnLFxuICAgICAgICAgIGR1cmF0aW9uOiAzMDAwMH0pO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgU3RvcmFnZVV0aWxzLmNvcHkob2xkRm9yYWdlLCBmb3JhZ2UsIHtrZXlzLCBkZWxldGVBZnRlckNvcHk6IGZhbHNlfSk7XG5cbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSBEYXRlLm5vdygpIC0gbm93O1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRvYXN0LmRpc21pc3MoKSwgIE1hdGgubWF4KDIwMDAgLSBkdXJhdGlvbiwgMCkpO1xuICAgICAgICBhd2FpdCB0aGlzLnNob3dUb2FzdCh7bWVzc2FnZTogJ0lORk8uREFUQV9NSUdSQVRJT05fU1VDQ0VFRCcsXG4gICAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICAgIHNob3dDbG9zZUJ1dHRvbjogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc29sZS5pbmZvKCdbcGxhdGZvcm1dIFN0YXJ0aW5nIHN0b3JhZ2UgbWlncmF0aW9uIFtPS10nKTtcblxuICAgICAgICAvLyBEcm9wIHRoZSBvbGQgaW5zdGFuY2VcbiAgICAgICAgY29uc29sZS5pbmZvKGBbcGxhdGZvcm1dIERyb3Agb2xkIHN0b3JhZ2Uge25hbWU6ICcke2ZvcmFnZS5jb25maWcoKS5uYW1lfScsIGRyaXZlcjogJyR7b2xkRm9yYWdlLmRyaXZlcigpfSd9YCk7XG4gICAgICAgIGF3YWl0IG9sZEZvcmFnZS5kcm9wSW5zdGFuY2UoKTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIgJiYgZXJyLm1lc3NhZ2UgfHwgZXJyLCBlcnIpO1xuICAgICAgICBhd2FpdCB0b2FzdC5kaXNtaXNzKCk7XG4gICAgICAgIGF3YWl0IHRoaXMuc2hvd1RvYXN0KHttZXNzYWdlOiAnRVJST1IuREFUQV9NSUdSQVRJT05fRkFJTEVEJyxcbiAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgIHNob3dDbG9zZUJ1dHRvbjogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgc2hvd1RvYXN0KG9wdHM6IFNob3dUb2FzdE9wdGlvbnMpOiBQcm9taXNlPEhUTUxJb25Ub2FzdEVsZW1lbnQ+IHtcbiAgICBpZiAoIXRoaXMudG9hc3RDb250cm9sbGVyKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgdG9hc3RDb250cm9sbGVyIGluIGNvbXBvbmVudFxcJ3MgY29uc3RydWN0b3InKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBUb2FzdHMuc2hvdyh0aGlzLnRvYXN0Q29udHJvbGxlciwgdGhpcy50cmFuc2xhdGUsIHtcbiAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgb25XaWxsUHJlc2VudDogKHQpID0+IHJlc29sdmUodClcbiAgICAgIH0pKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBvblN0YXJ0dXBFcnJvcihlcnIpIHtcbiAgICBjb25zb2xlLmVycm9yKCdbcGxhdGZvcm1dIEZhaWxlZCBzdGFydGluZyB0aGUgcGxhdGZvcm0hICcsIGVycik7XG4gICAgbGV0IG1lc3NhZ2UgPSBlcnIgJiYgZXJyLm1lc3NhZ2UgfHwgZXJyO1xuICAgIGNvbnN0IGRldGFpbHNNZXNzYWdlID0gZXJyICYmIChlcnIuZGV0YWlscyAmJiBlcnIuZGV0YWlscy5tZXNzYWdlIHx8IGVyci5kZXRhaWxzKTtcbiAgICAvLyBTZXQgc3BlY2lmaWMgZXJyb3Igd2hlbiBGaXJlZm94IGlzIGluIHByaXZhdGUgbW9kZSBvciBoaXN0b3J5IG5ldmVyIHJlbWVtYmVyZWQgKHNlZSBNYW50aXMgSWZyZW1lciAjNTY0NDEpXG4gICAgaWYgKGVyci5jb2RlID09PSAxMSAmJiB0aGlzLmNka1BsYXRmb3JtLkZJUkVGT1gpIHtcbiAgICAgIG1lc3NhZ2UgPSAnRVJST1IuRklSRUZPWF9OT19TVE9SQUdFJztcbiAgICB9XG4gICAgaWYgKHRoaXMudHJhbnNsYXRlKSB7XG4gICAgICBtZXNzYWdlID0gYXdhaXQgdGhpcy50cmFuc2xhdGUuZ2V0KG1lc3NhZ2UpLnRvUHJvbWlzZSgpO1xuICAgICAgaWYgKGVyciAmJiBlcnIuY29kZSkge1xuICAgICAgICBtZXNzYWdlICs9IGAge2NvZGU6ICR7ZXJyLmNvZGV9fWA7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgbWVzc2FnZSA9IGBGYXRhbCBlcnJvcjogUGxlYXNlIGNvbnRhY3QgeW91ciBhZG1pbmlzdHJhdG9yLlxcblxcbntjb2RlOiAke2VyciAmJiBlcnIuY29kZSB8fCAnbnVsbCd9LCBtZXNzYWdlOiBcIiR7bWVzc2FnZX1cIn1gO1xuICAgIH1cbiAgICBpZiAodGhpcy50b2FzdENvbnRyb2xsZXIpIHtcbiAgICAgIGlmIChkZXRhaWxzTWVzc2FnZSkge1xuICAgICAgICBtZXNzYWdlICs9IGA8YnIvPjxzbWFsbD4ke2RldGFpbHNNZXNzYWdlfTwvc21hbGw+YDtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuc2hvd1RvYXN0KHtcbiAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgZHVyYXRpb246IC0xLFxuICAgICAgICBzaG93Q2xvc2VCdXR0b246IHRydWUsXG4gICAgICAgIG1lc3NhZ2VcbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIGlmICh3aW5kb3cpIHtcbiAgICAgIGlmIChkZXRhaWxzTWVzc2FnZSkge1xuICAgICAgICBtZXNzYWdlICs9IGBcXG5cXG57Y2F1c2U6IFwiJHtkZXRhaWxzTWVzc2FnZX1cIn1gO1xuICAgICAgfVxuICAgICAgd2luZG93LmFsZXJ0KG1lc3NhZ2UpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgICBpZiAoZXJyICYmIGVyci5kZXRhaWxzKSBjb25zb2xlLmVycm9yKCdjYXVzZScsIGVyci5kZXRhaWxzKTtcbiAgICB9XG4gIH1cbn1cblxuIl19
|
|
@@ -57,6 +57,9 @@ export class StartableService {
|
|
|
57
57
|
get started() {
|
|
58
58
|
return this._started;
|
|
59
59
|
}
|
|
60
|
+
get starting() {
|
|
61
|
+
return !!this._startPromise;
|
|
62
|
+
}
|
|
60
63
|
ready() {
|
|
61
64
|
if (this._started)
|
|
62
65
|
return Promise.resolve(this._data);
|
|
@@ -71,4 +74,4 @@ export class StartableService {
|
|
|
71
74
|
StartableService.ctorParameters = () => [
|
|
72
75
|
{ type: undefined, decorators: [{ type: Optional }] }
|
|
73
76
|
];
|
|
74
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnRhYmxlLXNlcnZpY2UuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9zZXJ2aWNlcy9zdGFydGFibGUtc2VydmljZS5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUMsT0FBTyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBUzNDLE1BQU0sT0FBZ0IsZ0JBQWdCO0lBV3BDLFlBQ2MsUUFBdUM7UUFWckQsWUFBTyxHQUFHLElBQUksT0FBTyxFQUFLLENBQUM7UUFFakIsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUNmLFVBQUssR0FBTSxJQUFJLENBQUM7UUFFbEIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQU92QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsUUFBUTtZQUNoQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRTtZQUN4QixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUNsRCxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV0RCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRTthQUMzQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNYLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBRWxCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO1lBRS9CLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUU5QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDcEIsQ0FBQyxDQUFDO2FBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ2hGLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1lBQzFCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7UUFDTCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUdLLElBQUk7O1lBQ1IsSUFBSTtnQkFDRixNQUFNLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO2FBQ2hDO1lBQ0QsT0FBTyxHQUFHLEVBQUU7Z0JBQ1YsT0FBTyxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2FBQ2hGO1FBQ0gsQ0FBQztLQUFBO0lBRUssT0FBTzs7WUFDWCxJQUFJLElBQUksQ0FBQyxhQUFhO2dCQUFFLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLCtCQUErQjtZQUNqRixJQUFJLElBQUksQ0FBQyxRQUFRO2dCQUFFLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsdUJBQXVCO1lBQzdELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsbUJBQW1CO1FBQzFDLENBQUM7S0FBQTtJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM5QixDQUFDO0lBRUQsS0FBSztRQUNILElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFZSxRQUFROztZQUN0QixnQ0FBZ0M7UUFDbEMsQ0FBQztLQUFBOzs7NENBakVFLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge09wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7U3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGludGVyZmFjZSBJU3RhcnRhYmxlU2VydmljZTxUID0gYW55PiB7XG4gIHN0YXJ0ZWQ6IGJvb2xlYW47XG4gIHN0YXJ0KCk6IFByb21pc2U8VD47XG4gIHN0b3AoKTogUHJvbWlzZTx2b2lkPjtcbiAgcmVhZHkoKTogUHJvbWlzZTxUPjtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFN0YXJ0YWJsZVNlcnZpY2U8VCA9IGFueT4gaW1wbGVtZW50cyBJU3RhcnRhYmxlU2VydmljZTxUPiB7XG5cbiAgb25TdGFydCA9IG5ldyBTdWJqZWN0PFQ+KCk7XG5cbiAgcHJvdGVjdGVkIF9kZWJ1ZyA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgX2RhdGE6IFQgPSBudWxsO1xuXG4gIHByaXZhdGUgX3N0YXJ0ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfc3RhcnRQcm9taXNlOiBQcm9taXNlPFQ+O1xuICBwcml2YXRlIF9zdGFydFByZXJlcXVpc2l0ZTogKCkgPT4gUHJvbWlzZTxhbnk+O1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBwbGF0Zm9ybTogeyByZWFkeTogKCkgPT4gUHJvbWlzZTxhbnk+IH1cbiAgKSB7XG4gICAgdGhpcy5fc3RhcnRQcmVyZXF1aXNpdGUgPSBwbGF0Zm9ybVxuICAgICAgPyAoKSA9PiBwbGF0Zm9ybS5yZWFkeSgpXG4gICAgICA6ICgpID0+IFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgc3RhcnQoKTogUHJvbWlzZTxUPiB7XG4gICAgaWYgKHRoaXMuX3N0YXJ0UHJvbWlzZSkgcmV0dXJuIHRoaXMuX3N0YXJ0UHJvbWlzZTtcbiAgICBpZiAodGhpcy5fc3RhcnRlZCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9kYXRhKTtcblxuICAgIHRoaXMuX3N0YXJ0UHJvbWlzZSA9IHRoaXMuX3N0YXJ0UHJlcmVxdWlzaXRlKClcbiAgICAgIC50aGVuKCgpID0+IHRoaXMubmdPblN0YXJ0KCkpXG4gICAgICAudGhlbihkYXRhID0+IHtcbiAgICAgICAgdGhpcy5fZGF0YSA9IGRhdGE7XG5cbiAgICAgICAgdGhpcy5fc3RhcnRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3N0YXJ0UHJvbWlzZSA9IHVuZGVmaW5lZDtcblxuICAgICAgICB0aGlzLm9uU3RhcnQubmV4dCh0aGlzLl9kYXRhKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHN0YXJ0IGEgc2VydmljZTogJyArIChlcnIgJiYgZXJyLm1lc3NhZ2UgfHwgZXJyKSwgZXJyKTtcbiAgICAgICAgdGhpcy5fc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGFydFByb21pc2UgPSBudWxsO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0pO1xuICAgIHJldHVybiB0aGlzLl9zdGFydFByb21pc2U7XG4gIH1cblxuXG4gIGFzeW5jIHN0b3AoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMubmdPblN0b3AoKTtcbiAgICAgIHRoaXMuX3N0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuX3N0YXJ0UHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHN0b3AgYSBzZXJ2aWNlOiAnICsgKGVyciAmJiBlcnIubWVzc2FnZSB8fCBlcnIpLCBlcnIpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlc3RhcnQoKTogUHJvbWlzZTxUPiB7XG4gICAgaWYgKHRoaXMuX3N0YXJ0UHJvbWlzZSkgYXdhaXQgdGhpcy5fc3RhcnRQcm9taXNlOyAvLyBXYWl0IGVuZCBvZiBwcmV2aW91cyBsb2FkaW5nXG4gICAgaWYgKHRoaXMuX3N0YXJ0ZWQpIGF3YWl0IHRoaXMuc3RvcCgpOyAvLyBUaGVuIHN0b3AgaWYgc3RhcnRlZFxuICAgIHJldHVybiB0aGlzLnN0YXJ0KCk7IC8vIFRoZW4gc3RhcnQgYWdhaW5cbiAgfVxuXG4gIGdldCBzdGFydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zdGFydGVkO1xuICB9XG5cbiAgZ2V0IHN0YXJ0aW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuX3N0YXJ0UHJvbWlzZTtcbiAgfVxuXG4gIHJlYWR5KCk6IFByb21pc2U8VD4ge1xuICAgIGlmICh0aGlzLl9zdGFydGVkKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2RhdGEpO1xuICAgIHJldHVybiB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPblN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQ2FuIGJlIG92ZXJyaWRlIGJ5IHN1YmNsYXNzZXNcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBuZ09uU3RhcnQoKTogUHJvbWlzZTxUPjtcbn1cbiJdfQ==
|
|
@@ -6944,6 +6944,9 @@ class StartableService {
|
|
|
6944
6944
|
get started() {
|
|
6945
6945
|
return this._started;
|
|
6946
6946
|
}
|
|
6947
|
+
get starting() {
|
|
6948
|
+
return !!this._startPromise;
|
|
6949
|
+
}
|
|
6947
6950
|
ready() {
|
|
6948
6951
|
if (this._started)
|
|
6949
6952
|
return Promise.resolve(this._data);
|
|
@@ -9593,7 +9596,7 @@ class NetworkService extends StartableService {
|
|
|
9593
9596
|
addListener(name, callback) {
|
|
9594
9597
|
this._listeners[name] = this._listeners[name] || [];
|
|
9595
9598
|
this._listeners[name].push(callback);
|
|
9596
|
-
// When
|
|
9599
|
+
// When unsubscribe, remove from the listener
|
|
9597
9600
|
return new Subscription(() => {
|
|
9598
9601
|
const index = this._listeners[name].indexOf(callback);
|
|
9599
9602
|
if (index !== -1) {
|
|
@@ -11035,7 +11038,7 @@ function restoreTrackedQueries(opts) {
|
|
|
11035
11038
|
const APP_GRAPHQL_TYPE_POLICIES = new InjectionToken('graphqlTypePolicies');
|
|
11036
11039
|
class GraphqlService extends StartableService {
|
|
11037
11040
|
constructor(platform, apollo, httpLink, network, storage, cryptoService, environment, typePolicies) {
|
|
11038
|
-
super(
|
|
11041
|
+
super(platform); // Wait network
|
|
11039
11042
|
this.platform = platform;
|
|
11040
11043
|
this.apollo = apollo;
|
|
11041
11044
|
this.httpLink = httpLink;
|
|
@@ -11050,13 +11053,6 @@ class GraphqlService extends StartableService {
|
|
|
11050
11053
|
this.customErrors = {};
|
|
11051
11054
|
this._debug = !environment.production;
|
|
11052
11055
|
this._defaultFetchPolicy = environment.apolloFetchPolicy;
|
|
11053
|
-
// Restart if network restart
|
|
11054
|
-
this.network.on('start', () => this.restart());
|
|
11055
|
-
// Clear cache
|
|
11056
|
-
this.network.on('resetCache', () => __awaiter(this, void 0, void 0, function* () {
|
|
11057
|
-
yield this.ready();
|
|
11058
|
-
yield this.clearCache();
|
|
11059
|
-
}));
|
|
11060
11056
|
// Listen network status
|
|
11061
11057
|
this._networkStatusChanged$ = network.onNetworkStatusChanges
|
|
11062
11058
|
.pipe(filter(isNotNil), distinctUntilChanged());
|
|
@@ -11461,10 +11457,11 @@ class GraphqlService extends StartableService {
|
|
|
11461
11457
|
}
|
|
11462
11458
|
clearCache(client) {
|
|
11463
11459
|
return __awaiter(this, void 0, void 0, function* () {
|
|
11464
|
-
client = (client || this.
|
|
11460
|
+
client = (client || this.client);
|
|
11465
11461
|
if (client) {
|
|
11466
|
-
const now = this._debug && Date.now();
|
|
11467
11462
|
console.info('[graphql] Clearing Apollo client\'s cache... ');
|
|
11463
|
+
const now = this._debug && Date.now();
|
|
11464
|
+
// Clearing the cache
|
|
11468
11465
|
yield client.cache.reset();
|
|
11469
11466
|
if (this._debug)
|
|
11470
11467
|
console.debug(`[graphql] Apollo client's cache cleared, in ${Date.now() - now}ms`);
|
|
@@ -11477,6 +11474,7 @@ class GraphqlService extends StartableService {
|
|
|
11477
11474
|
/* -- protected methods -- */
|
|
11478
11475
|
ngOnStart() {
|
|
11479
11476
|
return __awaiter(this, void 0, void 0, function* () {
|
|
11477
|
+
yield this.network.ready();
|
|
11480
11478
|
console.info('[graphql] Starting graphql...');
|
|
11481
11479
|
const mobile = this.platform.is('mobile') || this.platform.is('mobileweb');
|
|
11482
11480
|
const enableTrackMutationQueries = !mobile;
|
|
@@ -11612,6 +11610,10 @@ class GraphqlService extends StartableService {
|
|
|
11612
11610
|
console.error('[graphql] Failed to restore tracked queries from storage: ' + (err && err.message || err), err);
|
|
11613
11611
|
}
|
|
11614
11612
|
}
|
|
11613
|
+
// Listen for network restart
|
|
11614
|
+
this._subscription.add(this.network.on('start', () => this.restart()));
|
|
11615
|
+
// Listen for clear cache request, from network
|
|
11616
|
+
this._subscription.add(this.network.on('resetCache', () => this.clearCache()));
|
|
11615
11617
|
console.info('[graphql] Starting graphql [OK]');
|
|
11616
11618
|
return client;
|
|
11617
11619
|
});
|
|
@@ -13669,7 +13671,7 @@ class PlatformService {
|
|
|
13669
13671
|
return this._android && this._cordova;
|
|
13670
13672
|
}
|
|
13671
13673
|
get canDownload() {
|
|
13672
|
-
return !!this.downloader;
|
|
13674
|
+
return this._android && !!this.downloader;
|
|
13673
13675
|
}
|
|
13674
13676
|
width() {
|
|
13675
13677
|
return this.platform.width();
|
|
@@ -13712,7 +13714,7 @@ class PlatformService {
|
|
|
13712
13714
|
.then(() => {
|
|
13713
13715
|
this._started = true;
|
|
13714
13716
|
this._startPromise = undefined;
|
|
13715
|
-
console.info(`[platform] Starting platform [OK] {mobile: ${this._mobile}, touchUi: ${this.touchUi},
|
|
13717
|
+
console.info(`[platform] Starting platform [OK] {mobile: ${this._mobile}, touchUi: ${this.touchUi}, canDownload: ${this.canDownload}} in ${Date.now() - now}ms`);
|
|
13716
13718
|
// Update cache configuration when network changed
|
|
13717
13719
|
this.networkService.onNetworkStatusChanges.subscribe((type) => this.configureCache(type !== 'none'));
|
|
13718
13720
|
// Update authentication type
|
|
@@ -13763,20 +13765,22 @@ class PlatformService {
|
|
|
13763
13765
|
return __awaiter(this, void 0, void 0, function* () {
|
|
13764
13766
|
if (!request || !request.uri)
|
|
13765
13767
|
throw new Error('Missing argument \'request\' or \'request.uri\'');
|
|
13766
|
-
if (this.downloader) {
|
|
13767
|
-
request = Object.assign(
|
|
13768
|
+
if (this._android && this.downloader) {
|
|
13769
|
+
request = Object.assign({ visibleInDownloadsUi: true, notificationVisibility: NotificationVisibility.VisibleNotifyCompleted }, request);
|
|
13768
13770
|
try {
|
|
13771
|
+
console.debug('[platform] Downloading, using request: ' + JSON.stringify(request));
|
|
13769
13772
|
const location = yield this.downloader.download(request);
|
|
13770
13773
|
console.info('[platform] File successfully downloaded at:' + location);
|
|
13771
13774
|
return location;
|
|
13772
13775
|
}
|
|
13773
13776
|
catch (err) {
|
|
13774
|
-
console.error('[platform]
|
|
13777
|
+
console.error('[platform] Unable to download: ' + (err && err.message || err));
|
|
13775
13778
|
throw err;
|
|
13776
13779
|
}
|
|
13777
13780
|
}
|
|
13778
13781
|
// Fallback (no Cordova)
|
|
13779
13782
|
// Web mode: open URI using the browser
|
|
13783
|
+
// TODO: find a way to download under iOS (see https://www.c-sharpcorner.com/article/how-to-download-a-file-using-file-transfer-plugin-in-ionic-3/)
|
|
13780
13784
|
else {
|
|
13781
13785
|
console.warn('[platform] Cannot use Cordova downloader: using browser open()');
|
|
13782
13786
|
this.open(request.uri, '_system', 'location=no', true);
|
|
@@ -18446,9 +18450,11 @@ const MimeTypes = Object.freeze({
|
|
|
18446
18450
|
ANDROID_APK: 'application/vnd.android.package-archive'
|
|
18447
18451
|
});
|
|
18448
18452
|
class AppInstallUpgradeCard {
|
|
18449
|
-
constructor(modalCtrl, configService, cd, platform, network, environment) {
|
|
18453
|
+
constructor(modalCtrl, configService, toastController, translate, cd, platform, network, environment) {
|
|
18450
18454
|
this.modalCtrl = modalCtrl;
|
|
18451
18455
|
this.configService = configService;
|
|
18456
|
+
this.toastController = toastController;
|
|
18457
|
+
this.translate = translate;
|
|
18452
18458
|
this.cd = cd;
|
|
18453
18459
|
this.platform = platform;
|
|
18454
18460
|
this.network = network;
|
|
@@ -18456,6 +18462,7 @@ class AppInstallUpgradeCard {
|
|
|
18456
18462
|
this._subscription = new Subscription();
|
|
18457
18463
|
this._showUpdateOfflineFeature = false;
|
|
18458
18464
|
this.loading = true;
|
|
18465
|
+
this.downloading = false;
|
|
18459
18466
|
this.waitingNetwork = false;
|
|
18460
18467
|
this.showUpgradeWarning = true;
|
|
18461
18468
|
this.showOfflineWarning = true;
|
|
@@ -18477,18 +18484,8 @@ class AppInstallUpgradeCard {
|
|
|
18477
18484
|
this.offline = this.network.offline;
|
|
18478
18485
|
// Listen pod config
|
|
18479
18486
|
this._subscription.add(this.configService.config
|
|
18480
|
-
.
|
|
18481
|
-
|
|
18482
|
-
const installLinks = this.getAllInstallLinks(config);
|
|
18483
|
-
// Check for upgrade
|
|
18484
|
-
this.updateLinks = this.getCompatibleUpgradeLinks(installLinks, config);
|
|
18485
|
-
// Check for install links (if no upgrade need)
|
|
18486
|
-
this.installLinks = !this.updateLinks && this.getCompatibleInstallLinks(installLinks);
|
|
18487
|
-
setTimeout(() => {
|
|
18488
|
-
this.loading = false;
|
|
18489
|
-
this.markForCheck();
|
|
18490
|
-
}, 2000); // Add a delay, for animation
|
|
18491
|
-
}));
|
|
18487
|
+
.pipe(debounceTime(1000))
|
|
18488
|
+
.subscribe(config => this.checkNeedInstallOrUpdate(config)));
|
|
18492
18489
|
// Listen network changes
|
|
18493
18490
|
this._subscription.add(this.network.onNetworkStatusChanges
|
|
18494
18491
|
.pipe(
|
|
@@ -18496,42 +18493,70 @@ class AppInstallUpgradeCard {
|
|
|
18496
18493
|
//tap(() => this.waitingNetwork = false),
|
|
18497
18494
|
map(connectionType => connectionType === 'none'), distinctUntilChanged())
|
|
18498
18495
|
.subscribe(offline => {
|
|
18499
|
-
this.offline
|
|
18500
|
-
|
|
18496
|
+
if (this.offline !== offline) {
|
|
18497
|
+
this.offline = offline;
|
|
18498
|
+
this.markForCheck();
|
|
18499
|
+
}
|
|
18501
18500
|
}));
|
|
18502
18501
|
});
|
|
18503
18502
|
}
|
|
18504
18503
|
ngOnDestroy() {
|
|
18505
18504
|
this._subscription.unsubscribe();
|
|
18506
18505
|
}
|
|
18507
|
-
|
|
18506
|
+
download(event, link) {
|
|
18508
18507
|
return __awaiter(this, void 0, void 0, function* () {
|
|
18509
18508
|
if (!link || !link.url) {
|
|
18510
|
-
console.
|
|
18509
|
+
console.error('[install-upgrade-card] Missing required argument \'link.url\'');
|
|
18511
18510
|
return; // Skip
|
|
18512
18511
|
}
|
|
18513
|
-
|
|
18514
|
-
|
|
18515
|
-
|
|
18516
|
-
|
|
18517
|
-
|
|
18518
|
-
|
|
18519
|
-
|
|
18520
|
-
|
|
18512
|
+
this.downloading = true;
|
|
18513
|
+
try {
|
|
18514
|
+
console.info('[install-upgrade-card] User ask download of: ' + link.url);
|
|
18515
|
+
const location = this.platform.download({
|
|
18516
|
+
uri: link.url,
|
|
18517
|
+
title: link.name,
|
|
18518
|
+
filename: link.downloadFilename,
|
|
18519
|
+
mimeType: link.mimeType
|
|
18520
|
+
});
|
|
18521
|
+
console.info('[install-upgrade-card] File downloaded at: ' + location);
|
|
18522
|
+
}
|
|
18523
|
+
// Failed: display a toast
|
|
18524
|
+
catch (err) {
|
|
18525
|
+
console.error('[install-upgrade] Download failed: ' + (err && err.message || err));
|
|
18526
|
+
this.showToast({
|
|
18527
|
+
message: 'ERROR.DOWNLOAD_FAILED',
|
|
18528
|
+
messageParams: { error: err },
|
|
18529
|
+
type: 'error',
|
|
18530
|
+
showCloseButton: true
|
|
18531
|
+
});
|
|
18532
|
+
return; // Stop here
|
|
18533
|
+
}
|
|
18534
|
+
finally {
|
|
18535
|
+
this.downloading = false;
|
|
18536
|
+
this.markForCheck();
|
|
18537
|
+
}
|
|
18538
|
+
this.showToast({
|
|
18539
|
+
message: 'INFO.DOWNLOAD_UPDATE_SUCCEED',
|
|
18540
|
+
type: 'info',
|
|
18541
|
+
showCloseButton: true
|
|
18521
18542
|
});
|
|
18522
18543
|
});
|
|
18523
18544
|
}
|
|
18524
18545
|
tryOnline() {
|
|
18525
|
-
this
|
|
18526
|
-
|
|
18527
|
-
this.network.tryOnline({
|
|
18528
|
-
showLoadingToast: false,
|
|
18529
|
-
showOnlineToast: true,
|
|
18530
|
-
showOfflineToast: false
|
|
18531
|
-
})
|
|
18532
|
-
.then(() => {
|
|
18533
|
-
this.waitingNetwork = false;
|
|
18546
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
18547
|
+
this.waitingNetwork = true;
|
|
18534
18548
|
this.markForCheck();
|
|
18549
|
+
try {
|
|
18550
|
+
yield this.network.tryOnline({
|
|
18551
|
+
showLoadingToast: false,
|
|
18552
|
+
showOnlineToast: true,
|
|
18553
|
+
showOfflineToast: false
|
|
18554
|
+
});
|
|
18555
|
+
}
|
|
18556
|
+
finally {
|
|
18557
|
+
this.waitingNetwork = false;
|
|
18558
|
+
this.markForCheck();
|
|
18559
|
+
}
|
|
18535
18560
|
});
|
|
18536
18561
|
}
|
|
18537
18562
|
getPlatformName(platform) {
|
|
@@ -18548,6 +18573,23 @@ class AppInstallUpgradeCard {
|
|
|
18548
18573
|
return value;
|
|
18549
18574
|
}
|
|
18550
18575
|
/* -- private method -- */
|
|
18576
|
+
checkNeedInstallOrUpdate(config) {
|
|
18577
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
18578
|
+
console.info('[install] Check if need to install or upgrade...');
|
|
18579
|
+
try {
|
|
18580
|
+
const installLinks = this.getAllInstallLinks(config);
|
|
18581
|
+
// Check for upgrade
|
|
18582
|
+
this.updateLinks = this.getCompatibleUpgradeLinks(installLinks, config);
|
|
18583
|
+
// Check for install links (if no upgrade need)
|
|
18584
|
+
this.installLinks = !this.updateLinks && this.getCompatibleInstallLinks(installLinks);
|
|
18585
|
+
yield sleep(500); // Add a delay, for animation
|
|
18586
|
+
}
|
|
18587
|
+
finally {
|
|
18588
|
+
this.loading = false;
|
|
18589
|
+
this.markForCheck();
|
|
18590
|
+
}
|
|
18591
|
+
});
|
|
18592
|
+
}
|
|
18551
18593
|
getCompatibleInstallLinks(installLinks) {
|
|
18552
18594
|
// Cordova already running: not need to install
|
|
18553
18595
|
if (this.platform.is('cordova'))
|
|
@@ -18637,11 +18679,16 @@ class AppInstallUpgradeCard {
|
|
|
18637
18679
|
markForCheck() {
|
|
18638
18680
|
this.cd.markForCheck();
|
|
18639
18681
|
}
|
|
18682
|
+
showToast(opts) {
|
|
18683
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
18684
|
+
yield Toasts.show(this.toastController, this.translate, opts);
|
|
18685
|
+
});
|
|
18686
|
+
}
|
|
18640
18687
|
}
|
|
18641
18688
|
AppInstallUpgradeCard.decorators = [
|
|
18642
18689
|
{ type: Component, args: [{
|
|
18643
18690
|
selector: 'app-install-upgrade-card',
|
|
18644
|
-
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 <!-- Waiting spinner -->\n <ng-template #waitingSpinner>\n <ion-spinner *ngIf=\"waitingNetwork\" color=\"light\"></ion-spinner>\n </ng-template>\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 && updateLinks\"\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 updateLinks; 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.downloadFilename; else redirectButton\">\n\n <!-- Download using platform -->\n <ion-button *ngIf=\"platform.canDownload; else webDownloadButton\"\n (click)=\"
|
|
18691
|
+
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 <!-- Waiting spinner -->\n <ng-template #waitingSpinner>\n <ion-spinner *ngIf=\"waitingNetwork\" color=\"light\"></ion-spinner>\n </ng-template>\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 && updateLinks\"\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 updateLinks; 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.downloadFilename; else redirectButton\">\n\n <!-- Download using platform -->\n <ion-button *ngIf=\"platform.canDownload; else webDownloadButton\"\n (click)=\"download($event, asLink(link))\"\n [disabled]=\"downloading\"\n color=\"tertiary\" class=\"ion-float-end\">\n <ion-icon slot=\"start\" *ngIf=\"!downloading\" name=\"download\"></ion-icon>\n <ion-spinner slot=\"start\" class=\"ion-no-padding\" *ngIf=\"downloading\"></ion-spinner>\n <ion-label translate>COMMON.BTN_DOWNLOAD</ion-label>\n </ion-button>\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",
|
|
18645
18692
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
18646
18693
|
animations: [slideUpDownAnimation],
|
|
18647
18694
|
styles: ["ion-text small{font-size:85%}"]
|
|
@@ -18650,6 +18697,8 @@ AppInstallUpgradeCard.decorators = [
|
|
|
18650
18697
|
AppInstallUpgradeCard.ctorParameters = () => [
|
|
18651
18698
|
{ type: ModalController },
|
|
18652
18699
|
{ type: ConfigService },
|
|
18700
|
+
{ type: ToastController },
|
|
18701
|
+
{ type: TranslateService },
|
|
18653
18702
|
{ type: ChangeDetectorRef },
|
|
18654
18703
|
{ type: PlatformService },
|
|
18655
18704
|
{ type: NetworkService },
|