valtech-components 2.0.749 → 2.0.751
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/esm2022/lib/services/firebase/messaging.service.mjs +24 -14
- package/esm2022/lib/version.mjs +2 -2
- package/fesm2022/valtech-components.mjs +24 -14
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/atoms/rights-footer/rights-footer.component.d.ts +1 -1
- package/lib/components/organisms/article/article.component.d.ts +1 -1
- package/lib/components/organisms/toolbar/toolbar.component.d.ts +1 -1
- package/lib/services/firebase/messaging.service.d.ts +13 -0
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
import { Inject, Injectable, PLATFORM_ID } from '@angular/core';
|
|
9
9
|
import { isPlatformBrowser } from '@angular/common';
|
|
10
10
|
import { Messaging, getToken, deleteToken, onMessage } from '@angular/fire/messaging';
|
|
11
|
+
import { isSupported as fcmIsSupported } from 'firebase/messaging';
|
|
11
12
|
import { Subject, BehaviorSubject } from 'rxjs';
|
|
12
13
|
import { VALTECH_FIREBASE_CONFIG } from './config';
|
|
13
14
|
import * as i0 from "@angular/core";
|
|
@@ -59,20 +60,29 @@ export class MessagingService {
|
|
|
59
60
|
this.debugPersistence = this.config?.debugMessagePersistence ?? false;
|
|
60
61
|
this.initializeMessaging();
|
|
61
62
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
63
|
+
async getMessagingInstance() {
|
|
64
|
+
if (!isPlatformBrowser(this.platformId))
|
|
65
|
+
return null;
|
|
66
|
+
if (!this.fcmSupportPromise) {
|
|
67
|
+
this.fcmSupportPromise = fcmIsSupported().catch(err => {
|
|
68
|
+
console.warn('[Messaging] fcmIsSupported threw:', err);
|
|
69
|
+
return false;
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
const supported = await this.fcmSupportPromise;
|
|
73
|
+
if (!supported) {
|
|
74
|
+
console.warn('[Messaging] FCM not supported in this browser');
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
67
77
|
try {
|
|
68
78
|
const instance = this.injector.get(Messaging, null);
|
|
69
79
|
if (!instance) {
|
|
70
|
-
console.warn('[Messaging] Messaging not provided. Verify provideValtechFirebase({ enableMessaging: true }) + valid Firebase config
|
|
80
|
+
console.warn('[Messaging] Messaging not provided. Verify provideValtechFirebase({ enableMessaging: true }) + valid Firebase config.');
|
|
71
81
|
}
|
|
72
82
|
return instance;
|
|
73
83
|
}
|
|
74
84
|
catch (err) {
|
|
75
|
-
console.error('[Messaging]
|
|
85
|
+
console.error('[Messaging] injector.get(Messaging) threw:', err);
|
|
76
86
|
return null;
|
|
77
87
|
}
|
|
78
88
|
}
|
|
@@ -137,8 +147,8 @@ export class MessagingService {
|
|
|
137
147
|
if (!('serviceWorker' in navigator)) {
|
|
138
148
|
return false;
|
|
139
149
|
}
|
|
140
|
-
// Verificar que messaging esté disponible
|
|
141
|
-
if (!this.getMessagingInstance()) {
|
|
150
|
+
// Verificar que messaging esté disponible (async — espera APP_INITIALIZER)
|
|
151
|
+
if (!(await this.getMessagingInstance())) {
|
|
142
152
|
return false;
|
|
143
153
|
}
|
|
144
154
|
return true;
|
|
@@ -203,7 +213,7 @@ export class MessagingService {
|
|
|
203
213
|
*/
|
|
204
214
|
async getToken() {
|
|
205
215
|
console.log('[Messaging] getToken() start');
|
|
206
|
-
const messaging = this.getMessagingInstance();
|
|
216
|
+
const messaging = await this.getMessagingInstance();
|
|
207
217
|
if (!messaging) {
|
|
208
218
|
console.warn('[Messaging] getToken aborted: no Messaging instance');
|
|
209
219
|
return null;
|
|
@@ -247,7 +257,7 @@ export class MessagingService {
|
|
|
247
257
|
* ```
|
|
248
258
|
*/
|
|
249
259
|
async deleteToken() {
|
|
250
|
-
const messaging = this.getMessagingInstance();
|
|
260
|
+
const messaging = await this.getMessagingInstance();
|
|
251
261
|
if (!messaging) {
|
|
252
262
|
return;
|
|
253
263
|
}
|
|
@@ -292,8 +302,8 @@ export class MessagingService {
|
|
|
292
302
|
/**
|
|
293
303
|
* Configura el listener de mensajes en foreground
|
|
294
304
|
*/
|
|
295
|
-
setupMessageListener() {
|
|
296
|
-
const messaging = this.getMessagingInstance();
|
|
305
|
+
async setupMessageListener() {
|
|
306
|
+
const messaging = await this.getMessagingInstance();
|
|
297
307
|
if (!messaging || this.unsubscribeOnMessage) {
|
|
298
308
|
return;
|
|
299
309
|
}
|
|
@@ -609,4 +619,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
609
619
|
type: Inject,
|
|
610
620
|
args: [PLATFORM_ID]
|
|
611
621
|
}] }, { type: i0.NgZone }] });
|
|
612
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnaW5nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2ZpcmViYXNlL21lc3NhZ2luZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFvQixXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RGLE9BQU8sRUFBYyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTVELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7QUFrQm5EOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZCRztBQUVILE1BQU0sT0FBTyxnQkFBZ0I7SUFnQjNCLFlBQ1UsUUFBa0IsRUFDZSxNQUE2QixFQUN6QyxVQUFrQixFQUN2QyxNQUFjO1FBSGQsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNlLFdBQU0sR0FBTixNQUFNLENBQXVCO1FBQ3pDLGVBQVUsR0FBVixVQUFVLENBQVE7UUFDdkMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQW5CaEIsbUJBQWMsR0FBRyxJQUFJLE9BQU8sRUFBdUIsQ0FBQztRQUNwRCw2QkFBd0IsR0FBRyxJQUFJLE9BQU8sRUFBMEIsQ0FBQztRQUNqRSxpQkFBWSxHQUFHLElBQUksZUFBZSxDQUFpQjtZQUN6RCxLQUFLLEVBQUUsSUFBSTtZQUNYLFVBQVUsRUFBRSxTQUFTO1lBQ3JCLFdBQVcsRUFBRSxLQUFLO1NBQ25CLENBQUMsQ0FBQztRQU1ILHdEQUF3RDtRQUN2QyxzQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQztR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ICpcbiAqIFNlcnZpY2lvIHBhcmEgRmlyZWJhc2UgQ2xvdWQgTWVzc2FnaW5nIChQdXNoIE5vdGlmaWNhdGlvbnMpLlxuICogUGVybWl0ZSBzb2xpY2l0YXIgcGVybWlzb3MsIG9idGVuZXIgdG9rZW5zLCBlc2N1Y2hhciBtZW5zYWplcyB5IG1hbmVqYXJcbiAqIG5hdmVnYWNpw7NuIChkZWVwIGxpbmtpbmcpIGN1YW5kbyBlbCB1c3VhcmlvIHRvY2EgdW5hIG5vdGlmaWNhY2nDs24uXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3RvciwgTmdab25lLCBQTEFURk9STV9JRCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWVzc2FnaW5nLCBnZXRUb2tlbiwgZGVsZXRlVG9rZW4sIG9uTWVzc2FnZSB9IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvbWVzc2FnaW5nJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBWQUxURUNIX0ZJUkVCQVNFX0NPTkZJRyB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7XG4gIE5vdGlmaWNhdGlvbkFjdGlvbixcbiAgTm90aWZpY2F0aW9uQ2xpY2tFdmVudCxcbiAgTm90aWZpY2F0aW9uUGF5bG9hZCxcbiAgTm90aWZpY2F0aW9uUGVybWlzc2lvbixcbiAgVmFsdGVjaEZpcmViYXNlQ29uZmlnLFxufSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBFc3RhZG8gaW50ZXJubyBkZWwgc2VydmljaW8gZGUgbWVzc2FnaW5nXG4gKi9cbmludGVyZmFjZSBNZXNzYWdpbmdTdGF0ZSB7XG4gIHRva2VuOiBzdHJpbmcgfCBudWxsO1xuICBwZXJtaXNzaW9uOiBOb3RpZmljYXRpb25QZXJtaXNzaW9uO1xuICBpc1N1cHBvcnRlZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBTZXJ2aWNpbyBwYXJhIEZpcmViYXNlIENsb3VkIE1lc3NhZ2luZyAoRkNNKS5cbiAqXG4gKiBQZXJtaXRlIHJlY2liaXIgbm90aWZpY2FjaW9uZXMgcHVzaCBlbiBsYSBhcGxpY2FjacOzbiB3ZWIuXG4gKiBSZXF1aWVyZSBWQVBJRCBrZXkgY29uZmlndXJhZGEgZW4gVmFsdGVjaEZpcmViYXNlQ29uZmlnLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBAQ29tcG9uZW50KHsuLi59KVxuICogZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvbkNvbXBvbmVudCB7XG4gKiAgIHByaXZhdGUgbWVzc2FnaW5nID0gaW5qZWN0KE1lc3NhZ2luZ1NlcnZpY2UpO1xuICpcbiAqICAgdG9rZW4gPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gKlxuICogICBhc3luYyBlbmFibGVOb3RpZmljYXRpb25zKCkge1xuICogICAgIC8vIFNvbGljaXRhciBwZXJtaXNvIHkgb2J0ZW5lciB0b2tlblxuICogICAgIGNvbnN0IHRva2VuID0gYXdhaXQgdGhpcy5tZXNzYWdpbmcucmVxdWVzdFBlcm1pc3Npb24oKTtcbiAqXG4gKiAgICAgaWYgKHRva2VuKSB7XG4gKiAgICAgICB0aGlzLnRva2VuLnNldCh0b2tlbik7XG4gKiAgICAgICAvLyBFbnZpYXIgdG9rZW4gYSB0dSBiYWNrZW5kIHBhcmEgYWxtYWNlbmFybG9cbiAqICAgICAgIGF3YWl0IHRoaXMuYmFja2VuZC5yZWdpc3RlckRldmljZVRva2VuKHRva2VuKTtcbiAqICAgICB9XG4gKiAgIH1cbiAqXG4gKiAgIC8vIEVzY3VjaGFyIG1lbnNhamVzIGVuIGZvcmVncm91bmRcbiAqICAgbWVzc2FnZXMkID0gdGhpcy5tZXNzYWdpbmcub25NZXNzYWdlKCk7XG4gKiB9XG4gKiBgYGBcbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBNZXNzYWdpbmdTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBtZXNzYWdlU3ViamVjdCA9IG5ldyBTdWJqZWN0PE5vdGlmaWNhdGlvblBheWxvYWQ+KCk7XG4gIHByaXZhdGUgbm90aWZpY2F0aW9uQ2xpY2tTdWJqZWN0ID0gbmV3IFN1YmplY3Q8Tm90aWZpY2F0aW9uQ2xpY2tFdmVudD4oKTtcbiAgcHJpdmF0ZSBzdGF0ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1lc3NhZ2luZ1N0YXRlPih7XG4gICAgdG9rZW46IG51bGwsXG4gICAgcGVybWlzc2lvbjogJ2RlZmF1bHQnLFxuICAgIGlzU3VwcG9ydGVkOiBmYWxzZSxcbiAgfSk7XG5cbiAgcHJpdmF0ZSB1bnN1YnNjcmliZU9uTWVzc2FnZT86ICgpID0+IHZvaWQ7XG5cbiAgLyoqIEZsYWcgcGFyYSBwZXJzaXN0aXIgbWVuc2FqZXMgRkNNIGVuIGxvY2FsU3RvcmFnZSAoZGVidWdnaW5nKSAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGRlYnVnUGVyc2lzdGVuY2U6IGJvb2xlYW47XG4gIC8qKiBLZXkgcGFyYSBsb2NhbFN0b3JhZ2UgZGUgbWVuc2FqZXMgRkNNIChkZWJ1Z2dpbmcpICovXG4gIHByaXZhdGUgcmVhZG9ubHkgREVCVUdfU1RPUkFHRV9LRVkgPSAnZmNtX2RlYnVnX21lc3NhZ2VzJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBASW5qZWN0KFZBTFRFQ0hfRklSRUJBU0VfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogVmFsdGVjaEZpcmViYXNlQ29uZmlnLFxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogT2JqZWN0LFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmVcbiAgKSB7XG4gICAgdGhpcy5kZWJ1Z1BlcnNpc3RlbmNlID0gdGhpcy5jb25maWc/LmRlYnVnTWVzc2FnZVBlcnNpc3RlbmNlID8/IGZhbHNlO1xuICAgIHRoaXMuaW5pdGlhbGl6ZU1lc3NhZ2luZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgbGEgaW5zdGFuY2lhIGRlIE1lc3NhZ2luZyBkZSBmb3JtYSBwZXJlem9zYS5cbiAgICogRXN0byBldml0YSBlbCBlcnJvciBkZSBBUFBfSU5JVElBTElaRVIgZGUgQW5ndWxhckZpcmUuXG4gICAqL1xuICBwcml2YXRlIGdldE1lc3NhZ2luZ0luc3RhbmNlKCk6IE1lc3NhZ2luZyB8IG51bGwge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE1lc3NhZ2luZywgbnVsbCk7XG4gICAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnW01lc3NhZ2luZ10gTWVzc2FnaW5nIG5vdCBwcm92aWRlZC4gVmVyaWZ5IHByb3ZpZGVWYWx0ZWNoRmlyZWJhc2UoeyBlbmFibGVNZXNzYWdpbmc6IHRydWUgfSkgKyB2YWxpZCBGaXJlYmFzZSBjb25maWcgKyBGQ00gZW5hYmxlZCBpbiBGaXJlYmFzZSBDb25zb2xlLidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tNZXNzYWdpbmddIGdldE1lc3NhZ2luZ0luc3RhbmNlIHRocmV3OicsIGVycik7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gSU5JQ0lBTElaQUNJw5NOXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBJbmljaWFsaXphIGVsIHNlcnZpY2lvIGRlIG1lc3NhZ2luZ1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBpbml0aWFsaXplTWVzc2FnaW5nKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN1cHBvcnRlZCA9IGF3YWl0IHRoaXMuY2hlY2tTdXBwb3J0KCk7XG4gICAgY29uc3QgcGVybWlzc2lvbiA9IHRoaXMuZ2V0UGVybWlzc2lvblN0YXRlKCk7XG5cbiAgICB0aGlzLnN0YXRlU3ViamVjdC5uZXh0KHtcbiAgICAgIC4uLnRoaXMuc3RhdGVTdWJqZWN0LnZhbHVlLFxuICAgICAgaXNTdXBwb3J0ZWQ6IHN1cHBvcnRlZCxcbiAgICAgIHBlcm1pc3Npb24sXG4gICAgfSk7XG5cbiAgICAvLyBTaSB5YSB0aWVuZSBwZXJtaXNvLCBjb25maWd1cmFyIGxpc3RlbmVyc1xuICAgIGlmIChzdXBwb3J0ZWQgJiYgcGVybWlzc2lvbiA9PT0gJ2dyYW50ZWQnKSB7XG4gICAgICB0aGlzLnNldHVwTWVzc2FnZUxpc3RlbmVyKCk7XG4gICAgfVxuXG4gICAgLy8gRXNjdWNoYXIgbWVuc2FqZXMgZGVsIFNlcnZpY2UgV29ya2VyIChjbGlja3MgZW4gbm90aWZpY2FjaW9uZXMgYmFja2dyb3VuZClcbiAgICB0aGlzLnNldHVwU2VydmljZVdvcmtlckxpc3RlbmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJhIGxpc3RlbmVyIHBhcmEgbWVuc2FqZXMgZGVsIFNlcnZpY2UgV29ya2VyLlxuICAgKiBSZWNpYmUgZXZlbnRvcyBjdWFuZG8gZWwgdXN1YXJpbyBoYWNlIGNsaWNrIGVuIHVuYSBub3RpZmljYWNpw7NuIGJhY2tncm91bmQuXG4gICAqL1xuICBwcml2YXRlIHNldHVwU2VydmljZVdvcmtlckxpc3RlbmVyKCk6IHZvaWQge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSB8fCAhKCdzZXJ2aWNlV29ya2VyJyBpbiBuYXZpZ2F0b3IpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGV2ZW50ID0+IHtcbiAgICAgIC8vIFZlcmlmaWNhciBxdWUgZXMgdW4gbWVuc2FqZSBkZSBub3RpZmljYWNpw7NuIGNsaWNrXG4gICAgICBpZiAoZXZlbnQuZGF0YT8udHlwZSA9PT0gJ05PVElGSUNBVElPTl9DTElDSycpIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBub3RpZmljYXRpb24gPSBldmVudC5kYXRhLm5vdGlmaWNhdGlvbiBhcyBOb3RpZmljYXRpb25QYXlsb2FkO1xuICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuZXh0cmFjdEFjdGlvbkZyb21EYXRhKG5vdGlmaWNhdGlvbi5kYXRhKTtcblxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uQ2xpY2tTdWJqZWN0Lm5leHQoe1xuICAgICAgICAgICAgbm90aWZpY2F0aW9uLFxuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBzaSBGQ00gZXN0w6Egc29wb3J0YWRvIGVuIGVsIG5hdmVnYWRvciBhY3R1YWxcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tTdXBwb3J0KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFZlcmlmaWNhciBBUElzIG5lY2VzYXJpYXNcbiAgICBpZiAoISgnTm90aWZpY2F0aW9uJyBpbiB3aW5kb3cpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCEoJ3NlcnZpY2VXb3JrZXInIGluIG5hdmlnYXRvcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBWZXJpZmljYXIgcXVlIG1lc3NhZ2luZyBlc3TDqSBkaXNwb25pYmxlXG4gICAgaWYgKCF0aGlzLmdldE1lc3NhZ2luZ0luc3RhbmNlKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQRVJNSVNPUyBZIFRPS0VOXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBTb2xpY2l0YSBwZXJtaXNvIGRlIG5vdGlmaWNhY2lvbmVzIHkgb2J0aWVuZSBlbCB0b2tlbiBGQ00uXG4gICAqXG4gICAqIEByZXR1cm5zIFRva2VuIEZDTSBzaSBzZSBvdG9yZ8OzIHBlcm1pc28sIG51bGwgc2kgc2UgZGVuZWfDs1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHRva2VuID0gYXdhaXQgbWVzc2FnaW5nLnJlcXVlc3RQZXJtaXNzaW9uKCk7XG4gICAqIGlmICh0b2tlbikge1xuICAgKiAgIGNvbnNvbGUubG9nKCdUb2tlbiBGQ006JywgdG9rZW4pO1xuICAgKiAgIC8vIEVudmlhciBhIGJhY2tlbmRcbiAgICogfSBlbHNlIHtcbiAgICogICBjb25zb2xlLmxvZygnUGVybWlzbyBkZW5lZ2FkbyBvIG5vIHNvcG9ydGFkbycpO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgcmVxdWVzdFBlcm1pc3Npb24oKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgaWYgKCEoYXdhaXQgdGhpcy5pc1N1cHBvcnRlZCgpKSkge1xuICAgICAgY29uc29sZS53YXJuKCdGQ00gbm8gZXN0w6Egc29wb3J0YWRvIGVuIGVzdGUgbmF2ZWdhZG9yJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gU29saWNpdGFyIHBlcm1pc28gZGUgbm90aWZpY2FjaW9uZXNcbiAgICAgIGNvbnN0IHBlcm1pc3Npb24gPSBhd2FpdCBOb3RpZmljYXRpb24ucmVxdWVzdFBlcm1pc3Npb24oKTtcblxuICAgICAgdGhpcy5zdGF0ZVN1YmplY3QubmV4dCh7XG4gICAgICAgIC4uLnRoaXMuc3RhdGVTdWJqZWN0LnZhbHVlLFxuICAgICAgICBwZXJtaXNzaW9uOiBwZXJtaXNzaW9uIGFzIE5vdGlmaWNhdGlvblBlcm1pc3Npb24sXG4gICAgICB9KTtcblxuICAgICAgaWYgKHBlcm1pc3Npb24gIT09ICdncmFudGVkJykge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1Blcm1pc28gZGUgbm90aWZpY2FjaW9uZXMgZGVuZWdhZG8nKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIE9idGVuZXIgdG9rZW4gRkNNXG4gICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IHRoaXMuZ2V0VG9rZW4oKTtcblxuICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgIC8vIENvbmZpZ3VyYXIgbGlzdGVuZXIgZGUgbWVuc2FqZXNcbiAgICAgICAgdGhpcy5zZXR1cE1lc3NhZ2VMaXN0ZW5lcigpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdG9rZW47XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNvbGljaXRhbmRvIHBlcm1pc28gZGUgbm90aWZpY2FjaW9uZXM6JywgZXJyb3IpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgZWwgdG9rZW4gRkNNIGFjdHVhbCAoc2luIHNvbGljaXRhciBwZXJtaXNvKS5cbiAgICpcbiAgICogQHJldHVybnMgVG9rZW4gRkNNIHNpIGVzdMOhIGRpc3BvbmlibGUsIG51bGwgc2kgbm9cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCB0b2tlbiA9IGF3YWl0IG1lc3NhZ2luZy5nZXRUb2tlbigpO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGdldFRva2VuKCk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICAgIGNvbnNvbGUubG9nKCdbTWVzc2FnaW5nXSBnZXRUb2tlbigpIHN0YXJ0Jyk7XG4gICAgY29uc3QgbWVzc2FnaW5nID0gdGhpcy5nZXRNZXNzYWdpbmdJbnN0YW5jZSgpO1xuICAgIGlmICghbWVzc2FnaW5nKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tNZXNzYWdpbmddIGdldFRva2VuIGFib3J0ZWQ6IG5vIE1lc3NhZ2luZyBpbnN0YW5jZScpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgdmFwaWRLZXkgPSB0aGlzLmNvbmZpZy5tZXNzYWdpbmdWYXBpZEtleTtcbiAgICBpZiAoIXZhcGlkS2V5KSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdbTWVzc2FnaW5nXSBWQVBJRCBrZXkgbm8gY29uZmlndXJhZGEgKGNvbmZpZy5tZXNzYWdpbmdWYXBpZEtleSkuIEZDTSBubyBmdW5jaW9uYXLDoS4nXG4gICAgICApO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFJlZ2lzdHJhciBTVyBwZXJzb25hbGl6YWRvIGFudGVzIGRlIG9idGVuZXIgdG9rZW5cbiAgICAgIC8vIEVzdG8gZXMgbmVjZXNhcmlvIGN1YW5kbyB1c2Ftb3MgdW4gU1cgY3VzdG9tIChmaXJlYmFzZS1tZXNzYWdpbmctc3cuanMpXG4gICAgICBjb25zdCByZWdpc3RyYXRpb24gPSBhd2FpdCBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWdpc3RlcignL2ZpcmViYXNlLW1lc3NhZ2luZy1zdy5qcycpO1xuICAgICAgY29uc29sZS5sb2coJ1tNZXNzYWdpbmddIFNXIHJlZ2lzdGVyZWQsIHdhaXRpbmcgcmVhZHkuLi4nKTtcbiAgICAgIC8vIEVzcGVyYXIgYSBxdWUgZWwgU1cgZXN0w6kgYWN0aXZvXG4gICAgICBhd2FpdCBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWFkeTtcbiAgICAgIGNvbnNvbGUubG9nKCdbTWVzc2FnaW5nXSBTVyByZWFkeSwgY2FsbGluZyBGaXJlYmFzZSBnZXRUb2tlbigpLi4uJyk7XG5cbiAgICAgIGNvbnN0IHRva2VuID0gYXdhaXQgZ2V0VG9rZW4obWVzc2FnaW5nLCB7XG4gICAgICAgIHZhcGlkS2V5LFxuICAgICAgICBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uOiByZWdpc3RyYXRpb24sXG4gICAgICB9KTtcblxuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICdbTWVzc2FnaW5nXSBGaXJlYmFzZSBnZXRUb2tlbiByZXR1cm5lZDonLFxuICAgICAgICB0b2tlbiA/IGAke3Rva2VuLnNsaWNlKDAsIDE2KX3igKZgIDogJ251bGwvZW1wdHknXG4gICAgICApO1xuXG4gICAgICB0aGlzLnN0YXRlU3ViamVjdC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5zdGF0ZVN1YmplY3QudmFsdWUsXG4gICAgICAgIHRva2VuLFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0b2tlbjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignW01lc3NhZ2luZ10gZ2V0VG9rZW4gZXJyb3I6JywgZXJyb3IpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVsaW1pbmEgZWwgdG9rZW4gRkNNIGFjdHVhbCAodW5zdWJzY3JpYmUgZGUgbm90aWZpY2FjaW9uZXMpLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGF3YWl0IG1lc3NhZ2luZy5kZWxldGVUb2tlbigpO1xuICAgKiBjb25zb2xlLmxvZygnVG9rZW4gZWxpbWluYWRvLCBubyByZWNpYmlyw6EgbcOhcyBub3RpZmljYWNpb25lcycpO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGRlbGV0ZVRva2VuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG1lc3NhZ2luZyA9IHRoaXMuZ2V0TWVzc2FnaW5nSW5zdGFuY2UoKTtcbiAgICBpZiAoIW1lc3NhZ2luZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBkZWxldGVUb2tlbihtZXNzYWdpbmcpO1xuXG4gICAgICB0aGlzLnN0YXRlU3ViamVjdC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5zdGF0ZVN1YmplY3QudmFsdWUsXG4gICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIExpbXBpYXIgbGlzdGVuZXIgZGUgbWVuc2FqZXNcbiAgICAgIGlmICh0aGlzLnVuc3Vic2NyaWJlT25NZXNzYWdlKSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmVPbk1lc3NhZ2UoKTtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZU9uTWVzc2FnZSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZWxpbWluYW5kbyB0b2tlbiBGQ006JywgZXJyb3IpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBzZSBwdWRvIGVsaW1pbmFyIGVsIHRva2VuIGRlIG5vdGlmaWNhY2lvbmVzJyk7XG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIE1FTlNBSkVTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIGRlIG1lbnNhamVzIHJlY2liaWRvcyBlbiBmb3JlZ3JvdW5kLlxuICAgKlxuICAgKiBJTVBPUlRBTlRFOiBMb3MgbWVuc2FqZXMgZW4gYmFja2dyb3VuZCBzb24gbWFuZWphZG9zIHBvciBlbCBTZXJ2aWNlIFdvcmtlci5cbiAgICpcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBxdWUgZW1pdGUgY3VhbmRvIGxsZWdhIHVuIG1lbnNhamUgZW4gZm9yZWdyb3VuZFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIG1lc3NhZ2luZy5vbk1lc3NhZ2UoKS5zdWJzY3JpYmUocGF5bG9hZCA9PiB7XG4gICAqICAgY29uc29sZS5sb2coJ01lbnNhamUgcmVjaWJpZG86JywgcGF5bG9hZCk7XG4gICAqICAgLy8gTW9zdHJhciBub3RpZmljYWNpw7NuIGN1c3RvbSBvIGFjdHVhbGl6YXIgVUlcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgb25NZXNzYWdlKCk6IE9ic2VydmFibGU8Tm90aWZpY2F0aW9uUGF5bG9hZD4ge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYSBlbCBsaXN0ZW5lciBkZSBtZW5zYWplcyBlbiBmb3JlZ3JvdW5kXG4gICAqL1xuICBwcml2YXRlIHNldHVwTWVzc2FnZUxpc3RlbmVyKCk6IHZvaWQge1xuICAgIGNvbnN0IG1lc3NhZ2luZyA9IHRoaXMuZ2V0TWVzc2FnaW5nSW5zdGFuY2UoKTtcbiAgICBpZiAoIW1lc3NhZ2luZyB8fCB0aGlzLnVuc3Vic2NyaWJlT25NZXNzYWdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy51bnN1YnNjcmliZU9uTWVzc2FnZSA9IG9uTWVzc2FnZShtZXNzYWdpbmcsIHBheWxvYWQgPT4ge1xuICAgICAgY29uc3Qgbm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb25QYXlsb2FkID0ge1xuICAgICAgICB0aXRsZTogcGF5bG9hZC5ub3RpZmljYXRpb24/LnRpdGxlLFxuICAgICAgICBib2R5OiBwYXlsb2FkLm5vdGlmaWNhdGlvbj8uYm9keSxcbiAgICAgICAgaW1hZ2U6IHBheWxvYWQubm90aWZpY2F0aW9uPy5pbWFnZSxcbiAgICAgICAgZGF0YTogcGF5bG9hZC5kYXRhIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gICAgICAgIG1lc3NhZ2VJZDogcGF5bG9hZC5tZXNzYWdlSWQsXG4gICAgICB9O1xuXG4gICAgICB0aGlzLm1lc3NhZ2VTdWJqZWN0Lm5leHQobm90aWZpY2F0aW9uKTtcblxuICAgICAgLy8gUGVyc2lzdGlyIGVuIGxvY2FsU3RvcmFnZSBwYXJhIGRlYnVnZ2luZyBzaSBlc3TDoSBoYWJpbGl0YWRvXG4gICAgICBpZiAodGhpcy5kZWJ1Z1BlcnNpc3RlbmNlKSB7XG4gICAgICAgIHRoaXMucGVyc2lzdE1lc3NhZ2VGb3JEZWJ1Zyhub3RpZmljYXRpb24pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcnNpc3RlIHVuIG1lbnNhamUgRkNNIGVuIGxvY2FsU3RvcmFnZSBwYXJhIGRlYnVnZ2luZy5cbiAgICogU29sbyBzZSB1c2EgY3VhbmRvIGRlYnVnTWVzc2FnZVBlcnNpc3RlbmNlIGVzdMOhIGhhYmlsaXRhZG8uXG4gICAqIE1hbnRpZW5lIGxvcyDDumx0aW1vcyA1MCBtZW5zYWplcy5cbiAgICovXG4gIHByaXZhdGUgcGVyc2lzdE1lc3NhZ2VGb3JEZWJ1ZyhtZXNzYWdlOiBOb3RpZmljYXRpb25QYXlsb2FkKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0b3JlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuREVCVUdfU1RPUkFHRV9LRVkpO1xuICAgICAgY29uc3QgbWVzc2FnZXMgPSBzdG9yZWQgPyBKU09OLnBhcnNlKHN0b3JlZCkgOiBbXTtcbiAgICAgIG1lc3NhZ2VzLnVuc2hpZnQoeyAuLi5tZXNzYWdlLCByZWNlaXZlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkgfSk7XG4gICAgICAvLyBNYW50ZW5lciBzb2xvIMO6bHRpbW9zIDUwXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkRFQlVHX1NUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeShtZXNzYWdlcy5zbGljZSgwLCA1MCkpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tNZXNzYWdpbmddIERlYnVnIHBlcnNpc3RlbmNlIGZhaWxlZDonLCBlKTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRVNUQURPIFkgVVRJTElEQURFU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogT2J0aWVuZSBlbCBlc3RhZG8gYWN0dWFsIGRlbCBwZXJtaXNvIGRlIG5vdGlmaWNhY2lvbmVzLlxuICAgKlxuICAgKiBAcmV0dXJucyAnZ3JhbnRlZCcgfCAnZGVuaWVkJyB8ICdkZWZhdWx0J1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHBlcm1pc3Npb24gPSBtZXNzYWdpbmcuZ2V0UGVybWlzc2lvblN0YXRlKCk7XG4gICAqIGlmIChwZXJtaXNzaW9uID09PSAnZ3JhbnRlZCcpIHtcbiAgICogICAvLyBZYSB0aWVuZSBwZXJtaXNvXG4gICAqIH0gZWxzZSBpZiAocGVybWlzc2lvbiA9PT0gJ2RlZmF1bHQnKSB7XG4gICAqICAgLy8gUHVlZGUgc29saWNpdGFyIHBlcm1pc29cbiAgICogfSBlbHNlIHtcbiAgICogICAvLyBEZW5lZ2FkbywgZGViZSBoYWJpbGl0YXIgbWFudWFsbWVudGVcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGdldFBlcm1pc3Npb25TdGF0ZSgpOiBOb3RpZmljYXRpb25QZXJtaXNzaW9uIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIHJldHVybiAnZGVmYXVsdCc7XG4gICAgfVxuXG4gICAgaWYgKCEoJ05vdGlmaWNhdGlvbicgaW4gd2luZG93KSkge1xuICAgICAgcmV0dXJuICdkZW5pZWQnO1xuICAgIH1cblxuICAgIHJldHVybiBOb3RpZmljYXRpb24ucGVybWlzc2lvbiBhcyBOb3RpZmljYXRpb25QZXJtaXNzaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIEZDTSBlc3TDoSBzb3BvcnRhZG8gZW4gZWwgbmF2ZWdhZG9yIGFjdHVhbC5cbiAgICogVXNhIGzDs2dpY2EgaW50ZWxpZ2VudGUgcGFyYSBldml0YXIgZmFsc29zIG5lZ2F0aXZvcyBwb3IgdGltaW5nIGRlbCBJbmplY3Rvci5cbiAgICpcbiAgICogQHJldHVybnMgdHJ1ZSBzaSBGQ00gZXN0w6Egc29wb3J0YWRvXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogaWYgKGF3YWl0IG1lc3NhZ2luZy5pc1N1cHBvcnRlZCgpKSB7XG4gICAqICAgLy8gUHVlZGUgdXNhciBub3RpZmljYWNpb25lcyBwdXNoXG4gICAqIH0gZWxzZSB7XG4gICAqICAgLy8gTmF2ZWdhZG9yIG5vIHNvcG9ydGEgbyBubyB0aWVuZSBTZXJ2aWNlIFdvcmtlclxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgaXNTdXBwb3J0ZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgLy8gU2kgeWEgdGVuZW1vcyB0b2tlbiBlbiBlc3RhZG8sIGNsYXJhbWVudGUgRkNNIGZ1bmNpb25hXG4gICAgaWYgKHRoaXMuc3RhdGVTdWJqZWN0LnZhbHVlLnRva2VuKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBTaSB5YSBjYWxjdWxhbW9zIHNvcG9ydGUgZXhpdG9zYW1lbnRlLCB1c2FybG9cbiAgICBpZiAodGhpcy5zdGF0ZVN1YmplY3QudmFsdWUuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIFZlcmlmaWNhY2lvbmVzIGLDoXNpY2FzIOKAlCBBUElzIGRlbCBicm93c2VyXG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghKCdOb3RpZmljYXRpb24nIGluIHdpbmRvdykgfHwgISgnc2VydmljZVdvcmtlcicgaW4gbmF2aWdhdG9yKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIE5PVEE6IGRlbGliZXJhZGFtZW50ZSBOTyBjaGVxdWVhbW9zIGBnZXRNZXNzYWdpbmdJbnN0YW5jZSgpYCBhcXXDrSBwb3JxdWVcbiAgICAvLyBlbCBmYWN0b3J5IGBwcm92aWRlTWVzc2FnaW5nKCgpID0+IGdldE1lc3NhZ2luZygpKWAgZXMgbGF6eSBlbiBBbmd1bGFyXG4gICAgLy8gRmlyZSB5IHB1ZWRlIG5vIGVzdGFyIHJlc3VlbHRvIGN1YW5kbyBlc3RhIGZ1bmNpw7NuIHNlIGxsYW1hIHRlbXByYW5vXG4gICAgLy8gZW4gZWwgY2ljbG8gZGUgdmlkYS4gRXNvIGNhdXNhYmEgZmFsc29zIG5lZ2F0aXZvcy4gU2kgRkNNIHJlYWxtZW50ZSBub1xuICAgIC8vIGVzdMOhIGRpc3BvbmlibGUgKHByb3llY3RvIHNpbiBNZXNzYWdpbmcgaGFiaWxpdGFkbywgVkFQSUQgaW52w6FsaWRvKSwgZWxcbiAgICAvLyBmbG93IGRvd25zdHJlYW0gKGBnZXRUb2tlbmAvYHJlcXVlc3RQZXJtaXNzaW9uYCkgZmFsbGFyw6EgY29uIGVycm9yIHJlYWwsXG4gICAgLy8gcXVlIGVzIG1lam9yIFVYIHF1ZSB1biBcIm5vIHNvcG9ydGFkb1wiIHByZW1hdHVyby5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGVsIHRva2VuIGFjdHVhbCBzaW4gaGFjZXIgcmVxdWVzdC5cbiAgICpcbiAgICogQHJldHVybnMgVG9rZW4gYWxtYWNlbmFkbyBvIG51bGxcbiAgICovXG4gIGdldCBjdXJyZW50VG9rZW4oKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVTdWJqZWN0LnZhbHVlLnRva2VuO1xuICB9XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgZGVsIGVzdGFkbyBjb21wbGV0byBkZWwgc2VydmljaW8gZGUgbWVzc2FnaW5nLlxuICAgKi9cbiAgZ2V0IHN0YXRlJCgpOiBPYnNlcnZhYmxlPE1lc3NhZ2luZ1N0YXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIGVsIHVzdWFyaW8geWEgb3RvcmfDsyBwZXJtaXNvIGRlIG5vdGlmaWNhY2lvbmVzLlxuICAgKi9cbiAgZ2V0IGhhc1Blcm1pc3Npb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVTdWJqZWN0LnZhbHVlLnBlcm1pc3Npb24gPT09ICdncmFudGVkJztcbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRyYXRhIGVsIGVzdGFkbyBkZWwgdG9rZW4gZGVzZGUgdW4gdmFsb3IgZXh0ZXJubyAoZWo6IGxvY2FsU3RvcmFnZSkuXG4gICAqIMOadGlsIGN1YW5kbyBlbCB0b2tlbiB5YSBleGlzdGUgcGVybyBlbCBNZXNzYWdpbmdTZXJ2aWNlIG5vIGxvIHRpZW5lIGVuIG1lbW9yaWEuXG4gICAqXG4gICAqIEBwYXJhbSB0b2tlbiBUb2tlbiBGQ00gYSBzZXRlYXJcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBzdG9yZWRUb2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdmY21fdG9rZW4nKTtcbiAgICogaWYgKHN0b3JlZFRva2VuKSB7XG4gICAqICAgbWVzc2FnaW5nLnNldFRva2VuRnJvbVN0b3JhZ2Uoc3RvcmVkVG9rZW4pO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgc2V0VG9rZW5Gcm9tU3RvcmFnZSh0b2tlbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0b2tlbikgcmV0dXJuO1xuXG4gICAgdGhpcy5zdGF0ZVN1YmplY3QubmV4dCh7XG4gICAgICAuLi50aGlzLnN0YXRlU3ViamVjdC52YWx1ZSxcbiAgICAgIHRva2VuLFxuICAgICAgaXNTdXBwb3J0ZWQ6IHRydWUsIC8vIFNpIGhheSB0b2tlbiwgY2xhcmFtZW50ZSBGQ00gZnVuY2lvbmFcbiAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBERUVQIExJTktJTkcgLyBOQVZFR0FDScOTTlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSBkZSBjbGlja3MgZW4gbm90aWZpY2FjaW9uZXMuXG4gICAqXG4gICAqIEVtaXRlIGN1YW5kbyBlbCB1c3VhcmlvIGhhY2UgY2xpY2sgZW4gdW5hIG5vdGlmaWNhY2nDs24gKGZvcmVncm91bmQgbyBiYWNrZ3JvdW5kKS5cbiAgICogVXNhIGVzdGUgb2JzZXJ2YWJsZSBwYXJhIG5hdmVnYXIgYSBsYSBww6FnaW5hIGNvcnJlc3BvbmRpZW50ZS5cbiAgICpcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBxdWUgZW1pdGUgTm90aWZpY2F0aW9uQ2xpY2tFdmVudFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIEBDb21wb25lbnQoey4uLn0pXG4gICAqIGV4cG9ydCBjbGFzcyBBcHBDb21wb25lbnQge1xuICAgKiAgIHByaXZhdGUgbWVzc2FnaW5nID0gaW5qZWN0KE1lc3NhZ2luZ1NlcnZpY2UpO1xuICAgKiAgIHByaXZhdGUgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gICAqXG4gICAqICAgY29uc3RydWN0b3IoKSB7XG4gICAqICAgICB0aGlzLm1lc3NhZ2luZy5vbk5vdGlmaWNhdGlvbkNsaWNrKCkuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICogICAgICAgaWYgKGV2ZW50LmFjdGlvbi5yb3V0ZSkge1xuICAgKiAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtldmVudC5hY3Rpb24ucm91dGVdLCB7XG4gICAqICAgICAgICAgICBxdWVyeVBhcmFtczogZXZlbnQuYWN0aW9uLnF1ZXJ5UGFyYW1zXG4gICAqICAgICAgICAgfSk7XG4gICAqICAgICAgIH1cbiAgICogICAgIH0pO1xuICAgKiAgIH1cbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIG9uTm90aWZpY2F0aW9uQ2xpY2soKTogT2JzZXJ2YWJsZTxOb3RpZmljYXRpb25DbGlja0V2ZW50PiB7XG4gICAgcmV0dXJuIHRoaXMubm90aWZpY2F0aW9uQ2xpY2tTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhZSBsYSBhY2Npw7NuIGRlIG5hdmVnYWNpw7NuIGRlIGxvcyBkYXRvcyBkZSB1bmEgbm90aWZpY2FjacOzbi5cbiAgICpcbiAgICogQnVzY2EgY2FtcG9zIGVzcGVjw61maWNvcyBlbiBlbCBwYXlsb2FkIGRlIGRhdG9zOlxuICAgKiAtIGByb3V0ZWA6IFJ1dGEgaW50ZXJuYSBkZSBsYSBhcHAgKGVqOiAnL29yZGVycy8xMjMnKVxuICAgKiAtIGB1cmxgOiBVUkwgZXh0ZXJuYSAoZWo6ICdodHRwczovL2V4YW1wbGUuY29tJylcbiAgICogLSBgYWN0aW9uX3R5cGVgOiBUaXBvIGRlIGFjY2nDs24gcGVyc29uYWxpemFkYVxuICAgKiAtIENhbXBvcyBjb24gcHJlZmlqbyBgYWN0aW9uX2A6IERhdG9zIGFkaWNpb25hbGVzXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gRGF0b3MgZGVsIHBheWxvYWQgZGUgbGEgbm90aWZpY2FjacOzblxuICAgKiBAcmV0dXJucyBBY2Npw7NuIGRlIG5hdmVnYWNpw7NuIGV4dHJhw61kYVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIFBheWxvYWQgZGVzZGUgZWwgYmFja2VuZDpcbiAgICogLy8geyByb3V0ZTogJy9vcmRlcnMvMTIzJywgYWN0aW9uX3R5cGU6ICd2aWV3X29yZGVyJywgYWN0aW9uX29yZGVySWQ6ICcxMjMnIH1cbiAgICpcbiAgICogY29uc3QgYWN0aW9uID0gbWVzc2FnaW5nLmV4dHJhY3RBY3Rpb25Gcm9tRGF0YShub3RpZmljYXRpb24uZGF0YSk7XG4gICAqIC8vIHsgcm91dGU6ICcvb3JkZXJzLzEyMycsIGFjdGlvblR5cGU6ICd2aWV3X29yZGVyJywgYWN0aW9uRGF0YTogeyBvcmRlcklkOiAnMTIzJyB9IH1cbiAgICogYGBgXG4gICAqL1xuICBleHRyYWN0QWN0aW9uRnJvbURhdGEoZGF0YT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBOb3RpZmljYXRpb25BY3Rpb24ge1xuICAgIGlmICghZGF0YSkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIGNvbnN0IGFjdGlvbjogTm90aWZpY2F0aW9uQWN0aW9uID0ge307XG5cbiAgICAvLyBSdXRhIGludGVybmFcbiAgICBpZiAoZGF0YVsncm91dGUnXSkge1xuICAgICAgYWN0aW9uLnJvdXRlID0gZGF0YVsncm91dGUnXTtcbiAgICB9XG5cbiAgICAvLyBVUkwgZXh0ZXJuYVxuICAgIGlmIChkYXRhWyd1cmwnXSkge1xuICAgICAgYWN0aW9uLnVybCA9IGRhdGFbJ3VybCddO1xuICAgIH1cblxuICAgIC8vIFRpcG8gZGUgYWNjacOzblxuICAgIGlmIChkYXRhWydhY3Rpb25fdHlwZSddKSB7XG4gICAgICBhY3Rpb24uYWN0aW9uVHlwZSA9IGRhdGFbJ2FjdGlvbl90eXBlJ107XG4gICAgfVxuXG4gICAgLy8gUXVlcnkgcGFyYW1zIChwdWVkZSB2ZW5pciBjb21vIEpTT04gc3RyaW5nKVxuICAgIGlmIChkYXRhWydxdWVyeV9wYXJhbXMnXSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYWN0aW9uLnF1ZXJ5UGFyYW1zID0gSlNPTi5wYXJzZShkYXRhWydxdWVyeV9wYXJhbXMnXSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gU2kgbm8gZXMgSlNPTiB2w6FsaWRvLCBpbnRlbnRhciBwYXJzZWFyIGNvbW8ga2V5PXZhbHVlXG4gICAgICAgIGFjdGlvbi5xdWVyeVBhcmFtcyA9IHRoaXMucGFyc2VRdWVyeVN0cmluZyhkYXRhWydxdWVyeV9wYXJhbXMnXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGF0b3MgYWRpY2lvbmFsZXMgY29uIHByZWZpam8gYWN0aW9uX1xuICAgIGNvbnN0IGFjdGlvbkRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHtcbiAgICAgIGlmIChrZXkuc3RhcnRzV2l0aCgnYWN0aW9uXycpICYmIGtleSAhPT0gJ2FjdGlvbl90eXBlJykge1xuICAgICAgICBjb25zdCBjbGVhbktleSA9IGtleS5yZXBsYWNlKCdhY3Rpb25fJywgJycpO1xuICAgICAgICAvLyBJbnRlbnRhciBwYXJzZWFyIEpTT04gc2kgZXMgcG9zaWJsZVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGFjdGlvbkRhdGFbY2xlYW5LZXldID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIGFjdGlvbkRhdGFbY2xlYW5LZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoYWN0aW9uRGF0YSkubGVuZ3RoID4gMCkge1xuICAgICAgYWN0aW9uLmFjdGlvbkRhdGEgPSBhY3Rpb25EYXRhO1xuICAgIH1cblxuICAgIHJldHVybiBhY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogRW1pdGUgbWFudWFsbWVudGUgdW4gZXZlbnRvIGRlIGNsaWNrIGVuIG5vdGlmaWNhY2nDs24uXG4gICAqXG4gICAqIMOadGlsIHBhcmEgbWFuZWphciBjbGlja3MgZW4gbm90aWZpY2FjaW9uZXMgZm9yZWdyb3VuZCBkb25kZVxuICAgKiBsYSBhcHAgZGVjaWRlIG1vc3RyYXIgdW4gYmFubmVyIGN1c3RvbS5cbiAgICpcbiAgICogQHBhcmFtIG5vdGlmaWNhdGlvbiAtIFBheWxvYWQgZGUgbGEgbm90aWZpY2FjacOzblxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIG1lc3NhZ2luZy5vbk1lc3NhZ2UoKS5zdWJzY3JpYmUobm90aWZpY2F0aW9uID0+IHtcbiAgICogICAvLyBNb3N0cmFyIGJhbm5lciBjdXN0b21cbiAgICogICB0aGlzLnNob3dCYW5uZXIobm90aWZpY2F0aW9uLCAoKSA9PiB7XG4gICAqICAgICAvLyBVc3VhcmlvIGhpem8gY2xpY2sgZW4gZWwgYmFubmVyXG4gICAqICAgICBtZXNzYWdpbmcuaGFuZGxlTm90aWZpY2F0aW9uQ2xpY2sobm90aWZpY2F0aW9uKTtcbiAgICogICB9KTtcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgaGFuZGxlTm90aWZpY2F0aW9uQ2xpY2sobm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb25QYXlsb2FkKTogdm9pZCB7XG4gICAgY29uc3QgYWN0aW9uID0gdGhpcy5leHRyYWN0QWN0aW9uRnJvbURhdGEobm90aWZpY2F0aW9uLmRhdGEpO1xuXG4gICAgdGhpcy5ub3RpZmljYXRpb25DbGlja1N1YmplY3QubmV4dCh7XG4gICAgICBub3RpZmljYXRpb24sXG4gICAgICBhY3Rpb24sXG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgdW5hIG5vdGlmaWNhY2nDs24gdGllbmUgYWNjacOzbiBkZSBuYXZlZ2FjacOzbi5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBEYXRvcyBkZWwgcGF5bG9hZFxuICAgKiBAcmV0dXJucyB0cnVlIHNpIHRpZW5lIHJvdXRlIG8gdXJsXG4gICAqL1xuICBoYXNOYXZpZ2F0aW9uQWN0aW9uKGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogYm9vbGVhbiB7XG4gICAgaWYgKCFkYXRhKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICEhKGRhdGFbJ3JvdXRlJ10gfHwgZGF0YVsndXJsJ10pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlYSB1biBxdWVyeSBzdHJpbmcgZW4gdW4gb2JqZXRvLlxuICAgKi9cbiAgcHJpdmF0ZSBwYXJzZVF1ZXJ5U3RyaW5nKHF1ZXJ5U3RyaW5nOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAgIGlmICghcXVlcnlTdHJpbmcpIHJldHVybiBwYXJhbXM7XG5cbiAgICAvLyBSZW1vdmVyID8gaW5pY2lhbCBzaSBleGlzdGVcbiAgICBjb25zdCBjbGVhblF1ZXJ5ID0gcXVlcnlTdHJpbmcuc3RhcnRzV2l0aCgnPycpID8gcXVlcnlTdHJpbmcuc2xpY2UoMSkgOiBxdWVyeVN0cmluZztcblxuICAgIGZvciAoY29uc3QgcGFpciBvZiBjbGVhblF1ZXJ5LnNwbGl0KCcmJykpIHtcbiAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IHBhaXIuc3BsaXQoJz0nKTtcbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgcGFyYW1zW2RlY29kZVVSSUNvbXBvbmVudChrZXkpXSA9IGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSB8fCAnJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxufVxuIl19
|
|
622
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnaW5nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2ZpcmViYXNlL21lc3NhZ2luZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFvQixXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxXQUFXLElBQUksY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbkUsT0FBTyxFQUFjLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFNUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sVUFBVSxDQUFDOztBQWtCbkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkJHO0FBRUgsTUFBTSxPQUFPLGdCQUFnQjtJQWdCM0IsWUFDVSxRQUFrQixFQUNlLE1BQTZCLEVBQ3pDLFVBQWtCLEVBQ3ZDLE1BQWM7UUFIZCxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2UsV0FBTSxHQUFOLE1BQU0sQ0FBdUI7UUFDekMsZUFBVSxHQUFWLFVBQVUsQ0FBUTtRQUN2QyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBbkJoQixtQkFBYyxHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO1FBQ3BELDZCQUF3QixHQUFHLElBQUksT0FBTyxFQUEwQixDQUFDO1FBQ2pFLGlCQUFZLEdBQUcsSUFBSSxlQUFlLENBQWlCO1lBQ3pELEtBQUssRUFBRSxJQUFJO1lBQ1gsVUFBVSxFQUFFLFNBQVM7WUFDckIsV0FBVyxFQUFFLEtBQUs7U0FDbkIs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LEtBQUssTUFBTSxJQUFJLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNyQyxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNSLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNwRSxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7K0dBcHBCVSxnQkFBZ0IsMENBa0JqQix1QkFBdUIsYUFDdkIsV0FBVzttSEFuQlYsZ0JBQWdCLGNBREgsTUFBTTs7NEZBQ25CLGdCQUFnQjtrQkFENUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQW1CN0IsTUFBTTsyQkFBQyx1QkFBdUI7OzBCQUM5QixNQUFNOzJCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1lc3NhZ2luZyBTZXJ2aWNlIChGQ00pXG4gKlxuICogU2VydmljaW8gcGFyYSBGaXJlYmFzZSBDbG91ZCBNZXNzYWdpbmcgKFB1c2ggTm90aWZpY2F0aW9ucykuXG4gKiBQZXJtaXRlIHNvbGljaXRhciBwZXJtaXNvcywgb2J0ZW5lciB0b2tlbnMsIGVzY3VjaGFyIG1lbnNhamVzIHkgbWFuZWphclxuICogbmF2ZWdhY2nDs24gKGRlZXAgbGlua2luZykgY3VhbmRvIGVsIHVzdWFyaW8gdG9jYSB1bmEgbm90aWZpY2FjacOzbi5cbiAqL1xuXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yLCBOZ1pvbmUsIFBMQVRGT1JNX0lEIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNZXNzYWdpbmcsIGdldFRva2VuLCBkZWxldGVUb2tlbiwgb25NZXNzYWdlIH0gZnJvbSAnQGFuZ3VsYXIvZmlyZS9tZXNzYWdpbmcnO1xuaW1wb3J0IHsgaXNTdXBwb3J0ZWQgYXMgZmNtSXNTdXBwb3J0ZWQgfSBmcm9tICdmaXJlYmFzZS9tZXNzYWdpbmcnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFZBTFRFQ0hfRklSRUJBU0VfQ09ORklHIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHtcbiAgTm90aWZpY2F0aW9uQWN0aW9uLFxuICBOb3RpZmljYXRpb25DbGlja0V2ZW50LFxuICBOb3RpZmljYXRpb25QYXlsb2FkLFxuICBOb3RpZmljYXRpb25QZXJtaXNzaW9uLFxuICBWYWx0ZWNoRmlyZWJhc2VDb25maWcsXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIEVzdGFkbyBpbnRlcm5vIGRlbCBzZXJ2aWNpbyBkZSBtZXNzYWdpbmdcbiAqL1xuaW50ZXJmYWNlIE1lc3NhZ2luZ1N0YXRlIHtcbiAgdG9rZW46IHN0cmluZyB8IG51bGw7XG4gIHBlcm1pc3Npb246IE5vdGlmaWNhdGlvblBlcm1pc3Npb247XG4gIGlzU3VwcG9ydGVkOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFNlcnZpY2lvIHBhcmEgRmlyZWJhc2UgQ2xvdWQgTWVzc2FnaW5nIChGQ00pLlxuICpcbiAqIFBlcm1pdGUgcmVjaWJpciBub3RpZmljYWNpb25lcyBwdXNoIGVuIGxhIGFwbGljYWNpw7NuIHdlYi5cbiAqIFJlcXVpZXJlIFZBUElEIGtleSBjb25maWd1cmFkYSBlbiBWYWx0ZWNoRmlyZWJhc2VDb25maWcuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIEBDb21wb25lbnQoey4uLn0pXG4gKiBleHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uQ29tcG9uZW50IHtcbiAqICAgcHJpdmF0ZSBtZXNzYWdpbmcgPSBpbmplY3QoTWVzc2FnaW5nU2VydmljZSk7XG4gKlxuICogICB0b2tlbiA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAqXG4gKiAgIGFzeW5jIGVuYWJsZU5vdGlmaWNhdGlvbnMoKSB7XG4gKiAgICAgLy8gU29saWNpdGFyIHBlcm1pc28geSBvYnRlbmVyIHRva2VuXG4gKiAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCB0aGlzLm1lc3NhZ2luZy5yZXF1ZXN0UGVybWlzc2lvbigpO1xuICpcbiAqICAgICBpZiAodG9rZW4pIHtcbiAqICAgICAgIHRoaXMudG9rZW4uc2V0KHRva2VuKTtcbiAqICAgICAgIC8vIEVudmlhciB0b2tlbiBhIHR1IGJhY2tlbmQgcGFyYSBhbG1hY2VuYXJsb1xuICogICAgICAgYXdhaXQgdGhpcy5iYWNrZW5kLnJlZ2lzdGVyRGV2aWNlVG9rZW4odG9rZW4pO1xuICogICAgIH1cbiAqICAgfVxuICpcbiAqICAgLy8gRXNjdWNoYXIgbWVuc2FqZXMgZW4gZm9yZWdyb3VuZFxuICogICBtZXNzYWdlcyQgPSB0aGlzLm1lc3NhZ2luZy5vbk1lc3NhZ2UoKTtcbiAqIH1cbiAqIGBgYFxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIE1lc3NhZ2luZ1NlcnZpY2Uge1xuICBwcml2YXRlIG1lc3NhZ2VTdWJqZWN0ID0gbmV3IFN1YmplY3Q8Tm90aWZpY2F0aW9uUGF5bG9hZD4oKTtcbiAgcHJpdmF0ZSBub3RpZmljYXRpb25DbGlja1N1YmplY3QgPSBuZXcgU3ViamVjdDxOb3RpZmljYXRpb25DbGlja0V2ZW50PigpO1xuICBwcml2YXRlIHN0YXRlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWVzc2FnaW5nU3RhdGU+KHtcbiAgICB0b2tlbjogbnVsbCxcbiAgICBwZXJtaXNzaW9uOiAnZGVmYXVsdCcsXG4gICAgaXNTdXBwb3J0ZWQ6IGZhbHNlLFxuICB9KTtcblxuICBwcml2YXRlIHVuc3Vic2NyaWJlT25NZXNzYWdlPzogKCkgPT4gdm9pZDtcblxuICAvKiogRmxhZyBwYXJhIHBlcnNpc3RpciBtZW5zYWplcyBGQ00gZW4gbG9jYWxTdG9yYWdlIChkZWJ1Z2dpbmcpICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVidWdQZXJzaXN0ZW5jZTogYm9vbGVhbjtcbiAgLyoqIEtleSBwYXJhIGxvY2FsU3RvcmFnZSBkZSBtZW5zYWplcyBGQ00gKGRlYnVnZ2luZykgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBERUJVR19TVE9SQUdFX0tFWSA9ICdmY21fZGVidWdfbWVzc2FnZXMnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIEBJbmplY3QoVkFMVEVDSF9GSVJFQkFTRV9DT05GSUcpIHByaXZhdGUgY29uZmlnOiBWYWx0ZWNoRmlyZWJhc2VDb25maWcsXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBPYmplY3QsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZVxuICApIHtcbiAgICB0aGlzLmRlYnVnUGVyc2lzdGVuY2UgPSB0aGlzLmNvbmZpZz8uZGVidWdNZXNzYWdlUGVyc2lzdGVuY2UgPz8gZmFsc2U7XG4gICAgdGhpcy5pbml0aWFsaXplTWVzc2FnaW5nKCk7XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSBsYSBpbnN0YW5jaWEgZGUgTWVzc2FnaW5nIGRlIGZvcm1hIHBlcmV6b3NhLlxuICAgKiBFc3RvIGV2aXRhIGVsIGVycm9yIGRlIEFQUF9JTklUSUFMSVpFUiBkZSBBbmd1bGFyRmlyZS5cbiAgICovXG4gIC8qKlxuICAgKiBPYnRpZW5lIGxhIGluc3RhbmNpYSBkZSBNZXNzYWdpbmcgZGUgZm9ybWEgYXN5bmMtc2FmZS5cbiAgICpcbiAgICogQW5ndWxhciBGaXJlIHJlcXVpZXJlIHF1ZSBgYXdhaXQgaXNTdXBwb3J0ZWQoKWAgKEZpcmViYXNlIFNESykgc2UgaGF5YVxuICAgKiByZXN1ZWx0byBhbnRlcyBkZSBpbnllY3RhciBgTWVzc2FnaW5nYC4gU2kgbGxhbWFtb3MgYGluamVjdG9yLmdldChNZXNzYWdpbmcpYFxuICAgKiBhbnRlcyBkZSBlc28sIEFuZ3VsYXJGaXJlIGxhbnphOlxuICAgKiAgIFwiVGhlIEFQUF9JTklUSUFMSVpFUiB0aGF0IGlzICdtYWtpbmcnIGlzU3VwcG9ydGVkKCkgc3luYyAuLi4gaGFzIG5vdCByZXNvbHZlZFwiXG4gICAqXG4gICAqIFBvciBlc28gZXN0YSBmdW5jacOzbjpcbiAgICogIDEuIENhY2hlYSBlbCByZXN1bHRhZG8gZGUgYGZjbUlzU3VwcG9ydGVkKClgIChGaXJlYmFzZSBTREsgd2ViIGNoZWNrKS5cbiAgICogIDIuIFNvbG8gZGVzcHXDqXMgZGUgYXdhaXQsIGludGVudGEgYGluamVjdG9yLmdldChNZXNzYWdpbmcpYC5cbiAgICovXG4gIHByaXZhdGUgZmNtU3VwcG9ydFByb21pc2U/OiBQcm9taXNlPGJvb2xlYW4+O1xuXG4gIHByaXZhdGUgYXN5bmMgZ2V0TWVzc2FnaW5nSW5zdGFuY2UoKTogUHJvbWlzZTxNZXNzYWdpbmcgfCBudWxsPiB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm4gbnVsbDtcblxuICAgIGlmICghdGhpcy5mY21TdXBwb3J0UHJvbWlzZSkge1xuICAgICAgdGhpcy5mY21TdXBwb3J0UHJvbWlzZSA9IGZjbUlzU3VwcG9ydGVkKCkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbTWVzc2FnaW5nXSBmY21Jc1N1cHBvcnRlZCB0aHJldzonLCBlcnIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBzdXBwb3J0ZWQgPSBhd2FpdCB0aGlzLmZjbVN1cHBvcnRQcm9taXNlO1xuICAgIGlmICghc3VwcG9ydGVkKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tNZXNzYWdpbmddIEZDTSBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlcicpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5pbmplY3Rvci5nZXQoTWVzc2FnaW5nLCBudWxsKTtcbiAgICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdbTWVzc2FnaW5nXSBNZXNzYWdpbmcgbm90IHByb3ZpZGVkLiBWZXJpZnkgcHJvdmlkZVZhbHRlY2hGaXJlYmFzZSh7IGVuYWJsZU1lc3NhZ2luZzogdHJ1ZSB9KSArIHZhbGlkIEZpcmViYXNlIGNvbmZpZy4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbTWVzc2FnaW5nXSBpbmplY3Rvci5nZXQoTWVzc2FnaW5nKSB0aHJldzonLCBlcnIpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIElOSUNJQUxJWkFDScOTTlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogSW5pY2lhbGl6YSBlbCBzZXJ2aWNpbyBkZSBtZXNzYWdpbmdcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZU1lc3NhZ2luZygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzdXBwb3J0ZWQgPSBhd2FpdCB0aGlzLmNoZWNrU3VwcG9ydCgpO1xuICAgIGNvbnN0IHBlcm1pc3Npb24gPSB0aGlzLmdldFBlcm1pc3Npb25TdGF0ZSgpO1xuXG4gICAgdGhpcy5zdGF0ZVN1YmplY3QubmV4dCh7XG4gICAgICAuLi50aGlzLnN0YXRlU3ViamVjdC52YWx1ZSxcbiAgICAgIGlzU3VwcG9ydGVkOiBzdXBwb3J0ZWQsXG4gICAgICBwZXJtaXNzaW9uLFxuICAgIH0pO1xuXG4gICAgLy8gU2kgeWEgdGllbmUgcGVybWlzbywgY29uZmlndXJhciBsaXN0ZW5lcnNcbiAgICBpZiAoc3VwcG9ydGVkICYmIHBlcm1pc3Npb24gPT09ICdncmFudGVkJykge1xuICAgICAgdGhpcy5zZXR1cE1lc3NhZ2VMaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIC8vIEVzY3VjaGFyIG1lbnNhamVzIGRlbCBTZXJ2aWNlIFdvcmtlciAoY2xpY2tzIGVuIG5vdGlmaWNhY2lvbmVzIGJhY2tncm91bmQpXG4gICAgdGhpcy5zZXR1cFNlcnZpY2VXb3JrZXJMaXN0ZW5lcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYSBsaXN0ZW5lciBwYXJhIG1lbnNhamVzIGRlbCBTZXJ2aWNlIFdvcmtlci5cbiAgICogUmVjaWJlIGV2ZW50b3MgY3VhbmRvIGVsIHVzdWFyaW8gaGFjZSBjbGljayBlbiB1bmEgbm90aWZpY2FjacOzbiBiYWNrZ3JvdW5kLlxuICAgKi9cbiAgcHJpdmF0ZSBzZXR1cFNlcnZpY2VXb3JrZXJMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkgfHwgISgnc2VydmljZVdvcmtlcicgaW4gbmF2aWdhdG9yKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBldmVudCA9PiB7XG4gICAgICAvLyBWZXJpZmljYXIgcXVlIGVzIHVuIG1lbnNhamUgZGUgbm90aWZpY2FjacOzbiBjbGlja1xuICAgICAgaWYgKGV2ZW50LmRhdGE/LnR5cGUgPT09ICdOT1RJRklDQVRJT05fQ0xJQ0snKSB7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9uID0gZXZlbnQuZGF0YS5ub3RpZmljYXRpb24gYXMgTm90aWZpY2F0aW9uUGF5bG9hZDtcbiAgICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLmV4dHJhY3RBY3Rpb25Gcm9tRGF0YShub3RpZmljYXRpb24uZGF0YSk7XG5cbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkNsaWNrU3ViamVjdC5uZXh0KHtcbiAgICAgICAgICAgIG5vdGlmaWNhdGlvbixcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgRkNNIGVzdMOhIHNvcG9ydGFkbyBlbiBlbCBuYXZlZ2Fkb3IgYWN0dWFsXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNoZWNrU3VwcG9ydCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBWZXJpZmljYXIgQVBJcyBuZWNlc2FyaWFzXG4gICAgaWYgKCEoJ05vdGlmaWNhdGlvbicgaW4gd2luZG93KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghKCdzZXJ2aWNlV29ya2VyJyBpbiBuYXZpZ2F0b3IpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVmVyaWZpY2FyIHF1ZSBtZXNzYWdpbmcgZXN0w6kgZGlzcG9uaWJsZSAoYXN5bmMg4oCUIGVzcGVyYSBBUFBfSU5JVElBTElaRVIpXG4gICAgaWYgKCEoYXdhaXQgdGhpcy5nZXRNZXNzYWdpbmdJbnN0YW5jZSgpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBFUk1JU09TIFkgVE9LRU5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFNvbGljaXRhIHBlcm1pc28gZGUgbm90aWZpY2FjaW9uZXMgeSBvYnRpZW5lIGVsIHRva2VuIEZDTS5cbiAgICpcbiAgICogQHJldHVybnMgVG9rZW4gRkNNIHNpIHNlIG90b3Jnw7MgcGVybWlzbywgbnVsbCBzaSBzZSBkZW5lZ8OzXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgdG9rZW4gPSBhd2FpdCBtZXNzYWdpbmcucmVxdWVzdFBlcm1pc3Npb24oKTtcbiAgICogaWYgKHRva2VuKSB7XG4gICAqICAgY29uc29sZS5sb2coJ1Rva2VuIEZDTTonLCB0b2tlbik7XG4gICAqICAgLy8gRW52aWFyIGEgYmFja2VuZFxuICAgKiB9IGVsc2Uge1xuICAgKiAgIGNvbnNvbGUubG9nKCdQZXJtaXNvIGRlbmVnYWRvIG8gbm8gc29wb3J0YWRvJyk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBhc3luYyByZXF1ZXN0UGVybWlzc2lvbigpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICBpZiAoIShhd2FpdCB0aGlzLmlzU3VwcG9ydGVkKCkpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0ZDTSBubyBlc3TDoSBzb3BvcnRhZG8gZW4gZXN0ZSBuYXZlZ2Fkb3InKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBTb2xpY2l0YXIgcGVybWlzbyBkZSBub3RpZmljYWNpb25lc1xuICAgICAgY29uc3QgcGVybWlzc2lvbiA9IGF3YWl0IE5vdGlmaWNhdGlvbi5yZXF1ZXN0UGVybWlzc2lvbigpO1xuXG4gICAgICB0aGlzLnN0YXRlU3ViamVjdC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5zdGF0ZVN1YmplY3QudmFsdWUsXG4gICAgICAgIHBlcm1pc3Npb246IHBlcm1pc3Npb24gYXMgTm90aWZpY2F0aW9uUGVybWlzc2lvbixcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocGVybWlzc2lvbiAhPT0gJ2dyYW50ZWQnKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignUGVybWlzbyBkZSBub3RpZmljYWNpb25lcyBkZW5lZ2FkbycpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gT2J0ZW5lciB0b2tlbiBGQ01cbiAgICAgIGNvbnN0IHRva2VuID0gYXdhaXQgdGhpcy5nZXRUb2tlbigpO1xuXG4gICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgLy8gQ29uZmlndXJhciBsaXN0ZW5lciBkZSBtZW5zYWplc1xuICAgICAgICB0aGlzLnNldHVwTWVzc2FnZUxpc3RlbmVyKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0b2tlbjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc29saWNpdGFuZG8gcGVybWlzbyBkZSBub3RpZmljYWNpb25lczonLCBlcnJvcik7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSBlbCB0b2tlbiBGQ00gYWN0dWFsIChzaW4gc29saWNpdGFyIHBlcm1pc28pLlxuICAgKlxuICAgKiBAcmV0dXJucyBUb2tlbiBGQ00gc2kgZXN0w6EgZGlzcG9uaWJsZSwgbnVsbCBzaSBub1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHRva2VuID0gYXdhaXQgbWVzc2FnaW5nLmdldFRva2VuKCk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgZ2V0VG9rZW4oKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgY29uc29sZS5sb2coJ1tNZXNzYWdpbmddIGdldFRva2VuKCkgc3RhcnQnKTtcbiAgICBjb25zdCBtZXNzYWdpbmcgPSBhd2FpdCB0aGlzLmdldE1lc3NhZ2luZ0luc3RhbmNlKCk7XG4gICAgaWYgKCFtZXNzYWdpbmcpIHtcbiAgICAgIGNvbnNvbGUud2FybignW01lc3NhZ2luZ10gZ2V0VG9rZW4gYWJvcnRlZDogbm8gTWVzc2FnaW5nIGluc3RhbmNlJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB2YXBpZEtleSA9IHRoaXMuY29uZmlnLm1lc3NhZ2luZ1ZhcGlkS2V5O1xuICAgIGlmICghdmFwaWRLZXkpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1tNZXNzYWdpbmddIFZBUElEIGtleSBubyBjb25maWd1cmFkYSAoY29uZmlnLm1lc3NhZ2luZ1ZhcGlkS2V5KS4gRkNNIG5vIGZ1bmNpb25hcsOhLidcbiAgICAgICk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gUmVnaXN0cmFyIFNXIHBlcnNvbmFsaXphZG8gYW50ZXMgZGUgb2J0ZW5lciB0b2tlblxuICAgICAgLy8gRXN0byBlcyBuZWNlc2FyaW8gY3VhbmRvIHVzYW1vcyB1biBTVyBjdXN0b20gKGZpcmViYXNlLW1lc3NhZ2luZy1zdy5qcylcbiAgICAgIGNvbnN0IHJlZ2lzdHJhdGlvbiA9IGF3YWl0IG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlZ2lzdGVyKCcvZmlyZWJhc2UtbWVzc2FnaW5nLXN3LmpzJyk7XG4gICAgICBjb25zb2xlLmxvZygnW01lc3NhZ2luZ10gU1cgcmVnaXN0ZXJlZCwgd2FpdGluZyByZWFkeS4uLicpO1xuICAgICAgLy8gRXNwZXJhciBhIHF1ZSBlbCBTVyBlc3TDqSBhY3Rpdm9cbiAgICAgIGF3YWl0IG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlYWR5O1xuICAgICAgY29uc29sZS5sb2coJ1tNZXNzYWdpbmddIFNXIHJlYWR5LCBjYWxsaW5nIEZpcmViYXNlIGdldFRva2VuKCkuLi4nKTtcblxuICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCBnZXRUb2tlbihtZXNzYWdpbmcsIHtcbiAgICAgICAgdmFwaWRLZXksXG4gICAgICAgIHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb246IHJlZ2lzdHJhdGlvbixcbiAgICAgIH0pO1xuXG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgJ1tNZXNzYWdpbmddIEZpcmViYXNlIGdldFRva2VuIHJldHVybmVkOicsXG4gICAgICAgIHRva2VuID8gYCR7dG9rZW4uc2xpY2UoMCwgMTYpfeKApmAgOiAnbnVsbC9lbXB0eSdcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuc3RhdGVTdWJqZWN0Lm5leHQoe1xuICAgICAgICAuLi50aGlzLnN0YXRlU3ViamVjdC52YWx1ZSxcbiAgICAgICAgdG9rZW4sXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHRva2VuO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbTWVzc2FnaW5nXSBnZXRUb2tlbiBlcnJvcjonLCBlcnJvcik7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRWxpbWluYSBlbCB0b2tlbiBGQ00gYWN0dWFsICh1bnN1YnNjcmliZSBkZSBub3RpZmljYWNpb25lcykuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYXdhaXQgbWVzc2FnaW5nLmRlbGV0ZVRva2VuKCk7XG4gICAqIGNvbnNvbGUubG9nKCdUb2tlbiBlbGltaW5hZG8sIG5vIHJlY2liaXLDoSBtw6FzIG5vdGlmaWNhY2lvbmVzJyk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgZGVsZXRlVG9rZW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbWVzc2FnaW5nID0gYXdhaXQgdGhpcy5nZXRNZXNzYWdpbmdJbnN0YW5jZSgpO1xuICAgIGlmICghbWVzc2FnaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGRlbGV0ZVRva2VuKG1lc3NhZ2luZyk7XG5cbiAgICAgIHRoaXMuc3RhdGVTdWJqZWN0Lm5leHQoe1xuICAgICAgICAuLi50aGlzLnN0YXRlU3ViamVjdC52YWx1ZSxcbiAgICAgICAgdG9rZW46IG51bGwsXG4gICAgICB9KTtcblxuICAgICAgLy8gTGltcGlhciBsaXN0ZW5lciBkZSBtZW5zYWplc1xuICAgICAgaWYgKHRoaXMudW5zdWJzY3JpYmVPbk1lc3NhZ2UpIHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZU9uTWVzc2FnZSgpO1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlT25NZXNzYWdlID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBlbGltaW5hbmRvIHRva2VuIEZDTTonLCBlcnJvcik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHNlIHB1ZG8gZWxpbWluYXIgZWwgdG9rZW4gZGUgbm90aWZpY2FjaW9uZXMnKTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTUVOU0FKRVNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgZGUgbWVuc2FqZXMgcmVjaWJpZG9zIGVuIGZvcmVncm91bmQuXG4gICAqXG4gICAqIElNUE9SVEFOVEU6IExvcyBtZW5zYWplcyBlbiBiYWNrZ3JvdW5kIHNvbiBtYW5lamFkb3MgcG9yIGVsIFNlcnZpY2UgV29ya2VyLlxuICAgKlxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIHF1ZSBlbWl0ZSBjdWFuZG8gbGxlZ2EgdW4gbWVuc2FqZSBlbiBmb3JlZ3JvdW5kXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogbWVzc2FnaW5nLm9uTWVzc2FnZSgpLnN1YnNjcmliZShwYXlsb2FkID0+IHtcbiAgICogICBjb25zb2xlLmxvZygnTWVuc2FqZSByZWNpYmlkbzonLCBwYXlsb2FkKTtcbiAgICogICAvLyBNb3N0cmFyIG5vdGlmaWNhY2nDs24gY3VzdG9tIG8gYWN0dWFsaXphciBVSVxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBvbk1lc3NhZ2UoKTogT2JzZXJ2YWJsZTxOb3RpZmljYXRpb25QYXlsb2FkPiB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJhIGVsIGxpc3RlbmVyIGRlIG1lbnNhamVzIGVuIGZvcmVncm91bmRcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2V0dXBNZXNzYWdlTGlzdGVuZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbWVzc2FnaW5nID0gYXdhaXQgdGhpcy5nZXRNZXNzYWdpbmdJbnN0YW5jZSgpO1xuICAgIGlmICghbWVzc2FnaW5nIHx8IHRoaXMudW5zdWJzY3JpYmVPbk1lc3NhZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnVuc3Vic2NyaWJlT25NZXNzYWdlID0gb25NZXNzYWdlKG1lc3NhZ2luZywgcGF5bG9hZCA9PiB7XG4gICAgICBjb25zdCBub3RpZmljYXRpb246IE5vdGlmaWNhdGlvblBheWxvYWQgPSB7XG4gICAgICAgIHRpdGxlOiBwYXlsb2FkLm5vdGlmaWNhdGlvbj8udGl0bGUsXG4gICAgICAgIGJvZHk6IHBheWxvYWQubm90aWZpY2F0aW9uPy5ib2R5LFxuICAgICAgICBpbWFnZTogcGF5bG9hZC5ub3RpZmljYXRpb24/LmltYWdlLFxuICAgICAgICBkYXRhOiBwYXlsb2FkLmRhdGEgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICAgICAgbWVzc2FnZUlkOiBwYXlsb2FkLm1lc3NhZ2VJZCxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMubWVzc2FnZVN1YmplY3QubmV4dChub3RpZmljYXRpb24pO1xuXG4gICAgICAvLyBQZXJzaXN0aXIgZW4gbG9jYWxTdG9yYWdlIHBhcmEgZGVidWdnaW5nIHNpIGVzdMOhIGhhYmlsaXRhZG9cbiAgICAgIGlmICh0aGlzLmRlYnVnUGVyc2lzdGVuY2UpIHtcbiAgICAgICAgdGhpcy5wZXJzaXN0TWVzc2FnZUZvckRlYnVnKG5vdGlmaWNhdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUGVyc2lzdGUgdW4gbWVuc2FqZSBGQ00gZW4gbG9jYWxTdG9yYWdlIHBhcmEgZGVidWdnaW5nLlxuICAgKiBTb2xvIHNlIHVzYSBjdWFuZG8gZGVidWdNZXNzYWdlUGVyc2lzdGVuY2UgZXN0w6EgaGFiaWxpdGFkby5cbiAgICogTWFudGllbmUgbG9zIMO6bHRpbW9zIDUwIG1lbnNhamVzLlxuICAgKi9cbiAgcHJpdmF0ZSBwZXJzaXN0TWVzc2FnZUZvckRlYnVnKG1lc3NhZ2U6IE5vdGlmaWNhdGlvblBheWxvYWQpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RvcmVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5ERUJVR19TVE9SQUdFX0tFWSk7XG4gICAgICBjb25zdCBtZXNzYWdlcyA9IHN0b3JlZCA/IEpTT04ucGFyc2Uoc3RvcmVkKSA6IFtdO1xuICAgICAgbWVzc2FnZXMudW5zaGlmdCh7IC4uLm1lc3NhZ2UsIHJlY2VpdmVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSB9KTtcbiAgICAgIC8vIE1hbnRlbmVyIHNvbG8gw7psdGltb3MgNTBcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuREVCVUdfU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KG1lc3NhZ2VzLnNsaWNlKDAsIDUwKSkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignW01lc3NhZ2luZ10gRGVidWcgcGVyc2lzdGVuY2UgZmFpbGVkOicsIGUpO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBFU1RBRE8gWSBVVElMSURBREVTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGVsIGVzdGFkbyBhY3R1YWwgZGVsIHBlcm1pc28gZGUgbm90aWZpY2FjaW9uZXMuXG4gICAqXG4gICAqIEByZXR1cm5zICdncmFudGVkJyB8ICdkZW5pZWQnIHwgJ2RlZmF1bHQnXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgcGVybWlzc2lvbiA9IG1lc3NhZ2luZy5nZXRQZXJtaXNzaW9uU3RhdGUoKTtcbiAgICogaWYgKHBlcm1pc3Npb24gPT09ICdncmFudGVkJykge1xuICAgKiAgIC8vIFlhIHRpZW5lIHBlcm1pc29cbiAgICogfSBlbHNlIGlmIChwZXJtaXNzaW9uID09PSAnZGVmYXVsdCcpIHtcbiAgICogICAvLyBQdWVkZSBzb2xpY2l0YXIgcGVybWlzb1xuICAgKiB9IGVsc2Uge1xuICAgKiAgIC8vIERlbmVnYWRvLCBkZWJlIGhhYmlsaXRhciBtYW51YWxtZW50ZVxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0UGVybWlzc2lvblN0YXRlKCk6IE5vdGlmaWNhdGlvblBlcm1pc3Npb24ge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgcmV0dXJuICdkZWZhdWx0JztcbiAgICB9XG5cbiAgICBpZiAoISgnTm90aWZpY2F0aW9uJyBpbiB3aW5kb3cpKSB7XG4gICAgICByZXR1cm4gJ2RlbmllZCc7XG4gICAgfVxuXG4gICAgcmV0dXJuIE5vdGlmaWNhdGlvbi5wZXJtaXNzaW9uIGFzIE5vdGlmaWNhdGlvblBlcm1pc3Npb247XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgRkNNIGVzdMOhIHNvcG9ydGFkbyBlbiBlbCBuYXZlZ2Fkb3IgYWN0dWFsLlxuICAgKiBVc2EgbMOzZ2ljYSBpbnRlbGlnZW50ZSBwYXJhIGV2aXRhciBmYWxzb3MgbmVnYXRpdm9zIHBvciB0aW1pbmcgZGVsIEluamVjdG9yLlxuICAgKlxuICAgKiBAcmV0dXJucyB0cnVlIHNpIEZDTSBlc3TDoSBzb3BvcnRhZG9cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBpZiAoYXdhaXQgbWVzc2FnaW5nLmlzU3VwcG9ydGVkKCkpIHtcbiAgICogICAvLyBQdWVkZSB1c2FyIG5vdGlmaWNhY2lvbmVzIHB1c2hcbiAgICogfSBlbHNlIHtcbiAgICogICAvLyBOYXZlZ2Fkb3Igbm8gc29wb3J0YSBvIG5vIHRpZW5lIFNlcnZpY2UgV29ya2VyXG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBpc1N1cHBvcnRlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBTaSB5YSB0ZW5lbW9zIHRva2VuIGVuIGVzdGFkbywgY2xhcmFtZW50ZSBGQ00gZnVuY2lvbmFcbiAgICBpZiAodGhpcy5zdGF0ZVN1YmplY3QudmFsdWUudG9rZW4pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIFNpIHlhIGNhbGN1bGFtb3Mgc29wb3J0ZSBleGl0b3NhbWVudGUsIHVzYXJsb1xuICAgIGlmICh0aGlzLnN0YXRlU3ViamVjdC52YWx1ZS5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gVmVyaWZpY2FjaW9uZXMgYsOhc2ljYXMg4oCUIEFQSXMgZGVsIGJyb3dzZXJcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCEoJ05vdGlmaWNhdGlvbicgaW4gd2luZG93KSB8fCAhKCdzZXJ2aWNlV29ya2VyJyBpbiBuYXZpZ2F0b3IpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gTk9UQTogZGVsaWJlcmFkYW1lbnRlIE5PIGNoZXF1ZWFtb3MgYGdldE1lc3NhZ2luZ0luc3RhbmNlKClgIGFxdcOtIHBvcnF1ZVxuICAgIC8vIGVsIGZhY3RvcnkgYHByb3ZpZGVNZXNzYWdpbmcoKCkgPT4gZ2V0TWVzc2FnaW5nKCkpYCBlcyBsYXp5IGVuIEFuZ3VsYXJcbiAgICAvLyBGaXJlIHkgcHVlZGUgbm8gZXN0YXIgcmVzdWVsdG8gY3VhbmRvIGVzdGEgZnVuY2nDs24gc2UgbGxhbWEgdGVtcHJhbm9cbiAgICAvLyBlbiBlbCBjaWNsbyBkZSB2aWRhLiBFc28gY2F1c2FiYSBmYWxzb3MgbmVnYXRpdm9zLiBTaSBGQ00gcmVhbG1lbnRlIG5vXG4gICAgLy8gZXN0w6EgZGlzcG9uaWJsZSAocHJveWVjdG8gc2luIE1lc3NhZ2luZyBoYWJpbGl0YWRvLCBWQVBJRCBpbnbDoWxpZG8pLCBlbFxuICAgIC8vIGZsb3cgZG93bnN0cmVhbSAoYGdldFRva2VuYC9gcmVxdWVzdFBlcm1pc3Npb25gKSBmYWxsYXLDoSBjb24gZXJyb3IgcmVhbCxcbiAgICAvLyBxdWUgZXMgbWVqb3IgVVggcXVlIHVuIFwibm8gc29wb3J0YWRvXCIgcHJlbWF0dXJvLlxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgZWwgdG9rZW4gYWN0dWFsIHNpbiBoYWNlciByZXF1ZXN0LlxuICAgKlxuICAgKiBAcmV0dXJucyBUb2tlbiBhbG1hY2VuYWRvIG8gbnVsbFxuICAgKi9cbiAgZ2V0IGN1cnJlbnRUb2tlbigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZVN1YmplY3QudmFsdWUudG9rZW47XG4gIH1cblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSBkZWwgZXN0YWRvIGNvbXBsZXRvIGRlbCBzZXJ2aWNpbyBkZSBtZXNzYWdpbmcuXG4gICAqL1xuICBnZXQgc3RhdGUkKCk6IE9ic2VydmFibGU8TWVzc2FnaW5nU3RhdGU+IHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgZWwgdXN1YXJpbyB5YSBvdG9yZ8OzIHBlcm1pc28gZGUgbm90aWZpY2FjaW9uZXMuXG4gICAqL1xuICBnZXQgaGFzUGVybWlzc2lvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZVN1YmplY3QudmFsdWUucGVybWlzc2lvbiA9PT0gJ2dyYW50ZWQnO1xuICB9XG5cbiAgLyoqXG4gICAqIEhpZHJhdGEgZWwgZXN0YWRvIGRlbCB0b2tlbiBkZXNkZSB1biB2YWxvciBleHRlcm5vIChlajogbG9jYWxTdG9yYWdlKS5cbiAgICogw5p0aWwgY3VhbmRvIGVsIHRva2VuIHlhIGV4aXN0ZSBwZXJvIGVsIE1lc3NhZ2luZ1NlcnZpY2Ugbm8gbG8gdGllbmUgZW4gbWVtb3JpYS5cbiAgICpcbiAgICogQHBhcmFtIHRva2VuIFRva2VuIEZDTSBhIHNldGVhclxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHN0b3JlZFRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2ZjbV90b2tlbicpO1xuICAgKiBpZiAoc3RvcmVkVG9rZW4pIHtcbiAgICogICBtZXNzYWdpbmcuc2V0VG9rZW5Gcm9tU3RvcmFnZShzdG9yZWRUb2tlbik7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBzZXRUb2tlbkZyb21TdG9yYWdlKHRva2VuOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRva2VuKSByZXR1cm47XG5cbiAgICB0aGlzLnN0YXRlU3ViamVjdC5uZXh0KHtcbiAgICAgIC4uLnRoaXMuc3RhdGVTdWJqZWN0LnZhbHVlLFxuICAgICAgdG9rZW4sXG4gICAgICBpc1N1cHBvcnRlZDogdHJ1ZSwgLy8gU2kgaGF5IHRva2VuLCBjbGFyYW1lbnRlIEZDTSBmdW5jaW9uYVxuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIERFRVAgTElOS0lORyAvIE5BVkVHQUNJw5NOXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIGRlIGNsaWNrcyBlbiBub3RpZmljYWNpb25lcy5cbiAgICpcbiAgICogRW1pdGUgY3VhbmRvIGVsIHVzdWFyaW8gaGFjZSBjbGljayBlbiB1bmEgbm90aWZpY2FjacOzbiAoZm9yZWdyb3VuZCBvIGJhY2tncm91bmQpLlxuICAgKiBVc2EgZXN0ZSBvYnNlcnZhYmxlIHBhcmEgbmF2ZWdhciBhIGxhIHDDoWdpbmEgY29ycmVzcG9uZGllbnRlLlxuICAgKlxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIHF1ZSBlbWl0ZSBOb3RpZmljYXRpb25DbGlja0V2ZW50XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogQENvbXBvbmVudCh7Li4ufSlcbiAgICogZXhwb3J0IGNsYXNzIEFwcENvbXBvbmVudCB7XG4gICAqICAgcHJpdmF0ZSBtZXNzYWdpbmcgPSBpbmplY3QoTWVzc2FnaW5nU2VydmljZSk7XG4gICAqICAgcHJpdmF0ZSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgICpcbiAgICogICBjb25zdHJ1Y3RvcigpIHtcbiAgICogICAgIHRoaXMubWVzc2FnaW5nLm9uTm90aWZpY2F0aW9uQ2xpY2soKS5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgKiAgICAgICBpZiAoZXZlbnQuYWN0aW9uLnJvdXRlKSB7XG4gICAqICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2V2ZW50LmFjdGlvbi5yb3V0ZV0sIHtcbiAgICogICAgICAgICAgIHF1ZXJ5UGFyYW1zOiBldmVudC5hY3Rpb24ucXVlcnlQYXJhbXNcbiAgICogICAgICAgICB9KTtcbiAgICogICAgICAgfVxuICAgKiAgICAgfSk7XG4gICAqICAgfVxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgb25Ob3RpZmljYXRpb25DbGljaygpOiBPYnNlcnZhYmxlPE5vdGlmaWNhdGlvbkNsaWNrRXZlbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5ub3RpZmljYXRpb25DbGlja1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFlIGxhIGFjY2nDs24gZGUgbmF2ZWdhY2nDs24gZGUgbG9zIGRhdG9zIGRlIHVuYSBub3RpZmljYWNpw7NuLlxuICAgKlxuICAgKiBCdXNjYSBjYW1wb3MgZXNwZWPDrWZpY29zIGVuIGVsIHBheWxvYWQgZGUgZGF0b3M6XG4gICAqIC0gYHJvdXRlYDogUnV0YSBpbnRlcm5hIGRlIGxhIGFwcCAoZWo6ICcvb3JkZXJzLzEyMycpXG4gICAqIC0gYHVybGA6IFVSTCBleHRlcm5hIChlajogJ2h0dHBzOi8vZXhhbXBsZS5jb20nKVxuICAgKiAtIGBhY3Rpb25fdHlwZWA6IFRpcG8gZGUgYWNjacOzbiBwZXJzb25hbGl6YWRhXG4gICAqIC0gQ2FtcG9zIGNvbiBwcmVmaWpvIGBhY3Rpb25fYDogRGF0b3MgYWRpY2lvbmFsZXNcbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBEYXRvcyBkZWwgcGF5bG9hZCBkZSBsYSBub3RpZmljYWNpw7NuXG4gICAqIEByZXR1cm5zIEFjY2nDs24gZGUgbmF2ZWdhY2nDs24gZXh0cmHDrWRhXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gUGF5bG9hZCBkZXNkZSBlbCBiYWNrZW5kOlxuICAgKiAvLyB7IHJvdXRlOiAnL29yZGVycy8xMjMnLCBhY3Rpb25fdHlwZTogJ3ZpZXdfb3JkZXInLCBhY3Rpb25fb3JkZXJJZDogJzEyMycgfVxuICAgKlxuICAgKiBjb25zdCBhY3Rpb24gPSBtZXNzYWdpbmcuZXh0cmFjdEFjdGlvbkZyb21EYXRhKG5vdGlmaWNhdGlvbi5kYXRhKTtcbiAgICogLy8geyByb3V0ZTogJy9vcmRlcnMvMTIzJywgYWN0aW9uVHlwZTogJ3ZpZXdfb3JkZXInLCBhY3Rpb25EYXRhOiB7IG9yZGVySWQ6ICcxMjMnIH0gfVxuICAgKiBgYGBcbiAgICovXG4gIGV4dHJhY3RBY3Rpb25Gcm9tRGF0YShkYXRhPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IE5vdGlmaWNhdGlvbkFjdGlvbiB7XG4gICAgaWYgKCFkYXRhKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgY29uc3QgYWN0aW9uOiBOb3RpZmljYXRpb25BY3Rpb24gPSB7fTtcblxuICAgIC8vIFJ1dGEgaW50ZXJuYVxuICAgIGlmIChkYXRhWydyb3V0ZSddKSB7XG4gICAgICBhY3Rpb24ucm91dGUgPSBkYXRhWydyb3V0ZSddO1xuICAgIH1cblxuICAgIC8vIFVSTCBleHRlcm5hXG4gICAgaWYgKGRhdGFbJ3VybCddKSB7XG4gICAgICBhY3Rpb24udXJsID0gZGF0YVsndXJsJ107XG4gICAgfVxuXG4gICAgLy8gVGlwbyBkZSBhY2Npw7NuXG4gICAgaWYgKGRhdGFbJ2FjdGlvbl90eXBlJ10pIHtcbiAgICAgIGFjdGlvbi5hY3Rpb25UeXBlID0gZGF0YVsnYWN0aW9uX3R5cGUnXTtcbiAgICB9XG5cbiAgICAvLyBRdWVyeSBwYXJhbXMgKHB1ZWRlIHZlbmlyIGNvbW8gSlNPTiBzdHJpbmcpXG4gICAgaWYgKGRhdGFbJ3F1ZXJ5X3BhcmFtcyddKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhY3Rpb24ucXVlcnlQYXJhbXMgPSBKU09OLnBhcnNlKGRhdGFbJ3F1ZXJ5X3BhcmFtcyddKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBTaSBubyBlcyBKU09OIHbDoWxpZG8sIGludGVudGFyIHBhcnNlYXIgY29tbyBrZXk9dmFsdWVcbiAgICAgICAgYWN0aW9uLnF1ZXJ5UGFyYW1zID0gdGhpcy5wYXJzZVF1ZXJ5U3RyaW5nKGRhdGFbJ3F1ZXJ5X3BhcmFtcyddKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEYXRvcyBhZGljaW9uYWxlcyBjb24gcHJlZmlqbyBhY3Rpb25fXG4gICAgY29uc3QgYWN0aW9uRGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkYXRhKSkge1xuICAgICAgaWYgKGtleS5zdGFydHNXaXRoKCdhY3Rpb25fJykgJiYga2V5ICE9PSAnYWN0aW9uX3R5cGUnKSB7XG4gICAgICAgIGNvbnN0IGNsZWFuS2V5ID0ga2V5LnJlcGxhY2UoJ2FjdGlvbl8nLCAnJyk7XG4gICAgICAgIC8vIEludGVudGFyIHBhcnNlYXIgSlNPTiBzaSBlcyBwb3NpYmxlXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYWN0aW9uRGF0YVtjbGVhbktleV0gPSBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgYWN0aW9uRGF0YVtjbGVhbktleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChPYmplY3Qua2V5cyhhY3Rpb25EYXRhKS5sZW5ndGggPiAwKSB7XG4gICAgICBhY3Rpb24uYWN0aW9uRGF0YSA9IGFjdGlvbkRhdGE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0ZSBtYW51YWxtZW50ZSB1biBldmVudG8gZGUgY2xpY2sgZW4gbm90aWZpY2FjacOzbi5cbiAgICpcbiAgICogw5p0aWwgcGFyYSBtYW5lamFyIGNsaWNrcyBlbiBub3RpZmljYWNpb25lcyBmb3JlZ3JvdW5kIGRvbmRlXG4gICAqIGxhIGFwcCBkZWNpZGUgbW9zdHJhciB1biBiYW5uZXIgY3VzdG9tLlxuICAgKlxuICAgKiBAcGFyYW0gbm90aWZpY2F0aW9uIC0gUGF5bG9hZCBkZSBsYSBub3RpZmljYWNpw7NuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogbWVzc2FnaW5nLm9uTWVzc2FnZSgpLnN1YnNjcmliZShub3RpZmljYXRpb24gPT4ge1xuICAgKiAgIC8vIE1vc3RyYXIgYmFubmVyIGN1c3RvbVxuICAgKiAgIHRoaXMuc2hvd0Jhbm5lcihub3RpZmljYXRpb24sICgpID0+IHtcbiAgICogICAgIC8vIFVzdWFyaW8gaGl6byBjbGljayBlbiBlbCBiYW5uZXJcbiAgICogICAgIG1lc3NhZ2luZy5oYW5kbGVOb3RpZmljYXRpb25DbGljayhub3RpZmljYXRpb24pO1xuICAgKiAgIH0pO1xuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBoYW5kbGVOb3RpZmljYXRpb25DbGljayhub3RpZmljYXRpb246IE5vdGlmaWNhdGlvblBheWxvYWQpOiB2b2lkIHtcbiAgICBjb25zdCBhY3Rpb24gPSB0aGlzLmV4dHJhY3RBY3Rpb25Gcm9tRGF0YShub3RpZmljYXRpb24uZGF0YSk7XG5cbiAgICB0aGlzLm5vdGlmaWNhdGlvbkNsaWNrU3ViamVjdC5uZXh0KHtcbiAgICAgIG5vdGlmaWNhdGlvbixcbiAgICAgIGFjdGlvbixcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBzaSB1bmEgbm90aWZpY2FjacOzbiB0aWVuZSBhY2Npw7NuIGRlIG5hdmVnYWNpw7NuLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIERhdG9zIGRlbCBwYXlsb2FkXG4gICAqIEByZXR1cm5zIHRydWUgc2kgdGllbmUgcm91dGUgbyB1cmxcbiAgICovXG4gIGhhc05hdmlnYXRpb25BY3Rpb24oZGF0YT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBib29sZWFuIHtcbiAgICBpZiAoIWRhdGEpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gISEoZGF0YVsncm91dGUnXSB8fCBkYXRhWyd1cmwnXSk7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2VhIHVuIHF1ZXJ5IHN0cmluZyBlbiB1biBvYmpldG8uXG4gICAqL1xuICBwcml2YXRlIHBhcnNlUXVlcnlTdHJpbmcocXVlcnlTdHJpbmc6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIGNvbnN0IHBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gICAgaWYgKCFxdWVyeVN0cmluZykgcmV0dXJuIHBhcmFtcztcblxuICAgIC8vIFJlbW92ZXIgPyBpbmljaWFsIHNpIGV4aXN0ZVxuICAgIGNvbnN0IGNsZWFuUXVlcnkgPSBxdWVyeVN0cmluZy5zdGFydHNXaXRoKCc/JykgPyBxdWVyeVN0cmluZy5zbGljZSgxKSA6IHF1ZXJ5U3RyaW5nO1xuXG4gICAgZm9yIChjb25zdCBwYWlyIG9mIGNsZWFuUXVlcnkuc3BsaXQoJyYnKSkge1xuICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gcGFpci5zcGxpdCgnPScpO1xuICAgICAgaWYgKGtleSkge1xuICAgICAgICBwYXJhbXNbZGVjb2RlVVJJQ29tcG9uZW50KGtleSldID0gZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlIHx8ICcnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcGFyYW1zO1xuICB9XG59XG4iXX0=
|
package/esm2022/lib/version.mjs
CHANGED
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* Current version of valtech-components.
|
|
3
3
|
* This is automatically updated during the publish process.
|
|
4
4
|
*/
|
|
5
|
-
export const VERSION = '2.0.
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
5
|
+
export const VERSION = '2.0.751';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzIuMC43NTEnO1xuIl19
|
|
@@ -41,6 +41,7 @@ import { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';
|
|
|
41
41
|
import { filter, catchError, switchMap, finalize, take, tap, map as map$1, debounceTime as debounceTime$1, takeUntil as takeUntil$1 } from 'rxjs/operators';
|
|
42
42
|
import * as i1$8 from '@angular/common/http';
|
|
43
43
|
import { provideHttpClient, withInterceptors, HttpErrorResponse, HttpClient } from '@angular/common/http';
|
|
44
|
+
import { isSupported } from 'firebase/messaging';
|
|
44
45
|
import { ImageCropperComponent } from 'ngx-image-cropper';
|
|
45
46
|
import { Capacitor } from '@capacitor/core';
|
|
46
47
|
import 'prismjs/components/prism-scss';
|
|
@@ -50,7 +51,7 @@ import 'prismjs/components/prism-json';
|
|
|
50
51
|
* Current version of valtech-components.
|
|
51
52
|
* This is automatically updated during the publish process.
|
|
52
53
|
*/
|
|
53
|
-
const VERSION = '2.0.
|
|
54
|
+
const VERSION = '2.0.751';
|
|
54
55
|
|
|
55
56
|
/**
|
|
56
57
|
* Servicio para gestionar presets de componentes.
|
|
@@ -21742,20 +21743,29 @@ class MessagingService {
|
|
|
21742
21743
|
this.debugPersistence = this.config?.debugMessagePersistence ?? false;
|
|
21743
21744
|
this.initializeMessaging();
|
|
21744
21745
|
}
|
|
21745
|
-
|
|
21746
|
-
|
|
21747
|
-
|
|
21748
|
-
|
|
21749
|
-
|
|
21746
|
+
async getMessagingInstance() {
|
|
21747
|
+
if (!isPlatformBrowser(this.platformId))
|
|
21748
|
+
return null;
|
|
21749
|
+
if (!this.fcmSupportPromise) {
|
|
21750
|
+
this.fcmSupportPromise = isSupported().catch(err => {
|
|
21751
|
+
console.warn('[Messaging] fcmIsSupported threw:', err);
|
|
21752
|
+
return false;
|
|
21753
|
+
});
|
|
21754
|
+
}
|
|
21755
|
+
const supported = await this.fcmSupportPromise;
|
|
21756
|
+
if (!supported) {
|
|
21757
|
+
console.warn('[Messaging] FCM not supported in this browser');
|
|
21758
|
+
return null;
|
|
21759
|
+
}
|
|
21750
21760
|
try {
|
|
21751
21761
|
const instance = this.injector.get(Messaging, null);
|
|
21752
21762
|
if (!instance) {
|
|
21753
|
-
console.warn('[Messaging] Messaging not provided. Verify provideValtechFirebase({ enableMessaging: true }) + valid Firebase config
|
|
21763
|
+
console.warn('[Messaging] Messaging not provided. Verify provideValtechFirebase({ enableMessaging: true }) + valid Firebase config.');
|
|
21754
21764
|
}
|
|
21755
21765
|
return instance;
|
|
21756
21766
|
}
|
|
21757
21767
|
catch (err) {
|
|
21758
|
-
console.error('[Messaging]
|
|
21768
|
+
console.error('[Messaging] injector.get(Messaging) threw:', err);
|
|
21759
21769
|
return null;
|
|
21760
21770
|
}
|
|
21761
21771
|
}
|
|
@@ -21820,8 +21830,8 @@ class MessagingService {
|
|
|
21820
21830
|
if (!('serviceWorker' in navigator)) {
|
|
21821
21831
|
return false;
|
|
21822
21832
|
}
|
|
21823
|
-
// Verificar que messaging esté disponible
|
|
21824
|
-
if (!this.getMessagingInstance()) {
|
|
21833
|
+
// Verificar que messaging esté disponible (async — espera APP_INITIALIZER)
|
|
21834
|
+
if (!(await this.getMessagingInstance())) {
|
|
21825
21835
|
return false;
|
|
21826
21836
|
}
|
|
21827
21837
|
return true;
|
|
@@ -21886,7 +21896,7 @@ class MessagingService {
|
|
|
21886
21896
|
*/
|
|
21887
21897
|
async getToken() {
|
|
21888
21898
|
console.log('[Messaging] getToken() start');
|
|
21889
|
-
const messaging = this.getMessagingInstance();
|
|
21899
|
+
const messaging = await this.getMessagingInstance();
|
|
21890
21900
|
if (!messaging) {
|
|
21891
21901
|
console.warn('[Messaging] getToken aborted: no Messaging instance');
|
|
21892
21902
|
return null;
|
|
@@ -21930,7 +21940,7 @@ class MessagingService {
|
|
|
21930
21940
|
* ```
|
|
21931
21941
|
*/
|
|
21932
21942
|
async deleteToken() {
|
|
21933
|
-
const messaging = this.getMessagingInstance();
|
|
21943
|
+
const messaging = await this.getMessagingInstance();
|
|
21934
21944
|
if (!messaging) {
|
|
21935
21945
|
return;
|
|
21936
21946
|
}
|
|
@@ -21975,8 +21985,8 @@ class MessagingService {
|
|
|
21975
21985
|
/**
|
|
21976
21986
|
* Configura el listener de mensajes en foreground
|
|
21977
21987
|
*/
|
|
21978
|
-
setupMessageListener() {
|
|
21979
|
-
const messaging = this.getMessagingInstance();
|
|
21988
|
+
async setupMessageListener() {
|
|
21989
|
+
const messaging = await this.getMessagingInstance();
|
|
21980
21990
|
if (!messaging || this.unsubscribeOnMessage) {
|
|
21981
21991
|
return;
|
|
21982
21992
|
}
|