valtech-components 2.0.739 → 2.0.741
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/components/molecules/username-input/username-input.component.mjs +37 -35
- package/esm2022/lib/components/organisms/bottom-nav/bottom-nav.component.mjs +3 -3
- package/esm2022/lib/services/firebase/messaging.service.mjs +13 -8
- package/esm2022/lib/version.mjs +2 -2
- package/fesm2022/valtech-components.mjs +51 -44
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/atoms/rights-footer/rights-footer.component.d.ts +2 -2
- package/lib/components/atoms/text/text.component.d.ts +1 -1
- package/lib/components/molecules/features-list/features-list.component.d.ts +1 -1
- package/lib/components/organisms/article/article.component.d.ts +3 -3
- package/lib/components/organisms/bottom-nav/bottom-nav.component.d.ts +1 -1
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
|
@@ -103,7 +103,7 @@ export class MessagingService {
|
|
|
103
103
|
if (!isPlatformBrowser(this.platformId) || !('serviceWorker' in navigator)) {
|
|
104
104
|
return;
|
|
105
105
|
}
|
|
106
|
-
navigator.serviceWorker.addEventListener('message',
|
|
106
|
+
navigator.serviceWorker.addEventListener('message', event => {
|
|
107
107
|
// Verificar que es un mensaje de notificación click
|
|
108
108
|
if (event.data?.type === 'NOTIFICATION_CLICK') {
|
|
109
109
|
this.ngZone.run(() => {
|
|
@@ -158,7 +158,7 @@ export class MessagingService {
|
|
|
158
158
|
* ```
|
|
159
159
|
*/
|
|
160
160
|
async requestPermission() {
|
|
161
|
-
if (!await this.isSupported()) {
|
|
161
|
+
if (!(await this.isSupported())) {
|
|
162
162
|
console.warn('FCM no está soportado en este navegador');
|
|
163
163
|
return null;
|
|
164
164
|
}
|
|
@@ -287,7 +287,7 @@ export class MessagingService {
|
|
|
287
287
|
if (!messaging || this.unsubscribeOnMessage) {
|
|
288
288
|
return;
|
|
289
289
|
}
|
|
290
|
-
this.unsubscribeOnMessage = onMessage(messaging,
|
|
290
|
+
this.unsubscribeOnMessage = onMessage(messaging, payload => {
|
|
291
291
|
const notification = {
|
|
292
292
|
title: payload.notification?.title,
|
|
293
293
|
body: payload.notification?.body,
|
|
@@ -372,16 +372,21 @@ export class MessagingService {
|
|
|
372
372
|
if (this.stateSubject.value.isSupported) {
|
|
373
373
|
return true;
|
|
374
374
|
}
|
|
375
|
-
// Verificaciones básicas
|
|
375
|
+
// Verificaciones básicas — APIs del browser
|
|
376
376
|
if (!isPlatformBrowser(this.platformId)) {
|
|
377
377
|
return false;
|
|
378
378
|
}
|
|
379
379
|
if (!('Notification' in window) || !('serviceWorker' in navigator)) {
|
|
380
380
|
return false;
|
|
381
381
|
}
|
|
382
|
-
//
|
|
383
|
-
//
|
|
384
|
-
|
|
382
|
+
// NOTA: deliberadamente NO chequeamos `getMessagingInstance()` aquí porque
|
|
383
|
+
// el factory `provideMessaging(() => getMessaging())` es lazy en Angular
|
|
384
|
+
// Fire y puede no estar resuelto cuando esta función se llama temprano
|
|
385
|
+
// en el ciclo de vida. Eso causaba falsos negativos. Si FCM realmente no
|
|
386
|
+
// está disponible (proyecto sin Messaging habilitado, VAPID inválido), el
|
|
387
|
+
// flow downstream (`getToken`/`requestPermission`) fallará con error real,
|
|
388
|
+
// que es mejor UX que un "no soportado" prematuro.
|
|
389
|
+
return true;
|
|
385
390
|
}
|
|
386
391
|
/**
|
|
387
392
|
* Obtiene el token actual sin hacer request.
|
|
@@ -594,4 +599,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
594
599
|
type: Inject,
|
|
595
600
|
args: [PLATFORM_ID]
|
|
596
601
|
}] }, { type: i0.NgZone }] });
|
|
597
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnaW5nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2ZpcmViYXNlL21lc3NhZ2luZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFvQixXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RGLE9BQU8sRUFBYyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTVELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7QUFrQm5EOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZCRztBQUVILE1BQU0sT0FBTyxnQkFBZ0I7SUFnQjNCLFlBQ1UsUUFBa0IsRUFDZSxNQUE2QixFQUN6QyxVQUFrQixFQUN2QyxNQUFjO1FBSGQsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNlLFdBQU0sR0FBTixNQUFNLENBQXVCO1FBQ3pDLGVBQVUsR0FBVixVQUFVLENBQVE7UUFDdkMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQW5CaEIsbUJBQWMsR0FBRyxJQUFJLE9BQU8sRUFBdUIsQ0FBQztRQUNwRCw2QkFBd0IsR0FBRyxJQUFJLE9BQU8sRUFBMEIsQ0FBQztRQUNqRSxpQkFBWSxHQUFHLElBQUksZUFBZSxDQUFpQjtZQUN6RCxLQUFLLEVBQUUsSUFBSTtZQUNYLFVBQVUsRUFBRSxTQUFTO1lBQ3JCLFdBQVcsRUFBRSxLQUFLO1NBQ25CLENBQUMsQ0FBQztRQU1ILHdEQUF3RDtRQUN2QyxzQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQztR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QUNSLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNwRSxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7K0dBaG1CVSxnQkFBZ0IsMENBa0JqQix1QkFBdUIsYUFDdkIsV0FBVzttSEFuQlYsZ0JBQWdCLGNBREgsTUFBTTs7NEZBQ25CLGdCQUFnQjtrQkFENUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQW1CN0IsTUFBTTsyQkFBQyx1QkFBdUI7OzBCQUM5QixNQUFNOzJCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1lc3NhZ2luZyBTZXJ2aWNlIChGQ00pXG4gKlxuICogU2VydmljaW8gcGFyYSBGaXJlYmFzZSBDbG91ZCBNZXNzYWdpbmcgKFB1c2ggTm90aWZpY2F0aW9ucykuXG4gKiBQZXJtaXRlIHNvbGljaXRhciBwZXJtaXNvcywgb2J0ZW5lciB0b2tlbnMsIGVzY3VjaGFyIG1lbnNhamVzIHkgbWFuZWphclxuICogbmF2ZWdhY2nDs24gKGRlZXAgbGlua2luZykgY3VhbmRvIGVsIHVzdWFyaW8gdG9jYSB1bmEgbm90aWZpY2FjacOzbi5cbiAqL1xuXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yLCBOZ1pvbmUsIFBMQVRGT1JNX0lEIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNZXNzYWdpbmcsIGdldFRva2VuLCBkZWxldGVUb2tlbiwgb25NZXNzYWdlIH0gZnJvbSAnQGFuZ3VsYXIvZmlyZS9tZXNzYWdpbmcnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFZBTFRFQ0hfRklSRUJBU0VfQ09ORklHIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHtcbiAgTm90aWZpY2F0aW9uQWN0aW9uLFxuICBOb3RpZmljYXRpb25DbGlja0V2ZW50LFxuICBOb3RpZmljYXRpb25QYXlsb2FkLFxuICBOb3RpZmljYXRpb25QZXJtaXNzaW9uLFxuICBWYWx0ZWNoRmlyZWJhc2VDb25maWcsXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIEVzdGFkbyBpbnRlcm5vIGRlbCBzZXJ2aWNpbyBkZSBtZXNzYWdpbmdcbiAqL1xuaW50ZXJmYWNlIE1lc3NhZ2luZ1N0YXRlIHtcbiAgdG9rZW46IHN0cmluZyB8IG51bGw7XG4gIHBlcm1pc3Npb246IE5vdGlmaWNhdGlvblBlcm1pc3Npb247XG4gIGlzU3VwcG9ydGVkOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFNlcnZpY2lvIHBhcmEgRmlyZWJhc2UgQ2xvdWQgTWVzc2FnaW5nIChGQ00pLlxuICpcbiAqIFBlcm1pdGUgcmVjaWJpciBub3RpZmljYWNpb25lcyBwdXNoIGVuIGxhIGFwbGljYWNpw7NuIHdlYi5cbiAqIFJlcXVpZXJlIFZBUElEIGtleSBjb25maWd1cmFkYSBlbiBWYWx0ZWNoRmlyZWJhc2VDb25maWcuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIEBDb21wb25lbnQoey4uLn0pXG4gKiBleHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uQ29tcG9uZW50IHtcbiAqICAgcHJpdmF0ZSBtZXNzYWdpbmcgPSBpbmplY3QoTWVzc2FnaW5nU2VydmljZSk7XG4gKlxuICogICB0b2tlbiA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAqXG4gKiAgIGFzeW5jIGVuYWJsZU5vdGlmaWNhdGlvbnMoKSB7XG4gKiAgICAgLy8gU29saWNpdGFyIHBlcm1pc28geSBvYnRlbmVyIHRva2VuXG4gKiAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCB0aGlzLm1lc3NhZ2luZy5yZXF1ZXN0UGVybWlzc2lvbigpO1xuICpcbiAqICAgICBpZiAodG9rZW4pIHtcbiAqICAgICAgIHRoaXMudG9rZW4uc2V0KHRva2VuKTtcbiAqICAgICAgIC8vIEVudmlhciB0b2tlbiBhIHR1IGJhY2tlbmQgcGFyYSBhbG1hY2VuYXJsb1xuICogICAgICAgYXdhaXQgdGhpcy5iYWNrZW5kLnJlZ2lzdGVyRGV2aWNlVG9rZW4odG9rZW4pO1xuICogICAgIH1cbiAqICAgfVxuICpcbiAqICAgLy8gRXNjdWNoYXIgbWVuc2FqZXMgZW4gZm9yZWdyb3VuZFxuICogICBtZXNzYWdlcyQgPSB0aGlzLm1lc3NhZ2luZy5vbk1lc3NhZ2UoKTtcbiAqIH1cbiAqIGBgYFxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIE1lc3NhZ2luZ1NlcnZpY2Uge1xuICBwcml2YXRlIG1lc3NhZ2VTdWJqZWN0ID0gbmV3IFN1YmplY3Q8Tm90aWZpY2F0aW9uUGF5bG9hZD4oKTtcbiAgcHJpdmF0ZSBub3RpZmljYXRpb25DbGlja1N1YmplY3QgPSBuZXcgU3ViamVjdDxOb3RpZmljYXRpb25DbGlja0V2ZW50PigpO1xuICBwcml2YXRlIHN0YXRlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWVzc2FnaW5nU3RhdGU+KHtcbiAgICB0b2tlbjogbnVsbCxcbiAgICBwZXJtaXNzaW9uOiAnZGVmYXVsdCcsXG4gICAgaXNTdXBwb3J0ZWQ6IGZhbHNlLFxuICB9KTtcblxuICBwcml2YXRlIHVuc3Vic2NyaWJlT25NZXNzYWdlPzogKCkgPT4gdm9pZDtcblxuICAvKiogRmxhZyBwYXJhIHBlcnNpc3RpciBtZW5zYWplcyBGQ00gZW4gbG9jYWxTdG9yYWdlIChkZWJ1Z2dpbmcpICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVidWdQZXJzaXN0ZW5jZTogYm9vbGVhbjtcbiAgLyoqIEtleSBwYXJhIGxvY2FsU3RvcmFnZSBkZSBtZW5zYWplcyBGQ00gKGRlYnVnZ2luZykgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBERUJVR19TVE9SQUdFX0tFWSA9ICdmY21fZGVidWdfbWVzc2FnZXMnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIEBJbmplY3QoVkFMVEVDSF9GSVJFQkFTRV9DT05GSUcpIHByaXZhdGUgY29uZmlnOiBWYWx0ZWNoRmlyZWJhc2VDb25maWcsXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBPYmplY3QsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZVxuICApIHtcbiAgICB0aGlzLmRlYnVnUGVyc2lzdGVuY2UgPSB0aGlzLmNvbmZpZz8uZGVidWdNZXNzYWdlUGVyc2lzdGVuY2UgPz8gZmFsc2U7XG4gICAgdGhpcy5pbml0aWFsaXplTWVzc2FnaW5nKCk7XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSBsYSBpbnN0YW5jaWEgZGUgTWVzc2FnaW5nIGRlIGZvcm1hIHBlcmV6b3NhLlxuICAgKiBFc3RvIGV2aXRhIGVsIGVycm9yIGRlIEFQUF9JTklUSUFMSVpFUiBkZSBBbmd1bGFyRmlyZS5cbiAgICovXG4gIHByaXZhdGUgZ2V0TWVzc2FnaW5nSW5zdGFuY2UoKTogTWVzc2FnaW5nIHwgbnVsbCB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLmluamVjdG9yLmdldChNZXNzYWdpbmcsIG51bGwpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIElOSUNJQUxJWkFDScOTTlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogSW5pY2lhbGl6YSBlbCBzZXJ2aWNpbyBkZSBtZXNzYWdpbmdcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZU1lc3NhZ2luZygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzdXBwb3J0ZWQgPSBhd2FpdCB0aGlzLmNoZWNrU3VwcG9ydCgpO1xuICAgIGNvbnN0IHBlcm1pc3Npb24gPSB0aGlzLmdldFBlcm1pc3Npb25TdGF0ZSgpO1xuXG4gICAgdGhpcy5zdGF0ZVN1YmplY3QubmV4dCh7XG4gICAgICAuLi50aGlzLnN0YXRlU3ViamVjdC52YWx1ZSxcbiAgICAgIGlzU3VwcG9ydGVkOiBzdXBwb3J0ZWQsXG4gICAgICBwZXJtaXNzaW9uLFxuICAgIH0pO1xuXG4gICAgLy8gU2kgeWEgdGllbmUgcGVybWlzbywgY29uZmlndXJhciBsaXN0ZW5lcnNcbiAgICBpZiAoc3VwcG9ydGVkICYmIHBlcm1pc3Npb24gPT09ICdncmFudGVkJykge1xuICAgICAgdGhpcy5zZXR1cE1lc3NhZ2VMaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIC8vIEVzY3VjaGFyIG1lbnNhamVzIGRlbCBTZXJ2aWNlIFdvcmtlciAoY2xpY2tzIGVuIG5vdGlmaWNhY2lvbmVzIGJhY2tncm91bmQpXG4gICAgdGhpcy5zZXR1cFNlcnZpY2VXb3JrZXJMaXN0ZW5lcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYSBsaXN0ZW5lciBwYXJhIG1lbnNhamVzIGRlbCBTZXJ2aWNlIFdvcmtlci5cbiAgICogUmVjaWJlIGV2ZW50b3MgY3VhbmRvIGVsIHVzdWFyaW8gaGFjZSBjbGljayBlbiB1bmEgbm90aWZpY2FjacOzbiBiYWNrZ3JvdW5kLlxuICAgKi9cbiAgcHJpdmF0ZSBzZXR1cFNlcnZpY2VXb3JrZXJMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkgfHwgISgnc2VydmljZVdvcmtlcicgaW4gbmF2aWdhdG9yKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCAoZXZlbnQpID0+IHtcbiAgICAgIC8vIFZlcmlmaWNhciBxdWUgZXMgdW4gbWVuc2FqZSBkZSBub3RpZmljYWNpw7NuIGNsaWNrXG4gICAgICBpZiAoZXZlbnQuZGF0YT8udHlwZSA9PT0gJ05PVElGSUNBVElPTl9DTElDSycpIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBub3RpZmljYXRpb24gPSBldmVudC5kYXRhLm5vdGlmaWNhdGlvbiBhcyBOb3RpZmljYXRpb25QYXlsb2FkO1xuICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuZXh0cmFjdEFjdGlvbkZyb21EYXRhKG5vdGlmaWNhdGlvbi5kYXRhKTtcblxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uQ2xpY2tTdWJqZWN0Lm5leHQoe1xuICAgICAgICAgICAgbm90aWZpY2F0aW9uLFxuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBzaSBGQ00gZXN0w6Egc29wb3J0YWRvIGVuIGVsIG5hdmVnYWRvciBhY3R1YWxcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tTdXBwb3J0KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFZlcmlmaWNhciBBUElzIG5lY2VzYXJpYXNcbiAgICBpZiAoISgnTm90aWZpY2F0aW9uJyBpbiB3aW5kb3cpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCEoJ3NlcnZpY2VXb3JrZXInIGluIG5hdmlnYXRvcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBWZXJpZmljYXIgcXVlIG1lc3NhZ2luZyBlc3TDqSBkaXNwb25pYmxlXG4gICAgaWYgKCF0aGlzLmdldE1lc3NhZ2luZ0luc3RhbmNlKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQRVJNSVNPUyBZIFRPS0VOXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBTb2xpY2l0YSBwZXJtaXNvIGRlIG5vdGlmaWNhY2lvbmVzIHkgb2J0aWVuZSBlbCB0b2tlbiBGQ00uXG4gICAqXG4gICAqIEByZXR1cm5zIFRva2VuIEZDTSBzaSBzZSBvdG9yZ8OzIHBlcm1pc28sIG51bGwgc2kgc2UgZGVuZWfDs1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHRva2VuID0gYXdhaXQgbWVzc2FnaW5nLnJlcXVlc3RQZXJtaXNzaW9uKCk7XG4gICAqIGlmICh0b2tlbikge1xuICAgKiAgIGNvbnNvbGUubG9nKCdUb2tlbiBGQ006JywgdG9rZW4pO1xuICAgKiAgIC8vIEVudmlhciBhIGJhY2tlbmRcbiAgICogfSBlbHNlIHtcbiAgICogICBjb25zb2xlLmxvZygnUGVybWlzbyBkZW5lZ2FkbyBvIG5vIHNvcG9ydGFkbycpO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgcmVxdWVzdFBlcm1pc3Npb24oKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgaWYgKCFhd2FpdCB0aGlzLmlzU3VwcG9ydGVkKCkpIHtcbiAgICAgIGNvbnNvbGUud2FybignRkNNIG5vIGVzdMOhIHNvcG9ydGFkbyBlbiBlc3RlIG5hdmVnYWRvcicpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFNvbGljaXRhciBwZXJtaXNvIGRlIG5vdGlmaWNhY2lvbmVzXG4gICAgICBjb25zdCBwZXJtaXNzaW9uID0gYXdhaXQgTm90aWZpY2F0aW9uLnJlcXVlc3RQZXJtaXNzaW9uKCk7XG5cbiAgICAgIHRoaXMuc3RhdGVTdWJqZWN0Lm5leHQoe1xuICAgICAgICAuLi50aGlzLnN0YXRlU3ViamVjdC52YWx1ZSxcbiAgICAgICAgcGVybWlzc2lvbjogcGVybWlzc2lvbiBhcyBOb3RpZmljYXRpb25QZXJtaXNzaW9uLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChwZXJtaXNzaW9uICE9PSAnZ3JhbnRlZCcpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdQZXJtaXNvIGRlIG5vdGlmaWNhY2lvbmVzIGRlbmVnYWRvJyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBPYnRlbmVyIHRva2VuIEZDTVxuICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCB0aGlzLmdldFRva2VuKCk7XG5cbiAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAvLyBDb25maWd1cmFyIGxpc3RlbmVyIGRlIG1lbnNhamVzXG4gICAgICAgIHRoaXMuc2V0dXBNZXNzYWdlTGlzdGVuZXIoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRva2VuO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzb2xpY2l0YW5kbyBwZXJtaXNvIGRlIG5vdGlmaWNhY2lvbmVzOicsIGVycm9yKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGVsIHRva2VuIEZDTSBhY3R1YWwgKHNpbiBzb2xpY2l0YXIgcGVybWlzbykuXG4gICAqXG4gICAqIEByZXR1cm5zIFRva2VuIEZDTSBzaSBlc3TDoSBkaXNwb25pYmxlLCBudWxsIHNpIG5vXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgdG9rZW4gPSBhd2FpdCBtZXNzYWdpbmcuZ2V0VG9rZW4oKTtcbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBnZXRUb2tlbigpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICBjb25zdCBtZXNzYWdpbmcgPSB0aGlzLmdldE1lc3NhZ2luZ0luc3RhbmNlKCk7XG4gICAgaWYgKCFtZXNzYWdpbmcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHZhcGlkS2V5ID0gdGhpcy5jb25maWcubWVzc2FnaW5nVmFwaWRLZXk7XG4gICAgaWYgKCF2YXBpZEtleSkge1xuICAgICAgY29uc29sZS53YXJuKCdWQVBJRCBrZXkgbm8gY29uZmlndXJhZGEuIEZDTSBubyBmdW5jaW9uYXLDoS4nKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBSZWdpc3RyYXIgU1cgcGVyc29uYWxpemFkbyBhbnRlcyBkZSBvYnRlbmVyIHRva2VuXG4gICAgICAvLyBFc3RvIGVzIG5lY2VzYXJpbyBjdWFuZG8gdXNhbW9zIHVuIFNXIGN1c3RvbSAoZmlyZWJhc2UtbWVzc2FnaW5nLXN3LmpzKVxuICAgICAgY29uc3QgcmVnaXN0cmF0aW9uID0gYXdhaXQgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVnaXN0ZXIoJy9maXJlYmFzZS1tZXNzYWdpbmctc3cuanMnKTtcbiAgICAgIC8vIEVzcGVyYXIgYSBxdWUgZWwgU1cgZXN0w6kgYWN0aXZvXG4gICAgICBhd2FpdCBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWFkeTtcblxuICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCBnZXRUb2tlbihtZXNzYWdpbmcsIHtcbiAgICAgICAgdmFwaWRLZXksXG4gICAgICAgIHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb246IHJlZ2lzdHJhdGlvbixcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnN0YXRlU3ViamVjdC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5zdGF0ZVN1YmplY3QudmFsdWUsXG4gICAgICAgIHRva2VuLFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0b2tlbjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igb2J0ZW5pZW5kbyB0b2tlbiBGQ006JywgZXJyb3IpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVsaW1pbmEgZWwgdG9rZW4gRkNNIGFjdHVhbCAodW5zdWJzY3JpYmUgZGUgbm90aWZpY2FjaW9uZXMpLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGF3YWl0IG1lc3NhZ2luZy5kZWxldGVUb2tlbigpO1xuICAgKiBjb25zb2xlLmxvZygnVG9rZW4gZWxpbWluYWRvLCBubyByZWNpYmlyw6EgbcOhcyBub3RpZmljYWNpb25lcycpO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGRlbGV0ZVRva2VuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG1lc3NhZ2luZyA9IHRoaXMuZ2V0TWVzc2FnaW5nSW5zdGFuY2UoKTtcbiAgICBpZiAoIW1lc3NhZ2luZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBkZWxldGVUb2tlbihtZXNzYWdpbmcpO1xuXG4gICAgICB0aGlzLnN0YXRlU3ViamVjdC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5zdGF0ZVN1YmplY3QudmFsdWUsXG4gICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIExpbXBpYXIgbGlzdGVuZXIgZGUgbWVuc2FqZXNcbiAgICAgIGlmICh0aGlzLnVuc3Vic2NyaWJlT25NZXNzYWdlKSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmVPbk1lc3NhZ2UoKTtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZU9uTWVzc2FnZSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZWxpbWluYW5kbyB0b2tlbiBGQ006JywgZXJyb3IpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBzZSBwdWRvIGVsaW1pbmFyIGVsIHRva2VuIGRlIG5vdGlmaWNhY2lvbmVzJyk7XG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIE1FTlNBSkVTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIGRlIG1lbnNhamVzIHJlY2liaWRvcyBlbiBmb3JlZ3JvdW5kLlxuICAgKlxuICAgKiBJTVBPUlRBTlRFOiBMb3MgbWVuc2FqZXMgZW4gYmFja2dyb3VuZCBzb24gbWFuZWphZG9zIHBvciBlbCBTZXJ2aWNlIFdvcmtlci5cbiAgICpcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBxdWUgZW1pdGUgY3VhbmRvIGxsZWdhIHVuIG1lbnNhamUgZW4gZm9yZWdyb3VuZFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIG1lc3NhZ2luZy5vbk1lc3NhZ2UoKS5zdWJzY3JpYmUocGF5bG9hZCA9PiB7XG4gICAqICAgY29uc29sZS5sb2coJ01lbnNhamUgcmVjaWJpZG86JywgcGF5bG9hZCk7XG4gICAqICAgLy8gTW9zdHJhciBub3RpZmljYWNpw7NuIGN1c3RvbSBvIGFjdHVhbGl6YXIgVUlcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgb25NZXNzYWdlKCk6IE9ic2VydmFibGU8Tm90aWZpY2F0aW9uUGF5bG9hZD4ge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYSBlbCBsaXN0ZW5lciBkZSBtZW5zYWplcyBlbiBmb3JlZ3JvdW5kXG4gICAqL1xuICBwcml2YXRlIHNldHVwTWVzc2FnZUxpc3RlbmVyKCk6IHZvaWQge1xuICAgIGNvbnN0IG1lc3NhZ2luZyA9IHRoaXMuZ2V0TWVzc2FnaW5nSW5zdGFuY2UoKTtcbiAgICBpZiAoIW1lc3NhZ2luZyB8fCB0aGlzLnVuc3Vic2NyaWJlT25NZXNzYWdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy51bnN1YnNjcmliZU9uTWVzc2FnZSA9IG9uTWVzc2FnZShtZXNzYWdpbmcsIChwYXlsb2FkKSA9PiB7XG4gICAgICBjb25zdCBub3RpZmljYXRpb246IE5vdGlmaWNhdGlvblBheWxvYWQgPSB7XG4gICAgICAgIHRpdGxlOiBwYXlsb2FkLm5vdGlmaWNhdGlvbj8udGl0bGUsXG4gICAgICAgIGJvZHk6IHBheWxvYWQubm90aWZpY2F0aW9uPy5ib2R5LFxuICAgICAgICBpbWFnZTogcGF5bG9hZC5ub3RpZmljYXRpb24/LmltYWdlLFxuICAgICAgICBkYXRhOiBwYXlsb2FkLmRhdGEgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICAgICAgbWVzc2FnZUlkOiBwYXlsb2FkLm1lc3NhZ2VJZCxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMubWVzc2FnZVN1YmplY3QubmV4dChub3RpZmljYXRpb24pO1xuXG4gICAgICAvLyBQZXJzaXN0aXIgZW4gbG9jYWxTdG9yYWdlIHBhcmEgZGVidWdnaW5nIHNpIGVzdMOhIGhhYmlsaXRhZG9cbiAgICAgIGlmICh0aGlzLmRlYnVnUGVyc2lzdGVuY2UpIHtcbiAgICAgICAgdGhpcy5wZXJzaXN0TWVzc2FnZUZvckRlYnVnKG5vdGlmaWNhdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUGVyc2lzdGUgdW4gbWVuc2FqZSBGQ00gZW4gbG9jYWxTdG9yYWdlIHBhcmEgZGVidWdnaW5nLlxuICAgKiBTb2xvIHNlIHVzYSBjdWFuZG8gZGVidWdNZXNzYWdlUGVyc2lzdGVuY2UgZXN0w6EgaGFiaWxpdGFkby5cbiAgICogTWFudGllbmUgbG9zIMO6bHRpbW9zIDUwIG1lbnNhamVzLlxuICAgKi9cbiAgcHJpdmF0ZSBwZXJzaXN0TWVzc2FnZUZvckRlYnVnKG1lc3NhZ2U6IE5vdGlmaWNhdGlvblBheWxvYWQpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RvcmVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5ERUJVR19TVE9SQUdFX0tFWSk7XG4gICAgICBjb25zdCBtZXNzYWdlcyA9IHN0b3JlZCA/IEpTT04ucGFyc2Uoc3RvcmVkKSA6IFtdO1xuICAgICAgbWVzc2FnZXMudW5zaGlmdCh7IC4uLm1lc3NhZ2UsIHJlY2VpdmVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSB9KTtcbiAgICAgIC8vIE1hbnRlbmVyIHNvbG8gw7psdGltb3MgNTBcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuREVCVUdfU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KG1lc3NhZ2VzLnNsaWNlKDAsIDUwKSkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignW01lc3NhZ2luZ10gRGVidWcgcGVyc2lzdGVuY2UgZmFpbGVkOicsIGUpO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBFU1RBRE8gWSBVVElMSURBREVTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGVsIGVzdGFkbyBhY3R1YWwgZGVsIHBlcm1pc28gZGUgbm90aWZpY2FjaW9uZXMuXG4gICAqXG4gICAqIEByZXR1cm5zICdncmFudGVkJyB8ICdkZW5pZWQnIHwgJ2RlZmF1bHQnXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgcGVybWlzc2lvbiA9IG1lc3NhZ2luZy5nZXRQZXJtaXNzaW9uU3RhdGUoKTtcbiAgICogaWYgKHBlcm1pc3Npb24gPT09ICdncmFudGVkJykge1xuICAgKiAgIC8vIFlhIHRpZW5lIHBlcm1pc29cbiAgICogfSBlbHNlIGlmIChwZXJtaXNzaW9uID09PSAnZGVmYXVsdCcpIHtcbiAgICogICAvLyBQdWVkZSBzb2xpY2l0YXIgcGVybWlzb1xuICAgKiB9IGVsc2Uge1xuICAgKiAgIC8vIERlbmVnYWRvLCBkZWJlIGhhYmlsaXRhciBtYW51YWxtZW50ZVxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0UGVybWlzc2lvblN0YXRlKCk6IE5vdGlmaWNhdGlvblBlcm1pc3Npb24ge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgcmV0dXJuICdkZWZhdWx0JztcbiAgICB9XG5cbiAgICBpZiAoISgnTm90aWZpY2F0aW9uJyBpbiB3aW5kb3cpKSB7XG4gICAgICByZXR1cm4gJ2RlbmllZCc7XG4gICAgfVxuXG4gICAgcmV0dXJuIE5vdGlmaWNhdGlvbi5wZXJtaXNzaW9uIGFzIE5vdGlmaWNhdGlvblBlcm1pc3Npb247XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgRkNNIGVzdMOhIHNvcG9ydGFkbyBlbiBlbCBuYXZlZ2Fkb3IgYWN0dWFsLlxuICAgKiBVc2EgbMOzZ2ljYSBpbnRlbGlnZW50ZSBwYXJhIGV2aXRhciBmYWxzb3MgbmVnYXRpdm9zIHBvciB0aW1pbmcgZGVsIEluamVjdG9yLlxuICAgKlxuICAgKiBAcmV0dXJucyB0cnVlIHNpIEZDTSBlc3TDoSBzb3BvcnRhZG9cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBpZiAoYXdhaXQgbWVzc2FnaW5nLmlzU3VwcG9ydGVkKCkpIHtcbiAgICogICAvLyBQdWVkZSB1c2FyIG5vdGlmaWNhY2lvbmVzIHB1c2hcbiAgICogfSBlbHNlIHtcbiAgICogICAvLyBOYXZlZ2Fkb3Igbm8gc29wb3J0YSBvIG5vIHRpZW5lIFNlcnZpY2UgV29ya2VyXG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBpc1N1cHBvcnRlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBTaSB5YSB0ZW5lbW9zIHRva2VuIGVuIGVzdGFkbywgY2xhcmFtZW50ZSBGQ00gZnVuY2lvbmFcbiAgICBpZiAodGhpcy5zdGF0ZVN1YmplY3QudmFsdWUudG9rZW4pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIFNpIHlhIGNhbGN1bGFtb3Mgc29wb3J0ZSBleGl0b3NhbWVudGUsIHVzYXJsb1xuICAgIGlmICh0aGlzLnN0YXRlU3ViamVjdC52YWx1ZS5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gVmVyaWZpY2FjaW9uZXMgYsOhc2ljYXMgcXVlIG5vIGRlcGVuZGVuIGRlbCBJbmplY3RvclxuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoISgnTm90aWZpY2F0aW9uJyBpbiB3aW5kb3cpIHx8ICEoJ3NlcnZpY2VXb3JrZXInIGluIG5hdmlnYXRvcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBTaSBlbCBuYXZlZ2Fkb3Igc29wb3J0YSBsYXMgQVBJcyBwZXJvIGVsIEluamVjdG9yIG5vIGVzdMOhIGxpc3RvLFxuICAgIC8vIHBvZHLDrWFtb3MgdGVuZXIgdW4gZmFsc28gbmVnYXRpdm8uIEludGVudGFyIGNoZWNrU3VwcG9ydCBkZSB0b2RhcyBmb3JtYXMuXG4gICAgcmV0dXJuIHRoaXMuY2hlY2tTdXBwb3J0KCk7XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSBlbCB0b2tlbiBhY3R1YWwgc2luIGhhY2VyIHJlcXVlc3QuXG4gICAqXG4gICAqIEByZXR1cm5zIFRva2VuIGFsbWFjZW5hZG8gbyBudWxsXG4gICAqL1xuICBnZXQgY3VycmVudFRva2VuKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnN0YXRlU3ViamVjdC52YWx1ZS50b2tlbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIGRlbCBlc3RhZG8gY29tcGxldG8gZGVsIHNlcnZpY2lvIGRlIG1lc3NhZ2luZy5cbiAgICovXG4gIGdldCBzdGF0ZSQoKTogT2JzZXJ2YWJsZTxNZXNzYWdpbmdTdGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBzaSBlbCB1c3VhcmlvIHlhIG90b3Jnw7MgcGVybWlzbyBkZSBub3RpZmljYWNpb25lcy5cbiAgICovXG4gIGdldCBoYXNQZXJtaXNzaW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlU3ViamVjdC52YWx1ZS5wZXJtaXNzaW9uID09PSAnZ3JhbnRlZCc7XG4gIH1cblxuICAvKipcbiAgICogSGlkcmF0YSBlbCBlc3RhZG8gZGVsIHRva2VuIGRlc2RlIHVuIHZhbG9yIGV4dGVybm8gKGVqOiBsb2NhbFN0b3JhZ2UpLlxuICAgKiDDmnRpbCBjdWFuZG8gZWwgdG9rZW4geWEgZXhpc3RlIHBlcm8gZWwgTWVzc2FnaW5nU2VydmljZSBubyBsbyB0aWVuZSBlbiBtZW1vcmlhLlxuICAgKlxuICAgKiBAcGFyYW0gdG9rZW4gVG9rZW4gRkNNIGEgc2V0ZWFyXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3Qgc3RvcmVkVG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZmNtX3Rva2VuJyk7XG4gICAqIGlmIChzdG9yZWRUb2tlbikge1xuICAgKiAgIG1lc3NhZ2luZy5zZXRUb2tlbkZyb21TdG9yYWdlKHN0b3JlZFRva2VuKTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIHNldFRva2VuRnJvbVN0b3JhZ2UodG9rZW46IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdG9rZW4pIHJldHVybjtcblxuICAgIHRoaXMuc3RhdGVTdWJqZWN0Lm5leHQoe1xuICAgICAgLi4udGhpcy5zdGF0ZVN1YmplY3QudmFsdWUsXG4gICAgICB0b2tlbixcbiAgICAgIGlzU3VwcG9ydGVkOiB0cnVlLCAvLyBTaSBoYXkgdG9rZW4sIGNsYXJhbWVudGUgRkNNIGZ1bmNpb25hXG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gREVFUCBMSU5LSU5HIC8gTkFWRUdBQ0nDk05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgZGUgY2xpY2tzIGVuIG5vdGlmaWNhY2lvbmVzLlxuICAgKlxuICAgKiBFbWl0ZSBjdWFuZG8gZWwgdXN1YXJpbyBoYWNlIGNsaWNrIGVuIHVuYSBub3RpZmljYWNpw7NuIChmb3JlZ3JvdW5kIG8gYmFja2dyb3VuZCkuXG4gICAqIFVzYSBlc3RlIG9ic2VydmFibGUgcGFyYSBuYXZlZ2FyIGEgbGEgcMOhZ2luYSBjb3JyZXNwb25kaWVudGUuXG4gICAqXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgcXVlIGVtaXRlIE5vdGlmaWNhdGlvbkNsaWNrRXZlbnRcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBAQ29tcG9uZW50KHsuLi59KVxuICAgKiBleHBvcnQgY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAgICogICBwcml2YXRlIG1lc3NhZ2luZyA9IGluamVjdChNZXNzYWdpbmdTZXJ2aWNlKTtcbiAgICogICBwcml2YXRlIHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICAgKlxuICAgKiAgIGNvbnN0cnVjdG9yKCkge1xuICAgKiAgICAgdGhpcy5tZXNzYWdpbmcub25Ob3RpZmljYXRpb25DbGljaygpLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAqICAgICAgIGlmIChldmVudC5hY3Rpb24ucm91dGUpIHtcbiAgICogICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbZXZlbnQuYWN0aW9uLnJvdXRlXSwge1xuICAgKiAgICAgICAgICAgcXVlcnlQYXJhbXM6IGV2ZW50LmFjdGlvbi5xdWVyeVBhcmFtc1xuICAgKiAgICAgICAgIH0pO1xuICAgKiAgICAgICB9XG4gICAqICAgICB9KTtcbiAgICogICB9XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBvbk5vdGlmaWNhdGlvbkNsaWNrKCk6IE9ic2VydmFibGU8Tm90aWZpY2F0aW9uQ2xpY2tFdmVudD4ge1xuICAgIHJldHVybiB0aGlzLm5vdGlmaWNhdGlvbkNsaWNrU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWUgbGEgYWNjacOzbiBkZSBuYXZlZ2FjacOzbiBkZSBsb3MgZGF0b3MgZGUgdW5hIG5vdGlmaWNhY2nDs24uXG4gICAqXG4gICAqIEJ1c2NhIGNhbXBvcyBlc3BlY8OtZmljb3MgZW4gZWwgcGF5bG9hZCBkZSBkYXRvczpcbiAgICogLSBgcm91dGVgOiBSdXRhIGludGVybmEgZGUgbGEgYXBwIChlajogJy9vcmRlcnMvMTIzJylcbiAgICogLSBgdXJsYDogVVJMIGV4dGVybmEgKGVqOiAnaHR0cHM6Ly9leGFtcGxlLmNvbScpXG4gICAqIC0gYGFjdGlvbl90eXBlYDogVGlwbyBkZSBhY2Npw7NuIHBlcnNvbmFsaXphZGFcbiAgICogLSBDYW1wb3MgY29uIHByZWZpam8gYGFjdGlvbl9gOiBEYXRvcyBhZGljaW9uYWxlc1xuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIERhdG9zIGRlbCBwYXlsb2FkIGRlIGxhIG5vdGlmaWNhY2nDs25cbiAgICogQHJldHVybnMgQWNjacOzbiBkZSBuYXZlZ2FjacOzbiBleHRyYcOtZGFcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBQYXlsb2FkIGRlc2RlIGVsIGJhY2tlbmQ6XG4gICAqIC8vIHsgcm91dGU6ICcvb3JkZXJzLzEyMycsIGFjdGlvbl90eXBlOiAndmlld19vcmRlcicsIGFjdGlvbl9vcmRlcklkOiAnMTIzJyB9XG4gICAqXG4gICAqIGNvbnN0IGFjdGlvbiA9IG1lc3NhZ2luZy5leHRyYWN0QWN0aW9uRnJvbURhdGEobm90aWZpY2F0aW9uLmRhdGEpO1xuICAgKiAvLyB7IHJvdXRlOiAnL29yZGVycy8xMjMnLCBhY3Rpb25UeXBlOiAndmlld19vcmRlcicsIGFjdGlvbkRhdGE6IHsgb3JkZXJJZDogJzEyMycgfSB9XG4gICAqIGBgYFxuICAgKi9cbiAgZXh0cmFjdEFjdGlvbkZyb21EYXRhKGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogTm90aWZpY2F0aW9uQWN0aW9uIHtcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBjb25zdCBhY3Rpb246IE5vdGlmaWNhdGlvbkFjdGlvbiA9IHt9O1xuXG4gICAgLy8gUnV0YSBpbnRlcm5hXG4gICAgaWYgKGRhdGFbJ3JvdXRlJ10pIHtcbiAgICAgIGFjdGlvbi5yb3V0ZSA9IGRhdGFbJ3JvdXRlJ107XG4gICAgfVxuXG4gICAgLy8gVVJMIGV4dGVybmFcbiAgICBpZiAoZGF0YVsndXJsJ10pIHtcbiAgICAgIGFjdGlvbi51cmwgPSBkYXRhWyd1cmwnXTtcbiAgICB9XG5cbiAgICAvLyBUaXBvIGRlIGFjY2nDs25cbiAgICBpZiAoZGF0YVsnYWN0aW9uX3R5cGUnXSkge1xuICAgICAgYWN0aW9uLmFjdGlvblR5cGUgPSBkYXRhWydhY3Rpb25fdHlwZSddO1xuICAgIH1cblxuICAgIC8vIFF1ZXJ5IHBhcmFtcyAocHVlZGUgdmVuaXIgY29tbyBKU09OIHN0cmluZylcbiAgICBpZiAoZGF0YVsncXVlcnlfcGFyYW1zJ10pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGFjdGlvbi5xdWVyeVBhcmFtcyA9IEpTT04ucGFyc2UoZGF0YVsncXVlcnlfcGFyYW1zJ10pO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIFNpIG5vIGVzIEpTT04gdsOhbGlkbywgaW50ZW50YXIgcGFyc2VhciBjb21vIGtleT12YWx1ZVxuICAgICAgICBhY3Rpb24ucXVlcnlQYXJhbXMgPSB0aGlzLnBhcnNlUXVlcnlTdHJpbmcoZGF0YVsncXVlcnlfcGFyYW1zJ10pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERhdG9zIGFkaWNpb25hbGVzIGNvbiBwcmVmaWpvIGFjdGlvbl9cbiAgICBjb25zdCBhY3Rpb25EYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgICBpZiAoa2V5LnN0YXJ0c1dpdGgoJ2FjdGlvbl8nKSAmJiBrZXkgIT09ICdhY3Rpb25fdHlwZScpIHtcbiAgICAgICAgY29uc3QgY2xlYW5LZXkgPSBrZXkucmVwbGFjZSgnYWN0aW9uXycsICcnKTtcbiAgICAgICAgLy8gSW50ZW50YXIgcGFyc2VhciBKU09OIHNpIGVzIHBvc2libGVcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhY3Rpb25EYXRhW2NsZWFuS2V5XSA9IEpTT04ucGFyc2UodmFsdWUpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICBhY3Rpb25EYXRhW2NsZWFuS2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKGFjdGlvbkRhdGEpLmxlbmd0aCA+IDApIHtcbiAgICAgIGFjdGlvbi5hY3Rpb25EYXRhID0gYWN0aW9uRGF0YTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRlIG1hbnVhbG1lbnRlIHVuIGV2ZW50byBkZSBjbGljayBlbiBub3RpZmljYWNpw7NuLlxuICAgKlxuICAgKiDDmnRpbCBwYXJhIG1hbmVqYXIgY2xpY2tzIGVuIG5vdGlmaWNhY2lvbmVzIGZvcmVncm91bmQgZG9uZGVcbiAgICogbGEgYXBwIGRlY2lkZSBtb3N0cmFyIHVuIGJhbm5lciBjdXN0b20uXG4gICAqXG4gICAqIEBwYXJhbSBub3RpZmljYXRpb24gLSBQYXlsb2FkIGRlIGxhIG5vdGlmaWNhY2nDs25cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBtZXNzYWdpbmcub25NZXNzYWdlKCkuc3Vic2NyaWJlKG5vdGlmaWNhdGlvbiA9PiB7XG4gICAqICAgLy8gTW9zdHJhciBiYW5uZXIgY3VzdG9tXG4gICAqICAgdGhpcy5zaG93QmFubmVyKG5vdGlmaWNhdGlvbiwgKCkgPT4ge1xuICAgKiAgICAgLy8gVXN1YXJpbyBoaXpvIGNsaWNrIGVuIGVsIGJhbm5lclxuICAgKiAgICAgbWVzc2FnaW5nLmhhbmRsZU5vdGlmaWNhdGlvbkNsaWNrKG5vdGlmaWNhdGlvbik7XG4gICAqICAgfSk7XG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGhhbmRsZU5vdGlmaWNhdGlvbkNsaWNrKG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uUGF5bG9hZCk6IHZvaWQge1xuICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuZXh0cmFjdEFjdGlvbkZyb21EYXRhKG5vdGlmaWNhdGlvbi5kYXRhKTtcblxuICAgIHRoaXMubm90aWZpY2F0aW9uQ2xpY2tTdWJqZWN0Lm5leHQoe1xuICAgICAgbm90aWZpY2F0aW9uLFxuICAgICAgYWN0aW9uLFxuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIHVuYSBub3RpZmljYWNpw7NuIHRpZW5lIGFjY2nDs24gZGUgbmF2ZWdhY2nDs24uXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gRGF0b3MgZGVsIHBheWxvYWRcbiAgICogQHJldHVybnMgdHJ1ZSBzaSB0aWVuZSByb3V0ZSBvIHVybFxuICAgKi9cbiAgaGFzTmF2aWdhdGlvbkFjdGlvbihkYXRhPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IGJvb2xlYW4ge1xuICAgIGlmICghZGF0YSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAhIShkYXRhWydyb3V0ZSddIHx8IGRhdGFbJ3VybCddKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZWEgdW4gcXVlcnkgc3RyaW5nIGVuIHVuIG9iamV0by5cbiAgICovXG4gIHByaXZhdGUgcGFyc2VRdWVyeVN0cmluZyhxdWVyeVN0cmluZzogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3QgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgICBpZiAoIXF1ZXJ5U3RyaW5nKSByZXR1cm4gcGFyYW1zO1xuXG4gICAgLy8gUmVtb3ZlciA/IGluaWNpYWwgc2kgZXhpc3RlXG4gICAgY29uc3QgY2xlYW5RdWVyeSA9IHF1ZXJ5U3RyaW5nLnN0YXJ0c1dpdGgoJz8nKSA/IHF1ZXJ5U3RyaW5nLnNsaWNlKDEpIDogcXVlcnlTdHJpbmc7XG5cbiAgICBmb3IgKGNvbnN0IHBhaXIgb2YgY2xlYW5RdWVyeS5zcGxpdCgnJicpKSB7XG4gICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBwYWlyLnNwbGl0KCc9Jyk7XG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHBhcmFtc1tkZWNvZGVVUklDb21wb25lbnQoa2V5KV0gPSBkZWNvZGVVUklDb21wb25lbnQodmFsdWUgfHwgJycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cbn1cbiJdfQ==
|
|
602
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnaW5nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2ZpcmViYXNlL21lc3NhZ2luZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFvQixXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RGLE9BQU8sRUFBYyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTVELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7QUFrQm5EOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZCRztBQUVILE1BQU0sT0FBTyxnQkFBZ0I7SUFnQjNCLFlBQ1UsUUFBa0IsRUFDZSxNQUE2QixFQUN6QyxVQUFrQixFQUN2QyxNQUFjO1FBSGQsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNlLFdBQU0sR0FBTixNQUFNLENBQXVCO1FBQ3pDLGVBQVUsR0FBVixVQUFVLENBQVE7UUFDdkMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQW5CaEIsbUJBQWMsR0FBRyxJQUFJLE9BQU8sRUFBdUIsQ0FBQztRQUNwRCw2QkFBd0IsR0FBRyxJQUFJLE9BQU8sRUFBMEIsQ0FBQztRQUNqRSxpQkFBWSxHQUFHLElBQUksZUFBZSxDQUFpQjtZQUN6RCxLQUFLLEVBQUUsSUFBSTtZQUNYLFVBQVUsRUFBRSxTQUFTO1lBQ3JCLFdBQVcsRUFBRSxLQUFLO1NBQ25CLENBQUMsQ0FBQztRQU1ILHdEQUF3RDtRQUN2QyxzQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQztR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LENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckMsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDUixNQUFNLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7WUFDcEUsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOytHQXJtQlUsZ0JBQWdCLDBDQWtCakIsdUJBQXVCLGFBQ3ZCLFdBQVc7bUhBbkJWLGdCQUFnQixjQURILE1BQU07OzRGQUNuQixnQkFBZ0I7a0JBRDVCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFtQjdCLE1BQU07MkJBQUMsdUJBQXVCOzswQkFDOUIsTUFBTTsyQkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNZXNzYWdpbmcgU2VydmljZSAoRkNNKVxuICpcbiAqIFNlcnZpY2lvIHBhcmEgRmlyZWJhc2UgQ2xvdWQgTWVzc2FnaW5nIChQdXNoIE5vdGlmaWNhdGlvbnMpLlxuICogUGVybWl0ZSBzb2xpY2l0YXIgcGVybWlzb3MsIG9idGVuZXIgdG9rZW5zLCBlc2N1Y2hhciBtZW5zYWplcyB5IG1hbmVqYXJcbiAqIG5hdmVnYWNpw7NuIChkZWVwIGxpbmtpbmcpIGN1YW5kbyBlbCB1c3VhcmlvIHRvY2EgdW5hIG5vdGlmaWNhY2nDs24uXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3RvciwgTmdab25lLCBQTEFURk9STV9JRCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWVzc2FnaW5nLCBnZXRUb2tlbiwgZGVsZXRlVG9rZW4sIG9uTWVzc2FnZSB9IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvbWVzc2FnaW5nJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBWQUxURUNIX0ZJUkVCQVNFX0NPTkZJRyB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7XG4gIE5vdGlmaWNhdGlvbkFjdGlvbixcbiAgTm90aWZpY2F0aW9uQ2xpY2tFdmVudCxcbiAgTm90aWZpY2F0aW9uUGF5bG9hZCxcbiAgTm90aWZpY2F0aW9uUGVybWlzc2lvbixcbiAgVmFsdGVjaEZpcmViYXNlQ29uZmlnLFxufSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBFc3RhZG8gaW50ZXJubyBkZWwgc2VydmljaW8gZGUgbWVzc2FnaW5nXG4gKi9cbmludGVyZmFjZSBNZXNzYWdpbmdTdGF0ZSB7XG4gIHRva2VuOiBzdHJpbmcgfCBudWxsO1xuICBwZXJtaXNzaW9uOiBOb3RpZmljYXRpb25QZXJtaXNzaW9uO1xuICBpc1N1cHBvcnRlZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBTZXJ2aWNpbyBwYXJhIEZpcmViYXNlIENsb3VkIE1lc3NhZ2luZyAoRkNNKS5cbiAqXG4gKiBQZXJtaXRlIHJlY2liaXIgbm90aWZpY2FjaW9uZXMgcHVzaCBlbiBsYSBhcGxpY2FjacOzbiB3ZWIuXG4gKiBSZXF1aWVyZSBWQVBJRCBrZXkgY29uZmlndXJhZGEgZW4gVmFsdGVjaEZpcmViYXNlQ29uZmlnLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBAQ29tcG9uZW50KHsuLi59KVxuICogZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvbkNvbXBvbmVudCB7XG4gKiAgIHByaXZhdGUgbWVzc2FnaW5nID0gaW5qZWN0KE1lc3NhZ2luZ1NlcnZpY2UpO1xuICpcbiAqICAgdG9rZW4gPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gKlxuICogICBhc3luYyBlbmFibGVOb3RpZmljYXRpb25zKCkge1xuICogICAgIC8vIFNvbGljaXRhciBwZXJtaXNvIHkgb2J0ZW5lciB0b2tlblxuICogICAgIGNvbnN0IHRva2VuID0gYXdhaXQgdGhpcy5tZXNzYWdpbmcucmVxdWVzdFBlcm1pc3Npb24oKTtcbiAqXG4gKiAgICAgaWYgKHRva2VuKSB7XG4gKiAgICAgICB0aGlzLnRva2VuLnNldCh0b2tlbik7XG4gKiAgICAgICAvLyBFbnZpYXIgdG9rZW4gYSB0dSBiYWNrZW5kIHBhcmEgYWxtYWNlbmFybG9cbiAqICAgICAgIGF3YWl0IHRoaXMuYmFja2VuZC5yZWdpc3RlckRldmljZVRva2VuKHRva2VuKTtcbiAqICAgICB9XG4gKiAgIH1cbiAqXG4gKiAgIC8vIEVzY3VjaGFyIG1lbnNhamVzIGVuIGZvcmVncm91bmRcbiAqICAgbWVzc2FnZXMkID0gdGhpcy5tZXNzYWdpbmcub25NZXNzYWdlKCk7XG4gKiB9XG4gKiBgYGBcbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBNZXNzYWdpbmdTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBtZXNzYWdlU3ViamVjdCA9IG5ldyBTdWJqZWN0PE5vdGlmaWNhdGlvblBheWxvYWQ+KCk7XG4gIHByaXZhdGUgbm90aWZpY2F0aW9uQ2xpY2tTdWJqZWN0ID0gbmV3IFN1YmplY3Q8Tm90aWZpY2F0aW9uQ2xpY2tFdmVudD4oKTtcbiAgcHJpdmF0ZSBzdGF0ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1lc3NhZ2luZ1N0YXRlPih7XG4gICAgdG9rZW46IG51bGwsXG4gICAgcGVybWlzc2lvbjogJ2RlZmF1bHQnLFxuICAgIGlzU3VwcG9ydGVkOiBmYWxzZSxcbiAgfSk7XG5cbiAgcHJpdmF0ZSB1bnN1YnNjcmliZU9uTWVzc2FnZT86ICgpID0+IHZvaWQ7XG5cbiAgLyoqIEZsYWcgcGFyYSBwZXJzaXN0aXIgbWVuc2FqZXMgRkNNIGVuIGxvY2FsU3RvcmFnZSAoZGVidWdnaW5nKSAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGRlYnVnUGVyc2lzdGVuY2U6IGJvb2xlYW47XG4gIC8qKiBLZXkgcGFyYSBsb2NhbFN0b3JhZ2UgZGUgbWVuc2FqZXMgRkNNIChkZWJ1Z2dpbmcpICovXG4gIHByaXZhdGUgcmVhZG9ubHkgREVCVUdfU1RPUkFHRV9LRVkgPSAnZmNtX2RlYnVnX21lc3NhZ2VzJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBASW5qZWN0KFZBTFRFQ0hfRklSRUJBU0VfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogVmFsdGVjaEZpcmViYXNlQ29uZmlnLFxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogT2JqZWN0LFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmVcbiAgKSB7XG4gICAgdGhpcy5kZWJ1Z1BlcnNpc3RlbmNlID0gdGhpcy5jb25maWc/LmRlYnVnTWVzc2FnZVBlcnNpc3RlbmNlID8/IGZhbHNlO1xuICAgIHRoaXMuaW5pdGlhbGl6ZU1lc3NhZ2luZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgbGEgaW5zdGFuY2lhIGRlIE1lc3NhZ2luZyBkZSBmb3JtYSBwZXJlem9zYS5cbiAgICogRXN0byBldml0YSBlbCBlcnJvciBkZSBBUFBfSU5JVElBTElaRVIgZGUgQW5ndWxhckZpcmUuXG4gICAqL1xuICBwcml2YXRlIGdldE1lc3NhZ2luZ0luc3RhbmNlKCk6IE1lc3NhZ2luZyB8IG51bGwge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQoTWVzc2FnaW5nLCBudWxsKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBJTklDSUFMSVpBQ0nDk05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEluaWNpYWxpemEgZWwgc2VydmljaW8gZGUgbWVzc2FnaW5nXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGluaXRpYWxpemVNZXNzYWdpbmcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3VwcG9ydGVkID0gYXdhaXQgdGhpcy5jaGVja1N1cHBvcnQoKTtcbiAgICBjb25zdCBwZXJtaXNzaW9uID0gdGhpcy5nZXRQZXJtaXNzaW9uU3RhdGUoKTtcblxuICAgIHRoaXMuc3RhdGVTdWJqZWN0Lm5leHQoe1xuICAgICAgLi4udGhpcy5zdGF0ZVN1YmplY3QudmFsdWUsXG4gICAgICBpc1N1cHBvcnRlZDogc3VwcG9ydGVkLFxuICAgICAgcGVybWlzc2lvbixcbiAgICB9KTtcblxuICAgIC8vIFNpIHlhIHRpZW5lIHBlcm1pc28sIGNvbmZpZ3VyYXIgbGlzdGVuZXJzXG4gICAgaWYgKHN1cHBvcnRlZCAmJiBwZXJtaXNzaW9uID09PSAnZ3JhbnRlZCcpIHtcbiAgICAgIHRoaXMuc2V0dXBNZXNzYWdlTGlzdGVuZXIoKTtcbiAgICB9XG5cbiAgICAvLyBFc2N1Y2hhciBtZW5zYWplcyBkZWwgU2VydmljZSBXb3JrZXIgKGNsaWNrcyBlbiBub3RpZmljYWNpb25lcyBiYWNrZ3JvdW5kKVxuICAgIHRoaXMuc2V0dXBTZXJ2aWNlV29ya2VyTGlzdGVuZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmEgbGlzdGVuZXIgcGFyYSBtZW5zYWplcyBkZWwgU2VydmljZSBXb3JrZXIuXG4gICAqIFJlY2liZSBldmVudG9zIGN1YW5kbyBlbCB1c3VhcmlvIGhhY2UgY2xpY2sgZW4gdW5hIG5vdGlmaWNhY2nDs24gYmFja2dyb3VuZC5cbiAgICovXG4gIHByaXZhdGUgc2V0dXBTZXJ2aWNlV29ya2VyTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpIHx8ICEoJ3NlcnZpY2VXb3JrZXInIGluIG5hdmlnYXRvcikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZXZlbnQgPT4ge1xuICAgICAgLy8gVmVyaWZpY2FyIHF1ZSBlcyB1biBtZW5zYWplIGRlIG5vdGlmaWNhY2nDs24gY2xpY2tcbiAgICAgIGlmIChldmVudC5kYXRhPy50eXBlID09PSAnTk9USUZJQ0FUSU9OX0NMSUNLJykge1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IGV2ZW50LmRhdGEubm90aWZpY2F0aW9uIGFzIE5vdGlmaWNhdGlvblBheWxvYWQ7XG4gICAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5leHRyYWN0QWN0aW9uRnJvbURhdGEobm90aWZpY2F0aW9uLmRhdGEpO1xuXG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25DbGlja1N1YmplY3QubmV4dCh7XG4gICAgICAgICAgICBub3RpZmljYXRpb24sXG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIEZDTSBlc3TDoSBzb3BvcnRhZG8gZW4gZWwgbmF2ZWdhZG9yIGFjdHVhbFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjaGVja1N1cHBvcnQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVmVyaWZpY2FyIEFQSXMgbmVjZXNhcmlhc1xuICAgIGlmICghKCdOb3RpZmljYXRpb24nIGluIHdpbmRvdykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoISgnc2VydmljZVdvcmtlcicgaW4gbmF2aWdhdG9yKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFZlcmlmaWNhciBxdWUgbWVzc2FnaW5nIGVzdMOpIGRpc3BvbmlibGVcbiAgICBpZiAoIXRoaXMuZ2V0TWVzc2FnaW5nSW5zdGFuY2UoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBFUk1JU09TIFkgVE9LRU5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFNvbGljaXRhIHBlcm1pc28gZGUgbm90aWZpY2FjaW9uZXMgeSBvYnRpZW5lIGVsIHRva2VuIEZDTS5cbiAgICpcbiAgICogQHJldHVybnMgVG9rZW4gRkNNIHNpIHNlIG90b3Jnw7MgcGVybWlzbywgbnVsbCBzaSBzZSBkZW5lZ8OzXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgdG9rZW4gPSBhd2FpdCBtZXNzYWdpbmcucmVxdWVzdFBlcm1pc3Npb24oKTtcbiAgICogaWYgKHRva2VuKSB7XG4gICAqICAgY29uc29sZS5sb2coJ1Rva2VuIEZDTTonLCB0b2tlbik7XG4gICAqICAgLy8gRW52aWFyIGEgYmFja2VuZFxuICAgKiB9IGVsc2Uge1xuICAgKiAgIGNvbnNvbGUubG9nKCdQZXJtaXNvIGRlbmVnYWRvIG8gbm8gc29wb3J0YWRvJyk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBhc3luYyByZXF1ZXN0UGVybWlzc2lvbigpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICBpZiAoIShhd2FpdCB0aGlzLmlzU3VwcG9ydGVkKCkpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0ZDTSBubyBlc3TDoSBzb3BvcnRhZG8gZW4gZXN0ZSBuYXZlZ2Fkb3InKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBTb2xpY2l0YXIgcGVybWlzbyBkZSBub3RpZmljYWNpb25lc1xuICAgICAgY29uc3QgcGVybWlzc2lvbiA9IGF3YWl0IE5vdGlmaWNhdGlvbi5yZXF1ZXN0UGVybWlzc2lvbigpO1xuXG4gICAgICB0aGlzLnN0YXRlU3ViamVjdC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5zdGF0ZVN1YmplY3QudmFsdWUsXG4gICAgICAgIHBlcm1pc3Npb246IHBlcm1pc3Npb24gYXMgTm90aWZpY2F0aW9uUGVybWlzc2lvbixcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocGVybWlzc2lvbiAhPT0gJ2dyYW50ZWQnKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignUGVybWlzbyBkZSBub3RpZmljYWNpb25lcyBkZW5lZ2FkbycpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gT2J0ZW5lciB0b2tlbiBGQ01cbiAgICAgIGNvbnN0IHRva2VuID0gYXdhaXQgdGhpcy5nZXRUb2tlbigpO1xuXG4gICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgLy8gQ29uZmlndXJhciBsaXN0ZW5lciBkZSBtZW5zYWplc1xuICAgICAgICB0aGlzLnNldHVwTWVzc2FnZUxpc3RlbmVyKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0b2tlbjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc29saWNpdGFuZG8gcGVybWlzbyBkZSBub3RpZmljYWNpb25lczonLCBlcnJvcik7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSBlbCB0b2tlbiBGQ00gYWN0dWFsIChzaW4gc29saWNpdGFyIHBlcm1pc28pLlxuICAgKlxuICAgKiBAcmV0dXJucyBUb2tlbiBGQ00gc2kgZXN0w6EgZGlzcG9uaWJsZSwgbnVsbCBzaSBub1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHRva2VuID0gYXdhaXQgbWVzc2FnaW5nLmdldFRva2VuKCk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgZ2V0VG9rZW4oKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgY29uc3QgbWVzc2FnaW5nID0gdGhpcy5nZXRNZXNzYWdpbmdJbnN0YW5jZSgpO1xuICAgIGlmICghbWVzc2FnaW5nKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB2YXBpZEtleSA9IHRoaXMuY29uZmlnLm1lc3NhZ2luZ1ZhcGlkS2V5O1xuICAgIGlmICghdmFwaWRLZXkpIHtcbiAgICAgIGNvbnNvbGUud2FybignVkFQSUQga2V5IG5vIGNvbmZpZ3VyYWRhLiBGQ00gbm8gZnVuY2lvbmFyw6EuJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gUmVnaXN0cmFyIFNXIHBlcnNvbmFsaXphZG8gYW50ZXMgZGUgb2J0ZW5lciB0b2tlblxuICAgICAgLy8gRXN0byBlcyBuZWNlc2FyaW8gY3VhbmRvIHVzYW1vcyB1biBTVyBjdXN0b20gKGZpcmViYXNlLW1lc3NhZ2luZy1zdy5qcylcbiAgICAgIGNvbnN0IHJlZ2lzdHJhdGlvbiA9IGF3YWl0IG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlZ2lzdGVyKCcvZmlyZWJhc2UtbWVzc2FnaW5nLXN3LmpzJyk7XG4gICAgICAvLyBFc3BlcmFyIGEgcXVlIGVsIFNXIGVzdMOpIGFjdGl2b1xuICAgICAgYXdhaXQgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVhZHk7XG5cbiAgICAgIGNvbnN0IHRva2VuID0gYXdhaXQgZ2V0VG9rZW4obWVzc2FnaW5nLCB7XG4gICAgICAgIHZhcGlkS2V5LFxuICAgICAgICBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uOiByZWdpc3RyYXRpb24sXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zdGF0ZVN1YmplY3QubmV4dCh7XG4gICAgICAgIC4uLnRoaXMuc3RhdGVTdWJqZWN0LnZhbHVlLFxuICAgICAgICB0b2tlbixcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdG9rZW47XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIG9idGVuaWVuZG8gdG9rZW4gRkNNOicsIGVycm9yKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFbGltaW5hIGVsIHRva2VuIEZDTSBhY3R1YWwgKHVuc3Vic2NyaWJlIGRlIG5vdGlmaWNhY2lvbmVzKS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBhd2FpdCBtZXNzYWdpbmcuZGVsZXRlVG9rZW4oKTtcbiAgICogY29uc29sZS5sb2coJ1Rva2VuIGVsaW1pbmFkbywgbm8gcmVjaWJpcsOhIG3DoXMgbm90aWZpY2FjaW9uZXMnKTtcbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBkZWxldGVUb2tlbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBtZXNzYWdpbmcgPSB0aGlzLmdldE1lc3NhZ2luZ0luc3RhbmNlKCk7XG4gICAgaWYgKCFtZXNzYWdpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZGVsZXRlVG9rZW4obWVzc2FnaW5nKTtcblxuICAgICAgdGhpcy5zdGF0ZVN1YmplY3QubmV4dCh7XG4gICAgICAgIC4uLnRoaXMuc3RhdGVTdWJqZWN0LnZhbHVlLFxuICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBMaW1waWFyIGxpc3RlbmVyIGRlIG1lbnNhamVzXG4gICAgICBpZiAodGhpcy51bnN1YnNjcmliZU9uTWVzc2FnZSkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlT25NZXNzYWdlKCk7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmVPbk1lc3NhZ2UgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGVsaW1pbmFuZG8gdG9rZW4gRkNNOicsIGVycm9yKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gc2UgcHVkbyBlbGltaW5hciBlbCB0b2tlbiBkZSBub3RpZmljYWNpb25lcycpO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBNRU5TQUpFU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSBkZSBtZW5zYWplcyByZWNpYmlkb3MgZW4gZm9yZWdyb3VuZC5cbiAgICpcbiAgICogSU1QT1JUQU5URTogTG9zIG1lbnNhamVzIGVuIGJhY2tncm91bmQgc29uIG1hbmVqYWRvcyBwb3IgZWwgU2VydmljZSBXb3JrZXIuXG4gICAqXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgcXVlIGVtaXRlIGN1YW5kbyBsbGVnYSB1biBtZW5zYWplIGVuIGZvcmVncm91bmRcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBtZXNzYWdpbmcub25NZXNzYWdlKCkuc3Vic2NyaWJlKHBheWxvYWQgPT4ge1xuICAgKiAgIGNvbnNvbGUubG9nKCdNZW5zYWplIHJlY2liaWRvOicsIHBheWxvYWQpO1xuICAgKiAgIC8vIE1vc3RyYXIgbm90aWZpY2FjacOzbiBjdXN0b20gbyBhY3R1YWxpemFyIFVJXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIG9uTWVzc2FnZSgpOiBPYnNlcnZhYmxlPE5vdGlmaWNhdGlvblBheWxvYWQ+IHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmEgZWwgbGlzdGVuZXIgZGUgbWVuc2FqZXMgZW4gZm9yZWdyb3VuZFxuICAgKi9cbiAgcHJpdmF0ZSBzZXR1cE1lc3NhZ2VMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICBjb25zdCBtZXNzYWdpbmcgPSB0aGlzLmdldE1lc3NhZ2luZ0luc3RhbmNlKCk7XG4gICAgaWYgKCFtZXNzYWdpbmcgfHwgdGhpcy51bnN1YnNjcmliZU9uTWVzc2FnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudW5zdWJzY3JpYmVPbk1lc3NhZ2UgPSBvbk1lc3NhZ2UobWVzc2FnaW5nLCBwYXlsb2FkID0+IHtcbiAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uUGF5bG9hZCA9IHtcbiAgICAgICAgdGl0bGU6IHBheWxvYWQubm90aWZpY2F0aW9uPy50aXRsZSxcbiAgICAgICAgYm9keTogcGF5bG9hZC5ub3RpZmljYXRpb24/LmJvZHksXG4gICAgICAgIGltYWdlOiBwYXlsb2FkLm5vdGlmaWNhdGlvbj8uaW1hZ2UsXG4gICAgICAgIGRhdGE6IHBheWxvYWQuZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICAgICAgICBtZXNzYWdlSWQ6IHBheWxvYWQubWVzc2FnZUlkLFxuICAgICAgfTtcblxuICAgICAgdGhpcy5tZXNzYWdlU3ViamVjdC5uZXh0KG5vdGlmaWNhdGlvbik7XG5cbiAgICAgIC8vIFBlcnNpc3RpciBlbiBsb2NhbFN0b3JhZ2UgcGFyYSBkZWJ1Z2dpbmcgc2kgZXN0w6EgaGFiaWxpdGFkb1xuICAgICAgaWYgKHRoaXMuZGVidWdQZXJzaXN0ZW5jZSkge1xuICAgICAgICB0aGlzLnBlcnNpc3RNZXNzYWdlRm9yRGVidWcobm90aWZpY2F0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJzaXN0ZSB1biBtZW5zYWplIEZDTSBlbiBsb2NhbFN0b3JhZ2UgcGFyYSBkZWJ1Z2dpbmcuXG4gICAqIFNvbG8gc2UgdXNhIGN1YW5kbyBkZWJ1Z01lc3NhZ2VQZXJzaXN0ZW5jZSBlc3TDoSBoYWJpbGl0YWRvLlxuICAgKiBNYW50aWVuZSBsb3Mgw7psdGltb3MgNTAgbWVuc2FqZXMuXG4gICAqL1xuICBwcml2YXRlIHBlcnNpc3RNZXNzYWdlRm9yRGVidWcobWVzc2FnZTogTm90aWZpY2F0aW9uUGF5bG9hZCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdG9yZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkRFQlVHX1NUT1JBR0VfS0VZKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2VzID0gc3RvcmVkID8gSlNPTi5wYXJzZShzdG9yZWQpIDogW107XG4gICAgICBtZXNzYWdlcy51bnNoaWZ0KHsgLi4ubWVzc2FnZSwgcmVjZWl2ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpIH0pO1xuICAgICAgLy8gTWFudGVuZXIgc29sbyDDumx0aW1vcyA1MFxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5ERUJVR19TVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkobWVzc2FnZXMuc2xpY2UoMCwgNTApKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS53YXJuKCdbTWVzc2FnaW5nXSBEZWJ1ZyBwZXJzaXN0ZW5jZSBmYWlsZWQ6JywgZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEVTVEFETyBZIFVUSUxJREFERVNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIE9idGllbmUgZWwgZXN0YWRvIGFjdHVhbCBkZWwgcGVybWlzbyBkZSBub3RpZmljYWNpb25lcy5cbiAgICpcbiAgICogQHJldHVybnMgJ2dyYW50ZWQnIHwgJ2RlbmllZCcgfCAnZGVmYXVsdCdcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBwZXJtaXNzaW9uID0gbWVzc2FnaW5nLmdldFBlcm1pc3Npb25TdGF0ZSgpO1xuICAgKiBpZiAocGVybWlzc2lvbiA9PT0gJ2dyYW50ZWQnKSB7XG4gICAqICAgLy8gWWEgdGllbmUgcGVybWlzb1xuICAgKiB9IGVsc2UgaWYgKHBlcm1pc3Npb24gPT09ICdkZWZhdWx0Jykge1xuICAgKiAgIC8vIFB1ZWRlIHNvbGljaXRhciBwZXJtaXNvXG4gICAqIH0gZWxzZSB7XG4gICAqICAgLy8gRGVuZWdhZG8sIGRlYmUgaGFiaWxpdGFyIG1hbnVhbG1lbnRlXG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBnZXRQZXJtaXNzaW9uU3RhdGUoKTogTm90aWZpY2F0aW9uUGVybWlzc2lvbiB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICByZXR1cm4gJ2RlZmF1bHQnO1xuICAgIH1cblxuICAgIGlmICghKCdOb3RpZmljYXRpb24nIGluIHdpbmRvdykpIHtcbiAgICAgIHJldHVybiAnZGVuaWVkJztcbiAgICB9XG5cbiAgICByZXR1cm4gTm90aWZpY2F0aW9uLnBlcm1pc3Npb24gYXMgTm90aWZpY2F0aW9uUGVybWlzc2lvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBzaSBGQ00gZXN0w6Egc29wb3J0YWRvIGVuIGVsIG5hdmVnYWRvciBhY3R1YWwuXG4gICAqIFVzYSBsw7NnaWNhIGludGVsaWdlbnRlIHBhcmEgZXZpdGFyIGZhbHNvcyBuZWdhdGl2b3MgcG9yIHRpbWluZyBkZWwgSW5qZWN0b3IuXG4gICAqXG4gICAqIEByZXR1cm5zIHRydWUgc2kgRkNNIGVzdMOhIHNvcG9ydGFkb1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGlmIChhd2FpdCBtZXNzYWdpbmcuaXNTdXBwb3J0ZWQoKSkge1xuICAgKiAgIC8vIFB1ZWRlIHVzYXIgbm90aWZpY2FjaW9uZXMgcHVzaFxuICAgKiB9IGVsc2Uge1xuICAgKiAgIC8vIE5hdmVnYWRvciBubyBzb3BvcnRhIG8gbm8gdGllbmUgU2VydmljZSBXb3JrZXJcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGlzU3VwcG9ydGVkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vIFNpIHlhIHRlbmVtb3MgdG9rZW4gZW4gZXN0YWRvLCBjbGFyYW1lbnRlIEZDTSBmdW5jaW9uYVxuICAgIGlmICh0aGlzLnN0YXRlU3ViamVjdC52YWx1ZS50b2tlbikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gU2kgeWEgY2FsY3VsYW1vcyBzb3BvcnRlIGV4aXRvc2FtZW50ZSwgdXNhcmxvXG4gICAgaWYgKHRoaXMuc3RhdGVTdWJqZWN0LnZhbHVlLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBWZXJpZmljYWNpb25lcyBiw6FzaWNhcyDigJQgQVBJcyBkZWwgYnJvd3NlclxuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoISgnTm90aWZpY2F0aW9uJyBpbiB3aW5kb3cpIHx8ICEoJ3NlcnZpY2VXb3JrZXInIGluIG5hdmlnYXRvcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBOT1RBOiBkZWxpYmVyYWRhbWVudGUgTk8gY2hlcXVlYW1vcyBgZ2V0TWVzc2FnaW5nSW5zdGFuY2UoKWAgYXF1w60gcG9ycXVlXG4gICAgLy8gZWwgZmFjdG9yeSBgcHJvdmlkZU1lc3NhZ2luZygoKSA9PiBnZXRNZXNzYWdpbmcoKSlgIGVzIGxhenkgZW4gQW5ndWxhclxuICAgIC8vIEZpcmUgeSBwdWVkZSBubyBlc3RhciByZXN1ZWx0byBjdWFuZG8gZXN0YSBmdW5jacOzbiBzZSBsbGFtYSB0ZW1wcmFub1xuICAgIC8vIGVuIGVsIGNpY2xvIGRlIHZpZGEuIEVzbyBjYXVzYWJhIGZhbHNvcyBuZWdhdGl2b3MuIFNpIEZDTSByZWFsbWVudGUgbm9cbiAgICAvLyBlc3TDoSBkaXNwb25pYmxlIChwcm95ZWN0byBzaW4gTWVzc2FnaW5nIGhhYmlsaXRhZG8sIFZBUElEIGludsOhbGlkbyksIGVsXG4gICAgLy8gZmxvdyBkb3duc3RyZWFtIChgZ2V0VG9rZW5gL2ByZXF1ZXN0UGVybWlzc2lvbmApIGZhbGxhcsOhIGNvbiBlcnJvciByZWFsLFxuICAgIC8vIHF1ZSBlcyBtZWpvciBVWCBxdWUgdW4gXCJubyBzb3BvcnRhZG9cIiBwcmVtYXR1cm8uXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSBlbCB0b2tlbiBhY3R1YWwgc2luIGhhY2VyIHJlcXVlc3QuXG4gICAqXG4gICAqIEByZXR1cm5zIFRva2VuIGFsbWFjZW5hZG8gbyBudWxsXG4gICAqL1xuICBnZXQgY3VycmVudFRva2VuKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnN0YXRlU3ViamVjdC52YWx1ZS50b2tlbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIGRlbCBlc3RhZG8gY29tcGxldG8gZGVsIHNlcnZpY2lvIGRlIG1lc3NhZ2luZy5cbiAgICovXG4gIGdldCBzdGF0ZSQoKTogT2JzZXJ2YWJsZTxNZXNzYWdpbmdTdGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBzaSBlbCB1c3VhcmlvIHlhIG90b3Jnw7MgcGVybWlzbyBkZSBub3RpZmljYWNpb25lcy5cbiAgICovXG4gIGdldCBoYXNQZXJtaXNzaW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlU3ViamVjdC52YWx1ZS5wZXJtaXNzaW9uID09PSAnZ3JhbnRlZCc7XG4gIH1cblxuICAvKipcbiAgICogSGlkcmF0YSBlbCBlc3RhZG8gZGVsIHRva2VuIGRlc2RlIHVuIHZhbG9yIGV4dGVybm8gKGVqOiBsb2NhbFN0b3JhZ2UpLlxuICAgKiDDmnRpbCBjdWFuZG8gZWwgdG9rZW4geWEgZXhpc3RlIHBlcm8gZWwgTWVzc2FnaW5nU2VydmljZSBubyBsbyB0aWVuZSBlbiBtZW1vcmlhLlxuICAgKlxuICAgKiBAcGFyYW0gdG9rZW4gVG9rZW4gRkNNIGEgc2V0ZWFyXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3Qgc3RvcmVkVG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZmNtX3Rva2VuJyk7XG4gICAqIGlmIChzdG9yZWRUb2tlbikge1xuICAgKiAgIG1lc3NhZ2luZy5zZXRUb2tlbkZyb21TdG9yYWdlKHN0b3JlZFRva2VuKTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIHNldFRva2VuRnJvbVN0b3JhZ2UodG9rZW46IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdG9rZW4pIHJldHVybjtcblxuICAgIHRoaXMuc3RhdGVTdWJqZWN0Lm5leHQoe1xuICAgICAgLi4udGhpcy5zdGF0ZVN1YmplY3QudmFsdWUsXG4gICAgICB0b2tlbixcbiAgICAgIGlzU3VwcG9ydGVkOiB0cnVlLCAvLyBTaSBoYXkgdG9rZW4sIGNsYXJhbWVudGUgRkNNIGZ1bmNpb25hXG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gREVFUCBMSU5LSU5HIC8gTkFWRUdBQ0nDk05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgZGUgY2xpY2tzIGVuIG5vdGlmaWNhY2lvbmVzLlxuICAgKlxuICAgKiBFbWl0ZSBjdWFuZG8gZWwgdXN1YXJpbyBoYWNlIGNsaWNrIGVuIHVuYSBub3RpZmljYWNpw7NuIChmb3JlZ3JvdW5kIG8gYmFja2dyb3VuZCkuXG4gICAqIFVzYSBlc3RlIG9ic2VydmFibGUgcGFyYSBuYXZlZ2FyIGEgbGEgcMOhZ2luYSBjb3JyZXNwb25kaWVudGUuXG4gICAqXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgcXVlIGVtaXRlIE5vdGlmaWNhdGlvbkNsaWNrRXZlbnRcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBAQ29tcG9uZW50KHsuLi59KVxuICAgKiBleHBvcnQgY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAgICogICBwcml2YXRlIG1lc3NhZ2luZyA9IGluamVjdChNZXNzYWdpbmdTZXJ2aWNlKTtcbiAgICogICBwcml2YXRlIHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICAgKlxuICAgKiAgIGNvbnN0cnVjdG9yKCkge1xuICAgKiAgICAgdGhpcy5tZXNzYWdpbmcub25Ob3RpZmljYXRpb25DbGljaygpLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAqICAgICAgIGlmIChldmVudC5hY3Rpb24ucm91dGUpIHtcbiAgICogICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbZXZlbnQuYWN0aW9uLnJvdXRlXSwge1xuICAgKiAgICAgICAgICAgcXVlcnlQYXJhbXM6IGV2ZW50LmFjdGlvbi5xdWVyeVBhcmFtc1xuICAgKiAgICAgICAgIH0pO1xuICAgKiAgICAgICB9XG4gICAqICAgICB9KTtcbiAgICogICB9XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBvbk5vdGlmaWNhdGlvbkNsaWNrKCk6IE9ic2VydmFibGU8Tm90aWZpY2F0aW9uQ2xpY2tFdmVudD4ge1xuICAgIHJldHVybiB0aGlzLm5vdGlmaWNhdGlvbkNsaWNrU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWUgbGEgYWNjacOzbiBkZSBuYXZlZ2FjacOzbiBkZSBsb3MgZGF0b3MgZGUgdW5hIG5vdGlmaWNhY2nDs24uXG4gICAqXG4gICAqIEJ1c2NhIGNhbXBvcyBlc3BlY8OtZmljb3MgZW4gZWwgcGF5bG9hZCBkZSBkYXRvczpcbiAgICogLSBgcm91dGVgOiBSdXRhIGludGVybmEgZGUgbGEgYXBwIChlajogJy9vcmRlcnMvMTIzJylcbiAgICogLSBgdXJsYDogVVJMIGV4dGVybmEgKGVqOiAnaHR0cHM6Ly9leGFtcGxlLmNvbScpXG4gICAqIC0gYGFjdGlvbl90eXBlYDogVGlwbyBkZSBhY2Npw7NuIHBlcnNvbmFsaXphZGFcbiAgICogLSBDYW1wb3MgY29uIHByZWZpam8gYGFjdGlvbl9gOiBEYXRvcyBhZGljaW9uYWxlc1xuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIERhdG9zIGRlbCBwYXlsb2FkIGRlIGxhIG5vdGlmaWNhY2nDs25cbiAgICogQHJldHVybnMgQWNjacOzbiBkZSBuYXZlZ2FjacOzbiBleHRyYcOtZGFcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBQYXlsb2FkIGRlc2RlIGVsIGJhY2tlbmQ6XG4gICAqIC8vIHsgcm91dGU6ICcvb3JkZXJzLzEyMycsIGFjdGlvbl90eXBlOiAndmlld19vcmRlcicsIGFjdGlvbl9vcmRlcklkOiAnMTIzJyB9XG4gICAqXG4gICAqIGNvbnN0IGFjdGlvbiA9IG1lc3NhZ2luZy5leHRyYWN0QWN0aW9uRnJvbURhdGEobm90aWZpY2F0aW9uLmRhdGEpO1xuICAgKiAvLyB7IHJvdXRlOiAnL29yZGVycy8xMjMnLCBhY3Rpb25UeXBlOiAndmlld19vcmRlcicsIGFjdGlvbkRhdGE6IHsgb3JkZXJJZDogJzEyMycgfSB9XG4gICAqIGBgYFxuICAgKi9cbiAgZXh0cmFjdEFjdGlvbkZyb21EYXRhKGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogTm90aWZpY2F0aW9uQWN0aW9uIHtcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBjb25zdCBhY3Rpb246IE5vdGlmaWNhdGlvbkFjdGlvbiA9IHt9O1xuXG4gICAgLy8gUnV0YSBpbnRlcm5hXG4gICAgaWYgKGRhdGFbJ3JvdXRlJ10pIHtcbiAgICAgIGFjdGlvbi5yb3V0ZSA9IGRhdGFbJ3JvdXRlJ107XG4gICAgfVxuXG4gICAgLy8gVVJMIGV4dGVybmFcbiAgICBpZiAoZGF0YVsndXJsJ10pIHtcbiAgICAgIGFjdGlvbi51cmwgPSBkYXRhWyd1cmwnXTtcbiAgICB9XG5cbiAgICAvLyBUaXBvIGRlIGFjY2nDs25cbiAgICBpZiAoZGF0YVsnYWN0aW9uX3R5cGUnXSkge1xuICAgICAgYWN0aW9uLmFjdGlvblR5cGUgPSBkYXRhWydhY3Rpb25fdHlwZSddO1xuICAgIH1cblxuICAgIC8vIFF1ZXJ5IHBhcmFtcyAocHVlZGUgdmVuaXIgY29tbyBKU09OIHN0cmluZylcbiAgICBpZiAoZGF0YVsncXVlcnlfcGFyYW1zJ10pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGFjdGlvbi5xdWVyeVBhcmFtcyA9IEpTT04ucGFyc2UoZGF0YVsncXVlcnlfcGFyYW1zJ10pO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIFNpIG5vIGVzIEpTT04gdsOhbGlkbywgaW50ZW50YXIgcGFyc2VhciBjb21vIGtleT12YWx1ZVxuICAgICAgICBhY3Rpb24ucXVlcnlQYXJhbXMgPSB0aGlzLnBhcnNlUXVlcnlTdHJpbmcoZGF0YVsncXVlcnlfcGFyYW1zJ10pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERhdG9zIGFkaWNpb25hbGVzIGNvbiBwcmVmaWpvIGFjdGlvbl9cbiAgICBjb25zdCBhY3Rpb25EYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgICBpZiAoa2V5LnN0YXJ0c1dpdGgoJ2FjdGlvbl8nKSAmJiBrZXkgIT09ICdhY3Rpb25fdHlwZScpIHtcbiAgICAgICAgY29uc3QgY2xlYW5LZXkgPSBrZXkucmVwbGFjZSgnYWN0aW9uXycsICcnKTtcbiAgICAgICAgLy8gSW50ZW50YXIgcGFyc2VhciBKU09OIHNpIGVzIHBvc2libGVcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhY3Rpb25EYXRhW2NsZWFuS2V5XSA9IEpTT04ucGFyc2UodmFsdWUpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICBhY3Rpb25EYXRhW2NsZWFuS2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKGFjdGlvbkRhdGEpLmxlbmd0aCA+IDApIHtcbiAgICAgIGFjdGlvbi5hY3Rpb25EYXRhID0gYWN0aW9uRGF0YTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRlIG1hbnVhbG1lbnRlIHVuIGV2ZW50byBkZSBjbGljayBlbiBub3RpZmljYWNpw7NuLlxuICAgKlxuICAgKiDDmnRpbCBwYXJhIG1hbmVqYXIgY2xpY2tzIGVuIG5vdGlmaWNhY2lvbmVzIGZvcmVncm91bmQgZG9uZGVcbiAgICogbGEgYXBwIGRlY2lkZSBtb3N0cmFyIHVuIGJhbm5lciBjdXN0b20uXG4gICAqXG4gICAqIEBwYXJhbSBub3RpZmljYXRpb24gLSBQYXlsb2FkIGRlIGxhIG5vdGlmaWNhY2nDs25cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBtZXNzYWdpbmcub25NZXNzYWdlKCkuc3Vic2NyaWJlKG5vdGlmaWNhdGlvbiA9PiB7XG4gICAqICAgLy8gTW9zdHJhciBiYW5uZXIgY3VzdG9tXG4gICAqICAgdGhpcy5zaG93QmFubmVyKG5vdGlmaWNhdGlvbiwgKCkgPT4ge1xuICAgKiAgICAgLy8gVXN1YXJpbyBoaXpvIGNsaWNrIGVuIGVsIGJhbm5lclxuICAgKiAgICAgbWVzc2FnaW5nLmhhbmRsZU5vdGlmaWNhdGlvbkNsaWNrKG5vdGlmaWNhdGlvbik7XG4gICAqICAgfSk7XG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGhhbmRsZU5vdGlmaWNhdGlvbkNsaWNrKG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uUGF5bG9hZCk6IHZvaWQge1xuICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuZXh0cmFjdEFjdGlvbkZyb21EYXRhKG5vdGlmaWNhdGlvbi5kYXRhKTtcblxuICAgIHRoaXMubm90aWZpY2F0aW9uQ2xpY2tTdWJqZWN0Lm5leHQoe1xuICAgICAgbm90aWZpY2F0aW9uLFxuICAgICAgYWN0aW9uLFxuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIHVuYSBub3RpZmljYWNpw7NuIHRpZW5lIGFjY2nDs24gZGUgbmF2ZWdhY2nDs24uXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gRGF0b3MgZGVsIHBheWxvYWRcbiAgICogQHJldHVybnMgdHJ1ZSBzaSB0aWVuZSByb3V0ZSBvIHVybFxuICAgKi9cbiAgaGFzTmF2aWdhdGlvbkFjdGlvbihkYXRhPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IGJvb2xlYW4ge1xuICAgIGlmICghZGF0YSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAhIShkYXRhWydyb3V0ZSddIHx8IGRhdGFbJ3VybCddKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZWEgdW4gcXVlcnkgc3RyaW5nIGVuIHVuIG9iamV0by5cbiAgICovXG4gIHByaXZhdGUgcGFyc2VRdWVyeVN0cmluZyhxdWVyeVN0cmluZzogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3QgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgICBpZiAoIXF1ZXJ5U3RyaW5nKSByZXR1cm4gcGFyYW1zO1xuXG4gICAgLy8gUmVtb3ZlciA/IGluaWNpYWwgc2kgZXhpc3RlXG4gICAgY29uc3QgY2xlYW5RdWVyeSA9IHF1ZXJ5U3RyaW5nLnN0YXJ0c1dpdGgoJz8nKSA/IHF1ZXJ5U3RyaW5nLnNsaWNlKDEpIDogcXVlcnlTdHJpbmc7XG5cbiAgICBmb3IgKGNvbnN0IHBhaXIgb2YgY2xlYW5RdWVyeS5zcGxpdCgnJicpKSB7XG4gICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBwYWlyLnNwbGl0KCc9Jyk7XG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHBhcmFtc1tkZWNvZGVVUklDb21wb25lbnQoa2V5KV0gPSBkZWNvZGVVUklDb21wb25lbnQodmFsdWUgfHwgJycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cbn1cbiJdfQ==
|
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.741';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzIuMC43NDEnO1xuIl19
|
|
@@ -50,7 +50,7 @@ import 'prismjs/components/prism-json';
|
|
|
50
50
|
* Current version of valtech-components.
|
|
51
51
|
* This is automatically updated during the publish process.
|
|
52
52
|
*/
|
|
53
|
-
const VERSION = '2.0.
|
|
53
|
+
const VERSION = '2.0.741';
|
|
54
54
|
|
|
55
55
|
/**
|
|
56
56
|
* Servicio para gestionar presets de componentes.
|
|
@@ -21762,7 +21762,7 @@ class MessagingService {
|
|
|
21762
21762
|
if (!isPlatformBrowser(this.platformId) || !('serviceWorker' in navigator)) {
|
|
21763
21763
|
return;
|
|
21764
21764
|
}
|
|
21765
|
-
navigator.serviceWorker.addEventListener('message',
|
|
21765
|
+
navigator.serviceWorker.addEventListener('message', event => {
|
|
21766
21766
|
// Verificar que es un mensaje de notificación click
|
|
21767
21767
|
if (event.data?.type === 'NOTIFICATION_CLICK') {
|
|
21768
21768
|
this.ngZone.run(() => {
|
|
@@ -21817,7 +21817,7 @@ class MessagingService {
|
|
|
21817
21817
|
* ```
|
|
21818
21818
|
*/
|
|
21819
21819
|
async requestPermission() {
|
|
21820
|
-
if (!await this.isSupported()) {
|
|
21820
|
+
if (!(await this.isSupported())) {
|
|
21821
21821
|
console.warn('FCM no está soportado en este navegador');
|
|
21822
21822
|
return null;
|
|
21823
21823
|
}
|
|
@@ -21946,7 +21946,7 @@ class MessagingService {
|
|
|
21946
21946
|
if (!messaging || this.unsubscribeOnMessage) {
|
|
21947
21947
|
return;
|
|
21948
21948
|
}
|
|
21949
|
-
this.unsubscribeOnMessage = onMessage(messaging,
|
|
21949
|
+
this.unsubscribeOnMessage = onMessage(messaging, payload => {
|
|
21950
21950
|
const notification = {
|
|
21951
21951
|
title: payload.notification?.title,
|
|
21952
21952
|
body: payload.notification?.body,
|
|
@@ -22031,16 +22031,21 @@ class MessagingService {
|
|
|
22031
22031
|
if (this.stateSubject.value.isSupported) {
|
|
22032
22032
|
return true;
|
|
22033
22033
|
}
|
|
22034
|
-
// Verificaciones básicas
|
|
22034
|
+
// Verificaciones básicas — APIs del browser
|
|
22035
22035
|
if (!isPlatformBrowser(this.platformId)) {
|
|
22036
22036
|
return false;
|
|
22037
22037
|
}
|
|
22038
22038
|
if (!('Notification' in window) || !('serviceWorker' in navigator)) {
|
|
22039
22039
|
return false;
|
|
22040
22040
|
}
|
|
22041
|
-
//
|
|
22042
|
-
//
|
|
22043
|
-
|
|
22041
|
+
// NOTA: deliberadamente NO chequeamos `getMessagingInstance()` aquí porque
|
|
22042
|
+
// el factory `provideMessaging(() => getMessaging())` es lazy en Angular
|
|
22043
|
+
// Fire y puede no estar resuelto cuando esta función se llama temprano
|
|
22044
|
+
// en el ciclo de vida. Eso causaba falsos negativos. Si FCM realmente no
|
|
22045
|
+
// está disponible (proyecto sin Messaging habilitado, VAPID inválido), el
|
|
22046
|
+
// flow downstream (`getToken`/`requestPermission`) fallará con error real,
|
|
22047
|
+
// que es mejor UX que un "no soportado" prematuro.
|
|
22048
|
+
return true;
|
|
22044
22049
|
}
|
|
22045
22050
|
/**
|
|
22046
22051
|
* Obtiene el token actual sin hacer request.
|
|
@@ -24332,21 +24337,22 @@ class UsernameInputComponent {
|
|
|
24332
24337
|
<label class="username-label">{{ props.label }}</label>
|
|
24333
24338
|
}
|
|
24334
24339
|
|
|
24335
|
-
|
|
24336
|
-
|
|
24337
|
-
|
|
24338
|
-
|
|
24339
|
-
|
|
24340
|
-
|
|
24341
|
-
|
|
24342
|
-
|
|
24343
|
-
|
|
24344
|
-
|
|
24345
|
-
|
|
24346
|
-
|
|
24347
|
-
|
|
24340
|
+
<!-- ion-input nativo: renderiza la pill shape como val-text-input.
|
|
24341
|
+
Prefijo @ via slot="start", status indicator via slot="end". -->
|
|
24342
|
+
<ion-input
|
|
24343
|
+
[formControl]="props.control"
|
|
24344
|
+
type="text"
|
|
24345
|
+
[placeholder]="props.placeholder || 'username'"
|
|
24346
|
+
[maxlength]="props.maxLength || 30"
|
|
24347
|
+
(ionFocus)="onFocus()"
|
|
24348
|
+
(ionBlur)="onBlur()"
|
|
24349
|
+
(ionInput)="onInput($event)"
|
|
24350
|
+
class="username-field"
|
|
24351
|
+
[class.has-error]="hasError()"
|
|
24352
|
+
>
|
|
24353
|
+
<span slot="start" class="username-prefix">{{ props.prefix || '@' }}</span>
|
|
24348
24354
|
@if (props.showAvailability !== false) {
|
|
24349
|
-
<
|
|
24355
|
+
<span slot="end" class="availability-indicator">
|
|
24350
24356
|
@switch (availabilityStatus()) {
|
|
24351
24357
|
@case ('checking') {
|
|
24352
24358
|
<ion-spinner name="crescent" class="checking-spinner" />
|
|
@@ -24361,9 +24367,9 @@ class UsernameInputComponent {
|
|
|
24361
24367
|
<ion-icon name="alert-circle" class="status-icon invalid" />
|
|
24362
24368
|
}
|
|
24363
24369
|
}
|
|
24364
|
-
</
|
|
24370
|
+
</span>
|
|
24365
24371
|
}
|
|
24366
|
-
</
|
|
24372
|
+
</ion-input>
|
|
24367
24373
|
|
|
24368
24374
|
@if (showStatusMessage()) {
|
|
24369
24375
|
<ion-text [color]="statusColor()" class="status-message">
|
|
@@ -24377,7 +24383,7 @@ class UsernameInputComponent {
|
|
|
24377
24383
|
</ion-text>
|
|
24378
24384
|
}
|
|
24379
24385
|
</div>
|
|
24380
|
-
`, isInline: true, styles: [".username-input-container{margin-bottom:1rem}.username-label{display:block;font-size:.875rem;font-weight:500;color:var(--ion-color-dark);margin-bottom:.5rem}.username-
|
|
24386
|
+
`, isInline: true, styles: [".username-input-container{margin-bottom:1rem}.username-label{display:block;font-size:.875rem;font-weight:500;color:var(--ion-color-dark);margin-bottom:.5rem}.username-prefix{font-size:1rem;font-weight:500;color:var(--ion-color-medium);-webkit-user-select:none;user-select:none;margin-inline-end:.25rem;display:inline-flex;align-items:center}.username-field{width:100%}.username-field.has-error{--highlight-color: var(--ion-color-danger)}.availability-indicator{display:inline-flex;align-items:center;justify-content:center;margin-inline-start:.5rem}.checking-spinner{width:18px;height:18px;--color: var(--ion-color-medium)}.status-icon{font-size:1.25rem}.status-icon.available{color:var(--ion-color-success)}.status-icon.taken{color:var(--ion-color-danger)}.status-icon.invalid{color:var(--ion-color-warning)}.status-message,.error-message{display:block;margin-top:.25rem;padding-left:.25rem}:host-context(body.dark){.username-input-wrapper{background:var(--ion-color-step-50);border-color:var(--ion-color-step-150)}.username-label{color:var(--ion-color-light)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }] }); }
|
|
24381
24387
|
}
|
|
24382
24388
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UsernameInputComponent, decorators: [{
|
|
24383
24389
|
type: Component,
|
|
@@ -24387,21 +24393,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
24387
24393
|
<label class="username-label">{{ props.label }}</label>
|
|
24388
24394
|
}
|
|
24389
24395
|
|
|
24390
|
-
|
|
24391
|
-
|
|
24392
|
-
|
|
24393
|
-
|
|
24394
|
-
|
|
24395
|
-
|
|
24396
|
-
|
|
24397
|
-
|
|
24398
|
-
|
|
24399
|
-
|
|
24400
|
-
|
|
24401
|
-
|
|
24402
|
-
|
|
24396
|
+
<!-- ion-input nativo: renderiza la pill shape como val-text-input.
|
|
24397
|
+
Prefijo @ via slot="start", status indicator via slot="end". -->
|
|
24398
|
+
<ion-input
|
|
24399
|
+
[formControl]="props.control"
|
|
24400
|
+
type="text"
|
|
24401
|
+
[placeholder]="props.placeholder || 'username'"
|
|
24402
|
+
[maxlength]="props.maxLength || 30"
|
|
24403
|
+
(ionFocus)="onFocus()"
|
|
24404
|
+
(ionBlur)="onBlur()"
|
|
24405
|
+
(ionInput)="onInput($event)"
|
|
24406
|
+
class="username-field"
|
|
24407
|
+
[class.has-error]="hasError()"
|
|
24408
|
+
>
|
|
24409
|
+
<span slot="start" class="username-prefix">{{ props.prefix || '@' }}</span>
|
|
24403
24410
|
@if (props.showAvailability !== false) {
|
|
24404
|
-
<
|
|
24411
|
+
<span slot="end" class="availability-indicator">
|
|
24405
24412
|
@switch (availabilityStatus()) {
|
|
24406
24413
|
@case ('checking') {
|
|
24407
24414
|
<ion-spinner name="crescent" class="checking-spinner" />
|
|
@@ -24416,9 +24423,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
24416
24423
|
<ion-icon name="alert-circle" class="status-icon invalid" />
|
|
24417
24424
|
}
|
|
24418
24425
|
}
|
|
24419
|
-
</
|
|
24426
|
+
</span>
|
|
24420
24427
|
}
|
|
24421
|
-
</
|
|
24428
|
+
</ion-input>
|
|
24422
24429
|
|
|
24423
24430
|
@if (showStatusMessage()) {
|
|
24424
24431
|
<ion-text [color]="statusColor()" class="status-message">
|
|
@@ -24432,7 +24439,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
24432
24439
|
</ion-text>
|
|
24433
24440
|
}
|
|
24434
24441
|
</div>
|
|
24435
|
-
`, styles: [".username-input-container{margin-bottom:1rem}.username-label{display:block;font-size:.875rem;font-weight:500;color:var(--ion-color-dark);margin-bottom:.5rem}.username-
|
|
24442
|
+
`, styles: [".username-input-container{margin-bottom:1rem}.username-label{display:block;font-size:.875rem;font-weight:500;color:var(--ion-color-dark);margin-bottom:.5rem}.username-prefix{font-size:1rem;font-weight:500;color:var(--ion-color-medium);-webkit-user-select:none;user-select:none;margin-inline-end:.25rem;display:inline-flex;align-items:center}.username-field{width:100%}.username-field.has-error{--highlight-color: var(--ion-color-danger)}.availability-indicator{display:inline-flex;align-items:center;justify-content:center;margin-inline-start:.5rem}.checking-spinner{width:18px;height:18px;--color: var(--ion-color-medium)}.status-icon{font-size:1.25rem}.status-icon.available{color:var(--ion-color-success)}.status-icon.taken{color:var(--ion-color-danger)}.status-icon.invalid{color:var(--ion-color-warning)}.status-message,.error-message{display:block;margin-top:.25rem;padding-left:.25rem}:host-context(body.dark){.username-input-wrapper{background:var(--ion-color-step-50);border-color:var(--ion-color-step-150)}.username-label{color:var(--ion-color-light)}}\n"] }]
|
|
24436
24443
|
}], propDecorators: { props: [{
|
|
24437
24444
|
type: Input
|
|
24438
24445
|
}] } });
|
|
@@ -32972,7 +32979,7 @@ class BottomNavComponent {
|
|
|
32972
32979
|
}
|
|
32973
32980
|
</div>
|
|
32974
32981
|
</nav>
|
|
32975
|
-
`, isInline: true, styles: [":host{display:block;position:fixed;bottom:0;left:0;right:0;z-index:100;pointer-events:none}.bottom-nav{--bottom-nav-bg: var(--ion-background-color);--bottom-nav-active: var(--ion-color-primary);--bottom-nav-inactive: var(--ion-color-medium);--bottom-nav-radius: 16px 16px 0 0;--bottom-nav-height: 64px;--bottom-nav-fab-size: 56px;--bottom-nav-max-width: var(--val-container-md, 720px);--fab-color: var(--ion-color-primary);pointer-events:auto;background:var(--bottom-nav-bg);border-radius:var(--bottom-nav-radius);height:var(--bottom-nav-height);padding:0 8px;max-width:var(--bottom-nav-max-width);margin:0 auto}.bottom-nav--elevated{box-shadow:0 -4px 20px #00000014}.bottom-nav--translucent{background:rgba(var(--ion-background-color-rgb, 255, 255, 255),.75);backdrop-filter:blur(20px) saturate(180%);-webkit-backdrop-filter:blur(20px) saturate(180%);border-top:1px solid rgba(var(--ion-text-color-rgb, 0, 0, 0),.06)}.bottom-nav--floating{margin:0 auto 8px;width:calc(100% - 32px);border-radius:32px;border:1px solid rgba(var(--ion-text-color-rgb, 0, 0, 0),.08);box-shadow:0 4px 24px #00000014,0 8px 32px #0000000a;--bottom-nav-radius: 32px}.bottom-nav--floating.bottom-nav--translucent{background:rgba(var(--ion-background-color-rgb, 255, 255, 255),.82);backdrop-filter:blur(28px) saturate(200%);-webkit-backdrop-filter:blur(28px) saturate(200%);border:1px solid rgba(var(--ion-text-color-rgb, 0, 0, 0),.08)}.bottom-nav--floating.bottom-nav--elevated{box-shadow:0 4px 24px #0000001a,0 12px 48px #00000014}.bottom-nav--floating.bottom-nav--safe-area{margin-bottom:calc(8px + env(safe-area-inset-bottom,0))}.bottom-nav--safe-area{padding-bottom:env(safe-area-inset-bottom,0);height:calc(var(--bottom-nav-height) + env(safe-area-inset-bottom,0))}.bottom-nav__container{display:flex;align-items:center;justify-content:space-around;height:var(--bottom-nav-height);max-width:500px;margin:0 auto}.bottom-nav__tab{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;height:100%;padding:8px 4px;background:transparent;border:none;cursor:pointer;position:relative;overflow:hidden;color:var(--bottom-nav-inactive);transition:color .2s ease;max-width:80px;--ripple-color: var(--bottom-nav-active)}.bottom-nav__tab:focus-visible{outline:2px solid var(--bottom-nav-active);outline-offset:-2px;border-radius:8px}.bottom-nav__tab--active{color:var(--bottom-nav-active)}.bottom-nav__tab--disabled{opacity:.4;cursor:not-allowed;pointer-events:none}.bottom-nav__tab[data-animation=scale] .bottom-nav__tab-icon{transition:transform .2s cubic-bezier(.4,0,.2,1)}.bottom-nav__tab[data-animation=scale].bottom-nav__tab--active .bottom-nav__tab-icon{transform:scale(1.15)}.bottom-nav__tab[data-animation=fade]{transition:opacity .2s ease,color .2s ease}.bottom-nav__tab[data-animation=fade]:not(.bottom-nav__tab--active){opacity:.6}.bottom-nav__tab[data-animation=slide] .bottom-nav__tab-label{transition:transform .2s ease,opacity .2s ease;transform:translateY(6px);opacity:0}.bottom-nav__tab[data-animation=slide].bottom-nav__tab--active .bottom-nav__tab-label{transform:translateY(0);opacity:1}.bottom-nav__tab-icon{position:relative;font-size:24px;line-height:1}.bottom-nav__tab-icon ion-icon{display:block}.bottom-nav__tab-label{font-size:11px;font-weight:500;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;letter-spacing:.01em}.bottom-nav__badge{position:absolute;top:-4px;right:-10px;min-width:18px;height:18px;padding:0 5px;font-size:10px;font-weight:600;line-height:18px;text-align:center;color:#fff;background-color:var(--ion-color-danger);border-radius:9px;box-shadow:0 1px 3px #0003}.bottom-nav__badge--dot{min-width:10px;width:10px;height:10px;padding:0;top:-2px;right:-4px;border-radius:50%}.bottom-nav__fab{position:relative;flex-shrink:0;width:var(--bottom-nav-fab-size);height:var(--bottom-nav-fab-size);margin:0 12px;margin-top:calc(var(--bottom-nav-fab-size) * -.35);background:var(--fab-color);border:none;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;color:#fff;font-size:28px;box-shadow:0 4px 14px rgba(var(--ion-color-primary-rgb, 56, 128, 255),.4);transition:transform .2s cubic-bezier(.4,0,.2,1),box-shadow .2s ease;overflow:hidden;--ripple-color: rgba(255, 255, 255, .3)}.bottom-nav__fab:hover{transform:scale(1.08);box-shadow:0 6px 20px rgba(var(--ion-color-primary-rgb, 56, 128, 255),.5)}.bottom-nav__fab:active{transform:scale(.95)}.bottom-nav__fab:focus-visible{outline:3px solid white;outline-offset:2px}.bottom-nav__fab--small{--bottom-nav-fab-size: 48px;font-size:24px;margin-top:-14.4px}.bottom-nav__fab ion-icon{display:block}.bottom-nav--hide-labels{--bottom-nav-height: 56px}.bottom-nav--hide-labels .bottom-nav__tab-label{display:none}.bottom-nav--hide-labels .bottom-nav__tab-icon{font-size:26px}
|
|
32982
|
+
`, isInline: true, styles: [":host{display:block;position:fixed;bottom:0;left:0;right:0;z-index:100;pointer-events:none}.bottom-nav{--bottom-nav-bg: var(--ion-background-color);--bottom-nav-active: var(--ion-color-primary);--bottom-nav-inactive: var(--ion-color-medium);--bottom-nav-radius: 16px 16px 0 0;--bottom-nav-height: 64px;--bottom-nav-fab-size: 56px;--bottom-nav-max-width: var(--val-container-md, 720px);--fab-color: var(--ion-color-primary);pointer-events:auto;background:var(--bottom-nav-bg);border-radius:var(--bottom-nav-radius);height:var(--bottom-nav-height);padding:0 8px;max-width:var(--bottom-nav-max-width);margin:0 auto}.bottom-nav--elevated{box-shadow:0 -4px 20px #00000014}.bottom-nav--translucent{background:rgba(var(--ion-background-color-rgb, 255, 255, 255),.75);backdrop-filter:blur(20px) saturate(180%);-webkit-backdrop-filter:blur(20px) saturate(180%);border-top:1px solid rgba(var(--ion-text-color-rgb, 0, 0, 0),.06)}.bottom-nav--floating{margin:0 auto 8px;width:calc(100% - 32px);border-radius:32px;border:1px solid rgba(var(--ion-text-color-rgb, 0, 0, 0),.08);box-shadow:0 4px 24px #00000014,0 8px 32px #0000000a;--bottom-nav-radius: 32px}.bottom-nav--floating.bottom-nav--translucent{background:rgba(var(--ion-background-color-rgb, 255, 255, 255),.82);backdrop-filter:blur(28px) saturate(200%);-webkit-backdrop-filter:blur(28px) saturate(200%);border:1px solid rgba(var(--ion-text-color-rgb, 0, 0, 0),.08)}.bottom-nav--floating.bottom-nav--elevated{box-shadow:0 4px 24px #0000001a,0 12px 48px #00000014}.bottom-nav--floating.bottom-nav--safe-area{margin-bottom:calc(8px + env(safe-area-inset-bottom,0))}.bottom-nav--safe-area{padding-bottom:env(safe-area-inset-bottom,0);height:calc(var(--bottom-nav-height) + env(safe-area-inset-bottom,0))}.bottom-nav__container{display:flex;align-items:center;justify-content:space-around;height:var(--bottom-nav-height);max-width:500px;margin:0 auto}.bottom-nav__tab{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;height:100%;padding:8px 4px;background:transparent;border:none;cursor:pointer;position:relative;overflow:hidden;color:var(--bottom-nav-inactive);transition:color .2s ease;max-width:80px;--ripple-color: var(--bottom-nav-active)}.bottom-nav__tab:focus-visible{outline:2px solid var(--bottom-nav-active);outline-offset:-2px;border-radius:8px}.bottom-nav__tab--active{color:var(--bottom-nav-active)}.bottom-nav__tab--disabled{opacity:.4;cursor:not-allowed;pointer-events:none}.bottom-nav__tab[data-animation=scale] .bottom-nav__tab-icon{transition:transform .2s cubic-bezier(.4,0,.2,1)}.bottom-nav__tab[data-animation=scale].bottom-nav__tab--active .bottom-nav__tab-icon{transform:scale(1.15)}.bottom-nav__tab[data-animation=fade]{transition:opacity .2s ease,color .2s ease}.bottom-nav__tab[data-animation=fade]:not(.bottom-nav__tab--active){opacity:.6}.bottom-nav__tab[data-animation=slide] .bottom-nav__tab-label{transition:transform .2s ease,opacity .2s ease;transform:translateY(6px);opacity:0}.bottom-nav__tab[data-animation=slide].bottom-nav__tab--active .bottom-nav__tab-label{transform:translateY(0);opacity:1}.bottom-nav__tab-icon{position:relative;font-size:24px;line-height:1}.bottom-nav__tab-icon ion-icon{display:block}.bottom-nav__tab-label{font-size:11px;font-weight:500;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;letter-spacing:.01em}.bottom-nav__badge{position:absolute;top:-4px;right:-10px;min-width:18px;height:18px;padding:0 5px;font-size:10px;font-weight:600;line-height:18px;text-align:center;color:#fff;background-color:var(--ion-color-danger);border-radius:9px;box-shadow:0 1px 3px #0003}.bottom-nav__badge--dot{min-width:10px;width:10px;height:10px;padding:0;top:-2px;right:-4px;border-radius:50%}.bottom-nav__fab{position:relative;flex-shrink:0;width:var(--bottom-nav-fab-size);height:var(--bottom-nav-fab-size);margin:0 12px;margin-top:calc(var(--bottom-nav-fab-size) * -.35);background:var(--fab-color);border:none;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;color:#fff;font-size:28px;box-shadow:0 4px 14px rgba(var(--ion-color-primary-rgb, 56, 128, 255),.4);transition:transform .2s cubic-bezier(.4,0,.2,1),box-shadow .2s ease;overflow:hidden;--ripple-color: rgba(255, 255, 255, .3)}.bottom-nav__fab:hover{transform:scale(1.08);box-shadow:0 6px 20px rgba(var(--ion-color-primary-rgb, 56, 128, 255),.5)}.bottom-nav__fab:active{transform:scale(.95)}.bottom-nav__fab:focus-visible{outline:3px solid white;outline-offset:2px}.bottom-nav__fab--small{--bottom-nav-fab-size: 48px;font-size:24px;margin-top:-14.4px}.bottom-nav__fab ion-icon{display:block}.bottom-nav--hide-labels{--bottom-nav-height: 56px}.bottom-nav--hide-labels .bottom-nav__tab-label{display:none}.bottom-nav--hide-labels .bottom-nav__tab-icon{font-size:26px}:host-context(.dark) .bottom-nav--translucent,:host-context(.ion-palette-dark) .bottom-nav--translucent,:host-context(html.ion-palette-dark) .bottom-nav--translucent,:host-context(body.dark) .bottom-nav--translucent,:host-context([data-theme=dark]) .bottom-nav--translucent{background:rgba(var(--ion-background-color-rgb, 18, 18, 18),.85);border-top-color:#ffffff14}:host-context(.dark) .bottom-nav--elevated,:host-context(.ion-palette-dark) .bottom-nav--elevated,:host-context(html.ion-palette-dark) .bottom-nav--elevated,:host-context(body.dark) .bottom-nav--elevated,:host-context([data-theme=dark]) .bottom-nav--elevated{box-shadow:0 -4px 20px #0000004d}:host-context(.dark) .bottom-nav--floating,:host-context(.ion-palette-dark) .bottom-nav--floating,:host-context(html.ion-palette-dark) .bottom-nav--floating,:host-context(body.dark) .bottom-nav--floating,:host-context([data-theme=dark]) .bottom-nav--floating{border-color:#ffffff1a;box-shadow:0 4px 24px #0003,0 8px 32px #00000026}:host-context(.dark) .bottom-nav--floating.bottom-nav--translucent,:host-context(.ion-palette-dark) .bottom-nav--floating.bottom-nav--translucent,:host-context(html.ion-palette-dark) .bottom-nav--floating.bottom-nav--translucent,:host-context(body.dark) .bottom-nav--floating.bottom-nav--translucent,:host-context([data-theme=dark]) .bottom-nav--floating.bottom-nav--translucent{background:rgba(var(--ion-background-color-rgb, 18, 18, 18),.88);border-color:#ffffff1a}:host-context(.dark) .bottom-nav__fab,:host-context(.ion-palette-dark) .bottom-nav__fab,:host-context(html.ion-palette-dark) .bottom-nav__fab,:host-context(body.dark) .bottom-nav__fab,:host-context([data-theme=dark]) .bottom-nav__fab{box-shadow:0 4px 14px #00000080}:host-context(.dark) .bottom-nav__fab:hover,:host-context(.ion-palette-dark) .bottom-nav__fab:hover,:host-context(html.ion-palette-dark) .bottom-nav__fab:hover,:host-context(body.dark) .bottom-nav__fab:hover,:host-context([data-theme=dark]) .bottom-nav__fab:hover{box-shadow:0 6px 20px #0009}@supports (padding-bottom: env(safe-area-inset-bottom)){.bottom-nav--safe-area .bottom-nav__container{height:var(--bottom-nav-height)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonRippleEffect, selector: "ion-ripple-effect", inputs: ["type"] }] }); }
|
|
32976
32983
|
}
|
|
32977
32984
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BottomNavComponent, decorators: [{
|
|
32978
32985
|
type: Component,
|
|
@@ -33046,7 +33053,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
33046
33053
|
}
|
|
33047
33054
|
</div>
|
|
33048
33055
|
</nav>
|
|
33049
|
-
`, styles: [":host{display:block;position:fixed;bottom:0;left:0;right:0;z-index:100;pointer-events:none}.bottom-nav{--bottom-nav-bg: var(--ion-background-color);--bottom-nav-active: var(--ion-color-primary);--bottom-nav-inactive: var(--ion-color-medium);--bottom-nav-radius: 16px 16px 0 0;--bottom-nav-height: 64px;--bottom-nav-fab-size: 56px;--bottom-nav-max-width: var(--val-container-md, 720px);--fab-color: var(--ion-color-primary);pointer-events:auto;background:var(--bottom-nav-bg);border-radius:var(--bottom-nav-radius);height:var(--bottom-nav-height);padding:0 8px;max-width:var(--bottom-nav-max-width);margin:0 auto}.bottom-nav--elevated{box-shadow:0 -4px 20px #00000014}.bottom-nav--translucent{background:rgba(var(--ion-background-color-rgb, 255, 255, 255),.75);backdrop-filter:blur(20px) saturate(180%);-webkit-backdrop-filter:blur(20px) saturate(180%);border-top:1px solid rgba(var(--ion-text-color-rgb, 0, 0, 0),.06)}.bottom-nav--floating{margin:0 auto 8px;width:calc(100% - 32px);border-radius:32px;border:1px solid rgba(var(--ion-text-color-rgb, 0, 0, 0),.08);box-shadow:0 4px 24px #00000014,0 8px 32px #0000000a;--bottom-nav-radius: 32px}.bottom-nav--floating.bottom-nav--translucent{background:rgba(var(--ion-background-color-rgb, 255, 255, 255),.82);backdrop-filter:blur(28px) saturate(200%);-webkit-backdrop-filter:blur(28px) saturate(200%);border:1px solid rgba(var(--ion-text-color-rgb, 0, 0, 0),.08)}.bottom-nav--floating.bottom-nav--elevated{box-shadow:0 4px 24px #0000001a,0 12px 48px #00000014}.bottom-nav--floating.bottom-nav--safe-area{margin-bottom:calc(8px + env(safe-area-inset-bottom,0))}.bottom-nav--safe-area{padding-bottom:env(safe-area-inset-bottom,0);height:calc(var(--bottom-nav-height) + env(safe-area-inset-bottom,0))}.bottom-nav__container{display:flex;align-items:center;justify-content:space-around;height:var(--bottom-nav-height);max-width:500px;margin:0 auto}.bottom-nav__tab{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;height:100%;padding:8px 4px;background:transparent;border:none;cursor:pointer;position:relative;overflow:hidden;color:var(--bottom-nav-inactive);transition:color .2s ease;max-width:80px;--ripple-color: var(--bottom-nav-active)}.bottom-nav__tab:focus-visible{outline:2px solid var(--bottom-nav-active);outline-offset:-2px;border-radius:8px}.bottom-nav__tab--active{color:var(--bottom-nav-active)}.bottom-nav__tab--disabled{opacity:.4;cursor:not-allowed;pointer-events:none}.bottom-nav__tab[data-animation=scale] .bottom-nav__tab-icon{transition:transform .2s cubic-bezier(.4,0,.2,1)}.bottom-nav__tab[data-animation=scale].bottom-nav__tab--active .bottom-nav__tab-icon{transform:scale(1.15)}.bottom-nav__tab[data-animation=fade]{transition:opacity .2s ease,color .2s ease}.bottom-nav__tab[data-animation=fade]:not(.bottom-nav__tab--active){opacity:.6}.bottom-nav__tab[data-animation=slide] .bottom-nav__tab-label{transition:transform .2s ease,opacity .2s ease;transform:translateY(6px);opacity:0}.bottom-nav__tab[data-animation=slide].bottom-nav__tab--active .bottom-nav__tab-label{transform:translateY(0);opacity:1}.bottom-nav__tab-icon{position:relative;font-size:24px;line-height:1}.bottom-nav__tab-icon ion-icon{display:block}.bottom-nav__tab-label{font-size:11px;font-weight:500;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;letter-spacing:.01em}.bottom-nav__badge{position:absolute;top:-4px;right:-10px;min-width:18px;height:18px;padding:0 5px;font-size:10px;font-weight:600;line-height:18px;text-align:center;color:#fff;background-color:var(--ion-color-danger);border-radius:9px;box-shadow:0 1px 3px #0003}.bottom-nav__badge--dot{min-width:10px;width:10px;height:10px;padding:0;top:-2px;right:-4px;border-radius:50%}.bottom-nav__fab{position:relative;flex-shrink:0;width:var(--bottom-nav-fab-size);height:var(--bottom-nav-fab-size);margin:0 12px;margin-top:calc(var(--bottom-nav-fab-size) * -.35);background:var(--fab-color);border:none;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;color:#fff;font-size:28px;box-shadow:0 4px 14px rgba(var(--ion-color-primary-rgb, 56, 128, 255),.4);transition:transform .2s cubic-bezier(.4,0,.2,1),box-shadow .2s ease;overflow:hidden;--ripple-color: rgba(255, 255, 255, .3)}.bottom-nav__fab:hover{transform:scale(1.08);box-shadow:0 6px 20px rgba(var(--ion-color-primary-rgb, 56, 128, 255),.5)}.bottom-nav__fab:active{transform:scale(.95)}.bottom-nav__fab:focus-visible{outline:3px solid white;outline-offset:2px}.bottom-nav__fab--small{--bottom-nav-fab-size: 48px;font-size:24px;margin-top:-14.4px}.bottom-nav__fab ion-icon{display:block}.bottom-nav--hide-labels{--bottom-nav-height: 56px}.bottom-nav--hide-labels .bottom-nav__tab-label{display:none}.bottom-nav--hide-labels .bottom-nav__tab-icon{font-size:26px}
|
|
33056
|
+
`, styles: [":host{display:block;position:fixed;bottom:0;left:0;right:0;z-index:100;pointer-events:none}.bottom-nav{--bottom-nav-bg: var(--ion-background-color);--bottom-nav-active: var(--ion-color-primary);--bottom-nav-inactive: var(--ion-color-medium);--bottom-nav-radius: 16px 16px 0 0;--bottom-nav-height: 64px;--bottom-nav-fab-size: 56px;--bottom-nav-max-width: var(--val-container-md, 720px);--fab-color: var(--ion-color-primary);pointer-events:auto;background:var(--bottom-nav-bg);border-radius:var(--bottom-nav-radius);height:var(--bottom-nav-height);padding:0 8px;max-width:var(--bottom-nav-max-width);margin:0 auto}.bottom-nav--elevated{box-shadow:0 -4px 20px #00000014}.bottom-nav--translucent{background:rgba(var(--ion-background-color-rgb, 255, 255, 255),.75);backdrop-filter:blur(20px) saturate(180%);-webkit-backdrop-filter:blur(20px) saturate(180%);border-top:1px solid rgba(var(--ion-text-color-rgb, 0, 0, 0),.06)}.bottom-nav--floating{margin:0 auto 8px;width:calc(100% - 32px);border-radius:32px;border:1px solid rgba(var(--ion-text-color-rgb, 0, 0, 0),.08);box-shadow:0 4px 24px #00000014,0 8px 32px #0000000a;--bottom-nav-radius: 32px}.bottom-nav--floating.bottom-nav--translucent{background:rgba(var(--ion-background-color-rgb, 255, 255, 255),.82);backdrop-filter:blur(28px) saturate(200%);-webkit-backdrop-filter:blur(28px) saturate(200%);border:1px solid rgba(var(--ion-text-color-rgb, 0, 0, 0),.08)}.bottom-nav--floating.bottom-nav--elevated{box-shadow:0 4px 24px #0000001a,0 12px 48px #00000014}.bottom-nav--floating.bottom-nav--safe-area{margin-bottom:calc(8px + env(safe-area-inset-bottom,0))}.bottom-nav--safe-area{padding-bottom:env(safe-area-inset-bottom,0);height:calc(var(--bottom-nav-height) + env(safe-area-inset-bottom,0))}.bottom-nav__container{display:flex;align-items:center;justify-content:space-around;height:var(--bottom-nav-height);max-width:500px;margin:0 auto}.bottom-nav__tab{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;height:100%;padding:8px 4px;background:transparent;border:none;cursor:pointer;position:relative;overflow:hidden;color:var(--bottom-nav-inactive);transition:color .2s ease;max-width:80px;--ripple-color: var(--bottom-nav-active)}.bottom-nav__tab:focus-visible{outline:2px solid var(--bottom-nav-active);outline-offset:-2px;border-radius:8px}.bottom-nav__tab--active{color:var(--bottom-nav-active)}.bottom-nav__tab--disabled{opacity:.4;cursor:not-allowed;pointer-events:none}.bottom-nav__tab[data-animation=scale] .bottom-nav__tab-icon{transition:transform .2s cubic-bezier(.4,0,.2,1)}.bottom-nav__tab[data-animation=scale].bottom-nav__tab--active .bottom-nav__tab-icon{transform:scale(1.15)}.bottom-nav__tab[data-animation=fade]{transition:opacity .2s ease,color .2s ease}.bottom-nav__tab[data-animation=fade]:not(.bottom-nav__tab--active){opacity:.6}.bottom-nav__tab[data-animation=slide] .bottom-nav__tab-label{transition:transform .2s ease,opacity .2s ease;transform:translateY(6px);opacity:0}.bottom-nav__tab[data-animation=slide].bottom-nav__tab--active .bottom-nav__tab-label{transform:translateY(0);opacity:1}.bottom-nav__tab-icon{position:relative;font-size:24px;line-height:1}.bottom-nav__tab-icon ion-icon{display:block}.bottom-nav__tab-label{font-size:11px;font-weight:500;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;letter-spacing:.01em}.bottom-nav__badge{position:absolute;top:-4px;right:-10px;min-width:18px;height:18px;padding:0 5px;font-size:10px;font-weight:600;line-height:18px;text-align:center;color:#fff;background-color:var(--ion-color-danger);border-radius:9px;box-shadow:0 1px 3px #0003}.bottom-nav__badge--dot{min-width:10px;width:10px;height:10px;padding:0;top:-2px;right:-4px;border-radius:50%}.bottom-nav__fab{position:relative;flex-shrink:0;width:var(--bottom-nav-fab-size);height:var(--bottom-nav-fab-size);margin:0 12px;margin-top:calc(var(--bottom-nav-fab-size) * -.35);background:var(--fab-color);border:none;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;color:#fff;font-size:28px;box-shadow:0 4px 14px rgba(var(--ion-color-primary-rgb, 56, 128, 255),.4);transition:transform .2s cubic-bezier(.4,0,.2,1),box-shadow .2s ease;overflow:hidden;--ripple-color: rgba(255, 255, 255, .3)}.bottom-nav__fab:hover{transform:scale(1.08);box-shadow:0 6px 20px rgba(var(--ion-color-primary-rgb, 56, 128, 255),.5)}.bottom-nav__fab:active{transform:scale(.95)}.bottom-nav__fab:focus-visible{outline:3px solid white;outline-offset:2px}.bottom-nav__fab--small{--bottom-nav-fab-size: 48px;font-size:24px;margin-top:-14.4px}.bottom-nav__fab ion-icon{display:block}.bottom-nav--hide-labels{--bottom-nav-height: 56px}.bottom-nav--hide-labels .bottom-nav__tab-label{display:none}.bottom-nav--hide-labels .bottom-nav__tab-icon{font-size:26px}:host-context(.dark) .bottom-nav--translucent,:host-context(.ion-palette-dark) .bottom-nav--translucent,:host-context(html.ion-palette-dark) .bottom-nav--translucent,:host-context(body.dark) .bottom-nav--translucent,:host-context([data-theme=dark]) .bottom-nav--translucent{background:rgba(var(--ion-background-color-rgb, 18, 18, 18),.85);border-top-color:#ffffff14}:host-context(.dark) .bottom-nav--elevated,:host-context(.ion-palette-dark) .bottom-nav--elevated,:host-context(html.ion-palette-dark) .bottom-nav--elevated,:host-context(body.dark) .bottom-nav--elevated,:host-context([data-theme=dark]) .bottom-nav--elevated{box-shadow:0 -4px 20px #0000004d}:host-context(.dark) .bottom-nav--floating,:host-context(.ion-palette-dark) .bottom-nav--floating,:host-context(html.ion-palette-dark) .bottom-nav--floating,:host-context(body.dark) .bottom-nav--floating,:host-context([data-theme=dark]) .bottom-nav--floating{border-color:#ffffff1a;box-shadow:0 4px 24px #0003,0 8px 32px #00000026}:host-context(.dark) .bottom-nav--floating.bottom-nav--translucent,:host-context(.ion-palette-dark) .bottom-nav--floating.bottom-nav--translucent,:host-context(html.ion-palette-dark) .bottom-nav--floating.bottom-nav--translucent,:host-context(body.dark) .bottom-nav--floating.bottom-nav--translucent,:host-context([data-theme=dark]) .bottom-nav--floating.bottom-nav--translucent{background:rgba(var(--ion-background-color-rgb, 18, 18, 18),.88);border-color:#ffffff1a}:host-context(.dark) .bottom-nav__fab,:host-context(.ion-palette-dark) .bottom-nav__fab,:host-context(html.ion-palette-dark) .bottom-nav__fab,:host-context(body.dark) .bottom-nav__fab,:host-context([data-theme=dark]) .bottom-nav__fab{box-shadow:0 4px 14px #00000080}:host-context(.dark) .bottom-nav__fab:hover,:host-context(.ion-palette-dark) .bottom-nav__fab:hover,:host-context(html.ion-palette-dark) .bottom-nav__fab:hover,:host-context(body.dark) .bottom-nav__fab:hover,:host-context([data-theme=dark]) .bottom-nav__fab:hover{box-shadow:0 6px 20px #0009}@supports (padding-bottom: env(safe-area-inset-bottom)){.bottom-nav--safe-area .bottom-nav__container{height:var(--bottom-nav-height)}}\n"] }]
|
|
33050
33057
|
}], propDecorators: { tabClick: [{
|
|
33051
33058
|
type: Output
|
|
33052
33059
|
}], fabClick: [{
|