valtech-components 4.0.43 → 4.0.45

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.
Files changed (30) hide show
  1. package/esm2022/lib/components/organisms/account-view/account-view.component.mjs +3 -3
  2. package/esm2022/lib/components/organisms/auth-cta/auth-cta.component.mjs +23 -7
  3. package/esm2022/lib/components/organisms/auth-cta/types.mjs +1 -1
  4. package/esm2022/lib/components/organisms/change-email-modal/change-email-modal.component.mjs +3 -3
  5. package/esm2022/lib/components/organisms/change-password-modal/change-password-modal.component.mjs +3 -3
  6. package/esm2022/lib/components/organisms/delete-account-modal/delete-account-modal.component.mjs +3 -3
  7. package/esm2022/lib/components/organisms/organization-view/organization-view.component.mjs +3 -3
  8. package/esm2022/lib/components/organisms/switch-org-modal/switch-org-modal.component.mjs +30 -6
  9. package/esm2022/lib/components/organisms/switch-org-modal/switch-org-modal.i18n.mjs +3 -1
  10. package/esm2022/lib/services/auth/auth.service.mjs +26 -28
  11. package/esm2022/lib/services/auth/oauth-callback.component.mjs +17 -63
  12. package/esm2022/lib/services/auth/oauth.service.mjs +10 -14
  13. package/esm2022/lib/services/auth/storage.service.mjs +7 -11
  14. package/esm2022/lib/services/firebase/config.mjs +5 -5
  15. package/esm2022/lib/services/theme.service.mjs +1 -3
  16. package/esm2022/lib/version.mjs +2 -2
  17. package/esm2022/public-api.mjs +1 -2
  18. package/fesm2022/valtech-components.mjs +122 -177
  19. package/fesm2022/valtech-components.mjs.map +1 -1
  20. package/lib/components/organisms/auth-cta/types.d.ts +5 -1
  21. package/lib/components/organisms/switch-org-modal/switch-org-modal.component.d.ts +4 -1
  22. package/lib/services/auth/oauth-callback.component.d.ts +1 -21
  23. package/lib/services/auth/oauth.service.d.ts +7 -6
  24. package/lib/services/auth/storage.service.d.ts +1 -1
  25. package/lib/version.d.ts +1 -1
  26. package/package.json +1 -1
  27. package/public-api.d.ts +0 -1
  28. package/src/lib/services/firebase/firebase-messaging-sw.js +145 -0
  29. package/esm2022/lib/components/atoms/splash/splash.component.mjs +0 -45
  30. package/lib/components/atoms/splash/splash.component.d.ts +0 -23
@@ -1,10 +1,6 @@
1
- import { Component, Inject, Optional } from '@angular/core';
1
+ import { Component } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
- import { VALTECH_AUTH_CONFIG } from './config';
4
- import { SplashComponent } from '../../components/atoms/splash/splash.component';
5
3
  import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/router";
7
- import * as i2 from "./auth.service";
8
4
  /**
9
5
  * Componente de callback para OAuth.
10
6
  *
@@ -29,10 +25,7 @@ import * as i2 from "./auth.service";
29
25
  * `/auth/oauth/callback?error=INVALID_CODE&error_description=...`
30
26
  */
31
27
  export class OAuthCallbackComponent {
32
- constructor(router, authService, config) {
33
- this.router = router;
34
- this.authService = authService;
35
- this.config = config;
28
+ constructor() {
36
29
  this.message = 'Procesando autenticación...';
37
30
  /**
38
31
  * Nonce que el opener generó y pasó por el flujo (round-trip backend). Se
@@ -44,36 +37,6 @@ export class OAuthCallbackComponent {
44
37
  ngOnInit() {
45
38
  this.processCallback();
46
39
  }
47
- /**
48
- * Indica si este callback corre como la VENTANA PRINCIPAL (flujo redirect),
49
- * no como popup. El popup se abre con window.name 'oauth'/'oauth-link'
50
- * (OAuthService), nombre que persiste aunque COOP anule window.opener tras el
51
- * bounce cross-origin. En la ventana principal nadie consume el localStorage,
52
- * así que el callback debe instalar la sesión y navegar él mismo.
53
- */
54
- isMainWindow() {
55
- if (window.name === 'oauth' || window.name === 'oauth-link')
56
- return false;
57
- return !window.opener && window.parent === window;
58
- }
59
- /**
60
- * Completa el login en la ventana principal: instala la sesión desde los
61
- * tokens del callback y navega al home.
62
- */
63
- completeInMainWindow(result) {
64
- if (!this.authService)
65
- return false;
66
- this.authService.setExternalAuth({
67
- accessToken: result.accessToken,
68
- refreshToken: result.refreshToken,
69
- firebaseToken: result.firebaseToken,
70
- expiresIn: result.expiresIn,
71
- roles: result.roles,
72
- permissions: result.permissions,
73
- });
74
- this.router.navigateByUrl(this.config?.homeRoute || '/', { replaceUrl: true });
75
- return true;
76
- }
77
40
  processCallback() {
78
41
  const params = new URLSearchParams(window.location.search);
79
42
  this.clientNonce = params.get('client_nonce');
@@ -171,11 +134,6 @@ export class OAuthCallbackComponent {
171
134
  type: 'oauth-callback',
172
135
  tokens: result,
173
136
  });
174
- // Flujo redirect (ventana principal, sin opener que consuma el localStorage):
175
- // instalar la sesión acá mismo y navegar al home, en vez de quedar pegado.
176
- if (this.isMainWindow() && this.completeInMainWindow(result)) {
177
- return;
178
- }
179
137
  this.message = 'Autenticación exitosa';
180
138
  this.closeAfterDelay();
181
139
  }
@@ -221,25 +179,21 @@ export class OAuthCallbackComponent {
221
179
  }
222
180
  }, 500);
223
181
  }
224
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: OAuthCallbackComponent, deps: [{ token: i1.Router }, { token: i2.AuthService, optional: true }, { token: VALTECH_AUTH_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
225
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: OAuthCallbackComponent, isStandalone: true, selector: "val-oauth-callback", ngImport: i0, template: `<val-splash />`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: SplashComponent, selector: "val-splash", inputs: ["logoLight", "logoDark", "alt"] }] }); }
182
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: OAuthCallbackComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
183
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: OAuthCallbackComponent, isStandalone: true, selector: "val-oauth-callback", ngImport: i0, template: `
184
+ <div class="oauth-callback">
185
+ <div class="oauth-callback__spinner"></div>
186
+ <p class="oauth-callback__text">{{ message }}</p>
187
+ </div>
188
+ `, isInline: true, styles: [".oauth-callback{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100vh;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.oauth-callback__spinner{width:40px;height:40px;border:3px solid #f3f3f3;border-top:3px solid #3498db;border-radius:50%;animation:spin 1s linear infinite;margin-bottom:16px}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.oauth-callback__text{color:#666;font-size:14px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
226
189
  }
227
190
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: OAuthCallbackComponent, decorators: [{
228
191
  type: Component,
229
- args: [{
230
- selector: 'val-oauth-callback',
231
- standalone: true,
232
- imports: [CommonModule, SplashComponent],
233
- // Mismo splash de arranque de la app (logo + pulse) en vez de un loader propio
234
- // casi-duplicado: el callback OAuth es una carga fundamental y debe verse igual.
235
- template: `<val-splash />`,
236
- }]
237
- }], ctorParameters: () => [{ type: i1.Router }, { type: i2.AuthService, decorators: [{
238
- type: Optional
239
- }] }, { type: undefined, decorators: [{
240
- type: Optional
241
- }, {
242
- type: Inject,
243
- args: [VALTECH_AUTH_CONFIG]
244
- }] }] });
245
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgtY2FsbGJhY2suY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9hdXRoL29hdXRoLWNhbGxiYWNrLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBVSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUUvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0RBQWdELENBQUM7Ozs7QUFFakY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFTSCxNQUFNLE9BQU8sc0JBQXNCO0lBVWpDLFlBQ1UsTUFBYyxFQUNGLFdBQStCLEVBQ0YsTUFBZ0M7UUFGekUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNGLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUNGLFdBQU0sR0FBTixNQUFNLENBQTBCO1FBWm5GLFlBQU8sR0FBRyw2QkFBNkIsQ0FBQztRQUV4Qzs7OztXQUlHO1FBQ0ssZ0JBQVcsR0FBa0IsSUFBSSxDQUFDO0lBTXZDLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSyxZQUFZO1FBQ2xCLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxZQUFZO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDMUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUM7SUFDcEQsQ0FBQztJQUVEOzs7T0FHRztJQUNLLG9CQUFvQixDQUFDLE1BQW1CO1FBQzlDLElBQUks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QUFDO0lBQ0gsQ0FBQztJQUVPLGVBQWU7UUFDckIsMERBQTBEO1FBQzFELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDbEIsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2pCLENBQUM7UUFDSCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDOytHQS9NVSxzQkFBc0IsbUZBYVgsbUJBQW1CO21HQWI5QixzQkFBc0IsOEVBRnZCLGdCQUFnQiwyREFIaEIsWUFBWSwrQkFBRSxlQUFlOzs0RkFLNUIsc0JBQXNCO2tCQVJsQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsZUFBZSxDQUFDO29CQUN4QywrRUFBK0U7b0JBQy9FLGlGQUFpRjtvQkFDakYsUUFBUSxFQUFFLGdCQUFnQjtpQkFDM0I7OzBCQWFJLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIE9uSW5pdCwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgTUZBTWV0aG9kLCBPQXV0aENhbGxiYWNrRGF0YSwgT0F1dGhSZXN1bHQsIE9BdXRoRXJyb3IsIFZhbHRlY2hBdXRoQ29uZmlnIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBWQUxURUNIX0FVVEhfQ09ORklHIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBTcGxhc2hDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2F0b21zL3NwbGFzaC9zcGxhc2guY29tcG9uZW50JztcblxuLyoqXG4gKiBDb21wb25lbnRlIGRlIGNhbGxiYWNrIHBhcmEgT0F1dGguXG4gKlxuICogRXN0ZSBjb21wb25lbnRlIHByb2Nlc2EgbGEgcmVzcHVlc3RhIGRlbCBzZXJ2aWRvciBPQXV0aCB5IGVudsOtYVxuICogbG9zIHRva2VucyBhIGxhIHZlbnRhbmEgcGFkcmUgdmlhIHBvc3RNZXNzYWdlLlxuICpcbiAqIERlYmUgYWdyZWdhcnNlIGEgbGFzIHJ1dGFzIGRlIGxhIGFwbGljYWNpw7NuOlxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gYXBwLnJvdXRlcy50c1xuICogaW1wb3J0IHsgT0F1dGhDYWxsYmFja0NvbXBvbmVudCB9IGZyb20gJ3ZhbHRlY2gtY29tcG9uZW50cyc7XG4gKlxuICogZXhwb3J0IGNvbnN0IHJvdXRlczogUm91dGVzID0gW1xuICogICB7IHBhdGg6ICdhdXRoL29hdXRoL2NhbGxiYWNrJywgY29tcG9uZW50OiBPQXV0aENhbGxiYWNrQ29tcG9uZW50IH0sXG4gKiAgIC8vIC4uLiBvdHJhcyBydXRhc1xuICogXTtcbiAqIGBgYFxuICpcbiAqIEVsIGJhY2tlbmQgcmVkaXJpZ2UgYSBlc3RhIHJ1dGEgY29uIGxvcyB0b2tlbnMgZW4gcXVlcnkgcGFyYW1zOlxuICogYC9hdXRoL29hdXRoL2NhbGxiYWNrP2FjY2Vzc190b2tlbj14eHgmcmVmcmVzaF90b2tlbj14eHgmZXhwaXJlc19pbj05MDBgXG4gKlxuICogTyBjb24gZXJyb3I6XG4gKiBgL2F1dGgvb2F1dGgvY2FsbGJhY2s/ZXJyb3I9SU5WQUxJRF9DT0RFJmVycm9yX2Rlc2NyaXB0aW9uPS4uLmBcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLW9hdXRoLWNhbGxiYWNrJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgU3BsYXNoQ29tcG9uZW50XSxcbiAgLy8gTWlzbW8gc3BsYXNoIGRlIGFycmFucXVlIGRlIGxhIGFwcCAobG9nbyArIHB1bHNlKSBlbiB2ZXogZGUgdW4gbG9hZGVyIHByb3Bpb1xuICAvLyBjYXNpLWR1cGxpY2FkbzogZWwgY2FsbGJhY2sgT0F1dGggZXMgdW5hIGNhcmdhIGZ1bmRhbWVudGFsIHkgZGViZSB2ZXJzZSBpZ3VhbC5cbiAgdGVtcGxhdGU6IGA8dmFsLXNwbGFzaCAvPmAsXG59KVxuZXhwb3J0IGNsYXNzIE9BdXRoQ2FsbGJhY2tDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBtZXNzYWdlID0gJ1Byb2Nlc2FuZG8gYXV0ZW50aWNhY2nDs24uLi4nO1xuXG4gIC8qKlxuICAgKiBOb25jZSBxdWUgZWwgb3BlbmVyIGdlbmVyw7MgeSBwYXPDsyBwb3IgZWwgZmx1am8gKHJvdW5kLXRyaXAgYmFja2VuZCkuIFNlXG4gICAqIHJlZW52w61hIGFsIG9wZW5lciBlbiBjYWRhIG1lbnNhamUgcGFyYSBxdWUgdmVyaWZpcXVlIGVsIG9yaWdlbiBkZWwgY2FsbGJhY2tcbiAgICogeSByZWNoYWNlIHVuIG9hdXRoX2NhbGxiYWNrX2RhdGEgZm9yamFkbyBlbiBsb2NhbFN0b3JhZ2UgcG9yIFhTUyAoTS0wNykuXG4gICAqL1xuICBwcml2YXRlIGNsaWVudE5vbmNlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlIHwgbnVsbCxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFZBTFRFQ0hfQVVUSF9DT05GSUcpIHByaXZhdGUgY29uZmlnOiBWYWx0ZWNoQXV0aENvbmZpZyB8IG51bGxcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMucHJvY2Vzc0NhbGxiYWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhIHNpIGVzdGUgY2FsbGJhY2sgY29ycmUgY29tbyBsYSBWRU5UQU5BIFBSSU5DSVBBTCAoZmx1am8gcmVkaXJlY3QpLFxuICAgKiBubyBjb21vIHBvcHVwLiBFbCBwb3B1cCBzZSBhYnJlIGNvbiB3aW5kb3cubmFtZSAnb2F1dGgnLydvYXV0aC1saW5rJ1xuICAgKiAoT0F1dGhTZXJ2aWNlKSwgbm9tYnJlIHF1ZSBwZXJzaXN0ZSBhdW5xdWUgQ09PUCBhbnVsZSB3aW5kb3cub3BlbmVyIHRyYXMgZWxcbiAgICogYm91bmNlIGNyb3NzLW9yaWdpbi4gRW4gbGEgdmVudGFuYSBwcmluY2lwYWwgbmFkaWUgY29uc3VtZSBlbCBsb2NhbFN0b3JhZ2UsXG4gICAqIGFzw60gcXVlIGVsIGNhbGxiYWNrIGRlYmUgaW5zdGFsYXIgbGEgc2VzacOzbiB5IG5hdmVnYXIgw6lsIG1pc21vLlxuICAgKi9cbiAgcHJpdmF0ZSBpc01haW5XaW5kb3coKTogYm9vbGVhbiB7XG4gICAgaWYgKHdpbmRvdy5uYW1lID09PSAnb2F1dGgnIHx8IHdpbmRvdy5uYW1lID09PSAnb2F1dGgtbGluaycpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gIXdpbmRvdy5vcGVuZXIgJiYgd2luZG93LnBhcmVudCA9PT0gd2luZG93O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBsZXRhIGVsIGxvZ2luIGVuIGxhIHZlbnRhbmEgcHJpbmNpcGFsOiBpbnN0YWxhIGxhIHNlc2nDs24gZGVzZGUgbG9zXG4gICAqIHRva2VucyBkZWwgY2FsbGJhY2sgeSBuYXZlZ2EgYWwgaG9tZS5cbiAgICovXG4gIHByaXZhdGUgY29tcGxldGVJbk1haW5XaW5kb3cocmVzdWx0OiBPQXV0aFJlc3VsdCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5hdXRoU2VydmljZSkgcmV0dXJuIGZhbHNlO1xuICAgIHRoaXMuYXV0aFNlcnZpY2Uuc2V0RXh0ZXJuYWxBdXRoKHtcbiAgICAgIGFjY2Vzc1Rva2VuOiByZXN1bHQuYWNjZXNzVG9rZW4sXG4gICAgICByZWZyZXNoVG9rZW46IHJlc3VsdC5yZWZyZXNoVG9rZW4sXG4gICAgICBmaXJlYmFzZVRva2VuOiByZXN1bHQuZmlyZWJhc2VUb2tlbixcbiAgICAgIGV4cGlyZXNJbjogcmVzdWx0LmV4cGlyZXNJbixcbiAgICAgIHJvbGVzOiByZXN1bHQucm9sZXMsXG4gICAgICBwZXJtaXNzaW9uczogcmVzdWx0LnBlcm1pc3Npb25zLFxuICAgIH0pO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy5jb25maWc/LmhvbWVSb3V0ZSB8fCAnLycsIHsgcmVwbGFjZVVybDogdHJ1ZSB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0NhbGxiYWNrKCk6IHZvaWQge1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgdGhpcy5jbGllbnROb25jZSA9IHBhcmFtcy5nZXQoJ2NsaWVudF9ub25jZScpO1xuXG4gICAgLy8gREVCVUc6IExvZyBhbGwgcmVjZWl2ZWQgcGFyYW1zXG4gICAgY29uc29sZS5sb2coJ1tPQXV0aENhbGxiYWNrXSBVUkwgcGFyYW1zIHJlY2VpdmVkOicsIHtcbiAgICAgIHVybDogd2luZG93LmxvY2F0aW9uLmhyZWYsXG4gICAgICBoYXNBY2Nlc3NUb2tlbjogcGFyYW1zLmhhcygnYWNjZXNzX3Rva2VuJyksXG4gICAgICBoYXNSZWZyZXNoVG9rZW46IHBhcmFtcy5oYXMoJ3JlZnJlc2hfdG9rZW4nKSxcbiAgICAgIGhhc0ZpcmViYXNlVG9rZW46IHBhcmFtcy5oYXMoJ2ZpcmViYXNlX3Rva2VuJyksXG4gICAgICBmaXJlYmFzZVRva2VuTGVuZ3RoOiBwYXJhbXMuZ2V0KCdmaXJlYmFzZV90b2tlbicpPy5sZW5ndGggfHwgMCxcbiAgICAgIGVycm9yOiBwYXJhbXMuZ2V0KCdlcnJvcicpLFxuICAgIH0pO1xuXG4gICAgLy8gVmVyaWZpY2FyIHNpIGhheSBlcnJvclxuICAgIGNvbnN0IGVycm9yID0gcGFyYW1zLmdldCgnZXJyb3InKTtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIHRoaXMuc2VuZFRvUGFyZW50KHtcbiAgICAgICAgdHlwZTogJ29hdXRoLWNhbGxiYWNrJyxcbiAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICBjb2RlOiBlcnJvcixcbiAgICAgICAgICBtZXNzYWdlOiBwYXJhbXMuZ2V0KCdlcnJvcl9kZXNjcmlwdGlvbicpIHx8ICdFcnJvciBkZSBhdXRlbnRpY2FjacOzbicsXG4gICAgICAgIH0gYXMgT0F1dGhFcnJvcixcbiAgICAgIH0pO1xuICAgICAgdGhpcy5tZXNzYWdlID0gJ0Vycm9yIGRlIGF1dGVudGljYWNpw7NuJztcbiAgICAgIHRoaXMuY2xvc2VBZnRlckRlbGF5KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gTUZBIHJlcXVlcmlkbyDigJQgZWwgYmFja2VuZCByZWRpcmlnZSBzaW4gdG9rZW5zLCBjb24gbWZhX3Rva2VuLiBFbCBmbHVqb1xuICAgIC8vIGNvbnRpbsO6YSBjb24gZWwgY2hhbGxlbmdlIE1GQSAoQXV0aFNlcnZpY2Uuc2V0TUZBUGVuZGluZyDihpIgbW9kYWwgdmVyaWZ5KS5cbiAgICBpZiAocGFyYW1zLmdldCgnbWZhX3JlcXVpcmVkJykgPT09ICd0cnVlJykge1xuICAgICAgdGhpcy5zZW5kVG9QYXJlbnQoe1xuICAgICAgICB0eXBlOiAnb2F1dGgtY2FsbGJhY2snLFxuICAgICAgICB0b2tlbnM6IHtcbiAgICAgICAgICBhY2Nlc3NUb2tlbjogJycsXG4gICAgICAgICAgcmVmcmVzaFRva2VuOiAnJyxcbiAgICAgICAgICBleHBpcmVzSW46IDAsXG4gICAgICAgICAgbWZhUmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgbWZhVG9rZW46IHBhcmFtcy5nZXQoJ21mYV90b2tlbicpIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICBtZmFNZXRob2Q6IChwYXJhbXMuZ2V0KCdtZmFfbWV0aG9kJykgYXMgTUZBTWV0aG9kKSB8fCB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIHRoaXMubWVzc2FnZSA9ICdWZXJpZmljYWNpw7NuIGFkaWNpb25hbCByZXF1ZXJpZGEnO1xuICAgICAgdGhpcy5jbG9zZUFmdGVyRGVsYXkoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBFeHRyYWVyIHRva2Vuc1xuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gcGFyYW1zLmdldCgnYWNjZXNzX3Rva2VuJyk7XG4gICAgY29uc3QgcmVmcmVzaFRva2VuID0gcGFyYW1zLmdldCgncmVmcmVzaF90b2tlbicpO1xuICAgIGNvbnN0IGV4cGlyZXNJbiA9IHBhcmFtcy5nZXQoJ2V4cGlyZXNfaW4nKTtcbiAgICBjb25zdCBmaXJlYmFzZVRva2VuID0gcGFyYW1zLmdldCgnZmlyZWJhc2VfdG9rZW4nKTtcblxuICAgIGlmICghYWNjZXNzVG9rZW4gfHwgIXJlZnJlc2hUb2tlbikge1xuICAgICAgdGhpcy5zZW5kVG9QYXJlbnQoe1xuICAgICAgICB0eXBlOiAnb2F1dGgtY2FsbGJhY2snLFxuICAgICAgICBlcnJvcjoge1xuICAgICAgICAgIGNvZGU6ICdNSVNTSU5HX1RPS0VOUycsXG4gICAgICAgICAgbWVzc2FnZTogJ05vIHNlIHJlY2liaWVyb24gbG9zIHRva2VucyBkZSBhdXRlbnRpY2FjacOzbicsXG4gICAgICAgIH0gYXMgT0F1dGhFcnJvcixcbiAgICAgIH0pO1xuICAgICAgdGhpcy5tZXNzYWdlID0gJ0Vycm9yOiB0b2tlbnMgbm8gcmVjaWJpZG9zJztcbiAgICAgIHRoaXMuY2xvc2VBZnRlckRlbGF5KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRXh0cmFlciByb2xlcyB5IHBlcm1pc29zIChwdWVkZW4gdmVuaXIgY29tbyBKU09OIGVuIGJhc2U2NClcbiAgICBsZXQgcm9sZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICAgIGxldCBwZXJtaXNzaW9uczogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCByb2xlc1BhcmFtID0gcGFyYW1zLmdldCgncm9sZXMnKTtcbiAgICBjb25zdCBwZXJtaXNzaW9uc1BhcmFtID0gcGFyYW1zLmdldCgncGVybWlzc2lvbnMnKTtcblxuICAgIGlmIChyb2xlc1BhcmFtKSB7XG4gICAgICB0cnkge1xuICAgICAgICByb2xlcyA9IEpTT04ucGFyc2UoYXRvYihyb2xlc1BhcmFtKSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcm9sZXMgPSByb2xlc1BhcmFtLnNwbGl0KCcsJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBlcm1pc3Npb25zUGFyYW0pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHBlcm1pc3Npb25zID0gSlNPTi5wYXJzZShhdG9iKHBlcm1pc3Npb25zUGFyYW0pKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBwZXJtaXNzaW9ucyA9IHBlcm1pc3Npb25zUGFyYW0uc3BsaXQoJywnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFbnZpYXIgdG9rZW5zIGEgbGEgdmVudGFuYSBwYWRyZVxuICAgIGNvbnN0IHJlc3VsdDogT0F1dGhSZXN1bHQgPSB7XG4gICAgICBhY2Nlc3NUb2tlbixcbiAgICAgIHJlZnJlc2hUb2tlbixcbiAgICAgIGV4cGlyZXNJbjogZXhwaXJlc0luID8gcGFyc2VJbnQoZXhwaXJlc0luLCAxMCkgOiA5MDAsXG4gICAgICBmaXJlYmFzZVRva2VuOiBmaXJlYmFzZVRva2VuIHx8IHVuZGVmaW5lZCxcbiAgICAgIHJvbGVzLFxuICAgICAgcGVybWlzc2lvbnMsXG4gICAgICBpc05ld1VzZXI6IHBhcmFtcy5nZXQoJ2lzX25ld191c2VyJykgPT09ICd0cnVlJyxcbiAgICAgIGxpbmtlZDogcGFyYW1zLmdldCgnbGlua2VkJykgPT09ICd0cnVlJyxcbiAgICB9O1xuXG4gICAgdGhpcy5zZW5kVG9QYXJlbnQoe1xuICAgICAgdHlwZTogJ29hdXRoLWNhbGxiYWNrJyxcbiAgICAgIHRva2VuczogcmVzdWx0LFxuICAgIH0pO1xuXG4gICAgLy8gRmx1am8gcmVkaXJlY3QgKHZlbnRhbmEgcHJpbmNpcGFsLCBzaW4gb3BlbmVyIHF1ZSBjb25zdW1hIGVsIGxvY2FsU3RvcmFnZSk6XG4gICAgLy8gaW5zdGFsYXIgbGEgc2VzacOzbiBhY8OhIG1pc21vIHkgbmF2ZWdhciBhbCBob21lLCBlbiB2ZXogZGUgcXVlZGFyIHBlZ2Fkby5cbiAgICBpZiAodGhpcy5pc01haW5XaW5kb3coKSAmJiB0aGlzLmNvbXBsZXRlSW5NYWluV2luZG93KHJlc3VsdCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm1lc3NhZ2UgPSAnQXV0ZW50aWNhY2nDs24gZXhpdG9zYSc7XG4gICAgdGhpcy5jbG9zZUFmdGVyRGVsYXkoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2VuZFRvUGFyZW50KGRhdGE6IE9BdXRoQ2FsbGJhY2tEYXRhKTogdm9pZCB7XG4gICAgLy8gQWRqdW50YXIgZWwgbm9uY2UgZGVsIG9wZW5lciAoTS0wNykgYSBUT0RPIG1lbnNhamUgKHN1Y2Nlc3MsIE1GQSwgZXJyb3IpXG4gICAgLy8gcGFyYSBxdWUgZWwgb3BlbmVyIHZlcmlmaXF1ZSBxdWUgZWwgY2FsbGJhY2sgZXMgZGUgc3UgcHJvcGlvIGZsdWpvLlxuICAgIGlmICh0aGlzLmNsaWVudE5vbmNlKSB7XG4gICAgICBkYXRhLm5vbmNlID0gdGhpcy5jbGllbnROb25jZTtcbiAgICB9XG5cbiAgICAvLyBTaWVtcHJlIGd1YXJkYXIgZW4gbG9jYWxTdG9yYWdlIGNvbW8gZmFsbGJhY2sgKHBhcmEgQ09PUCBpc3N1ZXMpXG4gICAgdHJ5IHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdvYXV0aF9jYWxsYmFja19kYXRhJywgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ29hdXRoX2NhbGxiYWNrX3RpbWVzdGFtcCcsIERhdGUubm93KCkudG9TdHJpbmcoKSk7XG4gICAgICBjb25zb2xlLmxvZygnW09BdXRoQ2FsbGJhY2tdIFNhdmVkIHRvIGxvY2FsU3RvcmFnZSBhcyBmYWxsYmFjaycpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignW09BdXRoQ2FsbGJhY2tdIENvdWxkIG5vdCBzYXZlIHRvIGxvY2FsU3RvcmFnZTonLCBlKTtcbiAgICB9XG5cbiAgICAvLyBJbnRlbnRhciBwb3N0TWVzc2FnZSAocHVlZGUgZmFsbGFyIHBvciBDT09QKVxuICAgIHRyeSB7XG4gICAgICBpZiAod2luZG93Lm9wZW5lciAmJiAhd2luZG93Lm9wZW5lci5jbG9zZWQpIHtcbiAgICAgICAgd2luZG93Lm9wZW5lci5wb3N0TWVzc2FnZShkYXRhLCB3aW5kb3cubG9jYXRpb24ub3JpZ2luKTtcbiAgICAgICAgY29uc29sZS5sb2coJ1tPQXV0aENhbGxiYWNrXSBwb3N0TWVzc2FnZSBzZW50IHRvIG9wZW5lcicpO1xuICAgICAgfSBlbHNlIGlmICh3aW5kb3cucGFyZW50ICE9PSB3aW5kb3cpIHtcbiAgICAgICAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZShkYXRhLCB3aW5kb3cubG9jYXRpb24ub3JpZ2luKTtcbiAgICAgICAgY29uc29sZS5sb2coJ1tPQXV0aENhbGxiYWNrXSBwb3N0TWVzc2FnZSBzZW50IHRvIHBhcmVudCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1tPQXV0aENhbGxiYWNrXSBObyBvcGVuZXIvcGFyZW50IGF2YWlsYWJsZSwgdXNpbmcgbG9jYWxTdG9yYWdlIG9ubHknKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBDT09QIGJsb2NrcyBwb3N0TWVzc2FnZSAtIGxvY2FsU3RvcmFnZSBmYWxsYmFjayBhbHJlYWR5IHNhdmVkXG4gICAgICBjb25zb2xlLndhcm4oJ1tPQXV0aENhbGxiYWNrXSBwb3N0TWVzc2FnZSBibG9ja2VkIChDT09QKSwgdXNpbmcgbG9jYWxTdG9yYWdlIGZhbGxiYWNrOicsIGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VBZnRlckRlbGF5KCk6IHZvaWQge1xuICAgIC8vIERhciB0aWVtcG8gcGFyYSBxdWUgZWwgbWVuc2FqZSBzZSBlbnbDrWUgYW50ZXMgZGUgY2VycmFyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAod2luZG93Lm9wZW5lcikge1xuICAgICAgICB3aW5kb3cuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9LCA1MDApO1xuICB9XG59XG4iXX0=
192
+ args: [{ selector: 'val-oauth-callback', standalone: true, imports: [CommonModule], template: `
193
+ <div class="oauth-callback">
194
+ <div class="oauth-callback__spinner"></div>
195
+ <p class="oauth-callback__text">{{ message }}</p>
196
+ </div>
197
+ `, styles: [".oauth-callback{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100vh;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.oauth-callback__spinner{width:40px;height:40px;border:3px solid #f3f3f3;border-top:3px solid #3498db;border-radius:50%;animation:spin 1s linear infinite;margin-bottom:16px}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.oauth-callback__text{color:#666;font-size:14px}\n"] }]
198
+ }] });
199
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgtY2FsbGJhY2suY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9hdXRoL29hdXRoLWNhbGxiYWNrLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFHL0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFnREgsTUFBTSxPQUFPLHNCQUFzQjtJQS9DbkM7UUFnREUsWUFBTyxHQUFHLDZCQUE2QixDQUFDO1FBRXhDOzs7O1dBSUc7UUFDSyxnQkFBVyxHQUFrQixJQUFJLENBQUM7S0E4SjNDO0lBNUpDLFFBQVE7UUFDTixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVPLGVBQWU7UUFDckIsTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFlLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFOUMsaUNBQWlDO1FBQ2pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0NBQXNDLEVBQUU7WUFDbEQsR0FBRyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSTtZQUN6QixjQUFjLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUM7WUFDMUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDO1lBQzVDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUM7WUFDOUMsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLE1BQU0sSUFBSSxDQUFDO1lBQzlELEtB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O2dCQUNsQixNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakIsQ0FBQztRQUNILENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7K0dBcktVLHNCQUFzQjttR0FBdEIsc0JBQXNCLDhFQTNDdkI7Ozs7O0dBS1QsOGhCQU5TLFlBQVk7OzRGQTRDWCxzQkFBc0I7a0JBL0NsQyxTQUFTOytCQUNFLG9CQUFvQixjQUNsQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsWUFDYjs7Ozs7R0FLVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTUZBTWV0aG9kLCBPQXV0aENhbGxiYWNrRGF0YSwgT0F1dGhSZXN1bHQsIE9BdXRoRXJyb3IgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBDb21wb25lbnRlIGRlIGNhbGxiYWNrIHBhcmEgT0F1dGguXG4gKlxuICogRXN0ZSBjb21wb25lbnRlIHByb2Nlc2EgbGEgcmVzcHVlc3RhIGRlbCBzZXJ2aWRvciBPQXV0aCB5IGVudsOtYVxuICogbG9zIHRva2VucyBhIGxhIHZlbnRhbmEgcGFkcmUgdmlhIHBvc3RNZXNzYWdlLlxuICpcbiAqIERlYmUgYWdyZWdhcnNlIGEgbGFzIHJ1dGFzIGRlIGxhIGFwbGljYWNpw7NuOlxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gYXBwLnJvdXRlcy50c1xuICogaW1wb3J0IHsgT0F1dGhDYWxsYmFja0NvbXBvbmVudCB9IGZyb20gJ3ZhbHRlY2gtY29tcG9uZW50cyc7XG4gKlxuICogZXhwb3J0IGNvbnN0IHJvdXRlczogUm91dGVzID0gW1xuICogICB7IHBhdGg6ICdhdXRoL29hdXRoL2NhbGxiYWNrJywgY29tcG9uZW50OiBPQXV0aENhbGxiYWNrQ29tcG9uZW50IH0sXG4gKiAgIC8vIC4uLiBvdHJhcyBydXRhc1xuICogXTtcbiAqIGBgYFxuICpcbiAqIEVsIGJhY2tlbmQgcmVkaXJpZ2UgYSBlc3RhIHJ1dGEgY29uIGxvcyB0b2tlbnMgZW4gcXVlcnkgcGFyYW1zOlxuICogYC9hdXRoL29hdXRoL2NhbGxiYWNrP2FjY2Vzc190b2tlbj14eHgmcmVmcmVzaF90b2tlbj14eHgmZXhwaXJlc19pbj05MDBgXG4gKlxuICogTyBjb24gZXJyb3I6XG4gKiBgL2F1dGgvb2F1dGgvY2FsbGJhY2s/ZXJyb3I9SU5WQUxJRF9DT0RFJmVycm9yX2Rlc2NyaXB0aW9uPS4uLmBcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLW9hdXRoLWNhbGxiYWNrJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cIm9hdXRoLWNhbGxiYWNrXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwib2F1dGgtY2FsbGJhY2tfX3NwaW5uZXJcIj48L2Rpdj5cbiAgICAgIDxwIGNsYXNzPVwib2F1dGgtY2FsbGJhY2tfX3RleHRcIj57eyBtZXNzYWdlIH19PC9wPlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICAub2F1dGgtY2FsbGJhY2sge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgUm9ib3RvLCBzYW5zLXNlcmlmO1xuICAgICAgfVxuXG4gICAgICAub2F1dGgtY2FsbGJhY2tfX3NwaW5uZXIge1xuICAgICAgICB3aWR0aDogNDBweDtcbiAgICAgICAgaGVpZ2h0OiA0MHB4O1xuICAgICAgICBib3JkZXI6IDNweCBzb2xpZCAjZjNmM2YzO1xuICAgICAgICBib3JkZXItdG9wOiAzcHggc29saWQgIzM0OThkYjtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICBhbmltYXRpb246IHNwaW4gMXMgbGluZWFyIGluZmluaXRlO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICAgICAgfVxuXG4gICAgICBAa2V5ZnJhbWVzIHNwaW4ge1xuICAgICAgICAwJSB7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gICAgICAgIH1cbiAgICAgICAgMTAwJSB7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAub2F1dGgtY2FsbGJhY2tfX3RleHQge1xuICAgICAgICBjb2xvcjogIzY2NjtcbiAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIE9BdXRoQ2FsbGJhY2tDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBtZXNzYWdlID0gJ1Byb2Nlc2FuZG8gYXV0ZW50aWNhY2nDs24uLi4nO1xuXG4gIC8qKlxuICAgKiBOb25jZSBxdWUgZWwgb3BlbmVyIGdlbmVyw7MgeSBwYXPDsyBwb3IgZWwgZmx1am8gKHJvdW5kLXRyaXAgYmFja2VuZCkuIFNlXG4gICAqIHJlZW52w61hIGFsIG9wZW5lciBlbiBjYWRhIG1lbnNhamUgcGFyYSBxdWUgdmVyaWZpcXVlIGVsIG9yaWdlbiBkZWwgY2FsbGJhY2tcbiAgICogeSByZWNoYWNlIHVuIG9hdXRoX2NhbGxiYWNrX2RhdGEgZm9yamFkbyBlbiBsb2NhbFN0b3JhZ2UgcG9yIFhTUyAoTS0wNykuXG4gICAqL1xuICBwcml2YXRlIGNsaWVudE5vbmNlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnByb2Nlc3NDYWxsYmFjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcbiAgICB0aGlzLmNsaWVudE5vbmNlID0gcGFyYW1zLmdldCgnY2xpZW50X25vbmNlJyk7XG5cbiAgICAvLyBERUJVRzogTG9nIGFsbCByZWNlaXZlZCBwYXJhbXNcbiAgICBjb25zb2xlLmxvZygnW09BdXRoQ2FsbGJhY2tdIFVSTCBwYXJhbXMgcmVjZWl2ZWQ6Jywge1xuICAgICAgdXJsOiB3aW5kb3cubG9jYXRpb24uaHJlZixcbiAgICAgIGhhc0FjY2Vzc1Rva2VuOiBwYXJhbXMuaGFzKCdhY2Nlc3NfdG9rZW4nKSxcbiAgICAgIGhhc1JlZnJlc2hUb2tlbjogcGFyYW1zLmhhcygncmVmcmVzaF90b2tlbicpLFxuICAgICAgaGFzRmlyZWJhc2VUb2tlbjogcGFyYW1zLmhhcygnZmlyZWJhc2VfdG9rZW4nKSxcbiAgICAgIGZpcmViYXNlVG9rZW5MZW5ndGg6IHBhcmFtcy5nZXQoJ2ZpcmViYXNlX3Rva2VuJyk/Lmxlbmd0aCB8fCAwLFxuICAgICAgZXJyb3I6IHBhcmFtcy5nZXQoJ2Vycm9yJyksXG4gICAgfSk7XG5cbiAgICAvLyBWZXJpZmljYXIgc2kgaGF5IGVycm9yXG4gICAgY29uc3QgZXJyb3IgPSBwYXJhbXMuZ2V0KCdlcnJvcicpO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgdGhpcy5zZW5kVG9QYXJlbnQoe1xuICAgICAgICB0eXBlOiAnb2F1dGgtY2FsbGJhY2snLFxuICAgICAgICBlcnJvcjoge1xuICAgICAgICAgIGNvZGU6IGVycm9yLFxuICAgICAgICAgIG1lc3NhZ2U6IHBhcmFtcy5nZXQoJ2Vycm9yX2Rlc2NyaXB0aW9uJykgfHwgJ0Vycm9yIGRlIGF1dGVudGljYWNpw7NuJyxcbiAgICAgICAgfSBhcyBPQXV0aEVycm9yLFxuICAgICAgfSk7XG4gICAgICB0aGlzLm1lc3NhZ2UgPSAnRXJyb3IgZGUgYXV0ZW50aWNhY2nDs24nO1xuICAgICAgdGhpcy5jbG9zZUFmdGVyRGVsYXkoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBNRkEgcmVxdWVyaWRvIOKAlCBlbCBiYWNrZW5kIHJlZGlyaWdlIHNpbiB0b2tlbnMsIGNvbiBtZmFfdG9rZW4uIEVsIGZsdWpvXG4gICAgLy8gY29udGluw7phIGNvbiBlbCBjaGFsbGVuZ2UgTUZBIChBdXRoU2VydmljZS5zZXRNRkFQZW5kaW5nIOKGkiBtb2RhbCB2ZXJpZnkpLlxuICAgIGlmIChwYXJhbXMuZ2V0KCdtZmFfcmVxdWlyZWQnKSA9PT0gJ3RydWUnKSB7XG4gICAgICB0aGlzLnNlbmRUb1BhcmVudCh7XG4gICAgICAgIHR5cGU6ICdvYXV0aC1jYWxsYmFjaycsXG4gICAgICAgIHRva2Vuczoge1xuICAgICAgICAgIGFjY2Vzc1Rva2VuOiAnJyxcbiAgICAgICAgICByZWZyZXNoVG9rZW46ICcnLFxuICAgICAgICAgIGV4cGlyZXNJbjogMCxcbiAgICAgICAgICBtZmFSZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICBtZmFUb2tlbjogcGFyYW1zLmdldCgnbWZhX3Rva2VuJykgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgIG1mYU1ldGhvZDogKHBhcmFtcy5nZXQoJ21mYV9tZXRob2QnKSBhcyBNRkFNZXRob2QpIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5tZXNzYWdlID0gJ1ZlcmlmaWNhY2nDs24gYWRpY2lvbmFsIHJlcXVlcmlkYSc7XG4gICAgICB0aGlzLmNsb3NlQWZ0ZXJEZWxheSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEV4dHJhZXIgdG9rZW5zXG4gICAgY29uc3QgYWNjZXNzVG9rZW4gPSBwYXJhbXMuZ2V0KCdhY2Nlc3NfdG9rZW4nKTtcbiAgICBjb25zdCByZWZyZXNoVG9rZW4gPSBwYXJhbXMuZ2V0KCdyZWZyZXNoX3Rva2VuJyk7XG4gICAgY29uc3QgZXhwaXJlc0luID0gcGFyYW1zLmdldCgnZXhwaXJlc19pbicpO1xuICAgIGNvbnN0IGZpcmViYXNlVG9rZW4gPSBwYXJhbXMuZ2V0KCdmaXJlYmFzZV90b2tlbicpO1xuXG4gICAgaWYgKCFhY2Nlc3NUb2tlbiB8fCAhcmVmcmVzaFRva2VuKSB7XG4gICAgICB0aGlzLnNlbmRUb1BhcmVudCh7XG4gICAgICAgIHR5cGU6ICdvYXV0aC1jYWxsYmFjaycsXG4gICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgY29kZTogJ01JU1NJTkdfVE9LRU5TJyxcbiAgICAgICAgICBtZXNzYWdlOiAnTm8gc2UgcmVjaWJpZXJvbiBsb3MgdG9rZW5zIGRlIGF1dGVudGljYWNpw7NuJyxcbiAgICAgICAgfSBhcyBPQXV0aEVycm9yLFxuICAgICAgfSk7XG4gICAgICB0aGlzLm1lc3NhZ2UgPSAnRXJyb3I6IHRva2VucyBubyByZWNpYmlkb3MnO1xuICAgICAgdGhpcy5jbG9zZUFmdGVyRGVsYXkoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBFeHRyYWVyIHJvbGVzIHkgcGVybWlzb3MgKHB1ZWRlbiB2ZW5pciBjb21vIEpTT04gZW4gYmFzZTY0KVxuICAgIGxldCByb2xlczogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gICAgbGV0IHBlcm1pc3Npb25zOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IHJvbGVzUGFyYW0gPSBwYXJhbXMuZ2V0KCdyb2xlcycpO1xuICAgIGNvbnN0IHBlcm1pc3Npb25zUGFyYW0gPSBwYXJhbXMuZ2V0KCdwZXJtaXNzaW9ucycpO1xuXG4gICAgaWYgKHJvbGVzUGFyYW0pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJvbGVzID0gSlNPTi5wYXJzZShhdG9iKHJvbGVzUGFyYW0pKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByb2xlcyA9IHJvbGVzUGFyYW0uc3BsaXQoJywnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocGVybWlzc2lvbnNQYXJhbSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcGVybWlzc2lvbnMgPSBKU09OLnBhcnNlKGF0b2IocGVybWlzc2lvbnNQYXJhbSkpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHBlcm1pc3Npb25zID0gcGVybWlzc2lvbnNQYXJhbS5zcGxpdCgnLCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEVudmlhciB0b2tlbnMgYSBsYSB2ZW50YW5hIHBhZHJlXG4gICAgY29uc3QgcmVzdWx0OiBPQXV0aFJlc3VsdCA9IHtcbiAgICAgIGFjY2Vzc1Rva2VuLFxuICAgICAgcmVmcmVzaFRva2VuLFxuICAgICAgZXhwaXJlc0luOiBleHBpcmVzSW4gPyBwYXJzZUludChleHBpcmVzSW4sIDEwKSA6IDkwMCxcbiAgICAgIGZpcmViYXNlVG9rZW46IGZpcmViYXNlVG9rZW4gfHwgdW5kZWZpbmVkLFxuICAgICAgcm9sZXMsXG4gICAgICBwZXJtaXNzaW9ucyxcbiAgICAgIGlzTmV3VXNlcjogcGFyYW1zLmdldCgnaXNfbmV3X3VzZXInKSA9PT0gJ3RydWUnLFxuICAgICAgbGlua2VkOiBwYXJhbXMuZ2V0KCdsaW5rZWQnKSA9PT0gJ3RydWUnLFxuICAgIH07XG5cbiAgICB0aGlzLnNlbmRUb1BhcmVudCh7XG4gICAgICB0eXBlOiAnb2F1dGgtY2FsbGJhY2snLFxuICAgICAgdG9rZW5zOiByZXN1bHQsXG4gICAgfSk7XG5cbiAgICB0aGlzLm1lc3NhZ2UgPSAnQXV0ZW50aWNhY2nDs24gZXhpdG9zYSc7XG4gICAgdGhpcy5jbG9zZUFmdGVyRGVsYXkoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2VuZFRvUGFyZW50KGRhdGE6IE9BdXRoQ2FsbGJhY2tEYXRhKTogdm9pZCB7XG4gICAgLy8gQWRqdW50YXIgZWwgbm9uY2UgZGVsIG9wZW5lciAoTS0wNykgYSBUT0RPIG1lbnNhamUgKHN1Y2Nlc3MsIE1GQSwgZXJyb3IpXG4gICAgLy8gcGFyYSBxdWUgZWwgb3BlbmVyIHZlcmlmaXF1ZSBxdWUgZWwgY2FsbGJhY2sgZXMgZGUgc3UgcHJvcGlvIGZsdWpvLlxuICAgIGlmICh0aGlzLmNsaWVudE5vbmNlKSB7XG4gICAgICBkYXRhLm5vbmNlID0gdGhpcy5jbGllbnROb25jZTtcbiAgICB9XG5cbiAgICAvLyBTaWVtcHJlIGd1YXJkYXIgZW4gbG9jYWxTdG9yYWdlIGNvbW8gZmFsbGJhY2sgKHBhcmEgQ09PUCBpc3N1ZXMpXG4gICAgdHJ5IHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdvYXV0aF9jYWxsYmFja19kYXRhJywgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ29hdXRoX2NhbGxiYWNrX3RpbWVzdGFtcCcsIERhdGUubm93KCkudG9TdHJpbmcoKSk7XG4gICAgICBjb25zb2xlLmxvZygnW09BdXRoQ2FsbGJhY2tdIFNhdmVkIHRvIGxvY2FsU3RvcmFnZSBhcyBmYWxsYmFjaycpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignW09BdXRoQ2FsbGJhY2tdIENvdWxkIG5vdCBzYXZlIHRvIGxvY2FsU3RvcmFnZTonLCBlKTtcbiAgICB9XG5cbiAgICAvLyBJbnRlbnRhciBwb3N0TWVzc2FnZSAocHVlZGUgZmFsbGFyIHBvciBDT09QKVxuICAgIHRyeSB7XG4gICAgICBpZiAod2luZG93Lm9wZW5lciAmJiAhd2luZG93Lm9wZW5lci5jbG9zZWQpIHtcbiAgICAgICAgd2luZG93Lm9wZW5lci5wb3N0TWVzc2FnZShkYXRhLCB3aW5kb3cubG9jYXRpb24ub3JpZ2luKTtcbiAgICAgICAgY29uc29sZS5sb2coJ1tPQXV0aENhbGxiYWNrXSBwb3N0TWVzc2FnZSBzZW50IHRvIG9wZW5lcicpO1xuICAgICAgfSBlbHNlIGlmICh3aW5kb3cucGFyZW50ICE9PSB3aW5kb3cpIHtcbiAgICAgICAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZShkYXRhLCB3aW5kb3cubG9jYXRpb24ub3JpZ2luKTtcbiAgICAgICAgY29uc29sZS5sb2coJ1tPQXV0aENhbGxiYWNrXSBwb3N0TWVzc2FnZSBzZW50IHRvIHBhcmVudCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1tPQXV0aENhbGxiYWNrXSBObyBvcGVuZXIvcGFyZW50IGF2YWlsYWJsZSwgdXNpbmcgbG9jYWxTdG9yYWdlIG9ubHknKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBDT09QIGJsb2NrcyBwb3N0TWVzc2FnZSAtIGxvY2FsU3RvcmFnZSBmYWxsYmFjayBhbHJlYWR5IHNhdmVkXG4gICAgICBjb25zb2xlLndhcm4oJ1tPQXV0aENhbGxiYWNrXSBwb3N0TWVzc2FnZSBibG9ja2VkIChDT09QKSwgdXNpbmcgbG9jYWxTdG9yYWdlIGZhbGxiYWNrOicsIGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VBZnRlckRlbGF5KCk6IHZvaWQge1xuICAgIC8vIERhciB0aWVtcG8gcGFyYSBxdWUgZWwgbWVuc2FqZSBzZSBlbnbDrWUgYW50ZXMgZGUgY2VycmFyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAod2luZG93Lm9wZW5lcikge1xuICAgICAgICB3aW5kb3cuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9LCA1MDApO1xuICB9XG59XG4iXX0=
@@ -360,24 +360,20 @@ export class OAuthService {
360
360
  /**
361
361
  * Verifica que el callback traiga el nonce del flujo actual (M-07).
362
362
  *
363
- * Tolerante a la transición: solo se EXIGE coincidencia cuando el callback
364
- * trae un nonce. Si no lo trae (backend aún sin M-07 desplegado, p.ej. dev), no
365
- * se bloquea el login. Cuando el backend echa `client_nonce` en todos lados, un
366
- * callback forjado con un nonce distinto sí se rechaza. Un payload forjado por
367
- * XSS que OMITA el nonce no se frena por acá, pero igual pasa por las
368
- * validaciones de tipo/forma de `checkLocalStorageFallback`.
363
+ * Estricto: si el opener generó un nonce (siempre, en clientes nuevos) exige
364
+ * que el callback lo traiga y coincida. Un payload forjado en localStorage por
365
+ * XSS no conoce el nonce (vive solo en memoria) se rechaza.
366
+ *
367
+ * ⚠️ Requiere que el backend ya eche `client_nonce` en el callback. Deploy:
368
+ * backend ANTES que el frontend, si no este check rechaza callbacks legítimos
369
+ * (sin nonce) durante la ventana de transición.
369
370
  */
370
371
  isNonceValid(data) {
371
- // No hay flujo con nonce activo (legacy / link flow) → no bloquear.
372
372
  if (!this.expectedNonce) {
373
+ // No hay flujo con nonce activo (caso legacy / link flow) → no bloquear.
373
374
  return true;
374
375
  }
375
- // El callback no trae nonce (backend sin M-07) → no bloquear (transición).
376
- if (!data?.nonce) {
377
- return true;
378
- }
379
- // Nonce presente → debe coincidir con el del flujo.
380
- return data.nonce === this.expectedNonce;
376
+ return data?.nonce === this.expectedNonce;
381
377
  }
382
378
  /**
383
379
  * Valida la forma del payload del callback (M-07): debe ser un error o tokens
@@ -400,4 +396,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
400
396
  type: Inject,
401
397
  args: [VALTECH_AUTH_CONFIG]
402
398
  }] }, { type: i1.HttpClient }, { type: i0.NgZone }] });
403
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvYXV0aC9vYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFVLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLFVBQVUsRUFBVyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBVy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBRTVDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQ0c7QUFFSCxNQUFNLE9BQU8sWUFBWTtJQVl2QixZQUNtRCxNQUFnQyxFQUN6RSxJQUFnQixFQUNoQixNQUFjO1FBRjJCLFdBQU0sR0FBTixNQUFNLENBQTBCO1FBQ3pFLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQWRoQixVQUFLLEdBQWtCLElBQUksQ0FBQztRQUM1QixtQkFBYyxHQUEyQyxJQUFJLENBQUM7UUFDOUQsd0JBQW1CLEdBQTBDLElBQUksQ0FBQztRQUMxRTs7Ozs7V0FLRztRQUNLLGtCQUFhLEdBQWtCLElBQUksQ0FBQztJQU16QyxDQUFDO0lBRUo7Ozs7OztPQU1HO0lBQ0gsU0FBUyxDQUFDLFFBQXVCO1FBQy9CLE9BQU8sSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDL0IseUVBQXlFO1lBQ3pFLDRFQUE0RTtZQUM1RSx5RUFBeUU7WUFDekUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBRTNCLDBCQUEwQjtZQUMxQixNQUFN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QW1CO21IQWI5QixZQUFZLGNBREMsTUFBTTs7NEZBQ25CLFlBQVk7a0JBRHhCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFjN0IsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QsIE5nWm9uZSwgT3B0aW9uYWwsIGlzRGV2TW9kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVkFMVEVDSF9BVVRIX0NPTkZJRyB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7XG4gIFZhbHRlY2hBdXRoQ29uZmlnLFxuICBPQXV0aFByb3ZpZGVyLFxuICBPQXV0aFJlc3VsdCxcbiAgT0F1dGhFcnJvcixcbiAgT0F1dGhDYWxsYmFja0RhdGEsXG4gIExpbmtlZFByb3ZpZGVyLFxuICBIYXNQYXNzd29yZFJlc3BvbnNlLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG4vKipcbiAqIFNlcnZpY2lvIGRlIE9BdXRoIHBhcmEgbG9naW4gc29jaWFsLlxuICpcbiAqIEltcGxlbWVudGEgZmx1am8gT0F1dGggc2VydmVyLXNpZGUgY29uIHBvcHVwOlxuICogMS4gRnJvbnRlbmQgYWJyZSBwb3B1cCBoYWNpYSBiYWNrZW5kXG4gKiAyLiBCYWNrZW5kIHJlZGlyaWdlIGEgcHJvdmlkZXIgKEdvb2dsZSwgQXBwbGUsIE1pY3Jvc29mdClcbiAqIDMuIFVzdWFyaW8gYXV0b3JpemFcbiAqIDQuIEJhY2tlbmQgaW50ZXJjYW1iaWEgY29kZSwgZ2VuZXJhIEpXVCwgcmVkaXJpZ2UgY29uIHRva2Vuc1xuICogNS4gUG9wdXAgZW52w61hIHRva2VucyBhIHZlbnRhbmEgcGFkcmUgdmlhIHBvc3RNZXNzYWdlXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IE9BdXRoU2VydmljZSwgQXV0aFNlcnZpY2UgfSBmcm9tICd2YWx0ZWNoLWNvbXBvbmVudHMnO1xuICpcbiAqIEBDb21wb25lbnQoey4uLn0pXG4gKiBleHBvcnQgY2xhc3MgTG9naW5Db21wb25lbnQge1xuICogICBwcml2YXRlIG9hdXRoID0gaW5qZWN0KE9BdXRoU2VydmljZSk7XG4gKiAgIHByaXZhdGUgYXV0aCA9IGluamVjdChBdXRoU2VydmljZSk7XG4gKlxuICogICBhc3luYyBsb2dpbldpdGhHb29nbGUoKSB7XG4gKiAgICAgdGhpcy5vYXV0aC5zdGFydEZsb3coJ2dvb2dsZScpLnN1YnNjcmliZSh7XG4gKiAgICAgICBuZXh0OiAocmVzdWx0KSA9PiB7XG4gKiAgICAgICAgIC8vIFRva2VucyByZWNpYmlkb3MsIGd1YXJkYXIgZW4gYXV0aCBzdGF0ZVxuICogICAgICAgICB0aGlzLmF1dGguaGFuZGxlT0F1dGhTdWNjZXNzKHJlc3VsdCk7XG4gKiAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLyddKTtcbiAqICAgICAgIH0sXG4gKiAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gKiAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ09BdXRoIGZhaWxlZDonLCBlcnJvcik7XG4gKiAgICAgICB9XG4gKiAgICAgfSk7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIE9BdXRoU2VydmljZSB7XG4gIHByaXZhdGUgcG9wdXA6IFdpbmRvdyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIG1lc3NhZ2VIYW5kbGVyOiAoKGV2ZW50OiBNZXNzYWdlRXZlbnQpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY2hlY2tDbG9zZWRJbnRlcnZhbDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+IHwgbnVsbCA9IG51bGw7XG4gIC8qKlxuICAgKiBOb25jZSBkZWwgZmx1am8gT0F1dGggZW4gY3Vyc28gKE0tMDcpLiBWaXZlIFNPTE8gZW4gbWVtb3JpYSDigJQgdW4gWFNTIG5vIGxvXG4gICAqIHB1ZWRlIGxlZXIgZGUgbG9jYWxTdG9yYWdlL3Nlc3Npb25TdG9yYWdlLiBWaWFqYSBhbCBiYWNrZW5kIChjbGllbnRfbm9uY2UpLFxuICAgKiB2dWVsdmUgZW4gZWwgY2FsbGJhY2ssIHkgc2UgdmVyaWZpY2EgYWPDoSDihpIgcmVjaGF6YSB1biBvYXV0aF9jYWxsYmFja19kYXRhXG4gICAqIGZvcmphZG8gcG9yIFhTUy5cbiAgICovXG4gIHByaXZhdGUgZXhwZWN0ZWROb25jZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChWQUxURUNIX0FVVEhfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogVmFsdGVjaEF1dGhDb25maWcgfCBudWxsLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lXG4gICkge31cblxuICAvKipcbiAgICogSW5pY2lhIGZsdWpvIE9BdXRoIGVuIHBvcHVwLlxuICAgKiBSZXRvcm5hIE9ic2VydmFibGUgcXVlIGVtaXRlIGN1YW5kbyBlbCB1c3VhcmlvIGNvbXBsZXRhIGVsIGZsdWpvLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvdmlkZXIgLSBQcm92ZWVkb3IgT0F1dGggKCdnb29nbGUnLCAnYXBwbGUnLCAnbWljcm9zb2Z0JylcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBxdWUgZW1pdGUgT0F1dGhSZXN1bHQgbyBlcnJvclxuICAgKi9cbiAgc3RhcnRGbG93KHByb3ZpZGVyOiBPQXV0aFByb3ZpZGVyKTogT2JzZXJ2YWJsZTxPQXV0aFJlc3VsdD4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XG4gICAgICAvLyBOb25jZSBkZSBmbHVqbyAoTS0wNyk6IHZpdmUgc29sbyBlbiBlc3RlIG9iamV0byAobm8gZW4gc3RvcmFnZSksIHZpYWphXG4gICAgICAvLyBhbCBiYWNrZW5kIGVuIGNsaWVudF9ub25jZSB5IHZ1ZWx2ZSBlbiBlbCBjYWxsYmFjay4gRWwgb3BlbmVyIGxvIHZlcmlmaWNhXG4gICAgICAvLyDihpIgdW4gb2F1dGhfY2FsbGJhY2tfZGF0YSBmb3JqYWRvIGVuIGxvY2FsU3RvcmFnZSBwb3IgWFNTIG5vIGxvIGNvbm9jZS5cbiAgICAgIGNvbnN0IG5vbmNlID0gdGhpcy5nZW5lcmF0ZU5vbmNlKCk7XG4gICAgICB0aGlzLmV4cGVjdGVkTm9uY2UgPSBub25jZTtcblxuICAgICAgLy8gQ29uc3RydWlyIFVSTCBkZSBpbmljaW9cbiAgICAgIGNvbnN0IHJlZGlyZWN0VXJpID0gYCR7d2luZG93LmxvY2F0aW9uLm9yaWdpbn0vYXV0aC9vYXV0aC9jYWxsYmFja2A7XG4gICAgICBjb25zdCBzdGFydFVybCA9IGAke3RoaXMuY29uZmlnPy5hcGlVcmx9L3YyL2F1dGgvb2F1dGgvJHtwcm92aWRlcn0vc3RhcnQ/cmVkaXJlY3RfdXJpPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHJlZGlyZWN0VXJpKX0mY2xpZW50X25vbmNlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KG5vbmNlKX1gO1xuXG4gICAgICAvLyBBYnJpciBwb3B1cCBjZW50cmFkb1xuICAgICAgY29uc3Qgd2lkdGggPSA1MDA7XG4gICAgICBjb25zdCBoZWlnaHQgPSA2MDA7XG4gICAgICBjb25zdCBsZWZ0ID0gd2luZG93LnNjcmVlblggKyAod2luZG93Lm91dGVyV2lkdGggLSB3aWR0aCkgLyAyO1xuICAgICAgY29uc3QgdG9wID0gd2luZG93LnNjcmVlblkgKyAod2luZG93Lm91dGVySGVpZ2h0IC0gaGVpZ2h0KSAvIDI7XG4gICAgICBjb25zdCBmZWF0dXJlcyA9IGB3aWR0aD0ke3dpZHRofSxoZWlnaHQ9JHtoZWlnaHR9LGxlZnQ9JHtsZWZ0fSx0b3A9JHt0b3B9LHBvcHVwPXllc2A7XG5cbiAgICAgIHRoaXMucG9wdXAgPSB3aW5kb3cub3BlbihzdGFydFVybCwgJ29hdXRoJywgZmVhdHVyZXMpO1xuXG4gICAgICBpZiAoIXRoaXMucG9wdXApIHtcbiAgICAgICAgb2JzZXJ2ZXIuZXJyb3Ioe1xuICAgICAgICAgIGNvZGU6ICdQT1BVUF9CTE9DS0VEJyxcbiAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgJ0VsIG5hdmVnYWRvciBibG9xdWXDsyBsYSB2ZW50YW5hIGVtZXJnZW50ZS4gUG9yIGZhdm9yLCBwZXJtaXRlIHBvcHVwcyBwYXJhIGVzdGUgc2l0aW8uJyxcbiAgICAgICAgfSBhcyBPQXV0aEVycm9yKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHt9O1xuICAgICAgfVxuXG4gICAgICAvLyBFc2N1Y2hhciBtZW5zYWplcyBkZWwgcG9wdXBcbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIgPSAoZXZlbnQ6IE1lc3NhZ2VFdmVudCkgPT4ge1xuICAgICAgICAvLyBWYWxpZGFyIG9yaWdlblxuICAgICAgICBpZiAoZXZlbnQub3JpZ2luICE9PSB3aW5kb3cubG9jYXRpb24ub3JpZ2luKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVmFsaWRhciB0aXBvIGRlIG1lbnNhamVcbiAgICAgICAgY29uc3QgZGF0YSA9IGV2ZW50LmRhdGEgYXMgT0F1dGhDYWxsYmFja0RhdGE7XG4gICAgICAgIGlmIChkYXRhPy50eXBlICE9PSAnb2F1dGgtY2FsbGJhY2snKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVmVyaWZpY2FyIGVsIG5vbmNlIGRlbCBmbHVqbyAoTS0wNyk6IHNpIG5vIGNvaW5jaWRlLCBubyBlcyBudWVzdHJvXG4gICAgICAgIC8vIGNhbGxiYWNrIOKGkiBpZ25vcmFyIChubyBjb25zdW1pciBlbCBvYnNlcnZhYmxlKS5cbiAgICAgICAgaWYgKCF0aGlzLmlzTm9uY2VWYWxpZChkYXRhKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIExpbXBpYXJcbiAgICAgICAgdGhpcy5jbGVhbnVwKCk7XG5cbiAgICAgICAgLy8gRW1pdGlyIHJlc3VsdGFkbyBkZW50cm8gZGUgTmdab25lIHBhcmEgdHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgaWYgKGRhdGEuZXJyb3IpIHtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGRhdGEuZXJyb3IpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS50b2tlbnMpIHtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoZGF0YS50b2tlbnMpO1xuICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3Ioe1xuICAgICAgICAgICAgICBjb2RlOiAnSU5WQUxJRF9SRVNQT05TRScsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdSZXNwdWVzdGEgaW52w6FsaWRhIGRlbCBzZXJ2aWRvciBkZSBhdXRlbnRpY2FjacOzbicsXG4gICAgICAgICAgICB9IGFzIE9BdXRoRXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMubWVzc2FnZUhhbmRsZXIpO1xuXG4gICAgICAvLyBQb2xsaW5nIGRlIGxvY2FsU3RvcmFnZSAoQ09PUCB3b3JrYXJvdW5kIC0gbm8gcG9kZW1vcyBkZXRlY3RhciBwb3B1cC5jbG9zZWQpXG4gICAgICAvLyBUYW1iacOpbiB2ZXJpZmljYSBzaSBlbCBwb3B1cCBzZSBjZXJyw7MgbWFudWFsbWVudGVcbiAgICAgIHRoaXMuY2hlY2tDbG9zZWRJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgLy8gUHJpbWVybyB2ZXJpZmljYXIgbG9jYWxTdG9yYWdlIChmdW5jaW9uYSBhdW5xdWUgQ09PUCBibG9xdWVlIHRvZG8pXG4gICAgICAgIGNvbnN0IHN0b3JlZERhdGEgPSB0aGlzLmNoZWNrTG9jYWxTdG9yYWdlRmFsbGJhY2soKTtcbiAgICAgICAgaWYgKHN0b3JlZERhdGEpIHtcbiAgICAgICAgICB0aGlzLmNsZWFudXAoKTtcbiAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHN0b3JlZERhdGEuZXJyb3IpIHtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3Ioc3RvcmVkRGF0YS5lcnJvcik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0b3JlZERhdGEudG9rZW5zKSB7XG4gICAgICAgICAgICAgIC8vIEdhdGUgZGUgZGlhZ27Ds3N0aWNvOiBsYSBtZXRhZGF0YSBkZSB0b2tlbnMgKGtleXMsIHByZXNlbmNpYSB5XG4gICAgICAgICAgICAgIC8vIGxvbmdpdHVkIGRlbCBmaXJlYmFzZVRva2VuKSBubyBkZWJlIGZpbHRyYXJzZSBhIGxhIGNvbnNvbGEgZW5cbiAgICAgICAgICAgICAgLy8gcHJvZHVjY2nDs24gKEw0IGRlbCBhdWRpdCkuIFNvbG8gZW4gZGV2LlxuICAgICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW09BdXRoU2VydmljZV0gUmV0cmlldmVkIHRva2VucyBmcm9tIGxvY2FsU3RvcmFnZSBmYWxsYmFjaycsIHtcbiAgICAgICAgICAgICAgICAgIGtleXM6IE9iamVjdC5rZXlzKHN0b3JlZERhdGEudG9rZW5zKSxcbiAgICAgICAgICAgICAgICAgIGhhc0ZpcmViYXNlVG9rZW46ICEhc3RvcmVkRGF0YS50b2tlbnMuZmlyZWJhc2VUb2tlbixcbiAgICAgICAgICAgICAgICAgIGZpcmViYXNlVG9rZW5MZW5ndGg6IHN0b3JlZERhdGEudG9rZW5zLmZpcmViYXNlVG9rZW4/Lmxlbmd0aCA/PyAwLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoc3RvcmVkRGF0YS50b2tlbnMpO1xuICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3Ioe1xuICAgICAgICAgICAgICAgIGNvZGU6ICdJTlZBTElEX1JFU1BPTlNFJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUmVzcHVlc3RhIGludsOhbGlkYSBkZWwgc2Vydmlkb3IgZGUgYXV0ZW50aWNhY2nDs24nLFxuICAgICAgICAgICAgICB9IGFzIE9BdXRoRXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEludGVudGFyIHZlcmlmaWNhciBzaSBwb3B1cCBzZSBjZXJyw7MgKHB1ZWRlIGZhbGxhciBwb3IgQ09PUClcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAodGhpcy5wb3B1cD8uY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFudXAoKTtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKHtcbiAgICAgICAgICAgICAgICBjb2RlOiAnUE9QVVBfQ0xPU0VEJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnU2UgY2VycsOzIGxhIHZlbnRhbmEgZGUgYXV0ZW50aWNhY2nDs24nLFxuICAgICAgICAgICAgICB9IGFzIE9BdXRoRXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBDT09QIGJsb3F1ZWEgYWNjZXNvIGEgcG9wdXAuY2xvc2VkIC0gaWdub3JhciB5IHNlZ3VpciBjb24gcG9sbGluZ1xuICAgICAgICB9XG4gICAgICB9LCAzMDApO1xuXG4gICAgICAvLyBDbGVhbnVwIGN1YW5kbyBlbCBvYnNlcnZhYmxlIHNlIGRlc3RydXllXG4gICAgICByZXR1cm4gKCkgPT4gdGhpcy5jbGVhbnVwKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pY2lhIGZsdWpvIGRlIGxpbmtpbmcgcGFyYSB2aW5jdWxhciB1biBwcm92ZWVkb3IgYWRpY2lvbmFsLlxuICAgKiBSZXF1aWVyZSBxdWUgZWwgdXN1YXJpbyBlc3TDqSBhdXRlbnRpY2Fkby5cbiAgICpcbiAgICogQHBhcmFtIHByb3ZpZGVyIC0gUHJvdmVlZG9yIE9BdXRoIGEgdmluY3VsYXJcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBxdWUgZW1pdGUgY3VhbmRvIHNlIGNvbXBsZXRhIGVsIGxpbmtpbmdcbiAgICovXG4gIHN0YXJ0TGlua0Zsb3cocHJvdmlkZXI6IE9BdXRoUHJvdmlkZXIpOiBPYnNlcnZhYmxlPE9BdXRoUmVzdWx0PiB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcbiAgICAgIGNvbnN0IHJlZGlyZWN0VXJpID0gYCR7d2luZG93LmxvY2F0aW9uLm9yaWdpbn0vYXV0aC9vYXV0aC9jYWxsYmFja2A7XG4gICAgICBjb25zdCBzdGFydFVybCA9IGAke3RoaXMuY29uZmlnPy5hcGlVcmx9L3YyL2F1dGgvb2F1dGgvbGluay8ke3Byb3ZpZGVyfS9zdGFydD9yZWRpcmVjdF91cmk9JHtlbmNvZGVVUklDb21wb25lbnQocmVkaXJlY3RVcmkpfWA7XG5cbiAgICAgIGNvbnN0IHdpZHRoID0gNTAwO1xuICAgICAgY29uc3QgaGVpZ2h0ID0gNjAwO1xuICAgICAgY29uc3QgbGVmdCA9IHdpbmRvdy5zY3JlZW5YICsgKHdpbmRvdy5vdXRlcldpZHRoIC0gd2lkdGgpIC8gMjtcbiAgICAgIGNvbnN0IHRvcCA9IHdpbmRvdy5zY3JlZW5ZICsgKHdpbmRvdy5vdXRlckhlaWdodCAtIGhlaWdodCkgLyAyO1xuICAgICAgY29uc3QgZmVhdHVyZXMgPSBgd2lkdGg9JHt3aWR0aH0saGVpZ2h0PSR7aGVpZ2h0fSxsZWZ0PSR7bGVmdH0sdG9wPSR7dG9wfSxwb3B1cD15ZXNgO1xuXG4gICAgICB0aGlzLnBvcHVwID0gd2luZG93Lm9wZW4oc3RhcnRVcmwsICdvYXV0aC1saW5rJywgZmVhdHVyZXMpO1xuXG4gICAgICBpZiAoIXRoaXMucG9wdXApIHtcbiAgICAgICAgb2JzZXJ2ZXIuZXJyb3Ioe1xuICAgICAgICAgIGNvZGU6ICdQT1BVUF9CTE9DS0VEJyxcbiAgICAgICAgICBtZXNzYWdlOiAnRWwgbmF2ZWdhZG9yIGJsb3F1ZcOzIGxhIHZlbnRhbmEgZW1lcmdlbnRlJyxcbiAgICAgICAgfSBhcyBPQXV0aEVycm9yKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHt9OyAvLyBjbGVhbnVwIGZ1bmN0aW9uXG4gICAgICB9XG5cbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIgPSAoZXZlbnQ6IE1lc3NhZ2VFdmVudCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQub3JpZ2luICE9PSB3aW5kb3cubG9jYXRpb24ub3JpZ2luKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgZGF0YSA9IGV2ZW50LmRhdGEgYXMgT0F1dGhDYWxsYmFja0RhdGE7XG4gICAgICAgIGlmIChkYXRhPy50eXBlICE9PSAnb2F1dGgtY2FsbGJhY2snKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5jbGVhbnVwKCk7XG5cbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICBpZiAoZGF0YS5lcnJvcikge1xuICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZGF0YS5lcnJvcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoZGF0YS50b2tlbnMgfHwgKHt9IGFzIE9BdXRoUmVzdWx0KSk7XG4gICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMubWVzc2FnZUhhbmRsZXIpO1xuXG4gICAgICB0aGlzLmNoZWNrQ2xvc2VkSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnBvcHVwPy5jbG9zZWQpIHtcbiAgICAgICAgICB0aGlzLmNsZWFudXAoKTtcbiAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3Ioe1xuICAgICAgICAgICAgICBjb2RlOiAnUE9QVVBfQ0xPU0VEJyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ1NlIGNlcnLDsyBsYSB2ZW50YW5hIGRlIGF1dGVudGljYWNpw7NuJyxcbiAgICAgICAgICAgIH0gYXMgT0F1dGhFcnJvcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sIDUwMCk7XG5cbiAgICAgIHJldHVybiAoKSA9PiB0aGlzLmNsZWFudXAoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGxvcyBwcm92ZWVkb3JlcyBPQXV0aCB2aW5jdWxhZG9zIGFsIHVzdWFyaW8uXG4gICAqL1xuICBnZXRMaW5rZWRQcm92aWRlcnMoKTogT2JzZXJ2YWJsZTxMaW5rZWRQcm92aWRlcltdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldDx7IHByb3ZpZGVyczogTGlua2VkUHJvdmlkZXJbXSB9PihgJHt0aGlzLmNvbmZpZz8uYXBpVXJsfS92Mi9hdXRoL29hdXRoL3Byb3ZpZGVyc2ApXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PlxuICAgICAgICAgIHRocm93RXJyb3IoXG4gICAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgIGNvZGU6IGVycm9yLmVycm9yPy5jb2RlIHx8ICdGRVRDSF9FUlJPUicsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IuZXJyb3I/Lm1lc3NhZ2UgfHwgJ0Vycm9yIGFsIG9idGVuZXIgcHJvdmVlZG9yZXMgdmluY3VsYWRvcycsXG4gICAgICAgICAgICAgIH0pIGFzIE9BdXRoRXJyb3JcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICkgYXMgdW5rbm93biBhcyBPYnNlcnZhYmxlPExpbmtlZFByb3ZpZGVyW10+O1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3ZpbmN1bGEgdW4gcHJvdmVlZG9yIE9BdXRoLlxuICAgKi9cbiAgdW5saW5rUHJvdmlkZXIocHJvdmlkZXI6IE9BdXRoUHJvdmlkZXIpOiBPYnNlcnZhYmxlPHsgc3VjY2VzczogYm9vbGVhbiB9PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8eyBzdWNjZXNzOiBib29sZWFuIH0+KGAke3RoaXMuY29uZmlnPy5hcGlVcmx9L3YyL2F1dGgvb2F1dGgvdW5saW5rYCwgeyBwcm92aWRlciB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT5cbiAgICAgICAgICB0aHJvd0Vycm9yKFxuICAgICAgICAgICAgKCkgPT5cbiAgICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgICBjb2RlOiBlcnJvci5lcnJvcj8uY29kZSB8fCAnVU5MSU5LX0VSUk9SJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvci5lcnJvcj8ubWVzc2FnZSB8fCAnRXJyb3IgYWwgZGVzdmluY3VsYXIgcHJvdmVlZG9yJyxcbiAgICAgICAgICAgICAgfSkgYXMgT0F1dGhFcnJvclxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFc3RhYmxlY2UgY29udHJhc2XDsWEgcGFyYSB1c3VhcmlvcyBxdWUgc29sbyB0aWVuZW4gT0F1dGguXG4gICAqL1xuICBzZXRQYXNzd29yZChwYXNzd29yZDogc3RyaW5nKTogT2JzZXJ2YWJsZTx7IHN1Y2Nlc3M6IGJvb2xlYW4gfT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PHsgc3VjY2VzczogYm9vbGVhbiB9PihgJHt0aGlzLmNvbmZpZz8uYXBpVXJsfS92Mi9hdXRoL29hdXRoL3NldC1wYXNzd29yZGAsIHsgcGFzc3dvcmQgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+XG4gICAgICAgICAgdGhyb3dFcnJvcihcbiAgICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgY29kZTogZXJyb3IuZXJyb3I/LmNvZGUgfHwgJ1NFVF9QQVNTV09SRF9FUlJPUicsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IuZXJyb3I/Lm1lc3NhZ2UgfHwgJ0Vycm9yIGFsIGVzdGFibGVjZXIgY29udHJhc2XDsWEnLFxuICAgICAgICAgICAgICB9KSBhcyBPQXV0aEVycm9yXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIGVsIHVzdWFyaW8gdGllbmUgY29udHJhc2XDsWEgZXN0YWJsZWNpZGEuXG4gICAqL1xuICBoYXNQYXNzd29yZCgpOiBPYnNlcnZhYmxlPEhhc1Bhc3N3b3JkUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0PEhhc1Bhc3N3b3JkUmVzcG9uc2U+KGAke3RoaXMuY29uZmlnPy5hcGlVcmx9L3YyL2F1dGgvb2F1dGgvaGFzLXBhc3N3b3JkYClcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+XG4gICAgICAgICAgdGhyb3dFcnJvcihcbiAgICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgY29kZTogZXJyb3IuZXJyb3I/LmNvZGUgfHwgJ0NIRUNLX1BBU1NXT1JEX0VSUk9SJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvci5lcnJvcj8ubWVzc2FnZSB8fCAnRXJyb3IgYWwgdmVyaWZpY2FyIGNvbnRyYXNlw7FhJyxcbiAgICAgICAgICAgICAgfSkgYXMgT0F1dGhFcnJvclxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXZpc2EgbG9jYWxTdG9yYWdlIHBvciBkYXRvcyBkZSBjYWxsYmFjayBPQXV0aCAoZmFsbGJhY2sgcGFyYSBDT09QKS5cbiAgICogU29sbyBhY2VwdGEgZGF0b3MgcmVjaWVudGVzICjDumx0aW1vcyAzMCBzZWd1bmRvcykuXG4gICAqL1xuICBwcml2YXRlIGNoZWNrTG9jYWxTdG9yYWdlRmFsbGJhY2soKTogT0F1dGhDYWxsYmFja0RhdGEgfCBudWxsIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdGltZXN0YW1wID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ29hdXRoX2NhbGxiYWNrX3RpbWVzdGFtcCcpO1xuICAgICAgY29uc3QgZGF0YVN0ciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdvYXV0aF9jYWxsYmFja19kYXRhJyk7XG5cbiAgICAgIGlmICghdGltZXN0YW1wIHx8ICFkYXRhU3RyKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBTb2xvIGFjZXB0YXIgZGF0b3MgZGUgbG9zIMO6bHRpbW9zIDMwIHNlZ3VuZG9zXG4gICAgICBjb25zdCBhZ2UgPSBEYXRlLm5vdygpIC0gcGFyc2VJbnQodGltZXN0YW1wLCAxMCk7XG4gICAgICBpZiAoYWdlID4gMzAwMDApIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1tPQXV0aFNlcnZpY2VdIGxvY2FsU3RvcmFnZSBkYXRhIHRvbyBvbGQsIGlnbm9yaW5nJyk7XG4gICAgICAgIHRoaXMuY2xlYXJMb2NhbFN0b3JhZ2VGYWxsYmFjaygpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZGF0YVN0cikgYXMgT0F1dGhDYWxsYmFja0RhdGE7XG4gICAgICB0aGlzLmNsZWFyTG9jYWxTdG9yYWdlRmFsbGJhY2soKTtcblxuICAgICAgLy8gRWwgY2FtaW5vIGxvY2FsU3RvcmFnZSBlcyBlbCBxdWUgdW4gWFNTIHBvZHLDrWEgZm9yamFyIChNLTA3KS4gRWxcbiAgICAgIC8vIHBvc3RNZXNzYWdlIHlhIHZhbGlkYSBvcmlnaW4gKyB0aXBvOyBhY8OhIHJlcGxpY2Ftb3MgZXNhcyBkZWZlbnNhcyB5XG4gICAgICAvLyBzdW1hbW9zIGxhIHZlcmlmaWNhY2nDs24gZGVsIG5vbmNlIGRlIGZsdWpvICsgZm9ybWEgZGVsIHBheWxvYWQuXG4gICAgICBpZiAoZGF0YT8udHlwZSAhPT0gJ29hdXRoLWNhbGxiYWNrJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5pc05vbmNlVmFsaWQoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuaXNDYWxsYmFja1NoYXBlVmFsaWQoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignW09BdXRoU2VydmljZV0gRXJyb3IgcmVhZGluZyBsb2NhbFN0b3JhZ2UgZmFsbGJhY2s6JywgZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGltcGlhIGRhdG9zIGRlIGZhbGxiYWNrIGRlIGxvY2FsU3RvcmFnZS5cbiAgICovXG4gIHByaXZhdGUgY2xlYXJMb2NhbFN0b3JhZ2VGYWxsYmFjaygpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ29hdXRoX2NhbGxiYWNrX2RhdGEnKTtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdvYXV0aF9jYWxsYmFja190aW1lc3RhbXAnKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIElnbm9yYXIgZXJyb3JlcyBkZSBsaW1waWV6YVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMaW1waWEgcmVjdXJzb3MgZGVsIHBvcHVwLlxuICAgKi9cbiAgcHJpdmF0ZSBjbGVhbnVwKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1lc3NhZ2VIYW5kbGVyKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMubWVzc2FnZUhhbmRsZXIpO1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlciA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2hlY2tDbG9zZWRJbnRlcnZhbCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmNoZWNrQ2xvc2VkSW50ZXJ2YWwpO1xuICAgICAgdGhpcy5jaGVja0Nsb3NlZEludGVydmFsID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wb3B1cCAmJiAhdGhpcy5wb3B1cC5jbG9zZWQpIHtcbiAgICAgIHRoaXMucG9wdXAuY2xvc2UoKTtcbiAgICB9XG4gICAgdGhpcy5wb3B1cCA9IG51bGw7XG4gICAgLy8gRWwgbm9uY2UgeWEgZnVlIHZlcmlmaWNhZG8gKHNpIGNvcnJlc3BvbmTDrWEpIGFudGVzIGRlIGxsZWdhciBhY8OhOyBzZVxuICAgIC8vIGxpbXBpYSBwYXJhIG5vIHJldXNhcmxvIGVuIHVuIGZsdWpvIGZ1dHVybyAoTS0wNykuXG4gICAgdGhpcy5leHBlY3RlZE5vbmNlID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmEgdW4gbm9uY2UgYWxlYXRvcmlvIChDU1BSTkcpIHVybC1zYWZlIHBhcmEgZWwgZmx1am8gT0F1dGggKE0tMDcpLlxuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZU5vbmNlKCk6IHN0cmluZyB7XG4gICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheSgxNik7XG4gICAgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhieXRlcyk7XG4gICAgbGV0IGJpbiA9ICcnO1xuICAgIGJ5dGVzLmZvckVhY2goYiA9PiAoYmluICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYikpKTtcbiAgICAvLyBiYXNlNjR1cmwgc2luIHBhZGRpbmcuXG4gICAgcmV0dXJuIGJ0b2EoYmluKS5yZXBsYWNlKC9cXCsvZywgJy0nKS5yZXBsYWNlKC9cXC8vZywgJ18nKS5yZXBsYWNlKC89KyQvLCAnJyk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2EgcXVlIGVsIGNhbGxiYWNrIHRyYWlnYSBlbCBub25jZSBkZWwgZmx1am8gYWN0dWFsIChNLTA3KS5cbiAgICpcbiAgICogVG9sZXJhbnRlIGEgbGEgdHJhbnNpY2nDs246IHNvbG8gc2UgRVhJR0UgY29pbmNpZGVuY2lhIGN1YW5kbyBlbCBjYWxsYmFja1xuICAgKiB0cmFlIHVuIG5vbmNlLiBTaSBubyBsbyB0cmFlIChiYWNrZW5kIGHDum4gc2luIE0tMDcgZGVzcGxlZ2FkbywgcC5lai4gZGV2KSwgbm9cbiAgICogc2UgYmxvcXVlYSBlbCBsb2dpbi4gQ3VhbmRvIGVsIGJhY2tlbmQgZWNoYSBgY2xpZW50X25vbmNlYCBlbiB0b2RvcyBsYWRvcywgdW5cbiAgICogY2FsbGJhY2sgZm9yamFkbyBjb24gdW4gbm9uY2UgZGlzdGludG8gc8OtIHNlIHJlY2hhemEuIFVuIHBheWxvYWQgZm9yamFkbyBwb3JcbiAgICogWFNTIHF1ZSBPTUlUQSBlbCBub25jZSBubyBzZSBmcmVuYSBwb3IgYWPDoSwgcGVybyBpZ3VhbCBwYXNhIHBvciBsYXNcbiAgICogdmFsaWRhY2lvbmVzIGRlIHRpcG8vZm9ybWEgZGUgYGNoZWNrTG9jYWxTdG9yYWdlRmFsbGJhY2tgLlxuICAgKi9cbiAgcHJpdmF0ZSBpc05vbmNlVmFsaWQoZGF0YTogT0F1dGhDYWxsYmFja0RhdGEpOiBib29sZWFuIHtcbiAgICAvLyBObyBoYXkgZmx1am8gY29uIG5vbmNlIGFjdGl2byAobGVnYWN5IC8gbGluayBmbG93KSDihpIgbm8gYmxvcXVlYXIuXG4gICAgaWYgKCF0aGlzLmV4cGVjdGVkTm9uY2UpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvLyBFbCBjYWxsYmFjayBubyB0cmFlIG5vbmNlIChiYWNrZW5kIHNpbiBNLTA3KSDihpIgbm8gYmxvcXVlYXIgKHRyYW5zaWNpw7NuKS5cbiAgICBpZiAoIWRhdGE/Lm5vbmNlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLy8gTm9uY2UgcHJlc2VudGUg4oaSIGRlYmUgY29pbmNpZGlyIGNvbiBlbCBkZWwgZmx1am8uXG4gICAgcmV0dXJuIGRhdGEubm9uY2UgPT09IHRoaXMuZXhwZWN0ZWROb25jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGEgbGEgZm9ybWEgZGVsIHBheWxvYWQgZGVsIGNhbGxiYWNrIChNLTA3KTogZGViZSBzZXIgdW4gZXJyb3IgbyB0b2tlbnNcbiAgICogY29tbyBvYmpldG8uIEJsb3F1ZWEgaW55ZWNjaW9uZXMgbWFsZm9ybWFkYXMgKHByaW1pdGl2b3MsIHNoYXBlcyBiYXN1cmEpLlxuICAgKi9cbiAgcHJpdmF0ZSBpc0NhbGxiYWNrU2hhcGVWYWxpZChkYXRhOiBPQXV0aENhbGxiYWNrRGF0YSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGhhc0Vycm9yID0gISFkYXRhLmVycm9yICYmIHR5cGVvZiBkYXRhLmVycm9yID09PSAnb2JqZWN0JztcbiAgICBjb25zdCBoYXNUb2tlbnMgPSAhIWRhdGEudG9rZW5zICYmIHR5cGVvZiBkYXRhLnRva2VucyA9PT0gJ29iamVjdCc7XG4gICAgcmV0dXJuIGhhc0Vycm9yIHx8IGhhc1Rva2VucztcbiAgfVxufVxuIl19
399
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvYXV0aC9vYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFVLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLFVBQVUsRUFBVyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBVy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBRTVDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQ0c7QUFFSCxNQUFNLE9BQU8sWUFBWTtJQVl2QixZQUNtRCxNQUFnQyxFQUN6RSxJQUFnQixFQUNoQixNQUFjO1FBRjJCLFdBQU0sR0FBTixNQUFNLENBQTBCO1FBQ3pFLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQWRoQixVQUFLLEdBQWtCLElBQUksQ0FBQztRQUM1QixtQkFBYyxHQUEyQyxJQUFJLENBQUM7UUFDOUQsd0JBQW1CLEdBQTBDLElBQUksQ0FBQztRQUMxRTs7Ozs7V0FLRztRQUNLLGtCQUFhLEdBQWtCLElBQUksQ0FBQztJQU16QyxDQUFDO0lBRUo7Ozs7OztPQU1HO0lBQ0gsU0FBUyxDQUFDLFFBQXVCO1FBQy9CLE9BQU8sSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDL0IseUVBQXlFO1lBQ3pFLDRFQUE0RTtZQUM1RSx5RUFBeUU7WUFDekUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBRTNCLDBCQUEwQjtZQUMxQixNQUFN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MEJBQUksTUFBTTsyQkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QsIE5nWm9uZSwgT3B0aW9uYWwsIGlzRGV2TW9kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVkFMVEVDSF9BVVRIX0NPTkZJRyB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7XG4gIFZhbHRlY2hBdXRoQ29uZmlnLFxuICBPQXV0aFByb3ZpZGVyLFxuICBPQXV0aFJlc3VsdCxcbiAgT0F1dGhFcnJvcixcbiAgT0F1dGhDYWxsYmFja0RhdGEsXG4gIExpbmtlZFByb3ZpZGVyLFxuICBIYXNQYXNzd29yZFJlc3BvbnNlLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG4vKipcbiAqIFNlcnZpY2lvIGRlIE9BdXRoIHBhcmEgbG9naW4gc29jaWFsLlxuICpcbiAqIEltcGxlbWVudGEgZmx1am8gT0F1dGggc2VydmVyLXNpZGUgY29uIHBvcHVwOlxuICogMS4gRnJvbnRlbmQgYWJyZSBwb3B1cCBoYWNpYSBiYWNrZW5kXG4gKiAyLiBCYWNrZW5kIHJlZGlyaWdlIGEgcHJvdmlkZXIgKEdvb2dsZSwgQXBwbGUsIE1pY3Jvc29mdClcbiAqIDMuIFVzdWFyaW8gYXV0b3JpemFcbiAqIDQuIEJhY2tlbmQgaW50ZXJjYW1iaWEgY29kZSwgZ2VuZXJhIEpXVCwgcmVkaXJpZ2UgY29uIHRva2Vuc1xuICogNS4gUG9wdXAgZW52w61hIHRva2VucyBhIHZlbnRhbmEgcGFkcmUgdmlhIHBvc3RNZXNzYWdlXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IE9BdXRoU2VydmljZSwgQXV0aFNlcnZpY2UgfSBmcm9tICd2YWx0ZWNoLWNvbXBvbmVudHMnO1xuICpcbiAqIEBDb21wb25lbnQoey4uLn0pXG4gKiBleHBvcnQgY2xhc3MgTG9naW5Db21wb25lbnQge1xuICogICBwcml2YXRlIG9hdXRoID0gaW5qZWN0KE9BdXRoU2VydmljZSk7XG4gKiAgIHByaXZhdGUgYXV0aCA9IGluamVjdChBdXRoU2VydmljZSk7XG4gKlxuICogICBhc3luYyBsb2dpbldpdGhHb29nbGUoKSB7XG4gKiAgICAgdGhpcy5vYXV0aC5zdGFydEZsb3coJ2dvb2dsZScpLnN1YnNjcmliZSh7XG4gKiAgICAgICBuZXh0OiAocmVzdWx0KSA9PiB7XG4gKiAgICAgICAgIC8vIFRva2VucyByZWNpYmlkb3MsIGd1YXJkYXIgZW4gYXV0aCBzdGF0ZVxuICogICAgICAgICB0aGlzLmF1dGguaGFuZGxlT0F1dGhTdWNjZXNzKHJlc3VsdCk7XG4gKiAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLyddKTtcbiAqICAgICAgIH0sXG4gKiAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gKiAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ09BdXRoIGZhaWxlZDonLCBlcnJvcik7XG4gKiAgICAgICB9XG4gKiAgICAgfSk7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIE9BdXRoU2VydmljZSB7XG4gIHByaXZhdGUgcG9wdXA6IFdpbmRvdyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIG1lc3NhZ2VIYW5kbGVyOiAoKGV2ZW50OiBNZXNzYWdlRXZlbnQpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY2hlY2tDbG9zZWRJbnRlcnZhbDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+IHwgbnVsbCA9IG51bGw7XG4gIC8qKlxuICAgKiBOb25jZSBkZWwgZmx1am8gT0F1dGggZW4gY3Vyc28gKE0tMDcpLiBWaXZlIFNPTE8gZW4gbWVtb3JpYSDigJQgdW4gWFNTIG5vIGxvXG4gICAqIHB1ZWRlIGxlZXIgZGUgbG9jYWxTdG9yYWdlL3Nlc3Npb25TdG9yYWdlLiBWaWFqYSBhbCBiYWNrZW5kIChjbGllbnRfbm9uY2UpLFxuICAgKiB2dWVsdmUgZW4gZWwgY2FsbGJhY2ssIHkgc2UgdmVyaWZpY2EgYWPDoSDihpIgcmVjaGF6YSB1biBvYXV0aF9jYWxsYmFja19kYXRhXG4gICAqIGZvcmphZG8gcG9yIFhTUy5cbiAgICovXG4gIHByaXZhdGUgZXhwZWN0ZWROb25jZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChWQUxURUNIX0FVVEhfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogVmFsdGVjaEF1dGhDb25maWcgfCBudWxsLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lXG4gICkge31cblxuICAvKipcbiAgICogSW5pY2lhIGZsdWpvIE9BdXRoIGVuIHBvcHVwLlxuICAgKiBSZXRvcm5hIE9ic2VydmFibGUgcXVlIGVtaXRlIGN1YW5kbyBlbCB1c3VhcmlvIGNvbXBsZXRhIGVsIGZsdWpvLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvdmlkZXIgLSBQcm92ZWVkb3IgT0F1dGggKCdnb29nbGUnLCAnYXBwbGUnLCAnbWljcm9zb2Z0JylcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBxdWUgZW1pdGUgT0F1dGhSZXN1bHQgbyBlcnJvclxuICAgKi9cbiAgc3RhcnRGbG93KHByb3ZpZGVyOiBPQXV0aFByb3ZpZGVyKTogT2JzZXJ2YWJsZTxPQXV0aFJlc3VsdD4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XG4gICAgICAvLyBOb25jZSBkZSBmbHVqbyAoTS0wNyk6IHZpdmUgc29sbyBlbiBlc3RlIG9iamV0byAobm8gZW4gc3RvcmFnZSksIHZpYWphXG4gICAgICAvLyBhbCBiYWNrZW5kIGVuIGNsaWVudF9ub25jZSB5IHZ1ZWx2ZSBlbiBlbCBjYWxsYmFjay4gRWwgb3BlbmVyIGxvIHZlcmlmaWNhXG4gICAgICAvLyDihpIgdW4gb2F1dGhfY2FsbGJhY2tfZGF0YSBmb3JqYWRvIGVuIGxvY2FsU3RvcmFnZSBwb3IgWFNTIG5vIGxvIGNvbm9jZS5cbiAgICAgIGNvbnN0IG5vbmNlID0gdGhpcy5nZW5lcmF0ZU5vbmNlKCk7XG4gICAgICB0aGlzLmV4cGVjdGVkTm9uY2UgPSBub25jZTtcblxuICAgICAgLy8gQ29uc3RydWlyIFVSTCBkZSBpbmljaW9cbiAgICAgIGNvbnN0IHJlZGlyZWN0VXJpID0gYCR7d2luZG93LmxvY2F0aW9uLm9yaWdpbn0vYXV0aC9vYXV0aC9jYWxsYmFja2A7XG4gICAgICBjb25zdCBzdGFydFVybCA9IGAke3RoaXMuY29uZmlnPy5hcGlVcmx9L3YyL2F1dGgvb2F1dGgvJHtwcm92aWRlcn0vc3RhcnQ/cmVkaXJlY3RfdXJpPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHJlZGlyZWN0VXJpKX0mY2xpZW50X25vbmNlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KG5vbmNlKX1gO1xuXG4gICAgICAvLyBBYnJpciBwb3B1cCBjZW50cmFkb1xuICAgICAgY29uc3Qgd2lkdGggPSA1MDA7XG4gICAgICBjb25zdCBoZWlnaHQgPSA2MDA7XG4gICAgICBjb25zdCBsZWZ0ID0gd2luZG93LnNjcmVlblggKyAod2luZG93Lm91dGVyV2lkdGggLSB3aWR0aCkgLyAyO1xuICAgICAgY29uc3QgdG9wID0gd2luZG93LnNjcmVlblkgKyAod2luZG93Lm91dGVySGVpZ2h0IC0gaGVpZ2h0KSAvIDI7XG4gICAgICBjb25zdCBmZWF0dXJlcyA9IGB3aWR0aD0ke3dpZHRofSxoZWlnaHQ9JHtoZWlnaHR9LGxlZnQ9JHtsZWZ0fSx0b3A9JHt0b3B9LHBvcHVwPXllc2A7XG5cbiAgICAgIHRoaXMucG9wdXAgPSB3aW5kb3cub3BlbihzdGFydFVybCwgJ29hdXRoJywgZmVhdHVyZXMpO1xuXG4gICAgICBpZiAoIXRoaXMucG9wdXApIHtcbiAgICAgICAgb2JzZXJ2ZXIuZXJyb3Ioe1xuICAgICAgICAgIGNvZGU6ICdQT1BVUF9CTE9DS0VEJyxcbiAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgJ0VsIG5hdmVnYWRvciBibG9xdWXDsyBsYSB2ZW50YW5hIGVtZXJnZW50ZS4gUG9yIGZhdm9yLCBwZXJtaXRlIHBvcHVwcyBwYXJhIGVzdGUgc2l0aW8uJyxcbiAgICAgICAgfSBhcyBPQXV0aEVycm9yKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHt9O1xuICAgICAgfVxuXG4gICAgICAvLyBFc2N1Y2hhciBtZW5zYWplcyBkZWwgcG9wdXBcbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIgPSAoZXZlbnQ6IE1lc3NhZ2VFdmVudCkgPT4ge1xuICAgICAgICAvLyBWYWxpZGFyIG9yaWdlblxuICAgICAgICBpZiAoZXZlbnQub3JpZ2luICE9PSB3aW5kb3cubG9jYXRpb24ub3JpZ2luKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVmFsaWRhciB0aXBvIGRlIG1lbnNhamVcbiAgICAgICAgY29uc3QgZGF0YSA9IGV2ZW50LmRhdGEgYXMgT0F1dGhDYWxsYmFja0RhdGE7XG4gICAgICAgIGlmIChkYXRhPy50eXBlICE9PSAnb2F1dGgtY2FsbGJhY2snKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVmVyaWZpY2FyIGVsIG5vbmNlIGRlbCBmbHVqbyAoTS0wNyk6IHNpIG5vIGNvaW5jaWRlLCBubyBlcyBudWVzdHJvXG4gICAgICAgIC8vIGNhbGxiYWNrIOKGkiBpZ25vcmFyIChubyBjb25zdW1pciBlbCBvYnNlcnZhYmxlKS5cbiAgICAgICAgaWYgKCF0aGlzLmlzTm9uY2VWYWxpZChkYXRhKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIExpbXBpYXJcbiAgICAgICAgdGhpcy5jbGVhbnVwKCk7XG5cbiAgICAgICAgLy8gRW1pdGlyIHJlc3VsdGFkbyBkZW50cm8gZGUgTmdab25lIHBhcmEgdHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgaWYgKGRhdGEuZXJyb3IpIHtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGRhdGEuZXJyb3IpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS50b2tlbnMpIHtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoZGF0YS50b2tlbnMpO1xuICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3Ioe1xuICAgICAgICAgICAgICBjb2RlOiAnSU5WQUxJRF9SRVNQT05TRScsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdSZXNwdWVzdGEgaW52w6FsaWRhIGRlbCBzZXJ2aWRvciBkZSBhdXRlbnRpY2FjacOzbicsXG4gICAgICAgICAgICB9IGFzIE9BdXRoRXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMubWVzc2FnZUhhbmRsZXIpO1xuXG4gICAgICAvLyBQb2xsaW5nIGRlIGxvY2FsU3RvcmFnZSAoQ09PUCB3b3JrYXJvdW5kIC0gbm8gcG9kZW1vcyBkZXRlY3RhciBwb3B1cC5jbG9zZWQpXG4gICAgICAvLyBUYW1iacOpbiB2ZXJpZmljYSBzaSBlbCBwb3B1cCBzZSBjZXJyw7MgbWFudWFsbWVudGVcbiAgICAgIHRoaXMuY2hlY2tDbG9zZWRJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgLy8gUHJpbWVybyB2ZXJpZmljYXIgbG9jYWxTdG9yYWdlIChmdW5jaW9uYSBhdW5xdWUgQ09PUCBibG9xdWVlIHRvZG8pXG4gICAgICAgIGNvbnN0IHN0b3JlZERhdGEgPSB0aGlzLmNoZWNrTG9jYWxTdG9yYWdlRmFsbGJhY2soKTtcbiAgICAgICAgaWYgKHN0b3JlZERhdGEpIHtcbiAgICAgICAgICB0aGlzLmNsZWFudXAoKTtcbiAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHN0b3JlZERhdGEuZXJyb3IpIHtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3Ioc3RvcmVkRGF0YS5lcnJvcik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0b3JlZERhdGEudG9rZW5zKSB7XG4gICAgICAgICAgICAgIC8vIEdhdGUgZGUgZGlhZ27Ds3N0aWNvOiBsYSBtZXRhZGF0YSBkZSB0b2tlbnMgKGtleXMsIHByZXNlbmNpYSB5XG4gICAgICAgICAgICAgIC8vIGxvbmdpdHVkIGRlbCBmaXJlYmFzZVRva2VuKSBubyBkZWJlIGZpbHRyYXJzZSBhIGxhIGNvbnNvbGEgZW5cbiAgICAgICAgICAgICAgLy8gcHJvZHVjY2nDs24gKEw0IGRlbCBhdWRpdCkuIFNvbG8gZW4gZGV2LlxuICAgICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW09BdXRoU2VydmljZV0gUmV0cmlldmVkIHRva2VucyBmcm9tIGxvY2FsU3RvcmFnZSBmYWxsYmFjaycsIHtcbiAgICAgICAgICAgICAgICAgIGtleXM6IE9iamVjdC5rZXlzKHN0b3JlZERhdGEudG9rZW5zKSxcbiAgICAgICAgICAgICAgICAgIGhhc0ZpcmViYXNlVG9rZW46ICEhc3RvcmVkRGF0YS50b2tlbnMuZmlyZWJhc2VUb2tlbixcbiAgICAgICAgICAgICAgICAgIGZpcmViYXNlVG9rZW5MZW5ndGg6IHN0b3JlZERhdGEudG9rZW5zLmZpcmViYXNlVG9rZW4/Lmxlbmd0aCA/PyAwLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoc3RvcmVkRGF0YS50b2tlbnMpO1xuICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3Ioe1xuICAgICAgICAgICAgICAgIGNvZGU6ICdJTlZBTElEX1JFU1BPTlNFJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUmVzcHVlc3RhIGludsOhbGlkYSBkZWwgc2Vydmlkb3IgZGUgYXV0ZW50aWNhY2nDs24nLFxuICAgICAgICAgICAgICB9IGFzIE9BdXRoRXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEludGVudGFyIHZlcmlmaWNhciBzaSBwb3B1cCBzZSBjZXJyw7MgKHB1ZWRlIGZhbGxhciBwb3IgQ09PUClcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAodGhpcy5wb3B1cD8uY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFudXAoKTtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKHtcbiAgICAgICAgICAgICAgICBjb2RlOiAnUE9QVVBfQ0xPU0VEJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnU2UgY2VycsOzIGxhIHZlbnRhbmEgZGUgYXV0ZW50aWNhY2nDs24nLFxuICAgICAgICAgICAgICB9IGFzIE9BdXRoRXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBDT09QIGJsb3F1ZWEgYWNjZXNvIGEgcG9wdXAuY2xvc2VkIC0gaWdub3JhciB5IHNlZ3VpciBjb24gcG9sbGluZ1xuICAgICAgICB9XG4gICAgICB9LCAzMDApO1xuXG4gICAgICAvLyBDbGVhbnVwIGN1YW5kbyBlbCBvYnNlcnZhYmxlIHNlIGRlc3RydXllXG4gICAgICByZXR1cm4gKCkgPT4gdGhpcy5jbGVhbnVwKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pY2lhIGZsdWpvIGRlIGxpbmtpbmcgcGFyYSB2aW5jdWxhciB1biBwcm92ZWVkb3IgYWRpY2lvbmFsLlxuICAgKiBSZXF1aWVyZSBxdWUgZWwgdXN1YXJpbyBlc3TDqSBhdXRlbnRpY2Fkby5cbiAgICpcbiAgICogQHBhcmFtIHByb3ZpZGVyIC0gUHJvdmVlZG9yIE9BdXRoIGEgdmluY3VsYXJcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBxdWUgZW1pdGUgY3VhbmRvIHNlIGNvbXBsZXRhIGVsIGxpbmtpbmdcbiAgICovXG4gIHN0YXJ0TGlua0Zsb3cocHJvdmlkZXI6IE9BdXRoUHJvdmlkZXIpOiBPYnNlcnZhYmxlPE9BdXRoUmVzdWx0PiB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcbiAgICAgIGNvbnN0IHJlZGlyZWN0VXJpID0gYCR7d2luZG93LmxvY2F0aW9uLm9yaWdpbn0vYXV0aC9vYXV0aC9jYWxsYmFja2A7XG4gICAgICBjb25zdCBzdGFydFVybCA9IGAke3RoaXMuY29uZmlnPy5hcGlVcmx9L3YyL2F1dGgvb2F1dGgvbGluay8ke3Byb3ZpZGVyfS9zdGFydD9yZWRpcmVjdF91cmk9JHtlbmNvZGVVUklDb21wb25lbnQocmVkaXJlY3RVcmkpfWA7XG5cbiAgICAgIGNvbnN0IHdpZHRoID0gNTAwO1xuICAgICAgY29uc3QgaGVpZ2h0ID0gNjAwO1xuICAgICAgY29uc3QgbGVmdCA9IHdpbmRvdy5zY3JlZW5YICsgKHdpbmRvdy5vdXRlcldpZHRoIC0gd2lkdGgpIC8gMjtcbiAgICAgIGNvbnN0IHRvcCA9IHdpbmRvdy5zY3JlZW5ZICsgKHdpbmRvdy5vdXRlckhlaWdodCAtIGhlaWdodCkgLyAyO1xuICAgICAgY29uc3QgZmVhdHVyZXMgPSBgd2lkdGg9JHt3aWR0aH0saGVpZ2h0PSR7aGVpZ2h0fSxsZWZ0PSR7bGVmdH0sdG9wPSR7dG9wfSxwb3B1cD15ZXNgO1xuXG4gICAgICB0aGlzLnBvcHVwID0gd2luZG93Lm9wZW4oc3RhcnRVcmwsICdvYXV0aC1saW5rJywgZmVhdHVyZXMpO1xuXG4gICAgICBpZiAoIXRoaXMucG9wdXApIHtcbiAgICAgICAgb2JzZXJ2ZXIuZXJyb3Ioe1xuICAgICAgICAgIGNvZGU6ICdQT1BVUF9CTE9DS0VEJyxcbiAgICAgICAgICBtZXNzYWdlOiAnRWwgbmF2ZWdhZG9yIGJsb3F1ZcOzIGxhIHZlbnRhbmEgZW1lcmdlbnRlJyxcbiAgICAgICAgfSBhcyBPQXV0aEVycm9yKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHt9OyAvLyBjbGVhbnVwIGZ1bmN0aW9uXG4gICAgICB9XG5cbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIgPSAoZXZlbnQ6IE1lc3NhZ2VFdmVudCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQub3JpZ2luICE9PSB3aW5kb3cubG9jYXRpb24ub3JpZ2luKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgZGF0YSA9IGV2ZW50LmRhdGEgYXMgT0F1dGhDYWxsYmFja0RhdGE7XG4gICAgICAgIGlmIChkYXRhPy50eXBlICE9PSAnb2F1dGgtY2FsbGJhY2snKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5jbGVhbnVwKCk7XG5cbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICBpZiAoZGF0YS5lcnJvcikge1xuICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZGF0YS5lcnJvcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoZGF0YS50b2tlbnMgfHwgKHt9IGFzIE9BdXRoUmVzdWx0KSk7XG4gICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMubWVzc2FnZUhhbmRsZXIpO1xuXG4gICAgICB0aGlzLmNoZWNrQ2xvc2VkSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnBvcHVwPy5jbG9zZWQpIHtcbiAgICAgICAgICB0aGlzLmNsZWFudXAoKTtcbiAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3Ioe1xuICAgICAgICAgICAgICBjb2RlOiAnUE9QVVBfQ0xPU0VEJyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ1NlIGNlcnLDsyBsYSB2ZW50YW5hIGRlIGF1dGVudGljYWNpw7NuJyxcbiAgICAgICAgICAgIH0gYXMgT0F1dGhFcnJvcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sIDUwMCk7XG5cbiAgICAgIHJldHVybiAoKSA9PiB0aGlzLmNsZWFudXAoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGxvcyBwcm92ZWVkb3JlcyBPQXV0aCB2aW5jdWxhZG9zIGFsIHVzdWFyaW8uXG4gICAqL1xuICBnZXRMaW5rZWRQcm92aWRlcnMoKTogT2JzZXJ2YWJsZTxMaW5rZWRQcm92aWRlcltdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldDx7IHByb3ZpZGVyczogTGlua2VkUHJvdmlkZXJbXSB9PihgJHt0aGlzLmNvbmZpZz8uYXBpVXJsfS92Mi9hdXRoL29hdXRoL3Byb3ZpZGVyc2ApXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PlxuICAgICAgICAgIHRocm93RXJyb3IoXG4gICAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgIGNvZGU6IGVycm9yLmVycm9yPy5jb2RlIHx8ICdGRVRDSF9FUlJPUicsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IuZXJyb3I/Lm1lc3NhZ2UgfHwgJ0Vycm9yIGFsIG9idGVuZXIgcHJvdmVlZG9yZXMgdmluY3VsYWRvcycsXG4gICAgICAgICAgICAgIH0pIGFzIE9BdXRoRXJyb3JcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICkgYXMgdW5rbm93biBhcyBPYnNlcnZhYmxlPExpbmtlZFByb3ZpZGVyW10+O1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3ZpbmN1bGEgdW4gcHJvdmVlZG9yIE9BdXRoLlxuICAgKi9cbiAgdW5saW5rUHJvdmlkZXIocHJvdmlkZXI6IE9BdXRoUHJvdmlkZXIpOiBPYnNlcnZhYmxlPHsgc3VjY2VzczogYm9vbGVhbiB9PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8eyBzdWNjZXNzOiBib29sZWFuIH0+KGAke3RoaXMuY29uZmlnPy5hcGlVcmx9L3YyL2F1dGgvb2F1dGgvdW5saW5rYCwgeyBwcm92aWRlciB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT5cbiAgICAgICAgICB0aHJvd0Vycm9yKFxuICAgICAgICAgICAgKCkgPT5cbiAgICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgICBjb2RlOiBlcnJvci5lcnJvcj8uY29kZSB8fCAnVU5MSU5LX0VSUk9SJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvci5lcnJvcj8ubWVzc2FnZSB8fCAnRXJyb3IgYWwgZGVzdmluY3VsYXIgcHJvdmVlZG9yJyxcbiAgICAgICAgICAgICAgfSkgYXMgT0F1dGhFcnJvclxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFc3RhYmxlY2UgY29udHJhc2XDsWEgcGFyYSB1c3VhcmlvcyBxdWUgc29sbyB0aWVuZW4gT0F1dGguXG4gICAqL1xuICBzZXRQYXNzd29yZChwYXNzd29yZDogc3RyaW5nKTogT2JzZXJ2YWJsZTx7IHN1Y2Nlc3M6IGJvb2xlYW4gfT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PHsgc3VjY2VzczogYm9vbGVhbiB9PihgJHt0aGlzLmNvbmZpZz8uYXBpVXJsfS92Mi9hdXRoL29hdXRoL3NldC1wYXNzd29yZGAsIHsgcGFzc3dvcmQgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+XG4gICAgICAgICAgdGhyb3dFcnJvcihcbiAgICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgY29kZTogZXJyb3IuZXJyb3I/LmNvZGUgfHwgJ1NFVF9QQVNTV09SRF9FUlJPUicsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IuZXJyb3I/Lm1lc3NhZ2UgfHwgJ0Vycm9yIGFsIGVzdGFibGVjZXIgY29udHJhc2XDsWEnLFxuICAgICAgICAgICAgICB9KSBhcyBPQXV0aEVycm9yXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIGVsIHVzdWFyaW8gdGllbmUgY29udHJhc2XDsWEgZXN0YWJsZWNpZGEuXG4gICAqL1xuICBoYXNQYXNzd29yZCgpOiBPYnNlcnZhYmxlPEhhc1Bhc3N3b3JkUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0PEhhc1Bhc3N3b3JkUmVzcG9uc2U+KGAke3RoaXMuY29uZmlnPy5hcGlVcmx9L3YyL2F1dGgvb2F1dGgvaGFzLXBhc3N3b3JkYClcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+XG4gICAgICAgICAgdGhyb3dFcnJvcihcbiAgICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgY29kZTogZXJyb3IuZXJyb3I/LmNvZGUgfHwgJ0NIRUNLX1BBU1NXT1JEX0VSUk9SJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvci5lcnJvcj8ubWVzc2FnZSB8fCAnRXJyb3IgYWwgdmVyaWZpY2FyIGNvbnRyYXNlw7FhJyxcbiAgICAgICAgICAgICAgfSkgYXMgT0F1dGhFcnJvclxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXZpc2EgbG9jYWxTdG9yYWdlIHBvciBkYXRvcyBkZSBjYWxsYmFjayBPQXV0aCAoZmFsbGJhY2sgcGFyYSBDT09QKS5cbiAgICogU29sbyBhY2VwdGEgZGF0b3MgcmVjaWVudGVzICjDumx0aW1vcyAzMCBzZWd1bmRvcykuXG4gICAqL1xuICBwcml2YXRlIGNoZWNrTG9jYWxTdG9yYWdlRmFsbGJhY2soKTogT0F1dGhDYWxsYmFja0RhdGEgfCBudWxsIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdGltZXN0YW1wID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ29hdXRoX2NhbGxiYWNrX3RpbWVzdGFtcCcpO1xuICAgICAgY29uc3QgZGF0YVN0ciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdvYXV0aF9jYWxsYmFja19kYXRhJyk7XG5cbiAgICAgIGlmICghdGltZXN0YW1wIHx8ICFkYXRhU3RyKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBTb2xvIGFjZXB0YXIgZGF0b3MgZGUgbG9zIMO6bHRpbW9zIDMwIHNlZ3VuZG9zXG4gICAgICBjb25zdCBhZ2UgPSBEYXRlLm5vdygpIC0gcGFyc2VJbnQodGltZXN0YW1wLCAxMCk7XG4gICAgICBpZiAoYWdlID4gMzAwMDApIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1tPQXV0aFNlcnZpY2VdIGxvY2FsU3RvcmFnZSBkYXRhIHRvbyBvbGQsIGlnbm9yaW5nJyk7XG4gICAgICAgIHRoaXMuY2xlYXJMb2NhbFN0b3JhZ2VGYWxsYmFjaygpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZGF0YVN0cikgYXMgT0F1dGhDYWxsYmFja0RhdGE7XG4gICAgICB0aGlzLmNsZWFyTG9jYWxTdG9yYWdlRmFsbGJhY2soKTtcblxuICAgICAgLy8gRWwgY2FtaW5vIGxvY2FsU3RvcmFnZSBlcyBlbCBxdWUgdW4gWFNTIHBvZHLDrWEgZm9yamFyIChNLTA3KS4gRWxcbiAgICAgIC8vIHBvc3RNZXNzYWdlIHlhIHZhbGlkYSBvcmlnaW4gKyB0aXBvOyBhY8OhIHJlcGxpY2Ftb3MgZXNhcyBkZWZlbnNhcyB5XG4gICAgICAvLyBzdW1hbW9zIGxhIHZlcmlmaWNhY2nDs24gZGVsIG5vbmNlIGRlIGZsdWpvICsgZm9ybWEgZGVsIHBheWxvYWQuXG4gICAgICBpZiAoZGF0YT8udHlwZSAhPT0gJ29hdXRoLWNhbGxiYWNrJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5pc05vbmNlVmFsaWQoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuaXNDYWxsYmFja1NoYXBlVmFsaWQoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignW09BdXRoU2VydmljZV0gRXJyb3IgcmVhZGluZyBsb2NhbFN0b3JhZ2UgZmFsbGJhY2s6JywgZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGltcGlhIGRhdG9zIGRlIGZhbGxiYWNrIGRlIGxvY2FsU3RvcmFnZS5cbiAgICovXG4gIHByaXZhdGUgY2xlYXJMb2NhbFN0b3JhZ2VGYWxsYmFjaygpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ29hdXRoX2NhbGxiYWNrX2RhdGEnKTtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdvYXV0aF9jYWxsYmFja190aW1lc3RhbXAnKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIElnbm9yYXIgZXJyb3JlcyBkZSBsaW1waWV6YVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMaW1waWEgcmVjdXJzb3MgZGVsIHBvcHVwLlxuICAgKi9cbiAgcHJpdmF0ZSBjbGVhbnVwKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1lc3NhZ2VIYW5kbGVyKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMubWVzc2FnZUhhbmRsZXIpO1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlciA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2hlY2tDbG9zZWRJbnRlcnZhbCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmNoZWNrQ2xvc2VkSW50ZXJ2YWwpO1xuICAgICAgdGhpcy5jaGVja0Nsb3NlZEludGVydmFsID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wb3B1cCAmJiAhdGhpcy5wb3B1cC5jbG9zZWQpIHtcbiAgICAgIHRoaXMucG9wdXAuY2xvc2UoKTtcbiAgICB9XG4gICAgdGhpcy5wb3B1cCA9IG51bGw7XG4gICAgLy8gRWwgbm9uY2UgeWEgZnVlIHZlcmlmaWNhZG8gKHNpIGNvcnJlc3BvbmTDrWEpIGFudGVzIGRlIGxsZWdhciBhY8OhOyBzZVxuICAgIC8vIGxpbXBpYSBwYXJhIG5vIHJldXNhcmxvIGVuIHVuIGZsdWpvIGZ1dHVybyAoTS0wNykuXG4gICAgdGhpcy5leHBlY3RlZE5vbmNlID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmEgdW4gbm9uY2UgYWxlYXRvcmlvIChDU1BSTkcpIHVybC1zYWZlIHBhcmEgZWwgZmx1am8gT0F1dGggKE0tMDcpLlxuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZU5vbmNlKCk6IHN0cmluZyB7XG4gICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheSgxNik7XG4gICAgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhieXRlcyk7XG4gICAgbGV0IGJpbiA9ICcnO1xuICAgIGJ5dGVzLmZvckVhY2goYiA9PiAoYmluICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYikpKTtcbiAgICAvLyBiYXNlNjR1cmwgc2luIHBhZGRpbmcuXG4gICAgcmV0dXJuIGJ0b2EoYmluKS5yZXBsYWNlKC9cXCsvZywgJy0nKS5yZXBsYWNlKC9cXC8vZywgJ18nKS5yZXBsYWNlKC89KyQvLCAnJyk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2EgcXVlIGVsIGNhbGxiYWNrIHRyYWlnYSBlbCBub25jZSBkZWwgZmx1am8gYWN0dWFsIChNLTA3KS5cbiAgICpcbiAgICogRXN0cmljdG86IHNpIGVsIG9wZW5lciBnZW5lcsOzIHVuIG5vbmNlIChzaWVtcHJlLCBlbiBjbGllbnRlcyBudWV2b3MpIGV4aWdlXG4gICAqIHF1ZSBlbCBjYWxsYmFjayBsbyB0cmFpZ2EgeSBjb2luY2lkYS4gVW4gcGF5bG9hZCBmb3JqYWRvIGVuIGxvY2FsU3RvcmFnZSBwb3JcbiAgICogWFNTIG5vIGNvbm9jZSBlbCBub25jZSAodml2ZSBzb2xvIGVuIG1lbW9yaWEpIOKGkiBzZSByZWNoYXphLlxuICAgKlxuICAgKiDimqDvuI8gUmVxdWllcmUgcXVlIGVsIGJhY2tlbmQgeWEgZWNoZSBgY2xpZW50X25vbmNlYCBlbiBlbCBjYWxsYmFjay4gRGVwbG95OlxuICAgKiBiYWNrZW5kIEFOVEVTIHF1ZSBlbCBmcm9udGVuZCwgc2kgbm8gZXN0ZSBjaGVjayByZWNoYXphIGNhbGxiYWNrcyBsZWfDrXRpbW9zXG4gICAqIChzaW4gbm9uY2UpIGR1cmFudGUgbGEgdmVudGFuYSBkZSB0cmFuc2ljacOzbi5cbiAgICovXG4gIHByaXZhdGUgaXNOb25jZVZhbGlkKGRhdGE6IE9BdXRoQ2FsbGJhY2tEYXRhKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmV4cGVjdGVkTm9uY2UpIHtcbiAgICAgIC8vIE5vIGhheSBmbHVqbyBjb24gbm9uY2UgYWN0aXZvIChjYXNvIGxlZ2FjeSAvIGxpbmsgZmxvdykg4oaSIG5vIGJsb3F1ZWFyLlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBkYXRhPy5ub25jZSA9PT0gdGhpcy5leHBlY3RlZE5vbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYSBsYSBmb3JtYSBkZWwgcGF5bG9hZCBkZWwgY2FsbGJhY2sgKE0tMDcpOiBkZWJlIHNlciB1biBlcnJvciBvIHRva2Vuc1xuICAgKiBjb21vIG9iamV0by4gQmxvcXVlYSBpbnllY2Npb25lcyBtYWxmb3JtYWRhcyAocHJpbWl0aXZvcywgc2hhcGVzIGJhc3VyYSkuXG4gICAqL1xuICBwcml2YXRlIGlzQ2FsbGJhY2tTaGFwZVZhbGlkKGRhdGE6IE9BdXRoQ2FsbGJhY2tEYXRhKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaGFzRXJyb3IgPSAhIWRhdGEuZXJyb3IgJiYgdHlwZW9mIGRhdGEuZXJyb3IgPT09ICdvYmplY3QnO1xuICAgIGNvbnN0IGhhc1Rva2VucyA9ICEhZGF0YS50b2tlbnMgJiYgdHlwZW9mIGRhdGEudG9rZW5zID09PSAnb2JqZWN0JztcbiAgICByZXR1cm4gaGFzRXJyb3IgfHwgaGFzVG9rZW5zO1xuICB9XG59XG4iXX0=
@@ -30,7 +30,8 @@ export class AuthStorageService {
30
30
  return;
31
31
  try {
32
32
  localStorage.setItem(this.keys.ACCESS_TOKEN, state.accessToken);
33
- localStorage.setItem(this.keys.REFRESH_TOKEN, state.refreshToken);
33
+ // H-05: el refresh token NO se persiste en localStorage — vive en una
34
+ // cookie HttpOnly que el backend emite. Así un XSS no puede exfiltrarlo.
34
35
  localStorage.setItem(this.keys.ROLES, JSON.stringify(state.roles));
35
36
  localStorage.setItem(this.keys.PERMISSIONS, JSON.stringify(state.permissions));
36
37
  localStorage.setItem(this.keys.IS_SUPER_ADMIN, String(state.isSuperAdmin));
@@ -88,15 +89,10 @@ export class AuthStorageService {
88
89
  /**
89
90
  * Guarda el refresh token (token rotation).
90
91
  */
91
- saveRefreshToken(token) {
92
- if (!this.isBrowser)
93
- return;
94
- try {
95
- localStorage.setItem(this.keys.REFRESH_TOKEN, token);
96
- }
97
- catch (e) {
98
- console.warn('[ValtechAuth] Error guardando refresh token:', e);
99
- }
92
+ saveRefreshToken(_token) {
93
+ // H-05: no-op. El refresh token ya no se persiste en localStorage; lo
94
+ // transporta una cookie HttpOnly emitida por el backend. Se mantiene el
95
+ // método para no romper llamadores existentes durante la transición.
100
96
  }
101
97
  /**
102
98
  * Guarda los permisos actualizados.
@@ -178,4 +174,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
178
174
  type: Inject,
179
175
  args: [PLATFORM_ID]
180
176
  }] }] });
181
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9hdXRoL3N0b3JhZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxVQUFVLENBQUM7O0FBZS9DOztHQUVHO0FBRUgsTUFBTSxPQUFPLGtCQUFrQjtJQUk3QixZQUNtRCxNQUFnQyxFQUM1RCxVQUFrQjtRQURVLFdBQU0sR0FBTixNQUFNLENBQTBCO1FBR2pGLElBQUksQ0FBQyxTQUFTLEdBQUcsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksU0FBUyxFQUFFLEVBQUUsQ0FBQztZQUNoQyxPQUFPLENBQUMsSUFBSSxDQUNWLG1GQUFtRixDQUNwRixDQUFDO1FBQ0osQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsYUFBYSxJQUFJLGVBQWUsQ0FBQztRQUM3RCxJQUFJLENBQUMsSUFBSSxHQUFHO1lBQ1YsWUFBWSxFQUFFLEdBQUcsTUFBTSxjQUFjO1lBQ3JDLGFBQWEsRUFBRSxHQUFHLE1BQU0sZUFBZTtZQUN2QyxLQUFLLEVBQUUsR0FBRyxNQUFNLE9BQU87WUFDdkIsV0FBVyxFQUFFLEdBQUcsTUFBTSxhQUFhO1lBQ25DLGNBQWMsRUFBRSxHQUFHLE1BQU0sZ0JBQWdCO1lBQ3pDLFVBQVUsRUFBRSxHQUFHLE1BQU0sWUFBWTtTQUNsQyxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsU0FBUyxDQUFDLEtBQXNC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MkJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwsIFBMQVRGT1JNX0lELCBpc0Rldk1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFZBTFRFQ0hfQVVUSF9DT05GSUcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBTdG9yZWRBdXRoU3RhdGUsIEdldFBlcm1pc3Npb25zUmVzcG9uc2UsIFZhbHRlY2hBdXRoQ29uZmlnIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogQ2xhdmVzIGRlIHN0b3JhZ2UgcGFyYSBhdXRlbnRpY2FjacOzbi5cbiAqL1xuaW50ZXJmYWNlIFN0b3JhZ2VLZXlzIHtcbiAgQUNDRVNTX1RPS0VOOiBzdHJpbmc7XG4gIFJFRlJFU0hfVE9LRU46IHN0cmluZztcbiAgUk9MRVM6IHN0cmluZztcbiAgUEVSTUlTU0lPTlM6IHN0cmluZztcbiAgSVNfU1VQRVJfQURNSU46IHN0cmluZztcbiAgRVhQSVJFU19BVDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNlcnZpY2lvIHBhcmEgcGVyc2lzdGVuY2lhIGRlIGVzdGFkbyBkZSBhdXRlbnRpY2FjacOzbiBlbiBsb2NhbFN0b3JhZ2UuXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQXV0aFN0b3JhZ2VTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBrZXlzOiBTdG9yYWdlS2V5cztcbiAgcHJpdmF0ZSByZWFkb25seSBpc0Jyb3dzZXI6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChWQUxURUNIX0FVVEhfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogVmFsdGVjaEF1dGhDb25maWcgfCBudWxsLFxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHBsYXRmb3JtSWQ6IE9iamVjdFxuICApIHtcbiAgICB0aGlzLmlzQnJvd3NlciA9IGlzUGxhdGZvcm1Ccm93c2VyKHBsYXRmb3JtSWQpO1xuICAgIGlmICghdGhpcy5jb25maWcgJiYgaXNEZXZNb2RlKCkpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1t2YWx0ZWNoLWNvbXBvbmVudHNdIEF1dGhTdG9yYWdlU2VydmljZTogcHJvdmlkZVZhbHRlY2hBdXRoKCkgbm8gZXN0w6EgZW4gbWFpbi50cy4nXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBwcmVmaXggPSB0aGlzLmNvbmZpZz8uc3RvcmFnZVByZWZpeCB8fCAndmFsdGVjaF9hdXRoXyc7XG4gICAgdGhpcy5rZXlzID0ge1xuICAgICAgQUNDRVNTX1RPS0VOOiBgJHtwcmVmaXh9YWNjZXNzX3Rva2VuYCxcbiAgICAgIFJFRlJFU0hfVE9LRU46IGAke3ByZWZpeH1yZWZyZXNoX3Rva2VuYCxcbiAgICAgIFJPTEVTOiBgJHtwcmVmaXh9cm9sZXNgLFxuICAgICAgUEVSTUlTU0lPTlM6IGAke3ByZWZpeH1wZXJtaXNzaW9uc2AsXG4gICAgICBJU19TVVBFUl9BRE1JTjogYCR7cHJlZml4fWlzX3N1cGVyX2FkbWluYCxcbiAgICAgIEVYUElSRVNfQVQ6IGAke3ByZWZpeH1leHBpcmVzX2F0YCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEd1YXJkYSBlbCBlc3RhZG8gY29tcGxldG8gZGUgYXV0ZW50aWNhY2nDs24uXG4gICAqL1xuICBzYXZlU3RhdGUoc3RhdGU6IFN0b3JlZEF1dGhTdGF0ZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0Jyb3dzZXIpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5rZXlzLkFDQ0VTU19UT0tFTiwgc3RhdGUuYWNjZXNzVG9rZW4pO1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5rZXlzLlJFRlJFU0hfVE9LRU4sIHN0YXRlLnJlZnJlc2hUb2tlbik7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmtleXMuUk9MRVMsIEpTT04uc3RyaW5naWZ5KHN0YXRlLnJvbGVzKSk7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmtleXMuUEVSTUlTU0lPTlMsIEpTT04uc3RyaW5naWZ5KHN0YXRlLnBlcm1pc3Npb25zKSk7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmtleXMuSVNfU1VQRVJfQURNSU4sIFN0cmluZyhzdGF0ZS5pc1N1cGVyQWRtaW4pKTtcbiAgICAgIGlmIChzdGF0ZS5leHBpcmVzQXQpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5rZXlzLkVYUElSRVNfQVQsIFN0cmluZyhzdGF0ZS5leHBpcmVzQXQpKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tWYWx0ZWNoQXV0aF0gRXJyb3IgZ3VhcmRhbmRvIGVzdGFkbyBlbiBzdG9yYWdlOicsIGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYXJnYSBlbCBlc3RhZG8gZGUgYXV0ZW50aWNhY2nDs24gZGVzZGUgc3RvcmFnZS5cbiAgICovXG4gIGxvYWRTdGF0ZSgpOiBQYXJ0aWFsPFN0b3JlZEF1dGhTdGF0ZT4ge1xuICAgIGlmICghdGhpcy5pc0Jyb3dzZXIpIHJldHVybiB7fTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmtleXMuQUNDRVNTX1RPS0VOKTtcbiAgICAgIGNvbnN0IHJlZnJlc2hUb2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMua2V5cy5SRUZSRVNIX1RPS0VOKTtcbiAgICAgIGNvbnN0IHJvbGVzSnNvbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMua2V5cy5ST0xFUyk7XG4gICAgICBjb25zdCBwZXJtaXNzaW9uc0pzb24gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmtleXMuUEVSTUlTU0lPTlMpO1xuICAgICAgY29uc3QgaXNTdXBlckFkbWluID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5rZXlzLklTX1NVUEVSX0FETUlOKSA9PT0gJ3RydWUnO1xuICAgICAgY29uc3QgZXhwaXJlc0F0U3RyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5rZXlzLkVYUElSRVNfQVQpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBhY2Nlc3NUb2tlbjogYWNjZXNzVG9rZW4gfHwgdW5kZWZpbmVkLFxuICAgICAgICByZWZyZXNoVG9rZW46IHJlZnJlc2hUb2tlbiB8fCB1bmRlZmluZWQsXG4gICAgICAgIHJvbGVzOiByb2xlc0pzb24gPyBKU09OLnBhcnNlKHJvbGVzSnNvbikgOiBbXSxcbiAgICAgICAgcGVybWlzc2lvbnM6IHBlcm1pc3Npb25zSnNvbiA/IEpTT04ucGFyc2UocGVybWlzc2lvbnNKc29uKSA6IFtdLFxuICAgICAgICBpc1N1cGVyQWRtaW4sXG4gICAgICAgIGV4cGlyZXNBdDogZXhwaXJlc0F0U3RyID8gTnVtYmVyKGV4cGlyZXNBdFN0cikgOiB1bmRlZmluZWQsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignW1ZhbHRlY2hBdXRoXSBFcnJvciBjYXJnYW5kbyBlc3RhZG8gZGVzZGUgc3RvcmFnZTonLCBlKTtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR3VhcmRhIHNvbG8gZWwgYWNjZXNzIHRva2VuLlxuICAgKi9cbiAgc2F2ZUFjY2Vzc1Rva2VuKHRva2VuOiBzdHJpbmcsIGV4cGlyZXNBdD86IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0Jyb3dzZXIpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5rZXlzLkFDQ0VTU19UT0tFTiwgdG9rZW4pO1xuICAgICAgaWYgKGV4cGlyZXNBdCkge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmtleXMuRVhQSVJFU19BVCwgU3RyaW5nKGV4cGlyZXNBdCkpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignW1ZhbHRlY2hBdXRoXSBFcnJvciBndWFyZGFuZG8gYWNjZXNzIHRva2VuOicsIGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHdWFyZGEgZWwgcmVmcmVzaCB0b2tlbiAodG9rZW4gcm90YXRpb24pLlxuICAgKi9cbiAgc2F2ZVJlZnJlc2hUb2tlbih0b2tlbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzQnJvd3NlcikgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmtleXMuUkVGUkVTSF9UT0tFTiwgdG9rZW4pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignW1ZhbHRlY2hBdXRoXSBFcnJvciBndWFyZGFuZG8gcmVmcmVzaCB0b2tlbjonLCBlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR3VhcmRhIGxvcyBwZXJtaXNvcyBhY3R1YWxpemFkb3MuXG4gICAqL1xuICBzYXZlUGVybWlzc2lvbnMocmVzcG9uc2U6IEdldFBlcm1pc3Npb25zUmVzcG9uc2UpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNCcm93c2VyKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMua2V5cy5ST0xFUywgSlNPTi5zdHJpbmdpZnkocmVzcG9uc2Uucm9sZXMpKTtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMua2V5cy5QRVJNSVNTSU9OUywgSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UucGVybWlzc2lvbnMpKTtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMua2V5cy5JU19TVVBFUl9BRE1JTiwgU3RyaW5nKHJlc3BvbnNlLmlzU3VwZXJBZG1pbikpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignW1ZhbHRlY2hBdXRoXSBFcnJvciBndWFyZGFuZG8gcGVybWlzb3M6JywgZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhcmdhIGxvcyBwZXJtaXNvcyBkZXNkZSBzdG9yYWdlLlxuICAgKi9cbiAgbG9hZFBlcm1pc3Npb25zKCk6IHtcbiAgICByb2xlczogc3RyaW5nW107XG4gICAgcGVybWlzc2lvbnM6IHN0cmluZ1tdO1xuICAgIGlzU3VwZXJBZG1pbjogYm9vbGVhbjtcbiAgfSB7XG4gICAgaWYgKCF0aGlzLmlzQnJvd3Nlcikge1xuICAgICAgcmV0dXJuIHsgcm9sZXM6IFtdLCBwZXJtaXNzaW9uczogW10sIGlzU3VwZXJBZG1pbjogZmFsc2UgfTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJvbGVzSnNvbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMua2V5cy5ST0xFUyk7XG4gICAgICBjb25zdCBwZXJtaXNzaW9uc0pzb24gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmtleXMuUEVSTUlTU0lPTlMpO1xuICAgICAgY29uc3QgaXNTdXBlckFkbWluID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5rZXlzLklTX1NVUEVSX0FETUlOKSA9PT0gJ3RydWUnO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICByb2xlczogcm9sZXNKc29uID8gSlNPTi5wYXJzZShyb2xlc0pzb24pIDogW10sXG4gICAgICAgIHBlcm1pc3Npb25zOiBwZXJtaXNzaW9uc0pzb24gPyBKU09OLnBhcnNlKHBlcm1pc3Npb25zSnNvbikgOiBbXSxcbiAgICAgICAgaXNTdXBlckFkbWluLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB7IHJvbGVzOiBbXSwgcGVybWlzc2lvbnM6IFtdLCBpc1N1cGVyQWRtaW46IGZhbHNlIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgZWwgcmVmcmVzaCB0b2tlbi5cbiAgICovXG4gIGdldFJlZnJlc2hUb2tlbigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuaXNCcm93c2VyKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5rZXlzLlJFRlJFU0hfVE9LRU4pO1xuICB9XG5cbiAgLyoqXG4gICAqIExpbXBpYSB0b2RvIGVsIGVzdGFkbyBkZSBhdXRlbnRpY2FjacOzbi5cbiAgICovXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0Jyb3dzZXIpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLmtleXMpLmZvckVhY2goa2V5ID0+IGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignW1ZhbHRlY2hBdXRoXSBFcnJvciBsaW1waWFuZG8gc3RvcmFnZTonLCBlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgaGF5IGVzdGFkbyBndWFyZGFkby5cbiAgICovXG4gIGhhc1N0b3JlZFN0YXRlKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5pc0Jyb3dzZXIpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gISFsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmtleXMuQUNDRVNTX1RPS0VOKTtcbiAgfVxufVxuIl19
177
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9hdXRoL3N0b3JhZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxVQUFVLENBQUM7O0FBZS9DOztHQUVHO0FBRUgsTUFBTSxPQUFPLGtCQUFrQjtJQUk3QixZQUNtRCxNQUFnQyxFQUM1RCxVQUFrQjtRQURVLFdBQU0sR0FBTixNQUFNLENBQTBCO1FBR2pGLElBQUksQ0FBQyxTQUFTLEdBQUcsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksU0FBUyxFQUFFLEVBQUUsQ0FBQztZQUNoQyxPQUFPLENBQUMsSUFBSSxDQUNWLG1GQUFtRixDQUNwRixDQUFDO1FBQ0osQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsYUFBYSxJQUFJLGVBQWUsQ0FBQztRQUM3RCxJQUFJLENBQUMsSUFBSSxHQUFHO1lBQ1YsWUFBWSxFQUFFLEdBQUcsTUFBTSxjQUFjO1lBQ3JDLGFBQWEsRUFBRSxHQUFHLE1BQU0sZUFBZTtZQUN2QyxLQUFLLEVBQUUsR0FBRyxNQUFNLE9BQU87WUFDdkIsV0FBVyxFQUFFLEdBQUcsTUFBTSxhQUFhO1lBQ25DLGNBQWMsRUFBRSxHQUFHLE1BQU0sZ0JBQWdCO1lBQ3pDLFVBQVUsRUFBRSxHQUFHLE1BQU0sWUFBWTtTQUNsQyxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsU0FBUyxDQUFDLEtBQXNC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QWEsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUs7UUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFPO1FBQzVCLElBQUksQ0FBQztZQUNILE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsd0NBQXdDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUQsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILGNBQWM7UUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNsQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDeEQsQ0FBQzsrR0FsS1Usa0JBQWtCLGtCQUtQLG1CQUFtQiw2QkFDL0IsV0FBVzttSEFOVixrQkFBa0IsY0FETCxNQUFNOzs0RkFDbkIsa0JBQWtCO2tCQUQ5QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBTTdCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsbUJBQW1COzswQkFDdEMsTUFBTTsyQkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCwgUExBVEZPUk1fSUQsIGlzRGV2TW9kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVkFMVEVDSF9BVVRIX0NPTkZJRyB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7IFN0b3JlZEF1dGhTdGF0ZSwgR2V0UGVybWlzc2lvbnNSZXNwb25zZSwgVmFsdGVjaEF1dGhDb25maWcgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBDbGF2ZXMgZGUgc3RvcmFnZSBwYXJhIGF1dGVudGljYWNpw7NuLlxuICovXG5pbnRlcmZhY2UgU3RvcmFnZUtleXMge1xuICBBQ0NFU1NfVE9LRU46IHN0cmluZztcbiAgUkVGUkVTSF9UT0tFTjogc3RyaW5nO1xuICBST0xFUzogc3RyaW5nO1xuICBQRVJNSVNTSU9OUzogc3RyaW5nO1xuICBJU19TVVBFUl9BRE1JTjogc3RyaW5nO1xuICBFWFBJUkVTX0FUOiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2VydmljaW8gcGFyYSBwZXJzaXN0ZW5jaWEgZGUgZXN0YWRvIGRlIGF1dGVudGljYWNpw7NuIGVuIGxvY2FsU3RvcmFnZS5cbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBBdXRoU3RvcmFnZVNlcnZpY2Uge1xuICBwcml2YXRlIGtleXM6IFN0b3JhZ2VLZXlzO1xuICBwcml2YXRlIHJlYWRvbmx5IGlzQnJvd3NlcjogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFZBTFRFQ0hfQVVUSF9DT05GSUcpIHByaXZhdGUgY29uZmlnOiBWYWx0ZWNoQXV0aENvbmZpZyB8IG51bGwsXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcGxhdGZvcm1JZDogT2JqZWN0XG4gICkge1xuICAgIHRoaXMuaXNCcm93c2VyID0gaXNQbGF0Zm9ybUJyb3dzZXIocGxhdGZvcm1JZCk7XG4gICAgaWYgKCF0aGlzLmNvbmZpZyAmJiBpc0Rldk1vZGUoKSkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnW3ZhbHRlY2gtY29tcG9uZW50c10gQXV0aFN0b3JhZ2VTZXJ2aWNlOiBwcm92aWRlVmFsdGVjaEF1dGgoKSBubyBlc3TDoSBlbiBtYWluLnRzLidcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHByZWZpeCA9IHRoaXMuY29uZmlnPy5zdG9yYWdlUHJlZml4IHx8ICd2YWx0ZWNoX2F1dGhfJztcbiAgICB0aGlzLmtleXMgPSB7XG4gICAgICBBQ0NFU1NfVE9LRU46IGAke3ByZWZpeH1hY2Nlc3NfdG9rZW5gLFxuICAgICAgUkVGUkVTSF9UT0tFTjogYCR7cHJlZml4fXJlZnJlc2hfdG9rZW5gLFxuICAgICAgUk9MRVM6IGAke3ByZWZpeH1yb2xlc2AsXG4gICAgICBQRVJNSVNTSU9OUzogYCR7cHJlZml4fXBlcm1pc3Npb25zYCxcbiAgICAgIElTX1NVUEVSX0FETUlOOiBgJHtwcmVmaXh9aXNfc3VwZXJfYWRtaW5gLFxuICAgICAgRVhQSVJFU19BVDogYCR7cHJlZml4fWV4cGlyZXNfYXRgLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR3VhcmRhIGVsIGVzdGFkbyBjb21wbGV0byBkZSBhdXRlbnRpY2FjacOzbi5cbiAgICovXG4gIHNhdmVTdGF0ZShzdGF0ZTogU3RvcmVkQXV0aFN0YXRlKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzQnJvd3NlcikgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmtleXMuQUNDRVNTX1RPS0VOLCBzdGF0ZS5hY2Nlc3NUb2tlbik7XG4gICAgICAvLyBILTA1OiBlbCByZWZyZXNoIHRva2VuIE5PIHNlIHBlcnNpc3RlIGVuIGxvY2FsU3RvcmFnZSDigJQgdml2ZSBlbiB1bmFcbiAgICAgIC8vIGNvb2tpZSBIdHRwT25seSBxdWUgZWwgYmFja2VuZCBlbWl0ZS4gQXPDrSB1biBYU1Mgbm8gcHVlZGUgZXhmaWx0cmFybG8uXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmtleXMuUk9MRVMsIEpTT04uc3RyaW5naWZ5KHN0YXRlLnJvbGVzKSk7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmtleXMuUEVSTUlTU0lPTlMsIEpTT04uc3RyaW5naWZ5KHN0YXRlLnBlcm1pc3Npb25zKSk7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmtleXMuSVNfU1VQRVJfQURNSU4sIFN0cmluZyhzdGF0ZS5pc1N1cGVyQWRtaW4pKTtcbiAgICAgIGlmIChzdGF0ZS5leHBpcmVzQXQpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5rZXlzLkVYUElSRVNfQVQsIFN0cmluZyhzdGF0ZS5leHBpcmVzQXQpKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tWYWx0ZWNoQXV0aF0gRXJyb3IgZ3VhcmRhbmRvIGVzdGFkbyBlbiBzdG9yYWdlOicsIGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYXJnYSBlbCBlc3RhZG8gZGUgYXV0ZW50aWNhY2nDs24gZGVzZGUgc3RvcmFnZS5cbiAgICovXG4gIGxvYWRTdGF0ZSgpOiBQYXJ0aWFsPFN0b3JlZEF1dGhTdGF0ZT4ge1xuICAgIGlmICghdGhpcy5pc0Jyb3dzZXIpIHJldHVybiB7fTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmtleXMuQUNDRVNTX1RPS0VOKTtcbiAgICAgIGNvbnN0IHJlZnJlc2hUb2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMua2V5cy5SRUZSRVNIX1RPS0VOKTtcbiAgICAgIGNvbnN0IHJvbGVzSnNvbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMua2V5cy5ST0xFUyk7XG4gICAgICBjb25zdCBwZXJtaXNzaW9uc0pzb24gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmtleXMuUEVSTUlTU0lPTlMpO1xuICAgICAgY29uc3QgaXNTdXBlckFkbWluID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5rZXlzLklTX1NVUEVSX0FETUlOKSA9PT0gJ3RydWUnO1xuICAgICAgY29uc3QgZXhwaXJlc0F0U3RyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5rZXlzLkVYUElSRVNfQVQpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBhY2Nlc3NUb2tlbjogYWNjZXNzVG9rZW4gfHwgdW5kZWZpbmVkLFxuICAgICAgICByZWZyZXNoVG9rZW46IHJlZnJlc2hUb2tlbiB8fCB1bmRlZmluZWQsXG4gICAgICAgIHJvbGVzOiByb2xlc0pzb24gPyBKU09OLnBhcnNlKHJvbGVzSnNvbikgOiBbXSxcbiAgICAgICAgcGVybWlzc2lvbnM6IHBlcm1pc3Npb25zSnNvbiA/IEpTT04ucGFyc2UocGVybWlzc2lvbnNKc29uKSA6IFtdLFxuICAgICAgICBpc1N1cGVyQWRtaW4sXG4gICAgICAgIGV4cGlyZXNBdDogZXhwaXJlc0F0U3RyID8gTnVtYmVyKGV4cGlyZXNBdFN0cikgOiB1bmRlZmluZWQsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignW1ZhbHRlY2hBdXRoXSBFcnJvciBjYXJnYW5kbyBlc3RhZG8gZGVzZGUgc3RvcmFnZTonLCBlKTtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR3VhcmRhIHNvbG8gZWwgYWNjZXNzIHRva2VuLlxuICAgKi9cbiAgc2F2ZUFjY2Vzc1Rva2VuKHRva2VuOiBzdHJpbmcsIGV4cGlyZXNBdD86IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0Jyb3dzZXIpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5rZXlzLkFDQ0VTU19UT0tFTiwgdG9rZW4pO1xuICAgICAgaWYgKGV4cGlyZXNBdCkge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmtleXMuRVhQSVJFU19BVCwgU3RyaW5nKGV4cGlyZXNBdCkpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignW1ZhbHRlY2hBdXRoXSBFcnJvciBndWFyZGFuZG8gYWNjZXNzIHRva2VuOicsIGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHdWFyZGEgZWwgcmVmcmVzaCB0b2tlbiAodG9rZW4gcm90YXRpb24pLlxuICAgKi9cbiAgc2F2ZVJlZnJlc2hUb2tlbihfdG9rZW46IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIEgtMDU6IG5vLW9wLiBFbCByZWZyZXNoIHRva2VuIHlhIG5vIHNlIHBlcnNpc3RlIGVuIGxvY2FsU3RvcmFnZTsgbG9cbiAgICAvLyB0cmFuc3BvcnRhIHVuYSBjb29raWUgSHR0cE9ubHkgZW1pdGlkYSBwb3IgZWwgYmFja2VuZC4gU2UgbWFudGllbmUgZWxcbiAgICAvLyBtw6l0b2RvIHBhcmEgbm8gcm9tcGVyIGxsYW1hZG9yZXMgZXhpc3RlbnRlcyBkdXJhbnRlIGxhIHRyYW5zaWNpw7NuLlxuICB9XG5cbiAgLyoqXG4gICAqIEd1YXJkYSBsb3MgcGVybWlzb3MgYWN0dWFsaXphZG9zLlxuICAgKi9cbiAgc2F2ZVBlcm1pc3Npb25zKHJlc3BvbnNlOiBHZXRQZXJtaXNzaW9uc1Jlc3BvbnNlKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzQnJvd3NlcikgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmtleXMuUk9MRVMsIEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLnJvbGVzKSk7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmtleXMuUEVSTUlTU0lPTlMsIEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLnBlcm1pc3Npb25zKSk7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmtleXMuSVNfU1VQRVJfQURNSU4sIFN0cmluZyhyZXNwb25zZS5pc1N1cGVyQWRtaW4pKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tWYWx0ZWNoQXV0aF0gRXJyb3IgZ3VhcmRhbmRvIHBlcm1pc29zOicsIGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYXJnYSBsb3MgcGVybWlzb3MgZGVzZGUgc3RvcmFnZS5cbiAgICovXG4gIGxvYWRQZXJtaXNzaW9ucygpOiB7XG4gICAgcm9sZXM6IHN0cmluZ1tdO1xuICAgIHBlcm1pc3Npb25zOiBzdHJpbmdbXTtcbiAgICBpc1N1cGVyQWRtaW46IGJvb2xlYW47XG4gIH0ge1xuICAgIGlmICghdGhpcy5pc0Jyb3dzZXIpIHtcbiAgICAgIHJldHVybiB7IHJvbGVzOiBbXSwgcGVybWlzc2lvbnM6IFtdLCBpc1N1cGVyQWRtaW46IGZhbHNlIH07XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCByb2xlc0pzb24gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmtleXMuUk9MRVMpO1xuICAgICAgY29uc3QgcGVybWlzc2lvbnNKc29uID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5rZXlzLlBFUk1JU1NJT05TKTtcbiAgICAgIGNvbnN0IGlzU3VwZXJBZG1pbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMua2V5cy5JU19TVVBFUl9BRE1JTikgPT09ICd0cnVlJztcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcm9sZXM6IHJvbGVzSnNvbiA/IEpTT04ucGFyc2Uocm9sZXNKc29uKSA6IFtdLFxuICAgICAgICBwZXJtaXNzaW9uczogcGVybWlzc2lvbnNKc29uID8gSlNPTi5wYXJzZShwZXJtaXNzaW9uc0pzb24pIDogW10sXG4gICAgICAgIGlzU3VwZXJBZG1pbixcbiAgICAgIH07XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4geyByb2xlczogW10sIHBlcm1pc3Npb25zOiBbXSwgaXNTdXBlckFkbWluOiBmYWxzZSB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGVsIHJlZnJlc2ggdG9rZW4uXG4gICAqL1xuICBnZXRSZWZyZXNoVG9rZW4oKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLmlzQnJvd3NlcikgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMua2V5cy5SRUZSRVNIX1RPS0VOKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaW1waWEgdG9kbyBlbCBlc3RhZG8gZGUgYXV0ZW50aWNhY2nDs24uXG4gICAqL1xuICBjbGVhcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNCcm93c2VyKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIE9iamVjdC52YWx1ZXModGhpcy5rZXlzKS5mb3JFYWNoKGtleSA9PiBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tWYWx0ZWNoQXV0aF0gRXJyb3IgbGltcGlhbmRvIHN0b3JhZ2U6JywgZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIGhheSBlc3RhZG8gZ3VhcmRhZG8uXG4gICAqL1xuICBoYXNTdG9yZWRTdGF0ZSgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuaXNCcm93c2VyKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICEhbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5rZXlzLkFDQ0VTU19UT0tFTik7XG4gIH1cbn1cbiJdfQ==
@@ -4,11 +4,11 @@
4
4
  * Configuración e inicialización de Firebase para aplicaciones Angular.
5
5
  * Usa provideValtechFirebase() en el bootstrap de tu aplicación.
6
6
  */
7
- import { ErrorHandler, InjectionToken, makeEnvironmentProviders } from '@angular/core';
7
+ import { ErrorHandler, InjectionToken, makeEnvironmentProviders, } from '@angular/core';
8
8
  import { getAnalytics, provideAnalytics } from '@angular/fire/analytics';
9
9
  import { initializeApp, provideFirebaseApp } from '@angular/fire/app';
10
10
  import { connectAuthEmulator, getAuth, provideAuth } from '@angular/fire/auth';
11
- import { connectFirestoreEmulator, enableIndexedDbPersistence, getFirestore, provideFirestore, } from '@angular/fire/firestore';
11
+ import { connectFirestoreEmulator, enableMultiTabIndexedDbPersistence, getFirestore, provideFirestore, } from '@angular/fire/firestore';
12
12
  import { getMessaging, provideMessaging } from '@angular/fire/messaging';
13
13
  import { connectStorageEmulator, getStorage, provideStorage } from '@angular/fire/storage';
14
14
  import { AnalyticsErrorHandler } from './analytics-error-handler';
@@ -65,9 +65,9 @@ export function provideValtechFirebase(config) {
65
65
  connectFirestoreEmulator(firestore, config.emulator.firestore.host, config.emulator.firestore.port);
66
66
  }
67
67
  // Habilitar persistencia offline si está configurada (browser-only:
68
- // enableIndexedDbPersistence requiere IndexedDB, no existe en Node).
68
+ // enableMultiTabIndexedDbPersistence requiere IndexedDB, no existe en Node).
69
69
  if (config.persistence && isBrowser) {
70
- enableIndexedDbPersistence(firestore).catch((err) => {
70
+ enableMultiTabIndexedDbPersistence(firestore).catch(err => {
71
71
  if (err.code === 'failed-precondition') {
72
72
  console.warn('[ValtechFirebase] Persistencia no disponible: múltiples pestañas abiertas');
73
73
  }
@@ -133,4 +133,4 @@ export function provideValtechFirebase(config) {
133
133
  export function hasEmulators(config) {
134
134
  return !!(config.emulator?.firestore || config.emulator?.auth || config.emulator?.storage);
135
135
  }
136
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9maXJlYmFzZS9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQXdCLFlBQVksRUFBRSxjQUFjLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0csT0FBTyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBeUIsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRyxPQUFPLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvRSxPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLDBCQUEwQixFQUMxQixZQUFZLEVBQ1osZ0JBQWdCLEdBQ2pCLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHM0YsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFcEU7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxjQUFjLENBQ3ZELHVCQUF1QixDQUN4QixDQUFDO0FBRUY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJCRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxNQUE2QjtJQUNsRSwyRUFBMkU7SUFDM0UsMkVBQTJFO0lBQzNFLDBFQUEwRTtJQUMxRSxNQUFNLFNBQVMsR0FBRyxPQUFPLE1B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QyxDQUFDO0lBQ3pELENBQUM7SUFFRCxpRkFBaUY7SUFDakYsOEVBQThFO0lBQzlFLElBQUksTUFBTSxDQUFDLGVBQWUsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLGFBQWEsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUN6RSxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUV2RCxzRUFBc0U7UUFDdEUsSUFBSSxNQUFNLENBQUMsZUFBZSxFQUFFLHNCQUFzQixLQUFLLEtBQUssRUFBRSxDQUFDO1lBQzdELFNBQVMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBRUQsb0RBQW9EO1FBQ3BELElBQUksTUFBTSxDQUFDLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxDQUFDO1lBQ2hELFNBQVMsQ0FBQyxJQUFJLENBQUM7Z0JBQ2IsT0FBTyxFQUFFLFlBQVk7Z0JBQ3JCLFFBQVEsRUFBRSxxQkFBcUI7YUFDaEMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBNkI7SUFDeEQsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLFNBQVMsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzdGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZpcmViYXNlIENvbmZpZ3VyYXRpb25cbiAqXG4gKiBDb25maWd1cmFjacOzbiBlIGluaWNpYWxpemFjacOzbiBkZSBGaXJlYmFzZSBwYXJhIGFwbGljYWNpb25lcyBBbmd1bGFyLlxuICogVXNhIHByb3ZpZGVWYWx0ZWNoRmlyZWJhc2UoKSBlbiBlbCBib290c3RyYXAgZGUgdHUgYXBsaWNhY2nDs24uXG4gKi9cblxuaW1wb3J0IHsgRW52aXJvbm1lbnRQcm92aWRlcnMsIEVycm9ySGFuZGxlciwgSW5qZWN0aW9uVG9rZW4sIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZ2V0QW5hbHl0aWNzLCBwcm92aWRlQW5hbHl0aWNzLCBTY3JlZW5UcmFja2luZ1NlcnZpY2UgfSBmcm9tICdAYW5ndWxhci9maXJlL2FuYWx5dGljcyc7XG5pbXBvcnQgeyBpbml0aWFsaXplQXBwLCBwcm92aWRlRmlyZWJhc2VBcHAgfSBmcm9tICdAYW5ndWxhci9maXJlL2FwcCc7XG5pbXBvcnQgeyBjb25uZWN0QXV0aEVtdWxhdG9yLCBnZXRBdXRoLCBwcm92aWRlQXV0aCB9IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvYXV0aCc7XG5pbXBvcnQge1xuICBjb25uZWN0RmlyZXN0b3JlRW11bGF0b3IsXG4gIGVuYWJsZUluZGV4ZWREYlBlcnNpc3RlbmNlLFxuICBnZXRGaXJlc3RvcmUsXG4gIHByb3ZpZGVGaXJlc3RvcmUsXG59IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvZmlyZXN0b3JlJztcbmltcG9ydCB7IGdldE1lc3NhZ2luZywgcHJvdmlkZU1lc3NhZ2luZyB9IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvbWVzc2FnaW5nJztcbmltcG9ydCB7IGNvbm5lY3RTdG9yYWdlRW11bGF0b3IsIGdldFN0b3JhZ2UsIHByb3ZpZGVTdG9yYWdlIH0gZnJvbSAnQGFuZ3VsYXIvZmlyZS9zdG9yYWdlJztcblxuaW1wb3J0IHsgVmFsdGVjaEZpcmViYXNlQ29uZmlnIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBBbmFseXRpY3NFcnJvckhhbmRsZXIgfSBmcm9tICcuL2FuYWx5dGljcy1lcnJvci1oYW5kbGVyJztcbmltcG9ydCB7IEFuYWx5dGljc1JvdXRlclRyYWNrZXIgfSBmcm9tICcuL2FuYWx5dGljcy1yb3V0ZXItdHJhY2tlcic7XG5cbi8qKlxuICogVG9rZW4gZGUgaW55ZWNjacOzbiBwYXJhIGxhIGNvbmZpZ3VyYWNpw7NuIGRlIEZpcmViYXNlLlxuICogVXNhZG8gaW50ZXJuYW1lbnRlIHBvciBsb3Mgc2VydmljaW9zIGRlIEZpcmViYXNlLlxuICovXG5leHBvcnQgY29uc3QgVkFMVEVDSF9GSVJFQkFTRV9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48VmFsdGVjaEZpcmViYXNlQ29uZmlnPihcbiAgJ1ZhbHRlY2hGaXJlYmFzZUNvbmZpZydcbik7XG5cbi8qKlxuICogUHJvdmVlIEZpcmViYXNlIGEgbGEgYXBsaWNhY2nDs24gQW5ndWxhci5cbiAqXG4gKiBAcGFyYW0gY29uZmlnIC0gQ29uZmlndXJhY2nDs24gZGUgRmlyZWJhc2VcbiAqIEByZXR1cm5zIEVudmlyb25tZW50UHJvdmlkZXJzIHBhcmEgdXNhciBlbiBib290c3RyYXBBcHBsaWNhdGlvblxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBtYWluLnRzXG4gKiBpbXBvcnQgeyBib290c3RyYXBBcHBsaWNhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuICogaW1wb3J0IHsgcHJvdmlkZVZhbHRlY2hGaXJlYmFzZSB9IGZyb20gJ3ZhbHRlY2gtY29tcG9uZW50cyc7XG4gKiBpbXBvcnQgeyBlbnZpcm9ubWVudCB9IGZyb20gJy4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50JztcbiAqXG4gKiBib290c3RyYXBBcHBsaWNhdGlvbihBcHBDb21wb25lbnQsIHtcbiAqICAgcHJvdmlkZXJzOiBbXG4gKiAgICAgcHJvdmlkZVZhbHRlY2hGaXJlYmFzZSh7XG4gKiAgICAgICBmaXJlYmFzZTogZW52aXJvbm1lbnQuZmlyZWJhc2UsXG4gKiAgICAgICBwZXJzaXN0ZW5jZTogdHJ1ZSxcbiAqICAgICAgIGVtdWxhdG9yOiBlbnZpcm9ubWVudC51c2VFbXVsYXRvcnMgPyB7XG4gKiAgICAgICAgIGZpcmVzdG9yZTogeyBob3N0OiAnbG9jYWxob3N0JywgcG9ydDogODA4MCB9LFxuICogICAgICAgICBhdXRoOiB7IGhvc3Q6ICdsb2NhbGhvc3QnLCBwb3J0OiA5MDk5IH0sXG4gKiAgICAgICAgIHN0b3JhZ2U6IHsgaG9zdDogJ2xvY2FsaG9zdCcsIHBvcnQ6IDkxOTkgfSxcbiAqICAgICAgIH0gOiB1bmRlZmluZWQsXG4gKiAgICAgfSksXG4gKiAgIF0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZVZhbHRlY2hGaXJlYmFzZShjb25maWc6IFZhbHRlY2hGaXJlYmFzZUNvbmZpZyk6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcbiAgLy8gU1NSLXNhZmU6IGR1cmFudGUgZWwgcHJlcmVuZGVyIC8gTm9kZSwgbm8gZXhpc3RlIHdpbmRvdy4gZ2V0QW5hbHl0aWNzKCksXG4gIC8vIGVuYWJsZUluZGV4ZWREYlBlcnNpc3RlbmNlKCkgeSBGQ00gdG9jYW4gQVBJcyBkZWwgYnJvd3NlciBxdWUgbm8gZXhpc3RlblxuICAvLyBlbiBlbCBzZXJ2ZXIg4oaSIGNvcnRvY2lyY3VpdG8gZGUgbG9zIHByb3ZpZGVycy9lZmVjdG9zIGJyb3dzZXItb25seSBhY8OhLlxuICBjb25zdCBpc0Jyb3dzZXIgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcblxuICAvLyBDb25zdHJ1aXIgYXJyYXkgZGUgcHJvdmlkZXJzIGJhc2VcbiAgY29uc3QgcHJvdmlkZXJzOiBhbnlbXSA9IFtcbiAgICAvLyBHdWFyZGFyIGNvbmZpZ3VyYWNpw7NuIHBhcmEgdXNvIGVuIHNlcnZpY2lvc1xuICAgIHsgcHJvdmlkZTogVkFMVEVDSF9GSVJFQkFTRV9DT05GSUcsIHVzZVZhbHVlOiBjb25maWcgfSxcblxuICAgIC8vIEluaWNpYWxpemFyIEZpcmViYXNlIEFwcFxuICAgIHByb3ZpZGVGaXJlYmFzZUFwcCgoKSA9PiBpbml0aWFsaXplQXBwKGNvbmZpZy5maXJlYmFzZSkpLFxuXG4gICAgLy8gRmlyZXN0b3JlIGNvbiBzb3BvcnRlIHBhcmEgZW11bGFkb3JlcyB5IHBlcnNpc3RlbmNpYVxuICAgIHByb3ZpZGVGaXJlc3RvcmUoKCkgPT4ge1xuICAgICAgY29uc3QgZmlyZXN0b3JlID0gZ2V0RmlyZXN0b3JlKCk7XG5cbiAgICAgIC8vIENvbmVjdGFyIGEgZW11bGFkb3Igc2kgZXN0w6EgY29uZmlndXJhZG9cbiAgICAgIGlmIChjb25maWcuZW11bGF0b3I/LmZpcmVzdG9yZSkge1xuICAgICAgICBjb25uZWN0RmlyZXN0b3JlRW11bGF0b3IoXG4gICAgICAgICAgZmlyZXN0b3JlLFxuICAgICAgICAgIGNvbmZpZy5lbXVsYXRvci5maXJlc3RvcmUuaG9zdCxcbiAgICAgICAgICBjb25maWcuZW11bGF0b3IuZmlyZXN0b3JlLnBvcnRcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gSGFiaWxpdGFyIHBlcnNpc3RlbmNpYSBvZmZsaW5lIHNpIGVzdMOhIGNvbmZpZ3VyYWRhIChicm93c2VyLW9ubHk6XG4gICAgICAvLyBlbmFibGVJbmRleGVkRGJQZXJzaXN0ZW5jZSByZXF1aWVyZSBJbmRleGVkREIsIG5vIGV4aXN0ZSBlbiBOb2RlKS5cbiAgICAgIGlmIChjb25maWcucGVyc2lzdGVuY2UgJiYgaXNCcm93c2VyKSB7XG4gICAgICAgIGVuYWJsZUluZGV4ZWREYlBlcnNpc3RlbmNlKGZpcmVzdG9yZSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgIGlmIChlcnIuY29kZSA9PT0gJ2ZhaWxlZC1wcmVjb25kaXRpb24nKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICdbVmFsdGVjaEZpcmViYXNlXSBQZXJzaXN0ZW5jaWEgbm8gZGlzcG9uaWJsZTogbcO6bHRpcGxlcyBwZXN0YcOxYXMgYWJpZXJ0YXMnXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZXJyLmNvZGUgPT09ICd1bmltcGxlbWVudGVkJykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdbVmFsdGVjaEZpcmViYXNlXSBQZXJzaXN0ZW5jaWEgbm8gc29wb3J0YWRhIGVuIGVzdGUgbmF2ZWdhZG9yJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZpcmVzdG9yZTtcbiAgICB9KSxcblxuICAgIC8vIEF1dGggY29uIHNvcG9ydGUgcGFyYSBlbXVsYWRvclxuICAgIHByb3ZpZGVBdXRoKCgpID0+IHtcbiAgICAgIGNvbnN0IGF1dGggPSBnZXRBdXRoKCk7XG5cbiAgICAgIC8vIENvbmVjdGFyIGEgZW11bGFkb3Igc2kgZXN0w6EgY29uZmlndXJhZG9cbiAgICAgIGlmIChjb25maWcuZW11bGF0b3I/LmF1dGgpIHtcbiAgICAgICAgY29ubmVjdEF1dGhFbXVsYXRvcihcbiAgICAgICAgICBhdXRoLFxuICAgICAgICAgIGBodHRwOi8vJHtjb25maWcuZW11bGF0b3IuYXV0aC5ob3N0fToke2NvbmZpZy5lbXVsYXRvci5hdXRoLnBvcnR9YCxcbiAgICAgICAgICB7IGRpc2FibGVXYXJuaW5nczogdHJ1ZSB9XG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhdXRoO1xuICAgIH0pLFxuXG4gICAgLy8gU3RvcmFnZSBjb24gc29wb3J0ZSBwYXJhIGVtdWxhZG9yXG4gICAgcHJvdmlkZVN0b3JhZ2UoKCkgPT4ge1xuICAgICAgY29uc3Qgc3RvcmFnZSA9IGdldFN0b3JhZ2UoKTtcblxuICAgICAgLy8gQ29uZWN0YXIgYSBlbXVsYWRvciBzaSBlc3TDoSBjb25maWd1cmFkb1xuICAgICAgaWYgKGNvbmZpZy5lbXVsYXRvcj8uc3RvcmFnZSkge1xuICAgICAgICBjb25uZWN0U3RvcmFnZUVtdWxhdG9yKFxuICAgICAgICAgIHN0b3JhZ2UsXG4gICAgICAgICAgY29uZmlnLmVtdWxhdG9yLnN0b3JhZ2UuaG9zdCxcbiAgICAgICAgICBjb25maWcuZW11bGF0b3Iuc3RvcmFnZS5wb3J0XG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdG9yYWdlO1xuICAgIH0pLFxuICBdO1xuXG4gIC8vIE1lc3NhZ2luZyAoRkNNKSAtIHNvbG8gc2kgZXN0w6EgZXhwbMOtY2l0YW1lbnRlIGhhYmlsaXRhZG8geSBlc3RhbW9zIGVuIGJyb3dzZXIuXG4gIC8vIFJlcXVpZXJlIFNlcnZpY2UgV29ya2VyICsgTm90aWZpY2F0aW9ucyBBUEkg4oaSIHNraXAgdG90YWwgZW4gU1NSL05vZGUuXG4gIGlmIChjb25maWcuZW5hYmxlTWVzc2FnaW5nICYmIGlzQnJvd3Nlcikge1xuICAgIC8vIFByZS1yZWdpc3RyYXIgU1cgY3VzdG9tIGFudGVzIGRlIHF1ZSBGaXJlYmFzZSBsbyBpbnRlbnRlXG4gICAgaWYgKCdzZXJ2aWNlV29ya2VyJyBpbiBuYXZpZ2F0b3IpIHtcbiAgICAgIG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlZ2lzdGVyKCcvZmlyZWJhc2UtbWVzc2FnaW5nLXN3LmpzJykuY2F0Y2goY29uc29sZS5lcnJvcik7XG4gICAgfVxuICAgIHByb3ZpZGVycy5wdXNoKHByb3ZpZGVNZXNzYWdpbmcoKCkgPT4gZ2V0TWVzc2FnaW5nKCkpKTtcbiAgfVxuXG4gIC8vIEFuYWx5dGljcyAoR0E0KSAtIHNvbG8gc2kgZXN0w6EgZXhwbMOtY2l0YW1lbnRlIGhhYmlsaXRhZG8geSBlc3RhbW9zIGVuIGJyb3dzZXIuXG4gIC8vIGdldEFuYWx5dGljcygpIC8gU2NyZWVuVHJhY2tpbmdTZXJ2aWNlIHRvY2FuIHdpbmRvdy9kb2N1bWVudCDihpIgc2tpcCBlbiBTU1IuXG4gIGlmIChjb25maWcuZW5hYmxlQW5hbHl0aWNzICYmIGNvbmZpZy5maXJlYmFzZS5tZWFzdXJlbWVudElkICYmIGlzQnJvd3Nlcikge1xuICAgIHByb3ZpZGVycy5wdXNoKHByb3ZpZGVBbmFseXRpY3MoKCkgPT4gZ2V0QW5hbHl0aWNzKCkpKTtcblxuICAgIC8vIFJvdXRlciB0cmFja2VyIHBhcmEgcGFnZSB2aWV3cyBhdXRvbcOhdGljb3MgKHBvciBkZWZlY3RvIGhhYmlsaXRhZG8pXG4gICAgaWYgKGNvbmZpZy5hbmFseXRpY3NDb25maWc/LmVuYWJsZVBhZ2VWaWV3VHJhY2tpbmcgIT09IGZhbHNlKSB7XG4gICAgICBwcm92aWRlcnMucHVzaChBbmFseXRpY3NSb3V0ZXJUcmFja2VyKTtcbiAgICB9XG5cbiAgICAvLyBFcnJvciBoYW5kbGVyIHBhcmEgdHJhY2tpbmcgYXV0b23DoXRpY28gZGUgZXJyb3Jlc1xuICAgIGlmIChjb25maWcuYW5hbHl0aWNzQ29uZmlnPy5lbmFibGVFcnJvclRyYWNraW5nKSB7XG4gICAgICBwcm92aWRlcnMucHVzaCh7XG4gICAgICAgIHByb3ZpZGU6IEVycm9ySGFuZGxlcixcbiAgICAgICAgdXNlQ2xhc3M6IEFuYWx5dGljc0Vycm9ySGFuZGxlcixcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMocHJvdmlkZXJzKTtcbn1cblxuLyoqXG4gKiBWZXJpZmljYSBzaSBsb3MgZW11bGFkb3JlcyBlc3TDoW4gY29uZmlndXJhZG9zLlxuICpcbiAqIEBwYXJhbSBjb25maWcgLSBDb25maWd1cmFjacOzbiBkZSBGaXJlYmFzZVxuICogQHJldHVybnMgdHJ1ZSBzaSBoYXkgYWwgbWVub3MgdW4gZW11bGFkb3IgY29uZmlndXJhZG9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc0VtdWxhdG9ycyhjb25maWc6IFZhbHRlY2hGaXJlYmFzZUNvbmZpZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gISEoY29uZmlnLmVtdWxhdG9yPy5maXJlc3RvcmUgfHwgY29uZmlnLmVtdWxhdG9yPy5hdXRoIHx8IGNvbmZpZy5lbXVsYXRvcj8uc3RvcmFnZSk7XG59XG4iXX0=
136
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9maXJlYmFzZS9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBRUwsWUFBWSxFQUNaLGNBQWMsRUFDZCx3QkFBd0IsR0FDekIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBeUIsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRyxPQUFPLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvRSxPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLGtDQUFrQyxFQUNsQyxZQUFZLEVBQ1osZ0JBQWdCLEdBQ2pCLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHM0YsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFcEU7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxjQUFjLENBQ3ZELHVCQUF1QixDQUN4QixDQUFDO0FBRUY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJCRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxNQUE2QjtJQUNsRSwyRUFBMkU7SUFDM0UsMkVBQTJFO0lBQzNFLDBFQUEwRTtJQUMxRSxNQUFNLFNBQVMsR0FBRyxPQUFPLE1B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SUFDekQsQ0FBQztJQUVELGlGQUFpRjtJQUNqRiw4RUFBOEU7SUFDOUUsSUFBSSxNQUFNLENBQUMsZUFBZSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQ3pFLFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXZELHNFQUFzRTtRQUN0RSxJQUFJLE1BQU0sQ0FBQyxlQUFlLEVBQUUsc0JBQXNCLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDN0QsU0FBUyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFFRCxvREFBb0Q7UUFDcEQsSUFBSSxNQUFNLENBQUMsZUFBZSxFQUFFLG1CQUFtQixFQUFFLENBQUM7WUFDaEQsU0FBUyxDQUFDLElBQUksQ0FBQztnQkFDYixPQUFPLEVBQUUsWUFBWTtnQkFDckIsUUFBUSxFQUFFLHFCQUFxQjthQUNoQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sd0JBQXdCLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxNQUE2QjtJQUN4RCxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsU0FBUyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDN0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRmlyZWJhc2UgQ29uZmlndXJhdGlvblxuICpcbiAqIENvbmZpZ3VyYWNpw7NuIGUgaW5pY2lhbGl6YWNpw7NuIGRlIEZpcmViYXNlIHBhcmEgYXBsaWNhY2lvbmVzIEFuZ3VsYXIuXG4gKiBVc2EgcHJvdmlkZVZhbHRlY2hGaXJlYmFzZSgpIGVuIGVsIGJvb3RzdHJhcCBkZSB0dSBhcGxpY2FjacOzbi5cbiAqL1xuXG5pbXBvcnQge1xuICBFbnZpcm9ubWVudFByb3ZpZGVycyxcbiAgRXJyb3JIYW5kbGVyLFxuICBJbmplY3Rpb25Ub2tlbixcbiAgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGdldEFuYWx5dGljcywgcHJvdmlkZUFuYWx5dGljcywgU2NyZWVuVHJhY2tpbmdTZXJ2aWNlIH0gZnJvbSAnQGFuZ3VsYXIvZmlyZS9hbmFseXRpY3MnO1xuaW1wb3J0IHsgaW5pdGlhbGl6ZUFwcCwgcHJvdmlkZUZpcmViYXNlQXBwIH0gZnJvbSAnQGFuZ3VsYXIvZmlyZS9hcHAnO1xuaW1wb3J0IHsgY29ubmVjdEF1dGhFbXVsYXRvciwgZ2V0QXV0aCwgcHJvdmlkZUF1dGggfSBmcm9tICdAYW5ndWxhci9maXJlL2F1dGgnO1xuaW1wb3J0IHtcbiAgY29ubmVjdEZpcmVzdG9yZUVtdWxhdG9yLFxuICBlbmFibGVNdWx0aVRhYkluZGV4ZWREYlBlcnNpc3RlbmNlLFxuICBnZXRGaXJlc3RvcmUsXG4gIHByb3ZpZGVGaXJlc3RvcmUsXG59IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvZmlyZXN0b3JlJztcbmltcG9ydCB7IGdldE1lc3NhZ2luZywgcHJvdmlkZU1lc3NhZ2luZyB9IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvbWVzc2FnaW5nJztcbmltcG9ydCB7IGNvbm5lY3RTdG9yYWdlRW11bGF0b3IsIGdldFN0b3JhZ2UsIHByb3ZpZGVTdG9yYWdlIH0gZnJvbSAnQGFuZ3VsYXIvZmlyZS9zdG9yYWdlJztcblxuaW1wb3J0IHsgVmFsdGVjaEZpcmViYXNlQ29uZmlnIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBBbmFseXRpY3NFcnJvckhhbmRsZXIgfSBmcm9tICcuL2FuYWx5dGljcy1lcnJvci1oYW5kbGVyJztcbmltcG9ydCB7IEFuYWx5dGljc1JvdXRlclRyYWNrZXIgfSBmcm9tICcuL2FuYWx5dGljcy1yb3V0ZXItdHJhY2tlcic7XG5cbi8qKlxuICogVG9rZW4gZGUgaW55ZWNjacOzbiBwYXJhIGxhIGNvbmZpZ3VyYWNpw7NuIGRlIEZpcmViYXNlLlxuICogVXNhZG8gaW50ZXJuYW1lbnRlIHBvciBsb3Mgc2VydmljaW9zIGRlIEZpcmViYXNlLlxuICovXG5leHBvcnQgY29uc3QgVkFMVEVDSF9GSVJFQkFTRV9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48VmFsdGVjaEZpcmViYXNlQ29uZmlnPihcbiAgJ1ZhbHRlY2hGaXJlYmFzZUNvbmZpZydcbik7XG5cbi8qKlxuICogUHJvdmVlIEZpcmViYXNlIGEgbGEgYXBsaWNhY2nDs24gQW5ndWxhci5cbiAqXG4gKiBAcGFyYW0gY29uZmlnIC0gQ29uZmlndXJhY2nDs24gZGUgRmlyZWJhc2VcbiAqIEByZXR1cm5zIEVudmlyb25tZW50UHJvdmlkZXJzIHBhcmEgdXNhciBlbiBib290c3RyYXBBcHBsaWNhdGlvblxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBtYWluLnRzXG4gKiBpbXBvcnQgeyBib290c3RyYXBBcHBsaWNhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuICogaW1wb3J0IHsgcHJvdmlkZVZhbHRlY2hGaXJlYmFzZSB9IGZyb20gJ3ZhbHRlY2gtY29tcG9uZW50cyc7XG4gKiBpbXBvcnQgeyBlbnZpcm9ubWVudCB9IGZyb20gJy4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50JztcbiAqXG4gKiBib290c3RyYXBBcHBsaWNhdGlvbihBcHBDb21wb25lbnQsIHtcbiAqICAgcHJvdmlkZXJzOiBbXG4gKiAgICAgcHJvdmlkZVZhbHRlY2hGaXJlYmFzZSh7XG4gKiAgICAgICBmaXJlYmFzZTogZW52aXJvbm1lbnQuZmlyZWJhc2UsXG4gKiAgICAgICBwZXJzaXN0ZW5jZTogdHJ1ZSxcbiAqICAgICAgIGVtdWxhdG9yOiBlbnZpcm9ubWVudC51c2VFbXVsYXRvcnMgPyB7XG4gKiAgICAgICAgIGZpcmVzdG9yZTogeyBob3N0OiAnbG9jYWxob3N0JywgcG9ydDogODA4MCB9LFxuICogICAgICAgICBhdXRoOiB7IGhvc3Q6ICdsb2NhbGhvc3QnLCBwb3J0OiA5MDk5IH0sXG4gKiAgICAgICAgIHN0b3JhZ2U6IHsgaG9zdDogJ2xvY2FsaG9zdCcsIHBvcnQ6IDkxOTkgfSxcbiAqICAgICAgIH0gOiB1bmRlZmluZWQsXG4gKiAgICAgfSksXG4gKiAgIF0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZVZhbHRlY2hGaXJlYmFzZShjb25maWc6IFZhbHRlY2hGaXJlYmFzZUNvbmZpZyk6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcbiAgLy8gU1NSLXNhZmU6IGR1cmFudGUgZWwgcHJlcmVuZGVyIC8gTm9kZSwgbm8gZXhpc3RlIHdpbmRvdy4gZ2V0QW5hbHl0aWNzKCksXG4gIC8vIGVuYWJsZUluZGV4ZWREYlBlcnNpc3RlbmNlKCkgeSBGQ00gdG9jYW4gQVBJcyBkZWwgYnJvd3NlciBxdWUgbm8gZXhpc3RlblxuICAvLyBlbiBlbCBzZXJ2ZXIg4oaSIGNvcnRvY2lyY3VpdG8gZGUgbG9zIHByb3ZpZGVycy9lZmVjdG9zIGJyb3dzZXItb25seSBhY8OhLlxuICBjb25zdCBpc0Jyb3dzZXIgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcblxuICAvLyBDb25zdHJ1aXIgYXJyYXkgZGUgcHJvdmlkZXJzIGJhc2VcbiAgY29uc3QgcHJvdmlkZXJzOiBhbnlbXSA9IFtcbiAgICAvLyBHdWFyZGFyIGNvbmZpZ3VyYWNpw7NuIHBhcmEgdXNvIGVuIHNlcnZpY2lvc1xuICAgIHsgcHJvdmlkZTogVkFMVEVDSF9GSVJFQkFTRV9DT05GSUcsIHVzZVZhbHVlOiBjb25maWcgfSxcblxuICAgIC8vIEluaWNpYWxpemFyIEZpcmViYXNlIEFwcFxuICAgIHByb3ZpZGVGaXJlYmFzZUFwcCgoKSA9PiBpbml0aWFsaXplQXBwKGNvbmZpZy5maXJlYmFzZSkpLFxuXG4gICAgLy8gRmlyZXN0b3JlIGNvbiBzb3BvcnRlIHBhcmEgZW11bGFkb3JlcyB5IHBlcnNpc3RlbmNpYVxuICAgIHByb3ZpZGVGaXJlc3RvcmUoKCkgPT4ge1xuICAgICAgY29uc3QgZmlyZXN0b3JlID0gZ2V0RmlyZXN0b3JlKCk7XG5cbiAgICAgIC8vIENvbmVjdGFyIGEgZW11bGFkb3Igc2kgZXN0w6EgY29uZmlndXJhZG9cbiAgICAgIGlmIChjb25maWcuZW11bGF0b3I/LmZpcmVzdG9yZSkge1xuICAgICAgICBjb25uZWN0RmlyZXN0b3JlRW11bGF0b3IoXG4gICAgICAgICAgZmlyZXN0b3JlLFxuICAgICAgICAgIGNvbmZpZy5lbXVsYXRvci5maXJlc3RvcmUuaG9zdCxcbiAgICAgICAgICBjb25maWcuZW11bGF0b3IuZmlyZXN0b3JlLnBvcnRcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gSGFiaWxpdGFyIHBlcnNpc3RlbmNpYSBvZmZsaW5lIHNpIGVzdMOhIGNvbmZpZ3VyYWRhIChicm93c2VyLW9ubHk6XG4gICAgICAvLyBlbmFibGVNdWx0aVRhYkluZGV4ZWREYlBlcnNpc3RlbmNlIHJlcXVpZXJlIEluZGV4ZWREQiwgbm8gZXhpc3RlIGVuIE5vZGUpLlxuICAgICAgaWYgKGNvbmZpZy5wZXJzaXN0ZW5jZSAmJiBpc0Jyb3dzZXIpIHtcbiAgICAgICAgZW5hYmxlTXVsdGlUYWJJbmRleGVkRGJQZXJzaXN0ZW5jZShmaXJlc3RvcmUpLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgaWYgKGVyci5jb2RlID09PSAnZmFpbGVkLXByZWNvbmRpdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgJ1tWYWx0ZWNoRmlyZWJhc2VdIFBlcnNpc3RlbmNpYSBubyBkaXNwb25pYmxlOiBtw7psdGlwbGVzIHBlc3Rhw7FhcyBhYmllcnRhcydcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIGlmIChlcnIuY29kZSA9PT0gJ3VuaW1wbGVtZW50ZWQnKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1tWYWx0ZWNoRmlyZWJhc2VdIFBlcnNpc3RlbmNpYSBubyBzb3BvcnRhZGEgZW4gZXN0ZSBuYXZlZ2Fkb3InKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmlyZXN0b3JlO1xuICAgIH0pLFxuXG4gICAgLy8gQXV0aCBjb24gc29wb3J0ZSBwYXJhIGVtdWxhZG9yXG4gICAgcHJvdmlkZUF1dGgoKCkgPT4ge1xuICAgICAgY29uc3QgYXV0aCA9IGdldEF1dGgoKTtcblxuICAgICAgLy8gQ29uZWN0YXIgYSBlbXVsYWRvciBzaSBlc3TDoSBjb25maWd1cmFkb1xuICAgICAgaWYgKGNvbmZpZy5lbXVsYXRvcj8uYXV0aCkge1xuICAgICAgICBjb25uZWN0QXV0aEVtdWxhdG9yKFxuICAgICAgICAgIGF1dGgsXG4gICAgICAgICAgYGh0dHA6Ly8ke2NvbmZpZy5lbXVsYXRvci5hdXRoLmhvc3R9OiR7Y29uZmlnLmVtdWxhdG9yLmF1dGgucG9ydH1gLFxuICAgICAgICAgIHsgZGlzYWJsZVdhcm5pbmdzOiB0cnVlIH1cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF1dGg7XG4gICAgfSksXG5cbiAgICAvLyBTdG9yYWdlIGNvbiBzb3BvcnRlIHBhcmEgZW11bGFkb3JcbiAgICBwcm92aWRlU3RvcmFnZSgoKSA9PiB7XG4gICAgICBjb25zdCBzdG9yYWdlID0gZ2V0U3RvcmFnZSgpO1xuXG4gICAgICAvLyBDb25lY3RhciBhIGVtdWxhZG9yIHNpIGVzdMOhIGNvbmZpZ3VyYWRvXG4gICAgICBpZiAoY29uZmlnLmVtdWxhdG9yPy5zdG9yYWdlKSB7XG4gICAgICAgIGNvbm5lY3RTdG9yYWdlRW11bGF0b3Ioc3RvcmFnZSwgY29uZmlnLmVtdWxhdG9yLnN0b3JhZ2UuaG9zdCwgY29uZmlnLmVtdWxhdG9yLnN0b3JhZ2UucG9ydCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdG9yYWdlO1xuICAgIH0pLFxuICBdO1xuXG4gIC8vIE1lc3NhZ2luZyAoRkNNKSAtIHNvbG8gc2kgZXN0w6EgZXhwbMOtY2l0YW1lbnRlIGhhYmlsaXRhZG8geSBlc3RhbW9zIGVuIGJyb3dzZXIuXG4gIC8vIFJlcXVpZXJlIFNlcnZpY2UgV29ya2VyICsgTm90aWZpY2F0aW9ucyBBUEkg4oaSIHNraXAgdG90YWwgZW4gU1NSL05vZGUuXG4gIGlmIChjb25maWcuZW5hYmxlTWVzc2FnaW5nICYmIGlzQnJvd3Nlcikge1xuICAgIC8vIFByZS1yZWdpc3RyYXIgU1cgY3VzdG9tIGFudGVzIGRlIHF1ZSBGaXJlYmFzZSBsbyBpbnRlbnRlXG4gICAgaWYgKCdzZXJ2aWNlV29ya2VyJyBpbiBuYXZpZ2F0b3IpIHtcbiAgICAgIG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlZ2lzdGVyKCcvZmlyZWJhc2UtbWVzc2FnaW5nLXN3LmpzJykuY2F0Y2goY29uc29sZS5lcnJvcik7XG4gICAgfVxuICAgIHByb3ZpZGVycy5wdXNoKHByb3ZpZGVNZXNzYWdpbmcoKCkgPT4gZ2V0TWVzc2FnaW5nKCkpKTtcbiAgfVxuXG4gIC8vIEFuYWx5dGljcyAoR0E0KSAtIHNvbG8gc2kgZXN0w6EgZXhwbMOtY2l0YW1lbnRlIGhhYmlsaXRhZG8geSBlc3RhbW9zIGVuIGJyb3dzZXIuXG4gIC8vIGdldEFuYWx5dGljcygpIC8gU2NyZWVuVHJhY2tpbmdTZXJ2aWNlIHRvY2FuIHdpbmRvdy9kb2N1bWVudCDihpIgc2tpcCBlbiBTU1IuXG4gIGlmIChjb25maWcuZW5hYmxlQW5hbHl0aWNzICYmIGNvbmZpZy5maXJlYmFzZS5tZWFzdXJlbWVudElkICYmIGlzQnJvd3Nlcikge1xuICAgIHByb3ZpZGVycy5wdXNoKHByb3ZpZGVBbmFseXRpY3MoKCkgPT4gZ2V0QW5hbHl0aWNzKCkpKTtcblxuICAgIC8vIFJvdXRlciB0cmFja2VyIHBhcmEgcGFnZSB2aWV3cyBhdXRvbcOhdGljb3MgKHBvciBkZWZlY3RvIGhhYmlsaXRhZG8pXG4gICAgaWYgKGNvbmZpZy5hbmFseXRpY3NDb25maWc/LmVuYWJsZVBhZ2VWaWV3VHJhY2tpbmcgIT09IGZhbHNlKSB7XG4gICAgICBwcm92aWRlcnMucHVzaChBbmFseXRpY3NSb3V0ZXJUcmFja2VyKTtcbiAgICB9XG5cbiAgICAvLyBFcnJvciBoYW5kbGVyIHBhcmEgdHJhY2tpbmcgYXV0b23DoXRpY28gZGUgZXJyb3Jlc1xuICAgIGlmIChjb25maWcuYW5hbHl0aWNzQ29uZmlnPy5lbmFibGVFcnJvclRyYWNraW5nKSB7XG4gICAgICBwcm92aWRlcnMucHVzaCh7XG4gICAgICAgIHByb3ZpZGU6IEVycm9ySGFuZGxlcixcbiAgICAgICAgdXNlQ2xhc3M6IEFuYWx5dGljc0Vycm9ySGFuZGxlcixcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMocHJvdmlkZXJzKTtcbn1cblxuLyoqXG4gKiBWZXJpZmljYSBzaSBsb3MgZW11bGFkb3JlcyBlc3TDoW4gY29uZmlndXJhZG9zLlxuICpcbiAqIEBwYXJhbSBjb25maWcgLSBDb25maWd1cmFjacOzbiBkZSBGaXJlYmFzZVxuICogQHJldHVybnMgdHJ1ZSBzaSBoYXkgYWwgbWVub3MgdW4gZW11bGFkb3IgY29uZmlndXJhZG9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc0VtdWxhdG9ycyhjb25maWc6IFZhbHRlY2hGaXJlYmFzZUNvbmZpZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gISEoY29uZmlnLmVtdWxhdG9yPy5maXJlc3RvcmUgfHwgY29uZmlnLmVtdWxhdG9yPy5hdXRoIHx8IGNvbmZpZy5lbXVsYXRvcj8uc3RvcmFnZSk7XG59XG4iXX0=