@sumaris-net/ngx-components 0.25.4 → 0.25.5
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 +18 -12
- 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/install/install-upgrade-card.component.js +18 -14
- package/fesm2015/sumaris-net.ngx-components.js +16 -12
- package/fesm2015/sumaris-net.ngx-components.js.map +1 -1
- package/package.json +1 -1
|
@@ -4,7 +4,7 @@ import { AlertController, ModalController, ToastController } from '@ionic/angula
|
|
|
4
4
|
import { Subscription } from 'rxjs';
|
|
5
5
|
import { ConfigService } from '../services/config.service';
|
|
6
6
|
import { PlatformService } from '../services/platform.service';
|
|
7
|
-
import { debounceTime, distinctUntilChanged, map } from 'rxjs/operators';
|
|
7
|
+
import { debounceTime, distinctUntilChanged, filter, map } 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';
|
|
@@ -52,7 +52,7 @@ export class AppInstallUpgradeCard {
|
|
|
52
52
|
this.offline = this.network.offline;
|
|
53
53
|
// Listen pod config
|
|
54
54
|
this._subscription.add(this.configService.config
|
|
55
|
-
.pipe(debounceTime(1000))
|
|
55
|
+
.pipe(debounceTime(1000), filter(() => this.network.online))
|
|
56
56
|
.subscribe(config => this.checkNeedInstallOrUpdate(config)));
|
|
57
57
|
// Listen network changes
|
|
58
58
|
this._subscription.add(this.network.onNetworkStatusChanges
|
|
@@ -130,12 +130,21 @@ export class AppInstallUpgradeCard {
|
|
|
130
130
|
this.upgradeLinks = this.getCompatibleUpgradeLinks(links, config);
|
|
131
131
|
// Check for install links (if no upgrade need)
|
|
132
132
|
this.installLinks = !this.upgradeLinks && this.getCompatibleInstallLinks(links);
|
|
133
|
-
yield sleep(
|
|
133
|
+
yield sleep(1000); // Add a delay, for animation
|
|
134
134
|
}
|
|
135
135
|
finally {
|
|
136
136
|
this.loading = false;
|
|
137
137
|
this.markForCheck();
|
|
138
138
|
}
|
|
139
|
+
// Listening downloading files
|
|
140
|
+
(this.upgradeLinks || []).forEach(link => {
|
|
141
|
+
const promise = this.platform.getDownloadingPromise(link.url);
|
|
142
|
+
// Listening download promise, if exists
|
|
143
|
+
if (promise) {
|
|
144
|
+
console.info(`[install-upgrade-card] Platform is already downloading this file \'${link.url}\': listening promise...`);
|
|
145
|
+
this.listenDownloadPromise(link, promise);
|
|
146
|
+
}
|
|
147
|
+
});
|
|
139
148
|
});
|
|
140
149
|
}
|
|
141
150
|
getCompatibleInstallLinks(installLinks) {
|
|
@@ -163,12 +172,6 @@ export class AppInstallUpgradeCard {
|
|
|
163
172
|
// Use min version as default version
|
|
164
173
|
upgradeLinks.forEach(link => {
|
|
165
174
|
link.version = link.version || appMinVersionFromPod;
|
|
166
|
-
const promise = this.platform.getDownloadingPromise(link.url);
|
|
167
|
-
// Listening download promise, if exists
|
|
168
|
-
if (promise) {
|
|
169
|
-
console.info(`[install-upgrade-card] Platform is already downloading this file \'${link.url}\': listening promise...`);
|
|
170
|
-
this.listenDownloadPromise(link, promise);
|
|
171
|
-
}
|
|
172
175
|
});
|
|
173
176
|
return isNotEmptyArray(upgradeLinks) ? upgradeLinks : undefined;
|
|
174
177
|
}
|
|
@@ -246,11 +249,12 @@ export class AppInstallUpgradeCard {
|
|
|
246
249
|
return __awaiter(this, void 0, void 0, function* () {
|
|
247
250
|
if (!link || !promise)
|
|
248
251
|
return; // Skip
|
|
249
|
-
if (!link.downloading) {
|
|
250
|
-
link.downloading = true;
|
|
251
|
-
this.markForCheck();
|
|
252
|
-
}
|
|
253
252
|
try {
|
|
253
|
+
// Mark link as loading
|
|
254
|
+
if (!link.downloading) {
|
|
255
|
+
link.downloading = true;
|
|
256
|
+
this.markForCheck();
|
|
257
|
+
}
|
|
254
258
|
const location = yield promise;
|
|
255
259
|
console.info('[install-upgrade-card] File downloaded at: ' + location);
|
|
256
260
|
}
|
|
@@ -327,4 +331,4 @@ AppInstallUpgradeCard.propDecorators = {
|
|
|
327
331
|
showUpdateOfflineFeature: [{ type: Input }],
|
|
328
332
|
onUpdateOfflineModeClick: [{ type: Output }]
|
|
329
333
|
};
|
|
330
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFsbC11cGdyYWRlLWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL2luc3RhbGwvaW5zdGFsbC11cGdyYWRlLWNhcmQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDNUksT0FBTyxFQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDakYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUVsQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBQyxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUMvRSxPQUFPLEVBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDN0YsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBQ3BFLE9BQU8sRUFBbUIsTUFBTSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDN0QsT0FBTyxFQUFDLGdCQUFn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WUFBWSxFQUFFLENBQUM7UUFDN0IsQ0FBQztLQUFBOzs7WUE1VkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSwwQkFBMEI7Z0JBQ3BDLGc4TEFBa0Q7Z0JBRWxELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2dCQUMvQyxVQUFVLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQzs7YUFDbkM7OztZQXZDd0IsZUFBZTtZQUdoQyxhQUFhO1lBSHFCLGVBQWU7WUFBakQsZUFBZTtZQWFmLGdCQUFnQjtZQWRTLGlCQUFpQjtZQUsxQyxlQUFlO1lBRWYsY0FBYzs0Q0EwRWpCLE1BQU0sU0FBQyxXQUFXOzs7c0JBM0JwQixLQUFLO2lDQUNMLEtBQUs7aUNBQ0wsS0FBSztnQ0FDTCxLQUFLO3VDQUVMLEtBQUs7dUNBV0wsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FsZXJ0Q29udHJvbGxlciwgTW9kYWxDb250cm9sbGVyLCBUb2FzdENvbnRyb2xsZXJ9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7Q29uZmlndXJhdGlvbn0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvY29uZmlnLm1vZGVsJztcbmltcG9ydCB7Q29uZmlnU2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHtQbGF0Zm9ybVNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL3BsYXRmb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7TmV0d29ya1NlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL25ldHdvcmsuc2VydmljZSc7XG5pbXBvcnQge0NPUkVfQ09ORklHX09QVElPTlN9IGZyb20gJy4uL3NlcnZpY2VzL2NvbmZpZy9jb3JlLmNvbmZpZyc7XG5pbXBvcnQge1ZlcnNpb25VdGlsc30gZnJvbSAnLi4vLi4vc2hhcmVkL3ZlcnNpb24vdmVyc2lvbnMnO1xuaW1wb3J0IHtzbGlkZVVwRG93bkFuaW1hdGlvbn0gZnJvbSAnLi4vLi4vc2hhcmVkL21hdGVyaWFsL21hdGVyaWFsLmFuaW1hdGlvbnMnO1xuaW1wb3J0IHtpc05pbE9yQmxhbmssIGlzTm90RW1wdHlBcnJheSwgaXNOb3ROaWxPckJsYW5rLCBzbGVlcH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQge0VOVklST05NRU5UfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHtTaG93VG9hc3RPcHRpb25zLCBUb2FzdHN9IGZyb20gJy4uLy4uL3NoYXJlZC90b2FzdHMnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7UGVlcn0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvcGVlci5tb2RlbCc7XG5cblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIEluc3RhbGxBcHBMaW5rIHtcbiAgbmFtZTogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgcGxhdGZvcm0/OiAnYW5kcm9pZCcgfCAnaW9zJztcbiAgdmVyc2lvbj86IHN0cmluZztcbiAgZmlsZW5hbWU/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgbWltZVR5cGU/OiBzdHJpbmc7XG4gIGRvd25sb2FkaW5nPzogYm9vbGVhbjtcbn1cblxuY29uc3QgTWltZVR5cGVzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIEFORFJPSURfQVBLOiAnYXBwbGljYXRpb24vdm5kLmFuZHJvaWQucGFja2FnZS1hcmNoaXZlJ1xufSk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1pbnN0YWxsLXVwZ3JhZGUtY2FyZCcsXG4gIHRlbXBsYXRlVXJsOiAnaW5zdGFsbC11cGdyYWRlLWNhcmQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pbnN0YWxsLXVwZ3JhZGUtY2FyZC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgYW5pbWF0aW9uczogW3NsaWRlVXBEb3duQW5pbWF0aW9uXVxufSlcbmV4cG9ydCBjbGFzcyBBcHBJbnN0YWxsVXBncmFkZUNhcmQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIF9zaG93VXBkYXRlT2ZmbGluZUZlYXR1cmUgPSBmYWxzZTtcblxuICBsb2FkaW5nID0gdHJ1ZTtcbiAgd2FpdGluZ05ldHdvcmsgPSBmYWxzZTtcbiAgaW5zdGFsbExpbmtzOiBJbnN0YWxsQXBwTGlua1tdO1xuICB1cGdyYWRlTGlua3M6IEluc3RhbGxBcHBMaW5rW107XG4gIG9mZmxpbmU6IGJvb2xlYW47XG4gIHVwZ3JhZGVWZXJzaW9uOiBzdHJpbmc7XG4gIGNhbkRvd25sb2FkOiBib29sZWFuO1xuXG4gIEBJbnB1dCgpIGlzTG9naW46IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNob3dVcGdyYWRlV2FybmluZyA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dPZmZsaW5lV2FybmluZyA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dJbnN0YWxsQnV0dG9uID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgc2V0IHNob3dVcGRhdGVPZmZsaW5lRmVhdHVyZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSA9PT0gdGhpcy5fc2hvd1VwZGF0ZU9mZmxpbmVGZWF0dXJlKSByZXR1cm47IC8vIFNraXBcbiAgICB0aGlzLl9zaG93VXBkYXRlT2ZmbGluZUZlYXR1cmUgPSB2YWx1ZTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2V0IHNob3dVcGRhdGVPZmZsaW5lRmVhdHVyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2hvd1VwZGF0ZU9mZmxpbmVGZWF0dXJlO1xuICB9XG5cbiAgQE91dHB1dCgpIG9uVXBkYXRlT2ZmbGluZU1vZGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8VUlFdmVudD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG1vZGFsQ3RybDogTW9kYWxDb250cm9sbGVyLFxuICAgIHByaXZhdGUgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIHRvYXN0Q29udHJvbGxlcjogVG9hc3RDb250cm9sbGVyLFxuICAgIHByaXZhdGUgYWxlcnRDb250cm9sbGVyOiBBbGVydENvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHVibGljIHBsYXRmb3JtOiBQbGF0Zm9ybVNlcnZpY2UsXG4gICAgcHVibGljIG5ldHdvcms6IE5ldHdvcmtTZXJ2aWNlLFxuICAgIEBJbmplY3QoRU5WSVJPTk1FTlQpIHByb3RlY3RlZCBlbnZpcm9ubWVudFxuICApIHtcbiAgfVxuXG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG5cbiAgICBhd2FpdCB0aGlzLnBsYXRmb3JtLnJlYWR5KCk7XG5cbiAgICB0aGlzLm9mZmxpbmUgPSB0aGlzLm5ldHdvcmsub2ZmbGluZTtcblxuICAgIC8vIExpc3RlbiBwb2QgY29uZmlnXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMuY29uZmlnU2VydmljZS5jb25maWdcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDEwMDApXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZShjb25maWcgPT4gdGhpcy5jaGVja05lZWRJbnN0YWxsT3JVcGRhdGUoY29uZmlnKSkpO1xuXG4gICAgLy8gTGlzdGVuIG5ldHdvcmsgY2hhbmdlc1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLm5ldHdvcmsub25OZXR3b3JrU3RhdHVzQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICAvL2RlYm91bmNlVGltZSg0NTApLFxuICAgICAgICAgIC8vdGFwKCgpID0+IHRoaXMud2FpdGluZ05ldHdvcmsgPSBmYWxzZSksXG4gICAgICAgICAgbWFwKGNvbm5lY3Rpb25UeXBlID0+IGNvbm5lY3Rpb25UeXBlID09PSAnbm9uZScpLFxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKG9mZmxpbmUgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLm9mZmxpbmUgIT09IG9mZmxpbmUpIHtcbiAgICAgICAgICAgIHRoaXMub2ZmbGluZSA9IG9mZmxpbmU7XG4gICAgICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICB0aGlzLm9uVXBkYXRlT2ZmbGluZU1vZGVDbGljay5jb21wbGV0ZSgpO1xuICAgIHRoaXMuaW5zdGFsbExpbmtzID0gbnVsbDtcbiAgICB0aGlzLnVwZ3JhZGVMaW5rcyA9IG51bGw7XG4gIH1cblxuICBhc3luYyBkb3dubG9hZChldmVudDogVUlFdmVudCwgbGluazogSW5zdGFsbEFwcExpbmspIHtcbiAgICBpZiAoIWxpbmsgfHwgIWxpbmsudXJsKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbaW5zdGFsbC11cGdyYWRlLWNhcmRdIE1pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQgXFwnbGluay51cmxcXCcnKTtcbiAgICAgIHJldHVybjsgLy8gU2tpcFxuICAgIH1cblxuICAgIGNvbnN0IGpvYiA9IHRoaXMucGxhdGZvcm0uZG93bmxvYWQoe1xuICAgICAgdXJpOiBsaW5rLnVybCxcbiAgICAgIHRpdGxlOiBsaW5rLnRpdGxlLFxuICAgICAgZmlsZW5hbWU6IGxpbmsuZmlsZW5hbWUsXG4gICAgICBtaW1lVHlwZTogbGluay5taW1lVHlwZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMubGlzdGVuRG93bmxvYWRQcm9taXNlKGxpbmssIGpvYik7XG4gIH1cblxuICBhc3luYyB0cnlPbmxpbmUoKSB7XG4gICAgdGhpcy53YWl0aW5nTmV0d29yayA9IHRydWU7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLm5ldHdvcmsudHJ5T25saW5lKHtcbiAgICAgICAgc2hvd0xvYWRpbmdUb2FzdDogZmFsc2UsXG4gICAgICAgIHNob3dPbmxpbmVUb2FzdDogdHJ1ZSxcbiAgICAgICAgc2hvd09mZmxpbmVUb2FzdDogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgIHRoaXMud2FpdGluZ05ldHdvcmsgPSBmYWxzZTtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0UGxhdGZvcm1OYW1lKHBsYXRmb3JtOiAnYW5kcm9pZCd8J2lvcycpIHtcbiAgICBzd2l0Y2ggKHBsYXRmb3JtKSB7XG4gICAgICBjYXNlICdhbmRyb2lkJzpcbiAgICAgICAgcmV0dXJuICdBbmRyb2lkJztcbiAgICAgIGNhc2UgJ2lvcyc6XG4gICAgICAgIHJldHVybiAnaU9TJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICBhc0xpbmsodmFsdWU6IGFueSk6IEluc3RhbGxBcHBMaW5rIHtcbiAgICByZXR1cm4gdmFsdWUgYXMgSW5zdGFsbEFwcExpbms7XG4gIH1cblxuICAvKiAtLSBwcml2YXRlIG1ldGhvZCAgLS0gKi9cblxuICBwcml2YXRlIGFzeW5jIGNoZWNrTmVlZEluc3RhbGxPclVwZGF0ZShjb25maWc6IENvbmZpZ3VyYXRpb24pIHtcbiAgICBjb25zb2xlLmluZm8oJ1tpbnN0YWxsXSBDaGVjayBpZiBuZWVkIHRvIGluc3RhbGwgb3IgdXBncmFkZS4uLicpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxpbmtzID0gdGhpcy5nZXRMaW5rcyhjb25maWcpO1xuXG4gICAgICAvLyBDaGVjayBmb3IgdXBncmFkZVxuICAgICAgdGhpcy51cGdyYWRlTGlua3MgPSB0aGlzLmdldENvbXBhdGlibGVVcGdyYWRlTGlua3MobGlua3MsIGNvbmZpZyk7XG5cbiAgICAgIC8vIENoZWNrIGZvciBpbnN0YWxsIGxpbmtzIChpZiBubyB1cGdyYWRlIG5lZWQpXG4gICAgICB0aGlzLmluc3RhbGxMaW5rcyA9ICF0aGlzLnVwZ3JhZGVMaW5rcyAmJiB0aGlzLmdldENvbXBhdGlibGVJbnN0YWxsTGlua3MobGlua3MpO1xuXG4gICAgICBhd2FpdCBzbGVlcCg1MDApOyAvLyBBZGQgYSBkZWxheSwgZm9yIGFuaW1hdGlvblxuXG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29tcGF0aWJsZUluc3RhbGxMaW5rcyhpbnN0YWxsTGlua3M6IEluc3RhbGxBcHBMaW5rW10pOiBJbnN0YWxsQXBwTGlua1tdIHtcblxuICAgIC8vIENvcmRvdmEgYWxyZWFkeSBydW5uaW5nOiBub3QgbmVlZCB0byBpbnN0YWxsXG4gICAgaWYgKHRoaXMucGxhdGZvcm0uaXMoJ2NvcmRvdmEnKSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIC8vIElmIG1vYmlsZSB3ZWI6IHJldHVybiBhbGxcbiAgICBpZiAodGhpcy5wbGF0Zm9ybS5pcygnbW9iaWxld2ViJykpIHtcbiAgICAgIHJldHVybiBpbnN0YWxsTGlua3M7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29tcGF0aWJsZVVwZ3JhZGVMaW5rcyhpbnN0YWxsTGlua3M6IEluc3RhbGxBcHBMaW5rW10sIGNvbmZpZzogQ29uZmlndXJhdGlvbik6IEluc3RhbGxBcHBMaW5rW10ge1xuICAgIGNvbnN0IGFwcFZlcnNpb24gPSB0aGlzLmVudmlyb25tZW50LnZlcnNpb247XG4gICAgY29uc3QgYXBwTWluVmVyc2lvbkZyb21Qb2QgPSBjb25maWcuZ2V0UHJvcGVydHkoQ09SRV9DT05GSUdfT1BUSU9OUy5BUFBfTUlOX1ZFUlNJT04pO1xuXG4gICAgaWYgKCFhcHBWZXJzaW9uKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdNaXNzaW5nIHZhbHVlIGZvciBcXCdlbnZpcm9ubWVudC52ZXJzaW9uXFwnOiBjYW5ub3QgY2hlY2sgYXBwIGNvbXBhdGliaWxpdHkhJyk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IG5lZWRVcGdyYWRlID0gYXBwTWluVmVyc2lvbkZyb21Qb2QgJiYgIVZlcnNpb25VdGlscy5pc0NvbXBhdGlibGUoYXBwTWluVmVyc2lvbkZyb21Qb2QsIGFwcFZlcnNpb24pO1xuICAgIGlmICghbmVlZFVwZ3JhZGUpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCB1cGdyYWRlTGlua3MgPSBpbnN0YWxsTGlua3NcbiAgICAgIC5maWx0ZXIobGluayA9PiB0aGlzLnBsYXRmb3JtLmlzKCdtb2JpbGV3ZWInKSB8fCAobGluay5wbGF0Zm9ybSAmJiB0aGlzLnBsYXRmb3JtLmlzKGxpbmsucGxhdGZvcm0pKSk7XG5cbiAgICAvLyBVc2UgbWluIHZlcnNpb24gYXMgZGVmYXVsdCB2ZXJzaW9uXG4gICAgdXBncmFkZUxpbmtzLmZvckVhY2gobGluayA9PiB7XG4gICAgICBsaW5rLnZlcnNpb24gPSBsaW5rLnZlcnNpb24gfHwgYXBwTWluVmVyc2lvbkZyb21Qb2Q7XG5cbiAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLnBsYXRmb3JtLmdldERvd25sb2FkaW5nUHJvbWlzZShsaW5rLnVybCk7XG5cbiAgICAgIC8vIExpc3RlbmluZyBkb3dubG9hZCBwcm9taXNlLCBpZiBleGlzdHNcbiAgICAgIGlmIChwcm9taXNlKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW2luc3RhbGwtdXBncmFkZS1jYXJkXSBQbGF0Zm9ybSBpcyBhbHJlYWR5IGRvd25sb2FkaW5nIHRoaXMgZmlsZSBcXCcke2xpbmsudXJsfVxcJzogbGlzdGVuaW5nIHByb21pc2UuLi5gKTtcbiAgICAgICAgdGhpcy5saXN0ZW5Eb3dubG9hZFByb21pc2UobGluaywgcHJvbWlzZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaXNOb3RFbXB0eUFycmF5KHVwZ3JhZGVMaW5rcykgPyB1cGdyYWRlTGlua3MgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGdldExpbmtzKGNvbmZpZzogQ29uZmlndXJhdGlvbik6IEluc3RhbGxBcHBMaW5rW10ge1xuICAgIGNvbnN0IHJlc3VsdDogSW5zdGFsbEFwcExpbmtbXSA9IFtdO1xuXG4gICAgLy8gQW5kcm9pZFxuICAgIHtcbiAgICAgIC8vIEdldCBVUkwgKGZyb20gY29uZmlnLCBvciBlbnZpcm9ubWVudClcbiAgICAgIGxldCB1cmwgPSBjb25maWcuZ2V0UHJvcGVydHkoQ09SRV9DT05GSUdfT1BUSU9OUy5BTkRST0lEX0lOU1RBTExfVVJMKTtcbiAgICAgIGlmIChpc05pbE9yQmxhbmsodXJsKSkgdXJsID0gdGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0QW5kcm9pZEluc3RhbGxVcmwgfHwgbnVsbDtcblxuICAgICAgLy8gUmVzb2x2ZSByZWxhdGl2ZSBVUkxcbiAgICAgIGNvbnN0IHBlZXIgPSB0aGlzLm5ldHdvcmsucGVlcjtcbiAgICAgIGlmIChwZWVyICYmICh1cmwuc3RhcnRzV2l0aCgnLi8nKSB8fCB1cmwuc3RhcnRzV2l0aCgnLycpKSkge1xuICAgICAgICB1cmwgPSBQZWVyLnBhdGgocGVlciwgdXJsKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWluVmVyc2lvbiA9IGNvbmZpZy5nZXRQcm9wZXJ0eShDT1JFX0NPTkZJR19PUFRJT05TLkFQUF9NSU5fVkVSU0lPTik7XG5cbiAgICAgIC8vIENvbXB1dGUgQXBwIG5hbWVcbiAgICAgIGNvbnN0IG5hbWU6IHN0cmluZyA9IGlzTm90TmlsT3JCbGFuayh1cmwpICYmIGNvbmZpZy5sYWJlbCB8fCB0aGlzLmVudmlyb25tZW50LmRlZmF1bHRBcHBOYW1lIHx8ICdTVU1BUmlTJztcblxuICAgICAgaWYgKHVybCkge1xuICAgICAgICBsZXQgdGl0bGU6IHN0cmluZztcbiAgICAgICAgbGV0IG1pbWVUeXBlOiBzdHJpbmc7XG5cbiAgICAgICAgLy8gR2V0IGZpbGUgbmFtZVxuICAgICAgICBsZXQgZmlsZW5hbWUgPSB0aGlzLmdldEZpbGVuYW1lKHVybCk7XG4gICAgICAgIGxldCB2ZXJzaW9uID0gbWluVmVyc2lvbiB8fCAnbGF0ZXN0JztcblxuICAgICAgICAvLyBPSywgdGhpcyBpcyBhIGRvd25sb2FkYWJsZSBBUEsgZmlsZSAoZS5nLiBOT1QgYSBsaW5rIHRvIGEgcGxheXN0b3JlKVxuICAgICAgICBpZiAoZmlsZW5hbWU/LmVuZHNXaXRoKCcuYXBrJykpIHtcbiAgICAgICAgICAvLyBEZWZpbmUgbWltZSB0eXBlXG4gICAgICAgICAgbWltZVR5cGUgPSBNaW1lVHlwZXMuQU5EUk9JRF9BUEs7XG5cbiAgICAgICAgICAvLyBHZXQgdGhlIGZpbGUgdmVyc2lvbiAoaWYgYW55KVxuICAgICAgICAgIGNvbnN0IHZlcnNpb25NYXRjaGVzID0gLy12KFsxLTldWzAtOV0qXFwuWzAtOV0rXFwuKDo/KDo/YWxwaGF8YmV0YXxyYyk/WzAtOV0qKSkvaS5leGVjKGZpbGVuYW1lKTtcbiAgICAgICAgICB2ZXJzaW9uID0gdmVyc2lvbk1hdGNoZXMgJiYgdmVyc2lvbk1hdGNoZXNbMV0gfHwgdmVyc2lvbjtcblxuICAgICAgICAgIC8vIENvbXB1dGUgYSBuZXcgZmlsZSBuYW1lLCB3aXRoIHRoZSB2ZXJzaW9uXG4gICAgICAgICAgaWYgKGlzTm90TmlsT3JCbGFuayhuYW1lKSAmJiB2ZXJzaW9uICE9PSAnbGF0ZXN0Jykge1xuICAgICAgICAgICAgZmlsZW5hbWUgPSBgJHtuYW1lfS12JHt2ZXJzaW9ufS5hcGtgLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB0aXRsZSA9IGAke25hbWV9IHYke3ZlcnNpb259YDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlbHNlIHtcblxuICAgICAgICAgICAgLy8gUmVwbGFjZSAnbGF0ZXN0JyB3aXRoIHRoZSBhcHAgdmVyc2lvbiwgaWYgcHJlc2VudFxuICAgICAgICAgICAgaWYgKGZpbGVuYW1lLmluZGV4T2YoJ2xhdGVzdCcpKSB7XG4gICAgICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUucmVwbGFjZSgnbGF0ZXN0JywgdmVyc2lvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0LnB1c2goeyBuYW1lLCB1cmwsIHBsYXRmb3JtOiAnYW5kcm9pZCcsIHZlcnNpb24sIGZpbGVuYW1lLCB0aXRsZSwgbWltZVR5cGUgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gaU9TIC0gVE9ET1xuICAgIC8ve1xuICAgIC8vICAoLi4uKVxuICAgIC8vfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmlsZW5hbWUodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghdXJsKSByZXR1cm47XG4gICAgLy8gR2V0IGxhc3QgcGFydCAob3IgYWxsIHN0cmluZywgaWYgbm8gJy8nKVxuICAgIGxldCBmaWxlbmFtZSA9IHVybC5zdWJzdHJpbmcodXJsLmxhc3RJbmRleE9mKCcvJykrMSk7XG5cbiAgICBjb25zdCBxdWVyeVBhcmFtSW5kZXggPSBmaWxlbmFtZS5pbmRleE9mKCc/Jyk7XG4gICAgaWYgKHF1ZXJ5UGFyYW1JbmRleCAhPT0gLTEpIHtcbiAgICAgIC8vIFJlbW92ZSBxdWVyeSBwYXJhbXNcbiAgICAgIHJldHVybiBmaWxlbmFtZS5zdWJzdHJpbmcoMCwgcXVlcnlQYXJhbUluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsZW5hbWU7XG4gIH1cblxuICBwcml2YXRlIG1hcmtGb3JDaGVjaygpIHtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzaG93VG9hc3Qob3B0czogU2hvd1RvYXN0T3B0aW9ucykge1xuICAgIGF3YWl0IFRvYXN0cy5zaG93KHRoaXMudG9hc3RDb250cm9sbGVyLCB0aGlzLnRyYW5zbGF0ZSwgb3B0cyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxpc3RlbkRvd25sb2FkUHJvbWlzZShsaW5rOiBJbnN0YWxsQXBwTGluaywgcHJvbWlzZTogUHJvbWlzZTxzdHJpbmc+KSB7XG4gICAgaWYgKCFsaW5rIHx8ICFwcm9taXNlKSByZXR1cm47IC8vIFNraXBcblxuICAgIGlmICghbGluay5kb3dubG9hZGluZykge1xuICAgICAgbGluay5kb3dubG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QgbG9jYXRpb24gPSBhd2FpdCBwcm9taXNlO1xuICAgICAgY29uc29sZS5pbmZvKCdbaW5zdGFsbC11cGdyYWRlLWNhcmRdIEZpbGUgZG93bmxvYWRlZCBhdDogJyArIGxvY2F0aW9uKTtcbiAgICB9XG4gICAgICAvLyBGYWlsZWQ6IGRpc3BsYXkgYSB0b2FzdFxuICAgIGNhdGNoKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignW2luc3RhbGwtdXBncmFkZV0gRG93bmxvYWQgZmFpbGVkOiAnICsgKGVyciAmJiBlcnIubWVzc2FnZSB8fCBlcnIpKTtcbiAgICAgIHRoaXMuc2hvd0Rvd25sb2FkRmFpbGVkVG9hc3QoZXJyKTtcbiAgICB9XG4gICAgZmluYWxseSB7XG4gICAgICBsaW5rLmRvd25sb2FkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnNob3dEb3dubG9hZENvbXBsZXRlRGlhbG9nKCk7XG4gIH1cblxuICBwcml2YXRlIHNob3dEb3dubG9hZEZhaWxlZFRvYXN0KGVycikge1xuICAgIHJldHVybiB0aGlzLnNob3dUb2FzdCh7XG4gICAgICBtZXNzYWdlOiAnRVJST1IuRE9XTkxPQURfRkFJTEVEJyxcbiAgICAgIG1lc3NhZ2VQYXJhbXM6IHtlcnJvcjogZXJyfSxcbiAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICBzaG93Q2xvc2VCdXR0b246IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2hvd0Rvd25sb2FkQ29tcGxldGVEaWFsb2coKSB7XG4gICAgaWYgKCF0aGlzLl9zdWJzY3JpcHRpb24pIHJldHVybjsgLy8gU2tpcCBpZiBjb21wb25lbnQgaGFzIGJlZW4gZGVzdHJveWVkXG5cbiAgICBjb25zdCB0cmFuc2xhdGlvbnMgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZS5nZXQoW1xuICAgICAgJ0lORk8uQUxFUlRfSEVBREVSJyxcbiAgICAgICdJTkZPLkRPV05MT0FEX1VQREFURV9TVUNDRUVEJyxcbiAgICAgICdDT01NT04uQlROX0NMT1NFJ1xuICAgIF0pLnRvUHJvbWlzZSgpO1xuICAgIGNvbnN0IGFsZXJ0ID0gYXdhaXQgdGhpcy5hbGVydENvbnRyb2xsZXIuY3JlYXRlKHtcbiAgICAgIGhlYWRlcjogdHJhbnNsYXRpb25zWydJTkZPLkFMRVJUX0hFQURFUiddLFxuICAgICAgbWVzc2FnZTogdHJhbnNsYXRpb25zWydJTkZPLkRPV05MT0FEX1VQREFURV9TVUNDRUVEJ10sXG4gICAgICBidXR0b25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiB0cmFuc2xhdGlvbnNbJ0NPTU1PTi5CVE5fQ0xPU0UnXSxcbiAgICAgICAgICByb2xlOiAnY2FuY2VsJyxcbiAgICAgICAgICBjc3NDbGFzczogJ3NlY29uZGFyeSdcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgYXdhaXQgYWxlcnQucHJlc2VudCgpO1xuICAgIGF3YWl0IGFsZXJ0Lm9uRGlkRGlzbWlzcygpO1xuICB9XG59XG4iXX0=
|
|
334
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFsbC11cGdyYWRlLWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL2luc3RhbGwvaW5zdGFsbC11cGdyYWRlLWNhcmQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDNUksT0FBTyxFQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDakYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUVsQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBQyxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFDL0UsT0FBTyxFQUFDLFlBQVksRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQzdGLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUNwRSxPQUFPLEVBQW1CLE1BQU0sRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzdELE9BQU8s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QixDQUFDO2dCQUNyRCxPQUFPLEVBQUU7b0JBQ1A7d0JBQ0UsSUFBSSxFQUFFLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQzt3QkFDdEMsSUFBSSxFQUFFLFFBQVE7d0JBQ2QsUUFBUSxFQUFFLFdBQVc7cUJBQ3RCO2lCQUNGO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsTUFBTSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdEIsTUFBTSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDN0IsQ0FBQztLQUFBOzs7WUFsV0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSwwQkFBMEI7Z0JBQ3BDLGc4TEFBa0Q7Z0JBRWxELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2dCQUMvQyxVQUFVLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQzs7YUFDbkM7OztZQXZDd0IsZUFBZTtZQUdoQyxhQUFhO1lBSHFCLGVBQWU7WUFBakQsZUFBZTtZQWFmLGdCQUFnQjtZQWRTLGlCQUFpQjtZQUsxQyxlQUFlO1lBRWYsY0FBYzs0Q0EwRWpCLE1BQU0sU0FBQyxXQUFXOzs7c0JBM0JwQixLQUFLO2lDQUNMLEtBQUs7aUNBQ0wsS0FBSztnQ0FDTCxLQUFLO3VDQUVMLEtBQUs7dUNBV0wsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FsZXJ0Q29udHJvbGxlciwgTW9kYWxDb250cm9sbGVyLCBUb2FzdENvbnRyb2xsZXJ9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7Q29uZmlndXJhdGlvbn0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvY29uZmlnLm1vZGVsJztcbmltcG9ydCB7Q29uZmlnU2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHtQbGF0Zm9ybVNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL3BsYXRmb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtOZXR3b3JrU2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvbmV0d29yay5zZXJ2aWNlJztcbmltcG9ydCB7Q09SRV9DT05GSUdfT1BUSU9OU30gZnJvbSAnLi4vc2VydmljZXMvY29uZmlnL2NvcmUuY29uZmlnJztcbmltcG9ydCB7VmVyc2lvblV0aWxzfSBmcm9tICcuLi8uLi9zaGFyZWQvdmVyc2lvbi92ZXJzaW9ucyc7XG5pbXBvcnQge3NsaWRlVXBEb3duQW5pbWF0aW9ufSBmcm9tICcuLi8uLi9zaGFyZWQvbWF0ZXJpYWwvbWF0ZXJpYWwuYW5pbWF0aW9ucyc7XG5pbXBvcnQge2lzTmlsT3JCbGFuaywgaXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbE9yQmxhbmssIHNsZWVwfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7RU5WSVJPTk1FTlR9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQge1Nob3dUb2FzdE9wdGlvbnMsIFRvYXN0c30gZnJvbSAnLi4vLi4vc2hhcmVkL3RvYXN0cyc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtQZWVyfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9wZWVyLm1vZGVsJztcblxuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSW5zdGFsbEFwcExpbmsge1xuICBuYW1lOiBzdHJpbmc7XG4gIHVybDogc3RyaW5nO1xuICBwbGF0Zm9ybT86ICdhbmRyb2lkJyB8ICdpb3MnO1xuICB2ZXJzaW9uPzogc3RyaW5nO1xuICBmaWxlbmFtZT86IHN0cmluZztcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBtaW1lVHlwZT86IHN0cmluZztcbiAgZG93bmxvYWRpbmc/OiBib29sZWFuO1xufVxuXG5jb25zdCBNaW1lVHlwZXMgPSBPYmplY3QuZnJlZXplKHtcbiAgQU5EUk9JRF9BUEs6ICdhcHBsaWNhdGlvbi92bmQuYW5kcm9pZC5wYWNrYWdlLWFyY2hpdmUnXG59KTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWluc3RhbGwtdXBncmFkZS1jYXJkJyxcbiAgdGVtcGxhdGVVcmw6ICdpbnN0YWxsLXVwZ3JhZGUtY2FyZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2luc3RhbGwtdXBncmFkZS1jYXJkLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBhbmltYXRpb25zOiBbc2xpZGVVcERvd25BbmltYXRpb25dXG59KVxuZXhwb3J0IGNsYXNzIEFwcEluc3RhbGxVcGdyYWRlQ2FyZCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBwcml2YXRlIF9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgX3Nob3dVcGRhdGVPZmZsaW5lRmVhdHVyZSA9IGZhbHNlO1xuXG4gIGxvYWRpbmcgPSB0cnVlO1xuICB3YWl0aW5nTmV0d29yayA9IGZhbHNlO1xuICBpbnN0YWxsTGlua3M6IEluc3RhbGxBcHBMaW5rW107XG4gIHVwZ3JhZGVMaW5rczogSW5zdGFsbEFwcExpbmtbXTtcbiAgb2ZmbGluZTogYm9vbGVhbjtcbiAgdXBncmFkZVZlcnNpb246IHN0cmluZztcbiAgY2FuRG93bmxvYWQ6IGJvb2xlYW47XG5cbiAgQElucHV0KCkgaXNMb2dpbjogYm9vbGVhbjtcbiAgQElucHV0KCkgc2hvd1VwZ3JhZGVXYXJuaW5nID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd09mZmxpbmVXYXJuaW5nID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd0luc3RhbGxCdXR0b24gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBzZXQgc2hvd1VwZGF0ZU9mZmxpbmVGZWF0dXJlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlID09PSB0aGlzLl9zaG93VXBkYXRlT2ZmbGluZUZlYXR1cmUpIHJldHVybjsgLy8gU2tpcFxuICAgIHRoaXMuX3Nob3dVcGRhdGVPZmZsaW5lRmVhdHVyZSA9IHZhbHVlO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBnZXQgc2hvd1VwZGF0ZU9mZmxpbmVGZWF0dXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zaG93VXBkYXRlT2ZmbGluZUZlYXR1cmU7XG4gIH1cblxuICBAT3V0cHV0KCkgb25VcGRhdGVPZmZsaW5lTW9kZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxVSUV2ZW50PigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbW9kYWxDdHJsOiBNb2RhbENvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9hc3RDb250cm9sbGVyOiBUb2FzdENvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSBhbGVydENvbnRyb2xsZXI6IEFsZXJ0Q29udHJvbGxlcixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwdWJsaWMgcGxhdGZvcm06IFBsYXRmb3JtU2VydmljZSxcbiAgICBwdWJsaWMgbmV0d29yazogTmV0d29ya1NlcnZpY2UsXG4gICAgQEluamVjdChFTlZJUk9OTUVOVCkgcHJvdGVjdGVkIGVudmlyb25tZW50XG4gICkge1xuICB9XG5cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcblxuICAgIGF3YWl0IHRoaXMucGxhdGZvcm0ucmVhZHkoKTtcblxuICAgIHRoaXMub2ZmbGluZSA9IHRoaXMubmV0d29yay5vZmZsaW5lO1xuXG4gICAgLy8gTGlzdGVuIHBvZCBjb25maWdcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLmNvbmZpZ1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoMTAwMCksXG4gICAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMubmV0d29yay5vbmxpbmUpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZShjb25maWcgPT4gdGhpcy5jaGVja05lZWRJbnN0YWxsT3JVcGRhdGUoY29uZmlnKSkpO1xuXG4gICAgLy8gTGlzdGVuIG5ldHdvcmsgY2hhbmdlc1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLm5ldHdvcmsub25OZXR3b3JrU3RhdHVzQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICAvL2RlYm91bmNlVGltZSg0NTApLFxuICAgICAgICAgIC8vdGFwKCgpID0+IHRoaXMud2FpdGluZ05ldHdvcmsgPSBmYWxzZSksXG4gICAgICAgICAgbWFwKGNvbm5lY3Rpb25UeXBlID0+IGNvbm5lY3Rpb25UeXBlID09PSAnbm9uZScpLFxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKG9mZmxpbmUgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLm9mZmxpbmUgIT09IG9mZmxpbmUpIHtcbiAgICAgICAgICAgIHRoaXMub2ZmbGluZSA9IG9mZmxpbmU7XG4gICAgICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICB0aGlzLm9uVXBkYXRlT2ZmbGluZU1vZGVDbGljay5jb21wbGV0ZSgpO1xuICAgIHRoaXMuaW5zdGFsbExpbmtzID0gbnVsbDtcbiAgICB0aGlzLnVwZ3JhZGVMaW5rcyA9IG51bGw7XG4gIH1cblxuICBhc3luYyBkb3dubG9hZChldmVudDogVUlFdmVudCwgbGluazogSW5zdGFsbEFwcExpbmspIHtcbiAgICBpZiAoIWxpbmsgfHwgIWxpbmsudXJsKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbaW5zdGFsbC11cGdyYWRlLWNhcmRdIE1pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQgXFwnbGluay51cmxcXCcnKTtcbiAgICAgIHJldHVybjsgLy8gU2tpcFxuICAgIH1cblxuICAgIGNvbnN0IGpvYiA9IHRoaXMucGxhdGZvcm0uZG93bmxvYWQoe1xuICAgICAgdXJpOiBsaW5rLnVybCxcbiAgICAgIHRpdGxlOiBsaW5rLnRpdGxlLFxuICAgICAgZmlsZW5hbWU6IGxpbmsuZmlsZW5hbWUsXG4gICAgICBtaW1lVHlwZTogbGluay5taW1lVHlwZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMubGlzdGVuRG93bmxvYWRQcm9taXNlKGxpbmssIGpvYik7XG4gIH1cblxuICBhc3luYyB0cnlPbmxpbmUoKSB7XG4gICAgdGhpcy53YWl0aW5nTmV0d29yayA9IHRydWU7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLm5ldHdvcmsudHJ5T25saW5lKHtcbiAgICAgICAgc2hvd0xvYWRpbmdUb2FzdDogZmFsc2UsXG4gICAgICAgIHNob3dPbmxpbmVUb2FzdDogdHJ1ZSxcbiAgICAgICAgc2hvd09mZmxpbmVUb2FzdDogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgIHRoaXMud2FpdGluZ05ldHdvcmsgPSBmYWxzZTtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0UGxhdGZvcm1OYW1lKHBsYXRmb3JtOiAnYW5kcm9pZCd8J2lvcycpIHtcbiAgICBzd2l0Y2ggKHBsYXRmb3JtKSB7XG4gICAgICBjYXNlICdhbmRyb2lkJzpcbiAgICAgICAgcmV0dXJuICdBbmRyb2lkJztcbiAgICAgIGNhc2UgJ2lvcyc6XG4gICAgICAgIHJldHVybiAnaU9TJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICBhc0xpbmsodmFsdWU6IGFueSk6IEluc3RhbGxBcHBMaW5rIHtcbiAgICByZXR1cm4gdmFsdWUgYXMgSW5zdGFsbEFwcExpbms7XG4gIH1cblxuICAvKiAtLSBwcml2YXRlIG1ldGhvZCAgLS0gKi9cblxuICBwcml2YXRlIGFzeW5jIGNoZWNrTmVlZEluc3RhbGxPclVwZGF0ZShjb25maWc6IENvbmZpZ3VyYXRpb24pIHtcbiAgICBjb25zb2xlLmluZm8oJ1tpbnN0YWxsXSBDaGVjayBpZiBuZWVkIHRvIGluc3RhbGwgb3IgdXBncmFkZS4uLicpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxpbmtzID0gdGhpcy5nZXRMaW5rcyhjb25maWcpO1xuXG4gICAgICAvLyBDaGVjayBmb3IgdXBncmFkZVxuICAgICAgdGhpcy51cGdyYWRlTGlua3MgPSB0aGlzLmdldENvbXBhdGlibGVVcGdyYWRlTGlua3MobGlua3MsIGNvbmZpZyk7XG5cbiAgICAgIC8vIENoZWNrIGZvciBpbnN0YWxsIGxpbmtzIChpZiBubyB1cGdyYWRlIG5lZWQpXG4gICAgICB0aGlzLmluc3RhbGxMaW5rcyA9ICF0aGlzLnVwZ3JhZGVMaW5rcyAmJiB0aGlzLmdldENvbXBhdGlibGVJbnN0YWxsTGlua3MobGlua3MpO1xuXG4gICAgICBhd2FpdCBzbGVlcCgxMDAwKTsgLy8gQWRkIGEgZGVsYXksIGZvciBhbmltYXRpb25cblxuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvLyBMaXN0ZW5pbmcgZG93bmxvYWRpbmcgZmlsZXNcbiAgICAodGhpcy51cGdyYWRlTGlua3MgfHwgW10pLmZvckVhY2gobGluayA9PiB7XG4gICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5wbGF0Zm9ybS5nZXREb3dubG9hZGluZ1Byb21pc2UobGluay51cmwpO1xuXG4gICAgICAvLyBMaXN0ZW5pbmcgZG93bmxvYWQgcHJvbWlzZSwgaWYgZXhpc3RzXG4gICAgICBpZiAocHJvbWlzZSkge1xuICAgICAgICBjb25zb2xlLmluZm8oYFtpbnN0YWxsLXVwZ3JhZGUtY2FyZF0gUGxhdGZvcm0gaXMgYWxyZWFkeSBkb3dubG9hZGluZyB0aGlzIGZpbGUgXFwnJHtsaW5rLnVybH1cXCc6IGxpc3RlbmluZyBwcm9taXNlLi4uYCk7XG4gICAgICAgIHRoaXMubGlzdGVuRG93bmxvYWRQcm9taXNlKGxpbmssIHByb21pc2UpO1xuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIGdldENvbXBhdGlibGVJbnN0YWxsTGlua3MoaW5zdGFsbExpbmtzOiBJbnN0YWxsQXBwTGlua1tdKTogSW5zdGFsbEFwcExpbmtbXSB7XG5cbiAgICAvLyBDb3Jkb3ZhIGFscmVhZHkgcnVubmluZzogbm90IG5lZWQgdG8gaW5zdGFsbFxuICAgIGlmICh0aGlzLnBsYXRmb3JtLmlzKCdjb3Jkb3ZhJykpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAvLyBJZiBtb2JpbGUgd2ViOiByZXR1cm4gYWxsXG4gICAgaWYgKHRoaXMucGxhdGZvcm0uaXMoJ21vYmlsZXdlYicpKSB7XG4gICAgICByZXR1cm4gaW5zdGFsbExpbmtzO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGdldENvbXBhdGlibGVVcGdyYWRlTGlua3MoaW5zdGFsbExpbmtzOiBJbnN0YWxsQXBwTGlua1tdLCBjb25maWc6IENvbmZpZ3VyYXRpb24pOiBJbnN0YWxsQXBwTGlua1tdIHtcbiAgICBjb25zdCBhcHBWZXJzaW9uID0gdGhpcy5lbnZpcm9ubWVudC52ZXJzaW9uO1xuICAgIGNvbnN0IGFwcE1pblZlcnNpb25Gcm9tUG9kID0gY29uZmlnLmdldFByb3BlcnR5KENPUkVfQ09ORklHX09QVElPTlMuQVBQX01JTl9WRVJTSU9OKTtcblxuICAgIGlmICghYXBwVmVyc2lvbikge1xuICAgICAgY29uc29sZS5lcnJvcignTWlzc2luZyB2YWx1ZSBmb3IgXFwnZW52aXJvbm1lbnQudmVyc2lvblxcJzogY2Fubm90IGNoZWNrIGFwcCBjb21wYXRpYmlsaXR5IScpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBuZWVkVXBncmFkZSA9IGFwcE1pblZlcnNpb25Gcm9tUG9kICYmICFWZXJzaW9uVXRpbHMuaXNDb21wYXRpYmxlKGFwcE1pblZlcnNpb25Gcm9tUG9kLCBhcHBWZXJzaW9uKTtcbiAgICBpZiAoIW5lZWRVcGdyYWRlKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgdXBncmFkZUxpbmtzID0gaW5zdGFsbExpbmtzXG4gICAgICAuZmlsdGVyKGxpbmsgPT4gdGhpcy5wbGF0Zm9ybS5pcygnbW9iaWxld2ViJykgfHwgKGxpbmsucGxhdGZvcm0gJiYgdGhpcy5wbGF0Zm9ybS5pcyhsaW5rLnBsYXRmb3JtKSkpO1xuXG4gICAgLy8gVXNlIG1pbiB2ZXJzaW9uIGFzIGRlZmF1bHQgdmVyc2lvblxuICAgIHVwZ3JhZGVMaW5rcy5mb3JFYWNoKGxpbmsgPT4ge1xuICAgICAgbGluay52ZXJzaW9uID0gbGluay52ZXJzaW9uIHx8IGFwcE1pblZlcnNpb25Gcm9tUG9kO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGlzTm90RW1wdHlBcnJheSh1cGdyYWRlTGlua3MpID8gdXBncmFkZUxpbmtzIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMaW5rcyhjb25maWc6IENvbmZpZ3VyYXRpb24pOiBJbnN0YWxsQXBwTGlua1tdIHtcbiAgICBjb25zdCByZXN1bHQ6IEluc3RhbGxBcHBMaW5rW10gPSBbXTtcblxuICAgIC8vIEFuZHJvaWRcbiAgICB7XG4gICAgICAvLyBHZXQgVVJMIChmcm9tIGNvbmZpZywgb3IgZW52aXJvbm1lbnQpXG4gICAgICBsZXQgdXJsID0gY29uZmlnLmdldFByb3BlcnR5KENPUkVfQ09ORklHX09QVElPTlMuQU5EUk9JRF9JTlNUQUxMX1VSTCk7XG4gICAgICBpZiAoaXNOaWxPckJsYW5rKHVybCkpIHVybCA9IHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdEFuZHJvaWRJbnN0YWxsVXJsIHx8IG51bGw7XG5cbiAgICAgIC8vIFJlc29sdmUgcmVsYXRpdmUgVVJMXG4gICAgICBjb25zdCBwZWVyID0gdGhpcy5uZXR3b3JrLnBlZXI7XG4gICAgICBpZiAocGVlciAmJiAodXJsLnN0YXJ0c1dpdGgoJy4vJykgfHwgdXJsLnN0YXJ0c1dpdGgoJy8nKSkpIHtcbiAgICAgICAgdXJsID0gUGVlci5wYXRoKHBlZXIsIHVybCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1pblZlcnNpb24gPSBjb25maWcuZ2V0UHJvcGVydHkoQ09SRV9DT05GSUdfT1BUSU9OUy5BUFBfTUlOX1ZFUlNJT04pO1xuXG4gICAgICAvLyBDb21wdXRlIEFwcCBuYW1lXG4gICAgICBjb25zdCBuYW1lOiBzdHJpbmcgPSBpc05vdE5pbE9yQmxhbmsodXJsKSAmJiBjb25maWcubGFiZWwgfHwgdGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0QXBwTmFtZSB8fCAnU1VNQVJpUyc7XG5cbiAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgbGV0IHRpdGxlOiBzdHJpbmc7XG4gICAgICAgIGxldCBtaW1lVHlwZTogc3RyaW5nO1xuXG4gICAgICAgIC8vIEdldCBmaWxlIG5hbWVcbiAgICAgICAgbGV0IGZpbGVuYW1lID0gdGhpcy5nZXRGaWxlbmFtZSh1cmwpO1xuICAgICAgICBsZXQgdmVyc2lvbiA9IG1pblZlcnNpb24gfHwgJ2xhdGVzdCc7XG5cbiAgICAgICAgLy8gT0ssIHRoaXMgaXMgYSBkb3dubG9hZGFibGUgQVBLIGZpbGUgKGUuZy4gTk9UIGEgbGluayB0byBhIHBsYXlzdG9yZSlcbiAgICAgICAgaWYgKGZpbGVuYW1lPy5lbmRzV2l0aCgnLmFwaycpKSB7XG4gICAgICAgICAgLy8gRGVmaW5lIG1pbWUgdHlwZVxuICAgICAgICAgIG1pbWVUeXBlID0gTWltZVR5cGVzLkFORFJPSURfQVBLO1xuXG4gICAgICAgICAgLy8gR2V0IHRoZSBmaWxlIHZlcnNpb24gKGlmIGFueSlcbiAgICAgICAgICBjb25zdCB2ZXJzaW9uTWF0Y2hlcyA9IC8tdihbMS05XVswLTldKlxcLlswLTldK1xcLig6Pyg6P2FscGhhfGJldGF8cmMpP1swLTldKikpL2kuZXhlYyhmaWxlbmFtZSk7XG4gICAgICAgICAgdmVyc2lvbiA9IHZlcnNpb25NYXRjaGVzICYmIHZlcnNpb25NYXRjaGVzWzFdIHx8IHZlcnNpb247XG5cbiAgICAgICAgICAvLyBDb21wdXRlIGEgbmV3IGZpbGUgbmFtZSwgd2l0aCB0aGUgdmVyc2lvblxuICAgICAgICAgIGlmIChpc05vdE5pbE9yQmxhbmsobmFtZSkgJiYgdmVyc2lvbiAhPT0gJ2xhdGVzdCcpIHtcbiAgICAgICAgICAgIGZpbGVuYW1lID0gYCR7bmFtZX0tdiR7dmVyc2lvbn0uYXBrYC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgdGl0bGUgPSBgJHtuYW1lfSB2JHt2ZXJzaW9ufWA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZWxzZSB7XG5cbiAgICAgICAgICAgIC8vIFJlcGxhY2UgJ2xhdGVzdCcgd2l0aCB0aGUgYXBwIHZlcnNpb24sIGlmIHByZXNlbnRcbiAgICAgICAgICAgIGlmIChmaWxlbmFtZS5pbmRleE9mKCdsYXRlc3QnKSkge1xuICAgICAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnJlcGxhY2UoJ2xhdGVzdCcsIHZlcnNpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdC5wdXNoKHsgbmFtZSwgdXJsLCBwbGF0Zm9ybTogJ2FuZHJvaWQnLCB2ZXJzaW9uLCBmaWxlbmFtZSwgdGl0bGUsIG1pbWVUeXBlIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlPUyAtIFRPRE9cbiAgICAvL3tcbiAgICAvLyAgKC4uLilcbiAgICAvL31cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGdldEZpbGVuYW1lKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXVybCkgcmV0dXJuO1xuICAgIC8vIEdldCBsYXN0IHBhcnQgKG9yIGFsbCBzdHJpbmcsIGlmIG5vICcvJylcbiAgICBsZXQgZmlsZW5hbWUgPSB1cmwuc3Vic3RyaW5nKHVybC5sYXN0SW5kZXhPZignLycpKzEpO1xuXG4gICAgY29uc3QgcXVlcnlQYXJhbUluZGV4ID0gZmlsZW5hbWUuaW5kZXhPZignPycpO1xuICAgIGlmIChxdWVyeVBhcmFtSW5kZXggIT09IC0xKSB7XG4gICAgICAvLyBSZW1vdmUgcXVlcnkgcGFyYW1zXG4gICAgICByZXR1cm4gZmlsZW5hbWUuc3Vic3RyaW5nKDAsIHF1ZXJ5UGFyYW1JbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbGVuYW1lO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2hvd1RvYXN0KG9wdHM6IFNob3dUb2FzdE9wdGlvbnMpIHtcbiAgICBhd2FpdCBUb2FzdHMuc2hvdyh0aGlzLnRvYXN0Q29udHJvbGxlciwgdGhpcy50cmFuc2xhdGUsIG9wdHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsaXN0ZW5Eb3dubG9hZFByb21pc2UobGluazogSW5zdGFsbEFwcExpbmssIHByb21pc2U6IFByb21pc2U8c3RyaW5nPikge1xuICAgIGlmICghbGluayB8fCAhcHJvbWlzZSkgcmV0dXJuOyAvLyBTa2lwXG5cbiAgICB0cnkge1xuICAgICAgLy8gTWFyayBsaW5rIGFzIGxvYWRpbmdcbiAgICAgIGlmICghbGluay5kb3dubG9hZGluZykge1xuICAgICAgICBsaW5rLmRvd25sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbG9jYXRpb24gPSBhd2FpdCBwcm9taXNlO1xuICAgICAgY29uc29sZS5pbmZvKCdbaW5zdGFsbC11cGdyYWRlLWNhcmRdIEZpbGUgZG93bmxvYWRlZCBhdDogJyArIGxvY2F0aW9uKTtcbiAgICB9XG4gICAgICAvLyBGYWlsZWQ6IGRpc3BsYXkgYSB0b2FzdFxuICAgIGNhdGNoKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignW2luc3RhbGwtdXBncmFkZV0gRG93bmxvYWQgZmFpbGVkOiAnICsgKGVyciAmJiBlcnIubWVzc2FnZSB8fCBlcnIpKTtcbiAgICAgIHRoaXMuc2hvd0Rvd25sb2FkRmFpbGVkVG9hc3QoZXJyKTtcbiAgICB9XG4gICAgZmluYWxseSB7XG4gICAgICBsaW5rLmRvd25sb2FkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnNob3dEb3dubG9hZENvbXBsZXRlRGlhbG9nKCk7XG4gIH1cblxuICBwcml2YXRlIHNob3dEb3dubG9hZEZhaWxlZFRvYXN0KGVycikge1xuICAgIHJldHVybiB0aGlzLnNob3dUb2FzdCh7XG4gICAgICBtZXNzYWdlOiAnRVJST1IuRE9XTkxPQURfRkFJTEVEJyxcbiAgICAgIG1lc3NhZ2VQYXJhbXM6IHtlcnJvcjogZXJyfSxcbiAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICBzaG93Q2xvc2VCdXR0b246IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2hvd0Rvd25sb2FkQ29tcGxldGVEaWFsb2coKSB7XG4gICAgaWYgKCF0aGlzLl9zdWJzY3JpcHRpb24pIHJldHVybjsgLy8gU2tpcCBpZiBjb21wb25lbnQgaGFzIGJlZW4gZGVzdHJveWVkXG5cbiAgICBjb25zdCB0cmFuc2xhdGlvbnMgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZS5nZXQoW1xuICAgICAgJ0lORk8uQUxFUlRfSEVBREVSJyxcbiAgICAgICdJTkZPLkRPV05MT0FEX1VQREFURV9TVUNDRUVEJyxcbiAgICAgICdDT01NT04uQlROX0NMT1NFJ1xuICAgIF0pLnRvUHJvbWlzZSgpO1xuICAgIGNvbnN0IGFsZXJ0ID0gYXdhaXQgdGhpcy5hbGVydENvbnRyb2xsZXIuY3JlYXRlKHtcbiAgICAgIGhlYWRlcjogdHJhbnNsYXRpb25zWydJTkZPLkFMRVJUX0hFQURFUiddLFxuICAgICAgbWVzc2FnZTogdHJhbnNsYXRpb25zWydJTkZPLkRPV05MT0FEX1VQREFURV9TVUNDRUVEJ10sXG4gICAgICBidXR0b25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiB0cmFuc2xhdGlvbnNbJ0NPTU1PTi5CVE5fQ0xPU0UnXSxcbiAgICAgICAgICByb2xlOiAnY2FuY2VsJyxcbiAgICAgICAgICBjc3NDbGFzczogJ3NlY29uZGFyeSdcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgYXdhaXQgYWxlcnQucHJlc2VudCgpO1xuICAgIGF3YWl0IGFsZXJ0Lm9uRGlkRGlzbWlzcygpO1xuICB9XG59XG4iXX0=
|
|
@@ -18514,7 +18514,7 @@ class AppInstallUpgradeCard {
|
|
|
18514
18514
|
this.offline = this.network.offline;
|
|
18515
18515
|
// Listen pod config
|
|
18516
18516
|
this._subscription.add(this.configService.config
|
|
18517
|
-
.pipe(debounceTime(1000))
|
|
18517
|
+
.pipe(debounceTime(1000), filter(() => this.network.online))
|
|
18518
18518
|
.subscribe(config => this.checkNeedInstallOrUpdate(config)));
|
|
18519
18519
|
// Listen network changes
|
|
18520
18520
|
this._subscription.add(this.network.onNetworkStatusChanges
|
|
@@ -18592,12 +18592,21 @@ class AppInstallUpgradeCard {
|
|
|
18592
18592
|
this.upgradeLinks = this.getCompatibleUpgradeLinks(links, config);
|
|
18593
18593
|
// Check for install links (if no upgrade need)
|
|
18594
18594
|
this.installLinks = !this.upgradeLinks && this.getCompatibleInstallLinks(links);
|
|
18595
|
-
yield sleep(
|
|
18595
|
+
yield sleep(1000); // Add a delay, for animation
|
|
18596
18596
|
}
|
|
18597
18597
|
finally {
|
|
18598
18598
|
this.loading = false;
|
|
18599
18599
|
this.markForCheck();
|
|
18600
18600
|
}
|
|
18601
|
+
// Listening downloading files
|
|
18602
|
+
(this.upgradeLinks || []).forEach(link => {
|
|
18603
|
+
const promise = this.platform.getDownloadingPromise(link.url);
|
|
18604
|
+
// Listening download promise, if exists
|
|
18605
|
+
if (promise) {
|
|
18606
|
+
console.info(`[install-upgrade-card] Platform is already downloading this file \'${link.url}\': listening promise...`);
|
|
18607
|
+
this.listenDownloadPromise(link, promise);
|
|
18608
|
+
}
|
|
18609
|
+
});
|
|
18601
18610
|
});
|
|
18602
18611
|
}
|
|
18603
18612
|
getCompatibleInstallLinks(installLinks) {
|
|
@@ -18625,12 +18634,6 @@ class AppInstallUpgradeCard {
|
|
|
18625
18634
|
// Use min version as default version
|
|
18626
18635
|
upgradeLinks.forEach(link => {
|
|
18627
18636
|
link.version = link.version || appMinVersionFromPod;
|
|
18628
|
-
const promise = this.platform.getDownloadingPromise(link.url);
|
|
18629
|
-
// Listening download promise, if exists
|
|
18630
|
-
if (promise) {
|
|
18631
|
-
console.info(`[install-upgrade-card] Platform is already downloading this file \'${link.url}\': listening promise...`);
|
|
18632
|
-
this.listenDownloadPromise(link, promise);
|
|
18633
|
-
}
|
|
18634
18637
|
});
|
|
18635
18638
|
return isNotEmptyArray(upgradeLinks) ? upgradeLinks : undefined;
|
|
18636
18639
|
}
|
|
@@ -18708,11 +18711,12 @@ class AppInstallUpgradeCard {
|
|
|
18708
18711
|
return __awaiter(this, void 0, void 0, function* () {
|
|
18709
18712
|
if (!link || !promise)
|
|
18710
18713
|
return; // Skip
|
|
18711
|
-
if (!link.downloading) {
|
|
18712
|
-
link.downloading = true;
|
|
18713
|
-
this.markForCheck();
|
|
18714
|
-
}
|
|
18715
18714
|
try {
|
|
18715
|
+
// Mark link as loading
|
|
18716
|
+
if (!link.downloading) {
|
|
18717
|
+
link.downloading = true;
|
|
18718
|
+
this.markForCheck();
|
|
18719
|
+
}
|
|
18716
18720
|
const location = yield promise;
|
|
18717
18721
|
console.info('[install-upgrade-card] File downloaded at: ' + location);
|
|
18718
18722
|
}
|